0028197: Configuration - support Eigen template library as external dependency
authorski <ski@opencascade.com>
Thu, 15 Dec 2016 09:44:36 +0000 (12:44 +0300)
committerapn <apn@opencascade.com>
Thu, 29 Dec 2016 11:54:51 +0000 (14:54 +0300)
Supporting of "Eigen" third party was added to CMake build procedure.

CMakeLists.txt
adm/cmake/eigen.cmake [new file with mode: 0644]

index 174cdee..b8ee36b 100644 (file)
@@ -588,6 +588,25 @@ else()
   OCCT_CHECK_AND_UNSET ("INSTALL_TBB")
 endif()
 
+# EIGEN
+# search for CSF_EIGEN variable in EXTERNLIB of each being used toolkit
+OCCT_IS_PRODUCT_REQUIRED (CSF_EIGEN CAN_USE_EIGEN)
+
+if (CAN_USE_EIGEN)
+  set (USE_EIGEN OFF CACHE BOOL "${USE_EIGEN_DESCR}")
+
+  if (USE_EIGEN)
+    add_definitions (-DHAVE_EIGEN)
+    OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/eigen")
+  else()
+    OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_EIGEN")
+  endif()
+else()
+  OCCT_CHECK_AND_UNSET ("USE_EIGEN")
+
+  OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_EIGEN")
+endif()
+
 # Doxygen
 if (BUILD_DOC_Overview)
   if (NOT DEFINED INSTALL_DOC_Overview)
diff --git a/adm/cmake/eigen.cmake b/adm/cmake/eigen.cmake
new file mode 100644 (file)
index 0000000..a9c5e15
--- /dev/null
@@ -0,0 +1,71 @@
+# eigen
+
+# eigen directory
+if (NOT DEFINED 3RDPARTY_EIGEN_DIR)
+  set (3RDPARTY_EIGEN_DIR "" CACHE PATH "The directory containing eigen")
+endif()
+
+# search for eigen in user defined directory
+if (3RDPARTY_DIR AND EXISTS "${3RDPARTY_DIR}")
+  if (NOT 3RDPARTY_EIGEN_DIR OR NOT EXISTS "${3RDPARTY_EIGEN_DIR}")
+    FIND_PRODUCT_DIR("${3RDPARTY_DIR}" Eigen EIGEN_DIR_NAME)
+    if (EIGEN_DIR_NAME)
+      set (3RDPARTY_EIGEN_DIR "${3RDPARTY_DIR}/${EIGEN_DIR_NAME}" CACHE PATH "The directory containing eigen" FORCE)
+    endif()
+  endif()
+endif()
+
+if (NOT DEFINED 3RDPARTY_EIGEN_INCLUDE_DIR)
+  set (3RDPARTY_EIGEN_INCLUDE_DIR  "" CACHE FILEPATH "The directory containing headers of the EIGEN")
+endif()
+
+if (NOT 3RDPARTY_EIGEN_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_EIGEN_INCLUDE_DIR}")
+
+  set (HEADER_NAMES Eigen)
+
+  set (3RDPARTY_EIGEN_INCLUDE_DIR "3RDPARTY_EIGEN_INCLUDE_DIR-NOTFOUND" CACHE PATH "the path to Eigen header file" FORCE)
+
+  if (3RDPARTY_EIGEN_DIR AND EXISTS "${3RDPARTY_EIGEN_DIR}")
+    find_path (3RDPARTY_EIGEN_INCLUDE_DIR NAMES ${HEADER_NAMES}
+                                              PATHS ${3RDPARTY_EIGEN_DIR}
+                                              PATH_SUFFIXES include eigen3 include/eigen3
+                                              CMAKE_FIND_ROOT_PATH_BOTH
+                                              NO_DEFAULT_PATH)
+  else()
+    find_path (3RDPARTY_EIGEN_INCLUDE_DIR NAMES ${HEADER_NAMES}
+                                              PATH_SUFFIXES include eigen3 include/eigen3
+                                              CMAKE_FIND_ROOT_PATH_BOTH)
+  endif()
+
+  # use default (CMake) EIGEN search
+  if (NOT 3RDPARTY_EIGEN_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_EIGEN_INCLUDE_DIR}")
+    # use 3RDPARTY_FREETYPE_DIR if it is specified for freetype search
+    if (3RDPARTY_EIGEN_DIR AND EXISTS "${3RDPARTY_EIGEN_DIR}")
+      set (CACHED_EIGEN_DIR $ENV{Eigen3_DIR})
+      set (ENV{Eigen3_DIR} "${3RDPARTY_EIGEN_DIR}")
+    endif()
+
+    find_package(Eigen3 QUIET)
+
+    # restore ENV{Eigen3_DIR}
+    if (3RDPARTY_EIGEN_DIR AND EXISTS "${3RDPARTY_EIGEN_DIR}")
+      set (ENV{Eigen3_DIR} ${CACHED_EIGEN_DIR})
+    endif()
+
+    if (${EIGEN3_FOUND})
+      set (3RDPARTY_EIGEN_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}" CACHE PATH "the path to Eigen header file" FORCE)
+      set (3RDPARTY_EIGEN_DIR "${EIGEN3_ROOT_DIR}"    CACHE PATH "The directory containing eigen" FORCE)
+    endif()
+  endif()
+endif()
+
+if (3RDPARTY_EIGEN_INCLUDE_DIR AND EXISTS "${3RDPARTY_EIGEN_INCLUDE_DIR}")
+  list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_EIGEN_INCLUDE_DIR}")
+else()
+  list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_EIGEN_INCLUDE_DIR)
+
+  set (3RDPARTY_EIGEN_INCLUDE_DIR "" CACHE PATH "the path to Eigen header file" FORCE)
+endif()
+
+# unset all redundant variables
+OCCT_CHECK_AND_UNSET(Eigen3_DIR)