Bazel で指定する Google Test アーカイブ

ユニットテストをしたいな、と考えて数年前にお世話になった Google Test をおもいだす。
(10年くらい前のような気がする。まだメインの開発環境として Visual Studio を使っていたころ)
(スタティックリンクライブラリーをビルドして、それをプロジェクトでリンクして…… とか、そんなことをしていた)

さて、時は流れてもう令和も3年。(もうすぐ4年だ)
Google Test は GitHub に公開の場を移しており、そしてビルド環境は(有志による CMake サポートと)公式には Bazel 一択となっていた。

Bazel? そりゃあいったいなんじゃらほい?
(どうやら Google が内部でつかっているビルド用コマンドらしい)

さておき、チュートリアルによればとっても簡単につかえるようだ。

WORKSPACE ファイル

さて、そのチュートリアルではワークスペース設定が次のように紹介されている。

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_google_googletest",
  urls = ["https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip"],
  strip_prefix = "googletest-609281088cfefc76f9d0ce82e1ff6c30cc3591e5",
)

このコミットハッシュがどのバージョンを指しているのかはわからない。
一方で 2021 年末の現在、公式には release-1.11.0 とタグを打たれたバージョンが最新リリースのよう。

というのでこんな設定ファイルを用意する。

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_google_googletest",
  urls = ["https://github.com/google/googletest/archive/refs/tags/release-1.11.0.zip"],
  strip_prefix = "googletest-release-1.11.0",
  sha256 = "353571c2440176ded91c2de6d6cd88ddd41401d14692ec1f99e35d013feda55a",
)

sha256 キー

チュートリアル紹介の設定をリリース版 1.11.0 に変えたうえで、さらに sha256 というキーを追加している。

これをつけないと Bazel によるビルド依存関係解決のたびに文句を言われる。こんな具合に:

INFO: SHA256 (https://github.com/google/googletest/archive/refs/tags/release-1.11.0.zip) = 353571c2440176ded91c2de6d6cd88ddd41401d14692ec1f99e35d013feda55a
DEBUG: Rule 'com_google_googletest' indicated that a canonical reproducible form can be obtained by modifying arguments sha256 = "353571c2440176ded91c2de6d6cd88ddd41401d14692ec1f99e35d013feda55a"
DEBUG: Repository com_google_googletest instantiated at:
C:/users/0025110014/v3120/tool/split-rgbw-raw/WORKSPACE:3:13: in <toplevel>
Repository rule http_archive defined at:
C:/users/0025110014/_bazel_0025110014/mrkfkorq/external/bazel_tools/tools/build_defs/repo/http.bzl:336:31: in <toplevel>

『com_google_googletest の再利用可能なカノニカル形式は引数 sha256 を “35371c…” と書きかえたら得られる。』
なんのこっちゃらほい、という感じだ。

実際 GitHub の issue としてあがっている。
ユーザーは言っている「わけがわからないよ」と。
しかるに彼らはこう返す:

FWIW there are 2 actions you can take for these:

* fix it upstream for everyone
* lock the dep in your own WORKSPACE

https://github.com/bazelbuild/bazel/issues/8222#issuecomment-489120343

このあともいくつかやりとりが続くのだけれど、「おれには役立った」とか「わかった同意する」とか「ほかに声もないしこのままにするね」でクローズ、だ。
おまえら頭いいな。
結局どうすればこのメッセージを消せるのか、ぼくにはこれっぽっちもわからないぞ?

というので頭をひねりまくって、最終的に WORKSPACE ファイルに sha256 を足せばいいんじゃね? と試したところ、文句を言われなくなったという次第。

ここにその苦労の足跡を残すものである。

ついでに質問を投げておいた
ぼくの対処がただしいのかどうか、そしてどこを読めばわかるのか、を。

そして6時間後に「それで OK」の返事が来た。このスピード感。便利だな、インターネット。

that's correct. Adding the sha256 will ensure that you get the same version each tiem the build runs.

https://github.com/bazelbuild/bazel/issues/8222#issuecomment-987680236

この記事が気に入ったらサポートをしてみませんか?