#!/usr/bin/make -f
# -*- makefile -*-

#export DH_VERBOSE=1
export DH_OPTIONS
export DH_GOPKG := github.com/snapcore/snapd
#export DEB_BUILD_OPTIONS=nocheck
export DH_GOLANG_EXCLUDES=tests
export DH_GOLANG_GO_GENERATE=1

export PATH:=${PATH}:${CURDIR}

RELEASE = $(shell lsb_release -c -s)

SYSTEMD_UNITS_DESTDIR=
ifeq ($(RELEASE),trusty)
	# We are relying on a deputy systemd setup for trusty,
	# in which systemd does not run as PID 1. To solve the
	# problem of services shipping systemd units and upstart jobs
	# being started twice, we altered systemd on trusty to ignore
	# /lib/systemd/system and instead consider only selected units from
	# /lib/systemd/upstart.
	SYSTEMD_UNITS_DESTDIR="lib/systemd/upstart/"
	# make sure that trusty's golang-1.6 is picked up correctly.
	export PATH:=/usr/lib/go-1.6/bin:${PATH}
else
	SYSTEMD_UNITS_DESTDIR="lib/systemd/system/"
endif

# The go tool does not fully support vendoring with gccgo, but we can
# work around that by constructing the appropriate -I flag by hand.
GCCGO := $(shell go tool dist env > /dev/null 2>&1 && echo no || echo yes)

GCCGOFLAGS=
ifeq ($(GCCGO),yes)
GOARCH := $(shell go env GOARCH)
GOOS := $(shell go env GOOS)

GCCGOFLAGS=-gccgoflags="-I $(CURDIR)/_build/pkg/gccgo_$(GOOS)_$(GOARCH)/$(DH_GOPKG)/vendor"
export DH_GOLANG_GO_GENERATE=0
endif

# check if we need to include the testkeys in the binary
TAGS=
ifneq (,$(filter testkeys,$(DEB_BUILD_OPTIONS)))
	TAGS=-tags withtestkeys
endif

%:
	dh $@ --buildsystem=golang --with=golang --fail-missing --with systemd --builddirectory=_build

override_dh_auto_build:
	mkdir -p _build/src/$(DH_GOPKG)/cmd/snap/test-data
	cp -a cmd/snap/test-data/*.gpg _build/src/$(DH_GOPKG)/cmd/snap/test-data/
	dh_auto_build -- $(TAGS) $(GCCGOFLAGS)


override_dh_auto_test:
	dh_auto_test -- $(GCCGOFLAGS)
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	# check that only the main trusted account-key is included
	[ $$(strings _build/bin/snapd|grep -c -E "public-key-sha3-384: [a-zA-Z0-9_-]{64}") -eq 1 ]
	strings _build/bin/snapd|grep -c "^public-key-sha3-384: -CvQKAwRQ5h3Ffn10FILJoEZUXOv6km9FwA80-Rcj-f-6jadQ89VRswHNiEB9Lxk$$"
endif

override_dh_systemd_enable:
	# enable auto-import
	dh_systemd_enable \
		-psnapd \
		snapd.autoimport.service
	# we want the auto-update timer enabled by default
	dh_systemd_enable \
		-psnapd \
		snapd.refresh.timer
	# but the auto-update service disabled
	dh_systemd_enable \
		--no-enable \
		-psnapd \
		snapd.refresh.service
	# enable snapd
	dh_systemd_enable \
		-psnapd \
		snapd.socket
	dh_systemd_enable \
		-psnapd \
		snapd.service

override_dh_systemd_start:
	# we want to start the auto-update timer
	dh_systemd_start \
		-psnapd \
		snapd.refresh.timer
	# but not start the service
	dh_systemd_start \
		--no-start \
		-psnapd \
		snapd.refresh.service
	# start snapd
	dh_systemd_start \
		-psnapd \
		snapd.socket
	dh_systemd_start \
		-psnapd \
		snapd.service
	# start autoimport
	dh_systemd_start \
		-psnapd \
		snapd.autoimport.service

override_dh_install:
	# we do not need this in the package, its just needed during build
	rm -rf ${CURDIR}/debian/tmp/usr/bin/xgettext-go
	# uboot-go is not shippable
	rm -f ${CURDIR}/debian/tmp/usr/bin/uboot-go
	# toolbelt is not shippable
	rm -f ${CURDIR}/debian/tmp/usr/bin/toolbelt
	# we do not like /usr/bin/snappy anymore
	rm -f ${CURDIR}/debian/tmp/usr/bin/snappy
	# install dev package files
	mkdir -p debian/golang-github-snapcore-snapd-dev/usr/share
	cp -R debian/tmp/usr/share/gocode debian/golang-github-snapcore-snapd-dev/usr/share
	# install udev stuff, must be installed before 80-udisks
	install debian/snapd.autoimport.udev -D debian/snapd/lib/udev/rules.d/66-snapd-autoimport.rules

	# install binaries and needed files
	install debian/tmp/usr/bin/snap -D debian/snapd/usr/bin/snap
	install debian/tmp/usr/bin/snapctl -D debian/snapd/usr/bin/snapctl
	install debian/tmp/usr/bin/snapd -D debian/snapd/usr/lib/snapd
	install debian/tmp/usr/bin/snap-exec -D debian/snapd/usr/lib/snapd
	install --mode=0644 data/completion/snap -D debian/snapd/usr/share/bash-completion/completions/snap
	# i18n stuff
	mkdir -p debian/snapd/usr/share
	if [ -d share/locale ]; then \
		cp -R share/locale debian/snapd/usr/share; \
	fi
	# etc/profile.d contains the PATH extension for snap packages
	mkdir -p debian/snapd/etc
	cp -R etc/profile.d debian/snapd/etc
	# etc/X11/Xsession.d will add to XDG_DATA_DIRS so that we have .desktop support
	mkdir -p debian/snapd/etc
	cp -R etc/X11 debian/snapd/etc
	# we conditionally install snapd's systemd units
	mkdir -p debian/snapd/$(SYSTEMD_UNITS_DESTDIR)
	install --mode=0644 debian/snapd.refresh.timer debian/snapd/$(SYSTEMD_UNITS_DESTDIR)
	install --mode=0644 debian/snapd.refresh.service debian/snapd/$(SYSTEMD_UNITS_DESTDIR)
	install --mode=0644 debian/snapd.autoimport.service debian/snapd/$(SYSTEMD_UNITS_DESTDIR)
	install --mode=0644 debian/*.socket debian/snapd/$(SYSTEMD_UNITS_DESTDIR)
	install --mode=0644 debian/snapd.service debian/snapd/$(SYSTEMD_UNITS_DESTDIR)
ifeq ($(RELEASE),trusty)
	dh_link debian/snapd/$(SYSTEMD_UNITS_DESTDIR)/snapd.service debian/snapd/$(SYSTEMD_UNITS_DESTDIR)/multi-user.target.wants/snapd.service
	dh_link debian/snapd/$(SYSTEMD_UNITS_DESTDIR)/snapd.autoimport.service debian/snapd/$(SYSTEMD_UNITS_DESTDIR)/multi-user.target.wants/snapd.autoimport.service
endif

override_dh_auto_install: snap.8
	dh_auto_install -O--buildsystem=golang

snap.8:
	$(CURDIR)/_build/bin/snap help --man > $@

override_dh_auto_clean:
	dh_auto_clean -O--buildsystem=golang
	rm -vf snap.8
