1# Orthanc - A Lightweight, RESTful DICOM Store 2# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics 3# Department, University Hospital of Liege, Belgium 4# Copyright (C) 2017-2020 Osimis S.A., Belgium 5# 6# This program is free software: you can redistribute it and/or 7# modify it under the terms of the GNU Lesser General Public License 8# as published by the Free Software Foundation, either version 3 of 9# the License, or (at your option) any later version. 10# 11# This program is distributed in the hope that it will be useful, but 12# WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14# Lesser General Public License for more details. 15# 16# You should have received a copy of the GNU Lesser General Public 17# License along with this program. If not, see 18# <http://www.gnu.org/licenses/>. 19 20 21if (NOT DEFINED ENABLE_DCMTK_NETWORKING) 22 set(ENABLE_DCMTK_NETWORKING ON) 23endif() 24 25if (STATIC_BUILD OR NOT USE_SYSTEM_DCMTK) 26 if (DCMTK_STATIC_VERSION STREQUAL "3.6.0") 27 include(${CMAKE_CURRENT_LIST_DIR}/DcmtkConfigurationStatic-3.6.0.cmake) 28 elseif (DCMTK_STATIC_VERSION STREQUAL "3.6.2") 29 include(${CMAKE_CURRENT_LIST_DIR}/DcmtkConfigurationStatic-3.6.2.cmake) 30 elseif (DCMTK_STATIC_VERSION STREQUAL "3.6.4") 31 include(${CMAKE_CURRENT_LIST_DIR}/DcmtkConfigurationStatic-3.6.4.cmake) 32 elseif (DCMTK_STATIC_VERSION STREQUAL "3.6.5") 33 include(${CMAKE_CURRENT_LIST_DIR}/DcmtkConfigurationStatic-3.6.5.cmake) 34 else() 35 message(FATAL_ERROR "Unsupported version of DCMTK: ${DCMTK_STATIC_VERSION}") 36 endif() 37 38 39 ## 40 ## Commands shared by all versions of DCMTK 41 ## 42 43 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmdata/libsrc DCMTK_SOURCES) 44 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/ofstd/libsrc DCMTK_SOURCES) 45 46 LIST(REMOVE_ITEM DCMTK_SOURCES 47 ${DCMTK_SOURCES_DIR}/dcmdata/libsrc/mkdictbi.cc 48 ${DCMTK_SOURCES_DIR}/dcmdata/libsrc/mkdeftag.cc 49 ${DCMTK_SOURCES_DIR}/dcmdata/libsrc/dcdict_orthanc.cc 50 ) 51 52 if (CMAKE_SYSTEM_NAME STREQUAL "Emscripten") 53 message(${DCMTK_SOURCES_DIR}) 54 list(REMOVE_ITEM DCMTK_SOURCES 55 ${DCMTK_SOURCES_DIR}/ofstd/libsrc/offilsys.cc 56 ) 57 endif() 58 59 if (ENABLE_DCMTK_NETWORKING) 60 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmnet/libsrc DCMTK_SOURCES) 61 include_directories( 62 ${DCMTK_SOURCES_DIR}/dcmnet/include 63 ) 64 endif() 65 66 if (ENABLE_DCMTK_TRANSCODING) 67 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmimgle/libsrc DCMTK_SOURCES) 68 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmimage/libsrc DCMTK_SOURCES) 69 include_directories( 70 ${DCMTK_SOURCES_DIR}/dcmimage/include 71 ) 72 endif() 73 74 if (ENABLE_DCMTK_JPEG) 75 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc DCMTK_SOURCES) 76 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmjpeg/libijg8 DCMTK_SOURCES) 77 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmjpeg/libijg12 DCMTK_SOURCES) 78 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmjpeg/libijg16 DCMTK_SOURCES) 79 include_directories( 80 ${DCMTK_SOURCES_DIR}/dcmjpeg/include 81 ${DCMTK_SOURCES_DIR}/dcmjpeg/libijg8 82 ${DCMTK_SOURCES_DIR}/dcmjpeg/libijg12 83 ${DCMTK_SOURCES_DIR}/dcmjpeg/libijg16 84 ${DCMTK_SOURCES_DIR}/dcmimgle/include 85 ) 86 list(REMOVE_ITEM DCMTK_SOURCES 87 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/ddpiimpl.cc 88 89 # Solves linking problem in WebAssembly: "wasm-ld: error: 90 # duplicate symbol: jaritab" (modification in Orthanc 1.5.9) 91 ${DCMTK_SOURCES_DIR}/dcmjpeg/libijg8/jaricom.c 92 ${DCMTK_SOURCES_DIR}/dcmjpeg/libijg12/jaricom.c 93 ${DCMTK_SOURCES_DIR}/dcmjpeg/libijg24/jaricom.c 94 ) 95 96 if (NOT ENABLE_DCMTK_TRANSCODING) 97 list(REMOVE_ITEM DCMTK_SOURCES 98 # Disable support for encoding JPEG (modification in Orthanc 1.0.1) 99 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djcodece.cc 100 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djencsv1.cc 101 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djencbas.cc 102 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djencpro.cc 103 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djenclol.cc 104 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djencode.cc 105 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djencext.cc 106 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djencsps.cc 107 ) 108 endif() 109 endif() 110 111 112 if (ENABLE_DCMTK_JPEG_LOSSLESS) 113 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmjpls/libsrc DCMTK_SOURCES) 114 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmjpls/libcharls DCMTK_SOURCES) 115 include_directories( 116 ${DCMTK_SOURCES_DIR}/dcmjpeg/include 117 ${DCMTK_SOURCES_DIR}/dcmjpls/include 118 ${DCMTK_SOURCES_DIR}/dcmjpls/libcharls 119 ) 120 list(APPEND DCMTK_SOURCES 121 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djrplol.cc 122 ) 123 124 if (NOT ENABLE_DCMTK_TRANSCODING) 125 list(REMOVE_ITEM DCMTK_SOURCES 126 ${DCMTK_SOURCES_DIR}/dcmjpls/libsrc/djcodece.cc 127 128 # Disable support for encoding JPEG-LS (modification in Orthanc 1.0.1) 129 ${DCMTK_SOURCES_DIR}/dcmjpls/libsrc/djencode.cc 130 ) 131 endif() 132 endif() 133 134 135 # This fixes crashes related to the destruction of the DCMTK OFLogger 136 # http://support.dcmtk.org/docs-snapshot/file_macros.html 137 add_definitions( 138 -DLOG4CPLUS_DISABLE_FATAL=1 139 -DDCMTK_VERSION_NUMBER=${DCMTK_VERSION_NUMBER} 140 ) 141 142 143 if (NOT ENABLE_DCMTK_LOG) 144 # Disable logging internal to DCMTK 145 # https://groups.google.com/d/msg/orthanc-users/v2SzzAmY948/VxT1QVGiBAAJ 146 add_definitions( 147 -DDCMTK_LOG4CPLUS_DISABLE_FATAL=1 148 -DDCMTK_LOG4CPLUS_DISABLE_ERROR=1 149 -DDCMTK_LOG4CPLUS_DISABLE_WARN=1 150 -DDCMTK_LOG4CPLUS_DISABLE_INFO=1 151 -DDCMTK_LOG4CPLUS_DISABLE_DEBUG=1 152 ) 153 endif() 154 155 include_directories( 156 #${DCMTK_SOURCES_DIR} 157 ${DCMTK_SOURCES_DIR}/config/include 158 ${DCMTK_SOURCES_DIR}/ofstd/include 159 ${DCMTK_SOURCES_DIR}/oflog/include 160 ${DCMTK_SOURCES_DIR}/dcmdata/include 161 ) 162 163 source_group(ThirdParty\\Dcmtk REGULAR_EXPRESSION ${DCMTK_SOURCES_DIR}/.*) 164 165 if (STANDALONE_BUILD) 166 set(DCMTK_USE_EMBEDDED_DICTIONARIES 1) 167 set(DCMTK_DICTIONARIES 168 DICTIONARY_DICOM ${DCMTK_SOURCES_DIR}/dcmdata/data/dicom.dic 169 DICTIONARY_PRIVATE ${DCMTK_SOURCES_DIR}/dcmdata/data/private.dic 170 DICTIONARY_DICONDE ${DCMTK_SOURCES_DIR}/dcmdata/data/diconde.dic 171 ) 172 else() 173 set(DCMTK_USE_EMBEDDED_DICTIONARIES 0) 174 endif() 175 176 177else() 178 if (CMAKE_CROSSCOMPILING AND 179 "${CMAKE_SYSTEM_VERSION}" STREQUAL "CrossToolNg") 180 181 CHECK_INCLUDE_FILE_CXX(dcmtk/dcmdata/dcfilefo.h HAVE_DCMTK_H) 182 if (NOT HAVE_DCMTK_H) 183 message(FATAL_ERROR "Please install the libdcmtk-dev package") 184 endif() 185 186 CHECK_LIBRARY_EXISTS(dcmdata "dcmDataDict" "" HAVE_DCMTK_LIB) 187 if (NOT HAVE_DCMTK_LIB) 188 message(FATAL_ERROR "Please install the libdcmtk package") 189 endif() 190 191 find_path(DCMTK_INCLUDE_DIRS dcmtk/config/osconfig.h 192 /usr/include 193 ) 194 195 link_libraries(dcmdata dcmnet dcmjpeg oflog ofstd) 196 197 else() 198 # The following line allows one to manually add libraries at the 199 # command-line, which is necessary for Ubuntu/Debian packages 200 set(tmp "${DCMTK_LIBRARIES}") 201 include(FindDCMTK) 202 list(APPEND DCMTK_LIBRARIES "${tmp}") 203 204 include_directories(${DCMTK_INCLUDE_DIRS}) 205 endif() 206 207 add_definitions( 208 -DHAVE_CONFIG_H=1 209 ) 210 211 if (EXISTS "${DCMTK_config_INCLUDE_DIR}/cfunix.h") 212 set(DCMTK_CONFIGURATION_FILE "${DCMTK_config_INCLUDE_DIR}/cfunix.h") 213 elseif (EXISTS "${DCMTK_config_INCLUDE_DIR}/osconfig.h") # This is for Arch Linux 214 set(DCMTK_CONFIGURATION_FILE "${DCMTK_config_INCLUDE_DIR}/osconfig.h") 215 elseif (EXISTS "${DCMTK_INCLUDE_DIRS}/dcmtk/config/osconfig.h") # This is for Debian Buster 216 set(DCMTK_CONFIGURATION_FILE "${DCMTK_INCLUDE_DIRS}/dcmtk/config/osconfig.h") 217 else() 218 message(FATAL_ERROR "Please install libdcmtk*-dev") 219 endif() 220 221 message("DCMTK configuration file: ${DCMTK_CONFIGURATION_FILE}") 222 223 # Autodetection of the version of DCMTK 224 file(STRINGS 225 "${DCMTK_CONFIGURATION_FILE}" 226 DCMTK_VERSION_NUMBER1 REGEX 227 ".*PACKAGE_VERSION .*") 228 229 string(REGEX REPLACE 230 ".*PACKAGE_VERSION.*\"([0-9]*)\\.([0-9]*)\\.([0-9]*)\"$" 231 "\\1\\2\\3" 232 DCMTK_VERSION_NUMBER 233 ${DCMTK_VERSION_NUMBER1}) 234 235 set(DCMTK_USE_EMBEDDED_DICTIONARIES 0) 236endif() 237 238 239add_definitions(-DDCMTK_VERSION_NUMBER=${DCMTK_VERSION_NUMBER}) 240message("DCMTK version: ${DCMTK_VERSION_NUMBER}") 241 242 243add_definitions(-DDCMTK_USE_EMBEDDED_DICTIONARIES=${DCMTK_USE_EMBEDDED_DICTIONARIES}) 244if (NOT DCMTK_USE_EMBEDDED_DICTIONARIES) 245 # Lookup for DICOM dictionaries, if none is specified by the user 246 if (DCMTK_DICTIONARY_DIR STREQUAL "") 247 find_path(DCMTK_DICTIONARY_DIR_AUTO dicom.dic 248 /usr/share/dcmtk 249 /usr/share/libdcmtk1 250 /usr/share/libdcmtk2 251 /usr/share/libdcmtk3 252 /usr/share/libdcmtk4 253 /usr/share/libdcmtk5 254 /usr/share/libdcmtk6 255 /usr/share/libdcmtk7 256 /usr/share/libdcmtk8 257 /usr/share/libdcmtk9 258 /usr/share/libdcmtk10 259 /usr/share/libdcmtk11 260 /usr/share/libdcmtk12 261 /usr/share/libdcmtk13 262 /usr/share/libdcmtk14 263 /usr/share/libdcmtk15 264 /usr/share/libdcmtk16 265 /usr/share/libdcmtk17 266 /usr/share/libdcmtk18 267 /usr/share/libdcmtk19 268 /usr/share/libdcmtk20 269 /usr/local/share/dcmtk 270 ) 271 272 if (${DCMTK_DICTIONARY_DIR_AUTO} MATCHES "DCMTK_DICTIONARY_DIR_AUTO-NOTFOUND") 273 message(FATAL_ERROR "Cannot locate the DICOM dictionary on this system") 274 endif() 275 276 if (CMAKE_CROSSCOMPILING AND 277 "${CMAKE_SYSTEM_VERSION}" STREQUAL "CrossToolNg") 278 # Remove the sysroot prefix 279 file(RELATIVE_PATH tmp ${CMAKE_FIND_ROOT_PATH} ${DCMTK_DICTIONARY_DIR_AUTO}) 280 set(DCMTK_DICTIONARY_DIR_AUTO /${tmp} CACHE INTERNAL "") 281 endif() 282 283 message("Autodetected path to the DICOM dictionaries: ${DCMTK_DICTIONARY_DIR_AUTO}") 284 add_definitions(-DDCMTK_DICTIONARY_DIR="${DCMTK_DICTIONARY_DIR_AUTO}") 285 else() 286 add_definitions(-DDCMTK_DICTIONARY_DIR="${DCMTK_DICTIONARY_DIR}") 287 endif() 288endif() 289