[インデックス 10348] ファイルの概要
コミット
このコミットは、Goプログラミング言語の初期ビルドシステムに関する重要な修正を行ったものです。Scott Lawrence(bytbox@gmail.com)によって2011年11月11日に行われ、env.bashスクリプトにおけるmake/gmakeの存在チェック機能を追加しました。
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/351daf878843dd782b8e42276f568d6130cf7c62
元コミット内容
commit 351daf878843dd782b8e42276f568d6130cf7c62
Author: Scott Lawrence <bytbox@gmail.com>
Date: Fri Nov 11 14:56:18 2011 -0500
env.bash: Check for presence of make/gmake
Without this, a missing gmake will result in bogus error "Did not find
Go environment variables".
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5369066
変更されたファイル
src/env.bash
- 1行追加:
$MAKE
をPROGS配列に追加
- 1行追加:
変更の背景
2011年当時、Goプログラミング言語はまだ黎明期にあり、現在のような統合されたビルドシステム(go build
、go install
コマンド)は存在していませんでした。代わりに、シェルスクリプトベースのビルドシステムが使用されており、env.bash
スクリプトは必要なビルドツールの存在を確認する重要な役割を果たしていました。
この修正が行われる前、GNU makeが不足している環境では、実際の問題は「makeツールが見つからない」ことであるにも関わらず、「Go環境変数が見つからない」という誤解を招くエラーメッセージが表示されていました。これは開発者にとって非常に混乱を招く状況でした。
前提知識の解説
1. GNU makeとgmakeの違い
- GNU make: GNUプロジェクトによって開発された、標準的なmakeツールの実装
- gmake: 多くのUnixライクシステムでGNU makeを指すコマンド名
- システムによって、GNU makeが
make
またはgmake
として利用可能
2. 2011年当時のGoビルドシステム
- シェルスクリプトベース:
make.bash
、all.bash
、env.bash
などのスクリプトで構成 - 依存関係管理: 必要なビルドツールの存在をスクリプトで確認
- クロスコンパイル: 環境変数(GOOS、GOARCH)を使用してターゲットプラットフォームを指定
3. env.bashスクリプトの役割
env.bash
は、Go開発環境の設定と検証を行うスクリプトで、以下の機能を持っていました:
- 必要なビルドツールの存在確認
- 環境変数の設定
- プラットフォーム固有の設定
技術的詳細
PROGS配列の意味
env.bash
スクリプト内のPROGS配列は、Goのビルドに必要な外部プログラムのリストを保持していました。この配列に含まれるプログラムは、ビルドプロセスの開始前に存在確認が行われます。
修正前の問題
# 修正前のPROGS配列(抜粋)
PROGS="
gcc
grep
ls
mkdir
mv
pwd
"
この状態では、$MAKE
変数で指定されたmakeツールの存在確認が行われていませんでした。
修正後の状態
# 修正後のPROGS配列(抜粋)
PROGS="
gcc
grep
ls
$MAKE
mkdir
mv
pwd
"
$MAKE
変数を追加することで、環境に応じて適切なmakeツール(make
またはgmake
)の存在確認が行われるようになりました。
コアとなるコードの変更箇所
ファイル: src/env.bash
変更箇所: 22行目から28行目のPROGS配列定義
@@ -59,6 +59,7 @@ PROGS="
gcc
grep
ls
+ $MAKE
mkdir
mv
pwd
コアとなるコードの解説
1. $MAKE変数の動的解決
$MAKE
変数は、実行時に現在の環境で利用可能なmakeツールに展開されます:
- FreeBSDやOpenBSDでは通常
gmake
- Linuxでは通常
make
- macOSでは
make
(ただし、GNU makeがインストールされている場合はgmake
も利用可能)
2. 存在確認のメカニズム
env.bashスクリプトは、PROGS配列内の各プログラムに対して以下の処理を実行します:
which
コマンドまたはtype
コマンドを使用してプログラムの存在確認- 見つからない場合はエラーメッセージを出力
- 必要なプログラムがすべて揃っている場合のみビルドプロセスを継続
3. エラーハンドリングの改善
この修正により、makeツールが不足している場合に適切なエラーメッセージが表示されるようになりました:
修正前:
Error: Did not find Go environment variables
修正後:
Error: make (or gmake) not found