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

PY2_PROVIDES=sip-api-11.0, sip-api-11.1
PY3_PROVIDES=sip-py3api-11.0, sip-py3api-11.1
# `dh_python3 --depends sip3` should generate dependency on newest API only
PYDIST=sip $(shell python -c "a=[i.strip() for i in '$(PY3_PROVIDES)'.split(',')]; print sorted(a, reverse=True)[0]")

INSTDIR=$(CURDIR)/debian

CFLAGS=
CPPFLAGS=
CXXFLAGS=
LDFLAGS=
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -O0 -g
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

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

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

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

build-%/configure-stamp: $(PYTHON3S:%=sipconfig-%)
	dh_testdir
	mkdir -p build-$*
	cd build-$* \
		&& python$* ../configure.py \
			-d /usr/lib/python$*/dist-packages \
			-u STRIP="" CFLAGS="${CFLAGS} ${CPPFLAGS}" CFLAGS_RELEASE="" \
			CXXFLAGS="${CXXFLAGS} ${CPPFLAGS}" CXXFLAGS_RELEASE="" \
			LFLAGS="${LDFLAGS}" LFLAGS_RELEASE=""
	touch $@

dbg-build-%/configure-stamp:
	dh_testdir
	mkdir -p dbg-build-$*
	cd dbg-build-$* \
		&& python$*-dbg ../configure.py \
			-d /usr/lib/python$*/dist-packages \
			-e /usr/include/python$*_d \
			-u CFLAGS="${CFLAGS} ${CPPFLAGS}" CFLAGS_RELEASE="" \
			CXXFLAGS="${CXXFLAGS} ${CPPFLAGS}" CXXFLAGS_RELEASE="" \
                        LFLAGS="${LDFLAGS}" LFLAGS_RELEASE="" STRIP="" 
	touch $@

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

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

build-%/build-stamp: build-%/configure-stamp
	dh_testdir
	$(MAKE) -C build-$*
	touch $@

dbg-build-%/build-stamp: dbg-build-%/configure-stamp
	dh_testdir
	$(MAKE) -C dbg-build-$*
	touch $@

build-arch: build
build-indep: build

clean:
	dh_testdir
	dh_testroot
	rm -rf *-stamp siputils.pyc __pycache__ $(PYTHONS:%=build-%) $(PYTHONS:%=dbg-build-%)
	rm -rf $(CURDIR)/siplib/sip.h $(CURDIR)/siplib/siplib.c $(CURDIR)/siplib/siplib.sbf
	cp $(CURDIR)/debian/sipconfig_py3.header $(CURDIR)/debian/sipconfig_py3.py
	rm -rf $(CURDIR)/debian/sipconfig_py3.py.tmp
	rm -rf $(CURDIR)/sipconfig-3.*
	dh_clean debian/python3-sip.pydist

install-arch: build
	dh_testdir
	dh_testroot	
	dh_prep -a
	echo "sip:Provides=$(PY2_PROVIDES)" >> debian/python-sip.substvars
	echo "sip3:Provides=$(PY3_PROVIDES)" >> debian/python3-sip.substvars
	echo "$(PYDIST)" > debian/python3-sip.pydist
	dh_installdirs -a
	# 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

	for i in $$(find debian/python*-sip-dbg -name '*.so'); do \
		b=$$(basename $$i .so); \
		mv $$i $$(dirname $$i)/$${b}_d.so; \
	done
	find debian/python*-sip-dbg ! -type d ! -name '*_d.*' ! -name *sipconfig_d* | xargs rm -f
	find debian/python*-sip-dbg -depth -empty -exec rmdir {} \;

	dh_install -a --sourcedir=$(CURDIR)/debian/tmp
	install -m 755 -o root -g root debian/dh_sip debian/python-sip-dev/usr/bin

