comparison Resources/Orthanc/CMake/DownloadPackage.cmake @ 24:065bc476bcdc

use of OrthancPluginsExports.cmake, link against system-wide orthanc framework
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 06 Jul 2020 16:23:48 +0200
parents
children b7e32fe4973b
comparison
equal deleted inserted replaced
23:ec8b0f8df766 24:065bc476bcdc
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 if (NOT EXISTS "${TargetFile}")
210 DownloadFile("${MD5}" "${Url}")
211
212 GetUrlExtension(TMP_EXTENSION "${Url}")
213 #message(${TMP_EXTENSION})
214 message("Uncompressing ${TMP_FILENAME}")
215
216 if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
217 # How to silently extract files using 7-zip
218 # http://superuser.com/questions/331148/7zip-command-line-extract-silently-quietly
219
220 if ("${TMP_EXTENSION}" STREQUAL "gz")
221 execute_process(
222 # "-so" writes uncompressed file to stdout
223 COMMAND ${ZIP_EXECUTABLE} e -so -y ${TMP_PATH}
224 OUTPUT_FILE "${TargetFile}"
225 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
226 RESULT_VARIABLE Failure
227 OUTPUT_QUIET
228 )
229
230 if (Failure)
231 message(FATAL_ERROR "Error while running the uncompression tool")
232 endif()
233
234 else()
235 message(FATAL_ERROR "Unsupported file extension: ${TMP_EXTENSION}")
236 endif()
237
238 else()
239 if ("${TMP_EXTENSION}" STREQUAL "gz")
240 execute_process(
241 COMMAND sh -c "${GUNZIP_EXECUTABLE} -c ${TMP_PATH}"
242 OUTPUT_FILE "${TargetFile}"
243 RESULT_VARIABLE Failure
244 )
245 else()
246 message(FATAL_ERROR "Unsupported file extension: ${TMP_EXTENSION}")
247 endif()
248 endif()
249
250 if (Failure)
251 message(FATAL_ERROR "Error while running the uncompression tool")
252 endif()
253
254 if (NOT EXISTS "${TargetFile}")
255 message(FATAL_ERROR "The file was not uncompressed at the proper location. Check the CMake instructions.")
256 endif()
257 endif()
258 endmacro()