#!/usr/bin/make -f

DH_VERBOSE=1

pybasever  := 3.7
pyshortver := 37

export SHELL = /bin/bash
export HOME=$(CURDIR)/build
export BUILD_DIR=$(shell pwd)
export PYBUILD_DISABLE_python2=1
export PYTHONWARNINGS=d
export ALTNAME=alt-python$(pyshortver)

vafilt					= $(subst $(2)=,,$(filter $(2)=%,$(1)))
DPKG_VARS				:= $(shell dpkg-architecture)
DEB_BUILD_ARCH			?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_ARCH)
DEB_BUILD_GNU_TYPE		?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_GNU_TYPE)
DEB_BUILD_MULTIARCH		?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_MULTIARCH)
DEB_HOST_ARCH			?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH)
DEB_HOST_ARCH_ENDIAN	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH_ENDIAN)
DEB_HOST_ARCH_OS		?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH_OS)
DEB_HOST_GNU_TYPE		?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_TYPE)
DEB_HOST_MULTIARCH		?= $(call vafilt,$(DPKG_VARS),DEB_HOST_MULTIARCH)
OS_NAME					:= $(shell cat /etc/os-release | grep '^ID=' | cut -d'=' -f2 | sed -e 's@"@@g')
OS_VER					:= $(shell cat /etc/os-release | grep '^VERSION_ID=' | cut -d'=' -f2 | sed -e 's@"@@g')

buildroot := $(CURDIR)/debian/tmp

_sourcedir := debian/source
_prefix := /opt/alt/python$(pyshortver)
_bindir := $(_prefix)/bin
_libdir := $(_prefix)/lib
_includedir := $(_prefix)/include
_mandir := $(_prefix)/share/man

bootstrap ?= 0

# 1) build alt-python3X, alt-python3X-setuptools,alt-python3X-wheel, alt-python3X-pip with bootstrap=1
# 2) build release alt-python3X-setuptools, alt-python3X, alt-python3X-wheel, alt-python3X-pip

ifeq (${bootstrap},0)
  # get ensurepip version: grep -oP '(?<=^_PIP_VERSION = ").*(?=")' Lib/ensurepip/__init__.py
  pip_version := 23.0.1
endif

LDFLAGS = $(shell dpkg-buildflags --get LDFLAGS)
export CPPFLAGS := -I/opt/alt/sqlite/usr/include
ifeq (${without_rpath},)
  LDFLAGS := $(LDFLAGS) -L$(_libdir) -L/opt/alt/sqlite/usr/lib/$(DEB_BUILD_MULTIARCH) -Wl,-rpath=$(_libdir),-rpath=/opt/alt/sqlite/usr/lib/$(DEB_BUILD_MULTIARCH) -Wl,--enable-new-dtags
else
  LDFLAGS := $(LDFLAGS) -L/opt/alt/sqlite/usr/lib/$(DEB_BUILD_MULTIARCH) -Wl,-rpath=/opt/alt/sqlite/usr/lib/$(DEB_BUILD_MULTIARCH) -Wl,--enable-new-dtags
  PRE_REL := 0.
endif
export LDFLAGS

pylibdir    := $(_libdir)/python$(pybasever)
sitelib		:= $(pylibdir)/site-packages
distlib	    := $(pylibdir)/dist-packages
dynload_dir := $(pylibdir)/lib-dynload

ABIFLAGS_optimized := m
ABIFLAGS_debug 	   := dm

LDVERSION_optimized := $(pybasever)$(ABIFLAGS_optimized)
LDVERSION_debug		:= $(pybasever)$(ABIFLAGS_debug)

SOABI_optimized := cpython-$(pyshortver)$(ABIFLAGS_optimized)
SOABI_debug		:= cpython-$(pyshortver)$(ABIFLAGS_debug)
ifneq (,$(filter $(DEB_HOST_ARCH), amd64 arm64))
  SOABI_optimized := cpython-$(pyshortver)$(ABIFLAGS_optimized)-$(DEB_HOST_MULTIARCH)
  SOABI_debug	  := cpython-$(pyshortver)$(ABIFLAGS_debug)-$(DEB_HOST_MULTIARCH)
endif

bytecode_suffixes := .cpython-$(pyshortver)*.py?

py_SOVERSION := 1.0
py_INSTSONAME_optimized := libpython$(LDVERSION_optimized).so.$(py_SOVERSION)
py_INSTSONAME_debug 	:= libpython$(LDVERSION_debug).so.$(py_SOVERSION)

with_debug_build	:= 1
with_gdb_hooks		:= 0
with_systemtap		:= 1
with_valgrind		:= 1
with_gdbm			:= 1
with_computed_gotos := yes
run_selftest_suite  := 0
regenerate_autotooling_patch := 0

NJOBS := -j$(shell getconf _NPROCESSORS_ONLN)

DPKG_CFLAGS := $(shell dpkg-buildflags --get CFLAGS)

CONF_EXTRA_OPT =
ifeq ($(with_systemtap),1)
  tapsetdir := $(_prefix)/share/systemtap/tapset
  CONF_EXTRA_OPT += --with-systemtap
endif
ifeq ($(with_valgrind),1)
  CONF_EXTRA_OPT += --with-valgrind
endif

define BuildPython
#ConfName=$(1)
#ExtraConfigArgs=$(2)
#MoreCFlags=$(3)
#Extra_Param=${4}
mkdir -p build/${1}; \
cd build/${1}; \
$(BUILD_DIR)/configure \
--prefix=$(_prefix) \
--libdir=$(_libdir) \
--enable-ipv6 \
--enable-shared \
--with-computed-gotos=yes \
--with-dbmliborder=gdbm:ndbm:bdb \
--with-system-ffi \
--enable-loadable-sqlite-extensions \
--with-ssl-default-suites=openssl \
$(CONF_EXTRA_OPT) \
$(4); \
$(MAKE) $(NJOBS) EXTRA_CFLAGS="$(DPKG_CFLAGS) $(6)"
endef

