#! /usr/bin/make -f

##export DH_VERBOSE := 1

#VERSION := $(shell LC_ALL=C dpkg-parsechangelog | grep ^Version: | cut -d ' ' -f 2)
arch = $(shell dpkg-architecture -qDEB_HOST_ARCH)

# Work out the source package name and version.  We assume the source package
# is the name of this package with -restricted-modules stripped.  The version
# is identical to this package less any rebuild suffix (+lrmN).
src_package := $(shell LC_ALL=C dpkg-parsechangelog | grep ^Source: | cut -d ' ' -f 2 | sed -e 's/-restricted-modules//')
src_fullversion = $(shell LC_ALL=C dpkg-parsechangelog | grep ^Version: | cut -d ' ' -f 2)
src_abi = $(shell echo "$(src_fullversion)" | sed -ne 's/\([0-9]*\.[0-9]*\.[0-9]*\-[0-9]*\)\..*/\1/p')
src_version = $(shell echo $(src_fullversion) | sed -e 's/+[0-9][0-9]*//')

dkms_nvidia_390_version=$(shell gawk '/^nvidia-graphics-drivers-390/ { print $$2; }' debian/dkms-versions)
dkms_nvidia_418_version=$(shell gawk '/^nvidia-graphics-drivers-418/ { print $$2; }' debian/dkms-versions)

control_files := debian/control.stub $(shell LC_ALL=C ls -d debian/control.d/*)

# Variants: -- is prime and implies no suffix (-- -edge -lts-18.04)
variants=-edge

define variant_payload
variant="$$(echo '$(variant)' | sed -e 's/--//')"; \
sed -e "s/\$${variant:suffix}/$$variant/g" <$$i; \
echo "";
endef

test:
	echo "$(src_fullversion) $(src_version)"

# We build our control file.  This has to be done before dh runs otherwise
# we have no binary files and we will not run the appropriate targets.
pre-clean: debian/control
	rm -rf ./$(src_version) UNSIGNED SIGNED
	rm -f 	debian/linux-modules-*.install				\
		debian/linux-modules-*.preinst 				\
		debian/linux-modules-*.prerm 				\
		debian/linux-modules-*.postinst 				\
		debian/linux-modules-*.postrm
	rm -rf $(dkms_dir)

PHONY: pre-clean

debian/control: $(control_files)
	for i in $^; do 						  \
		if grep -q "{variant:" $$i; then 			  \
			$(foreach variant,$(variants),$(variant_payload)) \
		else							  \
			cat $$i;					  \
		fi;							  \
	done | sed							  \
		-e "s/ABI/$(src_abi)/g"					  \
		-e "s/VERSION/$(src_version)/g"				  \
		>$@

debian/scripts/fix-filenames: debian/scripts/fix-filenames.c
	cc -o $@ $^

clean:: pre-clean debian/scripts/fix-filenames

%:
	dh $@

# 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_100d=$(dkms_20d)$(dkms_20d)$(dkms_20d)$(dkms_20d)$(dkms_20d)
dkms_100c=$(shell echo '$(dkms_100d)' | 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_100c)' | \
	sed -e 's/\($(dkms_100d)\).*/\1/' -e 's/^\(.*\)....$$/\1dkms/'))
endef
dkms_dir=$(call dkms_dir_prefix,$(CURDIR))

define build_dkms =
	$(SHELL) debian/scripts/dkms-build $(dkms_dir) $(1) --lrm $(2) $(3) $(4) $(5)
endef

ifeq ($(arch),ppc64el)
instfile=vmlinux
else
instfile=vmlinuz
endif

define install_control =
	for which in $(5);							\
	do									\
		template="debian/templates/$(3).$$which.in";			\
		script="debian/$(1).$$which";					\
		sed -e 's/@abiname@/$(src_abi)/g'				\
		    -e 's/@localversion@/-$(2)/g'				\
		    -e 's/@image-stem@/$(instfile)/g'				\
		    -e 's/@nvidia-ver@/$(4)/g'					\
			<"$$template" >"$$script";				\
	done
endef

signatures=$(wildcard /usr/lib/linux/$(src_abi)-*)
flavours=$(patsubst /usr/lib/linux/$(src_abi)-%,nvidia-%,$(signatures))

nvidia-%:
	rm -rf $(dkms_dir)/build $(dkms_dir)/source
	mkdir -p $(dkms_dir)/build $(dkms_dir)/source
	install -d debian/linux-modules-nvidia-390-$(src_abi)-$*
	install -d debian/linux-modules-nvidia-390-$(src_abi)-$*/usr/lib/linux/triggers
	$(call build_dkms, $(src_abi)-$*, linux-modules-nvidia-390-$(src_abi)-$*, $(CURDIR)/debian/linux-modules-nvidia-390-$(src_abi)-$*/lib/modules/$(src_abi)-$*/kernel, nvidia-390, pool/restricted/n/nvidia-graphics-drivers-390/nvidia-kernel-source-390_$(dkms_nvidia_390_version)_$(arch).deb pool/restricted/n/nvidia-graphics-drivers-390/nvidia-dkms-390_$(dkms_nvidia_390_version)_$(arch).deb)
	$(call install_control,linux-modules-nvidia-390-$(src_abi)-$*,$*,nvidia,390,postinst postrm prerm config templates)

	install -d debian/linux-modules-nvidia-418-$(src_abi)-$*
	install -d debian/linux-modules-nvidia-418-$(src_abi)-$*/usr/lib/linux/triggers
	$(call build_dkms, $(src_abi)-$*, linux-modules-nvidia-418-$(src_abi)-$*, $(CURDIR)/debian/linux-modules-nvidia-418-$(src_abi)-$*/lib/modules/$(src_abi)-$*/kernel, nvidia-418, pool/restricted/n/nvidia-graphics-drivers-418/nvidia-kernel-source-418_$(dkms_nvidia_418_version)_$(arch).deb pool/restricted/n/nvidia-graphics-drivers-418/nvidia-dkms-418_$(dkms_nvidia_418_version)_$(arch).deb)
	$(call install_control,linux-modules-nvidia-418-$(src_abi)-$*,$*,nvidia,418,postinst postrm prerm config templates)

prepare-dkms:
	mkdir -p $(dkms_dir)
	ln -s /usr/src $(dkms_dir)/headers

override_dh_auto_install: prepare-dkms $(flavours)
	dh_install
