#!/usr/bin/make -f
# -*- makefile -*-

include /usr/share/dpkg/default.mk

export DH_VERBOSE=1

#export http_proxy=http://127.0.9.1:9
#export https_proxy=http://127.0.9.1:9

ifeq ($(wildcard /CurrentlyBuilding),)
MAIN_URL  = http://archive.ubuntu.com/ubuntu
PORTS_URL = http://ports.ubuntu.com
else
MAIN_URL  = http://ftpmaster.internal/ubuntu
PORTS_URL = http://ftpmaster.internal/ubuntu
endif

depends = $(shell chdist --data-dir repo --arch $(call getarch,$(2)) apt-cache $(dist) show linux-image-$(strip $(1)):$(strip $(call getarch,$(2))) | sed -n 's/Depends: .*\(linux-image-.*-$(strip $(1))\).*/\1:$(strip $(call getarch,$(2)))/p')
getproduct = $(shell egrep "^$(1)\s" debian/android-targets | awk -F' ' '{print $$2}')
getkernel = $(shell egrep "^$(1)\s" debian/android-targets | awk -F' ' '{print $$3}')
getarch = $(shell egrep "^$(1)\s" debian/android-targets | awk -F' ' '{print $$4}')

dist=$(DEB_DISTRIBUTION)

export BUILD_ID=$(dist)
export BUILD_NUMBER=$(DEB_VERSION)

DEVICES = $(shell egrep "^[a-z]" debian/android-targets | awk -F' ' '{print $$1}' | xargs echo)
SRC ?= libhybris platform-api

device = $(basename $(notdir $@))

%:
	dh $@

stamps/chdist:
	rm -rf repo
	chdist --data-dir repo --arch armhf create $(dist)
	# armhf
	echo "deb [arch=armhf] $(PORTS_URL) $(dist) main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb-src $(PORTS_URL) $(dist) main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb [arch=armhf] $(PORTS_URL) $(dist)-updates main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb-src $(PORTS_URL) $(dist)-updates main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb [arch=armhf] $(PORTS_URL) $(dist)-proposed main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb-src $(PORTS_URL) $(dist)-proposed main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb [arch=armhf] $(PORTS_URL) $(dist)-security main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb-src $(PORTS_URL) $(dist)-security main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	# i386
	echo "deb [arch=i386] $(MAIN_URL) $(dist) main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb-src $(MAIN_URL) $(dist) main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb [arch=i386] $(MAIN_URL) $(dist)-updates main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb-src $(MAIN_URL) $(dist)-updates main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb [arch=i386] $(MAIN_URL) $(dist)-proposed main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb-src $(MAIN_URL) $(dist)-proposed main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb [arch=i386] $(MAIN_URL) $(dist)-security main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	echo "deb-src $(MAIN_URL) $(dist)-security main universe restricted multiverse" >> repo/$(dist)/etc/apt/sources.list
	cat repo/$(dist)/etc/apt/sources.list
	chdist --data-dir $(CURDIR)/repo apt-get $(dist) update
	cd repo/$(dist) && chdist --data-dir $(CURDIR)/repo --arch armhf apt-get $(dist) source $(SRC)
	cd repo/$(dist) && chdist --data-dir $(CURDIR)/repo --arch armhf apt-get $(dist) download ubuntu-touch-generic-initrd:armhf initramfs-tools-ubuntu-touch:armhf
	cd repo/$(dist) && chdist --data-dir $(CURDIR)/repo --arch i386 apt-get $(dist) download ubuntu-touch-generic-initrd:i386 initramfs-tools-ubuntu-touch:i386
	mkdir -p stamps && touch $@

stamps/%.fetch: stamps/chdist
	cd repo/$(dist) && chdist --data-dir $(CURDIR)/repo --arch $(call getarch,$(device)) apt-get $(dist) download $(call depends,$(call getkernel,$(device)),$(device))
	product=$(call getproduct,$(device)); \
	kernel=$(call getkernel,$(device)); \
	if [ "$(device)" != "$$kernel" ]; then \
		cd repo/$(dist) && cp linux-image-*-$${kernel}*_$(strip $(call getarch,$(device))).deb linux-image-3.any-$${product}_$(strip $(call getarch,$(device))).deb; \
	fi;
	mkdir -p stamps && touch $@