define InstallPython
mkdir -p build/$(1)
$(MAKE) -C build/$(1) install DESTDIR=$(buildroot) INSTALL="install -p" EXTRA_CFLAGS="$(3)"
$(if $(filter $(with_gdb_hooks),1),mkdir -p $(buildroot)$(_prefix)/lib/debug/$(_libdir),)
$(if $(filter $(with_gdb_hooks),1),cp Tools/gdb/libpython.py $(buildroot)$(_prefix)/lib/debug/$(_libdir)/$(2).debug-gdb.py,)
endef

%:
	dh $@

override_dh_auto_configure:
ifeq ($(with_systemtap),1)
	# Provide an example of usage of the tapset:
	cp -a $(_sourcedir)/systemtap-example.stp ./
	cp -a $(_sourcedir)/pyfuntop.stp ./
endif
ifeq (${bootstrap},0)
	sed -r -i s/'_PIP_VERSION = "[0-9.]+"'/'_PIP_VERSION = "$(pip_version)"'/ Lib/ensurepip/__init__.py
endif
	patch -p1 < debian/patches/Python-3.1.1-rpath.patch
	patch -p1 < debian/patches/path-to-libpl.patch
ifeq ($(uname_m),amd64)
	patch -p1 < debian/patches/00102-lib64.patch
	patch -p1 < debian/patches/00104-lib64-fix-for-test_install.patch
endif
	patch -p1 < debian/patches/00111-no-static-lib.patch
	patch -p1 < debian/patches/00132-add-rpmbuild-hooks-to-unittest.patch
	patch -p1 < debian/patches/00137-skip-distutils-tests-that-fail-in-rpmbuild.patch
ifneq (,$(filter $(DEB_HOST_ARCH), arm armel armhf))
	patch -p1 < debian/patches/00139-skip-test_float-known-failure-on-arm.patch
	patch -p1 < debian/patches/python3-arm-skip-failing-fragile-test.patch
endif
	patch -p1 < debian/patches/00155-avoid-ctypes-thunks.patch
	patch -p1 < debian/patches/00157-uid-gid-overflows.patch
	patch -p1 < debian/patches/00160-disable-test_fs_holes-in-rpm-build.patch
	patch -p1 < debian/patches/00163-disable-parts-of-test_socket-in-rpm-build.patch
	patch -p1 < debian/patches/00173-workaround-ENOPROTOOPT-in-bind_port.patch
	patch -p1 < debian/patches/00178-dont-duplicate-flags-in-sysconfig.patch
	patch -p1 < debian/patches/00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch
	patch -p1 < debian/patches/00186-dont-raise-from-py_compile.patch
	patch -p1 < debian/patches/00188-fix-lib2to3-tests-when-hashlib-doesnt-compile-properly.patch
ifeq (${bootstrap},0)
	patch -p1 < debian/patches/00189-use-rpm-wheels.patch
endif
	patch -p1 < debian/patches/temporarily-disable-tests-requiring-SIGHUP.patch
	patch -p1 < debian/patches/06000-replacement_sqlite_on_alt-sqlite.patch
	patch -p1 < debian/patches/python-3.7.8-configure.patch

	patch -p1 < debian/patches/CVE-2024-6232.patch
	patch -p1 < debian/patches/CVE-2024-7592.patch
	patch -p1 < debian/patches/CVE-2024-9287.patch
	patch -p1 < debian/patches/CVE-2023-6597.patch
	patch -p1 < debian/patches/CVE-2023-27043.patch
	patch -p1 < debian/patches/CVE-2023-40217.patch
	patch -p1 < debian/patches/CVE-2025-12084.patch
	patch -p1 < debian/patches/CVE-2007-4559.patch
	patch -p1 < debian/patches/CVE-2025-13837.patch
	patch -p1 < debian/patches/CVE-2024-12718-CVE-2025-4138-CVE-2025-4330-CVE-2025-4435-CVE-2025-4517.patch
	patch -p1 < debian/patches/CVE-2025-6075.patch
	patch -p1 < debian/patches/CVE-2025-8194.patch
	patch -p1 < debian/patches/CVE-2026-4519.patch
	patch -p1 < debian/patches/CVE-2024-0450.patch
	patch -p1 < debian/patches/CVE-2026-6100.patch
	patch -p1 < debian/patches/CVE-2026-1299.patch
	patch -p1 < debian/patches/CVE-2024-0397.patch
	patch -p1 < debian/patches/CVE-2024-4032.patch
	patch -p1 < debian/patches/CVE-2026-3446.patch
	patch -p1 < debian/patches/support-control-characters-c0.patch
	patch -p1 < debian/patches/CVE-2025-15282.patch
	patch -p1 < debian/patches/CVE-2026-0672.patch
	patch -p1 < debian/patches/CVE-2026-3644.patch
	patch -p1 < debian/patches/CVE-2026-4224.patch
	patch -p1 < debian/patches/CVE-2026-7210.patch
	patch -p1 < debian/patches/CVE-2026-41080.patch
	patch -p1 < debian/patches/CVE-2024-11168.patch
	patch -p1 < debian/patches/CVE-2024-50602.patch
	patch -p1 < debian/patches/CVE-2025-0938.patch
	patch -p1 < debian/patches/CVE-2025-4516.patch
	patch -p1 < debian/patches/CVE-2026-8328.patch
	patch -p1 < debian/patches/CVE-2025-1795.patch
	patch -p1 < debian/patches/CVE-2025-6069.patch
	patch -p1 < debian/patches/CVE-2025-8291.patch
	patch -p1 < debian/patches/CVE-2025-11468.patch
	patch -p1 < debian/patches/CVE-2025-13462.patch
	patch -p1 < debian/patches/CVE-2025-12781.patch
	patch -p1 < debian/patches/CVE-2026-0865.patch
	patch -p1 < debian/patches/CVE-2026-1502.patch
	patch -p1 < debian/patches/CVE-2026-6019.patch
	patch -p1 < debian/patches/CVE-2025-15366.patch
	patch -p1 < debian/patches/CVE-2025-15367.patch

	sed --in-place \
		--expression="s|http://docs.python.org/library|http://docs.python.org/$(pybasever)/library|g" \
		Lib/pydoc.py || exit 1


