Mercurial > hg > orthanc-wsi
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() |