aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/itk
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/ports/itk')
-rw-r--r--vcpkg/ports/itk/dependencies.diff114
-rw-r--r--vcpkg/ports/itk/dont-build-gtest.patch12
-rw-r--r--vcpkg/ports/itk/fftw.diff68
-rw-r--r--vcpkg/ports/itk/msvc-static-crt.diff26
-rw-r--r--vcpkg/ports/itk/openjpeg.patch522
-rw-r--r--vcpkg/ports/itk/portfile.cmake290
-rw-r--r--vcpkg/ports/itk/rtk/cmp0153.diff12
-rw-r--r--vcpkg/ports/itk/rtk/getopt-win32.diff11
-rw-r--r--vcpkg/ports/itk/use-the-lrintf-intrinsic.patch15
-rw-r--r--vcpkg/ports/itk/var_libraries.patch32
-rw-r--r--vcpkg/ports/itk/vcpkg.json127
-rw-r--r--vcpkg/ports/itk/wrapping.patch14
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.