[インデックス 11485] ファイルの概要
このコミットは、Go言語プロジェクトのビルドスクリプト src/run.bash
における変更を記録しています。具体的には、misc/cgo/test
ディレクトリ内のテスト実行コマンドを make test
から gomake test
へと修正し、FreeBSD環境でのビルド問題を解決しようとするものです。
コミット
commit 1f7128e17b3982e530675df17f39c7f24a120ec3
Author: Rob Pike <r@golang.org>
Date: Mon Jan 30 15:34:34 2012 -0800
run.bash: s/make/gomake
attempt to fix freebsd build
TBR=rsc
R=rsc
CC=golang-dev
https://golang.org/cl/5576077
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/1f7128e17b3982e530675df17f39c7f24a120ec3
元コミット内容
run.bash: s/make/gomake
attempt to fix freebsd build
TBR=rsc
変更の背景
このコミットの主な背景は、Go言語のビルドシステムがFreeBSDオペレーティングシステム上で正しく動作しないという問題に対処することです。Goプロジェクトでは、ビルドプロセスを管理するためにカスタムのgomake
ツールを使用しています。しかし、特定の箇所(この場合はmisc/cgo/test
ディレクトリ内のテスト実行)で、汎用的なmake
コマンドが誤って使用されていました。
FreeBSDのような特定のUnix系システムでは、make
コマンドの挙動や利用可能な機能がGNU Make(Linuxなどで一般的に使用されるmake
の実装)と異なる場合があります。Goプロジェクトが内部的に使用するgomake
は、Goのビルド要件に合わせて調整されたmake
のラッパーまたは代替であり、Goのソースツリー内の特定のパスや環境変数を考慮して設計されています。
したがって、make test
がFreeBSDで失敗した原因は、FreeBSDのデフォルトmake
がGoプロジェクトのビルドシステムが期待する動作と一致しなかったためと考えられます。この問題を解決するために、Goプロジェクト専用のビルドツールであるgomake
を使用するように修正されました。これにより、Goのビルドシステム全体の一貫性が保たれ、クロスプラットフォームでのビルドの信頼性が向上します。
前提知識の解説
このコミットを理解するためには、以下の概念について知っておく必要があります。
-
make
とMakefile:make
は、プログラムのコンパイルやその他のタスクを自動化するためのユーティリティです。Makefile
というファイルに記述されたルール(ターゲット、依存関係、コマンド)に基づいて動作します。- 異なるオペレーティングシステムや環境では、
make
コマンドの具体的な実装(例: GNU Make, BSD Make)が異なり、サポートする機能や構文に微妙な違いがあることがあります。これがクロスプラットフォームビルドの課題となることがあります。
-
gomake
:gomake
は、Go言語プロジェクトのビルドシステムで内部的に使用されるカスタムのmake
ラッパーまたはスクリプトです。これは、Goのソースコードをビルドし、テストを実行し、パッケージをインストールするためのGo固有のロジックをカプセル化しています。gomake
は、Goのツールチェイン(コンパイラ、リンカなど)と密接に連携し、Goのビルドプロセスに特化した環境設定や依存関係の解決を行います。これにより、標準のmake
では対応しきれないGo特有のビルド要件を満たします。
-
run.bash
:run.bash
は、Go言語プロジェクトのルートディレクトリにあるシェルスクリプトで、Goのビルド、テスト、およびその他の開発タスクを実行するための主要なエントリポイントの一つです。- このスクリプトは、環境変数の設定、依存関係のチェック、そして
gomake
などの内部ビルドツールを呼び出す役割を担っています。
-
CGO_ENABLED
:CGO_ENABLED
はGoの環境変数で、Cgo(GoとC言語の相互運用機能)が有効になっているかどうかを制御します。CGO_ENABLED=1
の場合、GoプログラムはC言語のコードを呼び出すことができ、その逆も可能です。このコミットの変更箇所はCGO_ENABLED
が有効な場合にのみ実行されるブロック内にあります。これは、Cgo関連のテストがFreeBSDで問題を起こしていたことを示唆しています。
-
FreeBSD:
- FreeBSDは、Unix系のオープンソースオペレーティングシステムです。Linuxと同様にサーバーやデスクトップ環境で利用されますが、そのシステム構成やデフォルトのツール(
make
の実装など)には違いがあります。Go言語はFreeBSDを含む多くのプラットフォームをサポートしています。
- FreeBSDは、Unix系のオープンソースオペレーティングシステムです。Linuxと同様にサーバーやデスクトップ環境で利用されますが、そのシステム構成やデフォルトのツール(
技術的詳細
このコミットは、src/run.bash
スクリプト内のmisc/cgo/test
ディレクトリに関連する部分の変更に焦点を当てています。
変更前のコードでは、Cgoが有効な場合にmisc/cgo/test
ディレクトリに移動し、gomake clean
を実行した後、make test
を実行していました。
[ "$CGO_ENABLED" != 1 ] || \
(xcd ../misc/cgo/test
gomake clean
make test
) || exit $?
ここで問題となるのは、make test
の部分です。Goプロジェクトのビルドシステムは、Goのソースツリー全体で一貫したビルド動作を保証するために、カスタムのgomake
ツールを使用することを前提としています。しかし、この箇所では一般的なmake
コマンドが呼び出されていました。
FreeBSD環境では、デフォルトのmake
コマンドがGNU Makeとは異なる挙動をする可能性があり、GoのCgoテストが期待するビルドプロセスを正しく実行できないことが考えられます。例えば、FreeBSDのmake
は特定のMakefile
の構文や機能拡張をサポートしていない、あるいは異なる環境変数の解釈をするかもしれません。
このコミットでは、make test
をgomake test
に置き換えることで、この問題を解決しています。
[ "$CGO_ENABLED" != 1 ] || \
(xcd ../misc/cgo/test
gomake clean
gomake test
) || exit $?
この変更により、misc/cgo/test
内のテストもGoプロジェクトの標準的なビルドツールであるgomake
によって処理されるようになります。これにより、FreeBSDを含むすべてのサポート対象プラットフォームで、CgoテストがGoのビルドシステムと一貫した方法で実行され、ビルドの信頼性と移植性が向上します。
TBR=rsc
は "To Be Reviewed by rsc" の略で、Rob Pikeがこの変更をRuss Cox (rsc) にレビューしてもらうことを意図していることを示しています。R=rsc
はレビューが完了したことを示し、CC=golang-dev
はGo開発者メーリングリストに通知されたことを示します。https://golang.org/cl/5576077
は、この変更がGerrit(Goプロジェクトが使用するコードレビューシステム)上のチェンジリスト5576077に対応していることを示しています。
コアとなるコードの変更箇所
--- a/src/run.bash
+++ b/src/run.bash
@@ -99,7 +99,7 @@ gomake clean
[ "$CGO_ENABLED" != 1 ] ||
(xcd ../misc/cgo/test
gomake clean
-make test
+gomake test
) || exit $?
[ "$CGO_ENABLED" != 1 ] ||
コアとなるコードの解説
このdiffは、src/run.bash
ファイルの99行目付近にある変更を示しています。
-make test
: 変更前の行で、一般的なmake
コマンドを使用してtest
ターゲットを実行していました。+gomake test
: 変更後の行で、Goプロジェクトのカスタムビルドツールであるgomake
を使用してtest
ターゲットを実行するように修正されています。
この変更は、CGO_ENABLED
環境変数が1
(Cgoが有効)である場合に実行されるコードブロック内にあります。このブロックは、../misc/cgo/test
ディレクトリに移動し、Cgo関連のテストをクリーンアップして実行する役割を担っています。
make
からgomake
への変更は、FreeBSD環境でのビルドの失敗を修正することを目的としています。これは、FreeBSDのデフォルトmake
がGoプロジェクトのビルドシステムが期待する動作と互換性がなかったためと考えられます。gomake
を使用することで、Goのビルドシステム全体で一貫したビルドロジックが適用され、特定のプラットフォームでの互換性問題が解消されます。
関連リンク
- Go言語の公式ウェブサイト: https://golang.org/
- Go言語のソースコードリポジトリ (GitHub): https://github.com/golang/go
- Go言語のチェンジリスト 5576077 (Gerrit): https://golang.org/cl/5576077
- Go言語のCgoに関するドキュメント (Go 1.18): https://go.dev/blog/cgo (当時のバージョンとは異なる可能性がありますが、Cgoの概念を理解するのに役立ちます)
参考にした情報源リンク
- Go言語のソースコード (特に
src/run.bash
およびsrc/make.bash
やsrc/cmd/go
のビルド関連コード) - GNU Makeのドキュメント: https://www.gnu.org/software/make/manual/
- FreeBSDの
make
に関するドキュメント (FreeBSDハンドブックなど) - Go言語のメーリングリストやIssueトラッカー (当時の議論を特定できればより詳細な情報が得られる可能性がありますが、今回は一般的な情報源として記載)
- Go言語のビルドシステムに関する一般的な知識と慣習
[インデックス 11485] ファイルの概要
このコミットは、Go言語プロジェクトのビルドスクリプト src/run.bash
における変更を記録しています。具体的には、misc/cgo/test
ディレクトリ内のテスト実行コマンドを make test
から gomake test
へと修正し、FreeBSD環境でのビルド問題を解決しようとするものです。
コミット
commit 1f7128e17b3982e530675df17f39c7f24a120ec3
Author: Rob Pike <r@golang.org>
Date: Mon Jan 30 15:34:34 2012 -0800
run.bash: s/make/gomake
attempt to fix freebsd build
TBR=rsc
R=rsc
CC=golang-dev
https://golang.org/cl/5576077
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/1f7128e17b3982e530675df17f39c7f24a120ec3
元コミット内容
run.bash: s/make/gomake
attempt to fix freebsd build
TBR=rsc
変更の背景
このコミットの主な背景は、Go言語のビルドシステムがFreeBSDオペレーティングシステム上で正しく動作しないという問題に対処することです。Goプロジェクトでは、ビルドプロセスを管理するためにカスタムのgomake
ツールを使用しています。しかし、特定の箇所(この場合はmisc/cgo/test
ディレクトリ内のテスト実行)で、汎用的なmake
コマンドが誤って使用されていました。
FreeBSDのような特定のUnix系システムでは、make
コマンドの挙動や利用可能な機能がGNU Make(Linuxなどで一般的に使用されるmake
の実装)と異なる場合があります。Goプロジェクトが内部的に使用するgomake
は、Goのビルド要件に合わせて調整されたmake
のラッパーまたは代替であり、Goのソースツリー内の特定のパスや環境変数を考慮して設計されています。
したがって、make test
がFreeBSDで失敗した原因は、FreeBSDのデフォルトmake
がGoプロジェクトのビルドシステムが期待する動作と一致しなかったためと考えられます。この問題を解決するために、Goプロジェクト専用のビルドツールであるgomake
を使用するように修正されました。これにより、Goのビルドシステム全体の一貫性が保たれ、クロスプラットフォームでのビルドの信頼性が向上します。
前提知識の解説
このコミットを理解するためには、以下の概念について知っておく必要があります。
-
make
とMakefile:make
は、プログラムのコンパイルやその他のタスクを自動化するためのユーティリティです。Makefile
というファイルに記述されたルール(ターゲット、依存関係、コマンド)に基づいて動作します。make
は1970年代からUnix系システムで広く使われている汎用ビルド自動化ツールです。その主な目的は、ルールと依存関係を定義することでソフトウェアのコンパイルとリンクを自動化することですが、ファイルの変更に基づいて他のファイルを自動的に更新する必要があるあらゆるタスクに使用できます。- 異なるオペレーティングシステムや環境では、
make
コマンドの具体的な実装(例: GNU Make, BSD Make)が異なり、サポートする機能や構文に微妙な違いがあることがあります。これがクロスプラットフォームビルドの課題となることがあります。
-
gomake
:gomake
は、Go言語プロジェクトのビルドシステムで内部的に使用されるカスタムのmake
ラッパーまたはスクリプトです。これは、Goのソースコードをビルドし、テストを実行し、パッケージをインストールするためのGo固有のロジックをカプセル化しています。- Go言語には、スライス、マップ、チャネルなどの組み込み参照型を割り当てて初期化するために使用される組み込み関数としての
make
がありますが、これはビルド自動化ツールとしてのmake
とは異なります。 - Goコミュニティでは、
make
のような機能を提供する、Goプロジェクトに特化したビルドツールや拡張機能がいくつか開発されており、これらが「gomake」という名前で呼ばれることがあります。Goプロジェクトの公式ビルドシステムにおけるgomake
は、Goのツールチェイン(コンパイラ、リンカなど)と密接に連携し、Goのビルドプロセスに特化した環境設定や依存関係の解決を行います。これにより、標準のmake
では対応しきれないGo特有のビルド要件を満たします。
-
run.bash
:run.bash
は、Go言語プロジェクトのルートディレクトリにあるシェルスクリプトで、Goのビルド、テスト、およびその他の開発タスクを実行するための主要なエントリポイントの一つです。- このスクリプトは、環境変数の設定、依存関係のチェック、そして
gomake
などの内部ビルドツールを呼び出す役割を担っています。
-
CGO_ENABLED
:CGO_ENABLED
はGoの環境変数で、Cgo(GoとC言語の相互運用機能)が有効になっているかどうかを制御します。CGO_ENABLED=1
の場合、GoプログラムはC言語のコードを呼び出すことができ、その逆も可能です。このコミットの変更箇所はCGO_ENABLED
が有効な場合にのみ実行されるブロック内にあります。これは、Cgo関連のテストがFreeBSDで問題を起こしていたことを示唆しています。
-
FreeBSD:
- FreeBSDは、Unix系のオープンソースオペレーティングシステムです。Linuxと同様にサーバーやデスクトップ環境で利用されますが、そのシステム構成やデフォルトのツール(
make
の実装など)には違いがあります。Go言語はFreeBSDを含む多くのプラットフォームをサポートしています。
- FreeBSDは、Unix系のオープンソースオペレーティングシステムです。Linuxと同様にサーバーやデスクトップ環境で利用されますが、そのシステム構成やデフォルトのツール(
技術的詳細
このコミットは、src/run.bash
スクリプト内のmisc/cgo/test
ディレクトリに関連する部分の変更に焦点を当てています。
変更前のコードでは、Cgoが有効な場合にmisc/cgo/test
ディレクトリに移動し、gomake clean
を実行した後、make test
を実行していました。
[ "$CGO_ENABLED" != 1 ] || \
(xcd ../misc/cgo/test
gomake clean
make test
) || exit $?
ここで問題となるのは、make test
の部分です。Goプロジェクトのビルドシステムは、Goのソースツリー全体で一貫したビルド動作を保証するために、カスタムのgomake
ツールを使用することを前提としています。しかし、この箇所では一般的なmake
コマンドが呼び出されていました。
FreeBSD環境では、デフォルトのmake
コマンドがGNU Makeとは異なる挙動をする可能性があり、GoのCgoテストが期待するビルドプロセスを正しく実行できないことが考えられます。例えば、FreeBSDのmake
は特定のMakefile
の構文や機能拡張をサポートしていない、あるいは異なる環境変数の解釈をするかもしれません。
このコミットでは、make test
をgomake test
に置き換えることで、この問題を解決しています。
[ "$CGO_ENABLED" != 1 ] || \
(xcd ../misc/cgo/test
gomake clean
gomake test
) || exit $?
この変更により、misc/cgo/test
内のテストもGoプロジェクトの標準的なビルドツールであるgomake
によって処理されるようになります。これにより、FreeBSDを含むすべてのサポート対象プラットフォームで、CgoテストがGoのビルドシステムと一貫した方法で実行され、ビルドの信頼性と移植性が向上します。
TBR=rsc
は "To Be Reviewed by rsc" の略で、Rob Pikeがこの変更をRuss Cox (rsc) にレビューしてもらうことを意図していることを示しています。R=rsc
はレビューが完了したことを示し、CC=golang-dev
はGo開発者メーリングリストに通知されたことを示します。https://golang.org/cl/5576077
は、この変更がGerrit(Goプロジェクトが使用するコードレビューシステム)上のチェンジリスト5576077に対応していることを示しています。
コアとなるコードの変更箇所
--- a/src/run.bash
+++ b/src/run.bash
@@ -99,7 +99,7 @@ gomake clean
[ "$CGO_ENABLED" != 1 ] ||
(xcd ../misc/cgo/test
gomake clean
-make test
+gomake test
) || exit $?
[ "$CGO_ENABLED" != 1 ] ||
コアとなるコードの解説
このdiffは、src/run.bash
ファイルの99行目付近にある変更を示しています。
-make test
: 変更前の行で、一般的なmake
コマンドを使用してtest
ターゲットを実行していました。+gomake test
: 変更後の行で、Goプロジェクトのカスタムビルドツールであるgomake
を使用してtest
ターゲットを実行するように修正されています。
この変更は、CGO_ENABLED
環境変数が1
(Cgoが有効)である場合に実行されるコードブロック内にあります。このブロックは、../misc/cgo/test
ディレクトリに移動し、Cgo関連のテストをクリーンアップして実行する役割を担っています。
make
からgomake
への変更は、FreeBSD環境でのビルドの失敗を修正することを目的としています。これは、FreeBSDのデフォルトmake
がGoプロジェクトのビルドシステムが期待する動作と互換性がなかったためと考えられます。gomake
を使用することで、Goのビルドシステム全体で一貫したビルドロジックが適用され、特定のプラットフォームでの互換性問題が解消されます。
関連リンク
- Go言語の公式ウェブサイト: https://golang.org/
- Go言語のソースコードリポジトリ (GitHub): https://github.com/golang/go
- Go言語のチェンジリスト 5576077 (Gerrit): https://golang.org/cl/5576077
- Go言語のCgoに関するドキュメント (Go 1.18): https://go.dev/blog/cgo (当時のバージョンとは異なる可能性がありますが、Cgoの概念を理解するのに役立ちます)
参考にした情報源リンク
- Go言語のソースコード (特に
src/run.bash
およびsrc/make.bash
やsrc/cmd/go
のビルド関連コード) - GNU Makeのドキュメント: https://www.gnu.org/software/make/manual/
- FreeBSDの
make
に関するドキュメント (FreeBSDハンドブックなど) - Go言語のメーリングリストやIssueトラッカー (当時の議論を特定できればより詳細な情報が得られる可能性がありますが、今回は一般的な情報源として記載)
- Go言語のビルドシステムに関する一般的な知識と慣習
- Web検索結果: "golang gomake vs make"
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQH9HTSGPyFL4AzZYN27gSQbuP0mJ6CEG9UlZsKnjsiF9R8fGA0sfz0_5wtxfVB5WzQiX-VxRXnMXnt9phDac0yrCbg6yMT7-edrpE2d3z8vJ3fFb2eN72PeNBE5yaxI8uTtg0Fp1BlKYvZHgfS-
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGH69_JdceOh5pTT8FVK8qUHqU7AAty0xd94HTiswJxhK5Kii0rIQQia2xmTdpdBoJWQa6QQjPa0FZxjipkx-4mzIh2jwVTddUNdCCt_Fn3gItFqkmV3i7W2XHqgeMD8Go1uQvhb-4w1g==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQE44R64-JeEFwCVO2wy68kZxXHrGpKU-WX7DQsy93-TuRcgwhyElSgoGMV4xVYUtbkWkNUTjC2FsaLhaFlSQZCky6uPSZ_w1Mk4KIJeHUFFaFJHUR5pwwEKlBW6DMeHMhnGDkjbXdZxhcZ3cPwpQ79Ko9M=
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFWd2HuA95KkM3rFysS4eI2ZLhNF481Nyn6gi43a_4JD4DEF-aEDgXJkrqSQURuQov1WE_VhiocCz9nmylTSDLh8w_tZpc-13AzBzzQh6Q_VTLoLXahaYNsk1A=
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFIvVuINHBeYIFegkZA-Oqn94OuIOubxxxpNVdKdGW73CAGZKciY32CJjVes6Y_h2ncuYKhCtiQfx93C8uVjkBwBpqRkX8QsGR8VXzrq2HZrcSrSH95WvrdXFw5yGHaCiKqlmZK1SHqZQ==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHtovQDUeHfvlrGQ0wZ6RAkmtj3-E0zue6QIdRKVjK0saUO6S8E7J6Sz_t-lpXPRRfBovi21PFPXZBvAGQUvd2u0cCJvXcoJFJaHK1K2ccT_IkZ5Wi9FgA71fwtjp57
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEoWW_M4ioDqgumNp36Xj65kt-0iddCeBp1Hz3cpjBNImIV2X0hwF6nQAf2-FVhlxfyFPZvHjClOzT81mE8bhnYJLdXIzKVdPJyDFgGPf56bl9CTRVQm3vl1Sfsyg==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHdhTa4L7rRd9_1D68j7CJbkJ5MusJmdjj66mfQvIweACjgYKjfTOt1q79JSOlk7c6MoD0HY7tocs5AP6cwNIZLLwJuJeuBaVcR8Pn9ZDwcoPvph5JQjg7U45hakVid8F1rYzcwq0ut7AZT
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGHRDOPjmvHUn7JSOBQ9K3trd4GomVnSeSk5sni4cdTl1TK3c0gjCG1zQPH-IGcgT0GbUayJrwVqvI1Vp0QcmY3aapRehh8ZIuvnx6-D21_xqWk5ZZDOyyG8xp2EIcNCjzJAFq8QW8MRmuz