#!/usr/bin/make -f
#
# debian/rules for kernel-source.
#
# GNU copyright 1997 to 1999 by Joey Hess.
# Copyright (c) 1999-2004 Herbert Xu <herbert@gondor.apana.org.au>
# Copyright (c) 2004 Jens Schmalzing <jensen@debian.org>
#

SERIES=$(shell dpkg-parsechangelog | sed -ne 's/^Distribution: *//p' | sed -e 's/-\(security\|updates\|proposed\)$$//')
SOURCE=$(shell dpkg-parsechangelog | sed -ne 's/^Source: *//p')
KERNEL_SOURCE=$(shell echo "$(SOURCE)" | sed -e 's/-meta//')

VARIANT_PROVIDES=$(shell echo "$(SOURCE)" | sed -e 's/linux-meta-//')

# 5 digit versions (2.6.38.<abi>.<upload>, 3 digit kernel base versions (2.6.38)
KERNEL_VERSION=$(shell dpkg-parsechangelog -SVersion | cut -d. -f1-3)
KERNEL_ABI=$(shell dpkg-parsechangelog -SVersion | cut -d. -f4)

KERNEL_ABI_VERSION=$(KERNEL_VERSION)-$(KERNEL_ABI)

# Get variants, assumng 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 := debian/control.d/primary $(shell LC_ALL=C ls -d debian/control.d/transitionals-*)
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/*))

SHELL := sh -e

clean: debian/control
	dh_testdir
	dh_testroot
	dh_clean

# Versions of dkms packages.
dkms_zfs_linux_version=$(shell gawk '/^zfs-linux / { print $$2; }' debian/dkms-versions)
dkms_vbox_guest_version=$(shell gawk '/^virtualbox/ { print $$2; }' debian/dkms-versions)
dkms_wireguard_version=$(shell /sbin/modinfo -F version /lib/modules/$(KERNEL_ABI_VERSION)-oem/kernel/drivers/net/wireguard/wireguard.ko)

define variant_payload
variant="$$(echo '$(variant)' | sed -e 's/--//')"; \
sed -e "s/\$${variant:suffix}/$$variant/g" -e "s/\$${variant:provides\(\|-image\|-headers\)}/$${variant_provides:+linux\1-$$variant_provides}/" <$$i; \
variant_provides=''; \
echo "";
endef

debian/control: $(control_files)
	for i in $^; do \
		if grep -q "{variant:" $$i; then \
			variant_provides="$(VARIANT_PROVIDES),"; \
			$(foreach variant,$(variants),$(variant_payload)) \
		else \
			cat $$i; \
			echo ""; \
		fi; \
	done | sed \
		-e 's/@SERIES@/$(SERIES)/g' \
		-e 's/@kernel-abi-version@/$(KERNEL_ABI_VERSION)/g' \
		-e 's/SRCPKGNAME/$(SOURCE)/g' \
		-e 's/@KERNEL_SOURCE@/$(KERNEL_SOURCE)/g' \
	    >$@.tmp
	rm -f $@
	mv $@.tmp $@

.PHONY: debian/control

gencontrol_flags = -Vkernel-version=$(KERNEL_VERSION)
gencontrol_flags += -Vkernel-abi-version=$(KERNEL_ABI_VERSION)
gencontrol_flags += -Vdkms:zfs-modules="zfs-modules (= $(dkms_zfs_linux_version)),"
gencontrol_flags += -Vdkms:virtualbox-guest-modules="virtualbox-guest-modules (= $(dkms_vbox_guest_version)),"
gencontrol_flags += -Vdkms:wireguard-linux-compat-modules="wireguard-modules (= $(dkms_wireguard_version)),"

build-%:
	:

install-%: build-%
	dh_testdir
	dh_testroot
	dh_prep

binary-arch: t=-a
binary-indep: t=-i
binary-%: debian/control install-%
	dh_testdir
	dh_testroot

	dh_installdirs $(t)
	dh_installdocs $(t)
	dh_installchangelogs $(t)
	dh_compress $(t)
	dh_fixperms $(t)
	dh_installdeb $(t)
	dh_gencontrol $(t) -- $(gencontrol_flags)
	dh_md5sums $(t)
	dh_builddeb $(t)

build: build-indep build-arch
binary: binary-indep binary-arch

.PHONY: clean
