#!/usr/bin/make -f

DH_VERBOSE=1

export SHELL = /bin/bash
export HOME=$(CURDIR)/build
export BUILD_DIR=$(shell pwd)
export PYBUILD_DISABLE_python2=1
export PYTHONWARNINGS=d

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)

buildroot := $(CURDIR)/debian/tmp

scl_dir := /opt/cloudlinux/python311

_metainfodir	:= /usr/share/metainfo

version    		:= 3.11.0
release    		:= 1
_sourcedir 		:= debian/source
_prefix 		:= /opt/alt/python311
_bindir 		:= $(_prefix)/bin
_libdir 		:= $(_prefix)/lib
_includedir 	:= $(_prefix)/include
_datadir		:= $(_prefix)/share
_mandir 		:= $(_datadir)/man
_metainfodir	:= $(_prefix)/share/metainfo
_pyconfig32_h 	:= pyconfig-32.h
_pyconfig64_h 	:= pyconfig-64.h
wordsize 		:= 64
_pyconfig_h 	:= pyconfig-$(wordsize).h
uname_m 		:= $(shell uname -m)

Source10 := debian/src/idle3.desktop
Source11 := debian/src/idle3.appdata.xml

# 1) build python3 with bootstrap=1
# 2) python3-setuptools and python3-wheel with bootstrap=1
# 3) python3-pip
# 4) python3-setuptools and python3-wheel with without bootstrap
# 5) python3 with without bootstrap


CPPFLAGS = $(shell dpkg-buildflags --get CPPFLAGS)
LDFLAGS = -Wl,-rpath=${_libdir} -Wl,--enable-new-dtags
LDFLAGS += $(shell dpkg-buildflags --get LDFLAGS)
LDFLAGS += -fno-semantic-interposition

export DFLAGS=

CPPFLAGS += -I/opt/alt/sqlite/usr/include
LDFLAGS += -L/opt/alt/sqlite/usr/lib/$(DEB_BUILD_MULTIARCH)/ -Wl,-rpath=/opt/alt/sqlite/usr/lib/$(DEB_BUILD_MULTIARCH)/


export CPPFLAGS
export LDFLAGS


pylibdir    := $(_libdir)/python3.11
sitelib	    := $(pylibdir)/site-packages
distlib	    := $(pylibdir)/dist-packages
dynload_dir := $(pylibdir)/lib-dynload

ABIFLAGS_debug		:= d

LDVERSION_optimized	:= 3.11
LDVERSION_debug		:= 3.11$(ABIFLAGS_debug)

SOABI_optimized		:= cpython-311-$(DEB_HOST_MULTIARCH)
SOABI_debug			:= cpython-311$(ABIFLAGS_debug)-$(DEB_HOST_MULTIARCH)

bytecode_suffixes	:= .cpython-311*.py?

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

with_valgrind		:= 1
with_gdbm			:= 1
computed_gotos		:= yes
optimizations_flag	:= --enable-optimizations
with_tests 			:= 0
with_debug_build	:= 0
with_gdb_hooks		:= 0

NJOBS := -j$(shell getconf _NPROCESSORS_ONLN)

DPKG_CFLAGS := $(shell dpkg-buildflags --get CFLAGS)
DPKG_CFLAGS += -fno-semantic-interposition

CONF_EXTRA_OPT =
ifeq ($(with_valgrind),1)
  CONF_EXTRA_OPT += --with-valgrind
endif

  CONF_EXTRA_OPT += --with-lto -with-dtrace

define BuildPython
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-expat \
--with-system-ffi \
--enable-loadable-sqlite-extensions \
--with-ssl-default-suites=openssl \
$(2) \
$(CONF_EXTRA_OPT);


cd $(BUILD_DIR); \
$(MAKE) -C build/$(1) $(NJOBS) EXTRA_CFLAGS="$(3)" CFLAGS_NODIST+="$(3)" $(4)
endef

# Use a common function to do an install for all our configurations:

define InstallPython
cd $(BUILD_DIR); \
$(MAKE) -C build/$(1) install \
	DESTDIR=$(buildroot) \
	INSTALL="install -p" \
	EXTRA_CFLAGS="$(3)"

mv ${buildroot}${_bindir}/python${4}-config \
  ${buildroot}${_bindir}/python${4}-$(uname_m)-config
echo -e '#!/bin/sh\nexec $(shell dirname $0)/python$${4}-$(uname_m)-config "$$@"' > \
  ${buildroot}${_bindir}/python${4}-config
