[ttssh2-commit] [9828] ライブラリのアーカイブファイルのHASHをチェックできるようにした

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2022年 3月 22日 (火) 23:45:12 JST


Revision: 9828
          https://osdn.net/projects/ttssh2/scm/svn/commits/9828
Author:   zmatsuo
Date:     2022-03-22 23:45:11 +0900 (Tue, 22 Mar 2022)
Log Message:
-----------
ライブラリのアーカイブファイルのHASHをチェックできるようにした

- libs/download.cmake を追加
  - ダウンロード、HASHチェック、アーカイブの展開を行う
  - release.batから呼び出される
    - release.bat で行っていたダウンロード等をこのファイルで行う
- checklibs.cmake を削除

Modified Paths:
--------------
    trunk/installer/release.bat

Added Paths:
-----------
    trunk/libs/download/
    trunk/libs/download/README.md
    trunk/libs/download.cmake

Removed Paths:
-------------
    trunk/libs/checklibs.cmake

-------------- next part --------------
Modified: trunk/installer/release.bat
===================================================================
--- trunk/installer/release.bat	2022-03-19 16:02:17 UTC (rev 9827)
+++ trunk/installer/release.bat	2022-03-22 14:45:11 UTC (rev 9828)
@@ -4,15 +4,6 @@
 cd /d %CUR%
 
 set VS_VERSION=2019
-set ONIG_VERSION=6.9.7.1
-rem for 6.9.7.1
-set ONIG_FOLDER_NAME=6.9.7
-set ZLIB_VERSION=1.2.11
-set PUTTY_VERSION=0.76
-set SFMT_VERSION=1.5.1
-set CJSON_VERSION=1.7.14
-set ARGON2_VERSION=20190702
-set LIBRESSL_VERSION=3.4.3
 
 if "%APPVEYOR%" == "True" set NOPAUSE=1
 
@@ -77,62 +68,10 @@
 setlocal
 cd /d %CUR%..\libs
 
-if "%1" == "force" goto download_libs_download
+set OPT=
+if "%1" == "force" set OPT=-DFORCE_DOWNLOAD=on
+%CMAKE% %OPT% -P download.cmake
 
-cmake -P checklibs.cmake
-call checklibs_result.bat
-del checklibs_result.bat
-if "%RESULT%" == "1" (
-    echo already all library downloaded
-    goto download_libs_finish
-)
-
-:download_libs_download
-
-:oniguruma
-%CURL% -L https://github.com/kkos/oniguruma/releases/download/v%ONIG_VERSION%/onig-%ONIG_VERSION%.tar.gz -o oniguruma.tar.gz
-%CMAKE% -E tar xf oniguruma.tar.gz
-%CMAKE% -E rm -rf oniguruma
-%CMAKE% -E rename onig-%ONIG_FOLDER_NAME% oniguruma
-
-:zlib
-%CURL% -L https://zlib.net/zlib-%ZLIB_VERSION%.tar.xz -o zlib.tar.xz
-%CMAKE% -E tar xf zlib.tar.xz
-%CMAKE% -E rm -rf zlib
-%CMAKE% -E rename zlib-%ZLIB_VERSION% zlib
-
-:putty
-%CURL% -L https://the.earth.li/~sgtatham/putty/%PUTTY_VERSION%/putty-%PUTTY_VERSION%.tar.gz -o putty.tar.gz
-%CMAKE% -E tar xf putty.tar.gz
-%CMAKE% -E rm -rf putty
-%CMAKE% -E rename putty-%PUTTY_VERSION% putty
-
-:SFMT
-%CURL% -L http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/SFMT-src-%SFMT_VERSION%.zip -o sfmt.zip
-%CMAKE% -E tar xf sfmt.zip
-%CMAKE% -E rm -rf SFMT
-%CMAKE% -E rename SFMT-src-%SFMT_VERSION% SFMT
-echo #define SFMT_VERSION "%SFMT_VERSION%" > SFMT\SFMT_version_for_teraterm.h
-
-:cJSON
-%CURL% -L https://github.com/DaveGamble/cJSON/archive/v%CJSON_VERSION%.zip -o cJSON.zip
-%CMAKE% -E tar xf cJSON.zip
-%CMAKE% -E rm -rf cJSON
-%CMAKE% -E rename cJSON-%CJSON_VERSION% cJSON
-
-:argon2
-%CURL% -L https://github.com/P-H-C/phc-winner-argon2/archive/refs/tags/%ARGON2_VERSION%.tar.gz -o argon2.tar.gz
-%CMAKE% -E tar xf argon2.tar.gz
-%CMAKE% -E rm -rf argon2
-%CMAKE% -E rename phc-winner-argon2-%ARGON2_VERSION% argon2
-
-:libressl
-%CURL% -L https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-%LIBRESSL_VERSION%.tar.gz -o libressl.tar.gz
-%CMAKE% -E tar xf libressl.tar.gz
-%CMAKE% -E rm -rf libressl
-%CMAKE% -E rename libressl-%LIBRESSL_VERSION% libressl
-
-:download_libs_finish
 endlocal
 exit /b 0
 

