2 # - allow disabling tests (currently bcond exists just for showing which are test deps)
3 # - add verbose build output (currently dummy bcond)
4 # - setup GOMAXPROCS=2 from _smp_mflags
5 # - fix CC containing spaces (ccache)
6 # - check if hg use at build time can be dropped
7 # - build all target archs, subpackage them: http://golang.org/doc/install/source#environment
8 # or choose only useful crosscompilers?
9 # - subpackage -src files?
12 %bcond_without verbose # verbose build (V=1)
13 %bcond_without tests # build without tests [nop actually]
14 %bcond_without shared # Build golang shared objects for stdlib
15 %bcond_without ext_linker # Build golang using external/internal (close to cgo disabled) linking
16 %bcond_without cgo # cgo (importing C libraries) support
18 %ifnarch %{ix86} %{x8664} %{arm} aarch64 mips64 mips64le ppc64le
20 %undefine with_ext_linker
24 Summary: Go compiler and tools
25 Summary(pl.UTF-8): Kompilator języka Go i narzędzia
29 # source tree includes several copies of Mark.Twain-Tom.Sawyer.txt under Public Domain
30 License: BSD and Public Domain
31 Group: Development/Languages
32 # Source0Download: https://golang.org/dl/
33 Source0: https://storage.googleapis.com/golang/go%{version}.src.tar.gz
34 # Source0-md5: 7743960c968760437b6e39093cfe6f67
35 Patch0: ca-certs.patch
36 Patch2: %{name}-1.2-verbose-build.patch
37 Patch5: go1.5-zoneinfo_testing_only.patch
38 URL: http://golang.org/
40 BuildRequires: rpm-pythonprov
41 # The compiler is written in Go. Needs go(1.4+) compiler for build.
43 BuildRequires: gcc-go >= 6:5
45 BuildRequires: golang >= 1.4
48 BuildRequires: glibc-static
49 BuildRequires: hostname
50 BuildRequires: pcre-devel
53 Requires: ca-certificates
55 ExclusiveArch: %{ix86} %{x8664} %{arm} aarch64 mips64 mips64le ppc64 ppc64le s390x
56 BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
58 %define no_install_post_strip 1
59 %define no_install_post_chrpath 1
60 %define _enable_debug_packages 0
61 %define _noautoreqfiles %{_libdir}/%{name}/src
63 %define goroot %{_libdir}/%{name}
78 %define GOARCH mips64x
80 %ifarch ppc64 ppc64le s390x
81 %define GOARCH %{_arch}
85 Go is an open source programming environment that makes it easy to
86 build simple, reliable, and efficient software.
88 %description -l pl.UTF-8
89 Go to mające otwarte źródła środowisko do programowania, pozwalające
90 na łatwe tworzenie prostych, pewnych i wydajnych programów.
93 Summary: Golang shared object libraries
94 Summary(pl.UTF-8): Biblioteki obiektów współdzielonych dla języka Go
96 Requires: %{name} = %{version}-%{release}
99 Golang shared object libraries.
101 %description shared -l pl.UTF-8
102 Biblioteki obiektów współdzielonych dla języka Go.
105 Summary: Documentation for Go language
106 Summary(fr.UTF-8): Documentation pour Go
107 Summary(it.UTF-8): Documentazione di Go
108 Summary(pl.UTF-8): Dokumentacja do języka Go
110 %if "%{_rpmversion}" >= "5"
115 Documentation for Go language.
117 %description doc -l fr.UTF-8
118 Documentation pour Go.
120 %description doc -l it.UTF-8
121 Documentazione di Go.
123 %description doc -l pl.UTF-8
124 Dokumentacja do języka Go.
133 # clean patch backups
134 find . -name '*.orig' | xargs -r %{__rm}
137 # bootstrap compiler GOROOT
138 %if %{with bootstrap}
139 export GOROOT_BOOTSTRAP=%{_prefix}
141 export GOROOT_BOOTSTRAP=%{goroot}
143 export GOROOT_FINAL=%{goroot}
145 export GOHOSTOS=linux
146 export GOHOSTARCH=%{GOARCH}
149 export GOARCH=%{GOARCH}
150 %if %{without external_linker}
151 export GO_LDFLAGS="-linkmode internal"
159 # use our gcc options for this build, but store gcc as default for compiler
160 export CFLAGS="%{rpmcflags}"
161 export LDFLAGS="%{rpmldflags}"
164 export CC="${CC#ccache }"
165 export CC_FOR_TARGET="$CC"
169 # optflags for go tools build
170 nflags="\"$(echo '%{rpmcflags}' | sed -e 's/^[ ]*//;s/[ ]*$//;s/[ ]\+/ /g' -e 's/ /\",\"/g')\""
171 %{__sed} -i -e "s/\"-O2\"/$nflags/" src/cmd/dist/build.c
172 # NOTE: optflags used in gcc calls from go compiler are in src/cmd/go/build.go
178 ./make.bash --no-clean
181 # build shared std lib
183 GOROOT=$(pwd) PATH=$(pwd)/bin:$PATH go install -buildmode=shared std
187 rm -rf $RPM_BUILD_ROOT
188 GOROOT=$RPM_BUILD_ROOT%{goroot}
190 install -d $GOROOT/{misc,lib,src}
191 install -d $RPM_BUILD_ROOT%{_bindir}
193 cp -a pkg lib bin src VERSION $GOROOT
194 cp -a misc/cgo $GOROOT/misc
196 # kill Win32 and Plan9 scripts
197 find $GOROOT -name '*.bat' -o -name '*.rc' | xargs %{__rm}
199 # https://github.com/golang/go/issues/4749
200 find $GOROOT/src | xargs touch -r $GOROOT/VERSION
201 # and level out all the built archives
203 find $GOROOT/pkg | xargs touch -r $GOROOT/pkg
205 ln -sf %{_libdir}/%{name}/bin/go $RPM_BUILD_ROOT%{_bindir}/go
206 ln -sf %{_libdir}/%{name}/bin/gofmt $RPM_BUILD_ROOT%{_bindir}/gofmt
207 ln -sf %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/cgo $RPM_BUILD_ROOT%{_bindir}/cgo
209 # FIXME: do we need whole sources, including build scripts?
210 # for now, remove only non-Linux stuff
211 %{__rm} $RPM_BUILD_ROOT%{_libdir}/%{name}/src/androidtest.bash \
212 $RPM_BUILD_ROOT%{_libdir}/%{name}/src/syscall/{mksyscall_solaris,mksysctl_openbsd,mksysnum_{darwin,dragonfly,freebsd,netbsd,openbsd}}.pl
214 %{__rm} -r $RPM_BUILD_ROOT%{_libdir}/%{name}/src/internal/trace \
215 $RPM_BUILD_ROOT%{_libdir}/%{name}/misc/cgo/{errors,fortran,test*}
217 # unenvize remaining scripts
218 %{__sed} -i -e '1s,/usr/bin/env bash,/bin/bash,' $RPM_BUILD_ROOT%{_libdir}/%{name}/src/*.bash
219 %{__sed} -i -e '1s,/usr/bin/env bash,/bin/bash,' $RPM_BUILD_ROOT%{_libdir}/%{name}/src/syscall/*.sh
220 %{__sed} -i -e '1s,/usr/bin/env perl,/usr/bin/perl,' $RPM_BUILD_ROOT%{_libdir}/%{name}/src/syscall/*.pl
223 rm -rf $RPM_BUILD_ROOT
226 %defattr(644,root,root,755)
227 %doc AUTHORS CONTRIBUTORS LICENSE
228 %attr(755,root,root) %{_bindir}/cgo
229 %attr(755,root,root) %{_bindir}/go
230 %attr(755,root,root) %{_bindir}/gofmt
231 %dir %{_libdir}/%{name}
232 %{_libdir}/%{name}/VERSION
233 %dir %{_libdir}/%{name}/bin
234 %attr(755,root,root) %{_libdir}/%{name}/bin/go
235 %attr(755,root,root) %{_libdir}/%{name}/bin/gofmt
237 %{_libdir}/%{name}/lib
238 %{_libdir}/%{name}/misc
239 %{_libdir}/%{name}/src
240 %dir %{_libdir}/%{name}/pkg
241 %{_libdir}/%{name}/pkg/linux_%{GOARCH}
242 %{_libdir}/%{name}/pkg/obj
243 %dir %{_libdir}/%{name}/pkg/tool
244 %dir %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}
245 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/addr2line
246 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/api
247 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/asm
248 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/cgo
249 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/compile
250 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/cover
251 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/dist
252 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/doc
253 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/fix
254 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/link
255 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/nm
256 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/objdump
257 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/pack
258 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/pprof
259 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/trace
260 %attr(755,root,root) %{_libdir}/%{name}/pkg/tool/linux_%{GOARCH}/vet
262 %dir %{_libdir}/%{name}/pkg/bootstrap
263 %dir %{_libdir}/%{name}/pkg/bootstrap/bin
264 %attr(755,root,root) %{_libdir}/%{name}/pkg/bootstrap/bin/asm
265 %attr(755,root,root) %{_libdir}/%{name}/pkg/bootstrap/bin/compile
266 %attr(755,root,root) %{_libdir}/%{name}/pkg/bootstrap/bin/link
267 %{_libdir}/%{name}/pkg/bootstrap/pkg
268 %{_libdir}/%{name}/pkg/bootstrap/src
269 %{_libdir}/%{name}/pkg/include
273 %defattr(644,root,root,755)
274 %{_libdir}/%{name}/pkg/linux_%{GOARCH}_dynlink
278 %defattr(644,root,root,755)