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

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

# checking the release type, if $(RELEASE)=UNRELEASED we won't build
# the thunderbird-dbg package
RELEASE := $(shell head -1 debian/changelog | cut -d" " -f3 | tr -d ';')

THUNDERBIRD_VERSION=$(shell tail -1 mail/config/version.txt)
DEB_AUTO_UPDATE_AUTOCONF=2.13

# build directory used for building the thunderbird-l10n files
THUNDERBIRD_L10N_BUILDDIR=debian/thunderbird-l10n-build

# build directory used for building the lightning-l10n files
LIGHTNING_L10N_BUILDDIR=debian/lightning-l10n-build
# Iceowl/Lightning version, note this is different from the TB version!
LIGHTNING_VERSION := $(shell python $(CURDIR)/calendar/lightning/build/makeversion.py ${THUNDERBIRD_VERSION})

DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk
include /usr/share/dpkg/architecture.mk

# currently needed as workaround for GCC-6 built
# see https://bugzilla.mozilla.org/show_bug.cgi?id=1251576
# and https://bugzilla.mozilla.org/show_bug.cgi?id=1245783#c31
CFLAGS += -fno-delete-null-pointer-checks -fno-schedule-insns2
CXXFLAGS += -fno-delete-null-pointer-checks -fno-schedule-insns2

# special CFLAGS for various platforms
ifeq ($(DEB_BUILD_ARCH),armel)
	CFLAGS += -D__ARM_PCS
endif

# Reduce memory usage of the linker at the expense of processing time
# This should help on lower-end architectures like arm and mips, which
# spend an immense amount of time swapping.
LDFLAGS += -Wl,--no-keep-memory -Wl,--reduce-memory-overheads

# Add execution time and memory usage stats in the logs
LDFLAGS += -Wl,--stats

# We don't need to set MOZ_APP_PROFILE to .icedove in any release as we decided
# to only use ~/.thunderbird as home for the profiles.
# export  MOZ_APP_PROFILE := .icedove

export MOZ_BUILD_DATE := $(shell TZ=UTC date -d "$(shell dpkg-parsechangelog -S Date)" +%Y%m%d%H%M%S)
export MOZCONFIG=$(shell pwd)/mozconfig.thunderbird
export MOZILLA_OFFICIAL=1
export DEB_BUILD_GNU_TYPE
export DEB_HOST_GNU_TYPE
export DEB_BUILD_OPTIONS
# Some Debian build tools clear out some variables
export SHELL=/bin/bash

%:
	dh $@

build:
	dh $@

override_dh_auto_clean:
	dh_auto_clean --builddirectory=obj-thunderbird
	# needed for thunderbird-l10n
	rm -rf $(THUNDERBIRD_L10N_BUILDDIR)
	# needed for lightning-l10n
	rm -rf $(LIGHTNING_L10N_BUILDDIR)

override_dh_auto_configure:
	# update config.sub and config.guess
	dh_autotools-dev_updateconfig
	# run autoconf for all configure files
	if [ "Z$(DEB_AUTO_UPDATE_AUTOCONF)" != Z ] || [ ! -e $(CURDIR)/configure ]; \
	then cd $(CURDIR) && `which autoconf$(DEB_AUTO_UPDATE_AUTOCONF) || which autoconf`; fi
	if [ "Z$(DEB_AUTO_UPDATE_AUTOCONF)" != Z ] || [ ! -e $(CURDIR)/mozilla/configure ]; \
	then cd $(CURDIR)/mozilla && `which autoconf$(DEB_AUTO_UPDATE_AUTOCONF) || which autoconf`; fi
	if [ "Z$(DEB_AUTO_UPDATE_AUTOCONF)" != Z ] || [ ! -e $(CURDIR)/mozilla/js/src/configure ]; \
	then cd $(CURDIR)/mozilla/js/src && `which autoconf$(DEB_AUTO_UPDATE_AUTOCONF) || which autoconf`; fi
	# copy the mozconfig files
	cp debian/mozconfig.* .
	cp debian/mozconfig.default mozilla/
	echo 'mk_add_options MOZ_OBJDIR=$(CURDIR)/obj-thunderbird' >> mozconfig.thunderbird
	# configure the various build settings
	# thunderbird, thunderbird-dev, calendar-google-provider, lightning
	make -f client.mk configure

override_dh_auto_build:
	# building the stuff
	make -f client.mk build
	# build thunderbird-l10n
	mkdir -p $(THUNDERBIRD_L10N_BUILDDIR)
	cd $(CURDIR)/icedove-l10n; \
	for XPI in *; do \
		LOCALE=`basename $${XPI}`; \
		xpi-pack $${LOCALE} ../$(THUNDERBIRD_L10N_BUILDDIR)/$${LOCALE}.xpi; \
	done
	# build lightning-l10n
	mkdir -p $(LIGHTNING_L10N_BUILDDIR)
	cd $(CURDIR)/iceowl-l10n; \
	for dir in ?? ??-*; do \
		cd $${dir}; \
		zip -q -X -r ../../$(LIGHTNING_L10N_BUILDDIR)/$${dir}.jar locale; \
		cd -; \
	done
	rm -rf $(LIGHTNING_L10N_BUILDDIR)/en-US.jar

