#!/usr/bin/make -f include /usr/share/dpkg/architecture.mk include /usr/share/dpkg/pkg-info.mk unexport LANG LC_ALL LC_CTYPE LC_COLLATE LC_TIME LC_NUMERIC LC_MESSAGES unexport CFLAGS CXXFLAGS LDFLAGS CPPFLAGS export SHELL = /bin/bash # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 ifeq ($(DEB_HOST_ARCH_OS),linux) PLAT = linux else ifeq ($(DEB_HOST_ARCH_OS),kfreebsd) PLAT = gnukfreebsd10 else ifeq ($(DEB_HOST_ARCH_OS),hurd) PLAT = gnu0 else $(warning unhandled operating system name: $(DEB_HOST_ARCH_OS)) PLAT = unknown endif SPHINXOPTS := -D today='$(shell LC_ALL=C date -u +'%B %d, %Y' -d '@$(SOURCE_DATE_EPOCH)')' SPHINXOPTS += -D html_last_updated_fmt='$(shell LC_ALL=C date -u +'%B %d, %Y' -d '@$(SOURCE_DATE_EPOCH)')' export SPHINXOPTS on_buildd := $(shell [ -f /CurrentlyBuilding -o "$$LOGNAME" = buildd -o "$$USER" = buildd ] && echo yes) dh_compat2 := $(shell dpkg --compare-versions "$$(dpkg-query -f '$${Version}' -W debhelper)" lt 9.20150811ubuntu2 && echo DH_COMPAT=2) ifneq (,$(findstring nocheck, $(DEB_BUILD_OPTIONS))) WITHOUT_CHECK := yes endif WITHOUT_BENCH := ifneq (,$(findstring nobench, $(DEB_BUILD_OPTIONS))) WITHOUT_BENCH := yes endif ifeq ($(on_buildd),yes) ifneq (,$(filter $(DEB_HOST_ARCH), armel hppa mips mipsel mips64 mips64el riscv64 s390 hurd-i386 kfreebsd-amd64 kfreebsd-i386)) WITHOUT_CHECK := yes endif ifneq (,$(filter $(DEB_HOST_ARCH), armel hppa mips mipsel mips64 mips64el riscv64 s390 hurd-i386 kfreebsd-amd64 kfreebsd-i386)) WITHOUT_BENCH := yes endif endif ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) WITHOUT_BENCH := yes WITHOUT_CHECK := yes endif SPACE = $(EMPTY) $(EMPTY) COMMA = , ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) NJOBS := -j $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) endif distribution := $(shell lsb_release -is) distrelease := $(shell lsb_release -cs) derivative := $(shell \ if dpkg-vendor --derives-from Ubuntu; then echo Ubuntu; \ elif dpkg-vendor --derives-from Debian; then echo Debian; \ else echo Unknown; fi) # we inject our own lto flags DPKG_OPTIMIZE = optimize=-lto dpkg_buildflags = DEB_BUILD_MAINT_OPTIONS="hardening=-pie $(DPKG_OPTIMIZE)" dpkg-buildflags dpkg_pieflags = DEB_BUILD_MAINT_OPTIONS="hardening=-pie $(DPKG_OPTIMIZE)"dpkg-buildflags ifeq (,$(filter $(distrelease),stretch buster bullseye trusty xenial bionic focal impish)) with_nopie := yes dpkg_pieflags = DEB_BUILD_MAINT_OPTIONS="hardening=-pie $(DPKG_OPTIMIZE)" dpkg-buildflags endif # FIXME: remove sid when uploading to unstable, after bookworm is released #ifneq (,$(filter $(distrelase), jessie stretch buster bullseye bookworm sid precise trusty xenial bionic focal groovy hirsute)) with_dbmmodule = yes bd_dbm = libdb-dev dbmliborder = bdb:gdbm #else # bd_dbm = libgdbm-compat-dev # dbmliborder = gdbm:bdb #endif ifneq (,$(filter valgrind, $(shell dpkg-query --show -f '$${Depends}\n' valgrind-if-available))) valgrind_configure_args = --with-valgrind endif VER=3.13 SVER=3.13.0~rc3 NVER=3.14 PVER=python$(VER) EXT_VER=$(subst .,,$(VER)) PRIORITY=$(shell echo $(VER) | tr -d '.')0 PREVVER := $(shell awk '/^python/ && NR > 1 {print substr($$2,2,length($$2)-2); exit}' debian/changelog) # default versions are built from the python-defaults source package # keep the definition to adjust package priorities. DEFAULT_VERSION = no STATIC_PYTHON=yes MIN_MODS := $(shell awk '/^ / && $$2 == "module" { print $$1 }' \ debian/PVER-minimal.README.Debian.in) MIN_EXTS := $(shell awk '/^ / && $$2 ~ /^extension/ { print $$1 }' \ debian/PVER-minimal.README.Debian.in) MIN_BUILTINS := $(shell awk '/^ / && $$2 == "builtin" { print $$1 }' \ debian/PVER-minimal.README.Debian.in) MIN_PACKAGES := $(shell awk '/^ / && $$2 == "package" { print $$1 }' \ debian/PVER-minimal.README.Debian.in) MIN_ENCODINGS := $(foreach i, \ $(filter-out \ big5% bz2% cp932.py cp949.py cp950.py euc_% \ gb% iso2022% johab.py shift_jis% , \ $(shell cd Lib/encodings && echo *.py)), \ encodings/$(i)) \ codecs.py stringprep.py with_tk := yes with_gdbm := yes with_interp := static #with_interp := shared PY_INTERPRETER = /usr/bin/python$(VER) ifeq ($(DEFAULT_VERSION),yes) PY_PRIO = standard #PYSTDDEP = , python (>= $(VER)) else PY_PRIO = optional endif ifeq ($(distribution),Ubuntu) PY_MINPRIO = required PY_MINPRIO = optional #with_udeb = yes # test_ssl assumes that openssl is compiled with security level set to 1 # make it so, during the build export OPENSSL_CONF = $(CURDIR)/debian/openssl.cnf else PY_MINPRIO = $(PY_PRIO) endif ifeq (,$(filter $(distrelease),lenny etch squeeze wheezy lucid maverick natty oneiric)) bd_qual = :any endif ifeq (,$(filter $(distrelease),lenny etch squeeze wheezy lucid maverick natty oneiric)) ma_filter = cat else ma_filter = grep -v '^Multi-Arch:' endif ifeq (,$(filter $(distrelease),lenny etch squeeze wheezy lucid maverick natty oneiric precise quantal raring saucy trusty)) bd_dpkgdev = dpkg-dev (>= 1.17.11), endif CC=$(DEB_HOST_GNU_TYPE)-gcc CXX=$(DEB_HOST_GNU_TYPE)-g++ ifneq (,$(filter $(distrelease),bionic)) CC=$(DEB_HOST_GNU_TYPE)-gcc-8 CXX=$(DEB_HOST_GNU_TYPE)-g++-8 bd_gcc = g++-8, endif AR=$(DEB_HOST_GNU_TYPE)-ar RANLIB=$(DEB_HOST_GNU_TYPE)-ranlib # configure and dtrace consume these export CC CXX # These variables are needed for the ELF package metadata (set via LDFLAGS) DEB_BUILD_OS_RELEASE_ID=$(shell . /usr/lib/os-release && echo $$ID) export DEB_BUILD_OS_RELEASE_ID export DEB_HOST_ARCH export DEB_SOURCE export DEB_VERSION DPKG_CPPFLAGS= $(shell $(dpkg_buildflags) --get CPPFLAGS) DPKG_CFLAGS := $(shell $(dpkg_buildflags) --get CFLAGS) DPKG_CFLAGS := $(subst -fstack-protector-strong,-fstack-protector,$(DPKG_CFLAGS)) DPKG_LDFLAGS = $(shell $(dpkg_buildflags) --get LDFLAGS) OPT_CFLAGS := $(filter-out -O%,$(DPKG_CFLAGS)) # default is -O3 DEBUG_CFLAGS := $(patsubst -O%,-Og,$(DPKG_CFLAGS)) DPKG_PIE_CPPFLAGS= $(shell $(dpkg_pieflags) --get CPPFLAGS) DPKG_PIE_CFLAGS := $(shell $(dpkg_pieflags) --get CFLAGS) DPKG_PIE_CFLAGS := $(subst -fstack-protector-strong,-fstack-protector,$(DPKG_PIE_CFLAGS)) DPKG_PIE_LDFLAGS = $(shell $(dpkg_pieflags) --get LDFLAGS) OPT_PIE_CFLAGS := $(filter-out -O%,$(DPKG_PIE_CFLAGS)) # default is -O3 ifeq ($(DEB_HOST_ARCH),ia64) DPKG_CPPFLAGS += -DWITH_PYMALLOC_RADIX_TREE=0 DPKG_PIE_CPPFLAGS += -DWITH_PYMALLOC_RADIX_TREE=0 endif # see #972202, and https://gcc.gnu.org/PR97431 ifneq (,$(filter $(DEB_HOST_ARCH), hppa sh4)) EXTRA_OPT_CFLAGS += -fno-inline-small-functions endif ifneq (,$(filter $(DEB_HOST_ARCH), ppc64 ppc64el)) OPT_CFLAGS += -fexceptions DEBUG_CFLAGS += -fexceptions endif ifeq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) ifeq ($(DEB_HOST_ARCH_OS),linux) ifneq (,$(findstring $(DEB_HOST_ARCH), amd64 armel armhf arm64 i386 powerpc ppc64 ppc64el s390x)) with_pgo := yes endif endif endif ifneq (,$(filter $(DEB_HOST_ARCH), amd64 armel armhf arm64 i386 powerpc ppc64 ppc64el s390x)) with_lto := yes endif ifneq (,$(findstring nopgo, $(DEB_BUILD_OPTIONS))) with_pgo := endif ifneq (,$(findstring nolto, $(DEB_BUILD_OPTIONS))) with_lto := endif ifneq (,$(findstring noopt, $(DEB_BUILD_OPTIONS))) OPT_CFLAGS := $(filter-out -O%, $(OPT_CFLAGS)) EXTRA_OPT_CFLAGS = -O0 with_pgo = with_lto = endif BASE_LTO_CFLAGS = -g -fwrapv -O3 ifeq ($(with_lto),yes) LTO_CFLAGS = $(BASE_LTO_CFLAGS) -flto -fuse-linker-plugin with_fat_lto := $(shell dpkg --compare-versions $$($(CC) --version \ | sed -n '/^$(CC)/s,.* ,,p') ge 4.9 && echo yes) ifeq ($(with_fat_lto),yes) LTO_CFLAGS += -ffat-lto-objects endif EXTRA_OPT_CFLAGS += $(LTO_CFLAGS) AR=$(DEB_HOST_GNU_TYPE)-gcc-ar RANLIB=$(DEB_HOST_GNU_TYPE)-gcc-ranlib endif sysconfig_substflags = \ $(if $(with_lto),$(foreach i,-flto=auto -flto -fuse-linker-plugin -ffat-lto-objects,-e 's/$(i)//g')) \ -e '/^OPT/s,-O3,-O2,' \ -e 's/-O3/-O2/g' \ -e 's/-fprofile-use *-fprofile-correction//g' \ -e "s/-specs=[^ '\"]*//g" \ -e "s/-fdebug-prefix-map=[^ '\"]*//g" \ -e "s/-ffile-prefix-map=[^ '\"]*//g" \ -e 's,^RUNSHARED *=.*,RUNSHARED=,' \ -e '/BLDLIBRARY/s/-L\. //' ifeq ($(derivative),Ubuntu) arch_substvars = else ifeq ($(derivative),Debian) arch_substvars = # '-Vpython38:Breaks=$(shell tr '\n' ' ' < debian/py38-breaks.$(derivative))' endif make_build_target = $(if $(filter yes, $(with_pgo)),profile-opt) buildd_static := $(CURDIR)/build-static buildd_nopie := $(CURDIR)/build-nopie buildd_shared := $(CURDIR)/build-shared buildd_debug := $(CURDIR)/build-debug buildd_shdebug := $(CURDIR)/build-shdebug d := debian/tmp scriptdir = usr/share/lib/python$(VER) scriptdir = usr/share/python$(VER) scriptdir = usr/lib/python$(VER) # package names and directories p_base := $(PVER) p_npie := $(PVER)-nopie p_min := $(PVER)-minimal p_lib := lib$(PVER) p_gdbm := $(PVER)-gdbm p_tk := $(PVER)-tk p_dev := $(PVER)-dev p_exam := $(PVER)-examples p_idle := idle-$(PVER) p_doc := $(PVER)-doc p_dbg := $(PVER)-dbg p_udeb := $(PVER)-udeb p_venv := $(PVER)-venv p_full := $(PVER)-full p_lbase := lib$(PVER)-stdlib p_lmin := lib$(PVER)-minimal p_ldev := lib$(PVER)-dev p_ldbg := lib$(PVER)-dbg p_ltst := lib$(PVER)-testsuite d_base := debian/$(p_base) d_min := debian/$(p_min) d_npie := debian/$(p_npie) d_lib := debian/$(p_lib) d_gdbm := debian/$(p_gdbm) d_tk := debian/$(p_tk) d_dev := debian/$(p_dev) d_exam := debian/$(p_exam) d_idle := debian/$(p_idle) d_doc := debian/$(p_doc) d_dbg := debian/$(p_dbg) d_udeb := debian/$(p_udeb) d_venv := debian/$(p_venv) d_full := debian/$(p_full) d_lbase := debian/$(p_lbase) d_lmin := debian/$(p_lmin) d_ldev := debian/$(p_ldev) d_ldbg := debian/$(p_ldbg) d_ltst := debian/$(p_ltst) build-arch: stamps/stamp-build build-indep: stamps/stamp-build-doc build: build-arch stamps/stamp-build: stamps/stamp-build-static \ $(if $(filter yes, $(with_nopie)),stamps/stamp-build-nopie) \ stamps/stamp-mincheck \ stamps/stamp-build-shared stamps/stamp-build-debug \ stamps/stamp-build-shared-debug \ stamps/stamp-check stamps/stamp-pybench touch $@ PROFILE_EXCLUDES = test_compiler test_subprocess \ test_multiprocessing test_socket test_socketserver \ test_thread test_threaded_import test_threadedtempfile \ test_threading test_threading_local test_threadsignals \ test_concurrent_futures test_ctypes \ test_dbm_dumb test_dbm_ndbm test_pydoc test_sundry \ test_signal test_ioctl test_gdb test_ensurepip test_venv # TODO: these hang/fail with new OpenSSL PROFILE_EXCLUDES += \ test_asyncio test_ftplib test_httplib test_imaplib test_nntplib test_poplib test_ssl # TODO: these fail in the profile build PROFILE_EXCLUDES += \ test_cmd_line_script test_zipimport_support # these take a long time to run ... PROFILE_EXCLUDES += \ test_multiprocessing_fork test_multiprocessing_forkserver test_multiprocessing_spawn # relying on external dependencies PROFILE_EXCLUDES += test_cppext test_tools # TODO: update profiled-build.diff to support --next # --next=20 PROFILE_TASK = ../Lib/test/regrtest.py \ -s \ -j 1 -unone,decimal \ -x $(sort $(TEST_EXCLUDES) $(PROFILE_EXCLUDES)) run-profile-task: $(MAKE) -C $(buildd_static) \ PROFILE_TASK='$(PROFILE_TASK)' run_profile_task common_configure_args = \ --prefix=/usr \ --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \ --enable-ipv6 \ --enable-loadable-sqlite-extensions \ --with-dbmliborder=$(dbmliborder) \ --with-computed-gotos \ --without-ensurepip \ --with-system-expat \ $(if $(filter hurd, $(DEB_HOST_ARCH_OS)),,--with-dtrace) \ --with-ssl-default-suites=openssl \ --with-system-libmpdec=no \ --with-wheel-pkg-dir=/usr/share/python-wheels/ \ MKDIR_P="/bin/mkdir -p" \ # FIXME, only temporaray #common_configure_args += \ # --without-builtin-hashlib-hashes ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) common_configure_args += --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) common_configure_args += --with-build-python config_site = ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=yes ifeq (,$(filter $(DEB_HOST_ARCH),arm m68k)) ifeq ($(DEB_HOST_ARCH_ENDIAN),little) config_site += ac_cv_little_endian_double=yes else config_site += ac_cv_big_endian_double=yes endif endif endif stamps/stamp-configure-shared: stamps/stamp-patch rm -rf $(buildd_shared) mkdir -p $(buildd_shared) cd $(buildd_shared) && \ AR="$(AR)" RANLIB="$(RANLIB)" \ CFLAGS_NODIST="$(DPKG_CPPFLAGS) $(OPT_CFLAGS)" \ LDFLAGS_NODIST="$(DPKG_LDFLAGS) $(LTO_CFLAGS)" \ $(config_site) \ ../configure \ --enable-shared \ $(common_configure_args) $(call __post_configure,$(buildd_shared)) @echo XXXXXXX pyconfig.h -cat $(buildd_shared)/pyconfig.h touch $@ stamps/stamp-build-static: stamps/stamp-configure-static dh_testdir $(MAKE) $(NJOBS) -C $(buildd_static) \ PROFILE_TASK='$(PROFILE_TASK)' $(make_build_target) ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) : # check that things are correctly built ifneq (,$(filter $(DEB_HOST_ARCH_OS), linux)) cd $(buildd_static) && ./python -c 'from _multiprocessing import SemLock' endif cd $(buildd_static) && ./python -c 'import _decimal' cd $(buildd_static) && ./python -c 'import math, cmath' endif touch $@ stamps/stamp-build-shared: stamps/stamp-configure-shared dh_testdir $(MAKE) $(NJOBS) -C $(buildd_shared) : # build a static library with PIC objects $(MAKE) $(NJOBS) -C $(buildd_shared) \ LIBRARY=libpython$(VER)-pic.a libpython$(VER)-pic.a touch $@ stamps/stamp-configure-static: stamps/stamp-patch rm -rf $(buildd_static) mkdir -p $(buildd_static) cd $(buildd_static) && \ AR="$(AR)" RANLIB="$(RANLIB)" \ CFLAGS_NODIST="$(DPKG_PIE_CPPFLAGS) $(OPT_PIE_CFLAGS)" \ LDFLAGS_NODIST="$(DPKG_PIE_LDFLAGS) $(LTO_CFLAGS)" \ $(config_site) \ ../configure \ $(common_configure_args) $(call __post_configure,$(buildd_static)) touch $@ stamps/stamp-configure-nopie: stamps/stamp-patch rm -rf $(buildd_nopie) mkdir -p $(buildd_nopie) cd $(buildd_nopie) && \ AR="$(AR)" RANLIB="$(RANLIB)" \ CFLAGS_NODIST="$(DPKG_CPPFLAGS) $(OPT_CFLAGS)" \ LDFLAGS_NODIST="$(DPKG_LDFLAGS) $(LTO_CFLAGS)" \ $(config_site) \ ../configure \ $(common_configure_args) $(call __post_configure,$(buildd_nopie)) touch $@ stamps/stamp-build-nopie: stamps/stamp-configure-nopie dh_testdir $(MAKE) $(NJOBS) -C $(buildd_nopie) \ PROFILE_TASK='$(PROFILE_TASK)' $(make_build_target) ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) : # check that things are correctly built ifneq (,$(filter $(DEB_HOST_ARCH_OS), linux)) cd $(buildd_nopie) && ./python -c 'from _multiprocessing import SemLock' endif cd $(buildd_nopie) && ./python -c 'import _decimal' cd $(buildd_nopie) && ./python -c 'import math, cmath' endif touch $@ stamps/stamp-configure-debug: stamps/stamp-patch rm -rf $(buildd_debug) mkdir -p $(buildd_debug) cd $(buildd_debug) && \ AR="$(AR)" RANLIB="$(RANLIB)" \ CFLAGS_NODIST="$(DPKG_CPPFLAGS) $(DEBUG_CFLAGS)" \ LDFLAGS_NODIST="$(DPKG_LDFLAGS)" \ $(config_site) \ ../configure \ $(common_configure_args) \ $(valgrind_configure_args) \ --with-pydebug $(call __post_configure,$(buildd_debug)) touch $@ stamps/stamp-build-debug: stamps/stamp-configure-debug dh_testdir $(MAKE) $(NJOBS) -C $(buildd_debug) ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) cd $(buildd_static) && ./python -c 'import _decimal' cd $(buildd_debug) && ./python -c 'import math, cmath' endif touch $@ stamps/stamp-configure-shared-debug: stamps/stamp-patch rm -rf $(buildd_shdebug) mkdir -p $(buildd_shdebug) cd $(buildd_shdebug) && \ AR="$(AR)" RANLIB="$(RANLIB)" \ CFLAGS_NODIST="$(DPKG_CPPFLAGS) $(DEBUG_CFLAGS)" \ LDFLAGS_NODIST="$(DPKG_LDFLAGS)" \ $(config_site) \ ../configure \ $(common_configure_args) \ --enable-shared \ $(valgrind_configure_args) \ --with-pydebug $(call __post_configure,$(buildd_shdebug)) touch $@ stamps/stamp-build-shared-debug: stamps/stamp-configure-shared-debug dh_testdir : # build the shared debug library $(MAKE) $(NJOBS) -C $(buildd_shdebug) touch $@ define __post_configure egrep \ "^#($$(awk -v ORS='|' '$$2 ~ /^extension$$/ {print $$1}' debian/PVER-minimal.README.Debian.in)XX)" \ Modules/Setup \ | sed -e 's/^#//' -e 's/-Wl,-Bdynamic//;s/-Wl,-Bstatic//' \ >> $(1)/Modules/Setup.local : # unconditionally run makesetup cd $(1) && \ ../Modules/makesetup -c ../Modules/config.c.in -s Modules \ Modules/Setup.local Modules/Setup.bootstrap Modules/Setup.stdlib ../Modules/Setup mv $(1)/config.c $(1)/Modules/ : # and fix the timestamps $(MAKE) -C $(1) Makefile Modules/config.c : # this second rule doesn't build with -fPIC, remove it. sed '/^Modules\/_math.o: .*PY_STDMODULE_CFLAGS/d' $(1)/Makefile > $(1)/Makefile.fixed touch -r $(1)/Makefile $(1)/Makefile.fixed mv -f $(1)/Makefile.fixed $(1)/Makefile endef stamps/stamp-mincheck: stamps/stamp-build-static debian/PVER-minimal.README.Debian.in ifeq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) for m in $(MIN_MODS) $(MIN_PACKAGES) $(MIN_EXTS) $(MIN_BUILTINS); do \ echo "import $$m"; \ done > $(buildd_static)/minmods.py cd $(buildd_static) && ./python -S ../debian/pymindeps.py minmods.py \ > mindeps.txt -if [ -x /usr/bin/dot ]; then \ cd $(buildd_static) && ./python -S ../debian/depgraph.py \ < mindeps.txt > mindeps.dot; \ dot -Tpng -o mindeps.png mindeps.dot; \ else true; fi cd $(buildd_static) && ./python -S ../debian/mincheck.py \ minmods.py mindeps.txt endif touch stamps/stamp-mincheck TEST_DIR := $(shell [ -f debian/testdir ] || mktemp -d > debian/testdir; cat debian/testdir) TEST_RESOURCES = all ifeq ($(on_buildd),yes) TEST_RESOURCES := $(TEST_RESOURCES),-network,-urlfetch endif TESTOPTS = -j 1 -w -u$(TEST_RESOURCES) --timeout=3600 TEST_EXCLUDES = TEST_EXCLUDES += test_ensurepip test_venv ifeq ($(on_buildd),yes) TEST_EXCLUDES += test_tcl test_codecmaps_cn test_codecmaps_hk \ test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw \ test_normalization test_ossaudiodev endif ifeq (,$(wildcard /dev/dsp)) TEST_EXCLUDES += test_linuxaudiodev test_ossaudiodev endif ifneq (,$(filter $(DEB_HOST_ARCH), hppa)) TEST_EXCLUDES += test_fork1 test_multiprocessing test_socketserver test_threading test_wait3 test_wait4 test_gdb endif # hangs on Aarch64, see LP: #1264354 ifneq (,$(filter $(DEB_HOST_ARCH),arm64)) TEST_EXCLUDES += test_faulthandler endif ifneq (,$(filter $(DEB_HOST_ARCH), arm)) TEST_EXCLUDES += test_ctypes endif TEST_EXCLUDES += test_socket ifneq (,$(filter $(DEB_HOST_ARCH), arm armel m68k)) ifeq ($(on_buildd),yes) TEST_EXCLUDES += test_compiler endif endif TEST_EXCLUDES += test_ttk_guionly # https://buildd.debian.org/status/logs.php?pkg=python3.5&ver=3.5.1-1&arch=alpha&suite=sid ifneq (,$(filter $(DEB_HOST_ARCH), alpha)) TEST_EXCLUDES += test_signal endif ifneq (,$(filter $(DEB_HOST_ARCH), sparc sparc64)) TEST_EXCLUDES += test_gdb endif ifneq (,$(filter $(DEB_HOST_ARCH), alpha armhf riscv64 sparc64)) TEST_EXCLUDES += test_concurrent_futures endif # fail/hang with new OpenSSL TEST_EXCLUDES += test_asyncio test_ftplib test_httplib test_imaplib test_nntplib test_poplib test_ssl # TODO: re-enable once fixed, see #708652 ifneq (,$(filter $(DEB_HOST_ARCH_OS), hurd)) TEST_EXCLUDES += test_asyncore test_curses test_exceptions \ test_faulthandler test_imaplib test_io test_logging test_mmap \ test_random test_signal test_socket test_socketserver test_ssl \ test_threading test_pydoc test_runpy test_telnetlib test_tk endif # TODO: re-enable once fixed, see #708653 ifneq (,$(filter $(DEB_HOST_ARCH_OS), kfreebsd)) TEST_EXCLUDES += test_io test_signal test_socket test_socketserver \ test_threading test_threadsignals test_threaded_import \ test_time test_pty test_curses endif # for debug builds only TEST_EXCLUDES += test_gdb ifneq (,$(TEST_EXCLUDES)) TESTOPTS += -x $(sort $(TEST_EXCLUDES)) endif ifneq (,$(wildcard /usr/bin/localedef)) SET_LOCPATH = LOCPATH=$(CURDIR)/locales endif stamps/stamp-check: ifeq ($(WITHOUT_CHECK),yes) echo "check run disabled for this build" > $(buildd_static)/test_results else @echo ========== test environment ============ @env @echo ======================================== ifeq (,$(findstring $(DEB_HOST_ARCH), alpha)) ( \ echo '#! /bin/sh'; \ echo 'set -x'; \ echo 'export $(SET_LOCPATH)'; \ echo '$(buildd_static)/python $(CURDIR)/debian/script.py test_results '\''make test TESTOPTS="$(filter-out test_gdb,$(TESTOPTS))"'\'; \ echo 'echo DONE'; \ ) > $(buildd_debug)/run_tests chmod 755 $(buildd_debug)/run_tests @echo "BEGIN test debug" mkdir -p $(TEST_DIR)/debug/.local/lib/$(PVER)/site-packages -cd $(buildd_debug) && HOME=$(TEST_DIR)/debug time xvfb-run -a -e xvfb-run.log ./run_tests find $(TEST_DIR)/debug rm -rf $(TEST_DIR)/debug @echo "END test debug" endif ( \ echo '#! /bin/sh'; \ echo 'set -x'; \ echo 'export $(SET_LOCPATH)'; \ echo '$(buildd_static)/python $(CURDIR)/debian/script.py test_results '\''make test EXTRA_CFLAGS="$(EXTRA_OPT_CFLAGS)" TESTOPTS="$(TESTOPTS)"'\'; \ echo 'echo DONE'; \ ) > $(buildd_static)/run_tests chmod 755 $(buildd_static)/run_tests @echo "BEGIN test static" mkdir -p $(TEST_DIR)/static/.local/lib/$(PVER)/site-packages -cd $(buildd_static) && HOME=$(TEST_DIR)/static time xvfb-run -a -e xvfb-run.log ./run_tests find $(TEST_DIR)/static rm -rf $(TEST_DIR)/static @echo "END test static" ( \ echo '#! /bin/sh'; \ echo 'set -x'; \ echo 'export $(SET_LOCPATH)'; \ echo '$(buildd_static)/python $(CURDIR)/debian/script.py test_results '\''make test EXTRA_CFLAGS="$(EXTRA_OPT_CFLAGS)" TESTOPTS="$(TESTOPTS)"'\'; \ echo 'echo DONE'; \ ) > $(buildd_shared)/run_tests chmod 755 $(buildd_shared)/run_tests @echo "BEGIN test shared" mkdir -p $(TEST_DIR)/shared/.local/lib/$(PVER)/site-packages -cd $(buildd_shared) && HOME=$(TEST_DIR)/shared time xvfb-run -a -e xvfb-run.log ./run_tests find $(TEST_DIR)/shared rm -rf $(TEST_DIR)/shared @echo "END test shared" endif cp -p $(buildd_static)/test_results debian/ touch stamps/stamp-check stamps/stamp-pybench: echo "pybench run disabled for this build" > $(buildd_static)/pybench.log #ifeq (,$(filter $(DEB_HOST_ARCH), arm armel hppa mips mipsel mips64 mips64el m68k)) pybench_options = -C 2 -n 5 -w 4 #endif stamps/stamp-pybenchx: ifeq ($(WITHOUT_BENCH),yes) echo "pybench run disabled for this build" > $(buildd_static)/pybench.log else @echo "BEGIN pybench static" cd $(buildd_static) \ && time ./python ../Tools/pybench/pybench.py -f run1.pybench $(pybench_options) cd $(buildd_static) \ && ./python ../Tools/pybench/pybench.py -f run2.pybench -c run1.pybench $(pybench_options) @echo "END pybench static" @echo "BEGIN pybench shared" cd $(buildd_shared) \ && LD_LIBRARY_PATH=. ./python ../Tools/pybench/pybench.py -f run1.pybench $(pybench_options) cd $(buildd_shared) \ && LD_LIBRARY_PATH=. ./python ../Tools/pybench/pybench.py -f run2.pybench -c run1.pybench $(pybench_options) @echo "END pybench shared" @echo "BEGIN shared/static comparision" $(buildd_static)/python Tools/pybench/pybench.py \ -s $(buildd_static)/run2.pybench -c $(buildd_shared)/run2.pybench \ | tee $(buildd_static)/pybench.log @echo "END shared/static comparision" endif touch stamps/stamp-pybench minimal-test: rm -rf mintest mkdir -p mintest/lib mintest/dynlib mintest/testlib mintest/all-lib cp -p $(buildd_static)/python mintest/ cp -p $(foreach i,$(MIN_MODS),Lib/$(i).py) \ mintest/lib/ cp -a $(foreach i,$(MIN_PACKAGES),Lib/$(i)) \ mintest/lib/ cp -p $(wildcard $(foreach i,$(MIN_EXTS),$(buildd_static)/build/lib*/$(i).*.so)) \ mintest/dynlib/ cp -p Lib/unittest.py mintest/lib/ cp -pr Lib/test mintest/lib/ cp -pr Lib mintest/all-lib cp -p $(buildd_static)/build/lib*/*.so mintest/all-lib/ ( \ echo "import sys"; \ echo "sys.path = ["; \ echo " '$(CURDIR)/mintest/lib',"; \ echo " '$(CURDIR)/mintest/dynlib',"; \ echo "]"; \ cat Lib/test/regrtest.py; \ ) > mintest/lib/test/mintest.py cd mintest && ./python -E -S lib/test/mintest.py \ -x test_codecencodings_cn test_codecencodings_hk \ test_codecencodings_jp test_codecencodings_kr \ test_codecencodings_tw test_codecs test_multibytecodec \ stamps/stamp-doc-html: dh_testdir $(MAKE) -C Doc html @mkdir -p stamps touch stamps/stamp-doc-html stamps/stamp-doc-info: dh_testdir rm -rf Doc/build/texinfo $(MAKE) -C Doc texinfo # - Change name of info file (@setfilename) to include the version. # - Change the directory entry to include the version and point to the # correct filename. # - Change image links (@image) to point to a subdirectory. # - Remove trailing whitespace. sed -e 's/^@setfilename .*/@setfilename $(PVER).info/' \ -e '/^@direntry/,/^@/s/^\*[^:]*: ([^)]*)/* Python $(VER): ($(PVER))/' \ -e 's,@image{,@image{$(PVER)/,g' \ -e 's/ *$$//' \ < Doc/build/texinfo/python.texi \ > Doc/build/texinfo/$(PVER).texi rm -f Doc/build/texinfo/python.texi # - Create a symbolic link so that makeinfo will be able to find the # image files. ln -s . Doc/build/texinfo/$(PVER) $(MAKE) -C Doc/build/texinfo @mkdir -p stamps touch stamps/stamp-doc-info build-doc: stamps/stamp-patch stamps/stamp-build-doc stamps/stamp-build-doc: stamps/stamp-doc-html stamps/stamp-doc-info @mkdir -p stamps touch stamps/stamp-build-doc control-file: sed -e "s/@PVER@/$(PVER)/g" \ -e "s/@VER@/$(VER)/g" \ -e "s/@PYSTDDEP@/$(PYSTDDEP)/g" \ -e "s/@PRIO@/$(PY_PRIO)/g" \ -e "s/@MINPRIO@/$(PY_MINPRIO)/g" \ -e "s/@bd_qual@/$(bd_qual)/g" \ -e "s/@bd_gcc@/$(bd_gcc)/g" \ -e "s/@bd_dbm@/$(bd_dbm)/g" \ -e "s/@bd_dpkgdev@/$(bd_dpkgdev)/g" \ debian/control.in \ debian/control.stdlib \ $(if $(with_udeb),debian/control.udeb) \ | $(ma_filter) \ > debian/control.tmp ifeq ($(distribution),Ubuntu) ifneq (,$(findstring ubuntu, $(DEB_VERSION))) m='Ubuntu Core Developers '; \ sed -i "/^Maintainer:/s/\(.*\)/Maintainer: $$m\nXSBC-Original-\1/" \ debian/control.tmp endif endif [ -e debian/control ] \ && cmp -s debian/control debian/control.tmp \ && rm -f debian/control.tmp && exit 0; \ mv debian/control.tmp debian/control clean: control-file dh_testdir dh_testroot rm -rf stamps rm -f debian/test_results $(MAKE) -C Doc clean sed 's/^@/#/' Makefile.pre.in | $(MAKE) -f - srcdir=. distclean rm -rf $(buildd_static) $(buildd_shared) $(buildd_debug) $(buildd_shdebug) $(buildd_nopie) find -name '*.py[co]' | xargs -r rm -f rm -f Lib/dist-packages rm -rf locales rm -rf $(d)-dbg rm -f configure rm -f netlify.toml rm -rf $(TEST_DIR) debian/testdir for f in debian/*.in; do \ f2=`echo $$f | sed "s,PVER,$(PVER),g;s/@VER@/$(VER)/g;s,\.in$$,,"`; \ if [ $$f2 != debian/control ] && [ $$f2 != debian/source.lintian-overrides ]; then \ rm -f $$f2; \ fi; \ done rm -rf debian/__pycache__ dh_clean stamps/stamp-control: : # We have to prepare the various control files for f in debian/*.in; do \ f2=`echo $$f | sed "s,PVER,$(PVER),g;s/@VER@/$(VER)/g;s,\.in$$,,"`; \ if [ $$f2 != debian/control ]; then \ sed -e "s/@PVER@/$(PVER)/g;s/@VER@/$(VER)/g;s/@SVER@/$(SVER)/g" \ -e "s/@PRIORITY@/$(PRIORITY)/g" \ -e "s,@SCRIPTDIR@,/$(scriptdir),g" \ -e "s,@INFO@,$(info_docs),g" \ -e "s,@HOST_QUAL@,:$(DEB_HOST_ARCH),g" \ <$$f >$$f2; \ fi; \ done install: build-arch stamps/stamp-install stamps/stamp-install: stamps/stamp-build control-file stamps/stamp-control dh_testdir dh_testroot dh_prep dh_installdirs : # make install into tmp and subsequently move the files into : # their packages' directories. install -d $(d)/usr install -d $(d)/$(scriptdir)/lib-dynload ifeq ($(with_interp),static) $(MAKE) -C $(buildd_static) install DESTDIR=$(CURDIR)/$(d) ls -l $(d)/$(scriptdir)/_sysconfigdata* sed $(sysconfig_substflags) \ $(buildd_shared)/$(shell cat $(buildd_shared)/pybuilddir.txt)/_sysconfigdata__$(DEB_HOST_MULTIARCH).py \ > $(d)/$(scriptdir)/_sysconfigdata__$(DEB_HOST_MULTIARCH).py else $(MAKE) -C $(buildd_shared) install DESTDIR=$(CURDIR)/$(d) endif mkdir -p $(d)/usr/include/$(DEB_HOST_MULTIARCH)/$(PVER) mv $(d)/usr/include/$(PVER)/pyconfig.h \ $(d)/usr/include/$(DEB_HOST_MULTIARCH)/$(PVER)/. rm -f $(d)/$(scriptdir)/lib-dynload/*.py ls -l $(d)/$(scriptdir)/_sysconfigdata* sed -i $(sysconfig_substflags) \ $(d)/$(scriptdir)/_sysconfigdata__$(DEB_HOST_MULTIARCH).py -find $(d)/usr/lib/python$(VER) -name '*_failed*.so' find $(d)/usr/lib/python$(VER) -name '*_failed*.so' | xargs -r rm -f for i in $(d)/$(scriptdir)/lib-dynload/*.so; do \ case "$$i" in *$(DEB_HOST_MULTIARCH)*) continue; esac; \ b=$$(basename $$i .cpython-$(EXT_VER)m.so); \ d=$${b}.cpython-$(EXT_VER)m-$(DEB_HOST_MULTIARCH).so; \ mv $$i $(d)/$(scriptdir)/lib-dynload/$$d; \ done mkdir -p $(d)/usr/lib/python3 mv $(d)/usr/lib/python$(VER)/site-packages \ $(d)/usr/lib/python3/dist-packages rm -f $(d)/usr/lib/python3/dist-packages/README* : # remove files, which are not packaged rm -rf $(d)/usr/lib/python$(VER)/ctypes/macholib rm -f $(d)/usr/share/man/man1/python3.1 if [ -d $(d)/$(scriptdir)/ensurepip/_bundled ]; then \ echo "don't ship the prebuilt ensurepip/_bundled wheels."; \ rm -rf $(d)/$(scriptdir)/ensurepip/_bundled; \ fi : # cannot build it, zlib maintainer won't provide a mingw build find $(d) -name 'wininst*.exe' | xargs -r rm -f mkdir -p $(d)/usr/share/man/man1 cp -p Misc/python.man $(d)/usr/share/man/man1/python$(VER).1 cp -p debian/pydoc.1 $(d)/usr/share/man/man1/pydoc$(VER).1 : # Symlinks to /usr/bin for some tools ln -sf ../lib/python$(VER)/pdb.py $(d)/usr/bin/pdb$(VER) cp -p debian/pdb.1 $(d)/usr/share/man/man1/pdb$(VER).1 : # versioned install only rm -f $(d)/usr/bin/{idle3,pydoc3,python3,python3-config} rm -f $(d)/usr/lib/*/pkgconfig/python3.pc rm -f $(d)/usr/lib/*/pkgconfig/python3-embed.pc dh_installdirs -p$(p_lib) \ usr/lib/$(DEB_HOST_MULTIARCH) \ $(scriptdir)/config-$(VER)m-$(DEB_HOST_MULTIARCH) \ usr/share/doc : # install the shared library cp -p $(buildd_shared)/libpython$(VER).so.1.0 \ $(d_lib)/usr/lib/$(DEB_HOST_MULTIARCH)/ dh_link -p$(p_lib) \ /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER).so.1.0 \ /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER).so.1 \ /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER).so.1 \ /$(scriptdir)/config-$(VER)-$(DEB_HOST_MULTIARCH)/libpython$(VER).so \ /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER).so.1 \ /$(scriptdir)/config-$(VER)-$(DEB_HOST_MULTIARCH)/libpython$(VER).so ln -sf $(p_base) $(d_lib)/usr/share/doc/$(p_lib) ln -sf libpython$(VER).so.1 $(d)/usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER).so ifeq ($(with_interp),shared) : # install the statically linked runtime install -m755 $(buildd_static)/python $(d)/usr/bin/python$(VER)-static endif cp -p Tools/i18n/pygettext.py $(d)/usr/bin/pygettext$(VER) cp -p debian/pygettext.1 $(d)/usr/share/man/man1/pygettext$(VER).1 : # install the Makefile of the shared python build sed $(sysconfig_substflags) \ $(buildd_shared)/Makefile \ > $(d)/$(scriptdir)/config-$(VER)-$(DEB_HOST_MULTIARCH)/Makefile : # Move the minimal libraries into $(p_lmin). dh_installdirs -p$(p_lmin) \ etc/$(PVER) \ usr/bin \ usr/share/man/man1 \ $(scriptdir)/lib-dynload -cd $(d); for i in $(MIN_EXTS); do \ test -e $(scriptdir)/lib-dynload/$$i.*.so \ && echo $(scriptdir)/lib-dynload/$$i.*.so; \ done $(dh_compat2) dh_movefiles -p$(p_lmin) --sourcedir=$(d) \ $(foreach i,$(MIN_MODS),$(scriptdir)/$(i).py) \ $(foreach i,$(MIN_PACKAGES),$(scriptdir)/$(i)) \ $(foreach i,$(MIN_ENCODINGS),$(scriptdir)/$(i)) \ $(scriptdir)/site.py \ $(scriptdir)/_sysconfigdata__$(DEB_HOST_MULTIARCH).py \ `cd $(d); for i in $(MIN_EXTS); do \ test -e $(scriptdir)/lib-dynload/$$i.*.so \ && echo $(scriptdir)/lib-dynload/$$i.*.so; \ done` -ls -l $(d_lmin)/$(scriptdir)/lib-dynload/*.so : # Move the binary into $(p_min). dh_installdirs -p$(p_min) \ usr/bin \ usr/share/man/man1 $(dh_compat2) dh_movefiles -p$(p_min) --sourcedir=$(d) \ usr/bin/python$(VER) \ usr/share/man/man1/python$(VER).1 rv=0; \ for i in $(MIN_EXTS); do \ if [ -f $(d)/$(scriptdir)/lib-dynload/$$i.so ]; then \ echo >&2 "extension $$i not mentioned in Setup.dist"; \ rv=1; \ fi; \ done; \ exit $$rv; : # Install sitecustomize.py cp -p debian/sitecustomize.py $(d_lmin)/etc/$(PVER)/ dh_link -p$(p_lmin) \ /etc/$(PVER)/sitecustomize.py /$(scriptdir)/sitecustomize.py : # Move the static library and the header files into $(p_dev). # mv $(d)/usr/share/include/python$(VER)/* $(d)/usr/include/python$(VER)/. # rm -rf $(d)/usr/share/include sed -i $(sysconfig_substflags) \ $(d)/usr/bin/$(PVER)-config cp $(d)/usr/bin/$(PVER)-config $(d)/usr/bin/$(DEB_HOST_MULTIARCH)-$(PVER)-config dh_installdirs -p$(p_ldev) \ usr/bin \ $(scriptdir) \ usr/include \ usr/share/man/man1 $(dh_compat2) dh_movefiles -p$(p_ldev) --sourcedir=$(d) \ usr/bin/$(DEB_HOST_MULTIARCH)-$(PVER)*-config \ usr/lib/python$(VER)/config-$(VER)-$(DEB_HOST_MULTIARCH) \ usr/include \ usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER).{a,so} \ usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/python-$(VER)*.pc sed 's/@subdir@/$(PVER)/;s/@header@/pyconfig.h/' \ debian/multiarch.h.in > $(d_ldev)/usr/include/$(PVER)/pyconfig.h sed -i \ -e '/^Cflags:/s,$$, -I$${includedir}/$(DEB_HOST_MULTIARCH)/python$(VER),' \ -e '/^libdir=/d;s/-L\$${libdir} *//' \ $(d_ldev)/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/python-$(VER).pc dh_link -p$(p_ldev) \ /usr/lib/$(PVER)/config-$(VER)-$(DEB_HOST_MULTIARCH)/libpython$(VER).a \ /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER).a cp -p $(buildd_shared)/libpython$(VER)-pic.a \ $(d_ldev)/usr/lib/python$(VER)/config-$(VER)-$(DEB_HOST_MULTIARCH)/ mkdir -p $(d_ldev)/usr/src/$(PVER)/{Grammar,Parser} cp -p Grammar/python.gram $(d_ldev)/usr/src/$(PVER)/Grammar/. cp -p Parser/Python.asdl $(d_ldev)/usr/src/$(PVER)/Parser/. # FIXME # : # symlinks for the "old" include directory name # ln -sf python$(VER)m $(d_ldev)/usr/include/python$(VER) dh_installdirs -p$(p_dev) \ usr/share/doc/python$(VER) \ usr/share/man/man1 \ $(scriptdir) \ $(scriptdir)/doc/html cp -p Misc/HISTORY Misc/README.valgrind \ debian/README.maintainers \ debian/test_results $(buildd_static)/pybench.log \ $(d_dev)/usr/share/doc/python$(VER)/ $(dh_compat2) dh_movefiles -p$(p_dev) --sourcedir=$(d) \ usr/bin/python$(VER)*-config : # in $(p_ldev), prefix python-config with triplets cp -p debian/python3-config.1 \ $(d_ldev)/usr/share/man/man1/$(DEB_HOST_MULTIARCH)-$(PVER)-config.1 ifneq ($(DEB_HOST_MULTIARCH),$(DEB_HOST_GNU_TYPE)) ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)-config \ $(d_ldev)/usr/bin/$(DEB_HOST_GNU_TYPE)-$(PVER)-config ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)-config.1.gz \ $(d_ldev)/usr/share/man/man1/$(DEB_HOST_GNU_TYPE)-$(PVER)-config.1.gz endif ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)-config $(d_dev)/usr/bin/$(PVER)-config ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)-config.1.gz $(d_dev)/usr/share/man/man1/$(PVER)-config.1.gz ifeq ($(with_gdbm),yes) : # Move the gdbm extension file into $(p_gdbm). dh_installdirs -p$(p_gdbm) \ $(scriptdir) \ usr/lib/python$(VER)/lib-dynload $(dh_compat2) dh_movefiles -p$(p_gdbm) --sourcedir=$(d) \ usr/lib/python$(VER)/lib-dynload/_gdbm*.so endif ifeq ($(with_tk),yes) : # Move the Tkinter extension files into $(p_tk). dh_installdirs -p$(p_tk) \ $(scriptdir) \ usr/lib/python$(VER)/lib-dynload $(dh_compat2) dh_movefiles -p$(p_tk) --sourcedir=$(d) \ usr/lib/python$(VER)/tkinter \ usr/lib/python$(VER)/lib-dynload/_tkinter*.so endif : # The test framework into $(p_lbase) $(dh_compat2) dh_movefiles -p$(p_lbase) --sourcedir=$(d) \ $(scriptdir)/test/{libregrtest,support} \ $(scriptdir)/test/typinganndata \ $(scriptdir)/test/{regrtest,test_support,__init__,__main__}.py : # The complete testsuite into $(p_ltst) $(dh_compat2) dh_movefiles -p$(p_ltst) --sourcedir=$(d) \ $(scriptdir)/test rm -f $(d_ltst)/$(scriptdir)/test/test_ctypes/test_macholib.py : # fixed upstream ... chmod -x $(d_ltst)/$(scriptdir)/test/{test_dbm_gnu,test_dbm_ndbm}.py : # Move the demos and tools into $(p_exam)'s doc directory dh_installdirs -p$(p_exam) \ usr/share/doc/python$(VER)/examples $(dh_compat2) dh_movefiles -p$(p_exam) --sourcedir=$(d) \ $(scriptdir)/turtledemo cp -rp Tools/* $(d_exam)/usr/share/doc/python$(VER)/examples/ rm -rf $(d_exam)/usr/share/doc/python$(VER)/examples/Tools/{buildbot,msi} : # XXX: We don't need rgb.txt, we'll use our own: rm -rf $(d_exam)/usr/share/doc/python$(VER)/examples/Tools/pynche/X : # IDLE mv $(d)/usr/bin/idle$(VER) $(d)/usr/bin/idle-python$(VER) rm -f $(d)/usr/lib/python$(VER)/idlelib/idle.bat dh_installdirs -p$(p_idle) \ usr/bin \ usr/share/man/man1 $(dh_compat2) dh_movefiles -p$(p_idle) --sourcedir=$(d) \ usr/bin/idle-python$(VER) \ usr/lib/python$(VER)/idlelib cp -p debian/idle-$(PVER).1 $(d_idle)/usr/share/man/man1/ : # Move the docs into $(p_base)'s /usr/share/doc/$(PVER) directory, : # all other packages only have a copyright file. dh_installdocs -p$(p_base) \ README.rst Misc/NEWS Misc/ACKS debian/README.venv ln -sf NEWS.gz $(d_base)/usr/share/doc/$(p_base)/changelog.gz dh_installdocs --all \ -N$(p_base) -N$(p_dev) -N$(p_dbg) -N$(p_lib) \ debian/README.Debian : # IDLE has its own changelogs, docs... dh_installchangelogs -p$(p_idle) Lib/idlelib/ChangeLog dh_installdocs -p$(p_idle) Lib/idlelib/{NEWS2x,News3,README,TODO,extend}.txt mkdir -p $(d_idle)/usr/share/applications cp -p debian/idle.desktop \ $(d_idle)/usr/share/applications/idle-$(PVER).desktop : # those packages have own README.Debian's install -m 644 -p debian/README.$(p_base) \ $(d_base)/usr/share/doc/$(PVER)/README.Debian install -m 644 -p debian/README.$(p_idle) \ $(d_idle)/usr/share/doc/$(p_idle)/README.Debian ifeq ($(with_tk),yes) mkdir -p $(d_tk)/usr/share/doc/$(p_base) $(d_tk)/usr/share/doc/$(p_tk) cp -p debian/README.Tk $(d_tk)/usr/share/doc/$(p_base)/ ln -sf ../$(p_base)/README.Tk $(d_tk)/usr/share/doc/$(p_tk)/README.Tk endif : # pyvenv and ensurepip files into $(p_venv) dh_installdirs -p$(p_venv) \ usr/lib/python$(VER) dh_movefiles -p$(p_venv) \ usr/lib/python$(VER)/ensurepip : # library files into $(p_lbase) dh_installdirs -p$(p_lbase) \ usr/lib dh_movefiles -p$(p_lbase) \ usr/lib/python$(VER) # Mark the interpreter as being PEP668 EXTERNALLY-MANAGED install -m 644 debian/EXTERNALLY-MANAGED \ $(d_lbase)/$(scriptdir) : # The rest goes into $(p_base) mkdir -p $(d)/usr/lib/python3/dist-packages (cd $(d) && tar cf - .) | (cd $(d_base) && tar xpf -) rm -f $(d_base)/usr/bin/python : # Replace all '#!' calls to python with $(PY_INTERPRETER) : # and make them executable for p in $(shell dh_listpackages); do \ [ -d debian/$$p ] || continue; \ for i in `find debian/$$p -type f ! -name '*.so'`; do \ sed '1s,#!.*python[^ ]*\(.*\),#! $(PY_INTERPRETER)\1,' \ $$i > $$i.temp; \ if cmp --quiet $$i $$i.temp; then \ rm -f $$i.temp; \ else \ if [ ! -x $$i ]; then \ echo "fixed x file permissions: $$i"; \ fi; \ mv -f $$i.temp $$i; \ chmod 755 $$i; \ echo "fixed interpreter: $$i"; \ fi; \ done; \ done : # Install menu icon dh_installdirs -p$(p_base) usr/share/pixmaps cp -p debian/pylogo.xpm $(d_base)/usr/share/pixmaps/$(PVER).xpm : # generate binfmt file mkdir -p $(d_min)/usr/share/binfmts mkdir -p $(d_min)/usr/lib/binfmt.d ifeq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) $(buildd_static)/python debian/mkbinfmt.py $(PVER) \ > $(d_min)/usr/share/binfmts/$(PVER) $(buildd_static)/python debian/mkbinfmtconf.py $(PVER) \ > $(d_min)/usr/lib/binfmt.d/$(PVER).conf else $(PVER) debian/mkbinfmt.py $(PVER) > $(d_min)/usr/share/binfmts/$(PVER) $(PVER) debian/mkbinfmtconf.py $(PVER) > $(d_min)/usr/lib/binfmt.d/$(PVER).conf endif : # desktop entry mkdir -p $(d_base)/usr/share/applications cp -p debian/$(PVER).desktop \ $(d_base)/usr/share/applications/$(PVER).desktop : # remove some things -find debian -name .cvsignore | xargs rm -f -find debian -name '*.py[co]' | xargs rm -f : # remove empty directories, when all components are in place -find debian ! -name lib-dynload ! -name dist-packages -type d -empty -delete : # install debug package rm -rf $(d)-dbg install -d $(d)-dbg/$(scriptdir)/lib-dynload $(MAKE) -C $(buildd_debug) install DESTDIR=$(CURDIR)/$(d)-dbg : # install the Makefile of the shared python debug build sed $(sysconfig_substflags) \ $(buildd_shdebug)/Makefile \ > $(d)-dbg/$(scriptdir)/config-$(VER)d-$(DEB_HOST_MULTIARCH)/Makefile sed $(sysconfig_substflags) \ $(buildd_shdebug)/$(shell cat $(buildd_shdebug)/pybuilddir.txt)/_sysconfigdata_d_$(DEB_HOST_MULTIARCH).py \ > $(d)-dbg/$(scriptdir)/_sysconfigdata_d_$(DEB_HOST_MULTIARCH).py sed -i $(sysconfig_substflags) \ $(d)-dbg/$(scriptdir)/_sysconfigdata_d_$(DEB_HOST_MULTIARCH).py for i in $(d)-dbg/$(scriptdir)/lib-dynload/*.so; do \ case "$$i" in *$(DEB_HOST_MULTIARCH)*) continue; esac; \ b=$$(basename $$i .cpython-$(EXT_VER)d.so); \ d=$${b}.cpython-$(EXT_VER)d-$(DEB_HOST_MULTIARCH).so; \ mv $$i $(d)-dbg/$(scriptdir)/lib-dynload/$$d; \ done dh_installdirs -p$(p_ldbg) \ usr/bin \ usr/share/man/man1 \ $(scriptdir)/lib-dynload \ usr/include/$(PVER)d \ usr/include/$(DEB_HOST_MULTIARCH)/$(PVER)d \ usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig cp -p $(d)-dbg/$(scriptdir)/lib-dynload/*.so \ $(d_ldbg)/$(scriptdir)/lib-dynload/ cp -p $(d)-dbg/$(scriptdir)/_sysconfigdata_d_$(DEB_HOST_MULTIARCH).py \ $(d_ldbg)/$(scriptdir)/ cp -p $(buildd_shdebug)/libpython$(VER)d.so.1.0 \ $(d_ldbg)/usr/lib/$(DEB_HOST_MULTIARCH)/ dh_link -p$(p_ldbg) \ /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)d.so.1.0 \ /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)d.so.1 \ /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)d.so.1 \ /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)d.so cp $(d)-dbg/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/python-$(VER)d.pc \ $(d_ldbg)/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/. ln -s python-$(VER)d.pc \ $(d_ldbg)/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/python-$(VER)-dbg.pc cp $(d)-dbg/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/python-$(VER)d-embed.pc \ $(d_ldbg)/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/. ln -s python-$(VER)d-embed.pc \ $(d_ldbg)/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/python-$(VER)-dbg-embed.pc dh_installdirs -p$(p_dbg) \ usr/bin \ usr/share/man/man1 \ usr/share/doc/$(p_base) cp -p Misc/SpecialBuilds.txt $(d_dbg)/usr/share/doc/$(p_base)/ cp -p debian/$(PVER)-dbg.README.Debian \ $(d_dbg)/usr/share/doc/$(p_base)/README.debug cp -p $(buildd_debug)/python $(d_dbg)/usr/bin/$(PVER)d ln -sf python$(VER)d $(d_dbg)/usr/bin/$(PVER)-dbg ifneq ($(with_dbmmodule),yes) rm -f $(d_lbase)/$(scriptdir)/lib-dynload/_dbm*.so rm -f $(d_ldbg)/$(scriptdir)/lib-dynload/_dbm*.so endif cp -a $(d)-dbg/$(scriptdir)/config-$(VER)d-$(DEB_HOST_MULTIARCH) \ $(d_ldbg)/$(scriptdir)/ dh_link -p$(p_ldbg) \ /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)d.so \ /$(scriptdir)/config-$(VER)d-$(DEB_HOST_MULTIARCH)/libpython$(VER)d.so \ /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)d.so \ /$(scriptdir)/config-$(VER)d-$(DEB_HOST_MULTIARCH)/libpython$(VER).so \ /$(scriptdir)/config-$(VER)d-$(DEB_HOST_MULTIARCH)/libpython$(VER)d.a \ /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)d.a for i in $(d_ldev)/usr/include/$(PVER)/*; do \ i=$$(basename $$i); \ case $$i in pyconfig.h) continue; esac; \ ln -sf ../$(PVER)/$$i $(d_ldbg)/usr/include/$(PVER)d/$$i; \ done cp -p $(buildd_debug)/pyconfig.h $(d_ldbg)/usr/include/$(DEB_HOST_MULTIARCH)/$(PVER)d/ sed 's/@subdir@/$(PVER)d/;s/@header@/pyconfig.h/' \ debian/multiarch.h.in > $(d_ldbg)/usr/include/$(PVER)d/pyconfig.h ln -sf $(PVER).1.gz $(d_dbg)/usr/share/man/man1/$(PVER)-dbg.1.gz : # in $(p_ldbg), prefix python-config with triplets sed -i $(sysconfig_substflags) \ $(d)-dbg/usr/bin/$(PVER)d-config cp $(d)-dbg/usr/bin/$(PVER)d-config \ $(d_ldbg)/usr/bin/$(DEB_HOST_MULTIARCH)-$(PVER)d-config ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)d-config \ $(d_ldbg)/usr/bin/$(DEB_HOST_MULTIARCH)-$(PVER)-dbg-config ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)-config.1.gz \ $(d_ldbg)/usr/share/man/man1/$(DEB_HOST_MULTIARCH)-$(PVER)d-config.1.gz ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)-config.1.gz \ $(d_ldbg)/usr/share/man/man1/$(DEB_HOST_MULTIARCH)-$(PVER)-dbg-config.1.gz ifneq ($(DEB_HOST_MULTIARCH),$(DEB_HOST_GNU_TYPE)) ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)d-config \ $(d_ldbg)/usr/bin/$(DEB_HOST_GNU_TYPE)-$(PVER)d-config ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)-config.1.gz \ $(d_ldbg)/usr/share/man/man1/$(DEB_HOST_GNU_TYPE)-$(PVER)d-config.1.gz ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)d-config \ $(d_ldbg)/usr/bin/$(DEB_HOST_GNU_TYPE)-$(PVER)-dbg-config ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)d-config.1.gz \ $(d_ldbg)/usr/share/man/man1/$(DEB_HOST_GNU_TYPE)-$(PVER)-dbg-config.1.gz endif ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)d-config $(d_dbg)/usr/bin/$(PVER)d-config ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)d-config.1.gz $(d_dbg)/usr/share/man/man1/$(PVER)d-config.1.gz ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)-dbg-config $(d_dbg)/usr/bin/$(PVER)-dbg-config ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)-dbg-config.1.gz $(d_dbg)/usr/share/man/man1/$(PVER)-dbg-config.1.gz : # symlinks for the "old" include / config directory names ln -sf $(PVER)-config.1.gz $(d_dbg)/usr/share/man/man1/$(PVER)-dbg-config.1.gz ln -sf $(PVER).1.gz $(d_dbg)/usr/share/man/man1/$(PVER)d.1.gz ln -sf $(PVER)-config.1.gz $(d_dbg)/usr/share/man/man1/$(PVER)d-config.1.gz ifeq ($(with_udeb),yes) : # Copy the most important files from $(p_min) into $(p_udeb). dh_installdirs -p$(p_udeb) \ etc/$(PVER) \ usr/bin \ usr/include/$(PVER)u \ $(scriptdir)/lib-dynload \ $(scriptdir)/config-$(VER)-$(DEB_HOST_MULTIARCH) cp -p $(d_min)/usr/bin/python$(VER) $(d_udeb)/usr/bin/ ln -sf python$(VER)u $(d_udeb)/usr/bin/python$(VER) ln -sf python$(VER) $(d_udeb)/usr/bin/python3 cp -p $(foreach i,$(MIN_MODS),$(d_min)/$(scriptdir)/$(i).py) \ $(d_udeb)/$(scriptdir)/ cp -a $(foreach i,$(MIN_PACKAGES),$(d_min)/$(scriptdir)/$(i)) \ $(d_udeb)/$(scriptdir)/ cp -p $(foreach i,$(MIN_ENCODINGS),$(d_min)/$(scriptdir)/$(i)) \ $(d_udeb)/$(scriptdir)/ cp -p $(d_min)/$(scriptdir)/config-$(VER)-$(DEB_HOST_MULTIARCH)/Makefile \ $(d_udeb)/$(scriptdir)/config-$(VER)-$(DEB_HOST_MULTIARCH)/ cp -p $(d_min)/usr/include/$(DEB_HOST_MULTIARCH)/$(PVER)/pyconfig.h \ $(d_udeb)/usr/include/$(DEB_HOST_MULTIARCH)/$(PVER)/ cp -p $(d_min)/$(scriptdir)/site.py $(d_udeb)/$(scriptdir)/ cp -p debian/sitecustomize.py $(d_udeb)/etc/$(PVER)/ dh_link -p$(p_udeb) /etc/$(PVER)/sitecustomize.py \ /$(scriptdir)/sitecustomize.py endif ifeq ($(with_nopie),yes) dh_installdirs -p$(p_npie) \ usr/bin cp -p $(buildd_nopie)/python $(d_npie)/usr/bin/$(PVER) endif for i in debian/*.overrides; do \ b=$$(basename $$i .overrides); \ install -D -m 644 $$i debian/$$b/usr/share/lintian/overrides/$$b; \ done touch stamps/stamp-install # Build architecture-independent files here. binary-indep: build-indep install stamps/stamp-control dh_testdir -i dh_testroot -i : # $(p_doc) package dh_installdirs -p$(p_doc) \ usr/share/doc/$(p_base) \ usr/share/doc/$(p_doc) dh_installdocs -p$(p_doc) cp -a Doc/build/html $(d_doc)/usr/share/doc/$(p_base)/ rm -f $(d_doc)/usr/share/doc/$(p_base)/html/_static/jquery.js dh_link -p$(p_doc) \ /usr/share/doc/$(p_base)/html /usr/share/doc/$(p_doc)/html \ /usr/share/javascript/jquery/jquery.js /usr/share/doc/$(p_base)/html/_static/jquery.js \ /usr/share/javascript/underscore/underscore.js /usr/share/doc/$(p_base)/html/_static/underscore.js dh_installinfo -p$(p_doc) for f in $(d_doc)/usr/share/doc/$(p_base)/html/_images/*.png; do \ b=$$(basename $$f); \ dh_link -p$(p_doc) /usr/share/doc/$(p_base)/html/_images/$$b /usr/share/info/$(PVER)/$$b; \ done : # devhelp docs cd $(buildd_static) && ./python ../debian/pyhtml2devhelp.py \ ../$(d_doc)/usr/share/doc/$(p_base)/html index.html $(VER) \ > ../$(d_doc)/usr/share/doc/$(p_base)/html/$(PVER).devhelp gzip -9nv $(d_doc)/usr/share/doc/$(p_base)/html/$(PVER).devhelp dh_link -p$(p_doc) \ /usr/share/doc/$(p_base)/html /usr/share/devhelp/books/$(PVER) : # regenerate idlelib/help.html, see idlelib.help.copy_strip sed 's/ *$$//' Doc/build/html/library/idle.html \ > $(d_idle)/usr/lib/python$(VER)/idlelib/help.html for i in $(p_ltst); do \ rm -rf debian/$$i/usr/share/doc/$$i; \ ln -s $(p_base) debian/$$i/usr/share/doc/$$i; \ done dh_installdebconf -i $(dh_args) dh_installexamples -i $(dh_args) -dh_icons -i $(dh_args) || dh_iconcache -i $(dh_args) dh_installchangelogs -i $(dh_args) dh_link -i $(dh_args) dh_compress -i $(dh_args) -X.py -X.cls -X.css -X.txt -X.json -X.js -Xobjects.inv dh_fixperms -i $(dh_args) : # make python scripts starting with '#!' executable for i in `find debian -mindepth 3 -type f ! -name '*.dpatch' ! -perm 755`; do \ if head -1 $$i | grep -q '^#!'; then \ chmod 755 $$i; \ echo "make executable: $$i"; \ fi; \ done -find $(d_doc) -name '*.txt' -perm 755 -exec chmod 644 {} \; dh_installdeb -i $(dh_args) dh_gencontrol -i $(dh_args) dh_md5sums -i $(dh_args) dh_builddeb -i $(dh_args) # Build architecture-dependent files here. binary-arch: build-arch install dh_testdir -a dh_testroot -a # dh_installdebconf -a dh_installexamples -a dh_installmenu -a -dh_icons -a || dh_iconcache -a # dh_installmime -a dh_installchangelogs -a for i in $(p_dev) $(p_dbg) $(p_venv) $(p_full); do \ rm -rf debian/$$i/usr/share/doc/$$i; \ ln -s $(p_base) debian/$$i/usr/share/doc/$$i; \ done for i in $(p_lbase); do \ rm -rf debian/$$i/usr/share/doc/$$i; \ ln -s $(p_lmin) debian/$$i/usr/share/doc/$$i; \ done for i in $(p_ldev) $(p_ldbg) $(p_lib); do \ rm -rf debian/$$i/usr/share/doc/$$i; \ ln -s $(p_lbase) debian/$$i/usr/share/doc/$$i; \ done -find debian ! -perm -200 -print -exec chmod +w {} \; ifneq ($(with_tk),yes) rm -f $(d_lbase)/$(scriptdir)/tkinter rm -f $(d_lbase)/$(scriptdir)/lib-dynload/_tkinter*.so rm -f $(d_ldbg)/$(scriptdir)/lib-dynload/_tkinter*.so endif ifneq ($(with_gdbm),yes) rm -f $(d_lbase)/$(scriptdir)/lib-dynload/_gdbm*.so rm -f $(d_ldbg)/$(scriptdir)/lib-dynload/_gdbm*.so endif find $(d_ldbg) $(d_ldev) -name '*.a' ! -type l \ | xargs -n 1 $(DEB_HOST_GNU_TYPE)-objcopy -p --remove-section=.gnu.lto_.* dh_strip -a -N$(p_dbg) -N$(p_ldbg) -Xdebug -Xdbg --dbg-package=$(p_dbg) mkdir -p $(d_dbg)/usr/share/gdb/auto-load/usr/bin cp Tools/gdb/libpython.py $(d_dbg)/usr/share/gdb/auto-load/usr/bin/$(PVER)-gdb.py ln -sf $(PVER)-gdb.py $(d_dbg)/usr/share/gdb/auto-load/usr/bin/$(PVER)d-gdb.py ln -sf $(PVER)-gdb.py $(d_dbg)/usr/share/gdb/auto-load/usr/bin/$(PVER)-dbg-gdb.py mkdir -p $(d_dbg)/usr/share/gdb/auto-load/usr/lib/$(DEB_HOST_MULTIARCH) ln -sf ../../bin/$(PVER)-gdb.py \ $(d_dbg)/usr/share/gdb/auto-load/usr/lib/$(DEB_HOST_MULTIARCH)/lib$(PVER).so.1.0-gdb.py ln -sf ../../bin/$(PVER)-gdb.py \ $(d_dbg)/usr/share/gdb/auto-load/usr/lib/$(DEB_HOST_MULTIARCH)/lib$(PVER)d.so.1.0-gdb.py dh_link -a dh_compress -a -X.py dh_fixperms -a chmod 644 $(d_lmin)/$(scriptdir)/token.py : # make python scripts starting with '#!' executable for i in `find debian -mindepth 3 -type f ! -perm 755`; do \ if head -1 $$i | grep -q '^#!'; then \ chmod 755 $$i; \ echo "make executable: $$i"; \ fi; \ done dh_makeshlibs -p$(p_lib) -V '$(p_lib)' dh_makeshlibs -p$(p_ldbg) -V '$(p_ldbg)' # don't include the following symbols, found in extensions # which either can be built as builtin or extension. sed -ri \ -e '/^ (PyInit_|_add_one_to_index|asdl_)/d' \ -e '/^ (PyExpat_XML_|PyExpat_Xml)/d' \ -e '/^ (ffi_type_|_ctypes_)/d' \ $(d_lib)/DEBIAN/symbols $(d_ldbg)/DEBIAN/symbols dh_installdeb -a dh_shlibdeps -a dep=`sed -n '/^shlibs:Depends/s/[^=]*=\(.*\)/\1/p' $(d_min).substvars | awk -v RS=', ' -v ORS=', ' '/^libc6/ { print }'`; \ echo "shlibs:Pre-Depends=$$dep" >> $(d_min).substvars sed -i '/^shlibs:Depends/s/libc6[^,]*[, ]*//g' $(d_min).substvars dh_gencontrol -a -- $(arch_substvars) dh_md5sums -a dh_builddeb -a # rules to patch the unpacked files in the source directory # --------------------------------------------------------------------------- # various rules to unpack addons and (un)apply patches. # - patch / apply-patches # - unpatch / reverse-patches patchdir = debian/patches patch: stamps/stamp-patch stamps/stamp-patch: dh_testdir uname -a @echo USER=$$USER, LOGNAME=$$LOGNAME @grep ^Mem /proc/meminfo @echo "DEB_BUILD_OPTIONS: $$DEB_BUILD_OPTIONS" rm -rf autom4te.cache configure autoconf mkdir -p stamps echo ""; echo "Patches applied in this version:" > stamps/pxx for i in $$(cat $(patchdir)/series); do \ case "$$i" in \#*) continue; esac; \ echo ""; echo "$$i:"; \ sed -n 's/^# *DP: */ /p' $(patchdir)/$$i; \ done >> stamps/pxx touch Parser/parser.c Parser/token.c touch Objects/obmalloc.c Python/dynamic_annotations.c \ Python/mysnprintf.c Python/pyctype.c ln -sf site-packages Lib/dist-packages touch Lib/test/certdata/nullcert.pem touch Lib/test/libregrtest/__init__.py touch Lib/test/tokenizedata/__init__.py # Check if patchlevel-noplus.diff is missing grep -Eq '^#define PY_VERSION +"[^+]+"$$' Include/patchlevel.h mv stamps/pxx $@ reverse-patches: unpatch unpatch: rm -rf configure autom4te.cache update-patches: $(patchdir)/series export QUILT_PATCHES=$(patchdir); \ while quilt push; do quilt refresh -pab --no-timestamps --no-index; done binary: binary-indep binary-arch .NOTPARALLEL: .PHONY: control-file configure build clean binary-indep binary-arch binary install # Local Variables: # mode: makefile # end: