#!/usr/bin/make -f
#
# $(DEBIAN)/rules for Ubuntu linux
#
# Use this however you want, just give credit where credit is due.
#
# Copyright (c) 2007 Ben Collins <bcollins@ubuntu.com>
#

ifeq ($(DEBIAN),)
DEBIAN=debian.fsl-imx51
endif

# dpkg-buildpackage passes options that are incomptatible
# with the kernel build.
unexport CFLAGS
unexport LDFLAGS

# This is the debhelper compatability version to use.
export DH_COMPAT=4
export LC_ALL=C
export SHELL=/bin/bash -e

# Common variables for all architectures
include $(DEBIAN)/rules.d/0-common-vars.mk

# Pull in some arch specific stuff
include $(DEBIAN)/rules.d/$(arch).mk

# Maintainer targets
include $(DEBIAN)/rules.d/1-maintainer.mk

# Debian Build System targets
binary: binary-indep binary-arch

build: build-arch build-indep

clean: debian/control
	dh_testdir
	dh_testroot
	dh_clean

	# d-i stuff
	rm -rf $(DEBIAN)/d-i-$(arch)

	# normal build junk
	rm -rf $(DEBIAN)/abi/$(release)-$(revision)
	rm -rf $(builddir)
	rm -f $(stampdir)/stamp-*
	rm -rf debian/linux-* debian/libc-dev* debian/d-i* $(DEBIAN)/*-di

	# This gets rid of the d-i packages in control
	cp -f $(DEBIAN)/control.stub $(DEBIAN)/control
	cp $(DEBIAN)/changelog debian/changelog
	rm -f $(DEBIAN)/control.stub $(DEBIAN)/d-i/kernel-versions

	# Install the copyright information.
	cp $(DEBIAN)/copyright debian/copyright

# Builds the source, doc and linux-headers indep packages
include $(DEBIAN)/rules.d/3-binary-indep.mk

# Builds the image, arch headers and debug packages
include $(DEBIAN)/rules.d/2-binary-arch.mk

# Rules for building the udebs ($(DEBIAN)-installer)
include $(DEBIAN)/rules.d/5-udebs.mk

# Various checks to be performed on builds
include $(DEBIAN)/rules.d/4-checks.mk

# Misc stuff
$(DEBIAN)/control.stub: $(DEBIAN)/d-i/kernel-versions.in	\
		$(DEBIAN)/scripts/control-create		\
		$(DEBIAN)/control.stub.in			\
		$(DEBIAN)/changelog			\
		$(wildcard $(DEBIAN)/control.d/* $(DEBIAN)/sub-flavours/*.vars)
	for i in $(DEBIAN)/d-i/kernel-versions.in $(DEBIAN)/control.stub.in; do	\
	  new=`echo $$i | sed 's/\.in$$//'`;					\
	  cat $$i | sed -e 's/PKGVER/$(release)/g'                              \
		-e 's/ABINUM/$(abinum)/g'                                       \
		-e 's/SRCPKGNAME/$(src_pkg_name)/g'                             \
	  > $$new;								\
	done
	flavours="$(wildcard $(DEBIAN)/control.d/vars.* $(DEBIAN)/sub-flavours/*.vars)";\
	for i in $$flavours; do							\
	  $(SHELL) $(DEBIAN)/scripts/control-create $$i |				\
		sed -e 's/PKGVER/$(release)/g'                                  \
		-e 's/ABINUM/$(abinum)/g'                                       \
		-e 's/SRCPKGNAME/$(src_pkg_name)/g'                             \
		>> $(DEBIAN)/control.stub;						\
	done
	cp $(DEBIAN)/control.stub $(DEBIAN)/control

.PHONY: debian/control
debian/control: $(DEBIAN)/control.stub
	rm -rf $(builddir)/modules $(builddir)/firmware			\
		$(builddir)/kernel-versions $(builddir)/package-list	\
		$(builddir)/$(DEBIAN)
	mkdir -p $(builddir)/modules/$(arch)/
	cp $(DEBIAN)/d-i/modules/* $(builddir)/modules/$(arch)/
	mkdir -p $(builddir)/firmware/$(arch)/
	cp $(DEBIAN)/d-i/firmware/* $(builddir)/firmware/$(arch)/
	cp $(DEBIAN)/d-i/package-list $(DEBIAN)/d-i/kernel-versions $(builddir)/
	touch $(builddir)/modules/$(arch)/kernel-image
	# kernel-wedge needs to poke around in $(DEBIAN)/
	ln -nsf $(CURDIR)/debian $(builddir)/debian

	# Some files may need to differ between architectures
	if [ -d $(DEBIAN)/d-i/modules-$(arch) ]; then			\
	    cp $(DEBIAN)/d-i/modules-$(arch)/* \
		$(builddir)/modules/$(arch)/;				\
	fi
	if [ -d $(DEBIAN)/d-i/firmware-$(arch) ]; then			\
	    cp $(DEBIAN)/d-i/firmware-$(arch)/* \
		$(builddir)/firmware/$(arch)/;				\
	fi

	# Remove unwanted stuff for this architecture
	if [ -r "$(DEBIAN)/d-i/exclude-modules.$(arch)" ]; then		\
	    (cat $(DEBIAN)/d-i/exclude-modules.$(arch);			\
	     ls $(builddir)/modules/$(arch)/) | sort | uniq -d |	\
		(cd $(builddir)/modules/$(arch)/; xargs rm -f);		\
	fi
	if [ -r "$(DEBIAN)/d-i/exclude-firmware.$(arch)" ]; then		\
	    (cat $(DEBIAN)/d-i/exclude-firmware.$(arch);			\
	     ls $(builddir)/firmware/$(arch)/) | sort | uniq -d |	\
		(cd $(builddir)/firmware/$(arch)/; xargs rm -f);	\
	fi

	# Per flavour module lists
	flavour_modules=`ls $(DEBIAN)/d-i/modules.$(arch)-* 2>/dev/null`	\
		|| true;						\
	if [ "$$flavour_modules" != "" ]; then				\
	    for flav in $$flavour_modules; do				\
		name=`echo $$flav | sed 's/.*\/modules.$(arch)-//'`;	\
		mkdir $(builddir)/modules/$(arch)-$$name;		\
		(cd $(builddir)/modules/; tar cf - `cat ../$$flav`) |	\
		    (cd $(builddir)/modules/$(arch)-$$name/; tar xf -);	\
		touch $(builddir)/modules/$(arch)-$$name/kernel-image;	\
	    done;							\
	fi
	flavour_firmware=`ls $(DEBIAN)/d-i/firmware.$(arch)-* 2>/dev/null`	\
		|| true;						\
	if [ "$$flavour_firmware" != "" ]; then				\
	    for flav in $$flavour_firmware; do				\
		name=`echo $$flav | sed 's/.*\/firmware.$(arch)-//'`;	\
		mkdir $(builddir)/firmware/$(arch)-$$name;		\
		(cd $(builddir)/firmware/; tar cf - `cat ../$$flav`) |	\
		    (cd $(builddir)/firmware/$(arch)-$$name/; tar xf -);\
		touch $(builddir)/firmware/$(arch)-$$name/kernel-image;	\
	    done;							\
	fi

	# Some files may need to differ between flavours
	flavour_module_dirs=`ls -d $(DEBIAN)/d-i/modules-$(arch)-* 2>/dev/null`\
		|| true;						\
	if [ "$$flavour_module_dirs" ]; then				\
	    for flav in $$flavour_module_dirs; do			\
		name=`echo $$flav | sed 's/.*\/modules-$(arch)-//'`;	\
		[ -d $(builddir)/modules/$(arch)-$$name ] ||		\
		    cp -a $(builddir)/modules/$(arch)			\
			modules/$(arch)-$$name;				\
		cp $$flav/* $(builddir)/modules/$(arch)-$$name/;	\
	    done;							\
	fi
	flavour_firmware_dirs=`ls -d $(DEBIAN)/d-i/firmware-$(arch)-* 2>/dev/null`\
		|| true;						\
	if [ "$$flavour_firmware_dirs" ]; then				\
	    for flav in $$flavour_firmware_dirs; do			\
		name=`echo $$flav | sed 's/.*\/firmware-$(arch)-//'`;	\
		[ -d $(builddir)/firmware/$(arch)-$$name ] ||		\
		    cp -a $(builddir)/firmware/$(arch)			\
			firmware/$(arch)-$$name;			\
		cp $$flav/* $(builddir)/firmware/$(arch)-$$name/;	\
	    done;							\
	fi

	# Remove unwanted stuff for each flavour
	flavour_exclude=`ls $(DEBIAN)/d-i/exclude-modules.$(arch)-* 2>/dev/null`\
		|| true;						\
	if [ "$$flavour_exclude" ]; then				\
	    for flav in $$flavour_exclude; do				\
		name=`echo $$flav | sed 's/.*\/exclude-modules.$(arch)-//'`;\
		[ -d $(builddir)/modules/$(arch)-$$name ] ||		\
		    cp -a $(builddir)/modules/$(arch) 			\
			$(builddir)/modules/$(arch)-$$name;		\
		(cat $$flav;						\
		 ls $(builddir)/modules/$(arch)-$$name) |		\
		 sort |	uniq -d |					\
		    (cd $(builddir)/modules/$(arch)-$$name/;		\
		     xargs rm -f);					\
	    done;							\
	fi
	flavour_exclude=`ls $(DEBIAN)/d-i/exclude-firmware.$(arch)-* 2>/dev/null`\
		|| true;						\
	if [ "$$flavour_exclude" ]; then				\
	    for flav in $$flavour_exclude; do				\
		name=`echo $$flav | sed 's/.*\/exclude-firmware.$(arch)-//'`;\
		[ -d $(builddir)/firmware/$(arch)-$$name ] ||		\
		    cp -a $(builddir)/firmware/$(arch) 			\
			$(builddir)/firmware/$(arch)-$$name;		\
		(cat $$flav;						\
		 ls $(builddir)/firmware/$(arch)-$$name) |		\
		 sort |	uniq -d |					\
		    (cd $(builddir)/firmware/$(arch)-$$name/;		\
		     xargs rm -f);					\
	    done;							\
	fi

	if [ ! -d $(builddir)/modules/$(build_arch) ]; then		\
		mkdir -p $(builddir)/modules/$(build_arch);		\
		cp $(builddir)/modules/$(arch)/*			\
			$(builddir)/modules/$(build_arch);		\
	fi
	if [ ! -d $(builddir)/firmware/$(build_arch) ]; then		\
		mkdir -p $(builddir)/firmware/$(build_arch);		\
		cp $(builddir)/firmware/$(arch)/*			\
			$(builddir)/firmware/$(build_arch);		\
	fi

	cp $(DEBIAN)/control.stub debian/control.stub
	cd $(builddir) && kernel-wedge gen-control > $(CURDIR)/debian/control
