Loading ANNOUNCE +97 −51 Original line number Diff line number Diff line ANNOUNCEMENT Version 3.6.3 of the OFFIS DCMTK (DICOM ToolKit) software is now available for Version 3.6.4 of the OFFIS DCMTK (DICOM ToolKit) software is now available for public release. This is a minor release that includes the following changes over the previous version 3.6.2: over the previous version 3.6.3: - DCMTK 3.6.3 builds correctly on older and up-to-date versions of GNU gcc (4.2.1 to 7.1.1) Clang (3.4.1 to 4.0.1), Microsoft Visual Studio (2005 to - DCMTK 3.6.4 builds correctly on older and up-to-date versions of GNU gcc (4.2.1 to 8.2.1) Clang (3.4.2 to 7.0.0), Microsoft Visual Studio (2005 to 2017) and SunPro CC (5.14 and 5.15). - Tested with the following operating systems/environments: Loading @@ -23,81 +23,128 @@ over the previous version 3.6.2: For a complete list of tested systems and compilers, see the INSTALL file. - GNU Autoconf has been deprecated, running 'configure' will now emit a warning by default. - GNU Autoconf is still deprecated, running 'configure' emits a warning by default. Support for GNU Autoconf will be removed after this release. - Updated data dictionary, SOP Class and Transfer Syntax UIDs for the recently approved changes to the DICOM standard (i.e. Supplements and CPs), up to DICOM standard release DICOM 2017e. standard release DICOM 2018d plus Supplement 188 (Multi-energy CT Images), CP-1803 and CP-1809. - Updated automatically generated classes in module "dcmrt" (Radiotherapy) and "dcmsr" (Structured Reporting) based on DICOM 2017e. Also updated the Code - Added "dcmicmp", a new tool that reads two DICOM images, an original "reference image" and a post-processed "test image" to which some kind of processing such as a lossy image compression has been applied. dcmicmp compares both images and computes several metrics that describe how similar or different both images are. - Added new command line applications: cda2dcm and stl2dcm for encapsulation of HL7 CDA documents and STL files into DICOM file format. Revised implementation of pdf2dcm based on new class DcmEncapsulatedDocument. - The lossless JPEG decoder can now handle images compressed with the Cornell codec, which creates invalid Huffman codes for 16-bit images. - The new class OFRandom implements a cryptographically secure pseudo random number generator (PRNG) based on the ISAAC algorithm and its public domain reference implementation by Bob Jenkins. - Major revision of the TLS code in DCMTK (module dcmtls and related command line tools) implementing DICOM Supplement 204 "TLS Security Profiles". Selection of TLS ciphersuites is now based on security profiles, and DCMTK now implements the recommendations of BCP 195 / RFC 7525. - DCMTK can now be compiled with LibreSSL as an alternative to OpenSSL. - Updated automatically generated Context Group classes in "dcmsr" (Structured Reporting) based on DICOM 2018d. Also updated the Code definitions from the supported coding schemes such as DICOM, NCIt and UMLS. - Further enhanced DICOM Structured Reporting (SR) module "dcmsr": - Added support for the Patient Radiation Dose SR IOD (Supplement 191). - Added support for included template TID 4019 (Algorithm Identification) to the implementation of TID 1419 (ROI Measurements). - Added support for further sub-templates to the existing class for TID 1500 (Measurement Report), e.g. TID 300 (Measurement). - Added a document tree node filter that checks for the presence or absence of a concept name, i.e. whether it is empty or not. - Enhanced support for image entry descriptors in TID 1600 (Image Library), e.g. by adding a new method that allows for moving common image entry descriptors automatically to their respective image group. - Added new and enhanced existing code examples for this module. - Added new method that allows for adding extra content items to extensible SR templates. - Enhanced Worklist SCP code to make use of existing classes and functions instead of using its own "spaghetti" code for everything. This also resolves issues with the Worklist SCP rejecting some legit Worklist queries as its own verification functions were too strict. - Further enhanced iterating an SR document tree, e.g. by providing a new filter mechanism that allows for matching document tree nodes based on a variety of properties like value type and concept name. - Added method getNumberOfValues() to all VR and other classes that are derived from DcmObject (such as DcmItem). This new method always returns the number of values currently stored in the corresponding object/element, in contrast to getVM(), which sometimes returns the constant 1, or card(), which is not available for all classes. - Added another gotoNode() method to tree and cursor class, which searches for a particular tree node by its value. - The ACSE timeout, e.g. passed to the various networking command line tools using --acse-timeout, is now also used for the first PDU to be read. This is another step towards cleaning up the timeout handling in dcmnet module. - Added "equal" and "not equal" comparison operators to all document tree node and underlying value classes as well as to the wrapper class for "SR content items". - Replaced all calls of strcpy() by OFStandard::strlcpy(), which should reduce the possibility of buffer overflows. Also added OFStandard::snprintf() and OFStandard::vsnprintf(), which should be used within the DCMTK as safe and portable helper functions. - Updated mapping of the Defined Terms for Body Part Examined in the class that implements CID 4031 (Common Anatomic Regions) based on DICOM 2017e. - Fixed bug in dcmseg that produced broken binary Segmentation objects if the number of pixels were not dividable by 8 for a single frame. - Many further improvements in order to stay up-to-date with development of the DICOM standard and to make it easier to use this module and its classes. - Enhanced Worklist SCP code to make use of existing classes and functions instead of using its own "spaghetti" code for everything. This also resolves issues with the Worklist SCP rejecting some legit Worklist queries as its own verification functions were too strict. - Added options to findscu that extract the C-FIND response datasets to XML files (either a single file with all responses or separate files for each response, similar to the existing --extract option). - Introduced a subset of std::filesystem to ofstd, currently providing the classes OFpath, OFdirectory_entry and OFdirectory_iterator as portable implementations for the respective C++17 STL classes. - Added option --socket-timeout to echoscu (same as for e.g. storescu). - The Windows implementation of class OFReadWriteLock class now uses Slim Reader/Writer (SRW) Locks, which are available since Windows Vista, instead of the older implementation based on a Mutex, a Semaphore and a counter, because SRW locks are much faster. - Consistently use the default value "MEDIUM" for Priority in all DIMSE request messages, i.e. for C-STORE, C-FIND, C-GET and C-MOVE. - Changed version numbering of shared objects. On Posix operating systems, it now follows these guidelines: https://autotools.io/libtool/version.html. - Fixed various issues that occurred after the official 3.6.2 release. - Fixed various issues that occurred after the official 3.6.3 release. See CHANGES file for details. Many people have contributed to this new release of DCMTK, appearing here in alphabetical order. Thank you very much for your support! Domen Soklic <domen.soklic@cosylab.com> Klaus Eisentraut <klaus.eisentraut@siemens-healthineers.com> Andrey Fedorov <andrey.fedorov@gmail.com> Florian Franzen <Florian.Franzen@caesar.de> Christian Fremgen <Christian.Fremgen@ith-icoserve.com> Omar Ganiev <beched@deteact.com> Daniel Grieger <Daniel.Grieger@ith-icoserve.com> Helmut Grohne <helmut@subdivi.de> GwanYeong Kim <gy741.kim@gmail.com> Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com> Joerg Koenig <joerg.koenig@zeiss.com> Michael Craggs <Michael.Craggs@ith-icoserve.com> Peter Klotz <Peter.Klotz@ith-icoserve.com> Helmut Steiner Max Smolens Martin Strunz Sergei Khlutchin Forum user "Hafiz Rafeeq" Forum user "sfzhang" Mathieu Malaterre <mathieu.malaterre@gmail.com> Savvas Metallidis <savvas.metallidis@infomedcs.com> Isaiah Norton <inorton@bwh.harvard.edu> Lukas Raesenhoeft <lukas@raesenhoeft.com> Uli Schlachter <psychon@znc.in> Max Smolens (github user msmolens) Christian Wetzel <wetzel@phoenix-pacs.de> Gert Wollny <gw.fossdev@gmail.com> Sahab Zanjanizadeh <Sahab.Zanjanizadeh@ge.com> Thomas Dement Hans Johnson (GitHub user "hjmjohnson") Forum user "deepakt" GitHub user "sercxjo" Members of the DCMTK Team who have worked on this release are (in alphabetical order): Pedro Arizpe Gomez <arizpegomez@offis.de> Marco Eichelberg <eichelberg@offis.de> Michael Onken <onken@open-connections.de> Joerg Riesmeier <dicom@jriesmeier.com> Loading @@ -106,13 +153,12 @@ Members of the DCMTK Team who have worked on this release are Student associates: Nikolas Goldhammer <nikolasgoldhammer@gmail.com> Sebastian Grallert <Grallert.Sebastian@web.de> Also see CREDITS file for projects and companies who have been generously supporting DCMTK. The DCMTK software can be downloaded via: http://dicom.offis.de/dcmtk or http://www.dcmtk.org/ https://dicom.offis.de/dcmtk or https://www.dcmtk.org/ OFFIS e.V., Oldenburg, Germany, 2018-02-05 OFFIS e.V., Oldenburg, Germany, 2018-11-29 CMake/3rdparty.cmake +292 −256 File changed.Preview size limit exceeded, changes collapsed. Show changes CMake/CTest/CTestCustomAndroid.cmake.in +43 −43 Original line number Diff line number Diff line Loading @@ -5,36 +5,36 @@ # # Restore the required settings of the CMake configuration step CMAKE_MINIMUM_REQUIRED(VERSION 2.6) SET(CMAKE_COMMAND "@CMAKE_COMMAND@") SET(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@") SET(CMAKE_CURRENT_BINARY_DIR "@CMAKE_BINARY_DIR@") SET(CMAKE_FILES_DIRECTORY "@CMAKE_FILES_DIRECTORY@") SET(CMAKE_MODULE_PATH "@CMAKE_ROOT@/Modules") SET(CMAKE_SHARED_LIBRARY_PREFIX "@CMAKE_SHARED_LIBRARY_PREFIX@") SET(CMAKE_SHARED_LIBRARY_SUFFIX "@CMAKE_SHARED_LIBRARY_SUFFIX@") SET(CMAKE_HOST_SYSTEM "@CMAKE_HOST_SYSTEM@") SET(DCMTK_CMAKE_INCLUDE "@CMAKE_SOURCE_DIR@/@DCMTK_CMAKE_INCLUDE@") SET(DCMTK_TEST_EXECUTABLES "@DCMTK_TEST_EXECUTABLES@") SET(DCMTK_ALL_LIBRARIES "@DCMTK_ALL_LIBRARIES@") SET(DCMTK_LIBRARY_DEPENDENCIES "@DCMTK_LIBRARY_DEPENDENCIES@") SET(DCMTK_PACKAGE_VERSION "@DCMTK_PACKAGE_VERSION@") SET(DCMTK_ABI_VERSION "@DCMTK_ABI_VERSION@") SET(BUILD_SHARED_LIBS "@BUILD_SHARED_LIBS@") SET(DCMTK_DICOM_DICTIONARIES "@DCMTK_DICOM_DICTIONARIES@") SET(ANDROID "@ANDROID@") SET(ANDROID_ADB_PROGRAM "@ANDROID_ADB_PROGRAM@") SET(ANDROID_ANDROID_PROGRAM "@ANDROID_ANDROID_PROGRAM@") SET(ANDROID_EMULATOR_PROGRAM "@ANDROID_EMULATOR_PROGRAM@") SET(ANDROID_EMULATOR_AVD "@ANDROID_EMULATOR_AVD@") SET(ANDROID_RUNTIME_LIBRARIES "@ANDROID_RUNTIME_LIBRARIES@") SET(ANDROID_TEMPORARY_FILES_LOCATION "@ANDROID_TEMPORARY_FILES_LOCATION@") cmake_minimum_required(VERSION 2.6) set(CMAKE_COMMAND "@CMAKE_COMMAND@") set(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@") set(CMAKE_CURRENT_BINARY_DIR "@CMAKE_BINARY_DIR@") set(CMAKE_FILES_DIRECTORY "@CMAKE_FILES_DIRECTORY@") set(CMAKE_MODULE_PATH "@CMAKE_ROOT@/Modules") set(CMAKE_SHARED_LIBRARY_PREFIX "@CMAKE_SHARED_LIBRARY_PREFIX@") set(CMAKE_SHARED_LIBRARY_SUFFIX "@CMAKE_SHARED_LIBRARY_SUFFIX@") set(CMAKE_HOST_SYSTEM "@CMAKE_HOST_SYSTEM@") set(DCMTK_CMAKE_INCLUDE "@CMAKE_SOURCE_DIR@/@DCMTK_CMAKE_INCLUDE@") set(DCMTK_TEST_EXECUTABLES "@DCMTK_TEST_EXECUTABLES@") set(DCMTK_ALL_LIBRARIES "@DCMTK_ALL_LIBRARIES@") set(DCMTK_LIBRARY_DEPENDENCIES "@DCMTK_LIBRARY_DEPENDENCIES@") set(DCMTK_PACKAGE_VERSION "@DCMTK_PACKAGE_VERSION@") set(DCMTK_ABI_VERSION "@DCMTK_ABI_VERSION@") set(BUILD_SHARED_LIBS "@BUILD_SHARED_LIBS@") set(DCMTK_DICOM_DICTIONARIES "@DCMTK_DICOM_DICTIONARIES@") set(ANDROID "@ANDROID@") set(ANDROID_ADB_PROGRAM "@ANDROID_ADB_PROGRAM@") set(ANDROID_ANDROID_PROGRAM "@ANDROID_ANDROID_PROGRAM@") set(ANDROID_EMULATOR_PROGRAM "@ANDROID_EMULATOR_PROGRAM@") set(ANDROID_EMULATOR_AVD "@ANDROID_EMULATOR_AVD@") set(ANDROID_RUNTIME_LIBRARIES "@ANDROID_RUNTIME_LIBRARIES@") set(ANDROID_TEMPORARY_FILES_LOCATION "@ANDROID_TEMPORARY_FILES_LOCATION@") # Emulate some required CMake commands while running inside CTest INCLUDE(${DCMTK_CMAKE_INCLUDE}CMake/CTest/dcmtkCTestMacros.cmake) include(${DCMTK_CMAKE_INCLUDE}CMake/CTest/dcmtkCTestMacros.cmake) # For DCMTK_UNSET_XXX INCLUDE(${DCMTK_CMAKE_INCLUDE}CMake/dcmtkMacros.cmake) include(${DCMTK_CMAKE_INCLUDE}CMake/dcmtkMacros.cmake) # Load required functions for controlling the Android device emulator INCLUDE(${DCMTK_CMAKE_INCLUDE}CMake/dcmtkUseAndroidSDK.cmake) include(${DCMTK_CMAKE_INCLUDE}CMake/dcmtkUseAndroidSDK.cmake) # Prepare the Android testing environment # Prepare the emulator Loading @@ -51,20 +51,20 @@ MESSAGE_COMMAND(STOP_MESSAGE ${STOP_MESSAGE}) # CTEST_CUSTOM_POST_TESTS executes a sequence of 'non CMake' commands separated # by ';' characters. Therefore the sequence a single command consists of must # be translated appropriately first STRING(REPLACE ";" " " STOP_EMULATOR "${STOP_EMULATOR}") STRING(REPLACE ";" " " STOP_MESSAGE "${STOP_MESSAGE}") string(REPLACE ";" " " STOP_EMULATOR "${STOP_EMULATOR}") string(REPLACE ";" " " STOP_MESSAGE "${STOP_MESSAGE}") # Register the cleanup hooks SET(CTEST_CUSTOM_POST_TEST "${STOP_MESSAGE}" "${STOP_EMULATOR}") set(CTEST_CUSTOM_POST_TEST "${STOP_MESSAGE}" "${STOP_EMULATOR}") # Set the current emulator instance handle via an environment variable SET(ENV{DCMTK_ANDROID_EMULATOR_INSTANCE} "${DCMTK_ANDROID_EMULATOR_INSTANCE}") set(ENV{DCMTK_ANDROID_EMULATOR_INSTANCE} "${DCMTK_ANDROID_EMULATOR_INSTANCE}") # Collect the list of required libraries IF(BUILD_SHARED_LIBS) FOREACH(LIBRARY ${DCMTK_ALL_LIBRARIES}) LIST(APPEND DCMTK_CREATED_SHARED_LIBRARIES "${CMAKE_BINARY_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}${LIBRARY}${CMAKE_SHARED_LIBRARY_SUFFIX}.${DCMTK_PACKAGE_VERSION}") ENDFOREACH() ENDIF(BUILD_SHARED_LIBS) if(BUILD_SHARED_LIBS) foreach(LIBRARY ${DCMTK_ALL_LIBRARIES}) list(APPEND DCMTK_CREATED_SHARED_LIBRARIES "${CMAKE_BINARY_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}${LIBRARY}${CMAKE_SHARED_LIBRARY_SUFFIX}.${DCMTK_PACKAGE_VERSION}") endforeach() endif() # Transmit the required executables, libraries and dictionaries to the emulator DCMTK_ANDROID_PUSH(DCMTK_ANDROID_EMULATOR_INSTANCE Loading @@ -77,22 +77,22 @@ DCMTK_ANDROID_PUSH(DCMTK_ANDROID_EMULATOR_INSTANCE ) # Set executable permissions FOREACH(TEST_EXECUTABLE ${DCMTK_TEST_EXECUTABLES}) GET_FILENAME_COMPONENT(NAME "${TEST_EXECUTABLE}" NAME) foreach(TEST_EXECUTABLE ${DCMTK_TEST_EXECUTABLES}) get_filename_component(NAME "${TEST_EXECUTABLE}" NAME) DCMTK_ANDROID_SHELL(DCMTK_ANDROID_EMULATOR_INSTANCE COMMAND chmod 755 "${ANDROID_TEMPORARY_FILES_LOCATION}/${NAME}" OUTPUT_QUIET ERROR_QUIET ) ENDFOREACH() endforeach() # Create necessary softlinks IF(BUILD_SHARED_LIBS) FOREACH(LIBRARY ${DCMTK_ALL_LIBRARIES}) if(BUILD_SHARED_LIBS) foreach(LIBRARY ${DCMTK_ALL_LIBRARIES}) DCMTK_ANDROID_SHELL(DCMTK_ANDROID_EMULATOR_INSTANCE COMMAND ln -s "./${CMAKE_SHARED_LIBRARY_PREFIX}${LIBRARY}${CMAKE_SHARED_LIBRARY_SUFFIX}.${DCMTK_PACKAGE_VERSION}" "${ANDROID_TEMPORARY_FILES_LOCATION}/${CMAKE_SHARED_LIBRARY_PREFIX}${LIBRARY}${CMAKE_SHARED_LIBRARY_SUFFIX}.${DCMTK_ABI_VERSION}" OUTPUT_QUIET ERROR_QUIET ) ENDFOREACH() ENDIF(BUILD_SHARED_LIBS) endforeach() endif() CMake/CTest/CTestCustomWine.cmake.in +4 −4 Original line number Diff line number Diff line Loading @@ -4,13 +4,13 @@ # workaround, but what can you do? # SET(ENV{WINEPREFIX} "@DCMTK_WINEPREFIX@") SET(ENV{DCMDICTPATH} "@DCMDICTPATH@") SET(WINE_WINE_PROGRAM "@WINE_WINE_PROGRAM@") set(ENV{WINEPREFIX} "@DCMTK_WINEPREFIX@") set(ENV{DCMDICTPATH} "@DCMDICTPATH@") set(WINE_WINE_PROGRAM "@WINE_WINE_PROGRAM@") # spawn the winserver using 'cmd /C call' -> effectively NOP # spawn it using 'sh', such that this script does not attach itself to it. EXECUTE_PROCESS(COMMAND execute_process(COMMAND sh -c "\"${WINE_WINE_PROGRAM}\" cmd /C call" OUTPUT_FILE "/dev/null" ERROR_FILE "/dev/null" Loading CMake/CTest/dcmtkCTestMacros.cmake +20 −20 Original line number Diff line number Diff line Loading @@ -3,25 +3,25 @@ # that is missing inside CTest. # MACRO(MESSAGE_COMMAND VAR MODE) IF(${MODE} STREQUAL "STATUS") SET(${VAR} ${CMAKE_COMMAND} -E echo -- ${ARGN}) ELSEIF(${MODE} STREQUAL "WARNING") SET(${VAR} ${CMAKE_COMMAND} -E echo WARNING: ${ARGN}) ELSEIF(${MODE} STREQUAL "AUTHOR_WARNING") SET(${VAR} ${CMAKE_COMMAND} -E echo Warning: ${ARGN}) ELSEIF(${MODE} STREQUAL "SEND_ERROR") SET(${VAR} ${CMAKE_COMMAND} -E echo Error: ${ARGN}) ELSEIF(${MODE} STREQUAL "FATAL_ERROR") SET(${VAR} ${CMAKE_COMMAND} -E echo ERROR: ${ARGN}) ELSEIF(${MODE} STREQUAL "DEPRECATION") SET(${VAR} ${CMAKE_COMMAND} -E echo ${ARGN}) ELSE() SET(${VAR} ${CMAKE_COMMAND} -E echo ${MODE} ${ARGN}) ENDIF() ENDMACRO(MESSAGE_COMMAND) macro(MESSAGE_COMMAND VAR MODE) if(${MODE} STREQUAL "STATUS") set(${VAR} ${CMAKE_COMMAND} -E echo -- ${ARGN}) elseif(${MODE} STREQUAL "WARNING") set(${VAR} ${CMAKE_COMMAND} -E echo WARNING: ${ARGN}) elseif(${MODE} STREQUAL "AUTHOR_WARNING") set(${VAR} ${CMAKE_COMMAND} -E echo Warning: ${ARGN}) elseif(${MODE} STREQUAL "SEND_ERROR") set(${VAR} ${CMAKE_COMMAND} -E echo Error: ${ARGN}) elseif(${MODE} STREQUAL "FATAL_ERROR") set(${VAR} ${CMAKE_COMMAND} -E echo ERROR: ${ARGN}) elseif(${MODE} STREQUAL "DEPRECATION") set(${VAR} ${CMAKE_COMMAND} -E echo ${ARGN}) else() set(${VAR} ${CMAKE_COMMAND} -E echo ${MODE} ${ARGN}) endif() endmacro() FUNCTION(MESSAGE) function(MESSAGE) MESSAGE_COMMAND(COMMAND ${ARGN}) EXECUTE_PROCESS(COMMAND ${COMMAND}) ENDFUNCTION(MESSAGE) execute_process(COMMAND ${COMMAND}) endfunction() Loading
ANNOUNCE +97 −51 Original line number Diff line number Diff line ANNOUNCEMENT Version 3.6.3 of the OFFIS DCMTK (DICOM ToolKit) software is now available for Version 3.6.4 of the OFFIS DCMTK (DICOM ToolKit) software is now available for public release. This is a minor release that includes the following changes over the previous version 3.6.2: over the previous version 3.6.3: - DCMTK 3.6.3 builds correctly on older and up-to-date versions of GNU gcc (4.2.1 to 7.1.1) Clang (3.4.1 to 4.0.1), Microsoft Visual Studio (2005 to - DCMTK 3.6.4 builds correctly on older and up-to-date versions of GNU gcc (4.2.1 to 8.2.1) Clang (3.4.2 to 7.0.0), Microsoft Visual Studio (2005 to 2017) and SunPro CC (5.14 and 5.15). - Tested with the following operating systems/environments: Loading @@ -23,81 +23,128 @@ over the previous version 3.6.2: For a complete list of tested systems and compilers, see the INSTALL file. - GNU Autoconf has been deprecated, running 'configure' will now emit a warning by default. - GNU Autoconf is still deprecated, running 'configure' emits a warning by default. Support for GNU Autoconf will be removed after this release. - Updated data dictionary, SOP Class and Transfer Syntax UIDs for the recently approved changes to the DICOM standard (i.e. Supplements and CPs), up to DICOM standard release DICOM 2017e. standard release DICOM 2018d plus Supplement 188 (Multi-energy CT Images), CP-1803 and CP-1809. - Updated automatically generated classes in module "dcmrt" (Radiotherapy) and "dcmsr" (Structured Reporting) based on DICOM 2017e. Also updated the Code - Added "dcmicmp", a new tool that reads two DICOM images, an original "reference image" and a post-processed "test image" to which some kind of processing such as a lossy image compression has been applied. dcmicmp compares both images and computes several metrics that describe how similar or different both images are. - Added new command line applications: cda2dcm and stl2dcm for encapsulation of HL7 CDA documents and STL files into DICOM file format. Revised implementation of pdf2dcm based on new class DcmEncapsulatedDocument. - The lossless JPEG decoder can now handle images compressed with the Cornell codec, which creates invalid Huffman codes for 16-bit images. - The new class OFRandom implements a cryptographically secure pseudo random number generator (PRNG) based on the ISAAC algorithm and its public domain reference implementation by Bob Jenkins. - Major revision of the TLS code in DCMTK (module dcmtls and related command line tools) implementing DICOM Supplement 204 "TLS Security Profiles". Selection of TLS ciphersuites is now based on security profiles, and DCMTK now implements the recommendations of BCP 195 / RFC 7525. - DCMTK can now be compiled with LibreSSL as an alternative to OpenSSL. - Updated automatically generated Context Group classes in "dcmsr" (Structured Reporting) based on DICOM 2018d. Also updated the Code definitions from the supported coding schemes such as DICOM, NCIt and UMLS. - Further enhanced DICOM Structured Reporting (SR) module "dcmsr": - Added support for the Patient Radiation Dose SR IOD (Supplement 191). - Added support for included template TID 4019 (Algorithm Identification) to the implementation of TID 1419 (ROI Measurements). - Added support for further sub-templates to the existing class for TID 1500 (Measurement Report), e.g. TID 300 (Measurement). - Added a document tree node filter that checks for the presence or absence of a concept name, i.e. whether it is empty or not. - Enhanced support for image entry descriptors in TID 1600 (Image Library), e.g. by adding a new method that allows for moving common image entry descriptors automatically to their respective image group. - Added new and enhanced existing code examples for this module. - Added new method that allows for adding extra content items to extensible SR templates. - Enhanced Worklist SCP code to make use of existing classes and functions instead of using its own "spaghetti" code for everything. This also resolves issues with the Worklist SCP rejecting some legit Worklist queries as its own verification functions were too strict. - Further enhanced iterating an SR document tree, e.g. by providing a new filter mechanism that allows for matching document tree nodes based on a variety of properties like value type and concept name. - Added method getNumberOfValues() to all VR and other classes that are derived from DcmObject (such as DcmItem). This new method always returns the number of values currently stored in the corresponding object/element, in contrast to getVM(), which sometimes returns the constant 1, or card(), which is not available for all classes. - Added another gotoNode() method to tree and cursor class, which searches for a particular tree node by its value. - The ACSE timeout, e.g. passed to the various networking command line tools using --acse-timeout, is now also used for the first PDU to be read. This is another step towards cleaning up the timeout handling in dcmnet module. - Added "equal" and "not equal" comparison operators to all document tree node and underlying value classes as well as to the wrapper class for "SR content items". - Replaced all calls of strcpy() by OFStandard::strlcpy(), which should reduce the possibility of buffer overflows. Also added OFStandard::snprintf() and OFStandard::vsnprintf(), which should be used within the DCMTK as safe and portable helper functions. - Updated mapping of the Defined Terms for Body Part Examined in the class that implements CID 4031 (Common Anatomic Regions) based on DICOM 2017e. - Fixed bug in dcmseg that produced broken binary Segmentation objects if the number of pixels were not dividable by 8 for a single frame. - Many further improvements in order to stay up-to-date with development of the DICOM standard and to make it easier to use this module and its classes. - Enhanced Worklist SCP code to make use of existing classes and functions instead of using its own "spaghetti" code for everything. This also resolves issues with the Worklist SCP rejecting some legit Worklist queries as its own verification functions were too strict. - Added options to findscu that extract the C-FIND response datasets to XML files (either a single file with all responses or separate files for each response, similar to the existing --extract option). - Introduced a subset of std::filesystem to ofstd, currently providing the classes OFpath, OFdirectory_entry and OFdirectory_iterator as portable implementations for the respective C++17 STL classes. - Added option --socket-timeout to echoscu (same as for e.g. storescu). - The Windows implementation of class OFReadWriteLock class now uses Slim Reader/Writer (SRW) Locks, which are available since Windows Vista, instead of the older implementation based on a Mutex, a Semaphore and a counter, because SRW locks are much faster. - Consistently use the default value "MEDIUM" for Priority in all DIMSE request messages, i.e. for C-STORE, C-FIND, C-GET and C-MOVE. - Changed version numbering of shared objects. On Posix operating systems, it now follows these guidelines: https://autotools.io/libtool/version.html. - Fixed various issues that occurred after the official 3.6.2 release. - Fixed various issues that occurred after the official 3.6.3 release. See CHANGES file for details. Many people have contributed to this new release of DCMTK, appearing here in alphabetical order. Thank you very much for your support! Domen Soklic <domen.soklic@cosylab.com> Klaus Eisentraut <klaus.eisentraut@siemens-healthineers.com> Andrey Fedorov <andrey.fedorov@gmail.com> Florian Franzen <Florian.Franzen@caesar.de> Christian Fremgen <Christian.Fremgen@ith-icoserve.com> Omar Ganiev <beched@deteact.com> Daniel Grieger <Daniel.Grieger@ith-icoserve.com> Helmut Grohne <helmut@subdivi.de> GwanYeong Kim <gy741.kim@gmail.com> Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com> Joerg Koenig <joerg.koenig@zeiss.com> Michael Craggs <Michael.Craggs@ith-icoserve.com> Peter Klotz <Peter.Klotz@ith-icoserve.com> Helmut Steiner Max Smolens Martin Strunz Sergei Khlutchin Forum user "Hafiz Rafeeq" Forum user "sfzhang" Mathieu Malaterre <mathieu.malaterre@gmail.com> Savvas Metallidis <savvas.metallidis@infomedcs.com> Isaiah Norton <inorton@bwh.harvard.edu> Lukas Raesenhoeft <lukas@raesenhoeft.com> Uli Schlachter <psychon@znc.in> Max Smolens (github user msmolens) Christian Wetzel <wetzel@phoenix-pacs.de> Gert Wollny <gw.fossdev@gmail.com> Sahab Zanjanizadeh <Sahab.Zanjanizadeh@ge.com> Thomas Dement Hans Johnson (GitHub user "hjmjohnson") Forum user "deepakt" GitHub user "sercxjo" Members of the DCMTK Team who have worked on this release are (in alphabetical order): Pedro Arizpe Gomez <arizpegomez@offis.de> Marco Eichelberg <eichelberg@offis.de> Michael Onken <onken@open-connections.de> Joerg Riesmeier <dicom@jriesmeier.com> Loading @@ -106,13 +153,12 @@ Members of the DCMTK Team who have worked on this release are Student associates: Nikolas Goldhammer <nikolasgoldhammer@gmail.com> Sebastian Grallert <Grallert.Sebastian@web.de> Also see CREDITS file for projects and companies who have been generously supporting DCMTK. The DCMTK software can be downloaded via: http://dicom.offis.de/dcmtk or http://www.dcmtk.org/ https://dicom.offis.de/dcmtk or https://www.dcmtk.org/ OFFIS e.V., Oldenburg, Germany, 2018-02-05 OFFIS e.V., Oldenburg, Germany, 2018-11-29
CMake/3rdparty.cmake +292 −256 File changed.Preview size limit exceeded, changes collapsed. Show changes
CMake/CTest/CTestCustomAndroid.cmake.in +43 −43 Original line number Diff line number Diff line Loading @@ -5,36 +5,36 @@ # # Restore the required settings of the CMake configuration step CMAKE_MINIMUM_REQUIRED(VERSION 2.6) SET(CMAKE_COMMAND "@CMAKE_COMMAND@") SET(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@") SET(CMAKE_CURRENT_BINARY_DIR "@CMAKE_BINARY_DIR@") SET(CMAKE_FILES_DIRECTORY "@CMAKE_FILES_DIRECTORY@") SET(CMAKE_MODULE_PATH "@CMAKE_ROOT@/Modules") SET(CMAKE_SHARED_LIBRARY_PREFIX "@CMAKE_SHARED_LIBRARY_PREFIX@") SET(CMAKE_SHARED_LIBRARY_SUFFIX "@CMAKE_SHARED_LIBRARY_SUFFIX@") SET(CMAKE_HOST_SYSTEM "@CMAKE_HOST_SYSTEM@") SET(DCMTK_CMAKE_INCLUDE "@CMAKE_SOURCE_DIR@/@DCMTK_CMAKE_INCLUDE@") SET(DCMTK_TEST_EXECUTABLES "@DCMTK_TEST_EXECUTABLES@") SET(DCMTK_ALL_LIBRARIES "@DCMTK_ALL_LIBRARIES@") SET(DCMTK_LIBRARY_DEPENDENCIES "@DCMTK_LIBRARY_DEPENDENCIES@") SET(DCMTK_PACKAGE_VERSION "@DCMTK_PACKAGE_VERSION@") SET(DCMTK_ABI_VERSION "@DCMTK_ABI_VERSION@") SET(BUILD_SHARED_LIBS "@BUILD_SHARED_LIBS@") SET(DCMTK_DICOM_DICTIONARIES "@DCMTK_DICOM_DICTIONARIES@") SET(ANDROID "@ANDROID@") SET(ANDROID_ADB_PROGRAM "@ANDROID_ADB_PROGRAM@") SET(ANDROID_ANDROID_PROGRAM "@ANDROID_ANDROID_PROGRAM@") SET(ANDROID_EMULATOR_PROGRAM "@ANDROID_EMULATOR_PROGRAM@") SET(ANDROID_EMULATOR_AVD "@ANDROID_EMULATOR_AVD@") SET(ANDROID_RUNTIME_LIBRARIES "@ANDROID_RUNTIME_LIBRARIES@") SET(ANDROID_TEMPORARY_FILES_LOCATION "@ANDROID_TEMPORARY_FILES_LOCATION@") cmake_minimum_required(VERSION 2.6) set(CMAKE_COMMAND "@CMAKE_COMMAND@") set(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@") set(CMAKE_CURRENT_BINARY_DIR "@CMAKE_BINARY_DIR@") set(CMAKE_FILES_DIRECTORY "@CMAKE_FILES_DIRECTORY@") set(CMAKE_MODULE_PATH "@CMAKE_ROOT@/Modules") set(CMAKE_SHARED_LIBRARY_PREFIX "@CMAKE_SHARED_LIBRARY_PREFIX@") set(CMAKE_SHARED_LIBRARY_SUFFIX "@CMAKE_SHARED_LIBRARY_SUFFIX@") set(CMAKE_HOST_SYSTEM "@CMAKE_HOST_SYSTEM@") set(DCMTK_CMAKE_INCLUDE "@CMAKE_SOURCE_DIR@/@DCMTK_CMAKE_INCLUDE@") set(DCMTK_TEST_EXECUTABLES "@DCMTK_TEST_EXECUTABLES@") set(DCMTK_ALL_LIBRARIES "@DCMTK_ALL_LIBRARIES@") set(DCMTK_LIBRARY_DEPENDENCIES "@DCMTK_LIBRARY_DEPENDENCIES@") set(DCMTK_PACKAGE_VERSION "@DCMTK_PACKAGE_VERSION@") set(DCMTK_ABI_VERSION "@DCMTK_ABI_VERSION@") set(BUILD_SHARED_LIBS "@BUILD_SHARED_LIBS@") set(DCMTK_DICOM_DICTIONARIES "@DCMTK_DICOM_DICTIONARIES@") set(ANDROID "@ANDROID@") set(ANDROID_ADB_PROGRAM "@ANDROID_ADB_PROGRAM@") set(ANDROID_ANDROID_PROGRAM "@ANDROID_ANDROID_PROGRAM@") set(ANDROID_EMULATOR_PROGRAM "@ANDROID_EMULATOR_PROGRAM@") set(ANDROID_EMULATOR_AVD "@ANDROID_EMULATOR_AVD@") set(ANDROID_RUNTIME_LIBRARIES "@ANDROID_RUNTIME_LIBRARIES@") set(ANDROID_TEMPORARY_FILES_LOCATION "@ANDROID_TEMPORARY_FILES_LOCATION@") # Emulate some required CMake commands while running inside CTest INCLUDE(${DCMTK_CMAKE_INCLUDE}CMake/CTest/dcmtkCTestMacros.cmake) include(${DCMTK_CMAKE_INCLUDE}CMake/CTest/dcmtkCTestMacros.cmake) # For DCMTK_UNSET_XXX INCLUDE(${DCMTK_CMAKE_INCLUDE}CMake/dcmtkMacros.cmake) include(${DCMTK_CMAKE_INCLUDE}CMake/dcmtkMacros.cmake) # Load required functions for controlling the Android device emulator INCLUDE(${DCMTK_CMAKE_INCLUDE}CMake/dcmtkUseAndroidSDK.cmake) include(${DCMTK_CMAKE_INCLUDE}CMake/dcmtkUseAndroidSDK.cmake) # Prepare the Android testing environment # Prepare the emulator Loading @@ -51,20 +51,20 @@ MESSAGE_COMMAND(STOP_MESSAGE ${STOP_MESSAGE}) # CTEST_CUSTOM_POST_TESTS executes a sequence of 'non CMake' commands separated # by ';' characters. Therefore the sequence a single command consists of must # be translated appropriately first STRING(REPLACE ";" " " STOP_EMULATOR "${STOP_EMULATOR}") STRING(REPLACE ";" " " STOP_MESSAGE "${STOP_MESSAGE}") string(REPLACE ";" " " STOP_EMULATOR "${STOP_EMULATOR}") string(REPLACE ";" " " STOP_MESSAGE "${STOP_MESSAGE}") # Register the cleanup hooks SET(CTEST_CUSTOM_POST_TEST "${STOP_MESSAGE}" "${STOP_EMULATOR}") set(CTEST_CUSTOM_POST_TEST "${STOP_MESSAGE}" "${STOP_EMULATOR}") # Set the current emulator instance handle via an environment variable SET(ENV{DCMTK_ANDROID_EMULATOR_INSTANCE} "${DCMTK_ANDROID_EMULATOR_INSTANCE}") set(ENV{DCMTK_ANDROID_EMULATOR_INSTANCE} "${DCMTK_ANDROID_EMULATOR_INSTANCE}") # Collect the list of required libraries IF(BUILD_SHARED_LIBS) FOREACH(LIBRARY ${DCMTK_ALL_LIBRARIES}) LIST(APPEND DCMTK_CREATED_SHARED_LIBRARIES "${CMAKE_BINARY_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}${LIBRARY}${CMAKE_SHARED_LIBRARY_SUFFIX}.${DCMTK_PACKAGE_VERSION}") ENDFOREACH() ENDIF(BUILD_SHARED_LIBS) if(BUILD_SHARED_LIBS) foreach(LIBRARY ${DCMTK_ALL_LIBRARIES}) list(APPEND DCMTK_CREATED_SHARED_LIBRARIES "${CMAKE_BINARY_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}${LIBRARY}${CMAKE_SHARED_LIBRARY_SUFFIX}.${DCMTK_PACKAGE_VERSION}") endforeach() endif() # Transmit the required executables, libraries and dictionaries to the emulator DCMTK_ANDROID_PUSH(DCMTK_ANDROID_EMULATOR_INSTANCE Loading @@ -77,22 +77,22 @@ DCMTK_ANDROID_PUSH(DCMTK_ANDROID_EMULATOR_INSTANCE ) # Set executable permissions FOREACH(TEST_EXECUTABLE ${DCMTK_TEST_EXECUTABLES}) GET_FILENAME_COMPONENT(NAME "${TEST_EXECUTABLE}" NAME) foreach(TEST_EXECUTABLE ${DCMTK_TEST_EXECUTABLES}) get_filename_component(NAME "${TEST_EXECUTABLE}" NAME) DCMTK_ANDROID_SHELL(DCMTK_ANDROID_EMULATOR_INSTANCE COMMAND chmod 755 "${ANDROID_TEMPORARY_FILES_LOCATION}/${NAME}" OUTPUT_QUIET ERROR_QUIET ) ENDFOREACH() endforeach() # Create necessary softlinks IF(BUILD_SHARED_LIBS) FOREACH(LIBRARY ${DCMTK_ALL_LIBRARIES}) if(BUILD_SHARED_LIBS) foreach(LIBRARY ${DCMTK_ALL_LIBRARIES}) DCMTK_ANDROID_SHELL(DCMTK_ANDROID_EMULATOR_INSTANCE COMMAND ln -s "./${CMAKE_SHARED_LIBRARY_PREFIX}${LIBRARY}${CMAKE_SHARED_LIBRARY_SUFFIX}.${DCMTK_PACKAGE_VERSION}" "${ANDROID_TEMPORARY_FILES_LOCATION}/${CMAKE_SHARED_LIBRARY_PREFIX}${LIBRARY}${CMAKE_SHARED_LIBRARY_SUFFIX}.${DCMTK_ABI_VERSION}" OUTPUT_QUIET ERROR_QUIET ) ENDFOREACH() ENDIF(BUILD_SHARED_LIBS) endforeach() endif()
CMake/CTest/CTestCustomWine.cmake.in +4 −4 Original line number Diff line number Diff line Loading @@ -4,13 +4,13 @@ # workaround, but what can you do? # SET(ENV{WINEPREFIX} "@DCMTK_WINEPREFIX@") SET(ENV{DCMDICTPATH} "@DCMDICTPATH@") SET(WINE_WINE_PROGRAM "@WINE_WINE_PROGRAM@") set(ENV{WINEPREFIX} "@DCMTK_WINEPREFIX@") set(ENV{DCMDICTPATH} "@DCMDICTPATH@") set(WINE_WINE_PROGRAM "@WINE_WINE_PROGRAM@") # spawn the winserver using 'cmd /C call' -> effectively NOP # spawn it using 'sh', such that this script does not attach itself to it. EXECUTE_PROCESS(COMMAND execute_process(COMMAND sh -c "\"${WINE_WINE_PROGRAM}\" cmd /C call" OUTPUT_FILE "/dev/null" ERROR_FILE "/dev/null" Loading
CMake/CTest/dcmtkCTestMacros.cmake +20 −20 Original line number Diff line number Diff line Loading @@ -3,25 +3,25 @@ # that is missing inside CTest. # MACRO(MESSAGE_COMMAND VAR MODE) IF(${MODE} STREQUAL "STATUS") SET(${VAR} ${CMAKE_COMMAND} -E echo -- ${ARGN}) ELSEIF(${MODE} STREQUAL "WARNING") SET(${VAR} ${CMAKE_COMMAND} -E echo WARNING: ${ARGN}) ELSEIF(${MODE} STREQUAL "AUTHOR_WARNING") SET(${VAR} ${CMAKE_COMMAND} -E echo Warning: ${ARGN}) ELSEIF(${MODE} STREQUAL "SEND_ERROR") SET(${VAR} ${CMAKE_COMMAND} -E echo Error: ${ARGN}) ELSEIF(${MODE} STREQUAL "FATAL_ERROR") SET(${VAR} ${CMAKE_COMMAND} -E echo ERROR: ${ARGN}) ELSEIF(${MODE} STREQUAL "DEPRECATION") SET(${VAR} ${CMAKE_COMMAND} -E echo ${ARGN}) ELSE() SET(${VAR} ${CMAKE_COMMAND} -E echo ${MODE} ${ARGN}) ENDIF() ENDMACRO(MESSAGE_COMMAND) macro(MESSAGE_COMMAND VAR MODE) if(${MODE} STREQUAL "STATUS") set(${VAR} ${CMAKE_COMMAND} -E echo -- ${ARGN}) elseif(${MODE} STREQUAL "WARNING") set(${VAR} ${CMAKE_COMMAND} -E echo WARNING: ${ARGN}) elseif(${MODE} STREQUAL "AUTHOR_WARNING") set(${VAR} ${CMAKE_COMMAND} -E echo Warning: ${ARGN}) elseif(${MODE} STREQUAL "SEND_ERROR") set(${VAR} ${CMAKE_COMMAND} -E echo Error: ${ARGN}) elseif(${MODE} STREQUAL "FATAL_ERROR") set(${VAR} ${CMAKE_COMMAND} -E echo ERROR: ${ARGN}) elseif(${MODE} STREQUAL "DEPRECATION") set(${VAR} ${CMAKE_COMMAND} -E echo ${ARGN}) else() set(${VAR} ${CMAKE_COMMAND} -E echo ${MODE} ${ARGN}) endif() endmacro() FUNCTION(MESSAGE) function(MESSAGE) MESSAGE_COMMAND(COMMAND ${ARGN}) EXECUTE_PROCESS(COMMAND ${COMMAND}) ENDFUNCTION(MESSAGE) execute_process(COMMAND ${COMMAND}) endfunction()