echo '[ $? -eq 127 ] && echo "Could not find python$${4}-$(uname_m)-config. Look around to see available arches." >&2' >> \
  ${buildroot}${_bindir}/python${4}-config
chmod +x ${buildroot}${_bindir}/python${4}-config
mv ${buildroot}${_includedir}/python${4}/pyconfig.h \
  ${buildroot}${_includedir}/python${4}/${_pyconfig_h}
echo "#include <bits/wordsize.h>" > ${buildroot}${_includedir}/python${4}/pyconfig.h
echo "" >> ${buildroot}${_includedir}/python${4}/pyconfig.h
echo "#if __WORDSIZE == 32" >> ${buildroot}${_includedir}/python${4}/pyconfig.h
echo "#include \"${_pyconfig32_h}\"" >> ${buildroot}${_includedir}/python${4}/pyconfig.h
echo "#elif __WORDSIZE == 64" >> ${buildroot}${_includedir}/python${4}/pyconfig.h
echo "#include \"${_pyconfig64_h}\"" >> ${buildroot}${_includedir}/python${4}/pyconfig.h
echo "#else" >> ${buildroot}${_includedir}/python${4}/pyconfig.h
echo "#error "Unknown word size"" >> ${buildroot}${_includedir}/python${4}/pyconfig.h
echo "#endif" >> ${buildroot}${_includedir}/python${4}/pyconfig.h
endef


%:
	dh $@

override_dh_auto_configure:
	export
	find -name '*.exe' -print -delete
	rm -rf ./Modules/expat
	patch -p1 < debian/patches/00001-rpath.patch
	patch -p1 < debian/patches/00189-use-rpm-wheels.patch
	patch -p1 < debian/patches/00328-pyc-timestamp-invalidation-mode.patch
	patch -p1 < debian/patches/00371-revert-bpo-1596321-fix-threading-_shutdown-for-the-main-thread-gh-28549-gh-28589.patch
	patch -p1 < debian/patches/path_to_alt-openssl.patch
#	patch -p1 < debian/patches/01002-replacement_sqlite_on_alt-sqlite.patch
	patch -p1 < debian/patches/01003-fix-minidom-test.patch
	patch -p1 < debian/patches/CVE-2025-15366.patch
	patch -p1 < debian/patches/CVE-2025-15367.patch
	patch -p1 < debian/patches/CVE-2026-3644.patch
	patch -p1 < debian/patches/CVE-2026-4224.patch
	patch -p1 < debian/patches/CVE-2026-4519.patch
	patch -p1 < debian/patches/CVE-2026-4786.patch
	patch -p1 < debian/patches/CVE-2026-6100.patch
	patch -p1 < debian/patches/CVE-2026-7210.patch
	patch -p1 < debian/patches/CVE-2026-9669.patch
	patch -p1 < debian/patches/CVE-2026-15308.patch
	patch -p1 < debian/patches/CVE-2026-0864.patch
	patch -p1 < debian/patches/CVE-2026-1502.patch
	patch -p1 < debian/patches/CVE-2026-3276.patch
	patch -p1 < debian/patches/CVE-2026-6019.patch
	patch -p1 < debian/patches/CVE-2026-7774.patch
	patch -p1 < debian/patches/CVE-2026-8328.patch
	patch -p1 < debian/patches/CVE-2026-11940.patch
	patch -p1 < debian/patches/CVE-2026-11972.patch
	patch -p1 < debian/patches/CVE-2025-13462.patch
# Remove files that should be generated by the build
# (This is after patching, so that we can use patches directly from upstream)
	rm configure pyconfig.h.in
# Regenerate the configure script and pyconfig.h.in
	autoconf
	autoheader
	sed -i 's!@PYTHON_FOR_REGEN@!/opt/alt/python311/bin/python3.11!' Makefile.pre.in

override_dh_auto_build:
# Call the above to build each configuration.
ifeq ($(with_debug_build),1)
	$(call BuildPython,debug,--without-ensurepip --with-pydebug,-Og,regen-all PYTHON_FOR_REGEN=${_bindir}/python3.11)
endif # with_debug_build
	$(call BuildPython,optimized,--without-ensurepip --enable-optimizations,,regen-all PYTHON_FOR_REGEN=${_bindir}/python3.11)

# ======================================================
# Installing the built code:
# ======================================================

override_dh_auto_install:
	#mkdir -p $(buildroot)$(_prefix) $(buildroot)$(_mandir)

