#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.

export SHELL = /bin/bash

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

distrelease  := $(shell lsb_release -cs)

#rel_ext	= $(strip $(shell dpkg-parsechangelog | awk -F- '/^Version:/ {print $$NF}'))

PYVERS	= $(shell py3versions -vs)
PYVERS	= 3.11 3.12

MIN_VER = 3.11.6-1~
NEXT_VER = 3.13

# FIXME: remove sid when uploading to unstable, after bullseye is released
#ifeq (,$(filter $(distrelase), jessie stretch buster bullseye bookworm sid precise trusty xenial bionic focal groovy hirsute))
#  ifneq (,$(filter 3.1% 3.2%, $(PYVERS)))
#    with_dbmmodule = yes
#    dbm_breaks = '-Vdbm:Breaks=libpython3.10-stdlib (<< 3.10.0~b1-2~)'
#    dbmdbg_breaks = '-Vdbmdbg:Breaks=libpython3.10-dbg (<< 3.10.0~b1-2~)'
#  endif
#endif

include /usr/share/dpkg/architecture.mk

SET_ENV = PYTHONPATH=$(CURDIR)/$*/Lib
SET_ENV12 = PYTHONPATH=$(CURDIR)/3.11/Lib

ifneq ($(DEB_BUILD_MULTIARCH),$(DEB_HOST_MULTIARCH))
  SET_ENV += PYTHONPATH=/usr/lib/python$*/plat-$(DEB_HOST_MULTIARCH)
  SET_ENV12 += PYTHONPATH=/usr/lib/python3.12/plat-$(DEB_HOST_MULTIARCH)

  # FIXME: is this sufficient?
  SET_ENV += _PYTHON_HOST_PLATFORM=$(DEB_HOST_GNU_CPU)
  SET_ENV12 += _PYTHON_HOST_PLATFORM=$(DEB_HOST_GNU_CPU)
endif

p_tk	= python3-tk
p_gdbm	= python3-gdbm
p_dist	= python3-distutils
p_2to3	= python3-lib2to3
d_tk	= debian/$(p_tk)
d_gdbm	= debian/$(p_gdbm)
d_dist	= debian/$(p_dist)
d_2to3	= debian/$(p_2to3)

build-arch: build
build-indep: build
build: build-stamp
build-arch: build-stamp
build-indep: build-stamp
build-stamp: $(PYVERS:%=build-stamp-py%) $(PYVERS:%=dbg-stamp-py%)
	touch $@

build-stamp-py%:
	dh_testdir
	ln -sf /usr/lib/libBLT.2.4.so.8.6 $*/libBLT86.so
	ln -sf /usr/lib/libBLT.2.4.so.8.6 $*/libBLT86.so.8.6
	cd $* && $(SET_ENV) python$* setup.py build
	touch $@

dbg-stamp-py%:
	dh_testdir
	ln -sf /usr/lib/libBLT.2.4.so.8.6 $*/libBLT85.so
	ln -sf /usr/lib/libBLT.2.4.so.8.6 $*/libBLT85.so.8.6
	cd $* && $(SET_ENV) python$*-dbg setup.py build
	touch $@

build-stamp-py3.12:
	dh_testdir
	ln -sf /usr/lib/libBLT.2.4.so.8.6 3.12/libBLT86.so
	ln -sf /usr/lib/libBLT.2.4.so.8.6 3.12/libBLT86.so.8.6
	cd 3.12 && $(SET_ENV12) python3.12 setup.py build
	touch $@

dbg-stamp-py3.12:
	dh_testdir
	ln -sf /usr/lib/libBLT.2.4.so.8.6 3.12/libBLT85.so
	ln -sf /usr/lib/libBLT.2.4.so.8.6 3.12/libBLT85.so.8.6
	cd 3.12 && $(SET_ENV12) python3.12-dbg setup.py build
	touch $@

clean:
	dh_testdir
	dh_testroot
	rm -f *stamp*
	rm -rf 3.*/build
	rm -rf 3.*/libBLT*
	rm -f debian/python3-tk.postinst
	rm -f debian/python3-distutils.postinst
	rm -f debian/python3-lib2to3.postinst
	find 3* -name __pycache__ | xargs -r rm -rf
	dh_clean

