2007-01-09 02:39:15 +00:00
##
## Try to find gnu scientific library GSL
## (see http://www.gnu.org/software/gsl/)
## Once run this will define:
##
## GSL_FOUND = system has GSL lib
##
## GSL_LIBRARIES = full path to the libraries
## on Unix/Linux with additional linker flags from "gsl-config --libs"
##
## CMAKE_GSL_CXX_FLAGS = Unix compiler flags for GSL, essentially "`gsl-config --cxxflags`"
##
## GSL_INCLUDE_DIR = where to find headers
##
## GSL_LINK_DIRECTORIES = link directories, useful for rpath on Unix
## GSL_EXE_LINKER_FLAGS = rpath on Unix
##
## Felix Woelk 07/2004
## minor corrections Jan Woetzel
##
## www.mip.informatik.uni-kiel.de
## --------------------------------
##
IF ( WIN32 )
2007-10-11 18:06:07 +00:00
FIND_PATH ( GSL_INCLUDE_DIR gsl/gsl_blas.h
2012-08-06 10:11:53 +02:00
$ { L I B _ D I R } / i n c l u d e
2010-10-27 23:58:43 +00:00
$ E N V { I N C L U D E }
2007-10-01 00:13:34 +00:00
)
2007-01-09 02:39:15 +00:00
2009-08-02 15:28:05 +00:00
FIND_LIBRARY ( GSL_LIB gsl PATHS
2012-08-06 10:11:53 +02:00
$ { L I B _ D I R } / l i b
2010-10-27 23:58:43 +00:00
$ E N V { L I B }
2009-08-02 15:28:05 +00:00
)
2010-02-03 12:59:32 +00:00
FIND_LIBRARY ( GSLCBLAS_LIB gslcblas cblas PATHS
2012-08-06 10:11:53 +02:00
$ { L I B _ D I R } / l i b
2010-10-27 23:58:43 +00:00
$ E N V { L I B }
2010-02-03 12:59:32 +00:00
)
SET ( GSL_LIBRARIES ${ GSL_LIB } ${ GSLCBLAS_LIB } )
2007-01-09 02:39:15 +00:00
ELSE ( WIN32 )
IF ( UNIX )
2010-10-30 19:37:00 +00:00
2010-10-16 14:52:43 +00:00
# try to use framework on mac
2010-10-30 19:37:00 +00:00
# want clean framework path, not unix compatibility path
2010-10-16 14:52:43 +00:00
IF ( APPLE )
2010-10-30 19:37:00 +00:00
IF ( CMAKE_FIND_FRAMEWORK MATCHES "FIRST"
O R C M A K E _ F R A M E W O R K _ P A T H M A T C H E S " O N L Y "
O R N O T C M A K E _ F I N D _ F R A M E W O R K )
SET ( CMAKE_FIND_FRAMEWORK_save ${ CMAKE_FIND_FRAMEWORK } CACHE STRING "" FORCE )
SET ( CMAKE_FIND_FRAMEWORK "ONLY" CACHE STRING "" FORCE )
FIND_LIBRARY ( GSL_LIBRARIES GSL )
IF ( GSL_LIBRARIES )
# they're all the same in a framework
2010-10-30 20:58:41 +00:00
SET ( GSL_INCLUDE_DIR ${ GSL_LIBRARIES } /Headers CACHE PATH "Path to GSL header files." )
SET ( GSL_CONFIG ${ GSL_LIBRARIES } /Programs/gsl-config CACHE FILEPATH "Path to gsl-config." )
2010-10-30 19:37:00 +00:00
ENDIF ( GSL_LIBRARIES )
SET ( CMAKE_FIND_FRAMEWORK ${ CMAKE_FIND_FRAMEWORK_save } CACHE STRING "" FORCE )
ENDIF ( )
2010-10-16 14:52:43 +00:00
ENDIF ( APPLE )
2010-10-30 19:37:00 +00:00
2010-10-30 20:58:41 +00:00
IF ( NOT GSL_INCLUDE_DIR OR NOT GSL_LIBRARIES OR NOT GSL_CONFIG )
2010-10-30 19:37:00 +00:00
# didn't find OS X framework, or was set by user
SET ( GSL_CONFIG_PREFER_PATH "$ENV{GSL_HOME}/bin" CACHE STRING "preferred path to GSL (gsl-config)" )
FIND_PROGRAM ( GSL_CONFIG gsl-config
$ { G S L _ C O N F I G _ P R E F E R _ P A T H }
/ u s r / l o c a l / b i n /
/ u s r / b i n /
)
# MESSAGE("DBG GSL_CONFIG ${GSL_CONFIG}")
IF ( GSL_CONFIG )
# set CXXFLAGS to be fed into CXX_FLAGS by the user:
SET ( GSL_CXX_FLAGS "`${GSL_CONFIG} --cflags`" )
2007-01-09 02:39:15 +00:00
2010-10-30 19:37:00 +00:00
# set INCLUDE_DIRS to prefix+include
EXEC_PROGRAM ( ${ GSL_CONFIG }
A R G S - - p r e f i x
O U T P U T _ V A R I A B L E G S L _ P R E F I X )
SET ( GSL_INCLUDE_DIR ${ GSL_PREFIX } /include CACHE STRING INTERNAL )
# set link libraries and link flags
EXEC_PROGRAM ( ${ GSL_CONFIG }
A R G S - - l i b s
O U T P U T _ V A R I A B L E G S L _ L I B R A R I E S )
2007-01-09 02:39:15 +00:00
2010-10-30 19:37:00 +00:00
## extract link dirs for rpath
EXEC_PROGRAM ( ${ GSL_CONFIG }
A R G S $ { L I B S _ A R G }
O U T P U T _ V A R I A B L E G S L _ C O N F I G _ L I B S )
## 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]([^ ;])+"
G S L _ L I N K _ D I R E C T O R I E S _ W I T H _ P R E F I X
" $ { G S L _ C O N F I G _ L I B S } " )
2007-01-09 02:39:15 +00:00
# MESSAGE("DBG GSL_LINK_DIRECTORIES_WITH_PREFIX=${GSL_LINK_DIRECTORIES_WITH_PREFIX}")
2010-10-30 19:37:00 +00:00
## remove prefix -L because we need the pure directory for LINK_DIRECTORIES
2007-01-09 02:39:15 +00:00
2010-10-30 19:37:00 +00:00
IF ( GSL_LINK_DIRECTORIES_WITH_PREFIX )
STRING ( REGEX REPLACE "[-][L]" "" GSL_LINK_DIRECTORIES ${ GSL_LINK_DIRECTORIES_WITH_PREFIX } )
ENDIF ( GSL_LINK_DIRECTORIES_WITH_PREFIX )
SET ( GSL_EXE_LINKER_FLAGS "-Wl,-rpath,${GSL_LINK_DIRECTORIES}" CACHE STRING INTERNAL )
# MESSAGE("DBG GSL_LINK_DIRECTORIES=${GSL_LINK_DIRECTORIES}")
# MESSAGE("DBG GSL_EXE_LINKER_FLAGS=${GSL_EXE_LINKER_FLAGS}")
2017-08-29 13:36:54 +10:00
# ADD_DEFINITIONS(-DHAVE_GSL)
2010-10-30 19:37:00 +00:00
# SET(GSL_DEFINITIONS "-DHAVE_GSL")
MARK_AS_ADVANCED (
G S L _ C X X _ F L A G S
G S L _ I N C L U D E _ D I R
G S L _ L I B R A R I E S
G S L _ L I N K _ D I R E C T O R I E S
G S L _ D E F I N I T I O N S
)
2007-01-09 02:39:15 +00:00
2010-10-30 19:37:00 +00:00
ELSE ( GSL_CONFIG )
2017-02-28 20:03:48 +00:00
MESSAGE ( FATAL_ERROR "FindGSL.cmake: gsl-config not found. Please install the libgsl development libraries or set the path with -DGSL_CONFIG=/path/to/gsl-config." )
2010-10-30 19:37:00 +00:00
ENDIF ( GSL_CONFIG )
2010-10-30 20:58:41 +00:00
ENDIF ( NOT GSL_INCLUDE_DIR OR NOT GSL_LIBRARIES OR NOT GSL_CONFIG )
2007-01-09 02:39:15 +00:00
ENDIF ( UNIX )
ENDIF ( WIN32 )
IF ( GSL_LIBRARIES )
IF ( GSL_INCLUDE_DIR OR GSL_CXX_FLAGS )
SET ( GSL_FOUND 1 )
2010-10-30 14:27:23 +00:00
MESSAGE ( STATUS "Found GSL: ${GSL_LIBRARIES}" )
2007-01-09 02:39:15 +00:00
ENDIF ( GSL_INCLUDE_DIR OR GSL_CXX_FLAGS )
ENDIF ( GSL_LIBRARIES )