ifeq ($(with_debug_build),1)
	$(call InstallPython,debug,$(py_INSTSONAME_debug),-O0,$(LDVERSION_debug))
endif

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

# Install directories for additional packages
	install -d -m 0755 $(buildroot)$(sitelib)/__pycache__

# add idle3 to menu
	install -D -m 0644 Lib/idlelib/Icons/idle_16.png $(buildroot)$(_datadir)/icons/hicolor/16x16/apps/idle3.png
	install -D -m 0644 Lib/idlelib/Icons/idle_32.png $(buildroot)$(_datadir)/icons/hicolor/32x32/apps/idle3.png
	install -D -m 0644 Lib/idlelib/Icons/idle_48.png $(buildroot)$(_datadir)/icons/hicolor/48x48/apps/idle3.png
	desktop-file-install --dir=$(buildroot)$(_datadir)/applications $(Source10)

# Install and validate appdata file
	mkdir -p $(buildroot)$(_metainfodir)
	cp -a $(Source11) $(buildroot)$(_metainfodir)
	#appstream-util validate-relax --nonet $(buildroot)$(_metainfodir)/idle3.appdata.xml

# Make sure distutils looks at the right pyconfig.h file
# See https://bugzilla.redhat.com/show_bug.cgi?id=201434
# 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 (see https://bugzilla.redhat.com/show_bug.cgi?id=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

# Install pathfix.py to bindir
# See https://github.com/fedora-python/python-rpm-porting/issues/24
	cp -p Tools/scripts/pathfix.py $(buildroot)$(_bindir)/

# Install i18n tools to bindir
# They are also in python2, so we version them
# https://bugzilla.redhat.com/show_bug.cgi?id=1571474
	for tool in pygettext msgfmt; do \
	  cp -p Tools/i18n/$${tool}.py $(buildroot)$(_bindir)/$${tool}3.11.py; \
	  ln -s $${tool}3.11.py $(buildroot)$(_bindir)/$${tool}3.py; \
	done

