#!/usr/bin/make -f
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

export DH_OPTIONS

export QMAKESPEC=linux-g++

CFLAGS=
CPPFLAGS=
CXXFLAGS=
LDFLAGS=
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -O0 -g
	CXXFLAGS += -O0
else
	CFLAGS += $(shell dpkg-buildflags --get CFLAGS)
	CPPFLAGS += $(shell dpkg-buildflags --get CPPFLAGS)
	CXXFLAGS += $(shell dpkg-buildflags --get CXXFLAGS)
	LDFLAGS += $(shell dpkg-buildflags --get LDFLAGS)
endif

LDFLAGS += -Wl,-O1

ifeq ($(DEB_BUILD_ARCH),alpha)
	LDFLAGS += -Wl,--no-relax
endif
SPLIT=10

PYTHONS := $(shell pyversions -vr) $(shell  py3versions -vr)
PYTHON3S := $(shell  py3versions -vr)

DEFAULT_PYTHON := $(shell pyversions -vd)

# LIBS_* is unset to avoid linking to too many libraries
# STRIP is unset to let stripping be handled by dh_strip
SHARED_CONFIGURE_OPTIONS=--confirm-license --verbose \
	-q /usr/bin/qmake-qt4 -c -j $(SPLIT) \
	RPATH="" LFLAGS_RPATH="" STRIP="" MOC=moc-qt4 \
	LIBS_OPENGL="" LIBS_X11="" LIBS_THREAD="" \
	CFLAGS="${CFLAGS} ${CPPFLAGS}" \
	CXXFLAGS="${CXXFLAGS} ${CPPFLAGS}" \
	LFLAGS="${LDFLAGS}"


.PRECIOUS: pyqtconfig-% build-%/configure-stamp dbg-build-%/configure-stamp

configure: $(PYTHON3S:%=pyqtconfig-%) $(PYTHONS:%=build-%/configure-stamp) $(PYTHONS:%=dbg-build-%/configure-stamp)

pyqtconfig-3.%:
	cat $(CURDIR)/debian/pyqtconfig_py3.py $(CURDIR)/debian/pyqtconfig_py3.snippet \
		> $(CURDIR)/debian/pyqtconfig_py3.py.tmp
	sed -e "s/@MINORVERS@/$*/g" <$(CURDIR)/debian/pyqtconfig_py3.py.tmp \
		> $(CURDIR)/debian/pyqtconfig_py3.py
	touch $@

build-%/configure-stamp:
	dh_testdir
	mkdir -p build-$*
	cd build-$* && python$* ../configure.py $(SHARED_CONFIGURE_OPTIONS) \
			-m $(shell python$*-config --configdir) \
			-d /usr/lib/python$*/dist-packages \
			$(if $(filter $(DEFAULT_PYTHON),$*),,--no-designer-plugin)
	touch $@

dbg-build-%/configure-stamp:
	dh_testdir
	mkdir -p dbg-build-$*
	cd dbg-build-$* && python$*-dbg ../configure.py $(SHARED_CONFIGURE_OPTIONS) \
			-m $(shell python$*-dbg-config --configdir) \
			-d /usr/lib/python$*/dist-packages \
			--debug --no-designer-plugin
	touch $@


build: build-arch build-indep
build-arch: $(PYTHON3S:%=pyqtconfig-%) $(PYTHONS:%=build-%/build-stamp) $(PYTHONS:%=dbg-build-%/build-stamp)
build-indep: build-$(DEFAULT_PYTHON)/build-stamp

build-%/build-stamp: build-%/configure-stamp
	dh_testdir
	dh_auto_build --parallel -B build-$*
	touch $@

dbg-build-%/build-stamp: dbg-build-%/configure-stamp
	dh_testdir
	dh_auto_build --parallel -B dbg-build-$*
	touch $@

install-indep: build-indep
	dh_testdir
	dh_testroot
	dh_prep -i
	dh_installdirs -i
	dh_install -i
	dh_link -i

