Package: python3.6
Version: 3.6.5-3
Severity: wishlist
Tags: patch

Dear Maintainers,

Shipping the -dbg Python packages without using pymalloc and with
-DPy_USING_MEMORY_DEBUGGER helped me in finding memory allocation
issues easier in Python modules and I'm sure that would help others as
well. I'm aware of the negative impact on the speed, but IMO for the
-dbg packages slower execution would be acceptable.

I'm attaching the patch I used with python3.6, but the first not
disruptive opportunity for introducing this change would probably be
the switch to python3.8 which is expected to ship new shared libraries
anyway.

Thanks,
Balint

-- 
Balint Reczey
Ubuntu & Debian Developer
diff -Nru python3.6-3.6.5/debian/rules python3.6-3.6.5/debian/rules
--- python3.6-3.6.5/debian/rules	2018-04-01 05:46:30.000000000 +0000
+++ python3.6-3.6.5/debian/rules	2018-04-04 15:12:23.000000000 +0000
@@ -164,6 +164,9 @@
 DPKG_LDFLAGS := $(shell DEB_BUILD_MAINT_OPTIONS=hardening=-pie dpkg-buildflags --get LDFLAGS)
 OPT_CFLAGS   := $(filter-out -O%,$(DPKG_CFLAGS)) # default is -O3
 DEBUG_CFLAGS := $(patsubst -O%,-Og,$(DPKG_CFLAGS))
+DEBUG_CPPFLAGS:= $(shell dpkg-buildflags --get CPPFLAGS) -DPy_USING_MEMORY_DEBUGGER
+
+DEBUG_ABIFLAGS = d
 
 # on alpha, use -O2 only, use -mieee
 ifeq ($(DEB_HOST_ARCH),alpha)
@@ -406,11 +409,12 @@
 	mkdir -p $(buildd_debug)
 	cd $(buildd_debug) && \
 	  CC="$(CC)" CXX="$(CXX)" AR="$(AR)" RANLIB="$(RANLIB)" CFLAGS="$(DEBUG_CFLAGS)" \
-	  CPPFLAGS="$(DPKG_CPPFLAGS)" LDFLAGS="$(DPKG_LDFLAGS)" \
+	  CPPFLAGS="$(DEBUG_CPPFLAGS)" LDFLAGS="$(DPKG_LDFLAGS)" \
 	    $(config_site) \
 	    ../configure \
 		$(common_configure_args) \
-		--with-pydebug
+		--with-pydebug \
+		--without-pymalloc
 
 	$(call __post_configure,$(buildd_debug))
 	touch $@
@@ -420,11 +424,12 @@
 	mkdir -p $(buildd_shdebug)
 	cd $(buildd_shdebug) && \
 	  CC="$(CC)" CXX="$(CXX)" AR="$(AR)" RANLIB="$(RANLIB)" CFLAGS="$(DEBUG_CFLAGS)" \
-	  CPPFLAGS="$(DPKG_CPPFLAGS)" LDFLAGS="$(DPKG_LDFLAGS)" \
+	  CPPFLAGS="$(DEBUG_CPPFLAGS)" LDFLAGS="$(DPKG_LDFLAGS)" \
 	    $(config_site) \
 	    ../configure \
 		$(common_configure_args) \
 		--enable-shared \
+		--without-pymalloc \
 		--with-pydebug
 
 	$(call __post_configure,$(buildd_shdebug))
@@ -1203,20 +1208,20 @@
 	    -e 's,^RUNSHARED *=.*,RUNSHARED=,' \
 	    -e '/BLDLIBRARY/s/-L\. //' \
 		$(buildd_shdebug)/Makefile \
-		> $(d)-dbg/$(scriptdir)/config-$(VER)dm-$(DEB_HOST_MULTIARCH)/Makefile
+		> $(d)-dbg/$(scriptdir)/config-$(VER)$(DEBUG_ABIFLAGS)-$(DEB_HOST_MULTIARCH)/Makefile
 	sed -e 's,^RUNSHARED *=.*,RUNSHARED=,' \
 	    -e '/BLDLIBRARY/s/-L\. //' \
