@@ -68,7 +68,17 @@ endif()
68
68
# that uses DIPlib, hence we define a variable here that removes all of DocTest from the DIPlib sources.
69
69
set (DIP_ENABLE_DOCTEST ON CACHE BOOL "Turn off to not include doctest.h in the library headers" )
70
70
if (DIP_ENABLE_DOCTEST )
71
- target_include_directories (DIP PRIVATE "${PROJECT_SOURCE_DIR} /dependencies/doctest" )
71
+ if (DIP_BUILD_BUNDLED_DEPENDENCIES )
72
+ list (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR} /dependencies/doctest" )
73
+ add_library (doctest INTERFACE )
74
+ target_include_directories (doctest INTERFACE "${PROJECT_SOURCE_DIR} /dependencies/doctest" )
75
+ add_library (doctest::doctest ALIAS doctest )
76
+ else ()
77
+ find_package (doctest REQUIRED )
78
+ # upstream doctest wants includes of the form <doctest/doctest.h> but diplib uses just doctest.h
79
+ target_include_directories (DIP PRIVATE "$<TARGET_PROPERTY:doctest::doctest,INTERFACE_INCLUDE_DIRECTORIES>/doctest" )
80
+ endif ()
81
+ target_link_libraries (DIP PRIVATE doctest::doctest )
72
82
target_compile_definitions (DIP PRIVATE
73
83
DIP_CONFIG_ENABLE_DOCTEST
74
84
DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES
@@ -95,39 +105,64 @@ endif()
95
105
set (HAS_128_INT ${HAS_128_INT} PARENT_SCOPE )
96
106
97
107
# Eigen
98
- target_include_directories (DIP PRIVATE "${PROJECT_SOURCE_DIR} /dependencies/eigen3" )
108
+ if (DIP_BUILD_BUNDLED_DEPENDENCIES )
109
+ target_include_directories (DIP PRIVATE "${PROJECT_SOURCE_DIR} /dependencies/eigen3" )
110
+ else ()
111
+ find_package (Eigen3 REQUIRED )
112
+ target_include_directories (DIP PRIVATE ${EIGEN3_INCLUDE_DIR} )
113
+ endif ()
99
114
target_compile_definitions (DIP PRIVATE
100
115
EIGEN_MPL2_ONLY # This makes sure we only use parts of the Eigen library that use the MPL2 license or more permissive ones.
101
116
EIGEN_DONT_PARALLELIZE ) # This to prevent Eigen algorithms trying to run in parallel -- we parallelize at a larger scale.
102
117
103
118
# zlib (for use in libics and libtiff)
104
119
set (DIP_ENABLE_ZLIB ON CACHE BOOL "Enable zlib compression in ICS and TIFF (deflate)" )
105
120
if (DIP_ENABLE_ZLIB )
106
- add_subdirectory ("${PROJECT_SOURCE_DIR} /dependencies/zlib" "${PROJECT_BINARY_DIR} /zlib" EXCLUDE_FROM_ALL )
121
+ if (DIP_BUILD_BUNDLED_DEPENDENCIES )
122
+ add_subdirectory ("${PROJECT_SOURCE_DIR} /dependencies/zlib" "${PROJECT_BINARY_DIR} /zlib" EXCLUDE_FROM_ALL )
123
+ add_library (ZLIB::ZLIB ALIAS zlibstatic )
124
+ else ()
125
+ find_package (ZLIB REQUIRED )
126
+ endif ()
107
127
endif ()
108
128
109
129
# libjpeg (for use in libtiff)
110
130
set (DIP_ENABLE_JPEG ON CACHE BOOL "Enable JPEG file support and compression in TIFF" )
111
131
if (DIP_ENABLE_JPEG )
112
- add_subdirectory ("${PROJECT_SOURCE_DIR} /dependencies/libjpeg" "${PROJECT_BINARY_DIR} /libjpeg" EXCLUDE_FROM_ALL )
113
- target_link_libraries (DIP PRIVATE jpeg )
132
+ if (DIP_BUILD_BUNDLED_DEPENDENCIES )
133
+ add_subdirectory ("${PROJECT_SOURCE_DIR} /dependencies/libjpeg" "${PROJECT_BINARY_DIR} /libjpeg" EXCLUDE_FROM_ALL )
134
+ add_library (JPEG::JPEG ALIAS jpeg )
135
+ else ()
136
+ find_package (JPEG REQUIRED )
137
+ endif ()
138
+ target_link_libraries (DIP PRIVATE JPEG::JPEG )
114
139
target_compile_definitions (DIP PRIVATE DIP_CONFIG_HAS_JPEG )
115
140
endif ()
116
141
117
142
# libics
118
143
set (DIP_ENABLE_ICS ON CACHE BOOL "Enable ICS file support" )
119
144
if (DIP_ENABLE_ICS )
120
- set (LIBICS_INCLUDE_CPP Off ) # TODO: we should start using the C++ interface
121
- add_subdirectory ("${PROJECT_SOURCE_DIR} /dependencies/libics" "${PROJECT_BINARY_DIR} /libics" EXCLUDE_FROM_ALL )
122
- target_link_libraries (DIP PRIVATE libics )
145
+ if (DIP_BUILD_BUNDLED_DEPENDENCIES )
146
+ set (LIBICS_INCLUDE_CPP Off ) # TODO: we should start using the C++ interface
147
+ add_subdirectory ("${PROJECT_SOURCE_DIR} /dependencies/libics" "${PROJECT_BINARY_DIR} /libics" EXCLUDE_FROM_ALL )
148
+ add_library (ICS::ICS ALIAS libics )
149
+ else ()
150
+ find_package (ICS REQUIRED )
151
+ endif ()
152
+ target_link_libraries (DIP PRIVATE ICS::ICS )
123
153
target_compile_definitions (DIP PRIVATE DIP_CONFIG_HAS_ICS )
124
154
endif ()
125
155
126
156
# libtiff
127
157
set (DIP_ENABLE_TIFF ON CACHE BOOL "Enable TIFF file support" )
128
158
if (DIP_ENABLE_TIFF )
129
- add_subdirectory ("${PROJECT_SOURCE_DIR} /dependencies/libtiff" "${PROJECT_BINARY_DIR} /libtiff" EXCLUDE_FROM_ALL )
130
- target_link_libraries (DIP PRIVATE tiff )
159
+ if (DIP_BUILD_BUNDLED_DEPENDENCIES )
160
+ add_subdirectory ("${PROJECT_SOURCE_DIR} /dependencies/libtiff" "${PROJECT_BINARY_DIR} /libtiff" EXCLUDE_FROM_ALL )
161
+ add_library (TIFF::TIFF ALIAS tiff )
162
+ else ()
163
+ find_package (TIFF REQUIRED )
164
+ endif ()
165
+ target_link_libraries (DIP PRIVATE TIFF::TIFF )
131
166
target_compile_definitions (DIP PRIVATE DIP_CONFIG_HAS_TIFF )
132
167
endif ()
133
168
@@ -157,8 +192,7 @@ install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/" DESTINATION include
157
192
# DIPlib unit tests
158
193
if (DIP_ENABLE_DOCTEST )
159
194
add_executable (unit_tests EXCLUDE_FROM_ALL "${CMAKE_CURRENT_LIST_DIR} /library/unit_tests.cpp" )
160
- target_include_directories (unit_tests PRIVATE "${PROJECT_SOURCE_DIR} /dependencies/doctest" )
161
- target_link_libraries (unit_tests PRIVATE DIP )
195
+ target_link_libraries (unit_tests PRIVATE DIP doctest::doctest )
162
196
target_compile_definitions (unit_tests PRIVATE
163
197
DIP_IMPLEMENT_UNIT_TESTS
164
198
DIP_CONFIG_ENABLE_DOCTEST
@@ -171,7 +205,7 @@ if(DIP_ENABLE_DOCTEST)
171
205
set_target_properties (unit_tests PROPERTIES INSTALL_RPATH "$ORIGIN" )
172
206
endif ()
173
207
else ()
174
- include (" ${PROJECT_SOURCE_DIR} /dependencies/doctest/ doctest_force_link_static_lib_in_target.cmake" )
208
+ include (doctest_force_link_static_lib_in_target.cmake )
175
209
doctest_force_link_static_lib_in_target (unit_tests DIP ) # This pulls in all object files from the static DIP library
176
210
endif ()
177
211
add_custom_target (check COMMAND unit_tests )
0 commit comments