Ticket #9536: python-2.6.4.p10.patch

File python-2.6.4.p10.patch, 231.6 KB (added by AlexanderDreyer, 13 years ago)

Adding handling of environment variable DISTUTILS_NO_USER_CFG to python's distutils

  • patches/ACKS.txt

    diff -u -N --recursive python-2.6.4.p9/patches/ACKS.txt python-2.6.4.p10/patches/ACKS.txt
    old new  
     1Contributors to the Python Documentation
     2----------------------------------------
     3
     4This section lists people who have contributed in some way to the Python
     5documentation.  It is probably not complete -- if you feel that you or
     6anyone else should be on this list, please let us know (send email to
     7docs@python.org), and we'll be glad to correct the problem.
     8
     9.. acks::
     10
     11   * Aahz
     12   * Michael Abbott
     13   * Steve Alexander
     14   * Jim Ahlstrom
     15   * Fred Allen
     16   * A. Amoroso
     17   * Pehr Anderson
     18   * Oliver Andrich
     19   * Heidi Annexstad
     20   * Jesús Cea Avión
     21   * Daniel Barclay
     22   * Chris Barker
     23   * Don Bashford
     24   * Anthony Baxter
     25   * Alexander Belopolsky
     26   * Bennett Benson
     27   * Jonathan Black
     28   * Robin Boerdijk
     29   * Michal Bozon
     30   * Aaron Brancotti
     31   * Georg Brandl
     32   * Keith Briggs
     33   * Ian Bruntlett
     34   * Lee Busby
     35   * Lorenzo M. Catucci
     36   * Carl Cerecke
     37   * Mauro Cicognini
     38   * Gilles Civario
     39   * Mike Clarkson
     40   * Steve Clift
     41   * Dave Cole
     42   * Matthew Cowles
     43   * Jeremy Craven
     44   * Andrew Dalke
     45   * Ben Darnell
     46   * L. Peter Deutsch
     47   * Robert Donohue
     48   * Fred L. Drake, Jr.
     49   * Josip Dzolonga
     50   * Jeff Epler
     51   * Michael Ernst
     52   * Blame Andy Eskilsson
     53   * Carey Evans
     54   * Martijn Faassen
     55   * Carl Feynman
     56   * Dan Finnie
     57   * Hernán Martínez Foffani
     58   * Stefan Franke
     59   * Jim Fulton
     60   * Peter Funk
     61   * Lele Gaifax
     62   * Matthew Gallagher
     63   * Gabriel Genellina
     64   * Ben Gertzfield
     65   * Nadim Ghaznavi
     66   * Jonathan Giddy
     67   * Shelley Gooch
     68   * Nathaniel Gray
     69   * Grant Griffin
     70   * Thomas Guettler
     71   * Anders Hammarquist
     72   * Mark Hammond
     73   * Harald Hanche-Olsen
     74   * Manus Hand
     75   * Gerhard Häring
     76   * Travis B. Hartwell
     77   * Tim Hatch
     78   * Janko Hauser
     79   * Thomas Heller
     80   * Bernhard Herzog
     81   * Magnus L. Hetland
     82   * Konrad Hinsen
     83   * Stefan Hoffmeister
     84   * Albert Hofkamp
     85   * Gregor Hoffleit
     86   * Steve Holden
     87   * Thomas Holenstein
     88   * Gerrit Holl
     89   * Rob Hooft
     90   * Brian Hooper
     91   * Randall Hopper
     92   * Michael Hudson
     93   * Eric Huss
     94   * Jeremy Hylton
     95   * Roger Irwin
     96   * Jack Jansen
     97   * Philip H. Jensen
     98   * Pedro Diaz Jimenez
     99   * Kent Johnson
     100   * Lucas de Jonge
     101   * Andreas Jung
     102   * Robert Kern
     103   * Jim Kerr
     104   * Jan Kim
     105   * Greg Kochanski
     106   * Guido Kollerie
     107   * Peter A. Koren
     108   * Daniel Kozan
     109   * Andrew M. Kuchling
     110   * Dave Kuhlman
     111   * Erno Kuusela
     112   * Thomas Lamb
     113   * Detlef Lannert
     114   * Piers Lauder
     115   * Glyph Lefkowitz
     116   * Robert Lehmann
     117   * Marc-André Lemburg
     118   * Ross Light
     119   * Ulf A. Lindgren
     120   * Everett Lipman
     121   * Mirko Liss
     122   * Martin von Löwis
     123   * Fredrik Lundh
     124   * Jeff MacDonald
     125   * John Machin
     126   * Andrew MacIntyre
     127   * Vladimir Marangozov
     128   * Vincent Marchetti
     129   * Laura Matson
     130   * Daniel May
     131   * Rebecca McCreary
     132   * Doug Mennella
     133   * Paolo Milani
     134   * Skip Montanaro
     135   * Paul Moore
     136   * Ross Moore
     137   * Sjoerd Mullender
     138   * Dale Nagata
     139   * Ng Pheng Siong
     140   * Koray Oner
     141   * Tomas Oppelstrup
     142   * Denis S. Otkidach
     143   * Zooko O'Whielacronx
     144   * Shriphani Palakodety
     145   * William Park
     146   * Joonas Paalasmaa
     147   * Harri Pasanen
     148   * Bo Peng
     149   * Tim Peters
     150   * Benjamin Peterson
     151   * Christopher Petrilli
     152   * Justin D. Pettit
     153   * Chris Phoenix
     154   * François Pinard
     155   * Paul Prescod
     156   * Eric S. Raymond
     157   * Edward K. Ream
     158   * Sean Reifschneider
     159   * Bernhard Reiter
     160   * Armin Rigo
     161   * Wes Rishel
     162   * Armin Ronacher
     163   * Jim Roskind
     164   * Guido van Rossum
     165   * Donald Wallace Rouse II
     166   * Mark Russell
     167   * Nick Russo
     168   * Chris Ryland
     169   * Constantina S.
     170   * Hugh Sasse
     171   * Bob Savage
     172   * Scott Schram
     173   * Neil Schemenauer
     174   * Barry Scott
     175   * Joakim Sernbrant
     176   * Justin Sheehy
     177   * Charlie Shepherd
     178   * Michael Simcich
     179   * Ionel Simionescu
     180   * Michael Sloan
     181   * Gregory P. Smith
     182   * Roy Smith
     183   * Clay Spence
     184   * Nicholas Spies
     185   * Tage Stabell-Kulo
     186   * Frank Stajano
     187   * Anthony Starks
     188   * Greg Stein
     189   * Peter Stoehr
     190   * Mark Summerfield
     191   * Reuben Sumner
     192   * Kalle Svensson
     193   * Jim Tittsler
     194   * David Turner
     195   * Ville Vainio
     196   * Martijn Vries
     197   * Charles G. Waldman
     198   * Greg Ward
     199   * Barry Warsaw
     200   * Corran Webster
     201   * Glyn Webster
     202   * Bob Weiner
     203   * Eddy Welbourne
     204   * Jeff Wheeler
     205   * Mats Wichmann
     206   * Gerry Wiener
     207   * Timothy Wild
     208   * Paul Winkler
     209   * Collin Winter
     210   * Blake Winton
     211   * Dan Wolfe
     212   * Steven Work
     213   * Thomas Wouters
     214   * Ka-Ping Yee
     215   * Rory Yorke
     216   * Moshe Zadka
     217   * Milan Zamazal
     218   * Cheng Zhang
  • patches/ACKS.txt.patch

    diff -u -N --recursive python-2.6.4.p9/patches/ACKS.txt.patch python-2.6.4.p10/patches/ACKS.txt.patch
    old new  
     1--- ../src/Doc/ACKS.txt 2010-05-26 00:40:39.000000000 +0200
     2+++ ACKS.txt    2010-07-19 18:51:34.000000000 +0200
     3@@ -205,6 +205,7 @@
     4    * Mats Wichmann
     5    * Gerry Wiener
     6    * Timothy Wild
     7+   * Paul Winkler
     8    * Collin Winter
     9    * Blake Winton
     10    * Dan Wolfe
  • patches/backport-no-user-cfg.patch

    diff -u -N --recursive python-2.6.4.p9/patches/backport-no-user-cfg.patch python-2.6.4.p10/patches/backport-no-user-cfg.patch
    old new  
     1--- python/trunk/Doc/ACKS.txt   2009/10/27 23:02:24     75892
     2+++ python/trunk/Doc/ACKS.txt   2009/10/27 23:06:10     75893
     3@@ -207,6 +207,7 @@
     4    * Mats Wichmann
     5    * Gerry Wiener
     6    * Timothy Wild
     7+   * Paul Winkler
     8    * Collin Winter
     9    * Blake Winton
     10    * Dan Wolfe
     11--- python/trunk/Doc/distutils/builtdist.rst    2009/10/27 23:02:24     75892
     12+++ python/trunk/Doc/distutils/builtdist.rst    2009/10/27 23:06:10     75893
     13@@ -241,7 +241,8 @@
     14 configuration file, :file:`setup.cfg`\ ---see section :ref:`setup-config`.  If
     15 you distribute or package many Python module distributions, you might want to
     16 put options that apply to all of them in your personal Distutils configuration
     17-file (:file:`~/.pydistutils.cfg`).
     18+file (:file:`~/.pydistutils.cfg`).  If you want to temporarily disable
     19+this file, you can pass the --no-user-cfg option to setup.py.
     20 
     21 There are three steps to building a binary RPM package, all of which are
     22 handled automatically by the Distutils:
     23--- python/trunk/Lib/distutils/dist.py  2009/10/27 23:02:24     75892
     24+++ python/trunk/Lib/distutils/dist.py  2009/10/27 23:06:10     75893
     25@@ -56,7 +56,9 @@
     26                       ('quiet', 'q', "run quietly (turns verbosity off)"),
     27                       ('dry-run', 'n', "don't actually do anything"),
     28                       ('help', 'h', "show detailed help message"),
     29-                     ]
     30+                      ('no-user-cfg', None,
     31+                       'ignore pydistutils.cfg in your home directory'),
     32+    ]
     33 
     34     # 'common_usage' is a short (2-3 line) string describing the common
     35     # usage of the setup script.
     36@@ -264,6 +266,22 @@
     37                     else:
     38                         sys.stderr.write(msg + "\n")
     39 
     40+        # no-user-cfg is handled before other command line args
     41+        # because other args override the config files, and this
     42+        # one is needed before we can load the config files.
     43+        # If attrs['script_args'] wasn't passed, assume false.
     44+        #
     45+        # This also make sure we just look at the global options
     46+        self.want_user_cfg = True
     47+
     48+        if self.script_args is not None:
     49+            for arg in self.script_args:
     50+                if not arg.startswith('-'):
     51+                    break
     52+                if arg == '--no-user-cfg':
     53+                    self.want_user_cfg = False
     54+                    break
     55+
     56         self.finalize_options()
     57 
     58     def get_option_dict(self, command):
     59@@ -316,7 +334,10 @@
     60         Distutils installation directory (ie. where the top-level
     61         Distutils __inst__.py file lives), a file in the user's home
     62         directory named .pydistutils.cfg on Unix and pydistutils.cfg
     63-        on Windows/Mac, and setup.cfg in the current directory.
     64+        on Windows/Mac; and setup.cfg in the current directory.
     65+
     66+        The file in the user's home directory can be disabled with the
     67+        --no-user-cfg option.
     68         """
     69         files = []
     70         check_environ()
     71@@ -336,15 +357,19 @@
     72             user_filename = "pydistutils.cfg"
     73 
     74         # And look for the user config file
     75-        user_file = os.path.join(os.path.expanduser('~'), user_filename)
     76-        if os.path.isfile(user_file):
     77-            files.append(user_file)
     78+        if self.want_user_cfg:
     79+            user_file = os.path.join(os.path.expanduser('~'), user_filename)
     80+            if os.path.isfile(user_file):
     81+                files.append(user_file)
     82 
     83         # All platforms support local setup.cfg
     84         local_file = "setup.cfg"
     85         if os.path.isfile(local_file):
     86             files.append(local_file)
     87 
     88+        if DEBUG:
     89+            self.announce("using config files: %s" % ', '.join(files))
     90+
     91         return files
     92 
     93     def parse_config_files(self, filenames=None):
     94--- python/trunk/Misc/NEWS      2009/10/27 23:02:24     75892
     95+++ python/trunk/Misc/NEWS      2009/10/27 23:06:10     75893
     96@@ -427,6 +427,9 @@
     97 Library
     98 -------
     99 
     100+- Issue #1180: Added a new global option to ignore ~/.pydistutils.cfg in
     101+  Distutils.
     102+
     103 - Issue #7218: Fix test_site for win32, the directory comparison was done with
     104   an uppercase.
     105 
     106
  • patches/builtdist.rst

    diff -u -N --recursive python-2.6.4.p9/patches/builtdist.rst python-2.6.4.p10/patches/builtdist.rst
    old new  
     1.. _built-dist:
     2
     3****************************
     4Creating Built Distributions
     5****************************
     6
     7A "built distribution" is what you're probably used to thinking of either as a
     8"binary package" or an "installer" (depending on your background).  It's not
     9necessarily binary, though, because it might contain only Python source code
     10and/or byte-code; and we don't call it a package, because that word is already
     11spoken for in Python.  (And "installer" is a term specific to the world of
     12mainstream desktop systems.)
     13
     14A built distribution is how you make life as easy as possible for installers of
     15your module distribution: for users of RPM-based Linux systems, it's a binary
     16RPM; for Windows users, it's an executable installer; for Debian-based Linux
     17users, it's a Debian package; and so forth.  Obviously, no one person will be
     18able to create built distributions for every platform under the sun, so the
     19Distutils are designed to enable module developers to concentrate on their
     20specialty---writing code and creating source distributions---while an
     21intermediary species called *packagers* springs up to turn source distributions
     22into built distributions for as many platforms as there are packagers.
     23
     24Of course, the module developer could be his own packager; or the packager could
     25be a volunteer "out there" somewhere who has access to a platform which the
     26original developer does not; or it could be software periodically grabbing new
     27source distributions and turning them into built distributions for as many
     28platforms as the software has access to.  Regardless of who they are, a packager
     29uses the setup script and the :command:`bdist` command family to generate built
     30distributions.
     31
     32As a simple example, if I run the following command in the Distutils source
     33tree::
     34
     35   python setup.py bdist
     36
     37then the Distutils builds my module distribution (the Distutils itself in this
     38case), does a "fake" installation (also in the :file:`build` directory), and
     39creates the default type of built distribution for my platform.  The default
     40format for built distributions is a "dumb" tar file on Unix, and a simple
     41executable installer on Windows.  (That tar file is considered "dumb" because it
     42has to be unpacked in a specific location to work.)
     43
     44Thus, the above command on a Unix system creates
     45:file:`Distutils-1.0.{plat}.tar.gz`; unpacking this tarball from the right place
     46installs the Distutils just as though you had downloaded the source distribution
     47and run ``python setup.py install``.  (The "right place" is either the root of
     48the filesystem or  Python's :file:`{prefix}` directory, depending on the options
     49given to the :command:`bdist_dumb` command; the default is to make dumb
     50distributions relative to :file:`{prefix}`.)
     51
     52Obviously, for pure Python distributions, this isn't any simpler than just
     53running ``python setup.py install``\ ---but for non-pure distributions, which
     54include extensions that would need to be compiled, it can mean the difference
     55between someone being able to use your extensions or not.  And creating "smart"
     56built distributions, such as an RPM package or an executable installer for
     57Windows, is far more convenient for users even if your distribution doesn't
     58include any extensions.
     59
     60The :command:`bdist` command has a :option:`--formats` option, similar to the
     61:command:`sdist` command, which you can use to select the types of built
     62distribution to generate: for example, ::
     63
     64   python setup.py bdist --format=zip
     65
     66would, when run on a Unix system, create :file:`Distutils-1.0.{plat}.zip`\
     67---again, this archive would be unpacked from the root directory to install the
     68Distutils.
     69
     70The available formats for built distributions are:
     71
     72+-------------+------------------------------+---------+
     73| Format      | Description                  | Notes   |
     74+=============+==============================+=========+
     75| ``gztar``   | gzipped tar file             | (1),(3) |
     76|             | (:file:`.tar.gz`)            |         |
     77+-------------+------------------------------+---------+
     78| ``ztar``    | compressed tar file          | \(3)    |
     79|             | (:file:`.tar.Z`)             |         |
     80+-------------+------------------------------+---------+
     81| ``tar``     | tar file (:file:`.tar`)      | \(3)    |
     82+-------------+------------------------------+---------+
     83| ``zip``     | zip file (:file:`.zip`)      | \(4)    |
     84+-------------+------------------------------+---------+
     85| ``rpm``     | RPM                          | \(5)    |
     86+-------------+------------------------------+---------+
     87| ``pkgtool`` | Solaris :program:`pkgtool`   |         |
     88+-------------+------------------------------+---------+
     89| ``sdux``    | HP-UX :program:`swinstall`   |         |
     90+-------------+------------------------------+---------+
     91| ``rpm``     | RPM                          | \(5)    |
     92+-------------+------------------------------+---------+
     93| ``wininst`` | self-extracting ZIP file for | (2),(4) |
     94|             | Windows                      |         |
     95+-------------+------------------------------+---------+
     96
     97Notes:
     98
     99(1)
     100   default on Unix
     101
     102(2)
     103   default on Windows
     104
     105   **\*\*** to-do! **\*\***
     106
     107(3)
     108   requires external utilities: :program:`tar` and possibly one of :program:`gzip`,
     109   :program:`bzip2`, or :program:`compress`
     110
     111(4)
     112   requires either external :program:`zip` utility or :mod:`zipfile` module (part
     113   of the standard Python library since Python 1.6)
     114
     115(5)
     116   requires external :program:`rpm` utility, version 3.0.4 or better (use ``rpm
     117   --version`` to find out which version you have)
     118
     119You don't have to use the :command:`bdist` command with the :option:`--formats`
     120option; you can also use the command that directly implements the format you're
     121interested in.  Some of these :command:`bdist` "sub-commands" actually generate
     122several similar formats; for instance, the :command:`bdist_dumb` command
     123generates all the "dumb" archive formats (``tar``, ``ztar``, ``gztar``, and
     124``zip``), and :command:`bdist_rpm` generates both binary and source RPMs.  The
     125:command:`bdist` sub-commands, and the formats generated by each, are:
     126
     127+--------------------------+-----------------------+
     128| Command                  | Formats               |
     129+==========================+=======================+
     130| :command:`bdist_dumb`    | tar, ztar, gztar, zip |
     131+--------------------------+-----------------------+
     132| :command:`bdist_rpm`     | rpm, srpm             |
     133+--------------------------+-----------------------+
     134| :command:`bdist_wininst` | wininst               |
     135+--------------------------+-----------------------+
     136
     137The following sections give details on the individual :command:`bdist_\*`
     138commands.
     139
     140
     141.. _creating-dumb:
     142
     143Creating dumb built distributions
     144=================================
     145
     146**\*\*** Need to document absolute vs. prefix-relative packages here, but first
     147I have to implement it! **\*\***
     148
     149
     150.. _creating-rpms:
     151
     152Creating RPM packages
     153=====================
     154
     155The RPM format is used by many popular Linux distributions, including Red Hat,
     156SuSE, and Mandrake.  If one of these (or any of the other RPM-based Linux
     157distributions) is your usual environment, creating RPM packages for other users
     158of that same distribution is trivial. Depending on the complexity of your module
     159distribution and differences between Linux distributions, you may also be able
     160to create RPMs that work on different RPM-based distributions.
     161
     162The usual way to create an RPM of your module distribution is to run the
     163:command:`bdist_rpm` command::
     164
     165   python setup.py bdist_rpm
     166
     167or the :command:`bdist` command with the :option:`--format` option::
     168
     169   python setup.py bdist --formats=rpm
     170
     171The former allows you to specify RPM-specific options; the latter allows  you to
     172easily specify multiple formats in one run.  If you need to do both, you can
     173explicitly specify multiple :command:`bdist_\*` commands and their options::
     174
     175   python setup.py bdist_rpm --packager="John Doe <jdoe@example.org>" \
     176                   bdist_wininst --target_version="2.0"
     177
     178Creating RPM packages is driven by a :file:`.spec` file, much as using the
     179Distutils is driven by the setup script.  To make your life easier, the
     180:command:`bdist_rpm` command normally creates a :file:`.spec` file based on the
     181information you supply in the setup script, on the command line, and in any
     182Distutils configuration files.  Various options and sections in the
     183:file:`.spec` file are derived from options in the setup script as follows:
     184
     185+------------------------------------------+----------------------------------------------+
     186| RPM :file:`.spec` file option or section | Distutils setup script option                |
     187+==========================================+==============================================+
     188| Name                                     | :option:`name`                               |
     189+------------------------------------------+----------------------------------------------+
     190| Summary (in preamble)                    | :option:`description`                        |
     191+------------------------------------------+----------------------------------------------+
     192| Version                                  | :option:`version`                            |
     193+------------------------------------------+----------------------------------------------+
     194| Vendor                                   | :option:`author` and :option:`author_email`, |
     195|                                          | or  --- & :option:`maintainer` and           |
     196|                                          | :option:`maintainer_email`                   |
     197+------------------------------------------+----------------------------------------------+
     198| Copyright                                | :option:`license`                            |
     199+------------------------------------------+----------------------------------------------+
     200| Url                                      | :option:`url`                                |
     201+------------------------------------------+----------------------------------------------+
     202| %description (section)                   | :option:`long_description`                   |
     203+------------------------------------------+----------------------------------------------+
     204
     205Additionally, there are many options in :file:`.spec` files that don't have
     206corresponding options in the setup script.  Most of these are handled through
     207options to the :command:`bdist_rpm` command as follows:
     208
     209+-------------------------------+-----------------------------+-------------------------+
     210| RPM :file:`.spec` file option | :command:`bdist_rpm` option | default value           |
     211| or section                    |                             |                         |
     212+===============================+=============================+=========================+
     213| Release                       | :option:`release`           | "1"                     |
     214+-------------------------------+-----------------------------+-------------------------+
     215| Group                         | :option:`group`             | "Development/Libraries" |
     216+-------------------------------+-----------------------------+-------------------------+
     217| Vendor                        | :option:`vendor`            | (see above)             |
     218+-------------------------------+-----------------------------+-------------------------+
     219| Packager                      | :option:`packager`          | (none)                  |
     220+-------------------------------+-----------------------------+-------------------------+
     221| Provides                      | :option:`provides`          | (none)                  |
     222+-------------------------------+-----------------------------+-------------------------+
     223| Requires                      | :option:`requires`          | (none)                  |
     224+-------------------------------+-----------------------------+-------------------------+
     225| Conflicts                     | :option:`conflicts`         | (none)                  |
     226+-------------------------------+-----------------------------+-------------------------+
     227| Obsoletes                     | :option:`obsoletes`         | (none)                  |
     228+-------------------------------+-----------------------------+-------------------------+
     229| Distribution                  | :option:`distribution_name` | (none)                  |
     230+-------------------------------+-----------------------------+-------------------------+
     231| BuildRequires                 | :option:`build_requires`    | (none)                  |
     232+-------------------------------+-----------------------------+-------------------------+
     233| Icon                          | :option:`icon`              | (none)                  |
     234+-------------------------------+-----------------------------+-------------------------+
     235
     236Obviously, supplying even a few of these options on the command-line would be
     237tedious and error-prone, so it's usually best to put them in the setup
     238configuration file, :file:`setup.cfg`\ ---see section :ref:`setup-config`.  If
     239you distribute or package many Python module distributions, you might want to
     240put options that apply to all of them in your personal Distutils configuration
     241file (:file:`~/.pydistutils.cfg`).  If you want to temporarily disable
     242this file, you can pass the --no-user-cfg option to setup.py.
     243
     244There are three steps to building a binary RPM package, all of which are
     245handled automatically by the Distutils:
     246
     247#. create a :file:`.spec` file, which describes the package (analogous  to the
     248   Distutils setup script; in fact, much of the information in the  setup script
     249   winds up in the :file:`.spec` file)
     250
     251#. create the source RPM
     252
     253#. create the "binary" RPM (which may or may not contain binary code, depending
     254   on whether your module distribution contains Python extensions)
     255
     256Normally, RPM bundles the last two steps together; when you use the Distutils,
     257all three steps are typically bundled together.
     258
     259If you wish, you can separate these three steps.  You can use the
     260:option:`--spec-only` option to make :command:`bdist_rpm` just create the
     261:file:`.spec` file and exit; in this case, the :file:`.spec` file will be
     262written to the "distribution directory"---normally :file:`dist/`, but
     263customizable with the :option:`--dist-dir` option.  (Normally, the :file:`.spec`
     264file winds up deep in the "build tree," in a temporary directory created by
     265:command:`bdist_rpm`.)
     266
     267.. % \XXX{this isn't implemented yet---is it needed?!}
     268.. % You can also specify a custom \file{.spec} file with the
     269.. % \longprogramopt{spec-file} option; used in conjunction with
     270.. % \longprogramopt{spec-only}, this gives you an opportunity to customize
     271.. % the \file{.spec} file manually:
     272.. %
     273.. % \ begin{verbatim}
     274.. % > python setup.py bdist_rpm --spec-only
     275.. % # ...edit dist/FooBar-1.0.spec
     276.. % > python setup.py bdist_rpm --spec-file=dist/FooBar-1.0.spec
     277.. % \ end{verbatim}
     278.. %
     279.. % (Although a better way to do this is probably to override the standard
     280.. % \command{bdist\_rpm} command with one that writes whatever else you want
     281.. % to the \file{.spec} file.)
     282
     283
     284.. _creating-wininst:
     285
     286Creating Windows Installers
     287===========================
     288
     289Executable installers are the natural format for binary distributions on
     290Windows.  They display a nice graphical user interface, display some information
     291about the module distribution to be installed taken from the metadata in the
     292setup script, let the user select a few options, and start or cancel the
     293installation.
     294
     295Since the metadata is taken from the setup script, creating Windows installers
     296is usually as easy as running::
     297
     298   python setup.py bdist_wininst
     299
     300or the :command:`bdist` command with the :option:`--formats` option::
     301
     302   python setup.py bdist --formats=wininst
     303
     304If you have a pure module distribution (only containing pure Python modules and
     305packages), the resulting installer will be version independent and have a name
     306like :file:`foo-1.0.win32.exe`.  These installers can even be created on Unix
     307platforms or Mac OS X.
     308
     309If you have a non-pure distribution, the extensions can only be created on a
     310Windows platform, and will be Python version dependent. The installer filename
     311will reflect this and now has the form :file:`foo-1.0.win32-py2.0.exe`.  You
     312have to create a separate installer for every Python version you want to
     313support.
     314
     315The installer will try to compile pure modules into :term:`bytecode` after installation
     316on the target system in normal and optimizing mode.  If you don't want this to
     317happen for some reason, you can run the :command:`bdist_wininst` command with
     318the :option:`--no-target-compile` and/or the :option:`--no-target-optimize`
     319option.
     320
     321By default the installer will display the cool "Python Powered" logo when it is
     322run, but you can also supply your own bitmap which must be a Windows
     323:file:`.bmp` file with the :option:`--bitmap` option.
     324
     325The installer will also display a large title on the desktop background window
     326when it is run, which is constructed from the name of your distribution and the
     327version number.  This can be changed to another text by using the
     328:option:`--title` option.
     329
     330The installer file will be written to the "distribution directory" --- normally
     331:file:`dist/`, but customizable with the :option:`--dist-dir` option.
     332
     333.. _cross-compile-windows:
     334
     335Cross-compiling on Windows
     336==========================
     337
     338Starting with Python 2.6, distutils is capable of cross-compiling between
     339Windows platforms.  In practice, this means that with the correct tools
     340installed, you can use a 32bit version of Windows to create 64bit extensions
     341and vice-versa.
     342
     343To build for an alternate platform, specify the :option:`--plat-name` option
     344to the build command.  Valid values are currently 'win32', 'win-amd64' and
     345'win-ia64'.  For example, on a 32bit version of Windows, you could execute::
     346
     347   python setup.py build --plat-name=win-amd64
     348
     349to build a 64bit version of your extension.  The Windows Installers also
     350support this option, so the command::
     351
     352   python setup.py build --plat-name=win-amd64 bdist_wininst
     353
     354would create a 64bit installation executable on your 32bit version of Windows.
     355
     356To cross-compile, you must download the Python source code and cross-compile
     357Python itself for the platform you are targetting - it is not possible from a
     358binary installtion of Python (as the .lib etc file for other platforms are
     359not included.)  In practice, this means the user of a 32 bit operating
     360system will need to use Visual Studio 2008 to open the
     361:file:`PCBuild/PCbuild.sln` solution in the Python source tree and build the
     362"x64" configuration of the 'pythoncore' project before cross-compiling
     363extensions is possible.
     364
     365Note that by default, Visual Studio 2008 does not install 64bit compilers or
     366tools.  You may need to reexecute the Visual Studio setup process and select
     367these tools (using Control Panel->[Add/Remove] Programs is a convenient way to
     368check or modify your existing install.)
     369
     370.. _postinstallation-script:
     371
     372The Postinstallation script
     373---------------------------
     374
     375Starting with Python 2.3, a postinstallation script can be specified which the
     376:option:`--install-script` option.  The basename of the script must be
     377specified, and the script filename must also be listed in the scripts argument
     378to the setup function.
     379
     380This script will be run at installation time on the target system after all the
     381files have been copied, with ``argv[1]`` set to :option:`-install`, and again at
     382uninstallation time before the files are removed with ``argv[1]`` set to
     383:option:`-remove`.
     384
     385The installation script runs embedded in the windows installer, every output
     386(``sys.stdout``, ``sys.stderr``) is redirected into a buffer and will be
     387displayed in the GUI after the script has finished.
     388
     389Some functions especially useful in this context are available as additional
     390built-in functions in the installation script.
     391
     392
     393.. function:: directory_created(path)
     394              file_created(path)
     395
     396   These functions should be called when a directory or file is created by the
     397   postinstall script at installation time.  It will register *path* with the
     398   uninstaller, so that it will be removed when the distribution is uninstalled.
     399   To be safe, directories are only removed if they are empty.
     400
     401
     402.. function:: get_special_folder_path(csidl_string)
     403
     404   This function can be used to retrieve special folder locations on Windows like
     405   the Start Menu or the Desktop.  It returns the full path to the folder.
     406   *csidl_string* must be one of the following strings::
     407
     408      "CSIDL_APPDATA"
     409
     410      "CSIDL_COMMON_STARTMENU"
     411      "CSIDL_STARTMENU"
     412
     413      "CSIDL_COMMON_DESKTOPDIRECTORY"
     414      "CSIDL_DESKTOPDIRECTORY"
     415
     416      "CSIDL_COMMON_STARTUP"
     417      "CSIDL_STARTUP"
     418
     419      "CSIDL_COMMON_PROGRAMS"
     420      "CSIDL_PROGRAMS"
     421
     422      "CSIDL_FONTS"
     423
     424   If the folder cannot be retrieved, :exc:`OSError` is raised.
     425
     426   Which folders are available depends on the exact Windows version, and probably
     427   also the configuration.  For details refer to Microsoft's documentation of the
     428   :cfunc:`SHGetSpecialFolderPath` function.
     429
     430Vista User Access Control (UAC)
     431===============================
     432
     433Starting with Python 2.6, bdist_wininst supports a :option:`--user-access-control`
     434option.  The default is 'none' (meaning no UAC handling is done), and other
     435valid values are 'auto' (meaning prompt for UAC elevation if Python was
     436installed for all users) and 'force' (meaning always prompt for elevation)
     437
     438.. function:: create_shortcut(target, description, filename[, arguments[, workdir[, iconpath[, iconindex]]]])
     439
     440   This function creates a shortcut. *target* is the path to the program to be
     441   started by the shortcut. *description* is the description of the shortcut.
     442   *filename* is the title of the shortcut that the user will see. *arguments*
     443   specifies the command line arguments, if any. *workdir* is the working directory
     444   for the program. *iconpath* is the file containing the icon for the shortcut,
     445   and *iconindex* is the index of the icon in the file *iconpath*.  Again, for
     446   details consult the Microsoft documentation for the :class:`IShellLink`
     447   interface.
  • patches/dist.py

    diff -u -N --recursive python-2.6.4.p9/patches/dist.py python-2.6.4.p10/patches/dist.py
    old new  
     1"""distutils.dist
     2
     3Provides the Distribution class, which represents the module distribution
     4being built/installed/distributed.
     5"""
     6
     7# This module should be kept compatible with Python 2.1.
     8
     9__revision__ = "$Id: dist.py 68035 2008-12-29 22:36:22Z tarek.ziade $"
     10
     11import sys, os, string, re
     12from types import *
     13from copy import copy
     14
     15try:
     16    import warnings
     17except ImportError:
     18    warnings = None
     19
     20from distutils.errors import *
     21from distutils.fancy_getopt import FancyGetopt, translate_longopt
     22from distutils.util import check_environ, strtobool, rfc822_escape
     23from distutils import log
     24from distutils.debug import DEBUG
     25
     26# Encoding used for the PKG-INFO files
     27PKG_INFO_ENCODING = 'utf-8'
     28
     29# Regex to define acceptable Distutils command names.  This is not *quite*
     30# the same as a Python NAME -- I don't allow leading underscores.  The fact
     31# that they're very similar is no coincidence; the default naming scheme is
     32# to look for a Python module named after the command.
     33command_re = re.compile (r'^[a-zA-Z]([a-zA-Z0-9_]*)$')
     34
     35
     36class Distribution:
     37    """The core of the Distutils.  Most of the work hiding behind 'setup'
     38    is really done within a Distribution instance, which farms the work out
     39    to the Distutils commands specified on the command line.
     40
     41    Setup scripts will almost never instantiate Distribution directly,
     42    unless the 'setup()' function is totally inadequate to their needs.
     43    However, it is conceivable that a setup script might wish to subclass
     44    Distribution for some specialized purpose, and then pass the subclass
     45    to 'setup()' as the 'distclass' keyword argument.  If so, it is
     46    necessary to respect the expectations that 'setup' has of Distribution.
     47    See the code for 'setup()', in core.py, for details.
     48    """
     49
     50
     51    # 'global_options' describes the command-line options that may be
     52    # supplied to the setup script prior to any actual commands.
     53    # Eg. "./setup.py -n" or "./setup.py --quiet" both take advantage of
     54    # these global options.  This list should be kept to a bare minimum,
     55    # since every global option is also valid as a command option -- and we
     56    # don't want to pollute the commands with too many options that they
     57    # have minimal control over.
     58    # The fourth entry for verbose means that it can be repeated.
     59    global_options = [('verbose', 'v', "run verbosely (default)", 1),
     60                      ('quiet', 'q', "run quietly (turns verbosity off)"),
     61                      ('dry-run', 'n', "don't actually do anything"),
     62                      ('help', 'h', "show detailed help message"),
     63                      ('no-user-cfg', None,
     64                       'ignore pydistutils.cfg in your home directory'),
     65    ]
     66
     67    # 'common_usage' is a short (2-3 line) string describing the common
     68    # usage of the setup script.
     69    common_usage = """\
     70Common commands: (see '--help-commands' for more)
     71
     72  setup.py build      will build the package underneath 'build/'
     73  setup.py install    will install the package
     74"""
     75
     76    # options that are not propagated to the commands
     77    display_options = [
     78        ('help-commands', None,
     79         "list all available commands"),
     80        ('name', None,
     81         "print package name"),
     82        ('version', 'V',
     83         "print package version"),
     84        ('fullname', None,
     85         "print <package name>-<version>"),
     86        ('author', None,
     87         "print the author's name"),
     88        ('author-email', None,
     89         "print the author's email address"),
     90        ('maintainer', None,
     91         "print the maintainer's name"),
     92        ('maintainer-email', None,
     93         "print the maintainer's email address"),
     94        ('contact', None,
     95         "print the maintainer's name if known, else the author's"),
     96        ('contact-email', None,
     97         "print the maintainer's email address if known, else the author's"),
     98        ('url', None,
     99         "print the URL for this package"),
     100        ('license', None,
     101         "print the license of the package"),
     102        ('licence', None,
     103         "alias for --license"),
     104        ('description', None,
     105         "print the package description"),
     106        ('long-description', None,
     107         "print the long package description"),
     108        ('platforms', None,
     109         "print the list of platforms"),
     110        ('classifiers', None,
     111         "print the list of classifiers"),
     112        ('keywords', None,
     113         "print the list of keywords"),
     114        ('provides', None,
     115         "print the list of packages/modules provided"),
     116        ('requires', None,
     117         "print the list of packages/modules required"),
     118        ('obsoletes', None,
     119         "print the list of packages/modules made obsolete")
     120        ]
     121    display_option_names = map(lambda x: translate_longopt(x[0]),
     122                               display_options)
     123
     124    # negative options are options that exclude other options
     125    negative_opt = {'quiet': 'verbose'}
     126
     127
     128    # -- Creation/initialization methods -------------------------------
     129
     130    def __init__ (self, attrs=None):
     131        """Construct a new Distribution instance: initialize all the
     132        attributes of a Distribution, and then use 'attrs' (a dictionary
     133        mapping attribute names to values) to assign some of those
     134        attributes their "real" values.  (Any attributes not mentioned in
     135        'attrs' will be assigned to some null value: 0, None, an empty list
     136        or dictionary, etc.)  Most importantly, initialize the
     137        'command_obj' attribute to the empty dictionary; this will be
     138        filled in with real command objects by 'parse_command_line()'.
     139        """
     140
     141        # Default values for our command-line options
     142        self.verbose = 1
     143        self.dry_run = 0
     144        self.help = 0
     145        for attr in self.display_option_names:
     146            setattr(self, attr, 0)
     147
     148        # Store the distribution meta-data (name, version, author, and so
     149        # forth) in a separate object -- we're getting to have enough
     150        # information here (and enough command-line options) that it's
     151        # worth it.  Also delegate 'get_XXX()' methods to the 'metadata'
     152        # object in a sneaky and underhanded (but efficient!) way.
     153        self.metadata = DistributionMetadata()
     154        for basename in self.metadata._METHOD_BASENAMES:
     155            method_name = "get_" + basename
     156            setattr(self, method_name, getattr(self.metadata, method_name))
     157
     158        # 'cmdclass' maps command names to class objects, so we
     159        # can 1) quickly figure out which class to instantiate when
     160        # we need to create a new command object, and 2) have a way
     161        # for the setup script to override command classes
     162        self.cmdclass = {}
     163
     164        # 'command_packages' is a list of packages in which commands
     165        # are searched for.  The factory for command 'foo' is expected
     166        # to be named 'foo' in the module 'foo' in one of the packages
     167        # named here.  This list is searched from the left; an error
     168        # is raised if no named package provides the command being
     169        # searched for.  (Always access using get_command_packages().)
     170        self.command_packages = None
     171
     172        # 'script_name' and 'script_args' are usually set to sys.argv[0]
     173        # and sys.argv[1:], but they can be overridden when the caller is
     174        # not necessarily a setup script run from the command-line.
     175        self.script_name = None
     176        self.script_args = None
     177
     178        # 'command_options' is where we store command options between
     179        # parsing them (from config files, the command-line, etc.) and when
     180        # they are actually needed -- ie. when the command in question is
     181        # instantiated.  It is a dictionary of dictionaries of 2-tuples:
     182        #   command_options = { command_name : { option : (source, value) } }
     183        self.command_options = {}
     184
     185        # 'dist_files' is the list of (command, pyversion, file) that
     186        # have been created by any dist commands run so far. This is
     187        # filled regardless of whether the run is dry or not. pyversion
     188        # gives sysconfig.get_python_version() if the dist file is
     189        # specific to a Python version, 'any' if it is good for all
     190        # Python versions on the target platform, and '' for a source
     191        # file. pyversion should not be used to specify minimum or
     192        # maximum required Python versions; use the metainfo for that
     193        # instead.
     194        self.dist_files = []
     195
     196        # These options are really the business of various commands, rather
     197        # than of the Distribution itself.  We provide aliases for them in
     198        # Distribution as a convenience to the developer.
     199        self.packages = None
     200        self.package_data = {}
     201        self.package_dir = None
     202        self.py_modules = None
     203        self.libraries = None
     204        self.headers = None
     205        self.ext_modules = None
     206        self.ext_package = None
     207        self.include_dirs = None
     208        self.extra_path = None
     209        self.scripts = None
     210        self.data_files = None
     211
     212        # And now initialize bookkeeping stuff that can't be supplied by
     213        # the caller at all.  'command_obj' maps command names to
     214        # Command instances -- that's how we enforce that every command
     215        # class is a singleton.
     216        self.command_obj = {}
     217
     218        # 'have_run' maps command names to boolean values; it keeps track
     219        # of whether we have actually run a particular command, to make it
     220        # cheap to "run" a command whenever we think we might need to -- if
     221        # it's already been done, no need for expensive filesystem
     222        # operations, we just check the 'have_run' dictionary and carry on.
     223        # It's only safe to query 'have_run' for a command class that has
     224        # been instantiated -- a false value will be inserted when the
     225        # command object is created, and replaced with a true value when
     226        # the command is successfully run.  Thus it's probably best to use
     227        # '.get()' rather than a straight lookup.
     228        self.have_run = {}
     229
     230        # Now we'll use the attrs dictionary (ultimately, keyword args from
     231        # the setup script) to possibly override any or all of these
     232        # distribution options.
     233
     234        if attrs:
     235            # Pull out the set of command options and work on them
     236            # specifically.  Note that this order guarantees that aliased
     237            # command options will override any supplied redundantly
     238            # through the general options dictionary.
     239            options = attrs.get('options')
     240            if options is not None:
     241                del attrs['options']
     242                for (command, cmd_options) in options.items():
     243                    opt_dict = self.get_option_dict(command)
     244                    for (opt, val) in cmd_options.items():
     245                        opt_dict[opt] = ("setup script", val)
     246
     247            if 'licence' in attrs:
     248                attrs['license'] = attrs['licence']
     249                del attrs['licence']
     250                msg = "'licence' distribution option is deprecated; use 'license'"
     251                if warnings is not None:
     252                    warnings.warn(msg)
     253                else:
     254                    sys.stderr.write(msg + "\n")
     255
     256            # Now work on the rest of the attributes.  Any attribute that's
     257            # not already defined is invalid!
     258            for (key,val) in attrs.items():
     259                if hasattr(self.metadata, "set_" + key):
     260                    getattr(self.metadata, "set_" + key)(val)
     261                elif hasattr(self.metadata, key):
     262                    setattr(self.metadata, key, val)
     263                elif hasattr(self, key):
     264                    setattr(self, key, val)
     265                else:
     266                    msg = "Unknown distribution option: %s" % repr(key)
     267                    if warnings is not None:
     268                        warnings.warn(msg)
     269                    else:
     270                        sys.stderr.write(msg + "\n")
     271
     272        # no-user-cfg is handled before other command line args
     273        # because other args override the config files, and this
     274        # one is needed before we can load the config files.
     275        # If attrs['script_args'] wasn't passed, assume false.
     276        #
     277        # This also make sure we just look at the global options
     278        self.want_user_cfg = True
     279
     280        if self.script_args is not None:
     281            for arg in self.script_args:
     282                if not arg.startswith('-'):
     283                    break
     284                if arg == '--no-user-cfg':
     285                    self.want_user_cfg = False
     286                    break
     287
     288        if 'DISTUTILS_NO_USER_CFG' in os.environ:
     289            if os.environ['DISTUTILS_NO_USER_CFG'] is not None:
     290                self.want_user_cfg = False
     291
     292        self.finalize_options()
     293
     294    # __init__ ()
     295
     296
     297    def get_option_dict (self, command):
     298        """Get the option dictionary for a given command.  If that
     299        command's option dictionary hasn't been created yet, then create it
     300        and return the new dictionary; otherwise, return the existing
     301        option dictionary.
     302        """
     303
     304        dict = self.command_options.get(command)
     305        if dict is None:
     306            dict = self.command_options[command] = {}
     307        return dict
     308
     309
     310    def dump_option_dicts (self, header=None, commands=None, indent=""):
     311        from pprint import pformat
     312
     313        if commands is None:             # dump all command option dicts
     314            commands = self.command_options.keys()
     315            commands.sort()
     316
     317        if header is not None:
     318            print indent + header
     319            indent = indent + "  "
     320
     321        if not commands:
     322            print indent + "no commands known yet"
     323            return
     324
     325        for cmd_name in commands:
     326            opt_dict = self.command_options.get(cmd_name)
     327            if opt_dict is None:
     328                print indent + "no option dict for '%s' command" % cmd_name
     329            else:
     330                print indent + "option dict for '%s' command:" % cmd_name
     331                out = pformat(opt_dict)
     332                for line in string.split(out, "\n"):
     333                    print indent + "  " + line
     334
     335    # dump_option_dicts ()
     336
     337
     338
     339    # -- Config file finding/parsing methods ---------------------------
     340
     341    def find_config_files (self):
     342        """Find as many configuration files as should be processed for this
     343        platform, and return a list of filenames in the order in which they
     344        should be parsed.  The filenames returned are guaranteed to exist
     345        (modulo nasty race conditions).
     346
     347        There are three possible config files: distutils.cfg in the
     348        Distutils installation directory (ie. where the top-level
     349        Distutils __inst__.py file lives), a file in the user's home
     350        directory named .pydistutils.cfg on Unix and pydistutils.cfg
     351        on Windows/Mac; and setup.cfg in the current directory.
     352
     353        The file in the user's home directory can be disabled with the
     354        --no-user-cfg option.
     355        """
     356        files = []
     357        check_environ()
     358
     359        # Where to look for the system-wide Distutils config file
     360        sys_dir = os.path.dirname(sys.modules['distutils'].__file__)
     361
     362        # Look for the system config file
     363        sys_file = os.path.join(sys_dir, "distutils.cfg")
     364        if os.path.isfile(sys_file):
     365            files.append(sys_file)
     366
     367        # What to call the per-user config file
     368        if os.name == 'posix':
     369            user_filename = ".pydistutils.cfg"
     370        else:
     371            user_filename = "pydistutils.cfg"
     372
     373        # And look for the user config file
     374        if self.want_user_cfg:
     375            user_file = os.path.join(os.path.expanduser('~'), user_filename)
     376            if os.path.isfile(user_file):
     377                files.append(user_file)
     378
     379        # All platforms support local setup.cfg
     380        local_file = "setup.cfg"
     381        if os.path.isfile(local_file):
     382            files.append(local_file)
     383
     384        if DEBUG:
     385            self.announce("using config files: %s" % ', '.join(files))
     386
     387        return files
     388
     389    # find_config_files ()
     390
     391
     392    def parse_config_files (self, filenames=None):
     393        from ConfigParser import ConfigParser
     394
     395        if filenames is None:
     396            filenames = self.find_config_files()
     397
     398        if DEBUG: print "Distribution.parse_config_files():"
     399
     400        parser = ConfigParser()
     401        for filename in filenames:
     402            if DEBUG: print "  reading", filename
     403            parser.read(filename)
     404            for section in parser.sections():
     405                options = parser.options(section)
     406                opt_dict = self.get_option_dict(section)
     407
     408                for opt in options:
     409                    if opt != '__name__':
     410                        val = parser.get(section,opt)
     411                        opt = string.replace(opt, '-', '_')
     412                        opt_dict[opt] = (filename, val)
     413
     414            # Make the ConfigParser forget everything (so we retain
     415            # the original filenames that options come from)
     416            parser.__init__()
     417
     418        # If there was a "global" section in the config file, use it
     419        # to set Distribution options.
     420
     421        if 'global' in self.command_options:
     422            for (opt, (src, val)) in self.command_options['global'].items():
     423                alias = self.negative_opt.get(opt)
     424                try:
     425                    if alias:
     426                        setattr(self, alias, not strtobool(val))
     427                    elif opt in ('verbose', 'dry_run'): # ugh!
     428                        setattr(self, opt, strtobool(val))
     429                    else:
     430                        setattr(self, opt, val)
     431                except ValueError, msg:
     432                    raise DistutilsOptionError, msg
     433
     434    # parse_config_files ()
     435
     436
     437    # -- Command-line parsing methods ----------------------------------
     438
     439    def parse_command_line (self):
     440        """Parse the setup script's command line, taken from the
     441        'script_args' instance attribute (which defaults to 'sys.argv[1:]'
     442        -- see 'setup()' in core.py).  This list is first processed for
     443        "global options" -- options that set attributes of the Distribution
     444        instance.  Then, it is alternately scanned for Distutils commands
     445        and options for that command.  Each new command terminates the
     446        options for the previous command.  The allowed options for a
     447        command are determined by the 'user_options' attribute of the
     448        command class -- thus, we have to be able to load command classes
     449        in order to parse the command line.  Any error in that 'options'
     450        attribute raises DistutilsGetoptError; any error on the
     451        command-line raises DistutilsArgError.  If no Distutils commands
     452        were found on the command line, raises DistutilsArgError.  Return
     453        true if command-line was successfully parsed and we should carry
     454        on with executing commands; false if no errors but we shouldn't
     455        execute commands (currently, this only happens if user asks for
     456        help).
     457        """
     458        #
     459        # We now have enough information to show the Macintosh dialog
     460        # that allows the user to interactively specify the "command line".
     461        #
     462        toplevel_options = self._get_toplevel_options()
     463        if sys.platform == 'mac':
     464            import EasyDialogs
     465            cmdlist = self.get_command_list()
     466            self.script_args = EasyDialogs.GetArgv(
     467                toplevel_options + self.display_options, cmdlist)
     468
     469        # We have to parse the command line a bit at a time -- global
     470        # options, then the first command, then its options, and so on --
     471        # because each command will be handled by a different class, and
     472        # the options that are valid for a particular class aren't known
     473        # until we have loaded the command class, which doesn't happen
     474        # until we know what the command is.
     475
     476        self.commands = []
     477        parser = FancyGetopt(toplevel_options + self.display_options)
     478        parser.set_negative_aliases(self.negative_opt)
     479        parser.set_aliases({'licence': 'license'})
     480        args = parser.getopt(args=self.script_args, object=self)
     481        option_order = parser.get_option_order()
     482        log.set_verbosity(self.verbose)
     483
     484        # for display options we return immediately
     485        if self.handle_display_options(option_order):
     486            return
     487
     488        while args:
     489            args = self._parse_command_opts(parser, args)
     490            if args is None:            # user asked for help (and got it)
     491                return
     492
     493        # Handle the cases of --help as a "global" option, ie.
     494        # "setup.py --help" and "setup.py --help command ...".  For the
     495        # former, we show global options (--verbose, --dry-run, etc.)
     496        # and display-only options (--name, --version, etc.); for the
     497        # latter, we omit the display-only options and show help for
     498        # each command listed on the command line.
     499        if self.help:
     500            self._show_help(parser,
     501                            display_options=len(self.commands) == 0,
     502                            commands=self.commands)
     503            return
     504
     505        # Oops, no commands found -- an end-user error
     506        if not self.commands:
     507            raise DistutilsArgError, "no commands supplied"
     508
     509        # All is well: return true
     510        return 1
     511
     512    # parse_command_line()
     513
     514    def _get_toplevel_options (self):
     515        """Return the non-display options recognized at the top level.
     516
     517        This includes options that are recognized *only* at the top
     518        level as well as options recognized for commands.
     519        """
     520        return self.global_options + [
     521            ("command-packages=", None,
     522             "list of packages that provide distutils commands"),
     523            ]
     524
     525    def _parse_command_opts (self, parser, args):
     526        """Parse the command-line options for a single command.
     527        'parser' must be a FancyGetopt instance; 'args' must be the list
     528        of arguments, starting with the current command (whose options
     529        we are about to parse).  Returns a new version of 'args' with
     530        the next command at the front of the list; will be the empty
     531        list if there are no more commands on the command line.  Returns
     532        None if the user asked for help on this command.
     533        """
     534        # late import because of mutual dependence between these modules
     535        from distutils.cmd import Command
     536
     537        # Pull the current command from the head of the command line
     538        command = args[0]
     539        if not command_re.match(command):
     540            raise SystemExit, "invalid command name '%s'" % command
     541        self.commands.append(command)
     542
     543        # Dig up the command class that implements this command, so we
     544        # 1) know that it's a valid command, and 2) know which options
     545        # it takes.
     546        try:
     547            cmd_class = self.get_command_class(command)
     548        except DistutilsModuleError, msg:
     549            raise DistutilsArgError, msg
     550
     551        # Require that the command class be derived from Command -- want
     552        # to be sure that the basic "command" interface is implemented.
     553        if not issubclass(cmd_class, Command):
     554            raise DistutilsClassError, \
     555                  "command class %s must subclass Command" % cmd_class
     556
     557        # Also make sure that the command object provides a list of its
     558        # known options.
     559        if not (hasattr(cmd_class, 'user_options') and
     560                type(cmd_class.user_options) is ListType):
     561            raise DistutilsClassError, \
     562                  ("command class %s must provide " +
     563                   "'user_options' attribute (a list of tuples)") % \
     564                  cmd_class
     565
     566        # If the command class has a list of negative alias options,
     567        # merge it in with the global negative aliases.
     568        negative_opt = self.negative_opt
     569        if hasattr(cmd_class, 'negative_opt'):
     570            negative_opt = copy(negative_opt)
     571            negative_opt.update(cmd_class.negative_opt)
     572
     573        # Check for help_options in command class.  They have a different
     574        # format (tuple of four) so we need to preprocess them here.
     575        if (hasattr(cmd_class, 'help_options') and
     576            type(cmd_class.help_options) is ListType):
     577            help_options = fix_help_options(cmd_class.help_options)
     578        else:
     579            help_options = []
     580
     581
     582        # All commands support the global options too, just by adding
     583        # in 'global_options'.
     584        parser.set_option_table(self.global_options +
     585                                cmd_class.user_options +
     586                                help_options)
     587        parser.set_negative_aliases(negative_opt)
     588        (args, opts) = parser.getopt(args[1:])
     589        if hasattr(opts, 'help') and opts.help:
     590            self._show_help(parser, display_options=0, commands=[cmd_class])
     591            return
     592
     593        if (hasattr(cmd_class, 'help_options') and
     594            type(cmd_class.help_options) is ListType):
     595            help_option_found=0
     596            for (help_option, short, desc, func) in cmd_class.help_options:
     597                if hasattr(opts, parser.get_attr_name(help_option)):
     598                    help_option_found=1
     599                    #print "showing help for option %s of command %s" % \
     600                    #      (help_option[0],cmd_class)
     601
     602                    if callable(func):
     603                        func()
     604                    else:
     605                        raise DistutilsClassError(
     606                            "invalid help function %r for help option '%s': "
     607                            "must be a callable object (function, etc.)"
     608                            % (func, help_option))
     609
     610            if help_option_found:
     611                return
     612
     613        # Put the options from the command-line into their official
     614        # holding pen, the 'command_options' dictionary.
     615        opt_dict = self.get_option_dict(command)
     616        for (name, value) in vars(opts).items():
     617            opt_dict[name] = ("command line", value)
     618
     619        return args
     620
     621    # _parse_command_opts ()
     622
     623    def finalize_options (self):
     624        """Set final values for all the options on the Distribution
     625        instance, analogous to the .finalize_options() method of Command
     626        objects.
     627        """
     628
     629        keywords = self.metadata.keywords
     630        if keywords is not None:
     631            if type(keywords) is StringType:
     632                keywordlist = string.split(keywords, ',')
     633                self.metadata.keywords = map(string.strip, keywordlist)
     634
     635        platforms = self.metadata.platforms
     636        if platforms is not None:
     637            if type(platforms) is StringType:
     638                platformlist = string.split(platforms, ',')
     639                self.metadata.platforms = map(string.strip, platformlist)
     640
     641    def _show_help (self,
     642                    parser,
     643                    global_options=1,
     644                    display_options=1,
     645                    commands=[]):
     646        """Show help for the setup script command-line in the form of
     647        several lists of command-line options.  'parser' should be a
     648        FancyGetopt instance; do not expect it to be returned in the
     649        same state, as its option table will be reset to make it
     650        generate the correct help text.
     651
     652        If 'global_options' is true, lists the global options:
     653        --verbose, --dry-run, etc.  If 'display_options' is true, lists
     654        the "display-only" options: --name, --version, etc.  Finally,
     655        lists per-command help for every command name or command class
     656        in 'commands'.
     657        """
     658        # late import because of mutual dependence between these modules
     659        from distutils.core import gen_usage
     660        from distutils.cmd import Command
     661
     662        if global_options:
     663            if display_options:
     664                options = self._get_toplevel_options()
     665            else:
     666                options = self.global_options
     667            parser.set_option_table(options)
     668            parser.print_help(self.common_usage + "\nGlobal options:")
     669            print
     670
     671        if display_options:
     672            parser.set_option_table(self.display_options)
     673            parser.print_help(
     674                "Information display options (just display " +
     675                "information, ignore any commands)")
     676            print
     677
     678        for command in self.commands:
     679            if type(command) is ClassType and issubclass(command, Command):
     680                klass = command
     681            else:
     682                klass = self.get_command_class(command)
     683            if (hasattr(klass, 'help_options') and
     684                type(klass.help_options) is ListType):
     685                parser.set_option_table(klass.user_options +
     686                                        fix_help_options(klass.help_options))
     687            else:
     688                parser.set_option_table(klass.user_options)
     689            parser.print_help("Options for '%s' command:" % klass.__name__)
     690            print
     691
     692        print gen_usage(self.script_name)
     693        return
     694
     695    # _show_help ()
     696
     697
     698    def handle_display_options (self, option_order):
     699        """If there were any non-global "display-only" options
     700        (--help-commands or the metadata display options) on the command
     701        line, display the requested info and return true; else return
     702        false.
     703        """
     704        from distutils.core import gen_usage
     705
     706        # User just wants a list of commands -- we'll print it out and stop
     707        # processing now (ie. if they ran "setup --help-commands foo bar",
     708        # we ignore "foo bar").
     709        if self.help_commands:
     710            self.print_commands()
     711            print
     712            print gen_usage(self.script_name)
     713            return 1
     714
     715        # If user supplied any of the "display metadata" options, then
     716        # display that metadata in the order in which the user supplied the
     717        # metadata options.
     718        any_display_options = 0
     719        is_display_option = {}
     720        for option in self.display_options:
     721            is_display_option[option[0]] = 1
     722
     723        for (opt, val) in option_order:
     724            if val and is_display_option.get(opt):
     725                opt = translate_longopt(opt)
     726                value = getattr(self.metadata, "get_"+opt)()
     727                if opt in ['keywords', 'platforms']:
     728                    print string.join(value, ',')
     729                elif opt in ('classifiers', 'provides', 'requires',
     730                             'obsoletes'):
     731                    print string.join(value, '\n')
     732                else:
     733                    print value
     734                any_display_options = 1
     735
     736        return any_display_options
     737
     738    # handle_display_options()
     739
     740    def print_command_list (self, commands, header, max_length):
     741        """Print a subset of the list of all commands -- used by
     742        'print_commands()'.
     743        """
     744
     745        print header + ":"
     746
     747        for cmd in commands:
     748            klass = self.cmdclass.get(cmd)
     749            if not klass:
     750                klass = self.get_command_class(cmd)
     751            try:
     752                description = klass.description
     753            except AttributeError:
     754                description = "(no description available)"
     755
     756            print "  %-*s  %s" % (max_length, cmd, description)
     757
     758    # print_command_list ()
     759
     760
     761    def print_commands (self):
     762        """Print out a help message listing all available commands with a
     763        description of each.  The list is divided into "standard commands"
     764        (listed in distutils.command.__all__) and "extra commands"
     765        (mentioned in self.cmdclass, but not a standard command).  The
     766        descriptions come from the command class attribute
     767        'description'.
     768        """
     769
     770        import distutils.command
     771        std_commands = distutils.command.__all__
     772        is_std = {}
     773        for cmd in std_commands:
     774            is_std[cmd] = 1
     775
     776        extra_commands = []
     777        for cmd in self.cmdclass.keys():
     778            if not is_std.get(cmd):
     779                extra_commands.append(cmd)
     780
     781        max_length = 0
     782        for cmd in (std_commands + extra_commands):
     783            if len(cmd) > max_length:
     784                max_length = len(cmd)
     785
     786        self.print_command_list(std_commands,
     787                                "Standard commands",
     788                                max_length)
     789        if extra_commands:
     790            print
     791            self.print_command_list(extra_commands,
     792                                    "Extra commands",
     793                                    max_length)
     794
     795    # print_commands ()
     796
     797    def get_command_list (self):
     798        """Get a list of (command, description) tuples.
     799        The list is divided into "standard commands" (listed in
     800        distutils.command.__all__) and "extra commands" (mentioned in
     801        self.cmdclass, but not a standard command).  The descriptions come
     802        from the command class attribute 'description'.
     803        """
     804        # Currently this is only used on Mac OS, for the Mac-only GUI
     805        # Distutils interface (by Jack Jansen)
     806
     807        import distutils.command
     808        std_commands = distutils.command.__all__
     809        is_std = {}
     810        for cmd in std_commands:
     811            is_std[cmd] = 1
     812
     813        extra_commands = []
     814        for cmd in self.cmdclass.keys():
     815            if not is_std.get(cmd):
     816                extra_commands.append(cmd)
     817
     818        rv = []
     819        for cmd in (std_commands + extra_commands):
     820            klass = self.cmdclass.get(cmd)
     821            if not klass:
     822                klass = self.get_command_class(cmd)
     823            try:
     824                description = klass.description
     825            except AttributeError:
     826                description = "(no description available)"
     827            rv.append((cmd, description))
     828        return rv
     829
     830    # -- Command class/object methods ----------------------------------
     831
     832    def get_command_packages (self):
     833        """Return a list of packages from which commands are loaded."""
     834        pkgs = self.command_packages
     835        if not isinstance(pkgs, type([])):
     836            pkgs = string.split(pkgs or "", ",")
     837            for i in range(len(pkgs)):
     838                pkgs[i] = string.strip(pkgs[i])
     839            pkgs = filter(None, pkgs)
     840            if "distutils.command" not in pkgs:
     841                pkgs.insert(0, "distutils.command")
     842            self.command_packages = pkgs
     843        return pkgs
     844
     845    def get_command_class (self, command):
     846        """Return the class that implements the Distutils command named by
     847        'command'.  First we check the 'cmdclass' dictionary; if the
     848        command is mentioned there, we fetch the class object from the
     849        dictionary and return it.  Otherwise we load the command module
     850        ("distutils.command." + command) and fetch the command class from
     851        the module.  The loaded class is also stored in 'cmdclass'
     852        to speed future calls to 'get_command_class()'.
     853
     854        Raises DistutilsModuleError if the expected module could not be
     855        found, or if that module does not define the expected class.
     856        """
     857        klass = self.cmdclass.get(command)
     858        if klass:
     859            return klass
     860
     861        for pkgname in self.get_command_packages():
     862            module_name = "%s.%s" % (pkgname, command)
     863            klass_name = command
     864
     865            try:
     866                __import__ (module_name)
     867                module = sys.modules[module_name]
     868            except ImportError:
     869                continue
     870
     871            try:
     872                klass = getattr(module, klass_name)
     873            except AttributeError:
     874                raise DistutilsModuleError, \
     875                      "invalid command '%s' (no class '%s' in module '%s')" \
     876                      % (command, klass_name, module_name)
     877
     878            self.cmdclass[command] = klass
     879            return klass
     880
     881        raise DistutilsModuleError("invalid command '%s'" % command)
     882
     883
     884    # get_command_class ()
     885
     886    def get_command_obj (self, command, create=1):
     887        """Return the command object for 'command'.  Normally this object
     888        is cached on a previous call to 'get_command_obj()'; if no command
     889        object for 'command' is in the cache, then we either create and
     890        return it (if 'create' is true) or return None.
     891        """
     892        cmd_obj = self.command_obj.get(command)
     893        if not cmd_obj and create:
     894            if DEBUG:
     895                print "Distribution.get_command_obj(): " \
     896                      "creating '%s' command object" % command
     897
     898            klass = self.get_command_class(command)
     899            cmd_obj = self.command_obj[command] = klass(self)
     900            self.have_run[command] = 0
     901
     902            # Set any options that were supplied in config files
     903            # or on the command line.  (NB. support for error
     904            # reporting is lame here: any errors aren't reported
     905            # until 'finalize_options()' is called, which means
     906            # we won't report the source of the error.)
     907            options = self.command_options.get(command)
     908            if options:
     909                self._set_command_options(cmd_obj, options)
     910
     911        return cmd_obj
     912
     913    def _set_command_options (self, command_obj, option_dict=None):
     914        """Set the options for 'command_obj' from 'option_dict'.  Basically
     915        this means copying elements of a dictionary ('option_dict') to
     916        attributes of an instance ('command').
     917
     918        'command_obj' must be a Command instance.  If 'option_dict' is not
     919        supplied, uses the standard option dictionary for this command
     920        (from 'self.command_options').
     921        """
     922        command_name = command_obj.get_command_name()
     923        if option_dict is None:
     924            option_dict = self.get_option_dict(command_name)
     925
     926        if DEBUG: print "  setting options for '%s' command:" % command_name
     927        for (option, (source, value)) in option_dict.items():
     928            if DEBUG: print "    %s = %s (from %s)" % (option, value, source)
     929            try:
     930                bool_opts = map(translate_longopt, command_obj.boolean_options)
     931            except AttributeError:
     932                bool_opts = []
     933            try:
     934                neg_opt = command_obj.negative_opt
     935            except AttributeError:
     936                neg_opt = {}
     937
     938            try:
     939                is_string = type(value) is StringType
     940                if option in neg_opt and is_string:
     941                    setattr(command_obj, neg_opt[option], not strtobool(value))
     942                elif option in bool_opts and is_string:
     943                    setattr(command_obj, option, strtobool(value))
     944                elif hasattr(command_obj, option):
     945                    setattr(command_obj, option, value)
     946                else:
     947                    raise DistutilsOptionError, \
     948                          ("error in %s: command '%s' has no such option '%s'"
     949                           % (source, command_name, option))
     950            except ValueError, msg:
     951                raise DistutilsOptionError, msg
     952
     953    def reinitialize_command (self, command, reinit_subcommands=0):
     954        """Reinitializes a command to the state it was in when first
     955        returned by 'get_command_obj()': ie., initialized but not yet
     956        finalized.  This provides the opportunity to sneak option
     957        values in programmatically, overriding or supplementing
     958        user-supplied values from the config files and command line.
     959        You'll have to re-finalize the command object (by calling
     960        'finalize_options()' or 'ensure_finalized()') before using it for
     961        real.
     962
     963        'command' should be a command name (string) or command object.  If
     964        'reinit_subcommands' is true, also reinitializes the command's
     965        sub-commands, as declared by the 'sub_commands' class attribute (if
     966        it has one).  See the "install" command for an example.  Only
     967        reinitializes the sub-commands that actually matter, ie. those
     968        whose test predicates return true.
     969
     970        Returns the reinitialized command object.
     971        """
     972        from distutils.cmd import Command
     973        if not isinstance(command, Command):
     974            command_name = command
     975            command = self.get_command_obj(command_name)
     976        else:
     977            command_name = command.get_command_name()
     978
     979        if not command.finalized:
     980            return command
     981        command.initialize_options()
     982        command.finalized = 0
     983        self.have_run[command_name] = 0
     984        self._set_command_options(command)
     985
     986        if reinit_subcommands:
     987            for sub in command.get_sub_commands():
     988                self.reinitialize_command(sub, reinit_subcommands)
     989
     990        return command
     991
     992
     993    # -- Methods that operate on the Distribution ----------------------
     994
     995    def announce (self, msg, level=1):
     996        log.debug(msg)
     997
     998    def run_commands (self):
     999        """Run each command that was seen on the setup script command line.
     1000        Uses the list of commands found and cache of command objects
     1001        created by 'get_command_obj()'.
     1002        """
     1003        for cmd in self.commands:
     1004            self.run_command(cmd)
     1005
     1006
     1007    # -- Methods that operate on its Commands --------------------------
     1008
     1009    def run_command (self, command):
     1010        """Do whatever it takes to run a command (including nothing at all,
     1011        if the command has already been run).  Specifically: if we have
     1012        already created and run the command named by 'command', return
     1013        silently without doing anything.  If the command named by 'command'
     1014        doesn't even have a command object yet, create one.  Then invoke
     1015        'run()' on that command object (or an existing one).
     1016        """
     1017        # Already been here, done that? then return silently.
     1018        if self.have_run.get(command):
     1019            return
     1020
     1021        log.info("running %s", command)
     1022        cmd_obj = self.get_command_obj(command)
     1023        cmd_obj.ensure_finalized()
     1024        cmd_obj.run()
     1025        self.have_run[command] = 1
     1026
     1027
     1028    # -- Distribution query methods ------------------------------------
     1029
     1030    def has_pure_modules (self):
     1031        return len(self.packages or self.py_modules or []) > 0
     1032
     1033    def has_ext_modules (self):
     1034        return self.ext_modules and len(self.ext_modules) > 0
     1035
     1036    def has_c_libraries (self):
     1037        return self.libraries and len(self.libraries) > 0
     1038
     1039    def has_modules (self):
     1040        return self.has_pure_modules() or self.has_ext_modules()
     1041
     1042    def has_headers (self):
     1043        return self.headers and len(self.headers) > 0
     1044
     1045    def has_scripts (self):
     1046        return self.scripts and len(self.scripts) > 0
     1047
     1048    def has_data_files (self):
     1049        return self.data_files and len(self.data_files) > 0
     1050
     1051    def is_pure (self):
     1052        return (self.has_pure_modules() and
     1053                not self.has_ext_modules() and
     1054                not self.has_c_libraries())
     1055
     1056    # -- Metadata query methods ----------------------------------------
     1057
     1058    # If you're looking for 'get_name()', 'get_version()', and so forth,
     1059    # they are defined in a sneaky way: the constructor binds self.get_XXX
     1060    # to self.metadata.get_XXX.  The actual code is in the
     1061    # DistributionMetadata class, below.
     1062
     1063# class Distribution
     1064
     1065
     1066class DistributionMetadata:
     1067    """Dummy class to hold the distribution meta-data: name, version,
     1068    author, and so forth.
     1069    """
     1070
     1071    _METHOD_BASENAMES = ("name", "version", "author", "author_email",
     1072                         "maintainer", "maintainer_email", "url",
     1073                         "license", "description", "long_description",
     1074                         "keywords", "platforms", "fullname", "contact",
     1075                         "contact_email", "license", "classifiers",
     1076                         "download_url",
     1077                         # PEP 314
     1078                         "provides", "requires", "obsoletes",
     1079                         )
     1080
     1081    def __init__ (self):
     1082        self.name = None
     1083        self.version = None
     1084        self.author = None
     1085        self.author_email = None
     1086        self.maintainer = None
     1087        self.maintainer_email = None
     1088        self.url = None
     1089        self.license = None
     1090        self.description = None
     1091        self.long_description = None
     1092        self.keywords = None
     1093        self.platforms = None
     1094        self.classifiers = None
     1095        self.download_url = None
     1096        # PEP 314
     1097        self.provides = None
     1098        self.requires = None
     1099        self.obsoletes = None
     1100
     1101    def write_pkg_info (self, base_dir):
     1102        """Write the PKG-INFO file into the release tree.
     1103        """
     1104        pkg_info = open( os.path.join(base_dir, 'PKG-INFO'), 'w')
     1105
     1106        self.write_pkg_file(pkg_info)
     1107
     1108        pkg_info.close()
     1109
     1110    # write_pkg_info ()
     1111
     1112    def write_pkg_file (self, file):
     1113        """Write the PKG-INFO format data to a file object.
     1114        """
     1115        version = '1.0'
     1116        if self.provides or self.requires or self.obsoletes:
     1117            version = '1.1'
     1118
     1119        self._write_field(file, 'Metadata-Version', version)
     1120        self._write_field(file, 'Name', self.get_name())
     1121        self._write_field(file, 'Version', self.get_version())
     1122        self._write_field(file, 'Summary', self.get_description())
     1123        self._write_field(file, 'Home-page', self.get_url())
     1124        self._write_field(file, 'Author', self.get_contact())
     1125        self._write_field(file, 'Author-email', self.get_contact_email())
     1126        self._write_field(file, 'License', self.get_license())
     1127        if self.download_url:
     1128            self._write_field(file, 'Download-URL', self.download_url)
     1129
     1130        long_desc = rfc822_escape( self.get_long_description())
     1131        self._write_field(file, 'Description', long_desc)
     1132
     1133        keywords = string.join( self.get_keywords(), ',')
     1134        if keywords:
     1135            self._write_field(file, 'Keywords', keywords)
     1136
     1137        self._write_list(file, 'Platform', self.get_platforms())
     1138        self._write_list(file, 'Classifier', self.get_classifiers())
     1139
     1140        # PEP 314
     1141        self._write_list(file, 'Requires', self.get_requires())
     1142        self._write_list(file, 'Provides', self.get_provides())
     1143        self._write_list(file, 'Obsoletes', self.get_obsoletes())
     1144
     1145    def _write_field(self, file, name, value):
     1146
     1147        if isinstance(value, unicode):
     1148            value = value.encode(PKG_INFO_ENCODING)
     1149        else:
     1150            value = str(value)
     1151        file.write('%s: %s\n' % (name, value))
     1152
     1153    def _write_list (self, file, name, values):
     1154
     1155        for value in values:
     1156            self._write_field(file, name, value)
     1157
     1158    # -- Metadata query methods ----------------------------------------
     1159
     1160    def get_name (self):
     1161        return self.name or "UNKNOWN"
     1162
     1163    def get_version(self):
     1164        return self.version or "0.0.0"
     1165
     1166    def get_fullname (self):
     1167        return "%s-%s" % (self.get_name(), self.get_version())
     1168
     1169    def get_author(self):
     1170        return self.author or "UNKNOWN"
     1171
     1172    def get_author_email(self):
     1173        return self.author_email or "UNKNOWN"
     1174
     1175    def get_maintainer(self):
     1176        return self.maintainer or "UNKNOWN"
     1177
     1178    def get_maintainer_email(self):
     1179        return self.maintainer_email or "UNKNOWN"
     1180
     1181    def get_contact(self):
     1182        return (self.maintainer or
     1183                self.author or
     1184                "UNKNOWN")
     1185
     1186    def get_contact_email(self):
     1187        return (self.maintainer_email or
     1188                self.author_email or
     1189                "UNKNOWN")
     1190
     1191    def get_url(self):
     1192        return self.url or "UNKNOWN"
     1193
     1194    def get_license(self):
     1195        return self.license or "UNKNOWN"
     1196    get_licence = get_license
     1197
     1198    def get_description(self):
     1199        return self.description or "UNKNOWN"
     1200
     1201    def get_long_description(self):
     1202        return self.long_description or "UNKNOWN"
     1203
     1204    def get_keywords(self):
     1205        return self.keywords or []
     1206
     1207    def get_platforms(self):
     1208        return self.platforms or ["UNKNOWN"]
     1209
     1210    def get_classifiers(self):
     1211        return self.classifiers or []
     1212
     1213    def get_download_url(self):
     1214        return self.download_url or "UNKNOWN"
     1215
     1216    # PEP 314
     1217
     1218    def get_requires(self):
     1219        return self.requires or []
     1220
     1221    def set_requires(self, value):
     1222        import distutils.versionpredicate
     1223        for v in value:
     1224            distutils.versionpredicate.VersionPredicate(v)
     1225        self.requires = value
     1226
     1227    def get_provides(self):
     1228        return self.provides or []
     1229
     1230    def set_provides(self, value):
     1231        value = [v.strip() for v in value]
     1232        for v in value:
     1233            import distutils.versionpredicate
     1234            distutils.versionpredicate.split_provision(v)
     1235        self.provides = value
     1236
     1237    def get_obsoletes(self):
     1238        return self.obsoletes or []
     1239
     1240    def set_obsoletes(self, value):
     1241        import distutils.versionpredicate
     1242        for v in value:
     1243            distutils.versionpredicate.VersionPredicate(v)
     1244        self.obsoletes = value
     1245
     1246# class DistributionMetadata
     1247
     1248
     1249def fix_help_options (options):
     1250    """Convert a 4-tuple 'help_options' list as found in various command
     1251    classes to the 3-tuple form required by FancyGetopt.
     1252    """
     1253    new_options = []
     1254    for help_tuple in options:
     1255        new_options.append(help_tuple[0:3])
     1256    return new_options
     1257
     1258
     1259if __name__ == "__main__":
     1260    dist = Distribution()
     1261    print "ok"
  • patches/dist.py.patch

    diff -u -N --recursive python-2.6.4.p9/patches/dist.py.patch python-2.6.4.p10/patches/dist.py.patch
    old new  
     1--- dist.py.orig        2010-01-24 01:33:32.000000000 +0100
     2+++ dist.py     2010-07-20 10:42:23.000000000 +0200
     3@@ -283,6 +283,10 @@
     4                 if arg == '--no-user-cfg':
     5                     self.want_user_cfg = False
     6                     break
     7+       
     8+        if 'DISTUTILS_NO_USER_CFG' in os.environ:
     9+            if os.environ['DISTUTILS_NO_USER_CFG'] is not None:
     10+                self.want_user_cfg = False
     11 
     12         self.finalize_options()
     13 
  • patches/NEWS

    diff -u -N --recursive python-2.6.4.p9/patches/NEWS python-2.6.4.p10/patches/NEWS
    old new  
     1+++++++++++
     2Python News
     3+++++++++++
     4
     5(editors: check NEWS.help for information about editing NEWS using ReST.)
     6
     7What's New in Python 2.6.4 final?
     8=================================
     9
     10*Release date: 25-Oct-2009*
     11
     12Core and Builtins
     13-----------------
     14
     15Library
     16-------
     17
     18
     19What's New in Python 2.6.4rc2?
     20==============================
     21
     22*Release date: 18-Oct-2009*
     23
     24Core and Builtins
     25-----------------
     26
     27Library
     28-------
     29
     30- Issue #7115: Fixed the extension module builds that is failing when using
     31  paths in the extension name instead of dotted names.
     32
     33- Issue #7120: logging: Removed import of multiprocessing which is causing
     34  crash in GAE.
     35
     36- Issue #7149: fix exception in urllib when detecting proxy settings on OSX.
     37
     38
     39What's New in Python 2.6.4rc1?
     40==============================
     41
     42*Release date: 07-Oct-2009*
     43
     44Core and Builtins
     45-----------------
     46
     47- Issue #7019: Raise ValueError when unmarshalling bad long data, instead
     48  of producing internally inconsistent Python longs.
     49
     50Library
     51-------
     52
     53- Issue #7068: Fixed the partial renaming that occured in r72594.
     54
     55- Issue #7064: Fixed the incompatibility with Setuptools in distutils
     56  when running the build_ext command.
     57
     58- Issue #7052: Removed nonexisting NullHandler from logging.__all__.
     59
     60- Issue #7039: Fixed distutils.tests.test_sysconfig when running on
     61  installation with no build.
     62
     63Tests
     64-----
     65
     66- Issue #7042: Fix test_signal (test_itimer_virtual) failure on OS X 10.6.
     67
     68
     69What's New in Python 2.6.3
     70==========================
     71
     72*Release date: 02-Oct-2009*
     73
     74What's New in Python 2.6.3rc1
     75=============================
     76
     77*Release date: 29-Sep-2009*
     78
     79Core and Builtins
     80-----------------
     81
     82- Issue #5329: Fix os.popen* regression from 2.5 with commands as a
     83  sequence running through the shell.  Patch by Jean-Paul Calderone
     84  and Jani Hakala.
     85
     86- Issue #6990: Fix threading.local subclasses leaving old state around
     87  after a reference cycle GC which could be recycled by new locals.
     88
     89- Issue #6922: Fix an infinite loop when trying to decode an invalid
     90  UTF-32 stream with a non-raising error handler like "replace" or "ignore".
     91
     92- Issue #1590864: Fix potential deadlock when mixing threads and fork().
     93
     94- Issue #6844: Do not emit DeprecationWarnings when accessing a "message"
     95  attribute on exceptions that was set explicitly.
     96
     97- Issue #6846: Fix bug where bytearray.pop() returns negative integers.
     98
     99- Issue #6707: dir() on an uninitialized module caused a crash.
     100
     101- Issue #6540: Fixed crash for bytearray.translate() with invalid parameters.
     102
     103- Issue #6573: set.union() stopped processing inputs if an instance of self
     104  occurred in the argument chain.
     105
     106- Issue #6070: On posix platforms import no longer copies the execute bit
     107  from the .py file to the .pyc file if it is set.
     108
     109- Issue #4547: When debugging a very large function, it was not always
     110  possible to update the lineno attribute of the current frame.
     111
     112- Issue #4618: When unicode arguments are passed to print(), the default
     113  separator and end should be unicode also.
     114
     115- Issue #6119: Fixed a incorrect Py3k warning about order comparisons of
     116  builtin functions and methods.
     117
     118- Issue #5330: C functions called with keyword arguments were not reported by
     119  the various profiling modules (profile, cProfile). Patch by Hagen Fürstenau.
     120
     121- Issue #6089: str.format can raise SystemError with certain invalid
     122  field specifiers.
     123
     124- Issue #5994: the marshal module now has docstrings.
     125
     126- Issue #5981: Fix two minor inf/nan issues in float.fromhex: (1) inf
     127  and nan strings with trailing whitespace were incorrectly rejected
     128  and (2) the interpretation of fromhex('-nan') didn't match that of
     129  float('-nan').
     130
     131- Issue #5890: in subclasses of 'property' the __doc__ attribute was
     132  shadowed by classtype's, even if it was None.  property now
     133  inserts the __doc__ into the subclass instance __dict__.
     134
     135- Issue #5724: (See also issue #4575.) Fix Py_IS_INFINITY macro to
     136  work correctly on x87 FPUs: it now forces its argument to double
     137  before testing for infinity.
     138
     139- Issue #4971: Fix titlecase for characters that are their own
     140  titlecase, but not their own uppercase.
     141
     142- Issue #5829: complex('1e-500') no longer raises an exception
     143
     144- Issue #5787: object.__getattribute__(some_type, "__bases__") segfaulted on
     145  some builtin types.
     146
     147- Issue #5283: Setting __class__ in __del__ caused a segfault.
     148
     149- Issue #5759: float() didn't call __float__ on str subclasses.
     150
     151- Issue #5108: Handle %s like %S and %R in PyUnicode_FromFormatV(): Call
     152  PyUnicode_DecodeUTF8() once, remember the result and output it in a second
     153  step. This avoids problems with counting UTF-8 bytes that ignores the effect
     154  of using the replace error handler in PyUnicode_DecodeUTF8().
     155
     156Library
     157-------
     158
     159- Issue #6894: Fixed the issue urllib2 doesn't respect "no_proxy" environment
     160
     161- Issue #6790: Make it possible again to pass an `array.array` to
     162  `httplib.HTTPConnection.send`. Patch by Kirk McDonald.
     163
     164- Issue #6236, #6348: Fix various failures in the `io` module under AIX
     165  and other platforms, when using a non-gcc compiler. Patch by egreen.
     166
     167- Issue #6851: Fix urllib.urlopen crash on secondairy threads on OSX 10.6
     168
     169- Issue #6947: Fix distutils test on windows. Patch by Hirokazu Yamamoto.
     170
     171- Issue #4606: Passing 'None' if ctypes argtype is set to POINTER(...)
     172  does now always result in NULL.
     173
     174- Issue #5042: ctypes Structure sub-subclass does now initialize
     175  correctly with base class positional arguments.
     176
     177- Issue #6938: Fix a TypeError in string formatting of a multiprocessing
     178  debug message.
     179
     180- Issue #6635: Fix profiler printing usage message.
     181
     182- Issue #6795: int(Decimal('nan')) now raises ValueError instead of
     183  returning NaN or raising InvalidContext.  Also, fix infinite recursion
     184  in long(Decimal('nan')).
     185
     186- Issue #6850: Fix bug in Decimal._parse_format_specifier for formats
     187  with no type specifier.
     188
     189- Issue #4937: plat-mac/bundlebuilder revers to non-existing version.plist
     190
     191- Issue #6838: Use a list to accumulate the value instead of
     192  repeatedly concatenating strings in httplib's
     193  HTTPResponse._read_chunked providing a significant speed increase
     194  when downloading large files servend with a Transfer-Encoding of 'chunked'.
     195
     196- Issue #6794: Fix Decimal.compare_total and Decimal.compare_total_mag: NaN
     197  payloads are now ordered by integer value rather than lexicographically.
     198
     199- Issue #6117: Fix O(n**2) performance degradation when outputting lots of
     200  small data on a buffered socket.socket.makefile() object.
     201
     202- Issue #6637: defaultdict.copy() did not work when the default factory
     203  was left unspecified.  Also, the eval/repr round-trip would fail when
     204  the default_factory was None.
     205
     206- Issue #1424152: Fix for httplib, urllib2 to support SSL while working through
     207  proxy. Original patch by Christopher Li, changes made by Senthil Kumaran.
     208
     209- Issues #5155, 5313, 5331: multiprocessing.Process._bootstrap was
     210  unconditionally calling "os.close(sys.stdin.fileno())" resulting in file
     211  descriptor errors
     212
     213- Issue #6415: Fixed warnings.warn sagfault on bad formatted string.
     214
     215- Issue #6344: Fixed a crash of mmap.read() when passed a negative argument.
     216
     217- Issue #5230: pydoc would report no documentation found if a module generated
     218  a 'not found' import error when loaded; it now reports the import errors.
     219  Thanks to Lucas Prado Melo for initial fix and collaboration on the tests.
     220
     221- Issue #6274: Fixed possible file descriptors leak in subprocess.py
     222
     223- Issue #6271: mmap tried to close invalid file handle (-1) when annonymous.
     224  (On Unix)
     225
     226- Issue #6258: Support AMD64 in bdist_msi.
     227
     228- Issue #5262: Fixed bug in next rollover time computation in
     229  TimedRotatingFileHandler.
     230
     231- Issue #6121: pydoc now ignores leading and trailing spaces in the
     232  argument to the 'help' function.
     233
     234- Issue #6050: Don't fail extracting a directory from a zipfile if
     235  the directory already exists.
     236
     237- collections.namedtuple() was not working with the following field
     238  names:  cls, self, tuple, itemgetter, and property.
     239
     240- Issue #1309352: fcntl now converts its third arguments to a C `long` rather
     241  than an int, which makes some operations possible under 64-bit Linux (e.g.
     242  DN_MULTISHOT with F_NOTIFY).
     243
     244- Issue #1983: Fix functions taking or returning a process identifier to use
     245  the dedicated C type ``pid_t`` instead of a C ``int``. Some platforms have
     246  a process identifier type wider than the standard C integer type.
     247
     248- Issue #4066: smtplib.SMTP_SSL._get_socket now correctly returns the socket.
     249  Patch by Farhan Ahmad, test by Marcin Bachry.
     250
     251- Issue #1655: Make imaplib IPv6-capable. Patch by Derek Morr.
     252
     253- Issue #1664: Make nntplib IPv6-capable. Patch by Derek Morr.
     254
     255- Issue #5971: StreamHandler.handleError now swallows IOErrors which occur when
     256  trying to print a traceback.
     257
     258- Issue 5955: aifc's close method did not close the file it wrapped,
     259  now it does.  This also means getfp method now returns the real fp.
     260
     261- Issue #4875: On win32, ctypes.util.find_library does no longer
     262  return directories.
     263
     264- Issue #5692: In :class:`zipfile.Zipfile`, fix wrong path calculation when
     265  extracting a file to the root directory.
     266
     267- Issue #2245: aifc now skips chunk types it doesn't recognize, per spec.
     268
     269- Issue #4305: ctypes should now build again on mipsel-linux-gnu
     270
     271- Issue #5853: calling a function of the mimetypes module from several threads
     272  at once could hit the recursion limit if the mimetypes database hadn't been
     273  initialized before.
     274
     275- Issue #5041: ctypes does now allow pickling wide character.
     276
     277- Issue #5768: Fixed bug in Unicode output logic and test case for same.
     278
     279- Issue #1161031: fix readwrite select flag handling: POLLPRI now
     280  results in a handle_expt_event call, not handle_read_event, and POLLERR
     281  and POLLNVAL now call handle_close, not handle_expt_event.  Also,
     282  dispatcher now has an 'ignore_log_types' attribute for suppressing
     283  log messages, which is set to 'warning' by default.
     284
     285- Issue #5828 (Invalid behavior of unicode.lower): Fixed bogus logic in
     286  makeunicodedata.py and regenerated the Unicode database (This fixes
     287  u'\u1d79'.lower() == '\x00').
     288
     289- Issue #1202: zipfile module would cause a DeprecationWarning when storing
     290  files with a CRC32 > 2**31-1.
     291
     292- Issue #6163: Fixed HP-UX runtime library dir options in
     293  distutils.unixcompiler. Initial patch by Sridhar Ratnakumar and
     294  Michael Haubenwallner.
     295
     296- Issue #4660: If a multiprocessing.JoinableQueue.put() was preempted, it was
     297  possible to get a spurious 'task_done() called too many times' error.
     298
     299- Issue #6595: The Decimal constructor now allows arbitrary Unicode
     300  decimal digits in input, as recommended by the standard.  Previously
     301  it was restricted to accepting [0-9].
     302
     303- Issue #6553: Fixed a crash in cPickle.load(), when given a file-like object
     304  containing incomplete data.
     305
     306- Issue #2622: Fixed an ImportError when importing email.messsage from a
     307  standalone application built with py2exe or py2app.
     308
     309- Issue #6455: Fixed test_build_ext under win32.
     310
     311- Issue #6403: Fixed package path usage in build_ext.
     312
     313- Issue #6287: Added the license field in Distutils documentation.
     314
     315- Issue #6263: Fixed syntax error in distutils.cygwincompiler.
     316
     317- Issue #5201: distutils.sysconfig.parse_makefile() now understands `$$`
     318  in Makefiles. This prevents compile errors when using syntax like:
     319  `LDFLAGS='-rpath=\$$LIB:/some/other/path'`. Patch by Floris Bruynooghe.
     320
     321- Issue #6062: In distutils, fixed the package option of build_ext. Feedback
     322  and tests on pywin32 by Tim Golden.
     323
     324- Issue #1309567: Fix linecache behavior of stripping subdirectories when
     325  looking for files given by a relative filename.
     326
     327- Issue #6046: Fixed the library extension when distutils build_ext is used
     328  inplace. Initial patch by Roumen Petrov.
     329
     330- Issue #6022: a test file was created in the current working directory by
     331  test_get_outputs in Distutils.
     332
     333- Issue #5977: distutils build_ext.get_outputs was not taking into account the
     334  inplace option. Initial patch by kxroberto.
     335
     336- Issue #5984: distutils.command.build_ext.check_extensions_list checks were
     337  broken for old-style extensions.
     338
     339- Issue #5854: Updated __all__ to include some missing names and remove some
     340  names which should not be exported.
     341
     342- Issue #5810: Fixed Distutils test_build_scripts so it uses
     343  sysconfig.get_config_vars.
     344
     345- Issue #6865: Fix reference counting issue in the initialization of the pwd
     346  module.
     347
     348Extension Modules
     349-----------------
     350
     351- Issue #6944: Fix a SystemError when socket.getnameinfo() was called
     352  with something other than a tuple as first argument.
     353
     354- Issue #6848: Fix curses module build failure on OS X 10.6.
     355
     356- Fix expat to not segfault with specially crafted input.
     357
     358- Issue #4873: Fix resource leaks in error cases of pwd and grp.
     359
     360Build
     361-----
     362
     363- Issue #6980: Fix ctypes build failure on armel-linux-gnueabi with
     364  -mfloat-abi=softfp.
     365
     366- Issue #6802: Fix build issues on MacOSX 10.6
     367
     368- Issue 5390: Add uninstall icon independent of whether file
     369  extensions are installed.
     370
     371- Issue #6094: Build correctly with Subversion 1.7.
     372
     373- Issue #5726: Make Modules/ld_so_aix return the actual exit code of the
     374  linker, rather than always exit successfully. Patch by Floris Bruynooghe.
     375
     376- Issue 5809: Specifying both --enable-framework and --enable-shared is
     377  an error. Configure now explicity tells you about this.
     378
     379Documentation
     380-------------
     381
     382- Issue #6556: Fixed the Distutils configuration files location explanation
     383  for Windows.
     384
     385- Issue #6801 : symmetric_difference_update also accepts |.
     386  Thanks to Carl Chenet.
     387
     388Tests
     389-----
     390
     391- Issue #5837: Certain sequences of calls to set() and unset() for
     392  support.EnvironmentVarGuard objects restored the environment variables
     393  incorrectly on __exit__.
     394
     395
     396What's New in Python 2.6.2
     397==========================
     398
     399*Release date: 14-Apr-2009*
     400
     401
     402What's New in Python 2.6.2 rc 1
     403===============================
     404
     405*Release date: 06-Apr-2009*
     406
     407Core and Builtins
     408-----------------
     409
     410- xrange() is now registered as a Sequence.
     411
     412- Fix a problem in PyErr_NormalizeException that leads to "undetected errors"
     413  when hitting the recursion limit under certain circumstances.
     414
     415- Issue #1665206: Remove the last eager import in _warnings.c and make it lazy.
     416
     417- Issue #4034: Fix weird attribute error messages of the traceback object. (As
     418  a result traceback.__members__ no longer exists.)
     419
     420- Issue #5247: Improve error message when unknown format codes are
     421  used when using str.format() with str, unicode, long, int, and
     422  float arguments.
     423
     424- Running Python with the -3 option now also warns about classic division
     425  for ints and longs.
     426
     427- Issue #5013: Fixed a bug in FileHandler which occurred when the delay
     428  parameter was set.
     429
     430- Issue 1242657: the __len__() and __length_hint__() calls in several tools
     431  were suppressing all exceptions.  These include list(), filter(), map(),
     432  zip(), and bytearray().
     433
     434- Issue #4935: The overflow checking code in the expandtabs() method common
     435  to str, bytes and bytearray could be optimized away by the compiler, letting
     436  the interpreter segfault instead of raising an error.
     437
     438- Issue #4915: Port sysmodule to Windows CE.
     439
     440- Issue #1180193: When importing a module from a .pyc (or .pyo) file with
     441  an existing .py counterpart, override the co_filename attributes of all
     442  code objects if the original filename is obsolete (which can happen if the
     443  file has been renamed, moved, or if it is accessed through different paths).
     444  Patch by Ziga Seilnacht and Jean-Paul Calderone.
     445
     446- Issue #4075: Use OutputDebugStringW in Py_FatalError.
     447
     448- Issue #4797: IOError.filename was not set when _fileio.FileIO failed to open
     449  file with `str' filename on Windows.
     450
     451- Issue #3680: Reference cycles created through a dict, set or deque iterator
     452  did not get collected.
     453
     454- Issue #4701: PyObject_Hash now implicitly calls PyType_Ready on types
     455  where the tp_hash and tp_dict slots are both NULL.
     456
     457- Issue #4764: With io.open, IOError.filename is set when trying to open a
     458  directory on POSIX systems.
     459
     460- Issue #4764: IOError.filename is set when trying to open a directory on POSIX
     461  systems.
     462
     463- Issue #4759: None is now allowed as the first argument of
     464  bytearray.translate().  It was always allowed for bytes.translate().
     465
     466- Issue #4759: fix a segfault for bytearray.translate(x, None).
     467
     468- Added test case to ensure attempts to read from a file opened for writing
     469  fail.
     470
     471- Issue #4597: Fixed several opcodes that weren't always propagating
     472  exceptions.
     473
     474- Issue #2467: gc.DEBUG_STATS reported invalid elapsed times. Also, always
     475  print elapsed times, not only when some objects are uncollectable /
     476  unreachable. Original patch by Neil Schemenauer.
     477
     478- Issue #4589: Fixed exception handling when the __exit__ function of a
     479  context manager returns a value that cannot be converted to a bool.
     480
     481- Issue #4233: Changed semantic of ``_fileio.FileIO``'s ``close()``
     482  method on file objects with closefd=False. The file descriptor is still
     483  kept open but the file object behaves like a closed file. The ``FileIO``
     484  object also got a new readonly attribute ``closefd``.
     485
     486- Issue #3689: The list reversed iterator now supports __length_hint__
     487  instead of __len__.  Behavior now matches other reversed iterators.
     488
     489- Issue #4509: Various issues surrounding resize of bytearray objects to
     490  which there are buffer exports.
     491
     492- Issue #3845: In PyRun_SimpleFileExFlags avoid invalid memory access with
     493  short file names.
     494
     495- Issue #5705: os.setuid() would not accept values > 2**31-1 but pwd.getpwnam()
     496  returned them on 64bit platforms.
     497
     498Library
     499-------
     500
     501- Issue #5741: don't disallow "%%" (which is an escape for "%") when setting
     502  a value in SafeConfigParser.
     503
     504- Issue #5731: Distutils bdist_wininst no longer worked on non-Windows
     505  platforms. Initial patch by Paul Moore.
     506
     507- Issue #1491431: Fixed distutils.filelist.glob_to_re for edge cases.
     508  Initial fix by Wayne Davison.
     509
     510- Issue 5471: Fix os.path.expanduser() for $HOME set to '/'.
     511
     512- Issue 1726172: fix IndexError in the case of and empty response in ftplib.
     513
     514- In Pdb, prevent the reassignment of __builtin__._ by sys.displayhook on
     515  printing out values.
     516
     517- Issue #4572: added SEEK_* symbolic constants to io module.
     518
     519- Issue #1665206 (partially): Move imports in cgitb to the top of the module
     520  instead of performing them in functions. Helps prevent import deadlocking in
     521  threads.
     522
     523- Issue #5647: MutableSet.__iand__() no longer mutates self during iteration.
     524
     525- Actually make the SimpleXMLRPCServer CGI handler work.
     526
     527- Issue 2625: added missing iteritems() call to the for loop in
     528  mailbox.MH.get_message().
     529
     530- Issue #5647: MutableSet.__iand__() no longer mutates self during iteration.
     531
     532- Issue #5619: Multiprocessing children disobey the debug flag and causes
     533  popups on windows buildbots. Patch applied to work around this issue.
     534
     535- Issue #5632: Thread.ident was None for the main thread and threads not
     536  created with the threading module.
     537
     538- Issue #5400: Added patch for multiprocessing on netbsd compilation/support
     539
     540- Fix and properly document the multiprocessing module's logging
     541  support, expose the internal levels and provide proper usage
     542  examples.
     543
     544- Issue #5387: Fixed mmap.move crash by integer overflow.
     545
     546- Issue #5261: Patch multiprocessing's semaphore.c to support context
     547  manager use: "with multiprocessing.Lock()" works now.
     548
     549- Issue #5177: Multiprocessing's SocketListener class now uses
     550  socket.SO_REUSEADDR on all connections so that the user no longer needs
     551  to wait 120 seconds for the socket to expire.
     552
     553- Adjusted _tkinter to compile without warnings when WITH_THREAD is not
     554  defined (part of issue #5035).
     555
     556- Issue #5561: Removed the sys.version_info shortcuts from platform's
     557  python_version() and python_version_tuple() since they produced different
     558  output compared to previous Python versions.
     559
     560- Issue #5068: Fixed the tarfile._BZ2Proxy.read() method that would loop
     561  forever on incomplete input. That caused tarfile.open() to hang when used
     562  with mode 'r' or 'r:bz2' and a fileobj argument that contained no data or
     563  partial bzip2 compressed data.
     564
     565- Issue #5536: urllib.urlretrieve makes sure to close the file it's writing to
     566  even if an exception occurs.
     567
     568- Fix Decimal.__format__ bug that swapped the meanings of the '<' and
     569  '>' alignment characters.
     570
     571- Issue #1222: locale.format() bug when the thousands separator is a space
     572  character.
     573
     574- Issue #4792: Prevent a segfault in _tkinter by using the
     575  guaranteed to be safe interp argument given to the PythonCmd in place of
     576  the Tcl interpreter taken from a PythonCmd_ClientData.
     577
     578- Issue #5193: Guarantee that Tkinter.Text.search returns a string.
     579
     580- Issue #5385: Fixed mmap crash after resize failure on windows.
     581
     582- Issue #5179: Fixed subprocess handle leak on failure on windows.
     583
     584- Issue #4308: httplib.IncompleteRead's repr doesn't include all of the data
     585  all ready received.
     586
     587- Issue #5401: Fixed a performance problem in mimetypes when ``from mimetypes
     588  import guess_extension`` was used.
     589
     590- Issue #1733986: Fixed mmap crash in accessing elements of second map object
     591  with same tagname but larger size than first map. (Windows)
     592
     593- Issue #5386: mmap.write_byte didn't check map size, so it could cause buffer
     594  overrun.
     595
     596- Issue #5292: Fixed mmap crash on its boundary access m[len(m)].
     597
     598- Issue #5282: Fixed mmap resize on 32bit windows and unix. When offset > 0,
     599  The file was resized to wrong size.
     600
     601- Issue #5287: Add exception handling around findCaller() call in logging to
     602  help out IronPython.
     603
     604- Issue #4524: distutils build_script command failed with --with-suffix=3.
     605  Initial patch by Amaury Forgeot d'Arc.
     606
     607- Issue #4998: The memory saving effect of __slots__ had been lost on Fractions
     608  which inherited from numbers.py which did not have __slots__ defined.  The
     609  numbers hierarchy now has its own __slots__ declarations.
     610
     611- Issue #5203: Fixed ctypes segfaults when passing a unicode string to a
     612  function without argtypes (only occurs if HAVE_USABLE_WCHAR_T is false).
     613
     614- Issue #3321: _multiprocessing.Connection() doesn't check handle; added checks
     615  for *nix machines for negative handles and large int handles. Without this
     616  check it is possible to segfault the interpreter.
     617
     618- Issue #4449: AssertionError in mp_benchmarks.py, caused by an underlying
     619  issue in sharedctypes.py.
     620
     621- Issue #3386: distutils.sysconfig.get_python_lib prefix argument was ignored
     622  under NT and OS2. Patch by Philip Jenvey.
     623
     624- Issue #4890: Handle empty text search pattern in Tkinter.Text.search.
     625
     626- Issue #5170: Fixed Unicode output bug in logging and added test case.
     627  This is a regression which did not occur in 2.5.
     628
     629- Partial fix to issue #1731706: memory leak in Tkapp_Call when calling
     630  from a thread different than the one that created the Tcl interpreter.
     631  Patch by Robert Hancock.
     632
     633- Issue #5132: Fixed trouble building extensions under Solaris with
     634  --enabled-shared activated. Initial patch by Dave Peterson.
     635
     636- Issue #1581476: Always use the Tcl global namespace when calling into Tcl.
     637
     638- Issue #2047: shutil.move() could believe that its destination path was
     639  inside its source path if it began with the same letters (e.g. "src" vs.
     640  "src.new").
     641
     642- Issue 4920:  Fixed .next() vs .__next__() issues in the ABCs for
     643  Iterator and MutableSet.
     644
     645- Issue 5021:  doctest.testfile() did not create __name__ and
     646  collections.namedtuple() relied on __name__ being defined.
     647
     648- Issue #3881: Help Tcl to load even when started through the
     649  unreadable local symlink to "Program Files" on Vista.
     650
     651- Issue #4710: Extract directories properly in the zipfile module;
     652  allow adding directories to a zipfile.
     653
     654- Issue #5008: When a file is opened in append mode with the new IO library,
     655  do an explicit seek to the end of file (so that e.g. tell() returns the
     656  file size rather than 0). This is consistent with the behaviour of the
     657  traditional 2.x file object.
     658
     659- Issue #3997: zipfiles generated with more than 65536 files could not be
     660  opened with other applications.
     661
     662- Issue 4816: itertools.combinations() and itertools.product were raising
     663  a ValueError for values of *r* larger than the input iterable.  They now
     664  correctly return an empty iterator.
     665
     666- Fractions.from_float() no longer loses precision for integers too big to
     667  cast as floats.
     668
     669- Issue 4790: The nsmallest() and nlargest() functions in the heapq module
     670  did unnecessary work in the common case where no key function was specified.
     671
     672- Issue #3767: Convert Tk object to string in tkColorChooser.
     673
     674- Issue #3248: Allow placing ScrolledText in a PanedWindow.
     675
     676- Issue #3954: Fix a potential SystemError in _hotshot.logreader error
     677  handling.
     678
     679- Issue #4574: fix a crash in io.IncrementalNewlineDecoder when a carriage
     680  return encodes to more than one byte in the source encoding (e.g. UTF-16)
     681  and gets split on a chunk boundary.
     682
     683- Issue #4223: inspect.getsource() will now correctly display source code
     684  for packages loaded via zipimport (or any other conformant PEP 302
     685  loader). Original patch by Alexander Belopolsky.
     686
     687- Issue #4201: pdb can now access and display source code loaded via
     688  zipimport (or any other conformant PEP 302 loader). Original patch by
     689  Alexander Belopolsky.
     690
     691- Issue #4197: doctests in modules loaded via zipimport (or any other PEP
     692  302 conformant loader) will now work correctly in most cases (they
     693  are still subject to the constraints that exist for all code running
     694  from inside a module loaded via a PEP 302 loader and attempting to
     695  perform IO operations based on __file__). Original patch by
     696  Alexander Belopolsky.
     697
     698- Issues #4082 and #4512: Add runpy support to zipimport in a manner that
     699  allows backporting to maintenance branches. Original patch by
     700  Alexander Belopolsky.
     701
     702- Issue #4616: TarFile.utime(): Restore directory times on Windows.
     703
     704- Issue #4483: _dbm module now builds on systems with gdbm & gdbm_compat
     705  libs.
     706
     707- FileIO's mode attribute now always includes ``"b"``.
     708
     709- Issue #4861: ctypes.util.find_library(): Robustify. Fix library detection on
     710  biarch systems. Try to rely on ldconfig only, without using objdump and gcc.
     711
     712- Issue #2703: SimpleXMLRPCDispatcher.__init__: Provide default values for
     713  new arguments introduced in 2.5.
     714
     715- Issue #1885: distutils. When running sdist with --formats=tar,gztar
     716  the tar file was overriden by the gztar one.
     717
     718- Registered Decimal as a numbers.Number so that isinstance(d, Number) works.
     719
     720- Issue #1672332: fix unpickling of subnormal floats, which was
     721  producing a ValueError on some platforms.
     722
     723- Restore Python 2.3 compatibility for decimal.py.
     724
     725- Issue #1702551: distutils sdist was not excluding VCS directories under
     726  Windows. Inital solution by Guy Dalberto.
     727
     728- Issue #4812: add missing underscore prefix to some internal-use-only
     729  constants in the decimal module.  (Dec_0 becomes _Dec_0, etc.)
     730
     731- Issue #4795: inspect.isgeneratorfunction() returns False instead of None when
     732  the function is not a generator.
     733
     734- Issue #4702: Throwing a DistutilsPlatformError instead of IOError in case
     735  no MSVC compiler is found under Windows. Original patch by Philip Jenvey.
     736
     737  - Issue #4739: Add pydoc help topics for symbols, so that e.g. help('@')
     738  works as expected in the interactive environment.
     739
     740- Issue #4756: zipfile.is_zipfile() now supports file-like objects. Patch by
     741  Gabriel Genellina.
     742
     743- Issue #4646: distutils was choking on empty options arg in the setup
     744  function. Original patch by Thomas Heller.
     745
     746- Issue #4400: .pypirc default generated file was broken in distutils.
     747
     748- Issue #4736: io.BufferedRWPair's closed property now functions properly.
     749
     750- Issue #3954: Fix a potential SystemError in _hotshot.logreader error
     751  handling.
     752
     753- Issue #4163: Use unicode-friendly word splitting in the textwrap functions
     754  when given an unicode string.
     755
     756- Issue #4616: TarFile.utime(): Restore directory times on Windows.
     757
     758- Issue #4084: Fix max, min, max_mag and min_mag Decimal methods to
     759  give correct results in the case where one argument is a quiet NaN
     760  and the other is a finite number that requires rounding.
     761
     762- Issue #1030250: Distutils created directories even when run with the
     763  --dry-run option.
     764
     765- Issue #4483: _dbm module now builds on systems with gdbm & gdbm_compat
     766  libs.
     767
     768- Issue #4529: fix the parser module's validation of try-except-finally
     769  statements.
     770
     771- Issue #4458: getopt.gnu_getopt() now recognizes a single "-" as an argument,
     772  not a malformed option.
     773
     774- Added the subprocess.check_output() convenience function to get output
     775  from a subprocess on success or raise an exception on error.
     776
     777- Issue #1055234: cgi.parse_header(): Fixed parsing of header parameters to
     778  support unusual filenames (such as those containing semi-colons) in
     779  Content-Disposition headers.
     780
     781- Issue #4730: Fixed the cPickle module to handle correctly astral characters
     782  when protocol 0 is used.
     783
     784- Issue #16278952: plat-mac/videoreader.py now correctly imports MediaDescr
     785
     786- Issue #1737832 : plat-mac/EasyDialog.py no longer uses the broken aepack
     787  module.
     788
     789- Issue #1149804: macostools.mkdirs now even works when another process
     790  creates one of the needed subdirectories.
     791
     792Tools/Demos
     793-----------
     794
     795- Issue #4677: add two list comprehension tests to pybench.
     796
     797Extension Modules
     798-----------------
     799
     800- Issue #4301: Patch the logging module to add processName support, remove
     801  _check_logger_class from multiprocessing.
     802
     803- Issue #1040026: Fix os.times result on systems where HZ is incorrect.
     804
     805- Issue #4397: Fix occasional test_socket failure on OS X.
     806
     807- Issue #4279: Fix build of parsermodule under Cygwin.
     808
     809- Issue #4051: Prevent conflict of UNICODE macros in cPickle.
     810
     811- Issue #4228: Pack negative values the same way as 2.4 in struct's L format.
     812
     813- Issue #1040026: Fix os.times result on systems where HZ is incorrect.
     814
     815- Issues #3167, #3682: Fix test_math failures for log, log10 on Solaris,
     816  OpenBSD.
     817
     818Build
     819-----
     820
     821- Link the shared python library with $(MODLIBS).
     822
     823- Issue #5134: Silence compiler warnings when compiling sqlite with VC++.
     824
     825- Issue #4494: Fix build with Py_NO_ENABLE_SHARED on Windows.
     826
     827- Issue #4895: Use _strdup on Windows CE.
     828
     829- Issue #4472: "configure --enable-shared" now works on OSX
     830
     831- Issues #4728 and #4060: WORDS_BIGEDIAN is now correct in Universal builds.
     832
     833C-API
     834-----
     835
     836- Issue #4720: The format for PyArg_ParseTupleAndKeywords can begin with '|'.
     837
     838- Issue #3632: from the gdb debugger, the 'pyo' macro can now be called when
     839  the GIL is released, or owned by another thread.
     840
     841Tests
     842-----
     843
     844- Issue #5635: Fix running test_sys with tracing enabled.
     845
     846- regrtest no longer treats ImportError as equivalent to SkipTest.  Imports
     847  that should cause a test to be skipped are now done using import_module
     848  from test support, which does the conversion.
     849
     850- Issue #5083: New 'gui' resource for regrtest.
     851
     852
     853What's New in Python 2.6.1
     854==========================
     855
     856*Release date: 04-Dec-2008*
     857
     858Core and Builtins
     859-----------------
     860
     861- Issue #3996: On Windows, the PyOS_CheckStack function would cause the
     862  interpreter to abort ("Fatal Python error: Could not reset the stack!")
     863  instead of throwing a MemoryError.
     864
     865- Issue #4367: Python would segfault during compiling when the unicodedata
     866  module couldn't be imported and \N escapes were present.
     867
     868- Issue #4348: Some bytearray methods returned that didn't cause any change to
     869  the bytearray, returned the same bytearray instead of a copy.
     870
     871- Issue #4317: Fixed a crash in the imageop.rgb2rgb8() function.
     872
     873- Issue #4230: If ``__getattr__`` is a descriptor, it now functions correctly.
     874
     875- Issue #4048: The parser module now correctly validates relative imports.
     876
     877- Issue #4225: ``from __future__ import unicode_literals`` didn't work in an
     878  exec statement.
     879
     880- Issue #4176: Fixed a crash when pickling an object which ``__reduce__``
     881  method does not return iterators for the 4th and 5th items.
     882
     883- Issue #4209: Enabling unicode_literals and the print_function in the same
     884  __future__ import didn't work.
     885
     886- On windows, os.chdir given unicode was not working if GetCurrentDirectoryW
     887  returned a path longer than MAX_PATH. (But It's doubtful this code path is
     888  really executed because I cannot move to such directory on win2k)
     889
     890- Issue #4069: When set.remove(element) is used with a set element, the element
     891  is temporarily replaced with an equivalent frozenset.  But the eventual
     892  KeyError would always report the empty frozenset([]) as the missing key. Now
     893  it correctly refers to the initial element.
     894
     895- Fixed C99 style comments in several files. Python is now C89 compatible
     896  again.
     897
     898Library
     899-------
     900
     901- Issue #3741: DISTUTILS_USE_SDK set causes msvc9compiler.py to raise an
     902  exception.
     903
     904- Issue #4363: The uuid.uuid1() and uuid.uuid4() functions now work even if
     905  the ctypes module is not present.
     906
     907- Issue #4116: Resolve member name conflict in ScrolledCanvas.__init__.
     908
     909- Issue #3774: Fixed an error when create a Tkinter menu item without command
     910  and then remove it.
     911
     912- Fixed a modulefinder crash on certain relative imports.
     913
     914- Issue #4150: Pdb's "up" command now works for generator frames in post-mortem
     915  debugging.
     916
     917- Issue #4092: Return ArgInfo as promised in the documentation from
     918  inspect.getargvalues.
     919
     920- Issue #3935: Properly support list subclasses in bisect's C implementation.
     921
     922- Issue #4014: Don't claim that Python has an Alpha release status, in addition
     923  to claiming it is Mature.
     924
     925Build
     926-----
     927
     928- Issue #4389: Add icon to the uninstall entry in "add-and-remove-programs".
     929
     930- Issue #4289: Remove Cancel button from AdvancedDlg.
     931
     932- Issue #1656675: Register a drop handler for .py* files on Windows.
     933
     934- Issue #4120: Exclude manifest from extension modules in VS2008.
     935
     936- Issue #4091: Install pythonxy.dll in system32 again.
     937
     938- Issue #4018: Disable "for me" installations on Vista.
     939
     940- Issue #3758: Add ``patchcheck`` build target to .PHONY.
     941
     942- Issue #4204: Fixed module build errors on FreeBSD 4.
     943
     944C-API
     945-----
     946
     947- Issue #4122: On Windows, fix a compilation error when using the
     948  Py_UNICODE_ISSPACE macro in an extension module.
     949
     950Extension Modules
     951-----------------
     952
     953- Issue #4365: Add crtassem.h constants to the msvcrt module.
     954
     955- Issue #4396: The parser module now correctly validates the with statement.
     956
     957
     958What's New in Python 2.6 final
     959==============================
     960
     961*Release date: 01-Oct-2008*
     962
     963Core and Builtins
     964-----------------
     965
     966- Issue #3967: Fixed a crash in the count() and find() methods of string-like
     967  objects, when the "start" parameter is a huge value.
     968
     969- Issue #3965: Fixed a crash on Windows when open() is given an invalid
     970  filename or mode, and the filename is a unicode string.
     971
     972- Bug #3951: Py_USING_MEMORY_DEBUGGER should not be enabled by default.
     973
     974Library
     975-------
     976
     977- Issue #3965: Allow repeated calls to turtle.Screen, by making it a
     978  true singleton object.
     979
     980- Issue #3895: It was possible to crash the interpreter when an external timer
     981  was used with cProfile that returned an object that could not be converted
     982  into a float.
     983
     984- Issue #3950: Made turtle respect scale factors.
     985
     986- Issue #3547: Fixed ctypes structures bitfields of varying integer
     987  sizes.
     988
     989- Issue #3879: A regression in urllib.getproxies_enviroment was fixed.
     990
     991- Issue #3863: Disabled a unit test of fork being called from a thread
     992  when running on platforms known to exhibit OS bugs when attempting that.
     993
     994Build
     995-----
     996
     997- Bug #3989: Package the 2to3 script (as 2to3.py) in the Windows
     998  installer.
     999
     1000- Bug #3887: Package x64 version of CRT for AMD64 Windows binaries.
     1001
     1002
     1003What's New in Python 2.6 release candidate 2?
     1004=============================================
     1005
     1006*Release date: 17-Sep-2008*
     1007
     1008Core and Builtins
     1009-----------------
     1010
     1011Extension Modules
     1012-----------------
     1013
     1014- Security Issue #2: imageop did not validate arguments correctly and could
     1015  segfault as a result.
     1016
     1017- Issue #3886: Possible integer overflows in the _hashopenssl module were
     1018  closed.
     1019
     1020Tools/Demos
     1021-----------
     1022
     1023- Issue #3850: recursion tests in Misc/find_recursion_limit.py can raise
     1024  AttributeError instead of RuntimeError, depending in which C API call
     1025  exactly the recursion limit is exceeded. Consequently, both exception types
     1026  are caught and silenced.
     1027
     1028Build
     1029-----
     1030
     1031- Issue #3617: Include a licensing statement regarding the Microsoft
     1032  C runtime in the Windows installer.
     1033
     1034
     1035What's New in Python 2.6 release candidate 1?
     1036=============================================
     1037
     1038*Release date: 12-Sep-2008*
     1039
     1040Core and Builtins
     1041-----------------
     1042
     1043- Issue #3642: Suppress warning in obmalloc when size_t is larger than uint.
     1044
     1045- Issue #3743: In a few places, PY_FORMAT_SIZE_T was incorrectly used with
     1046  PyString_FromFormat or PyErr_Format to display size_t values. The macro
     1047  PY_FORMAT_SIZE_T is designed to select the correct format for the OS
     1048  ``printf`` function, whereas PyString_FromFormat has an independent
     1049  implementation and uses "%zd" on all platforms for size_t values.
     1050  This makes a difference on win64, where ``printf`` needs "%Id" to display
     1051  64bit values.
     1052
     1053- Issue #3634: _weakref.ref(Exception).__init__() gave invalid return value on
     1054  error.
     1055
     1056- Issue #3777: long() applied to a float object now always return a long
     1057  object; previously an int would be returned for small values. the __long__
     1058  method is allowed to return either an int or a long, but the behaviour of
     1059  float objects should not change to respect backward compatibility.
     1060
     1061- Issue #3751: str.rpartition would perform a left-partition when called with
     1062  a unicode argument.
     1063
     1064- Issue #3683: Fix compilation when --without-threads is given.
     1065
     1066- Issue #3668: Fix a memory leak with the "s*" argument parser in
     1067  PyArg_ParseTuple and friends, which occurred when the argument for "s*"
     1068  was correctly parsed but parsing of subsequent arguments failed.
     1069
     1070- Issue #2534: speed up isinstance() and issubclass() by 50-70%, so as to
     1071  match Python 2.5 speed despite the __instancecheck__ / __subclasscheck__
     1072  mechanism. In the process, fix a bug where isinstance() and issubclass(),
     1073  when given a tuple of classes as second argument, were looking up
     1074  __instancecheck__ / __subclasscheck__ on the tuple rather than on each
     1075  type object.
     1076
     1077- Fix crashes on memory allocation failure found with failmalloc.
     1078
     1079- Fix memory leaks found with valgrind and update suppressions file.
     1080
     1081- Fix compiler warnings in opt mode which would lead to invalid memory reads.
     1082
     1083- Fix problem using wrong name in decimal module reported by pychecker.
     1084
     1085- Silenced another compiler warning about a used but not defined
     1086  function 'stringlib_contains_obj'.
     1087
     1088- Added warnings on the use of ``__getslice__``, ``__setslice__``, or
     1089  ``__delslice__``.
     1090
     1091- Issue #3678: Correctly pass LDFLAGS and LDLAST to the linker on shared
     1092  library targets in the Makefile.
     1093
     1094- Issue #1204: The configure script now tests for additional libraries
     1095  that may be required when linking against readline.  This fixes issues
     1096  with x86_64 builds on some platforms (a few Linux flavors and OpenBSD).
     1097
     1098C-API
     1099-----
     1100
     1101- Aliased PyObject_Bytes to PyObject_Str.
     1102
     1103Library
     1104-------
     1105
     1106- Issue #3640: Pickling a list or a dict uses less local variables, to reduce
     1107  stack usage in the case of deeply nested objects.
     1108
     1109- Issue #3629: Fix sre "bytecode" validator for an end case.
     1110
     1111- Issue #3811: The Unicode database was updated to 5.1.
     1112
     1113- Issue #3781: Further warnings.catch_warnings() cleanup to prevent
     1114  silent misbehaviour when a single instance is nested in multiple
     1115  with statements, or when the methods are invoked in the wrong order.
     1116
     1117- Issue #3809: Fixed spurious 'test.blah' file left behind by test_logging.
     1118
     1119- Issue #3781: Clean up the API for warnings.catch_warnings() by having it
     1120  return a list or None rather than a custom object.
     1121
     1122- Issue #1638033: Cookie.Morsel gained the httponly attribute.
     1123
     1124- Issue #3535: zipfile couldn't read some zip files larger than 2GB.
     1125
     1126- Issue #3776: Deprecate the bsddb package for removal in 3.0.
     1127
     1128- Issue #3762: platform.architecture() fails if python is lanched via
     1129  its symbolic link.
     1130
     1131- Issue #3772: Fixed regression problem in StreamHandler.emit().
     1132
     1133- Issue 600362: Relocated parse_qs() and parse_qsl(), from the cgi module
     1134  to the urlparse one.  Added a PendingDeprecationWarning in the old
     1135  module, it will be deprecated in the future.
     1136
     1137- Issue #2562: Fix distutils PKG-INFO writing logic to allow having
     1138  non-ascii characters and Unicode in setup.py meta-data.
     1139
     1140- Issue #3726: Allow spaces in separators in logging configuration files.
     1141
     1142- Issue #3719: platform.architecture() fails if there are spaces in the
     1143  path to the Python binary.
     1144
     1145- Issue 3602: Moved test.test_support.catch_warning() to
     1146  warnings.catch_warnings() along with some API cleanup. Expanding the tests
     1147  for catch_warnings() also led to an improvement in the raising of a
     1148  DeprecationWarning related to warnings.warn_explicit().
     1149
     1150- The deprecation warnings for the old camelCase threading API were removed.
     1151
     1152- logging: fixed lack of use of encoding attribute specified on a stream.
     1153
     1154- Silenced a trivial compiler warning in the sqlite module.
     1155
     1156- Fixed two format strings in the _collections module.
     1157
     1158- Issue #3703: _fileio.FileIO gave unhelpful error message when trying to open a
     1159  directory.
     1160
     1161- Issue #3708: os.urandom no longer goes into an infinite loop when passed a
     1162  non-integer floating point number.
     1163
     1164- Issue #3110: multiprocessing fails to compiel on solaris 10 due to missing
     1165  SEM_VALUE_MAX.
     1166
     1167Extension Modules
     1168-----------------
     1169
     1170- Issue #2975: When compiling several extension modules with Visual Studio 2008
     1171  from the same python interpreter, some environment variables would grow
     1172  without limit.
     1173
     1174- Issue #3643: Added a few more checks to _testcapi to prevent segfaults by
     1175  exploitation of poor argument checking.
     1176
     1177- sqlite3: Changed docstring of iterdump() to mark method as "Non-standard".
     1178
     1179- Issue #3103: Reduced globals symbols used by sqlite3 module and made sure all
     1180  remaining ones have "pysqlite_" prefix.
     1181
     1182- Issue #3846: Release the GIL during sqlite3_prepare calls. This improves
     1183  concurrent access to the same SQLite database from multiple
     1184  threads/processes.
     1185
     1186Tests
     1187-----
     1188
     1189- Issue #3781: Add test.test_support.check_warnings() as a convenience
     1190  wrapper for warnings.catch_warnings() that makes it easier to check
     1191  that expected warning messages are being reported.
     1192
     1193- Issue #3796: Some tests functions were not enabled in test_float.
     1194
     1195- Issue #3768: Move test_py3kwarn over to the new API for catch_warnings().
     1196
     1197Build
     1198-----
     1199
     1200- Issue #3833: Use a different upgrade code for Win64 installers.
     1201
     1202- Issue #2271: Set SecureCustomProperties so that installation will properly
     1203  use the TARGETDIR even for unprivileged users.
     1204
     1205- Allow passing the MSI file name to merge.py.
     1206
     1207- Issue #3758: Rename the 'check' target to 'patchcheck' so as to not clash
     1208  with GNU build target guidelines.
     1209
     1210
     1211What's New in Python 2.6 beta 3?
     1212================================
     1213
     1214*Release date: 20-Aug-2008*
     1215
     1216Core and Builtins
     1217-----------------
     1218
     1219- Issue #1878: Remove Py_TPFLAGS_HAVE_VERSION_TAG from
     1220  Py_TPFLAGS_DEFAULT when not building the core.  This means 3rd party
     1221  extensions do not automatically benefit from the class attribute
     1222  cache; they will have to explicitly add Py_TPFLAGS_HAVE_VERSION_TAG
     1223  to their tp_flags field if they care.  This is a backwards
     1224  compatibility feature; in 3.0, all types will use the cache by
     1225  default.
     1226
     1227- Keyword arguments can now follow starred arguments. (``f(a, *args,
     1228  keyword=23)`` is now valid syntax.)
     1229
     1230- ctypes function pointers that are COM methods have a boolean True
     1231  value again.
     1232
     1233- Issue #3139: Make buffer-interface thread-safe wrt. PyArg_ParseTuple,
     1234  by denying s# to parse objects that have a releasebuffer procedure,
     1235  and introducing s*.
     1236
     1237- Issue #3537: Fix an assertion failure when an empty but presized dict
     1238  object was stored in the freelist.
     1239
     1240- Issue #1481296: Make long(float('nan')) and int(float('nan')) raise
     1241  ValueError consistently across platforms.
     1242
     1243- Issue #3479: On platforms where sizeof(int) is smaller than sizeof(long)
     1244  (64bit Unix, for example), unichr() would truncate its argument and return
     1245  u'\x00' for unichr(2**32). Now it properly raises an OverflowError.
     1246
     1247- Apply security patches from Apple.
     1248
     1249- Issue #2542: Now that issubclass() may call arbitrary code, ensure that
     1250  PyErr_ExceptionMatches returns 0 when an exception occurs there.
     1251
     1252- Issue #1819: function calls with several named parameters are now on
     1253  average 35% faster (as measured by pybench).
     1254
     1255- Issue #2378: An unexpected UnboundLocalError or NameError could appear when
     1256  the python debugger steps into a class statement: the free variables (local
     1257  variables defined in an outer scope) would be deleted from the outer scope.
     1258
     1259- Issue #2620: Overflow checking when allocating or reallocating memory
     1260  was not always being done properly in some python types and extension
     1261  modules.  PyMem_MALLOC, PyMem_REALLOC, PyMem_NEW and PyMem_RESIZE have
     1262  all been updated to perform better checks and places in the code that
     1263  would previously leak memory on the error path when such an allocation
     1264  failed have been fixed.
     1265
     1266Library
     1267-------
     1268
     1269- Issue #3612: Added some missing basic types in ctypes.wintypes.
     1270
     1271- The methods ``is_in_tuple()``, ``is_vararg()``, and ``is_keywordarg()`` of
     1272  symtable.Symbol have been deprecated for removal in 3.0 and the next release.
     1273
     1274- Issue #2234: distutils failed for some versions of the cygwin compiler. The
     1275  version reported by these tools does not necessarily follow the python
     1276  version numbering scheme, so the module is less strict when parsing it.
     1277
     1278- Issue #2235: Added Py3k warnings for types which will become unhashable
     1279  under the stricter __hash__ inheritance rules in 3.0. Several types
     1280  which did not meet the rules for hash invariants and were already
     1281  unhashable in 3.0 have now been explicitly flagged as unhashable in
     1282  2.6 as well (collections.Mapping, collections.Set, unittest.TestSuite,
     1283  xml.dom.minidom.NamedNodeMap, numbers.Number, UserList.UserList)
     1284
     1285- Update __all__ for cookielib, csv, os, urllib2, and weakref to include things
     1286  imported into the module but exposed as part of the module's API.
     1287
     1288- Remove an unneeded import of abc.ABCMeta from 'inspect'.
     1289
     1290- Remove unneeded imports of 'sys' and 'warnings' from 'io'.
     1291
     1292- Remove unneeded imports of 'warnings' from shelve, filecmp, and dummy_thread.
     1293
     1294- Issue #3575: Incremental decoder's decode function now takes bytearray
     1295  by using 's*' instead of 't#'.
     1296
     1297- Issue #2222: Fixed reference leak when occurred os.rename()
     1298  fails unicode conversion on 2nd parameter. (windows only)
     1299
     1300- Issue 2464. urllib2 now supports a malformation in the URL received
     1301  in a redirect.
     1302
     1303- Silence the DeprecationWarning raised when importing mimetools in
     1304  BaseHTTPServer, cgi (and rfc822), httplib.
     1305
     1306- Issue #2776: fixed small issue when handling an URL with double slash
     1307  after a 302 response in the case of not going through a proxy.
     1308
     1309- Issue #2676: in the email package, content-type parsing was hanging on
     1310  pathological input because of quadratic or exponential behaviour of a
     1311  regular expression.
     1312
     1313- Issue #3476: binary buffered reading through the new "io" library is now
     1314  thread-safe.
     1315
     1316- Silence the DeprecationWarning of rfc822 when it is imported by mimetools
     1317  since mimetools itself is deprecated. Because modules are cached, all
     1318  subsequent imports of rfc822 will not raise a visible DeprecationWarning.
     1319
     1320- Issue #3134: shutil referenced undefined WindowsError symbol.
     1321
     1322- Issue #1342811: Fix leak in Tkinter.Menu.delete. Commands associated to
     1323  menu entries were not deleted.
     1324
     1325- Copied the implementation of reduce() to _functools.reduce() to have a
     1326  version that did not raise a DeprecationWarning under -3.
     1327
     1328- Issue #3205: When iterating over a BZ2File fails allocating memory, raise
     1329  a MemoryError rather than silently stop the iteration.
     1330
     1331- Issue #3487: sre "bytecode" validator.  Passing invalid "re-bytecode"
     1332  to _sre.compile() will now be rejected.  This should not affect anybody
     1333  since the re.compile() function never generates invalid re-bytecode.
     1334
     1335- Issue #3436: Make csv.DictReader's fieldnames attribute a property so that
     1336  upon first access it can be automatically initialized from the csv file if
     1337  it wasn't initialized during instantiation.
     1338
     1339- Issue #2338: Create imp.reload() to help with transitioning to Python 3.0 as
     1340  the reload() built-in has been removed.
     1341
     1342- Changed code in the following modules/packages to remove warnings raised
     1343  while running under the ``-3`` flag: aifc, asynchat, asyncore, bdb, bsddb,
     1344  ConfigParser, cookielib, csv, difflib, distutils, DocXMLRPCServer, email,
     1345  filecmp, fileinput, inspect, logging, modulefinder, pdb, pickle, profile,
     1346  pstats, pydoc, re, rlcompleter, SimpleXMLRPCServer, shelve, socket,
     1347  subprocess, sqlite3, tarfile, Tkinter, test.test_support, textwrap,
     1348  threading, tokenize, traceback, urlparse, wsgiref, xml, xmlrpclib.
     1349
     1350- Issue #3039: Fix tarfile.TarFileCompat.writestr() which always
     1351  raised an AttributeError.
     1352
     1353- Issue #2523: Fix quadratic behaviour when read()ing a binary file without
     1354  asking for a specific length. This problem only affected files opened
     1355  using the new "io" module, not the built-in open() function.
     1356
     1357- Issue #3449: Update decimal module to use most recent specification
     1358  (v. 1.68) and tests (v. 2.58) from IBM.
     1359
     1360- Issue 3437: Bug fix in robotparser parsing of Allow: lines.
     1361
     1362- Issue 1592:  Improve error reporting when operations are attempted
     1363  on a closed shelf.
     1364
     1365- Deprecate the "ast" parser function aliases.
     1366
     1367- Issue #3120: On 64-bit Windows the subprocess module was truncating handles.
     1368
     1369- Issue #3303: Fix a crash in locale.strcoll() when calling it with
     1370  invalid arguments.
     1371
     1372- Issue #3302: Fix several crashes when calling locale's gettext functions
     1373  with None arguments.
     1374
     1375- Issue #3389: Allow resolving dotted names for handlers in logging
     1376  configuration files.
     1377
     1378- Deprecate the sunaudio module for removal in Python 3.0.
     1379
     1380- Issue #3394: zipfile.writestr sets external attributes when passed a
     1381  file name rather than a ZipInfo instance, so files are extracted with
     1382  mode 0600 rather than 000 under Unix.
     1383
     1384- Issue #1857: subprocess.Popen.poll gained an additional _deadstate keyword
     1385  argument in python 2.5, this broke code that subclassed Popen to include its
     1386  own poll method.  Fixed my moving _deadstate to an _internal_poll method.
     1387
     1388Build
     1389-----
     1390
     1391- Generate the PatternGrammar pickle during "make install".
     1392
     1393Documentation
     1394-------------
     1395
     1396- Issue #2235: the C API function PyObject_HashNotImplemented and its
     1397  interaction with the tp_hash slot (added in 2.6b2) are now documented
     1398
     1399- Issue #643841: The language reference now provides more detailed
     1400  coverage of the lookup process for special methods. The disclaimers
     1401  regarding lack of coverage of new-style classes have also been
     1402  removed, since the coverage is now fairly reasonable.
     1403
     1404
     1405What's New in Python 2.6 beta 2?
     1406================================
     1407
     1408*Release date: 17-Jul-2008*
     1409
     1410Core and Builtins
     1411-----------------
     1412
     1413- Issue #3156: Fix inconsistent behavior of the bytearray type: all
     1414  its methods now allow for items objects that can be converted to
     1415  an integer using operator.index().
     1416
     1417- Issue #3360: Fix incorrect parsing of '020000000000.0', which
     1418  produced a ValueError instead of giving the correct float.
     1419
     1420- Issue #3083: Add alternate (#) formatting for bin, oct, hex output
     1421  for str.format().  This adds the prefix 0b, 0o, or 0x, respectively.
     1422
     1423- Issue #3008: the float type has a new instance method 'float.hex'
     1424  and a new class method 'float.fromhex' to convert floating-point
     1425  numbers to and from hexadecimal strings, respectively.
     1426
     1427- Issue #2235: __hash__ is once again inherited by default. To allow
     1428  collections.Hashable to remain meaningful in the presence of the
     1429  default hash implementation (object.__hash__), it is now possible
     1430  to explicit block inheritance of hash by setting __hash__=None at
     1431  the Python level, or tp_hash=PyObject_HashNotImplemented at the C
     1432  level.
     1433
     1434- Issue #3221: Issue a RuntimeWarning instead of raising SystemError if
     1435  the parent module cannot be found while performing an absolute import.
     1436  This means that an incorrectly defined __package__ attribute will
     1437  now only prevent relative imports in that module rather than causing
     1438  all imports from that module to fail.
     1439
     1440- Issue #2517: Allow unicode messages in Exceptions again by correctly
     1441  bypassing the instance dictionary when looking up __unicode__ on
     1442  new-style classes.
     1443
     1444- Issue #3242: Fix a crash inside the print statement, if sys.stdout is
     1445  set to a custom object whose write() method happens to install
     1446  another file in sys.stdout.
     1447
     1448- Issue #3088: Corrected a race condition in classes derived from
     1449  threading.local: the first member set by a thread could be saved in
     1450  another thread's dictionary.
     1451
     1452- Issue #3004: Minor change to slice.indices(): the start and stop
     1453  arguments are now treated identically, making the behaviour easier
     1454  to describe and understand.  For example, slice(None, -10,
     1455  1).indices(9) now returns (0, 0, 1) instead of (0, -1, 1), and
     1456  slice(None, 10, -1).indices(10) returns (9, 9, -1) instead of (9,
     1457  10, -1).
     1458
     1459- Issue #3219: Calling a function with repeated keyword arguments,
     1460  f(a=2, a=23), would not cause a syntax error.  This was a regression
     1461  from 2.4 caused by the switch to the new compiler.
     1462
     1463- Issue #2862: Make int and float freelist management consistent with
     1464  other freelists.  Changes their CompactFreeList apis into
     1465  ClearFreeList apis and calls them via gc.collect().
     1466
     1467Library
     1468-------
     1469
     1470- Issue #3554: ctypes.string_at and ctypes.wstring_at did call Python
     1471  api functions without holding the GIL, which could lead to a fatal
     1472  error when they failed.
     1473
     1474- Issue #799428: Fix Tkinter.Misc._nametowidget to unwrap Tcl command objects.
     1475
     1476- Issue #3395: fix reference in test_multiprocessing to old debugInfo method
     1477
     1478- Issue #3312: Fix two crashes in sqlite3.
     1479
     1480- Issue #1608818: Fix misbehavior in os.listdir() if readdir() fails.
     1481
     1482- Issue #3125: Remove copy_reg in multiprocessing and replace it with
     1483  ForkingPickler.register() to resolve conflict with ctypes.
     1484
     1485- Issue #3090: Fixed ARCHFLAGS parsing on OS/X
     1486
     1487- Issue #3313: Fixed a crash when a failed dlopen() call does not set
     1488  a valid dlerror() message.
     1489
     1490- Issue #3258: Fixed a crash when a ctypes POINTER type to an
     1491  incomplete structure was created.
     1492
     1493- Issue #3339: dummy_thread.acquire() should not return None.
     1494
     1495- Issue #3285: Fractions from_float() and from_decimal() accept Integral arguments.
     1496
     1497- Issue #3301: Bisect module behaved badly when lo was negative.
     1498
     1499- Issue #839496: SimpleHTTPServer used to open text files in text mode. This is
     1500  both unnecessary (HTTP allows text content to be sent in several forms) and
     1501  wrong because the actual transmitted size could differ from the
     1502  content-length.  The problem had been corrected in the 2.4 branch, but never
     1503  merged into trunk.
     1504
     1505- Issue #2663: add filtering capability to shutil.copytree().
     1506
     1507- Issue #1622: Correct interpretation of various ZIP header fields.
     1508
     1509- Issue #1526: Allow more than 64k files to be added to Zip64 file.
     1510
     1511- Issue #1746: Correct handling of zipfile archive comments (previously
     1512  archives with comments over 4k were flagged as invalid). Allow writing
     1513  Zip files with archives by setting the 'comment' attribute of a ZipFile.
     1514
     1515- Issue #449227: The rlcompleter module now adds "(" to callable objects
     1516  when completed.
     1517
     1518- Issue #3190: Pydoc now hides the automatic module attribute __package__ (the
     1519  handling is now the same as that of other special attributes like __name__).
     1520
     1521- Issue #2885 (partial): The urllib.urlopen() function has been deprecated for
     1522  removal in Python 3.0 in favor of urllib2.urlopen().
     1523
     1524- Issue #2113: Fix error in subprocess.Popen if the select system call is
     1525  interrupted by a signal.
     1526
     1527- Issue #3309: Fix bz2.BZFile iterator to release its internal lock
     1528  properly when raising an exception due to the bz2file being closed.
     1529  Prevents a deadlock.
     1530
     1531- Issue #3094: httplib.HTTPSConnection Host: headers no longer include the
     1532  redundant ":443" port number designation when the connection is using the
     1533  default https port (443).
     1534
     1535- Issue #874900: after an os.fork() call the threading module state is cleaned
     1536  up in the child process to prevent deadlock and report proper thread counts
     1537  if the new process uses the threading module.
     1538
     1539Tests
     1540-----
     1541
     1542- test.test_support.catch_warning now keeps track of all warnings it sees
     1543  and is now better documented. Explicit unit tests for this context manager
     1544  have been added to test_warnings.
     1545
     1546Build
     1547-----
     1548
     1549- Issue #3215: Build sqlite3 as sqlite3.dll, not sqlite3.pyd.
     1550
     1551
     1552Documentation
     1553-------------
     1554
     1555- Document that robotparser has been renamed to urllib.robotparser in
     1556  Python 3.0.
     1557
     1558- Document that urlparse has been renamed to urllib.parse in Python 3.0.
     1559
     1560- Document that urllib2 is split across multiple modules and renamed in
     1561  Python 3.0.
     1562
     1563- Document that urllib is split across multiple modules and renamed in
     1564  Python 3.0.
     1565
     1566
     1567What's New in Python 2.6 beta 1?
     1568================================
     1569
     1570*Release date: 18-June-2008*
     1571
     1572Core and Builtins
     1573-----------------
     1574
     1575- Issue #3211: warnings.warn_explicit() did not guard against its 'registry'
     1576  argument being anything other than a dict or None. Also fixed a bug in error
     1577  handling when 'message' and 'category' were both set to None, triggering a
     1578  bus error.
     1579
     1580- Issue #3100: Corrected a crash on deallocation of a subclassed weakref which
     1581  holds the last (strong) reference to its referent.
     1582
     1583- Add future_builtins.ascii().
     1584
     1585- Several set methods now accept multiple arguments:  update(), union(),
     1586  intersection(), intersection_update(), difference(), and difference_update().
     1587
     1588- Issue #2898: Added sys.getsizeof() to retrieve size of objects in bytes.
     1589
     1590- New environment variable PYTHONIOENCODING.
     1591
     1592- Patch #2488: Add sys.maxsize.
     1593
     1594- Issue #2353: file.xreadlines() now emits a Py3k warning.
     1595
     1596- Issue #2863: generators now have a ``gen.__name__`` attribute that
     1597  equals ``gen.gi_code.co_name``, like ``func.__name___`` that equals
     1598  ``func.func_code.co_name``.  The repr() of a generator now also
     1599  contains this name.
     1600
     1601- Issue #2831: enumerate() now has a ``start`` argument.
     1602
     1603- Issue #2801: fix bug in the float.is_integer method where a
     1604  ValueError was sometimes incorrectly raised.
     1605
     1606- Issue #2790: sys.flags was not properly exposing its bytes_warning
     1607  attribute.
     1608
     1609- Issue #2196: hasattr() now lets exceptions which do not inherit
     1610  Exception (KeyboardInterrupt, and SystemExit) propagate instead of
     1611  ignoring them.
     1612
     1613- Added checks for integer overflows, contributed by Google. Some are
     1614  only available if asserts are left in the code, in cases where they
     1615  can't be triggered from Python code.
     1616
     1617
     1618Extension Modules
     1619-----------------
     1620- Issue #1179: [CVE-2007-4965] Integer overflow in imageop module.
     1621
     1622- Issue #3116:  marshal.dumps() had quadratic behavior for strings > 32Mb.
     1623
     1624- Issue #2138: Add factorial() to the math module.
     1625
     1626- The heapq module does comparisons using LT instead of LE.  This
     1627  makes its implementation match that used by list.sort().
     1628
     1629- Issue #2819: add full-precision summation function to math module,
     1630  based on Hettinger's ASPN Python Cookbook recipe.
     1631
     1632- Issue #2592: delegate nb_index and the floor/truediv slots in
     1633  weakref.proxy.
     1634
     1635- Support os.O_ASYNC and fcntl.FASYNC if the constants exist on the
     1636  platform.
     1637
     1638- Support for Windows 9x has been removed from the winsound module.
     1639
     1640- bsddb module updated to version 4.7.3.
     1641  http://www.jcea.es/programacion/pybsddb.htm#bsddb3-4.7.3. This
     1642  code should be compatible with Python 3.0.
     1643
     1644- Issue #2858: Fix potential memory corruption when
     1645  bsddb.db.DBEnv.lock_get and other bsddb.db object constructors
     1646  raised an exception.
     1647
     1648- Issue #2669: bsddb/__init__.py iteration no longer silently fails when
     1649  the database has changed size during iteration.  It now raises a
     1650  RuntimeError in the same manner as a dictionary.
     1651
     1652- Issue #2870: cmathmodule.c compile error.
     1653
     1654- Added a threading.Thread.ident property.
     1655
     1656Library
     1657-------
     1658
     1659- logging.config: Removed out-of-date comment in _install_handlers and
     1660  used issubclass in place of equality comparison of classes.
     1661
     1662- Issue #2722: Now the os.getcwd() supports very long path names.
     1663
     1664- Issue #2888: Fixed the behaviour of pprint when working with nested
     1665  structures, to match the behaviour of 2.5 and 3.0 (now follows the common
     1666  sense).
     1667
     1668- Issue #1817: cgi now correctly handles the querystring on POST requests
     1669
     1670- Issue #3136: fileConfig()'s disabling of old loggers is now conditional via
     1671  an optional disable_existing_loggers parameter, but the default value is
     1672  such that the old behaviour is preserved. Thanks to Leandro Lucarella for
     1673  the patch.
     1674
     1675- Issue #3126: StreamHandler and FileHandler check before calling "flush" and
     1676  "close" that the stream object has these, using hasattr (thanks to bobf for
     1677  the patch).
     1678
     1679- Issue #2912: platform.uname now tries to determine unknown information even if
     1680  os.uname exists.
     1681
     1682- The rfc822 module has been deprecated for removal in 3.0.
     1683
     1684- The mimetools module has been deprecated for removal in 3.0.
     1685
     1686- The ctypes.byref function now takes an optional second parameter
     1687  which allows to specify an offset in bytes for the constructed
     1688  pointer-like object.
     1689
     1690- Added the ast module.
     1691
     1692- Added the multiprocessing module, PEP 371.
     1693
     1694- Factored out the indentation cleaning from inspect.getdoc() into
     1695  inspect.cleandoc() to ease standalone use.
     1696
     1697- Issue #1798: Add ctypes calling convention that allows safe access
     1698  to errno.
     1699
     1700- Issue #2404: ctypes objects support the new pep3118 buffer interface.
     1701
     1702- Patch #2125: Add GetInteger and GetString methods for
     1703  msilib.Record objects.
     1704
     1705- Issue #2782: The datetime module's strftime methods now accept
     1706  unicode format strings just as time.strftime always has.
     1707
     1708- The sgmllib and htmllib modules have been deprecated for removal
     1709  in Python 3.0.
     1710
     1711- Issue #3011: locale module alias table was updated to the latest
     1712  version from the X.org locale.alias file.
     1713
     1714- Issue #1797 (partial fix): ctypes NULL function pointers have a
     1715  False boolean value now.
     1716
     1717- Issue #2985: Allow 64-bit integer responses (``<i8>``) in XMLRPC
     1718  transfers.
     1719
     1720- Issue #2877: The UserString.MutableString class has been removed in
     1721  Python 3.0.
     1722
     1723- Do not close external file objects passed to tarfile.open(mode='w:bz2')
     1724  when the TarFile is closed.
     1725
     1726- Issue #2959: For consistency with other file-like objects, gzip's
     1727  GzipFile.close() can now be called multiple times without raising
     1728  an exception.
     1729
     1730- Issue #1390: Raise ValueError in toxml when an invalid comment would
     1731  otherwise be produced.
     1732
     1733- Issue #2914: TimedRotatingFileHandler now takes an optional keyword
     1734  argument "utc" to use UTC time rather than local time.
     1735
     1736- Issue #2929: TimedRotatingFileHandler was using the wrong path when
     1737  deleting old log files (filename only instead of full path).
     1738
     1739- Issue #1775025: You can now specify zipfile members to open(),
     1740  read() or extract() via a ZipInfo instance.  This allows handling
     1741  duplicate filenames in zipfiles.
     1742
     1743- Issue #961805: Fix Text.edit_modified() in Tkinter.
     1744
     1745- Issue #1793: Function ctypes.util.find_msvcrt() added that returns
     1746  the name of the C runtime library that Python uses.
     1747  ctypes.util.find_library(name) now call this function when name is
     1748  'm' or 'c'.
     1749
     1750- The statvfs module has been deprecated for removal in Python 3.0.
     1751
     1752- The sunaudiodev and SUNAUDIODEV modules have been deprecated for
     1753  removal in Python 3.0.
     1754
     1755- The WAIT module from IRIX has been deprecated for removal in Python
     1756  3.0.
     1757
     1758- The torgb module from IRIX has been deprecated for removal in Python
     1759  3.0.
     1760
     1761- The SV module from IRIX has been deprecated for removal in Python
     1762  3.0.
     1763
     1764- The readcd module from IRIX has been deprecated for removal in
     1765  Python 3.0.
     1766
     1767- The panelparser module from IRIX has been deprecated for removal in
     1768  Python 3.0.
     1769
     1770- The panel module from IRIX has been deprecated for removal in Python
     1771  3.0.
     1772
     1773- The jpeg module from IRIX has been deprecated for removal in Python
     1774  3.0.
     1775
     1776- The IOCTL module from IRIX has been deprecated for removal in Python
     1777  3.0.
     1778
     1779- The IN module from IRIX has been deprecated for removal in Python
     1780  3.0.
     1781
     1782- The imgfile module from IRIX has been deprecated for removal in
     1783  Python 3.0.
     1784
     1785- The GLWS module from IRIX has been deprecated for removal in Python
     1786  3.0.
     1787
     1788- The GET module from IRIX has been deprecated for removal in Python
     1789  3.0.
     1790
     1791- The fm module from IRIX has been deprecated for removal in Python
     1792  3.0.
     1793
     1794- The FL, flp, and fl modules from IRIX have been deprecated for
     1795  removal in Python 3.0.
     1796
     1797- The FILE module on IRIX has been deprecated for removal in Python
     1798  3.0.
     1799
     1800- The ERRNO module on IRIX has been deprecated for removal in Python
     1801  3.0.
     1802
     1803- The DEVICE, GL, gl, and cgen modules (which indirectly includes
     1804  cgensupport) have been deprecated for removal in Python 3.0.
     1805
     1806- The CL, CL_old, and cl modules for IRIX have been deprecated for
     1807  removal in Python 3.0.
     1808
     1809- The cdplayer module for IRIX has been deprecated for removal in
     1810  Python 3.0.
     1811
     1812- The cddb module for IRIX has been deprecated for removal in Python
     1813  3.0.
     1814
     1815- The cd and CD modules for IRIX have been deprecated for removal in
     1816  Python 3.0.
     1817
     1818- The al and AL modules for IRIX have been deprecated for removal in
     1819  Python 3.0.
     1820
     1821- Issue #1713041: fix pprint's handling of maximum depth.
     1822
     1823- The timing module has been deprecated for removal in Python 3.0.
     1824
     1825- The sv module has been deprecated for removal in Python 3.0.
     1826
     1827- The multifile module has been deprecated as per PEP 4.
     1828
     1829- The imageop module has been deprecated for removal in Python 3.0.
     1830
     1831- Issue #2250: Exceptions raised during evaluation of names in
     1832  rlcompleter's ``Completer.complete()`` method are now caught and
     1833  ignored.
     1834
     1835- Issue #2659: Added ``break_on_hyphens`` option to textwrap
     1836  TextWrapper class.
     1837
     1838- The mhlib module has been deprecated for removal in Python 3.0.
     1839
     1840- The linuxaudiodev module has been deprecated for removal in Python
     1841  3.0.
     1842
     1843- The ihooks module has been deprecated for removal in Python 3.0.
     1844
     1845- The fpformat module has been deprecated for removal in Python 3.0.
     1846
     1847- The dl module has been deprecated for removal in Python 3.0.
     1848
     1849- The Canvas module has been deprecated for removal in Python 3.0.
     1850
     1851- The compiler package has been deprecated for removal in Python 3.0.
     1852
     1853- The Bastion and rexec modules have been deprecated for removal in
     1854  Python 3.0.
     1855
     1856- The bsddb185 module has been deprecated for removal in Python 3.0.
     1857
     1858- The pure module has been deprecated for removal in Python 3.0.
     1859
     1860- Issue #2487: change the semantics of math.ldexp(x, n) when n is too
     1861  large to fit in a C long.  ldexp(x, n) now returns a zero (with
     1862  suitable sign) if n is large and negative; previously, it raised
     1863  OverflowError.
     1864
     1865- The toaiff module has been deprecated for removal in Python 3.0.
     1866
     1867- The test.testall module has been deprecated for removal in Python
     1868  3.0.
     1869
     1870- The new module has been deprecated for removal in Python 3.0.
     1871
     1872- The user module has been deprecated for removal in Python 3.0.
     1873
     1874- The stringold module has been deprecated for removal in Python 3.0.
     1875
     1876- The mutex module has been deprecated for removal in Python 3.0.
     1877
     1878- The imputil module has been deprecated for removal in Python 3.0.
     1879
     1880- test.test_support.catch_warning() gained a 'record' argument.
     1881
     1882- os.path.walk is deprecated in favor of os.walk.
     1883
     1884- pdb gained the "until" command.
     1885
     1886- The Mac Modules (including Carbon) have been deprecated for removal
     1887  in Python 3.0.
     1888
     1889- Library: on MacOS X you can now set ``ARCHFLAGS`` in the shell
     1890  environment to control the '-arch' flags that are used to build
     1891  an extension. This was added for compatibility with Apple's build
     1892  of Python.
     1893
     1894- The bundled OSX-specific copy of libbffi is now in sync with the version
     1895  shipped with PyObjC 2.0 and includes support for x86_64 and ppc64 platforms.
     1896
     1897- The threading module gained aliases for names that will be removed in the
     1898  3.x series.
     1899
     1900Build
     1901-----
     1902
     1903- The Windows installer now includes Tk 8.5, bzip2 1.0.5, and SQLite 3.5.9.
     1904
     1905- Patch #1722225: Support QNX 6.
     1906
     1907- ``Lib/lib-old`` is now added to sys.path.
     1908
     1909- On MacOS X it is now possible to install the framework in 64-bit
     1910  mode or even as a 4-way universal binary (that is, PPC, i386,
     1911  PPC64 and x86_64 support in one binary).
     1912
     1913  This is controlled by the configure argument ``--with-universal-archs``:
     1914
     1915  - ``--with-universal-archs=all``: install 4-way universal
     1916
     1917  - ``--with-universal-archs=32-bit``: install 2-way universal, 32-bit (the default)
     1918
     1919  - ``--with-universal-archs=64-bit``: install 2-way universal, 64-bit
     1920
     1921  This option should be used in combination with ``--enable-universalsdk=``.
     1922
     1923  NOTE: 64-bit and 4-way builds are only suppported on Mac OS X 10.5 (or later).
     1924
     1925
     1926C API
     1927-----
     1928
     1929- Add ``PyType_Modified()`` as a public API to clear the type cache.
     1930
     1931- The PyBytes functions have been renamed to PyByteArray.
     1932
     1933- The PyString functions have been renamed to PyBytes. A batch of
     1934  defines were added so that the linker still sees the original
     1935  PyString names.
     1936
     1937
     1938What's New in Python 2.6 alpha 3?
     1939=================================
     1940
     1941*Release date: 08-May-2008*
     1942
     1943Core and builtins
     1944-----------------
     1945
     1946- Issue #2719: backported the ``next()`` builtin from Python 3.
     1947
     1948- Issue #2681: The octal literal ``0o8`` was incorrecly acctepted. Now
     1949  it properly raises a SyntaxError.
     1950
     1951- Issue #2617: Reserved -J and -X arguments for Jython, IronPython and
     1952  other implementations of Python.
     1953
     1954- Implemented PEP 370: Per user site-packages directory.
     1955
     1956Extension Modules
     1957-----------------
     1958
     1959- Issue #2670: Fix a failure in urllib2.build_opener(), when passed
     1960  two handlers that derive the same default base class.
     1961
     1962- Added kill, terminate and send_signal(sig) to subprocess.Popen.
     1963
     1964- Added phase(z) -> phi, polar(z) -> r, phi and rect(r, phi) -> z to
     1965  the cmath module.
     1966
     1967- Four new methods were added to the math and cmath modules: acosh,
     1968  asinh, atanh and log1p.
     1969
     1970- zlib.decompressobj().flush(value) no longer crashes the interpreter
     1971  when passed a value less than or equal to zero.
     1972
     1973- Issue #1631171: Re-implement the 'warnings' module in C (the
     1974  original Python code has been kept as backup). This will allow for
     1975  using the 'warning's machinery in such places as the parser where
     1976  use of pure Python code is not possible.  Both the ``showarning()``
     1977  and ``formatwarning()`` gain an optional 'line' argument which is
     1978  not called by default for backwards-compatibility reasons. Setting
     1979  ``warnings.showwarning()`` to an implementation that lacks support
     1980  for the ``line`` argument will raise a DeprecationWarning.
     1981
     1982Library
     1983-------
     1984
     1985- The audiodev module has been deprecated for removal in Python 3.0.
     1986
     1987- Issue #2750: Add the 'json' package. Based on simplejson 1.9 and
     1988  contributed by Bob Ippolito.
     1989
     1990- Issue #1734346: Support Unicode file names for zipfiles.
     1991
     1992- Issue #2581: distutils: Vista UAC/elevation support for
     1993  bdist_wininst.
     1994
     1995- Issue #2635: Fix bug in 'fix_sentence_endings' textwrap.fill option,
     1996  where an extra space was added after a word containing (but not
     1997  ending in) '.', '!' or '?'.
     1998
     1999- Add from_buffer() and from_buffer_copy() class methods to ctypes
     2000  data types.
     2001
     2002- Issue #2682: ctypes callback functions no longer contain a cyclic
     2003  reference to themselves.
     2004
     2005- The getpass module has been improved on Unix.  It now uses /dev/tty
     2006  by default and uses stderr instead of stdout.  A GetPassWarning is
     2007  issued when input echo cannot be controlled.
     2008
     2009- Issue #2014: Allow XML-RPC datetime objects to have dates before
     2010  1900-01-01.
     2011
     2012- Issue #2439: Added new function pkgutil.get_data(), which is a
     2013  convenience wrapper for the PEP 302 get_data() API.
     2014
     2015- Issue #2616: The ctypes.pointer() and ctypes.POINTER() functions are
     2016  now implemented in C for better performance.
     2017
     2018- Issue #2408: The ``_types`` module, which was used as in
     2019  implementation detail of the public ``types`` module, has been
     2020  removed and replaced by pure python code.
     2021
     2022- Issue #2513: distutils on Windows is now capable of cross-compiling
     2023  extension modules between 32 and 64 bit platforms.  See the distutls
     2024  build documentation for more information.
     2025
     2026- Issue #815646: Individual file objects may now be used from multiple
     2027  threads at once without fear of crashing the Python interpreter.  If
     2028  file.close() is called while an object is in use by another thread
     2029  an IOError exception will be raised and the file will not be closed.
     2030
     2031- The bundled libffi copy is now in sync with the recently released
     2032  libffi3.0.5 version, apart from some small changes to
     2033  Modules/_ctypes/libffi/configure.ac.
     2034
     2035- Issue #2385: distutils.core.run_script() makes __file__ available,
     2036  so the controlled environment will more closely mirror the typical
     2037  script environment.  This supports setup.py scripts that refer to
     2038  data files.
     2039
     2040Tests
     2041-----
     2042
     2043- Issue #2550: The approach used by client/server code for obtaining
     2044  ports to listen on in network-oriented tests has been refined in an
     2045  effort to facilitate running multiple instances of the entire
     2046  regression test suite in parallel without issue.
     2047  test_support.bind_port() has been fixed such that it will always
     2048  return a unique port -- which wasn't always the case with the
     2049  previous implementation, especially if socket options had been set
     2050  that affected address reuse (i.e. SO_REUSEADDR, SO_REUSEPORT).  The
     2051  new implementation of bind_port() will actually raise an exception
     2052  if it is passed an AF_INET/SOCK_STREAM socket with either the
     2053  SO_REUSEADDR or SO_REUSEPORT socket option set.  Furthermore, if
     2054  available, bind_port() will set the SO_EXCLUSIVEADDRUSE option on
     2055  the socket it's been passed.  This currently only applies to
     2056  Windows.  This option prevents any other sockets from binding to the
     2057  host/port we've bound to, thus removing the possibility of the
     2058  'non-deterministic' behaviour, as Microsoft puts it, that occurs
     2059  when a second SOCK_STREAM socket binds and accepts to a host/port
     2060  that's already been bound by another socket.  The optional preferred
     2061  port parameter to bind_port() has been removed.  Under no
     2062  circumstances should tests be hard coding ports!
     2063
     2064  test_support.find_unused_port() has also been introduced, which will
     2065  pass a temporary socket object to bind_port() in order to obtain an
     2066  unused port.  The temporary socket object is then closed and
     2067  deleted, and the port is returned.  This method should only be used
     2068  for obtaining an unused port in order to pass to an external program
     2069  (i.e. the -accept [port] argument to openssl's s_server mode) or as
     2070  a parameter to a server-oriented class that doesn't give you direct
     2071  access to the underlying socket used.
     2072
     2073  Finally, test_support.HOST has been introduced, which should be used
     2074  for the host argument of any relevant socket calls (i.e. bind and
     2075  connect).
     2076
     2077  The following tests were updated to following the new conventions:
     2078    test_socket, test_smtplib, test_asyncore, test_ssl, test_httplib,
     2079    test_poplib, test_ftplib, test_telnetlib, test_socketserver,
     2080    test_asynchat and test_socket_ssl.
     2081
     2082  It is now possible for multiple instances of the regression test
     2083  suite to run in parallel without issue.
     2084
     2085Build
     2086-----
     2087
     2088- Issue #1496032: On alpha, use -mieee when gcc is the compiler.
     2089
     2090- Issue #2544: On HP-UX systems, use 'gcc -shared' for linking when
     2091  gcc is used as compiler.
     2092
     2093- Issue #2573: On MacOS X it is now possible to install the framework
     2094  with a different name using --with-framework-name=NAME.
     2095
     2096C API
     2097-----
     2098
     2099- Added implementation of copysign, acosh, asinh, atanh and log1p to
     2100  the new files Include/pymath.h and Python/pymath.h for platforms
     2101  which provide the functions through their libm. The files also
     2102  contains several helpers and constants for math.
     2103
     2104- Added a new convenience macro, PyErr_WarnPy3k, for issuing Py3k warnings.
     2105
     2106
     2107What's New in Python 2.6 alpha 2?
     2108=================================
     2109
     2110*Release date: 02-Apr-2008*
     2111
     2112Core and builtins
     2113-----------------
     2114
     2115- Issue #1733757: The interpreter would hang on shutdown if the
     2116  tracing function set by sys.settrace is still active and happens to
     2117  call threading.currentThread().
     2118
     2119- Patch #1442: properly report exceptions when the PYTHONSTARTUP file
     2120  cannot be executed.
     2121
     2122- The compilation of a class nested in another class used to leak one
     2123  reference on the outer class name.
     2124
     2125- Patch #1810: compile() can now compile _ast trees as returned by
     2126  ``compile(..., PyCF_ONLY_AST)``.
     2127
     2128- Patch #2426: Added sqlite3.Connection.iterdump method to allow easy
     2129  dumping of databases.  Contributed by Paul Kippes at PyCon 2008.
     2130
     2131- Patch #2477: Added from __future__ import unicode_literals.
     2132
     2133- Added backport of bytearray type.
     2134
     2135- Issue #2355: add Py3k warning for buffer().
     2136
     2137- Issue #1477: With narrow Unicode builds, the unicode escape sequence
     2138  \Uxxxxxxxx did not accept values outside the Basic Multilingual
     2139  Plane.  This affected raw unicode literals and the
     2140  'raw-unicode-escape' codec.  Now UTF-16 surrogates are generated in
     2141  this case, like normal unicode literals and the 'unicode-escape'
     2142  codec.
     2143
     2144- Issue #2348: add Py3k warning for file.softspace.
     2145
     2146- Issue #2346/#2347: add Py3k warnings for __methods__ and
     2147  __members__.
     2148
     2149- Issue #2358: Add a Py3k warning on sys.exc_clear() usage.
     2150
     2151- Issue #2400: Allow relative imports to "import *".
     2152
     2153- Issue #1745: Backport print function with ``from __future__ import
     2154  print_function``.
     2155
     2156- Issue #2332: add new attribute names for instance method objects.
     2157  The two changes are: im_self -> __self__ and im_func -> __func__
     2158
     2159- Issue #2379: Raise a Py3K warning for __getitem__ or __getslice__ on
     2160  exception instances.
     2161
     2162- Issue #2371: Add a Py3k warning when catching an exception that
     2163  doesn't derive from BaseException.
     2164
     2165- Issue #2341: Add a Py3k warning when raising an exception that
     2166  doesn't derive from BaseException.
     2167
     2168- Issue #2321: use pymalloc for unicode object string data to reduce
     2169  memory usage in some circumstances.
     2170
     2171- PEP 3127: octal literals now start with "0o". Old-style octal
     2172  literals are still valid. There are binary literals with a prefix of
     2173  "0b".  This also affects int(x, 0).
     2174
     2175- Issue #2359: Adding deprecation warnings for array.{read,write}.
     2176
     2177- Issue #1779871: GNU gcc can now build Python on OS X because the
     2178  flags -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd are no
     2179  longer passed.
     2180
     2181- Add a warning when asserting a non-empty tuple which is always true.
     2182
     2183- Issue #2179: speed up with statement execution by storing the exit
     2184  method on the stack instead of in a temporary variable (patch by
     2185  Jeffrey Yaskin)
     2186
     2187- Issue #2238: Some syntax errors in *args and **kwargs expressions
     2188  could give bogus error messages.
     2189
     2190- Issue #2143: Fix embedded readline() hang on SSL socket EOF.
     2191
     2192Extension Modules
     2193-----------------
     2194
     2195- Patch #2240: Implement signal.setitimer and signal.getitimer.
     2196
     2197Library
     2198-------
     2199
     2200- Issue #2315: logging.handlers: TimedRotatingFileHandler now accounts
     2201  for daylight savings time in calculating the next rollover.
     2202
     2203- Issue #2316: logging.handlers: TimedRotatingFileHandler now
     2204  calculates rollovers correctly even when nothing is logged for a
     2205  while.
     2206
     2207- Issue #2317: logging.handlers: TimedRotatingFileHandler now uses
     2208  improved logic for removing old files.
     2209
     2210- Issue #2495: tokenize.untokenize now inserts a space between two
     2211  consecutive string literals; previously, ["" ""] was rendered as
     2212  [""""], which is incorrect python code.
     2213
     2214- Issue #2248: return the result of the QUIT command. from
     2215  SMTP.quit().
     2216
     2217- Backport of Python 3.0's io module.
     2218
     2219- Issue #2482: Make sure that the coefficient of a Decimal is always
     2220  stored as a str instance, not as a unicode instance.  This ensures
     2221  that str(Decimal) is always an instance of str.
     2222
     2223- Issue #2478: fix failure of decimal.Decimal(0).sqrt()
     2224
     2225- Issue #2432: give DictReader the dialect and line_num attributes
     2226  advertised in the docs.
     2227
     2228- Issue #2460: Make Ellipsis object copyable.
     2229
     2230- Issue #1681432: Add triangular distribution to the random module
     2231
     2232- Issue #2136: urllib2's auth handler now allows single-quoted realms
     2233  in the WWW-Authenticate header.
     2234
     2235- Issue #2434: Enhanced platform.win32_ver() to also work on Python
     2236  installation which do not have the win32all package installed.
     2237
     2238- Added support to platform.uname() to also report the machine and
     2239  processor information on Windows XP and later. As a result,
     2240  platform.machine() and platform.processor() will report this
     2241  information as well.
     2242
     2243- The library implementing the 2to3 conversion, lib2to3, was added to
     2244  the standard distribution.
     2245
     2246- Issue #1747858: Fix chown to work with large uid's and gid's on
     2247  64-bit platforms.
     2248
     2249- Issue #1202: zlib.crc32 and zlib.adler32 no longer return different
     2250  values on 32-bit vs. 64-bit python interpreters.  Both were correct,
     2251  but they now both return a signed integer object for consistency.
     2252
     2253- Issue #1158: add %f format (fractions of a second represented as
     2254  microseconds) to datetime objects.  Understood by both strptime and
     2255  strftime.
     2256
     2257- Issue #705836: struct.pack(">f", x) now raises OverflowError on all
     2258  platforms when x is too large to fit into an IEEE 754 float;
     2259  previously it only raised OverflowError on non IEEE 754 platforms.
     2260
     2261- Issues #2166, #1741 and #1531505: now distutils deals with HOME
     2262  correctly under win32
     2263
     2264- Patch #1858: distutils: added multiple server support in .pypirc
     2265
     2266- Issue #1106316: pdb.post_mortem()'s parameter, "traceback", is now
     2267  optional: it defaults to the traceback of the exception that is
     2268  currently being handled (is mandatory to be in the middle of an
     2269  exception, otherwise it raises ValueError).
     2270
     2271- Issue #1193577: A .shutdown() method has been added to SocketServers
     2272  which terminates the .serve_forever() loop.
     2273
     2274- Issue #2220: handle rlcompleter attribute match failure more
     2275  gracefully.
     2276
     2277- Issue #2225: py_compile, when executed as a script, now returns a
     2278  non- zero status code if not all files could be compiled
     2279  successfully.
     2280
     2281- Bug #1725737: In distutils' sdist, exclude RCS, CVS etc. also in the
     2282  root directory, and also exclude .hg, .git, .bzr, and _darcs.
     2283
     2284- Issue #1872: The struct module typecode for _Bool has been changed
     2285  from 't' to '?'.
     2286
     2287- The bundled libffi copy is now in sync with the recently released
     2288  libffi3.0.4 version, apart from some small changes to
     2289  Modules/_ctypes/libffi/configure.ac.  On OS X, preconfigured libffi
     2290  files are used.  On all linux systems the --with-system-ffi
     2291  configure option defaults to "yes".
     2292
     2293- Issue #1577: shutil.move() now calls os.rename() if the destination
     2294  is a directory instead of copying-then-remove-source.
     2295
     2296Tests
     2297-----
     2298
     2299- test_nis no longer fails when test.test_support.verbose is true and
     2300  NIS is not set up on the testing machine.
     2301
     2302- Output comparison tests are no longer supported.
     2303
     2304- Rewrite test_errno to use unittest and no longer be a no-op.
     2305
     2306- GHOP 234: Convert test_extcall to doctest.
     2307
     2308- GHOP 290: Convert test_dbm and test_dummy_threading to unittest.
     2309
     2310- GHOP 293: Convert test_strftime, test_getargs, and test_pep247 to
     2311  unittest.
     2312
     2313- Issue #2055: Convert test_fcntl to unittest.
     2314
     2315- Issue 1960: Convert test_gdbm to unittest.
     2316
     2317- GHOP 294: Convert test_contains, test_crypt, and test_select to
     2318  unittest.
     2319
     2320- GHOP 238: Convert test_tokenize to use doctest.
     2321
     2322- GHOP 237: Rewrite test_thread using unittest.
     2323
     2324- Patch #2232: os.tmpfile might fail on Windows if the user has no
     2325  permission to create files in the root directory.
     2326
     2327Build
     2328-----
     2329
     2330- A new script 2to3 is now installed, to run the 2.x to 3.x converter.
     2331
     2332- Python/memmove.c and Python/strerror.c have been removed; both
     2333  functions are in the C89 standard library.
     2334
     2335- Patch #2284: Add -x64 option to rt.bat.
     2336
     2337C API
     2338-----
     2339
     2340- Patch #2477: Added PyParser_ParseFileFlagsEx() and
     2341  PyParser_ParseStringFlagsFilenameEx().
     2342
     2343
     2344What's New in Python 2.6 alpha 1?
     2345=================================
     2346
     2347*Release date: 29-Feb-2008*
     2348
     2349Core and builtins
     2350-----------------
     2351
     2352- Issue #2051: pyc and pyo files are no longer created with permission
     2353  644. The mode is now inherited from the py file.
     2354
     2355- Issue #2067: file.__exit__() now calls subclasses' close() method.
     2356
     2357- Patch #1759: Backport of PEP 3129 class decorators.
     2358
     2359- Issue #1881: An internal parser limit has been increased. Also see
     2360  issue 215555 for a discussion.
     2361
     2362- Added the future_builtins module, which contains hex() and oct().
     2363  These are the PEP 3127 version of these functions, designed to be
     2364  compatible with the hex() and oct() builtins from Python 3.0.  They
     2365  differ slightly in their output formats from the existing, unchanged
     2366  Python 2.6 builtins.  The expected usage of the future_builtins
     2367  module is:
     2368    from future_builtins import hex, oct
     2369
     2370- Issue #1600: Modifed PyOS_ascii_formatd to use at most 2 digit
     2371  exponents for exponents with absolute value < 100.  Follows C99
     2372  standard.  This is a change on Windows, which would use 3 digits.
     2373  Also, added 'n' to the formats that PyOS_ascii_formatd understands,
     2374  so that any alterations it does to the resulting string will be
     2375  available in stringlib/formatter.h (for float.__format__).
     2376
     2377- Implemented PEP 3101, Advanced String Formatting.  This adds a new
     2378  builtin format(); a format() method for str and unicode; a
     2379  __format__() method to object, str, unicode, int, long, float, and
     2380  datetime; the class string.Formatter; and the C API
     2381  PyObject_Format().
     2382
     2383- Fixed several potential crashes, all caused by specially crafted
     2384  __del__ methods exploiting objects in temporarily inconsistent
     2385  state.
     2386
     2387- Issue #2115: Important speedup in setting __slot__ attributes.  Also
     2388  prevent a possible crash: an Abstract Base Class would try to access
     2389  a slot on a registered virtual subclass.
     2390
     2391- Fixed repr() and str() of complex numbers with infinity or nan as
     2392  real or imaginary part.
     2393
     2394- Clear all free lists during a gc.collect() of the highest generation
     2395  in order to allow pymalloc to free more arenas. Python may give back
     2396  memory to the OS earlier.
     2397
     2398- Issue #2045: Fix an infinite recursion triggered when printing a
     2399  subclass of collections.defaultdict, if its default_factory is set
     2400  to a bound method.
     2401
     2402- Fixed a minor memory leak in dictobject.c. The content of the free
     2403  list was not freed on interpreter shutdown.
     2404
     2405- Limit free list of method and builtin function objects to 256
     2406  entries each.
     2407
     2408- Patch #1953: Added ``sys._compact_freelists()`` and the C API
     2409  functions ``PyInt_CompactFreeList`` and ``PyFloat_CompactFreeList``
     2410  to compact the internal free lists of pre-allocted ints and floats.
     2411
     2412- Issue #1983: Fixed return type of fork(), fork1() and forkpty()
     2413  calls.  Python expected the return type int but the fork familie
     2414  returns pi_t.
     2415
     2416- Issue #1678380: Fix a bug that identifies 0j and -0j when they
     2417  appear in the same code unit.
     2418
     2419- Issue #2025: Add tuple.count() and tuple.index() methods to comply
     2420  with the collections.Sequence API.
     2421
     2422- Patch #1970 by Antoine Pitrou: Speedup unicode whitespace and
     2423  linebreak detection
     2424
     2425- Added ``PyType_ClearCache()`` and ``sys._clear_type_cache`` to clear
     2426  the internal lookup cache for ref leak tests.
     2427
     2428- Patch #1473257: generator objects gain a gi_code attribute. This is
     2429  the same object as the func_code attribute of the function that
     2430  produced the generator.
     2431
     2432- Issue #1920: "while 0" statements were completely removed by the
     2433  compiler, even in the presence of an "else" clause, which is
     2434  supposed to be run when the condition is false. Now the compiler
     2435  correctly emits bytecode for the "else" suite.
     2436
     2437- A few crashers fixed: weakref_in_del.py (issue #1377858);
     2438  loosing_dict_ref.py (issue #1303614, test67.py);
     2439  borrowed_ref_[34].py (not in tracker).
     2440
     2441- Issue #1069410: The "can't load dll" message box on Windows is
     2442  suppressed while an extension is loaded by calling SetErrorMode in
     2443  dynload_win.c. The error is still reported properly.
     2444
     2445- Issue #1915: Python compiles with --enable-unicode=no again. However
     2446  several extension methods and modules do not work without unicode
     2447  support.
     2448
     2449- Issue #1882: when compiling code from a string, encoding cookies in the
     2450  second line of code were not always recognized correctly.
     2451
     2452- Issue #1679: "0x" was taken as a valid integer literal.
     2453
     2454- Issue #1865: ``bytes`` as an alias for ``str`` and b"" as an alias "" were
     2455  added.
     2456
     2457- sys.float_info / PyFloat_GetInfo: The floating point information
     2458  object was converted from a dict to a specialized structseq object.
     2459
     2460- Patch #1816: Added sys.flags structseq. It exposes the status of
     2461  most command line arguments and PYTHON* environment variables.
     2462
     2463- Objects/structseq.c: Implemented new structseq representation. The
     2464  patch makes structseqs (e.g. the return value of os.stat) more
     2465  readable.
     2466
     2467- Patch #1700288: added a type attribute cache that caches method
     2468  accesses, resulting in speedups in heavily object-oriented code.
     2469
     2470- Bug #1776: __import__() no longer accepts filenames on any platform.
     2471  The first parameter to __import__() must be a valid module name.
     2472
     2473- Patch #1668: renamed THREADDEBUG envvar to PYTHONTHREADDEBUG.
     2474
     2475- Patch #602345: Add -B command line option, PYTHONDONTWRITEBYTECODE
     2476  envvar and sys.dont_write_bytecode attribute. All these can be set
     2477  to forbid Python to attempt to write compiled bytecode files.
     2478
     2479- Improve some exception messages when Windows fails to load an
     2480  extension module. Now we get for example '%1 is not a valid Win32
     2481  application' instead of 'error code 193'.
     2482
     2483- Bug #1481296: Fixed long(float('nan')) != 0L.
     2484
     2485- Issue #1640: Added math.isinf(x), math.isnan(x) and math.copysign(x,
     2486  y) functions.
     2487
     2488- Issue #1635: Platform independent creation and representation of NaN
     2489  and INF. float("nan"), float("inf") and float("-inf") now work on
     2490  every platform with IEEE 754 semantics.
     2491
     2492- Compiler now generates simpler and faster code for dictionary
     2493  literals.  The oparg for BUILD_MAP now indicates an estimated
     2494  dictionary size.  There is a new opcode, STORE_MAP, for adding
     2495  entries to the dictionary.
     2496
     2497- Issue #1638: %zd configure test fails on Linux.
     2498
     2499- Issue #1620: New property decorator syntax was modifying the
     2500  decorator in place instead of creating a new decorator object.
     2501
     2502- Issue #1538: Avoid copying string in split/rsplit if the split char
     2503  is not found.
     2504
     2505- Issue #1553: An erroneous __length_hint__ can make list() raise a
     2506  SystemError.
     2507
     2508- PEP 366: Allow explicit relative imports when executing modules
     2509  inside packages with the -m switch via a new module level
     2510  __package__ attribute.
     2511
     2512- Issue #1402: Fix a crash on exit, when another thread is still
     2513  running, and if the deallocation of its frames somehow calls the
     2514  PyGILState_Ensure() / PyGILState_Release() functions.
     2515
     2516- Expose the Py_Py3kWarningFlag as sys.py3kwarning.
     2517
     2518- Issue #1445: Fix a SystemError when accessing the ``cell_contents``
     2519  attribute of an empty cell object.
     2520
     2521- Issue #1460: The utf-7 incremental decoder did not accept truncated
     2522  input.  It now correctly saves its state between chunks of data.
     2523
     2524- Patch #1739468: Directories and zipfiles containing a __main__.py
     2525  file can now be directly executed by passing their name to the
     2526  interpreter. The directory/zipfile is automatically inserted as the
     2527  first entry in sys.path.
     2528
     2529- Issue #1265: Fix a problem with sys.settrace, if the tracing
     2530  function uses a generator expression when at the same time the
     2531  executed code is closing a paused generator.
     2532
     2533- sets and frozensets now have an isdisjoint() method.
     2534
     2535- optimize the performance of builtin.sum().
     2536
     2537- Fix warnings found by the new version of the Coverity checker.
     2538
     2539- The enumerate() builtin function is no longer bounded to sequences
     2540  smaller than LONG_MAX.  Formerly, it raised an OverflowError.  Now,
     2541  automatically shifts from ints to longs.
     2542
     2543- Issue #1686386: Tuple's tp_repr did not take into account the
     2544  possibility of having a self-referential tuple, which is possible
     2545  from C code.  Nor did object's tp_str consider that a type's tp_str
     2546  could do something that could lead to an inifinite recursion.
     2547  Py_ReprEnter() and Py_EnterRecursiveCall(), respectively, fixed the
     2548  issues.
     2549
     2550- Issue #1164: It was possible to trigger deadlock when using the
     2551  'print' statement to write to a file since the GIL was not released
     2552  as needed.  Now PyObject_Print() does the right thing along with
     2553  various tp_print implementations of the built-in types and those in
     2554  the collections module.
     2555
     2556- Issue #1147: Exceptions were directly allowing string exceptions in
     2557  their throw() method even though string exceptions no longer
     2558  allowed.
     2559
     2560- Issue #1096: Prevent a segfault from getting the repr of a very
     2561  deeply nested list by using the recursion counter.
     2562
     2563- Issue #1202533: Fix infinite recursion calls triggered by calls to
     2564  PyObject_Call() never calling back out to Python code to trigger
     2565  recursion depth updates/checks.  Required the creation of a static
     2566  RuntimeError instance in case normalizing an exception put the
     2567  recursion check value past its limit.  Fixes crashers
     2568  infinite_rec_(1|2|4|5).py.
     2569
     2570- Patch #1031213: Decode source line in SyntaxErrors back to its
     2571  original source encoding.
     2572
     2573- Patch #1673759: add a missing overflow check when formatting floats
     2574  with %G.
     2575
     2576- Prevent expandtabs() on string and unicode objects from causing a
     2577  segfault when a large width is passed on 32-bit platforms.
     2578
     2579- Issue #1733488: Fix compilation of bufferobject.c on AIX.
     2580
     2581- Issue #1722485: remove docstrings again when running with -OO.
     2582
     2583- Add new attribute names for function objects.  All the func_* become
     2584  __*__ attributes.  (Some already existed, e.g., __doc__ and
     2585  __name__.)
     2586
     2587- Add -3 option to the interpreter to warn about features that are
     2588  deprecated and will be changed/removed in Python 3.0.
     2589
     2590- Patch #1686487: you can now pass any mapping after '**' in function
     2591  calls.
     2592
     2593- except clauses may now be spelled either "except E, target:" or
     2594  "except E as target:". This is to provide forwards compatibility
     2595  with Python 3.0.
     2596
     2597- Deprecate BaseException.message as per PEP 352.
     2598
     2599- Issue #1303614: don't expose object's __dict__ when the dict is
     2600  inherited from a builtin base.
     2601
     2602- When __slots__ are set to a unicode string, make it work the same as
     2603  setting a plain string, ie don't expand to single letter identifiers.
     2604
     2605- Request #1191699:  Slices can now be pickled.
     2606
     2607- Request #1193128:  str.translate() now allows a None argument for
     2608  translations that only remove characters without re-mapping the
     2609  remaining characters.
     2610
     2611- Patch #1682205: a TypeError while unpacking an iterable is no longer
     2612  masked by a generic one with the message "unpack non-sequence".
     2613
     2614- Remove unused file Python/fmod.c.
     2615
     2616- Bug #1683368: The object.__init__() and object.__new__() methods are
     2617  now stricter in rejecting excess arguments.  The only time when
     2618  either allows excess arguments is when it is not overridden and the
     2619  other one is.  For backwards compatibility, when both are
     2620  overridden, it is a deprecation warning (for now; maybe a Py3k
     2621  warning later).  Also, type.__init__() insists on the same signature
     2622  as supported by type.__new__().
     2623
     2624- Patch #1675423: PyComplex_AsCComplex() now tries to convert an
     2625  object to complex using its __complex__() method before falling back
     2626  to the __float__() method. Therefore, the functions in the cmath
     2627  module now can operate on objects that define a __complex__()
     2628  method.
     2629
     2630- Patch #1623563: allow __class__ assignment for classes with
     2631  __slots__.  The old and the new class are still required to have the
     2632  same slot names.
     2633
     2634- Patch #1642547: Fix an error/crash when encountering syntax errors
     2635  in complex if statements.
     2636
     2637- Patch #1462488: Python no longer segfaults when
     2638  ``object.__reduce_ex__()`` is called with an object that is faking
     2639  its type.
     2640
     2641- Patch #1680015: Don't modify __slots__ tuple if it contains an
     2642  unicode name.
     2643
     2644- Patch #1444529: the builtin compile() now accepts keyword arguments.
     2645
     2646- Bug #1678647: write a newline after printing an exception in any
     2647  case, even when converting the value to a string failed.
     2648
     2649- The dir() function has been extended to call the __dir__() method on
     2650  its argument, if it exists. If not, it will work like before. This
     2651  allows customizing the output of dir() in the presence of a
     2652  __getattr__().
     2653
     2654- Patch #922167: Python no longer segfaults when faced with infinitely
     2655  self-recursive reload() calls (as reported by bug #742342).
     2656
     2657- Patch #1675981: remove unreachable code from ``type.__new__()``
     2658  method.
     2659
     2660- Patch #1491866: change the complex() constructor to allow
     2661  parthensized forms. This means complex(repr(x)) now works instead of
     2662  raising a ValueError.
     2663
     2664- Patch #703779: unset __file__ in __main__ after running a file. This
     2665  makes the filenames the warning module prints much more sensible
     2666  when a PYTHONSTARTUP file is used.
     2667
     2668- Variant of patch #697613: don't exit the interpreter on a SystemExit
     2669  exception if the -i command line option or PYTHONINSPECT environment
     2670  variable is given, but break into the interactive interpreter just
     2671  like on other exceptions or normal program exit.
     2672
     2673- Patch #1638879: don't accept strings with embedded NUL bytes in
     2674  long().
     2675
     2676- Bug #1674503: close the file opened by execfile() in an error
     2677  condition.
     2678
     2679- Patch #1674228: when assigning a slice (old-style), check for the
     2680  sq_ass_slice instead of the sq_slice slot.
     2681
     2682- When printing an unraisable error, don't print exceptions. before
     2683  the name.  This duplicates the behavior whening normally printing
     2684  exceptions.
     2685
     2686- Bug #1653736: Properly discard third argument to
     2687  slot_nb_inplace_power.
     2688
     2689- PEP 352: Raising a string exception now triggers a TypeError.
     2690  Attempting to catch a string exception raises DeprecationWarning.
     2691
     2692- Bug #1377858: Fix the segfaulting of the interpreter when an object
     2693  created a weakref on itself during a __del__ call for new-style
     2694  classes (classic classes still have the bug).
     2695
     2696- Bug #1579370: Make PyTraceBack_Here use the current thread, not the
     2697  frame's thread state.
     2698
     2699- patch #1630975: Fix crash when replacing sys.stdout in
     2700  sitecustomize.py.
     2701
     2702- Prevent seg fault on shutdown which could occur if an object raised
     2703  a warning.
     2704
     2705- Bug #1566280: Explicitly invoke threading._shutdown from Py_Main, to
     2706  avoid relying on atexit.
     2707
     2708- Bug #1590891: random.randrange don't return correct value for big
     2709  number.
     2710
     2711- Patch #1586791: Better exception messages for some operations on
     2712  strings, tuples and lists.
     2713
     2714- Bug #1067760: Deprecate passing floats to file.seek.
     2715
     2716- Bug #1591996: Correctly forward exception in instance_contains().
     2717
     2718- Bug #1588287: fix invalid assertion for `1,2` in debug builds.
     2719
     2720- Bug #1576657: when setting a KeyError for a tuple key, make sure
     2721  that the tuple isn't used as the "exception arguments tuple".
     2722
     2723- Bug #1565514: SystemError not raised on too many nested blocks.
     2724
     2725- Bug #1576174: WindowsError now displays the windows error code
     2726  again, no longer the posix error code.
     2727
     2728- Patch #1549049: Support long values in structmember, issue warnings
     2729  if the assigned value for structmember fields gets truncated.
     2730
     2731- Update the peephole optimizer to remove more dead code (jumps after
     2732  returns) and inline unconditional jumps to returns.
     2733
     2734- Bug #1545497: when given an explicit base, int() did ignore NULs
     2735  embedded in the string to convert.
     2736
     2737- Bug #1569998: break inside a try statement (outside a loop) is now
     2738  recognized and rejected.
     2739
     2740- list.pop(x) accepts any object x following the __index__ protocol.
     2741
     2742- A number of places, including integer negation and absolute value,
     2743  were fixed to not rely on undefined behaviour of the C compiler
     2744  anymore.
     2745
     2746- Bug #1566800: make sure that EnvironmentError can be called with any
     2747  number of arguments, as was the case in Python 2.4.
     2748
     2749- Patch #1567691: super() and new.instancemethod() now don't accept
     2750  keyword arguments any more (previously they accepted them, but
     2751  didn't use them).
     2752
     2753- Fix a bug in the parser's future statement handling that led to
     2754  "with" not being recognized as a keyword after, e.g., this
     2755  statement: from __future__ import division, with_statement
     2756
     2757- Bug #1557232: fix seg fault with def f((((x)))) and def f(((x),)).
     2758
     2759- Fix %zd string formatting on Mac OS X so it prints negative numbers.
     2760
     2761- Allow exception instances to be directly sliced again.
     2762
     2763- Bug #1551432: Exceptions do not define an explicit __unicode__
     2764  method.  This allows calling unicode() on exceptions classes
     2765  directly to succeed.
     2766
     2767- Bug #1542051: Exceptions now correctly call PyObject_GC_UnTrack.
     2768  Also make sure that every exception class has __module__ set to
     2769  'exceptions'.
     2770
     2771- Bug #1550983: emit better error messages for erroneous relative
     2772  imports (if not in package and if beyond toplevel package).
     2773
     2774- Overflow checking code in integer division ran afoul of new gcc
     2775  optimizations.  Changed to be more standard-conforming.
     2776
     2777- Patch #1542451: disallow continue anywhere under a finally.
     2778
     2779- Patch #1546288: fix seg fault in dict_equal due to ref counting bug.
     2780
     2781- The return tuple from str.rpartition(sep) is (tail, sep, head) where
     2782  head is the original string if sep was not found.
     2783
     2784- Bug #1520864: unpacking singleton tuples in list comprehensions and
     2785  generator expressions (x for x, in ... ) works again.  Fixing this
     2786  problem required changing the .pyc magic number.  This means that
     2787  .pyc files generated before 2.5c2 will be regenerated.
     2788
     2789- ``with`` and ``as`` are now keywords.
     2790
     2791- Bug #1664966: Fix crash in exec if Unicode filename can't be
     2792  decoded.
     2793
     2794- Issue #1537: Changed GeneratorExit's base class from Exception to
     2795  BaseException.
     2796
     2797- Issue #1703448: A joined thread could show up in the
     2798  threading.enumerate() list after the join() for a brief period until
     2799  it actually exited.
     2800
     2801
     2802Library
     2803-------
     2804
     2805- Patch #2274: Add heapq.heappushpop().
     2806
     2807- Add inspect.isabstract(object) to fix bug #2223
     2808
     2809- Add a __format__ method to Decimal, to support PEP 3101.
     2810
     2811- Add a timing parameter when using trace.Trace to print out
     2812  timestamps.
     2813
     2814- Issue #1627: httplib now ignores negative Content-Length headers.
     2815
     2816- Issue #900744: If an invalid chunked-encoding header is sent by a
     2817  server, httplib will now raise IncompleteRead and close the
     2818  connection instead of raising ValueError.
     2819
     2820- Issue #1492: The content type of BaseHTTPServer error messages can
     2821  now be overridden.
     2822
     2823- Issue #1781: ConfigParser now does not let you add the "default" section
     2824  (ignore-case)
     2825
     2826- Removed uses of dict.has_key() from distutils, and uses of
     2827  callable() from copy_reg.py, so the interpreter now starts up
     2828  without warnings when '-3' is given.  More work like this needs to
     2829  be done in the rest of the stdlib.
     2830
     2831- Issue #1916: added isgenerator() and isgeneratorfunction() to
     2832  inspect.py.
     2833
     2834- Issue #1224: Fixed bad url parsing when path begins with double
     2835  slash.
     2836
     2837- ctypes instances that are not or do not contain pointers can now be
     2838  pickled.
     2839
     2840- Patch #1966: Break infinite loop in httplib when the servers
     2841  implements the chunked encoding incorrectly.
     2842
     2843- Rename rational.py to fractions.py and the rational.Rational class
     2844  to fractions.Fraction, to avoid the name clash with the abstract
     2845  base class numbers.Rational.  See discussion in issue #1682.
     2846
     2847- The pickletools module now provides an optimize() function that
     2848  eliminates unused PUT opcodes from a pickle string.
     2849
     2850- Patch #2021: Allow tempfile.NamedTemporaryFile and
     2851  SpooledTemporaryFile to be used in with statements by correctly
     2852  supporting the context management protocol.
     2853
     2854- Patch #1979: Add rich comparisons to Decimal, and make Decimal
     2855  comparisons involving a NaN follow the IEEE 754 standard.
     2856
     2857- Issue #2004: tarfile.py: Use mode 0700 for temporary directories and
     2858  default permissions for missing directories.
     2859
     2860- Issue #175006: The debugger used to skip the condition of a "while"
     2861  statement after the first iteration. Now it correctly steps on the
     2862  expression, and breakpoints on the "while" statement are honored on
     2863  each loop.
     2864
     2865- Issue #1765140: add an optional delay argument to FileHandler and
     2866  its subclasses. Defaults to false (existing behaviour), but if true,
     2867  defers opening the file until the first call to emit().
     2868
     2869- The pprint module now supports sets and frozensets.
     2870
     2871- Issue #1221598: add optional callbacks to ftplib.FTP's storbinary()
     2872  and storlines() methods.  (Contributed by Phil Schwartz)
     2873
     2874- Issue #1715: include sub-extension modules in pydoc's text output.
     2875
     2876- Issue #1836: fix an off-by-one bug in TimedRotatingHandler's
     2877  rollover time calculation.
     2878
     2879- Issue #1021: fix a bug to allow basicConfig to accept NOTSET as a
     2880  level.
     2881
     2882- Issue #932563: add LoggerAdapter convenience class to make it easier
     2883  to add contextual information in logging output.
     2884
     2885- Issue #1760556: fix a bug to avoid FileHandler throwing an exception
     2886  in flush().
     2887
     2888- Bug #1530959: distutils' build command now uses different build
     2889  directory when building extension modules against versions of Python
     2890  compiled with ``--with-pydebug``.
     2891
     2892- Issue #1555501: move plistlib from plat-mac directory to general
     2893  library.
     2894
     2895- Issue #1269: fix a bug in pstats.add_callers() and add a unit test
     2896  file for pstats.
     2897
     2898- Issue #1669: don't allow shutil.rmtree() to be called on a symlink
     2899  to a directory.
     2900
     2901- Issue #1664522: in urllib, don't read non-existing directories in
     2902  ftp mode, returning a 0-byte file -- raise an IOError instead.
     2903
     2904- Issue #856047: respect the ``no_proxy`` environment variable when
     2905  using the ``http_proxy`` etc. environment variables in urllib.
     2906
     2907- Issue #1178141: add a getcode() method to the addinfourls that
     2908  urllib.open() returns so that you can retrieve the HTTP status code.
     2909
     2910- Issue #1003: Fix zipfile decryption check, it would fail zip files
     2911  with extended local headers.
     2912
     2913- Issue #1189216: Fix the zipfile module to work on archives with
     2914  headers past the 2**31 byte boundary.
     2915
     2916- Issue #1336: fix a race condition in subprocess.Popen if the garbage
     2917  collector kicked in at the wrong time that would cause the process
     2918  to hang when the child wrote to stderr.
     2919
     2920- Issue #1146: fix how textwrap breaks a long word that would start in
     2921  the last column of a line.
     2922
     2923- Issue #1693149: trace.py --ignore-module - accept multiple
     2924  comma-separated modules to be given.
     2925
     2926- Issue #1822: MIMEMultipart.is_multipart() behaves correctly for a
     2927  just-created (and empty) instance. Thanks Jonathan Share.
     2928
     2929- Issue #1861: Added an attribute to the sched module which returns an
     2930  ordered list of upcoming events (displayed as named tuples).
     2931
     2932- Issue #1837: The queue module now also supports a LIFO queue and a
     2933  priority queue.
     2934
     2935- Patch #1048820: Add insert-mode editing to curses.textpad.Textbox
     2936  (patch by Stefan Wehr).  Also, fix an off-by-one bug in
     2937  Textbox.gather().
     2938
     2939- Issue #1831: ctypes now raises a TypeError if conflicting positional
     2940  and named arguments are passed to a Structure or Union initializer.
     2941  When too many positional arguments are passed, also a TypeError is
     2942  raised instead of a ValueError.
     2943
     2944- Convert the internal ctypes array type cache to a WeakValueDict so
     2945  that array types do not live longer than needed.
     2946
     2947- Issue #1786: pdb should use its own stdin/stdout around an exec call
     2948  and when creating a recursive instance.
     2949
     2950- Issue #1698398: ZipFile.printdir() crashed because the format string
     2951  expected a tuple type of length six instead of time.struct_time
     2952  object.
     2953
     2954- Issue #1780: The Decimal constructor now accepts arbitrary leading
     2955  and trailing whitespace when constructing from a string.
     2956  Context.create_decimal no longer accepts trailing newlines.
     2957
     2958- Decimal.as_tuple(), difflib.find_longest_match() and inspect
     2959  functions that returned a tuple now return a named tuple.
     2960
     2961- Doctest now returns results as a named tuple for readability:
     2962      (0, 7) --> TestResults(failed=0, attempted=7)
     2963
     2964- Issue #846388:q re.match is interruptible now, which is particularly
     2965  good for long regular expression matches.
     2966
     2967- Patch #1137: allow setting buffer_size attribute on pyexpat Parser
     2968  objects to set the character data buffer size.
     2969
     2970- Issue #1757: The hash of a Decimal instance is no longer affected by
     2971  the current context.
     2972
     2973- Patch #467924: add ZipFile.extract() and ZipFile.extractall() in the
     2974  zipfile module.
     2975
     2976- Issue #1646: Make socket support the TIPC protocol.
     2977
     2978- Bug #1742: return os.curdir from os.path.relpath() if both arguments
     2979  are equal instead of raising an exception.
     2980
     2981- Patch #1637: fix urlparse for URLs like 'http://x.com?arg=/foo'.
     2982
     2983- Patch #1698: allow '@' in username parsed by urlparse.py.
     2984
     2985- Issue #1735: TarFile.extractall() now correctly sets directory
     2986  permissions and times.
     2987
     2988- Bug #1713: posixpath.ismount() claims symlink to a mountpoint is a mountpoint.
     2989
     2990- Bug #1687: Fxed plistlib.py restricts <integer> to Python int when
     2991  writing
     2992
     2993- Issue #1700: Regular expression inline flags incorrectly handle
     2994  certain unicode characters.
     2995
     2996- Issue #1689: PEP 3141, numeric abstract base classes.
     2997
     2998- Tk issue #1851526: Return results from Python callbacks to Tcl as
     2999  Tcl objects.
     3000
     3001- Issue #1642: Fix segfault in ctypes when trying to delete attributes.
     3002
     3003- Issue #1727780: Support loading pickles of random.Random objects
     3004  created on 32-bit systems on 64-bit systems, and vice versa. As a
     3005  consequence of the change, Random pickles created by Python 2.6
     3006  cannot be loaded in Python 2.5.
     3007
     3008- Issue #1455: The distutils package now supports VS 2005 and VS 2008
     3009  for both the msvccompiler and cygwincompiler.
     3010
     3011- Issue #1531: tarfile.py: Read fileobj from the current offset, do
     3012  not seek to the start.
     3013
     3014- Issue #1534: Added a dictionary sys.float_info with information
     3015  about the internal floating point type to the sys module.
     3016
     3017- Issue #1429818: patch for trace and doctest modules so they play
     3018  nicely together.
     3019
     3020- doctest made a bad assumption that a package's __loader__.get_data()
     3021  method used universal newlines.
     3022
     3023- Issue #1705170: contextlib.contextmanager was still swallowing
     3024  StopIteration in some cases. This should no longer happen.
     3025
     3026- Issue #1292: On alpha, arm, ppc, and s390 linux systems the
     3027  --with-system-ffi configure option defaults to "yes".
     3028
     3029- IN module for FreeBSD 8 is added and preexisting FreeBSD 6 and 7
     3030  files are updated.
     3031
     3032- Issues #1181, #1287: unsetenv() is now called when the
     3033  os.environ.pop() and os.environ.clear() methods are used.
     3034
     3035- ctypes will now work correctly on 32-bit systems when Python is
     3036  configured with --with-system-ffi.
     3037
     3038- Patch #1203: ctypes now does work on OS X when Python is built with
     3039  --disable-toolbox-glue.
     3040
     3041- collections.deque() now supports a "maxlen" argument.
     3042
     3043- itertools.count() is no longer bounded to LONG_MAX.  Formerly, it
     3044  raised an OverflowError.  Now, automatically shifts from ints to
     3045  longs.
     3046
     3047- Added itertools.product() which forms the Cartesian product of the
     3048  input iterables.
     3049
     3050- Added itertools.combinations() and itertools.permutations().
     3051
     3052- Patch #1541463: optimize performance of cgi.FieldStorage operations.
     3053
     3054- Decimal is fully updated to the latest Decimal Specification
     3055  (v1.66).
     3056
     3057- Bug #1153: repr.repr() now doesn't require set and dictionary items
     3058  to be orderable to properly represent them.
     3059
     3060- A 'c_longdouble' type was added to the ctypes module.
     3061
     3062- Bug #1709599: Run test_1565150 only if the file system is NTFS.
     3063
     3064- When encountering a password-protected robots.txt file the
     3065  RobotFileParser no longer prompts interactively for a username and
     3066  password (bug 813986).
     3067
     3068- TarFile.__init__() no longer fails if no name argument is passed and
     3069  the fileobj argument has no usable name attribute (e.g. StringIO).
     3070
     3071- The functools module now provides 'reduce', for forward
     3072  compatibility with Python 3000.
     3073
     3074- Server-side SSL support and cert verification added, by Bill
     3075  Janssen.
     3076
     3077- socket.ssl deprecated; use new ssl module instead.
     3078
     3079- uuid creation is now threadsafe.
     3080
     3081- EUC-KR codec now handles the cheot-ga-keut composed make-up hangul
     3082  syllables.
     3083
     3084- GB18030 codec now can encode additional two-byte characters that are
     3085  missing in GBK.
     3086
     3087- Add new codecs for UTF-32, UTF-32-LE and UTF-32-BE.
     3088
     3089- Bug #1704793: Return UTF-16 pair if unicodedata.lookup cannot
     3090  represent the result in a single character.
     3091
     3092- Bug #978833: Close https sockets by releasing the _ssl object.
     3093
     3094- Change location of the package index to pypi.python.org/pypi
     3095
     3096- Bug #1701409: Fix a segfault in printing ctypes.c_char_p and
     3097  ctypes.c_wchar_p when they point to an invalid location.  As a
     3098  sideeffect the representation of these instances has changed.
     3099
     3100- tarfile.py: Added "exclude" keyword argument to TarFile.add().
     3101
     3102- Bug #1734723: Fix repr.Repr() so it doesn't ignore the maxtuple
     3103  attribute.
     3104
     3105- The urlopen function of urllib2 now has an optional timeout
     3106  parameter (note that it actually works with HTTP, HTTPS, FTP and
     3107  FTPS connections).
     3108
     3109- In ftplib, the FTP.ntransfercmd method, when in passive mode, now
     3110  uses the socket.create_connection function, using the timeout
     3111  specified at connection time.
     3112
     3113- Bug #1728403: Fix a bug that CJKCodecs StreamReader hangs when it
     3114  reads a file that ends with incomplete sequence and sizehint
     3115  argument for .read() is specified.
     3116
     3117- Bug #1730389: Change time.strptime() to use ``\s+`` instead of
     3118  ``\s*`` when matching spaces in the specified format argument.
     3119
     3120- Bugs #1668596/#1720897: distutils now copies data files even if
     3121  package_dir is empty.
     3122
     3123- sha now raises a DeprecationWarning upon import.
     3124
     3125- md5 now raises a DeprecationWarning upon import.
     3126
     3127- Issue #1385: The hmac module now computes the correct hmac when
     3128  using hashes with a block size other than 64 bytes (such as sha384
     3129  and sha512).
     3130
     3131- mimify now raises a DeprecationWarning upon import.
     3132
     3133- MimeWriter now raises a DeprecationWarning upon import.
     3134
     3135- tarfile.py: Improved unicode support. Unicode input names are now
     3136  officially supported. Added "errors" argument to the TarFile class.
     3137
     3138- urllib.ftpwrapper class now accepts an optional timeout.
     3139
     3140- shlex.split() now has an optional "posix" parameter.
     3141
     3142- The posixfile module now raises a DeprecationWarning.
     3143
     3144- Remove the gopherlib module.  This also leads to the removal of
     3145  gopher support in urllib/urllib2.
     3146
     3147- Fix bug in marshal where bad data would cause a segfault due to lack
     3148  of an infinite recursion check.
     3149
     3150- Removed plat-freebsd2 and plat-freebsd3 directories (and IN.py in
     3151  the directories).
     3152
     3153- HTML-escape the plain traceback in cgitb's HTML output, to prevent
     3154  the traceback inadvertently or maliciously closing the comment and
     3155  injecting HTML into the error page.
     3156
     3157- The popen2 module and os.popen* are deprecated.  Use the subprocess
     3158  module.
     3159
     3160- Added an optional credentials argument to SMTPHandler, for use with
     3161  SMTP servers which require authentication.
     3162
     3163- Patch #1695948: Added optional timeout parameter to SocketHandler.
     3164
     3165- Bug #1652788: Minor fix for currentframe.
     3166
     3167- Patch #1598415: Added WatchedFileHandler to better support external
     3168  log file rotation using e.g. newsyslog or logrotate. This handler is
     3169  only useful in Unix/Linux environments.
     3170
     3171- Bug #1706381: Specifying the SWIG option "-c++" in the setup.py file
     3172  (as opposed to the command line) will now write file names ending in
     3173  ".cpp" too.
     3174
     3175- As specified in RFC 2616, an HTTP response like 2xx indicates that
     3176  the client's request was successfully received, understood, and
     3177  accepted.  Now in these cases no error is raised in urllib (issue
     3178  #1177) and urllib2.
     3179
     3180- Bug #1290505: time.strptime's internal cache of locale information
     3181  is now properly recreated when the locale is changed.
     3182
     3183- Patch #1685563: remove (don't add) duplicate paths in
     3184  distutils.MSVCCompiler.
     3185
     3186- Added a timeout parameter to the constructor of other protocols
     3187  (telnetlib, ftplib, smtplib and poplib). This is second part of the
     3188  work started with create_connection() and timeout in httplib, and
     3189  closes patch #723312.
     3190
     3191- Patch #1676823: Added create_connection() to socket.py, which may be
     3192  called with a timeout, and use it from httplib (whose HTTPConnection
     3193  and HTTPSConnection now accept an optional timeout).
     3194
     3195- Bug #978833: Revert r50844, as it broke _socketobject.dup.
     3196
     3197- Bug #1675967: re patterns pickled with Python 2.4 and earlier can
     3198  now be unpickled with Python 2.5 and newer.
     3199
     3200- Patch #1630118: add a SpooledTemporaryFile class to tempfile.py.
     3201
     3202- Patch #1273829: os.walk() now has a "followlinks" parameter. If set
     3203  to True (which is not the default), it visits symlinks pointing to
     3204  directories.
     3205
     3206- Bug #1681228: the webbrowser module now correctly uses the default
     3207  GNOME or KDE browser, depending on whether there is a session of one
     3208  of those present. Also, it tries the Windows default browser before
     3209  trying Mozilla variants.
     3210
     3211- Patch #1339796: add a relpath() function to os.path.
     3212
     3213- Patch #1681153: the wave module now closes a file object it opened if
     3214  initialization failed.
     3215
     3216- Bug #767111: fix long-standing bug in urllib which caused an
     3217  AttributeError instead of an IOError when the server's response
     3218  didn't contain a valid HTTP status line.
     3219
     3220- Patch #957650: "%var%" environment variable references are now
     3221  properly expanded in ntpath.expandvars(), also "~user" home
     3222  directory references are recognized and handled on Windows.
     3223
     3224- Patch #1429539: pdb now correctly initializes the __main__ module
     3225  for the debugged script, which means that imports from __main__ work
     3226  correctly now.
     3227
     3228- The nonobvious commands.getstatus() function is now deprecated.
     3229
     3230- Patch #1393667: pdb now has a "run" command which restarts the
     3231  debugged Python program, optionally with different arguments.
     3232
     3233- Patch #1649190: Adding support for _Bool to ctypes as c_bool.
     3234
     3235- Patch #1530482: add pydoc.render_doc() which returns the
     3236  documentation for a thing instead of paging it to stdout, which
     3237  pydoc.doc() does.
     3238
     3239- Patch #1533909: the timeit module now accepts callables in addition
     3240  to strings for the code to time and the setup code. Also added two
     3241  convenience functions for instantiating a Timer and calling its
     3242  methods.
     3243
     3244- Patch #1537850: tempfile.NamedTemporaryFile now has a "delete"
     3245  parameter which can be set to False to prevent the default
     3246  delete-on-close behavior.
     3247
     3248- Patch #1581073: add a flag to textwrap that prevents the dropping of
     3249  whitespace while wrapping.
     3250
     3251- Patch #1603688: ConfigParser.SafeConfigParser now checks values that
     3252  are set for invalid interpolation sequences that would lead to
     3253  errors on reading back those values.
     3254
     3255- Added support for the POSIX.1-2001 (pax) format to
     3256  tarfile.py. Extended and cleaned up the test suite. Added a new
     3257  testtar.tar.
     3258
     3259- Patch #1449244: Support Unicode strings in
     3260  email.message.Message.{set_charset,get_content_charset}.
     3261
     3262- Patch #1542681: add entries for "with", "as" and "CONTEXTMANAGERS"
     3263  to pydoc's help keywords.
     3264
     3265- Patch #1555098: use str.join() instead of repeated string
     3266  concatenation in robotparser.
     3267
     3268- Patch #1635454: the csv.DictWriter class now includes the offending
     3269  field names in its exception message if you try to write a record
     3270  with a dictionary containing fields not in the CSV field names list.
     3271
     3272- Patch #1668100: urllib2 now correctly raises URLError instead of
     3273  OSError if accessing a local file via the file:// protocol fails.
     3274
     3275- Patch #1677862: Require a space or tab after import in .pth files.
     3276
     3277- Patch #1192590: Fix pdb's "ignore" and "condition" commands so they
     3278  trap the IndexError caused by passing in an invalid breakpoint
     3279  number.
     3280
     3281- Patch #1599845: Add an option to disable the implicit calls to
     3282  server_bind() and server_activate() in the constructors for
     3283  TCPServer, SimpleXMLRPCServer and DocXMLRPCServer.
     3284
     3285- Bug #1531963: Make SocketServer.TCPServer's server_address always be
     3286  equal to calling getsockname() on the server's socket. Fixed by
     3287  patch #1545011.
     3288
     3289- Patch #742598: Add .timeout attribute to SocketServer that calls
     3290  .handle_timeout() when no requests are received.
     3291
     3292- Bug #1651235: When a tuple was passed to a ctypes function call,
     3293  Python would crash instead of raising an error.
     3294
     3295- Bug #1646630: ctypes.string_at(buf, 0) and ctypes.wstring_at(buf, 0)
     3296  returned string up to the first NUL character.
     3297
     3298- Patch #957003: Implement smtplib.LMTP.
     3299
     3300- Patch #1481079: add support for HTTP_REFERER to CGIHTTPServer.
     3301
     3302- Patch #1675424: Added tests for uncovered code in the zipfile
     3303  module.  The KeyError raised by Zipfile.getinfo for nonexistent
     3304  names now has a descriptive message.
     3305
     3306- Bug #1115886: os.path.splitext('.cshrc') gives now ('.cshrc', '').
     3307
     3308- unittest now verifies more of its assumptions. In particular,
     3309  TestCase and TestSuite subclasses (not instances) are no longer
     3310  accepted in TestSuite.addTest(). This should cause no
     3311  incompatibility since it never made sense with ordinary subclasses
     3312  -- the failure just occurred later, with a more cumbersome
     3313  exception.
     3314
     3315- Patch #787789: allow to pass custom TestRunner instances to
     3316  unittest's main() function.
     3317
     3318- Patches #1550273, #1550272: fix a few bugs in unittest and add a
     3319  comprehensive test suite for the module.
     3320
     3321- Patch #1001604: glob.glob() now returns unicode filenames if it was
     3322  given a unicode argument and os.listdir() returns unicode filenames.
     3323
     3324- Patch #1673619: setup.py identifies extension modules it doesn't
     3325  know how to build and those it knows how to build but that fail to
     3326  build.
     3327
     3328- Patch #912410: Replace HTML entity references for attribute values
     3329  in HTMLParser.
     3330
     3331- Patch #1663234: you can now run doctest on test files and modules
     3332  using "python -m doctest [-v] filename ...".
     3333
     3334- Patch #1121142: Implement ZipFile.open.
     3335
     3336- Taught setup.py how to locate Berkeley DB on Macs using MacPorts.
     3337
     3338- Added heapq.merge() for merging sorted input streams.
     3339
     3340- Added collections.namedtuple() for assigning field names to tuples.
     3341
     3342- Added itertools.izip_longest().
     3343
     3344- Have the encoding package's search function dynamically import using
     3345  absolute import semantics.
     3346
     3347- Patch #1647484: Renamed GzipFile's filename attribute to name.
     3348
     3349- Patch #1517891: Mode 'a' for ZipFile now creates the file if it
     3350  doesn't exist.
     3351
     3352- Patch #698833: Support file decryption in zipfile.
     3353
     3354- Patch #685268: Consider a package's __path__ in imputil.
     3355
     3356- Patch #1463026: Support default namespace in XMLGenerator.
     3357
     3358- Patch #1571379: Make trace's --ignore-dir facility work in the face
     3359  of relative directory names.
     3360
     3361- Bug #1600860: Search for shared python library in LIBDIR, not
     3362  lib/python/config, on "linux" and "gnu" systems.
     3363
     3364- Patch #1652681: tarfile.py: create nonexistent files in append mode
     3365  and allow appending to empty files.
     3366
     3367- Bug #1124861: Automatically create pipes if GetStdHandle fails in
     3368  subprocess.
     3369
     3370- Patch #1634778: add missing encoding aliases for iso8859_15 and
     3371  iso8859_16.
     3372
     3373- Patch #1638243: the compiler package is now able to correctly
     3374  compile a with statement; previously, executing code containing a
     3375  with statement compiled by the compiler package crashed the
     3376  interpreter.
     3377
     3378- Bug #1643943: Fix time.strptime's support for the %U directive.
     3379
     3380- Patch #1507247: tarfile.py: use current umask for intermediate
     3381  directories.
     3382
     3383- Patch #1627441: close sockets properly in urllib2.
     3384
     3385- Bug #494589: make ntpath.expandvars behave according to its
     3386  docstring.
     3387
     3388- Changed platform module API python_version_tuple() to actually
     3389  return a tuple (it used to return a list).
     3390
     3391- Added new platform module APIs python_branch(), python_revision(),
     3392  python_implementation() and linux_distribution().
     3393
     3394- Added support for IronPython and Jython to the platform module.
     3395
     3396- The sets module has been deprecated.  Use the built-in set/frozenset
     3397  types instead.
     3398
     3399- Bug #1610795: make ctypes.util.find_library work on BSD systems.
     3400
     3401- Fixes for 64-bit Windows: In ctypes.wintypes, correct the
     3402  definitions of HANDLE, WPARAM, LPARAM data types.  Make
     3403  parameterless foreign function calls work.
     3404
     3405- The version number of the ctypes package changed to "1.1.0".
     3406
     3407- Bug #1627575: logging: Added _open() method to FileHandler which can
     3408  be used to reopen files. The FileHandler instance now saves the
     3409  encoding (which can be None) in an attribute called "encoding".
     3410
     3411- Bug #411881: logging.handlers: bare except clause removed from
     3412  SMTPHandler.emit. Now, only ImportError is trapped.
     3413
     3414- Bug #411881: logging.handlers: bare except clause removed from
     3415  SocketHandler.createSocket. Now, only socket.error is trapped.
     3416
     3417- Bug #411881: logging: bare except clause removed from
     3418  LogRecord.__init__.  Now, only ValueError, TypeError and
     3419  AttributeError are trapped.
     3420
     3421- Patch #1504073: Fix tarfile.open() for mode "r" with a fileobj
     3422  argument.
     3423
     3424- Patch #1182394 from Shane Holloway: speed up HMAC.hexdigest.
     3425
     3426- Patch #1262036: Prevent TarFiles from being added to themselves
     3427  under certain conditions.
     3428
     3429- Patch #1230446: tarfile.py: fix ExFileObject so that read() and
     3430  tell() work correctly together with readline().
     3431
     3432- Patch #1484695: The tarfile module now raises a HeaderError
     3433  exception if a buffer given to frombuf() is invalid.
     3434
     3435- Bug #1503765: Fix a problem in logging.config with spaces in comma-
     3436  separated lists read from logging config files.
     3437
     3438- Patch #1604907: Fix problems in logging.handlers caused at logging
     3439  shutdown when syslog handlers fail to initialize because of syslogd
     3440  problems.
     3441
     3442- Patch #1608267: fix a race condition in os.makedirs() if the
     3443  directory to be created is already there.
     3444
     3445- Patch #1610437: fix a tarfile bug with long filename headers.
     3446
     3447- Patch #1371075: Make ConfigParser accept optional dict type for
     3448  ordering, sorting, etc.
     3449
     3450- Bug #1563807: _ctypes built on AIX fails with ld ffi error.
     3451
     3452- Bug #1598620: A ctypes Structure cannot contain itself.
     3453
     3454- Patch #1070046: Marshal new-style objects like InstanceType in
     3455  xmlrpclib.
     3456
     3457- cStringIO.truncate(-1) now raises an IOError, like StringIO and
     3458  regular files.
     3459
     3460- Patch #1472877: Fix Tix subwidget name resolution.
     3461
     3462- Patch #1594554: Always close a tkSimpleDialog on ok(), even if an
     3463  exception occurs.
     3464
     3465- Patch #1538878: Don't make tkSimpleDialog dialogs transient if the
     3466  parent window is withdrawn.
     3467
     3468- Bug #1597824: return the registered function from atexit.register()
     3469  to facilitate usage as a decorator.
     3470
     3471- Patch #1360200: Use unmangled_version RPM spec field to deal with
     3472  file name mangling.
     3473
     3474- Patch #1359217: Process 2xx response in an ftplib transfer that
     3475  precedes an 1xx response.
     3476
     3477- Patch #1355023: support whence argument for GzipFile.seek.
     3478
     3479- Patch #1065257: Support passing open files as body in
     3480  HTTPConnection.request().
     3481
     3482- Bug #1569790: mailbox.py: Maildir.get_folder() and MH.get_folder()
     3483  weren't passing the message factory on to newly created Maildir/MH
     3484  objects.
     3485
     3486- Patch #1514543: mailbox.py: In the Maildir class, report errors if
     3487  there's a filename clash instead of possibly losing a message.
     3488  (Patch by David Watson.)
     3489
     3490- Patch #1514544: Try to ensure that messages/indexes have been
     3491  physically written to disk after calling .flush() or
     3492  .close(). (Patch by David Watson.)
     3493
     3494- Patch #1592250: Add elide argument to Tkinter.Text.search.
     3495
     3496- Patch #838546: Make terminal become controlling in pty.fork().
     3497
     3498- Patch #1351744: Add askyesnocancel helper for tkMessageBox.
     3499
     3500- Patch #1060577: Extract list of RPM files from spec file in
     3501  bdist_rpm.
     3502
     3503- Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders.
     3504
     3505- Patch #1583880: fix tarfile's problems with long names and posix/
     3506  GNU modes.
     3507
     3508- Bug #1586448: the compiler module now emits the same bytecode for
     3509  list comprehensions as the builtin compiler, using the LIST_APPEND
     3510  opcode.
     3511
     3512- Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and
     3513  fix all codecs file wrappers to work correctly with the "with"
     3514  statement (bug #1586513).
     3515
     3516- Lib/modulefinder.py now handles absolute and relative imports
     3517  correctly.
     3518
     3519- Patch #1567274: Support SMTP over TLS.
     3520
     3521- Patch #1560695: Add .note.GNU-stack to ctypes' sysv.S so that ctypes
     3522  isn't considered as requiring executable stacks.
     3523
     3524- ctypes callback functions only support 'fundamental' data types as
     3525  result type.  Raise an error when something else is used.  This is a
     3526  partial fix for Bug #1574584.
     3527
     3528- Fix turtle so that time.sleep is imported for the entire library.
     3529  Allows the demo2 function to be executed on its own instead of only
     3530  when the module is run as a script.
     3531
     3532- Bug #813342: Start the IDLE subprocess with -Qnew if the parent is
     3533  started with that option.
     3534
     3535- Bug #1565150: Fix subsecond processing for os.utime on Windows.
     3536
     3537- Support for MSVC 8 was added to bdist_wininst.
     3538
     3539- Bug #1446043: correctly raise a LookupError if an encoding name
     3540  given to encodings.search_function() contains a dot.
     3541
     3542- Bug #1560617: in pyclbr, return full module name not only for
     3543  classes, but also for functions.
     3544
     3545- Bug #1457823: cgi.(Sv)FormContentDict's constructor now takes
     3546  keep_blank_values and strict_parsing keyword arguments.
     3547
     3548- Bug #1566602: correct failure of posixpath unittest when $HOME ends
     3549  with a slash.
     3550
     3551- Bug #1565661: in webbrowser, split() the command for the default
     3552  GNOME browser in case it is a command with args.
     3553
     3554- Made the error message for time.strptime when the data data and
     3555  format do match be more clear.
     3556
     3557- Fix a bug in traceback.format_exception_only() that led to an error
     3558  being raised when print_exc() was called without an exception set.
     3559  In version 2.4, this printed "None", restored that behavior.
     3560
     3561- Make webbrowser.BackgroundBrowser usable in Windows (it wasn't
     3562  because the close_fds arg to subprocess.Popen is not supported).
     3563
     3564- Reverted patch #1504333 to sgmllib because it introduced an infinite
     3565  loop.
     3566
     3567- Patch #1553314: Fix the inspect.py slowdown that was hurting IPython
     3568  & SAGE by adding smarter caching in inspect.getmodule()
     3569
     3570- Fix missing import of the types module in logging.config.
     3571
     3572- Patch #1550886: Fix decimal module context management implementation
     3573  to match the localcontext() example from PEP 343.
     3574
     3575- Bug #1545341: The 'classifier' keyword argument to the Distutils
     3576  setup() function now accepts tuples as well as lists.
     3577
     3578- Bug #1541863: uuid.uuid1 failed to generate unique identifiers on
     3579  systems with low clock resolution.
     3580
     3581- Bug #1531862: Do not close standard file descriptors in subprocess.
     3582
     3583- idle: Honor the "Cancel" action in the save dialog (Debian bug
     3584  #299092).
     3585
     3586- Fix utf-8-sig incremental decoder, which didn't recognise a BOM when
     3587  the first chunk fed to the decoder started with a BOM, but was
     3588  longer than 3 bytes.
     3589
     3590- The implementation of UnicodeError objects has been simplified
     3591  (start and end attributes are now stored directly as Py_ssize_t
     3592  members).
     3593
     3594- Issue #829951: In the smtplib module, SMTP.starttls() now complies
     3595  with RFC 3207 and forgets any knowledge obtained from the server not
     3596  obtained from the TLS negotiation itself.  Patch contributed by Bill
     3597  Fenner.
     3598
     3599- Issue #1339: The smtplib.SMTP class has been refactored a bit such
     3600  that the SMTP.starttls() caller no longer needs to call ehlo()
     3601  beforehand.  SMTP.starttls() now raises an exception of the server
     3602  does not claim to support starttls.  Adds the
     3603  SMTP.ehlo_or_helo_if_needed() method.  Patch contributed by Bill
     3604  Fenner.
     3605
     3606- Patch #1089358: Add signal.siginterrupt, a wrapper around
     3607  siginterrupt(3).
     3608
     3609Extension Modules
     3610-----------------
     3611
     3612- Patch #1657: added select.epoll and select.kqueue.
     3613
     3614- Patch #1506171: added operator.methodcaller().
     3615
     3616- Patch #1826: operator.attrgetter() now supports dotted attribute paths.
     3617
     3618- Patch #1957: syslogmodule: Release GIL when calling syslog(3).
     3619
     3620- Bug #2112: mmap.error is now a subclass of EnvironmentError and not
     3621  a direct EnvironmentError.
     3622
     3623- Bug #2111: mmap segfaults when trying to write a block opened with
     3624  PROT_READ.
     3625
     3626- Bug #2063: correct order of utime and stime in os.times() result on
     3627  Windows.
     3628
     3629- Patch #1736: Fix file name handling of _msi.FCICreate.
     3630
     3631- Updated ``big5hkscs`` codec to the HKSCS revision of 2004.
     3632
     3633- Issue #1940: make it possible to use curses.filter() before
     3634  curses.initscr() as the documentation says.
     3635
     3636- Backport of _fileio module from Python 3.0.
     3637
     3638- Patch #1087741: mmap.mmap is now a class, not a factory function. It
     3639  is also subclassable now.
     3640
     3641- Patch #1648: added ``sys.getprofile()`` and ``sys.gettrace()``.
     3642
     3643- Patch #1663329: added ``os.closerange()`` function to quickly close
     3644  a range of file descriptors without considering errors.
     3645
     3646- Patch #976880: ``mmap`` objects now have an ``rfind`` method that
     3647  works as expected.  ``mmap.find`` also takes an optional ``end``
     3648  parameter.
     3649
     3650- _winreg's HKEY object has gained __enter__ and __exit__ methods to
     3651  support the context manager protocol.  The _winreg module also
     3652  gained a new function ``ExpandEnvironmentStrings`` to expand
     3653  REG_EXPAND_SZ keys.
     3654
     3655- itertools.starmap() now accepts any iterable input. Previously, it
     3656  required the function inputs to be tuples.
     3657
     3658- itertools.chain() now has an alternate constructor,
     3659  chain.from_iterable().
     3660
     3661- Issue #1646: Make socket support TIPC. The socket module now has
     3662  support for TIPC under Linux, see http://tipc.sf.net/ for more
     3663  information.
     3664
     3665- Added interface for Windows' WSAIoctl to socket object and added an
     3666  example for a simple network sniffer.
     3667
     3668- Bug #1301: Bad assert in _tkinter fixed.
     3669
     3670- Added bdist_wininst executable for VS 2008.
     3671
     3672- Bug #1604: collections.deque.__init__(iterable) now clears any prior
     3673  contents before adding elements from the iterable.  This fix brings
     3674  the behavior into line with that for list.__init__().
     3675
     3676- Added wide char functions to msvcrt module: getwch, getwche, putwch
     3677  and ungetwch. The functions accept or return unicode.
     3678
     3679- os.access now returns True on Windows for any existing directory.
     3680
     3681- Added warnpy3k function to the warnings module.
     3682
     3683- Marshal.dumps() now expects exact type matches for int, long, float,
     3684  complex, tuple, list, dict, set, and frozenset.  Formerly, it would
     3685  silently miscode subclasses of those types.  Now, it raises a
     3686  ValueError instead.
     3687
     3688- Patch #1388440: Add set_completion_display_matches_hook and
     3689  get_completion_type to readline.
     3690
     3691- Bug #1649098: Avoid declaration of zero-sized array declaration in
     3692  structure.
     3693
     3694- Removed the rgbimg module; been deprecated since Python 2.5.
     3695
     3696- Bug #1721309: prevent bsddb module from freeing random memory.
     3697
     3698- Bug #1233: fix bsddb.dbshelve.DBShelf append method to work as
     3699  intended for RECNO databases.
     3700
     3701- pybsddb.sf.net Bug #477182: Load the database flags at database open
     3702  time so that opening a database previously created with the DB_DUP
     3703  or DB_DUPSORT flag set will keep the proper behavior on subsequent
     3704  opens.  Specifically: dictionary assignment to a DB object will
     3705  replace all values for a given key when the database allows
     3706  duplicate values.  DB users should use DB.put(k, v) when they want
     3707  to store duplicates; not DB[k] = v.
     3708
     3709- Add the bsddb.db.DBEnv.lock_id_free method.
     3710
     3711- Bug #1686475: Support stat'ing open files on Windows again.
     3712
     3713- Patch #1185447: binascii.b2a_qp() now correctly quotes binary
     3714  characters with ASCII value less than 32. Also, it correctly quotes
     3715  dots only if they occur on a single line, as opposed to the previous
     3716  behavior of quoting dots if they are the second character of any
     3717  line.
     3718
     3719- Bug #1622896: fix a rare corner case where the bz2 module raised an
     3720  error in spite of a succesful compression.
     3721
     3722- Patch #1654417: make operator.{get,set,del}slice use the full range
     3723  of Py_ssize_t.
     3724
     3725- Patch #1646728: datetime.fromtimestamp fails with negative
     3726  fractional times.  With unittest.
     3727
     3728- Patch #1490190: posixmodule now includes os.chflags() and
     3729  os.lchflags() functions on platforms where the underlying system
     3730  calls are available.
     3731
     3732- Patch #1494140: Add documentation for the new struct.Struct object.
     3733
     3734- Patch #1432399: Support the HCI protocol for bluetooth sockets
     3735
     3736- Patch #1657276: Make NETLINK_DNRTMSG conditional.
     3737
     3738- Bug #1653736: Complain about keyword arguments to time.isoformat.
     3739
     3740- Bug #1486663: don't reject keyword arguments for subclasses of
     3741  builtin types.
     3742
     3743- Patch #1610575: The struct module now supports the 't' code, for C99
     3744  _Bool.
     3745
     3746- Patch #1635058: ensure that htonl and friends never accept or return
     3747  negative numbers, per the underlying C implementation.
     3748
     3749- Patch #1544279: Improve thread-safety of the socket module by moving
     3750  the sock_addr_t storage out of the socket object.
     3751
     3752- Patch #1019808: fix bug that causes an incorrect error to be
     3753  returned when a socket timeout is set and a connection attempt
     3754  fails.
     3755
     3756- Speed up function calls into the math module.
     3757
     3758- Bug #1588217: don't parse "= " as a soft line break in binascii's
     3759  a2b_qp() function, instead leave it in the string as quopri.decode()
     3760  does.
     3761
     3762- Bug #1599782: Fix segfault on bsddb.db.DB().type().
     3763
     3764- Bug #1567666: Emulate GetFileAttributesExA for Win95.
     3765
     3766- Patch #1576166: Support os.utime for directories on Windows NT+.
     3767
     3768- Patch #1572724: fix typo ('=' instead of '==') in _msi.c.
     3769
     3770- Bug #1572832: fix a bug in ISO-2022 codecs which may cause segfault
     3771  when encoding non-BMP unicode characters.
     3772
     3773- Bug #1556784: allow format strings longer than 127 characters in
     3774  datetime's strftime function.
     3775
     3776- Fix itertools.count(n) to work with negative numbers again.
     3777
     3778- RLIMIT_SBSIZE was added to the resource module where available.
     3779
     3780- Bug #1551427: fix a wrong NULL pointer check in the win32 version of
     3781  os.urandom().
     3782
     3783- Bug #1548092: fix curses.tparm seg fault on invalid input.
     3784
     3785- Patch #1114: fix curses module compilation on 64-bit AIX, & possibly
     3786  other 64-bit LP64 platforms where attr_t is not the same size as a
     3787  long.  (Contributed by Luke Mewburn.)
     3788
     3789- Bug #1550714: fix SystemError from itertools.tee on negative value
     3790  for n.
     3791
     3792- Fixed a few bugs on cjkcodecs:
     3793  - gbk and gb18030 codec now handle U+30FB KATAKANA MIDDLE DOT
     3794    correctly.
     3795  - iso2022_jp_2 codec now encodes into G0 for KS X 1001, GB2312
     3796    codepoints to conform the standard.
     3797  - iso2022_jp_3 and iso2022_jp_2004 codec can encode JIS X 0213:2
     3798    codepoints now.
     3799
     3800- Bug #1552726: in readline.c, avoid repeatedly polling in interactive
     3801  mode by only placing a timeout on the select() if an input hook has
     3802  been defined.  This prevents an interactive Python from waking up 10
     3803  times per second.  Patch by Richard Boulton.
     3804
     3805- fixed a bug with bsddb.DB.stat: the flags and txn keyword arguments
     3806  were transposed.
     3807
     3808- Added support for linking the bsddb module against BerkeleyDB 4.5.x,
     3809  4.6.x and 4.7.x.
     3810
     3811- Bug #1633621: if curses.resizeterm() or curses.resize_term() is
     3812  called, update _curses.LINES, _curses.COLS, curses.LINES and
     3813  curses.COLS.
     3814
     3815- Fix an off-by-one bug in locale.strxfrm().
     3816
     3817- Fix libffi configure for hppa*-*-linux* | parisc*-*-linux*.
     3818
     3819- Build using system ffi library on arm*-linux*.
     3820
     3821- Bug #1372: zlibmodule.c: int overflow in PyZlib_decompress
     3822
     3823- bsddb module: Fix memory leak when using database cursors on
     3824  databases without a DBEnv.
     3825
     3826- The sqlite3 module was updated to pysqlite 2.4.1.
     3827
     3828Tests
     3829-----
     3830
     3831- Refactor test_logging to use unittest.
     3832
     3833- Refactor test_profile and test_cprofile to use the same code to
     3834  profile.
     3835
     3836- Make test_runpy reentrant by fixing _check_module to clear out any
     3837  module being tested.  Was causing an error by __import__ doing a
     3838  reload on the second run and thus suppressing bytecode recreation.
     3839
     3840- Capture socket connection resets and timeouts in test_socket_ssl and
     3841  test_urllib2net and raise test.test_support.ResourceDenied.
     3842
     3843- Patch #1559413: Fix test_cmd_line if sys.executable contains a
     3844  space.
     3845
     3846- Added test.test_support.TransientResource which is a context manager
     3847  to surround calls to resources that are not guaranteed to work even
     3848  if test.test_support.requires says that the resource should exist.
     3849
     3850- Added a test for slicing of an exception.
     3851
     3852- Added test.test_support.EnvironmentVarGuard.  It's a class that
     3853  provides a context manager so that one can temporarily set or unset
     3854  environment variables.
     3855
     3856- Added some tests for modulefinder.
     3857
     3858- Converted test_imp to use unittest.
     3859
     3860- Fix bsddb test_basics.test06_Transactions to check the version
     3861  number properly.
     3862
     3863- test.test_support.catch_warning is a new context manager that can be
     3864  used to catch the warnings issued by the warning framework.
     3865
     3866Tools
     3867-----
     3868
     3869- Tools/scripts/reindent.py now creates the backup file using
     3870  shutil.copy to preserve user/group and permissions. Added also a
     3871  --nobackup option to not create the backup if the user is concerned
     3872  regarding this.  Check issue 1050828 for more details.
     3873
     3874- Tools/scripts/win_add2path.py was added. The simple script modifes
     3875  the PATH environment var of the HKCU tree and adds the python bin
     3876  and script directory.
     3877
     3878- Tools/18n/pygettext.py was added to the list of scripts installed by
     3879  Tools/scripts/setup.py (tracker item 642309).
     3880
     3881- Added IronPython and Jython support to pybench (part of which was
     3882  patch #1563844).
     3883
     3884- Made some minor changes to pybench output to allow the user to see
     3885  which Python version is running pybench.
     3886
     3887- Added support for the new platform module feature
     3888  platform.python_implementation(); this will now be saved in the
     3889  benchmark pickle.
     3890
     3891
     3892Documentation
     3893-------------
     3894
     3895- RFE #1765140: Updated documentation on FileHandler and subclasses to
     3896  include new optional delay argument.
     3897
     3898- Bug #932563: Added section on getting contextual information into
     3899  logging output, and added documentation for the new LoggerAdapter
     3900  class.
     3901
     3902- Bug #1295: Added information about caching of formatted exception
     3903  information in the LogRecord by Formatter.format().
     3904
     3905- Bug #1637365: add subsection about "__name__ == __main__" to the
     3906  Python tutorial.
     3907
     3908- Patch #1698768: updated the "using Python on the Mac" intro.
     3909
     3910- Bug #1569057: Document that calling file.next() when the file is
     3911  open for writing is undefined.
     3912
     3913- Patch #1489771: the syntax rules in Python Reference Manual were
     3914  updated to reflect the current Python syntax.
     3915
     3916- Patch #1686451: Fix return type for
     3917  PySequence_{Count,Index,Fast_GET_SIZE}.
     3918
     3919- Patch #1679379: add documentation for fnmatch.translate().
     3920
     3921- Bug #1629566: clarify the docs on the return values of parsedate()
     3922  and parsedate_tz() in email.utils and rfc822.
     3923
     3924- Patch #1671450: add a section about subclassing builtin types to the
     3925  "extending and embedding" tutorial.
     3926
     3927- Bug #1629125: fix wrong data type (int -> Py_ssize_t) in PyDict_Next
     3928  docs.
     3929
     3930- Bug #1565919: document set types in the Language Reference.
     3931
     3932- Bug #1546052: clarify that PyString_FromString(AndSize) copies the
     3933  string pointed to by its parameter.
     3934
     3935- Bug #1566663: remove obsolete example from datetime docs.
     3936
     3937- Bug #1541682: Fix example in the "Refcount details" API docs.
     3938  Additionally, remove a faulty example showing PySequence_SetItem
     3939  applied to a newly created list object and add notes that this isn't
     3940  a good idea.
     3941
     3942
     3943Tools/Demos
     3944-----------
     3945
     3946- Patch #1552024: add decorator support to unparse.py demo script.
     3947
     3948- Make auto-generated python.vim file list built-ins and exceptions in
     3949  alphatbetical order.  Makes output more deterministic and easier to
     3950  tell if the file is stale or not.
     3951
     3952- Bug #1546372: Fixed small bugglet in pybench that caused a missing
     3953  file not to get reported properly.
     3954
     3955
     3956Build
     3957-----
     3958
     3959- Have the search path for building extensions follow the declared
     3960  order in $CPPFLAGS and $LDFLAGS when adding directories from those
     3961  environment variables.
     3962
     3963- Bug #1983: Added a check to pyport to verify that sizeof(pid_t) is
     3964  smaller or equal sizeof(long).
     3965
     3966- Bug #1234: Fixed semaphore errors on AIX 5.2
     3967
     3968- Issue #1726: Remove Python/atof.c from PCBuild/pythoncore.vcproj.
     3969
     3970- Removed PCbuild8/ directory and added a new build directory for VS
     3971  2005 based on the VS 2008 build directory to PC/VS8.0. The script
     3972  PCbuild/vs8to9.py was added to sync changes from PCbuild to
     3973  PC/VS8.0.
     3974
     3975- Moved PCbuild/ directory for VS 2003 to PC/VS7.1 and renamed
     3976  PCBuild9/ directory to PCBuild/.
     3977
     3978- Bug #1699: Define _BSD_SOURCE only on OpenBSD.
     3979
     3980- Bug #1608: use -fwrapv when GCC supports it.  This is important,
     3981  newer GCC versions may optimize away overflow buffer overflow checks
     3982  without this option!
     3983
     3984- Patch #1418: Make the AC_REPLACE_FUNCS object files actually work.
     3985
     3986- Add a FAST_LOOPS build option that speeds-up looping by trading away
     3987  periodic threadstate and signal checking in tight loops.  By
     3988  default, this option is turned-off.  It should only be enabled in
     3989  debugged, performance critical applications.
     3990
     3991- Patch #786737: Allow building in a tree of symlinks pointing to a
     3992  readonly source.
     3993
     3994- Bug #1737210: Change Manufacturer of Windows installer to PSF.
     3995
     3996- Bug #1746880: Correctly install DLLs into system32 folder on Win64.
     3997
     3998- Define _BSD_SOURCE, to get access to POSIX extensions on OpenBSD
     3999  4.1+.
     4000
     4001- Stop supporting AtheOS and cause a build error in configure for the
     4002  platform.
     4003
     4004- Bug #1655392: don't add -L/usr/lib/pythonX.Y/config to the LDFLAGS
     4005  returned by python-config if Python was built with --enable-shared
     4006  because that prevented the shared library from being used.
     4007
     4008- Patch #1569798: fix a bug in distutils when building Python from a
     4009  directory within sys.exec_prefix.
     4010
     4011- Bug #1675511: Use -Kpic instead of -xcode=pic32 on Solaris/x86.
     4012
     4013- Disable _XOPEN_SOURCE on NetBSD 1.x.
     4014
     4015- configure now checks whether gcc supports the PyArg_ParseTuple
     4016  format attribute.
     4017
     4018- Bug #1578513: Cross compilation was broken by a change to configure.
     4019  Repair so that it's back to how it was in 2.4.3.
     4020
     4021- Patch #1576954: Update VC6 build directory; remove redundant files
     4022  in VC7.
     4023
     4024- Bug #1568842: Fix test for uintptr_t.
     4025
     4026- Patch #1540470: for OpenBSD 4.0.
     4027
     4028- Fix build failure on kfreebsd and on the hurd.
     4029
     4030- Fix the build of the library reference in info format.
     4031
     4032- Allow Emacs 22 for building the documentation in info format.
     4033
     4034- Makefile.pre.in(buildbottest): Run an optional script
     4035  pybuildbot.identify to include some information about the build
     4036  environment.
     4037
     4038
     4039C API
     4040-----
     4041
     4042- Unified naming convention for free lists and their limits. All free
     4043  lists in Object/ are named ``free_list``, the counter ``numfree``
     4044  and the upper limit is a macro ``PyName_MAXFREELIST`` inside an
     4045  #ifndef block.
     4046
     4047- ``PySet_Add()`` can now modify a newly created frozenset.  Similarly
     4048  to ``PyTuple_SetItem``, it can be used to populate a brand new
     4049  frozenset; but it does not steal a reference to the added item.
     4050
     4051- Added ``PySet_Check()`` and ``PyFrozenSet_Check()`` to the set API.
     4052
     4053- Backport of PyUnicode_FromString(), _FromStringAndSize(), _Format
     4054  and _FormatV from Python 3.0. Made PyLong_AsSsize_t and
     4055  PyLong_FromSsize_t public functions.
     4056
     4057- Patch #1720595: add T_BOOL to the range of structmember types.
     4058
     4059- Issue #1534: Added ``PyFloat_GetMax()``, ``PyFloat_GetMin()`` and
     4060  ``PyFloat_GetInfo()`` to the float API.
     4061
     4062- Issue #1521: On 64bit platforms, using PyArgs_ParseTuple with the t#
     4063  of w# format code incorrectly truncated the length to an int, even
     4064  when PY_SSIZE_T_CLEAN is set.  The str.decode method used to return
     4065  incorrect results with huge strings.
     4066
     4067- Issue #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE,
     4068  Py_TYPE and Py_REFCNT.
     4069
     4070- PEP 3123: Provide forward compatibility with Python 3.0, while
     4071  keeping backwards compatibility. Add Py_Refcnt, Py_Type, Py_Size,
     4072  and PyVarObject_HEAD_INIT.
     4073
     4074- Py_ssize_t fields work in structmember when HAVE_LONG_LONG is not
     4075  defined.
     4076
     4077- Patch #1733960: Allow T_LONGLONG to accept ints.
     4078
     4079- T_PYSSIZET can now be used in PyMemberDef lists for Py_ssize_t members.
     4080
     4081- Added a new API function ``PyImport_ImportModuleNoBlock``.
     4082
     4083- Bug #1637022: Prefix AST symbols with _Py_.
     4084
     4085- Fix some leftovers from the conversion from int to Py_ssize_t
     4086  (relevant to strings and sequences of more than 2**31 items).
     4087
     4088- Make _PyGILState_NoteThreadState() static, it was not used anywhere
     4089  outside of pystate.c and should not be necessary.
     4090
     4091- ``PyImport_Import`` and ``PyImport_ImportModule`` now always do
     4092  absolute imports. In earlier versions they might have used relative
     4093  imports under some conditions.
     4094
     4095- Added case insensitive comparison methods ``PyOS_stricmp(char*,
     4096  char*)`` and ``PyOS_strnicmp(char*, char*, Py_ssize_t)``.
     4097
     4098- Bug #1542693: remove semi-colon at end of PyImport_ImportModuleEx
     4099  macro so it can be used as an expression.
     4100
     4101
     4102Windows
     4103-------
     4104
     4105- Patch #1706: Drop support for Win9x, WinME and NT4. Python now
     4106  requires Windows 2000 or greater. The _WINVER and NTDDI_VERSION
     4107  macros are set to Win2k for x86/32bit builds and WinXP for AMD64
     4108  builds.
     4109
     4110- Conditionalize definition of _CRT_SECURE_NO_DEPRECATE and
     4111  _CRT_NONSTDC_NO_DEPRECATE.
     4112
     4113- Bug #1216: Restore support for Visual Studio 2002.
     4114
     4115
     4116Mac
     4117---
     4118
     4119- cfmfile now raises a DeprecationWarning.
     4120
     4121- buildtools now raises a DeprecationWarning.
     4122
     4123- Removed the macfs module.  It had been deprecated since Python 2.5.
     4124  This lead to the deprecation of macostools.touched() as it relied
     4125  solely on macfs and was a no-op under OS X.
     4126
     4127----
     4128
     4129**(For information about older versions, consult the HISTORY file.)**
  • spkg-install

    diff -u -N --recursive python-2.6.4.p9/spkg-install python-2.6.4.p10/spkg-install
    old new  
    113113    exit 1
    114114fi
    115115
     116echo "Backporting --no-user-cfg option (setup.py) from Python 2.7"
     117echo "and adding support of DISTUTILS_NO_USER_CFG"
     118cp patches/dist.py src/Lib/distutils/dist.py && \
     119cp patches/NEWS src/Misc/NEWS && \
     120cp patches/builtdist.rst src/Doc/distutils/builtdist.rst && \
     121cp patches/ACKS.txt src/Doc/ACKS.txt
     122
     123if [ $? -ne 0 ]; then
     124   echo "Failed to apply the patch needed for"
     125   echo "http://trac.sagemath.org/sage_trac/ticket/9536"
     126   exit 1
     127fi
    116128
    117129# We are setting LDFLAGS and CPPFLAGS so that we pick up Sage's readline
    118130LDFLAGS="-L$SAGE_LOCAL/lib $LDFLAGS"