Skip to content
Snippets Groups Projects
Commit 3060d78e authored by Dilawar Singh's avatar Dilawar Singh
Browse files

Updated CMake and FindGSL.

parent 8d590b82
No related branches found
No related tags found
1 merge request!213Update rmoogli.py
...@@ -218,7 +218,7 @@ endif(NOT HDF5_FOUND) ...@@ -218,7 +218,7 @@ endif(NOT HDF5_FOUND)
if(HDF5_FOUND) if(HDF5_FOUND)
add_definitions( -DUSE_HDF5 ) add_definitions( -DUSE_HDF5 )
include_directories( ${HDF5_INCLUDE_DIRS} ) include_directories( ${HDF5_INCLUDE_DIRS} )
foreach(HDF5_LIB ${HDF5_CXX_LIBRARIES} ${HDF5_HL_LIBRARIES} ) foreach(HDF5_LIB ${HDF5_LIBRARIES} )
if(HDF5_LIB) if(HDF5_LIB)
get_filename_component( HDF5_LIB_EXT ${HDF5_LIB} EXT ) get_filename_component( HDF5_LIB_EXT ${HDF5_LIB} EXT )
if(HDF5_LIB_EXT) if(HDF5_LIB_EXT)
...@@ -269,14 +269,11 @@ if(WITH_BOOST) ...@@ -269,14 +269,11 @@ if(WITH_BOOST)
list(APPEND SYSTEM_SHARED_LIBS ${Boost_LIBRARIES}) list(APPEND SYSTEM_SHARED_LIBS ${Boost_LIBRARIES})
endif(WITH_BOOST) endif(WITH_BOOST)
# These libraries could be static of dynamic. # These libraries could be static of dynamic. We need to discrimate between
# When building packages on OBS or launchpad, we build static library of a # these two types because of --whole-archive option. See
# dependencies if a correct version is not found. # BhallaLab/moose-core#66,
# Here we make sure that the correct static version is linked; if a correct
# shared version is found then link the shared version in SYSTEM_SHARED_LIBS.
if(WITH_GSL) if(WITH_GSL)
message(STATUS "Using STATIC gsl libraries: ${GSL_LIBRARIES}") message(STATUS "Using STATIC gsl libraries: ${GSL_LIBRARIES}")
foreach(GSL_LIB ${GSL_LIBRARIES} ) foreach(GSL_LIB ${GSL_LIBRARIES} )
if(GSL_LIB) if(GSL_LIB)
get_filename_component( GSL_LIB_EXT ${GSL_LIB} EXT ) get_filename_component( GSL_LIB_EXT ${GSL_LIB} EXT )
...@@ -351,6 +348,11 @@ list(APPEND MOOSE_LIBRARIES ...@@ -351,6 +348,11 @@ list(APPEND MOOSE_LIBRARIES
basecode basecode
) )
# Make sure to remove duplicates.
list(REMOVE_DUPLICATES STATIC_LIBRARIES)
if(SYSTEM_SHARED_LIBS)
list(REMOVE_DUPLICATES SYSTEM_SHARED_LIBS)
endif( )
# MAC linker does not understand many of gnu-ld options. # MAC linker does not understand many of gnu-ld options.
message( STATUS "Shared libs: ${SYSTEM_SHARED_LIBS}") message( STATUS "Shared libs: ${SYSTEM_SHARED_LIBS}")
......
## # Try to find gnu scientific library GSL
## Try to find gnu scientific library GSL # (see http://www.gnu.org/software/gsl/)
## (see http://www.gnu.org/software/gsl/) # Once run this will define:
## Once run this will define: #
## # GSL_FOUND = system has GSL lib
## GSL_FOUND = system has GSL lib #
## # GSL_LIBRARIES = full path to the libraries
## GSL_LIBRARIES = full path to the libraries # on Unix/Linux with additional linker flags from "gsl-config --libs"
## on Unix/Linux with additional linker flags from "gsl-config --libs" #
## # GSL_INCLUDE_DIRS = where to find headers
## CMAKE_GSL_CXX_FLAGS = Unix compiler flags for GSL, essentially "`gsl-config --cxxflags`" #
## # GSL_USE_STATIC_LIBRARIES = Set it ON if you want to search for static
## GSL_INCLUDE_DIRS = where to find headers # libraries.
## #
## GSL_LINK_DIRECTORIES = link directories, useful for rpath on Unix # Felix Woelk 07/2004
## GSL_EXE_LINKER_FLAGS = rpath on Unix # minor corrections Jan Woetzel
## #
## Felix Woelk 07/2004 # www.mip.informatik.uni-kiel.de
## minor corrections Jan Woetzel # --------------------------------
## #
## www.mip.informatik.uni-kiel.de # Friday 18 November 2016 09:05:56 AM IST
## -------------------------------- # MODIFICATIONS: ## dilawars@ncbs.res.in, For the MOOSE project.
## # This version does not use gsl-config file.
#
# Set this envrionment variable to search in this path first.
message( STATUS "GSL_ROOT_DIR value $ENV{GSL_ROOT_DIR}") message( STATUS "GSL_ROOT_DIR value $ENV{GSL_ROOT_DIR}")
IF(WIN32) IF(WIN32)
SET(GSL_MINGW_PREFIX "c:/msys/local" ) SET(GSL_MINGW_PREFIX "c:/msys/local" )
SET(GSL_MSVC_PREFIX "$ENV{LIB_DIR}") SET(GSL_MSVC_PREFIX "$ENV{LIB_DIR}")
FIND_LIBRARY(GSL_LIB gsl PATHS FIND_LIBRARY(GSL_LIB gsl PATHS
${GSL_MINGW_PREFIX}/lib ${GSL_MINGW_PREFIX}/lib
${GSL_MSVC_PREFIX}/lib ${GSL_MSVC_PREFIX}/lib
) )
#MSVC version of the lib is just called 'cblas' #MSVC version of the lib is just called 'cblas'
FIND_LIBRARY(GSLCBLAS_LIB gslcblas cblas PATHS FIND_LIBRARY(GSLCBLAS_LIB gslcblas cblas PATHS
${GSL_MINGW_PREFIX}/lib ${GSL_MINGW_PREFIX}/lib
${GSL_MSVC_PREFIX}/lib ${GSL_MSVC_PREFIX}/lib
) )
FIND_PATH(GSL_INCLUDE_DIRS gsl/gsl_blas.h FIND_PATH(GSL_INCLUDE_DIRS gsl/gsl_blas.h
${GSL_MINGW_PREFIX}/include ${GSL_MINGW_PREFIX}/include
${GSL_MSVC_PREFIX}/include ${GSL_MSVC_PREFIX}/include
) )
IF (GSL_LIB AND GSLCBLAS_LIB)
SET (GSL_LIBRARIES ${GSL_LIB} ${GSLCBLAS_LIB})
ENDIF (GSL_LIB AND GSLCBLAS_LIB)
IF (GSL_LIB AND GSLCBLAS_LIB)
SET (GSL_LIBRARIES ${GSL_LIB} ${GSLCBLAS_LIB})
ENDIF (GSL_LIB AND GSLCBLAS_LIB)
ELSE(WIN32) ELSE(WIN32)
IF(UNIX)
SET(GSL_CONFIG_PREFER_PATH "$ENV{GSL_ROOT_DIR}/bin")
# GSL_CONFIG must be cleared. This script may be called again after installing
# the proper version of gsl
if(EXISTS "$ENV{GSL_ROOT_DIR}")
set(GSL_CONFIG "$ENV{GSL_ROOT_DIR}/bin/gsl-config")
MESSAGE(STATUS "gsl-config from environment variable: ${GSL_CONFIG}")
set(GSL_INCLUDE_DIRS)
set(GSL_LIBRARIES)
set(GSL_VERSION)
set(GSL_CONFIG_LIBS)
else()
FIND_PROGRAM(GSL_CONFIG gsl-config
${GSL_CONFIG_PREFER_PATH}
$ENV{LIB_DIR}/bin
/usr/local/bin/
/usr/bin/
)
endif()
IF (GSL_CONFIG)
# set CXXFLAGS to be fed into CXX_FLAGS by the user:
SET(GSL_CXX_FLAGS "`${GSL_CONFIG} --cflags`")
# set INCLUDE_DIRS to prefix+include
EXEC_PROGRAM(${GSL_CONFIG}
ARGS --prefix
OUTPUT_VARIABLE GSL_PREFIX)
SET(GSL_INCLUDE_DIRS ${GSL_PREFIX}/include CACHE STRING INTERNAL)
# set link libraries and link flags
EXEC_PROGRAM(${GSL_CONFIG}
ARGS --libs
OUTPUT_VARIABLE GSL_LIBRARIES)
## extract link dirs for rpath
EXEC_PROGRAM(${GSL_CONFIG}
ARGS --libs
OUTPUT_VARIABLE GSL_CONFIG_LIBS )
EXEC_PROGRAM(${GSL_CONFIG}
ARGS --version
OUTPUT_VARIABLE GSL_VERSION
)
## split off the link dirs (for rpath)
## use regular expression to match wildcard equivalent "-L*<endchar>"
## with <endchar> is a space or a semicolon
STRING(REGEX MATCHALL "[-][L]([^ ;])+"
GSL_LINK_DIRECTORIES_WITH_PREFIX
"${GSL_CONFIG_LIBS}" )
# MESSAGE("DBG GSL_LINK_DIRECTORIES_WITH_PREFIX=${GSL_LINK_DIRECTORIES_WITH_PREFIX}")
## remove prefix -L because we need the pure directory for LINK_DIRECTORIES IF(GSL_USE_STATIC_LIBRARIES)
SET(GSL_LIB_NAMES libgsl.a)
IF (GSL_LINK_DIRECTORIES_WITH_PREFIX) SET(GSL_CBLAS_LIB_NAMES libgslclabs.a)
STRING(REGEX REPLACE "[-][L]" "" GSL_LINK_DIRECTORIES ${GSL_LINK_DIRECTORIES_WITH_PREFIX} ) ELSE(GSL_USE_STATIC_LIBRARIES)
ENDIF (GSL_LINK_DIRECTORIES_WITH_PREFIX) SET(GSL_LIB_NAMES gsl)
SET(GSL_EXE_LINKER_FLAGS "-Wl,-rpath,${GSL_LINK_DIRECTORIES}" CACHE STRING INTERNAL) SET(GSL_CBLAS_LIB_NAMES gslcblas)
# MESSAGE("DBG GSL_LINK_DIRECTORIES=${GSL_LINK_DIRECTORIES}") ENDIF( )
# MESSAGE("DBG GSL_EXE_LINKER_FLAGS=${GSL_EXE_LINKER_FLAGS}")
FIND_LIBRARY(GSL_LIB
NAMES ${GSL_LIB_NAMES}
PATHS
$ENV{GSL_ROOT_DIR}/lib $ENV{GSL_ROOT_DIR}/lib64
/opt/lib /opt/lib64
)
FIND_LIBRARY(GSLCBLAS_LIB
NAMES ${GSL_CBLAS_LIB_NAMES}
PATHS
$ENV{GSL_ROOT_DIR}/lib $ENV{GSL_ROOT_DIR}/lib64
/opt/lib /opt/lib64
)
FIND_PATH(GSL_INCLUDE_DIRS NAMES gsl/gsl_blas.h gsl/gsl.h
PATHS
$ENV{GSL_ROOT_DIR}/include $ENV{GSL_ROOT_DIR}/include
/opt/include /opt/include
)
IF (GSL_LIB AND GSLCBLAS_LIB)
SET (GSL_LIBRARIES ${GSL_LIB} ${GSLCBLAS_LIB})
ENDIF (GSL_LIB AND GSLCBLAS_LIB)
# ADD_DEFINITIONS("-DHAVE_GSL")
# SET(GSL_DEFINITIONS "-DHAVE_GSL")
MARK_AS_ADVANCED(
GSL_CXX_FLAGS
GSL_INCLUDE_DIRS
GSL_LIBRARIES
GSL_LINK_DIRECTORIES
GSL_DEFINITIONS
)
ELSE(GSL_CONFIG)
IF (GSL_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find gsl-config. Please set it manually. GSL_CONFIG=${GSL_CONFIG}")
ELSE (GSL_FIND_REQUIRED)
MESSAGE(STATUS "Could not find GSL")
# TODO: Avoid cmake complaints if GSL is not found
ENDIF (GSL_FIND_REQUIRED)
ENDIF(GSL_CONFIG)
ENDIF(UNIX)
ENDIF(WIN32) ENDIF(WIN32)
IF(GSL_LIBRARIES) IF(GSL_LIBRARIES)
IF(GSL_INCLUDE_DIRS OR GSL_CXX_FLAGS) IF(GSL_INCLUDE_DIRS OR GSL_CXX_FLAGS)
SET(GSL_FOUND 1)
SET(GSL_FOUND 1) MESSAGE(STATUS "Found GSL ${GSL_LIBRARIES}")
ENDIF(GSL_INCLUDE_DIRS OR GSL_CXX_FLAGS)
MESSAGE(STATUS "Using GSL from ${GSL_PREFIX}")
ENDIF(GSL_INCLUDE_DIRS OR GSL_CXX_FLAGS)
ENDIF(GSL_LIBRARIES) ENDIF(GSL_LIBRARIES)
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment