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

[インデックス 16451] ファイルの概要

このコミットは、Goプロジェクトのダッシュボードビルダ (misc/dashboard/builder/main.go) に、Plan 9オペレーティングシステム向けの環境変数を追加するものです。具体的には、objtypecputypepath の各変数が、ビルダのサブプロセスに引き継がれる extraEnv リストに追加されています。これにより、Plan 9環境でのGoのビルドプロセスが適切に機能するようになります。

コミット

commit 252161cadcfef4c42c133ba55c74672f520ab80e
Author: Anthony Martin <ality@pbrane.org>
Date:   Fri May 31 12:18:43 2013 -0700

    misc/dashboard/builder: add environment variables for Plan 9

    We require $objtype in make.rc and rc needs $path for finding commands.

    Also include $cputype which we may use in the future.

    R=golang-dev, minux.ma, r
    CC=golang-dev
    https://golang.org/cl/9905043

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/252161cadcfef4c42c133ba55c74672f520ab80e

元コミット内容

misc/dashboard/builder: add environment variables for Plan 9

We require $objtype in make.rc and rc needs $path for finding commands.

Also include $cputype which we may use in the future.

変更の背景

この変更の背景には、Go言語が様々なオペレーティングシステムやアーキテクチャをサポートするという設計思想があります。Goプロジェクトのダッシュボードビルダは、Goのコードベースを異なる環境でビルドし、テストを実行するための重要なインフラストラクチャの一部です。

Plan 9は、ベル研究所で開発された分散オペレーティングシステムであり、Go言語の設計に大きな影響を与えたことで知られています。Go言語自体がPlan 9の思想を多く取り入れているため、GoがPlan 9環境で動作することは自然な流れでした。

しかし、Goのビルドプロセス、特にPlan 9環境下でのビルドにおいては、特定の環境変数が必要とされます。コミットメッセージによると、make.rc (Plan 9におけるMakefileのようなもの) が $objtype を必要とし、Plan 9のシェルである rc がコマンドを見つけるために $path を必要としていました。これらの環境変数がGoビルダのサブプロセスに適切に引き継がれないと、Plan 9上でのGoのビルドが失敗する可能性がありました。

このコミットは、これらの不足している環境変数をGoビルダがサブプロセスに渡すようにすることで、Plan 9環境でのGoのビルドとテストの信頼性を向上させることを目的としています。また、将来的に使用される可能性のある $cputype も含めることで、将来的な互換性や機能拡張に備えています。

前提知識の解説

このコミットを理解するためには、以下の前提知識が役立ちます。

  1. Plan 9 from Bell Labs:

    • ベル研究所で開発された分散オペレーティングシステム。
    • 「すべてをファイルとして扱う」という哲学が特徴で、デバイス、プロセス、ネットワークリソースなど、あらゆるものがファイルシステムのエントリとして表現されます。
    • Go言語の設計思想(特に並行性、モジュール性、シンプルなインターフェース)に大きな影響を与えました。
    • 主要なシェルは rc と呼ばれます。
    • ビルドシステムには mkmake.rc が使われます。
  2. Go言語のビルドシステム:

    • Go言語は、クロスコンパイルを強力にサポートしています。これは、あるOS/アーキテクチャ上で、別のOS/アーキテクチャ向けのバイナリを生成できることを意味します。
    • Goのビルドプロセスは、環境変数(例: GOOS, GOARCH, GOROOT, GOPATH など)に大きく依存します。これらの変数は、コンパイラやリンカの動作、依存関係の解決などに影響を与えます。
  3. Goダッシュボードとビルダ:

    • Goプロジェクトには、継続的インテグレーション(CI)システムとして機能する「Goダッシュボード」があります。これは、様々なOS/アーキテクチャの組み合わせでGoのコードベースを自動的にビルドし、テストを実行し、その結果を報告します。
    • 「ビルダ」は、このダッシュボードシステムの一部であり、特定の環境(この場合はPlan 9)で実際にビルドとテストを実行するエージェントです。ビルダは、Goのソースコードを取得し、コンパイルし、テストを実行するために、サブプロセスを起動します。
  4. 環境変数:

    • オペレーティングシステムが提供する、プロセスが利用できる動的な名前付き値です。
    • プログラムの動作を制御したり、パス情報を提供したりするために使用されます。
    • Plan 9では、$varname の形式で参照されます。
  5. Plan 9特有の環境変数:

    • $objtype: Plan 9のビルドシステムで使用される変数で、オブジェクトファイルのタイプ(例: 386, amd64, arm など)を示すことが多いです。これは、クロスコンパイルや異なるアーキテクチャ向けのビルドにおいて、適切なバイナリ形式を選択するために重要です。
    • $cputype: 現在のCPUアーキテクチャを示す変数です。objtype と似ていますが、より一般的なCPUタイプを指すことがあります。
    • $path: Unix系の PATH 環境変数に相当し、シェルがコマンドを実行する際に実行可能ファイルを探すディレクトリのリストを定義します。Plan 9の rc シェルがコマンドを見つけるために不可欠です。

技術的詳細

このコミットは、Goダッシュボードのビルダがサブプロセスを起動する際に、特定の環境変数を引き継ぐメカニズムを拡張しています。

misc/dashboard/builder/main.go ファイルは、Goダッシュボードのビルダプログラムの主要な部分です。このファイルには、ビルダがその子プロセスに渡すべき環境変数のリスト extraEnv が定義されています。

変更前は、extraEnv には CC, GOARM, PATH, TMPDIR, USER といった一般的なUnix系の環境変数が含まれていました。しかし、Plan 9環境でGoをビルドする際には、Plan 9独自のビルドツールやシェルが依存する環境変数(objtype, cputype, path)が不足していました。

このコミットでは、extraEnv リストに以下の3つの変数が追加されました。

  • objtype: Plan 9のビルドスクリプト (make.rc など) が、ターゲットアーキテクチャに応じたオブジェクトファイルの種類を識別するために使用します。例えば、objtype=386objtype=amd64 のように設定され、適切なコンパイルパスやライブラリが選択されます。
  • cputype: 現在のCPUタイプを示す変数です。objtype とは異なり、より一般的なCPUのカテゴリを示すことが多いですが、ビルドプロセスで特定のCPUに最適化されたコードパスを選択するために利用される可能性があります。コミットメッセージでは「将来的に使用される可能性」が示唆されています。
  • path: Plan 9の rc シェルが実行可能ファイルを探すためのパスです。Unix系の PATH と同様の役割を果たしますが、Plan 9のシェル環境に特化しています。これが設定されていないと、ビルドスクリプト内で呼び出されるコマンドが見つからず、ビルドが失敗します。

これらの変数を extraEnv に追加することで、GoビルダがPlan 9上でGoのビルドプロセスを起動する際に、子プロセス(コンパイラ、リンカ、シェルスクリプトなど)がこれらの重要な環境変数を継承し、正しく動作できるようになります。これにより、Plan 9環境でのGoのビルドの安定性と互換性が確保されます。

また、既存の CC 変数については、コメントが追加され「For Unix derivatives.」と明記されています。これは、CC が主にUnix系システムでCコンパイラを指定するために使われることを示唆しており、Plan 9特有の変数とは区別されています。ただし、CC 自体は削除されずに残っており、これはUnix系とPlan 9の両方でビルダが動作することを前提としているためと考えられます。

コアとなるコードの変更箇所

変更は misc/dashboard/builder/main.go ファイルの extraEnv 変数の定義部分に集中しています。