override_dh_auto_build:
ifeq ($(with_debug_build),1)
  ifneq (,$(filter $(DEB_HOST_ARCH), i386 amd64 powerpc powerpcspe ppc64 ppc64el))
	$(call BuildPython,debug,python-debug,python$(pybasever)-debug,--with-pydebug --with-tsc --with-count-allocs --with-call-profile --without-ensurepip,false,-O0)
  else
	$(call BuildPython,debug,python-debug,python$(pybasever)-debug,--with-pydebug --with-count-allocs --with-call-profile --without-ensurepip,false,-O0)
  endif
endif
	$(call BuildPython,optimized,python,python$(pybasever),"--without-ensurepip",true)


# Make python3-devel multilib-ready (bug #192747, #139911)
_pyconfig32_h := pyconfig-32.h
_pyconfig64_h := pyconfig-64.h

ifneq (,$(filter $(DEB_HOST_ARCH), alpha amd64 arm64 ia64 ppc64 ppc64el sparc64 s390x))
  _pyconfig_h := $(_pyconfig64_h)
else
  _pyconfig_h := $(_pyconfig32_h)
endif

PyIncludeDirs = python$(LDVERSION_optimized)
ifeq ($(with_debug_build),1)
  PyIncludeDirs := $(PyIncludeDirs) python$(LDVERSION_debug)
endif

uname_m := $(shell uname -m)

ifeq ($(with_systemtap),1)
  libpython_stp_optimized := libpython$(pybasever)-32.stp
  libpython_stp_debug     := libpython$(pybasever)-debug-32.stp

  ifneq (,$(filter $(DEB_HOST_ARCH), alpha amd64 arm64 ia64 ppc64 ppc64el sparc64 s390x))
    libpython_stp_optimized := libpython$(pybasever)-64.stp
    libpython_stp_debug     := libpython$(pybasever)-debug-64.stp
  endif
endif

override_dh_auto_install:
	mkdir -p $(buildroot)$(_prefix) $(buildroot)$(_mandir)
	# Use "InstallPython" to support building with different configurations:

	# Install the "debug" build first, so that we can move some files aside
ifeq ($(with_debug_build),1)
	$(call InstallPython,debug,$(py_INSTSONAME_debug),-O0)
