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

# This is the debhelper compatability version to use.
export DH_COMPAT=4

SHELL := sh -e

stem := xen

# extract the upstream release and the full package version from the changelog
release	:= $(shell sed -n '1s/^.*(\(.*\)-.*).*$$/\1/p' debian/changelog)

# extract the version from the package name that can be different from release
pkgversion := $(shell sed -n '1s/^$(stem)-source-\([^ ]*\) .*/\1/p' debian/changelog)

# extract all the Debian revisions for this release from the changelog
revisions := $(shell sed -n 's/^$(stem)-source-$(pkgversion)\ .*($(release)-\(.*\)).*$$/\1/p' debian/changelog | tac)

# set the current Debian revision to the latest by default;
# note that for some targets, the two may actually be different.
revision ?= $(word $(words $(revisions)),$(revisions))

# Get the previously built revision; we compare ABIs with that.  If no 
# previous revision, default to 0.
prev_revisions := $(filter-out $(revision),0 $(revisions))
prev_revision := $(word $(words $(prev_revisions)),$(prev_revisions))

abidir := $(CURDIR)/debian/abi
skipabi := false

version.Debian: 
	echo $(pkgversion) > $@

release.Debian:
	echo $(release)-$(revision) > $@

# how we call ourselves recursively
# RECURSION = $(MAKE) -f debian/rules

gitver=$(shell if test -f .git/HEAD; then cat .git/HEAD; else echo ""; fi)
gitverpre=$(shell echo $(gitver) | cut -b -3)
gitverpost=$(shell echo $(gitver) | cut -b 30-32)

autobuild=$(shell if [ "$$AUTOBUILD" = "" ]; then echo n; else echo y; fi)

export version := 2.6.17
export debnum := -6
export abinum := 6

DEB_HOST_GNU_CPU := $(shell dpkg-architecture -qDEB_HOST_GNU_CPU)
DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH)

basedir := $(CURDIR)/debian/config/$(DEB_HOST_ARCH)

flavours := $(shell find $(basedir) -maxdepth 1 -type f ! -name default -printf '%f\n' \
)

builddir := $(CURDIR)/debian/build
srcdir := $(builddir)/$(stem)-source-$(version)

export DEBIAN_SRCTOP := $(srcdir)
export DEBIAN_UPSTREAM_VERSION := $(version)
export DEBIAN_STEM := $(stem)

export UBUNTUBUILD=1

ifeq ($(strip $(DEB_HOST_ARCH)),powerpc)
subarch := --subarch pmac
endif

MAKE_KPKG := make-kpkg --stem $(stem) --arch $(DEB_HOST_ARCH)

# temporary workarounds for now
XEN_HEADERS := xen-headers-$(version)-$(abinum)
XEN_HEADERS_DIR := $(CURDIR)/debian/$(XEN_HEADERS)
XEN_KERNEL_HEADERS := xen-headers-$(version)-$(abinum)
XEN_KERNEL_HEADERS_DIR := $(CURDIR)/debian/$(XEN_KERNEL_HEADERS)

XEN_DOC := xen-doc-$(pkgversion)
XEN_DOC_DIR := $(CURDIR)/debian/$(XEN_DOC)/usr/share/doc/$(XEN_DOC)

XEN_SOURCE := xen-source-$(pkgversion)
XEN_SOURCE_DIR := $(CURDIR)/debian/$(XEN_SOURCE)/usr/src/

unpack: stamp-unpack
stamp-unpack:
	dh_testdir
	find . \( -path ./debian -o -path ./.git -o -name .gitignore \) -prune -o -print | \
		cpio -dumpl $(srcdir)
	cd $(srcdir); rm -f stamp-* version.Debian release.Debian
	mkdir -p $(srcdir)/debian
	cp debian/changelog $(srcdir)/debian
	cp debian/control $(srcdir)/debian
	cp debian/copyright $(srcdir)/debian
	> $(srcdir)/debian/official
	install -D -m755 debian/post-install $(srcdir)/debian/post-install
	chmod u+x debian/header-install
	ln -s ../../../firmware $(srcdir)/debian
	for i in $(flavours); do \
		echo "$$i"; \
		cp -al $(srcdir) $(builddir)/build-$$i; \
		rm -f $(builddir)/build-$$i/.config; \
		cat $(basedir)/$$i >> $(builddir)/build-$$i/.config; \
	done

	touch stamp-unpack

build_prereq := \
	release.Debian version.Debian \
	unpack \

build: $(build_prereq)
	dh_testdir

	PATH=$$PWD/debian/bin:$$PATH; \
	export HARCH=$$(grep "^headers-$(DEB_HOST_ARCH)[[:space:]]" debian/config/archmap | grep -v ^# | awk '{print $$2}'); \
	cd $(srcdir); \
		make ARCH=$$HARCH defconfig; \
		mv .config .config.old; \
		sed 's/^# \(CONFIG_MODVERSIONS\) is not set$$/\1=y/' \
			.config.old > .config; \
		make ARCH=$$HARCH prepare


	for i in $(flavours); do \
		#export KPKG_ARCH=$$(grep "^$$i[[:space:]]" debian/config/archmap | grep -v ^# | awk '{print $$2}'); \
		cd $(builddir)/build-$$i; \
		if [ -e /CurrentlyBuilding ] && [ -z "$(CONCURRENCY_LEVEL)" ]; then \
			CONCURRENCY_LEVEL=$$(getconf _NPROCESSORS_ONLN) && \
			CONCURRENCY_LEVEL=$$(expr $$CONCURRENCY_LEVEL \* 2) && \
			export CONCURRENCY_LEVEL; \
		fi; \
		$(MAKE_KPKG) --subarch xen --append_to_version $(debnum)-$$i \
			build; \
		cd - > /dev/null; \
	done

	touch build-stamp

clean: debian/control
	dh_testdir
	dh_testroot

	$(MAKE_KPKG) clean
	rm -f stamp-* .config* release.Debian version.Debian
	rm -rf $(builddir)
	rm -rf xen-*

	dh_clean

	# udebs/kernel-wedge
	rm -rf TODO firmware modules kernel-versions package-list 


install: build
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs

	> debian/files

# Build architecture-independent files here.
binary-indep: build install xen-docs xen-source
	dh_testdir
	dh_testroot

# Build architecture-dependent files here.
binary-debs: install
	dh_testdir
	dh_testroot

	export KPKG_ARCH=$$(grep "^headers-$(DEB_HOST_ARCH)[[:space:]]" debian/config/archmap | grep -v ^# | awk '{print $$3}'); \
	cd $(srcdir); \

	for i in $(flavours); do \
		export KPKG_ARCH=$$(grep "^$$i[[:space:]]" debian/config/archmap | grep -v ^# | awk '{print $$2}'); \
		cp -al $(builddir)/build-$$i $(builddir)/install-$$i; \
		cd $(builddir)/install-$$i; \
		$(MAKE_KPKG) --subarch xen --append_to_version $(debnum)-$$i --initrd kernel-image; \
		cd - > /dev/null; \
		cat $(builddir)/install-$$i/debian/files >> debian/files; \
		#rm -rf $(builddir)/install-$$i; \
	done

xen-headers: install
	dh_testdir
	dh_testroot

	for i in $(flavours); do \
		mkdir -p $(XEN_HEADERS_DIR)-$$i/usr/src/$(XEN_HEADERS)-$$i; \
		cd $(builddir)/install-$$i; \
		for d in arch block crypto drivers firmware fs init ipc kernel lib mm modules net security sound usr xen; do \
		ln -s ../$(XEN_KERNEL_HEADERS)/$$d $(XEN_HEADERS_DIR)-$$i/usr/src/$(XEN_HEADERS)-$$i/ ; \
		done ; \
		cp -rp scripts Makefile .config $(XEN_HEADERS_DIR)-$$i/usr/src/$(XEN_HEADERS)-$$i; \
		mkdir $(XEN_HEADERS_DIR)-$$i/usr/src/$(XEN_HEADERS)-$$i/include;\
		for d in include/*; do \
			ln -s ../../$(XEN_KERNEL_HEADERS)/$$d $(XEN_HEADERS_DIR)-$$i/usr/src/$(XEN_HEADERS)-$$i/include/ ; \
		done ; \
		for d in asm config linux; do \
			rm $(XEN_HEADERS_DIR)-$$i/usr/src/$(XEN_HEADERS)-$$i/include/$$d ; \
		done ; \
		cp -rp include/asm include/config include/linux $(XEN_HEADERS_DIR)-$$i/usr/src/$(XEN_HEADERS)-$$i/include ; \
	done

	for j in $(flavours); do \
		dh_installchangelogs -p$(XEN_HEADERS)-$$j; \
		dh_installdocs -p$(XEN__HEADERS)-$$j; \
		dh_compress -p$(XEN_HEADERS)-$$j; \
		dh_fixperms -p$(XEN_HEADERS)-$$j; \
		dh_installdeb -p$(XEN_HEADERS)-$$j; \
		dh_gencontrol -p$(XEN_HEADERS)-$$j; \
		dh_md5sums -p$(XEN_HEADERS)-$$j; \
		dh_builddeb -p$(XEN_HEADERS)-$$j; \
        done


xen-kernel-headers: install
	dh_testdir
	dh_testroot


	export HARCH=$$(grep "^headers-$(DEB_HOST_ARCH)[[:space:]]" debian/config/archmap | grep -v ^# | awk '{print $$2}'); \
	mkdir -p $(XEN_KERNEL_HEADERS_DIR)/usr/src/$(XEN_KERNEL_HEADERS)
	cd $(srcdir); \
        ( \
          find . \
            -path './Documentation/*' -prune -o \
            -path './include/asm*' -prune -o \
            -path './scripts/*' -prune -o \
            -path './include/*' -print -o \
            \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Rules.make' \) -print; \
          find include/asm-* -print; \
          for i in $$HARCH; do \
            find arch/$$i \
              \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Rules.make' \) -print; \
          done; \
        ) \
        | \
	cpio -pd --preserve-modification-time $(XEN_KERNEL_HEADERS_DIR)/usr/src/$(XEN_KERNEL_HEADERS)

	dh_installchangelogs -p$(XEN_KERNEL_HEADERS)
	dh_installdocs  -p$(XEN_KERNEL_HEADERS)
	dh_compress -p$(XEN_KERNEL_HEADERS)
	dh_fixperms -p$(XEN_KERNEL_HEADERS)
	dh_installdeb -p$(XEN_KERNEL_HEADERS)
	dh_gencontrol -p$(XEN_KERNEL_HEADERS)
	dh_md5sums -p$(XEN_KERNEL_HEADERS)
	dh_builddeb -p$(XEN_KERNEL_HEADERS)

xen-docs: install
	dh_testdir
	dh_testroot

	cp -al $(srcdir) $(builddir)/xen-docs
	cd $(builddir)/xen-docs; make htmldocs mandocs
	cd $(builddir)/xen-docs; \
	find . \
          -path './DocBook/man/*' -prune -o \
          -path './DocBook/*' -a \( -name '*.tmpl' -o -name '*.xml' -o -name '*.9' \) -prune -o \
          \( -name 'Makefile*' -o -name '.*.cmd' -o -name '.gitignore' \) -prune -o \
          -print \
        | \
        cpio -pd --preserve-modification-time '$(XEN_DOC_DIR)/Documentation'

	dh_installchangelogs -p$(XEN_DOC)
	dh_installdocs  -p$(XEN_DOC)
	dh_compress -p$(XEN_DOC)
	dh_fixperms -p$(XEN_DOC)
	dh_installdeb -p$(XEN_DOC)
	dh_gencontrol -p$(XEN_DOC)
	dh_md5sums -p$(XEN_DOC)
	dh_builddeb -p$(XEN_DOC)

xen-source: install
	dh_testdir
	dh_testroot

	cp -al $(srcdir) $(builddir)/xen-source
	chmod -R u+rw,go=rX $(builddir)/xen-source-$(pkgversion)
	cd $(builddir); tar -cjf 'xen-source-$(pkgversion).tar.bz2' 'xen-source'
	mkdir -p $(XEN_SOURCE_DIR)
	mv $(builddir)/*.bz2 $(XEN_SOURCE_DIR)

	dh_installchangelogs -p$(XEN_SOURCE)
	dh_installdocs  -p$(XEN_SOURCE)
	dh_compress -p$(XEN_SOURCE)
	dh_fixperms -p$(XEN_SOURCE)
	dh_installdeb -p$(XEN_SOURCE)
	dh_gencontrol -p$(XEN_SOURCE)
	dh_md5sums -p$(XEN_SOURCE)
	dh_builddeb -p$(XEN_SOURCE)

binary-arch: build binary-debs xen-kernel-headers xen-headers
	dh_testdir
	dh_testroot

	mv $(builddir)/*.deb ..

binary: binary-arch  binary-indep

.PHONY: build clean binary-indep binary-arch binary-debs binary install unpack debnum abinum

#####################
# The following targets are for the maintainer only! do no run if you don't
# know what they do.

.PHONY: printenv

printenv:
	dh_testdir
	@echo release        = $(release)
	@echo pkgversion     = $(pkgversion)
	@echo revisions      = $(revisions)
	@echo revision       = $(revision)
	@echo prev_revisions = $(prev_revisions)
	@echo prev_revision  = $(prev_revision)
	@echo PREVPACKAGE    = $(PREVPACKAGE)
	@echo khsed          = $(khsed)
	@echo debver         = $(debver)
	@echo version        = $(version)
	@echo debnum         = $(debnum)
	@echo abinum         = $(abinum)
	@echo gitver         = $(gitver)