install-arch: build-arch
	dh_testdir
	dh_testroot
	dh_prep -a
	dh_installdirs -a
	sed -i -e '/strip/ d' $(CURDIR)/build-$(DEFAULT_PYTHON)/designer/Makefile
	# This is needed to enforce that the install-arch-% rules are
	# not run in parallel. Both rules install into the same directory,
	# and therefore might try to access the same files at the same time.
	# Therefore, instead of depending on the install-arch-% rules,
	# we invoke them explicitly.
	for p in $(PYTHONS) ; do \
		$(MAKE) -f debian/rules install-arch-$$p;\
	done

	dh_install -a

	for i in $$(find debian/python-*-dbg -name '*.so'); do \
		b=$$(basename $$i .so); \
		mv $$i $$(dirname $$i)/$${b}_d.so; \
	done

	find debian/python*-dbg ! -type d \
		! \( -name '*.so' -o -name '*config_*d*.py' \) | xargs rm -f
	find debian/python-*-dbg -depth -type d -empty -exec rmdir {} \;

	#FIXME - copying the file to /usr/bin is not the best way,
	# it should be imported properly instead.
	# probably like ipython handles it.
	cp debian/pyuic4 debian/pyqt4-dev-tools/usr/bin/pyuic4

d3_qt4_dbg = debian/python3-pyqt4-dbg

install-arch-3.%:
	$(MAKE) -C build-3.$* install \
		INSTALL_ROOT=$(CURDIR)/debian/tmp DESTDIR=$(CURDIR)/debian/tmp
	mv $(CURDIR)/debian/tmp/usr/lib/python3.$*/dist-packages/PyQt4/pyqtconfig.py \
		$(CURDIR)/debian/tmp/usr/lib/python3.$*/dist-packages/PyQt4/pyqtconfig_nd$*.py

	$(MAKE) -C dbg-build-3.$* install DESTDIR=$(CURDIR)/$(d3_qt4_dbg)

	# Don't initiate the uic/widget-plugins
	touch $(CURDIR)/debian/tmp/usr/lib/python3.$*/dist-packages/PyQt4/uic/widget-plugins/.noinit
	rm $(CURDIR)/debian/tmp/usr/lib/python3.$*/dist-packages/PyQt4/uic/widget-plugins/qtwebkit.py

	mv $(d3_qt4_dbg)/usr/lib/python3.$*/dist-packages/PyQt4/pyqtconfig.py \
		$(d3_qt4_dbg)/usr/lib/python3.$*/dist-packages/PyQt4/pyqtconfig_d$*.py
	mkdir -p debian/python3-pyqt4.qtopengl-dbg/usr/lib/python3.$*/dist-packages/PyQt4
	mv $(d3_qt4_dbg)/usr/lib/python3.$*/dist-packages/PyQt4/QtOpenGL.so \
		debian/python3-pyqt4.qtopengl-dbg/usr/lib/python3.$*/dist-packages/PyQt4
	mkdir -p debian/python3-pyqt4.qtsql-dbg/usr/lib/python3.$*/dist-packages/PyQt4
	mv $(d3_qt4_dbg)/usr/lib/python3.$*/dist-packages/PyQt4/QtSql.so \
		debian/python3-pyqt4.qtsql-dbg/usr/lib/python3.$*/dist-packages/PyQt4
	install -Dm 644 -o root -g root debian/pyqtconfig_py3.py debian/python3-pyqt4/usr/lib/python3.$*/dist-packages/PyQt4/pyqtconfig.py

d_qt4_dbg = debian/python-qt4-dbg