Deleted: trunk/libs/checklibs.cmake
===================================================================
--- trunk/libs/checklibs.cmake	2022-03-19 16:02:17 UTC (rev 9827)
+++ trunk/libs/checklibs.cmake	2022-03-22 14:45:11 UTC (rev 9828)
@@ -1,39 +0,0 @@
-# ライブラリのバージョンをチェックする
-#   installer/release.batから使用
-# 単体で実行
-#   cmake -P checklibs.cmake
-
-# 全体のhashはこの値になる
-set(EXPECT_HASH "8a9fc9f6658191cf42e678e0d1fdd42b7046285fb4ade64d566fb32430387285")
-
-# バージョンをチェックするために使用するファイル
-set(CHECK_VERSION_FILES
-  cJSON/CHANGELOG.md
-  libressl/ChangeLog
-  oniguruma/HISTORY
-  putty/version.h
-  SFMT/CHANGE-LOG.txt
-  zlib/ChangeLog
-  )
-
-# 各ファイルのhash
-execute_process(
-  COMMAND ${CMAKE_COMMAND} -E sha256sum ${CHECK_VERSION_FILES}
-  OUTPUT_VARIABLE OV
-  WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
-  )
-#message("${OV}")
-
-# 全体のhash
-string(SHA256 ACTUAL_HASH ${OV})
-
-# 結果
-if(${ACTUAL_HASH} STREQUAL ${EXPECT_HASH})
-  message("ok")
-  file(WRITE "checklibs_result.bat" "set RESULT=1\r\n")
-else()
-  message("ng")
-  message("ACTUAL_HASH=${ACTUAL_HASH}")
-  message("EXPECT_HASH=${EXPECT_HASH}")
-  file(WRITE "checklibs_result.bat" "set RESULT=0\r\n")
-endif()

Added: trunk/libs/download/README.md
===================================================================
--- trunk/libs/download/README.md	                        (rev 0)
+++ trunk/libs/download/README.md	2022-03-22 14:45:11 UTC (rev 9828)
@@ -0,0 +1,4 @@
+download files
+==============
+
+- store download files

