aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/itk/portfile.cmake
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/itk/portfile.cmake
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/itk/portfile.cmake')
-rw-r--r--vcpkg/ports/itk/portfile.cmake290
1 files changed, 290 insertions, 0 deletions
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})