comparison Framework/Orthanc/Resources/CMake/DcmtkConfiguration.cmake @ 1:dc730d11b101

orthanc dependencies
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sat, 22 Oct 2016 21:50:15 +0200
parents
children 2789d34cb993
comparison
equal deleted inserted replaced
0:4a7a53257c7d 1:dc730d11b101
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()