stamps/prepare-android: stamps/chdist
	rm -rf ubuntu/libhybris ubuntu/platform-api
	cp -r repo/$(dist)/libhybris-* ubuntu/libhybris
	rm -rf ubuntu/libhybris/.pc
	cp -r repo/$(dist)/platform-api-* ubuntu/platform-api
	rm -rf vendor
	cp -r /usr/src/android/vendor .
	mkdir -p stamps && touch $@

stamps/%.build: SHELL=/bin/bash

stamps/%.build: stamps/prepare-android stamps/%.fetch
	rm -rf out/target/product/$(device)/*.img
	. ./build/envsetup.sh; lunch aosp_$(device)-userdebug; dh_auto_build --parallel -- showcommands
	mkdir -p stamps && touch $@

build: build-arch build-indep

build-arch: stamps/chdist $(DEVICES:%=stamps/%.build)
build-indep:

override_dh_auto_clean:
	rm -rf stamps out repo ubuntu/platform-api ubuntu/libhybris debian/intall vendor
	rm -rf debian/$(DEB_SOURCE).copyright

override_dh_auto_install:

override_dh_install:
	echo "#!/usr/bin/dh-exec" > debian/android.install
	while read target product device uarch aarch; do \
		expr $$target : "^#" > /dev/null && continue; \
		echo "out/target/product/$$product/boot.img => usr/share/android/product/ubuntu-preinstalled-boot-$$uarch+$$product.img" >> debian/android.install; \
		echo "out/target/product/$$product/android-ramdisk.img => usr/share/android/product/ubuntu-android-ramdisk+$$product.img" >> debian/android.install; \
		echo "out/target/product/$$product/recovery.img => usr/share/android/product/ubuntu-preinstalled-recovery-$$aarch+$$product.img" >> debian/android.install; \
		echo "out/target/product/$$product/system.img => usr/share/android/product/ubuntu-preinstalled-system-$$aarch+$$product.img" >> debian/android.install; \
		echo "out/target/product/$$product/ramdisk.img => usr/share/android/product/ubuntu-ramdisk+$$product.img" >> debian/android.install; \
		echo "out/target/product/$$product/ramdisk-recovery.img => usr/share/android/product/ubuntu-ramdisk-recovery+$$product.img" >> debian/android.install; \
	done <debian/android-targets
	chmod +x debian/android.install
	dh_install
	# ubuntu-emulator-runtime
	tar -c \
		out/host/linux-x86/bin/emulator \
		out/host/linux-x86/bin/emulator-* \
		out/host/linux-x86/bin/simg2img \
		out/host/linux-x86/lib/ \
		out/host/linux-x86/usr/ \
		out/host/linux-x86/framework/ \
		development/tools/emulator/skins \
		| tar -C debian/ubuntu-emulator-runtime/usr/share/android/emulator/ -x
	# ubuntu-emulator-images images/data
	tar -c \
		out/target/product/generic/ubuntu/kernel/vmlinuz \
		out/target/product/generic/*.img \
		out/target/product/generic/system/build.prop \
		prebuilts/qemu-kernel/arm/kernel-qemu-armv7 \
		| tar -C debian/ubuntu-emulator-images/usr/share/android/emulator/ -x

override_dh_installdocs:
	make -f debian/rules copyright COPYRIGHT_ALL=True
	dh_installdocs

override_dh_shlibdeps:
	dh_shlibdeps
	sed -i -e 's/libc6-amd64/libc6:amd64/' debian/ubuntu-emulator-runtime.substvars
	sed -i -e 's/lib64stdc++6/libstdc++6:amd64/' debian/ubuntu-emulator-runtime.substvars

SOURCES=$(filter-out debian prebuilts vendor, $(wildcard *)) prebuilts/qemu-kernel/*/LINUX_KERNEL_COPYING

get-orig-source:
	fakeroot ./debian/rules clean
	make -f debian/rules copyright
	-quilt pop -a -f
	tar --exclude-vcs --transform='s,^,$(DEB_SOURCE)-$(DEB_VERSION_UPSTREAM)/,S' -caf ../$(DEB_SOURCE)_$(DEB_VERSION_UPSTREAM).orig.tar.xz $(SOURCES)

copyright:
	cp debian/copyright.header debian/copyright
	find $(if $(COPYRIGHT_ALL),.,$(SOURCES)) -name NOTICE | xargs -L1 ./debian/notice.sh >> $(if $(COPYRIGHT_ALL),debian/$(DEB_SOURCE).copyright,debian/copyright)
	$(if $(COPYRIGHT_ALL),cp debian/$(DEB_SOURCE).copyright debian/android-copyright.copyright)

.PHONY: build build-arch build-indep get-orig-source copyright