# Switch all shebangs to refer to the specific Python version.
# This currently only covers files matching ^[a-zA-Z0-9_]+\.py$,
# so handle files named using other naming scheme separately.
	LD_LIBRARY_PATH=$(HOME)/optimized \
	  Tools/scripts/pathfix.py \
	  -i "$(_bindir)/python3.11" -pn \
	  $(buildroot) \
	  $(buildroot)$(_bindir)/*3.11.py
ifeq ($(with_gdb_hooks),1)
	  $(buildroot)$(DirHoldingGdbPy)/*.py
endif
# Remove tests for python3-tools which was removed in
# https://bugzilla.redhat.com/show_bug.cgi?id=1312030
	rm -rf $(buildroot)$(pylibdir)/test/test_tools

# 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 {} \; \) \)

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

# Get rid of backup files:
	find $(buildroot)/ -name "*~" -exec rm -rf {} \;
	find . -name "*~" -exec rm -rf {} \;

	find -name 'py_compile.py'

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

# Since we have pathfix.py in bindir, this is created, but we don't want it
	if [ -d $(buildroot)$(_bindir)/__pycache__ ]; then rm -rf $(buildroot)$(_bindir)/__pycache__; fi

# this is joke from python developers
	rm -rf $(buildroot)$(pylibdir)/__phello__

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

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

# 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. https://bugzilla.redhat.com/show_bug.cgi?id=676748
ifeq ($(with_debug_build),1)
	ln -s python$(LDVERSION_debug) $(buildroot)$(_bindir)/python3-debug
endif

# There's 2to3-X.X executable and 2to3 soft link to it.
# No reason to have both, so keep only 2to3 as an executable.
# See https://bugzilla.redhat.com/show_bug.cgi?id=1111275
	mv $(buildroot)$(_bindir)/2to3-3.11 $(buildroot)$(_bindir)/2to3


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


# Packaging
	dh_movefiles -palt-python311 \
	  .${_bindir}/pydoc* \
	  .${_bindir}/python3 \
	  .${_bindir}/python3.11 \
	  .${_bindir}/python${LDVERSION_optimized} \
	  .${_mandir}/*/*3*


	dh_installdirs -palt-python311-libs -A \
	  ${pylibdir}/lib2to3 \
	  ${pylibdir}/unittest \
	  $(_libdir) \
	  $(dynload_dir) \
	  $(pylibdir) \
	  $(sitelib)/__pycache__

	dh_movefiles -palt-python311-libs \
	  -X.${pylibdir}/__pycache__/turtle*${bytecode_suffixes} \
	  -X.${pylibdir}/lib2to3/tests \
	  -X.${pylibdir}/turtle.py \
	  .${_includedir}/python${LDVERSION_optimized}/${_pyconfig_h} \
	  .${_libdir}/${py_INSTSONAME_optimized} \
	  .${_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}/_decimal.${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}/_posixshmem.${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}/_statistics.${SOABI_optimized}.so \
	  .${dynload_dir}/_struct.${SOABI_optimized}.so \
	  .${dynload_dir}/_typing.${SOABI_optimized}.so \
	  .${dynload_dir}/_uuid.${SOABI_optimized}.so \
	  .${dynload_dir}/_xxsubinterpreters.${SOABI_optimized}.so \
	  .${dynload_dir}/_xxtestfuzz.${SOABI_optimized}.so \
	  .${dynload_dir}/_zoneinfo.${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}/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}/xxlimited_35.${SOABI_optimized}.so \
	  .${dynload_dir}/zlib.${SOABI_optimized}.so \
	  .${pylibdir}/*.py \
	  .${pylibdir}/LICENSE.txt \
	  .${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}-${DEB_HOST_MULTIARCH}/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}/importlib/*.py \
	  .${pylibdir}/importlib/__pycache__/*${bytecode_suffixes} \
	  .${pylibdir}/importlib/metadata/ \
	  .${pylibdir}/importlib/resources/* \
	  .${pylibdir}/json/*.py \
	  .${pylibdir}/json/__pycache__/*${bytecode_suffixes} \
	  .${pylibdir}/lib2to3/*.pickle \
	  .${pylibdir}/lib2to3/*.py \
	  .${pylibdir}/lib2to3/*.txt \
	  .${pylibdir}/lib2to3/__pycache__/*${bytecode_suffixes} \
	  .${pylibdir}/lib2to3/fixes/*.py \
	  .${pylibdir}/lib2to3/fixes/__pycache__/*${bytecode_suffixes} \
	  .${pylibdir}/lib2to3/pgen2/*.py \
	  .${pylibdir}/lib2to3/pgen2/__pycache__/*${bytecode_suffixes} \
	  .${pylibdir}/logging \
	  .${pylibdir}/multiprocessing \
	  .${pylibdir}/pydoc_data \
	  .${pylibdir}/re \
	  .${pylibdir}/site-packages/README.txt \
	  .${pylibdir}/sqlite3/*.py \
	  .${pylibdir}/sqlite3/__pycache__/*${bytecode_suffixes} \
	  .${pylibdir}/tomllib \
	  .${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 \
	  .${pylibdir}/zoneinfo/*.py \
	  .${pylibdir}/zoneinfo/__pycache__/*${bytecode_suffixes}
ifeq ($(with_gdbm),1)
	dh_movefiles -palt-python311-libs \
	  .${dynload_dir}/_gdbm.${SOABI_optimized}.so
endif
	dh_installdocs -palt-python311-libs \
	  README.rst

	dh_movefiles -palt-python311-devel \
	  -X.${pylibdir}/config-${LDVERSION_optimized}-$(DEB_BUILD_MULTIARCH)/Makefile \
	  -X.${_includedir}/python${LDVERSION_optimized}/${_pyconfig_h} \
	  .${_bindir}/2to3 \
	  .${_bindir}/msgfmt3.11.py \
	  .${_bindir}/msgfmt3.py \
	  .${_bindir}/pathfix.py \
	  .${_bindir}/pygettext3.11.py \
	  .${_bindir}/pygettext3.py \
	  .${_bindir}/python${LDVERSION_optimized}-*-config \
	  .${_bindir}/python${LDVERSION_optimized}-config \
	  .${_bindir}/python3.11-config \
	  .${_bindir}/python3-config \
	  .${_includedir}/python${LDVERSION_optimized}/*.h \
	  .${_includedir}/python${LDVERSION_optimized}/cpython/ \
	  .${_includedir}/python${LDVERSION_optimized}/internal/ \
	  .${_libdir}/libpython${LDVERSION_optimized}.so \
	  .${_libdir}/pkgconfig/python-${LDVERSION_optimized}-embed.pc \
	  .${_libdir}/pkgconfig/python-${LDVERSION_optimized}.pc \
	  .${_libdir}/pkgconfig/python3-embed.pc \
	  .${_libdir}/pkgconfig/python3.pc \
	  .${pylibdir}/config-${LDVERSION_optimized}-$(DEB_BUILD_MULTIARCH) \
	  .${pylibdir}/config-${LDVERSION_optimized}-$(DEB_BUILD_MULTIARCH)/__pycache__

	dh_installdocs -palt-python311-devel \
	  Misc/README.valgrind \
	  Misc/gdbinit \
	  Misc/valgrind-python.supp

	dh_movefiles -palt-python311-idle \
	  .${_bindir}/idle* \
	  .${_datadir}/applications/idle3.desktop \
	  .${_datadir}/icons/hicolor/*/apps/idle3.* \
	  .${_metainfodir}/idle3.appdata.xml \
	  .${pylibdir}/idlelib

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

	dh_movefiles -palt-python311-test \
	  -X__pycache__ \
	  .${dynload_dir}/_ctypes_test.${SOABI_optimized}.so \
	  .${dynload_dir}/_testbuffer.${SOABI_optimized}.so \
	  .${dynload_dir}/_testcapi.${SOABI_optimized}.so \
	  .${dynload_dir}/_testclinic.${SOABI_optimized}.so \
	  .${dynload_dir}/_testimportmultiple.${SOABI_optimized}.so \
	  .${dynload_dir}/_testinternalcapi.${SOABI_optimized}.so \
	  .${dynload_dir}/_testmultiphase.${SOABI_optimized}.so \
	  .${pylibdir}/ctypes/test \
	  .${pylibdir}/distutils/tests \
	  .${pylibdir}/lib2to3/tests \
	  .${pylibdir}/test \
	  .${pylibdir}/tkinter/test \
	  .${pylibdir}/unittest/test

