comparison Resources/Orthanc/CMake/DownloadPackage.cmake @ 266:4e9d30c19b4b

linking against orthanc framework library
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 10 Jun 2020 12:32:46 +0200
parents
children 938257eebc03
comparison
equal deleted inserted replaced
265:af7108b06b4d 266:4e9d30c19b4b
1 macro(GetUrlFilename TargetVariable Url)
2 string(REGEX REPLACE "^.*/" "" ${TargetVariable} "${Url}")
3 endmacro()
4
5
6 macro(GetUrlExtension TargetVariable Url)
7 #string(REGEX REPLACE "^.*/[^.]*\\." "" TMP "${Url}")
8 string(REGEX REPLACE "^.*\\." "" TMP "${Url}")
9 string(TOLOWER "${TMP}" "${TargetVariable}")
10 endmacro()
11
12
13
14 ##
15 ## Setup the patch command-line tool
16 ##
17
18 if (NOT ORTHANC_DISABLE_PATCH)
19 if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
20 set(PATCH_EXECUTABLE ${CMAKE_CURRENT_LIST_DIR}/../ThirdParty/patch/patch.exe)
21 if (NOT EXISTS ${PATCH_EXECUTABLE})
22 message(FATAL_ERROR "Unable to find the patch.exe tool that is shipped with Orthanc")
23 endif()
24
25 else ()
26 find_program(PATCH_EXECUTABLE patch)
27 if (${PATCH_EXECUTABLE} MATCHES "PATCH_EXECUTABLE-NOTFOUND")
28 message(FATAL_ERROR "Please install the 'patch' standard command-line tool")
29 endif()
30 endif()
31 endif()
32
33
34
35 ##
36 ## Check the existence of the required decompression tools
37 ##
38
39 if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
40 find_program(ZIP_EXECUTABLE 7z
41 PATHS
42 "$ENV{ProgramFiles}/7-Zip"
43 "$ENV{ProgramW6432}/7-Zip"
44 )
45
46 if (${ZIP_EXECUTABLE} MATCHES "ZIP_EXECUTABLE-NOTFOUND")
47 message(FATAL_ERROR "Please install the '7-zip' software (http://www.7-zip.org/)")
48 endif()
49
50 else()
51 find_program(UNZIP_EXECUTABLE unzip)
52 if (${UNZIP_EXECUTABLE} MATCHES "UNZIP_EXECUTABLE-NOTFOUND")
53 message(FATAL_ERROR "Please install the 'unzip' package")
54 endif()
55
56 find_program(TAR_EXECUTABLE tar)
57 if (${TAR_EXECUTABLE} MATCHES "TAR_EXECUTABLE-NOTFOUND")
58 message(FATAL_ERROR "Please install the 'tar' package")
59 endif()
60
61 find_program(GUNZIP_EXECUTABLE gunzip)
62 if (${GUNZIP_EXECUTABLE} MATCHES "GUNZIP_EXECUTABLE-NOTFOUND")
63 message(FATAL_ERROR "Please install the 'gzip' package")
64 endif()
65 endif()
66
67
68 macro(DownloadFile MD5 Url)
69 GetUrlFilename(TMP_FILENAME "${Url}")
70
71 set(TMP_PATH "${CMAKE_SOURCE_DIR}/ThirdPartyDownloads/${TMP_FILENAME}")
72 if (NOT EXISTS "${TMP_PATH}")
73 message("Downloading ${Url}")
74
75 # This fixes issue 6: "I think cmake shouldn't download the
76 # packages which are not in the system, it should stop and let
77 # user know."
78 # https://code.google.com/p/orthanc/issues/detail?id=6
79 if (NOT STATIC_BUILD AND NOT ALLOW_DOWNLOADS)
80 message(FATAL_ERROR "CMake is not allowed to download from Internet. Please set the ALLOW_DOWNLOADS option to ON")
81 endif()
82
83 if ("${MD5}" STREQUAL "no-check")
84 message(WARNING "Not checking the MD5 of: ${Url}")
85 file(DOWNLOAD "${Url}" "${TMP_PATH}"
86 SHOW_PROGRESS TIMEOUT 300 INACTIVITY_TIMEOUT 60
87 STATUS Failure)
88 else()
89 file(DOWNLOAD "${Url}" "${TMP_PATH}"
90 SHOW_PROGRESS TIMEOUT 300 INACTIVITY_TIMEOUT 60
91 EXPECTED_MD5 "${MD5}" STATUS Failure)
92 endif()
93
94 list(GET Failure 0 Status)
95 if (NOT Status EQUAL 0)
96 message(FATAL_ERROR "Cannot download file: ${Url}")
97 endif()
98
99 else()
100 message("Using local copy of ${Url}")
101
102 if ("${MD5}" STREQUAL "no-check")
103 message(WARNING "Not checking the MD5 of: ${Url}")
104 else()
105 file(MD5 ${TMP_PATH} ActualMD5)
106 if (NOT "${ActualMD5}" STREQUAL "${MD5}")
107 message(FATAL_ERROR "The MD5 hash of a previously download file is invalid: ${TMP_PATH}")
108 endif()
109 endif()
110 endif()
111 endmacro()
112
113
114 macro(DownloadPackage MD5 Url TargetDirectory)
115 if (NOT IS_DIRECTORY "${TargetDirectory}")
116 DownloadFile("${MD5}" "${Url}")
117
118 GetUrlExtension(TMP_EXTENSION "${Url}")
119 #message(${TMP_EXTENSION})
120 message("Uncompressing ${TMP_FILENAME}")
121
122 if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
123 # How to silently extract files using 7-zip
124 # http://superuser.com/questions/331148/7zip-command-line-extract-silently-quietly
125
126 if (("${TMP_EXTENSION}" STREQUAL "gz") OR
127 ("${TMP_EXTENSION}" STREQUAL "tgz") OR
128 ("${TMP_EXTENSION}" STREQUAL "xz"))
129 execute_process(
130 COMMAND ${ZIP_EXECUTABLE} e -y ${TMP_PATH}
131 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
132 RESULT_VARIABLE Failure
133 OUTPUT_QUIET
134 )
135
136 if (Failure)
137 message(FATAL_ERROR "Error while running the uncompression tool")
138 endif()
139
140 if ("${TMP_EXTENSION}" STREQUAL "tgz")
141 string(REGEX REPLACE ".tgz$" ".tar" TMP_FILENAME2 "${TMP_FILENAME}")
142 elseif ("${TMP_EXTENSION}" STREQUAL "gz")
143 string(REGEX REPLACE ".gz$" "" TMP_FILENAME2 "${TMP_FILENAME}")
144 elseif ("${TMP_EXTENSION}" STREQUAL "xz")
145 string(REGEX REPLACE ".xz" "" TMP_FILENAME2 "${TMP_FILENAME}")
146 endif()
147
148 execute_process(
149 COMMAND ${ZIP_EXECUTABLE} x -y ${TMP_FILENAME2}
150 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
151 RESULT_VARIABLE Failure
152 OUTPUT_QUIET
153 )
154 elseif ("${TMP_EXTENSION}" STREQUAL "zip")
155 execute_process(
156 COMMAND ${ZIP_EXECUTABLE} x -y ${TMP_PATH}
157 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
158 RESULT_VARIABLE Failure
159 OUTPUT_QUIET
160 )
161 else()
162 message(FATAL_ERROR "Unsupported package extension: ${TMP_EXTENSION}")
163 endif()
164
165 else()
166 if ("${TMP_EXTENSION}" STREQUAL "zip")
167 execute_process(
168 COMMAND sh -c "${UNZIP_EXECUTABLE} -q ${TMP_PATH}"
169 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
170 RESULT_VARIABLE Failure
171 )
172 elseif (("${TMP_EXTENSION}" STREQUAL "gz") OR ("${TMP_EXTENSION}" STREQUAL "tgz"))
173 #message("tar xvfz ${TMP_PATH}")
174 execute_process(
175 COMMAND sh -c "${TAR_EXECUTABLE} xfz ${TMP_PATH}"
176 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
177 RESULT_VARIABLE Failure
178 )
179 elseif ("${TMP_EXTENSION}" STREQUAL "bz2")
180 execute_process(
181 COMMAND sh -c "${TAR_EXECUTABLE} xfj ${TMP_PATH}"
182 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
183 RESULT_VARIABLE Failure
184 )
185 elseif ("${TMP_EXTENSION}" STREQUAL "xz")
186 execute_process(
187 COMMAND sh -c "${TAR_EXECUTABLE} xf ${TMP_PATH}"
188 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
189 RESULT_VARIABLE Failure
190 )
191 else()
192 message(FATAL_ERROR "Unsupported package extension: ${TMP_EXTENSION}")
193 endif()
194 endif()
195
196 if (Failure)
197 message(FATAL_ERROR "Error while running the uncompression tool")
198 endif()
199
200 if (NOT IS_DIRECTORY "${TargetDirectory}")
201 message(FATAL_ERROR "The package was not uncompressed at the proper location. Check the CMake instructions.")
202 endif()
203 endif()
204 endmacro()
205
206
207
208 macro(DownloadCompressedFile MD5 Url TargetFile)
209 message(${MD5})
210 message(${Url})
211 message(${TargetFile})
212 if (NOT EXISTS "${TargetFile}")
213 DownloadFile("${MD5}" "${Url}")
214
215 GetUrlExtension(TMP_EXTENSION "${Url}")
216 #message(${TMP_EXTENSION})
217 message("Uncompressing ${TMP_FILENAME}")
218
219 if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
220 # How to silently extract files using 7-zip
221 # http://superuser.com/questions/331148/7zip-command-line-extract-silently-quietly
222
223 if ("${TMP_EXTENSION}" STREQUAL "gz")
224 execute_process(
225 # "-so" writes uncompressed file to stdout
226 COMMAND ${ZIP_EXECUTABLE} e -so -y ${TMP_PATH}
227 OUTPUT_FILE "${TargetFile}"
228 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
229 RESULT_VARIABLE Failure
230 OUTPUT_QUIET
231 )
232
233 if (Failure)
234 message(FATAL_ERROR "Error while running the uncompression tool")
235 endif()
236
237 else()
238 message(FATAL_ERROR "Unsupported file extension: ${TMP_EXTENSION}")
239 endif()
240
241 else()
242 if ("${TMP_EXTENSION}" STREQUAL "gz")
243 execute_process(
244 COMMAND sh -c "${GUNZIP_EXECUTABLE} -c ${TMP_PATH}"
245 OUTPUT_FILE "${TargetFile}"
246 RESULT_VARIABLE Failure
247 )
248 else()
249 message(FATAL_ERROR "Unsupported file extension: ${TMP_EXTENSION}")
250 endif()
251 endif()
252
253 if (Failure)
254 message(FATAL_ERROR "Error while running the uncompression tool")
255 endif()
256
257 if (NOT EXISTS "${TargetFile}")
258 message(FATAL_ERROR "The file was not uncompressed at the proper location. Check the CMake instructions.")
259 endif()
260 endif()
261 endmacro()