#!/usr/bin/make -f

SHELL=/bin/bash -e

DEBIAN=debian

SERIES=$(shell dpkg-parsechangelog -l$(DEBIAN)/changelog -SDistribution | sed -e 's/-\(security\|updates\|proposed\)$$//')
SOURCE=$(shell dpkg-parsechangelog -l$(DEBIAN)/changelog -SSource)

VERSION=$(shell dpkg-parsechangelog -l$(DEBIAN)/changelog -SVersion)
KERNEL_ABI_VERSION=$(shell echo "$(VERSION)" | sed -ne 's/\([0-9]*\.[0-9]*\.[0-9]*\-[0-9]*\)\..*/\1/p')
KERNEL_MAIN_VERSION=$(shell echo "$(VERSION)" | sed -e 's/\+[0-9][0-9]*$$//')
KERNEL_META_VERSION=$(KERNEL_ABI_VERSION)

DEB_HOST_ARCH=$(shell dpkg-architecture -qDEB_HOST_ARCH)

FLAVOURS=nvidia-tegra nvidia-tegra-rt
PACKAGED_BRANCHES=jetson
# List of retired branches and their pinned ABI. Format is <branch>=<abi>
RETIRED_BRANCHES=
# Generate control stanzas for only these branches, i.e PACKAGED_BRANCHES/RETIRED_BRANCHES
CONTROL_GEN_BRANCHES=$(filter-out $(shell echo "$(RETIRED_BRANCHES)" | sed -E 's/(\S+)=\S+/\1/g'),$(PACKAGED_BRANCHES))

# Ensure the directory prefix is exactly 100 characters long so pathnames are the
# exact same length in any binary files produced by the builds.  These will be
# commonised later.
dkms_20d=....................
dkms_120d=$(dkms_20d)$(dkms_20d)$(dkms_20d)$(dkms_20d)$(dkms_20d)$(dkms_20d)
dkms_120c=$(shell echo '$(dkms_120d)' | sed -e 's/\./_/g')
#dkms_dir=$(shell echo '$(CURDIR)/$(dkms_100c)' | \
#	sed -e 's/\($(dkms_100d)\).*/\1/' -e 's/^\(.*\)....$$/\1dkms/')
define dkms_dir_prefix =
$(strip $(shell echo '$(1)/$(dkms_120c)' | \
	sed -e 's/\($(dkms_120d)\).*/\1/' -e 's/^\(.*\)....$$/\1dkms/'))
endef

define build_dkms =
	$(SHELL) debian/scripts/dkms-build $(1) $(2) --nosign $(3) $(4) $(5) $(6) $(7)
endef

clean: debian/control
	dh_testdir
	dh_testroot
	rm -rf debian/tmp SIGNING BUILD
	dh_clean

debian/control:
	cp $(DEBIAN)/control.stub $(DEBIAN)/control.in
	rm -f $(DEBIAN)/control.branch
	for branch in $(CONTROL_GEN_BRANCHES); \
	do \
		branch_escaped=$${branch//./\\.}; \
		cat $(DEBIAN)/control.d/branch.stub | sed >>$(DEBIAN)/control.branch \
			-e "s/@BRANCH@/$$branch/g" \
			-e "/<!branch\.$$branch_escaped/d" \
			-e "/<branch\..*>/b @ ; p ; :@ /<branch\.$$branch_escaped>/!d"; \
	done
	for flavour in $(FLAVOURS); \
	do \
		cat $(DEBIAN)/control.branch | sed >>$(DEBIAN)/control.in \
			-e "s/@FLAVOUR@/$$flavour/g" \
			-e "/<!flavour\.$$flavour>/d"; \
	done
	cat $(DEBIAN)/control.in | sed -E >debian/control		\
		-e 's/@SERIES@/$(SERIES)/g'				\
		-e 's/@KERNEL_ABI_VERSION@/$(KERNEL_ABI_VERSION)/g'	\
		-e 's/@SRCPKGNAME@/$(SOURCE)/g'				\
		-e 's/@KERNEL_MAIN_VERSION@/$(KERNEL_MAIN_VERSION)/g'	\
		-e 's/@KERNEL_META_VERSION@/$(KERNEL_META_VERSION)/g'	\
		-e 's/<!?flavour\..*>//g'				\
		-e 's/<!?branch\..*>//g'


# fix-filename script is used by dkms-build script
debian/scripts/fix-filenames: debian/scripts/fix-filenames.c
	$(CC) -o $@ $^

.PHONY: debian/control debian/scripts/fix-filenames

%:
	dh $@

override_dh_auto_build: signing = $(CURDIR)/SIGNING
override_dh_auto_build: signingv = $(signing)/$(VERSION)
override_dh_auto_build: signing_tar = $(SOURCE)_$(VERSION)_$(DEB_HOST_ARCH).tar.gz
override_dh_auto_build: debian/scripts/fix-filenames
	install -d $(signingv)/control
	{ echo "tarball"; } >$(signingv)/control/options

	./debian/scripts/build-modules "$(CURDIR)/BUILD" "$(signingv)" "$(KERNEL_ABI_VERSION)" $(FLAVOURS)

	@echo "v- signables"
	ls -R $(signing)
	@echo "^- signables"

	cd $(signing) && tar czvf ../../$(signing_tar) .
	dpkg-distaddfile $(signing_tar) raw-signing -

override_dh_auto_install: srcversion = $(SOURCE)-$(KERNEL_ABI_VERSION)
override_dh_auto_install: sourcedir = $(CURDIR)/debian/$(srcversion)-source/usr/src/$(srcversion)
override_dh_auto_install:
	mkdir -p "$(sourcedir)"

	while read -r path; \
	do \
		cp -av "$$path" "$(sourcedir)"; \
	done <<< $$(find "$(CURDIR)/BUILD" -name "*.deb")

	for flavour in $(FLAVOURS); \
	do \
		for path in $(CURDIR)/BUILD/$$flavour/headers/*; \
		do \
			hdrname=$$(basename "$$path"); \
			pkgname=linux-headers-$$hdrname-$(KERNEL_ABI_VERSION)-$$flavour; \
			pkgdir=$(CURDIR)/debian/$$pkgname; \
			hdrdst=$$pkgdir/usr/src/$$pkgname; \
			mkdir -p "$$hdrdst"; \
			cp -av "$$path"/* "$$hdrdst"; \
		done \
	done