install: build install-prereq $(PYVERS:%=install-stamp-py%) $(PYVERS:%=dbg-install-py%)
	rdfind -makehardlinks true $(d_tk)/usr/lib
	rdfind -makehardlinks true $(d_dist)/usr/lib
	rdfind -makehardlinks true $(d_2to3)/usr/lib
	rm -f results.txt

install-prereq:
	dh_testdir
	dh_testroot
	dh_prep

install-stamp-py%: build-stamp-py%
	: # FIXME: 3.11 install errors out ...
	if [ "$*" = 3.11 ]; then \
	  cd $* && $(SET_ENV) python$* setup.py install \
		--root=$(CURDIR)/$(d_tk) --install-layout=deb; \
	  mkdir -p $(d_tk)/usr/lib/python$*/lib-dynload; \
	  mv $(d_tk)/usr/lib/python3/dist-packages/*.so \
	    $(d_tk)/usr/lib/python$*/lib-dynload; \
	  rm -rf $(d_tk)/usr/lib/python3/dist-packages; \
	else \
	  cd $* && $(SET_ENV) python$* setup.py install \
		--root=$(CURDIR)/$(d_tk) --install-layout=deb; \
	fi
	mkdir -p $(d_tk)/usr/lib/python$*/lib-dynload
	mv $(d_tk)/usr/lib/python3/*-packages/*.so \
		$(d_tk)/usr/lib/python$*/lib-dynload/
	mkdir -p $(d_gdbm)/usr/lib/python$*/lib-dynload
	mv $(d_tk)/usr/lib/python$*/lib-dynload/_gdbm*.so \
		$(d_gdbm)/usr/lib/python$*/lib-dynload/
ifeq ($(with_dbmmodule),yes)
	if [ -f $(d_tk)/usr/lib/python$*/lib-dynload/_dbm*.so ]; then \
	  mv $(d_tk)/usr/lib/python$*/lib-dynload/_dbm*.so \
		$(d_gdbm)/usr/lib/python$*/lib-dynload/; \
	fi
endif
	rm -rf $(d_tk)/usr/lib/python3
	cp -r $*/Lib/tkinter $(d_tk)/usr/lib/python$*/.
	rm -rf $(d_tk)/usr/lib/python$*/tkinter/test

	mkdir -p $(d_dist)/usr/lib/python$*
	cp -r $*/Lib/distutils $(d_dist)/usr/lib/python$*/.
	rm -f -v $(d_dist)/usr/lib/python$*/distutils/{__init__,version}.py
	rm -rf $(d_dist)/usr/lib/python$*/distutils/tests
	rm -rf $(d_dist)/usr/lib/python$*/distutils/command/wininst-*.exe
	find $(d_dist) -name __pycache__ | xargs -r rm -rf

	mkdir -p $(d_2to3)/usr/lib/python$*
	cp -r $*/Lib/lib2to3 $(d_2to3)/usr/lib/python$*/.
	rm -rf $(d_2to3)/usr/lib/python$*/lib2to3/tests
	find $(d_2to3) -name __pycache__ | xargs -r rm -rf

dbg-install-py%: dbg-stamp-py%
	: # FIXME: 3.11 install errors out ...
	if [ "$*" = 3.11 ]; then \
	  cd $* && $(SET_ENV) python$*-dbg setup.py install \
		--root=$(CURDIR)/$(d_tk)-dbg --install-layout=deb; \
	  mkdir -p $(d_tk)/usr/lib/python$*/lib-dynload; \
	  mv $(d_tk)/usr/lib/python3/dist-packages/*.so \
	    $(d_tk)/usr/lib/python$*/lib-dynload; \
	  rm -rf $(d_tk)/usr/lib/python3/dist-packages; \
	else \
	  cd $* && $(SET_ENV) python$*-dbg setup.py install \
		--root=$(CURDIR)/$(d_tk)-dbg --install-layout=deb; \
	fi
	mkdir -p $(d_tk)-dbg/usr/lib/python$*/lib-dynload
	mv $(d_tk)-dbg/usr/lib/python3/*-packages/*.so \
		$(d_tk)-dbg/usr/lib/python$*/lib-dynload/
	mkdir -p $(d_gdbm)-dbg/usr/lib/python$*/lib-dynload
	mv $(d_tk)-dbg/usr/lib/python$*/lib-dynload/_gdbm*.so \
		$(d_gdbm)-dbg/usr/lib/python$*/lib-dynload/
