diff options
| author | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
|---|---|---|
| committer | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
| commit | 54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch) | |
| tree | d915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/itk | |
Diffstat (limited to 'vcpkg/ports/itk')
| -rw-r--r-- | vcpkg/ports/itk/dependencies.diff | 114 | ||||
| -rw-r--r-- | vcpkg/ports/itk/dont-build-gtest.patch | 12 | ||||
| -rw-r--r-- | vcpkg/ports/itk/fftw.diff | 68 | ||||
| -rw-r--r-- | vcpkg/ports/itk/msvc-static-crt.diff | 26 | ||||
| -rw-r--r-- | vcpkg/ports/itk/openjpeg.patch | 522 | ||||
| -rw-r--r-- | vcpkg/ports/itk/portfile.cmake | 290 | ||||
| -rw-r--r-- | vcpkg/ports/itk/rtk/cmp0153.diff | 12 | ||||
| -rw-r--r-- | vcpkg/ports/itk/rtk/getopt-win32.diff | 11 | ||||
| -rw-r--r-- | vcpkg/ports/itk/use-the-lrintf-intrinsic.patch | 15 | ||||
| -rw-r--r-- | vcpkg/ports/itk/var_libraries.patch | 32 | ||||
| -rw-r--r-- | vcpkg/ports/itk/vcpkg.json | 127 | ||||
| -rw-r--r-- | vcpkg/ports/itk/wrapping.patch | 14 |
12 files changed, 1243 insertions, 0 deletions
diff --git a/vcpkg/ports/itk/dependencies.diff b/vcpkg/ports/itk/dependencies.diff new file mode 100644 index 0000000..9b00a6b --- /dev/null +++ b/vcpkg/ports/itk/dependencies.diff @@ -0,0 +1,114 @@ +diff --git a/CMake/ITKConfig.cmake.in b/CMake/ITKConfig.cmake.in +index 7a77ae3..6a565e8 100644 +--- a/CMake/ITKConfig.cmake.in ++++ b/CMake/ITKConfig.cmake.in +@@ -1,3 +1,8 @@ ++include(CMakeFindDependencyMacro) ++find_dependency(double-conversion CONFIG) ++find_dependency(OpenJPEG CONFIG) ++find_dependency(VXL CONFIG) ++include("${VXL_CMAKE_DIR}/UseVXL.cmake") + #----------------------------------------------------------------------------- + # + # ITKConfig.cmake - ITK CMake configuration file for external projects. +diff --git a/CMake/itkOpenCL.cmake b/CMake/itkOpenCL.cmake +index 21aab8c..f2bf8ae 100644 +--- a/CMake/itkOpenCL.cmake ++++ b/CMake/itkOpenCL.cmake +@@ -1,5 +1,7 @@ + if(ITK_USE_GPU) + find_package(OpenCL REQUIRED) ++ set(OPENCL_INCLUDE_DIRS "${OpenCL_INCLUDE_DIRS}") ++ set(OPENCL_LIBRARIES "${OpenCL_LIBRARIES}") + if(NOT ${OPENCL_FOUND}) + message(FATAL "Could not find OpenCL") + endif() +diff --git a/Modules/ThirdParty/DoubleConversion/CMakeLists.txt b/Modules/ThirdParty/DoubleConversion/CMakeLists.txt +index 135c1d3..f644a32 100644 +--- a/Modules/ThirdParty/DoubleConversion/CMakeLists.txt ++++ b/Modules/ThirdParty/DoubleConversion/CMakeLists.txt +@@ -7,9 +7,9 @@ option(ITK_USE_SYSTEM_DOUBLECONVERSION + mark_as_advanced(ITK_USE_SYSTEM_DOUBLECONVERSION) + + if(ITK_USE_SYSTEM_DOUBLECONVERSION) +- find_package(double-conversion 3.1.6 REQUIRED) ++ find_package(double-conversion 3.1.6 REQUIRED GLOBAL) + get_target_property(ITKDoubleConversion_INCLUDE_DIRS double-conversion::double-conversion INTERFACE_INCLUDE_DIRECTORIES) +- get_target_property(ITKDoubleConversion_LIBRARIES double-conversion::double-conversion LOCATION) ++ set(ITKDoubleConversion_LIBRARIES double-conversion::double-conversion) + else() + set(ITKDoubleConversion_INCLUDE_DIRS + ${ITKDoubleConversion_SOURCE_DIR}/src +diff --git a/Modules/ThirdParty/Eigen3/CMakeLists.txt b/Modules/ThirdParty/Eigen3/CMakeLists.txt +index 8dbbb86..428d335 100644 +--- a/Modules/ThirdParty/Eigen3/CMakeLists.txt ++++ b/Modules/ThirdParty/Eigen3/CMakeLists.txt +@@ -88,7 +88,7 @@ find_package(${_Eigen3_SYSTEM_OR_INTERNAL} ${_Eigen3_min_version} REQUIRED CONFI + # Eigen3 targets are not installed if ITK_USE_SYSTEM_EIGEN==True + itk_module_impl() + +-configure_file(src/itk_eigen.h.in src/itk_eigen.h) ++configure_file(src/itk_eigen.h.in src/itk_eigen.h @ONLY) + install(FILES ${ITKEigen3_BINARY_DIR}/src/itk_eigen.h + DESTINATION ${ITKEigen3_INSTALL_INCLUDE_DIR} + COMPONENT Development +diff --git a/Modules/ThirdParty/MINC/CMakeLists.txt b/Modules/ThirdParty/MINC/CMakeLists.txt +index 5644257..9744d7c 100644 +--- a/Modules/ThirdParty/MINC/CMakeLists.txt ++++ b/Modules/ThirdParty/MINC/CMakeLists.txt +@@ -5,7 +5,7 @@ set(ITKMINC_THIRD_PARTY 1) + set(ITKMINC_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/src) + if(ITK_USE_SYSTEM_MINC) + +- find_package(LIBMINC REQUIRED) ++ find_package(LIBMINC REQUIRED GLOBAL) + + set(ITKMINC_SYSTEM_INCLUDE_DIRS ${LIBMINC_INCLUDE_DIRS} ) + set(ITKMINC_SYSTEM_LIBRARY_DIRS ${LIBMINC_LIBRARY_DIRS} ) +diff --git a/Modules/ThirdParty/OpenJPEG/CMakeLists.txt b/Modules/ThirdParty/OpenJPEG/CMakeLists.txt +index 103eaa9..b59eb81 100644 +--- a/Modules/ThirdParty/OpenJPEG/CMakeLists.txt ++++ b/Modules/ThirdParty/OpenJPEG/CMakeLists.txt +@@ -1,12 +1,19 @@ + project(ITKOpenJPEG) + set(ITKOpenJPEG_THIRD_PARTY 1) + ++if(ITK_USE_SYSTEM_OpenJPEG) ++ find_package(OpenJPEG CONFIG REQUIRED GLOBAL) ++ set(ITKOpenJPEG_INCLUDE_DIRS "") ++ set(ITKOpenJPEG_LIBRARIES $<TARGET_NAME:openjp2>) ++ set(ITKOpenJPEG_NO_SRC 1) ++else() + set(ITKOpenJPEG_INCLUDE_DIRS + ${ITKOpenJPEG_BINARY_DIR}/src/openjpeg + ${ITKOpenJPEG_SOURCE_DIR}/src/openjpeg + ) + set(ITKOpenJPEG_LIBRARIES itkopenjpeg) + set(ITK_LIBRARY_PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS FALSE) ++endif() + + itk_module_impl() + +diff --git a/Modules/ThirdParty/VNL/CMakeLists.txt b/Modules/ThirdParty/VNL/CMakeLists.txt +index c379a24..25fdb8d 100644 +--- a/Modules/ThirdParty/VNL/CMakeLists.txt ++++ b/Modules/ThirdParty/VNL/CMakeLists.txt +@@ -5,7 +5,7 @@ option(ITK_USE_SYSTEM_VXL "Use an outside build of VXL." OFF) + mark_as_advanced(ITK_USE_SYSTEM_VXL) + + if(ITK_USE_SYSTEM_VXL) +- find_package(VXL 3.0.0 REQUIRED) ++ find_package(VXL 3.0.0 REQUIRED GLOBAL) + # 3.0.0 is the first version of VXL that supports + # the requirement of front() and back() members + # in the vnl_vector and vnl_vector_fixed. +@@ -17,7 +17,8 @@ if(ITK_USE_SYSTEM_VXL) + ${VXL_CORE_INCLUDE_DIR} + ) + set(ITKVNL_LIBRARIES vnl_algo vnl v3p_netlib netlib vcl) +- set(ITKVNL_SYSTEM_LIBRARY_DIRS "${VXL_LIBRARY_DIR}") ++ list(TRANSFORM ITKVNL_LIBRARIES REPLACE "^(.+)\$" "\$<TARGET_NAME:\\1>") ++ set(ITKVNL_SYSTEM_LIBRARY_DIRS "") + set(ITKVNL_NO_SRC 1) + else() + diff --git a/vcpkg/ports/itk/dont-build-gtest.patch b/vcpkg/ports/itk/dont-build-gtest.patch new file mode 100644 index 0000000..ecea767 --- /dev/null +++ b/vcpkg/ports/itk/dont-build-gtest.patch @@ -0,0 +1,12 @@ +diff --git a/Modules/ThirdParty/GoogleTest/itk-module.cmake b/Modules/ThirdParty/GoogleTest/itk-module.cmake
+index 5571748129..19ebb60885 100644
+--- a/Modules/ThirdParty/GoogleTest/itk-module.cmake
++++ b/Modules/ThirdParty/GoogleTest/itk-module.cmake
+@@ -3,6 +3,7 @@ Google's C++ test framework.")
+
+ itk_module(ITKGoogleTest
+ DEPENDS
++ EXCLUDE_FROM_DEFAULT
+ DESCRIPTION
+ "${DOCUMENTATION}"
+ )
diff --git a/vcpkg/ports/itk/fftw.diff b/vcpkg/ports/itk/fftw.diff new file mode 100644 index 0000000..6d397e2 --- /dev/null +++ b/vcpkg/ports/itk/fftw.diff @@ -0,0 +1,68 @@ +diff --git a/CMake/FindFFTW.cmake b/CMake/FindFFTW.cmake +index 709c0cd..64baa8e 100644 +--- a/CMake/FindFFTW.cmake ++++ b/CMake/FindFFTW.cmake +@@ -30,7 +30,27 @@ + ## to set the initial value of the CMake variable `MKLROOT` (see + ## https://software.intel.com/en-us/mkl-linux-developer-guide-scripts-to-set-environment-variables). + +-if(ITK_USE_FFTWD OR ITK_USE_FFTWF) ++set(FFTW_INCLUDE "") ++if(ITK_USE_CUFFTW) ++ find_package(CUDAToolkit REQUIRED) ++ find_path(CUFFTW_INCLUDE_PATH cufftw.h PATHS ${CUDAToolkit_INCLUDE_DIRS} NO_DEFAULT_PATH REQUIRED) ++ set(FFTW_INCLUDE ${CUFFTW_INCLUDE_PATH}) ++ set(FFTWD_LIBRARIES CUDA::cufftw) ++ set(FFTWD_FOUND 1) ++ set(FFTWF_LIBRARIES CUDA::cufftw) ++ set(FFTWF_FOUND 1) ++elseif(ITK_USE_FFTWD OR ITK_USE_FFTWF) ++ find_path(FFTW_INCLUDE_PATH fftw3.h REQUIRED) ++ set(FFTW_INCLUDE ${CUFFTW_INCLUDE_PATH}) ++ if(ITK_USE_FFTWD) ++ find_package(FFTWD NAMES FFTW3 CONFIG REQUIRED) ++ set(FFTWD_LIBRARIES FFTW3::fftw3) ++ endif() ++ if(ITK_USE_FFTWF) ++ find_package(FFTWF NAMES FFTW3f CONFIG REQUIRED) ++ set(FFTWF_LIBRARIES FFTW3::fftw3f) ++ endif() ++elseif(0) + + if(ITK_USE_MKL) + # If the user has provided the MKL include path then search nearby for library files +diff --git a/CMake/ITKConfig.cmake.in b/CMake/ITKConfig.cmake.in +index 9066d4f..4ec0266 100644 +--- a/CMake/ITKConfig.cmake.in ++++ b/CMake/ITKConfig.cmake.in +@@ -3,6 +3,16 @@ include(CMakeFindDependencyMacro) + find_dependency(OpenJPEG CONFIG) + find_dependency(VXL CONFIG) + include("${VXL_CMAKE_DIR}/UseVXL.cmake") ++if("@ITK_USE_CUFFTW@") ++ find_dependency(CUDAToolkit) ++else() ++ if("@ITK_USE_FFTWD@") ++ find_dependency(FFTW3 CONFIG) ++ endif() ++ if("@ITK_USE_FFTWF@") ++ find_dependency(FFTW3f CONFIG) ++ endif() ++endif() + #----------------------------------------------------------------------------- + # + # ITKConfig.cmake - ITK CMake configuration file for external projects. +diff --git a/Modules/Filtering/FFT/src/CMakeLists.txt b/Modules/Filtering/FFT/src/CMakeLists.txt +index 83b176c..b51bc48 100644 +--- a/Modules/Filtering/FFT/src/CMakeLists.txt ++++ b/Modules/Filtering/FFT/src/CMakeLists.txt +@@ -10,6 +10,9 @@ endif() + itk_module_add_library(ITKFFT ${ITKFFT_SRCS}) + + # this library is only needed if FFTW is used ++if(ITK_USE_CUFFTW) ++ target_link_libraries(ITKFFT LINK_PUBLIC CUDA::cufftw) ++endif() + if(ITK_USE_FFTWF + OR ITK_USE_FFTWD + AND NOT ITK_USE_CUFFTW) diff --git a/vcpkg/ports/itk/msvc-static-crt.diff b/vcpkg/ports/itk/msvc-static-crt.diff new file mode 100644 index 0000000..2aef90d --- /dev/null +++ b/vcpkg/ports/itk/msvc-static-crt.diff @@ -0,0 +1,26 @@ +diff --git a/CMake/ITKConfig.cmake.in b/CMake/ITKConfig.cmake.in +index 6a565e8..ebf4230 100644 +--- a/CMake/ITKConfig.cmake.in ++++ b/CMake/ITKConfig.cmake.in +@@ -56,7 +56,7 @@ set(ITK_BUILD_SHARED "@ITK_BUILD_SHARED_LIBS@") + set(ITK_LIBRARY_BUILD_TYPE "@ITK_LIBRARY_BUILD_TYPE@") + + # Whether ITK links to MSVC's static CRT (/MT and /MTd). +-set(ITK_MSVC_STATIC_CRT "@ITK_MSVC_STATIC_RUNTIME_LIBRARY_value@") ++set(ITK_MSVC_STATIC_CRT "@ITK_MSVC_STATIC_CRT@") + + # Whether ITK examples were built. + set(ITK_BUILD_EXAMPLES "@BUILD_EXAMPLES@") +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1267b1a..da4bbb8 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -130,7 +130,7 @@ if(MSVC) #-- Configure MSVC_STATIC_RUNTIME only if using MSVC environment + option(ITK_MSVC_STATIC_RUNTIME_LIBRARY "Link to MSVC's static CRT (/MT and /MTd). + OFF (default) means link to regular, dynamic CRT (/MD and /MDd)." OFF) + mark_as_advanced(ITK_MSVC_STATIC_RUNTIME_LIBRARY) +- set(ITK_MSVC_STATIC_RUNTIME_LIBRARY_value ${ITK_MSVC_STATIC_RUNTIME_LIBRARY}) ++ set(ITK_MSVC_STATIC_CRT ${ITK_MSVC_STATIC_RUNTIME_LIBRARY}) + if(ITK_MSVC_STATIC_RUNTIME_LIBRARY) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") + message(STATUS "Using MSVC's static CRT (/MT and /MTd)") diff --git a/vcpkg/ports/itk/openjpeg.patch b/vcpkg/ports/itk/openjpeg.patch new file mode 100644 index 0000000..9de372e --- /dev/null +++ b/vcpkg/ports/itk/openjpeg.patch @@ -0,0 +1,522 @@ +diff --git a/Modules/IO/JPEG2000/src/itkJPEG2000ImageIO.cxx b/Modules/IO/JPEG2000/src/itkJPEG2000ImageIO.cxx +index 3592573..aefb8a2 100644 +--- a/Modules/IO/JPEG2000/src/itkJPEG2000ImageIO.cxx ++++ b/Modules/IO/JPEG2000/src/itkJPEG2000ImageIO.cxx +@@ -26,9 +26,7 @@ + + extern "C" + { +-#include "openjpeg.h" +-#include "j2k.h" +-#include "jp2.h" ++#include <openjpeg.h> + } + + +@@ -62,8 +60,7 @@ public: + OPJ_UINT32 m_TileStartX; + OPJ_UINT32 m_TileStartY; + +- OPJ_UINT32 m_NumberOfTilesInX; +- OPJ_UINT32 m_NumberOfTilesInY; ++ OPJ_UINT32 m_NumberOfTiles; + + opj_dparameters_t m_DecompressionParameters; /* decompression parameters */ + }; +@@ -86,8 +83,7 @@ JPEG2000ImageIO::JPEG2000ImageIO() + this->m_Internal->m_TileStartX = 0; + this->m_Internal->m_TileStartY = 0; + +- this->m_Internal->m_NumberOfTilesInX = 0; +- this->m_Internal->m_NumberOfTilesInY = 0; ++ this->m_Internal->m_NumberOfTiles = 0; + + const char * extensions[] = { ".j2k", ".jp2", ".jpt" }; + +@@ -139,22 +135,16 @@ JPEG2000ImageIO::ReadImageInformation() + { + itkDebugMacro("ReadImageInformation()"); + +- FILE * l_file = fopen(this->m_FileName.c_str(), "rb"); +- +- /* decompression parameters */ ++ /* set decoding parameters to default values */ ++ opj_set_default_decoder_parameters(&(this->m_Internal->m_DecompressionParameters)); + +- if (!l_file) ++ opj_stream_t * cio = opj_stream_create_default_file_stream(this->m_FileName.c_str(), true); ++ if (!cio) + { + itkExceptionMacro("JPEG2000ImageIO failed to open file for reading: " << this->GetFileName() << std::endl + << "Reason: " + << itksys::SystemTools::GetLastSystemError()); + } +- +- /* set decoding parameters to default values */ +- opj_set_default_decoder_parameters(&(this->m_Internal->m_DecompressionParameters)); +- +- opj_stream_t * cio = opj_stream_create_default_file_stream(l_file, true); +- + this->m_Internal->m_Dinfo = nullptr; /* handle to a decompressor */ + + opj_image_t * l_image = nullptr; +@@ -187,14 +177,14 @@ JPEG2000ImageIO::ReadImageInformation() + /* JPEG-2000 codestream */ + + /* get a decoder handle */ +- this->m_Internal->m_Dinfo = opj_create_decompress(CODEC_J2K); ++ this->m_Internal->m_Dinfo = opj_create_decompress(OPJ_CODEC_J2K); + if (!this->m_Internal->m_Dinfo) + { + opj_stream_destroy(cio); +- fclose(l_file); ++ // fclose(l_file); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " + << this->GetFileName() << std::endl +- << "Reason: opj_create_decompress(CODEC_J2K) returns nullptr"); ++ << "Reason: opj_create_decompress(OPJ_CODEC_J2K) returns nullptr"); + } + break; + } +@@ -202,14 +192,14 @@ JPEG2000ImageIO::ReadImageInformation() + { + /* JPEG 2000 compressed image data */ + /* get a decoder handle */ +- this->m_Internal->m_Dinfo = opj_create_decompress(CODEC_JP2); ++ this->m_Internal->m_Dinfo = opj_create_decompress(OPJ_CODEC_JP2); + if (!this->m_Internal->m_Dinfo) + { + opj_stream_destroy(cio); +- fclose(l_file); ++ // fclose(l_file); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " + << this->GetFileName() << std::endl +- << "Reason: opj_create_decompress(CODEC_JP2) returns nullptr"); ++ << "Reason: opj_create_decompress(OPJ_CODEC_JP2) returns nullptr"); + } + break; + } +@@ -217,20 +207,19 @@ JPEG2000ImageIO::ReadImageInformation() + { + /* JPEG 2000, JPIP */ + /* get a decoder handle */ +- this->m_Internal->m_Dinfo = opj_create_decompress(CODEC_JPT); ++ this->m_Internal->m_Dinfo = opj_create_decompress(OPJ_CODEC_JPT); + if (!this->m_Internal->m_Dinfo) + { + opj_stream_destroy(cio); +- fclose(l_file); ++ // fclose(l_file); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " + << this->GetFileName() << std::endl +- << "Reason: opj_create_decompress(CODEC_JPT) returns nullptr"); ++ << "Reason: opj_create_decompress(OPJ_CODEC_JPT) returns nullptr"); + } + break; + } + default: + opj_stream_destroy(cio); +- fclose(l_file); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " + << this->GetFileName() << std::endl + << "Reason: " +@@ -247,27 +236,11 @@ JPEG2000ImageIO::ReadImageInformation() + << "Reason: opj_setup_decoder returns false"); + } + +- // Image parameters - first tile +- OPJ_INT32 l_tile_x0; +- OPJ_INT32 l_tile_y0; + +- // Image parameters - tile width, height and number of tiles +- OPJ_UINT32 l_tile_width; +- OPJ_UINT32 l_tile_height; +- OPJ_UINT32 l_nb_tiles_x; +- OPJ_UINT32 l_nb_tiles_y; + + itkDebugMacro("Trying to read header now..."); + +- bResult = opj_read_header(this->m_Internal->m_Dinfo, +- &l_image, +- &l_tile_x0, +- &l_tile_y0, +- &l_tile_width, +- &l_tile_height, +- &l_nb_tiles_x, +- &l_nb_tiles_y, +- cio); ++ bResult = opj_read_header(cio, this->m_Internal->m_Dinfo, &l_image); + + if (!bResult) + { +@@ -283,14 +256,22 @@ JPEG2000ImageIO::ReadImageInformation() + << "Reason: Error whle reading image header"); + } + ++ // Image parameters - first tile ++ OPJ_INT32 l_tile_x0=l_image->x0; ++ OPJ_INT32 l_tile_y0=l_image->y0; ++ ++ // Image parameters - tile width, height and number of tiles ++ OPJ_UINT32 l_tile_width=l_image->x1; ++ OPJ_UINT32 l_tile_height=l_image->y1; ++ OPJ_UINT32 l_nb_tiles=l_image->numcomps; ++ + this->m_Internal->m_TileStartX = l_tile_x0; + this->m_Internal->m_TileStartY = l_tile_y0; + + this->m_Internal->m_TileWidth = l_tile_width; + this->m_Internal->m_TileHeight = l_tile_height; + +- this->m_Internal->m_NumberOfTilesInX = l_nb_tiles_x; +- this->m_Internal->m_NumberOfTilesInY = l_nb_tiles_y; ++ this->m_Internal->m_NumberOfTiles = l_nb_tiles; + + + itkDebugMacro("Number of Components = " << l_image->numcomps); +@@ -319,7 +300,7 @@ JPEG2000ImageIO::ReadImageInformation() + this->SetPixelType(IOPixelEnum::SCALAR); + break; + case 3: +- if (l_image->color_space != CLRSPC_SRGB) ++ if (l_image->color_space != OPJ_CLRSPC_SRGB) + { + itkWarningMacro("file does not specify color space, assuming sRGB"); + } +@@ -335,8 +316,7 @@ JPEG2000ImageIO::ReadImageInformation() + itkDebugMacro("Tile Start Y = " << this->m_Internal->m_TileStartY); + itkDebugMacro("Tile Width = " << this->m_Internal->m_TileWidth); + itkDebugMacro("Tile Height = " << this->m_Internal->m_TileHeight); +- itkDebugMacro("Number of Tiles X = " << this->m_Internal->m_NumberOfTilesInX); +- itkDebugMacro("Number of Tiles Y = " << this->m_Internal->m_NumberOfTilesInY); ++ itkDebugMacro("Number of Tiles = " << this->m_Internal->m_NumberOfTiles); + + itkDebugMacro("image->x1 = " << l_image->x1); + itkDebugMacro("image->y1 = " << l_image->y1); +@@ -349,7 +329,6 @@ JPEG2000ImageIO::ReadImageInformation() + + /* close the byte stream */ + opj_stream_destroy(cio); +- fclose(l_file); + + if (this->m_Internal->m_Dinfo) + { +@@ -368,16 +347,7 @@ JPEG2000ImageIO::Read(void * buffer) + { + itkDebugMacro("JPEG2000ImageIO::Read() Begin"); + +- FILE * l_file = fopen(this->m_FileName.c_str(), "rb"); +- +- if (!l_file) +- { +- itkExceptionMacro("JPEG2000ImageIO failed to open file for reading: " << this->GetFileName() << std::endl +- << "Reason: " +- << itksys::SystemTools::GetLastSystemError()); +- } +- +- opj_stream_t * l_stream = opj_stream_create_default_file_stream(l_file, true); ++ opj_stream_t * l_stream = opj_stream_create_default_file_stream(this->m_FileName.c_str(), true); + if (!l_stream) + { + itkExceptionMacro("JPEG2000ImageIO failed to read file: " +@@ -397,12 +367,13 @@ JPEG2000ImageIO::Read(void * buffer) + { + /* JPEG-2000 codestream */ + /* get a decoder handle */ +- this->m_Internal->m_Dinfo = opj_create_decompress(CODEC_J2K); ++ this->m_Internal->m_Dinfo = opj_create_decompress(OPJ_CODEC_J2K); + if (!this->m_Internal->m_Dinfo) + { ++ opj_stream_destroy(l_stream); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " + << this->GetFileName() << std::endl +- << "Reason: opj_create_decompress(CODEC_J2K) returns nullptr"); ++ << "Reason: opj_create_decompress(OPJ_CODEC_J2K) returns nullptr"); + } + break; + } +@@ -410,12 +381,13 @@ JPEG2000ImageIO::Read(void * buffer) + { + /* JPEG 2000 compressed image data */ + /* get a decoder handle */ +- this->m_Internal->m_Dinfo = opj_create_decompress(CODEC_JP2); ++ this->m_Internal->m_Dinfo = opj_create_decompress(OPJ_CODEC_JP2); + if (!this->m_Internal->m_Dinfo) + { ++ opj_stream_destroy(l_stream); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " + << this->GetFileName() << std::endl +- << "Reason: opj_create_decompress(CODEC_JP2) returns nullptr"); ++ << "Reason: opj_create_decompress(OPJ_CODEC_JP2) returns nullptr"); + } + break; + } +@@ -423,17 +395,18 @@ JPEG2000ImageIO::Read(void * buffer) + { + /* JPEG 2000, JPIP */ + /* get a decoder handle */ +- this->m_Internal->m_Dinfo = opj_create_decompress(CODEC_JPT); ++ this->m_Internal->m_Dinfo = opj_create_decompress(OPJ_CODEC_JPT); + if (!this->m_Internal->m_Dinfo) + { ++ opj_stream_destroy(l_stream); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " + << this->GetFileName() << std::endl +- << "Reason: opj_create_decompress(CODEC_JPT) returns nullptr"); ++ << "Reason: opj_create_decompress(OPJ_CODEC_JPT) returns nullptr"); + } + break; + } + default: +- fclose(l_file); ++ opj_stream_destroy(l_stream); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " + << this->GetFileName() << std::endl + << "Reason: " +@@ -448,29 +421,13 @@ JPEG2000ImageIO::Read(void * buffer) + << "Reason: opj_setup_decoder returns false"); + } + +- OPJ_INT32 l_tile_x0, l_tile_y0; +- +- OPJ_UINT32 l_tile_width; +- OPJ_UINT32 l_tile_height; +- OPJ_UINT32 l_nb_tiles_x; +- OPJ_UINT32 l_nb_tiles_y; +- +- bool bResult = opj_read_header(this->m_Internal->m_Dinfo, +- &l_image, +- &l_tile_x0, +- &l_tile_y0, +- &l_tile_width, +- &l_tile_height, +- &l_nb_tiles_x, +- &l_nb_tiles_y, +- l_stream); ++ bool bResult = opj_read_header(l_stream, this->m_Internal->m_Dinfo,&l_image); + + if (!bResult) + { + opj_destroy_codec(this->m_Internal->m_Dinfo); + this->m_Internal->m_Dinfo = nullptr; + opj_stream_destroy(l_stream); +- fclose(l_file); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl + << "Reason: opj_read_header returns false"); + } +@@ -499,7 +456,7 @@ JPEG2000ImageIO::Read(void * buffer) + itkDebugMacro("p_end_x = " << p_end_x); + itkDebugMacro("p_end_y = " << p_end_y); + +- bResult = opj_set_decode_area(this->m_Internal->m_Dinfo, p_start_x, p_start_y, p_end_x, p_end_y); ++ bResult = opj_set_decode_area(this->m_Internal->m_Dinfo, l_image, p_start_x, p_start_y, p_end_x, p_end_y); + + itkDebugMacro("opj_set_decode_area() after"); + +@@ -508,7 +465,6 @@ JPEG2000ImageIO::Read(void * buffer) + opj_destroy_codec(this->m_Internal->m_Dinfo); + this->m_Internal->m_Dinfo = nullptr; + opj_stream_destroy(l_stream); +- fclose(l_file); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl + << "Reason: opj_set_decode_area returns false"); + } +@@ -525,13 +481,13 @@ JPEG2000ImageIO::Read(void * buffer) + + OPJ_UINT32 l_max_data_size = 1000; + +- bool l_go_on = true; ++ int l_go_on = true; // should be OBJ_BOOL + + auto * l_data = (OPJ_BYTE *)malloc(1000); + + while (l_go_on) + { +- bool tileHeaderRead = opj_read_tile_header(this->m_Internal->m_Dinfo, ++ bool tileHeaderRead = opj_read_tile_header(this->m_Internal->m_Dinfo, l_stream, + &l_tile_index, + &l_data_size, + &l_current_tile_x0, +@@ -539,14 +495,12 @@ JPEG2000ImageIO::Read(void * buffer) + &l_current_tile_x1, + &l_current_tile_y1, + &l_nb_comps, +- &l_go_on, +- l_stream); ++ &l_go_on); + + if (!tileHeaderRead) + { + free(l_data); + opj_stream_destroy(l_stream); +- fclose(l_file); + opj_destroy_codec(this->m_Internal->m_Dinfo); + opj_image_destroy(l_image); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl +@@ -571,7 +525,6 @@ JPEG2000ImageIO::Read(void * buffer) + if (!l_data) + { + opj_stream_destroy(l_stream); +- fclose(l_file); + opj_destroy_codec(this->m_Internal->m_Dinfo); + opj_image_destroy(l_image); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl +@@ -590,7 +543,6 @@ JPEG2000ImageIO::Read(void * buffer) + { + free(l_data); + opj_stream_destroy(l_stream); +- fclose(l_file); + opj_destroy_codec(this->m_Internal->m_Dinfo); + opj_image_destroy(l_image); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl +@@ -654,7 +606,6 @@ JPEG2000ImageIO::Read(void * buffer) + { + free(l_data); + opj_stream_destroy(l_stream); +- fclose(l_file); + opj_destroy_codec(this->m_Internal->m_Dinfo); + opj_image_destroy(l_image); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl +@@ -666,14 +617,12 @@ JPEG2000ImageIO::Read(void * buffer) + opj_destroy_codec(this->m_Internal->m_Dinfo); + this->m_Internal->m_Dinfo = nullptr; + opj_stream_destroy(l_stream); +- fclose(l_file); + itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl + << "Reason: error whle reading image"); + } + + /* close the byte stream */ + opj_stream_destroy(l_stream); +- fclose(l_file); + + if (this->m_Internal->m_Dinfo) + { +@@ -842,13 +791,13 @@ JPEG2000ImageIO::Write(const void * buffer) + + parameters.numresolution = numberOfResolutions; + +- OPJ_COLOR_SPACE color_space = CLRSPC_GRAY; ++ OPJ_COLOR_SPACE color_space = OPJ_CLRSPC_GRAY; + opj_image_cmptparm_t cmptparms[3]; + + if (this->GetNumberOfComponents() == 3) + { + +- color_space = (this->GetPixelType() == IOPixelEnum::RGB) ? CLRSPC_SRGB : CLRSPC_UNSPECIFIED; ++ color_space = (this->GetPixelType() == IOPixelEnum::RGB) ? OPJ_CLRSPC_SRGB : OPJ_CLRSPC_UNSPECIFIED; + + /* initialize image components */ + memset(&cmptparms[0], 0, 3 * sizeof(opj_image_cmptparm_t)); +@@ -866,7 +815,7 @@ JPEG2000ImageIO::Write(const void * buffer) + + if (this->GetNumberOfComponents() == 1) + { +- color_space = CLRSPC_GRAY; ++ color_space = OPJ_CLRSPC_GRAY; + + /* initialize image components */ + memset(&cmptparms[0], 0, sizeof(opj_image_cmptparm_t)); +@@ -942,32 +891,32 @@ JPEG2000ImageIO::Write(const void * buffer) + opj_codec_t * cinfo = nullptr; + if (extension == ".j2k") + { +- cinfo = opj_create_compress(CODEC_J2K); ++ cinfo = opj_create_compress(OPJ_CODEC_J2K); + if (!cinfo) + { + itkExceptionMacro("JPEG2000ImageIO failed to write file: " + << this->GetFileName() << std::endl +- << "Reason: opj_create_compress(CODEC_J2K) returns nullptr"); ++ << "Reason: opj_create_compress(OPJ_CODEC_J2K) returns nullptr"); + } + } + else if (extension == ".jp2") + { +- cinfo = opj_create_compress(CODEC_JP2); ++ cinfo = opj_create_compress(OPJ_CODEC_JP2); + if (!cinfo) + { + itkExceptionMacro("JPEG2000ImageIO failed to write file: " + << this->GetFileName() << std::endl +- << "Reason: opj_create_compress(CODEC_JP2) returns nullptr"); ++ << "Reason: opj_create_compress(OPJ_CODEC_JP2) returns nullptr"); + } + } + else if (extension == ".jpt") + { +- cinfo = opj_create_compress(CODEC_JPT); ++ cinfo = opj_create_compress(OPJ_CODEC_JPT); + if (!cinfo) + { + itkExceptionMacro("JPEG2000ImageIO failed to write file: " + << this->GetFileName() << std::endl +- << "Reason: opj_create_compress(CODEC_JPT) returns nullptr"); ++ << "Reason: opj_create_compress(OPJ_CODEC_JPT) returns nullptr"); + } + } + else +@@ -991,17 +940,9 @@ JPEG2000ImageIO::Write(const void * buffer) + << "Reason: opj_setup_encoder returns false"); + } + +- FILE * l_file = fopen(parameters.outfile, "wb"); +- if (!l_file) +- { +- itkExceptionMacro("JPEG2000ImageIO failed to open file for writing: " << this->GetFileName() << std::endl +- << "Reason: " +- << itksys::SystemTools::GetLastSystemError()); +- } +- + /* open a byte stream for writing */ + /* allocate memory for all tiles */ +- opj_stream_t * cio = opj_stream_create_default_file_stream(l_file, false); ++ opj_stream_t * cio = opj_stream_create_default_file_stream(parameters.outfile, false); + if (!cio) + { + itkExceptionMacro("JPEG2000ImageIO failed to write file: " +@@ -1019,8 +960,7 @@ JPEG2000ImageIO::Write(const void * buffer) + if (!bSuccess) + { + opj_stream_destroy(cio); +- fclose(l_file); +- itkExceptionMacro("JPEG2000ImageIO failed to write file: " << this->GetFileName() << std::endl ++ itkExceptionMacro("JPEG2000ImageIO failed to write file: " << this->GetFileName() << std::endl + << "Reason: opj_start_compress returns false"); + } + +@@ -1028,7 +968,6 @@ JPEG2000ImageIO::Write(const void * buffer) + if (!bSuccess) + { + opj_stream_destroy(cio); +- fclose(l_file); + itkExceptionMacro("JPEG2000ImageIO failed to write file: " << this->GetFileName() << std::endl + << "Reason: opj_encode returns false"); + } +@@ -1037,14 +976,12 @@ JPEG2000ImageIO::Write(const void * buffer) + if (!bSuccess) + { + opj_stream_destroy(cio); +- fclose(l_file); + itkExceptionMacro("JPEG2000ImageIO failed to write file: " << this->GetFileName() << std::endl + << "Reason: opj_end_compress returns false"); + } + + /* close and free the byte stream */ + opj_stream_destroy(cio); +- fclose(l_file); + + /* free remaining compression structures */ + opj_destroy_codec(cinfo); +diff --git a/Modules/ThirdParty/OpenJPEG/src/itk_openjpeg.h b/Modules/ThirdParty/OpenJPEG/src/itk_openjpeg.h +index 2ad0009..77a48c5 100644 +--- a/Modules/ThirdParty/OpenJPEG/src/itk_openjpeg.h ++++ b/Modules/ThirdParty/OpenJPEG/src/itk_openjpeg.h +@@ -25,6 +25,6 @@ + #ifndef itk_openjpeg_h + #define itk_openjpeg_h + +-#include <itkopenjpeg/openjpeg.h> ++#include <openjpeg.h> + + #endif diff --git a/vcpkg/ports/itk/portfile.cmake b/vcpkg/ports/itk/portfile.cmake new file mode 100644 index 0000000..488dd32 --- /dev/null +++ b/vcpkg/ports/itk/portfile.cmake @@ -0,0 +1,290 @@ +vcpkg_buildpath_length_warning(37) + +vcpkg_download_distfile(PYTHON_GPU_WRAPPING_PATCH + URLS https://github.com/InsightSoftwareConsortium/ITK/commit/e9b3d24f782a42f5586169e048b8d289f869d78a.diff?full_index=1 + FILENAME InsightSoftwareConsortium-ITK-python-gpu-wrapping.patch + SHA512 71526320547b0eb5d0c0e0088e92ff60ba06462b82c531c79784d766361805970d9cad550660c7c85b953ec546b32c181aeab5d9f6d4142764d6f765106982a0 +) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO InsightSoftwareConsortium/ITK + REF "v${VERSION}" + #[[ + When updating the ITK version and SHA512, remember to update the remote module versions below. + Try `vcpkg install itk[core,cuda,rtk] --only-downloads` for suggestions and verification. + #]] + SHA512 426d7e9974951d3e48de3a38e02e4c4fab3b60657d4bac47642cab40b4a47bf5d7dbbead4d0761a89374c05ad55f50be8af70293f63d2516f4a98edce8634d51 + HEAD_REF master + PATCHES + dependencies.diff + fftw.diff + openjpeg.patch + var_libraries.patch + wrapping.patch + use-the-lrintf-intrinsic.patch + dont-build-gtest.patch + msvc-static-crt.diff + "${PYTHON_GPU_WRAPPING_PATCH}" +) +file(REMOVE_RECURSE + "${SOURCE_PATH}/CMake/FindOpenCL.cmake" + "${SOURCE_PATH}/Modules/ThirdParty/GDCM/src" + "${SOURCE_PATH}/Modules/ThirdParty/OpenJPEG/src/openjpeg" + "${SOURCE_PATH}/Modules/ThirdParty/VNL/src" +) + +set(cuda_common_ref 0c20c4ef10d81910c8b2ac4e8446a1544fce3b60) +set(cuda_common_sha 0eb1a6fe85e695345a49887cdd65103bedab72e01ae85ed03e16a8a296c6cb69a8d889a57b22dde7fcc69df4f604c274b04234c8ece306d08361fac5db029069) +file(STRINGS "${SOURCE_PATH}/Modules/Remote/CudaCommon.remote.cmake" cuda_common_git_tag REGEX "GIT_TAG") +if(NOT cuda_common_git_tag MATCHES "${cuda_common_ref}") + message(FATAL_ERROR "cuda_common_ref/sha must be updated, new ${cuda_common_git_tag}") +endif() +if("cuda" IN_LIST FEATURES) + vcpkg_from_github( + OUT_SOURCE_PATH RTK_SOURCE_PATH + REPO RTKConsortium/ITKCudaCommon + REF "${cuda_common_ref}" + SHA512 "${cuda_common_sha}" + HEAD_REF master + ) + file(REMOVE_RECURSE "${SOURCE_PATH}/Modules/Remote/CudaCommon") + file(RENAME "${RTK_SOURCE_PATH}" "${SOURCE_PATH}/Modules/Remote/CudaCommon") + file(COPY_FILE "${SOURCE_PATH}/Modules/Remote/CudaCommon/LICENSE" "${SOURCE_PATH}/CudaCommon LICENSE") +endif() + +set(rtk_ref bfdca5b6b666b4f08f2f7d8039af11a15cc3f831) +set(rtk_sha 10a21fb4b82aa820e507e81a6b6a3c1aaee2ea1edf39364dc1c8d54e6b11b91f22d9993c0b56c0e8e20b6d549fcd6104de4e1c5e664f9ff59f5f93935fb5225a) +file(STRINGS "${SOURCE_PATH}/Modules/Remote/RTK.remote.cmake" rtk_git_tag REGEX "GIT_TAG") +if(NOT rtk_git_tag MATCHES "${rtk_ref}") + message(FATAL_ERROR "rtk_ref/sha must be updated, new ${rtk_git_tag}") +endif() +if("rtk" IN_LIST FEATURES) + # (old hint, not verified) RTK + CUDA + PYTHON + dynamic library linkage will fail and needs upstream fixes. + # RTK's ITK module must be built with ITK. + vcpkg_from_github( + OUT_SOURCE_PATH RTK_SOURCE_PATH + REPO RTKConsortium/RTK + REF "${rtk_ref}" + SHA512 "${rtk_sha}" + HEAD_REF master + PATCHES + rtk/cmp0153.diff + rtk/getopt-win32.diff + ) + file(REMOVE_RECURSE "${SOURCE_PATH}/Modules/Remote/RTK") + file(RENAME "${RTK_SOURCE_PATH}" "${SOURCE_PATH}/Modules/Remote/RTK") + file(COPY_FILE "${SOURCE_PATH}/Modules/Remote/RTK/COPYRIGHT.TXT" "${SOURCE_PATH}/RTK COPYRIGHT.TXT") +endif() + +vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + "vtk" Module_ITKVtkGlue + "cuda" Module_CudaCommon # Requires RTK? + "cuda" RTK_USE_CUDA + #"cuda" CUDA_HAVE_GPU # Automatically set by FindCUDA? + "cufftw" ITK_USE_CUFFTW + "opencl" ITK_USE_GPU + "tbb" Module_ITKTBB + "rtk" Module_RTK + "tools" RTK_BUILD_APPLICATIONS + "opencv" Module_ITKVideoBridgeOpenCV + # There are a lot of more (remote) modules and options in ITK + # feel free to add those as a feature +) + +if("cufftw" IN_LIST FEATURES) + vcpkg_find_cuda(OUT_CUDA_TOOLKIT_ROOT cuda_toolkit_root) + list(APPEND ADDITIONAL_OPTIONS + "-DCUDAToolkit_ROOT=${cuda_toolkit_root}" + ) +endif() + +if("fftw" IN_LIST FEATURES) + # Never set these options to OFF: dual use with feature 'cufftw' + list(APPEND ADDITIONAL_OPTIONS + -DITK_USE_FFTWD=ON + -DITK_USE_FFTWF=ON + ) +endif() + +if("opencl" IN_LIST FEATURES) + list(APPEND ADDITIONAL_OPTIONS # Wrapping options required by OpenCL if build with Python Wrappers + -DITK_WRAP_unsigned_long_long=ON + -DITK_WRAP_signed_long_long=ON + ) +endif() + +if("tools" IN_LIST FEATURES) + if("rtk" IN_LIST FEATURES) + list(APPEND TOOL_NAMES rtkadmmtotalvariation rtkadmmwavelets rtkamsterdamshroud rtkbackprojections rtkbioscangeometry rtkcheckimagequality rtkconjugategradient + rtkdigisensgeometry rtkdrawgeometricphantom rtkdrawshepploganphantom rtkdualenergysimplexdecomposition rtkelektasynergygeometry rtkextractphasesignal + rtkextractshroudsignal rtkfdk rtkfdktwodweights rtkfieldofview rtkforwardprojections rtkfourdconjugategradient rtkfourdfdk rtkfourdrooster rtkfourdsart + rtkgaincorrection rtki0estimation rtkimagxgeometry rtkiterativefdk rtklagcorrection rtklastdimensionl0gradientdenoising rtklut rtkmaskcollimation rtkmcrooster + rtkmotioncompensatedfourdconjugategradient rtkorageometry rtkosem rtkoverlayphaseandshroud rtkparkershortscanweighting rtkprojectgeometricphantom + rtkprojectionmatrix rtkprojections rtkprojectshepploganphantom rtkramp rtkrayboxintersection rtkrayquadricintersection rtkregularizedconjugategradient + rtksart rtkscatterglarecorrection rtksimulatedgeometry rtkspectraldenoiseprojections rtkspectralforwardmodel rtkspectralonestep rtkspectralrooster rtkspectralsimplexdecomposition + rtksubselect rtktotalnuclearvariationdenoising rtktotalvariationdenoising rtktutorialapplication rtkvarianobigeometry rtkvarianprobeamgeometry rtkvectorconjugategradient + rtkwangdisplaceddetectorweighting rtkwarpedbackprojectsequence rtkwarpedforwardprojectsequence rtkwaveletsdenoising rtkxradgeometry) + endif() +endif() + +if("vtk" IN_LIST FEATURES AND EXISTS "${CURRENT_INSTALLED_DIR}/share/vtk/VTKPython-targets.cmake") + # 'vtk[python]' is built using the installed 'python3'. + # For 'find_package(vtk)', itk needs to provide the same version of python. + # Here, it is a purely *transitive* dependency via 'vtk[python]'. + include("${CURRENT_INSTALLED_DIR}/share/python3/vcpkg-port-config.cmake") + vcpkg_get_vcpkg_installed_python(PYTHON3) + list(APPEND ADDITIONAL_OPTIONS + "-DPython3_EXECUTABLE:PATH=${PYTHON3}" + ) +endif() + +if("python" IN_LIST FEATURES) + message(STATUS "${PORT} builds a long time (>1h) with python wrappers enabled!") + vcpkg_get_vcpkg_installed_python(PYTHON3) + list(APPEND ADDITIONAL_OPTIONS + -DITK_WRAP_PYTHON=ON + -DITK_USE_SYSTEM_CASTXML=ON + "-DCASTXML_EXECUTABLE=${CURRENT_HOST_INSTALLED_DIR}/tools/castxml/bin/castxml${VCPKG_HOST_EXECUTABLE_SUFFIX}" + -DPython3_FIND_REGISTRY=NEVER + "-DPython3_EXECUTABLE:PATH=${PYTHON3}" # Required by more than one feature + ) + #ITK_PYTHON_SITE_PACKAGES_SUFFIX should be set to the install dir of the site-packages within vcpkg + + vcpkg_find_acquire_program(SWIG) # Swig is only required for wrapping! + vcpkg_execute_required_process( + COMMAND "${SWIG}" -version + OUTPUT_VARIABLE swig_version + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "swig-version-${TARGET_TRIPLET}" + ) + string(REGEX REPLACE ".*Version ([0-9.]*).*" "\\1" swig_version "${swig_version}") + set(swig_expected "4.2.0") + if(swig_version VERSION_GREATER_EQUAL swig_expected) + vcpkg_execute_required_process( + COMMAND "${SWIG}" -swiglib + OUTPUT_VARIABLE swiglib + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "swiglib-${TARGET_TRIPLET}" + ) + list(APPEND ADDITIONAL_OPTIONS + -DITK_USE_SYSTEM_SWIG=ON + "-DSWIG_EXECUTABLE=${SWIG}" + "-DSWIG_DIR=${swiglib}" + ) + else() + message(WARNING "Found swig ${swig_version}, but TK needs ${swig_expected}. A binary will be downloaded.") + endif() +endif() + +if("opencv" IN_LIST FEATURES) + message(STATUS "${PORT} includes the ITKVideoBridgeOpenCV") + list(APPEND ADDITIONAL_OPTIONS + -DModule_ITKVideoBridgeOpenCV:BOOL=ON + ) +endif() + +if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_CRT_LINKAGE STREQUAL "static") + list(APPEND ADDITIONAL_OPTIONS + -DITK_MSVC_STATIC_RUNTIME_LIBRARY=ON + ) +endif() + +set(USE_64BITS_IDS OFF) +if (VCPKG_TARGET_ARCHITECTURE STREQUAL x64 OR VCPKG_TARGET_ARCHITECTURE STREQUAL arm64) + set(USE_64BITS_IDS ON) +endif() + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + DISABLE_PARALLEL_CONFIGURE + OPTIONS + -DBUILD_TESTING=OFF + -DBUILD_EXAMPLES=OFF + -DCMAKE_DISABLE_FIND_PACKAGE_Git=ON + -DCMAKE_DISABLE_FIND_PACKAGE_Perl=ON + -DITK_DOXYGEN_HTML=OFF + -DITK_FORBID_DOWNLOADS=ON + -DDO_NOT_INSTALL_ITK_TEST_DRIVER=ON + -DITK_SKIP_PATH_LENGTH_CHECKS=ON + -DITK_INSTALL_DATA_DIR=share/itk/data + -DITK_INSTALL_DOC_DIR=share/itk/doc + -DITK_INSTALL_PACKAGE_DIR=share/itk + -DITK_USE_64BITS_IDS=${USE_64BITS_IDS} + -DITK_USE_CONCEPT_CHECKING=ON + #-DITK_USE_SYSTEM_LIBRARIES=ON # enables USE_SYSTEM for all third party libraries, some of which do not have vcpkg ports such as CastXML, SWIG, MINC etc + -DITK_USE_SYSTEM_DOUBLECONVERSION=ON + -DITK_USE_SYSTEM_EXPAT=ON + -DITK_USE_SYSTEM_JPEG=ON + -DITK_USE_SYSTEM_PNG=ON + -DITK_USE_SYSTEM_TIFF=ON + -DITK_USE_SYSTEM_ZLIB=ON + -DITK_USE_SYSTEM_EIGEN=ON + -DITK_USE_SYSTEM_FFTW=ON + -DITK_USE_SYSTEM_HDF5=ON # HDF5 was problematic in the past and still is. ITK still has not figured out how to do it correctly! + -DITK_USE_SYSTEM_GDCM=ON + -DITK_USE_SYSTEM_OpenJPEG=ON # Added by VCPKG + -DITK_USE_SYSTEM_VXL=ON + #-DITK_USE_SYSTEM_CASTXML=ON # needs to be added to vcpkg_find_acquire_program https://data.kitware.com/api/v1/file/hashsum/sha512/b8b6f0aff11fe89ab2fcd1949cc75f2c2378a7bc408827a004396deb5ff5a9976bffe8a597f8db1b74c886ea39eb905e610dce8f5bd7586a4d6c196d7349da8d/download + -DITK_USE_SYSTEM_MINC=ON + -DITK_USE_SYSTEM_GOOGLETEST=ON + -DEXECUTABLE_OUTPUT_PATH=tools/${PORT} + + -DITK_MINIMUM_COMPLIANCE_LEVEL:STRING=1 # To Display all remote modules within cmake-gui + #-DModule_IOSTL=ON # example how to turn on a non-default module + #-DModule_MorphologicalContourInterpolation=ON # example how to turn on a remote module + #-DModule_RLEImage=ON # example how to turn on a remote module + + # Some additional wraping options + #-DITK_WRAP_double=ON + #-DITK_WRAP_complex_double=ON + #-DITK_WRAP_covariant_vector_double=ON + #-DITK_WRAP_vector_double=ON + + ${FEATURE_OPTIONS} + ${ADDITIONAL_OPTIONS} + + OPTIONS_DEBUG + -DRTK_BUILD_APPLICATIONS=OFF + + MAYBE_UNUSED_VARIABLES + EXECUTABLE_OUTPUT_PATH + ITK_USE_SYSTEM_FFTW + ITK_USE_SYSTEM_GOOGLETEST + RTK_BUILD_APPLICATIONS + RTK_USE_CUDA +) +vcpkg_cmake_install() +vcpkg_copy_pdbs() +vcpkg_cmake_config_fixup() + +if(TOOL_NAMES) + vcpkg_copy_tools(TOOL_NAMES ${TOOL_NAMES} AUTO_CLEAN) +endif() + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share") +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") +file(REMOVE "${CURRENT_PACKAGES_DIR}/include/ITK-5.4/vcl_where_root_dir.h") + +if("rtk" IN_LIST FEATURES) + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/ITK-5.4/rtkConfiguration.h" "#define RTK_BINARY_DIR \"${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/Modules/Remote/RTK\"" "") + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/ITK-5.4/rtkConfiguration.h" "#define RTK_DATA_ROOT \"${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/ExternalData/Modules/Remote/RTK/test\"" "") +endif() + +vcpkg_list(SET file_list + "${SOURCE_PATH}/NOTICE" + "${SOURCE_PATH}/LICENSE" +) +if("cuda" IN_LIST FEATURES) + vcpkg_list(APPEND file_list + "${SOURCE_PATH}/CudaCommon LICENSE" + ) +endif() +if("rtk" IN_LIST FEATURES) + vcpkg_list(APPEND file_list + "${SOURCE_PATH}/RTK COPYRIGHT.TXT" + ) +endif() +vcpkg_install_copyright(FILE_LIST ${file_list}) diff --git a/vcpkg/ports/itk/rtk/cmp0153.diff b/vcpkg/ports/itk/rtk/cmp0153.diff new file mode 100644 index 0000000..74ffca1 --- /dev/null +++ b/vcpkg/ports/itk/rtk/cmp0153.diff @@ -0,0 +1,12 @@ +diff --git a/cmake/FindGengetopt.cmake b/cmake/FindGengetopt.cmake +index b7bbfcc..9011e41 100644 +--- a/cmake/FindGengetopt.cmake ++++ b/cmake/FindGengetopt.cmake +@@ -72,6 +72,7 @@ macro (WRAP_GGO GGO_SRCS) + set_source_files_properties(${${GGO_SRCS}} PROPERTIES GENERATED TRUE) + if(CMAKE_COMPILER_IS_GNUCXX) + find_program(DEFAULT_GCC gcc) ++ cmake_policy(SET CMP0153 OLD) + exec_program(${DEFAULT_GCC} ARGS "-dumpversion" OUTPUT_VARIABLE GCCVER) + if("${GCCVER}" VERSION_GREATER "4.5.2") + set_source_files_properties(${${GGO_SRCS}} PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable") diff --git a/vcpkg/ports/itk/rtk/getopt-win32.diff b/vcpkg/ports/itk/rtk/getopt-win32.diff new file mode 100644 index 0000000..0362818 --- /dev/null +++ b/vcpkg/ports/itk/rtk/getopt-win32.diff @@ -0,0 +1,11 @@ +diff --git a/utilities/gengetopt/CMakeLists.txt b/utilities/gengetopt/CMakeLists.txt +index e3f04b2..0f1f1b5 100755 +--- a/utilities/gengetopt/CMakeLists.txt ++++ b/utilities/gengetopt/CMakeLists.txt +@@ -69,3 +69,6 @@ ADD_EXECUTABLE(gengetopt + INCLUDE_DIRECTORIES(.) + INCLUDE_DIRECTORIES(skels) + #INCLUDE_DIRECTORIES(includes) ++if(WIN32) ++ INCLUDE_DIRECTORIES(BEFORE .) # for local getopt.h ++endif() diff --git a/vcpkg/ports/itk/use-the-lrintf-intrinsic.patch b/vcpkg/ports/itk/use-the-lrintf-intrinsic.patch new file mode 100644 index 0000000..27df6cd --- /dev/null +++ b/vcpkg/ports/itk/use-the-lrintf-intrinsic.patch @@ -0,0 +1,15 @@ +diff --git a/Modules/ThirdParty/OpenJPEG/src/openjpeg/opj_includes.h b/Modules/ThirdParty/OpenJPEG/src/openjpeg/opj_includes.h +index e75a220d4d..4b13e1726a 100644 +--- a/Modules/ThirdParty/OpenJPEG/src/openjpeg/opj_includes.h ++++ b/Modules/ThirdParty/OpenJPEG/src/openjpeg/opj_includes.h +@@ -87,8 +87,8 @@ Most compilers implement their own version of this keyword ... + #endif + #endif + +-/* MSVC and Borland C do not have lrintf */ +-#if defined(_MSC_VER) || defined(__BORLANDC__) ++/* MSVC pre 16.8 and Borland C do not have lrintf */ ++#if (defined(_MSC_VER) && _MSC_VER < 1928) || defined(__BORLANDC__) + + /* MSVC 64bits doesn't support _asm */ + #if !defined(_WIN64) diff --git a/vcpkg/ports/itk/var_libraries.patch b/vcpkg/ports/itk/var_libraries.patch new file mode 100644 index 0000000..3cb4e7c --- /dev/null +++ b/vcpkg/ports/itk/var_libraries.patch @@ -0,0 +1,32 @@ +diff --git a/CMake/ITKModuleMacros.cmake b/CMake/ITKModuleMacros.cmake
+index da9f3a902..60420bb0a 100644
+--- a/CMake/ITKModuleMacros.cmake
++++ b/CMake/ITKModuleMacros.cmake
+@@ -162,9 +162,6 @@ macro(itk_module_impl)
+ foreach(dep IN LISTS ITK_MODULE_${itk-module}_DEPENDS)
+ list(APPEND ${itk-module}_LIBRARIES "${${dep}_LIBRARIES}")
+ endforeach()
+- if(${itk-module}_LIBRARIES)
+- list(REMOVE_DUPLICATES ${itk-module}_LIBRARIES)
+- endif()
+ endif()
+
+ if(EXISTS ${${itk-module}_SOURCE_DIR}/include)
+diff --git a/CMake/ITKModuleAPI.cmake b/CMake/ITKModuleAPI.cmake
+index af64d96dc..809335e6d 100644
+--- a/CMake/ITKModuleAPI.cmake
++++ b/CMake/ITKModuleAPI.cmake
+@@ -133,11 +133,10 @@ macro(itk_module_config ns)
+ endforeach()
+ unset(_${ns}_USED_MODULES)
+
+ foreach(
+ v
+- ${ns}_LIBRARIES
+- ${ns}_INCLUDE_DIRS
+- ${ns}_LIBRARY_DIRS
++ ${ns}_INCLUDE_DIRS
++ ${ns}_LIBRARY_DIRS
+ ${ns}_RUNTIME_LIBRARY_DIRS
+ ${ns}_FACTORY_NAMES
+ ${ns}_FACTORY_LIST)
diff --git a/vcpkg/ports/itk/vcpkg.json b/vcpkg/ports/itk/vcpkg.json new file mode 100644 index 0000000..0d1e186 --- /dev/null +++ b/vcpkg/ports/itk/vcpkg.json @@ -0,0 +1,127 @@ +{ + "name": "itk", + "version": "5.4.3", + "description": "Insight Segmentation and Registration Toolkit (ITK) is used for image processing and analysis.", + "homepage": "https://github.com/InsightSoftwareConsortium/ITK", + "license": "Apache-2.0", + "dependencies": [ + "double-conversion", + "eigen3", + "expat", + "gdcm", + { + "name": "hdf5", + "default-features": false, + "features": [ + "cpp" + ] + }, + "libjpeg-turbo", + "libpng", + "minc", + { + "name": "openjpeg", + "default-features": false + }, + { + "name": "tiff", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + }, + "vxl", + "zlib" + ], + "features": { + "cuda": { + "description": "Build CUDA module", + "dependencies": [ + "cuda", + { + "name": "itk", + "default-features": false, + "features": [ + "opencl" + ] + } + ] + }, + "cufftw": { + "description": "Use CUDA FFTW", + "dependencies": [ + "cuda" + ] + }, + "fftw": { + "description": "Enable the FFTW backend", + "dependencies": [ + { + "name": "fftw3", + "features": [ + "threads" + ] + } + ] + }, + "opencl": { + "description": "Use OpenCL", + "dependencies": [ + "opencl" + ] + }, + "opencv": { + "description": "Build ITKVideoBridgeOpenCV module.", + "dependencies": [ + "opencv" + ] + }, + "python": { + "description": "Python functionality for ITK", + "dependencies": [ + "python3", + { + "name": "vcpkg-tool-castxml", + "host": true + } + ] + }, + "rtk": { + "description": "Build RTK Module", + "supports": "!x86", + "license": null + }, + "tbb": { + "description": "Build TBB Module", + "dependencies": [ + "tbb" + ] + }, + "tools": { + "description": "Build RTK with tools", + "dependencies": [ + { + "name": "itk", + "default-features": false, + "features": [ + "rtk" + ] + } + ] + }, + "vtk": { + "description": "Build ITKVtkGlue module.", + "dependencies": [ + { + "name": "vtk", + "default-features": false + } + ] + } + } +} diff --git a/vcpkg/ports/itk/wrapping.patch b/vcpkg/ports/itk/wrapping.patch new file mode 100644 index 0000000..8f11018 --- /dev/null +++ b/vcpkg/ports/itk/wrapping.patch @@ -0,0 +1,14 @@ +diff --git a/Wrapping/TypedefMacros.cmake b/Wrapping/TypedefMacros.cmake
+index e6f8d0bf3..6c000dba8 100644
+--- a/Wrapping/TypedefMacros.cmake
++++ b/Wrapping/TypedefMacros.cmake
+@@ -62,8 +62,7 @@ macro(itk_wrap_module library_name)
+
+ # WRAPPER_LIBRARY_LINK_LIBRARIES. List of other libraries that should
+ # be linked to the wrapper library.
+- set(WRAPPER_LIBRARY_LINK_LIBRARIES ${ITK_LIBRARIES} ${${itk-module}_LIBRARIES})
+-
++ set(WRAPPER_LIBRARY_LINK_LIBRARIES ${ITK_LIBRARIES} ${${library_name}_LIBRARIES})
+ # WRAPPER_SUBMODULE_ORDER. List of *.wrap submodules in the source dir
+ # that should be included/wrapped before the rest in the given order.
+ # Just the submodule group name is needed, not the full path or file name.
|