Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 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のビルドシステム全体の一貫性が保たれ、クロスプラットフォームでのビルドの信頼性が向上します。

前提知識の解説

このコミットを理解するためには、以下の概念について知っておく必要があります。

  1. makeとMakefile:

    • makeは、プログラムのコンパイルやその他のタスクを自動化するためのユーティリティです。Makefileというファイルに記述されたルール(ターゲット、依存関係、コマンド)に基づいて動作します。
    • 異なるオペレーティングシステムや環境では、makeコマンドの具体的な実装(例: GNU Make, BSD Make)が異なり、サポートする機能や構文に微妙な違いがあることがあります。これがクロスプラットフォームビルドの課題となることがあります。
  2. gomake:

    • gomakeは、Go言語プロジェクトのビルドシステムで内部的に使用されるカスタムのmakeラッパーまたはスクリプトです。これは、Goのソースコードをビルドし、テストを実行し、パッケージをインストールするためのGo固有のロジックをカプセル化しています。
    • gomakeは、Goのツールチェイン(コンパイラ、リンカなど)と密接に連携し、Goのビルドプロセスに特化した環境設定や依存関係の解決を行います。これにより、標準のmakeでは対応しきれないGo特有のビルド要件を満たします。
  3. run.bash:

    • run.bashは、Go言語プロジェクトのルートディレクトリにあるシェルスクリプトで、Goのビルド、テスト、およびその他の開発タスクを実行するための主要なエントリポイントの一つです。
    • このスクリプトは、環境変数の設定、依存関係のチェック、そしてgomakeなどの内部ビルドツールを呼び出す役割を担っています。
  4. CGO_ENABLED:

    • CGO_ENABLEDはGoの環境変数で、Cgo(GoとC言語の相互運用機能)が有効になっているかどうかを制御します。
    • CGO_ENABLED=1の場合、GoプログラムはC言語のコードを呼び出すことができ、その逆も可能です。このコミットの変更箇所はCGO_ENABLEDが有効な場合にのみ実行されるブロック内にあります。これは、Cgo関連のテストがFreeBSDで問題を起こしていたことを示唆しています。
  5. FreeBSD:

    • FreeBSDは、Unix系のオープンソースオペレーティングシステムです。Linuxと同様にサーバーやデスクトップ環境で利用されますが、そのシステム構成やデフォルトのツール(makeの実装など)には違いがあります。Go言語はFreeBSDを含む多くのプラットフォームをサポートしています。

技術的詳細

このコミットは、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 testgomake 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言語のソースコード (特に src/run.bash および src/make.bashsrc/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のビルドシステム全体の一貫性が保たれ、クロスプラットフォームでのビルドの信頼性が向上します。

前提知識の解説

このコミットを理解するためには、以下の概念について知っておく必要があります。

  1. makeとMakefile:

    • makeは、プログラムのコンパイルやその他のタスクを自動化するためのユーティリティです。Makefileというファイルに記述されたルール(ターゲット、依存関係、コマンド)に基づいて動作します。
    • makeは1970年代からUnix系システムで広く使われている汎用ビルド自動化ツールです。その主な目的は、ルールと依存関係を定義することでソフトウェアのコンパイルとリンクを自動化することですが、ファイルの変更に基づいて他のファイルを自動的に更新する必要があるあらゆるタスクに使用できます。
    • 異なるオペレーティングシステムや環境では、makeコマンドの具体的な実装(例: GNU Make, BSD Make)が異なり、サポートする機能や構文に微妙な違いがあることがあります。これがクロスプラットフォームビルドの課題となることがあります。
  2. gomake:

    • gomakeは、Go言語プロジェクトのビルドシステムで内部的に使用されるカスタムのmakeラッパーまたはスクリプトです。これは、Goのソースコードをビルドし、テストを実行し、パッケージをインストールするためのGo固有のロジックをカプセル化しています。
    • Go言語には、スライス、マップ、チャネルなどの組み込み参照型を割り当てて初期化するために使用される組み込み関数としてのmakeがありますが、これはビルド自動化ツールとしてのmakeとは異なります。
    • Goコミュニティでは、makeのような機能を提供する、Goプロジェクトに特化したビルドツールや拡張機能がいくつか開発されており、これらが「gomake」という名前で呼ばれることがあります。Goプロジェクトの公式ビルドシステムにおけるgomakeは、Goのツールチェイン(コンパイラ、リンカなど)と密接に連携し、Goのビルドプロセスに特化した環境設定や依存関係の解決を行います。これにより、標準のmakeでは対応しきれないGo特有のビルド要件を満たします。
  3. run.bash:

    • run.bashは、Go言語プロジェクトのルートディレクトリにあるシェルスクリプトで、Goのビルド、テスト、およびその他の開発タスクを実行するための主要なエントリポイントの一つです。
    • このスクリプトは、環境変数の設定、依存関係のチェック、そしてgomakeなどの内部ビルドツールを呼び出す役割を担っています。
  4. CGO_ENABLED:

    • CGO_ENABLEDはGoの環境変数で、Cgo(GoとC言語の相互運用機能)が有効になっているかどうかを制御します。
    • CGO_ENABLED=1の場合、GoプログラムはC言語のコードを呼び出すことができ、その逆も可能です。このコミットの変更箇所はCGO_ENABLEDが有効な場合にのみ実行されるブロック内にあります。これは、Cgo関連のテストがFreeBSDで問題を起こしていたことを示唆しています。
  5. FreeBSD:

    • FreeBSDは、Unix系のオープンソースオペレーティングシステムです。Linuxと同様にサーバーやデスクトップ環境で利用されますが、そのシステム構成やデフォルトのツール(makeの実装など)には違いがあります。Go言語はFreeBSDを含む多くのプラットフォームをサポートしています。

技術的詳細

このコミットは、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 testgomake 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のビルドシステム全体で一貫したビルドロジックが適用され、特定のプラットフォームでの互換性問題が解消されます。

関連リンク

参考にした情報源リンク