diff --git a/CMakeLists.txt b/CMakeLists.txt index 96546898..ee1c3758 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,9 @@ endif() set(DIP_SHARED_LIBRARY ON CACHE BOOL "Build a shared library (off for static library)") set(BUILD_SHARED_LIBS ${DIP_SHARED_LIBRARY}) +# build bundled dependencies or use find_package? +set(DIP_BUILD_BUNDLED_DEPENDENCIES ON CACHE BOOL "Build the bundled dependencies or use find_package otherwise") + # Installation path set(CMAKE_INSTALL_PREFIX "${CMAKE_BUILD_TYPE}" CACHE PATH "Installation directory") set(DOCUMENTATION_OUTPUT share/doc/DIPlib) diff --git a/dependencies/libics/CMakeLists.txt b/dependencies/libics/CMakeLists.txt index 572f64bb..a24ebbd6 100644 --- a/dependencies/libics/CMakeLists.txt +++ b/dependencies/libics/CMakeLists.txt @@ -100,8 +100,8 @@ endif(UNIX) #endif() # DIPlib-specific zlib -if(TARGET zlibstatic) - target_link_libraries(libics PRIVATE zlibstatic) +if(TARGET ZLIB::ZLIB) + target_link_libraries(libics PRIVATE ZLIB::ZLIB) target_compile_definitions(libics PUBLIC -DICS_ZLIB) endif() diff --git a/dependencies/libtiff/CMakeLists.txt b/dependencies/libtiff/CMakeLists.txt index 8d08268e..2dd46696 100644 --- a/dependencies/libtiff/CMakeLists.txt +++ b/dependencies/libtiff/CMakeLists.txt @@ -378,7 +378,7 @@ set(MDI_SUPPORT TRUE) # ZLIB set(ZLIB_SUPPORT FALSE) -if(TARGET zlibstatic) +if(TARGET ZLIB::ZLIB) set(ZLIB_SUPPORT TRUE) endif() set(ZIP_SUPPORT ${ZLIB_SUPPORT}) @@ -468,10 +468,10 @@ if(M_LIBRARY) list(APPEND TIFF_LIBRARY_DEPS ${M_LIBRARY}) endif() if(ZLIB_SUPPORT) - list(APPEND TIFF_LIBRARY_DEPS zlibstatic) + list(APPEND TIFF_LIBRARY_DEPS ZLIB::ZLIB) endif() if(JPEG_SUPPORT) - list(APPEND TIFF_LIBRARY_DEPS jpeg) + list(APPEND TIFF_LIBRARY_DEPS JPEG::JPEG) endif() if(JPEG12_LIBRARIES) list(APPEND TIFF_LIBRARY_DEPS ${JPEG12_LIBRARIES}) diff --git a/pydip/CMakeLists.txt b/pydip/CMakeLists.txt index 145e7d3a..239a9528 100644 --- a/pydip/CMakeLists.txt +++ b/pydip/CMakeLists.txt @@ -1,5 +1,9 @@ set(PYBIND11_PYTHON_VERSION ${PYTHON_VERSION}) # Avoid a warning message -add_subdirectory("${PROJECT_SOURCE_DIR}/dependencies/pybind11" "${PROJECT_BINARY_DIR}/pybind11" EXCLUDE_FROM_ALL) +if(DIP_BUILD_BUNDLED_DEPENDENCIES) + add_subdirectory("${PROJECT_SOURCE_DIR}/dependencies/pybind11" "${PROJECT_BINARY_DIR}/pybind11" EXCLUDE_FROM_ALL) +else() + find_package(pybind11 REQUIRED) +endif() # Find sources file(GLOB DIP_PYTHON_SRC "${CMAKE_CURRENT_LIST_DIR}/src/*.cpp" "${CMAKE_CURRENT_LIST_DIR}/src/*.h") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9b9df17b..43e189a2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -68,7 +68,15 @@ endif() # that uses DIPlib, hence we define a variable here that removes all of DocTest from the DIPlib sources. set(DIP_ENABLE_DOCTEST ON CACHE BOOL "Turn off to not include doctest.h in the library headers") if(DIP_ENABLE_DOCTEST) - target_include_directories(DIP PRIVATE "${PROJECT_SOURCE_DIR}/dependencies/doctest") + if(DIP_BUILD_BUNDLED_DEPENDENCIES) + list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/dependencies/doctest") + add_library(doctest INTERFACE) + target_include_directories(doctest INTERFACE "${PROJECT_SOURCE_DIR}/dependencies") + add_library(doctest::doctest ALIAS doctest) + else() + find_package(doctest REQUIRED) + endif() + target_link_libraries(DIP PRIVATE doctest::doctest) target_compile_definitions(DIP PRIVATE DIP_CONFIG_ENABLE_DOCTEST DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES @@ -95,7 +103,12 @@ endif() set(HAS_128_INT ${HAS_128_INT} PARENT_SCOPE) # Eigen -target_include_directories(DIP PRIVATE "${PROJECT_SOURCE_DIR}/dependencies/eigen3") +if(DIP_BUILD_BUNDLED_DEPENDENCIES) + target_include_directories(DIP PRIVATE "${PROJECT_SOURCE_DIR}/dependencies/eigen3") +else() + find_package(Eigen3 REQUIRED) + target_include_directories(DIP PRIVATE ${EIGEN3_INCLUDE_DIR}) +endif() target_compile_definitions(DIP PRIVATE EIGEN_MPL2_ONLY # This makes sure we only use parts of the Eigen library that use the MPL2 license or more permissive ones. EIGEN_DONT_PARALLELIZE) # This to prevent Eigen algorithms trying to run in parallel -- we parallelize at a larger scale. @@ -103,31 +116,51 @@ target_compile_definitions(DIP PRIVATE # zlib (for use in libics and libtiff) set(DIP_ENABLE_ZLIB ON CACHE BOOL "Enable zlib compression in ICS and TIFF (deflate)") if(DIP_ENABLE_ZLIB) - add_subdirectory("${PROJECT_SOURCE_DIR}/dependencies/zlib" "${PROJECT_BINARY_DIR}/zlib" EXCLUDE_FROM_ALL) + if(DIP_BUILD_BUNDLED_DEPENDENCIES) + add_subdirectory("${PROJECT_SOURCE_DIR}/dependencies/zlib" "${PROJECT_BINARY_DIR}/zlib" EXCLUDE_FROM_ALL) + add_library(ZLIB::ZLIB ALIAS zlibstatic) + else() + find_package(ZLIB REQUIRED) + endif() endif() # libjpeg (for use in libtiff) set(DIP_ENABLE_JPEG ON CACHE BOOL "Enable JPEG file support and compression in TIFF") if(DIP_ENABLE_JPEG) - add_subdirectory("${PROJECT_SOURCE_DIR}/dependencies/libjpeg" "${PROJECT_BINARY_DIR}/libjpeg" EXCLUDE_FROM_ALL) - target_link_libraries(DIP PRIVATE jpeg) + if(DIP_BUILD_BUNDLED_DEPENDENCIES) + add_subdirectory("${PROJECT_SOURCE_DIR}/dependencies/libjpeg" "${PROJECT_BINARY_DIR}/libjpeg" EXCLUDE_FROM_ALL) + add_library(JPEG::JPEG ALIAS jpeg) + else() + find_package(JPEG REQUIRED) + endif() + target_link_libraries(DIP PRIVATE JPEG::JPEG) target_compile_definitions(DIP PRIVATE DIP_CONFIG_HAS_JPEG) endif() # libics set(DIP_ENABLE_ICS ON CACHE BOOL "Enable ICS file support") if(DIP_ENABLE_ICS) - set(LIBICS_INCLUDE_CPP Off) # TODO: we should start using the C++ interface - add_subdirectory("${PROJECT_SOURCE_DIR}/dependencies/libics" "${PROJECT_BINARY_DIR}/libics" EXCLUDE_FROM_ALL) - target_link_libraries(DIP PRIVATE libics) + if(DIP_BUILD_BUNDLED_DEPENDENCIES) + set(LIBICS_INCLUDE_CPP Off) # TODO: we should start using the C++ interface + add_subdirectory("${PROJECT_SOURCE_DIR}/dependencies/libics" "${PROJECT_BINARY_DIR}/libics" EXCLUDE_FROM_ALL) + add_library(ICS::ICS ALIAS libics) + else() + find_package(ICS REQUIRED) + endif() + target_link_libraries(DIP PRIVATE ICS::ICS) target_compile_definitions(DIP PRIVATE DIP_CONFIG_HAS_ICS) endif() # libtiff set(DIP_ENABLE_TIFF ON CACHE BOOL "Enable TIFF file support") if(DIP_ENABLE_TIFF) - add_subdirectory("${PROJECT_SOURCE_DIR}/dependencies/libtiff" "${PROJECT_BINARY_DIR}/libtiff" EXCLUDE_FROM_ALL) - target_link_libraries(DIP PRIVATE tiff) + if(DIP_BUILD_BUNDLED_DEPENDENCIES) + add_subdirectory("${PROJECT_SOURCE_DIR}/dependencies/libtiff" "${PROJECT_BINARY_DIR}/libtiff" EXCLUDE_FROM_ALL) + add_library(TIFF::TIFF ALIAS tiff) + else() + find_package(TIFF REQUIRED) + endif() + target_link_libraries(DIP PRIVATE TIFF::TIFF) target_compile_definitions(DIP PRIVATE DIP_CONFIG_HAS_TIFF) endif() @@ -157,8 +190,7 @@ install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/" DESTINATION include # DIPlib unit tests if(DIP_ENABLE_DOCTEST) add_executable(unit_tests EXCLUDE_FROM_ALL "${CMAKE_CURRENT_LIST_DIR}/library/unit_tests.cpp") - target_include_directories(unit_tests PRIVATE "${PROJECT_SOURCE_DIR}/dependencies/doctest") - target_link_libraries(unit_tests PRIVATE DIP) + target_link_libraries(unit_tests PRIVATE DIP doctest::doctest) target_compile_definitions(unit_tests PRIVATE DIP_IMPLEMENT_UNIT_TESTS DIP_CONFIG_ENABLE_DOCTEST @@ -171,7 +203,7 @@ if(DIP_ENABLE_DOCTEST) set_target_properties(unit_tests PROPERTIES INSTALL_RPATH "$ORIGIN") endif() else() - include("${PROJECT_SOURCE_DIR}/dependencies/doctest/doctest_force_link_static_lib_in_target.cmake") + include(doctest_force_link_static_lib_in_target.cmake) doctest_force_link_static_lib_in_target(unit_tests DIP) # This pulls in all object files from the static DIP library endif() add_custom_target(check COMMAND unit_tests) diff --git a/src/analysis/findshift.cpp b/src/analysis/findshift.cpp index e2daf95d..322c24e8 100644 --- a/src/analysis/findshift.cpp +++ b/src/analysis/findshift.cpp @@ -426,7 +426,7 @@ FloatArray FindShift( } // namespace dip #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/generation.h" DOCTEST_TEST_CASE("[DIPlib] testing the FindShift function") { diff --git a/src/binary/binary_basic.cpp b/src/binary/binary_basic.cpp index a84696a2..185fdd53 100644 --- a/src/binary/binary_basic.cpp +++ b/src/binary/binary_basic.cpp @@ -225,7 +225,7 @@ void BinaryAreaOpening( #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/statistics.h" DOCTEST_TEST_CASE("[DIPlib] testing the binary morphological filters") { diff --git a/src/binary/sup_inf_generator.cpp b/src/binary/sup_inf_generator.cpp index 7e340e79..13a3f0a7 100644 --- a/src/binary/sup_inf_generator.cpp +++ b/src/binary/sup_inf_generator.cpp @@ -620,7 +620,7 @@ IntervalArray ConvexHullInterval2D() { } #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/testing.h" DOCTEST_TEST_CASE("[DIPlib] testing private function RotateBy45Degrees") { diff --git a/src/color/color.cpp b/src/color/color.cpp index b6b33a70..5e65aa47 100644 --- a/src/color/color.cpp +++ b/src/color/color.cpp @@ -395,7 +395,7 @@ void ColorSpaceManager::SetWhitePoint( dip::XYZ whitePoint ) { #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/math.h" DOCTEST_TEST_CASE("[DIPlib] testing the ColorSpaceManager class") { diff --git a/src/detection/hough.cpp b/src/detection/hough.cpp index 5cd89558..4eaf48cb 100644 --- a/src/detection/hough.cpp +++ b/src/detection/hough.cpp @@ -325,7 +325,7 @@ FloatCoordinateArray FindHoughCircles( } // namespace dip #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/linear.h" #include "diplib/segmentation.h" #include "diplib/math.h" diff --git a/src/distance/separable_dt.cpp b/src/distance/separable_dt.cpp index f584b47f..30d3b29f 100644 --- a/src/distance/separable_dt.cpp +++ b/src/distance/separable_dt.cpp @@ -216,7 +216,7 @@ void SeparableDistanceTransform( #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/math.h" #include "diplib/statistics.h" #include "diplib/generation.h" diff --git a/src/file_io/ics.cpp b/src/file_io/ics.cpp index 419c22b7..7a95f76a 100644 --- a/src/file_io/ics.cpp +++ b/src/file_io/ics.cpp @@ -816,7 +816,7 @@ void ImageWriteICS( } // namespace dip #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/testing.h" DOCTEST_TEST_CASE( "[DIPlib] testing ICS file reading and writing" ) { diff --git a/src/file_io/tiff_write.cpp b/src/file_io/tiff_write.cpp index ab1989d6..d9913a0e 100644 --- a/src/file_io/tiff_write.cpp +++ b/src/file_io/tiff_write.cpp @@ -374,7 +374,7 @@ void ImageWriteTIFF( } // namespace dip #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/testing.h" DOCTEST_TEST_CASE( "[DIPlib] testing TIFF file reading and writing" ) { diff --git a/src/geometry/interpolation.cpp b/src/geometry/interpolation.cpp index ea1b724c..42aae8d6 100644 --- a/src/geometry/interpolation.cpp +++ b/src/geometry/interpolation.cpp @@ -654,7 +654,7 @@ void Rotation( #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/generation.h" #include "diplib/transform.h" #include "diplib/testing.h" diff --git a/src/histogram/distribution.cpp b/src/histogram/distribution.cpp index 961eb270..b0093d6f 100644 --- a/src/histogram/distribution.cpp +++ b/src/histogram/distribution.cpp @@ -244,7 +244,7 @@ void Distribution::SetSampling( #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/random.h" DOCTEST_TEST_CASE( "[DIPlib] testing dip::Distribution" ) { diff --git a/src/histogram/histogram.cpp b/src/histogram/histogram.cpp index efcbb7a4..2fd45b2f 100644 --- a/src/histogram/histogram.cpp +++ b/src/histogram/histogram.cpp @@ -593,7 +593,7 @@ Histogram& Histogram::Smooth( FloatArray sigma ) { #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/random.h" DOCTEST_TEST_CASE( "[DIPlib] testing dip::Histogram" ) { diff --git a/src/library/copy_buffer.cpp b/src/library/copy_buffer.cpp index 26d6a3e1..56c6728f 100644 --- a/src/library/copy_buffer.cpp +++ b/src/library/copy_buffer.cpp @@ -758,7 +758,7 @@ void ExpandBuffer( #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include DOCTEST_TEST_CASE("[DIPlib] testing the CopyBuffer function") { diff --git a/src/library/graph.cpp b/src/library/graph.cpp index 7e0a4563..0a7e17ab 100644 --- a/src/library/graph.cpp +++ b/src/library/graph.cpp @@ -520,7 +520,7 @@ LowestCommonAncestorSolver::LowestCommonAncestorSolver( Graph const& graph ) } // namespace dip #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE("[DIPlib] testing dip::Graph") { dip::Image img( { 4, 5 }, 1, dip::DT_UINT8 ); diff --git a/src/library/image_copy.cpp b/src/library/image_copy.cpp index 4b350188..9b5d3cd2 100644 --- a/src/library/image_copy.cpp +++ b/src/library/image_copy.cpp @@ -642,7 +642,7 @@ void Image::Fill( Image::Sample const& sample ) { #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE( "[DIPlib] testing dip::Image::SwapBytesInSample" ) { dip::Image img( { 5, 8 }, 3, dip::DT_SINT16 ); diff --git a/src/library/image_data.cpp b/src/library/image_data.cpp index d1a39fc1..a13c70f3 100644 --- a/src/library/image_data.cpp +++ b/src/library/image_data.cpp @@ -746,7 +746,7 @@ CoordinatesComputer Image::IndexToCoordinatesComputer() const { #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/random.h" DOCTEST_TEST_CASE( "[DIPlib] testing dip::Image::Forge" ) { diff --git a/src/library/image_indexing.cpp b/src/library/image_indexing.cpp index 5c0607af..309bb7dd 100644 --- a/src/library/image_indexing.cpp +++ b/src/library/image_indexing.cpp @@ -160,7 +160,7 @@ void DefineROI( #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE("[DIPlib] testing image indexing") { // Note that this also tests parts of dip::Image::View and dip::Image::Pixel functionality, which is diff --git a/src/library/image_manip.cpp b/src/library/image_manip.cpp index 2c0864ae..bd1a053c 100644 --- a/src/library/image_manip.cpp +++ b/src/library/image_manip.cpp @@ -626,7 +626,7 @@ RangeArray Image::CropWindow( UnsignedArray const& sizes, String const& cropLoca #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE("[DIPlib] testing dip::Image dimension manipulation functions") { dip::Image src( { 5, 10, 15 }, 3 ); diff --git a/src/library/image_views.cpp b/src/library/image_views.cpp index 0448b973..82abd421 100644 --- a/src/library/image_views.cpp +++ b/src/library/image_views.cpp @@ -430,7 +430,7 @@ Image::View::Iterator Image::View::end() const { #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/testing.h" DOCTEST_TEST_CASE( "[DIPlib] testing dip::Image::Pixel and related classes" ) { diff --git a/src/library/iterators.cpp b/src/library/iterators.cpp index a02db9e1..6e06b1a5 100644 --- a/src/library/iterators.cpp +++ b/src/library/iterators.cpp @@ -19,7 +19,7 @@ */ #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/generic_iterators.h" DOCTEST_TEST_CASE("[DIPlib] testing ImageIterator and GenericImageIterator") { diff --git a/src/library/neighborhood.cpp b/src/library/neighborhood.cpp index 9b6ac954..35b600b1 100644 --- a/src/library/neighborhood.cpp +++ b/src/library/neighborhood.cpp @@ -485,7 +485,7 @@ NeighborList NeighborList::SelectForward( dip::uint procDim ) const { #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE("[DIPlib] testing the NeighborList class") { dip::dfloat x = 1.2; diff --git a/src/library/physical_dimensions.cpp b/src/library/physical_dimensions.cpp index 64c3fb4f..69ff54e5 100644 --- a/src/library/physical_dimensions.cpp +++ b/src/library/physical_dimensions.cpp @@ -518,7 +518,7 @@ dip::String Units::StringRepresentation( bool unicode ) const { #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE("[DIPlib] testing the dip::Units class") { // Note: further tested at the same time as dip::PhysicalQuantity below diff --git a/src/library/pixel_table.cpp b/src/library/pixel_table.cpp index 9ceaef9d..0a05dd4b 100644 --- a/src/library/pixel_table.cpp +++ b/src/library/pixel_table.cpp @@ -461,7 +461,7 @@ void PixelTable::AddDistanceToOriginAsWeights() { #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE("[DIPlib] testing the PixelTable class") { dip::PixelTable pt( "elliptic", dip::FloatArray{ 10.1, 12.7, 5.3 }, 1 ); diff --git a/src/library/types.cpp b/src/library/types.cpp index baa21763..b8ccf41c 100644 --- a/src/library/types.cpp +++ b/src/library/types.cpp @@ -19,7 +19,7 @@ */ #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/library/types.h" DOCTEST_TEST_CASE("[DIPlib] testing the dip::bin class") { diff --git a/src/library/unit_tests.cpp b/src/library/unit_tests.cpp index 9e383026..0fb3a814 100644 --- a/src/library/unit_tests.cpp +++ b/src/library/unit_tests.cpp @@ -26,7 +26,7 @@ #ifdef DIP_CONFIG_DOCTEST_IN_SHARED_LIB #define DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL -#include "doctest.h" +#include #include "diplib.h" #include "diplib/linear.h" @@ -51,7 +51,7 @@ int main( int argc, const char* const* argv ) { #else // !DIP_CONFIG_DOCTEST_IN_SHARED_LIB #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN -#include "doctest.h" +#include #endif // DIP_CONFIG_DOCTEST_IN_SHARED_LIB @@ -61,7 +61,7 @@ int main( int argc, const char* const* argv ) { #define DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL #define DOCTEST_CONFIG_IMPLEMENT -#include "doctest.h" +#include #endif // DIP_CONFIG_DOCTEST_IN_SHARED_LIB diff --git a/src/linear/convolution.cpp b/src/linear/convolution.cpp index 4a909bb8..e60f4862 100644 --- a/src/linear/convolution.cpp +++ b/src/linear/convolution.cpp @@ -556,7 +556,7 @@ void GeneralConvolution( #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/statistics.h" #include "diplib/generation.h" #include "diplib/iterators.h" diff --git a/src/linear/finitediff.cpp b/src/linear/finitediff.cpp index 3b899655..86a4c634 100644 --- a/src/linear/finitediff.cpp +++ b/src/linear/finitediff.cpp @@ -71,7 +71,7 @@ void FiniteDifference( } // namespace dip #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/statistics.h" #include "diplib/iterators.h" diff --git a/src/linear/gauss.cpp b/src/linear/gauss.cpp index 727d375a..b3053166 100644 --- a/src/linear/gauss.cpp +++ b/src/linear/gauss.cpp @@ -402,7 +402,7 @@ void GaussFT( } // namespace dip #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/statistics.h" #include "diplib/iterators.h" #include "diplib/testing.h" diff --git a/src/linear/gaussiir.cpp b/src/linear/gaussiir.cpp index 8ae26031..4ddd8131 100644 --- a/src/linear/gaussiir.cpp +++ b/src/linear/gaussiir.cpp @@ -795,7 +795,7 @@ void GaussIIR( } // namespace dip #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/statistics.h" #include "diplib/iterators.h" #include "diplib/testing.h" diff --git a/src/linear/separate_filter.cpp b/src/linear/separate_filter.cpp index c69cdcef..55226deb 100644 --- a/src/linear/separate_filter.cpp +++ b/src/linear/separate_filter.cpp @@ -128,7 +128,7 @@ OneDimensionalFilterArray SeparateFilter( Image const& c_in ) { #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/statistics.h" //#include "diplib/timer.h" diff --git a/src/mapping/lookup_table.cpp b/src/mapping/lookup_table.cpp index 44f8241a..41b94fdb 100644 --- a/src/mapping/lookup_table.cpp +++ b/src/mapping/lookup_table.cpp @@ -459,7 +459,7 @@ Image::Pixel LookupTable::Apply( dfloat value, InterpolationMode interpolation ) #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/iterators.h" DOCTEST_TEST_CASE( "[DIPlib] testing dip::LookupTable" ) { diff --git a/src/math/arithmetic.cpp b/src/math/arithmetic.cpp index df06841e..d64ce6be 100644 --- a/src/math/arithmetic.cpp +++ b/src/math/arithmetic.cpp @@ -493,7 +493,7 @@ void Invert( } // namespace dip #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/math.h" #include "diplib/testing.h" diff --git a/src/math/projection.cpp b/src/math/projection.cpp index d1ec9f49..20958ecd 100644 --- a/src/math/projection.cpp +++ b/src/math/projection.cpp @@ -1361,7 +1361,7 @@ void PositionPercentile( #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE("[DIPlib] testing the projection function mechanics") { // Testing that the ProjectionScan framework works appropriately. diff --git a/src/measurement/chain_code.cpp b/src/measurement/chain_code.cpp index d88bc0b8..0f28fdc6 100644 --- a/src/measurement/chain_code.cpp +++ b/src/measurement/chain_code.cpp @@ -200,7 +200,7 @@ dip::Polygon ChainCode::Polygon() const { } #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/pixel_table.h" #include "diplib/morphology.h" diff --git a/src/measurement/image_chain_code.cpp b/src/measurement/image_chain_code.cpp index 270fa082..0449e74f 100644 --- a/src/measurement/image_chain_code.cpp +++ b/src/measurement/image_chain_code.cpp @@ -220,7 +220,7 @@ void ChainCode::Image( dip::Image& out ) const { #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE("[DIPlib] testing chain code conversion to image and back") { dip::ChainCode cc; diff --git a/src/measurement/measure_polygon.cpp b/src/measurement/measure_polygon.cpp index 9d00ca50..cc2069de 100644 --- a/src/measurement/measure_polygon.cpp +++ b/src/measurement/measure_polygon.cpp @@ -324,7 +324,7 @@ dfloat Polygon::BendingEnergy() const { #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE("[DIPlib] testing chain code polygons") { dip::ChainCode cc; diff --git a/src/measurement/measurement.cpp b/src/measurement/measurement.cpp index 4a169be6..debaf553 100644 --- a/src/measurement/measurement.cpp +++ b/src/measurement/measurement.cpp @@ -401,7 +401,7 @@ StatisticsAccumulator SampleStatistics( Measurement::IteratorFeature const& feat #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE( "[DIPlib] testing dip::Measurement" ) { diff --git a/src/measurement/polygon.cpp b/src/measurement/polygon.cpp index 538363ff..a13f73fe 100644 --- a/src/measurement/polygon.cpp +++ b/src/measurement/polygon.cpp @@ -251,7 +251,7 @@ ConvexHull::ConvexHull( dip::Polygon const& polygon ) { } // namespace dip #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE("[DIPlib] testing polygon manipulation") { dip::Polygon p; diff --git a/src/morphology/basic.cpp b/src/morphology/basic.cpp index 096d18b6..910431d7 100644 --- a/src/morphology/basic.cpp +++ b/src/morphology/basic.cpp @@ -874,7 +874,7 @@ void BasicMorphology( #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/statistics.h" #include "diplib/iterators.h" diff --git a/src/regions/label.cpp b/src/regions/label.cpp index 6e9ce201..d20f7b16 100644 --- a/src/regions/label.cpp +++ b/src/regions/label.cpp @@ -425,7 +425,7 @@ dip::uint Label( } // namespace dip #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/generation.h" #include "diplib/statistics.h" #include "diplib/binary.h" diff --git a/src/support/accumulators.cpp b/src/support/accumulators.cpp index a97622e5..af6bf7dd 100644 --- a/src/support/accumulators.cpp +++ b/src/support/accumulators.cpp @@ -19,7 +19,7 @@ */ #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/accumulators.h" #include "diplib/random.h" diff --git a/src/support/gaussian_mixture.cpp b/src/support/gaussian_mixture.cpp index 9e2952db..2752fb45 100644 --- a/src/support/gaussian_mixture.cpp +++ b/src/support/gaussian_mixture.cpp @@ -149,7 +149,7 @@ std::vector< GaussianParameters > GaussianMixtureModel( #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/generation.h" DOCTEST_TEST_CASE("[DIPlib] testing GaussianMixtureModel") { diff --git a/src/support/matrix.cpp b/src/support/matrix.cpp index 1cb6544d..a2c1cc00 100644 --- a/src/support/matrix.cpp +++ b/src/support/matrix.cpp @@ -406,7 +406,7 @@ void Solve( #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include DOCTEST_TEST_CASE("[DIPlib] testing the EigenDecomposition functions") { // Test generic symmetric code with 2x2 matrix diff --git a/src/support/numeric.cpp b/src/support/numeric.cpp index d16e1705..e1f43ff5 100644 --- a/src/support/numeric.cpp +++ b/src/support/numeric.cpp @@ -235,7 +235,7 @@ dfloat BesselYN( #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/library/clamp_cast.h" #include "diplib/saturated_arithmetic.h" diff --git a/src/transform/fourier.cpp b/src/transform/fourier.cpp index 7e235f50..4bb7d8ee 100644 --- a/src/transform/fourier.cpp +++ b/src/transform/fourier.cpp @@ -899,7 +899,7 @@ dip::uint OptimalFourierTransformSize( dip::uint size, dip::String const& which #ifdef DIP_CONFIG_ENABLE_DOCTEST -#include "doctest.h" +#include #include "diplib/random.h" DOCTEST_TEST_CASE("[DIPlib] testing the OptimalFourierTransformSize function") { diff --git a/tools/FindEigen3.cmake b/tools/FindEigen3.cmake new file mode 100644 index 00000000..98ab43d9 --- /dev/null +++ b/tools/FindEigen3.cmake @@ -0,0 +1,83 @@ +# - Try to find Eigen3 lib +# +# This module supports requiring a minimum version, e.g. you can do +# find_package(Eigen3 3.1.2) +# to require version 3.1.2 or newer of Eigen3. +# +# Once done this will define +# +# EIGEN3_FOUND - system has eigen lib with correct version +# EIGEN3_INCLUDE_DIR - the eigen include directory +# EIGEN3_VERSION - eigen version + +# Copyright (c) 2006, 2007 Montel Laurent, +# Copyright (c) 2008, 2009 Gael Guennebaud, +# Copyright (c) 2009 Benoit Jacob +# Redistribution and use is allowed according to the terms of the 2-clause BSD license. + +if(NOT Eigen3_FIND_VERSION) + if(NOT Eigen3_FIND_VERSION_MAJOR) + set(Eigen3_FIND_VERSION_MAJOR 2) + endif(NOT Eigen3_FIND_VERSION_MAJOR) + if(NOT Eigen3_FIND_VERSION_MINOR) + set(Eigen3_FIND_VERSION_MINOR 91) + endif(NOT Eigen3_FIND_VERSION_MINOR) + if(NOT Eigen3_FIND_VERSION_PATCH) + set(Eigen3_FIND_VERSION_PATCH 0) + endif(NOT Eigen3_FIND_VERSION_PATCH) + + set(Eigen3_FIND_VERSION + "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}") +endif(NOT Eigen3_FIND_VERSION) + +macro(_eigen3_check_version) + file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header) + + string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match + "${_eigen3_version_header}") + set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}") + string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match + "${_eigen3_version_header}") + set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}") + string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match + "${_eigen3_version_header}") + set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}") + + set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION}) + if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) + set(EIGEN3_VERSION_OK FALSE) + else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) + set(EIGEN3_VERSION_OK TRUE) + endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) + + if(NOT EIGEN3_VERSION_OK) + + message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, " + "but at least version ${Eigen3_FIND_VERSION} is required") + endif(NOT EIGEN3_VERSION_OK) +endmacro(_eigen3_check_version) + +if(EIGEN3_INCLUDE_DIR) + + # in cache already + _eigen3_check_version() + set(EIGEN3_FOUND ${EIGEN3_VERSION_OK}) + +else(EIGEN3_INCLUDE_DIR) + + find_path( + EIGEN3_INCLUDE_DIR + NAMES signature_of_eigen3_matrix_library + PATHS ${CMAKE_INSTALL_PREFIX}/include ${KDE4_INCLUDE_DIR} + PATH_SUFFIXES eigen3 eigen) + + if(EIGEN3_INCLUDE_DIR) + _eigen3_check_version() + endif(EIGEN3_INCLUDE_DIR) + + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK) + + mark_as_advanced(EIGEN3_INCLUDE_DIR) + +endif(EIGEN3_INCLUDE_DIR) diff --git a/tools/FindICS.cmake b/tools/FindICS.cmake new file mode 100644 index 00000000..be7ba45a --- /dev/null +++ b/tools/FindICS.cmake @@ -0,0 +1,48 @@ +# Copyright (C) 2021 LuaDist. +# Created by Peter Kapec +# Modified by Cris Luengo to look for GLFW instead of FreeGLUT, and set a target. +# Modified by Milian Wolff to look for ICS instead of GLFW, and set a target. +# Redistribution and use of this file is allowed according to the terms of the MIT license. +# For details see the COPYRIGHT file distributed with LuaDist. +# Note: +# Searching headers and libraries is very simple and is NOT as powerful as scripts +# distributed with CMake, because LuaDist defines directories to search for. +# Everyone is encouraged to contact the author with improvements. Maybe this file +# becomes part of CMake distribution sometime. + +# - Find ICS +# Find the native ICS headers and libraries. +# +# ICS_INCLUDE_DIRS - where to find libics.h +# ICS_LIBRARIES - List of libraries when using ICS. +# ICS_FOUND - True if ICS found. +# ICS::ICS - Target to link to (automatically sets include directories and linked libraries) + +# Look for the header file. +find_path(ICS_INCLUDE_DIR NAMES libics.h) + +# Look for the library. +find_library(ICS_LIBRARY NAMES ics) + +# Handle the QUIETLY and REQUIRED arguments and set ICS_FOUND to TRUE if all listed variables are TRUE. +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(ICS DEFAULT_MSG ICS_LIBRARY ICS_INCLUDE_DIR) + +# Copy the results to the output variables. +if(ICS_FOUND) + set(ICS_LIBRARIES ${ICS_LIBRARY}) + set(ICS_INCLUDE_DIRS ${ICS_INCLUDE_DIR}) + if (NOT TARGET ICS::ICS) + add_library(ICS::ICS UNKNOWN IMPORTED) + set_target_properties(ICS::ICS PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${ICS_INCLUDE_DIRS}" + IMPORTED_LOCATION "${ICS_LIBRARY}") + endif() + message(STATUS "ICS found: ${ICS_LIBRARY} -- ${ICS_INCLUDE_DIR}") +else() + set(ICS_LIBRARIES) + set(ICS_INCLUDE_DIRS) + message(STATUS "ICS not found") +endif() + +mark_as_advanced(ICS_INCLUDE_DIRS ICS_LIBRARIES)