# HG changeset patch # User Sebastien Jodogne # Date 1479295114 -3600 # Node ID 2789d34cb9936139a8f162a7c415b5f80b2bc354 # Parent 0cc06b6f3398e44d001685926e52da09eb46b3b4 sync diff -r 0cc06b6f3398 -r 2789d34cb993 Framework/Orthanc/OrthancServer/FromDcmtkBridge.cpp --- a/Framework/Orthanc/OrthancServer/FromDcmtkBridge.cpp Thu Nov 10 09:59:48 2016 +0100 +++ b/Framework/Orthanc/OrthancServer/FromDcmtkBridge.cpp Wed Nov 16 12:18:34 2016 +0100 @@ -177,7 +177,7 @@ } - void FromDcmtkBridge::InitializeDictionary() + void FromDcmtkBridge::InitializeDictionary(bool loadPrivateDictionary) { { DictionaryLocker locker; @@ -194,7 +194,16 @@ //LoadEmbeddedDictionary(*locker, EmbeddedResources::DICTIONARY_DICONDE); LoadEmbeddedDictionary(*locker, EmbeddedResources::DICTIONARY_DICOM); - LoadEmbeddedDictionary(*locker, EmbeddedResources::DICTIONARY_PRIVATE); + + if (loadPrivateDictionary) + { + LOG(INFO) << "Loading the embedded dictionary of private tags"; + LoadEmbeddedDictionary(*locker, EmbeddedResources::DICTIONARY_PRIVATE); + } + else + { + LOG(INFO) << "The dictionary of private tags has not been loaded"; + } #elif defined(__linux__) || defined(__FreeBSD_kernel__) std::string path = DCMTK_DICTIONARY_DIR; @@ -206,7 +215,15 @@ } LoadExternalDictionary(*locker, path, "dicom.dic"); - LoadExternalDictionary(*locker, path, "private.dic"); + + if (loadPrivateDictionary) + { + LoadExternalDictionary(*locker, path, "private.dic"); + } + else + { + LOG(INFO) << "The dictionary of private tags has not been loaded"; + } #else #error Support your platform here diff -r 0cc06b6f3398 -r 2789d34cb993 Framework/Orthanc/OrthancServer/FromDcmtkBridge.h --- a/Framework/Orthanc/OrthancServer/FromDcmtkBridge.h Thu Nov 10 09:59:48 2016 +0100 +++ b/Framework/Orthanc/OrthancServer/FromDcmtkBridge.h Wed Nov 16 12:18:34 2016 +0100 @@ -89,7 +89,7 @@ Encoding defaultEncoding); public: - static void InitializeDictionary(); + static void InitializeDictionary(bool loadPrivateDictionary); static void RegisterDictionaryTag(const DicomTag& tag, ValueRepresentation vr, diff -r 0cc06b6f3398 -r 2789d34cb993 Framework/Orthanc/Resources/CMake/DcmtkConfiguration.cmake --- a/Framework/Orthanc/Resources/CMake/DcmtkConfiguration.cmake Thu Nov 10 09:59:48 2016 +0100 +++ b/Framework/Orthanc/Resources/CMake/DcmtkConfiguration.cmake Wed Nov 16 12:18:34 2016 +0100 @@ -35,6 +35,19 @@ DownloadPackage(${DCMTK_MD5} ${DCMTK_URL} "${DCMTK_SOURCES_DIR}") + + if (FirstRun AND NOT USE_DCMTK_361) + # If using DCMTK 3.6.0, backport the "private.dic" file from DCMTK + # 3.6.1 snapshot. This adds support for more private tags, and + # fixes some import problems with Philips MRI Achieva. + message("Using the dictionary of private tags from DCMTK 3.6.1") + configure_file( + ${ORTHANC_ROOT}/Resources/Patches/dcmtk-3.6.1-private.dic + ${DCMTK_SOURCES_DIR}/dcmdata/data/private.dic + COPYONLY) + endif() + + IF (CMAKE_CROSSCOMPILING) SET(C_CHAR_UNSIGNED 1 CACHE INTERNAL "Whether char is unsigned.") ENDIF() @@ -181,9 +194,15 @@ list(REMOVE_ITEM DCMTK_SOURCES ${DCMTK_SOURCES_DIR}/dcmdata/libsrc/mkdictbi.cc ${DCMTK_SOURCES_DIR}/dcmdata/libsrc/mkdeftag.cc - ${DCMTK_SOURCES_DIR}/dcmdata/libsrc/dcdictbi.cc ) + if (NOT USE_DCMTK_361) + # Removing this file is required with DCMTK 3.6.0 + list(REMOVE_ITEM DCMTK_SOURCES + ${DCMTK_SOURCES_DIR}/dcmdata/libsrc/dcdictbi.cc + ) + endif() + #set_source_files_properties(${DCMTK_SOURCES} # PROPERTIES COMPILE_DEFINITIONS # "PACKAGE_VERSION=\"${DCMTK_PACKAGE_VERSION}\";PACKAGE_VERSION_NUMBER=\"${DCMTK_VERSION_NUMBER}\"") diff -r 0cc06b6f3398 -r 2789d34cb993 Framework/Orthanc/Resources/CMake/DownloadPackage.cmake --- a/Framework/Orthanc/Resources/CMake/DownloadPackage.cmake Thu Nov 10 09:59:48 2016 +0100 +++ b/Framework/Orthanc/Resources/CMake/DownloadPackage.cmake Wed Nov 16 12:18:34 2016 +0100 @@ -76,7 +76,9 @@ message(FATAL_ERROR "CMake is not allowed to download from Internet. Please set the ALLOW_DOWNLOADS option to ON") endif() - file(DOWNLOAD "${Url}" "${TMP_PATH}" SHOW_PROGRESS EXPECTED_MD5 "${MD5}") + file(DOWNLOAD "${Url}" "${TMP_PATH}" + SHOW_PROGRESS EXPECTED_MD5 "${MD5}" + TIMEOUT 5 INACTIVITY_TIMEOUT 5) else() message("Using local copy of ${Url}") endif()