install-arch-3.%:
	$(MAKE) -C build-3.$* install DESTDIR=$(CURDIR)/debian/tmp
	$(MAKE) -C dbg-build-3.$* install DESTDIR=$(CURDIR)/debian/python3-sip-dbg
	mkdir -p debian/python3-sip/usr/lib/python3.$*/dist-packages/
	mkdir -p debian/python3-sip-dbg/usr/lib/python3/dist-packages/
	mkdir -p debian/python3-sip-dbg/usr/lib/python3.$*/dist-packages/
	install -m 644 -o root -g root debian/sipconfig_py3.py debian/python3-sip/usr/lib/python3.$*/dist-packages/sipconfig.py
	install -m 644 -o root -g root build-3.$*/sipconfig.py debian/python3-sip/usr/lib/python3.$*/dist-packages/sipconfig_nd$*.py
	mv debian/python3-sip-dbg/usr/lib/python3.$*/dist-packages/sipconfig.py debian/python3-sip-dbg/usr/lib/python3/dist-packages/sipconfig_d$*.py
	mkdir -p debian/python3-sip-dev/usr/include/python3.$*m
	install -m 644 -o root -g root siplib/sip.h debian/python3-sip-dev/usr/include/python3.$*m/
	mkdir -p debian/python3-sip-dev/usr/include/python3.$*dm
	ln -s ../python3.$*m/sip.h \
	    debian/python3-sip-dev/usr/include/python3.$*dm/sip.h
	mkdir -p debian/python3-sip-dev/usr/lib/python3.$*/dist-packages
	install -m 644 -o root -g root sipdistutils.py debian/python3-sip-dev/usr/lib/python3.$*/dist-packages

install-arch-2%:
	$(MAKE) -C build-2$* install DESTDIR=$(CURDIR)/debian/tmp
	$(MAKE) -C dbg-build-2$* install DESTDIR=$(CURDIR)/debian/python-sip-dbg
	mkdir -p debian/python-sip/usr/lib/python2$*/dist-packages/
	install -m 644 -o root -g root debian/sipconfig.py debian/python-sip/usr/lib/python2$*/dist-packages/
	install -m 644 -o root -g root build-2$*/sipconfig.py debian/python-sip/usr/lib/python2$*/dist-packages/sipconfig_nd.py
	install -m 644 -o root -g root dbg-build-2$*/sipconfig.py debian/python-sip-dbg/usr/lib/python2$*/dist-packages/sipconfig_d.py
	mkdir -p debian/python-sip-dev/usr/include/python2$*
	install -m 644 -o root -g root siplib/sip.h debian/python-sip-dev/usr/include/python2$*/
	mkdir -p debian/python-sip-dev/usr/include/python2$*_d
	ln -s ../python2$*/sip.h \
	    debian/python-sip-dev/usr/include/python2$*_d/sip.h
	mkdir -p debian/python-sip-dev/usr/lib/python2$*/dist-packages
	install -m 644 -o root -g root sipdistutils.py debian/python-sip-dev/usr/lib/python2$*/dist-packages


# 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
ifeq (,$(findstring -a, $(DH_OPTIONS)))
	dh_sphinxdoc -p python-sip-doc
endif
	dh_installexamples
	dh_link
# don't call strip twice (or make the -dbg doc directories symlinks twice),
# it's in binary-common
ifneq (,$(findstring -a, $(DH_OPTIONS)))
	rm -rf debian/python-sip-dbg/usr/share/doc/python-sip-dbg
	mkdir -p debian/python-sip-dbg/usr/share/doc
	ln -s python-sip debian/python-sip-dbg/usr/share/doc/python-sip-dbg
	rm -rf debian/python3-sip-dbg/usr/share/doc/python3-sip-dbg
	mkdir -p debian/python3-sip-dbg/usr/share/doc
	ln -s python3-sip debian/python3-sip-dbg/usr/share/doc/python3-sip-dbg
	rm -rf debian/sip-dbg/usr/share/doc/sip-dbg
	mkdir -p debian/sip-dbg/usr/share/doc
	ln -s sip-dev debian/sip-dbg/usr/share/doc/sip-dbg
	DH_OPTIONS= dh_strip -ppython-sip-dev
	DH_OPTIONS= dh_strip -ppython-sip -Npython-sip-dev --dbg-package=python-sip-dbg
	DH_OPTIONS= dh_strip -ppython3-sip-dev
	DH_OPTIONS= dh_strip -ppython3-sip -Npython3-sip-dev --dbg-package=python3-sip-dbg
	DH_OPTIONS= dh_strip -psip-dev --dbg-package=sip-dbg
endif
	dh_compress -X.inv
	dh_fixperms
	dh_python2 --no-dbg-cleaning -N sip-dev
	dh_python3 --no-dbg-cleaning -N sip-dev
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb

# Build architecture independant packages using the common target.
binary-indep:
	sphinx-build sphinx debian/python-sip-doc/usr/share/doc/python-sip-doc/html
	$(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 binary-indep binary-arch binary clean configure get-orig-source
