Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/libs/download.cmake

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10922 - (show annotations) (download)
Sun Sep 10 06:58:55 2023 UTC (8 months, 2 weeks ago) by zmatsuo
File size: 10403 byte(s)
download URL を修正
1 #
2 # ex:
3 # cmake -P download.cmake
4 # cmake -DFORCE_DOWNLOAD=on -P download.cmake
5 # memo:
6 # スクリプト中のコメントのないhash値は、
7 # Tera Term Project が独自に算出しました
8
9 option(FORCE_DOWNLOAD "force download" OFF)
10 option(FORCE_EXTRACT "force extract" OFF)
11
12 # download_extract()
13 # ファイルをダウンロードして、展開する
14 #
15 # ファイルが展開されているかチェック
16 # EXT_DIR 展開されているフォルダ
17 # CHECK_FILE チェックファイル,このファイルの有無とhashをチェックする
18 # ${EXT_DIR}相対 ${EXT_DIR}/${CHECK_FILE}
19 # CHECK_HASH チェックファイルhash値(sha256)
20 # ダウンロード
21 # SRC_URL アーカイブファイルのURL
22 # ARC_HASH アーカイブファイルのhash値
23 # または、hashの入っているファイルのURL
24 # DOWN_DIR ダウンロードしたファイルの収納ディレクトリ
25 # 展開
26 # DIR_IN_ARC アーカイブ内のフォルダ名
27 # RENAME_DIR 展開後 ${DIR_IN_ARC} をリネーム
28 # ${EXT_DIR}/${RENAME_DIR} ができる
29 function(download_extract SRC_URL ARC_HASH DOWN_DIR EXT_DIR DIR_IN_ARC RENAME_DIR CHECK_FILE CHECK_HASH)
30
31 # ファイルが展開されているかチェック
32 if((NOT FORCE_EXTRACT) AND (NOT FORCE_DOWNLOAD))
33 if(EXISTS ${EXT_DIR}/${CHECK_FILE})
34 file(SHA256 ${EXT_DIR}/${CHECK_FILE} HASH)
35
36 if(${HASH} STREQUAL ${CHECK_HASH})
37 return()
38 endif()
39
40 message("${EXT_DIR}/${CHECK_FILE}")
41 message("ACTUAL_HASH=${HASH}")
42 message("EXPECT_HASH=${CHECK_HASH}")
43 else()
44 message("not exist ${EXT_DIR}/${CHECK_FILE}")
45 endif()
46 endif()
47
48
49 # アーカイブファイル名(フォルダ含まない)
50 string(REGEX REPLACE "(.*)/([^/]*)$" "\\2" SRC_ARC ${SRC_URL})
51
52 # ダウンロードファイルのHASH値
53 if("${ARC_HASH}" MATCHES "http")
54 # download hash
55 string(REGEX REPLACE "(.*)/([^/]*)$" "\\2" HASH_FNAME ${ARC_HASH})
56 if((NOT EXISTS ${DOWN_DIR}/${HASH_FNAME}) OR FORCE_DOWNLOAD)
57 message("download ${ARC_HASH}")
58 file(DOWNLOAD
59 ${ARC_HASH}
60 ${DOWN_DIR}/${HASH_FNAME}
61 SHOW_PROGRESS
62 )
63 endif()
64 file(STRINGS ${DOWN_DIR}/${HASH_FNAME} HASH)
65 string(REGEX REPLACE "^(.+) (.+)$" "\\1" HASH ${HASH})
66 else()
67 # HASH値そのまま
68 set(HASH ${ARC_HASH})
69 endif()
70
71 # HASHの文字長からHASHの種別を決める
72 string(LENGTH ${HASH} HASH_LEN)
73 if(${HASH_LEN} EQUAL 64)
74 set(ARC_HASH_TYPE "SHA256")
75 else()
76 message(FATAL_ERROR "unknwon hash HASH=${HASH} HASH_LEN=${HASH_LEN}")
77 endif()
78
79 message("ARCHIVE=${DOWN_DIR}/${SRC_ARC}")
80 message("ARCHIVE HASH ${ARC_HASH_TYPE}=${HASH}")
81 if(FORCE_DOWNLOAD)
82 # 常にダウンロードする
83 unset(EXPECTED_HASH)
84 else()
85 # 必要ならダウンロードする
86 set(EXPECTED_HASH EXPECTED_HASH "${ARC_HASH_TYPE}=${HASH}")
87 endif()
88
89 # アーカイブをダウンロード
90 message("download ${SRC_URL}")
91 file(DOWNLOAD
92 ${SRC_URL}
93 ${DOWN_DIR}/${SRC_ARC}
94 ${EXPECTED_HASH}
95 SHOW_PROGRESS
96 STATUS st
97 )
98
99 # アーカイブファイルを展開する
100 message("expand ${EXT_DIR}/${DIR_IN_ARC}")
101 file(MAKE_DIRECTORY ${EXT_DIR})
102 execute_process(
103 COMMAND ${CMAKE_COMMAND} -E tar "xf" ${DOWN_DIR}/${SRC_ARC}
104 WORKING_DIRECTORY ${EXT_DIR}
105 )
106
107 # renameする
108 message("rename ${EXT_DIR}/${RENAME_DIR}")
109 file(REMOVE_RECURSE ${EXT_DIR}/${RENAME_DIR})
110 file(RENAME ${EXT_DIR}/${DIR_IN_ARC} ${EXT_DIR}/${RENAME_DIR})
111
112 endfunction()
113
114
115 # argon2
116 function(download_argon2)
117 message("argon2")
118 set(EXT_DIR "${CMAKE_CURRENT_LIST_DIR}")
119 set(DIR_IN_ARC "phc-winner-argon2-20190702")
120 set(RENAME_DIR "argon2")
121 set(CHECK_FILE "argon2/CHANGELOG.md")
122 set(CHECK_HASH "1b513eb6524f0a3ac5e182bf2713618ddd8f2616ebe6e090d647c49b3e7eb2ec")
123 set(SRC_URL "https://github.com/P-H-C/phc-winner-argon2/archive/refs/tags/20190702.tar.gz")
124 set(ARC_HASH "daf972a89577f8772602bf2eb38b6a3dd3d922bf5724d45e7f9589b5e830442c")
125 # ARC_HASH by TeraTerm Project
126 set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/argon2")
127 download_extract(
128 ${SRC_URL}
129 ${ARC_HASH}
130 ${DOWN_DIR}
131 ${EXT_DIR}
132 ${DIR_IN_ARC}
133 ${RENAME_DIR}
134 ${CHECK_FILE}
135 ${CHECK_HASH}
136 )
137 endfunction()
138
139 # cJSON
140 function(download_cjson)
141 message("cJSON")
142 set(EXT_DIR "${CMAKE_CURRENT_LIST_DIR}")
143 set(DIR_IN_ARC "cJSON-1.7.14")
144 set(RENAME_DIR "cJSON")
145 set(CHECK_FILE "cJSON/CHANGELOG.md")
146 set(CHECK_HASH "4ff95e0060ea2dbc13720079399e77d404d89e514b569fcc8d741f3272c98e53")
147 set(SRC_URL "https://github.com/DaveGamble/cJSON/archive/v1.7.14.zip")
148 set(ARC_HASH "d797b4440c91a19fa9c721d1f8bab21078624aa9555fc64c5c82e24aa2a08221")
149 # ARC_HASH by TeraTerm Project
150 set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/cJSON")
151 download_extract(
152 ${SRC_URL}
153 ${ARC_HASH}
154 ${DOWN_DIR}
155 ${EXT_DIR}
156 ${DIR_IN_ARC}
157 ${RENAME_DIR}
158 ${CHECK_FILE}
159 ${CHECK_HASH}
160 )
161 endfunction()
162
163 # libressl
164 function(download_libressl)
165 message("libressl")
166 set(DIR_IN_ARC "libressl-3.7.3")
167 set(RENAME_DIR "libressl")
168 set(CHECK_FILE "libressl/ChangeLog")
169 set(CHECK_HASH "dfa46531350c6aa61130630cf3c9bcf8a399d48464911cd5435671c23f919012")
170 set(SRC_URL "https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.7.3.tar.gz")
171 set(ARC_HASH "7948c856a90c825bd7268b6f85674a8dcd254bae42e221781b24e3f8dc335db3")
172 # ARC_HASH was picked from https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/SHA256
173 set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/libressl")
174 download_extract(
175 ${SRC_URL}
176 ${ARC_HASH}
177 ${DOWN_DIR}
178 ${EXT_DIR}
179 ${DIR_IN_ARC}
180 ${RENAME_DIR}
181 ${CHECK_FILE}
182 ${CHECK_HASH}
183 )
184 endfunction()
185
186 # oniguruma
187 function(download_oniguruma)
188 message("oniguruma")
189 set(DIR_IN_ARC "onig-6.9.8")
190 set(RENAME_DIR "oniguruma")
191 set(CHECK_FILE "oniguruma/HISTORY")
192 set(CHECK_HASH "9291f7a1beaa0410265663dc8c18d442b7b3c4fd62a6d6f58df7cacdc4be3c92")
193 set(SRC_URL "https://github.com/kkos/oniguruma/releases/download/v6.9.8/onig-6.9.8.tar.gz")
194 set(ARC_HASH "https://github.com/kkos/oniguruma/releases/download/v6.9.8/onig-6.9.8.tar.gz.sha256")
195 set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/oniguruma")
196 download_extract(
197 ${SRC_URL}
198 ${ARC_HASH}
199 ${DOWN_DIR}
200 ${EXT_DIR}
201 ${DIR_IN_ARC}
202 ${RENAME_DIR}
203 ${CHECK_FILE}
204 ${CHECK_HASH}
205 )
206 endfunction()
207
208 # putty
209 function(download_putty)
210 message("putty")
211 set(EXT_DIR "${CMAKE_CURRENT_LIST_DIR}")
212 set(DIR_IN_ARC "putty-0.76")
213 #set(DIR_IN_ARC "putty-0.78")
214 set(RENAME_DIR "putty")
215 set(CHECK_FILE "putty/version.h")
216 set(CHECK_HASH "c6975607ae6fb8510d56fae403fdd83bbafa3efe32397e5956375db49d0fadda")
217 #set(CHECK_HASH "6909c326781299a12368a32b11d62f5fbbe75e3e8ef881a3dec81adff2694320")
218 set(SRC_URL "https://the.earth.li/~sgtatham/putty/0.76/putty-0.76.tar.gz")
219 #set(SRC_URL "https://the.earth.li/~sgtatham/putty/0.78/putty-0.78.tar.gz")
220 set(ARC_HASH "547cd97a8daa87ef71037fab0773bceb54a8abccb2f825a49ef8eba5e045713f")
221 # ARC_HASH was picked from https://the.earth.li/~sgtatham/putty/0.76/sha256sums
222 #set(ARC_HASH "274e01bcac6bd155dfd647b2f18f791b4b17ff313753aa919fcae2e32d34614f")
223 # ARC_HASH was picked from https://the.earth.li/~sgtatham/putty/0.78/sha256sums
224 set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/putty")
225 download_extract(
226 ${SRC_URL}
227 ${ARC_HASH}
228 ${DOWN_DIR}
229 ${EXT_DIR}
230 ${DIR_IN_ARC}
231 ${RENAME_DIR}
232 ${CHECK_FILE}
233 ${CHECK_HASH}
234 )
235 endfunction()
236
237 # SFMT
238 function(download_sfmt)
239 message("SFMT")
240 set(DIR_IN_ARC "SFMT-src-1.5.1")
241 set(RENAME_DIR "SFMT")
242 set(CHECK_FILE "SFMT/CHANGE-LOG.txt")
243 set(CHECK_HASH "ac65302c740579c7dccc99b2fcd735af3027957680f2ce227042755646abb1db")
244 set(SRC_URL "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/SFMT-src-1.5.1.zip")
245 set(ARC_HASH "630d1dfa6b690c30472f75fa97ca90ba62f9c13c5add6c264fdac2c1d3a878f4")
246 # ARC_HASH by TeraTerm Project
247 set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/SFMT")
248 download_extract(
249 ${SRC_URL}
250 ${ARC_HASH}
251 ${DOWN_DIR}
252 ${EXT_DIR}
253 ${DIR_IN_ARC}
254 ${RENAME_DIR}
255 ${CHECK_FILE}
256 ${CHECK_HASH}
257 )
258 set(SFMT_VERSION_H "${EXT_DIR}/${RENAME_DIR}/SFMT_version_for_teraterm.h")
259 if(NOT EXISTS ${SFMT_VERSION_H})
260 file(WRITE ${SFMT_VERSION_H}
261 "// created by download.cmake\n"
262 "#pragma once\n"
263 "#ifndef SFMT_VERSION_H\n"
264 "#define SFMT_VERSION_H\n"
265 "#define SFMT_VERSION \"1.5.1\"\n"
266 "#endif\n"
267 )
268 endif()
269 endfunction()
270
271 # zlib
272 function(download_zlib)
273 message("zlib")
274 set(DIR_IN_ARC "zlib-1.3")
275 set(RENAME_DIR "zlib")
276 set(CHECK_FILE "zlib/ChangeLog")
277 set(CHECK_HASH "e6fed9987017f53a18bf9eef883789577fc78feb3591bfbe3d68c3dd93d92aeb")
278 set(SRC_URL "https://zlib.net/zlib-1.3.tar.xz")
279 set(ARC_HASH "8a9ba2898e1d0d774eca6ba5b4627a11e5588ba85c8851336eb38de4683050a7")
280 # ARC_HASH was picked from https://www.zlib.net
281 set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/zlib")
282 download_extract(
283 ${SRC_URL}
284 ${ARC_HASH}
285 ${DOWN_DIR}
286 ${EXT_DIR}
287 ${DIR_IN_ARC}
288 ${RENAME_DIR}
289 ${CHECK_FILE}
290 ${CHECK_HASH}
291 )
292 endfunction()
293
294 ##########
295 if(NOT DEFINED TARGET)
296 set(TARGET "all")
297 endif()
298 if(NOT DEFINED EXT_DIR)
299 set(EXT_DIR "${CMAKE_CURRENT_LIST_DIR}")
300 endif()
301 #message("TARGET=${TARGET}")
302 #message("EXT_DIR=${EXT_DIR}")
303
304 if ((${TARGET} STREQUAL "all") OR (${TARGET} STREQUAL "cjson"))
305 download_cjson()
306 endif()
307 if ((${TARGET} STREQUAL "all") OR (${TARGET} STREQUAL "argon2"))
308 download_argon2()
309 endif()
310 if ((${TARGET} STREQUAL "all") OR (${TARGET} STREQUAL "libressl"))
311 download_libressl()
312 endif()
313 if ((${TARGET} STREQUAL "all") OR (${TARGET} STREQUAL "oniguruma"))
314 download_oniguruma()
315 endif()
316 if (${TARGET} STREQUAL "putty")
317 download_putty()
318 endif()
319 if ((${TARGET} STREQUAL "all") OR (${TARGET} STREQUAL "sfmt"))
320 download_sfmt()
321 endif()
322 if ((${TARGET} STREQUAL "all") OR (${TARGET} STREQUAL "zlib"))
323 download_zlib()
324 endif()

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26