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

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

コミット

このコミットは、Go言語の実験的なWindows GUIパッケージである exp/winguiMakefile から、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.incMake.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 の大幅な変更にあります。

  1. 共通 Makefile インクルードの削除:

    • include ../../../Make.inc
    • include ../../../Make.cmd これらの行が削除されたことで、exp/wingui のビルドは、Goプロジェクト全体の共通ビルド設定(GOOS の定義、LD フラグ、TARGGOFILES のリストなど)に依存しなくなりました。これにより、exp/wingui は独自のビルドロジックを持つか、あるいは go build コマンドによって直接ビルドされることを前提とするようになりました。 削除された行には、GOOS=windowsLD:=$(LD) -Hwindowsgui といったWindows固有のビルド設定が含まれていました。これらの設定が Makefile から削除されたことは、これらの設定がもはや Makefile で明示的に管理される必要がなくなり、Goツールチェーンが自動的に適切な設定を適用するか、あるいはパッケージ自体がこれらの設定を内部的に処理するようになったことを示唆しています。
  2. 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)によってビルドされることを前提とし、Makefilezwinapi.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/winguiMakefile は、zwinapi.go の生成という特定のタスクに特化し、Goの標準的なビルドツールとの連携がよりスムーズになりました。

関連リンク

参考にした情報源リンク

  • 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/winguiMakefile から、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.incMake.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システム向けの共通設定を含んでいた可能性があります。これらのファイルは、makeinclude ディレクティブによって他の 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 の大幅な変更にあります。

  1. 共通 Makefile インクルードの削除:

    • include ../../../Make.inc
    • include ../../../Make.cmd これらの行が削除されたことで、exp/wingui のビルドは、Goプロジェクト全体の共通ビルド設定(GOOS の定義、LD フラグ、TARGGOFILES のリストなど)に依存しなくなりました。これにより、exp/wingui は独自のビルドロジックを持つか、あるいは go build コマンドによって直接ビルドされることを前提とするようになりました。 削除された行には、GOOS=windowsLD:=$(LD) -Hwindowsgui といったWindows固有のビルド設定が含まれていました。これらの設定が Makefile から削除されたことは、これらの設定がもはや Makefile で明示的に管理される必要がなくなり、Goツールチェーンが自動的に適切な設定を適用するか、あるいはパッケージ自体がこれらの設定を内部的に処理するようになったことを示唆しています。
  2. 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)によってビルドされることを前提とし、Makefilezwinapi.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/winguiMakefile は、zwinapi.go の生成という特定のタスクに特化し、Goの標準的なビルドツールとの連携がよりスムーズになりました。

関連リンク

参考にした情報源リンク

  • 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"