1
|
1 if (NOT DEFINED ENABLE_DCMTK_NETWORKING)
|
|
2 set(ENABLE_DCMTK_NETWORKING ON)
|
|
3 endif()
|
|
4
|
|
5 if (STATIC_BUILD OR NOT USE_SYSTEM_DCMTK)
|
|
6 if (USE_DCMTK_361)
|
|
7 SET(DCMTK_VERSION_NUMBER 361)
|
|
8 SET(DCMTK_PACKAGE_VERSION "3.6.1")
|
|
9 SET(DCMTK_SOURCES_DIR ${CMAKE_BINARY_DIR}/dcmtk-3.6.1_20160216)
|
|
10 SET(DCMTK_URL "http://www.montefiore.ulg.ac.be/~jodogne/Orthanc/ThirdPartyDownloads/dcmtk-3.6.1_20160216.tar.gz")
|
|
11 SET(DCMTK_MD5 "273c8a544b9fe09b8a4fb4eb51df8e52")
|
|
12 SET(DCMTK_PATCH_SPEED "${ORTHANC_ROOT}/Resources/Patches/dcmtk-3.6.1-speed.patch")
|
|
13
|
|
14 macro(DCMTK_UNSET)
|
|
15 endmacro()
|
|
16
|
|
17 set(DCMTK_BINARY_DIR ${DCMTK_SOURCES_DIR}/)
|
|
18 set(DCMTK_CMAKE_INCLUDE ${DCMTK_SOURCES_DIR}/)
|
|
19 add_definitions(-DDCMTK_INSIDE_LOG4CPLUS=1)
|
|
20 else()
|
|
21 SET(DCMTK_VERSION_NUMBER 360)
|
|
22 SET(DCMTK_PACKAGE_VERSION "3.6.0")
|
|
23 SET(DCMTK_SOURCES_DIR ${CMAKE_BINARY_DIR}/dcmtk-3.6.0)
|
|
24 SET(DCMTK_URL "http://www.montefiore.ulg.ac.be/~jodogne/Orthanc/ThirdPartyDownloads/dcmtk-3.6.0.zip")
|
|
25 SET(DCMTK_MD5 "219ad631b82031806147e4abbfba4fa4")
|
|
26 SET(DCMTK_PATCH_SPEED "${ORTHANC_ROOT}/Resources/Patches/dcmtk-3.6.0-speed.patch")
|
|
27 SET(DCMTK_PATCH_MINGW64 "${ORTHANC_ROOT}/Resources/Patches/dcmtk-3.6.0-mingw64.patch")
|
|
28 endif()
|
|
29
|
|
30 if (IS_DIRECTORY "${DCMTK_SOURCES_DIR}")
|
|
31 set(FirstRun OFF)
|
|
32 else()
|
|
33 set(FirstRun ON)
|
|
34 endif()
|
|
35
|
|
36 DownloadPackage(${DCMTK_MD5} ${DCMTK_URL} "${DCMTK_SOURCES_DIR}")
|
|
37
|
48
|
38
|
|
39 if (FirstRun AND NOT USE_DCMTK_361)
|
|
40 # If using DCMTK 3.6.0, backport the "private.dic" file from DCMTK
|
|
41 # 3.6.1 snapshot. This adds support for more private tags, and
|
|
42 # fixes some import problems with Philips MRI Achieva.
|
|
43 message("Using the dictionary of private tags from DCMTK 3.6.1")
|
|
44 configure_file(
|
|
45 ${ORTHANC_ROOT}/Resources/Patches/dcmtk-3.6.1-private.dic
|
|
46 ${DCMTK_SOURCES_DIR}/dcmdata/data/private.dic
|
|
47 COPYONLY)
|
|
48 endif()
|
|
49
|
|
50
|
1
|
51 IF (CMAKE_CROSSCOMPILING)
|
|
52 SET(C_CHAR_UNSIGNED 1 CACHE INTERNAL "Whether char is unsigned.")
|
|
53 ENDIF()
|
|
54 SET(DCMTK_SOURCE_DIR ${DCMTK_SOURCES_DIR})
|
|
55 include(${DCMTK_SOURCES_DIR}/CMake/CheckFunctionWithHeaderExists.cmake)
|
|
56 include(${DCMTK_SOURCES_DIR}/CMake/GenerateDCMTKConfigure.cmake)
|
|
57
|
|
58 if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase")
|
|
59 set(HAVE_SSTREAM 1)
|
|
60 set(HAVE_PROTOTYPE_BZERO 1)
|
|
61 set(HAVE_PROTOTYPE_GETHOSTNAME 1)
|
|
62 set(HAVE_PROTOTYPE_GETSOCKOPT 1)
|
|
63 set(HAVE_PROTOTYPE_SETSOCKOPT 1)
|
|
64 set(HAVE_PROTOTYPE_CONNECT 1)
|
|
65 set(HAVE_PROTOTYPE_BIND 1)
|
|
66 set(HAVE_PROTOTYPE_ACCEPT 1)
|
|
67 set(HAVE_PROTOTYPE_SETSOCKNAME 1)
|
|
68 set(HAVE_PROTOTYPE_GETSOCKNAME 1)
|
|
69 endif()
|
|
70
|
|
71 set(DCMTK_PACKAGE_VERSION_SUFFIX "")
|
|
72 set(DCMTK_PACKAGE_VERSION_NUMBER ${DCMTK_VERSION_NUMBER})
|
|
73
|
|
74 CONFIGURE_FILE(
|
|
75 ${DCMTK_SOURCES_DIR}/CMake/osconfig.h.in
|
|
76 ${DCMTK_SOURCES_DIR}/config/include/dcmtk/config/osconfig.h)
|
|
77
|
|
78 if (USE_DCMTK_361)
|
|
79 # This step must be after the generation of "osconfig.h"
|
|
80 INSPECT_FUNDAMENTAL_ARITHMETIC_TYPES()
|
|
81 endif()
|
|
82
|
|
83 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmdata/libsrc DCMTK_SOURCES)
|
|
84 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/ofstd/libsrc DCMTK_SOURCES)
|
|
85
|
|
86 if (ENABLE_DCMTK_NETWORKING)
|
|
87 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmnet/libsrc DCMTK_SOURCES)
|
|
88 include_directories(
|
|
89 ${DCMTK_SOURCES_DIR}/dcmnet/include
|
|
90 )
|
|
91 endif()
|
|
92
|
|
93 if (ENABLE_JPEG)
|
|
94 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc DCMTK_SOURCES)
|
|
95 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmjpeg/libijg8 DCMTK_SOURCES)
|
|
96 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmjpeg/libijg12 DCMTK_SOURCES)
|
|
97 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmjpeg/libijg16 DCMTK_SOURCES)
|
|
98 include_directories(
|
|
99 ${DCMTK_SOURCES_DIR}/dcmjpeg/include
|
|
100 ${DCMTK_SOURCES_DIR}/dcmjpeg/libijg8
|
|
101 ${DCMTK_SOURCES_DIR}/dcmjpeg/libijg12
|
|
102 ${DCMTK_SOURCES_DIR}/dcmjpeg/libijg16
|
|
103 ${DCMTK_SOURCES_DIR}/dcmimgle/include
|
|
104 )
|
|
105 list(REMOVE_ITEM DCMTK_SOURCES
|
|
106 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/ddpiimpl.cc
|
|
107
|
|
108 # Disable support for encoding JPEG (modification in Orthanc 1.0.1)
|
|
109 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djcodece.cc
|
|
110 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djencsv1.cc
|
|
111 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djencbas.cc
|
|
112 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djencpro.cc
|
|
113 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djenclol.cc
|
|
114 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djencode.cc
|
|
115 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djencext.cc
|
|
116 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djencsps.cc
|
|
117 )
|
|
118 endif()
|
|
119
|
|
120
|
|
121 if (ENABLE_JPEG_LOSSLESS)
|
|
122 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmjpls/libsrc DCMTK_SOURCES)
|
|
123 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/dcmjpls/libcharls DCMTK_SOURCES)
|
|
124 include_directories(
|
|
125 ${DCMTK_SOURCES_DIR}/dcmjpeg/include
|
|
126 ${DCMTK_SOURCES_DIR}/dcmjpls/include
|
|
127 ${DCMTK_SOURCES_DIR}/dcmjpls/libcharls
|
|
128 )
|
|
129 list(REMOVE_ITEM DCMTK_SOURCES
|
|
130 ${DCMTK_SOURCES_DIR}/dcmjpls/libsrc/djcodece.cc
|
|
131
|
|
132 # Disable support for encoding JPEG-LS (modification in Orthanc 1.0.1)
|
|
133 ${DCMTK_SOURCES_DIR}/dcmjpls/libsrc/djencode.cc
|
|
134 )
|
|
135 list(APPEND DCMTK_SOURCES
|
|
136 ${DCMTK_SOURCES_DIR}/dcmjpeg/libsrc/djrplol.cc
|
|
137 )
|
|
138 endif()
|
|
139
|
|
140
|
|
141 # Source for the logging facility of DCMTK
|
|
142 AUX_SOURCE_DIRECTORY(${DCMTK_SOURCES_DIR}/oflog/libsrc DCMTK_SOURCES)
|
|
143 if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR
|
|
144 ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR
|
|
145 ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" OR
|
|
146 ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD")
|
|
147 list(REMOVE_ITEM DCMTK_SOURCES
|
|
148 ${DCMTK_SOURCES_DIR}/oflog/libsrc/clfsap.cc
|
|
149 ${DCMTK_SOURCES_DIR}/oflog/libsrc/windebap.cc
|
|
150 ${DCMTK_SOURCES_DIR}/oflog/libsrc/winsock.cc
|
|
151 )
|
|
152
|
|
153 execute_process(
|
|
154 COMMAND ${PATCH_EXECUTABLE} -p0 -N -i ${DCMTK_PATCH_SPEED}
|
|
155 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
156 RESULT_VARIABLE Failure
|
|
157 )
|
|
158
|
|
159 if (Failure AND FirstRun)
|
|
160 message(FATAL_ERROR "Error while patching a file")
|
|
161 endif()
|
|
162
|
|
163 elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
|
164 list(REMOVE_ITEM DCMTK_SOURCES
|
|
165 ${DCMTK_SOURCES_DIR}/oflog/libsrc/unixsock.cc
|
|
166 )
|
|
167
|
|
168 if (CMAKE_COMPILER_IS_GNUCXX AND DCMTK_PATCH_MINGW64)
|
|
169 # This is a patch for MinGW64
|
|
170 execute_process(
|
|
171 COMMAND ${PATCH_EXECUTABLE} -p0 -N -i ${DCMTK_PATCH_MINGW64}
|
|
172 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
173 RESULT_VARIABLE Failure
|
|
174 )
|
|
175
|
|
176 if (Failure AND FirstRun)
|
|
177 message(FATAL_ERROR "Error while patching a file")
|
|
178 endif()
|
|
179 endif()
|
|
180
|
|
181 # This patch improves speed, even for Windows
|
|
182 execute_process(
|
|
183 COMMAND ${PATCH_EXECUTABLE} -p0 -N
|
|
184 INPUT_FILE ${DCMTK_PATCH_SPEED}
|
|
185 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
186 RESULT_VARIABLE Failure
|
|
187 )
|
|
188
|
|
189 if (Failure AND FirstRun)
|
|
190 message(FATAL_ERROR "Error while patching a file")
|
|
191 endif()
|
|
192 endif()
|
|
193
|
|
194 list(REMOVE_ITEM DCMTK_SOURCES
|
|
195 ${DCMTK_SOURCES_DIR}/dcmdata/libsrc/mkdictbi.cc
|
|
196 ${DCMTK_SOURCES_DIR}/dcmdata/libsrc/mkdeftag.cc
|
|
197 )
|
|
198
|
48
|
199 if (NOT USE_DCMTK_361)
|
|
200 # Removing this file is required with DCMTK 3.6.0
|
|
201 list(REMOVE_ITEM DCMTK_SOURCES
|
|
202 ${DCMTK_SOURCES_DIR}/dcmdata/libsrc/dcdictbi.cc
|
|
203 )
|
|
204 endif()
|
|
205
|
1
|
206 #set_source_files_properties(${DCMTK_SOURCES}
|
|
207 # PROPERTIES COMPILE_DEFINITIONS
|
|
208 # "PACKAGE_VERSION=\"${DCMTK_PACKAGE_VERSION}\";PACKAGE_VERSION_NUMBER=\"${DCMTK_VERSION_NUMBER}\"")
|
|
209
|
|
210 # This fixes crashes related to the destruction of the DCMTK OFLogger
|
|
211 # http://support.dcmtk.org/docs-snapshot/file_macros.html
|
|
212 add_definitions(
|
|
213 -DLOG4CPLUS_DISABLE_FATAL=1
|
|
214 -DDCMTK_VERSION_NUMBER=${DCMTK_VERSION_NUMBER}
|
|
215 )
|
|
216
|
|
217 include_directories(
|
|
218 #${DCMTK_SOURCES_DIR}
|
|
219 ${DCMTK_SOURCES_DIR}/config/include
|
|
220 ${DCMTK_SOURCES_DIR}/ofstd/include
|
|
221 ${DCMTK_SOURCES_DIR}/oflog/include
|
|
222 ${DCMTK_SOURCES_DIR}/dcmdata/include
|
|
223 )
|
|
224
|
|
225 source_group(ThirdParty\\Dcmtk REGULAR_EXPRESSION ${DCMTK_SOURCES_DIR}/.*)
|
|
226
|
|
227 set(DCMTK_BUNDLES_LOG4CPLUS 1)
|
|
228
|
|
229 if (STANDALONE_BUILD)
|
|
230 set(DCMTK_USE_EMBEDDED_DICTIONARIES 1)
|
|
231 set(DCMTK_DICTIONARIES
|
|
232 DICTIONARY_DICOM ${DCMTK_SOURCES_DIR}/dcmdata/data/dicom.dic
|
|
233 DICTIONARY_PRIVATE ${DCMTK_SOURCES_DIR}/dcmdata/data/private.dic
|
|
234 DICTIONARY_DICONDE ${DCMTK_SOURCES_DIR}/dcmdata/data/diconde.dic
|
|
235 )
|
|
236 else()
|
|
237 set(DCMTK_USE_EMBEDDED_DICTIONARIES 0)
|
|
238 endif()
|
|
239
|
|
240 else()
|
|
241 # The following line allows to manually add libraries at the
|
|
242 # command-line, which is necessary for Ubuntu/Debian packages
|
|
243 set(tmp "${DCMTK_LIBRARIES}")
|
|
244 include(FindDCMTK)
|
|
245 list(APPEND DCMTK_LIBRARIES "${tmp}")
|
|
246
|
|
247 include_directories(${DCMTK_INCLUDE_DIRS})
|
|
248
|
|
249 add_definitions(
|
|
250 -DHAVE_CONFIG_H=1
|
|
251 )
|
|
252
|
|
253 if (EXISTS "${DCMTK_config_INCLUDE_DIR}/cfunix.h")
|
|
254 set(DCMTK_CONFIGURATION_FILE "${DCMTK_config_INCLUDE_DIR}/cfunix.h")
|
|
255 elseif (EXISTS "${DCMTK_config_INCLUDE_DIR}/osconfig.h") # This is for Arch Linux
|
|
256 set(DCMTK_CONFIGURATION_FILE "${DCMTK_config_INCLUDE_DIR}/osconfig.h")
|
|
257 else()
|
|
258 message(FATAL_ERROR "Please install libdcmtk*-dev")
|
|
259 endif()
|
|
260
|
|
261 # Autodetection of the version of DCMTK
|
|
262 file(STRINGS
|
|
263 "${DCMTK_CONFIGURATION_FILE}"
|
|
264 DCMTK_VERSION_NUMBER1 REGEX
|
|
265 ".*PACKAGE_VERSION .*")
|
|
266
|
|
267 string(REGEX REPLACE
|
|
268 ".*PACKAGE_VERSION.*\"([0-9]*)\\.([0-9]*)\\.([0-9]*)\"$"
|
|
269 "\\1\\2\\3"
|
|
270 DCMTK_VERSION_NUMBER
|
|
271 ${DCMTK_VERSION_NUMBER1})
|
|
272
|
|
273 set(DCMTK_USE_EMBEDDED_DICTIONARIES 0)
|
|
274 endif()
|
|
275
|
|
276
|
|
277 add_definitions(-DDCMTK_VERSION_NUMBER=${DCMTK_VERSION_NUMBER})
|
|
278 message("DCMTK version: ${DCMTK_VERSION_NUMBER}")
|
|
279
|
|
280
|
|
281 add_definitions(-DDCMTK_USE_EMBEDDED_DICTIONARIES=${DCMTK_USE_EMBEDDED_DICTIONARIES})
|
|
282 if (NOT DCMTK_USE_EMBEDDED_DICTIONARIES)
|
|
283 # Lookup for DICOM dictionaries, if none is specified by the user
|
|
284 if (DCMTK_DICTIONARY_DIR STREQUAL "")
|
|
285 find_path(DCMTK_DICTIONARY_DIR_AUTO dicom.dic
|
|
286 /usr/share/dcmtk
|
|
287 /usr/share/libdcmtk1
|
|
288 /usr/share/libdcmtk2
|
|
289 /usr/share/libdcmtk3
|
|
290 /usr/share/libdcmtk4
|
|
291 /usr/share/libdcmtk5
|
|
292 /usr/share/libdcmtk6
|
|
293 /usr/share/libdcmtk7
|
|
294 /usr/share/libdcmtk8
|
|
295 /usr/share/libdcmtk9
|
|
296 /usr/local/share/dcmtk
|
|
297 )
|
|
298
|
|
299 if (${DCMTK_DICTIONARY_DIR_AUTO} MATCHES "DCMTK_DICTIONARY_DIR_AUTO-NOTFOUND")
|
|
300 message(FATAL_ERROR "Cannot locate the DICOM dictionary on this system")
|
|
301 endif()
|
|
302
|
|
303 message("Autodetected path to the DICOM dictionaries: ${DCMTK_DICTIONARY_DIR_AUTO}")
|
|
304 add_definitions(-DDCMTK_DICTIONARY_DIR="${DCMTK_DICTIONARY_DIR_AUTO}")
|
|
305 else()
|
|
306 add_definitions(-DDCMTK_DICTIONARY_DIR="${DCMTK_DICTIONARY_DIR}")
|
|
307 endif()
|
|
308 endif()
|