diff -up Python-3.2a1/configure.in.debug-build Python-3.2a1/configure.in --- Python-3.2a1/configure.in.debug-build 2010-08-20 16:06:24.616082276 -0400 +++ Python-3.2a1/configure.in 2010-08-20 16:06:24.632127011 -0400 @@ -584,7 +584,7 @@ AC_SUBST(LIBRARY) AC_MSG_CHECKING(LIBRARY) if test -z "$LIBRARY" then - LIBRARY='libpython$(VERSION).a' + LIBRARY='libpython$(VERSION)$(DEBUG_EXT).a' fi AC_MSG_RESULT($LIBRARY) @@ -726,8 +726,8 @@ if test $enable_shared = "yes"; then INSTSONAME="$LDLIBRARY".$SOVERSION ;; Linux*|GNU*|NetBSD*|FreeBSD*|DragonFly*) - LDLIBRARY='libpython$(VERSION).so' - BLDLIBRARY='-L. -lpython$(VERSION)' + LDLIBRARY='libpython$(VERSION)$(DEBUG_EXT).so' + BLDLIBRARY='-L. -lpython$(VERSION)$(DEBUG_EXT)' RUNSHARED=LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH} case $ac_sys_system in FreeBSD*) @@ -825,6 +825,14 @@ else AC_MSG_RESULT(no); Py_DEBUG='false' fi], [AC_MSG_RESULT(no)]) +if test "$Py_DEBUG" = 'true' +then + DEBUG_EXT=_d + DEBUG_SUFFIX=-debug +fi +AC_SUBST(DEBUG_EXT) +AC_SUBST(DEBUG_SUFFIX) + # XXX Shouldn't the code above that fiddles with BASECFLAGS and OPT be # merged with this chunk of code? diff -up Python-3.2a1/Lib/distutils/command/build_ext.py.debug-build Python-3.2a1/Lib/distutils/command/build_ext.py --- Python-3.2a1/Lib/distutils/command/build_ext.py.debug-build 2010-07-22 08:50:05.000000000 -0400 +++ Python-3.2a1/Lib/distutils/command/build_ext.py 2010-08-20 16:06:24.633125472 -0400 @@ -673,7 +673,10 @@ class build_ext(Command): so_ext = get_config_var('SO') if os.name == 'nt' and self.debug: return os.path.join(*ext_path) + '_d' + so_ext - return os.path.join(*ext_path) + so_ext + + # Similarly, extensions in debug mode are named 'module_d.so', to + # avoid adding the _d to the SO config variable: + return os.path.join(*ext_path) + (sys.pydebug and "_d" or "") + so_ext def get_export_symbols(self, ext): """Return the list of symbols that a shared extension has to @@ -754,6 +757,8 @@ class build_ext(Command): template = "python%d.%d" pythonlib = (template % (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) + if sys.pydebug: + pythonlib += '_d' return ext.libraries + [pythonlib] else: return ext.libraries diff -up Python-3.2a1/Lib/distutils/sysconfig.py.debug-build Python-3.2a1/Lib/distutils/sysconfig.py --- Python-3.2a1/Lib/distutils/sysconfig.py.debug-build 2010-08-20 16:06:24.623083865 -0400 +++ Python-3.2a1/Lib/distutils/sysconfig.py 2010-08-20 16:06:24.633125472 -0400 @@ -83,7 +83,8 @@ def get_python_inc(plat_specific=0, pref else: incdir = os.path.join(get_config_var('srcdir'), 'Include') return os.path.normpath(incdir) - return os.path.join(prefix, "include", "python" + get_python_version()) + return os.path.join(prefix, "include", + "python" + get_python_version() + (sys.pydebug and '-debug' or '')) elif os.name == "nt": return os.path.join(prefix, "include") elif os.name == "mac": @@ -229,7 +230,7 @@ def get_makefile_filename(): if python_build: return os.path.join(os.path.dirname(sys.executable), "Makefile") lib_dir = get_python_lib(plat_specific=1, standard_lib=1) - return os.path.join(lib_dir, "config", "Makefile") + return os.path.join(lib_dir, "config" + (sys.pydebug and "-debug" or ""), "Makefile") def parse_config_h(fp, g=None): diff -up Python-3.2a1/Makefile.pre.in.debug-build Python-3.2a1/Makefile.pre.in --- Python-3.2a1/Makefile.pre.in.debug-build 2010-08-20 16:06:24.624081000 -0400 +++ Python-3.2a1/Makefile.pre.in 2010-08-20 16:06:57.287084214 -0400 @@ -105,8 +105,8 @@ SCRIPTDIR= $(prefix)/lib64 # Detailed destination directories BINLIBDEST= $(LIBDIR)/python$(VERSION) LIBDEST= $(SCRIPTDIR)/python$(VERSION) -INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) -CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(VERSION) +INCLUDEPY= $(INCLUDEDIR)/python$(VERSION)$(DEBUG_SUFFIX) +CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(VERSION)$(DEBUG_SUFFIX) LIBP= $(LIBDIR)/python$(VERSION) # Symbols used for using shared libraries @@ -120,6 +120,12 @@ DESTSHARED= $(BINLIBDEST)/lib-dynload EXE= @EXEEXT@ BUILDEXE= @BUILDEXEEXT@ +# DEBUG_EXT is used by ELF files (names and SONAMEs); it will be "_d" for a debug build +# DEBUG_SUFFIX is used by filesystem paths; it will be "-debug" for a debug build +# Both will be empty in an optimized build +DEBUG_EXT= @DEBUG_EXT@ +DEBUG_SUFFIX= @DEBUG_SUFFIX@ + # Short name and location for Mac OS X Python framework UNIVERSALSDK=@UNIVERSALSDK@ PYTHONFRAMEWORK= @PYTHONFRAMEWORK@ @@ -183,7 +189,7 @@ LIBOBJDIR= Python/ LIBOBJS= @LIBOBJS@ PYTHON= python$(EXE) -BUILDPYTHON= python$(BUILDEXE) +BUILDPYTHON= python$(BUILD_SUFFIX)$(BUILDEXE) # The task to run while instrument when building the profile-opt target PROFILE_TASK= $(srcdir)/Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck @@ -433,7 +439,7 @@ sharedmods: $(BUILDPYTHON) *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(PY_LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ esac -libpython$(VERSION).so: $(LIBRARY_OBJS) +libpython$(VERSION)$(DEBUG_EXT).so: $(LIBRARY_OBJS) if test $(INSTSONAME) != $(LDLIBRARY); then \ $(LDSHARED) $(PY_LDFLAGS) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \ $(LN) -f $(INSTSONAME) $@; \ @@ -817,7 +823,7 @@ altbininstall: $(BUILDPYTHON) else true; \ fi; \ done - $(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(BINDIR)/python$(VERSION)$(EXE) + $(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(BINDIR)/python$(VERSION)$(DEBUG_SUFFIX)$(EXE) if test -f $(LDLIBRARY); then \ if test -n "$(DLLLIBRARY)" ; then \ $(INSTALL_SHARED) $(DLLLIBRARY) $(DESTDIR)$(BINDIR); \ @@ -831,15 +837,15 @@ altbininstall: $(BUILDPYTHON) fi bininstall: altbininstall - -if test -f $(DESTDIR)$(BINDIR)/$(PYTHON)3$(EXE) -o -h $(DESTDIR)$(BINDIR)/$(PYTHON)3$(EXE); \ - then rm -f $(DESTDIR)$(BINDIR)/$(PYTHON)3$(EXE); \ + -if test -f $(DESTDIR)$(BINDIR)/$(PYTHON)3$(DEBUG_SUFFIX)$(EXE) -o -h $(DESTDIR)$(BINDIR)/$(PYTHON)3$(DEBUG_SUFFIX)$(EXE); \ + then rm -f $(DESTDIR)$(BINDIR)/$(PYTHON)3$(DEBUG_SUFFIX)$(EXE); \ else true; \ fi - (cd $(DESTDIR)$(BINDIR); $(LN) python$(VERSION)$(EXE) $(PYTHON)3$(EXE)) - -rm -f $(DESTDIR)$(BINDIR)/python3-config - (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-config python3-config) - -rm -f $(DESTDIR)$(LIBPC)/python3.pc - (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(VERSION).pc python3.pc) + (cd $(DESTDIR)$(BINDIR); $(LN) python$(VERSION)$(DEBUG_SUFFIX)$(EXE) $(PYTHON)3$(DEBUG_SUFFIX)$(EXE)) + -rm -f $(DESTDIR)$(BINDIR)/python3$(DEBUG_SUFFIX)-config + (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)$(DEBUG_SUFFIX)-config python3$(DEBUG_SUFFIX)-config) + -rm -f $(DESTDIR)$(LIBPC)/python3$(DEBUG_SUFFIX).pc + (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(VERSION)$(DEBUG_SUFFIX).pc python3$(DEBUG_SUFFIX).pc) # Install the manual page maninstall: @@ -965,10 +971,10 @@ $(srcdir)/Lib/$(PLATDIR): export EXE; EXE="$(BUILDEXE)"; \ cd $(srcdir)/Lib/$(PLATDIR); $(RUNSHARED) ./regen -python-config: $(srcdir)/Misc/python-config.in +python$(DEBUG_SUFFIX)-config: $(srcdir)/Misc/python-config.in # Substitution happens here, as the completely-expanded BINDIR # is not available in configure - sed -e "s,@EXENAME@,$(BINDIR)/python$(VERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config + sed -e "s,@EXENAME@,$(BINDIR)/python$(VERSION)$(DEBUG_SUFFIX)$(EXE)," < $(srcdir)/Misc/python-config.in >python$(DEBUG_SUFFIX)-config # Install the include files INCLDIRSTOMAKE=$(INCLUDEDIR) $(CONFINCLUDEDIR) $(INCLUDEPY) $(CONFINCLUDEPY) @@ -990,12 +996,12 @@ inclinstall: # Install the library and miscellaneous stuff needed for extending/embedding # This goes into $(exec_prefix) -LIBPL= $(LIBP)/config +LIBPL= $(LIBP)/config$(DEBUG_SUFFIX) # pkgconfig directory LIBPC= $(LIBDIR)/pkgconfig -libainstall: all python-config +libainstall: all python$(DEBUG_SUFFIX)-config @for i in $(LIBDIR) $(LIBP) $(LIBPL) $(LIBPC); \ do \ if test ! -d $(DESTDIR)$$i; then \ @@ -1011,11 +1017,11 @@ libainstall: all python-config $(INSTALL_DATA) Modules/Setup $(DESTDIR)$(LIBPL)/Setup $(INSTALL_DATA) Modules/Setup.local $(DESTDIR)$(LIBPL)/Setup.local $(INSTALL_DATA) Modules/Setup.config $(DESTDIR)$(LIBPL)/Setup.config - $(INSTALL_DATA) Misc/python.pc $(DESTDIR)$(LIBPC)/python-$(VERSION).pc + $(INSTALL_DATA) Misc/python.pc $(DESTDIR)$(LIBPC)/python-$(VERSION)$(DEBUG_SUFFIX).pc $(INSTALL_SCRIPT) $(srcdir)/Modules/makesetup $(DESTDIR)$(LIBPL)/makesetup $(INSTALL_SCRIPT) $(srcdir)/install-sh $(DESTDIR)$(LIBPL)/install-sh - $(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(VERSION)-config - rm python-config + $(INSTALL_SCRIPT) python$(DEBUG_SUFFIX)-config $(DESTDIR)$(BINDIR)/python$(VERSION)$(DEBUG_SUFFIX)-config + rm python$(DEBUG_SUFFIX)-config @if [ -s Modules/python.exp -a \ "`echo $(MACHDEP) | sed 's/^\(...\).*/\1/'`" = "aix" ]; then \ echo; echo "Installing support files for building shared extension modules on AIX:"; \ diff -up Python-3.2a1/Misc/python-config.in.debug-build Python-3.2a1/Misc/python-config.in --- Python-3.2a1/Misc/python-config.in.debug-build 2010-04-06 17:30:42.000000000 -0400 +++ Python-3.2a1/Misc/python-config.in 2010-08-20 16:06:24.635124366 -0400 @@ -45,7 +45,7 @@ for opt in opt_flags: elif opt in ('--libs', '--ldflags'): libs = getvar('LIBS').split() + getvar('SYSLIBS').split() - libs.append('-lpython'+pyver) + libs.append('-lpython' + pyver + (sys.pydebug and "_d" or "")) # add the prefix/lib/pythonX.Y/config dir, but only if there is no # shared library in prefix/lib/. if opt == '--ldflags': diff -up Python-3.2a1/Modules/makesetup.debug-build Python-3.2a1/Modules/makesetup --- Python-3.2a1/Modules/makesetup.debug-build 2010-07-09 12:30:58.000000000 -0400 +++ Python-3.2a1/Modules/makesetup 2010-08-20 16:06:24.635124366 -0400 @@ -233,7 +233,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | *$mod.o*) base=$mod;; *) base=${mod}module;; esac - file="$srcdir/$base\$(SO)" + file="$srcdir/$base\$(DEBUG_EXT)\$(SO)" case $doconfig in no) SHAREDMODS="$SHAREDMODS $file";; esac diff -up Python-3.2a1/Python/dynload_shlib.c.debug-build Python-3.2a1/Python/dynload_shlib.c --- Python-3.2a1/Python/dynload_shlib.c.debug-build 2010-05-09 11:52:27.000000000 -0400 +++ Python-3.2a1/Python/dynload_shlib.c 2010-08-20 16:06:24.635124366 -0400 @@ -46,11 +46,16 @@ const struct filedescr _PyImport_DynLoad {"module.exe", "rb", C_EXTENSION}, {"MODULE.EXE", "rb", C_EXTENSION}, #else +#ifdef Py_DEBUG + {"_d.so", "rb", C_EXTENSION}, + {"module_d.so", "rb", C_EXTENSION}, +#else {".so", "rb", C_EXTENSION}, {"module.so", "rb", C_EXTENSION}, -#endif -#endif -#endif +#endif /* Py_DEBUG */ +#endif /* __VMS */ +#endif /* defined(PYOS_OS2) && defined(PYCC_GCC) */ +#endif /* __CYGWIN__ */ {0, 0} }; diff -up Python-3.2a1/Python/sysmodule.c.debug-build Python-3.2a1/Python/sysmodule.c --- Python-3.2a1/Python/sysmodule.c.debug-build 2010-07-06 06:53:30.000000000 -0400 +++ Python-3.2a1/Python/sysmodule.c 2010-08-20 16:06:24.636251716 -0400 @@ -1598,6 +1598,12 @@ _PySys_Init(void) WindowsVersionType.tp_new = NULL; #endif +#ifdef Py_DEBUG + PyDict_SetItemString(sysdict, "pydebug", Py_True); +#else + PyDict_SetItemString(sysdict, "pydebug", Py_False); +#endif + /* float repr style: 0.03 (short) vs 0.029999999999999999 (legacy) */ #ifndef PY_NO_SHORT_FLOAT_REPR SET_SYS_FROM_STRING("float_repr_style", diff -up Python-3.2a1/runtests.sh.debug-build Python-3.2a1/runtests.sh --- Python-3.2a1/runtests.sh.debug-build 2008-10-17 08:05:40.000000000 -0400 +++ Python-3.2a1/runtests.sh 2010-08-20 16:06:24.637251276 -0400 @@ -16,11 +16,14 @@ Flags (arguments starting with '-') are regrtest.py, except for -x, which is processed here." # Choose the Python binary. -case `uname` in -Darwin) PYTHON=./python.exe;; -CYGWIN*) PYTHON=./python.exe;; -*) PYTHON=./python;; -esac +if [ -z $PYTHON ] +then + case `uname` in + Darwin) PYTHON=./python.exe;; + CYGWIN*) PYTHON=./python.exe;; + *) PYTHON=./python;; + esac +fi PYTHON="$PYTHON -bb"