diff options
Diffstat (limited to 'debian/rules')
-rwxr-xr-x | debian/rules | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/debian/rules b/debian/rules new file mode 100755 index 000000000..b2545c220 --- /dev/null +++ b/debian/rules @@ -0,0 +1,211 @@ +#!/usr/bin/make -f +# This file is in the public domain. +# You may freely use, modify, distribute, and relicense it. + +PACKAGE = golang + +libexecdir := /usr/lib/go +datadir := /usr/share/go +bindir := /bin + +# We loop over supported operating systems and architectures multiple times, +# so these two variables contain a centralized version of that code. +# The variables $$os and $$arch can be used inside such a loop. +FOR_GO_ARCH := for os in $$(echo linux freebsd windows darwin netbsd); do \ + archs="amd64 386"; \ + [ "$$os" = "linux" ] || [ "$$os" = "freebsd" ] && archs="amd64 arm 386"; \ + for arch in $$(echo $$archs); do +FOR_GO_ARCH_END := done; done + +build-arch build-indep build clean install binary-arch binary-indep binary: debian/control + +dh --parallel $(opt_no_act) $@ + +override_dh_auto_clean: + rm -rf bin pkg + # golang-go-$os-$arch.install files are auto-generated in override_dh_install + rm -f debian/golang-go-*.install + rm -f debian/*+ + rm -f debian/build.stamp + rm -f test/pass.out test/run.out test/times.out + rm -rf debian/home + +override_dh_auto_build: debian/build.stamp + +override_dh_auto_test: +ifeq ($(RUN_TEST), true) + cd $(CURDIR)/src && \ + $(CURDIR)/debian/test.bash $(GOROOT)/pkg/tool/$(GOHOSTOS)_$(GOHOSTARCH); +else + : +endif + +override_dh_compress: + dh_compress -Xusr/share/doc/$(PACKAGE)-doc/html -Xusr/share/doc/$(PACKAGE)-doc/godoc + +# Generates debian/control from debian/control.base and debian/control.cross. +# In the latter, @OS@ and @ARCH@ are replaced with every supported combination +# of operating system and architecture (e.g. linux_amd64, linux_386, …). +gencontrol: + echo "# DO NOT EDIT THIS FILE. EDIT debian/control.* instead!" > debian/control.tmp + cat debian/control.base >> debian/control.tmp + ${FOR_GO_ARCH} \ + BUILDARCHS=all; \ + [ "$$os" = "linux" ] && BUILDARCHS="i386 amd64 armel armhf"; \ + sed -e "s,@OS@,$$os,g; s,@ARCH@,$$arch,g; s,@BUILDARCHS@,$$BUILDARCHS,g" debian/control.cross >> debian/control.tmp; \ + ${FOR_GO_ARCH_END} + mv debian/control.tmp debian/control + +override_dh_install: + -${FOR_GO_ARCH} \ + echo "pkg/$${os}_$${arch} /usr/lib/go/pkg/" > debian/golang-go-$$os-$$arch.install; \ + [ "$$arch" = "amd64" ] && [ "$$os" = "linux" ] && echo "pkg/linux_amd64_race /usr/lib/go/pkg" >> debian/golang-go-$$os-$$arch.install; \ + echo "golang-go-$$os-$$arch: arch-independent-package-contains-binary-or-object" > debian/golang-go-$$os-$$arch.lintian-overrides; \ + ${FOR_GO_ARCH_END} + # Install the native runtime/cgo.a to the golang-go package. + # runtime/cgo is only built for the native architecture, but the + # golang-go-OS-ARCH packages are built on one particular buildd, which + # might either be i386 or amd64. + echo "listing of $$(pwd):"; ls -hlR . + echo "listing of GOBIN: ($(GOBIN))"; ls -hlR $(GOBIN) + for file in $$(cd pkg/ && ls */runtime/cgo.a); do \ + mkdir -p $(CURDIR)/debian/golang-go/usr/lib/go/pkg/$$(dirname $$file); \ + mv pkg/$$file $(CURDIR)/debian/golang-go/usr/lib/go/pkg/$$file; \ + done + dh_install --fail-missing + # Remove .syso files of the race detector; it is not used yet and the files are arch-dependent. + find $(CURDIR)/debian/golang-src/usr/share/go/src/runtime/race -type f -name '*.syso' -delete + # Remove Plan9 rc(1) scripts + find $(CURDIR)/debian/golang-src/usr/share/go/src -type f -name "*.rc" -delete + # Remove empty /usr/share/go/src from golang-go, it is provided by golang-src + find $(CURDIR)/debian/golang-go/usr/share/go/src -type d -delete + # Subsequently, /usr/share/go is empty, too, so remove + find $(CURDIR)/debian/golang-go/usr/share/go -type d -delete + # For some reason, Go cross-compiles a handful of tools: {yacc,fix,api,vet,cgo}. + # Delete those, as they cannot be ran anyway. + # This is tracked upstream at https://code.google.com/p/go/issues/detail?id=5667 + (cd $(CURDIR)/debian/golang-go/usr/lib/go/pkg/tool && find . -depth -path "./$(GOHOSTOS)_$(GOHOSTARCH)*" -prune -o -delete) + # Touch built and installed files and directories to have same timestamp + touch $(CURDIR)/debian/golang-go/usr/lib/go/pkg + find $(CURDIR)/debian/golang-go/usr/lib/go/pkg -exec touch -r $(CURDIR)/debian/golang-go/usr/lib/go/pkg {} \; + +override_dh_strip: + # strip disabled as golang upstream doesn't support it and it makes go + # crash. See http://bugs.debian.org/717172 + +override_dh_prep: + dh_prep + echo 'go:Hostarch=$(GOHOSTARCH)' >> debian/golang-go.substvars + +override_dh_builddeb: + dh_builddeb -- -Zxz + +override_dh_shlibdeps: + dh_shlibdeps -Xtestdata -Xtest + +debian/build.stamp: + rm -f debian/build.stamp + mkdir -p $(GOBIN) + # Build native tools first, then bootstrap all other GOOS/GOARCH combinations. + cd src && bash ./make.bash --no-banner + # For the race detector to work (go test -race), we need to install the + # std library with the race detector enabled. This will result in + # having an additional “architecture” directory, e.g. linux_amd64_race. + # + # The race detector currently only works on linux/amd64. The check within + # the following loop works precisely the same way src/race.bash does. + -${FOR_GO_ARCH} \ + export GOARCH=$$arch; \ + export GOOS=$$os; \ + cd src && bash ./make.bash --no-clean; \ + [ "$$arch" = "amd64" ] && [ "$$os" = "linux" ] && $(GOBIN)/go install -race std; \ + cd ..; \ + ${FOR_GO_ARCH_END} + >debian/build.stamp + +opt_no_act = +RUN_TEST := true + +ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS))) + $(warning no support for disabling optimization) +endif + +ifneq (,$(findstring n,$(MAKEFLAGS))) + opt_no_act = --no-act +endif + +ifneq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) + RUN_TEST := false +endif + +GOROOT := $(CURDIR) +GOROOT_FINAL := $(libexecdir) +GOBIN := $(CURDIR)$(bindir) +GOARM := + +# Always use the 387 floating point unit instead of sse2. This is important to +# ensure that the binaries we build (both when compiling golang on the buildds +# and when users cross-compile for 386) can actually run on older CPUs (where +# old means e.g. an AMD Athlon XP 2400+). See http://bugs.debian.org/753160 and +# https://code.google.com/p/go/issues/detail?id=8152 +GO386 := 387 + +DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH 2>/dev/null) +DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null) +DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU 2>/dev/null) +DEB_BUILD_ARCH_OS := $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS 2>/dev/null) +DEB_BUILD_ARCH_CPU := $(shell dpkg-architecture -qDEB_BUILD_ARCH_CPU 2>/dev/null) + +ifeq ($(DEB_BUILD_ARCH_OS), kfreebsd) + RUN_TEST := false + GOHOSTOS := freebsd +else ifeq ($(DEB_BUILD_ARCH_OS), linux) + GOHOSTOS := linux +else + $(error unrecongized build host kernel $(DEB_BUILD_ARCH_OS)!) +endif + +ifeq ($(DEB_HOST_ARCH_OS), kfreebsd) + RUN_TEST := false + GOOS := freebsd +else ifeq ($(DEB_HOST_ARCH_OS), linux) + GOOS := linux +else + $(error unrecognized kernel $(DEB_HOST_ARCH_OS)!) +endif + +ifeq ($(DEB_BUILD_ARCH_CPU), i386) + GOHOSTARCH := 386 +else ifeq ($(DEB_BUILD_ARCH_CPU), amd64) + GOHOSTARCH := amd64 +else ifeq ($(DEB_BUILD_ARCH_CPU), arm) + GOHOSTARCH := arm +else ifeq ($(DEB_BUILD_ARCH_CPU), armhf) + GOHOSTARCH := arm +else + $(error unrecognized build host instruction set $(DEB_HOST_ARCH_CPU)!) +endif + +ifeq ($(DEB_HOST_ARCH_CPU), i386) + GOARCH := 386 + GOPREFIX := 8 +else ifeq ($(DEB_HOST_ARCH_CPU), amd64) + GOARCH := amd64 + GOPREFIX := 6 +else ifeq ($(DEB_HOST_ARCH_CPU), arm) + GOARCH := arm + GOPREFIX := 5 +ifeq ($(DEB_HOST_ARCH), armel) + RUN_TEST := false + GOARM := 5 +else ifeq ($(DEB_HOST_ARCH), armhf) + GOARM := 6 +else + $(error unrecognized arm architecture $(DEB_HOST_ARCH)!) +endif +else + $(error unrecognized instruction set $(DEB_HOST_ARCH_CPU)!) +endif + +export GOROOT GOROOT_FINAL GOOS GOARCH GOARM GOBIN GOHOSTARCH GOHOSTOS GO386 + +.PHONY: build clean install binary-arch binary-indep binary |