ec11577107
Given the current state of OS X compilers, the original fails_with behavior is becoming less useful, mostly resulting in build failures each time the compiler is updated. So make the following changes: When a build is specified, we retain the old behavior: switch compilers if the available compiler is <= the build, don't switch if it is > the build. When no build is specified, unconditionally switch compilers, and don't output the advice message. This allows us to mark formulae as perpetually failing, avoiding the need to update formulae each time a new compiler build is made available. As a bonus, this makes the logic much easier to reason about. Closes Homebrew/homebrew#18175.
90 lines
2.7 KiB
Ruby
90 lines
2.7 KiB
Ruby
require 'formula'
|
|
|
|
class Go < Formula
|
|
homepage 'http://golang.org'
|
|
url 'http://go.googlecode.com/files/go1.0.3.src.tar.gz'
|
|
version '1.0.3'
|
|
sha1 '1a67293c10d6c06c633c078a7ca67e98c8b58471'
|
|
head 'https://go.googlecode.com/hg/'
|
|
|
|
skip_clean 'bin'
|
|
|
|
option 'cross-compile-all', "Build the cross-compilers and runtime support for all supported platforms"
|
|
option 'cross-compile-common', "Build the cross-compilers and runtime support for darwin, linux and windows"
|
|
|
|
if build.head?
|
|
fails_with :clang do
|
|
cause "clang: error: no such file or directory: 'libgcc.a'"
|
|
end
|
|
end
|
|
|
|
def install
|
|
# install the completion scripts
|
|
(prefix/'etc/bash_completion.d').install 'misc/bash/go' => 'go-completion.bash'
|
|
(share/'zsh/site-functions').install 'misc/zsh/go' => '_go'
|
|
|
|
if build.include? 'cross-compile-all'
|
|
targets = [
|
|
['linux', ['386', 'amd64', 'arm'], { :cgo => false }],
|
|
['freebsd', ['386', 'amd64'], { :cgo => false }],
|
|
|
|
['openbsd', ['386', 'amd64'], { :cgo => false }],
|
|
|
|
['windows', ['386', 'amd64'], { :cgo => false }],
|
|
|
|
# Host platform (darwin/amd64) must always come last
|
|
['darwin', ['386', 'amd64'], { :cgo => true }],
|
|
]
|
|
elsif build.include? 'cross-compile-common'
|
|
targets = [
|
|
['linux', ['386', 'amd64', 'arm'], { :cgo => false }],
|
|
['windows', ['386', 'amd64'], { :cgo => false }],
|
|
|
|
# Host platform (darwin/amd64) must always come last
|
|
['darwin', ['386', 'amd64'], { :cgo => true }],
|
|
]
|
|
else
|
|
targets = [
|
|
['darwin', [''], { :cgo => true }]
|
|
]
|
|
end
|
|
|
|
# The version check is due to:
|
|
# http://codereview.appspot.com/5654068
|
|
Pathname.new('VERSION').write 'default' if build.head?
|
|
|
|
cd 'src' do
|
|
# Build only. Run `brew test go` to run distrib's tests.
|
|
targets.each do |(os, archs, opts)|
|
|
archs.each do |arch|
|
|
ENV['GOROOT_FINAL'] = prefix
|
|
ENV['GOOS'] = os
|
|
ENV['GOARCH'] = arch
|
|
ENV['CGO_ENABLED'] = opts[:cgo] ? "1" : "0"
|
|
allow_fail = opts[:allow_fail] ? "|| true" : ""
|
|
system "./make.bash --no-clean #{allow_fail}"
|
|
end
|
|
end
|
|
end
|
|
|
|
# cleanup ENV
|
|
ENV.delete('GOROOT_FINAL')
|
|
ENV.delete('GOOS')
|
|
ENV.delete('GOARCH')
|
|
ENV.delete('CGO_ENABLED')
|
|
|
|
Pathname.new('pkg/obj').rmtree
|
|
|
|
# Don't install header files; they aren't necessary and can
|
|
# cause problems with other builds. See:
|
|
# http://trac.macports.org/ticket/30203
|
|
# http://code.google.com/p/go/issues/detail?id=2407
|
|
prefix.install(Dir['*'] - ['include'])
|
|
end
|
|
|
|
def test
|
|
cd "#{prefix}/src" do
|
|
system './run.bash --no-rebuild'
|
|
end
|
|
end
|
|
end
|