cart-elc

Source code for CART-ELC
git clone git://git.laack.co/cart-elc.git
Log | Files | Refs | README | LICENSE

FindGSL.cmake (4992B)


      1 # Try to find gnu scientific library GSL
      2 # See 
      3 # http://www.gnu.org/software/gsl/  and
      4 # http://gnuwin32.sourceforge.net/packages/gsl.htm
      5 #
      6 # Once run this will define: 
      7 # 
      8 # GSL_FOUND       = system has GSL lib
      9 #
     10 # GSL_LIBRARIES   = full path to the libraries
     11 #    on Unix/Linux with additional linker flags from "gsl-config --libs"
     12 # 
     13 # CMAKE_GSL_CXX_FLAGS  = Unix compiler flags for GSL, essentially "`gsl-config --cxxflags`"
     14 #
     15 # GSL_INCLUDE_DIR      = where to find headers 
     16 #
     17 # GSL_LINK_DIRECTORIES = link directories, useful for rpath on Unix
     18 # GSL_EXE_LINKER_FLAGS = rpath on Unix
     19 #
     20 # Felix Woelk 07/2004
     21 # Jan Woetzel
     22 #
     23 # www.mip.informatik.uni-kiel.de
     24 # --------------------------------
     25 
     26 if(WIN32)
     27   # JW tested with gsl-1.8, Windows XP, MSVS 7.1
     28   set(GSL_POSSIBLE_ROOT_DIRS
     29     ${GSL_ROOT_DIR}
     30     $ENV{GSL_ROOT_DIR}
     31     ${GSL_DIR}
     32     ${GSL_HOME}    
     33     $ENV{GSL_DIR}
     34     $ENV{GSL_HOME}
     35     $ENV{EXTRA}
     36     "C:/Program Files/GnuWin32"
     37     )
     38   find_path(GSL_INCLUDE_DIR
     39     NAMES gsl/gsl_cdf.h gsl/gsl_randist.h
     40     PATHS ${GSL_POSSIBLE_ROOT_DIRS}
     41     PATH_SUFFIXES include
     42     DOC "GSL header include dir"
     43     )
     44   
     45   find_library(GSL_GSL_LIBRARY
     46     NAMES libgsl.dll.a gsl libgsl
     47     PATHS  ${GSL_POSSIBLE_ROOT_DIRS}
     48     PATH_SUFFIXES lib
     49     DOC "GSL library" )
     50   
     51   if(NOT GSL_GSL_LIBRARY)
     52 	find_file(GSL_GSL_LIBRARY
     53 		NAMES libgsl.dll.a
     54 		PATHS  ${GSL_POSSIBLE_ROOT_DIRS}
     55 		PATH_SUFFIXES lib
     56 		DOC "GSL library")
     57   endif()
     58   
     59   find_library(GSL_GSLCBLAS_LIBRARY
     60     NAMES libgslcblas.dll.a gslcblas libgslcblas
     61     PATHS  ${GSL_POSSIBLE_ROOT_DIRS}
     62     PATH_SUFFIXES lib
     63     DOC "GSL cblas library dir" )
     64   
     65   if(NOT GSL_GSLCBLAS_LIBRARY)
     66 	find_file(GSL_GSLCBLAS_LIBRARY
     67 		NAMES libgslcblas.dll.a
     68 		PATHS  ${GSL_POSSIBLE_ROOT_DIRS}
     69 		PATH_SUFFIXES lib
     70 		DOC "GSL library")
     71   endif()
     72   
     73   set(GSL_LIBRARIES ${GSL_GSL_LIBRARY})
     74 
     75   #message("DBG\n"
     76   #  "GSL_GSL_LIBRARY=${GSL_GSL_LIBRARY}\n"
     77   #  "GSL_GSLCBLAS_LIBRARY=${GSL_GSLCBLAS_LIBRARY}\n"
     78   #  "GSL_LIBRARIES=${GSL_LIBRARIES}")
     79 
     80 
     81 else(WIN32)
     82   
     83   if(UNIX) 
     84     set(GSL_CONFIG_PREFER_PATH 
     85       "$ENV{GSL_DIR}/bin"
     86       "$ENV{GSL_DIR}"
     87       "$ENV{GSL_HOME}/bin" 
     88       "$ENV{GSL_HOME}" 
     89       CACHE STRING "preferred path to GSL (gsl-config)")
     90     find_program(GSL_CONFIG gsl-config
     91       ${GSL_CONFIG_PREFER_PATH}
     92       /usr/bin/
     93       )
     94     # message("DBG GSL_CONFIG ${GSL_CONFIG}")
     95     
     96     if (GSL_CONFIG) 
     97       # set CXXFLAGS to be fed into CXX_FLAGS by the user:
     98       set(GSL_CXX_FLAGS "`${GSL_CONFIG} --cflags`")
     99       
    100       # set INCLUDE_DIRS to prefix+include
    101       exec_program(${GSL_CONFIG}
    102         ARGS --prefix
    103         OUTPUT_VARIABLE GSL_PREFIX)
    104       set(GSL_INCLUDE_DIR ${GSL_PREFIX}/include CACHE STRING INTERNAL)
    105 
    106       # set link libraries and link flags
    107       #set(GSL_LIBRARIES "`${GSL_CONFIG} --libs`")
    108       exec_program(${GSL_CONFIG}
    109         ARGS --libs
    110         OUTPUT_VARIABLE GSL_LIBRARIES )
    111         
    112       # extract link dirs for rpath  
    113       exec_program(${GSL_CONFIG}
    114         ARGS --libs
    115         OUTPUT_VARIABLE GSL_CONFIG_LIBS )
    116       
    117       # extract version
    118       exec_program(${GSL_CONFIG}
    119         ARGS --version
    120         OUTPUT_VARIABLE GSL_FULL_VERSION )
    121       
    122       # split version as major/minor
    123       string(REGEX MATCH "(.)\\..*" GSL_VERSION_MAJOR_ "${GSL_FULL_VERSION}")
    124       set(GSL_VERSION_MAJOR ${CMAKE_MATCH_1})
    125       string(REGEX MATCH ".\\.(.*)" GSL_VERSION_MINOR_ "${GSL_FULL_VERSION}")
    126       set(GSL_VERSION_MINOR ${CMAKE_MATCH_1})
    127 
    128       # split off the link dirs (for rpath)
    129       # use regular expression to match wildcard equivalent "-L*<endchar>"
    130       # with <endchar> is a space or a semicolon
    131       string(REGEX MATCHALL "[-][L]([^ ;])+" 
    132         GSL_LINK_DIRECTORIES_WITH_PREFIX 
    133         "${GSL_CONFIG_LIBS}" )
    134       #      message("DBG  GSL_LINK_DIRECTORIES_WITH_PREFIX=${GSL_LINK_DIRECTORIES_WITH_PREFIX}")
    135 
    136       # remove prefix -L because we need the pure directory for LINK_DIRECTORIES
    137       
    138       if (GSL_LINK_DIRECTORIES_WITH_PREFIX)
    139         string(REGEX REPLACE "[-][L]" "" GSL_LINK_DIRECTORIES ${GSL_LINK_DIRECTORIES_WITH_PREFIX} )
    140       endif (GSL_LINK_DIRECTORIES_WITH_PREFIX)
    141       set(GSL_EXE_LINKER_FLAGS "-Wl,-rpath,${GSL_LINK_DIRECTORIES}" CACHE STRING INTERNAL)
    142       #      message("DBG  GSL_LINK_DIRECTORIES=${GSL_LINK_DIRECTORIES}")
    143       #      message("DBG  GSL_EXE_LINKER_FLAGS=${GSL_EXE_LINKER_FLAGS}")
    144 
    145       #      add_definitions("-DHAVE_GSL")
    146       #      set(GSL_DEFINITIONS "-DHAVE_GSL")
    147       mark_as_advanced(
    148         GSL_CXX_FLAGS
    149         GSL_INCLUDE_DIR
    150         GSL_LIBRARIES
    151         GSL_LINK_DIRECTORIES
    152         GSL_DEFINITIONS
    153         )
    154       message(STATUS "Using GSL from ${GSL_PREFIX}")
    155       
    156     else(GSL_CONFIG)
    157       message("FindGSL.cmake: gsl-config not found. Please set it manually. GSL_CONFIG=${GSL_CONFIG}")
    158     endif(GSL_CONFIG)
    159 
    160   endif(UNIX)
    161 endif(WIN32)
    162 
    163 
    164 if(GSL_LIBRARIES)
    165   if(GSL_INCLUDE_DIR OR GSL_CXX_FLAGS)
    166 
    167     set(GSL_FOUND 1)
    168     
    169   endif(GSL_INCLUDE_DIR OR GSL_CXX_FLAGS)
    170 endif(GSL_LIBRARIES)