homebrew-core/Formula/go.rb
ilovezfs 4acf0c0775 go: specify tools resource by branch name alone (#10097)
If branch name is not specified, git checkout will fail when the
tools resource has previously been cached. If branch name is specified,
the revision will not be used or validated. So only specify branch name.
2017-02-18 00:32:21 -08:00

117 lines
3.5 KiB
Ruby

class Go < Formula
desc "The Go programming language"
homepage "https://golang.org"
stable do
url "https://storage.googleapis.com/golang/go1.8.src.tar.gz"
mirror "https://fossies.org/linux/misc/go1.8.src.tar.gz"
version "1.8"
sha256 "406865f587b44be7092f206d73fc1de252600b79b3cacc587b74b5ef5c623596"
go_version = version.to_s.split(".")[0..1].join(".")
resource "gotools" do
url "https://go.googlesource.com/tools.git",
:branch => "release-branch.go#{go_version}"
end
end
bottle do
sha256 "70f447e2d0a5214e533699ffa7ebadccd587919b288ee609ddb4e6ac84fc64e5" => :sierra
sha256 "e593929c05df7894bebde4575c7e82238ca66b7a0ebf3286e2e74be39435f303" => :el_capitan
sha256 "9bb46c195e6b2cd66d54cd0cac9823a69ec14eb0f02efa2fd8bfffcb6d19e0b4" => :yosemite
end
head do
url "https://go.googlesource.com/go.git"
resource "gotools" do
url "https://go.googlesource.com/tools.git"
end
end
option "without-cgo", "Build without cgo (also disables race detector)"
option "without-godoc", "godoc will not be installed for you"
option "without-race", "Build without race detector"
depends_on :macos => :mountain_lion
# Don't update this unless this version cannot bootstrap the new version.
resource "gobootstrap" do
url "https://storage.googleapis.com/golang/go1.7.darwin-amd64.tar.gz"
version "1.7"
sha256 "51d905e0b43b3d0ed41aaf23e19001ab4bc3f96c3ca134b48f7892485fc52961"
end
def install
(buildpath/"gobootstrap").install resource("gobootstrap")
ENV["GOROOT_BOOTSTRAP"] = buildpath/"gobootstrap"
cd "src" do
ENV["GOROOT_FINAL"] = libexec
ENV["GOOS"] = "darwin"
ENV["CGO_ENABLED"] = "0" if build.without?("cgo")
system "./make.bash", "--no-clean"
end
(buildpath/"pkg/obj").rmtree
rm_rf "gobootstrap" # Bootstrap not required beyond compile.
libexec.install Dir["*"]
bin.install_symlink Dir[libexec/"bin/go*"]
# Race detector only supported on amd64 platforms.
# https://golang.org/doc/articles/race_detector.html
if build.with?("cgo") && build.with?("race") && MacOS.prefer_64_bit?
system bin/"go", "install", "-race", "std"
end
if build.with? "godoc"
ENV.prepend_path "PATH", 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"
end
end
end
def caveats; <<-EOS.undent
As of go 1.2, a valid GOPATH is required to use the `go get` command.
If $GOPATH is not specified, $HOME/go will be used by default:
https://golang.org/doc/code.html#GOPATH
You may wish to add the GOROOT-based install location 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/"go", "fmt", "hello.go"
assert_equal "Hello World\n", shell_output("#{bin}/go run hello.go")
if build.with? "godoc"
assert File.exist?(libexec/"bin/godoc")
assert File.executable?(libexec/"bin/godoc")
end
if build.with? "cgo"
ENV["GOOS"] = "freebsd"
system bin/"go", "build", "hello.go"
end
end
end