0028502: Compilation error on Arch Linux (clang compiler)
[occt.git] / adm / cmake / eigen.cmake
1 # eigen
2
3 # eigen directory
4 if (NOT DEFINED 3RDPARTY_EIGEN_DIR)
5   set (3RDPARTY_EIGEN_DIR "" CACHE PATH "The directory containing eigen")
6 endif()
7
8 # search for eigen in user defined directory
9 if (3RDPARTY_DIR AND EXISTS "${3RDPARTY_DIR}")
10   if (NOT 3RDPARTY_EIGEN_DIR OR NOT EXISTS "${3RDPARTY_EIGEN_DIR}")
11     FIND_PRODUCT_DIR("${3RDPARTY_DIR}" Eigen EIGEN_DIR_NAME)
12     if (EIGEN_DIR_NAME)
13       set (3RDPARTY_EIGEN_DIR "${3RDPARTY_DIR}/${EIGEN_DIR_NAME}" CACHE PATH "The directory containing eigen" FORCE)
14     endif()
15   endif()
16 endif()
17
18 if (NOT DEFINED 3RDPARTY_EIGEN_INCLUDE_DIR)
19   set (3RDPARTY_EIGEN_INCLUDE_DIR  "" CACHE FILEPATH "The directory containing headers of the EIGEN")
20 endif()
21
22 if (NOT 3RDPARTY_EIGEN_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_EIGEN_INCLUDE_DIR}")
23
24   set (HEADER_NAMES Eigen)
25
26   set (3RDPARTY_EIGEN_INCLUDE_DIR "3RDPARTY_EIGEN_INCLUDE_DIR-NOTFOUND" CACHE PATH "the path to Eigen header file" FORCE)
27
28   if (3RDPARTY_EIGEN_DIR AND EXISTS "${3RDPARTY_EIGEN_DIR}")
29     find_path (3RDPARTY_EIGEN_INCLUDE_DIR NAMES ${HEADER_NAMES}
30                                               PATHS ${3RDPARTY_EIGEN_DIR}
31                                               PATH_SUFFIXES include eigen3 include/eigen3
32                                               CMAKE_FIND_ROOT_PATH_BOTH
33                                               NO_DEFAULT_PATH)
34   else()
35     find_path (3RDPARTY_EIGEN_INCLUDE_DIR NAMES ${HEADER_NAMES}
36                                               PATH_SUFFIXES include eigen3 include/eigen3
37                                               CMAKE_FIND_ROOT_PATH_BOTH)
38   endif()
39
40   # use default (CMake) EIGEN search
41   if (NOT 3RDPARTY_EIGEN_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_EIGEN_INCLUDE_DIR}")
42     # use 3RDPARTY_FREETYPE_DIR if it is specified for freetype search
43     if (3RDPARTY_EIGEN_DIR AND EXISTS "${3RDPARTY_EIGEN_DIR}")
44       set (CACHED_EIGEN_DIR $ENV{Eigen3_DIR})
45       set (ENV{Eigen3_DIR} "${3RDPARTY_EIGEN_DIR}")
46     endif()
47
48     find_package(Eigen3 QUIET)
49
50     # restore ENV{Eigen3_DIR}
51     if (3RDPARTY_EIGEN_DIR AND EXISTS "${3RDPARTY_EIGEN_DIR}")
52       set (ENV{Eigen3_DIR} ${CACHED_EIGEN_DIR})
53     endif()
54
55     if (${EIGEN3_FOUND})
56       set (3RDPARTY_EIGEN_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}" CACHE PATH "the path to Eigen header file" FORCE)
57       set (3RDPARTY_EIGEN_DIR "${EIGEN3_ROOT_DIR}"    CACHE PATH "The directory containing eigen" FORCE)
58     endif()
59   endif()
60 endif()
61
62 if (3RDPARTY_EIGEN_INCLUDE_DIR AND EXISTS "${3RDPARTY_EIGEN_INCLUDE_DIR}")
63   list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_EIGEN_INCLUDE_DIR}")
64 else()
65   list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_EIGEN_INCLUDE_DIR)
66
67   set (3RDPARTY_EIGEN_INCLUDE_DIR "" CACHE PATH "the path to Eigen header file" FORCE)
68 endif()
69
70 # unset all redundant variables
71 OCCT_CHECK_AND_UNSET(Eigen3_DIR)