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/dcmtk | |
Diffstat (limited to 'vcpkg/ports/dcmtk')
| -rw-r--r-- | vcpkg/ports/dcmtk/dcmtk.patch | 16 | ||||
| -rw-r--r-- | vcpkg/ports/dcmtk/dependencies.diff | 55 | ||||
| -rw-r--r-- | vcpkg/ports/dcmtk/dictionary_paths.patch | 26 | ||||
| -rw-r--r-- | vcpkg/ports/dcmtk/disable-test-setup.diff | 19 | ||||
| -rw-r--r-- | vcpkg/ports/dcmtk/msvc.diff | 12 | ||||
| -rw-r--r-- | vcpkg/ports/dcmtk/pkgconfig-lib-order.diff | 60 | ||||
| -rw-r--r-- | vcpkg/ports/dcmtk/portfile.cmake | 174 | ||||
| -rw-r--r-- | vcpkg/ports/dcmtk/usage | 9 | ||||
| -rw-r--r-- | vcpkg/ports/dcmtk/vcpkg.json | 76 |
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" + ] + } + } +} |