Ancient versions of CMake required else(), endif(), and similar block termination commands to have arguments matching the command starting the block. This is no longer the preferred style.
171 lines
4.9 KiB
CMake
171 lines
4.9 KiB
CMake
# Try to find gnu scientific library GSL
|
|
# See
|
|
# http://www.gnu.org/software/gsl/ and
|
|
# http://gnuwin32.sourceforge.net/packages/gsl.htm
|
|
#
|
|
# 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
|
|
# Jan Woetzel
|
|
#
|
|
# www.mip.informatik.uni-kiel.de
|
|
# --------------------------------
|
|
|
|
IF(WIN32)
|
|
# JW tested with gsl-1.8, Windows XP, MSVS 7.1
|
|
SET(GSL_POSSIBLE_ROOT_DIRS
|
|
${GSL_ROOT_DIR}
|
|
$ENV{GSL_ROOT_DIR}
|
|
${GSL_DIR}
|
|
${GSL_HOME}
|
|
$ENV{GSL_DIR}
|
|
$ENV{GSL_HOME}
|
|
$ENV{EXTRA}
|
|
"C:/Program Files/GnuWin32"
|
|
)
|
|
FIND_PATH(GSL_INCLUDE_DIR
|
|
NAMES gsl/gsl_cdf.h gsl/gsl_randist.h
|
|
PATHS ${GSL_POSSIBLE_ROOT_DIRS}
|
|
PATH_SUFFIXES include
|
|
DOC "GSL header include dir"
|
|
)
|
|
|
|
FIND_LIBRARY(GSL_GSL_LIBRARY
|
|
NAMES libgsl.dll.a gsl libgsl
|
|
PATHS ${GSL_POSSIBLE_ROOT_DIRS}
|
|
PATH_SUFFIXES lib
|
|
DOC "GSL library" )
|
|
|
|
if(NOT GSL_GSL_LIBRARY)
|
|
FIND_FILE(GSL_GSL_LIBRARY
|
|
NAMES libgsl.dll.a
|
|
PATHS ${GSL_POSSIBLE_ROOT_DIRS}
|
|
PATH_SUFFIXES lib
|
|
DOC "GSL library")
|
|
endif()
|
|
|
|
FIND_LIBRARY(GSL_GSLCBLAS_LIBRARY
|
|
NAMES libgslcblas.dll.a gslcblas libgslcblas
|
|
PATHS ${GSL_POSSIBLE_ROOT_DIRS}
|
|
PATH_SUFFIXES lib
|
|
DOC "GSL cblas library dir" )
|
|
|
|
if(NOT GSL_GSLCBLAS_LIBRARY)
|
|
FIND_FILE(GSL_GSLCBLAS_LIBRARY
|
|
NAMES libgslcblas.dll.a
|
|
PATHS ${GSL_POSSIBLE_ROOT_DIRS}
|
|
PATH_SUFFIXES lib
|
|
DOC "GSL library")
|
|
endif()
|
|
|
|
SET(GSL_LIBRARIES ${GSL_GSL_LIBRARY})
|
|
|
|
#MESSAGE("DBG\n"
|
|
# "GSL_GSL_LIBRARY=${GSL_GSL_LIBRARY}\n"
|
|
# "GSL_GSLCBLAS_LIBRARY=${GSL_GSLCBLAS_LIBRARY}\n"
|
|
# "GSL_LIBRARIES=${GSL_LIBRARIES}")
|
|
|
|
|
|
ELSE(WIN32)
|
|
|
|
IF(UNIX)
|
|
SET(GSL_CONFIG_PREFER_PATH
|
|
"$ENV{GSL_DIR}/bin"
|
|
"$ENV{GSL_DIR}"
|
|
"$ENV{GSL_HOME}/bin"
|
|
"$ENV{GSL_HOME}"
|
|
CACHE STRING "preferred path to GSL (gsl-config)")
|
|
FIND_PROGRAM(GSL_CONFIG gsl-config
|
|
${GSL_CONFIG_PREFER_PATH}
|
|
/usr/bin/
|
|
)
|
|
# 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`")
|
|
|
|
# set INCLUDE_DIRS to prefix+include
|
|
EXEC_PROGRAM(${GSL_CONFIG}
|
|
ARGS --prefix
|
|
OUTPUT_VARIABLE GSL_PREFIX)
|
|
SET(GSL_INCLUDE_DIR ${GSL_PREFIX}/include CACHE STRING INTERNAL)
|
|
|
|
# set link libraries and link flags
|
|
#SET(GSL_LIBRARIES "`${GSL_CONFIG} --libs`")
|
|
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 )
|
|
|
|
# extract version
|
|
EXEC_PROGRAM(${GSL_CONFIG}
|
|
ARGS --version
|
|
OUTPUT_VARIABLE GSL_FULL_VERSION )
|
|
|
|
# split version as major/minor
|
|
STRING(REGEX MATCH "(.)\\..*" GSL_VERSION_MAJOR_ "${GSL_FULL_VERSION}")
|
|
SET(GSL_VERSION_MAJOR ${CMAKE_MATCH_1})
|
|
STRING(REGEX MATCH ".\\.(.*)" GSL_VERSION_MINOR_ "${GSL_FULL_VERSION}")
|
|
SET(GSL_VERSION_MINOR ${CMAKE_MATCH_1})
|
|
|
|
# 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_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}")
|
|
|
|
# ADD_DEFINITIONS("-DHAVE_GSL")
|
|
# SET(GSL_DEFINITIONS "-DHAVE_GSL")
|
|
MARK_AS_ADVANCED(
|
|
GSL_CXX_FLAGS
|
|
GSL_INCLUDE_DIR
|
|
GSL_LIBRARIES
|
|
GSL_LINK_DIRECTORIES
|
|
GSL_DEFINITIONS
|
|
)
|
|
MESSAGE(STATUS "Using GSL from ${GSL_PREFIX}")
|
|
|
|
ELSE(GSL_CONFIG)
|
|
MESSAGE("FindGSL.cmake: gsl-config not found. Please set it manually. GSL_CONFIG=${GSL_CONFIG}")
|
|
ENDIF(GSL_CONFIG)
|
|
|
|
ENDIF(UNIX)
|
|
ENDIF(WIN32)
|
|
|
|
|
|
IF(GSL_LIBRARIES)
|
|
IF(GSL_INCLUDE_DIR OR GSL_CXX_FLAGS)
|
|
|
|
SET(GSL_FOUND 1)
|
|
|
|
ENDIF(GSL_INCLUDE_DIR OR GSL_CXX_FLAGS)
|
|
ENDIF(GSL_LIBRARIES)
|