#!/bin/bash

set -e

if [ "$1" = "variants" ]; then
	find /lib/modules -xtype d -name build | while read kbuild; do
		echo -n $kbuild | sed -ne 's#/lib/modules/\(.*\)/build#\1#p'
		echo -n " "
	done
	exit 0;
fi

# crude, yet simple
if [ "$1" = "metapackages" ]; then
	cat debian/control | grep -B3 "^Section: metapackages" | grep "^Package: " | cut -d " " -f2 | tr "\n" " "
	exit 0
fi

function get_kpkg()
{
	kpkg=`dpkg-query --showformat='${Version}' --show linux-headers-$1`

	if [ -z "$kpkg" ]; then
		echo "can't detect version of kernel headers for variant $1"
		exit 1
	fi
}

#env
# generate control only when actually building (inside pbuilder chroot)
if [ -z "$DEB_TARGET_ARCH" ]; then
	exit 0
fi

if ! [ -s debian/control.in ] || \
   ! [ -s debian/control.flavour.in ]; then
	echo "missing input files"
	exit 1
fi

arch=$1
vari=$2

if [ -z "$arch" ] || [ -z "$vari" ]; then
	echo "usage: $0 <deb-arch> <variants>"
	exit 1
fi

STUB=`dpkg-parsechangelog -SSource`
if [ -z "$STUB" ]; then
	echo "can't detect package name"
fi

debv=`dpkg-parsechangelog -SVersion`
if [ -z "$debv" ]; then
	echo "can't detect package version"
fi

cat debian/control.in | sed \
	-e 's#DEBVER#'${debv}'#g' \
	-e 's#STUB#'${STUB}'#g' \
	 > debian/control

for v in $vari; do
	get_kpkg $v
	rele=`echo $v | sed -ne 's#\([^-]*-[^-]*\)-.*#\1#p'`
	flav=`echo $v | sed -ne 's#[^-]*-[^-]*-\(.*\)#\1#p'`
	kern_maj=`echo ${rele} | cut -d '.' -f1-2`

	cat debian/control.flavour.in | sed \
	-e 's#ARCH#'${arch}'#g' \
	-e 's#VARIANT#'${v}'#g' \
	-e 's#KRELEASE#'${rele}'#g' \
	-e 's#FLAVOUR#'${flav}'#g' \
	-e 's#KPKGVER#'${kpkg}'#g' \
	-e 's#DEBVER#'${debv}'#g' \
	-e 's#KERN_MAJ#'${kern_maj}'#g' \
	-e 's#STUB#'${STUB}'#g' \
	 >> debian/control
done

if [ -s debian/control.rel.in ]; then
	kern_majs=`find /lib/modules -xtype d -name build | \
		sed -ne 's#/lib/modules/\([0-9]*\.[0-9]*\)\..*/build#\1#p' | sort -u`

	for k in $kern_majs; do

		IFS=''
		cat debian/control.rel.in | sed \
		-e 's#ARCH#'${arch}'#g' \
		-e 's#KERN_MAJ#'${k}'#g' \
		-e 's#STUB#'${STUB}'#g' \
		 | while read l; do
				if [[ "$l" =~ .*FLAVOUR.* ]]; then
				IFS=$'\n'
				flavs=`find /lib/modules/${k}* -xtype d -name build | \
					sed -ne 's#/lib/modules/[^-]*-[^-]*-\(.*\)/build#\1#p' | sort -u`
				for f in $flavs; do
					echo " $l" | sed -e 's#FLAVOUR#'${f}'#g' >> debian/control
				done
				IFS=''
			else
				echo "$l" >> debian/control
			fi
		done
		echo "" >> debian/control
	done
fi

echo "---- generated control file:"
nl -ba debian/control
echo "----"
