#! /usr/bin/make -f

##export DH_VERBOSE := 1

arch = $(shell dpkg-architecture -qDEB_HOST_ARCH)

# Work out the source package name and version. The version
# is identical to this package less any rebuild suffix (+lrmN).
src_package := $(shell LC_ALL=C dpkg-parsechangelog -SSource)
src_fullversion = $(shell LC_ALL=C dpkg-parsechangelog -SVersion)
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]*//')
src_series = $(shell dpkg-parsechangelog -SDistribution | sed -e 's/-\(security\|updates\|proposed\)$$//')
src_kernel = $(shell echo "$(src_package)" | sed -e 's/restricted-modules-//')

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

# Get variants, assuming primary if debian/variants is not present
variants = --
ifneq (,$(wildcard debian/variants))
	variants := $(shell cat debian/variants)
endif

control_files := debian/control.common
# control files only wanted for the primary variant
primary_control_files := $(shell LC_ALL=C ls -d debian/control.d/transitionals-* 2>/dev/null)
ifneq ($(filter --, $(variants)),)
	control_files += $(primary_control_files)
endif
control_files += $(filter-out $(primary_control_files),$(shell LC_ALL=C ls -d debian/control.d/*))

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: tp_key=test:provides\(-full\|-image\|-headers\|-modules-extra\)
pre-clean: $(control_files)
	rm -f debian/control.tmp
	for i in $^; do 								\
		if grep -q "{variant:" $$i; then					\
			variant_first='yes';						\
                        for variant in $(variants); do					\
				variant="$$(echo "$$variant" | sed -e 's/--//')";	\
				sed							\
					-e "s/\$${variant:suffix}/$$variant/g"		\
					-e "s/\(\$${$(tp_key)[^}]*}\)/$${variant_first:+\1}/g" \
					<$$i;						\
				echo "";						\
				variant_first='';					\
			done;								\
		else									\
			cat $$i;							\
			echo "";							\
		fi;									\
	done | sed									\
		-e "s/\(\$${$(tp_key)\([^}]*\)}\)/kernel-testing--$(src_kernel)-\1-\2,/g" \
		-e "s/@SRCPKGNAME@/$(src_package)/g"					\
		-e "s/@ABI@/$(src_abi)/g"						\
		-e "s/@VERSION@/$(src_version)/g"					\
		-e "s/@SERIES@/$(src_series)/g"						\
	    >debian/control.tmp
	rm -f debian/control
	mv debian/control.tmp 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/scripts/fix-filenames: debian/scripts/fix-filenames.c
	$(CC) -o $@ $^

clean:: pre-clean

%:
	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) $(6)
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-440-$(src_abi)-$*
	install -d debian/linux-modules-nvidia-440-$(src_abi)-$*/usr/lib/linux/triggers
	$(call build_dkms, $(src_abi)-$*, linux-modules-nvidia-440-$(src_abi)-$*, $(CURDIR)/debian/linux-modules-nvidia-440-$(src_abi)-$*/lib/modules/$(src_abi)-$*/kernel, "", nvidia-440, pool/restricted/n/nvidia-graphics-drivers-440/nvidia-kernel-source-440_$(dkms_nvidia_440_version)_$(arch).deb pool/restricted/n/nvidia-graphics-drivers-440/nvidia-dkms-440_$(dkms_nvidia_440_version)_$(arch).deb)
	$(call install_control,linux-modules-nvidia-440-$(src_abi)-$*,$*,nvidia,440,postinst postrm prerm config templates)

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

override_dh_prep: debian/scripts/fix-filenames
	dh_prep

override_dh_auto_install: prepare-dkms $(flavours)
	dh_install

gencontrol_flags :=
gencontrol_flags += -Vdkms:nvidia-390-modules="nvidia-dkms-390 (= $(dkms_nvidia_390_version))"
gencontrol_flags += -Vdkms:nvidia-440-modules="nvidia-dkms-440 (= $(dkms_nvidia_440_version))"

override_dh_gencontrol:
	dh_gencontrol -- $(gencontrol_flags)