-		$(buildd_shdebug)/$(shell cat $(buildd_shdebug)/pybuilddir.txt)/_sysconfigdata_dm_$(PLAT)_$(DEB_HOST_MULTIARCH).py \
-		> $(d)-dbg/$(scriptdir)/_sysconfigdata_dm_$(PLAT)_$(DEB_HOST_MULTIARCH).py
+		$(buildd_shdebug)/$(shell cat $(buildd_shdebug)/pybuilddir.txt)/_sysconfigdata_$(DEBUG_ABIFLAGS)_$(PLAT)_$(DEB_HOST_MULTIARCH).py \
+		> $(d)-dbg/$(scriptdir)/_sysconfigdata_$(DEBUG_ABIFLAGS)_$(PLAT)_$(DEB_HOST_MULTIARCH).py
 	sed -i 's/ -O3 / -O2 /g;s/$(LTO_CFLAGS)//g;s/-fprofile-use *-fprofile-correction//g' \
-		$(d)-dbg/$(scriptdir)/_sysconfigdata_dm_$(PLAT)_$(DEB_HOST_MULTIARCH).py
+		$(d)-dbg/$(scriptdir)/_sysconfigdata_$(DEBUG_ABIFLAGS)_$(PLAT)_$(DEB_HOST_MULTIARCH).py
 
 	mv $(d)-dbg/usr/lib/libpython*.a $(d)-dbg/usr/lib/$(DEB_HOST_MULTIARCH)/
 
 	for i in $(d)-dbg/$(scriptdir)/lib-dynload/*.so; do \
 	  case "$$i" in *$(DEB_HOST_MULTIARCH)*) continue; esac; \
-	  b=$$(basename $$i .cpython-$(EXT_VER)dm.so); \
-	  d=$${b}.cpython-$(EXT_VER)dm-$(DEB_HOST_MULTIARCH).so; \
+	  b=$$(basename $$i .cpython-$(EXT_VER)$(DEBUG_ABIFLAGS).so); \
+	  d=$${b}.cpython-$(EXT_VER)$(DEBUG_ABIFLAGS)-$(DEB_HOST_MULTIARCH).so; \
 	  mv $$i $(d)-dbg/$(scriptdir)/lib-dynload/$$d; \
 	done
 
@@ -1224,24 +1229,24 @@
 		usr/bin \
 		usr/share/man/man1 \
 		$(scriptdir)/lib-dynload \
-		usr/include/$(PVER)dm \
-		usr/include/$(DEB_HOST_MULTIARCH)/$(PVER)dm \
+		usr/include/$(PVER)$(DEBUG_ABIFLAGS) \
+		usr/include/$(DEB_HOST_MULTIARCH)/$(PVER)$(DEBUG_ABIFLAGS) \
 		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_dm_$(PLAT)_$(DEB_HOST_MULTIARCH).py \
+	cp -p $(d)-dbg/$(scriptdir)/_sysconfigdata_$(DEBUG_ABIFLAGS)_$(PLAT)_$(DEB_HOST_MULTIARCH).py \
 		$(d_ldbg)/$(scriptdir)/
-	cp -p $(buildd_shdebug)/libpython$(VER)dm.so.1.0 \
+	cp -p $(buildd_shdebug)/libpython$(VER)$(DEBUG_ABIFLAGS).so.1.0 \
 		$(d_ldbg)/usr/lib/$(DEB_HOST_MULTIARCH)/
 	dh_link -p$(p_ldbg) \
-	    /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)dm.so.1.0 \
-		/usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)dm.so.1 \
-	    /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)dm.so.1 \
-		/usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)dm.so
-	cp $(d)-dbg/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/python-$(VER)dm.pc \
+	    /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)$(DEBUG_ABIFLAGS).so.1.0 \
+		/usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)$(DEBUG_ABIFLAGS).so.1 \
+	    /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)$(DEBUG_ABIFLAGS).so.1 \
+		/usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)$(DEBUG_ABIFLAGS).so
+	cp $(d)-dbg/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/python-$(VER)$(DEBUG_ABIFLAGS).pc \
 	  $(d_ldbg)/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/.
-	ln -s python-$(VER)dm.pc \
+	ln -s python-$(VER)$(DEBUG_ABIFLAGS).pc \
 	  $(d_ldbg)/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/python-$(VER)-dbg.pc
 
 	dh_installdirs -p$(p_dbg) \
@@ -1251,8 +1256,8 @@
 	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)dm
-	ln -sf python$(VER)dm $(d_dbg)/usr/bin/$(PVER)-dbg
+	cp -p $(buildd_debug)/python $(d_dbg)/usr/bin/$(PVER)$(DEBUG_ABIFLAGS)
+	ln -sf python$(VER)$(DEBUG_ABIFLAGS) $(d_dbg)/usr/bin/$(PVER)-dbg
 
 ifneq ($(with_tk),yes)
 	rm -f $(d_ldbg)/$(scriptdir)/lib-dynload/_tkinter*.so
@@ -1263,56 +1268,56 @@
 	rm -f $(d_ldbg)/usr/lib/debug/$(scriptdir)/lib-dynload/_gdbm*.so
 endif
 
-	cp -a $(d)-dbg/$(scriptdir)/config-$(VER)dm-$(DEB_HOST_MULTIARCH) \
+	cp -a $(d)-dbg/$(scriptdir)/config-$(VER)$(DEBUG_ABIFLAGS)-$(DEB_HOST_MULTIARCH) \
 		$(d_ldbg)/$(scriptdir)/
 	dh_link -p$(p_ldbg) \
-	    /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)dm.so \
-		/$(scriptdir)/config-$(VER)dm-$(DEB_HOST_MULTIARCH)/libpython$(VER)dm.so \
-	    /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)dm.so \
-		/$(scriptdir)/config-$(VER)dm-$(DEB_HOST_MULTIARCH)/libpython$(VER).so \
-	    /$(scriptdir)/config-$(VER)dm-$(DEB_HOST_MULTIARCH)/libpython$(VER)dm.a \
-	    	/usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)dm.a
+	    /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)$(DEBUG_ABIFLAGS).so \
+		/$(scriptdir)/config-$(VER)$(DEBUG_ABIFLAGS)-$(DEB_HOST_MULTIARCH)/libpython$(VER)$(DEBUG_ABIFLAGS).so \
+	    /usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)$(DEBUG_ABIFLAGS).so \
+		/$(scriptdir)/config-$(VER)$(DEBUG_ABIFLAGS)-$(DEB_HOST_MULTIARCH)/libpython$(VER).so \
+	    /$(scriptdir)/config-$(VER)$(DEBUG_ABIFLAGS)-$(DEB_HOST_MULTIARCH)/libpython$(VER)$(DEBUG_ABIFLAGS).a \
+	    	/usr/lib/$(DEB_HOST_MULTIARCH)/libpython$(VER)$(DEBUG_ABIFLAGS).a
 
 	for i in $(d_ldev)/usr/include/$(PVER)m/*; do \
 	  i=$$(basename $$i); \
 	  case $$i in pyconfig.h) continue; esac; \
-	  ln -sf ../$(PVER)m/$$i $(d_ldbg)/usr/include/$(PVER)dm/$$i; \
+	  ln -sf ../$(PVER)m/$$i $(d_ldbg)/usr/include/$(PVER)$(DEBUG_ABIFLAGS)/$$i; \
 	done
-	cp -p $(buildd_debug)/pyconfig.h $(d_ldbg)/usr/include/$(DEB_HOST_MULTIARCH)/$(PVER)dm/
-	sed 's/@subdir@/$(PVER)dm/;s/@header@/pyconfig.h/' \
-		debian/multiarch.h.in > $(d_ldbg)/usr/include/$(PVER)dm/pyconfig.h
+	cp -p $(buildd_debug)/pyconfig.h $(d_ldbg)/usr/include/$(DEB_HOST_MULTIARCH)/$(PVER)$(DEBUG_ABIFLAGS)/
+	sed 's/@subdir@/$(PVER)$(DEBUG_ABIFLAGS)/;s/@header@/pyconfig.h/' \
+		debian/multiarch.h.in > $(d_ldbg)/usr/include/$(PVER)$(DEBUG_ABIFLAGS)/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
-	cp $(d)-dbg/usr/bin/$(PVER)dm-config \
-		$(d_ldbg)/usr/bin/$(DEB_HOST_MULTIARCH)-$(PVER)dm-config
-	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)dm-config \
+	cp $(d)-dbg/usr/bin/$(PVER)$(DEBUG_ABIFLAGS)-config \
+		$(d_ldbg)/usr/bin/$(DEB_HOST_MULTIARCH)-$(PVER)$(DEBUG_ABIFLAGS)-config
+	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)$(DEBUG_ABIFLAGS)-config \
 		$(d_ldbg)/usr/bin/$(DEB_HOST_MULTIARCH)-$(PVER)-dbg-config
 	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)m-config.1.gz \
-		$(d_ldbg)/usr/share/man/man1/$(DEB_HOST_MULTIARCH)-$(PVER)dm-config.1.gz
+		$(d_ldbg)/usr/share/man/man1/$(DEB_HOST_MULTIARCH)-$(PVER)$(DEBUG_ABIFLAGS)-config.1.gz
 	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)m-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)dm-config \
-		$(d_ldbg)/usr/bin/$(DEB_HOST_GNU_TYPE)-$(PVER)dm-config
+	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)$(DEBUG_ABIFLAGS)-config \
+		$(d_ldbg)/usr/bin/$(DEB_HOST_GNU_TYPE)-$(PVER)$(DEBUG_ABIFLAGS)-config
 	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)-config.1.gz \
-		$(d_ldbg)/usr/share/man/man1/$(DEB_HOST_GNU_TYPE)-$(PVER)dm-config.1.gz
-	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)dm-config \
+		$(d_ldbg)/usr/share/man/man1/$(DEB_HOST_GNU_TYPE)-$(PVER)$(DEBUG_ABIFLAGS)-config.1.gz
+	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)$(DEBUG_ABIFLAGS)-config \
 		$(d_ldbg)/usr/bin/$(DEB_HOST_GNU_TYPE)-$(PVER)-dbg-config
-	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)dm-config.1.gz \
+	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)$(DEBUG_ABIFLAGS)-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)dm-config $(d_dbg)/usr/bin/$(PVER)dm-config
-	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)dm-config.1.gz $(d_dbg)/usr/share/man/man1/$(PVER)dm-config.1.gz
+	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)$(DEBUG_ABIFLAGS)-config $(d_dbg)/usr/bin/$(PVER)$(DEBUG_ABIFLAGS)-config
+	ln -sf $(DEB_HOST_MULTIARCH)-$(PVER)$(DEBUG_ABIFLAGS)-config.1.gz $(d_dbg)/usr/share/man/man1/$(PVER)$(DEBUG_ABIFLAGS)-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)dm.1.gz
-	ln -sf $(PVER)-config.1.gz $(d_dbg)/usr/share/man/man1/$(PVER)dm-config.1.gz
+	ln -sf $(PVER).1.gz $(d_dbg)/usr/share/man/man1/$(PVER)$(DEBUG_ABIFLAGS).1.gz
+	ln -sf $(PVER)-config.1.gz $(d_dbg)/usr/share/man/man1/$(PVER)$(DEBUG_ABIFLAGS)-config.1.gz
 
 ifeq ($(with_udeb),yes)
 	: # Copy the most important files from $(p_min) into $(p_udeb).
@@ -1441,13 +1446,13 @@
 	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)m-gdb.py
 	ln -sf $(PVER)m-gdb.py $(d_dbg)/usr/share/gdb/auto-load/usr/bin/$(PVER)-gdb.py
-	ln -sf $(PVER)m-gdb.py $(d_dbg)/usr/share/gdb/auto-load/usr/bin/$(PVER)dm-gdb.py
+	ln -sf $(PVER)m-gdb.py $(d_dbg)/usr/share/gdb/auto-load/usr/bin/$(PVER)$(DEBUG_ABIFLAGS)-gdb.py
 	ln -sf $(PVER)m-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)m-gdb.py \
 		$(d_dbg)/usr/share/gdb/auto-load/usr/lib/$(DEB_HOST_MULTIARCH)/lib$(PVER)m.so.1.0-gdb.py
 	ln -sf ../../bin/$(PVER)m-gdb.py \
-		$(d_dbg)/usr/share/gdb/auto-load/usr/lib/$(DEB_HOST_MULTIARCH)/lib$(PVER)dm.so.1.0-gdb.py
+		$(d_dbg)/usr/share/gdb/auto-load/usr/lib/$(DEB_HOST_MULTIARCH)/lib$(PVER)$(DEBUG_ABIFLAGS).so.1.0-gdb.py
 	dh_link -a
 	dh_compress -a -X.py
 	dh_fixperms -a

Reply via email to