vcpkg_from_github(
    OUT_SOURCE_PATH SOURCE_PATH
    REPO DCMTK/dcmtk
    REF "DCMTK-${VERSION}"
    SHA512 6c7699d222b3a26f2bf52fddbf3278946429f9b4b5cdd0607fb3c3fa82f5a13c6289c831d7a584700c9f59ae4244d94ea678a22a34aee988399056436f600a95
    HEAD_REF master
    PATCHES
        dcmtk.patch
        dependencies.diff
        dictionary_paths.patch
        disable-test-setup.diff
        pkgconfig-lib-order.diff
        msvc.diff
        emscripten-ofwhere.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
        dcmdecap
        dcmdjpeg
        dcmdjpls
        dcmdrle
        dcmdspfn
        dcmdump
        dcmencap
        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
        json2dcm
        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")

