Date: Saturday, April 7, 2012 @ 12:56:17 Author: stephane Revision: 155851
archrelease: copy trunk to testing-i686, testing-x86_64 Added: python/repos/testing-i686/ python/repos/testing-i686/PKGBUILD (from rev 155850, python/trunk/PKGBUILD) python/repos/testing-i686/distutils-egg-utf8.patch (from rev 155850, python/trunk/distutils-egg-utf8.patch) python/repos/testing-i686/gdbm-magic-values.patch (from rev 155850, python/trunk/gdbm-magic-values.patch) python/repos/testing-i686/pycache-bytecompilation.patch (from rev 155850, python/trunk/pycache-bytecompilation.patch) python/repos/testing-x86_64/ python/repos/testing-x86_64/PKGBUILD (from rev 155850, python/trunk/PKGBUILD) python/repos/testing-x86_64/distutils-egg-utf8.patch (from rev 155850, python/trunk/distutils-egg-utf8.patch) python/repos/testing-x86_64/gdbm-magic-values.patch (from rev 155850, python/trunk/gdbm-magic-values.patch) python/repos/testing-x86_64/pycache-bytecompilation.patch (from rev 155850, python/trunk/pycache-bytecompilation.patch) ----------------------------------------------+ testing-i686/PKGBUILD | 91 +++++++++++++++ testing-i686/distutils-egg-utf8.patch | 43 +++++++ testing-i686/gdbm-magic-values.patch | 13 ++ testing-i686/pycache-bytecompilation.patch | 146 +++++++++++++++++++++++++ testing-x86_64/PKGBUILD | 91 +++++++++++++++ testing-x86_64/distutils-egg-utf8.patch | 43 +++++++ testing-x86_64/gdbm-magic-values.patch | 13 ++ testing-x86_64/pycache-bytecompilation.patch | 146 +++++++++++++++++++++++++ 8 files changed, 586 insertions(+) Copied: python/repos/testing-i686/PKGBUILD (from rev 155850, python/trunk/PKGBUILD) =================================================================== --- testing-i686/PKGBUILD (rev 0) +++ testing-i686/PKGBUILD 2012-04-07 16:56:17 UTC (rev 155851) @@ -0,0 +1,91 @@ +# $Id$ +# Maintainer: Stéphane Gaudreault <steph...@archlinux.org> +# Contributor: Allan McRae <al...@archlinux.org> +# Contributor: Jason Chu <ja...@archlinux.org> + +pkgname=python +pkgver=3.2.2 +pkgrel=3 +_pybasever=3.2 +pkgdesc="Next generation of the python high-level scripting language" +arch=('i686' 'x86_64') +license=('custom') +url="http://www.python.org/" +depends=('expat' 'bzip2' 'gdbm' 'openssl' 'libffi' 'zlib') +makedepends=('tk' 'sqlite' 'valgrind') +optdepends=('tk: for tkinter' 'sqlite') +provides=('python3') +replaces=('python3') +options=('!makeflags') +source=(http://www.python.org/ftp/python/${pkgver%rc*}/Python-${pkgver}.tar.xz + distutils-egg-utf8.patch + gdbm-magic-values.patch + pycache-bytecompilation.patch) +sha1sums=('5e654dbd48476193ccdef4d604ed4f45b48c6769' + '4697d7d737101ad3f1d9c4a0c6ff848fd7114823' + '43bfbe3e23360f412b95cb284ff29b2cbe338be9' + '3561a7278dd83a8f5f3b213169f16c3187724fba') + +build() { + cd "${srcdir}/Python-${pkgver}" + + # FS#23997 + sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/python|" Lib/cgi.py + + # gdbm has new magic that whichdb does not recognize + # http://bugs.python.org/issue13007 + patch -Np1 -i ../gdbm-magic-values.patch + + # Distutils now reads and writes egg-info files using UTF-8 (Upstream issue #9561) + patch -Np1 -i ../distutils-egg-utf8.patch + + # Distutils doesn't byte-compile .py files to __pycache__ during installation (Upstream issue #11254) + patch -Np1 -i ../pycache-bytecompilation.patch + + # Ensure that we are using the system copy of various libraries (expat, zlib and libffi), + # rather than copies shipped in the tarball + rm -r Modules/expat + rm -r Modules/zlib + rm -r Modules/_ctypes/{darwin,libffi}* + + ./configure --prefix=/usr \ + --enable-shared \ + --with-threads \ + --with-computed-gotos \ + --enable-ipv6 \ + --with-valgrind \ + --with-wide-unicode \ + --with-system-expat \ + --with-dbmliborder=gdbm:ndbm \ + --with-system-ffi + + make +} + +check() { + cd "${srcdir}/Python-${pkgver}" + LD_LIBRARY_PATH="${srcdir}/Python-${pkgver}":${LD_LIBRARY_PATH} \ + "${srcdir}/Python-${pkgver}/python" -m test.regrtest -x test_distutils test_site test_uuid +} + +package() { + cd "${srcdir}/Python-${pkgver}" + make DESTDIR="${pkgdir}" install maninstall + + # Why are these not done by default... + ln -sf python3 "${pkgdir}/usr/bin/python" + ln -sf python3-config "${pkgdir}/usr/bin/python-config" + ln -sf idle3 "${pkgdir}/usr/bin/idle" + ln -sf pydoc3 "${pkgdir}/usr/bin/pydoc" + ln -sf python${_pybasever}.1 "${pkgdir}/usr/share/man/man1/python3.1" + + # Fix FS#22552 + ln -sf ../../libpython${_pybasever}mu.so \ + "${pkgdir}/usr/lib/python${_pybasever}/config-${_pybasever}mu/libpython${_pybasever}mu.so" + + # Clean-up reference to build directory + sed -i "s|$srcdir/Python-${pkgver}:||" "$pkgdir/usr/lib/python${_pybasever}/config-${_pybasever}mu/Makefile" + + # License + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} Copied: python/repos/testing-i686/distutils-egg-utf8.patch (from rev 155850, python/trunk/distutils-egg-utf8.patch) =================================================================== --- testing-i686/distutils-egg-utf8.patch (rev 0) +++ testing-i686/distutils-egg-utf8.patch 2012-04-07 16:56:17 UTC (rev 155851) @@ -0,0 +1,43 @@ + +# HG changeset patch +# User Victor Stinner <victor.stin...@haypocalc.com> +# Date 1315259096 -7200 +# Node ID fb4d2e6d393e96baac13c4efc216e361bf12c293 +# Parent cb47cf5138a4567718a25d69a79d1c62d13f187c +Issue #9561: distutils now reads and writes egg-info files using UTF-8 + +instead of the locale encoding. + +diff --git a/Lib/distutils/command/install_egg_info.py b/Lib/distutils/command/install_egg_info.py +--- a/Lib/distutils/command/install_egg_info.py ++++ b/Lib/distutils/command/install_egg_info.py +@@ -40,9 +40,8 @@ class install_egg_info(Command): + "Creating "+self.install_dir) + log.info("Writing %s", target) + if not self.dry_run: +- f = open(target, 'w') +- self.distribution.metadata.write_pkg_file(f) +- f.close() ++ with open(target, 'w', encoding='UTF-8') as f: ++ self.distribution.metadata.write_pkg_file(f) + + def get_outputs(self): + return self.outputs +diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py +--- a/Lib/distutils/dist.py ++++ b/Lib/distutils/dist.py +@@ -1010,11 +1010,9 @@ class DistributionMetadata: + def write_pkg_info(self, base_dir): + """Write the PKG-INFO file into the release tree. + """ +- pkg_info = open(os.path.join(base_dir, 'PKG-INFO'), 'w') +- try: ++ with open(os.path.join(base_dir, 'PKG-INFO'), 'w', ++ encoding='UTF-8') as pkg_info: + self.write_pkg_file(pkg_info) +- finally: +- pkg_info.close() + + def write_pkg_file(self, file): + """Write the PKG-INFO format data to a file object. + Copied: python/repos/testing-i686/gdbm-magic-values.patch (from rev 155850, python/trunk/gdbm-magic-values.patch) =================================================================== --- testing-i686/gdbm-magic-values.patch (rev 0) +++ testing-i686/gdbm-magic-values.patch 2012-04-07 16:56:17 UTC (rev 155851) @@ -0,0 +1,13 @@ +diff -up Python-3.2.2/Lib/dbm/__init__.py.gdbm-1.9-magic Python-3.2.2/Lib/dbm/__init__.py +--- Python-3.2.2/Lib/dbm/__init__.py.gdbm-1.9-magic 2011-09-03 12:16:40.000000000 -0400 ++++ Python-3.2.2/Lib/dbm/__init__.py 2011-09-30 15:47:27.488863694 -0400 +@@ -166,7 +166,7 @@ def whichdb(filename): + return "" + + # Check for GNU dbm +- if magic == 0x13579ace: ++ if magic in (0x13579ace, 0x13579acd, 0x13579acf): + return "dbm.gnu" + + # Later versions of Berkeley db hash file have a 12-byte pad in +diff -up Python-3.2.2/Misc/NEWS.gdbm-1.9-magic Python-3.2.2/Misc/NEWS Copied: python/repos/testing-i686/pycache-bytecompilation.patch (from rev 155850, python/trunk/pycache-bytecompilation.patch) =================================================================== --- testing-i686/pycache-bytecompilation.patch (rev 0) +++ testing-i686/pycache-bytecompilation.patch 2012-04-07 16:56:17 UTC (rev 155851) @@ -0,0 +1,146 @@ +diff -up Python-3.2.2/Doc/distutils/apiref.rst.issue11254 Python-3.2.2/Doc/distutils/apiref.rst +--- Python-3.2.2/Doc/distutils/apiref.rst.issue11254 2011-09-03 12:16:38.000000000 -0400 ++++ Python-3.2.2/Doc/distutils/apiref.rst 2011-10-10 17:01:23.167196855 -0400 +@@ -1204,9 +1204,9 @@ other utility module. + .. function:: byte_compile(py_files[, optimize=0, force=0, prefix=None, base_dir=None, verbose=1, dry_run=0, direct=None]) + + Byte-compile a collection of Python source files to either :file:`.pyc` or +- :file:`.pyo` files in the same directory. *py_files* is a list of files to +- compile; any files that don't end in :file:`.py` are silently skipped. +- *optimize* must be one of the following: ++ :file:`.pyo` files in a :file:`__pycache__` subdirectory (see :pep:`3147`). ++ *py_files* is a list of files to compile; any files that don't end in ++ :file:`.py` are silently skipped. *optimize* must be one of the following: + + * ``0`` - don't optimize (generate :file:`.pyc`) + * ``1`` - normal optimization (like ``python -O``) +@@ -1231,6 +1231,11 @@ other utility module. + is used by the script generated in indirect mode; unless you know what you're + doing, leave it set to ``None``. + ++ .. versionchanged:: 3.2.3 ++ Create ``.pyc`` or ``.pyo`` files with an :func:`import magic tag ++ <imp.get_tag>` in their name, in a :file:`__pycache__` subdirectory ++ instead of files without tag in the current directory. ++ + + .. function:: rfc822_escape(header) + +diff -up Python-3.2.2/Lib/distutils/tests/test_build_py.py.issue11254 Python-3.2.2/Lib/distutils/tests/test_build_py.py +--- Python-3.2.2/Lib/distutils/tests/test_build_py.py.issue11254 2011-09-03 12:16:40.000000000 -0400 ++++ Python-3.2.2/Lib/distutils/tests/test_build_py.py 2011-10-10 17:01:23.167196855 -0400 +@@ -3,6 +3,7 @@ + import os + import sys + import io ++import imp + import unittest + + from distutils.command.build_py import build_py +@@ -57,13 +58,15 @@ class BuildPyTestCase(support.TempdirMan + self.assertEqual(len(cmd.get_outputs()), 3) + pkgdest = os.path.join(destination, "pkg") + files = os.listdir(pkgdest) ++ pycache_dir = os.path.join(pkgdest, "__pycache__") + self.assertIn("__init__.py", files) + self.assertIn("README.txt", files) +- # XXX even with -O, distutils writes pyc, not pyo; bug? + if sys.dont_write_bytecode: +- self.assertNotIn("__init__.pyc", files) ++ self.assertFalse(os.path.exists(pycache_dir)) + else: +- self.assertIn("__init__.pyc", files) ++ # XXX even with -O, distutils writes pyc, not pyo; bug? ++ pyc_files = os.listdir(pycache_dir) ++ self.assertIn("__init__.%s.pyc" % imp.get_tag(), pyc_files) + + def test_empty_package_dir(self): + # See SF 1668596/1720897. +diff -up Python-3.2.2/Lib/distutils/tests/test_install_lib.py.issue11254 Python-3.2.2/Lib/distutils/tests/test_install_lib.py +--- Python-3.2.2/Lib/distutils/tests/test_install_lib.py.issue11254 2011-09-03 12:16:40.000000000 -0400 ++++ Python-3.2.2/Lib/distutils/tests/test_install_lib.py 2011-10-10 17:01:23.167196855 -0400 +@@ -1,6 +1,7 @@ + """Tests for distutils.command.install_data.""" + import sys + import os ++import imp + import unittest + + from distutils.command.install_lib import install_lib +@@ -32,18 +33,20 @@ class InstallLibTestCase(support.Tempdir + cmd.finalize_options() + self.assertEqual(cmd.optimize, 2) + +- @unittest.skipUnless(not sys.dont_write_bytecode, +- 'byte-compile not supported') ++ @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') + def test_byte_compile(self): + pkg_dir, dist = self.create_dist() ++ os.chdir(pkg_dir) + cmd = install_lib(dist) + cmd.compile = cmd.optimize = 1 + + f = os.path.join(pkg_dir, 'foo.py') + self.write_file(f, '# python file') + cmd.byte_compile([f]) +- self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyc'))) +- self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyo'))) ++ pyc_file = imp.cache_from_source('foo.py') ++ pyo_file = imp.cache_from_source('foo.py', debug_override=False) ++ self.assertTrue(os.path.exists(pyc_file)) ++ self.assertTrue(os.path.exists(pyo_file)) + + def test_get_outputs(self): + pkg_dir, dist = self.create_dist() +diff -up Python-3.2.2/Lib/distutils/util.py.issue11254 Python-3.2.2/Lib/distutils/util.py +--- Python-3.2.2/Lib/distutils/util.py.issue11254 2011-09-03 12:16:40.000000000 -0400 ++++ Python-3.2.2/Lib/distutils/util.py 2011-10-10 17:01:23.172196793 -0400 +@@ -4,7 +4,11 @@ Miscellaneous utility functions -- anyth + one of the other *util.py modules. + """ + +-import sys, os, string, re ++import os ++import re ++import imp ++import sys ++import string + from distutils.errors import DistutilsPlatformError + from distutils.dep_util import newer + from distutils.spawn import spawn +@@ -415,9 +419,9 @@ def byte_compile (py_files, + verbose=1, dry_run=0, + direct=None): + """Byte-compile a collection of Python source files to either .pyc +- or .pyo files in the same directory. 'py_files' is a list of files +- to compile; any files that don't end in ".py" are silently skipped. +- 'optimize' must be one of the following: ++ or .pyo files in a __pycache__ subdirectory. 'py_files' is a list ++ of files to compile; any files that don't end in ".py" are silently ++ skipped. 'optimize' must be one of the following: + 0 - don't optimize (generate .pyc) + 1 - normal optimization (like "python -O") + 2 - extra optimization (like "python -OO") +@@ -529,7 +533,10 @@ byte_compile(files, optimize=%r, force=% + # Terminology from the py_compile module: + # cfile - byte-compiled file + # dfile - purported source filename (same as 'file' by default) +- cfile = file + (__debug__ and "c" or "o") ++ if optimize >= 0: ++ cfile = imp.cache_from_source(file, debug_override=not optimize) ++ else: ++ cfile = imp.cache_from_source(file) + dfile = file + if prefix: + if file[:len(prefix)] != prefix: +diff -up Python-3.2.2/Misc/ACKS.issue11254 Python-3.2.2/Misc/ACKS +--- Python-3.2.2/Misc/ACKS.issue11254 2011-09-03 12:16:45.000000000 -0400 ++++ Python-3.2.2/Misc/ACKS 2011-10-10 17:01:23.168196842 -0400 +@@ -715,6 +715,7 @@ Pierre Quentel + Brian Quinlan + Anders Qvist + Burton Radons ++Jeff Ramnani + Brodie Rao + Antti Rasinen + Sridhar Ratnakumar Copied: python/repos/testing-x86_64/PKGBUILD (from rev 155850, python/trunk/PKGBUILD) =================================================================== --- testing-x86_64/PKGBUILD (rev 0) +++ testing-x86_64/PKGBUILD 2012-04-07 16:56:17 UTC (rev 155851) @@ -0,0 +1,91 @@ +# $Id$ +# Maintainer: Stéphane Gaudreault <steph...@archlinux.org> +# Contributor: Allan McRae <al...@archlinux.org> +# Contributor: Jason Chu <ja...@archlinux.org> + +pkgname=python +pkgver=3.2.2 +pkgrel=3 +_pybasever=3.2 +pkgdesc="Next generation of the python high-level scripting language" +arch=('i686' 'x86_64') +license=('custom') +url="http://www.python.org/" +depends=('expat' 'bzip2' 'gdbm' 'openssl' 'libffi' 'zlib') +makedepends=('tk' 'sqlite' 'valgrind') +optdepends=('tk: for tkinter' 'sqlite') +provides=('python3') +replaces=('python3') +options=('!makeflags') +source=(http://www.python.org/ftp/python/${pkgver%rc*}/Python-${pkgver}.tar.xz + distutils-egg-utf8.patch + gdbm-magic-values.patch + pycache-bytecompilation.patch) +sha1sums=('5e654dbd48476193ccdef4d604ed4f45b48c6769' + '4697d7d737101ad3f1d9c4a0c6ff848fd7114823' + '43bfbe3e23360f412b95cb284ff29b2cbe338be9' + '3561a7278dd83a8f5f3b213169f16c3187724fba') + +build() { + cd "${srcdir}/Python-${pkgver}" + + # FS#23997 + sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/python|" Lib/cgi.py + + # gdbm has new magic that whichdb does not recognize + # http://bugs.python.org/issue13007 + patch -Np1 -i ../gdbm-magic-values.patch + + # Distutils now reads and writes egg-info files using UTF-8 (Upstream issue #9561) + patch -Np1 -i ../distutils-egg-utf8.patch + + # Distutils doesn't byte-compile .py files to __pycache__ during installation (Upstream issue #11254) + patch -Np1 -i ../pycache-bytecompilation.patch + + # Ensure that we are using the system copy of various libraries (expat, zlib and libffi), + # rather than copies shipped in the tarball + rm -r Modules/expat + rm -r Modules/zlib + rm -r Modules/_ctypes/{darwin,libffi}* + + ./configure --prefix=/usr \ + --enable-shared \ + --with-threads \ + --with-computed-gotos \ + --enable-ipv6 \ + --with-valgrind \ + --with-wide-unicode \ + --with-system-expat \ + --with-dbmliborder=gdbm:ndbm \ + --with-system-ffi + + make +} + +check() { + cd "${srcdir}/Python-${pkgver}" + LD_LIBRARY_PATH="${srcdir}/Python-${pkgver}":${LD_LIBRARY_PATH} \ + "${srcdir}/Python-${pkgver}/python" -m test.regrtest -x test_distutils test_site test_uuid +} + +package() { + cd "${srcdir}/Python-${pkgver}" + make DESTDIR="${pkgdir}" install maninstall + + # Why are these not done by default... + ln -sf python3 "${pkgdir}/usr/bin/python" + ln -sf python3-config "${pkgdir}/usr/bin/python-config" + ln -sf idle3 "${pkgdir}/usr/bin/idle" + ln -sf pydoc3 "${pkgdir}/usr/bin/pydoc" + ln -sf python${_pybasever}.1 "${pkgdir}/usr/share/man/man1/python3.1" + + # Fix FS#22552 + ln -sf ../../libpython${_pybasever}mu.so \ + "${pkgdir}/usr/lib/python${_pybasever}/config-${_pybasever}mu/libpython${_pybasever}mu.so" + + # Clean-up reference to build directory + sed -i "s|$srcdir/Python-${pkgver}:||" "$pkgdir/usr/lib/python${_pybasever}/config-${_pybasever}mu/Makefile" + + # License + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} Copied: python/repos/testing-x86_64/distutils-egg-utf8.patch (from rev 155850, python/trunk/distutils-egg-utf8.patch) =================================================================== --- testing-x86_64/distutils-egg-utf8.patch (rev 0) +++ testing-x86_64/distutils-egg-utf8.patch 2012-04-07 16:56:17 UTC (rev 155851) @@ -0,0 +1,43 @@ + +# HG changeset patch +# User Victor Stinner <victor.stin...@haypocalc.com> +# Date 1315259096 -7200 +# Node ID fb4d2e6d393e96baac13c4efc216e361bf12c293 +# Parent cb47cf5138a4567718a25d69a79d1c62d13f187c +Issue #9561: distutils now reads and writes egg-info files using UTF-8 + +instead of the locale encoding. + +diff --git a/Lib/distutils/command/install_egg_info.py b/Lib/distutils/command/install_egg_info.py +--- a/Lib/distutils/command/install_egg_info.py ++++ b/Lib/distutils/command/install_egg_info.py +@@ -40,9 +40,8 @@ class install_egg_info(Command): + "Creating "+self.install_dir) + log.info("Writing %s", target) + if not self.dry_run: +- f = open(target, 'w') +- self.distribution.metadata.write_pkg_file(f) +- f.close() ++ with open(target, 'w', encoding='UTF-8') as f: ++ self.distribution.metadata.write_pkg_file(f) + + def get_outputs(self): + return self.outputs +diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py +--- a/Lib/distutils/dist.py ++++ b/Lib/distutils/dist.py +@@ -1010,11 +1010,9 @@ class DistributionMetadata: + def write_pkg_info(self, base_dir): + """Write the PKG-INFO file into the release tree. + """ +- pkg_info = open(os.path.join(base_dir, 'PKG-INFO'), 'w') +- try: ++ with open(os.path.join(base_dir, 'PKG-INFO'), 'w', ++ encoding='UTF-8') as pkg_info: + self.write_pkg_file(pkg_info) +- finally: +- pkg_info.close() + + def write_pkg_file(self, file): + """Write the PKG-INFO format data to a file object. + Copied: python/repos/testing-x86_64/gdbm-magic-values.patch (from rev 155850, python/trunk/gdbm-magic-values.patch) =================================================================== --- testing-x86_64/gdbm-magic-values.patch (rev 0) +++ testing-x86_64/gdbm-magic-values.patch 2012-04-07 16:56:17 UTC (rev 155851) @@ -0,0 +1,13 @@ +diff -up Python-3.2.2/Lib/dbm/__init__.py.gdbm-1.9-magic Python-3.2.2/Lib/dbm/__init__.py +--- Python-3.2.2/Lib/dbm/__init__.py.gdbm-1.9-magic 2011-09-03 12:16:40.000000000 -0400 ++++ Python-3.2.2/Lib/dbm/__init__.py 2011-09-30 15:47:27.488863694 -0400 +@@ -166,7 +166,7 @@ def whichdb(filename): + return "" + + # Check for GNU dbm +- if magic == 0x13579ace: ++ if magic in (0x13579ace, 0x13579acd, 0x13579acf): + return "dbm.gnu" + + # Later versions of Berkeley db hash file have a 12-byte pad in +diff -up Python-3.2.2/Misc/NEWS.gdbm-1.9-magic Python-3.2.2/Misc/NEWS Copied: python/repos/testing-x86_64/pycache-bytecompilation.patch (from rev 155850, python/trunk/pycache-bytecompilation.patch) =================================================================== --- testing-x86_64/pycache-bytecompilation.patch (rev 0) +++ testing-x86_64/pycache-bytecompilation.patch 2012-04-07 16:56:17 UTC (rev 155851) @@ -0,0 +1,146 @@ +diff -up Python-3.2.2/Doc/distutils/apiref.rst.issue11254 Python-3.2.2/Doc/distutils/apiref.rst +--- Python-3.2.2/Doc/distutils/apiref.rst.issue11254 2011-09-03 12:16:38.000000000 -0400 ++++ Python-3.2.2/Doc/distutils/apiref.rst 2011-10-10 17:01:23.167196855 -0400 +@@ -1204,9 +1204,9 @@ other utility module. + .. function:: byte_compile(py_files[, optimize=0, force=0, prefix=None, base_dir=None, verbose=1, dry_run=0, direct=None]) + + Byte-compile a collection of Python source files to either :file:`.pyc` or +- :file:`.pyo` files in the same directory. *py_files* is a list of files to +- compile; any files that don't end in :file:`.py` are silently skipped. +- *optimize* must be one of the following: ++ :file:`.pyo` files in a :file:`__pycache__` subdirectory (see :pep:`3147`). ++ *py_files* is a list of files to compile; any files that don't end in ++ :file:`.py` are silently skipped. *optimize* must be one of the following: + + * ``0`` - don't optimize (generate :file:`.pyc`) + * ``1`` - normal optimization (like ``python -O``) +@@ -1231,6 +1231,11 @@ other utility module. + is used by the script generated in indirect mode; unless you know what you're + doing, leave it set to ``None``. + ++ .. versionchanged:: 3.2.3 ++ Create ``.pyc`` or ``.pyo`` files with an :func:`import magic tag ++ <imp.get_tag>` in their name, in a :file:`__pycache__` subdirectory ++ instead of files without tag in the current directory. ++ + + .. function:: rfc822_escape(header) + +diff -up Python-3.2.2/Lib/distutils/tests/test_build_py.py.issue11254 Python-3.2.2/Lib/distutils/tests/test_build_py.py +--- Python-3.2.2/Lib/distutils/tests/test_build_py.py.issue11254 2011-09-03 12:16:40.000000000 -0400 ++++ Python-3.2.2/Lib/distutils/tests/test_build_py.py 2011-10-10 17:01:23.167196855 -0400 +@@ -3,6 +3,7 @@ + import os + import sys + import io ++import imp + import unittest + + from distutils.command.build_py import build_py +@@ -57,13 +58,15 @@ class BuildPyTestCase(support.TempdirMan + self.assertEqual(len(cmd.get_outputs()), 3) + pkgdest = os.path.join(destination, "pkg") + files = os.listdir(pkgdest) ++ pycache_dir = os.path.join(pkgdest, "__pycache__") + self.assertIn("__init__.py", files) + self.assertIn("README.txt", files) +- # XXX even with -O, distutils writes pyc, not pyo; bug? + if sys.dont_write_bytecode: +- self.assertNotIn("__init__.pyc", files) ++ self.assertFalse(os.path.exists(pycache_dir)) + else: +- self.assertIn("__init__.pyc", files) ++ # XXX even with -O, distutils writes pyc, not pyo; bug? ++ pyc_files = os.listdir(pycache_dir) ++ self.assertIn("__init__.%s.pyc" % imp.get_tag(), pyc_files) + + def test_empty_package_dir(self): + # See SF 1668596/1720897. +diff -up Python-3.2.2/Lib/distutils/tests/test_install_lib.py.issue11254 Python-3.2.2/Lib/distutils/tests/test_install_lib.py +--- Python-3.2.2/Lib/distutils/tests/test_install_lib.py.issue11254 2011-09-03 12:16:40.000000000 -0400 ++++ Python-3.2.2/Lib/distutils/tests/test_install_lib.py 2011-10-10 17:01:23.167196855 -0400 +@@ -1,6 +1,7 @@ + """Tests for distutils.command.install_data.""" + import sys + import os ++import imp + import unittest + + from distutils.command.install_lib import install_lib +@@ -32,18 +33,20 @@ class InstallLibTestCase(support.Tempdir + cmd.finalize_options() + self.assertEqual(cmd.optimize, 2) + +- @unittest.skipUnless(not sys.dont_write_bytecode, +- 'byte-compile not supported') ++ @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') + def test_byte_compile(self): + pkg_dir, dist = self.create_dist() ++ os.chdir(pkg_dir) + cmd = install_lib(dist) + cmd.compile = cmd.optimize = 1 + + f = os.path.join(pkg_dir, 'foo.py') + self.write_file(f, '# python file') + cmd.byte_compile([f]) +- self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyc'))) +- self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyo'))) ++ pyc_file = imp.cache_from_source('foo.py') ++ pyo_file = imp.cache_from_source('foo.py', debug_override=False) ++ self.assertTrue(os.path.exists(pyc_file)) ++ self.assertTrue(os.path.exists(pyo_file)) + + def test_get_outputs(self): + pkg_dir, dist = self.create_dist() +diff -up Python-3.2.2/Lib/distutils/util.py.issue11254 Python-3.2.2/Lib/distutils/util.py +--- Python-3.2.2/Lib/distutils/util.py.issue11254 2011-09-03 12:16:40.000000000 -0400 ++++ Python-3.2.2/Lib/distutils/util.py 2011-10-10 17:01:23.172196793 -0400 +@@ -4,7 +4,11 @@ Miscellaneous utility functions -- anyth + one of the other *util.py modules. + """ + +-import sys, os, string, re ++import os ++import re ++import imp ++import sys ++import string + from distutils.errors import DistutilsPlatformError + from distutils.dep_util import newer + from distutils.spawn import spawn +@@ -415,9 +419,9 @@ def byte_compile (py_files, + verbose=1, dry_run=0, + direct=None): + """Byte-compile a collection of Python source files to either .pyc +- or .pyo files in the same directory. 'py_files' is a list of files +- to compile; any files that don't end in ".py" are silently skipped. +- 'optimize' must be one of the following: ++ or .pyo files in a __pycache__ subdirectory. 'py_files' is a list ++ of files to compile; any files that don't end in ".py" are silently ++ skipped. 'optimize' must be one of the following: + 0 - don't optimize (generate .pyc) + 1 - normal optimization (like "python -O") + 2 - extra optimization (like "python -OO") +@@ -529,7 +533,10 @@ byte_compile(files, optimize=%r, force=% + # Terminology from the py_compile module: + # cfile - byte-compiled file + # dfile - purported source filename (same as 'file' by default) +- cfile = file + (__debug__ and "c" or "o") ++ if optimize >= 0: ++ cfile = imp.cache_from_source(file, debug_override=not optimize) ++ else: ++ cfile = imp.cache_from_source(file) + dfile = file + if prefix: + if file[:len(prefix)] != prefix: +diff -up Python-3.2.2/Misc/ACKS.issue11254 Python-3.2.2/Misc/ACKS +--- Python-3.2.2/Misc/ACKS.issue11254 2011-09-03 12:16:45.000000000 -0400 ++++ Python-3.2.2/Misc/ACKS 2011-10-10 17:01:23.168196842 -0400 +@@ -715,6 +715,7 @@ Pierre Quentel + Brian Quinlan + Anders Qvist + Burton Radons ++Jeff Ramnani + Brodie Rao + Antti Rasinen + Sridhar Ratnakumar