ifeq ($(with_dbmmodule),yes)
	if [ -f $(d_tk)-dbg/usr/lib/python$*/lib-dynload/_dbm*.so ]; then \
	  mv $(d_tk)-dbg/usr/lib/python$*/lib-dynload/_dbm*.so \
		$(d_gdbm)-dbg/usr/lib/python$*/lib-dynload/; \
	fi
endif
	rm -rf $(d_tk)-dbg/usr/lib/python3

install-stamp-py3.12: build-stamp-py3.12
	: # FIXME: 3.12 install errors out ...
	if [ "3.12" = 3.12 ]; then \
	  cd 3.12 && $(SET_ENV12) python3.12 setup.py install \
		--root=$(CURDIR)/$(d_tk) --install-layout=deb; \
	  mkdir -p $(d_tk)/usr/lib/python3.12/lib-dynload; \
	  mv $(d_tk)/usr/lib/python3/dist-packages/*.so \
	    $(d_tk)/usr/lib/python3.12/lib-dynload; \
	  rm -rf $(d_tk)/usr/lib/python3/dist-packages; \
	else \
	  cd 3.12 && $(SET_ENV12) python3.12 setup.py install \
		--root=$(CURDIR)/$(d_tk) --install-layout=deb; \
	fi
	mkdir -p $(d_tk)/usr/lib/python3.12/lib-dynload
	mv $(d_tk)/usr/lib/python3/*-packages/*.so \
		$(d_tk)/usr/lib/python3.12/lib-dynload/
	mkdir -p $(d_gdbm)/usr/lib/python3.12/lib-dynload
	mv $(d_tk)/usr/lib/python3.12/lib-dynload/_gdbm*.so \
		$(d_gdbm)/usr/lib/python3.12/lib-dynload/
ifeq ($(with_dbmmodule),yes)
	if [ -f $(d_tk)/usr/lib/python3.12/lib-dynload/_dbm*.so ]; then \
	  mv $(d_tk)/usr/lib/python3.12/lib-dynload/_dbm*.so \
		$(d_gdbm)/usr/lib/python3.12/lib-dynload/; \
	fi
endif
	rm -rf $(d_tk)/usr/lib/python3
	cp -r 3.12/Lib/tkinter $(d_tk)/usr/lib/python3.12/.
	rm -rf $(d_tk)/usr/lib/python3.12/tkinter/test

	mkdir -p $(d_dist)/usr/lib/python3.12
	find $(d_dist) -name __pycache__ | xargs -r rm -rf

	mkdir -p $(d_2to3)/usr/lib/python3.12
	cp -r 3.12/Lib/lib2to3 $(d_2to3)/usr/lib/python3.12/.
	rm -rf $(d_2to3)/usr/lib/python3.12/lib2to3/tests
	find $(d_2to3) -name __pycache__ | xargs -r rm -rf

dbg-install-py3.12: dbg-stamp-py3.12
	: # FIXME: 3.12 install errors out ...
	if [ "3.12" = 3.12 ]; then \
	  cd 3.12 && $(SET_ENV12) python3.12-dbg setup.py install \
		--root=$(CURDIR)/$(d_tk)-dbg --install-layout=deb; \
	  mkdir -p $(d_tk)/usr/lib/python3.12/lib-dynload; \
	  mv $(d_tk)/usr/lib/python3/dist-packages/*.so \
	    $(d_tk)/usr/lib/python3.12/lib-dynload; \
	  rm -rf $(d_tk)/usr/lib/python3/dist-packages; \
	else \
	  cd 3.12 && $(SET_ENV12) python3.12-dbg setup.py install \
		--root=$(CURDIR)/$(d_tk)-dbg --install-layout=deb; \
	fi
	mkdir -p $(d_tk)-dbg/usr/lib/python3.12/lib-dynload
	mv $(d_tk)-dbg/usr/lib/python3/*-packages/*.so \
		$(d_tk)-dbg/usr/lib/python3.12/lib-dynload/
	mkdir -p $(d_gdbm)-dbg/usr/lib/python3.12/lib-dynload
	mv $(d_tk)-dbg/usr/lib/python3.12/lib-dynload/_gdbm*.so \
		$(d_gdbm)-dbg/usr/lib/python3.12/lib-dynload/
ifeq ($(with_dbmmodule),yes)
	if [ -f $(d_tk)-dbg/usr/lib/python3.12/lib-dynload/_dbm*.so ]; then \
	  mv $(d_tk)-dbg/usr/lib/python3.12/lib-dynload/_dbm*.so \
		$(d_gdbm)-dbg/usr/lib/python3.12/lib-dynload/; \
	fi
endif
	rm -rf $(d_tk)-dbg/usr/lib/python3

SPACE := $(EMPTY) $(EMPTY)
COMMA := ,
# $(call _pyver,<prefix>,<versions>,<suffix>)
_pyver = $(subst $(SPACE),$(COMMA)$(SPACE),$(strip $(foreach v,$2,$1$(v)$3)))
#
# Build architecture-independent files here.
binary-indep: build install
	dh_testdir
	dh_testroot
	dh_installchangelogs -i
	dh_installdocs -p$(p_dist) -p$(p_2to3) debian/README.Debian
	( \
	  echo 'python3:Depends=python3:any (>= $(MIN_VER)), python3:any (<< $(NEXT_VER))'; \
	  echo 'python3:Versions=$(call _pyver,,$(PYVERS),)'; \
	  echo 'python3:Provides=$(call _pyver,python,$(PYVERS),-distutils)'; \
	) >> debian/python3-distutils.substvars
	( \
	  echo 'python3:Depends=python3:any (>= $(MIN_VER)), python3:any (<< $(NEXT_VER))'; \
	  echo 'python3:Versions=$(call _pyver,,$(PYVERS),)'; \
	  echo 'python3:Provides=$(call _pyver,python,$(PYVERS),-lib2to3)'; \
	) >> debian/python3-lib2to3.substvars

	dh_lintian -i
	dh_compress -i
	dh_fixperms -i
	sed 's/@PYVERS@/$(PYVERS)/' debian/python3-distutils.postinst.in \
	  > debian/python3-distutils.postinst
	sed 's/@PYVERS@/$(PYVERS)/' debian/python3-lib2to3.postinst.in \
	  > debian/python3-lib2to3.postinst
	dh_installdeb -i
	dh_shlibdeps -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

# Build architecture-dependent files here.
binary-arch: build install
	dh_testdir
	dh_testroot
	dh_installchangelogs -a
	dh_installdocs -p$(p_gdbm) debian/README.Debian
	dh_installdocs -p$(p_tk) debian/README.Tk
	rm -rf $(d_gdbm)-dbg/usr/share/doc/$(p_gdbm)-dbg
	ln -s $(p_gdbm) $(d_gdbm)-dbg/usr/share/doc/$(p_gdbm)-dbg
	rm -rf $(d_tk)-dbg/usr/share/doc/$(p_tk)-dbg
	ln -s $(p_tk) $(d_tk)-dbg/usr/share/doc/$(p_tk)-dbg
	dh_strip -p$(p_gdbm) --dbg-package=$(p_gdbm)-dbg
	dh_strip -p$(p_tk) --dbg-package=$(p_tk)-dbg

	( \
	  echo 'python3:Depends=python3 (>= $(MIN_VER)), python3 (<< $(NEXT_VER))'; \
	  echo 'python3:Versions=$(call _pyver,,$(PYVERS),)'; \
	  echo 'python3:Provides=$(call _pyver,python,$(PYVERS),-gdbm)'; \
	) >> debian/python3-gdbm.substvars
	( \
	  echo 'python3:Depends=python3 (>= $(MIN_VER)), python3 (<< $(NEXT_VER))'; \
	  echo 'python3:Versions=$(call _pyver,,$(PYVERS),)'; \
	  echo 'python3:Provides=$(call _pyver,python,$(PYVERS),-tk)'; \
	) >> debian/python3-tk.substvars

	dh_lintian -a
	dh_compress -a
	dh_fixperms -a
	sed 's/@PYVERS@/$(PYVERS)/' debian/python3-tk.postinst.in \
	  > debian/python3-tk.postinst
	dh_installdeb -a
	dh_shlibdeps -a
	dh_gencontrol -a -- $(dbm_breaks) $(dbmdbg_breaks)
	dh_md5sums -a
	dh_builddeb -a

binary: binary-indep binary-arch

update-patches:
	export QUILT_PATCHES=debian/patches; \
	while quilt push; do quilt refresh -pab --no-timestamps --no-index; done

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