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