MacPortsでインストールしたgolangのコードにちょっと手を加えてbuildしてみる
MacPortsでインストールしたgolangのコードにちょっと手を加えてbuildしてみる
golang で今使っている go
コマンド自体のソースコードを見る方法が意外と楽に提供されているのでmemo。
現在の go
コマンドが利用しているソースコードの位置を調べる
go tool dist env
で表示されている GOROOT
の中を覗けば良い。
$ go tool dist env CC="clang" CC_FOR_TARGET="clang" GOROOT="/opt/local/go" GOBIN="/opt/local/go/bin" GOARCH="amd64" GOOS="darwin" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOTOOLDIR="/opt/local/go/pkg/tool/darwin_amd64" GOCHAR="6"
build方法
今使っている go
コマンド自体のbuildは以下の様にする
$ cd /opt/local/go $ cd src $ sudo su # . ./all.bash
どうせ今のmac自体を自分しか使わないというのであれば chown
で権限書き換えちゃって作業しても良いような気がする。
ちょっとだけ変更を加えてみる
build/build.goでimportPathに追加している部分を表示してみる。
diff --git a/go/build/build.go b/go/build/build.go index dd9e429..4688502 100644 --- a/go/build/build.go +++ b/go/build/build.go @@ -733,6 +733,7 @@ Found: testImported[path] = append(testImported[path], fset.Position(spec.Pos())) } else { pos := fset.Position(spec.Pos()) + fmt.Printf("path:%s, filename:%s, line: %d\n", path, pos.Filename, pos.Line); imported[path] = append(imported[path], fset.Position(spec.Pos())) } if path == "C" {
手元の環境では コンパイラに clang
を使うように環境変数を渡してあげないとダメだった。
テストなども全部走るので後で何が行われるか把握して省略できるところ省略していきたい。
$ pwd /opt/local/go/src $ CC=clang ./all.bash # Building C bootstrap tool. cmd/dist ... snip ok unicode/utf16 0.007s ok unicode/utf8 0.011s ? unsafe [no test files]
例えばこの時 hello.go のようなものを go run
なり go build
をするとimportのタイミングで読んでいるファイルが見えるようになる。
$ cat /tmp/hello.go package main import "fmt" func main() { fmt.Printf("hello world\n") } path:fmt, filename:/tmp/hello.go, line: 3 path:math, filename:/opt/local/go/src/fmt/format.go, line: 8 path:strconv, filename:/opt/local/go/src/fmt/format.go, line: 9 ... snip path:errors, filename:/opt/local/go/src/strconv/atoi.go, line: 7 path:math, filename:/opt/local/go/src/strconv/ftoa.go, line: 13 path:unicode/utf8, filename:/opt/local/go/src/strconv/quote.go, line: 10 hello world