@@ -8,109 +8,58 @@ option(
88)
99mark_as_advanced (ITK_USE_SYSTEM_EIGEN )
1010
11- if (ITK_USE_SYSTEM_EIGEN)
12- set (_eigen_itk_target Eigen3::Eigen)
13- else ()
14- set (_eigen_itk_target ITKInternalEigen3::Eigen)
15- endif ()
16- set (ITKEigen3_LIBRARIES ${_eigen_itk_target} )
17- # Assume that Eigen generates a Eigen3Config.cmake
18- set (_Eigen3_min_version 3.3)
19-
20- # Docs:
21- # find_package(ITK REQUIRED COMPONENTS
22- # ITKEigen3
23- # )
24- # When this module is required, the following cmake is invoked:
25- # find_package(Eigen3 CONFIG) if ITK_USE_SYSTEM_EIGEN=ON
26- # Or
27- # find_package(ITKInternalEigen3 CONFIG) otherwise
28- #
29- # ITKInternalEigen3 does NOT allow the use of #include <Eigen/Core>, it requires #include <itkeigen/Eigen/Core>
30- # This logic is handled automatically by the macro used internally `#include ITK_EIGEN(Core)`
11+ option (
12+ ITK_USE_EIGEN_MPL2_ONLY
13+ "Set compile definition EIGEN_MPL2_ONLY for eigen_internal."
14+ OFF
15+ )
16+ mark_as_advanced (ITK_USE_EIGEN_MPL2_ONLY )
3117
32- # However, this does not scale well for external ITK modules that want
33- # to link to third party libraries which are already using Eigen3.
34- # To solve it, ITK also creates a Eigen3Config.cmake for external consumers (i.e. in ExternalModules).
35- # This Eigen3Config in ITK/Modules points to the same internal headers than ITKInternalEigen,
36- # but #include <Eigen/Core> can now be used.
37- #
38- # External consumers just need the following extra logic to reuse the internal ITK Eigen, but
39- # without any change on the include of Eigen3 headers:
40- #
41- # Minimal Example:
42- # CMakeLists.txt
43- #
44- # find_package(ITK REQUIRED COMPONENTS
45- # ITKEigen3
46- # ITKCommon
47- # )
48- # set(ITK_EIGEN_LIBRARIES "") # No extra libraries are required if ITK is using system Eigen3
49- # if(DEFINED ITKInternalEigen3_DIR) # Equivalent to if(NOT ITK_USE_SYSTEM_EIGEN)
50- # set(Eigen3_DIR ${ITKInternalEigen3_DIR})
51- # find_package(Eigen3 REQUIRED CONFIG)
52- # endif()
53- # add_executable(script file_with_itk_and_eigen3.cpp)
54- # target_link_library(script ${ITK_LIBRARIES})
55- # target_link_library(script Eigen3::Eigen)
18+ set (_Eigen3_min_version 3.3)
5619
5720if (ITK_USE_SYSTEM_EIGEN)
5821 set (_Eigen3_SYSTEM_OR_INTERNAL "Eigen3" )
5922 find_package (${_Eigen3_SYSTEM_OR_INTERNAL} REQUIRED CONFIG )
60- set (Eigen3_DIR_INSTALL ${Eigen3_DIR} )
61- set (Eigen3_DIR_BUILD ${Eigen3_DIR} )
62- else ()
63- set (_Eigen3_SYSTEM_OR_INTERNAL "ITKInternalEigen3" )
64- find_package (${_Eigen3_SYSTEM_OR_INTERNAL} REQUIRED CONFIG )
65- set (Eigen3_DIR_INSTALL "\$ {ITK_MODULES_DIR}" )
66- set (_eigen3_build_dir "${ITK_BINARY_DIR} /ITKInternalEigen3-build" )
67- set (Eigen3_DIR_BUILD "${_eigen3_build_dir} " )
68- endif ()
69- if (${_Eigen3_SYSTEM_OR_INTERNAL} _VERSION VERSION_LESS ${_Eigen3_min_version} )
70- message (
71- FATAL_ERROR
72- "Eigen3 version ${_Eigen3_min_version} or later is required."
73- )
74- endif ()
23+ set (ITKEigen3_LIBRARIES Eigen3::Eigen)
7524
76- # Eigen3 is header only, but there are compile definitions that we want to provide
77- # to enforce use of MPL only code, and to disable warnings.
78- # We only need to add the location of the header itk_eigen.h used internally.
79- get_target_property (
80- Eigen_INCLUDE_DIRS
81- ${_eigen_itk_target}
82- INTERFACE_INCLUDE_DIRECTORIES
83- )
84- set (
85- ITKEigen3_INCLUDE_DIRS
86- ${Eigen_INCLUDE_DIRS}
87- ${ITKEigen3_BINARY_DIR} /src # For the generated itk_eigen.h
88- )
25+ set (ITKEigen3_NO_SRC 1)
8926
90- # When this module is loaded by an app, load Eigen too.
91- # Load ITKInternalEigen3 or Eigen3 depending on ITK_USE_SYSTEM_EIGEN
92- set (
93- ITKEigen3_EXPORT_CODE_INSTALL
94- "
95- set(ITK_USE_SYSTEM_EIGEN \" ${ITK_USE_SYSTEM_EIGEN} \" )
96- set(${_Eigen3_SYSTEM_OR_INTERNAL} _DIR \" ${Eigen3_DIR_INSTALL} \" )
97- find_package(${_Eigen3_SYSTEM_OR_INTERNAL} REQUIRED CONFIG)
98- if(${_Eigen3_SYSTEM_OR_INTERNAL} _VERSION VERSION_LESS ${_Eigen3_min_version} )
99- message(FATAL_ERROR \" Eigen3 version ${_Eigen3_min_version} or later is required.\" )
100- endif()
27+ if (${_Eigen3_SYSTEM_OR_INTERNAL} _VERSION VERSION_LESS ${_Eigen3_min_version} )
28+ message (
29+ FATAL_ERROR
30+ "Eigen3 version ${_Eigen3_min_version} or later is required."
31+ )
32+ endif ()
33+
34+ # When this module is loaded by an app, load Eigen too.
35+ # Load ITKInternalEigen3 or Eigen3 depending on ITK_USE_SYSTEM_EIGEN
36+ set (
37+ ITKEigen3_EXPORT_CODE_INSTALL
38+ "
39+ find_package(\" Eigen3\" REQUIRED CONFIG)
40+ if(Eigen3_VERSION VERSION_LESS ${_Eigen3_min_version} )
41+ message(FATAL_ERROR \" Eigen3 version ${_Eigen3_min_version} or later is required.\" )
42+ endif()
10143"
102- )
103- set (
104- ITKEigen3_EXPORT_CODE_BUILD
105- "
106- set(ITK_USE_SYSTEM_EIGEN \" ${ITK_USE_SYSTEM_EIGEN} \" )
107- set( ${_Eigen3_SYSTEM_OR_INTERNAL} _DIR \" ${Eigen3_DIR_BUILD} \" )
108- find_package( ${_Eigen3_SYSTEM_OR_INTERNAL} REQUIRED CONFIG )
109- if( ${_Eigen3_SYSTEM_OR_INTERNAL} _VERSION VERSION_LESS ${_Eigen3_min_version} )
110- message(FATAL_ERROR \" Eigen3 version ${_Eigen3_min_version} or later is required. \" )
111- endif()
44+ )
45+ set (
46+ ITKEigen3_EXPORT_CODE_BUILD
47+ "
48+ if(NOT ITK_BINARY_DIR )
49+ find_package( \" Eigen3 \" REQUIRED CONFIG )
50+ if(Eigen3_VERSION VERSION_LESS ${_Eigen3_min_version} )
51+ message(FATAL_ERROR \" Eigen3 version ${_Eigen3_min_version} or later is required. \" )
52+ endif( )
53+ endif()
11254"
113- )
55+ )
56+ else ()
57+ set (ITKEigen3_LIBRARIES eigen_internal)
58+ set (ITKEigen3_INCLUDE_DIRS ${ITKEigen3_SOURCE_DIR} /src)
59+ endif ()
60+
61+ # For the generated itk_eigen.h
62+ list (APPEND ITKEigen3_INCLUDE_DIRS ${ITKEigen3_BINARY_DIR} /src)
11463
11564# Eigen3 targets are not installed if ITK_USE_SYSTEM_EIGEN==True
11665itk_module_impl ()
0 commit comments