[インデックス 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.incinclude ../../../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.incinclude ../../../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"