endif

	# Now the optimized build:
	$(call InstallPython,optimized,$(py_INSTSONAME_optimized))

	install -d -m 0755 $(buildroot)$(sitelib)/__pycache__

	cd $(buildroot)$(_bindir) && ln -s 2to3-$(pybasever) python3-2to3

	# Development tools
	install -m755 -d $(buildroot)$(pylibdir)/Tools
	install Tools/README $(buildroot)$(pylibdir)/Tools/
	cp -ar Tools/freeze $(buildroot)$(pylibdir)/Tools/
	cp -ar Tools/i18n $(buildroot)$(pylibdir)/Tools/
	cp -ar Tools/pynche $(buildroot)$(pylibdir)/Tools/
	cp -ar Tools/scripts $(buildroot)$(pylibdir)/Tools/

	# Documentation tools
	install -m755 -d $(buildroot)$(pylibdir)/Doc
	cp -ar Doc/tools $(buildroot)$(pylibdir)/Doc/

	# Demo scripts
	cp -ar Tools/demo $(buildroot)$(pylibdir)/Tools/

	# Fix for bug #136654
	rm -f $(buildroot)$(pylibdir)/email/test/data/audiotest.au $(buildroot)$(pylibdir)/test/audiotest.au

	for PyIncludeDir in $(PyIncludeDirs); do \
		mv $(buildroot)$(_includedir)/$${PyIncludeDir}/pyconfig.h $(buildroot)$(_includedir)/$${PyIncludeDir}/$(_pyconfig_h); \
		echo '#include <bits/wordsize.h>' > $(buildroot)$(_includedir)/$${PyIncludeDir}/pyconfig.h; \
		echo '#if __WORDSIZE == 32' >> $(buildroot)$(_includedir)/$${PyIncludeDir}/pyconfig.h; \
		echo '#include "$(_pyconfig32_h)"' >> $(buildroot)$(_includedir)/$${PyIncludeDir}/pyconfig.h; \
		echo '#elif __WORDSIZE == 64' >> $(buildroot)$(_includedir)/$${PyIncludeDir}/pyconfig.h; \
		echo '#include "$(_pyconfig64_h)"' >> $(buildroot)$(_includedir)/$${PyIncludeDir}/pyconfig.h; \
		echo '#else' >> $(buildroot)$(_includedir)/$${PyIncludeDir}/pyconfig.h; \
		echo '#error "Unknown word size"' >> $(buildroot)$(_includedir)/$${PyIncludeDir}/pyconfig.h; \
		echo '#endif' >> $(buildroot)$(_includedir)/$${PyIncludeDir}/pyconfig.h; \
	done

	# Fix for bug 201434: make sure distutils looks at the right pyconfig.h file
	# Similar for sysconfig: sysconfig.get_config_h_filename tries to locate
	# pyconfig.h so it can be parsed, and needs to do this at runtime in site.py
	# when python starts up (bug 653058)
	#
	# Split this out so it goes directly to the pyconfig-32.h/pyconfig-64.h
	# variants:
	sed -i -e "s/'pyconfig.h'/'$(_pyconfig_h)'/" \
		$(buildroot)$(pylibdir)/distutils/sysconfig.py \
		$(buildroot)$(pylibdir)/sysconfig.py

	# Switch all shebangs to refer to the specific Python version.
	LD_LIBRARY_PATH=./build/optimized ./build/optimized/python \
		Tools/scripts/pathfix.py \
		-i "$(_bindir)/python$(pybasever)" \
		$(buildroot)

	# Remove shebang lines from .py files that aren't executable, and
	# remove executability from .py files that don't have a shebang line:
	find $(buildroot) -name \*.py \
		\( \( \! -perm /u+x,g+x,o+x -exec sed -e '/^#!/Q 0' -e 'Q 1' {} \; \
		-print -exec sed -i '1d' {} \; \) -o \( \
		-perm /u+x,g+x,o+x ! -exec grep -m 1 -q '^#!' {} \; \
		-exec chmod a-x {} \; \) \)

	# .xpm and .xbm files should not be executable:
	find $(buildroot) \( -name \*.xbm -o -name \*.xpm -o -name \*.xpm.1 \) \
		-exec chmod a-x {} \;

	# Remove executable flag from files that shouldn't have it:
	chmod a-x \
		$(buildroot)$(pylibdir)/distutils/tests/Setup.sample \
		$(buildroot)$(pylibdir)/Tools/README

	# Get rid of DOS batch files:
	find $(buildroot) -name \*.bat -exec rm {} \;

	# Get rid of backup files:
	find $(buildroot)/ -name "*~" -exec rm -f {} \;
	find . -name "*~" -exec rm -f {} \;
	rm -f $(buildroot)$(pylibdir)/LICENSE.txt
	# Junk, no point in putting in -test sub-pkg
	rm -f $(buildroot)$(pylibdir)/idlelib/testcode.py*

	# Get rid of stray patch file from buildroot:
	rm -f $(buildroot)$(pylibdir)/test/test_imp.py.apply-our-changes-to-expected-shebang

	# Fix end-of-line encodings:
	find $(buildroot)/ -name \*.py -exec sed -i 's/\r//' {} \;

	# Fix an encoding:
	if [ -f "$(buildroot)$(pylibdir)/Demo/rpc/README" ]; then \
		iconv -f iso8859-1 -t utf-8 $(buildroot)$(pylibdir)/Demo/rpc/README > README.conv && mv -f README.conv $(buildroot)$(pylibdir)/Demo/rpc/README; \
	fi

	# Note that
	#  $(pylibdir)/Demo/distutils/test2to3/setup.py
	# is in iso-8859-1 encoding, and that this is deliberate; this is test data
	# for the 2to3 tool, and one of the functions of the 2to3 tool is to fixup
	# character encodings within python source code

	# Do bytecompilation with the newly installed interpreter.
	# This is similar to the script in macros.pybytecompile
	# compile *.pyo
	find $(buildroot) -type f -a -name "*.py" -print0 | \
		LD_LIBRARY_PATH="$(buildroot)$(dynload_dir):$(buildroot)$(_libdir):${LD_LIBRARY_PATH}" \
		PYTHONPATH="$(buildroot)$(_libdir)/python$(pybasever) $(buildroot)$(sitelib)" \
		xargs -0 $(buildroot)$(_bindir)/python$(pybasever) -O -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$(buildroot)")[2]) for f in sys.argv[1:]]' || :
	# compile *.pyc
	find $(buildroot) -type f -a -name "*.py" -print0 | \
		LD_LIBRARY_PATH="$(buildroot)$(dynload_dir):$(buildroot)$(_libdir):${LD_LIBRARY_PATH}" \
		PYTHONPATH="$(buildroot)$(_libdir)/python$(pybasever) $(buildroot)$(sitelib)" \
		xargs -0 $(buildroot)$(_bindir)/python$(pybasever) -O -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$(buildroot)")[2], optimize=0) for f in sys.argv[1:]]' || :

	# Fixup permissions for shared libraries from non-standard 555 to standard 755:
	find $(buildroot) -perm 555 -exec chmod 755 {} \;

	# Ensure that the curses module was linked against libncursesw.so, rather than
	# libncurses.so (bug 539917)
	ldd $(buildroot)$(dynload_dir)/_curses*.so \
		| grep curses \
		| grep "libncursesw\.so" || (echo "_curses.so linked against libncurses.so"; exit 1)
	#ldd $(buildroot)$(dynload_dir)/_curses*.so \
	#	| grep curses \
	#	| grep "libncurses\.so" && (echo "_curses.so linked against libncurses.so" ; exit 1)

	# Ensure that the debug modules are linked against the debug libpython, and
	# likewise for the optimized modules and libpython:
	for Module in $(buildroot)$(dynload_dir)/*.so ; do \
		case $${Module} in \
		*.$(SOABI_debug)) \
			ldd $${Module} | grep $(py_INSTSONAME_optimized) && \
				(echo Debug module $$(Module) linked against optimized $(py_INSTSONAME_optimized) ; exit 1) \
			;; \
		*.$(SOABI_optimized)) \
			ldd $${Module} | grep $(py_INSTSONAME_debug) && \
				(echo Optimized module $${Module} linked against debug $(py_INSTSONAME_debug) ; exit 1) \
			;; \
		esac \
	done

	# Create "/usr/bin/python3-debug", a symlink to the python3 debug binary, to
	# avoid the user having to know the precise version and ABI flags.  (see
	# e.g. rhbz#676748):
ifeq ($(with_debug_build),1)
	ln -s $(_bindir)/python$(LDVERSION_debug) $(buildroot)$(_bindir)/python3-debug
endif

	#
	# Systemtap hooks:
	#
ifeq ($(with_systemtap),1)
	# Install a tapset for this libpython into tapsetdir, fixing up the path to the
	# library:
	mkdir -p $(buildroot)$(tapsetdir)

	sed -e "s|LIBRARY_PATH|$(_libdir)/$(py_INSTSONAME_optimized)|" \
		$(_sourcedir)/libpython.stp \
		> $(buildroot)$(tapsetdir)/$(libpython_stp_optimized)

  ifeq ($(with_debug_build),1)
	# In Python 3, python3 and python3-debug don't point to the same binary,
	# so we have to replace "python3" with "python3-debug" to get systemtap
	# working with debug build
	sed -e "s|LIBRARY_PATH|$(_libdir)/$(py_INSTSONAME_debug)|" \
		-e 's|"python3"|"python3-debug"|' \
		$(_sourcedir)/libpython.stp \
		> $(buildroot)$(tapsetdir)/$(libpython_stp_debug)
  endif
endif

	# Rename the script that differs on different arches to arch specific name
	mv $(buildroot)$(_bindir)/python$(LDVERSION_optimized)-config \
		$(buildroot)$(_bindir)/python$(LDVERSION_optimized)-$(uname_m)-config
	echo -e '#!/bin/sh\nexec $(shell dirname $0)/python$(LDVERSION_optimized)-$(uname_m)-config "$@"' > \
		$(buildroot)$(_bindir)/python$(LDVERSION_optimized)-config
	echo '[ $? -eq 127 ] && echo "Could not find python$(LDVERSION_optimized)-$(uname_m)-config. Look around to see available arches." >&2' >> \
		$(buildroot)$(_bindir)/python$(LDVERSION_optimized)-config
	chmod +x $(buildroot)$(_bindir)/python$(LDVERSION_optimized)-config

	mkdir -p $(buildroot)$(_prefix)/etc/
	echo "[python$(pybasever)]" > $(buildroot)$(_prefix)/etc/locked_extensions.ini

	rm -r $(buildroot)$(pylibdir)/ensurepip/_bundled

	dh_movefiles -palt-python$(pyshortver) \
		.$(_bindir)/pydoc* \
		.$(_bindir)/python$(pybasever) \
		.$(_bindir)/python$(pybasever)m \
		.$(_bindir)/python3 \
		.$(_bindir)/pyvenv \
		.$(_bindir)/pyvenv-$(pybasever) \
		.$(_mandir)/* \
		.$(_prefix)/etc/locked_extensions.ini

	dh_installdirs -palt-python$(pyshortver)-libs -A \
		$(_libdir) \
		$(pylibdir) \
		$(dynload_dir) \
		$(sitelib)/__pycache__

	dh_link -palt-python$(pyshortver)-libs \
		$(sitelib) $(distlib)

	dh_movefiles -palt-python$(pyshortver)-libs \
		-X.$(pylibdir)/__pycache__/turtle*$(bytecode_suffixes) \
		-X.$(pylibdir)/ensurepip/_bundled \
		-X.$(pylibdir)/lib2to3/tests \
		-X.$(pylibdir)/turtle.py \
		.$(_includedir)/python$(LDVERSION_optimized)/$(_pyconfig_h) \
		.$(_libdir)/libpython$(LDVERSION_optimized).so \
		.$(_libdir)/libpython$(LDVERSION_optimized).so.1.0 \
		.$(_libdir)/libpython3.so \
		.$(dynload_dir)/_asyncio.$(SOABI_optimized).so \
		.$(dynload_dir)/_bisect.$(SOABI_optimized).so \
		.$(dynload_dir)/_blake2.$(SOABI_optimized).so \
		.$(dynload_dir)/_bz2.$(SOABI_optimized).so \
		.$(dynload_dir)/_codecs_cn.$(SOABI_optimized).so \
		.$(dynload_dir)/_codecs_hk.$(SOABI_optimized).so \
		.$(dynload_dir)/_codecs_iso2022.$(SOABI_optimized).so \
		.$(dynload_dir)/_codecs_jp.$(SOABI_optimized).so \
		.$(dynload_dir)/_codecs_kr.$(SOABI_optimized).so \
		.$(dynload_dir)/_codecs_tw.$(SOABI_optimized).so \
		.$(dynload_dir)/_contextvars.$(SOABI_optimized).so \
		.$(dynload_dir)/_crypt.$(SOABI_optimized).so \
		.$(dynload_dir)/_csv.$(SOABI_optimized).so \
		.$(dynload_dir)/_ctypes.$(SOABI_optimized).so \
		.$(dynload_dir)/_curses.$(SOABI_optimized).so \
		.$(dynload_dir)/_curses_panel.$(SOABI_optimized).so \
		.$(dynload_dir)/_datetime.$(SOABI_optimized).so \
		.$(dynload_dir)/_dbm.$(SOABI_optimized).so \
		.$(dynload_dir)/_elementtree.$(SOABI_optimized).so \
		.$(dynload_dir)/_hashlib.$(SOABI_optimized).so \
		.$(dynload_dir)/_heapq.$(SOABI_optimized).so \
		.$(dynload_dir)/_json.$(SOABI_optimized).so \
		.$(dynload_dir)/_lsprof.$(SOABI_optimized).so \
		.$(dynload_dir)/_lzma.$(SOABI_optimized).so \
		.$(dynload_dir)/_md5.$(SOABI_optimized).so \
		.$(dynload_dir)/_multibytecodec.$(SOABI_optimized).so \
		.$(dynload_dir)/_multiprocessing.$(SOABI_optimized).so \
		.$(dynload_dir)/_opcode.$(SOABI_optimized).so \
		.$(dynload_dir)/_pickle.$(SOABI_optimized).so \
		.$(dynload_dir)/_posixsubprocess.$(SOABI_optimized).so \
		.$(dynload_dir)/_queue.$(SOABI_optimized).so \
		.$(dynload_dir)/_random.$(SOABI_optimized).so \
		.$(dynload_dir)/_sha1.$(SOABI_optimized).so \
		.$(dynload_dir)/_sha256.$(SOABI_optimized).so \
		.$(dynload_dir)/_sha3.$(SOABI_optimized).so \
		.$(dynload_dir)/_sha512.$(SOABI_optimized).so \
		.$(dynload_dir)/_socket.$(SOABI_optimized).so \
		.$(dynload_dir)/_sqlite3.$(SOABI_optimized).so \
		.$(dynload_dir)/_ssl.$(SOABI_optimized).so \
		.$(dynload_dir)/_struct.$(SOABI_optimized).so \
		.$(dynload_dir)/_testmultiphase.$(SOABI_optimized).so \
		.$(dynload_dir)/array.$(SOABI_optimized).so \
		.$(dynload_dir)/audioop.$(SOABI_optimized).so \
		.$(dynload_dir)/binascii.$(SOABI_optimized).so \
		.$(dynload_dir)/cmath.$(SOABI_optimized).so \
		.$(dynload_dir)/fcntl.$(SOABI_optimized).so \
		.$(dynload_dir)/grp.$(SOABI_optimized).so \
		.$(dynload_dir)/math.$(SOABI_optimized).so \
		.$(dynload_dir)/mmap.$(SOABI_optimized).so \
		.$(dynload_dir)/nis.$(SOABI_optimized).so \
		.$(dynload_dir)/ossaudiodev.$(SOABI_optimized).so \
		.$(dynload_dir)/parser.$(SOABI_optimized).so \
		.$(dynload_dir)/pyexpat.$(SOABI_optimized).so \
		.$(dynload_dir)/readline.$(SOABI_optimized).so \
		.$(dynload_dir)/resource.$(SOABI_optimized).so \
		.$(dynload_dir)/select.$(SOABI_optimized).so \
		.$(dynload_dir)/spwd.$(SOABI_optimized).so \
		.$(dynload_dir)/syslog.$(SOABI_optimized).so \
		.$(dynload_dir)/termios.$(SOABI_optimized).so \
		.$(dynload_dir)/unicodedata.$(SOABI_optimized).so \
		.$(dynload_dir)/xxlimited.$(SOABI_optimized).so \
		.$(dynload_dir)/zlib.$(SOABI_optimized).so \
		.$(pylibdir)/*.py \
		.$(pylibdir)/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/asyncio/*.py \
		.$(pylibdir)/asyncio/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/collections/*.py \
		.$(pylibdir)/collections/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/concurrent/*.py \
		.$(pylibdir)/concurrent/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/concurrent/futures/*.py \
		.$(pylibdir)/concurrent/futures/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/config-$(LDVERSION_optimized)/Makefile \
		.$(pylibdir)/ctypes/*.py \
		.$(pylibdir)/ctypes/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/ctypes/macholib \
		.$(pylibdir)/curses \
		.$(pylibdir)/dbm/*.py \
		.$(pylibdir)/dbm/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/distutils/*.py \
		.$(pylibdir)/distutils/README \
		.$(pylibdir)/distutils/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/distutils/command \
		.$(pylibdir)/email/*.py \
		.$(pylibdir)/email/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/email/architecture.rst \
		.$(pylibdir)/email/mime \
		.$(pylibdir)/encodings \
		.$(pylibdir)/ensurepip/*.py \
		.$(pylibdir)/ensurepip/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/html \
		.$(pylibdir)/http \
		.$(pylibdir)/idlelib \
		.$(pylibdir)/importlib/*.py \
		.$(pylibdir)/importlib/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/json/*.py \
		.$(pylibdir)/json/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/lib2to3 \
		.$(pylibdir)/logging \
		.$(pylibdir)/multiprocessing \
		.$(pylibdir)/pydoc_data \
		.$(pylibdir)/site-packages/README.txt \
		.$(pylibdir)/sqlite3/*.py \
		.$(pylibdir)/sqlite3/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/test/__init__.py \
		.$(pylibdir)/test/__pycache__/__init__$(bytecode_suffixes) \
		.$(pylibdir)/test/support/__init__.py \
		.$(pylibdir)/test/support/__pycache__/__init__$(bytecode_suffixes) \
		.$(pylibdir)/unittest/*.py \
		.$(pylibdir)/unittest/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/urllib \
		.$(pylibdir)/venv/*.py \
		.$(pylibdir)/venv/__pycache__/*$(bytecode_suffixes) \
		.$(pylibdir)/venv/scripts \
		.$(pylibdir)/wsgiref \
		.$(pylibdir)/xml \
		.$(pylibdir)/xmlrpc

ifeq ($(shell [[ "$(OS_NAME)" == "ubuntu" && $$(expr $(OS_VER) \>= 20.04) == 1 ]] || [[ "$(OS_NAME)" == "debian" && $$(expr $(OS_VER) \>= 10) == 1 ]] && echo 0), 0)
	dh_movefiles -palt-python$(pyshortver)-libs \
		.$(dynload_dir)/_uuid.$(SOABI_optimized).so
endif
ifneq (,$(filter $(DEB_HOST_ARCH), amd64 arm64))
	dh_movefiles -palt-python$(pyshortver)-libs \
		.$(dynload_dir)/_decimal.$(SOABI_optimized).so
endif
ifeq ($(with_gdbm),1)
	dh_movefiles -palt-python$(pyshortver)-libs \
		.$(dynload_dir)/_gdbm.$(SOABI_optimized).so
endif
ifeq (${bootstrap},0)
	dh_movefiles -palt-python$(pyshortver)-libs \
		.$(pylibdir)/ensurepip/rewheel/*.py \
		.$(pylibdir)/ensurepip/rewheel/__pycache__/*$(bytecode_suffixes)
endif
ifeq (${with_systemtap},1)
	dh_movefiles -palt-python$(pyshortver)-libs \
		.$(tapsetdir)/$(libpython_stp_optimized)

	dh_installdocs -palt-python$(pyshortver)-libs \
		systemtap-example.stp \
		pyfuntop.stp
endif

	dh_installdocs -palt-python$(pyshortver)-libs \
		LICENSE \
		README.rst

	dh_movefiles -palt-python$(pyshortver)-devel \
		-X.${pylibdir}/config-${LDVERSION_optimized}/Makefile \
		-X.${_includedir}/python${LDVERSION_optimized}/${_pyconfig_h} \
		.$(_bindir)/python$(LDVERSION_optimized)-*-config \
		.$(_bindir)/python$(LDVERSION_optimized)-config \
		.$(_bindir)/python$(pybasever)-config \
		.$(_bindir)/python3-config \
		.$(_includedir)/python$(LDVERSION_optimized)/*.h \
		.$(_includedir)/python$(LDVERSION_optimized)/internal \
		.$(_libdir)/pkgconfig/python-$(LDVERSION_optimized).pc \
		.$(_libdir)/pkgconfig/python-$(pybasever).pc \
		.$(_libdir)/pkgconfig/python3.pc \
		.$(pylibdir)/config-$(LDVERSION_optimized)/*

	dh_installdocs -palt-python$(pyshortver)-devel \
		Misc/README.valgrind \
		Misc/valgrind-python.supp \
		Misc/gdbinit

	dh_movefiles -palt-python$(pyshortver)-tools \
		.$(_bindir)/2to3* \
		.$(_bindir)/idle* \
		.$(_bindir)/python3-2to3 \
		.$(pylibdir)/Doc \
		.$(pylibdir)/Tools

	dh_movefiles -palt-python$(pyshortver)-tkinter \
		-X.${pylibdir}/tkinter/test \
		.$(dynload_dir)/_tkinter.$(SOABI_optimized).so \
		.$(pylibdir)/__pycache__/turtle*$(bytecode_suffixes) \
		.$(pylibdir)/tkinter/*.py \
		.$(pylibdir)/tkinter/__pycache__ \
		.$(pylibdir)/turtle.py \
		.$(pylibdir)/turtledemo/*.cfg \
		.$(pylibdir)/turtledemo/*.py \
		.$(pylibdir)/turtledemo/__pycache__/*$(bytecode_suffixes)

	dh_movefiles -palt-python$(pyshortver)-test \
		.$(dynload_dir)/_ctypes_test.$(SOABI_optimized).so \
		.$(dynload_dir)/_testbuffer.$(SOABI_optimized).so \
		.$(dynload_dir)/_testcapi.$(SOABI_optimized).so \
		.$(dynload_dir)/_testimportmultiple.$(SOABI_optimized).so \
		.$(dynload_dir)/_xxtestfuzz.$(SOABI_optimized).so \
		.$(pylibdir)/ctypes/test \
		.$(pylibdir)/distutils/tests \
		.$(pylibdir)/lib2to3/tests \
		.$(pylibdir)/sqlite3/test \
		.$(pylibdir)/test \
		.$(pylibdir)/tkinter/test \
		.$(pylibdir)/unittest/test

ifeq ($(with_debug_build),1)
	dh_movefiles -palt-python$(pyshortver)-debug \
		.$(_bindir)/python$(LDVERSION_debug) \
		.$(_bindir)/python$(LDVERSION_debug)-config \
		.$(_bindir)/python3-debug \
		.$(_includedir)/python$(LDVERSION_debug) \
		.$(_libdir)/libpython$(LDVERSION_debug).so \
		.$(_libdir)/libpython$(LDVERSION_debug).so.1.0 \
		.$(_libdir)/pkgconfig/python-$(LDVERSION_debug).pc \
		.$(dynload_dir)/_asyncio.$(SOABI_debug).so \
		.$(dynload_dir)/_bisect.$(SOABI_debug).so \
		.$(dynload_dir)/_blake2.$(SOABI_debug).so \
		.$(dynload_dir)/_bz2.$(SOABI_debug).so \
		.$(dynload_dir)/_codecs_cn.$(SOABI_debug).so \
		.$(dynload_dir)/_codecs_hk.$(SOABI_debug).so \
		.$(dynload_dir)/_codecs_iso2022.$(SOABI_debug).so \
		.$(dynload_dir)/_codecs_jp.$(SOABI_debug).so \
		.$(dynload_dir)/_codecs_kr.$(SOABI_debug).so \
		.$(dynload_dir)/_codecs_tw.$(SOABI_debug).so \
		.$(dynload_dir)/_contextvars.$(SOABI_debug).so \
		.$(dynload_dir)/_crypt.$(SOABI_debug).so \
		.$(dynload_dir)/_csv.$(SOABI_debug).so \
		.$(dynload_dir)/_ctypes.$(SOABI_debug).so \
		.$(dynload_dir)/_ctypes_test.$(SOABI_debug).so \
		.$(dynload_dir)/_curses.$(SOABI_debug).so \
		.$(dynload_dir)/_curses_panel.$(SOABI_debug).so \
		.$(dynload_dir)/_datetime.$(SOABI_debug).so \
		.$(dynload_dir)/_dbm.$(SOABI_debug).so \
		.$(dynload_dir)/_decimal.$(SOABI_debug).so \
		.$(dynload_dir)/_elementtree.$(SOABI_debug).so \
		.$(dynload_dir)/_hashlib.$(SOABI_debug).so \
		.$(dynload_dir)/_heapq.$(SOABI_debug).so \
		.$(dynload_dir)/_json.$(SOABI_debug).so \
		.$(dynload_dir)/_lsprof.$(SOABI_debug).so \
		.$(dynload_dir)/_lzma.$(SOABI_debug).so \
		.$(dynload_dir)/_md5.$(SOABI_debug).so \
		.$(dynload_dir)/_multibytecodec.$(SOABI_debug).so \
		.$(dynload_dir)/_multiprocessing.$(SOABI_debug).so \
		.$(dynload_dir)/_opcode.$(SOABI_debug).so \
		.$(dynload_dir)/_pickle.$(SOABI_debug).so \
		.$(dynload_dir)/_posixsubprocess.$(SOABI_debug).so \
		.$(dynload_dir)/_queue.$(SOABI_debug).so \
		.$(dynload_dir)/_random.$(SOABI_debug).so \
		.$(dynload_dir)/_sha1.$(SOABI_debug).so \
		.$(dynload_dir)/_sha256.$(SOABI_debug).so \
		.$(dynload_dir)/_sha3.$(SOABI_debug).so \
		.$(dynload_dir)/_sha512.$(SOABI_debug).so \
		.$(dynload_dir)/_socket.$(SOABI_debug).so \
		.$(dynload_dir)/_sqlite3.$(SOABI_debug).so \
		.$(dynload_dir)/_ssl.$(SOABI_debug).so \
		.$(dynload_dir)/_struct.$(SOABI_debug).so \
		.$(dynload_dir)/_testbuffer.$(SOABI_debug).so \
		.$(dynload_dir)/_testcapi.$(SOABI_debug).so \
		.$(dynload_dir)/_testimportmultiple.$(SOABI_debug).so \
		.$(dynload_dir)/_testmultiphase.$(SOABI_debug).so \
		.$(dynload_dir)/_tkinter.$(SOABI_debug).so \
		.$(dynload_dir)/_xxtestfuzz.$(SOABI_debug).so \
		.$(dynload_dir)/array.$(SOABI_debug).so \
		.$(dynload_dir)/audioop.$(SOABI_debug).so \
		.$(dynload_dir)/binascii.$(SOABI_debug).so \
		.$(dynload_dir)/cmath.$(SOABI_debug).so \
		.$(dynload_dir)/fcntl.$(SOABI_debug).so \
		.$(dynload_dir)/grp.$(SOABI_debug).so \
		.$(dynload_dir)/math.$(SOABI_debug).so \
		.$(dynload_dir)/mmap.$(SOABI_debug).so \
		.$(dynload_dir)/nis.$(SOABI_debug).so \
		.$(dynload_dir)/ossaudiodev.$(SOABI_debug).so \
		.$(dynload_dir)/parser.$(SOABI_debug).so \
		.$(dynload_dir)/pyexpat.$(SOABI_debug).so \
		.$(dynload_dir)/readline.$(SOABI_debug).so \
		.$(dynload_dir)/resource.$(SOABI_debug).so \
		.$(dynload_dir)/select.$(SOABI_debug).so \
		.$(dynload_dir)/spwd.$(SOABI_debug).so \
		.$(dynload_dir)/syslog.$(SOABI_debug).so \
		.$(dynload_dir)/termios.$(SOABI_debug).so \
		.$(dynload_dir)/unicodedata.$(SOABI_debug).so \
		.$(dynload_dir)/zlib.$(SOABI_debug).so \
		.$(pylibdir)/config-$(LDVERSION_debug)

ifeq ($(shell [[ "$(OS_NAME)" == "ubuntu" && $$(expr $(OS_VER) \>= 20.04) == 1 ]] || [[ "$(OS_NAME)" == "debian" && $$(expr $(OS_VER) \>= 10) == 1 ]] && echo 0), 0)
	dh_movefiles -palt-python$(pyshortver)-debug \
		.$(dynload_dir)/_uuid.$(SOABI_debug).so
endif

  ifeq ($(with_gdbm),1)
	dh_movefiles -palt-python$(pyshortver)-debug \
		.$(dynload_dir)/_gdbm.$(SOABI_debug).so
  endif
  ifeq (${with_systemtap},1)
	dh_movefiles -palt-python$(pyshortver)-debug \
		.$(tapsetdir)/$(libpython_stp_debug)
  endif
endif

override_dh_auto_test:
override_dh_auto_clean:

override_dh_builddeb:
	dh_builddeb -- -Zgzip

override_dh_missing:
	dh_missing --fail-missing