--- a/misc/dashboard/builder/main.go
+++ b/misc/dashboard/builder/main.go
@@ -31,11 +31,18 @@ const (
 // These variables are copied from the gobuilder's environment
 // to the envv of its subprocesses.
 var extraEnv = []string{
-\t"CC",
 \t"GOARM",
+\
+\t// For Unix derivatives.
+\t"CC",
 \t"PATH",
 \t"TMPDIR",
 \t"USER",
+\
+\t// For Plan 9.
+\t"objtype",
+\t"cputype",
+\t"path",
 }
 
 type Builder struct {

コアとなるコードの解説

extraEnv は、Goビルダが起動するサブプロセスに引き継がれる環境変数名の文字列スライスです。

元のコードでは、以下の変数が含まれていました。

  • "CC": Cコンパイラを指定するための変数。
  • "GOARM": ARMアーキテクチャ向けのGoビルドに関する設定(例: ARMv5, ARMv6, ARMv7のどのバージョンをターゲットにするか)
  • "PATH": 実行可能ファイルの検索パス。
  • "TMPDIR": 一時ディレクトリのパス。
  • "USER": 現在のユーザー名。

このコミットでは、"CC" の位置が少し移動し、その上に「// For Unix derivatives.」というコメントが追加されました。これは、CC が主にUnix系のシステムで関連する変数であることを明確にするためです。

そして、新たに以下の3つの変数が追加されました。

  • "objtype": Plan 9のビルドシステムが使用するオブジェクトタイプ(例: 386, amd64 など)を指定します。
  • "cputype": Plan 9のCPUタイプを指定します。
  • "path": Plan 9の rc シェルがコマンドを検索するためのパス。これはUnix系の PATH と同様の機能ですが、Plan 9環境に特化しています。

これらの追加により、GoビルダがPlan 9環境でGoのビルドやテストを実行する際に、Plan 9のツールチェインやシェルが正しく動作するために必要な環境変数が、子プロセスに確実に渡されるようになります。これにより、Plan 9上でのGoのビルドの互換性と安定性が向上します。

関連リンク

参考にした情報源リンク

  • Go言語のコミット履歴 (GitHub): https://github.com/golang/go/commits/master
  • Go Code Review (Gerrit): https://go-review.googlesource.com/ (コミットメッセージに記載されている https://golang.org/cl/9905043 は、Gerritの変更リストへのリンクです。)
  • Plan 9環境変数に関する一般的な情報 (Web検索結果に基づく)
  • Goのビルドシステムに関する一般的な情報 (Web検索結果に基づく)
  • make.rc および rc シェルに関する情報 (Web検索結果に基づく)

[インデックス 16451] ファイルの概要

このコミットは、Goプロジェクトのダッシュボードビルダ (misc/dashboard/builder/main.go) に、Plan 9オペレーティングシステム向けの環境変数を追加するものです。具体的には、objtypecputypepath の各変数が、ビルダのサブプロセスに引き継がれる extraEnv リストに追加されています。これにより、Plan 9環境でのGoのビルドプロセスが適切に機能するようになります。

コミット

commit 252161cadcfef4c42c133ba55c74672f520ab80e
Author: Anthony Martin <ality@pbrane.org>
Date:   Fri May 31 12:18:43 2013 -0700

    misc/dashboard/builder: add environment variables for Plan 9

    We require $objtype in make.rc and rc needs $path for finding commands.

    Also include $cputype which we may use in the future.

    R=golang-dev, minux.ma, r
    CC=golang-dev
    https://golang.org/cl/9905043

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/252161cadcfef4c42c133ba55c74672f520ab80e

元コミット内容

misc/dashboard/builder: add environment variables for Plan 9

We require $objtype in make.rc and rc needs $path for finding commands.

Also include $cputype which we may use in the future.

変更の背景

この変更の背景には、Go言語が様々なオペレーティングシステムやアーキテクチャをサポートするという設計思想があります。Goプロジェクトのダッシュボードビルダは、Goのコードベースを異なる環境でビルドし、テストを実行するための重要なインフラストラクチャの一部です。

Plan 9は、ベル研究所で開発された分散オペレーティングシステムであり、Go言語の設計に大きな影響を与えたことで知られています。Go言語自体がPlan 9の思想を多く取り入れているため、GoがPlan 9環境で動作することは自然な流れでした。

しかし、Goのビルドプロセス、特にPlan 9環境下でのビルドにおいては、特定の環境変数が必要とされます。コミットメッセージによると、make.rc (Plan 9におけるMakefileのようなもの) が $objtype を必要とし、Plan 9のシェルである rc がコマンドを見つけるために $path を必要としていました。これらの環境変数がGoビルダのサブプロセスに適切に引き継がれないと、Plan 9上でのGoのビルドが失敗する可能性がありました。

このコミットは、これらの不足している環境変数をGoビルダがサブプロセスに渡すようにすることで、Plan 9環境でのGoのビルドとテストの信頼性を向上させることを目的としています。また、将来的に使用される可能性のある $cputype も含めることで、将来的な互換性や機能拡張に備えています。

前提知識の解説

このコミットを理解するためには、以下の前提知識が役立ちます。

  1. Plan 9 from Bell Labs:

    • ベル研究所で開発された分散オペレーティングシステム。
    • 「すべてをファイルとして扱う」という哲学が特徴で、デバイス、プロセス、ネットワークリソースなど、あらゆるものがファイルシステムのエントリとして表現されます。
    • Go言語の設計思想(特に並行性、モジュール性、シンプルなインターフェース)に大きな影響を与えました。
    • 主要なシェルは rc と呼ばれます。
    • ビルドシステムには mkmake.rc が使われます。
  2. Go言語のビルドシステム:

    • Go言語は、クロスコンパイルを強力にサポートしています。これは、あるOS/アーキテクチャ上で、別のOS/アーキテクチャ向けのバイナリを生成できることを意味します。
    • Goのビルドプロセスは、環境変数(例: GOOS, GOARCH, GOROOT, GOPATH など)に大きく依存します。これらの変数は、コンパイラやリンカの動作、依存関係の解決などに影響を与えます。
  3. Goダッシュボードとビルダ:

    • Goプロジェクトには、継続的インテグレーション(CI)システムとして機能する「Goダッシュボード」があります。これは、様々なOS/アーキテクチャの組み合わせでGoのコードベースを自動的にビルドし、テストを実行し、その結果を報告します。
    • 「ビルダ」は、このダッシュボードシステムの一部であり、特定の環境(この場合はPlan 9)で実際にビルドとテストを実行するエージェントです。ビルダは、Goのソースコードを取得し、コンパイルし、テストを実行するために、サブプロセスを起動します。
  4. 環境変数:

    • オペレーティングシステムが提供する、プロセスが利用できる動的な名前付き値です。
    • プログラムの動作を制御したり、パス情報を提供したりするために使用されます。
    • Plan 9では、$varname の形式で参照されます。
  5. Plan 9特有の環境変数:

    • $objtype: Plan 9のビルドシステムで使用される変数で、オブジェクトファイルのタイプ(例: 386, amd64, arm など)を示すことが多いです。これは、クロスコンパイルや異なるアーキテクチャ向けのビルドにおいて、適切なバイナリ形式を選択するために重要です。cputype とは異なり、コンパイルのターゲットアーキテクチャを指定するために変更可能です。
    • $cputype: 現在のCPUアーキテクチャを示す変数です。objtype と似ていますが、より一般的なCPUタイプを指すことが多く、通常はカーネルによって設定され、変更すべきではありません。
    • $path: Unix系の PATH 環境変数に相当し、シェルがコマンドを実行する際に実行可能ファイルを探すディレクトリのリストを定義します。Plan 9の rc シェルがコマンドを見つけるために不可欠です。Plan 9では、ヌル文字 (\000) をセパレータとして使用することが特徴です。

技術的詳細

このコミットは、Goダッシュボードのビルダがサブプロセスを起動する際に、特定の環境変数を引き継ぐメカニズムを拡張しています。

misc/dashboard/builder/main.go ファイルは、Goダッシュボードのビルダプログラムの主要な部分です。このファイルには、ビルダがその子プロセスに渡すべき環境変数のリスト extraEnv が定義されています。

変更前は、extraEnv には CC, GOARM, PATH, TMPDIR, USER といった一般的なUnix系の環境変数が含まれていました。しかし、Plan 9環境でGoをビルドする際には、Plan 9独自のビルドツールやシェルが依存する環境変数(objtype, cputype, path)が不足していました。

このコミットでは、extraEnv リストに以下の3つの変数が追加されました。

  • objtype: Plan 9のビルドスクリプト (make.rc など) が、ターゲットアーキテクチャに応じたオブジェクトファイルの種類を識別するために使用します。例えば、objtype=386objtype=amd64 のように設定され、適切なコンパイルパスやライブラリが選択されます。これは、クロスコンパイルの文脈で特に重要です。
  • cputype: 現在のCPUタイプを示す変数です。objtype とは異なり、より一般的なCPUのカテゴリを示すことが多いですが、ビルドプロセスで特定のCPUに最適化されたコードパスを選択するために利用される可能性があります。コミットメッセージでは「将来的に使用される可能性」が示唆されています。
  • path: Plan 9の rc シェルが実行可能ファイルを探すためのパスです。Unix系の PATH と同様の役割を果たしますが、Plan 9のシェル環境に特化しています。これが設定されていないと、ビルドスクリプト内で呼び出されるコマンドが見つからず、ビルドが失敗します。

これらの変数を extraEnv に追加することで、GoビルダがPlan 9上でGoのビルドプロセスを起動する際に、子プロセス(コンパイラ、リンカ、シェルスクリプトなど)がこれらの重要な環境変数を継承し、正しく動作できるようになります。これにより、Plan 9環境でのGoのビルドの安定性と互換性が確保されます。

また、既存の CC 変数については、コメントが追加され「For Unix derivatives.」と明記されています。これは、CC が主にUnix系システムでCコンパイラを指定するために使われることを示唆しており、Plan 9特有の変数とは区別されています。ただし、CC 自体は削除されずに残っており、これはUnix系とPlan 9の両方でビルダが動作することを前提としているためと考えられます。

コアとなるコードの変更箇所

変更は misc/dashboard/builder/main.go ファイルの extraEnv 変数の定義部分に集中しています。

--- a/misc/dashboard/builder/main.go
+++ b/misc/dashboard/builder/main.go
@@ -31,11 +31,18 @@ const (
 // These variables are copied from the gobuilder's environment
 // to the envv of its subprocesses.
 var extraEnv = []string{
-\t"CC",
 \t"GOARM",
+\
+\t// For Unix derivatives.
+\t"CC",
 \t"PATH",
 \t"TMPDIR",
 \t"USER",
+\
+\t// For Plan 9.
+\t"objtype",
+\t"cputype",
+\t"path",
 }
 
 type Builder struct {

コアとなるコードの解説

extraEnv は、Goビルダが起動するサブプロセスに引き継がれる環境変数名の文字列スライスです。

元のコードでは、以下の変数が含まれていました。

  • "CC": Cコンパイラを指定するための変数。
  • "GOARM": ARMアーキテクチャ向けのGoビルドに関する設定(例: ARMv5, ARMv6, ARMv7のどのバージョンをターゲットにするか)
  • "PATH": 実行可能ファイルの検索パス。
  • "TMPDIR": 一時ディレクトリのパス。
  • "USER": 現在のユーザー名。

このコミットでは、"CC" の位置が少し移動し、その上に「// For Unix derivatives.」というコメントが追加されました。これは、CC が主にUnix系のシステムで関連する変数であることを明確にするためです。

そして、新たに以下の3つの変数が追加されました。

  • "objtype": Plan 9のビルドシステムが使用するオブジェクトタイプ(例: 386, amd64 など)を指定します。これは、クロスコンパイルのターゲットアーキテクチャを決定するために重要です。
  • "cputype": Plan 9のCPUタイプを指定します。これは通常、実行中のCPUアーキテクチャを示しますが、将来的に特定のCPUに最適化されたコードパスを選択するために利用される可能性があります。
  • "path": Plan 9の rc シェルがコマンドを検索するためのパス。これはUnix系の PATH と同様の機能ですが、Plan 9環境に特化しており、ヌル文字をセパレータとして使用します。

これらの追加により、GoビルダがPlan 9環境でGoのビルドやテストを実行する際に、Plan 9のツールチェインやシェルが正しく動作するために必要な環境変数が、子プロセスに確実に渡されるようになります。これにより、Plan 9上でのGoのビルドの互換性と安定性が向上します。

関連リンク

参考にした情報源リンク

  • Go言語のコミット履歴 (GitHub): https://github.com/golang/go/commits/master
  • Go Code Review (Gerrit): https://go-review.googlesource.com/ (コミットメッセージに記載されている https://golang.org/cl/9905043 は、Gerritの変更リストへのリンクです。)
  • Plan 9環境変数に関する一般的な情報 (Web検索結果に基づく)
  • Goのビルドシステムに関する一般的な情報 (Web検索結果に基づく)
  • make.rc および rc シェルに関する情報 (Web検索結果に基づく)
  • Web search results for "Plan 9 environment variables objtype cputype path" (Google Web Search)

[インデックス 16451] ファイルの概要

このコミットは、Goプロジェクトのダッシュボードビルダ (misc/dashboard/builder/main.go) に、Plan 9オペレーティングシステム向けの環境変数を追加するものです。具体的には、objtypecputypepath の各変数が、ビルダのサブプロセスに引き継がれる extraEnv リストに追加されています。これにより、Plan 9環境でのGoのビルドプロセスが適切に機能するようになります。

コミット

commit 252161cadcfef4c42c133ba55c74672f520ab80e
Author: Anthony Martin <ality@pbrane.org>
Date:   Fri May 31 12:18:43 2013 -0700

    misc/dashboard/builder: add environment variables for Plan 9

    We require $objtype in make.rc and rc needs $path for finding commands.

    Also include $cputype which we may use in the future.

    R=golang-dev, minux.ma, r
    CC=golang-dev
    https://golang.org/cl/9905043

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/252161cadcfef4c42c133ba55c74672f520ab80e

元コミット内容

misc/dashboard/builder: add environment variables for Plan 9

We require $objtype in make.rc and rc needs $path for finding commands.

Also include $cputype which we may use in the future.

変更の背景

この変更の背景には、Go言語が様々なオペレーティングシステムやアーキテクチャをサポートするという設計思想があります。Goプロジェクトのダッシュボードビルダは、Goのコードベースを異なる環境でビルドし、テストを実行するための重要なインフラストラクチャの一部です。

Plan 9は、ベル研究所で開発された分散オペレーティングシステムであり、Go言語の設計に大きな影響を与えたことで知られています。Go言語自体がPlan 9の思想を多く取り入れているため、GoがPlan 9環境で動作することは自然な流れでした。

しかし、Goのビルドプロセス、特にPlan 9環境下でのビルドにおいては、特定の環境変数が必要とされます。コミットメッセージによると、make.rc (Plan 9におけるMakefileのようなもの) が $objtype を必要とし、Plan 9のシェルである rc がコマンドを見つけるために $path を必要としていました。これらの環境変数がGoビルダのサブプロセスに適切に引き継がれないと、Plan 9上でのGoのビルドが失敗する可能性がありました。

このコミットは、これらの不足している環境変数をGoビルダがサブプロセスに渡すようにすることで、Plan 9環境でのGoのビルドとテストの信頼性を向上させることを目的としています。また、将来的に使用される可能性のある $cputype も含めることで、将来的な互換性や機能拡張に備えています。

前提知識の解説

このコミットを理解するためには、以下の前提知識が役立ちます。

  1. Plan 9 from Bell Labs:

    • ベル研究所で開発された分散オペレーティングシステム。
    • 「すべてをファイルとして扱う」という哲学が特徴で、デバイス、プロセス、ネットワークリソースなど、あらゆるものがファイルシステムのエントリとして表現されます。
    • Go言語の設計思想(特に並行性、モジュール性、シンプルなインターフェース)に大きな影響を与えました。
    • 主要なシェルは rc と呼ばれます。
    • ビルドシステムには mkmake.rc が使われます。
  2. Go言語のビルドシステム:

    • Go言語は、クロスコンパイルを強力にサポートしています。これは、あるOS/アーキテクチャ上で、別のOS/アーキテクチャ向けのバイナリを生成できることを意味します。
    • Goのビルドプロセスは、環境変数(例: GOOS, GOARCH, GOROOT, GOPATH など)に大きく依存します。これらの変数は、コンパイラやリンカの動作、依存関係の解決などに影響を与えます。
  3. Goダッシュボードとビルダ:

    • Goプロジェクトには、継続的インテグレーション(CI)システムとして機能する「Goダッシュボード」があります。これは、様々なOS/アーキテクチャの組み合わせでGoのコードベースを自動的にビルドし、テストを実行し、その結果を報告します。
    • 「ビルダ」は、このダッシュボードシステムの一部であり、特定の環境(この場合はPlan 9)で実際にビルドとテストを実行するエージェントです。ビルダは、Goのソースコードを取得し、コンパイルし、テストを実行するために、サブプロセスを起動します。
  4. 環境変数:

    • オペレーティングシステムが提供する、プロセスが利用できる動的な名前付き値です。
    • プログラムの動作を制御したり、パス情報を提供したりするために使用されます。
    • Plan 9では、$varname の形式で参照されます。
  5. Plan 9特有の環境変数:

    • $objtype: Plan 9のビルドシステムで使用される変数で、オブジェクトファイルのタイプ(例: 386, amd64, arm など)を示すことが多いです。これは、クロスコンパイルや異なるアーキテクチャ向けのビルドにおいて、適切なバイナリ形式を選択するために重要です。cputype とは異なり、コンパイルのターゲットアーキテクチャを指定するために変更可能です。
    • $cputype: 現在のCPUアーキテクチャを示す変数です。objtype と似ていますが、より一般的なCPUタイプを指すことが多く、通常はカーネルによって設定され、変更すべきではありません。
    • $path: Unix系の PATH 環境変数に相当し、シェルがコマンドを実行する際に実行可能ファイルを探すディレクトリのリストを定義します。Plan 9の rc シェルがコマンドを見つけるために不可欠です。Plan 9では、ヌル文字 (\000) をセパレータとして使用することが特徴です。

技術的詳細

このコミットは、Goダッシュボードのビルダがサブプロセスを起動する際に、特定の環境変数を引き継ぐメカニズムを拡張しています。

misc/dashboard/builder/main.go ファイルは、Goダッシュボードのビルダプログラムの主要な部分です。このファイルには、ビルダがその子プロセスに渡すべき環境変数のリスト extraEnv が定義されています。

変更前は、extraEnv には CC, GOARM, PATH, TMPDIR, USER といった一般的なUnix系の環境変数が含まれていました。しかし、Plan 9環境でGoをビルドする際には、Plan 9独自のビルドツールやシェルが依存する環境変数(objtype, cputype, path)が不足していました。

このコミットでは、extraEnv リストに以下の3つの変数が追加されました。

  • objtype: Plan 9のビルドスクリプト (make.rc など) が、ターゲットアーキテクチャに応じたオブジェクトファイルの種類を識別するために使用します。例えば、objtype=386objtype=amd64 のように設定され、適切なコンパイルパスやライブラリが選択されます。これは、クロスコンパイルの文脈で特に重要です。
  • cputype: 現在のCPUタイプを示す変数です。objtype とは異なり、より一般的なCPUのカテゴリを示すことが多いですが、ビルドプロセスで特定のCPUに最適化されたコードパスを選択するために利用される可能性があります。コミットメッセージでは「将来的に使用される可能性」が示唆されています。
  • path: Plan 9の rc シェルが実行可能ファイルを探すためのパスです。Unix系の PATH と同様の役割を果たしますが、Plan 9のシェル環境に特化しています。これが設定されていないと、ビルドスクリプト内で呼び出されるコマンドが見つからず、ビルドが失敗します。

これらの変数を extraEnv に追加することで、GoビルダがPlan 9上でGoのビルドプロセスを起動する際に、子プロセス(コンパイラ、リンカ、シェルスクリプトなど)がこれらの重要な環境変数を継承し、正しく動作できるようになります。これにより、Plan 9環境でのGoのビルドの安定性と互換性が確保されます。

また、既存の CC 変数については、コメントが追加され「For Unix derivatives.」と明記されています。これは、CC が主にUnix系システムでCコンパイラを指定するために使われることを示唆しており、Plan 9特有の変数とは区別されています。ただし、CC 自体は削除されずに残っており、これはUnix系とPlan 9の両方でビルダが動作することを前提としているためと考えられます。

コアとなるコードの変更箇所

変更は misc/dashboard/builder/main.go ファイルの extraEnv 変数の定義部分に集中しています。

--- a/misc/dashboard/builder/main.go
+++ b/misc/dashboard/builder/main.go
@@ -31,11 +31,18 @@ const (
 // These variables are copied from the gobuilder's environment
 // to the envv of its subprocesses.
 var extraEnv = []string{
-\t"CC",
 \t"GOARM",
+\
+\t// For Unix derivatives.
+\t"CC",
 \t"PATH",
 \t"TMPDIR",
 \t"USER",
+\
+\t// For Plan 9.
+\t"objtype",
+\t"cputype",
+\t"path",
 }
 
 type Builder struct {

コアとなるコードの解説

extraEnv は、Goビルダが起動するサブプロセスに引き継がれる環境変数名の文字列スライスです。

元のコードでは、以下の変数が含まれていました。

  • "CC": Cコンパイラを指定するための変数。
  • "GOARM": ARMアーキテクチャ向けのGoビルドに関する設定(例: ARMv5, ARMv6, ARMv7のどのバージョンをターゲットにするか)
  • "PATH": 実行可能ファイルの検索パス。
  • "TMPDIR": 一時ディレクトリのパス。
  • "USER": 現在のユーザー名。

このコミットでは、"CC" の位置が少し移動し、その上に「// For Unix derivatives.」というコメントが追加されました。これは、CC が主にUnix系のシステムで関連する変数であることを明確にするためです。

そして、新たに以下の3つの変数が追加されました。

  • "objtype": Plan 9のビルドシステムが使用するオブジェクトタイプ(例: 386, amd64 など)を指定します。これは、クロスコンパイルのターゲットアーキテクチャを決定するために重要です。
  • "cputype": Plan 9のCPUタイプを指定します。これは通常、実行中のCPUアーキテクチャを示しますが、将来的に特定のCPUに最適化されたコードパスを選択するために利用される可能性があります。
  • "path": Plan 9の rc シェルがコマンドを検索するためのパス。これはUnix系の PATH と同様の機能ですが、Plan 9環境に特化しており、ヌル文字をセパレータとして使用します。

これらの追加により、GoビルダがPlan 9環境でGoのビルドやテストを実行する際に、Plan 9のツールチェインやシェルが正しく動作するために必要な環境変数が、子プロセスに確実に渡されるようになります。これにより、Plan 9上でのGoのビルドの互換性と安定性が向上します。

関連リンク

参考にした情報源リンク

  • Go言語のコミット履歴 (GitHub): https://github.com/golang/go/commits/master
  • Go Code Review (Gerrit): https://go-review.googlesource.com/ (コミットメッセージに記載されている https://golang.org/cl/9905043 は、Gerritの変更リストへのリンクです。)
  • Plan 9環境変数に関する一般的な情報 (Web検索結果に基づく)
  • Goのビルドシステムに関する一般的な情報 (Web検索結果に基づく)
  • make.rc および rc シェルに関する情報 (Web検索結果に基づく)
  • Web search results for "Plan 9 environment variables objtype cputype path" (Google Web Search)