[インデックス 12443] ファイルの概要
コミット
このコミットは、Go言語の実験的なWindows GUIパッケージである exp/wingui
の Makefile
から、Make.inc
および Make.cmd
への参照を削除するものです。これにより、このパッケージのビルドプロセスが、Goプロジェクト全体の共通ビルドインフラストラクチャから独立し、より自己完結型になることを目的としています。また、mksyscall_windows.pl
スクリプトへのパスも、GOROOT
を基準とした絶対パスから相対パスに変更されています。
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/544a72cc86b9226f359bcce5aedd5010eb476ace
元コミット内容
exp/wingui: remove reference to Make.inc
R=golang-dev, bradfitz, alex.brainman
CC=golang-dev
https://golang.org/cl/5757058
変更の背景
この変更は、Go言語のビルドシステムが進化する過程の一部として行われました。初期のGoプロジェクトでは、Make.inc
や Make.cmd
といった共通の Makefile
インクルードファイルを使用して、プロジェクト全体のビルド設定やルールを一元的に管理していました。しかし、Goのビルドシステムは go build
コマンドを中心としたよりシンプルで宣言的なアプローチへと移行していきました。
exp/wingui
のような実験的なパッケージは、Goの標準ライブラリとは異なるライフサイクルを持つことが多く、そのビルドプロセスをメインのGoツリーのビルドシステムから切り離すことで、独立した開発やテストを容易にする意図があったと考えられます。Makefile
から Make.inc
への参照を削除することは、このパッケージがもはやGoの伝統的な Makefile
ベースのビルドシステムに依存しないことを意味します。これにより、go build
などのGoツールチェーンが直接このパッケージをビルドできるようになり、ビルドプロセスの簡素化と独立性の向上が図られました。
また、mksyscall_windows.pl
へのパスが絶対パスから相対パスに変更されたのは、ビルド環境の柔軟性を高め、GOROOT
が特定の場所に固定されているという前提を緩和するためと考えられます。
前提知識の解説
- Go言語のビルドシステム: Go言語は、
go build
コマンドを中心とした独自のビルドシステムを持っています。これは、ソースコードの依存関係を自動的に解決し、実行可能ファイルやライブラリを生成します。初期のGoプロジェクトでは、Makefile
が広く使われていましたが、Goツールチェーンの成熟とともに、Makefile
の使用は減少し、go build
が主流となりました。 Makefile
:Makefile
は、プログラムのコンパイルやビルドプロセスを自動化するためのファイルです。make
コマンドによって解釈され、依存関係に基づいてコマンドを実行します。include
ディレクティブを使用することで、他のMakefile
を取り込むことができます。Make.inc
/Make.cmd
: Goプロジェクトの初期段階で使われていた共通のMakefile
インクルードファイルです。これらには、Goプロジェクト全体のビルドに関する共通の変数定義、ルール、関数などが含まれていました。Make.inc
はUnix系システム向け、Make.cmd
はWindowsシステム向けの共通設定を含んでいた可能性があります。exp/wingui
: Go言語のexp
(experimental) リポジトリに含まれるパッケージの一つで、WindowsのGUIアプリケーション開発を目的とした実験的なライブラリです。exp
リポジトリのパッケージは、標準ライブラリに統合される前に、新しいアイデアやAPIを試すために使用されます。mksyscall_windows.pl
: Go言語のソースツリー内にあるPerlスクリプトです。このスクリプトは、Windows APIの関数定義から、Go言語のシステムコール(syscall)バインディングを自動生成するために使用されます。これにより、GoプログラムからWindowsのネイティブAPIを呼び出すことが可能になります。
技術的詳細
このコミットの技術的な核心は、src/pkg/exp/wingui/Makefile
の大幅な変更にあります。
-
共通
Makefile
インクルードの削除:include ../../../Make.inc
include ../../../Make.cmd
これらの行が削除されたことで、exp/wingui
のビルドは、Goプロジェクト全体の共通ビルド設定(GOOS
の定義、LD
フラグ、TARG
、GOFILES
のリストなど)に依存しなくなりました。これにより、exp/wingui
は独自のビルドロジックを持つか、あるいはgo build
コマンドによって直接ビルドされることを前提とするようになりました。 削除された行には、GOOS=windows
やLD:=$(LD) -Hwindowsgui
といったWindows固有のビルド設定が含まれていました。これらの設定がMakefile
から削除されたことは、これらの設定がもはやMakefile
で明示的に管理される必要がなくなり、Goツールチェーンが自動的に適切な設定を適用するか、あるいはパッケージ自体がこれらの設定を内部的に処理するようになったことを示唆しています。
-
mksyscall_windows.pl
へのパス変更:- 変更前:
$(GOROOT)/src/pkg/syscall/mksyscall_windows.pl $<)
- 変更後:
../../syscall/mksyscall_windows.pl $<)
この変更は、mksyscall_windows.pl
スクリプトへの参照方法を改善しています。以前はGOROOT
環境変数に依存する絶対パスを使用していましたが、新しいパスはsrc/pkg/exp/wingui/Makefile
から見た相対パスです。これにより、GOROOT
が設定されていない環境や、Goソースツリーが非標準的な場所に配置されている場合でも、ビルドがより堅牢になります。これは、Goプロジェクトがビルドシステムの柔軟性とポータビリティを向上させる一般的な傾向と一致しています。
- 変更前:
この変更は、exp/wingui
パッケージがGoの標準的なビルドツール(go build
)によってビルドされることを前提とし、Makefile
は zwinapi.go
の生成といった特定のタスクに特化する方向性を示しています。
コアとなるコードの変更箇所
--- a/src/pkg/exp/wingui/Makefile
+++ b/src/pkg/exp/wingui/Makefile
@@ -2,23 +2,8 @@
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
-GOOS=windows
-\
-include ../../../Make.inc
-\
-LD:=$(LD) -Hwindowsgui
-\
-TARG=wingui
-\
-GOFILES=\\
-\tgui.go\\
-\twinapi.go\\
-\tzwinapi.go\\
-\
-include ../../../Make.cmd
-\
zwinapi.go: winapi.go
(echo '// +build windows'; \\
-\t$(GOROOT)/src/pkg/syscall/mksyscall_windows.pl $<) \\
+\t../../syscall/mksyscall_windows.pl $<) \\
| gofmt \\
> $@
コアとなるコードの解説
変更された Makefile
は、exp/wingui
パッケージのビルドプロセスを定義しています。
-
削除された行:
GOOS=windows
: ビルドターゲットOSを明示的にWindowsに設定していましたが、これはGoツールチェーンが自動的に判断するか、より上位のビルドスクリプトで設定されるようになりました。include ../../../Make.inc
およびinclude ../../../Make.cmd
: Goプロジェクト全体の共通ビルド設定を読み込むための行です。これらが削除されたことで、exp/wingui
はこれらの共通設定に依存しなくなりました。LD:=$(LD) -Hwindowsgui
: Windows GUIアプリケーションをビルドするためのリンカフラグを設定していました。これもGoツールチェーンが自動的に処理するか、他の方法で設定されるようになりました。TARG=wingui
: ビルドターゲットの名前を定義していました。GOFILES=\\ ...
: ビルド対象のGoソースファイルをリストアップしていました。Goツールチェーンは、パッケージ内のGoファイルを自動的に検出するため、このリストは不要になりました。
-
変更された行:
zwinapi.go: winapi.go
ルール内のmksyscall_windows.pl
へのパスが変更されました。$(GOROOT)/src/pkg/syscall/mksyscall_windows.pl $<)
から../../syscall/mksyscall_windows.pl $<)
へ。- この変更は、
zwinapi.go
ファイルを生成するためにmksyscall_windows.pl
スクリプトを実行する際のパス指定を、GOROOT
に依存しない相対パスに修正したものです。zwinapi.go
は、winapi.go
を入力として、WindowsシステムコールをGoで呼び出すためのコードを生成します。
この変更により、exp/wingui
の Makefile
は、zwinapi.go
の生成という特定のタスクに特化し、Goの標準的なビルドツールとの連携がよりスムーズになりました。
関連リンク
- Go言語の公式ドキュメント: https://go.dev/doc/
- Go言語の
exp
リポジトリ: https://pkg.go.dev/golang.org/x/exp (現在のx/exp
は当時のexp
とは異なる可能性がありますが、概念は類似しています) - Go言語の
syscall
パッケージ: https://pkg.go.dev/syscall
参考にした情報源リンク
- Go言語のコミット履歴 (GitHub): https://github.com/golang/go
- Go言語のコードレビューシステム (Gerrit): https://go.dev/cl/ (コミットメッセージに記載されている
https://golang.org/cl/5757058
は、当時のGerritの変更リストへのリンクです。) Makefile
の一般的な情報源 (例: GNU Make マニュアル): https://www.gnu.org/software/make/manual/- Go言語のビルドシステムに関する議論やドキュメント (Goの進化に伴い、様々な情報源が存在します)
mksyscall_windows.pl
のようなスクリプトに関するGoのソースコード内のコメントや関連ドキュメント。
[インデックス 12443] ファイルの概要
コミット
このコミットは、Go言語の実験的なWindows GUIパッケージである exp/wingui
の Makefile
から、Make.inc
および Make.cmd
への参照を削除するものです。これにより、このパッケージのビルドプロセスが、Goプロジェクト全体の共通ビルドインフラストラクチャから独立し、より自己完結型になることを目的としています。また、mksyscall_windows.pl
スクリプトへのパスも、GOROOT
を基準とした絶対パスから相対パスに変更されています。
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/544a72cc86b9226f359bcce5aedd5010eb476ace
元コミット内容
exp/wingui: remove reference to Make.inc
R=golang-dev, bradfitz, alex.brainman
CC=golang-dev
https://golang.org/cl/5757058
変更の背景
この変更は、Go言語のビルドシステムが進化する過程の一部として行われました。初期のGoプロジェクトでは、Make.inc
や Make.cmd
といった共通の Makefile
インクルードファイルを使用して、プロジェクト全体のビルド設定やルールを一元的に管理していました。しかし、Goのビルドシステムは go build
コマンドを中心としたよりシンプルで宣言的なアプローチへと移行していきました。
exp/wingui
のような実験的なパッケージは、Goの標準ライブラリとは異なるライフサイクルを持つことが多く、そのビルドプロセスをメインのGoツリーのビルドシステムから切り離すことで、独立した開発やテストを容易にする意図があったと考えられます。Makefile
から Make.inc
への参照を削除することは、このパッケージがもはやGoの伝統的な Makefile
ベースのビルドシステムに依存しないことを意味します。これにより、go build
などのGoツールチェーンが直接このパッケージをビルドできるようになり、ビルドプロセスの簡素化と独立性の向上が図られました。
また、mksyscall_windows.pl
へのパスが絶対パスから相対パスに変更されたのは、ビルド環境の柔軟性を高め、GOROOT
が特定の場所に固定されているという前提を緩和するためと考えられます。
前提知識の解説
- Go言語のビルドシステム: Go言語は、
go build
コマンドを中心とした独自のビルドシステムを持っています。これは、ソースコードの依存関係を自動的に解決し、実行可能ファイルやライブラリを生成します。初期のGoプロジェクトでは、Makefile
が広く使われていましたが、Goツールチェーンの成熟とともに、Makefile
の使用は減少し、go build
が主流となりました。 Makefile
:Makefile
は、プログラムのコンパイルやビルドプロセスを自動化するためのファイルです。make
コマンドによって解釈され、依存関係に基づいてコマンドを実行します。include
ディレクティブを使用することで、他のMakefile
を取り込むことができます。Make.inc
/Make.cmd
: Goプロジェクトの初期段階で使われていた共通のMakefile
インクルードファイルです。これらには、Goプロジェクト全体のビルドに関する共通の変数定義、ルール、関数などが含まれていました。Make.inc
はUnix系システム向け、Make.cmd
はWindowsシステム向けの共通設定を含んでいた可能性があります。これらのファイルは、make
のinclude
ディレクティブによって他のMakefile
に取り込まれ、共通のビルドロジックや設定を再利用するために使用されました。exp/wingui
: Go言語のexp
(experimental) リポジトリに含まれるパッケージの一つで、WindowsのGUIアプリケーション開発を目的とした実験的なライブラリです。exp
リポジトリのパッケージは、標準ライブラリに統合される前に、新しいアイデアやAPIを試すために使用されます。exp/wingui
は、WindowsのネイティブGUI(Win32 API)へのインターフェースを提供することを目的としていました。その実験的な性質と古さから、現在の標準Goディストリビューションには含まれていません。mksyscall_windows.pl
: Go言語のソースツリー内にあるPerlスクリプトです。このスクリプトは、Windows APIの関数定義から、Go言語のシステムコール(syscall)バインディングを自動生成するために使用されます。これにより、GoプログラムからWindowsのネイティブAPIを呼び出すことが可能になります。
技術的詳細
このコミットの技術的な核心は、src/pkg/exp/wingui/Makefile
の大幅な変更にあります。
-
共通
Makefile
インクルードの削除:include ../../../Make.inc
include ../../../Make.cmd
これらの行が削除されたことで、exp/wingui
のビルドは、Goプロジェクト全体の共通ビルド設定(GOOS
の定義、LD
フラグ、TARG
、GOFILES
のリストなど)に依存しなくなりました。これにより、exp/wingui
は独自のビルドロジックを持つか、あるいはgo build
コマンドによって直接ビルドされることを前提とするようになりました。 削除された行には、GOOS=windows
やLD:=$(LD) -Hwindowsgui
といったWindows固有のビルド設定が含まれていました。これらの設定がMakefile
から削除されたことは、これらの設定がもはやMakefile
で明示的に管理される必要がなくなり、Goツールチェーンが自動的に適切な設定を適用するか、あるいはパッケージ自体がこれらの設定を内部的に処理するようになったことを示唆しています。
-
mksyscall_windows.pl
へのパス変更:- 変更前:
$(GOROOT)/src/pkg/syscall/mksyscall_windows.pl $<)
- 変更後:
../../syscall/mksyscall_windows.pl $<)
この変更は、mksyscall_windows.pl
スクリプトへの参照方法を改善しています。以前はGOROOT
環境変数に依存する絶対パスを使用していましたが、新しいパスはsrc/pkg/exp/wingui/Makefile
から見た相対パスです。これにより、GOROOT
が設定されていない環境や、Goソースツリーが非標準的な場所に配置されている場合でも、ビルドがより堅牢になります。これは、Goプロジェクトがビルドシステムの柔軟性とポータビリティを向上させる一般的な傾向と一致しています。
- 変更前:
この変更は、exp/wingui
パッケージがGoの標準的なビルドツール(go build
)によってビルドされることを前提とし、Makefile
は zwinapi.go
の生成といった特定のタスクに特化する方向性を示しています。
コアとなるコードの変更箇所
--- a/src/pkg/exp/wingui/Makefile
+++ b/src/pkg/exp/wingui/Makefile
@@ -2,23 +2,8 @@
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
-GOOS=windows
-\
-include ../../../Make.inc
-\
-LD:=$(LD) -Hwindowsgui
-\
-TARG=wingui
-\
-GOFILES=\\
-\tgui.go\\
-\twinapi.go\\
-\tzwinapi.go\\
-\
-include ../../../Make.cmd
-\
zwinapi.go: winapi.go
(echo '// +build windows'; \\
-\t$(GOROOT)/src/pkg/syscall/mksyscall_windows.pl $<) \\
+\t../../syscall/mksyscall_windows.pl $<) \\
| gofmt \\
> $@
コアとなるコードの解説
変更された Makefile
は、exp/wingui
パッケージのビルドプロセスを定義しています。
-
削除された行:
GOOS=windows
: ビルドターゲットOSを明示的にWindowsに設定していましたが、これはGoツールチェーンが自動的に判断するか、より上位のビルドスクリプトで設定されるようになりました。include ../../../Make.inc
およびinclude ../../../Make.cmd
: Goプロジェクト全体の共通ビルド設定を読み込むための行です。これらが削除されたことで、exp/wingui
はこれらの共通設定に依存しなくなりました。LD:=$(LD) -Hwindowsgui
: Windows GUIアプリケーションをビルドするためのリンカフラグを設定していました。これもGoツールチェーンが自動的に処理するか、他の方法で設定されるようになりました。TARG=wingui
: ビルドターゲットの名前を定義していました。GOFILES=\\ ...
: ビルド対象のGoソースファイルをリストアップしていました。Goツールチェーンは、パッケージ内のGoファイルを自動的に検出するため、このリストは不要になりました。
-
変更された行:
zwinapi.go: winapi.go
ルール内のmksyscall_windows.pl
へのパスが変更されました。$(GOROOT)/src/pkg/syscall/mksyscall_windows.pl $<)
から../../syscall/mksyscall_windows.pl $<)
へ。- この変更は、
zwinapi.go
ファイルを生成するためにmksyscall_windows.pl
スクリプトを実行する際のパス指定を、GOROOT
に依存しない相対パスに修正したものです。zwinapi.go
は、winapi.go
を入力として、WindowsシステムコールをGoで呼び出すためのコードを生成します。
この変更により、exp/wingui
の Makefile
は、zwinapi.go
の生成という特定のタスクに特化し、Goの標準的なビルドツールとの連携がよりスムーズになりました。
関連リンク
- Go言語の公式ドキュメント: https://go.dev/doc/
- Go言語の
exp
リポジトリ: https://pkg.go.dev/golang.org/x/exp (現在のx/exp
は当時のexp
とは異なる可能性がありますが、概念は類似しています) - Go言語の
syscall
パッケージ: https://pkg.go.dev/syscall
参考にした情報源リンク
- Go言語のコミット履歴 (GitHub): https://github.com/golang/go
- Go言語のコードレビューシステム (Gerrit): https://go.dev/cl/ (コミットメッセージに記載されている
https://golang.org/cl/5757058
は、当時のGerritの変更リストへのリンクです。) Makefile
の一般的な情報源 (例: GNU Make マニュアル): https://www.gnu.org/software/make/manual/- Go言語のビルドシステムに関する議論やドキュメント (Goの進化に伴い、様々な情報源が存在します)
mksyscall_windows.pl
のようなスクリプトに関するGoのソースコード内のコメントや関連ドキュメント。- Web検索結果: "Go exp/wingui package", "Go Make.inc Make.cmd build system"