aboutsummaryrefslogtreecommitdiffstats
path: root/community/go/APKBUILD
blob: 82d3269706f37075195d2a54c1ff5e26bf4e16dd (plain)
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# Contributor: Sören Tempel <soeren+alpine@soeren-tempel.net>
# Maintainer: Eivind Uggedal <eivind@uggedal.com>
pkgname=go
pkgver=1.7_rc4
# This should be the latest commit on the corresponding release branch
_toolsver="527b253f588776e5f72a0a0d1e93195cd3f82707"
pkgrel=0
pkgdesc="Go programming language compiler"
url="http://www.golang.org/"
arch="all"
license="BSD"
depends=""
depends_dev=""
makedepends="bash go-bootstrap paxmark"
options="!strip"
install=""
subpackages="$pkgname-doc $pkgname-tools $pkgname-cross"
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
	"

# NOTE: building go for x86 with grsec kernel requires:
#           sysctl -w kernel.modify_ldt=1

_gotools="cover godoc stringer"
_gocross="darwin freebsd openbsd windows"
_tooldir="$srcdir"/tools-${_toolsver}

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=/usr/lib/go-bootstrap

	case "$CARCH" in
	aarch64)export GOARCH="arm64" ;;
	armhf)	export GOARCH="arm" GOARM=6 ;;
	armv7)	export GOARCH="arm" GOARM=7 ;;
	x86)	export GOARCH="386" ;;
	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

	# go before 1.7 has issues with randmmap on arm
	# https://github.com/golang/go/issues/16081
	if [ "$GOARCH" = "arm" ]; then
		paxmark -r bin/go || attr -s pax.flags -V "rx" bin/go \
			|| return 1
	fi

	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
}

cross() {
	pkgdesk="Go cross compilers"
	depends="$pkgname"

	mkdir -p "$subpkgdir"/usr/lib/go/pkg/tool
	for os in $_gocross; do
		mv "$pkgdir"/usr/lib/go/pkg/tool/${os}_* \
			"$subpkgdir"/usr/lib/go/pkg/tool || return 1
		mv "$pkgdir"/usr/lib/go/pkg/${os}_* \
			"$subpkgdir"/usr/lib/go/pkg || return 1
	done
}

md5sums="c55787c07d3fdc3eba0eae28c2f16ce7  go1.7rc4.src.tar.gz
24099025de8422aa8b50341ea71bad0e  go-tools-1.7rc4.tar.gz
1e3ad4f657ac6c22a92e8fc907893e4f  default-buildmode-pie.patch"
sha256sums="f669d64cd28be4ecaa36d3a31c3060b4f6e3f801e2e37f91c3a896ce3d28f64d  go1.7rc4.src.tar.gz
89819a5a457d1771bc5960079ed6f0e2870c81aafd3e0b13f0b82fc2427a1220  go-tools-1.7rc4.tar.gz
f3e5a8e0c1c05c34f489ccbfb65291ab2265fa0ef04b8b501e5c98b17547c4b9  default-buildmode-pie.patch"
sha512sums="496bc1e65dd9fed4fb3c5d5ef636e5559b03b991c04af9165069d63aab2fda36fcd4bcb63021a62601f2690558c9f3888f8d66e577212143831c9dc644ca0614  go1.7rc4.src.tar.gz
c298f821033f9db3cd100e38346474c3982417958f347078abfff895834964251269116535e46aa5c2a9e58c421928b874ea98e5c5cd65a83c0b64ae04029d3e  go-tools-1.7rc4.tar.gz
13cd386c38875b951da4057586007f3c67503dc79ddf57befbf763af85ec2cd2a2e6b00614450c179c93f1f8747ee7456ee412adccd08a5f115b33812598a148  default-buildmode-pie.patch"