forked from lotia/homebrew-versions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
go12.rb
134 lines (114 loc) · 4.31 KB
/
go12.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
class Go12 < Formula
desc "Go programming environment (1.2)"
homepage "https://golang.org"
url "https://storage.googleapis.com/golang/go1.2.2.src.tar.gz"
version "1.2.2"
sha256 "fbcfe1fe6dfe660cae1c973811c5e2075e3f7b06feea32b4b91c7f0b48352391"
bottle do
revision 1
sha256 "ee3fbd6b03dd30ad1d6c7ceddb0bdb1996a92e330ce55824e297ab2d28e2c620" => :yosemite
sha256 "383187b7db521e111d94a92429e871d83c488160597c5ff4713edd97be9a106b" => :mavericks
sha256 "8dcc1ade8167d6eef201149818e670959c324b55a51cfce0a58dbbf7b67b4131" => :mountain_lion
end
option "with-cc-all", "Build with cross-compilers and runtime support for all supported platforms"
option "with-cc-common", "Build with cross-compilers and runtime support for darwin, linux and windows"
option "without-cgo", "Build without cgo"
option "without-godoc", "godoc will not be installed for you"
option "without-vet", "vet will not be installed for you"
deprecated_option "cross-compile-all" => "with-cc-all"
deprecated_option "cross-compile-common" => "with-cc-common"
resource "gotools" do
url "https://go.googlesource.com/tools.git",
:revision => "69db398fe0e69396984e3967724820c1f631e971"
end
def install
# install the completion scripts
bash_completion.install "misc/bash/go" => "go-completion.bash"
zsh_completion.install "misc/zsh/go" => "go"
# host platform (darwin) must come last in the targets list
if build.with? "cc-all"
targets = [
["linux", ["386", "amd64", "arm"]],
["freebsd", ["386", "amd64"]],
["netbsd", ["386", "amd64"]],
["openbsd", ["386", "amd64"]],
["windows", ["386", "amd64"]],
["darwin", ["386", "amd64"]],
]
elsif build.with? "cc-common"
targets = [
["linux", ["386", "amd64", "arm"]],
["windows", ["386", "amd64"]],
["darwin", ["386", "amd64"]],
]
else
targets = [["darwin", [""]]]
end
cd "src" do
targets.each do |os, archs|
cgo_enabled = os == "darwin" && build.with?("cgo") ? "1" : "0"
archs.each do |arch|
ENV["GOROOT_FINAL"] = libexec
ENV["GOOS"] = os
ENV["GOARCH"] = arch
ENV["CGO_ENABLED"] = cgo_enabled
ohai "Building go for #{arch}-#{os}"
system "./make.bash", "--no-clean"
end
end
end
(buildpath/"pkg/obj").rmtree
libexec.install Dir["*"]
(bin/"go12").write_env_script(libexec/"bin/go", :PATH => "#{libexec}/bin:$PATH")
bin.install_symlink libexec/"bin/gofmt" => "gofmt12"
if build.with?("godoc") || build.with?("vet")
ENV.prepend_path "PATH", libexec/"bin"
ENV["GOPATH"] = buildpath
(buildpath/"src/golang.org/x/tools").install resource("gotools")
if build.with? "godoc"
cd "src/golang.org/x/tools/cmd/godoc/" do
system "go", "build"
(libexec/"bin").install "godoc"
end
bin.install_symlink libexec/"bin/godoc" => "godoc12"
end
if build.with? "vet"
cd "src/golang.org/x/tools/cmd/vet/" do
system "go", "build"
# This is where Go puts vet natively; not in the bin.
(libexec/"pkg/tool/darwin_amd64/").install "vet"
end
end
end
end
def caveats; <<-EOS.undent
The `go*` commands in `bin` are suffixed with 12 e.g. `go12`.
As of go 1.2, a valid GOPATH is required to use the `go get` command:
https://golang.org/doc/code.html#GOPATH
You may wish to add the GOROOT-based install location
(with unsuffixed `go*` commands) to your PATH:
export PATH=$PATH:#{opt_libexec}/bin
EOS
end
test do
(testpath/"hello.go").write <<-EOS.undent
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
EOS
# Run go fmt check for no errors then run the program.
# This is a a bare minimum of go working as it uses fmt, build, and run.
system "#{bin}/go12", "fmt", "hello.go"
assert_equal "Hello World\n", shell_output("#{bin}/go12 run hello.go")
if build.with? "godoc"
assert File.exist?(libexec/"bin/godoc")
assert File.executable?(libexec/"bin/godoc")
end
if build.with? "vet"
assert File.exist?(libexec/"pkg/tool/darwin_amd64/vet")
assert File.executable?(libexec/"pkg/tool/darwin_amd64/vet")
end
end
end