cart-elc

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

FindEigen3.cmake (3509B)


      1 # - Try to find Eigen3 lib
      2 #
      3 # This module supports requiring a minimum version, e.g. you can do
      4 #   find_package(Eigen3 3.1.2)
      5 # to require version 3.1.2 or newer of Eigen3.
      6 #
      7 # Once done this will define
      8 #
      9 #  EIGEN3_FOUND - system has eigen lib with correct version
     10 #  EIGEN3_INCLUDE_DIR - the eigen include directory
     11 #  EIGEN3_VERSION - eigen version
     12 #
     13 # and the following imported target:
     14 #
     15 #  Eigen3::Eigen - The header-only Eigen library
     16 #
     17 # This module reads hints about search locations from 
     18 # the following environment variables:
     19 #
     20 # EIGEN3_ROOT
     21 # EIGEN3_ROOT_DIR
     22 
     23 # Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
     24 # Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr>
     25 # Copyright (c) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
     26 # Redistribution and use is allowed according to the terms of the 2-clause BSD license.
     27 
     28 if(NOT Eigen3_FIND_VERSION)
     29   if(NOT Eigen3_FIND_VERSION_MAJOR)
     30     set(Eigen3_FIND_VERSION_MAJOR 2)
     31   endif()
     32   if(NOT Eigen3_FIND_VERSION_MINOR)
     33     set(Eigen3_FIND_VERSION_MINOR 91)
     34   endif()
     35   if(NOT Eigen3_FIND_VERSION_PATCH)
     36     set(Eigen3_FIND_VERSION_PATCH 0)
     37   endif()
     38 
     39   set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}")
     40 endif()
     41 
     42 macro(_eigen3_check_version)
     43   file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header)
     44 
     45   string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}")
     46   set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}")
     47   string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}")
     48   set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}")
     49   string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}")
     50   set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}")
     51 
     52   set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION})
     53   if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
     54     set(EIGEN3_VERSION_OK FALSE)
     55   else()
     56     set(EIGEN3_VERSION_OK TRUE)
     57   endif()
     58 
     59   if(NOT EIGEN3_VERSION_OK)
     60 
     61     message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, "
     62                    "but at least version ${Eigen3_FIND_VERSION} is required")
     63   endif()
     64 endmacro()
     65 
     66 if (EIGEN3_INCLUDE_DIR)
     67 
     68   # in cache already
     69   _eigen3_check_version()
     70   set(EIGEN3_FOUND ${EIGEN3_VERSION_OK})
     71   set(Eigen3_FOUND ${EIGEN3_VERSION_OK})
     72 
     73 else ()
     74   
     75   # search first if an Eigen3Config.cmake is available in the system,
     76   # if successful this would set EIGEN3_INCLUDE_DIR and the rest of
     77   # the script will work as usual
     78   find_package(Eigen3 ${Eigen3_FIND_VERSION} NO_MODULE QUIET)
     79 
     80   if(NOT EIGEN3_INCLUDE_DIR)
     81     find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library
     82         HINTS
     83         ENV EIGEN3_ROOT 
     84         ENV EIGEN3_ROOT_DIR
     85         PATHS
     86         ${CMAKE_INSTALL_PREFIX}/include
     87         ${KDE4_INCLUDE_DIR}
     88         PATH_SUFFIXES eigen3 eigen
     89       )
     90   endif()
     91 
     92   if(EIGEN3_INCLUDE_DIR)
     93     _eigen3_check_version()
     94   endif()
     95 
     96   include(FindPackageHandleStandardArgs)
     97   find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK)
     98 
     99   mark_as_advanced(EIGEN3_INCLUDE_DIR)
    100 
    101 endif()
    102 
    103 if(EIGEN3_FOUND AND NOT TARGET Eigen3::Eigen)
    104   add_library(Eigen3::Eigen INTERFACE IMPORTED)
    105   set_target_properties(Eigen3::Eigen PROPERTIES
    106     INTERFACE_INCLUDE_DIRECTORIES "${EIGEN3_INCLUDE_DIR}")
    107 endif()