aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/dcmtk
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/dcmtk
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/dcmtk')
-rw-r--r--vcpkg/ports/dcmtk/dcmtk.patch16
-rw-r--r--vcpkg/ports/dcmtk/dependencies.diff55
-rw-r--r--vcpkg/ports/dcmtk/dictionary_paths.patch26
-rw-r--r--vcpkg/ports/dcmtk/disable-test-setup.diff19
-rw-r--r--vcpkg/ports/dcmtk/msvc.diff12
-rw-r--r--vcpkg/ports/dcmtk/pkgconfig-lib-order.diff60
-rw-r--r--vcpkg/ports/dcmtk/portfile.cmake174
-rw-r--r--vcpkg/ports/dcmtk/usage9
-rw-r--r--vcpkg/ports/dcmtk/vcpkg.json76
9 files changed, 447 insertions, 0 deletions
diff --git a/vcpkg/ports/dcmtk/dcmtk.patch b/vcpkg/ports/dcmtk/dcmtk.patch
new file mode 100644
index 0000000..7f2c95a
--- /dev/null
+++ b/vcpkg/ports/dcmtk/dcmtk.patch
@@ -0,0 +1,16 @@
+diff --git a/CMake/dcmtkPrepare.cmake b/CMake/dcmtkPrepare.cmake
+index 23a9278..15e9391 100644
+--- a/CMake/dcmtkPrepare.cmake
++++ b/CMake/dcmtkPrepare.cmake
+@@ -210,9 +210,9 @@ include(GNUInstallDirs)
+ # CMake's files (DCMTKTarget.cmake, DCMTKConfigVersion.cmake and DCMTKConfig.cmake) are installed
+ # to different installation paths under Unix- and Windows-based systems
+ if(UNIX)
+- set(DCMTK_INSTALL_CMKDIR "${CMAKE_INSTALL_LIBDIR}/cmake/dcmtk")
++ set(DCMTK_INSTALL_CMKDIR "share/dcmtk")
+ elseif(WIN32)
+- set(DCMTK_INSTALL_CMKDIR "cmake")
++ set(DCMTK_INSTALL_CMKDIR "share/dcmtk")
+ endif()
+
+ #-----------------------------------------------------------------------------
diff --git a/vcpkg/ports/dcmtk/dependencies.diff b/vcpkg/ports/dcmtk/dependencies.diff
new file mode 100644
index 0000000..91d61b7
--- /dev/null
+++ b/vcpkg/ports/dcmtk/dependencies.diff
@@ -0,0 +1,55 @@
+diff --git a/CMake/3rdparty.cmake b/CMake/3rdparty.cmake
+index 510027c..eb8fe90 100644
+--- a/CMake/3rdparty.cmake
++++ b/CMake/3rdparty.cmake
+@@ -1,3 +1,11 @@
++set(CMAKE_REQUIRE_FIND_PACKAGE_Iconv "${DCMTK_WITH_ICONV}")
++set(CMAKE_REQUIRE_FIND_PACKAGE_LibXml2 "${DCMTK_WITH_XML}")
++set(CMAKE_REQUIRE_FIND_PACKAGE_OpenSSL "${DCMTK_WITH_OPENSSL}")
++set(CMAKE_REQUIRE_FIND_PACKAGE_PNG "${DCMTK_WITH_PNG}")
++set(CMAKE_REQUIRE_FIND_PACKAGE_TIFF "${DCMTK_WITH_TIFF}")
++set(CMAKE_REQUIRE_FIND_PACKAGE_ZLIB "${DCMTK_WITH_ZLIB}")
++set(CMAKE_REQUIRE_FIND_PACKAGE_OpenJPEG "${DCMTK_WITH_OPENJPEG}")
++
+ set(USE_FIND_PACKAGE_DOCS "Control whether libraries are searched via CMake's find_package() mechanism or a Windows specific fallback")
+ # Advanced user (eg. vcpkg) may want to override this:
+ if(NOT DEFINED DCMTK_USE_FIND_PACKAGE_WIN_DEFAULT)
+@@ -42,7 +49,7 @@ if(DCMTK_USE_FIND_PACKAGE)
+ else()
+ message(STATUS "Info: DCMTK TIFF support will be enabled")
+ include_directories(${TIFF_INCLUDE_DIR} ${JPEG_INCLUDE_DIR})
+- set(LIBTIFF_LIBS ${TIFF_LIBRARIES} ${TIFF_EXTRA_LIBS_STATIC} ${JPEG_LIBRARIES})
++ set(LIBTIFF_LIBS ${TIFF_LIBRARIES})
+ endif()
+ endif()
+ endif()
+@@ -58,7 +65,7 @@ if(DCMTK_USE_FIND_PACKAGE)
+ message(STATUS "Info: DCMTK PNG support will be enabled")
+ set(WITH_LIBPNG 1)
+ include_directories(${PNG_INCLUDE_DIR})
+- set(LIBPNG_LIBS ${PNG_LIBRARY})
++ set(LIBPNG_LIBS ${PNG_LIBRARIES})
+ endif()
+ endif()
+
+@@ -103,7 +110,7 @@ if(DCMTK_USE_FIND_PACKAGE)
+ else()
+ message(STATUS "Info: DCMTK XML support will be enabled")
+ set(WITH_LIBXML 1)
+- include_directories(${LIBXML2_INCLUDE_DIR})
++ include_directories(${LIBXML2_INCLUDE_DIRS})
+ set(LIBXML_LIBS ${LIBXML2_LIBRARIES} ${LIBXML2_EXTRA_LIBS_STATIC})
+ endif()
+ endif()
+@@ -141,7 +148,10 @@ if(DCMTK_USE_FIND_PACKAGE)
+ # Find libiconv
+ if(DCMTK_WITH_ICONV)
+ find_package(Iconv QUIET)
+- find_package(LIBCHARSET QUIET)
++ set(ICONV_FOUND 1)
++ if(CHARSET_LIBRARIES)
++ set(LIBCHARSET_FOUND 1)
++ endif()
+ if(ICONV_FOUND)
+ if(NOT Iconv_IS_BUILT_IN)
+ set(LIBICONV_FOUND ${ICONV_FOUND})
diff --git a/vcpkg/ports/dcmtk/dictionary_paths.patch b/vcpkg/ports/dcmtk/dictionary_paths.patch
new file mode 100644
index 0000000..9e38f2a
--- /dev/null
+++ b/vcpkg/ports/dcmtk/dictionary_paths.patch
@@ -0,0 +1,26 @@
+diff --git a/CMake/GenerateDCMTKConfigure.cmake b/CMake/GenerateDCMTKConfigure.cmake
+index 8a59d44fa..8d3b4fc60 100644
+--- a/CMake/GenerateDCMTKConfigure.cmake
++++ b/CMake/GenerateDCMTKConfigure.cmake
+@@ -173,19 +173,11 @@ if(WIN32 AND NOT CYGWIN)
+
+ # Set dictionary path to the data dir inside install main dir (prefix)
+ if(DCMTK_DEFAULT_DICT STREQUAL "external")
+- if(DCMTK_USE_WIN32_PROGRAMDATA)
+- set(DCM_DICT_DEFAULT_PATH "${CMAKE_INSTALL_FULL_DATADIR}\\\\dicom.dic")
+- else()
+- set(DCM_DICT_DEFAULT_PATH "${DCMTK_PREFIX}\\\\${CMAKE_INSTALL_DATADIR}\\\\dcmtk\\\\dicom.dic")
+- endif()
++ set(DCM_DICT_DEFAULT_PATH "${CMAKE_INSTALL_FULL_DATADIR}\\\\dicom.dic")
+
+ # If private dictionary should be utilized, add it to default dictionary path.
+ if(ENABLE_PRIVATE_TAGS)
+- if(DCMTK_USE_WIN32_PROGRAMDATA)
+- set(DCM_DICT_DEFAULT_PATH "${DCM_DICT_DEFAULT_PATH};${CMAKE_INSTALL_FULL_DATADIR}\\\\private.dic")
+- else()
+- set(DCM_DICT_DEFAULT_PATH "${DCM_DICT_DEFAULT_PATH};${DCMTK_PREFIX}\\\\${CMAKE_INSTALL_DATADIR}\\\\dcmtk\\\\private.dic")
+- endif()
++ set(DCM_DICT_DEFAULT_PATH "${DCM_DICT_DEFAULT_PATH};${CMAKE_INSTALL_FULL_DATADIR}\\\\private.dic")
+ endif()
+
+ # Again, for Windows strip all / from path and replace it with \\.
diff --git a/vcpkg/ports/dcmtk/disable-test-setup.diff b/vcpkg/ports/dcmtk/disable-test-setup.diff
new file mode 100644
index 0000000..56b6a8e
--- /dev/null
+++ b/vcpkg/ports/dcmtk/disable-test-setup.diff
@@ -0,0 +1,19 @@
+diff --git a/CMake/dcmtkUseWine.cmake b/CMake/dcmtkUseWine.cmake
+index 6dbd7dc..cf529e2 100644
+--- a/CMake/dcmtkUseWine.cmake
++++ b/CMake/dcmtkUseWine.cmake
+@@ -1,3 +1,14 @@
++if(CMAKE_HOST_WIN32)
++ function(DCMTK_SETUP_WINE)
++ endfunction()
++ function(WINE_COMMAND)
++ message(FATAL_ERROR "Not implemented")
++ endfunction()
++ function(WINE_DETACHED)
++ message(FATAL_ERROR "Not implemented")
++ endfunction()
++ return()
++endif()
+ #
+ # Functions for detection and usage of Wine
+ # Used when cross compiling
diff --git a/vcpkg/ports/dcmtk/msvc.diff b/vcpkg/ports/dcmtk/msvc.diff
new file mode 100644
index 0000000..12999ad
--- /dev/null
+++ b/vcpkg/ports/dcmtk/msvc.diff
@@ -0,0 +1,12 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index bef673f..284d40e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -21,6 +21,7 @@ target_include_directories(config INTERFACE
+ $<BUILD_INTERFACE:${DCMTK_BINARY_DIR}/config/include>
+ $<INSTALL_INTERFACE:include>
+ )
++target_compile_options(config INTERFACE "\$<\$<CXX_COMPILER_ID:MSVC>:/Zc:__cplusplus>")
+ install(TARGETS config EXPORT DCMTKTargets)
+
+ # Include directories
diff --git a/vcpkg/ports/dcmtk/pkgconfig-lib-order.diff b/vcpkg/ports/dcmtk/pkgconfig-lib-order.diff
new file mode 100644
index 0000000..34c6fd9
--- /dev/null
+++ b/vcpkg/ports/dcmtk/pkgconfig-lib-order.diff
@@ -0,0 +1,60 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 284d40e..8f8acfd 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -158,7 +158,12 @@ endif()
+
+ if(DCMTK_WITH_ICONV)
+ # libiconv does not provide a .pc file
+- set(PKGCONF_LIBS_PRIV "${PKGCONF_LIBS_PRIV} ${Iconv_LIBRARY} ${LIBCHARSET_LIBRARY}")
++ if(Iconv_LIBRARIES)
++ string(APPEND PKGCONF_LIBS_PRIV " -liconv")
++ endif()
++ if(CHARSET_LIBRARIES)
++ string(APPEND PKGCONF_LIBS_PRIV " -lcharset")
++ endif()
+ endif()
+
+ if(DCMTK_WITH_ICU)
+@@ -200,6 +205,41 @@ endif()
+
+ get_property(DCMTK_LIBRARY_TARGETS GLOBAL PROPERTY DCMTK_LIBRARY_TARGETS)
+
++foreach(lib IN LISTS WIN32_STD_LIBRARIES)
++ string(APPEND PKGCONF_LIBS_PRIV " -l${lib}")
++endforeach()
++configure_file("${DCMTK_SOURCE_DIR}/CMake/dcmtk.pc.in" "${DCMTK_BINARY_DIR}/dcmtk-deps.pc" @ONLY)
++install(FILES "${DCMTK_BINARY_DIR}/dcmtk-deps.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
++set(PKGCONF_LIBS "")
++set(PKGCONF_LIBS_PRIV "")
++set(PKGCONF_REQ_PUB dcmtk-deps)
++set(PKGCONF_REQ_PRIV "")
++
++foreach(lib IN ITEMS
++ dcmfg # for dcmseg, dcmpmap, dcmect
++ dcmiod # for dcmpstat, dcmfg, dcmseg
++ dcmdsig # for dcmpstat
++ dcmtls # for dcmpstat
++ dcmqrdb # for dcmpstat
++ dcmsr # for cmr
++ dcmnet # for dcmtls, dcmwlm, dcmqrdb
++ dcmtkcharls # for dcmjpls
++ ijg8 # for dcmjpeg
++ ijg12 # fpr dcmjpeg
++ ijg16 # for dcmjpeg
++ dcmimage # for dcmjpeg etc.
++ dcmimgle # for dcmimage etc.
++ dcmxml # for i2d
++ dcmdata # fpr dcmxml, dcmimgle, etc.
++ oflog # for most libs
++ ofstd # for oflog
++ oficonv # for ofstd
++ )
++ if(lib IN_LIST DCMTK_LIBRARY_TARGETS)
++ list(REMOVE_ITEM DCMTK_LIBRARY_TARGETS ${lib})
++ list(APPEND DCMTK_LIBRARY_TARGETS ${lib})
++ endif()
++endforeach()
+ foreach(T ${DCMTK_LIBRARY_TARGETS})
+ set(PKGCONF_LIBS "${PKGCONF_LIBS} -l${T}")
+ endforeach()
diff --git a/vcpkg/ports/dcmtk/portfile.cmake b/vcpkg/ports/dcmtk/portfile.cmake
new file mode 100644
index 0000000..22521af
--- /dev/null
+++ b/vcpkg/ports/dcmtk/portfile.cmake
@@ -0,0 +1,174 @@
+vcpkg_from_github(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO DCMTK/dcmtk
+ REF "DCMTK-${VERSION}"
+ SHA512 fcb222182ea653304a1c49db31899a8b08d881916f90d3d35bfab2896aa11473232ac0c0f2195e4d478a6188d3b2c5f54d5172f29c42688c5d05f9bf738ca775
+ HEAD_REF master
+ PATCHES
+ dcmtk.patch
+ dependencies.diff
+ dictionary_paths.patch
+ disable-test-setup.diff
+ pkgconfig-lib-order.diff
+ msvc.diff
+)
+file(REMOVE
+ "${SOURCE_PATH}/CMake/FindICONV.cmake"
+ "${SOURCE_PATH}/CMake/FindJPEG.cmake"
+ "${SOURCE_PATH}/CMake/FindOpenJPEG.cmake"
+)
+
+# Prefix all exported API symbols of vendored libjpeg with "dcmtk_"
+file(GLOB src_files "${SOURCE_PATH}/dcmjpeg/libijg*/*.c" "${SOURCE_PATH}/dcmjpeg/libijg*/*.h")
+foreach(file_path ${src_files})
+ file(READ "${file_path}" file_string)
+ string(REGEX REPLACE "(#define[ \t\r\n]+[A-Za-z0-9_]*[ \t\r\n]+)(j[a-z]+[0-9]+_)" "\\1dcmtk_\\2" file_string "${file_string}")
+ file(WRITE "${file_path}" "${file_string}")
+endforeach()
+
+vcpkg_cmake_get_vars(cmake_vars_file)
+include("${cmake_vars_file}")
+if(VCPKG_DETECTED_CMAKE_CROSSCOMPILING)
+ message(STATUS [[
+Cross-compiling DCMTK needs input from executing test programs in the target
+environment. You may need to provide a suitable emulator setup, and you can set
+values directly with `VCPKG_CMAKE_CONFIGURE_OPTIONS` in a custom triplet file.
+For more information see
+https://support.dcmtk.org/redmine/projects/dcmtk/wiki/Cross_Compiling
+]])
+endif()
+
+vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
+ FEATURES
+ "iconv" DCMTK_WITH_ICONV
+ "openssl" DCMTK_WITH_OPENSSL
+ "png" DCMTK_WITH_PNG
+ "tiff" DCMTK_WITH_TIFF
+ "xml2" DCMTK_WITH_XML
+ "zlib" DCMTK_WITH_ZLIB
+ "openjpeg" DCMTK_WITH_OPENJPEG
+ "tools" BUILD_APPS
+)
+
+if("external-dict" IN_LIST FEATURES)
+ set(DCMTK_DEFAULT_DICT "external")
+ set(DCMTK_ENABLE_BUILTIN_OFICONV_DATA OFF)
+else()
+ set(DCMTK_DEFAULT_DICT "builtin")
+ set(DCMTK_ENABLE_BUILTIN_OFICONV_DATA ON)
+endif()
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ OPTIONS
+ ${FEATURE_OPTIONS}
+ -DCMAKE_CXX_STANDARD=17
+ -DCMAKE_INSTALL_DOCDIR=share/${PORT}/doc
+ -DDCMTK_DEFAULT_DICT=${DCMTK_DEFAULT_DICT}
+ -DCMAKE_DISABLE_FIND_PACKAGE_BISON=ON
+ -DCMAKE_DISABLE_FIND_PACKAGE_FLEX=ON
+ -DDCMTK_ENABLE_BUILTIN_OFICONV_DATA=${DCMTK_ENABLE_BUILTIN_OFICONV_DATA}
+ -DDCMTK_ENABLE_PRIVATE_TAGS=ON
+ -DDCMTK_ENABLE_STL=ON
+ -DDCMTK_OVERWRITE_WIN32_COMPILER_FLAGS=OFF
+ -DDCMTK_USE_FIND_PACKAGE=ON
+ -DDCMTK_WIDE_CHAR_FILE_IO_FUNCTIONS=ON
+ -DDCMTK_WIDE_CHAR_MAIN_FUNCTION=ON
+ -DDCMTK_WITH_DOXYGEN=OFF
+ -DDCMTK_WITH_SNDFILE=OFF
+ -DDCMTK_WITH_WRAP=OFF
+ OPTIONS_DEBUG
+ -DBUILD_APPS=OFF
+)
+
+vcpkg_cmake_install()
+vcpkg_copy_pdbs()
+vcpkg_cmake_config_fixup()
+vcpkg_fixup_pkgconfig()
+
+if ("tools" IN_LIST FEATURES)
+ set(_tools
+ dcm2cda
+ cda2dcm
+ dcm2img
+ dcm2json
+ dcm2pdf
+ dcm2pnm
+ dcm2xml
+ dcmcjpeg
+ dcmcjpls
+ dcmconv
+ dcmcrle
+ dcmdjpeg
+ dcmdjpls
+ dcmdrle
+ dcmdspfn
+ dcmdump
+ dcmftest
+ dcmgpdir
+ dcmicmp
+ dcmj2pnm
+ dcml2pnm
+ dcmmkcrv
+ dcmmkdir
+ dcmmklut
+ dcmodify
+ dcmp2pgm
+ dcmprscp
+ dcmprscu
+ dcmpschk
+ dcmpsmk
+ dcmpsprt
+ dcmpsrcv
+ dcmpssnd
+ dcmqridx
+ dcmqrscp
+ dcmqrti
+ dcmquant
+ dcmrecv
+ dcmscale
+ dcmsend
+ dcmsign
+ dcod2lum
+ dconvlum
+ drtdump
+ dsr2html
+ dsr2xml
+ dsrdump
+ dump2dcm
+ echoscu
+ findscu
+ getscu
+ img2dcm
+ mkcsmapper
+ mkesdb
+ movescu
+ pdf2dcm
+ stl2dcm
+ storescp
+ storescu
+ termscu
+ wlmscpfs
+ xml2dcm
+ xml2dsr
+ )
+ vcpkg_copy_tools(TOOL_NAMES ${_tools} AUTO_CLEAN)
+endif()
+
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
+
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/bin" "${CURRENT_PACKAGES_DIR}/bin")
+endif()
+
+# no absolute paths
+vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/dcmtk/config/osconfig.h"
+ "#define (DCMTK_PREFIX|DCM_DICT_DEFAULT_PATH|DEFAULT_CONFIGURATION_DIR|DEFAULT_SUPPORT_DATA_DIR) \"[^\"]*\""
+ "#define \\1 \"\" /* redacted by vcpkg */"
+ REGEX
+)
+
+file(COPY "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYRIGHT")
+
diff --git a/vcpkg/ports/dcmtk/usage b/vcpkg/ports/dcmtk/usage
new file mode 100644
index 0000000..76cdf38
--- /dev/null
+++ b/vcpkg/ports/dcmtk/usage
@@ -0,0 +1,9 @@
+dcmtk provides CMake targets:
+
+ find_package(DCMTK CONFIG REQUIRED)
+ target_link_libraries(main PRIVATE DCMTK::DCMTK)
+ # You may also select specific modules using DCMTK::<module>.
+
+dcmtk provides pkg-config modules:
+
+ dcmtk
diff --git a/vcpkg/ports/dcmtk/vcpkg.json b/vcpkg/ports/dcmtk/vcpkg.json
new file mode 100644
index 0000000..4db0fe8
--- /dev/null
+++ b/vcpkg/ports/dcmtk/vcpkg.json
@@ -0,0 +1,76 @@
+{
+ "name": "dcmtk",
+ "version": "3.6.9",
+ "port-version": 2,
+ "description": "This DICOM ToolKit (DCMTK) package consists of source code, documentation and installation instructions for a set of software libraries and applications implementing part of the DICOM/MEDICOM Standard.",
+ "homepage": "https://github.com/DCMTK/dcmtk",
+ "license": null,
+ "supports": "!uwp",
+ "dependencies": [
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-get-vars",
+ "host": true
+ }
+ ],
+ "features": {
+ "external-dict": {
+ "description": "Enable external dictionary"
+ },
+ "iconv": {
+ "description": "Enable Iconv support",
+ "dependencies": [
+ "libiconv"
+ ]
+ },
+ "openjpeg": {
+ "description": "Enable OpenJPEG support",
+ "dependencies": [
+ "openjpeg"
+ ]
+ },
+ "openssl": {
+ "description": "Enable OpenSSL",
+ "dependencies": [
+ "openssl"
+ ]
+ },
+ "png": {
+ "description": "Enable PNG support",
+ "dependencies": [
+ "libpng"
+ ]
+ },
+ "tiff": {
+ "description": "Enable TIFF support",
+ "dependencies": [
+ {
+ "name": "tiff",
+ "default-features": false
+ }
+ ]
+ },
+ "tools": {
+ "description": "Build apps"
+ },
+ "xml2": {
+ "description": "Enable XML support",
+ "dependencies": [
+ "libxml2"
+ ]
+ },
+ "zlib": {
+ "description": "Enable zlib support",
+ "dependencies": [
+ "zlib"
+ ]
+ }
+ }
+}