1*bf2c3715SXin Li# - Try to find Eigen2 lib 2*bf2c3715SXin Li# 3*bf2c3715SXin Li# This module supports requiring a minimum version, e.g. you can do 4*bf2c3715SXin Li# find_package(Eigen2 2.0.3) 5*bf2c3715SXin Li# to require version 2.0.3 to newer of Eigen2. 6*bf2c3715SXin Li# 7*bf2c3715SXin Li# Once done this will define 8*bf2c3715SXin Li# 9*bf2c3715SXin Li# EIGEN2_FOUND - system has eigen lib with correct version 10*bf2c3715SXin Li# EIGEN2_INCLUDE_DIR - the eigen include directory 11*bf2c3715SXin Li# EIGEN2_VERSION - eigen version 12*bf2c3715SXin Li 13*bf2c3715SXin Li# Copyright (c) 2006, 2007 Montel Laurent, <[email protected]> 14*bf2c3715SXin Li# Copyright (c) 2008, 2009 Gael Guennebaud, <[email protected]> 15*bf2c3715SXin Li# Redistribution and use is allowed according to the terms of the BSD license. 16*bf2c3715SXin Li 17*bf2c3715SXin Liif(NOT Eigen2_FIND_VERSION) 18*bf2c3715SXin Li if(NOT Eigen2_FIND_VERSION_MAJOR) 19*bf2c3715SXin Li set(Eigen2_FIND_VERSION_MAJOR 2) 20*bf2c3715SXin Li endif() 21*bf2c3715SXin Li if(NOT Eigen2_FIND_VERSION_MINOR) 22*bf2c3715SXin Li set(Eigen2_FIND_VERSION_MINOR 0) 23*bf2c3715SXin Li endif() 24*bf2c3715SXin Li if(NOT Eigen2_FIND_VERSION_PATCH) 25*bf2c3715SXin Li set(Eigen2_FIND_VERSION_PATCH 0) 26*bf2c3715SXin Li endif() 27*bf2c3715SXin Li 28*bf2c3715SXin Li set(Eigen2_FIND_VERSION "${Eigen2_FIND_VERSION_MAJOR}.${Eigen2_FIND_VERSION_MINOR}.${Eigen2_FIND_VERSION_PATCH}") 29*bf2c3715SXin Liendif() 30*bf2c3715SXin Li 31*bf2c3715SXin Limacro(_eigen2_check_version) 32*bf2c3715SXin Li file(READ "${EIGEN2_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen2_version_header) 33*bf2c3715SXin Li 34*bf2c3715SXin Li string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen2_world_version_match "${_eigen2_version_header}") 35*bf2c3715SXin Li set(EIGEN2_WORLD_VERSION "${CMAKE_MATCH_1}") 36*bf2c3715SXin Li string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen2_major_version_match "${_eigen2_version_header}") 37*bf2c3715SXin Li set(EIGEN2_MAJOR_VERSION "${CMAKE_MATCH_1}") 38*bf2c3715SXin Li string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen2_minor_version_match "${_eigen2_version_header}") 39*bf2c3715SXin Li set(EIGEN2_MINOR_VERSION "${CMAKE_MATCH_1}") 40*bf2c3715SXin Li 41*bf2c3715SXin Li set(EIGEN2_VERSION ${EIGEN2_WORLD_VERSION}.${EIGEN2_MAJOR_VERSION}.${EIGEN2_MINOR_VERSION}) 42*bf2c3715SXin Li if((${EIGEN2_WORLD_VERSION} NOTEQUAL 2) OR (${EIGEN2_MAJOR_VERSION} GREATER 10) OR (${EIGEN2_VERSION} VERSION_LESS ${Eigen2_FIND_VERSION})) 43*bf2c3715SXin Li set(EIGEN2_VERSION_OK FALSE) 44*bf2c3715SXin Li else() 45*bf2c3715SXin Li set(EIGEN2_VERSION_OK TRUE) 46*bf2c3715SXin Li endif() 47*bf2c3715SXin Li 48*bf2c3715SXin Li if(NOT EIGEN2_VERSION_OK) 49*bf2c3715SXin Li 50*bf2c3715SXin Li message(STATUS "Eigen2 version ${EIGEN2_VERSION} found in ${EIGEN2_INCLUDE_DIR}, " 51*bf2c3715SXin Li "but at least version ${Eigen2_FIND_VERSION} is required") 52*bf2c3715SXin Li endif() 53*bf2c3715SXin Liendmacro() 54*bf2c3715SXin Li 55*bf2c3715SXin Liif (EIGEN2_INCLUDE_DIR) 56*bf2c3715SXin Li 57*bf2c3715SXin Li # in cache already 58*bf2c3715SXin Li _eigen2_check_version() 59*bf2c3715SXin Li set(EIGEN2_FOUND ${EIGEN2_VERSION_OK}) 60*bf2c3715SXin Li 61*bf2c3715SXin Lielse () 62*bf2c3715SXin Li 63*bf2c3715SXin Lifind_path(EIGEN2_INCLUDE_DIR NAMES Eigen/Core 64*bf2c3715SXin Li PATHS 65*bf2c3715SXin Li ${INCLUDE_INSTALL_DIR} 66*bf2c3715SXin Li ${KDE4_INCLUDE_DIR} 67*bf2c3715SXin Li PATH_SUFFIXES eigen2 68*bf2c3715SXin Li ) 69*bf2c3715SXin Li 70*bf2c3715SXin Liif(EIGEN2_INCLUDE_DIR) 71*bf2c3715SXin Li _eigen2_check_version() 72*bf2c3715SXin Liendif() 73*bf2c3715SXin Li 74*bf2c3715SXin Liinclude(FindPackageHandleStandardArgs) 75*bf2c3715SXin Lifind_package_handle_standard_args(Eigen2 DEFAULT_MSG EIGEN2_INCLUDE_DIR EIGEN2_VERSION_OK) 76*bf2c3715SXin Li 77*bf2c3715SXin Limark_as_advanced(EIGEN2_INCLUDE_DIR) 78*bf2c3715SXin Li 79*bf2c3715SXin Liendif() 80*bf2c3715SXin Li 81