tgo-1.12.1.ebuild - parlay - yet another gentoo overlay
HTML git clone https://git.parazyd.org/parlay
DIR Log
DIR Files
DIR Refs
DIR README
---
tgo-1.12.1.ebuild (5950B)
---
1 # Copyright 2019 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=6
5
6 export CBUILD=${CBUILD:-${CHOST}}
7 export CTARGET=${CTARGET:-${CHOST}}
8
9 MY_PV=${PV/_/}
10
11 inherit toolchain-funcs
12
13 DESCRIPTION="A concurrent garbage collected and typesafe programming language"
14 HOMEPAGE="https://golang.org"
15
16 LICENSE="BSD"
17 SLOT="0/${PV}"
18 IUSE="gccgo elibc_musl"
19
20 BOOTSTRAP_DIST="https://dev.gentoo.org/~williamh/dist"
21 BOOTSTRAP_VERSION="bootstrap-1.8"
22 BOOTSTRAP_URI="
23 amd64? ( ${BOOTSTRAP_DIST}/go-linux-amd64-${BOOTSTRAP_VERSION}.tbz )
24 arm? ( ${BOOTSTRAP_DIST}/go-linux-arm-${BOOTSTRAP_VERSION}.tbz )
25 arm64? ( ${BOOTSTRAP_DIST}/go-linux-arm64-${BOOTSTRAP_VERSION}.tbz )
26 ppc64? (
27 ${BOOTSTRAP_DIST}/go-linux-ppc64-${BOOTSTRAP_VERSION}.tbz
28 ${BOOTSTRAP_DIST}/go-linux-ppc64le-${BOOTSTRAP_VERSION}.tbz
29 )
30 s390? ( ${BOOTSTRAP_DIST}/go-linux-s390x-${BOOTSTRAP_VERSION}.tbz )
31 x86? ( ${BOOTSTRAP_DIST}/go-linux-386-${BOOTSTRAP_VERSION}.tbz )
32 amd64-fbsd? ( ${BOOTSTRAP_DIST}/go-freebsd-amd64-${BOOTSTRAP_VERSION}.tbz )
33 x86-fbsd? ( ${BOOTSTRAP_DIST}/go-freebsd-386-${BOOTSTRAP_VERSION}.tbz )
34 x64-macos? ( ${BOOTSTRAP_DIST}/go-darwin-amd64-${BOOTSTRAP_VERSION}.tbz )
35 x64-solaris? ( ${BOOTSTRAP_DIST}/go-solaris-amd64-${BOOTSTRAP_VERSION}.tbz )
36 "
37
38 BOOTSTRAP_DIST_MUSL="https://parazyd.org/pub/mirror/gentoo/distfiles"
39 BOOTSTRAP_VERSION_MUSL="bootstrap-1.4.3"
40 BOOTSTRAP_URI_MUSL="
41 amd64? ( ${BOOTSTRAP_DIST_MUSL}/go-linux-amd64-${BOOTSTRAP_VERSION_MUSL}.tbz )
42 "
43
44 case ${PV} in
45 *9999*)
46 EGIT_REPO_URI="https://github.com/golang/go.git"
47 inherit git-r3
48 ;;
49 *)
50 SRC_URI="https://storage.googleapis.com/golang/go${MY_PV}.src.tar.gz "
51 S="${WORKDIR}"/go
52 case ${PV} in
53 *_beta*|*_rc*) ;;
54 *)
55 KEYWORDS="-* ~amd64 ~arm ~arm64 ~ppc64 ~s390 ~x86 ~amd64-fbsd ~x86-fbsd ~x64-macos ~x64-solaris"
56 # The upstream tests fail under portage but pass if the build is
57 # run according to their documentation [1].
58 # I am restricting the tests on released versions until this is
59 # solved.
60 # [1] https://golang.org/issues/18442
61 RESTRICT="test"
62 ;;
63 esac
64 esac
65 SRC_URI+="
66 !gccgo? (
67 !elibc_musl? ( ${BOOTSTRAP_URI} )
68 elibc_musl? ( ${BOOTSTRAP_URI_MUSL} )
69 )
70 "
71
72 DEPEND="gccgo? ( >=sys-devel/gcc-5[go] )"
73 RDEPEND="!<dev-go/go-tools-0_pre20150902"
74
75 # These test data objects have writable/executable stacks.
76 QA_EXECSTACK="
77 usr/lib/go/src/debug/elf/testdata/*.obj
78 usr/lib/go/src/go/internal/gccgoimporter/testdata/escapeinfo.gox
79 usr/lib/go/src/go/internal/gccgoimporter/testdata/unicode.gox
80 usr/lib/go/src/go/internal/gccgoimporter/testdata/time.gox
81 "
82
83 # Do not complain about CFLAGS, etc, since Go doesn't use them.
84 QA_FLAGS_IGNORED='.*'
85
86 REQUIRES_EXCLUDE="/usr/lib/go/src/debug/elf/testdata/*"
87
88 # The tools in /usr/lib/go should not cause the multilib-strict check to fail.
89 QA_MULTILIB_PATHS="usr/lib/go/pkg/tool/.*/.*"
90
91 # Do not strip this package. Stripping is unsupported upstream and may
92 # fail.
93 RESTRICT+=" strip"
94
95 DOCS=(
96 AUTHORS
97 CONTRIBUTING.md
98 CONTRIBUTORS
99 PATENTS
100 README.md
101 )
102
103 go_arch()
104 {
105 # By chance most portage arch names match Go
106 local portage_arch=$(tc-arch $@)
107 case "${portage_arch}" in
108 x86) echo 386;;
109 x64-*) echo amd64;;
110 ppc64) [[ $(tc-endian $@) = big ]] && echo ppc64 || echo ppc64le ;;
111 s390) echo s390x ;;
112 *) echo "${portage_arch}";;
113 esac
114 }
115
116 go_arm()
117 {
118 case "${1:-${CHOST}}" in
119 armv5*) echo 5;;
120 armv6*) echo 6;;
121 armv7*) echo 7;;
122 *)
123 die "unknown GOARM for ${1:-${CHOST}}"
124 ;;
125 esac
126 }
127
128 go_os()
129 {
130 case "${1:-${CHOST}}" in
131 *-linux*) echo linux;;
132 *-darwin*) echo darwin;;
133 *-freebsd*) echo freebsd;;
134 *-netbsd*) echo netbsd;;
135 *-openbsd*) echo openbsd;;
136 *-solaris*) echo solaris;;
137 *-cygwin*|*-interix*|*-winnt*)
138 echo windows
139 ;;
140 *)
141 die "unknown GOOS for ${1:-${CHOST}}"
142 ;;
143 esac
144 }
145
146 go_tuple()
147 {
148 echo "$(go_os $@)_$(go_arch $@)"
149 }
150
151 go_cross_compile()
152 {
153 [[ $(go_tuple ${CBUILD}) != $(go_tuple) ]]
154 }
155
156 pkg_pretend()
157 {
158 # make.bash does not understand cross-compiling a cross-compiler
159 if [[ $(go_tuple) != $(go_tuple ${CTARGET}) ]]; then
160 die "CHOST CTARGET pair unsupported: CHOST=${CHOST} CTARGET=${CTARGET}"
161 fi
162 }
163
164 src_unpack()
165 {
166 if [[ ${PV} = 9999 ]]; then
167 git-r3_src_unpack
168 fi
169 default
170 }
171
172 src_compile()
173 {
174 export GOROOT_BOOTSTRAP="${WORKDIR}"/go-$(go_os)-$(go_arch)-bootstrap
175 if use gccgo; then
176 mkdir -p "${GOROOT_BOOTSTRAP}/bin" || die
177 local go_binary=$(gcc-config --get-bin-path)/go-$(gcc-major-version)
178 [[ -x ${go_binary} ]] || go_binary=$(
179 find "${EPREFIX}"/usr/${CHOST}/gcc-bin/*/go-$(gcc-major-version) |
180 sort -V | tail -n1)
181 [[ -x ${go_binary} ]] ||
182 die "go-$(gcc-major-version): command not found"
183 ln -s "${go_binary}" "${GOROOT_BOOTSTRAP}/bin/go" || die
184 fi
185 export GOROOT_FINAL="${EPREFIX}"/usr/lib/go
186 export GOROOT="$(pwd)"
187 export GOBIN="${GOROOT}/bin"
188
189 # Go's build script does not use BUILD/HOST/TARGET consistently. :(
190 export GOHOSTARCH=$(go_arch ${CBUILD})
191 export GOHOSTOS=$(go_os ${CBUILD})
192 export CC=$(tc-getBUILD_CC)
193
194 export GOARCH=$(go_arch)
195 export GOOS=$(go_os)
196 export CC_FOR_TARGET=$(tc-getCC)
197 export CXX_FOR_TARGET=$(tc-getCXX)
198 if [[ ${ARCH} == arm ]]; then
199 export GOARM=$(go_arm)
200 fi
201 einfo "GOROOT_BOOTSTRAP is ${GOROOT_BOOTSTRAP}"
202
203 cd src
204 CGO_ENABLED=1 ./make.bash || die "build failed"
205 }
206
207 src_test()
208 {
209 go_cross_compile && return 0
210
211 cd src
212 PATH="${GOBIN}:${PATH}" \
213 ./run.bash -no-rebuild || die "tests failed"
214 }
215
216 src_install()
217 {
218 local bin_path f x
219
220 dodir /usr/lib/go
221
222 # There is a known issue which requires the source tree to be installed [1].
223 # Once this is fixed, we can consider using the doc use flag to control
224 # installing the doc and src directories.
225 # [1] https://golang.org/issue/2775
226 #
227 # deliberately use cp to retain permissions
228 cp -R api bin doc lib pkg misc src test "${ED}"/usr/lib/go
229 if go_cross_compile; then
230 bin_path="bin/$(go_tuple)"
231 else
232 bin_path=bin
233 fi
234 for x in ${bin_path}/*; do
235 f=${x##*/}
236 dosym ../lib/go/${bin_path}/${f} /usr/bin/${f}
237 done
238 einstalldocs
239 }