@@ -68,7 +68,17 @@ endif()
6868# that uses DIPlib, hence we define a variable here that removes all of DocTest from the DIPlib sources.
6969set (DIP_ENABLE_DOCTEST ON CACHE BOOL "Turn off to not include doctest.h in the library headers" )
7070if (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)
7282 target_compile_definitions (DIP PRIVATE
7383 DIP_CONFIG_ENABLE_DOCTEST
7484 DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES
@@ -95,39 +105,64 @@ endif()
95105set (HAS_128_INT ${HAS_128_INT} PARENT_SCOPE)
96106
97107# 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 ()
99114target_compile_definitions (DIP PRIVATE
100115 EIGEN_MPL2_ONLY # This makes sure we only use parts of the Eigen library that use the MPL2 license or more permissive ones.
101116 EIGEN_DONT_PARALLELIZE) # This to prevent Eigen algorithms trying to run in parallel -- we parallelize at a larger scale.
102117
103118# zlib (for use in libics and libtiff)
104119set (DIP_ENABLE_ZLIB ON CACHE BOOL "Enable zlib compression in ICS and TIFF (deflate)" )
105120if (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 ()
107127endif ()
108128
109129# libjpeg (for use in libtiff)
110130set (DIP_ENABLE_JPEG ON CACHE BOOL "Enable JPEG file support and compression in TIFF" )
111131if (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)
114139 target_compile_definitions (DIP PRIVATE DIP_CONFIG_HAS_JPEG)
115140endif ()
116141
117142# libics
118143set (DIP_ENABLE_ICS ON CACHE BOOL "Enable ICS file support" )
119144if (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)
123153 target_compile_definitions (DIP PRIVATE DIP_CONFIG_HAS_ICS)
124154endif ()
125155
126156# libtiff
127157set (DIP_ENABLE_TIFF ON CACHE BOOL "Enable TIFF file support" )
128158if (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)
131166 target_compile_definitions (DIP PRIVATE DIP_CONFIG_HAS_TIFF)
132167endif ()
133168
@@ -157,8 +192,7 @@ install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/" DESTINATION include
157192# DIPlib unit tests
158193if (DIP_ENABLE_DOCTEST)
159194 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)
162196 target_compile_definitions (unit_tests PRIVATE
163197 DIP_IMPLEMENT_UNIT_TESTS
164198 DIP_CONFIG_ENABLE_DOCTEST
@@ -171,7 +205,7 @@ if(DIP_ENABLE_DOCTEST)
171205 set_target_properties (unit_tests PROPERTIES INSTALL_RPATH "$ORIGIN" )
172206 endif ()
173207 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)
175209 doctest_force_link_static_lib_in_target(unit_tests DIP) # This pulls in all object files from the static DIP library
176210 endif ()
177211 add_custom_target (check COMMAND unit_tests)
0 commit comments