Added: trunk/libs/download.cmake
===================================================================
--- trunk/libs/download.cmake	                        (rev 0)
+++ trunk/libs/download.cmake	2022-03-22 14:45:11 UTC (rev 9828)
@@ -0,0 +1,267 @@
+#
+# ex:
+#  cmake -P download.cmake
+#  cmake -DFORCE_DOWNLOAD=on -P download.cmake
+# memo:
+#  スクリプト中のコメントのないhash値は、
+#  Tera Term Project が独自に算出しました
+
+option(FORCE_DOWNLOAD "force download" OFF)
+option(FORCE_EXTRACT "force extract" OFF)
+
+# download_extract()
+#   ファイルをダウンロードして、展開する
+#
+#   ファイルが展開されているかチェック
+#    EXT_DIR       展開されているフォルダ
+#    CHECK_FILE    チェックファイル,このファイルの有無とhashをチェックする
+#                  ${EXT_DIR}相対  ${EXT_DIR}/${CHECK_FILE}
+#    CHECK_HASH    チェックファイルhash値(sha256)
+#   ダウンロード
+#    SRC_URL       アーカイブファイルのURL
+#    ARC_HASH      アーカイブファイルのhash値
+#                  または、hashの入っているファイルのURL
+#    DOWN_DIR      ダウンロードしたファイルの収納ディレクトリ
+#   展開
+#    DIR_IN_ARC    アーカイブ内のフォルダ名
+#    RENAME_DIR    展開後 ${DIR_IN_ARC} をリネーム
+#                  ${EXT_DIR}/${RENAME_DIR} ができる
+function(download_extract SRC_URL ARC_HASH DOWN_DIR EXT_DIR DIR_IN_ARC RENAME_DIR CHECK_FILE CHECK_HASH)
+
+  # ファイルが展開されているかチェック
+  if((NOT FORCE_EXTRACT) AND (NOT FORCE_DOWNLOAD))
+    if(EXISTS ${EXT_DIR}/${CHECK_FILE})
+      file(SHA256 ${EXT_DIR}/${CHECK_FILE} HASH)
+
+      if(${HASH} STREQUAL ${CHECK_HASH})
+        return()
+      endif()
+
+      message("${EXT_DIR}/${CHECK_FILE}")
+      message("ACTUAL_HASH=${HASH}")
+      message("EXPECT_HASH=${CHECK_HASH}")
+    else()
+      message("not exist ${EXT_DIR}/${CHECK_FILE}")
+    endif()
+  endif()
+
+
+  # アーカイブファイル名(フォルダ含まない)
+  string(REGEX REPLACE "(.*)/([^/]*)$" "\\2" SRC_ARC ${SRC_URL})
+
+  # ダウンロードファイルのHASH値
+  if("${ARC_HASH}" MATCHES "http")
+    # download hash
+    string(REGEX REPLACE "(.*)/([^/]*)$" "\\2" HASH_FNAME ${ARC_HASH})
+    if((NOT EXISTS ${DOWN_DIR}/${HASH_FNAME}) OR FORCE_DOWNLOAD)
+      message("download ${ARC_HASH}")
+      file(DOWNLOAD
+        ${ARC_HASH}
+        ${DOWN_DIR}/${HASH_FNAME}
+        SHOW_PROGRESS
+        )
+    endif()
+    file(STRINGS ${DOWN_DIR}/${HASH_FNAME} HASH)
+    string(REGEX REPLACE "^(.+) (.+)$" "\\1" HASH ${HASH})
+  else()
+    # HASH値そのまま
+    set(HASH ${ARC_HASH})
+  endif()
+
+  # HASHの文字長からHASHの種別を決める
+  string(LENGTH ${HASH} HASH_LEN)
+  if(${HASH_LEN} EQUAL 64)
+    set(ARC_HASH_TYPE "SHA256")
+  else()
+    message(FATAL_ERROR "unknwon hash HASH=${HASH} HASH_LEN=${HASH_LEN}")
+  endif()
+
+  message("ARCHIVE=${DOWN_DIR}/${SRC_ARC}")
+  message("ARCHIVE HASH ${ARC_HASH_TYPE}=${HASH}")
+  if(FORCE_DOWNLOAD)
+    # 常にダウンロードする
+    unset(EXPECTED_HASH)
+  else()
+    # 必要ならダウンロードする
+    set(EXPECTED_HASH EXPECTED_HASH "${ARC_HASH_TYPE}=${HASH}")
+  endif()
+
+  # アーカイブをダウンロード
+  message("download ${SRC_URL}")
+  file(DOWNLOAD
+    ${SRC_URL}
+    ${DOWN_DIR}/${SRC_ARC}
+    ${EXPECTED_HASH}
+    SHOW_PROGRESS
+    STATUS st
+    )
+
+  # アーカイブファイルを展開する
+  message("expand ${EXT_DIR}/${DIR_IN_ARC}")
+  file(MAKE_DIRECTORY ${EXT_DIR})
+  execute_process(
+    COMMAND ${CMAKE_COMMAND} -E tar "xf" ${DOWN_DIR}/${SRC_ARC}
+    WORKING_DIRECTORY ${EXT_DIR}
+    )
+
+  # renameする
+  message("rename ${EXT_DIR}/${RENAME_DIR}")
+  file(REMOVE_RECURSE ${EXT_DIR}/${RENAME_DIR})
+  file(RENAME ${EXT_DIR}/${DIR_IN_ARC} ${EXT_DIR}/${RENAME_DIR})
+
+endfunction()
+
+
+# argon2
+message("argon2")
+set(EXT_DIR "${CMAKE_CURRENT_LIST_DIR}")
+set(DIR_IN_ARC "phc-winner-argon2-20190702")
+set(RENAME_DIR "argon2")
+set(CHECK_FILE "argon2/CHANGELOG.md")
+set(CHECK_HASH "1b513eb6524f0a3ac5e182bf2713618ddd8f2616ebe6e090d647c49b3e7eb2ec")
+set(SRC_URL "https://github.com/P-H-C/phc-winner-argon2/archive/refs/tags/20190702.tar.gz")
+set(ARC_HASH "daf972a89577f8772602bf2eb38b6a3dd3d922bf5724d45e7f9589b5e830442c")
+set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/argon2")
+download_extract(
+  ${SRC_URL}
+  ${ARC_HASH}
+  ${DOWN_DIR}
+  ${EXT_DIR}
+  ${DIR_IN_ARC}
+  ${RENAME_DIR}
+  ${CHECK_FILE}
+  ${CHECK_HASH}
+  )
+
+# cJSON
+message("cJSON")
+set(EXT_DIR "${CMAKE_CURRENT_LIST_DIR}")
+set(DIR_IN_ARC "cJSON-1.7.14")
+set(RENAME_DIR "cJSON")
+set(CHECK_FILE "cJSON/CHANGELOG.md")
+set(CHECK_HASH "4ff95e0060ea2dbc13720079399e77d404d89e514b569fcc8d741f3272c98e53")
+set(SRC_URL "https://github.com/DaveGamble/cJSON/archive/v1.7.14.zip")
+set(ARC_HASH "d797b4440c91a19fa9c721d1f8bab21078624aa9555fc64c5c82e24aa2a08221")
+set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/cJSON")
+download_extract(
+  ${SRC_URL}
+  ${ARC_HASH}
+  ${DOWN_DIR}
+  ${EXT_DIR}
+  ${DIR_IN_ARC}
+  ${RENAME_DIR}
+  ${CHECK_FILE}
+  ${CHECK_HASH}
+  )
+
+# libressl
+message("libressl")
+set(EXT_DIR "${CMAKE_CURRENT_LIST_DIR}")
+set(DIR_IN_ARC "libressl-3.4.3")
+set(RENAME_DIR "libressl")
+set(CHECK_FILE "libressl/ChangeLog")
+set(CHECK_HASH "96b2032157a92af8ae02ac57cdc9b96a96a3e91b89602936cf6403c9bf7e88ca")
+set(SRC_URL "https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.4.3.tar.gz")
+set(ARC_HASH "ff88bffe354818b3ccf545e3cafe454c5031c7a77217074f533271d63c37f08d")
+set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/libressl")
+download_extract(
+  ${SRC_URL}
+  ${ARC_HASH}
+  ${DOWN_DIR}
+  ${EXT_DIR}
+  ${DIR_IN_ARC}
+  ${RENAME_DIR}
+  ${CHECK_FILE}
+  ${CHECK_HASH}
+  )
+
+# oniguruma
+message("oniguruma")
+set(EXT_DIR "${CMAKE_CURRENT_LIST_DIR}")
+set(DIR_IN_ARC "onig-6.9.7")
+set(RENAME_DIR "oniguruma")
+set(CHECK_FILE "oniguruma/HISTORY")
+set(CHECK_HASH "5ad81979c1e3beb313bf94e5a57c0772810b5b159cdfa629e2daf7b0643e1a3d")
+set(SRC_URL "https://github.com/kkos/oniguruma/releases/download/v6.9.7.1/onig-6.9.7.1.tar.gz")
+set(ARC_HASH "https://github.com/kkos/oniguruma/releases/download/v6.9.7.1/onig-6.9.7.1.tar.gz.sha256")
+set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/oniguruma")
+download_extract(
+  ${SRC_URL}
+  ${ARC_HASH}
+  ${DOWN_DIR}
+  ${EXT_DIR}
+  ${DIR_IN_ARC}
+  ${RENAME_DIR}
+  ${CHECK_FILE}
+  ${CHECK_HASH}
+  )
+
+# putty
+message("putty")
+set(EXT_DIR "${CMAKE_CURRENT_LIST_DIR}")
+set(DIR_IN_ARC "putty-0.76")
+set(RENAME_DIR "putty")
+set(CHECK_FILE "putty/version.h")
+set(CHECK_HASH "c6975607ae6fb8510d56fae403fdd83bbafa3efe32397e5956375db49d0fadda")
+set(SRC_URL "https://the.earth.li/~sgtatham/putty/0.76/putty-0.76.tar.gz")
+set(ARC_HASH "547cd97a8daa87ef71037fab0773bceb54a8abccb2f825a49ef8eba5e045713f")
+set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/putty")
+download_extract(
+  ${SRC_URL}
+  ${ARC_HASH}
+  ${DOWN_DIR}
+  ${EXT_DIR}
+  ${DIR_IN_ARC}
+  ${RENAME_DIR}
+  ${CHECK_FILE}
+  ${CHECK_HASH}
+  )
+
+# SFMT
+message("SFMT")
+set(EXT_DIR "${CMAKE_CURRENT_LIST_DIR}")
+set(DIR_IN_ARC "SFMT-src-1.5.1")
+set(RENAME_DIR "SFMT")
+set(CHECK_FILE "SFMT/CHANGE-LOG.txt")
+set(CHECK_HASH "ac65302c740579c7dccc99b2fcd735af3027957680f2ce227042755646abb1db")
+set(SRC_URL "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/SFMT-src-1.5.1.zip")
+set(ARC_HASH "630d1dfa6b690c30472f75fa97ca90ba62f9c13c5add6c264fdac2c1d3a878f4")
+set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/SFMT")
+download_extract(
+  ${SRC_URL}
+  ${ARC_HASH}
+  ${DOWN_DIR}
+  ${EXT_DIR}
+  ${DIR_IN_ARC}
+  ${RENAME_DIR}
+  ${CHECK_FILE}
+  ${CHECK_HASH}
+  )
+set(SFMT_VERSION_H "${EXT_DIR}/${RENAME_DIR}/SFMT_version_for_teraterm.h")
+if(NOT EXISTS ${SFMT_VERSION_H})
+  file(WRITE ${SFMT_VERSION_H}
+    "#define SFMT_VERSION \"1.5.1\"\n"
+    )
+endif()
+
+# zlib
+message("zlib")
+set(EXT_DIR "${CMAKE_CURRENT_LIST_DIR}")
+set(DIR_IN_ARC "zlib-1.2.11")
+set(RENAME_DIR "zlib")
+set(CHECK_FILE "zlib/ChangeLog")
+set(CHECK_HASH "4c9f1a65b9b4be8bf164a97775ef50e4db4e02ea8c9933fdbe629a640691375e")
+set(SRC_URL "https://zlib.net/zlib-1.2.11.tar.xz")
+set(ARC_HASH "4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066")
+#   ARC_HASH was picked from https://www.zlib.net
+set(DOWN_DIR "${CMAKE_CURRENT_LIST_DIR}/download/zlib")
+download_extract(
+  ${SRC_URL}
+  ${ARC_HASH}
+  ${DOWN_DIR}
+  ${EXT_DIR}
+  ${DIR_IN_ARC}
+  ${RENAME_DIR}
+  ${CHECK_FILE}
+  ${CHECK_HASH}
+  )


ttssh2-commit メーリングリストの案内
Back to archive index