ifeq ($(with_debug_build),1)
	dh_movefiles -palt-python311-debug \
	  .${_bindir}/python$(LDVERSION_debug)-config \
	  .${_bindir}/python${LDVERSION_debug} \
	  .${_bindir}/python${LDVERSION_debug}-*-config \
	  .${_bindir}/python${LDVERSION_debug}-config \
	  .${_bindir}/python3-debug \
	  .${_includedir}/python${LDVERSION_debug}/* \
	  .${_libdir}/${py_INSTSONAME_debug} \
	  .${_libdir}/libpython$(LDVERSION_debug).so.1.0 \
	  .${_libdir}/libpython${LDVERSION_debug}.so \
	  .${_libdir}/libpython${LDVERSION_debug}.so.1.0 \
	  .${_libdir}/pkgconfig/python-${LDVERSION_debug}-embed.pc \
	  .${_libdir}/pkgconfig/python-${LDVERSION_debug}.pc \
	  .${dynload_dir}/_asyncio.${SOABI_debug}.so \
	  .${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}/_posixshmem.${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}/_statistics.${SOABI_debug}.so \
	  .${dynload_dir}/_struct.${SOABI_debug}.so \
	  .${dynload_dir}/_testbuffer.${SOABI_debug}.so \
	  .${dynload_dir}/_testcapi.${SOABI_debug}.so \
	  .${dynload_dir}/_testclinic.${SOABI_debug}.so \
	  .${dynload_dir}/_testimportmultiple.${SOABI_debug}.so \
	  .${dynload_dir}/_testinternalcapi.${SOABI_debug}.so \
	  .${dynload_dir}/_testmultiphase.${SOABI_debug}.so \
	  .${dynload_dir}/_tkinter.${SOABI_debug}.so \
	  .${dynload_dir}/_typing.${SOABI_debug}.so \
	  .${dynload_dir}/_uuid.${SOABI_debug}.so \
	  .${dynload_dir}/_xxsubinterpreters.${SOABI_debug}.so \
	  .${dynload_dir}/_xxtestfuzz.${SOABI_debug}.so \
	  .${dynload_dir}/_zoneinfo.${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}/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}/xxlimited.${SOABI_debug}.so \
	  .${dynload_dir}/xxlimited_35.${SOABI_debug}.so \
	  .${dynload_dir}/zlib.${SOABI_debug}.so \
	  .${pylibdir}/config-${LDVERSION_debug}-$(DEB_BUILD_MULTIARCH) \
	  .${pylibdir}/config-${LDVERSION_debug}-$(DEB_BUILD_MULTIARCH)/__pycache__
ifeq ($(with_gdbm),1)
	dh_movefiles -palt-python311-debug \
	  .${dynload_dir}/_gdbm.${SOABI_debug}.so
endif
endif # with_debug_build

override_dh_shlibdeps:
	dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info

override_dh_missing:
	dh_missing --fail-missing -X__pycache__

override_dh_auto_test:
override_dh_auto_clean:
