#!/usr/bin/make -f

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

export DH_OPTIONS

BUILDDIR=$(CURDIR)/debian/build

VERSION := $(shell dpkg-parsechangelog | awk '/^Version:/ { print $$2 }')
AC_VERSION := $(shell grep -w '^AC_INIT' configure.ac | cut -d' ' -f2 | \
			sed 's/[][,]//g')
MANGLED_VERSION := $(subst ~,-,$(VERSION))

ifneq ($(VERSION),$(AC_VERSION))
$(warning Version $(VERSION) in debian/changelog does not match $(AC_VERSION) in configure.ac!)
endif

DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
DEB_HOST_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU 2>/dev/null)

# Take account of old dpkg-architecture output.
ifeq ($(DEB_HOST_ARCH_CPU),)
  DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_GNU_CPU)
  ifeq ($(DEB_HOST_ARCH_CPU),x86_64)
    DEB_HOST_ARCH_CPU := amd64
  endif
endif

PYTHON := $(shell pyversions -r)

ifneq (,$(findstring :$(DEB_HOST_ARCH_CPU):,:amd64:i386:))
  bootloader-depends := grub
else
ifeq ($(DEB_HOST_ARCH_CPU),powerpc)
  bootloader-depends := yaboot, hfsutils
else
ifeq ($(DEB_HOST_ARCH_CPU),sparc)
  bootloader-depends := silo
endif
endif
endif

ifneq (,$(findstring :$(DEB_HOST_ARCH_CPU);,:alpha:amd64:i386:ia64:))
  partman-depends := ntfsprogs
endif

console-setup-depends := console-setup (>= $(shell cd d-i/source/console-setup && dpkg-parsechangelog | awk '/Version:/ {print $$2}'))

ifeq (,$(strip $(foreach dir,$(subst :, ,$(PATH)),$(wildcard $(dir)/pygtk-codegen-2.0))))
$(warning pygtk-codegen-2.0 missing; disabling GTK frontend)
export UBIQUITY_NO_GTK := 1
endif

update:
	$(MAKE) -C d-i update

update-local:
	$(MAKE) -C d-i update UPDATE_LOCAL=1

build: build-stamp

build-stamp:
	dh_testdir

	PYTHON=$(PYTHON) ./configure --prefix=/usr
	$(MAKE)
	$(MAKE) -C d-i build

	mkdir -p $(BUILDDIR)/ubuntu
	mkdir -p $(BUILDDIR)/guadalinex

	touch build-stamp

clean:
	dh_testdir
	dh_testroot
	rm -fr build-stamp $(BUILDDIR) ubiquity/frontend/liveinstaller.py \
		ubiquity/frontend/crashdialog.py
	find -type f \( -name \*.pyc -o -name \*.pyo \) -print0 | xargs -0r rm -f

	$(MAKE) -C d-i clean
	[ ! -f Makefile ] || $(MAKE) distclean

	dh_clean debian/ubiquity.install \
		 d-i/source/console-setup/Keyboard/MyKeyboardNames.pl \
		 ubiquity/keyboard_names.py

	$(MAKE) -C d-i check

d-i/source/console-setup/Keyboard/MyKeyboardNames.pl:
	$(MAKE) -C d-i/source/console-setup/Keyboard MyKeyboardNames.pl \
		xkbdir=/usr/share/X11/xkb

ubiquity/keyboard_names.py: d-i/source/console-setup/Keyboard/MyKeyboardNames.pl
	d-i/make-keyboard-names $< > $@

install: DH_OPTIONS=
install: build ubiquity/keyboard_names.py
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs -A

	# For the meantime, nearly everything automake wants to install is
	# part of the GTK frontend.
ifndef UBIQUITY_NO_GTK
	$(MAKE) install DESTDIR=$(CURDIR)/debian/ubiquity-frontend-gtk \
		pythondir=\$${prefix}/lib/ubiquity \
		pyexecdir=\$${prefix}/lib/ubiquity
	rm -rf debian/ubiquity-frontend-gtk/usr/share/applications \
		debian/ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps
endif
	$(MAKE) -C d-i install

	cp debian/ubiquity.install-any debian/ubiquity.install
ifneq (,$(wildcard debian/ubiquity.install-$(DEB_HOST_ARCH)))
	cat debian/ubiquity.install-$(DEB_HOST_ARCH) >> debian/ubiquity.install
endif
ifdef UBIQUITY_NO_GTK
	dh_install -Nubiquity-frontend-gtk
else
ifdef UBIQUITY_NO_KDE
	dh_install -Nubiquity-frontend-kde
else
	dh_install
endif
endif

	# Bits of manual installation that can't be done by dh_install
	
	# Get rid of duplicate mythbuntu scripts
	mv debian/ubiquity-frontend-mythbuntu/usr/share/applications/ubiquity-mythbuntu.desktop debian/ubiquity-frontend-mythbuntu/usr/share/applications/ubiquity.desktop
	mv debian/ubiquity-frontend-mythbuntu/usr/share/pixmaps/ubiquity-mythbuntu.png debian/ubiquity-frontend-mythbuntu/usr/share/pixmaps/ubiquity.png
	rm -rf debian/ubiquity/usr/share/ubiquity/mythbuntu
	install bin/ubiquity-wrapper debian/ubiquity/usr/bin/ubiquity
	sed 's/@VERSION@/$(VERSION)/g' bin/ubiquity \
		> debian/ubiquity/usr/lib/ubiquity/bin/ubiquity
	chmod +x debian/ubiquity/usr/lib/ubiquity/bin/ubiquity
	sed 's,/usr/lib/apt-setup,/usr/lib/ubiquity/apt-setup,g' \
		d-i/source/apt-setup/apt-setup \
		> debian/ubiquity/usr/lib/ubiquity/apt-setup/apt-setup
	chmod +x debian/ubiquity/usr/lib/ubiquity/apt-setup/apt-setup
	install d-i/source/apt-setup/finish-install.apt-cdrom-setup \
		debian/ubiquity/usr/lib/ubiquity/apt-setup/finish-install
	if [ -e "d-i/source/base-installer/kernel/$(DEB_HOST_ARCH).sh" ]; then \
		install -m644 d-i/source/base-installer/kernel/$(DEB_HOST_ARCH).sh \
			debian/ubiquity/usr/lib/ubiquity/base-installer/kernel.sh; \
	fi
	# tzsetup is called by clock-setup now, but we handle tzsetup earlier.
	sed 's,^tzsetup,,' \
		d-i/source/clock-setup/debian/clock-setup.postinst \
		> debian/ubiquity/usr/lib/ubiquity/clock-setup/clock-setup
	chmod +x debian/ubiquity/usr/lib/ubiquity/clock-setup/clock-setup
	install d-i/source/clock-setup/finish-install.d/10clock-setup \
		debian/ubiquity/usr/lib/ubiquity/clock-setup/finish-install
	chmod +x debian/ubiquity/usr/lib/ubiquity/clock-setup/finish-install
	sed -e 's,/usr/share/console-setup-mini/console-setup.config,/var/lib/dpkg/info/console-setup.config,g' \
	    -e 's,^\([[:space:]]*\)update-initramfs,\1: update-initramfs,' \
		d-i/source/console-setup/debian/console-setup.postinst \
		> debian/ubiquity/usr/lib/ubiquity/console-setup/console-setup.postinst
	chmod +x debian/ubiquity/usr/lib/ubiquity/console-setup/console-setup.postinst
	sed 's,\(finish-install=\).*,\1/dev/null,' \
		d-i/source/hw-detect/debian/hw-detect/bin/hw-detect \
		> debian/ubiquity/bin/hw-detect
	chmod +x debian/ubiquity/bin/hw-detect
ifeq ($(DEB_HOST_ARCH),sparc)
	sed 's,/usr/share/hw-detect,/usr/lib/ubiquity/hw-detect,g' \
		d-i/source/hw-detect/discover-sbus.sh \
		> debian/ubiquity/bin/discover-sbus
	chmod +x debian/ubiquity/bin/discover-sbus
endif
	set -e; for x in languagemap localechooser post-base-installer; do \
		sed 's,/usr/share/localechooser,/usr/lib/ubiquity/localechooser,g' \
			d-i/source/localechooser/$$x \
			> debian/ubiquity/usr/lib/ubiquity/localechooser/$$x; \
		chmod +x debian/ubiquity/usr/lib/ubiquity/localechooser/$$x; \
	done
	install d-i/source/localechooser/finish-install \
		debian/ubiquity/usr/lib/ubiquity/localechooser/
	install d-i/source/tzsetup/post-base-installer.d/*tzsetup \
		debian/ubiquity/usr/lib/ubiquity/tzsetup/post-base-installer
	set -e; for x in user-setup user-setup-ask user-setup-apply; do \
		sed -e 's,/usr/lib/user-setup,/usr/lib/ubiquity/user-setup,g' \
		    -e 's,/bin/sh,/bin/bash,g' \
			d-i/source/user-setup/$$x \
			> debian/ubiquity/usr/lib/ubiquity/user-setup/$$x; \
		chmod +x debian/ubiquity/usr/lib/ubiquity/user-setup/$$x; \
	done
ifeq ($(DEB_HOST_ARCH),powerpc)
	dh_installdirs -pubiquity usr/lib/ubiquity/kboot-installer
	install d-i/source/kboot-installer/debian/postinst \
		debian/ubiquity/usr/lib/ubiquity/kboot-installer/kboot-installer
	dh_installdirs -pubiquity usr/lib/ubiquity/yaboot-installer
	install d-i/source/yaboot-installer/debian/postinst \
		debian/ubiquity/usr/lib/ubiquity/yaboot-installer/yaboot-installer
endif
ifeq ($(DEB_HOST_ARCH),sparc)
	install d-i/source/silo-installer/debian/silo-installer.postinst \
		debian/ubiquity/usr/lib/ubiquity/silo-installer/silo-installer
endif

	set -e; for size in 16 22 32 48 64 128; do \
		mkdir -p debian/ubiquity-frontend-kde/usr/share/icons/hicolor/$${size}x$${size}/apps; \
		cp desktop/hi$${size}-app-ubiquity.png debian/ubiquity-frontend-kde/usr/share/icons/hicolor/$${size}x$${size}/apps/ubiquity.png; \
	done

# Build architecture-independent files here.
ifdef UBIQUITY_NO_KDE
binary-indep: DH_OPTIONS=-i -Nubiquity-frontend-kde
else
binary-indep: DH_OPTIONS=-i
endif
binary-indep: install
	dh_testdir
	dh_testroot
	dh_installchangelogs
	dh_installdocs
	dh_installdebconf
	dh_link
	dh_strip
	dh_compress
	dh_fixperms
	DH_OPTIONS= dh_pycentral -pubiquity-frontend-kde \
				 -pubiquity-frontend-mythbuntu
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol -- -Vmangled-version='$(MANGLED_VERSION)'
	dh_md5sums
	dh_builddeb

# Build architecture-dependent files here.
ifdef UBIQUITY_NO_GTK
binary-arch: DH_OPTIONS=-a -Nubiquity-frontend-gtk
else
binary-arch: DH_OPTIONS=-a
endif
binary-arch: install
	dh_testdir
	dh_testroot
	dh_installchangelogs
	dh_installdocs
	dh_installdebconf
	echo >> debian/ubiquity/DEBIAN/templates
	po2debconf --podir=debian/imported-po \
		debian/ubiquity.templates-imported \
		>> debian/ubiquity/DEBIAN/templates
	echo >> debian/ubiquity/DEBIAN/templates
	grep-dctrl -XFTemplate base-installer/kernel/linux/link_in_boot \
		d-i/templates \
		>> debian/ubiquity/DEBIAN/templates
	if [ "$$(tail -n1 debian/ubiquity/DEBIAN/templates)" ]; then \
		echo >> debian/ubiquity/DEBIAN/templates; \
	fi
	grep-dctrl -v -FTemplate base-installer/ d-i/templates \
		>> debian/ubiquity/DEBIAN/templates
	dh_installinit --no-start -- start 29 2 3 4 5 .
	dh_installman doc/ubiquity.8
	dh_link
	dh_strip
	dh_compress
	dh_fixperms
	dh_pycentral
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol -- -V'console-setup-depends=$(console-setup-depends)' -V'partman-depends=$(partman-depends)' -V'bootloader-depends=$(bootloader-depends)' -Vmangled-version='$(MANGLED_VERSION)'
	dh_md5sums
	dh_builddeb

binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install
