# Contributor: Sören Tempel # Maintainer: Eivind Uggedal pkgname=go pkgver=1.8.3 # This should be the latest commit on the corresponding release branch _toolsver="5682db0e919ed9cfc6f52ac32e170511a106eb3b" pkgrel=0 pkgdesc="Go programming language compiler" url="http://www.golang.org/" arch="all" license="BSD" depends="binutils gcc" depends_dev="" makedepends="bash go-bootstrap" options="!strip" provides="go-bootstrap=$pkgver-r$pkgrel" install="" subpackages="$pkgname-doc" source="http://golang.org/dl/go${pkgver/_/}.src.tar.gz go-tools-${pkgver/_/}.tar.gz::https://github.com/golang/tools/archive/${_toolsver}.tar.gz default-buildmode-pie.patch set-external-linker.patch " # NOTE: building go for x86 with grsec kernel requires: # sysctl -w kernel.modify_ldt=1 if [ "$CBUILD" = "$CTARGET" ]; then makedepends="go-bootstrap $makedepends" provides="go-bootstrap=$pkgver-r$pkgrel" subpackages="$subpackages $pkgname-tools" _gotools="cover godoc stringer" _gocross="darwin freebsd openbsd windows" else pkgname="go-bootstrap" makedepends="go $makedepends" # Go expect host linker instead of the cross-compiler export CC_FOR_TARGET="$CC" export CC="${HOSTLD:-gcc}" export CXX="${HOSTLD:-g++}" export LD="${HOSTLD:-ld}" fi _tooldir="$srcdir"/tools-${_toolsver} for os in $_gocross; do subpackages="$subpackages $pkgname-cross-${os}:_crosspkg" done case "$CTARGET_ARCH" in aarch64)export GOARCH="arm64" ;; armhf) export GOARCH="arm" GOARM=6 ;; armv7) export GOARCH="arm" GOARM=7 ;; s390x) export GOARCH="s390x" ;; x86) export GOARCH="386" GO386=387 ;; x86_64) export GOARCH="amd64" ;; ppc64le) export GOARCH="ppc64le" ;; *) die "Unsupported arch" ;; esac builddir="$srcdir"/go build() { cd "$builddir/src" export GOOS="linux" export GOPATH="$srcdir" export GOROOT="$builddir" export GOBIN="$GOROOT"/bin export GOROOT_FINAL=/usr/lib/go local p; for p in /usr/lib/go-bootstrap /usr/lib/go-linux-$GOARCH-bootstrap /usr/lib/go; do if [ -d "$p" ]; then export GOROOT_BOOTSTRAP="$p" break fi done ./make.bash for os in $_gocross; do local hostarch="$GOARCH" for arch in "386" "amd64"; do GOHOSTARCH=$hostarch GOARCH=$arch GOOS=$os ./make.bash done done # copied from bootstrap.bash to fixup cross-built bootstrap go if [ "$CBUILD" != "$CTARGET" ]; then local gohostos="$(../bin/go env GOHOSTOS)" local gohostarch="$(../bin/go env GOHOSTARCH)" mv ../bin/*_*/* ../bin rmdir ../bin/*_* rm -rf "../pkg/${gohostos}_${gohostarch}"* "../pkg/tool/${gohostos}_${gohostarch}"* rm -rf ../pkg/bootstrap ../pkg/obj fi # FIXME some tests fail: # PATH="$GOROOT/bin:$PATH" ./run.bash -no-rebuild 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 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 install -Dm755 bin/"$binary" "$pkgdir"/usr/lib/go/bin/"$binary" ln -s /usr/lib/go/bin/"$binary" "$pkgdir"/usr/bin/ done cp -a pkg lib "$pkgdir"/usr/lib/go cp -r doc misc "$pkgdir"/usr/share/doc/go rm -rf "$pkgdir"/usr/lib/go/pkg/bootstrap rm -f "$pkgdir"/usr/lib/go/pkg/tool/*/api # 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. mkdir -p "$pkgdir"/usr/lib/go/ cp -a "$builddir"/src "$pkgdir"/usr/lib/go # 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 \{\} \+ find "$pkgdir"/usr/lib/go/src \( -type d -a -name "testdata" \) \ -exec rm -rf \{\} \+ find "$pkgdir"/usr/lib/go/src -type f -a \( -name "*.bash" -o -name "*.rc" -o -name "*.bat" \) \ -exec rm -rf \{\} \+ } tools() { pkgdesc="Go programming language tools" depends="$pkgname" mkdir -p "$subpkgdir"/usr/bin "$subpkgdir"/usr/lib/go/bin \ "$subpkgdir"/usr/lib/go/pkg/tool/linux_$GOARCH for tool in $_gotools; do if [ -f "$pkgdir"/usr/lib/go/pkg/tool/linux_$GOARCH/$tool ]; then mv "$pkgdir"/usr/lib/go/pkg/tool/linux_$GOARCH/$tool \ "$subpkgdir"/usr/lib/go/pkg/tool/linux_$GOARCH/$tool fi if [ -f "$builddir/bin/$tool" ]; then install -Dm755 "$builddir/bin/$tool" "$subpkgdir"/usr/lib/go/bin/"$tool" ln -s /usr/lib/go/bin/"$tool" "$subpkgdir"/usr/bin/ fi 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/ mv "$pkgdir"/usr/lib/go/pkg/${name}_* \ "$subpkgdir"/usr/lib/go/pkg/ } sha512sums="c6e67dd9e3acdf2aa776d920f91f3fb1802d624ba5d51e06b2c7c6b71bcfaf91f4024f7a442cecde69175c589f7f1163f0ae86d887e15ddde710e53ce0961284 go1.8.3.src.tar.gz 343fca47f250278b22df1c1cd92cce91e01009043d05d8ccce095e4386fa0f5ca8ccaa58232635332c7288ceca9d2a240f774f8bb3b08129a681a582cba60248 go-tools-1.8.3.tar.gz 9857c71108652b8907117abf0b41ded5e332bcf864320235aadbf3a7b6afbfc0e5051f91fe143f0654b4c8d6fe9adbe7d22ca2ce50cd75c0ab7a050dfb437773 default-buildmode-pie.patch 6b36f3780ab10e5c4902473a8ab5c0417220ece584b537517e9e60979bdc5a548ed14dd2546605392c89ec5ea6691769d337d34e2e19b92eba5bbca1898f4ada set-external-linker.patch"