0028932: Add possibility to install Eigen along the OCCT
[occt.git] / adm / cmake / eigen.cmake
1 # eigen
2
3 if (NOT DEFINED INSTALL_EIGEN)
4   set (INSTALL_EIGEN OFF CACHE BOOL "${INSTALL_EIGEN_DESCR}")
5 endif()
6
7 # eigen directory
8 if (NOT DEFINED 3RDPARTY_EIGEN_DIR)
9   set (3RDPARTY_EIGEN_DIR "" CACHE PATH "The directory containing eigen")
10 endif()
11
12 # search for eigen in user defined directory
13 if (3RDPARTY_DIR AND EXISTS "${3RDPARTY_DIR}")
14   if (NOT 3RDPARTY_EIGEN_DIR OR NOT EXISTS "${3RDPARTY_EIGEN_DIR}")
15     FIND_PRODUCT_DIR("${3RDPARTY_DIR}" Eigen EIGEN_DIR_NAME)
16     if (EIGEN_DIR_NAME)
17       set (3RDPARTY_EIGEN_DIR "${3RDPARTY_DIR}/${EIGEN_DIR_NAME}" CACHE PATH "The directory containing eigen" FORCE)
18     endif()
19   endif()
20 endif()
21
22 if (NOT DEFINED 3RDPARTY_EIGEN_INCLUDE_DIR)
23   set (3RDPARTY_EIGEN_INCLUDE_DIR  "" CACHE FILEPATH "The directory containing headers of the EIGEN")
24 endif()
25
26 if (NOT 3RDPARTY_EIGEN_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_EIGEN_INCLUDE_DIR}")
27
28   set (HEADER_NAMES Eigen)
29
30   set (3RDPARTY_EIGEN_INCLUDE_DIR "3RDPARTY_EIGEN_INCLUDE_DIR-NOTFOUND" CACHE PATH "the path to Eigen header file" FORCE)
31
32   if (3RDPARTY_EIGEN_DIR AND EXISTS "${3RDPARTY_EIGEN_DIR}")
33     find_path (3RDPARTY_EIGEN_INCLUDE_DIR NAMES ${HEADER_NAMES}
34                                               PATHS ${3RDPARTY_EIGEN_DIR}
35                                               PATH_SUFFIXES include eigen3 include/eigen3
36                                               CMAKE_FIND_ROOT_PATH_BOTH
37                                               NO_DEFAULT_PATH)
38   else()
39     find_path (3RDPARTY_EIGEN_INCLUDE_DIR NAMES ${HEADER_NAMES}
40                                               PATH_SUFFIXES include eigen3 include/eigen3
41                                               CMAKE_FIND_ROOT_PATH_BOTH)
42   endif()
43
44   # use default (CMake) EIGEN search
45   if (NOT 3RDPARTY_EIGEN_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_EIGEN_INCLUDE_DIR}")
46     # use 3RDPARTY_EIGEN_DIR if it is specified for eigen search
47     if (3RDPARTY_EIGEN_DIR AND EXISTS "${3RDPARTY_EIGEN_DIR}")
48       set (CACHED_EIGEN_DIR $ENV{Eigen3_DIR})
49       set (ENV{Eigen3_DIR} "${3RDPARTY_EIGEN_DIR}")
50     endif()
51
52     find_package(Eigen3 QUIET)
53
54     # restore ENV{Eigen3_DIR}
55     if (3RDPARTY_EIGEN_DIR AND EXISTS "${3RDPARTY_EIGEN_DIR}")
56       set (ENV{Eigen3_DIR} ${CACHED_EIGEN_DIR})
57     endif()
58
59     if (${EIGEN3_FOUND})
60       set (3RDPARTY_EIGEN_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}" CACHE PATH "the path to Eigen header file" FORCE)
61       set (3RDPARTY_EIGEN_DIR "${EIGEN3_ROOT_DIR}"    CACHE PATH "The directory containing eigen" FORCE)
62     endif()
63   endif()
64 endif()
65
66 if (3RDPARTY_EIGEN_INCLUDE_DIR AND EXISTS "${3RDPARTY_EIGEN_INCLUDE_DIR}")
67   list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_EIGEN_INCLUDE_DIR}")
68
69   # Install header files
70   if (INSTALL_EIGEN)
71     file(GLOB EIGEN_SUBDIRS "${3RDPARTY_EIGEN_INCLUDE_DIR}/*")
72     foreach(SUBDIR ${EIGEN_SUBDIRS})
73       if(IS_DIRECTORY "${SUBDIR}")
74         install (DIRECTORY "${SUBDIR}" DESTINATION "${INSTALL_DIR_INCLUDE}")
75       else()
76         install (FILES "${SUBDIR}" DESTINATION "${INSTALL_DIR_INCLUDE}")
77       endif()
78     endforeach()
79   endif()
80 else()
81   list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_EIGEN_INCLUDE_DIR)
82
83   set (3RDPARTY_EIGEN_INCLUDE_DIR "" CACHE PATH "the path to Eigen header file" FORCE)
84 endif()
85
86 # unset all redundant variables
87 OCCT_CHECK_AND_UNSET(Eigen3_DIR)