vcpkg/ports/dcmtk/portfile.cmake

165 lines
4.6 KiB
CMake
Raw Normal View History

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO DCMTK/dcmtk
2024-01-18 04:02:49 +08:00
REF 59f75a8b50e50ae1bb1ff12098040c6327500740 # DCMTK-3.6.8
SHA512 2719e2163d57339a81f079c8c28d4e9e3ee6b1b85bc3db5b94a2279e3dd9881ab619d432d64984e6371569866d7aa4f01bf8b41841b773bcd60bbb8ad2118cac
HEAD_REF master
PATCHES
dcmtk.patch
2023-12-05 09:24:32 +08:00
fix_link_xml2.patch
dictionary_paths.patch
fix_link_tiff.patch
)
[dcmtk] Add prefix to vendored libjpeg symbols (#36274) <!-- If your PR fixes issues, please note that here by adding "Fixes #NNNNNN." for each fixed issue on separate lines. --> <!-- If you are still working on the PR, open it as a Draft: https://github.blog/2019-02-14-introducing-draft-pull-requests/. --> <!-- If this PR updates an existing port, please uncomment and fill out this checklist:END OF PORT UPDATE CHECKLIST (delete this line) --> Fixes #33512. DCMTK comes with a vendored version of libjpeg that has custom adjustments (e. g. a special lossless mode ). The vendored version of libjpeg has conflicting symbols with the libjpeg-turbo>=3.0.0 library that is built and linked in by vcpkg via transitive dependencies, e.g. when linking in `tiff` support, where libtiff has been built with `jpeg` support. This PR implements a search and replace operation that prefixes the exported symbols of the vendored libjpeg version with `dcmtk_`, thus enabling us to link against both the vendored and the vcpkg version of libjpeg at the same time without conflicting symbols. The generated static library files have been checked with `nm -g libijg{8,12,16}.a | grep -v dcmtk_` to see if there are any exported symbols without `dcmtk_` remaining. There are none except for `0000000000000000 B jaritab` which is not defined in `libjpeg.a`. The PR has been tested with x64-linux and arm64-osx triplets and builds `dcmtk[tools,tiff,zlib]` cleanly. In order to fix #33512, we have to work around that vendored version of libjpeg one way or another. - Changes do not fully comply with the [maintainer guide](https://github.com/microsoft/vcpkg-docs/blob/main/vcpkg/contributing/maintainer-guide.md). Avoiding the vendored dependency would imply creating a dcmtk-jpeg package from the vendored one, that is exclusively used for dcmtk and needs to be kept in sync with dcmtk. - ~~SHA512s are updated for each updated download.~~ - ~~The "supports" clause reflects platforms that may be fixed by this new version.~~ - ~~Any fixed [CI baseline](https://github.com/microsoft/vcpkg/blob/master/scripts/ci.baseline.txt) entries are removed from that file.~~ - [x] Any patches that are no longer applied are deleted from the port's directory. - [x] The version database is fixed by rerunning `./vcpkg x-add-version --all` and committing the result. - [x] Only one version is added to each modified port's versions file. <!-- If this PR adds a new port, please uncomment and fill out this checklist: - [_] Changes comply with the [maintainer guide](https://github.com/microsoft/vcpkg-docs/blob/main/vcpkg/contributing/maintainer-guide.md). - [ ] The name of the port matches an existing name for this component on https://repology.org/ if possible, and/or is strongly associated with that component on search engines. - [ ] Optional dependencies are resolved in exactly one way. For example, if the component is built with CMake, all `find_package` calls are REQUIRED, are satisfied by `vcpkg.json`'s declared dependencies, or disabled with [CMAKE_DISABLE_FIND_PACKAGE_Xxx](https://cmake.org/cmake/help/latest/variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName.html). - [ ] The versioning scheme in `vcpkg.json` matches what upstream says. - [ ] The license declaration in `vcpkg.json` matches what upstream says. - [ ] The installed as the "copyright" file matches what upstream says. - [ ] The source code of the component installed comes from an authoritative source. - [ ] The generated "usage text" is accurate. See [adding-usage](https://github.com/microsoft/vcpkg-docs/blob/main/vcpkg/examples/adding-usage.md) for context. - [ ] The version database is fixed by rerunning `./vcpkg x-add-version --all` and committing the result. - [ ] Only one version is in the new port's versions file. - [ ] Only one version is added to each modified port's versions file. END OF NEW PORT CHECKLIST (delete this line) -->
2024-02-27 17:01:39 +08:00
# 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_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
FEATURES
"iconv" DCMTK_WITH_ICONV
"icu" DCMTK_WITH_ICU
"openssl" DCMTK_WITH_OPENSSL
"png" DCMTK_WITH_PNG
"tiff" DCMTK_WITH_TIFF
"xml2" DCMTK_WITH_XML
"zlib" DCMTK_WITH_ZLIB
"tools" BUILD_APPS
)
if("external-dict" IN_LIST FEATURES)
set(DCMTK_DEFAULT_DICT "external")
2024-07-31 08:36:13 +08:00
set(DCMTK_ENABLE_BUILTIN_OFICONV_DATA OFF)
else()
set(DCMTK_DEFAULT_DICT "builtin")
2024-07-31 08:36:13 +08:00
set(DCMTK_ENABLE_BUILTIN_OFICONV_DATA ON)
endif()
2021-11-19 13:02:06 +08:00
vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
${FEATURE_OPTIONS}
"-DDCMTK_DEFAULT_DICT=${DCMTK_DEFAULT_DICT}"
2024-07-31 08:36:13 +08:00
-DDCMTK_ENABLE_BUILTIN_OFICONV_DATA=${DCMTK_ENABLE_BUILTIN_OFICONV_DATA}
-DDCMTK_WITH_DOXYGEN=OFF
-DDCMTK_FORCE_FPIC_ON_UNIX=ON
-DDCMTK_OVERWRITE_WIN32_COMPILER_FLAGS=OFF
-DDCMTK_ENABLE_PRIVATE_TAGS=ON
-DCMAKE_CXX_STANDARD=17
-DDCMTK_WIDE_CHAR_FILE_IO_FUNCTIONS=ON
-DDCMTK_WIDE_CHAR_MAIN_FUNCTION=ON
-DDCMTK_ENABLE_STL=ON
-DCMAKE_DEBUG_POSTFIX=d
-DDCMTK_USE_FIND_PACKAGE_WIN_DEFAULT=ON
2024-07-27 04:57:09 +08:00
-DBUILD_TESTING=OFF
OPTIONS_DEBUG
-DINSTALL_HEADERS=OFF
-DINSTALL_OTHER=OFF
-DBUILD_APPS=OFF
)
2021-11-19 13:02:06 +08:00
vcpkg_cmake_install()
vcpkg_copy_pdbs()
if ("tools" IN_LIST FEATURES)
set(_tools
cda2dcm
dcm2json
dcm2pdf
dcm2pnm
dcm2xml
dcmcjpeg
dcmcjpls
dcmconv
dcmcrle
dcmdata_tests
dcmdjpeg
dcmdjpls
dcmdrle
dcmdspfn
dcmdump
dcmect_tests
dcmfg_tests
dcmftest
dcmgpdir
dcmicmp
dcmiod_tests
dcmj2pnm
dcml2pnm
dcmmkcrv
dcmmkdir
dcmmklut
dcmnet_tests
dcmodify
dcmp2pgm
dcmprscp
dcmprscu
dcmpschk
dcmpsmk
dcmpsprt
dcmpsrcv
dcmpssnd
dcmqridx
dcmqrscp
dcmqrti
dcmquant
dcmrecv
dcmrt_tests
dcmscale
dcmseg_tests
dcmsend
dcmsign
dcmsr_tests
dcmtls_tests
dcod2lum
dconvlum
drtdump
drttest
dsr2html
dsr2xml
dsrdump
dump2dcm
echoscu
findscu
getscu
img2dcm
2024-01-18 04:02:49 +08:00
mkcsmapper
mkesdb
mkreport
movescu
msgserv
2024-01-18 04:02:49 +08:00
oficonv_tests
ofstd_tests
pdf2dcm
stl2dcm
storescp
storescu
termscu
wlmscpfs
wltest
xml2dcm
xml2dsr
)
vcpkg_copy_tools(TOOL_NAMES ${_tools} AUTO_CLEAN)
endif()
2021-11-19 13:02:06 +08:00
vcpkg_cmake_config_fixup()
2021-11-19 13:02:06 +08:00
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/dcmtk/config/osconfig.h" "#define DCMTK_PREFIX \"${CURRENT_PACKAGES_DIR}\"" "" IGNORE_UNCHANGED)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/dcmtk/config/osconfig.h" "#define DCM_DICT_DEFAULT_PATH \"${CURRENT_PACKAGES_DIR}/share/dcmtk-${VERSION}/dicom.dic:${CURRENT_PACKAGES_DIR}/share/dcmtk-${VERSION}/private.dic\"" "" IGNORE_UNCHANGED)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/dcmtk/config/osconfig.h" "#define DEFAULT_CONFIGURATION_DIR \"${CURRENT_PACKAGES_DIR}/etc/dcmtk-${VERSION}/\"" "" IGNORE_UNCHANGED)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/dcmtk/config/osconfig.h" "#define DEFAULT_SUPPORT_DATA_DIR \"${CURRENT_PACKAGES_DIR}/share/dcmtk-${VERSION}/\"" "" IGNORE_UNCHANGED)
2022-07-28 02:41:12 +08:00
vcpkg_fixup_pkgconfig()
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYRIGHT")
2024-01-18 04:02:49 +08:00
configure_file("${CMAKE_CURRENT_LIST_DIR}/usage" "${CURRENT_PACKAGES_DIR}/share/${PORT}/usage" @ONLY)