install-arch-%:
	$(MAKE) -C build-$* install \
		INSTALL_ROOT=$(CURDIR)/debian/tmp DESTDIR=$(CURDIR)/debian/tmp

	$(MAKE) -C dbg-build-$* install DESTDIR=$(CURDIR)/$(d_qt4_dbg)

	# Don't initiate the uic/widget-plugins
	touch $(CURDIR)/debian/tmp/usr/lib/python$*/dist-packages/PyQt4/uic/widget-plugins/.noinit
	rm $(CURDIR)/debian/tmp/usr/lib/python$*/dist-packages/PyQt4/uic/widget-plugins/qtwebkit.py

	mv $(d_qt4_dbg)/usr/lib/python$*/dist-packages/PyQt4/pyqtconfig.py \
		$(d_qt4_dbg)/usr/lib/python$*/dist-packages/PyQt4/pyqtconfig_d.py
	mkdir -p debian/python-qt4-gl-dbg/usr/lib/python$*/dist-packages/PyQt4
	mv $(d_qt4_dbg)/usr/lib/python$*/dist-packages/PyQt4/QtOpenGL.so \
		debian/python-qt4-gl-dbg/usr/lib/python$*/dist-packages/PyQt4
	mkdir -p debian/python-qt4-sql-dbg/usr/lib/python$*/dist-packages/PyQt4
	mv $(d_qt4_dbg)/usr/lib/python$*/dist-packages/PyQt4/QtSql.so \
		debian/python-qt4-sql-dbg/usr/lib/python$*/dist-packages/PyQt4


clean:
	dh_testdir
	dh_testroot
	-cd designer && make distclean
	rm -rf $(PYTHONS:%=build-%) $(PYTHONS:%=dbg-build-%) sip/Qt
	cp $(CURDIR)/debian/pyqtconfig_py3.header $(CURDIR)/debian/pyqtconfig_py3.py
	rm -rf $(CURDIR)/debian/pyqtconfig_py3.py.tmp
	rm -rf $(CURDIR)/pyqtconfig-*
	rm -rf $(CURDIR)/qpy/QtCore/qpycore_post_init.cpp
	dh_clean

# Must not depend on anything. This is to be called by
# binary-arch/binary-indep
# in another 'make' thread.
binary-common:
	dh_testdir
	dh_testroot
	dh_installman
	dh_installchangelogs NEWS
	dh_installdocs -A THANKS
	dh_sip
	dh_sip3
ifeq (,$(findstring -i, $(DH_OPTIONS)))
	DH_OPTIONS= dh_strip -ppyqt4-dev-tools
	set -e; \
	for p in python-qt4 python3-pyqt4 \
		python-qt4-gl \
		python-qt4-sql python3-pyqt4.qtsql \
		python3-pyqt4.qtopengl \
		; do \
		DH_OPTIONS= dh_strip -p$$p --dbg-package=$$p-dbg; \
		rm -rf debian/$$p-dbg/usr/share/doc/$$p-dbg; \
		mkdir -p debian/$$p-dbg/usr/share/doc; \
		ln -s $$p debian/$$p-dbg/usr/share/doc/$$p-dbg; \
	done
endif
	rm -rf $(CURDIR)/debian/python-qt4-dbg/usr/lib/python3*
	dh_python2 --no-dbg-cleaning
	dh_python3 --no-dbg-cleaning -N pyqt4-dev-tools
	rm -rf $(CURDIR)/debian/python3-pyqt4/usr/lib/python3/dist-packages/PyQt4/uic/port_v2
	rm -rf $(CURDIR)/debian/python3-pyqt4-dbg/usr/bin
	rm -rf $(CURDIR)/debian/python3-pyqt4-dbg/usr/share/sip
	rm -rf $(CURDIR)/debian/python3-pyqt4-dbg/usr/lib/python3/dist-packages/PyQt4/uic

	dh_strip_nondeterminism
	dh_fixperms
	dh_compress -X.py -X.bmp -X.ui -X.sql -X.xml -X.qml -X.xpm -X.mng -X.qss -X.xbel -X.txt -Xchilling
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb

# Build architecture independant packages using the common target.
binary-indep: install-indep
	$(MAKE) -f debian/rules DH_OPTIONS=-i binary-common

# Build architecture dependant packages using the common target.
binary-arch: install-arch
	$(MAKE) -f debian/rules DH_OPTIONS=-a binary-common


binary: binary-arch binary-indep

get-orig-source:
	uscan --verbose --download-current-version

.PHONY: build-indep build-arch build clean binary-indep binary-arch binary configure get-orig-source