override_dh_auto_install:
	make -f client.mk install DESTDIR=$(CURDIR)/debian/tmp
	# install thunderbird-l10n
	cd $(CURDIR)/icedove-l10n; \
	for DIRECTORY in *; do \
		LOCALE=`echo $${DIRECTORY} | tr [:upper:] [:lower:]`; \
		ID=`cat $${DIRECTORY}/install.rdf | sed --posix '/em:id=/!d;s/[ ]*em:id="//;s/".*//'`; \
		install -D -m 644 ../$(THUNDERBIRD_L10N_BUILDDIR)/$${DIRECTORY}.xpi $(CURDIR)/debian/thunderbird-l10n-$${LOCALE}/usr/share/thunderbird/extensions/$${ID}.xpi; \
		mkdir -p $(CURDIR)/debian/thunderbird-l10n-$${LOCALE}/usr/lib/thunderbird/extensions; \
		ln -sf /usr/share/thunderbird/extensions/$${ID}.xpi $(CURDIR)/debian/thunderbird-l10n-$${LOCALE}/usr/lib/thunderbird/extensions/$${ID}.xpi; \
	done
	# install lightning-l10n
	for jar in $(LIGHTNING_L10N_BUILDDIR)/*.jar; do \
		locale=`basename $${jar} .jar | tr 'A-Z' 'a-z'`; \
		mkdir -p $(CURDIR)/debian/lightning-l10n-$${locale}/usr/share/iceowl/extensions/langpack-$${locale}@lightning.debian.org/chrome; \
		install -m 644 $${jar} $(CURDIR)/debian/lightning-l10n-$${locale}/usr/share/iceowl/extensions/langpack-$${locale}@lightning.debian.org/chrome/; \
	done
	for jar in $(LIGHTNING_L10N_BUILDDIR)/*.jar; do \
		locale=`basename $${jar} .jar | tr 'A-Z' 'a-z'`; \
		mkdir -p $(CURDIR)/debian/lightning-l10n-$${locale}/usr/lib/iceowl/extensions/; \
		ln -sf /usr/share/iceowl/extensions/langpack-$${locale}@lightning.debian.org/ \
			$(CURDIR)/debian/lightning-l10n-$${locale}/usr/lib/iceowl/extensions/langpack-$${locale}@lightning.debian.org; \
		mkdir -p $(CURDIR)/debian/lightning-l10n-$${locale}/usr/lib/thunderbird/extensions/; \
		ln -sf /usr/share/iceowl/extensions/langpack-$${locale}@lightning.debian.org/ \
			$(CURDIR)/debian/lightning-l10n-$${locale}/usr/lib/thunderbird/extensions/langpack-$${locale}@lightning.debian.org; \
	done
	# install lightning-l10n; install.rdf
	for jar in $(LIGHTNING_L10N_BUILDDIR)/*.jar; do \
		locale=`basename $${jar} .jar | tr 'A-Z' 'a-z'`; \
		sed -e s"/##LOCALE##/$${locale}/" -e s",##VERSION##,$(LIGHTNING_VERSION)," \
			debian/lightning-l10n-install.rdf.in \
			> $(CURDIR)/debian/lightning-l10n-$${locale}/usr/share/iceowl/extensions/langpack-$${locale}@lightning.debian.org/install.rdf; \
	done
	# install lightning-l10n; chrome.manifest
	for jar in $(LIGHTNING_L10N_BUILDDIR)/*.jar; do \
		lang=`basename $${jar} .jar`; \
		locale=`basename $${jar} .jar | tr 'A-Z' 'a-z'`; \
			sed -e s"/##LANG##/$${lang}/g" \
			debian/lightning-l10n-chrome.manifest.in \
			> $(CURDIR)/debian/lightning-l10n-$${locale}/usr/share/iceowl/extensions/langpack-$${locale}@lightning.debian.org/chrome.manifest; \
	done
	# install lightning-l10n; uninstall
	for jar in $(LIGHTNING_L10N_BUILDDIR)/*.jar; do \
		locale=`basename $${jar} .jar | tr 'A-Z' 'a-z'`; \
		mkdir -p $(CURDIR)/debian/lightning-l10n-$${locale}/usr/share/iceowl/extensions/langpack-$${locale}@lightning.debian.org/uninstall; \
		touch $(CURDIR)/debian/lightning-l10n-$${locale}/usr/share/iceowl/extensions/langpack-$${locale}@lightning.debian.org/uninstall/Uninstall; \
	done
	dh_bash-completion

override_dh_install-arch:
	dh_install
	# adjust Thunderbird version in pkg-config file
	sed -i 's/@Version@/$(THUNDERBIRD_VERSION)/' debian/thunderbird-dev/usr/lib/pkgconfig/thunderbird.pc
	# prepare lightning
	LIGHTNING=`find -type f -name "lightning*.xpi"` &&\
		unzip -d debian/lightning/usr/lib/lightning/ $(CURDIR)/$$LIGHTNING
	# remove executable rights on *.js, *.png, *.xul files
	find debian/lightning/ -type f \( -name "*.js" -o -name "*.png" -o -name "*.xul" \) -exec chmod 644 {} \;
	# moving skins and icon stuff to /usr/share/lightning/
	mv debian/lightning/usr/lib/lightning/chrome/skin debian/lightning/usr/share/lightning/chrome/
	mv debian/lightning/usr/lib/lightning/chrome/icons debian/lightning/usr/share/lightning/chrome/
	cd debian/lightning/usr/lib/lightning/chrome && ln -s ../../../share/lightning/chrome/skin/
	cd debian/lightning/usr/lib/lightning/chrome && ln -s ../../../share/lightning/chrome/icons/
	# sometimes there are temporary build files in lightning
	@echo "    --> searching for temporary build files in 'lightning' ..."
	@for i in `find debian/lightning/ -name ".mkdir.done*"`; do echo remove $$i && rm $$i; done
	# remove duplicate .so files in dev package
	rm debian/thunderbird-dev/usr/lib/thunderbird-devel/sdk/lib/libxul.so
	# remove hardlink in dev package
	rm debian/thunderbird-dev/usr/include/thunderbird/mozilla/dom/MediaStreamAudioDestinationNode.h
	# install apparmor profile
	cp debian/apparmor/usr.bin.thunderbird debian/thunderbird/etc/apparmor.d/usr.bin.thunderbird
	dh_apparmor --profile-name=usr.bin.thunderbird -pthunderbird

override_dh_install-indep:
	dh_install
	# prepare calendar-google-provider
	mkdir -p debian/calendar-google-provider/usr/share/xul-ext/calendar-google-provider/
	GDATA_PROVIDER=`find -type f -name "gdata-provider*.xpi"` &&\
		unzip -d debian/calendar-google-provider/usr/share/xul-ext/calendar-google-provider/ $(CURDIR)/$$GDATA_PROVIDER
	# sometimes there are temporary build files in calendar-google-provider
	@echo "    --> searching for temporary build files in 'calendar-google-provider' ..."
	@for i in `find debian/calendar-google-provider/ -name ".mkdir.done*"`; do echo remove $$i && rm $$i; done

override_dh_fixperms-arch:
	dh_fixperms
	chmod a-x debian/thunderbird-dev/usr/share/idl/thunderbird/*.idl
	chmod 0755 debian/thunderbird-dev/usr/lib/thunderbird-devel/sdk/bin/*.py
	chmod 0644 debian/thunderbird-dev/usr/lib/thunderbird-devel/sdk/bin/xpidllex.py
	chmod 0644 debian/thunderbird-dev/usr/lib/thunderbird-devel/sdk/bin/xpidlyacc.py
	chmod 0755 debian/thunderbird-dev/usr/lib/thunderbird-devel/sdk/bin/xpcshell

override_dh_strip:
	if [ "$(RELEASE)" != "UNRELEASED" ]; then \
		dh_strip --dbg-package=thunderbird-dbg ;\
	else \
		dh_strip ;\
	fi

override_dh_shlibdeps:
	dh_shlibdeps -a -l $(CURDIR)/debian/tmp/usr/lib/thunderbird

override_dh_builddeb:
	# just build all packages if there is no 'UNRELEASED' within the changelog
	# found, otherwise skip the thunderbird-dbg package, it isn't there
	if [ "$(RELEASE)" != "UNRELEASED" ]; then \
		dh_builddeb ;\
	else \
		dh_builddeb -pthunderbird ;\
		dh_builddeb -picedove ;\
		dh_builddeb -pthunderbird-dev ;\
		dh_builddeb -picedove-dev ;\
		dh_builddeb -plightning ;\
		dh_builddeb -piceowl-extension ;\
		dh_builddeb -pcalendar-google-provider ;\
		for package in `grep -e \
			'Package: thunderbird-l10n\|Package: lightning-l10n\|Package: icedove-l10n\|Package: iceowl-l10n' debian/control | awk '{print $$2;}'`; do \
			dh_builddeb -p$$package ;\
		done ;\
		sed -i '/thunderbird-dbg/d' debian/files ;\
		sed -i '/icedove-dbg/d' debian/files ;\
	fi

override_dh_lintian:
	# adding a lintian override about a non spelling issues that lintian is
	# false positive detecting
	for lintian_overrides in `grep 'Package: ' debian/control | awk '{print $$2;}'`; do \
		echo "$$lintian_overrides: spelling-error-in-copyright Synopsys Synopsis" >> debian/$$lintian_overrides.lintian-overrides ;\
	done
	dh_lintian

.PHONY: build
