# Contributor: Sören Tempel # Maintainer: Eivind Uggedal pkgname=go pkgver=1.7.4 # This should be the latest commit on the corresponding release branch _toolsver="26c35b4dcf6dfcb924e26828ed9f4d028c5ce05a" pkgrel=1 pkgdesc="Go programming language compiler" url="http://www.golang.org/" arch="all" license="BSD" depends="binutils gcc" depends_dev="" makedepends="bash" options="!strip" install="" subpackages="$pkgname-doc $pkgname-tools" source="http://golang.org/dl/go${pkgver/_/}.src.tar.gz $pkgname-tools-${pkgver/_/}.tar.gz::https://github.com/golang/tools/archive/${_toolsver}.tar.gz default-buildmode-pie.patch http://dev.alpinelinux.org/bootstrap/go/go-linux-musl-arm64-bootstrap.tar.bz2 " # NOTE: building go for x86 with grsec kernel requires: # sysctl -w kernel.modify_ldt=1 # use go-bootstrap for archs that are supported case "$CARCH" in aarch64) _goroot_bootstrap="$srcdir"/go-linux-arm64-bootstrap ;; *) makedepends="$makedepends go-bootstrap" _goroot_bootstrap=/usr/lib/go-bootstrap ;; esac _gotools="cover godoc stringer" _tooldir="$srcdir"/tools-${_toolsver} _gocross="darwin freebsd openbsd windows" for os in $_gocross; do subpackages="$subpackages $pkgname-cross-${os}:_crosspkg" done builddir="$srcdir"/$pkgname build() { cd "$builddir/src" export GOPATH="$srcdir" export GOROOT="$builddir" export GOBIN="$GOROOT"/bin export GOROOT_FINAL=/usr/lib/go export GOROOT_BOOTSTRAP="$_goroot_bootstrap" case "$CARCH" in aarch64)export GOARCH="arm64" ;; armhf) export GOARCH="arm" GOARM=6 ;; armv7) export GOARCH="arm" GOARM=7 ;; x86) export GOARCH="386" GO386=387 ;; x86_64) export GOARCH="amd64" ;; *) return 1 ;; esac ./make.bash --no-clean || return 1 for os in $_gocross; do for arch in "386" "amd64"; do GOARCH=$arch GOOS=$os ./make.bash --no-clean || return 1 done done # FIXME some tests fail: # PATH="$GOROOT/bin:$PATH" ./run.bash -no-rebuild || return 1 mkdir -p "$GOPATH"/src/golang.org/x/tools cp -r "$_tooldir"/* "$GOPATH"/src/golang.org/x/tools for tool in $_gotools; do "$GOROOT"/bin/go install \ golang.org/x/tools/cmd/$tool || return 1 done } package() { cd "$builddir" mkdir -p "$pkgdir"/usr/bin "$pkgdir"/usr/lib/go/bin "$pkgdir"/usr/share/doc/go for binary in go gofmt; do mv bin/"$binary" "$pkgdir"/usr/lib/go/bin/ || return 1 ln -s /usr/lib/go/bin/"$binary" "$pkgdir"/usr/bin/ || return 1 done # The source needs to be installed due to an upstream # bug (https://github.com/golang/go/issues/2775). # When this is resolved we can split out the source to a # go-src sub package. cp -a pkg src lib "$pkgdir"/usr/lib/go || return 1 cp -r doc misc "$pkgdir"/usr/share/doc/go || return 1 # Remove tests from /usr/lib/go/src. # Those shouldn't be affacted by the upstream bug (see above). find "$pkgdir"/usr/lib/go/src \( -type f -a -name "*_test.go" \) \ -exec rm -rf \{\} \+ || return 1 find "$pkgdir"/usr/lib/go/src \( -type d -a -name "testdata" \) \ -exec rm -rf \{\} \+ || return 1 find "$pkgdir"/usr/lib/go/src -type f -a \( -name "*.bash" -o -name "*.rc" -o -name "*.bat" \) \ -exec rm -rf \{\} \+ || return 1 rm -rf "$pkgdir"/usr/lib/go/pkg/bootstrap rm -f "$pkgdir"/usr/lib/go/pkg/tool/*/api } tools() { pkgdesc="Go programming language tools" depends="$pkgname" mkdir -p "$subpkgdir"/usr/bin "$subpkgdir"/usr/lib/go/bin for binary in "$builddir"/bin/*; do mv $binary "$subpkgdir"/usr/lib/go/bin || return 1 ln -s /usr/lib/go/bin/"${binary##*/}" "$subpkgdir"/usr/bin/ || return 1 done mkdir -p "$subpkgdir"/usr/lib/go/pkg/tool/linux_$GOARCH cp "$subpkgdir"/usr/lib/go/bin/godoc \ "$pkgdir"/usr/lib/go/pkg/tool/linux_$GOARCH/godoc || return 1 for tool in $_gotools; do [ -f "$pkgdir"/usr/lib/go/pkg/tool/linux_$GOARCH/$tool ] \ || continue mv "$pkgdir"/usr/lib/go/pkg/tool/linux_$GOARCH/$tool \ "$subpkgdir"/usr/lib/go/pkg/tool/linux_$GOARCH/$tool || return 1 done } _crosspkg() { local name="$(echo "${subpkgname}" | cut -d '-' -f3)" pkgdesc="Go cross compiler for $name" depends="$pkgname" mkdir -p "$subpkgdir"/usr/lib/go/pkg/tool/ mv "$pkgdir"/usr/lib/go/pkg/tool/${name}_* \ "$subpkgdir"/usr/lib/go/pkg/tool/ || return 1 mv "$pkgdir"/usr/lib/go/pkg/${name}_* \ "$subpkgdir"/usr/lib/go/pkg/ || return 1 } md5sums="49c1076428a5d3b5ad7ac65233fcca2f go1.7.4.src.tar.gz 9e14a20ca24062e0855293bc8d38c00b go-tools-1.7.4.tar.gz 1e3ad4f657ac6c22a92e8fc907893e4f default-buildmode-pie.patch 3bda1b07117ed599a991877465eaffdd go-linux-musl-arm64-bootstrap.tar.bz2" sha256sums="4c189111e9ba651a2bb3ee868aa881fab36b2f2da3409e80885ca758a6b614cc go1.7.4.src.tar.gz b796a67a568ca0df5a5a9a1870703db281b17907f812b9cf6ff42568f6764275 go-tools-1.7.4.tar.gz f3e5a8e0c1c05c34f489ccbfb65291ab2265fa0ef04b8b501e5c98b17547c4b9 default-buildmode-pie.patch a1d870570317f5e87c606d6bad0d435a594fed802c99475ab306768dc853a029 go-linux-musl-arm64-bootstrap.tar.bz2" sha512sums="dc9950c3ea7100e536ad58fd93505d584276b7c50d4b8fe2ba7f20fd043dcf0d315b735c48945302055e91517594cc2b0061ccec9478a8ab48f1f2836c20afb3 go1.7.4.src.tar.gz 553be713d03f1a53605c41f67822c75d86dacf9ccba9f2329e111b4178287aee1ddccd3ccc4ab76b9dbcff34f11aeddebce5deac47e715ea75d032bc9ab0355c go-tools-1.7.4.tar.gz 13cd386c38875b951da4057586007f3c67503dc79ddf57befbf763af85ec2cd2a2e6b00614450c179c93f1f8747ee7456ee412adccd08a5f115b33812598a148 default-buildmode-pie.patch da2a33c7bafe11bdad12e755bfe19c9f8ab34ae14899712a0e10da202d5457af419a920be5ffa19cc03d2351194b5c02f1edb595201f81dfb8a51f34b42a8162 go-linux-musl-arm64-bootstrap.tar.bz2"