Commit 0822681b authored by Gert Wollny's avatar Gert Wollny
Browse files

New upstream version 3.6.4

parent 02792b5c
Loading
Loading
Loading
Loading
+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:
@@ -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>
@@ -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
+292 −256

File changed.

Preview size limit exceeded, changes collapsed.

+43 −43
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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()
+4 −4
Original line number Diff line number Diff line
@@ -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"
+20 −20
Original line number Diff line number Diff line
@@ -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