]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Four months of trunk changes (including a few releases...)
authorThomas Wouters <thomas@python.org>
Wed, 13 Dec 2006 04:49:30 +0000 (04:49 +0000)
committerThomas Wouters <thomas@python.org>
Wed, 13 Dec 2006 04:49:30 +0000 (04:49 +0000)
Merged revisions 51434-53004 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r51434 | neal.norwitz | 2006-08-21 20:20:10 +0200 (Mon, 21 Aug 2006) | 1 line

  Fix a couple of ssize-t issues reported by Alexander Belopolsky on python-dev
........
  r51439 | neal.norwitz | 2006-08-21 21:47:08 +0200 (Mon, 21 Aug 2006) | 6 lines

  Patch #1542451: disallow continue anywhere under a finally

  I'm undecided if this should be backported to 2.5 or 2.5.1.
  Armin suggested to wait (I'm of the same opinion).  Thomas W thinks
  it's fine to go in 2.5.
........
  r51443 | neal.norwitz | 2006-08-21 22:16:24 +0200 (Mon, 21 Aug 2006) | 4 lines

  Handle a few more error conditions.

  Klocwork 301 and 302.  Will backport.
........
  r51450 | neal.norwitz | 2006-08-22 00:21:19 +0200 (Tue, 22 Aug 2006) | 5 lines

  Patch #1541585: fix buffer overrun when performing repr() on
  a unicode string in a build with wide unicode (UCS-4) support.

  This code could be improved, so add an XXX comment.
........
  r51456 | neal.norwitz | 2006-08-22 01:44:48 +0200 (Tue, 22 Aug 2006) | 1 line

  Try to get the windows bots working again with the new peephole.c
........
  r51461 | anthony.baxter | 2006-08-22 09:36:59 +0200 (Tue, 22 Aug 2006) | 1 line

  patch for documentation for recent uuid changes (from ping)
........
  r51473 | neal.norwitz | 2006-08-22 15:56:56 +0200 (Tue, 22 Aug 2006) | 1 line

  Alexander Belopolsky pointed out that pos is a size_t
........
  r51489 | jeremy.hylton | 2006-08-22 22:46:00 +0200 (Tue, 22 Aug 2006) | 2 lines

  Expose column offset information in parse trees.
........
  r51497 | andrew.kuchling | 2006-08-23 01:13:43 +0200 (Wed, 23 Aug 2006) | 1 line

  Move functional howto into trunk
........
  r51515 | jeremy.hylton | 2006-08-23 20:37:43 +0200 (Wed, 23 Aug 2006) | 2 lines

  Baby steps towards better tests for tokenize
........
  r51525 | alex.martelli | 2006-08-23 22:42:02 +0200 (Wed, 23 Aug 2006) | 6 lines

  x**2 should about equal x*x (including for a float x such that the result is
  inf) but didn't; added a test to test_float to verify that, and ignored the
  ERANGE value for errno in the pow operation to make the new test pass (with
  help from Marilyn Davis at the Google Python Sprint -- thanks!).
........
  r51526 | jeremy.hylton | 2006-08-23 23:14:03 +0200 (Wed, 23 Aug 2006) | 20 lines

  Bug fixes large and small for tokenize.

  Small: Always generate a NL or NEWLINE token following
         a COMMENT token.  The old code did not generate an NL token if
         the comment was on a line by itself.

  Large: The output of untokenize() will now match the
         input exactly if it is passed the full token sequence.  The
         old, crufty output is still generated if a limited input
         sequence is provided, where limited means that it does not
         include position information for tokens.

  Remaining bug: There is no CONTINUATION token (\) so there is no way
  for untokenize() to handle such code.

  Also, expanded the number of doctests in hopes of eventually removing
  the old-style tests that compare against a golden file.

  Bug fix candidate for Python 2.5.1. (Sigh.)
........
  r51527 | jeremy.hylton | 2006-08-23 23:26:46 +0200 (Wed, 23 Aug 2006) | 5 lines

  Replace dead code with an assert.

  Now that COMMENT tokens are reliably followed by NL or NEWLINE,
  there is never a need to add extra newlines in untokenize.
........
  r51530 | alex.martelli | 2006-08-24 00:17:59 +0200 (Thu, 24 Aug 2006) | 7 lines

  Reverting the patch that tried to fix the issue whereby x**2 raises
  OverflowError while x*x succeeds and produces infinity; apparently
  these inconsistencies cannot be fixed across ``all'' platforms and
  there's a widespread feeling that therefore ``every'' platform
  should keep suffering forevermore.  Ah well.
........
  r51565 | thomas.wouters | 2006-08-24 20:40:20 +0200 (Thu, 24 Aug 2006) | 6 lines

  Fix SF bug #1545837: array.array borks on deepcopy.
  array.__deepcopy__() needs to take an argument, even if it doesn't actually
  use it. Will backport to 2.5 and 2.4 (if applicable.)
........
  r51580 | martin.v.loewis | 2006-08-25 02:03:34 +0200 (Fri, 25 Aug 2006) | 3 lines

  Patch #1545507: Exclude ctypes package in Win64 MSI file.
  Will backport to 2.5.
........
  r51589 | neal.norwitz | 2006-08-25 03:52:49 +0200 (Fri, 25 Aug 2006) | 1 line

  importing types is not necessary if we use isinstance
........
  r51604 | thomas.heller | 2006-08-25 09:27:33 +0200 (Fri, 25 Aug 2006) | 3 lines

  Port _ctypes.pyd to win64 on AMD64.
........
  r51605 | thomas.heller | 2006-08-25 09:34:51 +0200 (Fri, 25 Aug 2006) | 3 lines

  Add missing file for _ctypes.pyd port to win64 on AMD64.
........
  r51606 | thomas.heller | 2006-08-25 11:26:33 +0200 (Fri, 25 Aug 2006) | 6 lines

  Build _ctypes.pyd for win AMD64 into the MSVC project file.
  Since MSVC doesn't know about .asm files, a helper batch file is needed
  to find ml64.exe in predefined locations.  The helper script hardcodes
  the path to the MS Platform SDK.
........
  r51608 | armin.rigo | 2006-08-25 14:44:28 +0200 (Fri, 25 Aug 2006) | 4 lines

  The regular expression engine in '_sre' can segfault when interpreting
  bogus bytecode.  It is unclear whether this is a real bug or a "won't
  fix" case like bogus_code_obj.py.
........
  r51617 | tim.peters | 2006-08-26 00:05:39 +0200 (Sat, 26 Aug 2006) | 2 lines

  Whitespace normalization.
........
  r51618 | tim.peters | 2006-08-26 00:06:44 +0200 (Sat, 26 Aug 2006) | 2 lines

  Add missing svn:eol-style property to text files.
........
  r51619 | tim.peters | 2006-08-26 00:26:21 +0200 (Sat, 26 Aug 2006) | 3 lines

  A new test here relied on preserving invisible trailing
  whitespace in expected output.  Stop that.
........
  r51624 | jack.diederich | 2006-08-26 20:42:06 +0200 (Sat, 26 Aug 2006) | 4 lines

  - Move functions common to all path modules into genericpath.py and have the
    OS speicifc path modules import them.
  - Have os2emxpath import common functions fron ntpath instead of using copies
........
  r51642 | neal.norwitz | 2006-08-29 07:40:58 +0200 (Tue, 29 Aug 2006) | 1 line

  Fix a couple of typos.
........
  r51647 | marc-andre.lemburg | 2006-08-29 12:34:12 +0200 (Tue, 29 Aug 2006) | 5 lines

  Fix a buglet in the error reporting (SF bug report #1546372).

  This should probably go into Python 2.5 or 2.5.1 as well.
........
  r51663 | armin.rigo | 2006-08-31 10:51:06 +0200 (Thu, 31 Aug 2006) | 3 lines

  Doc fix: hashlib objects don't always return a digest of 16 bytes.
  Backport candidate for 2.5.
........
  r51664 | nick.coghlan | 2006-08-31 14:00:43 +0200 (Thu, 31 Aug 2006) | 1 line

  Fix the wrongheaded implementation of context management in the decimal module and add unit tests. (python-dev discussion is ongoing regarding what we do about Python 2.5)
........
  r51665 | nick.coghlan | 2006-08-31 14:51:25 +0200 (Thu, 31 Aug 2006) | 1 line

  Remove the old decimal context management tests from test_contextlib (guess who didn't run the test suite before committing...)
........
  r51669 | brett.cannon | 2006-08-31 20:54:26 +0200 (Thu, 31 Aug 2006) | 4 lines

  Make sure memory is properly cleaned up in file_init.

  Backport candidate.
........
  r51671 | brett.cannon | 2006-08-31 23:47:52 +0200 (Thu, 31 Aug 2006) | 2 lines

  Fix comment about indentation level in C files.
........
  r51674 | brett.cannon | 2006-09-01 00:42:37 +0200 (Fri, 01 Sep 2006) | 3 lines

  Have pre-existing C files use 8 spaces indents (to match old PEP 7 style), but
  have all new files use 4 spaces (to match current PEP 7 style).
........
  r51676 | fred.drake | 2006-09-01 05:57:19 +0200 (Fri, 01 Sep 2006) | 3 lines

  - SF patch #1550263: Enhance and correct unittest docs
  - various minor cleanups for improved consistency
........
  r51677 | georg.brandl | 2006-09-02 00:30:52 +0200 (Sat, 02 Sep 2006) | 2 lines

  evalfile() should be execfile().
........
  r51681 | neal.norwitz | 2006-09-02 04:43:17 +0200 (Sat, 02 Sep 2006) | 1 line

  SF #1547931, fix typo (missing and).  Will backport to 2.5
........
  r51683 | neal.norwitz | 2006-09-02 04:50:35 +0200 (Sat, 02 Sep 2006) | 1 line

  Bug #1548092: fix curses.tparm seg fault on invalid input.  Needs backport to 2.5.1 and earlier.
........
  r51684 | neal.norwitz | 2006-09-02 04:58:13 +0200 (Sat, 02 Sep 2006) | 4 lines

  Bug #1550714: fix SystemError from itertools.tee on negative value for n.

  Needs backport to 2.5.1 and earlier.
........
  r51685 | nick.coghlan | 2006-09-02 05:54:17 +0200 (Sat, 02 Sep 2006) | 1 line

  Make decimal.ContextManager a private implementation detail of decimal.localcontext()
........
  r51686 | nick.coghlan | 2006-09-02 06:04:18 +0200 (Sat, 02 Sep 2006) | 1 line

  Further corrections to the decimal module context management documentation
........
  r51688 | raymond.hettinger | 2006-09-02 19:07:23 +0200 (Sat, 02 Sep 2006) | 1 line

  Fix documentation nits for decimal context managers.
........
  r51690 | neal.norwitz | 2006-09-02 20:51:34 +0200 (Sat, 02 Sep 2006) | 1 line

  Add missing word in comment
........
  r51691 | neal.norwitz | 2006-09-02 21:40:19 +0200 (Sat, 02 Sep 2006) | 7 lines

  Hmm, this test has failed at least twice recently on the OpenBSD and
  Debian sparc buildbots.  Since this goes through a lot of tests
  and hits the disk a lot it could be slow (especially if NFS is involved).
  I'm not sure if that's the problem, but printing periodic msgs shouldn't hurt.
  The code was stolen from test_compiler.
........
  r51693 | nick.coghlan | 2006-09-03 03:02:00 +0200 (Sun, 03 Sep 2006) | 1 line

  Fix final documentation nits before backporting decimal module fixes to 2.5
........
  r51694 | nick.coghlan | 2006-09-03 03:06:07 +0200 (Sun, 03 Sep 2006) | 1 line

  Typo fix for decimal docs
........
  r51697 | nick.coghlan | 2006-09-03 03:20:46 +0200 (Sun, 03 Sep 2006) | 1 line

  NEWS entry on trunk for decimal module changes
........
  r51704 | raymond.hettinger | 2006-09-04 17:32:48 +0200 (Mon, 04 Sep 2006) | 1 line

  Fix endcase for str.rpartition()
........
  r51716 | tim.peters | 2006-09-05 04:18:09 +0200 (Tue, 05 Sep 2006) | 12 lines

  "Conceptual" merge of rev 51711 from the 2.5 branch.

  i_divmod():  As discussed on Python-Dev, changed the overflow
  checking to live happily with recent gcc optimizations that
  assume signed integer arithmetic never overflows.

  This differs from the corresponding change on the 2.5 and 2.4
  branches, using a less obscure approach, but one that /may/
  tickle platform idiocies in their definitions of LONG_MIN.
  The 2.4 + 2.5 change avoided introducing a dependence on
  LONG_MIN, at the cost of substantially goofier code.
........
  r51717 | tim.peters | 2006-09-05 04:21:19 +0200 (Tue, 05 Sep 2006) | 2 lines

  Whitespace normalization.
........
  r51719 | tim.peters | 2006-09-05 04:22:17 +0200 (Tue, 05 Sep 2006) | 2 lines

  Add missing svn:eol-style property to text files.
........
  r51720 | neal.norwitz | 2006-09-05 04:24:03 +0200 (Tue, 05 Sep 2006) | 2 lines

  Fix SF bug #1546288, crash in dict_equal.
........
  r51721 | neal.norwitz | 2006-09-05 04:25:41 +0200 (Tue, 05 Sep 2006) | 1 line

  Fix SF #1552093, eval docstring typo (3 ps in mapping)
........
  r51724 | neal.norwitz | 2006-09-05 04:35:08 +0200 (Tue, 05 Sep 2006) | 1 line

  This was found by Guido AFAIK on p3yk (sic) branch.
........
  r51725 | neal.norwitz | 2006-09-05 04:36:20 +0200 (Tue, 05 Sep 2006) | 1 line

  Add a NEWS entry for str.rpartition() change
........
  r51728 | neal.norwitz | 2006-09-05 04:57:01 +0200 (Tue, 05 Sep 2006) | 1 line

  Patch #1540470, for OpenBSD 4.0.  Backport candidate for 2.[34].
........
  r51729 | neal.norwitz | 2006-09-05 05:53:08 +0200 (Tue, 05 Sep 2006) | 12 lines

  Bug #1520864 (again): unpacking singleton tuples in list comprehensions and
  generator expressions (x for x, in ... ) works again.

  Sigh, I only fixed for loops the first time, not list comps and genexprs too.
  I couldn't find any more unpacking cases where there is a similar bug lurking.

  This code should be refactored to eliminate the duplication.  I'm sure
  the listcomp/genexpr code can be refactored.  I'm not sure if the for loop
  can re-use any of the same code though.

  Will backport to 2.5 (the only place it matters).
........
  r51731 | neal.norwitz | 2006-09-05 05:58:26 +0200 (Tue, 05 Sep 2006) | 1 line

  Add a comment about some refactoring.  (There's probably more that should be done.)  I will reformat this file in the next checkin due to the inconsistent tabs/spaces.
........
  r51732 | neal.norwitz | 2006-09-05 06:00:12 +0200 (Tue, 05 Sep 2006) | 1 line

  M-x untabify
........
  r51737 | hyeshik.chang | 2006-09-05 14:07:09 +0200 (Tue, 05 Sep 2006) | 7 lines

  Fix a few bugs on cjkcodecs found by Oren Tirosh:
  - gbk and gb18030 codec now handle U+30FB KATAKANA MIDDLE DOT correctly.
  - iso2022_jp_2 codec now encodes into G0 for KS X 1001, GB2312
    codepoints to conform the standard.
  - iso2022_jp_3 and iso2022_jp_2004 codec can encode JIS X 2013:2
    codepoints now.
........
  r51738 | hyeshik.chang | 2006-09-05 14:14:57 +0200 (Tue, 05 Sep 2006) | 2 lines

  Fix a typo: 2013 -> 0213
........
  r51740 | georg.brandl | 2006-09-05 14:44:58 +0200 (Tue, 05 Sep 2006) | 3 lines

  Bug #1552618: change docs of dict.has_key() to reflect recommendation
  to use "in".
........
  r51742 | andrew.kuchling | 2006-09-05 15:02:40 +0200 (Tue, 05 Sep 2006) | 1 line

  Rearrange example a bit, and show rpartition() when separator is not found
........
  r51744 | andrew.kuchling | 2006-09-05 15:15:41 +0200 (Tue, 05 Sep 2006) | 1 line

  [Bug #1525469] SimpleXMLRPCServer still uses the sys.exc_{value,type} module-level globals instead of calling sys.exc_info().  Reported by Russell Warren
........
  r51745 | andrew.kuchling | 2006-09-05 15:19:18 +0200 (Tue, 05 Sep 2006) | 3 lines

  [Bug #1526834] Fix crash in pdb when you do 'b f(';
  the function name was placed into a regex pattern and the unbalanced paren
  caused re.compile() to report an error
........
  r51751 | kristjan.jonsson | 2006-09-05 19:58:12 +0200 (Tue, 05 Sep 2006) | 6 lines

  Update the PCBuild8 solution.
  Facilitate cross-compilation by having binaries in separate Win32 and x64 directories.
  Rationalized configs by making proper use of platforms/configurations.
  Remove pythoncore_pgo project.
  Add new PGIRelease and PGORelease configurations to perform Profile Guided Optimisation.
  Removed I64 support, but this can be easily added by copying the x64 platform settings.
........
  r51758 | gustavo.niemeyer | 2006-09-06 03:58:52 +0200 (Wed, 06 Sep 2006) | 3 lines

  Fixing #1531862: Do not close standard file descriptors in the
  subprocess module.
........
  r51760 | neal.norwitz | 2006-09-06 05:58:34 +0200 (Wed, 06 Sep 2006) | 1 line

  Revert 51758 because it broke all the buildbots
........
  r51762 | georg.brandl | 2006-09-06 08:03:59 +0200 (Wed, 06 Sep 2006) | 3 lines

  Bug #1551427: fix a wrong NULL pointer check in the win32 version
  of os.urandom().
........
  r51765 | georg.brandl | 2006-09-06 08:09:31 +0200 (Wed, 06 Sep 2006) | 3 lines

  Bug #1550983: emit better error messages for erroneous relative
  imports (if not in package and if beyond toplevel package).
........
  r51767 | neal.norwitz | 2006-09-06 08:28:06 +0200 (Wed, 06 Sep 2006) | 1 line

  with and as are now keywords.  There are some generated files I can't recreate.
........
  r51770 | georg.brandl | 2006-09-06 08:50:05 +0200 (Wed, 06 Sep 2006) | 5 lines

  Bug #1542051: Exceptions now correctly call PyObject_GC_UnTrack.
  Also make sure that every exception class has __module__ set to
  'exceptions'.
........
  r51785 | georg.brandl | 2006-09-06 22:05:58 +0200 (Wed, 06 Sep 2006) | 2 lines

  Fix missing import of the types module in logging.config.
........
  r51789 | marc-andre.lemburg | 2006-09-06 22:40:22 +0200 (Wed, 06 Sep 2006) | 3 lines

  Add news item for bug fix of SF bug report #1546372.
........
  r51797 | gustavo.niemeyer | 2006-09-07 02:48:33 +0200 (Thu, 07 Sep 2006) | 3 lines

  Fixed subprocess bug #1531862 again, after removing tests
  offending buildbot
........
  r51798 | raymond.hettinger | 2006-09-07 04:42:48 +0200 (Thu, 07 Sep 2006) | 1 line

  Fix refcounts and add error checks.
........
  r51803 | nick.coghlan | 2006-09-07 12:50:34 +0200 (Thu, 07 Sep 2006) | 1 line

  Fix the speed regression in inspect.py by adding another cache to speed up getmodule(). Patch #1553314
........
  r51805 | ronald.oussoren | 2006-09-07 14:03:10 +0200 (Thu, 07 Sep 2006) | 2 lines

  Fix a glaring error and update some version numbers.
........
  r51814 | andrew.kuchling | 2006-09-07 15:56:23 +0200 (Thu, 07 Sep 2006) | 1 line

  Typo fix
........
  r51815 | andrew.kuchling | 2006-09-07 15:59:38 +0200 (Thu, 07 Sep 2006) | 8 lines

  [Bug #1552726] Avoid repeatedly polling in interactive mode -- only put a timeout on the select()
  if an input hook has been defined.  Patch by Richard Boulton.

  This select() code is only executed with readline 2.1, or if
  READLINE_CALLBACKS is defined.

  Backport candidate for 2.5, 2.4, probably earlier versions too.
........
  r51816 | armin.rigo | 2006-09-07 17:06:00 +0200 (Thu, 07 Sep 2006) | 2 lines

  Add a warning notice on top of the generated grammar.txt.
........
  r51819 | thomas.heller | 2006-09-07 20:56:28 +0200 (Thu, 07 Sep 2006) | 5 lines

  Anonymous structure fields that have a bit-width specified did not work,
  and they gave a strange error message from PyArg_ParseTuple:
      function takes exactly 2 arguments (3 given).

  With tests.
........
  r51820 | thomas.heller | 2006-09-07 21:09:54 +0200 (Thu, 07 Sep 2006) | 4 lines

  The cast function did not accept c_char_p or c_wchar_p instances
  as first argument, and failed with a 'bad argument to internal function'
  error message.
........
  r51827 | nick.coghlan | 2006-09-08 12:04:38 +0200 (Fri, 08 Sep 2006) | 1 line

  Add missing NEWS entry for rev 51803
........
  r51828 | andrew.kuchling | 2006-09-08 15:25:23 +0200 (Fri, 08 Sep 2006) | 1 line

  Add missing word
........
  r51829 | andrew.kuchling | 2006-09-08 15:35:49 +0200 (Fri, 08 Sep 2006) | 1 line

  Explain SQLite a bit more clearly
........
  r51830 | andrew.kuchling | 2006-09-08 15:36:36 +0200 (Fri, 08 Sep 2006) | 1 line

  Explain SQLite a bit more clearly
........
  r51832 | andrew.kuchling | 2006-09-08 16:02:45 +0200 (Fri, 08 Sep 2006) | 1 line

  Use native SQLite types
........
  r51833 | andrew.kuchling | 2006-09-08 16:03:01 +0200 (Fri, 08 Sep 2006) | 1 line

  Use native SQLite types
........
  r51835 | andrew.kuchling | 2006-09-08 16:05:10 +0200 (Fri, 08 Sep 2006) | 1 line

  Fix typo in example
........
  r51837 | brett.cannon | 2006-09-09 09:11:46 +0200 (Sat, 09 Sep 2006) | 6 lines

  Remove the __unicode__ method from exceptions.  Allows unicode() to be called
  on exception classes.  Would require introducing a tp_unicode slot to make it
  work otherwise.

  Fixes bug #1551432 and will be backported.
........
  r51854 | neal.norwitz | 2006-09-11 06:24:09 +0200 (Mon, 11 Sep 2006) | 8 lines

  Forward port of 51850 from release25-maint branch.

  As mentioned on python-dev, reverting patch #1504333 because it introduced
  an infinite loop in rev 47154.

  This patch also adds a test to prevent the regression.
........
  r51855 | neal.norwitz | 2006-09-11 06:28:16 +0200 (Mon, 11 Sep 2006) | 5 lines

  Properly handle a NULL returned from PyArena_New().
  (Also fix some whitespace)

  Klocwork #364.
........
  r51856 | neal.norwitz | 2006-09-11 06:32:57 +0200 (Mon, 11 Sep 2006) | 1 line

  Add a "crasher" taken from the sgml bug report referenced in the comment
........
  r51858 | georg.brandl | 2006-09-11 11:38:35 +0200 (Mon, 11 Sep 2006) | 12 lines

  Forward-port of rev. 51857:

  Building with HP's cc on HP-UX turned up a couple of problems.
  _PyGILState_NoteThreadState was declared as static inconsistently.
  Make it static as it's not necessary outside of this module.

  Some tests failed because errno was reset to 0. (I think the tests
  that failed were at least: test_fcntl and test_mailbox).
  Ensure that errno doesn't change after a call to Py_END_ALLOW_THREADS.
  This only affected debug builds.
........
  r51865 | martin.v.loewis | 2006-09-12 21:49:20 +0200 (Tue, 12 Sep 2006) | 2 lines

  Forward-port 51862: Add sgml_input.html.
........
  r51866 | andrew.kuchling | 2006-09-12 22:50:23 +0200 (Tue, 12 Sep 2006) | 1 line

  Markup typo fix
........
  r51867 | andrew.kuchling | 2006-09-12 23:09:02 +0200 (Tue, 12 Sep 2006) | 1 line

  Some editing, markup fixes
........
  r51868 | andrew.kuchling | 2006-09-12 23:21:51 +0200 (Tue, 12 Sep 2006) | 1 line

  More wordsmithing
........
  r51877 | andrew.kuchling | 2006-09-14 13:22:18 +0200 (Thu, 14 Sep 2006) | 1 line

  Make --help mention that -v can be supplied multiple times
........
  r51878 | andrew.kuchling | 2006-09-14 13:28:50 +0200 (Thu, 14 Sep 2006) | 1 line

  Rewrite help message to remove some of the parentheticals.  (There were a lot of them.)
........
  r51883 | ka-ping.yee | 2006-09-15 02:34:19 +0200 (Fri, 15 Sep 2006) | 2 lines

  Fix grammar errors and improve clarity.
........
  r51885 | georg.brandl | 2006-09-15 07:22:24 +0200 (Fri, 15 Sep 2006) | 3 lines

  Correct elementtree module index entry.
........
  r51889 | fred.drake | 2006-09-15 17:18:04 +0200 (Fri, 15 Sep 2006) | 4 lines

  - fix module name in links in formatted documentation
  - minor markup cleanup
  (forward-ported from release25-maint revision 51888)
........
  r51891 | fred.drake | 2006-09-15 18:11:27 +0200 (Fri, 15 Sep 2006) | 3 lines

  revise explanation of returns_unicode to reflect bool values
  and to include the default value
  (merged from release25-maint revision 51890)
........
  r51897 | martin.v.loewis | 2006-09-16 19:36:37 +0200 (Sat, 16 Sep 2006) | 2 lines

  Patch #1557515: Add RLIMIT_SBSIZE.
........
  r51903 | ronald.oussoren | 2006-09-17 20:42:53 +0200 (Sun, 17 Sep 2006) | 2 lines

  Port of revision 51902 in release25-maint to the trunk
........
  r51904 | ronald.oussoren | 2006-09-17 21:23:27 +0200 (Sun, 17 Sep 2006) | 3 lines

  Tweak Mac/Makefile in to ensure that pythonw gets rebuild when the major version
  of python changes (2.5 -> 2.6). Bug #1552935.
........
  r51913 | guido.van.rossum | 2006-09-18 23:36:16 +0200 (Mon, 18 Sep 2006) | 2 lines

  Make this thing executable.
........
  r51920 | gregory.p.smith | 2006-09-19 19:35:04 +0200 (Tue, 19 Sep 2006) | 5 lines

  Fixes a bug with bsddb.DB.stat where the flags and txn keyword
  arguments are transposed.  (reported by Louis Zechtzer)
  ..already committed to release24-maint
  ..needs committing to release25-maint
........
  r51926 | brett.cannon | 2006-09-20 20:34:28 +0200 (Wed, 20 Sep 2006) | 3 lines

  Accidentally didn't commit Misc/NEWS entry on when __unicode__() was removed
  from exceptions.
........
  r51927 | brett.cannon | 2006-09-20 20:43:13 +0200 (Wed, 20 Sep 2006) | 6 lines

  Allow exceptions to be directly sliced again
  (e.g., ``BaseException(1,2,3)[0:2]``).

  Discovered in Python 2.5.0 by Thomas Heller and reported to python-dev.  This
  should be backported to 2.5 .
........
  r51928 | brett.cannon | 2006-09-20 21:28:35 +0200 (Wed, 20 Sep 2006) | 2 lines

  Make python.vim output more deterministic.
........
  r51949 | walter.doerwald | 2006-09-21 17:09:55 +0200 (Thu, 21 Sep 2006) | 2 lines

  Fix typo.
........
  r51950 | jack.diederich | 2006-09-21 19:50:26 +0200 (Thu, 21 Sep 2006) | 5 lines

  * regression bug, count_next was coercing a Py_ssize_t to an unsigned Py_size_t
    which breaks negative counts
  * added test for negative numbers
  will backport to 2.5.1
........
  r51953 | jack.diederich | 2006-09-21 22:34:49 +0200 (Thu, 21 Sep 2006) | 1 line

  added itertools.count(-n) fix
........
  r51971 | neal.norwitz | 2006-09-22 10:16:26 +0200 (Fri, 22 Sep 2006) | 10 lines

  Fix %zd string formatting on Mac OS X so it prints negative numbers.

  In addition to testing positive numbers, verify negative numbers work in configure.
  In order to avoid compiler warnings on OS X 10.4, also change the order of the check
  for the format character to use (PY_FORMAT_SIZE_T) in the sprintf format
  for Py_ssize_t.  This patch changes PY_FORMAT_SIZE_T from "" to "l" if it wasn't
  defined at configure time.  Need to verify the buildbot results.

  Backport candidate (if everyone thinks this patch can't be improved).
........
  r51972 | neal.norwitz | 2006-09-22 10:18:10 +0200 (Fri, 22 Sep 2006) | 7 lines

  Bug #1557232: fix seg fault with def f((((x)))) and def f(((x),)).

  These tests should be improved.  Hopefully this fixes variations when
  flipping back and forth between fpdef and fplist.

  Backport candidate.
........
  r51975 | neal.norwitz | 2006-09-22 10:47:23 +0200 (Fri, 22 Sep 2006) | 4 lines

  Mostly revert this file to the same version as before.  Only force setting
  of PY_FORMAT_SIZE_T to "l" for Mac OSX.  I don't know a better define
  to use.  This should get rid of the warnings on other platforms and Mac too.
........
  r51986 | fred.drake | 2006-09-23 02:26:31 +0200 (Sat, 23 Sep 2006) | 1 line

  add boilerplate "What's New" document so the docs will build
........
  r51987 | neal.norwitz | 2006-09-23 06:11:38 +0200 (Sat, 23 Sep 2006) | 1 line

  Remove extra semi-colons reported by Johnny Lee on python-dev.  Backport if anyone cares.
........
  r51989 | neal.norwitz | 2006-09-23 20:11:58 +0200 (Sat, 23 Sep 2006) | 1 line

  SF Bug #1563963, add missing word and cleanup first sentance
........
  r51990 | brett.cannon | 2006-09-23 21:53:20 +0200 (Sat, 23 Sep 2006) | 3 lines

  Make output on test_strptime() be more verbose in face of failure.  This is in
  hopes that more information will help debug the failing test on HPPA Ubuntu.
........
  r51991 | georg.brandl | 2006-09-24 12:36:01 +0200 (Sun, 24 Sep 2006) | 2 lines

  Fix webbrowser.BackgroundBrowser on Windows.
........
  r51993 | georg.brandl | 2006-09-24 14:35:36 +0200 (Sun, 24 Sep 2006) | 4 lines

  Fix a bug in the parser's future statement handling that led to "with"
  not being recognized as a keyword after, e.g., this statement:
  from __future__ import division, with_statement
........
  r51995 | georg.brandl | 2006-09-24 14:50:24 +0200 (Sun, 24 Sep 2006) | 4 lines

  Fix a bug in traceback.format_exception_only() that led to an error
  being raised when print_exc() was called without an exception set.
  In version 2.4, this printed "None", restored that behavior.
........
  r52000 | armin.rigo | 2006-09-25 17:16:26 +0200 (Mon, 25 Sep 2006) | 2 lines

  Another crasher.
........
  r52011 | brett.cannon | 2006-09-27 01:38:24 +0200 (Wed, 27 Sep 2006) | 2 lines

  Make the error message for when the time data and format do not match clearer.
........
  r52014 | andrew.kuchling | 2006-09-27 18:37:30 +0200 (Wed, 27 Sep 2006) | 1 line

  Add news item for rev. 51815
........
  r52018 | andrew.kuchling | 2006-09-27 21:23:05 +0200 (Wed, 27 Sep 2006) | 1 line

  Make examples do error checking on Py_InitModule
........
  r52032 | brett.cannon | 2006-09-29 00:10:14 +0200 (Fri, 29 Sep 2006) | 2 lines

  Very minor grammatical fix in a comment.
........
  r52048 | george.yoshida | 2006-09-30 07:14:02 +0200 (Sat, 30 Sep 2006) | 4 lines

  SF bug #1567976 : fix typo

  Will backport to 2.5.
........
  r52051 | gregory.p.smith | 2006-09-30 08:08:20 +0200 (Sat, 30 Sep 2006) | 2 lines

  wording change
........
  r52053 | georg.brandl | 2006-09-30 09:24:48 +0200 (Sat, 30 Sep 2006) | 2 lines

  Bug #1567375: a minor logical glitch in example description.
........
  r52056 | georg.brandl | 2006-09-30 09:31:57 +0200 (Sat, 30 Sep 2006) | 3 lines

  Bug #1565661: in webbrowser, split() the command for the default
  GNOME browser in case it is a command with args.
........
  r52058 | georg.brandl | 2006-09-30 10:43:30 +0200 (Sat, 30 Sep 2006) | 4 lines

  Patch #1567691: super() and new.instancemethod() now don't accept
  keyword arguments any more (previously they accepted them, but didn't
  use them).
........
  r52061 | georg.brandl | 2006-09-30 11:03:42 +0200 (Sat, 30 Sep 2006) | 3 lines

  Bug #1566800: make sure that EnvironmentError can be called with any
  number of arguments, as was the case in Python 2.4.
........
  r52063 | georg.brandl | 2006-09-30 11:06:45 +0200 (Sat, 30 Sep 2006) | 2 lines

  Bug #1566663: remove obsolete example from datetime docs.
........
  r52065 | georg.brandl | 2006-09-30 11:13:21 +0200 (Sat, 30 Sep 2006) | 3 lines

  Bug #1566602: correct failure of posixpath unittest when $HOME ends
  with a slash.
........
  r52068 | georg.brandl | 2006-09-30 12:58:01 +0200 (Sat, 30 Sep 2006) | 3 lines

  Bug #1457823: cgi.(Sv)FormContentDict's constructor now takes
  keep_blank_values and strict_parsing keyword arguments.
........
  r52069 | georg.brandl | 2006-09-30 13:06:47 +0200 (Sat, 30 Sep 2006) | 3 lines

  Bug #1560617: in pyclbr, return full module name not only for classes,
  but also for functions.
........
  r52072 | georg.brandl | 2006-09-30 13:17:34 +0200 (Sat, 30 Sep 2006) | 3 lines

  Bug #1556784: allow format strings longer than 127 characters in
  datetime's strftime function.
........
  r52075 | georg.brandl | 2006-09-30 13:22:28 +0200 (Sat, 30 Sep 2006) | 3 lines

  Bug #1446043: correctly raise a LookupError if an encoding name given
  to encodings.search_function() contains a dot.
........
  r52078 | georg.brandl | 2006-09-30 14:02:57 +0200 (Sat, 30 Sep 2006) | 3 lines

  Bug #1546052: clarify that PyString_FromString(AndSize) copies the
  string pointed to by its parameter.
........
  r52080 | georg.brandl | 2006-09-30 14:16:03 +0200 (Sat, 30 Sep 2006) | 3 lines

  Convert test_import to unittest.
........
  r52083 | kurt.kaiser | 2006-10-01 23:16:45 +0200 (Sun, 01 Oct 2006) | 5 lines

  Some syntax errors were being caught by tokenize during the tabnanny
  check, resulting in obscure error messages.  Do the syntax check
  first.  Bug 15627161562719
........
  r52084 | kurt.kaiser | 2006-10-01 23:54:37 +0200 (Sun, 01 Oct 2006) | 3 lines

  Add comment explaining that error msgs may be due to user code when
  running w/o subprocess.
........
  r52086 | martin.v.loewis | 2006-10-02 16:55:51 +0200 (Mon, 02 Oct 2006) | 3 lines

  Fix test for uintptr_t. Fixes #1568842.
  Will backport.
........
  r52089 | martin.v.loewis | 2006-10-02 17:20:37 +0200 (Mon, 02 Oct 2006) | 3 lines

  Guard uintptr_t test with HAVE_STDINT_H, test for
  stdint.h. Will backport.
........
  r52100 | vinay.sajip | 2006-10-03 20:02:37 +0200 (Tue, 03 Oct 2006) | 1 line

  Documentation omitted the additional parameter to LogRecord.__init__ which was added in 2.5. (See SF #1569622).
........
  r52101 | vinay.sajip | 2006-10-03 20:20:26 +0200 (Tue, 03 Oct 2006) | 1 line

  Documentation clarified to mention optional parameters.
........
  r52102 | vinay.sajip | 2006-10-03 20:21:56 +0200 (Tue, 03 Oct 2006) | 1 line

  Modified LogRecord.__init__ to make the func parameter optional. (See SF #1569622).
........
  r52121 | brett.cannon | 2006-10-03 23:58:55 +0200 (Tue, 03 Oct 2006) | 2 lines

  Fix minor typo in a comment.
........
  r52123 | brett.cannon | 2006-10-04 01:23:14 +0200 (Wed, 04 Oct 2006) | 2 lines

  Convert test_imp over to unittest.
........
  r52128 | barry.warsaw | 2006-10-04 04:06:36 +0200 (Wed, 04 Oct 2006) | 3 lines

  decode_rfc2231(): As Christian Robottom Reis points out, it makes no sense to
  test for parts > 3 when we use .split(..., 2).
........
  r52129 | jeremy.hylton | 2006-10-04 04:24:52 +0200 (Wed, 04 Oct 2006) | 9 lines

  Fix for SF bug 1569998: break permitted inside try.

  The compiler was checking that there was something on the fblock
  stack, but not that there was a loop on the stack.  Fixed that and
  added a test for the specific syntax error.

  Bug fix candidate.
........
  r52130 | martin.v.loewis | 2006-10-04 07:47:34 +0200 (Wed, 04 Oct 2006) | 4 lines

  Fix integer negation and absolute value to not rely
  on undefined behaviour of the C compiler anymore.
  Will backport to 2.5 and 2.4.
........
  r52135 | martin.v.loewis | 2006-10-04 11:21:20 +0200 (Wed, 04 Oct 2006) | 1 line

  Forward port r52134: Add uuids for 2.4.4.
........
  r52137 | armin.rigo | 2006-10-04 12:23:57 +0200 (Wed, 04 Oct 2006) | 3 lines

  Compilation problem caused by conflicting typedefs for uint32_t
  (unsigned long vs. unsigned int).
........
  r52139 | armin.rigo | 2006-10-04 14:17:45 +0200 (Wed, 04 Oct 2006) | 23 lines

  Forward-port of r52136,52138: a review of overflow-detecting code.

  * unified the way intobject, longobject and mystrtoul handle
    values around -sys.maxint-1.

  * in general, trying to entierely avoid overflows in any computation
    involving signed ints or longs is extremely involved.  Fixed a few
    simple cases where a compiler might be too clever (but that's all
    guesswork).

  * more overflow checks against bad data in marshal.c.

  * 2.5 specific: fixed a number of places that were still confusing int
    and Py_ssize_t.  Some of them could potentially have caused
    "real-world" breakage.

  * list.pop(x): fixing overflow issues on x was messy.  I just reverted
    to PyArg_ParseTuple("n"), which does the right thing.  (An obscure
    test was trying to give a Decimal to list.pop()... doesn't make
    sense any more IMHO)

  * trying to write a few tests...
........
  r52147 | andrew.kuchling | 2006-10-04 15:42:43 +0200 (Wed, 04 Oct 2006) | 6 lines

  Cause a PyObject_Malloc() failure to trigger a MemoryError, and then
  add 'if (PyErr_Occurred())' checks to various places so that NULL is
  returned properly.

  2.4 backport candidate.
........
  r52148 | martin.v.loewis | 2006-10-04 17:25:28 +0200 (Wed, 04 Oct 2006) | 1 line

  Add MSVC8 project files to create wininst-8.exe.
........
  r52196 | brett.cannon | 2006-10-06 00:02:31 +0200 (Fri, 06 Oct 2006) | 7 lines

  Clarify what "re-initialization" means for init_builtin() and init_dynamic().

  Also remove warning about re-initialization as possibly raising an execption as
  both call _PyImport_FindExtension() which pulls any module that was already
  imported from the Python process' extension cache and just copies the __dict__
  into the module stored in sys.modules.
........
  r52200 | fred.drake | 2006-10-06 02:03:45 +0200 (Fri, 06 Oct 2006) | 3 lines

  - update links
  - remove Sleepycat name now that they have been bought
........
  r52204 | andrew.kuchling | 2006-10-06 12:41:01 +0200 (Fri, 06 Oct 2006) | 1 line

  Case fix
........
  r52208 | georg.brandl | 2006-10-06 14:46:08 +0200 (Fri, 06 Oct 2006) | 3 lines

  Fix name.
........
  r52211 | andrew.kuchling | 2006-10-06 15:18:26 +0200 (Fri, 06 Oct 2006) | 1 line

  [Bug #1545341] Allow 'classifier' parameter to be a tuple as well as a list.  Will backport.
........
  r52212 | armin.rigo | 2006-10-06 18:33:22 +0200 (Fri, 06 Oct 2006) | 4 lines

  A very minor bug fix: this code looks like it is designed to accept
  any hue value and do the modulo itself, except it doesn't quite do
  it in all cases.  At least, the "cannot get here" comment was wrong.
........
  r52213 | andrew.kuchling | 2006-10-06 20:51:55 +0200 (Fri, 06 Oct 2006) | 1 line

  Comment grammar
........
  r52218 | skip.montanaro | 2006-10-07 13:05:02 +0200 (Sat, 07 Oct 2006) | 6 lines

  Note that the excel_tab class is registered as the "excel-tab" dialect.
  Fixes 1572471.  Make a similar change for the excel class and clean up
  references to the Dialects and Formatting Parameters section in a few
  places.
........
  r52221 | georg.brandl | 2006-10-08 09:11:54 +0200 (Sun, 08 Oct 2006) | 3 lines

  Add missing NEWS entry for rev. 52129.
........
  r52223 | hyeshik.chang | 2006-10-08 15:48:34 +0200 (Sun, 08 Oct 2006) | 3 lines

  Bug #1572832: fix a bug in ISO-2022 codecs which may cause segfault
  when encoding non-BMP unicode characters.  (Submitted by Ray Chason)
........
  r52227 | ronald.oussoren | 2006-10-08 19:37:58 +0200 (Sun, 08 Oct 2006) | 4 lines

  Add version number to the link to the python documentation in
  /Developer/Documentation/Python, better for users that install multiple versions
  of python.
........
  r52229 | ronald.oussoren | 2006-10-08 19:40:02 +0200 (Sun, 08 Oct 2006) | 2 lines

  Fix for bug #1570284
........
  r52233 | ronald.oussoren | 2006-10-08 19:49:52 +0200 (Sun, 08 Oct 2006) | 6 lines

  MacOSX: distutils changes the values of BASECFLAGS and LDFLAGS when using a
  universal build of python on OSX 10.3 to ensure that those flags can be used
  to compile code (the universal build uses compiler flags that aren't supported
  on 10.3). This patches gives the same treatment to CFLAGS, PY_CFLAGS and
  BLDSHARED.
........
  r52236 | ronald.oussoren | 2006-10-08 19:51:46 +0200 (Sun, 08 Oct 2006) | 5 lines

  MacOSX: The universal build requires that users have the MacOSX10.4u SDK
  installed to build extensions. This patch makes distutils emit a warning when
  the compiler should use an SDK but that SDK is not installed, hopefully reducing
  some confusion.
........
  r52238 | ronald.oussoren | 2006-10-08 20:18:26 +0200 (Sun, 08 Oct 2006) | 3 lines

  MacOSX: add more logic to recognize the correct startup file to patch to the
  shell profile patching post-install script.
........
  r52242 | andrew.kuchling | 2006-10-09 19:10:12 +0200 (Mon, 09 Oct 2006) | 1 line

  Add news item for rev. 52211 change
........
  r52245 | andrew.kuchling | 2006-10-09 20:05:19 +0200 (Mon, 09 Oct 2006) | 1 line

  Fix wording in comment
........
  r52251 | georg.brandl | 2006-10-09 21:03:06 +0200 (Mon, 09 Oct 2006) | 2 lines

  Patch #1572724: fix typo ('=' instead of '==') in _msi.c.
........
  r52255 | barry.warsaw | 2006-10-09 21:43:24 +0200 (Mon, 09 Oct 2006) | 2 lines

  List gc.get_count() in the module docstring.
........
  r52257 | martin.v.loewis | 2006-10-09 22:44:25 +0200 (Mon, 09 Oct 2006) | 1 line

  Bug #1565150: Fix subsecond processing for os.utime on Windows.
........
  r52268 | ronald.oussoren | 2006-10-10 09:55:06 +0200 (Tue, 10 Oct 2006) | 2 lines

  MacOSX: fix permission problem in the generated installer
........
  r52293 | georg.brandl | 2006-10-12 09:38:04 +0200 (Thu, 12 Oct 2006) | 2 lines

  Bug #1575746: fix typo in property() docs.
........
  r52295 | georg.brandl | 2006-10-12 09:57:21 +0200 (Thu, 12 Oct 2006) | 3 lines

  Bug #813342: Start the IDLE subprocess with -Qnew if the parent
  is started with that option.
........
  r52297 | georg.brandl | 2006-10-12 10:22:53 +0200 (Thu, 12 Oct 2006) | 2 lines

  Bug #1565919: document set types in the Language Reference.
........
  r52299 | georg.brandl | 2006-10-12 11:20:33 +0200 (Thu, 12 Oct 2006) | 3 lines

  Bug #1550524: better heuristics to find correct class definition
  in inspect.findsource().
........
  r52301 | georg.brandl | 2006-10-12 11:47:12 +0200 (Thu, 12 Oct 2006) | 4 lines

  Bug #1548891: The cStringIO.StringIO() constructor now encodes unicode
  arguments with the system default encoding just like the write()
  method does, instead of converting it to a raw buffer.
........
  r52303 | georg.brandl | 2006-10-12 13:14:40 +0200 (Thu, 12 Oct 2006) | 2 lines

  Bug #1546628: add a note about urlparse.urljoin() and absolute paths.
........
  r52305 | georg.brandl | 2006-10-12 13:27:59 +0200 (Thu, 12 Oct 2006) | 3 lines

  Bug #1545497: when given an explicit base, int() did ignore NULs
  embedded in the string to convert.
........
  r52307 | georg.brandl | 2006-10-12 13:41:11 +0200 (Thu, 12 Oct 2006) | 3 lines

  Add a note to fpectl docs that it's not built by default
  (bug #1556261).
........
  r52309 | georg.brandl | 2006-10-12 13:46:57 +0200 (Thu, 12 Oct 2006) | 3 lines

  Bug #1560114: the Mac filesystem does have accurate information
  about the case of filenames.
........
  r52311 | georg.brandl | 2006-10-12 13:59:27 +0200 (Thu, 12 Oct 2006) | 2 lines

  Small grammar fix, thanks Sjoerd.
........
  r52313 | georg.brandl | 2006-10-12 14:03:07 +0200 (Thu, 12 Oct 2006) | 2 lines

  Fix tarfile depending on buggy int('1\0', base) behavior.
........
  r52315 | georg.brandl | 2006-10-12 14:33:07 +0200 (Thu, 12 Oct 2006) | 2 lines

  Bug #1283491: follow docstring convention wrt. keyword-able args in sum().
........
  r52316 | georg.brandl | 2006-10-12 15:08:16 +0200 (Thu, 12 Oct 2006) | 3 lines

  Bug #1560179: speed up posixpath.(dir|base)name
........
  r52327 | brett.cannon | 2006-10-14 08:36:45 +0200 (Sat, 14 Oct 2006) | 3 lines

  Clean up the language of a sentence relating to the connect() function and
  user-defined datatypes.
........
  r52332 | neal.norwitz | 2006-10-14 23:33:38 +0200 (Sat, 14 Oct 2006) | 3 lines

  Update the peephole optimizer to remove more dead code (jumps after returns)
  and inline jumps to returns.
........
  r52333 | martin.v.loewis | 2006-10-15 09:54:40 +0200 (Sun, 15 Oct 2006) | 4 lines

  Patch #1576954: Update VC6 build directory; remove redundant
  files in VC7. Will backport to 2.5.
........
  r52335 | martin.v.loewis | 2006-10-15 10:43:33 +0200 (Sun, 15 Oct 2006) | 1 line

  Patch #1576166: Support os.utime for directories on Windows NT+.
........
  r52336 | martin.v.loewis | 2006-10-15 10:51:22 +0200 (Sun, 15 Oct 2006) | 2 lines

  Patch #1577551: Add ctypes and ET build support for VC6.
  Will backport to 2.5.
........
  r52338 | martin.v.loewis | 2006-10-15 11:35:51 +0200 (Sun, 15 Oct 2006) | 1 line

  Loosen the test for equal time stamps.
........
  r52339 | martin.v.loewis | 2006-10-15 11:43:39 +0200 (Sun, 15 Oct 2006) | 2 lines

  Bug #1567666: Emulate GetFileAttributesExA for Win95.
  Will backport to 2.5.
........
  r52341 | martin.v.loewis | 2006-10-15 13:02:07 +0200 (Sun, 15 Oct 2006) | 2 lines

  Round to int, because some systems support sub-second time stamps in stat, but not in utime.
  Also be consistent with modifying only mtime, not atime.
........
  r52342 | martin.v.loewis | 2006-10-15 13:57:40 +0200 (Sun, 15 Oct 2006) | 2 lines

  Set the eol-style for project files to "CRLF".
........
  r52343 | martin.v.loewis | 2006-10-15 13:59:56 +0200 (Sun, 15 Oct 2006) | 3 lines

  Drop binary property on dsp files, set eol-style
  to CRLF instead.
........
  r52344 | martin.v.loewis | 2006-10-15 14:01:43 +0200 (Sun, 15 Oct 2006) | 2 lines

  Remove binary property, set eol-style to CRLF instead.
........
  r52346 | martin.v.loewis | 2006-10-15 16:30:38 +0200 (Sun, 15 Oct 2006) | 2 lines

  Mention the bdist_msi module. Will backport to 2.5.
........
  r52354 | brett.cannon | 2006-10-16 05:09:52 +0200 (Mon, 16 Oct 2006) | 3 lines

  Fix turtle so that you can launch the demo2 function on its own instead of only
  when the module is launched as a script.
........
  r52356 | martin.v.loewis | 2006-10-17 17:18:06 +0200 (Tue, 17 Oct 2006) | 2 lines

  Patch #1457736: Update VC6 to use current PCbuild settings.
  Will backport to 2.5.
........
  r52360 | martin.v.loewis | 2006-10-17 20:09:55 +0200 (Tue, 17 Oct 2006) | 2 lines

  Remove obsolete file. Will backport.
........
  r52363 | martin.v.loewis | 2006-10-17 20:59:23 +0200 (Tue, 17 Oct 2006) | 4 lines

  Forward-port r52358:
  - Bug #1578513: Cross compilation was broken by a change to configure.
  Repair so that it's back to how it was in 2.4.3.
........
  r52365 | thomas.heller | 2006-10-17 21:30:48 +0200 (Tue, 17 Oct 2006) | 6 lines

  ctypes callback functions only support 'fundamental' result types.
  Check this and raise an error when something else is used - before
  this change ctypes would hang or crash when such a callback was
  called.  This is a partial fix for #1574584.

  Will backport to release25-maint.
........
  r52377 | tim.peters | 2006-10-18 07:06:06 +0200 (Wed, 18 Oct 2006) | 2 lines

  newIobject():  repaired incorrect cast to quiet MSVC warning.
........
  r52378 | tim.peters | 2006-10-18 07:09:12 +0200 (Wed, 18 Oct 2006) | 2 lines

  Whitespace normalization.
........
  r52379 | tim.peters | 2006-10-18 07:10:28 +0200 (Wed, 18 Oct 2006) | 2 lines

  Add missing svn:eol-style to text files.
........
  r52387 | martin.v.loewis | 2006-10-19 12:58:46 +0200 (Thu, 19 Oct 2006) | 3 lines

  Add check for the PyArg_ParseTuple format, and declare
  it if it is supported.
........
  r52388 | martin.v.loewis | 2006-10-19 13:00:37 +0200 (Thu, 19 Oct 2006) | 3 lines

  Fix various minor errors in passing arguments to
  PyArg_ParseTuple.
........
  r52389 | martin.v.loewis | 2006-10-19 18:01:37 +0200 (Thu, 19 Oct 2006) | 2 lines

  Restore CFLAGS after checking for __attribute__
........
  r52390 | andrew.kuchling | 2006-10-19 23:55:55 +0200 (Thu, 19 Oct 2006) | 1 line

  [Bug #1576348] Fix typo in example
........
  r52414 | walter.doerwald | 2006-10-22 10:59:41 +0200 (Sun, 22 Oct 2006) | 2 lines

  Port test___future__ to unittest.
........
  r52415 | ronald.oussoren | 2006-10-22 12:45:18 +0200 (Sun, 22 Oct 2006) | 3 lines

  Patch #1580674: with this patch os.readlink uses the filesystem encoding to
  decode unicode objects and returns an unicode object when the argument is one.
........
  r52416 | martin.v.loewis | 2006-10-22 12:46:18 +0200 (Sun, 22 Oct 2006) | 3 lines

  Patch #1580872: Remove duplicate declaration of PyCallable_Check.
  Will backport to 2.5.
........
  r52418 | martin.v.loewis | 2006-10-22 12:55:15 +0200 (Sun, 22 Oct 2006) | 4 lines

  - Patch #1560695: Add .note.GNU-stack to ctypes' sysv.S so that
    ctypes isn't considered as requiring executable stacks.
  Will backport to 2.5.
........
  r52420 | martin.v.loewis | 2006-10-22 15:45:13 +0200 (Sun, 22 Oct 2006) | 3 lines

  Remove passwd.adjunct.byname from list of maps
  for test_nis. Will backport to 2.5.
........
  r52431 | georg.brandl | 2006-10-24 18:54:16 +0200 (Tue, 24 Oct 2006) | 2 lines

  Patch [ 1583506 ] tarfile.py: 100-char filenames are truncated
........
  r52446 | andrew.kuchling | 2006-10-26 21:10:46 +0200 (Thu, 26 Oct 2006) | 1 line

  [Bug #1579796] Wrong syntax for PyDateTime_IMPORT in documentation.  Reported by David Faure.
........
  r52449 | andrew.kuchling | 2006-10-26 21:16:46 +0200 (Thu, 26 Oct 2006) | 1 line

  Typo fix
........
  r52452 | martin.v.loewis | 2006-10-27 08:16:31 +0200 (Fri, 27 Oct 2006) | 3 lines

  Patch #1549049: Rewrite type conversion in structmember.
  Fixes #1545696 and #1566140. Will backport to 2.5.
........
  r52454 | martin.v.loewis | 2006-10-27 08:42:27 +0200 (Fri, 27 Oct 2006) | 2 lines

  Check for values.h. Will backport.
........
  r52456 | martin.v.loewis | 2006-10-27 09:06:52 +0200 (Fri, 27 Oct 2006) | 2 lines

  Get DBL_MAX from float.h not values.h. Will backport.
........
  r52458 | martin.v.loewis | 2006-10-27 09:13:28 +0200 (Fri, 27 Oct 2006) | 2 lines

  Patch #1567274: Support SMTP over TLS.
........
  r52459 | andrew.kuchling | 2006-10-27 13:33:29 +0200 (Fri, 27 Oct 2006) | 1 line

  Set svn:keywords property
........
  r52460 | andrew.kuchling | 2006-10-27 13:36:41 +0200 (Fri, 27 Oct 2006) | 1 line

  Add item
........
  r52461 | andrew.kuchling | 2006-10-27 13:37:01 +0200 (Fri, 27 Oct 2006) | 1 line

  Some wording changes and markup fixes
........
  r52462 | andrew.kuchling | 2006-10-27 14:18:38 +0200 (Fri, 27 Oct 2006) | 1 line

  [Bug #1585690] Note that line_num was added in Python 2.5
........
  r52464 | andrew.kuchling | 2006-10-27 14:50:38 +0200 (Fri, 27 Oct 2006) | 1 line

  [Bug #1583946] Reword description of server and issuer
........
  r52466 | andrew.kuchling | 2006-10-27 15:06:25 +0200 (Fri, 27 Oct 2006) | 1 line

  [Bug #1562583] Mention the set_reuse_addr() method
........
  r52469 | andrew.kuchling | 2006-10-27 15:22:46 +0200 (Fri, 27 Oct 2006) | 4 lines

  [Bug #1542016] Report PCALL_POP value.  This makes the return value of sys.callstats() match its docstring.

  Backport candidate.  Though it's an API change, this is a pretty obscure
  portion of the API.
........
  r52473 | andrew.kuchling | 2006-10-27 16:53:41 +0200 (Fri, 27 Oct 2006) | 1 line

  Point users to the subprocess module in the docs for os.system, os.spawn*, os.popen2, and the popen2 and commands modules
........
  r52476 | andrew.kuchling | 2006-10-27 18:39:10 +0200 (Fri, 27 Oct 2006) | 1 line

  [Bug #1576241] Let functools.wraps work with built-in functions
........
  r52478 | andrew.kuchling | 2006-10-27 18:55:34 +0200 (Fri, 27 Oct 2006) | 1 line

  [Bug #1575506] The _singlefileMailbox class was using the wrong file object in its flush() method, causing an error
........
  r52480 | andrew.kuchling | 2006-10-27 19:06:16 +0200 (Fri, 27 Oct 2006) | 1 line

  Clarify docstring
........
  r52481 | andrew.kuchling | 2006-10-27 19:11:23 +0200 (Fri, 27 Oct 2006) | 5 lines

  [Patch #1574068 by Scott Dial] urllib and urllib2 were using
  base64.encodestring() for encoding authentication data.
  encodestring() can include newlines for very long input, which
  produced broken HTTP headers.
........
  r52483 | andrew.kuchling | 2006-10-27 20:13:46 +0200 (Fri, 27 Oct 2006) | 1 line

  Check db_setup_debug for a few print statements; change sqlite_setup_debug to False
........
  r52484 | andrew.kuchling | 2006-10-27 20:15:02 +0200 (Fri, 27 Oct 2006) | 1 line

  [Patch #1503717] Tiny patch from Chris AtLee to stop a lengthy line from being printed
........
  r52485 | thomas.heller | 2006-10-27 20:31:36 +0200 (Fri, 27 Oct 2006) | 5 lines

  WindowsError.str should display the windows error code,
  not the posix error code; with test.
  Fixes #1576174.

  Will backport to release25-maint.
........
  r52487 | thomas.heller | 2006-10-27 21:05:53 +0200 (Fri, 27 Oct 2006) | 4 lines

  Modulefinder now handles absolute and relative imports, including
  tests.

  Will backport to release25-maint.
........
  r52488 | georg.brandl | 2006-10-27 22:39:43 +0200 (Fri, 27 Oct 2006) | 2 lines

  Patch #1552024: add decorator support to unparse.py demo script.
........
  r52492 | walter.doerwald | 2006-10-28 12:47:12 +0200 (Sat, 28 Oct 2006) | 2 lines

  Port test_bufio to unittest.
........
  r52493 | georg.brandl | 2006-10-28 15:10:17 +0200 (Sat, 28 Oct 2006) | 6 lines

  Convert test_global, test_scope and test_grammar to unittest.

  I tried to enclose all tests which must be run at the toplevel
  (instead of inside a method) in exec statements.
........
  r52494 | georg.brandl | 2006-10-28 15:11:41 +0200 (Sat, 28 Oct 2006) | 3 lines

  Update outstanding bugs test file.
........
  r52495 | georg.brandl | 2006-10-28 15:51:49 +0200 (Sat, 28 Oct 2006) | 3 lines

  Convert test_math to unittest.
........
  r52496 | georg.brandl | 2006-10-28 15:56:58 +0200 (Sat, 28 Oct 2006) | 3 lines

  Convert test_opcodes to unittest.
........
  r52497 | georg.brandl | 2006-10-28 18:04:04 +0200 (Sat, 28 Oct 2006) | 2 lines

  Fix nth() itertool recipe.
........
  r52500 | georg.brandl | 2006-10-28 22:25:09 +0200 (Sat, 28 Oct 2006) | 2 lines

  make test_grammar pass with python -O
........
  r52501 | neal.norwitz | 2006-10-28 23:15:30 +0200 (Sat, 28 Oct 2006) | 6 lines

  Add some asserts.  In sysmodule, I think these were to try to silence
  some warnings from Klokwork.  They verify the assumptions of the format
  of svn version output.

  The assert in the thread module helped debug a problem on HP-UX.
........
  r52502 | neal.norwitz | 2006-10-28 23:16:54 +0200 (Sat, 28 Oct 2006) | 5 lines

  Fix warnings with HP's C compiler.  It doesn't recognize that infinite
  loops are, um, infinite.  These conditions should not be able to happen.

  Will backport.
........
  r52503 | neal.norwitz | 2006-10-28 23:17:51 +0200 (Sat, 28 Oct 2006) | 5 lines

  Fix crash in test on HP-UX.  Apparently, it's not possible to delete a lock if
  it's held (even by the current thread).

  Will backport.
........
  r52504 | neal.norwitz | 2006-10-28 23:19:07 +0200 (Sat, 28 Oct 2006) | 6 lines

  Fix bug #1565514, SystemError not raised on too many nested blocks.
  It seems like this should be a different error than SystemError, but
  I don't have any great ideas and SystemError was raised in 2.4 and earlier.

  Will backport.
........
  r52505 | neal.norwitz | 2006-10-28 23:20:12 +0200 (Sat, 28 Oct 2006) | 4 lines

  Prevent crash if alloc of garbage fails.  Found by Typo.pl.

  Will backport.
........
  r52506 | neal.norwitz | 2006-10-28 23:21:00 +0200 (Sat, 28 Oct 2006) | 4 lines

  Don't inline Py_ADDRESS_IN_RANGE with gcc 4+ either.

  Will backport.
........
  r52513 | neal.norwitz | 2006-10-28 23:56:49 +0200 (Sat, 28 Oct 2006) | 2 lines

  Fix test_modulefinder so it doesn't fail when run after test_distutils.
........
  r52514 | neal.norwitz | 2006-10-29 00:12:26 +0200 (Sun, 29 Oct 2006) | 4 lines

  From SF 1557890, fix problem of using wrong type in example.

  Will backport.
........
  r52517 | georg.brandl | 2006-10-29 09:39:22 +0100 (Sun, 29 Oct 2006) | 4 lines

  Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and
  fix all codecs file wrappers to work correctly with the "with"
  statement (bug #1586513).
........
  r52519 | georg.brandl | 2006-10-29 09:47:08 +0100 (Sun, 29 Oct 2006) | 3 lines

  Clean up a leftover from old listcomp generation code.
........
  r52520 | georg.brandl | 2006-10-29 09:53:06 +0100 (Sun, 29 Oct 2006) | 4 lines

  Bug #1586448: the compiler module now emits the same bytecode for
  list comprehensions as the builtin compiler, using the LIST_APPEND
  opcode.
........
  r52521 | georg.brandl | 2006-10-29 10:01:01 +0100 (Sun, 29 Oct 2006) | 3 lines

  Remove trailing comma.
........
  r52522 | georg.brandl | 2006-10-29 10:05:04 +0100 (Sun, 29 Oct 2006) | 3 lines

  Bug #1357915: allow all sequence types for shell arguments in
  subprocess.
........
  r52524 | georg.brandl | 2006-10-29 10:16:12 +0100 (Sun, 29 Oct 2006) | 3 lines

  Patch #1583880: fix tarfile's problems with long names and posix/
  GNU modes.
........
  r52526 | georg.brandl | 2006-10-29 10:18:00 +0100 (Sun, 29 Oct 2006) | 3 lines

  Test assert if __debug__ is true.
........
  r52527 | georg.brandl | 2006-10-29 10:32:16 +0100 (Sun, 29 Oct 2006) | 2 lines

  Fix the new EncodedFile test to work with big endian platforms.
........
  r52529 | georg.brandl | 2006-10-29 15:39:09 +0100 (Sun, 29 Oct 2006) | 2 lines

  Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders.
........
  r52532 | georg.brandl | 2006-10-29 19:01:08 +0100 (Sun, 29 Oct 2006) | 2 lines

  Bug #1586773: extend hashlib docstring.
........
  r52534 | neal.norwitz | 2006-10-29 19:30:10 +0100 (Sun, 29 Oct 2006) | 4 lines

  Update comments, remove commented out code.
  Move assembler structure next to assembler code to make it easier to
  move it to a separate file.
........
  r52535 | georg.brandl | 2006-10-29 19:31:42 +0100 (Sun, 29 Oct 2006) | 3 lines

  Bug #1576657: when setting a KeyError for a tuple key, make sure that
  the tuple isn't used as the "exception arguments tuple".
........
  r52537 | georg.brandl | 2006-10-29 20:13:40 +0100 (Sun, 29 Oct 2006) | 3 lines

  Convert test_mmap to unittest.
........
  r52538 | georg.brandl | 2006-10-29 20:20:45 +0100 (Sun, 29 Oct 2006) | 3 lines

  Convert test_poll to unittest.
........
  r52539 | georg.brandl | 2006-10-29 20:24:43 +0100 (Sun, 29 Oct 2006) | 3 lines

  Convert test_nis to unittest.
........
  r52540 | georg.brandl | 2006-10-29 20:35:03 +0100 (Sun, 29 Oct 2006) | 3 lines

  Convert test_types to unittest.
........
  r52541 | georg.brandl | 2006-10-29 20:51:16 +0100 (Sun, 29 Oct 2006) | 3 lines

  Convert test_cookie to unittest.
........
  r52542 | georg.brandl | 2006-10-29 21:09:12 +0100 (Sun, 29 Oct 2006) | 3 lines

  Convert test_cgi to unittest.
........
  r52543 | georg.brandl | 2006-10-29 21:24:01 +0100 (Sun, 29 Oct 2006) | 3 lines

  Completely convert test_httplib to unittest.
........
  r52544 | georg.brandl | 2006-10-29 21:28:26 +0100 (Sun, 29 Oct 2006) | 2 lines

  Convert test_MimeWriter to unittest.
........
  r52545 | georg.brandl | 2006-10-29 21:31:17 +0100 (Sun, 29 Oct 2006) | 3 lines

  Convert test_openpty to unittest.
........
  r52546 | georg.brandl | 2006-10-29 21:35:12 +0100 (Sun, 29 Oct 2006) | 3 lines

  Remove leftover test output file.
........
  r52547 | georg.brandl | 2006-10-29 22:54:18 +0100 (Sun, 29 Oct 2006) | 3 lines

  Move the check for openpty to the beginning.
........
  r52548 | walter.doerwald | 2006-10-29 23:06:28 +0100 (Sun, 29 Oct 2006) | 2 lines

  Add tests for basic argument errors.
........
  r52549 | walter.doerwald | 2006-10-30 00:02:27 +0100 (Mon, 30 Oct 2006) | 3 lines

  Add tests for incremental codecs with an errors
  argument.
........
  r52550 | neal.norwitz | 2006-10-30 00:39:03 +0100 (Mon, 30 Oct 2006) | 1 line

  Fix refleak
........
  r52552 | neal.norwitz | 2006-10-30 00:58:36 +0100 (Mon, 30 Oct 2006) | 1 line

  I'm assuming this is correct, it fixes the tests so they pass again
........
  r52555 | vinay.sajip | 2006-10-31 18:32:37 +0100 (Tue, 31 Oct 2006) | 1 line

  Change to improve speed of _fixupChildren
........
  r52556 | vinay.sajip | 2006-10-31 18:34:31 +0100 (Tue, 31 Oct 2006) | 1 line

  Added relativeCreated to Formatter doc (has been in the system for a long time - was unaccountably left out of the docs and not noticed until now).
........
  r52588 | thomas.heller | 2006-11-02 20:48:24 +0100 (Thu, 02 Nov 2006) | 5 lines

  Replace the XXX marker in the 'Arrays and pointers' reference manual
  section with a link to the tutorial sections.

  Will backport to release25-maint.
........
  r52592 | thomas.heller | 2006-11-02 21:22:29 +0100 (Thu, 02 Nov 2006) | 6 lines

  Fix a code example by adding a missing import.

  Fixes #1557890.

  Will backport to release25-maint.
........
  r52598 | tim.peters | 2006-11-03 03:32:46 +0100 (Fri, 03 Nov 2006) | 2 lines

  Whitespace normalization.
........
  r52619 | martin.v.loewis | 2006-11-04 19:14:06 +0100 (Sat, 04 Nov 2006) | 4 lines

  - Patch #1060577: Extract list of RPM files from spec file in
    bdist_rpm
  Will backport to 2.5.
........
  r52621 | neal.norwitz | 2006-11-04 20:25:22 +0100 (Sat, 04 Nov 2006) | 4 lines

  Bug #1588287: fix invalid assertion for `1,2` in debug builds.

  Will backport
........
  r52630 | andrew.kuchling | 2006-11-05 22:04:37 +0100 (Sun, 05 Nov 2006) | 1 line

  Update link
........
  r52631 | skip.montanaro | 2006-11-06 15:34:52 +0100 (Mon, 06 Nov 2006) | 1 line

  note that user can control directory location even if default dir is used
........
  r52644 | ronald.oussoren | 2006-11-07 16:53:38 +0100 (Tue, 07 Nov 2006) | 2 lines

  Fix a number of typos in strings and comments (sf#1589070)
........
  r52647 | ronald.oussoren | 2006-11-07 17:00:34 +0100 (Tue, 07 Nov 2006) | 2 lines

  Whitespace changes to make the source more compliant with PEP8 (SF#1589070)
........
  r52651 | thomas.heller | 2006-11-07 19:01:18 +0100 (Tue, 07 Nov 2006) | 3 lines

  Fix markup.

  Will backport to release25-maint.
........
  r52653 | thomas.heller | 2006-11-07 19:20:47 +0100 (Tue, 07 Nov 2006) | 3 lines

  Fix grammatical error as well.

  Will backport to release25-maint.
........
  r52657 | andrew.kuchling | 2006-11-07 21:39:16 +0100 (Tue, 07 Nov 2006) | 1 line

  Add missing word
........
  r52662 | martin.v.loewis | 2006-11-08 07:46:37 +0100 (Wed, 08 Nov 2006) | 4 lines

  Correctly forward exception in instance_contains().
  Fixes #1591996. Patch contributed by Neal Norwitz.
  Will backport.
........
  r52664 | martin.v.loewis | 2006-11-08 07:48:36 +0100 (Wed, 08 Nov 2006) | 2 lines

  News entry for 52662.
........
  r52665 | martin.v.loewis | 2006-11-08 08:35:55 +0100 (Wed, 08 Nov 2006) | 2 lines

  Patch #1351744: Add askyesnocancel helper for tkMessageBox.
........
  r52666 | georg.brandl | 2006-11-08 08:45:59 +0100 (Wed, 08 Nov 2006) | 2 lines

  Patch #1592072: fix docs for return value of PyErr_CheckSignals.
........
  r52668 | georg.brandl | 2006-11-08 11:04:29 +0100 (Wed, 08 Nov 2006) | 3 lines

  Bug #1592533: rename variable in heapq doc example, to avoid shadowing
  "sorted".
........
  r52671 | andrew.kuchling | 2006-11-08 14:35:34 +0100 (Wed, 08 Nov 2006) | 1 line

  Add section on the functional module
........
  r52672 | andrew.kuchling | 2006-11-08 15:14:30 +0100 (Wed, 08 Nov 2006) | 1 line

  Add section on operator module; make a few edits
........
  r52673 | andrew.kuchling | 2006-11-08 15:24:03 +0100 (Wed, 08 Nov 2006) | 1 line

  Add table of contents; this required fixing a few headings.  Some more smalle edits.
........
  r52674 | andrew.kuchling | 2006-11-08 15:30:14 +0100 (Wed, 08 Nov 2006) | 1 line

  More edits
........
  r52686 | martin.v.loewis | 2006-11-09 12:06:03 +0100 (Thu, 09 Nov 2006) | 3 lines

  Patch #838546: Make terminal become controlling in pty.fork().
  Will backport to 2.5.
........
  r52688 | martin.v.loewis | 2006-11-09 12:27:32 +0100 (Thu, 09 Nov 2006) | 2 lines

  Patch #1592250: Add elidge argument to Tkinter.Text.search.
........
  r52690 | andrew.kuchling | 2006-11-09 14:27:07 +0100 (Thu, 09 Nov 2006) | 7 lines

  [Bug #1569790] mailbox.Maildir.get_folder() loses factory information

  Both the Maildir and MH classes had this bug; the patch fixes both classes
  and adds a test.

  Will backport to 25-maint.
........
  r52692 | andrew.kuchling | 2006-11-09 14:51:14 +0100 (Thu, 09 Nov 2006) | 1 line

  [Patch #1514544 by David Watson] use fsync() to ensure data is really on disk
........
  r52695 | walter.doerwald | 2006-11-09 17:23:26 +0100 (Thu, 09 Nov 2006) | 2 lines

  Replace C++ comment with C comment (fixes SF bug #1593525).
........
  r52712 | andrew.kuchling | 2006-11-09 22:16:46 +0100 (Thu, 09 Nov 2006) | 11 lines

  [Patch #1514543] mailbox (Maildir): avoid losing messages on name clash

  Two changes:

  Where possible, use link()/remove() to move files into a directory; this
  makes it easier to avoid overwriting an existing file.

  Use _create_carefully() to create files in tmp/, which uses O_EXCL.

  Backport candidate.
........
  r52716 | phillip.eby | 2006-11-10 01:33:36 +0100 (Fri, 10 Nov 2006) | 4 lines

  Fix SF#1566719: not creating site-packages (or other target directory) when
  installing .egg-info for a project that contains no modules or packages,
  while using --root (as in bdist_rpm).
........
  r52719 | andrew.kuchling | 2006-11-10 14:14:01 +0100 (Fri, 10 Nov 2006) | 1 line

  Reword entry
........
  r52725 | andrew.kuchling | 2006-11-10 15:39:01 +0100 (Fri, 10 Nov 2006) | 1 line

  [Feature request #1542920] Link to wsgi.org
........
  r52731 | georg.brandl | 2006-11-11 19:29:11 +0100 (Sat, 11 Nov 2006) | 2 lines

  Bug #1594742: wrong word in stringobject doc.
........
  r52733 | georg.brandl | 2006-11-11 19:32:47 +0100 (Sat, 11 Nov 2006) | 2 lines

  Bug #1594758: wording improvement for dict.update() docs.
........
  r52736 | martin.v.loewis | 2006-11-12 11:32:47 +0100 (Sun, 12 Nov 2006) | 3 lines

  Patch #1065257: Support passing open files as body in
  HTTPConnection.request().
........
  r52737 | martin.v.loewis | 2006-11-12 11:41:39 +0100 (Sun, 12 Nov 2006) | 2 lines

  Patch #1355023: support whence argument for GzipFile.seek.
........
  r52738 | martin.v.loewis | 2006-11-12 19:24:26 +0100 (Sun, 12 Nov 2006) | 2 lines

  Bug #1067760: Deprecate passing floats to file.seek.
........
  r52739 | martin.v.loewis | 2006-11-12 19:48:13 +0100 (Sun, 12 Nov 2006) | 3 lines

  Patch #1359217: Ignore 2xx response before 150 response.
  Will backport to 2.5.
........
  r52741 | martin.v.loewis | 2006-11-12 19:56:03 +0100 (Sun, 12 Nov 2006) | 4 lines

  Patch #1360200: Use unmangled_version RPM spec field to deal with
  file name mangling.
  Will backport to 2.5.
........
  r52753 | walter.doerwald | 2006-11-15 17:23:46 +0100 (Wed, 15 Nov 2006) | 2 lines

  Fix typo.
........
  r52754 | georg.brandl | 2006-11-15 18:42:03 +0100 (Wed, 15 Nov 2006) | 2 lines

  Bug #1594809: add a note to README regarding PYTHONPATH and make install.
........
  r52762 | georg.brandl | 2006-11-16 16:05:14 +0100 (Thu, 16 Nov 2006) | 2 lines

  Bug #1597576: mention that the new base64 api has been introduced in py2.4.
........
  r52764 | georg.brandl | 2006-11-16 17:50:59 +0100 (Thu, 16 Nov 2006) | 3 lines

  Bug #1597824: return the registered function from atexit.register()
  to facilitate usage as a decorator.
........
  r52765 | georg.brandl | 2006-11-16 18:08:45 +0100 (Thu, 16 Nov 2006) | 4 lines

  Bug #1588217: don't parse "= " as a soft line break in binascii's
  a2b_qp() function, instead leave it in the string as quopri.decode()
  does.
........
  r52776 | andrew.kuchling | 2006-11-17 14:30:25 +0100 (Fri, 17 Nov 2006) | 17 lines

  Remove file-locking in MH.pack() method.
  This change looks massive but it's mostly a re-indenting after
  removing some try...finally blocks.

  Also adds a test case that does a pack() while the mailbox is locked; this
  test would have turned up bugs in the original code on some platforms.

  In both nmh and GNU Mailutils' implementation of MH-format mailboxes,
  no locking is done of individual message files when renaming them.

  The original mailbox.py code did do locking, which meant that message
  files had to be opened.  This code was buggy on certain platforms
  (found through reading the code); there were code paths that closed
  the file object and then called _unlock_file() on it.

  Will backport to 25-maint once I see how the buildbots react to this patch.
........
  r52780 | martin.v.loewis | 2006-11-18 19:00:23 +0100 (Sat, 18 Nov 2006) | 5 lines

  Patch #1538878: Don't make tkSimpleDialog dialogs transient if
  the parent window is withdrawn. This mirrors what dialog.tcl
  does.
  Will backport to 2.5.
........
  r52782 | martin.v.loewis | 2006-11-18 19:05:35 +0100 (Sat, 18 Nov 2006) | 4 lines

  Patch #1594554: Always close a tkSimpleDialog on ok(), even
  if an exception occurs.
  Will backport to 2.5.
........
  r52784 | martin.v.loewis | 2006-11-18 19:42:11 +0100 (Sat, 18 Nov 2006) | 3 lines

  Patch #1472877: Fix Tix subwidget name resolution.
  Will backport to 2.5.
........
  r52786 | andrew.kuchling | 2006-11-18 23:17:33 +0100 (Sat, 18 Nov 2006) | 1 line

  Expand checking in test_sha
........
  r52787 | georg.brandl | 2006-11-19 09:48:30 +0100 (Sun, 19 Nov 2006) | 3 lines

  Patch [ 1586791 ] better error msgs for some TypeErrors
........
  r52788 | martin.v.loewis | 2006-11-19 11:41:41 +0100 (Sun, 19 Nov 2006) | 4 lines

  Make cStringIO.truncate raise IOError for negative
  arguments (even for -1). Fixes the last bit of
  #1359365.
........
  r52789 | andrew.kuchling | 2006-11-19 19:40:01 +0100 (Sun, 19 Nov 2006) | 1 line

  Add a test case of data w/ bytes > 127
........
  r52790 | martin.v.loewis | 2006-11-19 19:51:54 +0100 (Sun, 19 Nov 2006) | 3 lines

  Patch #1070046: Marshal new-style objects like InstanceType
  in xmlrpclib.
........
  r52792 | neal.norwitz | 2006-11-19 22:26:53 +0100 (Sun, 19 Nov 2006) | 4 lines

  Speed up function calls into the math module by using METH_O.
  There should be no functional changes. However, the error msgs are
  slightly different.  Also verified that the module dict is not NULL on init.
........
  r52794 | george.yoshida | 2006-11-20 03:24:48 +0100 (Mon, 20 Nov 2006) | 2 lines

  markup fix
........
  r52795 | georg.brandl | 2006-11-20 08:12:58 +0100 (Mon, 20 Nov 2006) | 3 lines

  Further markup fix.
........
  r52800 | andrew.kuchling | 2006-11-20 14:39:37 +0100 (Mon, 20 Nov 2006) | 2 lines

  Jython compatibility fix: if uu.decode() opened its output file, be sure to
  close it.
........
  r52811 | neal.norwitz | 2006-11-21 06:26:22 +0100 (Tue, 21 Nov 2006) | 9 lines

  Bug #1599782: Fix segfault on bsddb.db.DB().type().

  The problem is that _DB_get_type() can't be called without the GIL
  because it calls a bunch of PyErr_* APIs when an error occurs.
  There were no other cases in this file that it was called without the GIL.
  Removing the BEGIN/END THREAD around _DB_get_type() made everything work.

  Will backport.
........
  r52814 | neal.norwitz | 2006-11-21 06:51:51 +0100 (Tue, 21 Nov 2006) | 1 line

  Oops, convert tabs to spaces
........
  r52815 | neal.norwitz | 2006-11-21 07:23:44 +0100 (Tue, 21 Nov 2006) | 1 line

  Fix SF #1599879, socket.gethostname should ref getfqdn directly.
........
  r52817 | martin.v.loewis | 2006-11-21 19:20:25 +0100 (Tue, 21 Nov 2006) | 4 lines

  Conditionalize definition of _CRT_SECURE_NO_DEPRECATE
  and _CRT_NONSTDC_NO_DEPRECATE.
  Will backport.
........
  r52821 | martin.v.loewis | 2006-11-22 09:50:02 +0100 (Wed, 22 Nov 2006) | 4 lines

  Patch #1362975: Rework CodeContext indentation algorithm to
  avoid hard-coding pixel widths. Also make the text's scrollbar
  a child of the text frame, not the top widget.
........
  r52826 | walter.doerwald | 2006-11-23 06:03:56 +0100 (Thu, 23 Nov 2006) | 3 lines

  Change decode() so that it works with a buffer (i.e. unicode(..., 'utf-8-sig'))
  SF bug #1601501.
........
  r52833 | georg.brandl | 2006-11-23 10:55:07 +0100 (Thu, 23 Nov 2006) | 2 lines

  Bug #1601630: little improvement to getopt docs
........
  r52835 | michael.hudson | 2006-11-23 14:54:04 +0100 (Thu, 23 Nov 2006) | 3 lines

  a test for an error condition not covered by existing tests
  (noticed this when writing the equivalent code for pypy)
........
  r52839 | raymond.hettinger | 2006-11-23 22:06:03 +0100 (Thu, 23 Nov 2006) | 1 line

  Fix and/add typo
........
  r52840 | raymond.hettinger | 2006-11-23 22:35:19 +0100 (Thu, 23 Nov 2006) | 1 line

  ... and the number of the counting shall be three.
........
  r52841 | thomas.heller | 2006-11-24 19:45:39 +0100 (Fri, 24 Nov 2006) | 1 line

  Fix bug #1598620: A ctypes structure cannot contain itself.
........
  r52843 | martin.v.loewis | 2006-11-25 16:39:19 +0100 (Sat, 25 Nov 2006) | 3 lines

  Disable _XOPEN_SOURCE on NetBSD 1.x.
  Will backport to 2.5
........
  r52845 | georg.brandl | 2006-11-26 20:27:47 +0100 (Sun, 26 Nov 2006) | 2 lines

  Bug #1603321: make pstats.Stats accept Unicode file paths.
........
  r52850 | georg.brandl | 2006-11-27 19:46:21 +0100 (Mon, 27 Nov 2006) | 2 lines

  Bug #1603789: grammatical error in Tkinter docs.
........
  r52855 | thomas.heller | 2006-11-28 21:21:54 +0100 (Tue, 28 Nov 2006) | 7 lines

  Fix #1563807: _ctypes built on AIX fails with ld ffi error.

  The contents of ffi_darwin.c must be compiled unless __APPLE__ is
  defined and __ppc__ is not.

  Will backport.
........
  r52862 | armin.rigo | 2006-11-29 22:59:22 +0100 (Wed, 29 Nov 2006) | 3 lines

  Forgot a case where the locals can now be a general mapping
  instead of just a dictionary.  (backporting...)
........
  r52872 | guido.van.rossum | 2006-11-30 20:23:13 +0100 (Thu, 30 Nov 2006) | 2 lines

  Update version.
........
  r52890 | walter.doerwald | 2006-12-01 17:59:47 +0100 (Fri, 01 Dec 2006) | 3 lines

  Move xdrlib tests from the module into a separate test script,
  port the tests to unittest and add a few new tests.
........
  r52900 | raymond.hettinger | 2006-12-02 03:00:39 +0100 (Sat, 02 Dec 2006) | 1 line

  Add name to credits (for untokenize).
........
  r52905 | martin.v.loewis | 2006-12-03 10:54:46 +0100 (Sun, 03 Dec 2006) | 2 lines

  Move IDLE news into NEWS.txt.
........
  r52906 | martin.v.loewis | 2006-12-03 12:23:45 +0100 (Sun, 03 Dec 2006) | 4 lines

  Patch #1544279: Improve thread-safety of the socket module by moving
  the sock_addr_t storage out of the socket object.
  Will backport to 2.5.
........
  r52908 | martin.v.loewis | 2006-12-03 13:01:53 +0100 (Sun, 03 Dec 2006) | 3 lines

  Patch #1371075: Make ConfigParser accept optional dict type
  for ordering, sorting, etc.
........
  r52910 | matthias.klose | 2006-12-03 18:16:41 +0100 (Sun, 03 Dec 2006) | 2 lines

  - Fix build failure on kfreebsd and on the hurd.
........
  r52915 | george.yoshida | 2006-12-04 12:41:54 +0100 (Mon, 04 Dec 2006) | 2 lines

  fix a versionchanged tag
........
  r52917 | george.yoshida | 2006-12-05 06:39:50 +0100 (Tue, 05 Dec 2006) | 3 lines

  Fix pickle doc typo
  Patch #1608758
........
  r52938 | georg.brandl | 2006-12-06 23:21:18 +0100 (Wed, 06 Dec 2006) | 2 lines

  Patch #1610437: fix a tarfile bug with long filename headers.
........
  r52945 | brett.cannon | 2006-12-07 00:38:48 +0100 (Thu, 07 Dec 2006) | 3 lines

  Fix a bad assumption that all objects assigned to '__loader__' on a module
  will have a '_files' attribute.
........
  r52951 | georg.brandl | 2006-12-07 10:30:06 +0100 (Thu, 07 Dec 2006) | 3 lines

  RFE #1592899: mention string.maketrans() in docs for str.translate,
  remove reference to the old regex module in the former's doc.
........
  r52962 | raymond.hettinger | 2006-12-08 04:17:18 +0100 (Fri, 08 Dec 2006) | 1 line

  Eliminate two redundant calls to PyObject_Hash().
........
  r52963 | raymond.hettinger | 2006-12-08 05:24:33 +0100 (Fri, 08 Dec 2006) | 3 lines

  Port Armin's fix for a dict resize vulnerability (svn revision 46589, sf bug 1456209).
........
  r52964 | raymond.hettinger | 2006-12-08 05:57:50 +0100 (Fri, 08 Dec 2006) | 4 lines

  Port Georg's dictobject.c fix keys that were tuples got unpacked on the way to setting a KeyError (svn revision 52535, sf bug
  1576657).
........
  r52966 | raymond.hettinger | 2006-12-08 18:35:25 +0100 (Fri, 08 Dec 2006) | 2 lines

  Add test for SF bug 1576657
........
  r52970 | georg.brandl | 2006-12-08 21:46:11 +0100 (Fri, 08 Dec 2006) | 3 lines

  #1577756: svnversion doesn't react to LANG=C, use LC_ALL=C to force
  English output.
........
  r52972 | georg.brandl | 2006-12-09 10:08:29 +0100 (Sat, 09 Dec 2006) | 3 lines

  Patch #1608267: fix a race condition in os.makedirs() is the directory
  to be created is already there.
........
  r52975 | matthias.klose | 2006-12-09 13:15:27 +0100 (Sat, 09 Dec 2006) | 2 lines

  - Fix the build of the library reference in info format.
........
  r52994 | neal.norwitz | 2006-12-11 02:01:06 +0100 (Mon, 11 Dec 2006) | 1 line

  Fix a typo
........
  r52996 | georg.brandl | 2006-12-11 08:56:33 +0100 (Mon, 11 Dec 2006) | 2 lines

  Move errno imports back to individual functions.
........
  r52998 | vinay.sajip | 2006-12-11 15:07:16 +0100 (Mon, 11 Dec 2006) | 1 line

  Patch by Jeremy Katz (SF #1609407)
........
  r53000 | vinay.sajip | 2006-12-11 15:26:23 +0100 (Mon, 11 Dec 2006) | 1 line

  Patch by "cuppatea" (SF #1503765)
........

363 files changed:
Demo/parser/unparse.py
Doc/Makefile
Doc/api/concrete.tex
Doc/api/exceptions.tex
Doc/dist/dist.tex
Doc/ext/extending.tex
Doc/howto/functional.rst [new file with mode: 0644]
Doc/howto/regex.tex
Doc/inst/inst.tex
Doc/lib/libasyncore.tex
Doc/lib/libatexit.tex
Doc/lib/libbase64.tex
Doc/lib/libbsddb.tex
Doc/lib/libcfgparser.tex
Doc/lib/libcommands.tex
Doc/lib/libcsv.tex
Doc/lib/libctypes.tex
Doc/lib/libdatetime.tex
Doc/lib/libdecimal.tex
Doc/lib/libetree.tex
Doc/lib/libfpectl.tex
Doc/lib/libfuncs.tex
Doc/lib/libgetopt.tex
Doc/lib/libhashlib.tex
Doc/lib/libheapq.tex
Doc/lib/libhttplib.tex
Doc/lib/libimp.tex
Doc/lib/libitertools.tex
Doc/lib/liblogging.tex
Doc/lib/libmsilib.tex
Doc/lib/libos.tex
Doc/lib/libpickle.tex
Doc/lib/libpopen2.tex
Doc/lib/libpyexpat.tex
Doc/lib/libsmtplib.tex
Doc/lib/libsocket.tex
Doc/lib/libsqlite3.tex
Doc/lib/libstdtypes.tex
Doc/lib/libstring.tex
Doc/lib/libsubprocess.tex
Doc/lib/libtempfile.tex
Doc/lib/libunittest.tex
Doc/lib/liburlparse.tex
Doc/lib/libuuid.tex
Doc/lib/libwsgiref.tex
Doc/lib/libxmlrpclib.tex
Doc/lib/sqlite3/executescript.py
Doc/lib/tkinter.tex
Doc/perl/python.perl
Doc/ref/ref3.tex
Doc/tools/py2texi.el
Doc/tut/tut.tex
Doc/whatsnew/whatsnew25.tex
Doc/whatsnew/whatsnew26.tex [new file with mode: 0644]
Include/abstract.h
Include/modsupport.h
Include/pyport.h
Lib/ConfigParser.py
Lib/Queue.py
Lib/SimpleXMLRPCServer.py
Lib/_strptime.py
Lib/atexit.py
Lib/base64.py
Lib/bsddb/test/test_dbobj.py
Lib/cgi.py
Lib/codecs.py
Lib/colorsys.py
Lib/compiler/pycodegen.py
Lib/ctypes/__init__.py
Lib/ctypes/test/__init__.py
Lib/ctypes/test/test_bitfields.py
Lib/ctypes/test/test_callbacks.py
Lib/ctypes/test/test_cast.py
Lib/ctypes/test/test_structures.py
Lib/ctypes/test/test_win32.py
Lib/decimal.py
Lib/distutils/command/bdist_rpm.py
Lib/distutils/command/build_ext.py
Lib/distutils/command/install_egg_info.py
Lib/distutils/command/register.py
Lib/distutils/command/wininst-8.exe [new file with mode: 0644]
Lib/distutils/sysconfig.py
Lib/distutils/unixccompiler.py
Lib/email/utils.py
Lib/encodings/__init__.py
Lib/encodings/bz2_codec.py
Lib/encodings/utf_8_sig.py
Lib/encodings/zlib_codec.py
Lib/ftplib.py
Lib/functools.py
Lib/genericpath.py [new file with mode: 0644]
Lib/gzip.py
Lib/hashlib.py
Lib/httplib.py
Lib/idlelib/CodeContext.py
Lib/idlelib/EditorWindow.py
Lib/idlelib/NEWS.txt
Lib/idlelib/PyShell.py
Lib/idlelib/ScriptBinding.py
Lib/inspect.py
Lib/lib-tk/Tix.py
Lib/lib-tk/Tkinter.py
Lib/lib-tk/tkMessageBox.py
Lib/lib-tk/tkSimpleDialog.py
Lib/lib-tk/turtle.py
Lib/logging/__init__.py
Lib/logging/config.py
Lib/logging/handlers.py
Lib/macpath.py
Lib/mailbox.py
Lib/ntpath.py
Lib/os.py
Lib/os2emxpath.py
Lib/pdb.py
Lib/plat-mac/lib-scriptpackages/StdSuites/AppleScript_Suite.py
Lib/plat-sunos5/STROPTS.py
Lib/posixpath.py
Lib/pstats.py
Lib/pty.py
Lib/pyclbr.py
Lib/sgmllib.py
Lib/smtplib.py
Lib/subprocess.py
Lib/tarfile.py
Lib/test/README
Lib/test/crashers/bogus_sre_bytecode.py [new file with mode: 0644]
Lib/test/crashers/infinite_loop_re.py [new file with mode: 0644]
Lib/test/crashers/loosing_mro_ref.py [new file with mode: 0644]
Lib/test/list_tests.py
Lib/test/output/test_MimeWriter [deleted file]
Lib/test/output/test_cgi [deleted file]
Lib/test/output/test_cookie [deleted file]
Lib/test/output/test_global [deleted file]
Lib/test/output/test_grammar [deleted file]
Lib/test/output/test_httplib [deleted file]
Lib/test/output/test_math [deleted file]
Lib/test/output/test_mmap [deleted file]
Lib/test/output/test_nis [deleted file]
Lib/test/output/test_opcodes [deleted file]
Lib/test/output/test_openpty [deleted file]
Lib/test/output/test_poll [deleted file]
Lib/test/output/test_regex [deleted file]
Lib/test/output/test_scope [deleted file]
Lib/test/output/test_tokenize
Lib/test/output/test_types [deleted file]
Lib/test/output/test_xdrlib [deleted file]
Lib/test/outstanding_bugs.py
Lib/test/sgml_input.html [new file with mode: 0644]
Lib/test/string_tests.py
Lib/test/test_MimeWriter.py
Lib/test/test_StringIO.py
Lib/test/test___future__.py
Lib/test/test_array.py
Lib/test/test_binascii.py
Lib/test/test_bufio.py
Lib/test/test_builtin.py
Lib/test/test_cfgparser.py
Lib/test/test_cgi.py
Lib/test/test_class.py
Lib/test/test_codecencodings_cn.py
Lib/test/test_codecs.py
Lib/test/test_complex_args.py [new file with mode: 0644]
Lib/test/test_contextlib.py
Lib/test/test_cookie.py
Lib/test/test_datetime.py
Lib/test/test_decimal.py
Lib/test/test_descr.py
Lib/test/test_dict.py
Lib/test/test_exceptions.py
Lib/test/test_fcntl.py
Lib/test/test_format.py
Lib/test/test_functools.py
Lib/test/test_future.py
Lib/test/test_genericpath.py [new file with mode: 0644]
Lib/test/test_global.py
Lib/test/test_grammar.py
Lib/test/test_gzip.py
Lib/test/test_httplib.py
Lib/test/test_imp.py
Lib/test/test_import.py
Lib/test/test_inspect.py
Lib/test/test_itertools.py
Lib/test/test_long.py
Lib/test/test_mailbox.py
Lib/test/test_math.py
Lib/test/test_mmap.py
Lib/test/test_modulefinder.py
Lib/test/test_multibytecodec.py
Lib/test/test_mutants.py
Lib/test/test_new.py
Lib/test/test_nis.py
Lib/test/test_opcodes.py
Lib/test/test_openpty.py
Lib/test/test_os.py
Lib/test/test_parser.py
Lib/test/test_peepholer.py
Lib/test/test_pep352.py
Lib/test/test_poll.py
Lib/test/test_pyclbr.py
Lib/test/test_scope.py
Lib/test/test_set.py
Lib/test/test_sgmllib.py
Lib/test/test_sha.py
Lib/test/test_structmembers.py [new file with mode: 0644]
Lib/test/test_subprocess.py
Lib/test/test_support.py
Lib/test/test_syntax.py
Lib/test/test_tarfile.py
Lib/test/test_tempfile.py
Lib/test/test_time.py
Lib/test/test_tokenize.py
Lib/test/test_traceback.py
Lib/test/test_types.py
Lib/test/test_unicode.py
Lib/test/test_xdrlib.py
Lib/test/test_xmlrpc.py
Lib/tokenize.py
Lib/traceback.py
Lib/urllib.py
Lib/urllib2.py
Lib/uu.py
Lib/webbrowser.py
Lib/xdrlib.py
Lib/xmlrpclib.py
Mac/BuildScript/build-installer.py
Mac/BuildScript/scripts/postflight.documentation
Mac/BuildScript/scripts/postflight.patch-profile
Mac/Makefile.in
Mac/PythonLauncher/FileSettings.m
Mac/README
Mac/Tools/fixapplepython23.py
Makefile.pre.in
Misc/ACKS
Misc/HISTORY
Misc/SpecialBuilds.txt
Misc/Vim/python.vim
Misc/Vim/vim_syntax.py
Misc/Vim/vimrc
Modules/_bsddb.c
Modules/_ctypes/_ctypes.c
Modules/_ctypes/_ctypes_test.c
Modules/_ctypes/callbacks.c
Modules/_ctypes/callproc.c
Modules/_ctypes/cfield.c
Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c
Modules/_ctypes/libffi/src/x86/sysv.S
Modules/_ctypes/libffi_msvc/ffi.c
Modules/_ctypes/libffi_msvc/ffi.h
Modules/_ctypes/libffi_msvc/ffitarget.h
Modules/_ctypes/libffi_msvc/win64.asm [new file with mode: 0644]
Modules/_ctypes/stgdict.c
Modules/_cursesmodule.c
Modules/_sre.c
Modules/_ssl.c
Modules/_testcapimodule.c
Modules/almodule.c
Modules/arraymodule.c
Modules/audioop.c
Modules/binascii.c
Modules/bz2module.c
Modules/cPickle.c
Modules/cStringIO.c
Modules/cjkcodecs/_codecs_cn.c
Modules/cjkcodecs/_codecs_iso2022.c
Modules/cjkcodecs/cjkcodecs.h
Modules/datetimemodule.c
Modules/dbmmodule.c
Modules/gcmodule.c
Modules/itertoolsmodule.c
Modules/linuxaudiodev.c
Modules/main.c
Modules/mathmodule.c
Modules/mmapmodule.c
Modules/ossaudiodev.c
Modules/parsermodule.c
Modules/posixmodule.c
Modules/readline.c
Modules/resource.c
Modules/socketmodule.c
Modules/socketmodule.h
Modules/threadmodule.c
Modules/unicodedata.c
Objects/abstract.c
Objects/classobject.c
Objects/dictobject.c
Objects/exceptions.c
Objects/fileobject.c
Objects/intobject.c
Objects/listobject.c
Objects/longobject.c
Objects/obmalloc.c
Objects/setobject.c
Objects/stringlib/partition.h
Objects/stringobject.c
Objects/tupleobject.c
Objects/typeobject.c
Objects/unicodeobject.c
PC/VC6/_bsddb.dsp
PC/VC6/_ctypes.dsp [new file with mode: 0644]
PC/VC6/_ctypes_test.dsp [moved from PC/VC6/zlib.dsp with 61% similarity]
PC/VC6/_elementtree.dsp [new file with mode: 0644]
PC/VC6/_sqlite3.dsp [new file with mode: 0644]
PC/VC6/_ssl.mak
PC/VC6/_tkinter.dsp
PC/VC6/bz2.dsp
PC/VC6/pcbuild.dsw
PC/VC6/pythoncore.dsp
PC/VC6/readme.txt
PC/_msi.c
PC/bdist_wininst/wininst-8.sln [new file with mode: 0644]
PC/bdist_wininst/wininst-8.vcproj [new file with mode: 0644]
PC/example_nt/example.vcproj
PC/pyconfig.h
PCbuild/_ctypes.vcproj
PCbuild/amd64_ml64.bat [new file with mode: 0644]
PCbuild/pythoncore.vcproj
PCbuild8/_ctypes.vcproj
PCbuild8/_ctypes_test.vcproj
PCbuild8/_elementtree.vcproj
PCbuild8/_msi.vcproj
PCbuild8/_sqlite3.vcproj
PCbuild8/make_buildinfo.c
PCbuild8/make_buildinfo.vcproj
PCbuild8/pcbuild.sln
PCbuild8/python.vcproj
PCbuild8/pythoncore.vcproj
PCbuild8/pythoncore_pgo.vcproj [deleted file]
PCbuild8/pythoncore_pgo_link.txt [deleted file]
PCbuild8/pythonw.vcproj
PCbuild8/readme.txt
PCbuild8/select.vcproj
PCbuild8/unicodedata.vcproj
PCbuild8/w9xpopen.vcproj
PCbuild8/winsound.vcproj
Parser/parser.c
Parser/parsetok.c
Parser/tokenizer.c
Python/ast.c
Python/bltinmodule.c
Python/ceval.c
Python/compile.c
Python/errors.c
Python/getargs.c
Python/import.c
Python/marshal.c
Python/modsupport.c
Python/mystrtoul.c
Python/peephole.c
Python/pystate.c
Python/pythonrun.c
Python/structmember.c
Python/sysmodule.c
README
Tools/msi/msi.py
Tools/msi/uuids.py
Tools/pybench/pybench.py
Tools/scripts/byext.py [changed mode: 0644->0755]
Tools/scripts/findnocoding.py
Tools/scripts/pysource.py
configure
configure.in
pyconfig.h.in
setup.py

index f3a5ffe2d5c13fb37067b05c28cb3988b467ee8e..32acbed9c98aed16e36a9c9c5f8af03e657c9418 100644 (file)
@@ -213,6 +213,9 @@ class Unparser:
 
     def _FunctionDef(self, t):
         self.write("\n")
+        for deco in t.decorators:
+            self.fill("@")
+            self.dispatch(deco)
         self.fill("def "+t.name + "(")
         self.dispatch(t.args)
         self.write(")")
index a435f11d5675cdd25fe4f0ed63fbd4568270cfe4..bda244a93974e3bc30fb9a2b934ba3cb20167c86 100644 (file)
@@ -122,7 +122,7 @@ EMACS=     emacs
 
 # The end of this should reflect the major/minor version numbers of
 # the release:
-WHATSNEW=whatsnew25
+WHATSNEW=whatsnew26
 
 # what's what
 MANDVIFILES=   paper-$(PAPER)/api.dvi paper-$(PAPER)/ext.dvi \
index 34221ad3af868741935d8032a129b0412757d7bd..33b04d48616118bb958b263c3f9419a2fa16011a 100644 (file)
@@ -602,15 +602,15 @@ parameter and are called with a non-string parameter.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyString_FromString}{const char *v}
-  Return a new string object with the value \var{v} on success, and
-  \NULL{} on failure.  The parameter \var{v} must not be \NULL{}; it
-  will not be checked.
+  Return a new string object with a copy of the string \var{v} as value
+  on success, and \NULL{} on failure.  The parameter \var{v} must not be
+  \NULL{}; it will not be checked.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyString_FromStringAndSize}{const char *v,
                                                          Py_ssize_t len}
-  Return a new string object with the value \var{v} and length
-  \var{len} on success, and \NULL{} on failure.  If \var{v} is
+  Return a new string object with a copy of the string \var{v} as value
+  and length \var{len} on success, and \NULL{} on failure.  If \var{v} is
   \NULL{}, the contents of the string are uninitialized.
 \end{cfuncdesc}
 
@@ -2879,10 +2879,10 @@ rather than explicitly calling \cfunction{PyGen_New}.
 Various date and time objects are supplied by the \module{datetime}
 module.  Before using any of these functions, the header file
 \file{datetime.h} must be included in your source (note that this is
-not include by \file{Python.h}), and macro \cfunction{PyDateTime_IMPORT()}
-must be invoked.  The macro arranges to put a pointer to a C structure
-in a static variable \code{PyDateTimeAPI}, which is used by the following
-macros.
+not included by \file{Python.h}), and the macro
+\cfunction{PyDateTime_IMPORT} must be invoked.  The macro puts a
+pointer to a C structure into a static variable, 
+\code{PyDateTimeAPI}, that is used by the following macros.
 
 Type-check macros:
 
@@ -3080,9 +3080,9 @@ either the abstract object protocol (including
 \cfunction{PyObject_IsTrue()}, \cfunction{PyObject_Print()}, and
 \cfunction{PyObject_GetIter()})
 or the abstract number protocol (including
-\cfunction{PyNumber_Add()}, \cfunction{PyNumber_Subtract()},
+\cfunction{PyNumber_And()}, \cfunction{PyNumber_Subtract()},
 \cfunction{PyNumber_Or()}, \cfunction{PyNumber_Xor()},
-\cfunction{PyNumber_InPlaceAdd()}, \cfunction{PyNumber_InPlaceSubtract()},
+\cfunction{PyNumber_InPlaceAnd()}, \cfunction{PyNumber_InPlaceSubtract()},
 \cfunction{PyNumber_InPlaceOr()}, and \cfunction{PyNumber_InPlaceXor()}).
 
 \begin{ctypedesc}{PySetObject}
index d7a490e52b2e217144e650cca218f57f5ef82fd0..46ade49d4e626175fc5ce069baed129b277711cc 100644 (file)
@@ -325,7 +325,7 @@ error indicator for each thread.
   default effect for \constant{SIGINT}\ttindex{SIGINT} is to raise the
   \withsubitem{(built-in exception)}{\ttindex{KeyboardInterrupt}}
   \exception{KeyboardInterrupt} exception.  If an exception is raised
-  the error indicator is set and the function returns \code{1};
+  the error indicator is set and the function returns \code{-1};
   otherwise the function returns \code{0}.  The error indicator may or
   may not be cleared if it was previously set.
 \end{cfuncdesc}
index e8ae96f393e65f1da69976212d4219d53e9e0f07..ba907637b4a1f7674db064f241c1c5ab2fd85a3c 100644 (file)
@@ -3607,6 +3607,11 @@ The class constructor takes a single argument \var{dist}, a
 
 % todo
 
+\section{\module{distutils.command.bdist_msi} --- Build a Microsoft Installer binary package}
+\declaremodule[distutils.command.bdistmsi]{standard}{distutils.command.bdist_msi}
+\modulesynopsis{Build a binary distribution as a Windows MSI file}
+
+% todo
 
 \section{\module{distutils.command.bdist_rpm} --- Build a binary distribution as a Redhat RPM and SRPM}
 \declaremodule[distutils.command.bdistrpm]{standard}{distutils.command.bdist_rpm}
index 0e2fd14b9ee5fc46d5f8b17a7d945649bb5c88f1..2af88b531566edb09921e7a16f6f894dc3efce73 100644 (file)
@@ -220,6 +220,8 @@ initspam(void)
     PyObject *m;
 
     m = Py_InitModule("spam", SpamMethods);
+    if (m == NULL)
+        return;
 
     SpamError = PyErr_NewException("spam.error", NULL, NULL);
     Py_INCREF(SpamError);
@@ -364,9 +366,9 @@ is inserted in the dictionary \code{sys.modules} under the key
 created module based upon the table (an array of \ctype{PyMethodDef}
 structures) that was passed as its second argument.
 \cfunction{Py_InitModule()} returns a pointer to the module object
-that it creates (which is unused here).  It aborts with a fatal error
-if the module could not be initialized satisfactorily, so the caller
-doesn't need to check for errors.
+that it creates (which is unused here).  It may abort with a fatal error
+for certain errors, or return \NULL{} if the module could not be
+initialized satisfactorily.
 
 When embedding Python, the \cfunction{initspam()} function is not
 called automatically unless there's an entry in the
@@ -1275,6 +1277,8 @@ initspam(void)
     PyObject *c_api_object;
 
     m = Py_InitModule("spam", SpamMethods);
+    if (m == NULL)
+        return;
 
     /* Initialize the C API pointer array */
     PySpam_API[PySpam_System_NUM] = (void *)PySpam_System;
@@ -1361,7 +1365,9 @@ initclient(void)
 {
     PyObject *m;
 
-    Py_InitModule("client", ClientMethods);
+    m = Py_InitModule("client", ClientMethods);
+    if (m == NULL)
+        return;
     if (import_spam() < 0)
         return;
     /* additional initialization can happen here */
diff --git a/Doc/howto/functional.rst b/Doc/howto/functional.rst
new file mode 100644 (file)
index 0000000..2e5a6a9
--- /dev/null
@@ -0,0 +1,1472 @@
+Functional Programming HOWTO
+================================
+
+**Version 0.30**
+
+(This is a first draft.  Please send comments/error
+reports/suggestions to amk@amk.ca.  This URL is probably not going to
+be the final location of the document, so be careful about linking to
+it -- you may want to add a disclaimer.)
+
+In this document, we'll take a tour of Python's features suitable for
+implementing programs in a functional style.  After an introduction to
+the concepts of functional programming, we'll look at language
+features such as iterators and generators and relevant library modules
+such as ``itertools`` and ``functools``.
+
+
+.. contents::
+
+Introduction
+----------------------
+
+This section explains the basic concept of functional programming; if
+you're just interested in learning about Python language features,
+skip to the next section.
+
+Programming languages support decomposing problems in several different 
+ways:
+
+* Most programming languages are **procedural**: 
+  programs are lists of instructions that tell the computer what to
+  do with the program's input.
+  C, Pascal, and even Unix shells are procedural languages.
+
+* In **declarative** languages, you write a specification that describes 
+  the problem to be solved, and the language implementation figures out 
+  how to perform the computation efficiently.  SQL is the declarative 
+  language you're most likely to be familiar with; a SQL query describes
+  the data set you want to retrieve, and the SQL engine decides whether to 
+  scan tables or use indexes, which subclauses should be performed first,
+  etc.
+
+* **Object-oriented** programs manipulate  collections of objects.
+  Objects have internal state and support methods that query or modify
+  this internal state in some way. Smalltalk and Java are
+  object-oriented languages.  C++ and Python are languages that
+  support object-oriented programming, but don't force the use 
+  of object-oriented features.
+
+* **Functional** programming decomposes a problem into a set of functions.
+  Ideally, functions only take inputs and produce outputs, and don't have any 
+  internal state that affects the output produced for a given input.
+  Well-known functional languages include the ML family (Standard ML,
+  OCaml, and other variants) and Haskell.
+
+The designers of some computer languages have chosen one approach to 
+programming that's emphasized.  This often makes it difficult to
+write programs that use a different approach.  Other languages are
+multi-paradigm languages that support several different approaches.  Lisp,
+C++, and Python are multi-paradigm; you can write programs or
+libraries that are largely procedural, object-oriented, or functional
+in all of these languages.  In a large program, different sections
+might be written using different approaches; the GUI might be object-oriented
+while the processing logic is procedural or functional, for example.
+
+In a functional program, input flows through a set of functions. Each
+function operates on its input and produces some output.  Functional
+style frowns upon functions with side effects that modify internal
+state or make other changes that aren't visible in the function's
+return value.  Functions that have no side effects at all are 
+called **purely functional**.
+Avoiding side effects means not using data structures
+that get updated as a program runs; every function's output 
+must only depend on its input.
+
+Some languages are very strict about purity and don't even have
+assignment statements such as ``a=3`` or ``c = a + b``, but it's
+difficult to avoid all side effects.  Printing to the screen or
+writing to a disk file are side effects, for example.  For example, in
+Python a ``print`` statement or a ``time.sleep(1)`` both return no
+useful value; they're only called for their side effects of sending
+some text to the screen or pausing execution for a second.
+
+Python programs written in functional style usually won't go to the
+extreme of avoiding all I/O or all assignments; instead, they'll
+provide a functional-appearing interface but will use non-functional
+features internally.  For example, the implementation of a function
+will still use assignments to local variables, but won't modify global
+variables or have other side effects.
+
+Functional programming can be considered the opposite of
+object-oriented programming.  Objects are little capsules containing
+some internal state along with a collection of method calls that let
+you modify this state, and programs consist of making the right set of
+state changes.  Functional programming wants to avoid state changes as
+much as possible and works with data flowing between functions.  In
+Python you might combine the two approaches by writing functions that
+take and return instances representing objects in your application
+(e-mail messages, transactions, etc.).
+
+Functional design may seem like an odd constraint to work under.  Why
+should you avoid objects and side effects?  There are theoretical and
+practical advantages to the functional style:
+
+* Formal provability.
+* Modularity.
+* Composability.
+* Ease of debugging and testing.
+
+Formal provability
+''''''''''''''''''''''
+
+A theoretical benefit is that it's easier to construct a mathematical proof
+that a functional program is correct.
+
+For a long time researchers have been interested in finding ways to
+mathematically prove programs correct.  This is different from testing
+a program on numerous inputs and concluding that its output is usually
+correct, or reading a program's source code and concluding that the
+code looks right; the goal is instead a rigorous proof that a program
+produces the right result for all possible inputs.
+
+The technique used to prove programs correct is to write down 
+**invariants**, properties of the input data and of the program's 
+variables that are always true.  For each line of code, you then show 
+that if invariants X and Y are true **before** the line is executed, 
+the slightly different invariants X' and Y' are true **after**
+the line is executed.  This continues until you reach the end of the
+program, at which point the invariants should match the desired 
+conditions on the program's output.
+
+Functional programming's avoidance of assignments arose because 
+assignments are difficult to handle with this technique; 
+assignments can break invariants that were true before the assignment
+without producing any new invariants that can be propagated onward.
+
+Unfortunately, proving programs correct is largely impractical and not
+relevant to Python software. Even trivial programs require proofs that
+are several pages long; the proof of correctness for a moderately
+complicated program would be enormous, and few or none of the programs
+you use daily (the Python interpreter, your XML parser, your web
+browser) could be proven correct.  Even if you wrote down or generated
+a proof, there would then be the question of verifying the proof;
+maybe there's an error in it, and you wrongly believe you've proved
+the program correct.
+
+Modularity
+''''''''''''''''''''''
+
+A more practical benefit of functional programming is that it forces
+you to break apart your problem into small pieces.  Programs are more
+modular as a result.  It's easier to specify and write a small
+function that does one thing than a large function that performs a
+complicated transformation.  Small functions are also easier to read
+and to check for errors.
+
+
+Ease of debugging and testing 
+''''''''''''''''''''''''''''''''''
+
+Testing and debugging a functional-style program is easier.
+
+Debugging is simplified because functions are generally small and
+clearly specified.  When a program doesn't work, each function is an
+interface point where you can check that the data are correct.  You
+can look at the intermediate inputs and outputs to quickly isolate the
+function that's responsible for a bug.
+
+Testing is easier because each function is a potential subject for a
+unit test.  Functions don't depend on system state that needs to be
+replicated before running a test; instead you only have to synthesize
+the right input and then check that the output matches expectations.
+
+
+
+Composability
+''''''''''''''''''''''
+
+As you work on a functional-style program, you'll write a number of
+functions with varying inputs and outputs.  Some of these functions
+will be unavoidably specialized to a particular application, but
+others will be useful in a wide variety of programs.  For example, a
+function that takes a directory path and returns all the XML files in
+the directory, or a function that takes a filename and returns its
+contents, can be applied to many different situations.
+
+Over time you'll form a personal library of utilities.  Often you'll
+assemble new programs by arranging existing functions in a new
+configuration and writing a few functions specialized for the current
+task.
+
+
+
+Iterators
+-----------------------
+
+I'll start by looking at a Python language feature that's an important
+foundation for writing functional-style programs: iterators.
+
+An iterator is an object representing a stream of data; this object
+returns the data one element at a time.  A Python iterator must
+support a method called ``next()`` that takes no arguments and always
+returns the next element of the stream.  If there are no more elements
+in the stream, ``next()`` must raise the ``StopIteration`` exception.
+Iterators don't have to be finite, though; it's perfectly reasonable
+to write an iterator that produces an infinite stream of data.
+
+The built-in ``iter()`` function takes an arbitrary object and tries
+to return an iterator that will return the object's contents or
+elements, raising ``TypeError`` if the object doesn't support
+iteration.  Several of Python's built-in data types support iteration,
+the most common being lists and dictionaries.  An object is called 
+an **iterable** object if you can get an iterator for it.
+
+You can experiment with the iteration interface manually::
+
+    >>> L = [1,2,3]
+    >>> it = iter(L)
+    >>> print it
+    <iterator object at 0x8116870>
+    >>> it.next()
+    1
+    >>> it.next()
+    2
+    >>> it.next()
+    3
+    >>> it.next()
+    Traceback (most recent call last):
+      File "<stdin>", line 1, in ?
+    StopIteration
+    >>>      
+
+Python expects iterable objects in several different contexts, the 
+most important being the ``for`` statement.  In the statement ``for X in Y``,
+Y must be an iterator or some object for which ``iter()`` can create 
+an iterator.  These two statements are equivalent::
+
+        for i in iter(obj):
+            print i
+
+        for i in obj:
+            print i
+
+Iterators can be materialized as lists or tuples by using the
+``list()`` or ``tuple()`` constructor functions::
+
+    >>> L = [1,2,3]
+    >>> iterator = iter(L)
+    >>> t = tuple(iterator)
+    >>> t
+    (1, 2, 3)
+
+Sequence unpacking also supports iterators: if you know an iterator 
+will return N elements, you can unpack them into an N-tuple::
+
+    >>> L = [1,2,3]
+    >>> iterator = iter(L)
+    >>> a,b,c = iterator
+    >>> a,b,c
+    (1, 2, 3)
+
+Built-in functions such as ``max()`` and ``min()`` can take a single
+iterator argument and will return the largest or smallest element.
+The ``"in"`` and ``"not in"`` operators also support iterators: ``X in
+iterator`` is true if X is found in the stream returned by the
+iterator.  You'll run into obvious problems if the iterator is
+infinite; ``max()``, ``min()``, and ``"not in"`` will never return, and
+if the element X never appears in the stream, the ``"in"`` operator
+won't return either.
+
+Note that you can only go forward in an iterator; there's no way to
+get the previous element, reset the iterator, or make a copy of it.
+Iterator objects can optionally provide these additional capabilities,
+but the iterator protocol only specifies the ``next()`` method.
+Functions may therefore consume all of the iterator's output, and if
+you need to do something different with the same stream, you'll have
+to create a new iterator.
+
+
+
+Data Types That Support Iterators
+'''''''''''''''''''''''''''''''''''
+
+We've already seen how lists and tuples support iterators.  In fact,
+any Python sequence type, such as strings, will automatically support
+creation of an iterator.
+
+Calling ``iter()`` on a dictionary returns an iterator that will loop
+over the dictionary's keys::
+
+    >>> m = {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6,
+    ...      'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}
+    >>> for key in m:
+    ...     print key, m[key]
+    Mar 3
+    Feb 2
+    Aug 8
+    Sep 9
+    May 5
+    Jun 6
+    Jul 7
+    Jan 1
+    Apr 4
+    Nov 11
+    Dec 12
+    Oct 10
+
+Note that the order is essentially random, because it's based on the
+hash ordering of the objects in the dictionary.
+
+Applying ``iter()`` to a dictionary always loops over the keys, but
+dictionaries have methods that return other iterators.  If you want to
+iterate over keys, values, or key/value pairs, you can explicitly call
+the ``iterkeys()``, ``itervalues()``, or ``iteritems()`` methods to
+get an appropriate iterator.
+
+The ``dict()`` constructor can accept an iterator that returns a
+finite stream of ``(key, value)`` tuples::
+
+    >>> L = [('Italy', 'Rome'), ('France', 'Paris'), ('US', 'Washington DC')]
+    >>> dict(iter(L))
+    {'Italy': 'Rome', 'US': 'Washington DC', 'France': 'Paris'}
+
+Files also support iteration by calling the ``readline()``
+method until there are no more lines in the file.  This means you can
+read each line of a file like this::
+
+    for line in file:
+        # do something for each line
+        ...
+
+Sets can take their contents from an iterable and let you iterate over
+the set's elements::
+
+    S = set((2, 3, 5, 7, 11, 13))
+    for i in S:
+        print i
+
+
+
+Generator expressions and list comprehensions
+----------------------------------------------------
+
+Two common operations on an iterator's output are 1) performing some
+operation for every element, 2) selecting a subset of elements that
+meet some condition.  For example, given a list of strings, you might
+want to strip off trailing whitespace from each line or extract all
+the strings containing a given substring.
+
+List comprehensions and generator expressions (short form: "listcomps"
+and "genexps") are a concise notation for such operations, borrowed
+from the functional programming language Haskell
+(http://www.haskell.org).  You can strip all the whitespace from a
+stream of strings with the following code::
+
+        line_list = ['  line 1\n', 'line 2  \n', ...]
+
+        # Generator expression -- returns iterator
+        stripped_iter = (line.strip() for line in line_list)
+
+        # List comprehension -- returns list
+        stripped_list = [line.strip() for line in line_list]
+
+You can select only certain elements by adding an ``"if"`` condition::
+
+        stripped_list = [line.strip() for line in line_list
+                         if line != ""]
+
+With a list comprehension, you get back a Python list;
+``stripped_list`` is a list containing the resulting lines, not an
+iterator.  Generator expressions return an iterator that computes the
+values as necessary, not needing to materialize all the values at
+once.  This means that list comprehensions aren't useful if you're
+working with iterators that return an infinite stream or a very large
+amount of data.  Generator expressions are preferable in these
+situations.
+
+Generator expressions are surrounded by parentheses ("()") and list
+comprehensions are surrounded by square brackets ("[]").  Generator
+expressions have the form::
+
+    ( expression for expr in sequence1 
+                 if condition1
+                 for expr2 in sequence2
+                 if condition2
+                 for expr3 in sequence3 ...
+                 if condition3
+                 for exprN in sequenceN
+                 if conditionN )
+
+Again, for a list comprehension only the outside brackets are
+different (square brackets instead of parentheses).
+
+The elements of the generated output will be the successive values of
+``expression``.  The ``if`` clauses are all optional; if present,
+``expression`` is only evaluated and added to the result when
+``condition`` is true.
+
+Generator expressions always have to be written inside parentheses,
+but the parentheses signalling a function call also count.  If you
+want to create an iterator that will be immediately passed to a
+function you can write::
+
+        obj_total = sum(obj.count for obj in list_all_objects())
+
+The ``for...in`` clauses contain the sequences to be iterated over.
+The sequences do not have to be the same length, because they are
+iterated over from left to right, **not** in parallel.  For each
+element in ``sequence1``, ``sequence2`` is looped over from the
+beginning.  ``sequence3``  is then looped over for each 
+resulting pair of elements from ``sequence1`` and ``sequence2``.
+
+To put it another way, a list comprehension or generator expression is
+equivalent to the following Python code::
+
+    for expr1 in sequence1:
+        if not (condition1):
+            continue   # Skip this element
+        for expr2 in sequence2:
+            if not (condition2):
+                continue    # Skip this element
+            ...
+            for exprN in sequenceN:
+                 if not (conditionN):
+                     continue   # Skip this element
+
+                 # Output the value of 
+                 # the expression.
+
+This means that when there are multiple ``for...in`` clauses but no
+``if`` clauses, the length of the resulting output will be equal to
+the product of the lengths of all the sequences.  If you have two
+lists of length 3, the output list is 9 elements long::
+
+    seq1 = 'abc'
+    seq2 = (1,2,3)
+    >>> [ (x,y) for x in seq1 for y in seq2]
+    [('a', 1), ('a', 2), ('a', 3), 
+     ('b', 1), ('b', 2), ('b', 3), 
+     ('c', 1), ('c', 2), ('c', 3)]
+
+To avoid introducing an ambiguity into Python's grammar, if
+``expression`` is creating a tuple, it must be surrounded with
+parentheses.  The first list comprehension below is a syntax error,
+while the second one is correct::
+
+    # Syntax error
+    [ x,y for x in seq1 for y in seq2]
+    # Correct
+    [ (x,y) for x in seq1 for y in seq2]
+
+
+Generators
+-----------------------
+
+Generators are a special class of functions that simplify the task of
+writing iterators.  Regular functions compute a value and return it,
+but generators return an iterator that returns a stream of values.
+
+You're doubtless familiar with how regular function calls work in
+Python or C.  When you call a function, it gets a private namespace
+where its local variables are created.  When the function reaches a
+``return`` statement, the local variables are destroyed and the
+value is returned to the caller.  A later call to the same function
+creates a new private namespace and a fresh set of local
+variables. But, what if the local variables weren't thrown away on
+exiting a function?  What if you could later resume the function where
+it left off?  This is what generators provide; they can be thought of
+as resumable functions.
+
+Here's the simplest example of a generator function::
+
+    def generate_ints(N):
+        for i in range(N):
+            yield i
+
+Any function containing a ``yield`` keyword is a generator function;
+this is detected by Python's bytecode compiler which compiles the
+function specially as a result.
+
+When you call a generator function, it doesn't return a single value;
+instead it returns a generator object that supports the iterator
+protocol.  On executing the ``yield`` expression, the generator
+outputs the value of ``i``, similar to a ``return``
+statement.  The big difference between ``yield`` and a
+``return`` statement is that on reaching a ``yield`` the
+generator's state of execution is suspended and local variables are
+preserved.  On the next call to the generator's ``.next()`` method,
+the function will resume executing.  
+
+Here's a sample usage of the ``generate_ints()`` generator::
+
+    >>> gen = generate_ints(3)
+    >>> gen
+    <generator object at 0x8117f90>
+    >>> gen.next()
+    0
+    >>> gen.next()
+    1
+    >>> gen.next()
+    2
+    >>> gen.next()
+    Traceback (most recent call last):
+      File "stdin", line 1, in ?
+      File "stdin", line 2, in generate_ints
+    StopIteration
+
+You could equally write ``for i in generate_ints(5)``, or
+``a,b,c = generate_ints(3)``.
+
+Inside a generator function, the ``return`` statement can only be used
+without a value, and signals the end of the procession of values;
+after executing a ``return`` the generator cannot return any further
+values.  ``return`` with a value, such as ``return 5``, is a syntax
+error inside a generator function.  The end of the generator's results
+can also be indicated by raising ``StopIteration`` manually, or by
+just letting the flow of execution fall off the bottom of the
+function.
+
+You could achieve the effect of generators manually by writing your
+own class and storing all the local variables of the generator as
+instance variables.  For example, returning a list of integers could
+be done by setting ``self.count`` to 0, and having the
+``next()`` method increment ``self.count`` and return it.
+However, for a moderately complicated generator, writing a
+corresponding class can be much messier.
+
+The test suite included with Python's library, ``test_generators.py``,
+contains a number of more interesting examples.  Here's one generator
+that implements an in-order traversal of a tree using generators
+recursively.
+
+::
+
+    # A recursive generator that generates Tree leaves in in-order.
+    def inorder(t):
+        if t:
+            for x in inorder(t.left):
+                yield x
+
+            yield t.label
+
+            for x in inorder(t.right):
+                yield x
+
+Two other examples in ``test_generators.py`` produce
+solutions for the N-Queens problem (placing N queens on an NxN
+chess board so that no queen threatens another) and the Knight's Tour
+(finding a route that takes a knight to every square of an NxN chessboard
+without visiting any square twice).
+
+
+
+Passing values into a generator
+''''''''''''''''''''''''''''''''''''''''''''''
+
+In Python 2.4 and earlier, generators only produced output.  Once a
+generator's code was invoked to create an iterator, there was no way to
+pass any new information into the function when its execution is
+resumed.  You could hack together this ability by making the
+generator look at a global variable or by passing in some mutable object
+that callers then modify, but these approaches are messy.
+
+In Python 2.5 there's a simple way to pass values into a generator.
+``yield`` became an expression, returning a value that can be assigned
+to a variable or otherwise operated on::
+
+    val = (yield i)
+
+I recommend that you **always** put parentheses around a ``yield``
+expression when you're doing something with the returned value, as in
+the above example.  The parentheses aren't always necessary, but it's
+easier to always add them instead of having to remember when they're
+needed.
+
+(PEP 342 explains the exact rules, which are that a
+``yield``-expression must always be parenthesized except when it
+occurs at the top-level expression on the right-hand side of an
+assignment.  This means you can write ``val = yield i`` but have to
+use parentheses when there's an operation, as in ``val = (yield i)
++ 12``.)
+
+Values are sent into a generator by calling its
+``send(value)`` method.  This method resumes the 
+generator's code and the ``yield`` expression returns the specified
+value.  If the regular ``next()`` method is called, the
+``yield`` returns ``None``.
+
+Here's a simple counter that increments by 1 and allows changing the
+value of the internal counter.
+
+::
+
+    def counter (maximum):
+        i = 0
+        while i < maximum:
+            val = (yield i)
+            # If value provided, change counter
+            if val is not None:
+                i = val
+            else:
+                i += 1
+
+And here's an example of changing the counter:
+
+    >>> it = counter(10)
+    >>> print it.next()
+    0
+    >>> print it.next()
+    1
+    >>> print it.send(8)
+    8
+    >>> print it.next()
+    9
+    >>> print it.next()
+    Traceback (most recent call last):
+      File ``t.py'', line 15, in ?
+        print it.next()
+    StopIteration
+
+Because ``yield`` will often be returning ``None``, you
+should always check for this case.  Don't just use its value in
+expressions unless you're sure that the ``send()`` method
+will be the only method used resume your generator function.
+
+In addition to ``send()``, there are two other new methods on
+generators:
+
+* ``throw(type, value=None, traceback=None)`` is used to raise an exception inside the
+  generator; the exception is raised by the ``yield`` expression
+  where the generator's execution is paused.
+
+* ``close()`` raises a ``GeneratorExit``
+  exception inside the generator to terminate the iteration.  
+  On receiving this
+  exception, the generator's code must either raise
+  ``GeneratorExit`` or ``StopIteration``; catching the 
+  exception and doing anything else is illegal and will trigger
+  a ``RuntimeError``.  ``close()`` will also be called by 
+  Python's garbage collector when the generator is garbage-collected.
+
+  If you need to run cleanup code when a ``GeneratorExit`` occurs,
+  I suggest using a ``try: ... finally:`` suite instead of 
+  catching ``GeneratorExit``.
+
+The cumulative effect of these changes is to turn generators from
+one-way producers of information into both producers and consumers.
+
+Generators also become **coroutines**, a more generalized form of
+subroutines.  Subroutines are entered at one point and exited at
+another point (the top of the function, and a ``return``
+statement), but coroutines can be entered, exited, and resumed at
+many different points (the ``yield`` statements).  
+
+
+Built-in functions
+----------------------------------------------
+
+Let's look in more detail at built-in functions often used with iterators.
+
+Two Python's built-in functions, ``map()`` and ``filter()``, are
+somewhat obsolete; they duplicate the features of list comprehensions
+but return actual lists instead of iterators.  
+
+``map(f, iterA, iterB, ...)`` returns a list containing ``f(iterA[0],
+iterB[0]), f(iterA[1], iterB[1]), f(iterA[2], iterB[2]), ...``.  
+
+::
+
+    def upper(s):
+        return s.upper()
+    map(upper, ['sentence', 'fragment']) =>
+      ['SENTENCE', 'FRAGMENT']
+
+    [upper(s) for s in ['sentence', 'fragment']] =>
+      ['SENTENCE', 'FRAGMENT']
+
+As shown above, you can achieve the same effect with a list
+comprehension.  The ``itertools.imap()`` function does the same thing
+but can handle infinite iterators; it'll be discussed later, in the section on 
+the ``itertools`` module.
+
+``filter(predicate, iter)`` returns a list 
+that contains all the sequence elements that meet a certain condition,
+and is similarly duplicated by list comprehensions.
+A **predicate** is a function that returns the truth value of
+some condition; for use with ``filter()``, the predicate must take a 
+single value.  
+
+::
+
+    def is_even(x):
+        return (x % 2) == 0
+
+    filter(is_even, range(10)) =>
+      [0, 2, 4, 6, 8]
+
+This can also be written as a list comprehension::
+
+    >>> [x for x in range(10) if is_even(x)]
+    [0, 2, 4, 6, 8]
+
+``filter()`` also has a counterpart in the ``itertools`` module,
+``itertools.ifilter()``, that returns an iterator and 
+can therefore handle infinite sequences just as ``itertools.imap()`` can.
+
+``reduce(func, iter, [initial_value])`` doesn't have a counterpart in
+the ``itertools`` module because it cumulatively performs an operation
+on all the iterable's elements and therefore can't be applied to
+infinite iterables.  ``func`` must be a function that takes two elements
+and returns a single value.  ``reduce()`` takes the first two elements
+A and B returned by the iterator and calculates ``func(A, B)``.  It
+then requests the third element, C, calculates ``func(func(A, B),
+C)``, combines this result with the fourth element returned, and
+continues until the iterable is exhausted.  If the iterable returns no
+values at all, a ``TypeError`` exception is raised.  If the initial
+value is supplied, it's used as a starting point and
+``func(initial_value, A)`` is the first calculation.
+
+::
+
+    import operator
+    reduce(operator.concat, ['A', 'BB', 'C']) =>
+      'ABBC'
+    reduce(operator.concat, []) =>
+      TypeError: reduce() of empty sequence with no initial value
+    reduce(operator.mul, [1,2,3], 1) =>
+      6
+    reduce(operator.mul, [], 1) =>
+      1
+
+If you use ``operator.add`` with ``reduce()``, you'll add up all the 
+elements of the iterable.  This case is so common that there's a special
+built-in called ``sum()`` to compute it::
+
+    reduce(operator.add, [1,2,3,4], 0) =>
+      10
+    sum([1,2,3,4]) =>
+      10
+    sum([]) =>
+      0
+
+For many uses of ``reduce()``, though, it can be clearer to just write
+the obvious ``for`` loop::
+
+    # Instead of:
+    product = reduce(operator.mul, [1,2,3], 1)
+
+    # You can write:
+    product = 1
+    for i in [1,2,3]:
+        product *= i
+
+
+``enumerate(iter)`` counts off the elements in the iterable, returning
+2-tuples containing the count and each element.
+
+::
+
+    enumerate(['subject', 'verb', 'object']) =>
+      (0, 'subject'), (1, 'verb'), (2, 'object')
+
+``enumerate()`` is often used when looping through a list 
+and recording the indexes at which certain conditions are met::
+
+    f = open('data.txt', 'r')
+    for i, line in enumerate(f):
+        if line.strip() == '':
+            print 'Blank line at line #%i' % i
+
+``sorted(iterable, [cmp=None], [key=None], [reverse=False)`` 
+collects all the elements of the iterable into a list, sorts 
+the list, and returns the sorted result.  The ``cmp``, ``key``, 
+and ``reverse`` arguments are passed through to the 
+constructed list's ``.sort()`` method.
+
+::
+
+    import random
+    # Generate 8 random numbers between [0, 10000)
+    rand_list = random.sample(range(10000), 8)
+    rand_list =>
+      [769, 7953, 9828, 6431, 8442, 9878, 6213, 2207]
+    sorted(rand_list) =>
+      [769, 2207, 6213, 6431, 7953, 8442, 9828, 9878]
+    sorted(rand_list, reverse=True) =>
+      [9878, 9828, 8442, 7953, 6431, 6213, 2207, 769]
+
+(For a more detailed discussion of sorting, see the Sorting mini-HOWTO
+in the Python wiki at http://wiki.python.org/moin/HowTo/Sorting.)
+
+The ``any(iter)`` and ``all(iter)`` built-ins look at 
+the truth values of an iterable's contents.  ``any()`` returns 
+True if any element in the iterable is a true value, and ``all()`` 
+returns True if all of the elements are true values::
+
+    any([0,1,0]) =>
+      True
+    any([0,0,0]) =>
+      False
+    any([1,1,1]) =>
+      True
+    all([0,1,0]) =>
+      False
+    all([0,0,0]) => 
+      False
+    all([1,1,1]) =>
+      True
+
+
+Small functions and the lambda statement
+----------------------------------------------
+
+When writing functional-style programs, you'll often need little
+functions that act as predicates or that combine elements in some way.
+
+If there's a Python built-in or a module function that's suitable, you
+don't need to define a new function at all::
+
+        stripped_lines = [line.strip() for line in lines]
+        existing_files = filter(os.path.exists, file_list)
+
+If the function you need doesn't exist, you need to write it.  One way
+to write small functions is to use the ``lambda`` statement.  ``lambda``
+takes a number of parameters and an expression combining these parameters,
+and creates a small function that returns the value of the expression::
+
+        lowercase = lambda x: x.lower()
+
+        print_assign = lambda name, value: name + '=' + str(value)
+
+        adder = lambda x, y: x+y
+
+An alternative is to just use the ``def`` statement and define a
+function in the usual way::
+
+        def lowercase(x):
+            return x.lower()
+
+        def print_assign(name, value):
+            return name + '=' + str(value)
+
+        def adder(x,y):
+            return x + y
+
+Which alternative is preferable?  That's a style question; my usual
+course is to avoid using ``lambda``.
+
+One reason for my preference is that ``lambda`` is quite limited in
+the functions it can define.  The result has to be computable as a
+single expression, which means you can't have multiway
+``if... elif... else`` comparisons or ``try... except`` statements.
+If you try to do too much in a ``lambda`` statement, you'll end up
+with an overly complicated expression that's hard to read.  Quick,
+what's the following code doing?
+
+::
+
+    total = reduce(lambda a, b: (0, a[1] + b[1]), items)[1]
+
+You can figure it out, but it takes time to disentangle the expression
+to figure out what's going on.  Using a short nested
+``def`` statements makes things a little bit better::
+
+    def combine (a, b):
+        return 0, a[1] + b[1]
+
+    total = reduce(combine, items)[1]
+
+But it would be best of all if I had simply used a ``for`` loop::
+
+     total = 0
+     for a, b in items:
+         total += b
+
+Or the ``sum()`` built-in and a generator expression::
+
+     total = sum(b for a,b in items)
+
+Many uses of ``reduce()`` are clearer when written as ``for`` loops.
+
+Fredrik Lundh once suggested the following set of rules for refactoring 
+uses of ``lambda``:
+
+1) Write a lambda function.
+2) Write a comment explaining what the heck that lambda does.
+3) Study the comment for a while, and think of a name that captures
+   the essence of the comment.
+4) Convert the lambda to a def statement, using that name.
+5) Remove the comment.
+
+I really like these rules, but you're free to disagree that this 
+lambda-free style is better.
+
+
+The itertools module
+-----------------------
+
+The ``itertools`` module contains a number of commonly-used iterators
+as well as functions for combining several iterators.  This section
+will introduce the module's contents by showing small examples.
+
+The module's functions fall into a few broad classes:
+
+* Functions that create a new iterator based on an existing iterator.
+* Functions for treating an iterator's elements as function arguments.
+* Functions for selecting portions of an iterator's output.
+* A function for grouping an iterator's output.
+
+Creating new iterators
+''''''''''''''''''''''
+
+``itertools.count(n)`` returns an infinite stream of
+integers, increasing by 1 each time.  You can optionally supply the
+starting number, which defaults to 0::
+
+        itertools.count() =>
+          0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...
+        itertools.count(10) =>
+          10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ...
+
+``itertools.cycle(iter)`` saves a copy of the contents of a provided
+iterable and returns a new iterator that returns its elements from
+first to last.  The new iterator will repeat these elements infinitely.
+
+::
+
+        itertools.cycle([1,2,3,4,5]) =>
+          1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
+
+``itertools.repeat(elem, [n])`` returns the provided element ``n``
+times, or returns the element endlessly if ``n`` is not provided.
+
+::
+
+    itertools.repeat('abc') =>
+      abc, abc, abc, abc, abc, abc, abc, abc, abc, abc, ...
+    itertools.repeat('abc', 5) =>
+      abc, abc, abc, abc, abc
+
+``itertools.chain(iterA, iterB, ...)`` takes an arbitrary number of
+iterables as input, and returns all the elements of the first
+iterator, then all the elements of the second, and so on, until all of
+the iterables have been exhausted.
+
+::
+
+    itertools.chain(['a', 'b', 'c'], (1, 2, 3)) =>
+      a, b, c, 1, 2, 3
+
+``itertools.izip(iterA, iterB, ...)`` takes one element from each iterable
+and returns them in a tuple::
+
+    itertools.izip(['a', 'b', 'c'], (1, 2, 3)) =>
+      ('a', 1), ('b', 2), ('c', 3)
+
+It's similiar to the built-in ``zip()`` function, but doesn't
+construct an in-memory list and exhaust all the input iterators before
+returning; instead tuples are constructed and returned only if they're
+requested.  (The technical term for this behaviour is 
+`lazy evaluation <http://en.wikipedia.org/wiki/Lazy_evaluation>`__.)
+
+This iterator is intended to be used with iterables that are all of
+the same length.  If the iterables are of different lengths, the
+resulting stream will be the same length as the shortest iterable.
+
+::
+
+    itertools.izip(['a', 'b'], (1, 2, 3)) =>
+      ('a', 1), ('b', 2)
+
+You should avoid doing this, though, because an element may be taken
+from the longer iterators and discarded.  This means you can't go on
+to use the iterators further because you risk skipping a discarded
+element.
+
+``itertools.islice(iter, [start], stop, [step])`` returns a stream
+that's a slice of the iterator.  With a single ``stop`` argument, 
+it will return the first ``stop``
+elements.  If you supply a starting index, you'll get ``stop-start``
+elements, and if you supply a value for ``step`, elements will be
+skipped accordingly.  Unlike Python's string and list slicing, you
+can't use negative values for ``start``, ``stop``, or ``step``.
+
+::
+
+    itertools.islice(range(10), 8) =>
+      0, 1, 2, 3, 4, 5, 6, 7
+    itertools.islice(range(10), 2, 8) =>
+      2, 3, 4, 5, 6, 7
+    itertools.islice(range(10), 2, 8, 2) =>
+      2, 4, 6
+
+``itertools.tee(iter, [n])`` replicates an iterator; it returns ``n``
+independent iterators that will all return the contents of the source
+iterator.  If you don't supply a value for ``n``, the default is 2.
+Replicating iterators requires saving some of the contents of the source
+iterator, so this can consume significant memory if the iterator is large
+and one of the new iterators is consumed more than the others.
+
+::
+
+        itertools.tee( itertools.count() ) =>
+           iterA, iterB
+
+        where iterA ->
+           0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...
+
+        and   iterB ->
+           0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...
+
+
+Calling functions on elements
+'''''''''''''''''''''''''''''
+
+Two functions are used for calling other functions on the contents of an
+iterable.
+
+``itertools.imap(f, iterA, iterB, ...)`` returns 
+a stream containing ``f(iterA[0], iterB[0]), f(iterA[1], iterB[1]),
+f(iterA[2], iterB[2]), ...``::
+
+    itertools.imap(operator.add, [5, 6, 5], [1, 2, 3]) =>
+      6, 8, 8
+
+The ``operator`` module contains a set of functions 
+corresponding to Python's operators.  Some examples are 
+``operator.add(a, b)`` (adds two values), 
+``operator.ne(a, b)`` (same as ``a!=b``),
+and 
+``operator.attrgetter('id')`` (returns a callable that
+fetches the ``"id"`` attribute).
+
+``itertools.starmap(func, iter)`` assumes that the iterable will 
+return a stream of tuples, and calls ``f()`` using these tuples as the 
+arguments::
+
+    itertools.starmap(os.path.join, 
+                      [('/usr', 'bin', 'java'), ('/bin', 'python'),
+                       ('/usr', 'bin', 'perl'),('/usr', 'bin', 'ruby')])
+    =>
+      /usr/bin/java, /bin/python, /usr/bin/perl, /usr/bin/ruby
+
+
+Selecting elements
+''''''''''''''''''
+
+Another group of functions chooses a subset of an iterator's elements
+based on a predicate.
+
+``itertools.ifilter(predicate, iter)`` returns all the elements for
+which the predicate returns true::
+
+    def is_even(x):
+        return (x % 2) == 0
+
+    itertools.ifilter(is_even, itertools.count()) =>
+      0, 2, 4, 6, 8, 10, 12, 14, ...
+
+``itertools.ifilterfalse(predicate, iter)`` is the opposite, 
+returning all elements for which the predicate returns false::
+
+    itertools.ifilterfalse(is_even, itertools.count()) =>
+      1, 3, 5, 7, 9, 11, 13, 15, ...
+
+``itertools.takewhile(predicate, iter)`` returns elements for as long
+as the predicate returns true.  Once the predicate returns false, 
+the iterator will signal the end of its results.
+
+::
+
+    def less_than_10(x):
+        return (x < 10)
+
+    itertools.takewhile(less_than_10, itertools.count()) =>
+      0, 1, 2, 3, 4, 5, 6, 7, 8, 9
+
+    itertools.takewhile(is_even, itertools.count()) =>
+      0
+
+``itertools.dropwhile(predicate, iter)`` discards elements while the
+predicate returns true, and then returns the rest of the iterable's
+results.
+
+::
+
+    itertools.dropwhile(less_than_10, itertools.count()) =>
+      10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ...
+
+    itertools.dropwhile(is_even, itertools.count()) =>
+      1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...
+
+
+Grouping elements
+'''''''''''''''''
+
+The last function I'll discuss, ``itertools.groupby(iter,
+key_func=None)``, is the most complicated.  ``key_func(elem)`` is a
+function that can compute a key value for each element returned by the
+iterable.  If you don't supply a key function, the key is simply each
+element itself.
+
+``groupby()`` collects all the consecutive elements from the
+underlying iterable that have the same key value, and returns a stream
+of 2-tuples containing a key value and an iterator for the elements
+with that key.  
+
+::
+
+    city_list = [('Decatur', 'AL'), ('Huntsville', 'AL'), ('Selma', 'AL'), 
+                 ('Anchorage', 'AK'), ('Nome', 'AK'),
+                 ('Flagstaff', 'AZ'), ('Phoenix', 'AZ'), ('Tucson', 'AZ'), 
+                 ...
+                ]
+
+    def get_state ((city, state)):
+        return state
+
+    itertools.groupby(city_list, get_state) =>
+      ('AL', iterator-1),
+      ('AK', iterator-2),
+      ('AZ', iterator-3), ...
+
+    where
+    iterator-1 =>
+      ('Decatur', 'AL'), ('Huntsville', 'AL'), ('Selma', 'AL')
+    iterator-2 => 
+      ('Anchorage', 'AK'), ('Nome', 'AK')
+    iterator-3 =>
+      ('Flagstaff', 'AZ'), ('Phoenix', 'AZ'), ('Tucson', 'AZ')
+
+``groupby()`` assumes that the underlying iterable's contents will
+already be sorted based on the key.  Note that the returned iterators
+also use the underlying iterable, so you have to consume the results
+of iterator-1 before requesting iterator-2 and its corresponding key.
+
+
+The functools module
+----------------------------------------------
+
+The ``functools`` module in Python 2.5 contains some higher-order
+functions.  A **higher-order function** takes one or more functions as
+input and returns a new function.  The most useful tool in this module
+is the ``partial()`` function.
+
+For programs written in a functional style, you'll sometimes want to
+construct variants of existing functions that have some of the
+parameters filled in.  Consider a Python function ``f(a, b, c)``; you
+may wish to create a new function ``g(b, c)`` that's equivalent to
+``f(1, b, c)``; you're filling in a value for one of ``f()``'s parameters.  
+This is called "partial function application".
+
+The constructor for ``partial`` takes the arguments ``(function, arg1,
+arg2, ... kwarg1=value1, kwarg2=value2)``.  The resulting object is
+callable, so you can just call it to invoke ``function`` with the
+filled-in arguments.
+
+Here's a small but realistic example::
+
+    import functools
+
+    def log (message, subsystem):
+        "Write the contents of 'message' to the specified subsystem."
+        print '%s: %s' % (subsystem, message)
+        ...
+
+    server_log = functools.partial(log, subsystem='server')
+    server_log('Unable to open socket')
+
+
+The operator module
+-------------------
+
+The ``operator`` module was mentioned earlier.  It contains a set of
+functions corresponding to Python's operators.  These functions 
+are often useful in functional-style code because they save you 
+from writing trivial functions that perform a single operation.
+
+Some of the functions in this module are:
+
+* Math operations: ``add()``, ``sub()``, ``mul()``, ``div()``, ``floordiv()``,
+  ``abs()``, ...
+* Logical operations: ``not_()``, ``truth()``.
+* Bitwise operations: ``and_()``, ``or_()``, ``invert()``.
+* Comparisons: ``eq()``, ``ne()``, ``lt()``, ``le()``, ``gt()``, and ``ge()``.
+* Object identity: ``is_()``, ``is_not()``.
+
+Consult `the operator module's documentation <http://docs.python.org/lib/module-operator.html>`__ for a complete
+list.
+
+
+
+The functional module
+---------------------
+
+Collin Winter's `functional module <http://oakwinter.com/code/functional/>`__ 
+provides a number of more
+advanced tools for functional programming. It also reimplements
+several Python built-ins, trying to make them more intuitive to those
+used to functional programming in other languages.
+
+This section contains an introduction to some of the most important
+functions in ``functional``; full documentation can be found at `the
+project's website <http://oakwinter.com/code/functional/documentation/>`__.
+
+``compose(outer, inner, unpack=False)``
+
+The ``compose()`` function implements function composition.
+In other words, it returns a wrapper around the ``outer`` and ``inner`` callables, such
+that the return value from ``inner`` is fed directly to ``outer``.  That is,
+
+::
+
+        >>> def add(a, b):
+        ...     return a + b
+        ...
+        >>> def double(a):
+        ...     return 2 * a
+        ...
+        >>> compose(double, add)(5, 6)
+        22
+
+is equivalent to
+
+::
+
+        >>> double(add(5, 6))
+        22
+                    
+The ``unpack`` keyword is provided to work around the fact that Python functions are not always
+`fully curried <http://en.wikipedia.org/wiki/Currying>`__.
+By default, it is expected that the ``inner`` function will return a single object and that the ``outer``
+function will take a single argument. Setting the ``unpack`` argument causes ``compose`` to expect a
+tuple from ``inner`` which will be expanded before being passed to ``outer``. Put simply,
+
+::
+
+        compose(f, g)(5, 6)
+                    
+is equivalent to::
+
+        f(g(5, 6))
+                    
+while
+
+::
+
+        compose(f, g, unpack=True)(5, 6)
+                    
+is equivalent to::
+
+        f(*g(5, 6))
+
+Even though ``compose()`` only accepts two functions, it's trivial to
+build up a version that will compose any number of functions. We'll
+use ``reduce()``, ``compose()`` and ``partial()`` (the last of which
+is provided by both ``functional`` and ``functools``).
+
+::
+
+        from functional import compose, partial
+        
+        multi_compose = partial(reduce, compose)
+        
+    
+We can also use ``map()``, ``compose()`` and ``partial()`` to craft a
+version of ``"".join(...)`` that converts its arguments to string::
+
+        from functional import compose, partial
+        
+        join = compose("".join, partial(map, str))
+
+
+``flip(func)``
+                    
+``flip()`` wraps the callable in ``func`` and  
+causes it to receive its non-keyword arguments in reverse order.
+
+::
+
+        >>> def triple(a, b, c):
+        ...     return (a, b, c)
+        ...
+        >>> triple(5, 6, 7)
+        (5, 6, 7)
+        >>>
+        >>> flipped_triple = flip(triple)
+        >>> flipped_triple(5, 6, 7)
+        (7, 6, 5)
+
+``foldl(func, start, iterable)``
+                    
+``foldl()`` takes a binary function, a starting value (usually some kind of 'zero'), and an iterable.
+The function is applied to the starting value and the first element of the list, then the result of
+that and the second element of the list, then the result of that and the third element of the list,
+and so on.
+
+This means that a call such as::
+
+        foldl(f, 0, [1, 2, 3])
+
+is equivalent to::
+
+        f(f(f(0, 1), 2), 3)
+
+    
+``foldl()`` is roughly equivalent to the following recursive function::
+
+        def foldl(func, start, seq):
+            if len(seq) == 0:
+                return start
+
+            return foldl(func, func(start, seq[0]), seq[1:])
+
+Speaking of equivalence, the above ``foldl`` call can be expressed in terms of the built-in ``reduce`` like
+so::
+
+        reduce(f, [1, 2, 3], 0)
+
+
+We can use ``foldl()``, ``operator.concat()`` and ``partial()`` to
+write a cleaner, more aesthetically-pleasing version of Python's
+``"".join(...)`` idiom::
+
+        from functional import foldl, partial
+        from operator import concat
+        
+        join = partial(foldl, concat, "")
+
+
+Revision History and Acknowledgements
+------------------------------------------------
+
+The author would like to thank the following people for offering
+suggestions, corrections and assistance with various drafts of this
+article: Ian Bicking, Nick Coghlan, Nick Efford, Raymond Hettinger,
+Jim Jewett, Mike Krell, Leandro Lameiro, Jussi Salmela, 
+Collin Winter, Blake Winton.
+
+Version 0.1: posted June 30 2006.
+
+Version 0.11: posted July 1 2006.  Typo fixes.
+
+Version 0.2: posted July 10 2006.  Merged genexp and listcomp
+sections into one.  Typo fixes.
+
+Version 0.21: Added more references suggested on the tutor mailing list.
+
+Version 0.30: Adds a section on the ``functional`` module written by
+Collin Winter; adds short section on the operator module; a few other
+edits.
+
+
+References
+--------------------
+
+General
+'''''''''''''''
+
+**Structure and Interpretation of Computer Programs**, by 
+Harold Abelson and Gerald Jay Sussman with Julie Sussman.
+Full text at http://mitpress.mit.edu/sicp/.
+In this classic textbook of computer science,  chapters 2 and 3 discuss the
+use of sequences and streams to organize the data flow inside a
+program.  The book uses Scheme for its examples, but many of the
+design approaches described in these chapters are applicable to
+functional-style Python code.
+
+http://www.defmacro.org/ramblings/fp.html: A general 
+introduction to functional programming that uses Java examples
+and has a lengthy historical introduction.
+
+http://en.wikipedia.org/wiki/Functional_programming:
+General Wikipedia entry describing functional programming.
+
+http://en.wikipedia.org/wiki/Coroutine:
+Entry for coroutines.
+
+http://en.wikipedia.org/wiki/Currying:
+Entry for the concept of currying.
+
+Python-specific
+'''''''''''''''''''''''''''
+
+http://gnosis.cx/TPiP/:
+The first chapter of David Mertz's book :title-reference:`Text Processing in Python` 
+discusses functional programming for text processing, in the section titled
+"Utilizing Higher-Order Functions in Text Processing".
+
+Mertz also wrote a 3-part series of articles on functional programming
+for IBM's DeveloperWorks site; see 
+`part 1 <http://www-128.ibm.com/developerworks/library/l-prog.html>`__,
+`part 2 <http://www-128.ibm.com/developerworks/library/l-prog2.html>`__, and
+`part 3 <http://www-128.ibm.com/developerworks/linux/library/l-prog3.html>`__,
+
+
+Python documentation
+'''''''''''''''''''''''''''
+
+http://docs.python.org/lib/module-itertools.html:
+Documentation ``for the itertools`` module.
+
+http://docs.python.org/lib/module-operator.html:
+Documentation ``for the operator`` module.
+
+http://www.python.org/dev/peps/pep-0289/:
+PEP 289: "Generator Expressions"
+
+http://www.python.org/dev/peps/pep-0342/
+PEP 342: "Coroutines via Enhanced Generators" describes the new generator
+features in Python 2.5.
+
+.. comment
+
+    Topics to place
+    -----------------------------
+
+    XXX os.walk()
+
+    XXX Need a large example.
+
+    But will an example add much?  I'll post a first draft and see
+    what the comments say.
+
+.. comment
+
+    Original outline:
+    Introduction
+            Idea of FP
+                    Programs built out of functions
+                    Functions are strictly input-output, no internal state
+            Opposed to OO programming, where objects have state
+
+            Why FP?
+                    Formal provability
+                            Assignment is difficult to reason about
+                            Not very relevant to Python
+                    Modularity
+                            Small functions that do one thing
+                    Debuggability:
+                            Easy to test due to lack of state
+                            Easy to verify output from intermediate steps
+                    Composability
+                            You assemble a toolbox of functions that can be mixed
+
+    Tackling a problem
+            Need a significant example
+
+    Iterators
+    Generators
+    The itertools module
+    List comprehensions
+    Small functions and the lambda statement
+    Built-in functions
+            map
+            filter
+            reduce
+
+.. comment
+
+    Handy little function for printing part of an iterator -- used
+    while writing this document.
+
+    import itertools
+    def print_iter(it):
+         slice = itertools.islice(it, 10)
+         for elem in slice[:-1]:
+             sys.stdout.write(str(elem))
+             sys.stdout.write(', ')
+        print elem[-1]
+
+
index f9867aecb08e0321a359a3222d65bed4f6a6cb67..3c63b3ab9ae8ae6d1e373081fc852b5a297758d4 100644 (file)
@@ -367,7 +367,7 @@ included with the Python distribution.  It allows you to enter REs and
 strings, and displays whether the RE matches or fails.
 \file{redemo.py} can be quite useful when trying to debug a
 complicated RE.  Phil Schwartz's
-\ulink{Kodos}{http://kodos.sourceforge.net} is also an interactive
+\ulink{Kodos}{http://www.phil-schwartz.com/kodos.spy} is also an interactive
 tool for developing and testing RE patterns.  This HOWTO will use the
 standard Python interpreter for its examples.
 
index df7c656291db36cc47e26cab1c38a98b1b7e0bb4..6db22ac5eb6035abe4cc2ea2b22acdea23f9c246 100644 (file)
@@ -632,7 +632,7 @@ Note that these two are \emph{not} equivalent if you supply a different
 installation base directory when you run the setup script.  For example,
 
 \begin{verbatim}
-python setup.py --install-base=/tmp
+python setup.py install --install-base=/tmp
 \end{verbatim}
 
 would install pure modules to \filevar{/tmp/python/lib} in the first
index 4425da70d5f4482fe2225cdf791ffbfdb3bd957c..206783911d597cb117ad00af8f848d8a3d6fad67 100644 (file)
@@ -198,9 +198,11 @@ Most of these are nearly identical to their socket partners.
 \end{methoddesc}
 
 \begin{methoddesc}{bind}{address}
-  Bind the socket to \var{address}.  The socket must not already
-  be bound.  (The format of \var{address} depends on the address
-  family --- see above.)
+  Bind the socket to \var{address}.  The socket must not already be
+  bound.  (The format of \var{address} depends on the address family
+  --- see above.)  To mark the socket as re-usable (setting the
+  \constant{SO_REUSEADDR} option), call the \class{dispatcher}
+  object's \method{set_reuse_addr()} method.
 \end{methoddesc}
 
 \begin{methoddesc}{accept}{}
index 33dc7ddf8cdb7daaecf8087334fe8c22223eb79f..9798b5750744b1e80abd87b13b899b9f6d82b6ab 100644 (file)
@@ -44,6 +44,10 @@ If an exception is raised during execution of the exit handlers, a
 traceback is printed (unless \exception{SystemExit} is raised) and the
 exception information is saved.  After all exit handlers have had a
 chance to run the last exception to be raised is re-raised.
+
+\versionchanged[This function now returns \var{func} which makes it
+                possible to use it as a decorator without binding the
+               original name to \code{None}]{2.6}
 \end{funcdesc}
 
 
@@ -92,3 +96,15 @@ atexit.register(goodbye, 'Donny', 'nice')
 # or:
 atexit.register(goodbye, adjective='nice', name='Donny')
 \end{verbatim}
+
+Usage as a decorator:
+
+\begin{verbatim}
+import atexit
+
+@atexit.register
+def goodbye():
+    print "You are now leaving the Python sector."
+\end{verbatim}
+
+This obviously only works with functions that don't take arguments.
index 0039c8425018a5acdbbebde0bdade33253d93321..d7eccbdb19c0a0c2e1e49394aef58e325820b789 100644 (file)
@@ -21,7 +21,7 @@ three alphabets.  The legacy interface provides for encoding and
 decoding to and from file-like objects as well as strings, but only
 using the Base64 standard alphabet.
 
-The modern interface provides:
+The modern interface, which was introduced in Python 2.4, provides:
 
 \begin{funcdesc}{b64encode}{s\optional{, altchars}}
 Encode a string use Base64.
index 44b916868905b6c519a900845fabcce19452c216..85ea824db08c69148718fd9d3a0394628c272159 100644 (file)
@@ -19,21 +19,23 @@ The \module{bsddb} module requires a Berkeley DB library version from
 3.3 thru 4.4.
 
 \begin{seealso}
-  \seeurl{http://pybsddb.sourceforge.net/}{The website with documentation
-  for the \module{bsddb.db} python Berkeley DB interface that closely mirrors
-  the Sleepycat object oriented interface provided in Berkeley DB 3 and 4.}
-  \seeurl{http://www.sleepycat.com/}{Sleepycat Software produces the
-  Berkeley DB library.}
+  \seeurl{http://pybsddb.sourceforge.net/}
+         {The website with documentation for the \module{bsddb.db}
+          Python Berkeley DB interface that closely mirrors the object
+          oriented interface provided in Berkeley DB 3 and 4.}
+
+  \seeurl{http://www.oracle.com/database/berkeley-db/}
+         {The Berkeley DB library.}
 \end{seealso}
 
 A more modern DB, DBEnv and DBSequence object interface is available in the
-\module{bsddb.db} module which closely matches the Sleepycat Berkeley DB C API
+\module{bsddb.db} module which closely matches the Berkeley DB C API
 documented at the above URLs.  Additional features provided by the
 \module{bsddb.db} API include fine tuning, transactions, logging, and
 multiprocess concurrent database access.
 
 The following is a description of the legacy \module{bsddb} interface
-compatible with the old python bsddb module.  Starting in Python 2.5 this
+compatible with the old Python bsddb module.  Starting in Python 2.5 this
 interface should be safe for multithreaded access.  The \module{bsddb.db}
 API is recommended for threading users as it provides better control.
 
index 42a362eac2267334a6ac83ffa4475ee098fcba54..2c08ec424ca2a556be52c860c8c2177f45a1c60e 100644 (file)
@@ -48,11 +48,20 @@ Default values can be specified by passing them into the
 may be passed into the \method{get()} method which will override all
 others.
 
-\begin{classdesc}{RawConfigParser}{\optional{defaults}}
+Sections are normally stored in a builtin dictionary. An alternative
+dictionary type can be passed to the \class{ConfigParser} constructor.
+For example, if a dictionary type is passed that sorts its keys,
+the sections will be sorted on write-back, as will be the keys within
+each section.
+
+\begin{classdesc}{RawConfigParser}{\optional{defaults\optional{, dict_type}}}
 The basic configuration object.  When \var{defaults} is given, it is
-initialized into the dictionary of intrinsic defaults.  This class
-does not support the magical interpolation behavior.
+initialized into the dictionary of intrinsic defaults.  When \var{dict_type}
+is given, it will be used to create the dictionary objects for the list
+of sections, for the options within a section, and for the default values.
+This class does not support the magical interpolation behavior.
 \versionadded{2.3}
+\versionchanged[\var{dict_type} was added]{2.6}
 \end{classdesc}
 
 \begin{classdesc}{ConfigParser}{\optional{defaults}}
index 74e7023a791a1ab5463c5d148040a574d03c2203..53b8a2070755fe3ea44eec4acaec08bf7aac3072 100644 (file)
@@ -12,6 +12,11 @@ The \module{commands} module contains wrapper functions for
 return any output generated by the command and, optionally, the exit
 status.
 
+The \module{subprocess} module provides more powerful facilities for
+spawning new processes and retrieving their results.  Using the
+\module{subprocess} module is preferable to using the \module{commands}
+module.
+
 The \module{commands} module defines the following functions:
 
 
@@ -51,3 +56,7 @@ Example:
 >>> commands.getstatus('/bin/ls')
 '-rwxr-xr-x  1 root        13352 Oct 14  1994 /bin/ls'
 \end{verbatim}
+
+\begin{seealso}
+  \seemodule{subprocess}{Module for spawning and managing subprocesses.}
+\end{seealso}
index 8e10ccf06c8471825f1bc9ff1fe59dd2b07f7767..e965e316f37663bd3ca2a5da7cb72cb67462bea6 100644 (file)
@@ -64,9 +64,9 @@ dialect.  It may be an instance of a subclass of the \class{Dialect}
 class or one of the strings returned by the \function{list_dialects}
 function.  The other optional {}\var{fmtparam} keyword arguments can be
 given to override individual formatting parameters in the current
-dialect.  For more information about the dialect and formatting
+dialect.  For full details about the dialect and formatting
 parameters, see section~\ref{csv-fmt-params}, ``Dialects and Formatting
-Parameters'' for details of these parameters.
+Parameters''.
 
 All data read are returned as strings.  No automatic data type
 conversion is performed.
@@ -96,10 +96,10 @@ parameters specific to a particular CSV dialect.  It may be an instance
 of a subclass of the \class{Dialect} class or one of the strings
 returned by the \function{list_dialects} function.  The other optional
 {}\var{fmtparam} keyword arguments can be given to override individual
-formatting parameters in the current dialect.  For more information
+formatting parameters in the current dialect.  For full details
 about the dialect and formatting parameters, see
-section~\ref{csv-fmt-params}, ``Dialects and Formatting Parameters'' for
-details of these parameters.  To make it as easy as possible to
+section~\ref{csv-fmt-params}, ``Dialects and Formatting Parameters''.
+To make it as easy as possible to
 interface with modules which implement the DB API, the value
 \constant{None} is written as the empty string.  While this isn't a
 reversible transformation, it makes it easier to dump SQL NULL data values
@@ -113,9 +113,8 @@ Associate \var{dialect} with \var{name}.  \var{name} must be a string
 or Unicode object. The dialect can be specified either by passing a
 sub-class of \class{Dialect}, or by \var{fmtparam} keyword arguments,
 or both, with keyword arguments overriding parameters of the dialect.
-For more information about the dialect and formatting parameters, see
-section~\ref{csv-fmt-params}, ``Dialects and Formatting Parameters''
-for details of these parameters.
+For full details about the dialect and formatting parameters, see
+section~\ref{csv-fmt-params}, ``Dialects and Formatting Parameters''.
 \end{funcdesc}
 
 \begin{funcdesc}{unregister_dialect}{name}
@@ -197,12 +196,13 @@ attributes, which are used to define the parameters for a specific
 
 \begin{classdesc}{excel}{}
 The \class{excel} class defines the usual properties of an Excel-generated
-CSV file.
+CSV file.  It is registered with the dialect name \code{'excel'}.
 \end{classdesc}
 
 \begin{classdesc}{excel_tab}{}
 The \class{excel_tab} class defines the usual properties of an
-Excel-generated TAB-delimited file.
+Excel-generated TAB-delimited file.  It is registered with the dialect name
+\code{'excel-tab'}.
 \end{classdesc}
 
 \begin{classdesc}{Sniffer}{}
@@ -345,6 +345,7 @@ A read-only description of the dialect in use by the parser.
 \begin{memberdesc}[csv reader]{line_num}
  The number of lines read from the source iterator. This is not the same
  as the number of records returned, as records can span multiple lines.
+ \versionadded{2.5}
 \end{memberdesc}
 
 
index b2e488a807e7b5ad980c20b2a7e39dd1a9446bb0..c0e23101baba9c3d424584c05a245b08fe704619 100755 (executable)
@@ -1821,7 +1821,7 @@ Here is the wrapping with \code{ctypes}:
 \begin{quote}
 \begin{verbatim}>>> from ctypes import c_int, WINFUNCTYPE, windll
 >>> from ctypes.wintypes import HWND, LPCSTR, UINT
->>> prototype = WINFUNCTYPE(c_int, HWND, LPCSTR, LPCSTR, c_uint)
+>>> prototype = WINFUNCTYPE(c_int, HWND, LPCSTR, LPCSTR, UINT)
 >>> paramflags = (1, "hwnd", 0), (1, "text", "Hi"), (1, "caption", None), (1, "flags", 0)
 >>> MessageBox = prototype(("MessageBoxA", windll.user32), paramflags)
 >>>\end{verbatim}
@@ -1848,7 +1848,7 @@ GetWindowRect(
 
 Here is the wrapping with \code{ctypes}:
 \begin{quote}
-\begin{verbatim}>>> from ctypes import POINTER, WINFUNCTYPE, windll
+\begin{verbatim}>>> from ctypes import POINTER, WINFUNCTYPE, windll, WinError
 >>> from ctypes.wintypes import BOOL, HWND, RECT
 >>> prototype = WINFUNCTYPE(BOOL, HWND, POINTER(RECT))
 >>> paramflags = (1, "hwnd"), (2, "lprect")
@@ -2299,12 +2299,10 @@ Windows only: Represents a \class{HRESULT} value, which contains success
 or error information for a function or method call.
 \end{classdesc*}
 
-\code{py{\_}object} : classdesc*
-\begin{quote}
-
-Represents the C \code{PyObject *} datatype.  Calling this with an
-without an argument creates a \code{NULL} \code{PyObject *} pointer.
-\end{quote}
+\begin{classdesc*}{py_object}
+Represents the C \code{PyObject *} datatype.  Calling this without an
+argument creates a \code{NULL} \code{PyObject *} pointer.
+\end{classdesc*}
 
 The \code{ctypes.wintypes} module provides quite some other Windows
 specific data types, for example \code{HWND}, \code{WPARAM}, or \code{DWORD}.
@@ -2440,5 +2438,6 @@ attributes for names not present in \member{{\_}fields{\_}}.
 
 \subsubsection{Arrays and pointers\label{ctypes-arrays-pointers}}
 
-XXX
+Not yet written - please see section~\ref{ctypes-pointers}, pointers and
+section~\ref{ctypes-arrays}, arrays in the tutorial.
 
index cae5d60dc996f5ecd3dc722e7c682b7f300a7da9..0d2b5bb643ffae851003173dbf1c9b97668bd7f2 100644 (file)
@@ -1421,19 +1421,21 @@ The exact range of years for which \method{strftime()} works also
 varies across platforms.  Regardless of platform, years before 1900
 cannot be used.
 
-\subsection{Examples}
-
-\subsubsection{Creating Datetime Objects from Formatted Strings}
-
-The \class{datetime} class does not directly support parsing formatted time
-strings.  You can use \function{time.strptime} to do the parsing and create
-a \class{datetime} object from the tuple it returns:
-
-\begin{verbatim}
->>> s = "2005-12-06T12:13:14"
->>> from datetime import datetime
->>> from time import strptime
->>> datetime(*strptime(s, "%Y-%m-%dT%H:%M:%S")[0:6])
-datetime.datetime(2005, 12, 6, 12, 13, 14)
-\end{verbatim}
-
+%%% This example is obsolete, since strptime is now supported by datetime.
+% 
+% \subsection{Examples}
+% 
+% \subsubsection{Creating Datetime Objects from Formatted Strings}
+% 
+% The \class{datetime} class does not directly support parsing formatted time
+% strings.  You can use \function{time.strptime} to do the parsing and create
+% a \class{datetime} object from the tuple it returns:
+% 
+% \begin{verbatim}
+% >>> s = "2005-12-06T12:13:14"
+% >>> from datetime import datetime
+% >>> from time import strptime
+% >>> datetime(*strptime(s, "%Y-%m-%dT%H:%M:%S")[0:6])
+% datetime.datetime(2005, 12, 6, 12, 13, 14)
+% \end{verbatim}
+% 
index a0c7bde553c514157888a8eb7046de7a45808813..127eb1d47634b9efca3661e93482cbba6fd1b12f 100644 (file)
@@ -435,36 +435,37 @@ Each thread has its own current context which is accessed or changed using
 the \function{getcontext()} and \function{setcontext()} functions:
 
 \begin{funcdesc}{getcontext}{}
-  Return the current context for the active thread.                                          
+  Return the current context for the active thread.
 \end{funcdesc}            
 
 \begin{funcdesc}{setcontext}{c}
-  Set the current context for the active thread to \var{c}.                                          
+  Set the current context for the active thread to \var{c}.
 \end{funcdesc}  
 
 Beginning with Python 2.5, you can also use the \keyword{with} statement
-to temporarily change the active context. For example the following code
-increases the current decimal precision by 2 places, performs a
-calculation, and then automatically restores the previous context:
-
+and the \function{localcontext()} function to temporarily change the
+active context.
+
+\begin{funcdesc}{localcontext}{\optional{c}}
+  Return a context manager that will set the current context for
+  the active thread to a copy of \var{c} on entry to the with-statement
+  and restore the previous context when exiting the with-statement. If
+  no context is specified, a copy of the current context is used.
+  \versionadded{2.5}
+
+  For example, the following code sets the current decimal precision
+  to 42 places, performs a calculation, and then automatically restores
+  the previous context:
 \begin{verbatim}
-from __future__ import with_statement
-import decimal
+    from __future__ import with_statement
+    from decimal import localcontext
 
-with decimal.getcontext() as ctx:
-    ctx.prec += 2   # add 2 more digits of precision
-    calculate_something()
+    with localcontext() as ctx:
+        ctx.prec = 42   # Perform a high precision calculation
+        s = calculate_something()
+    s = +s  # Round the final result back to the default precision
 \end{verbatim}
-
-The context that's active in the body of the \keyword{with} statement is
-a \emph{copy} of the context you provided to the \keyword{with}
-statement, so modifying its attributes doesn't affect anything except
-that temporary copy.
-
-You can use any decimal context in a \keyword{with} statement, but if
-you just want to make a temporary change to some aspect of the current
-context, it's easiest to just use \function{getcontext()} as shown
-above.
+\end{funcdesc}
 
 New contexts can also be created using the \class{Context} constructor
 described below. In addition, the module provides three pre-made
index 1f29887e741972e402443c07a9a163a9393627e6..ffa19435c10cea63886a9c2a00b00b0c315bc8bc 100644 (file)
@@ -1,45 +1,34 @@
-\section{\module{elementtree} --- The xml.etree.ElementTree Module}
-\declaremodule{standard}{elementtree}
+\section{\module{xml.etree.ElementTree} --- The ElementTree XML API}
+\declaremodule{standard}{xml.etree.ElementTree}
 \moduleauthor{Fredrik Lundh}{fredrik@pythonware.com}
-\modulesynopsis{This module provides implementations
-of the Element and ElementTree types, plus support classes.
+\modulesynopsis{Implementation of the ElementTree API.}
 
-A C version of this API is available as xml.etree.cElementTree.}
 \versionadded{2.5}
 
-
-\subsection{Overview\label{elementtree-overview}}
-
 The Element type is a flexible container object, designed to store
 hierarchical data structures in memory. The type can be described as a
 cross between a list and a dictionary.
 
 Each element has a number of properties associated with it:
-\begin{itemize}
-\item {} 
-a tag which is a string identifying what kind of data
-this element represents (the element type, in other words).
-
-\item {} 
-a number of attributes, stored in a Python dictionary.
-
-\item {} 
-a text string.
-
-\item {} 
-an optional tail string.
-
-\item {} 
-a number of child elements, stored in a Python sequence
 
+\begin{itemize}
+  \item a tag which is a string identifying what kind of data
+        this element represents (the element type, in other words).
+  \item a number of attributes, stored in a Python dictionary.
+  \item a text string.
+  \item an optional tail string.
+  \item a number of child elements, stored in a Python sequence
 \end{itemize}
 
 To create an element instance, use the Element or SubElement factory
 functions.
 
-The ElementTree class can be used to wrap an element
+The \class{ElementTree} class can be used to wrap an element
 structure, and convert it from and to XML.
 
+A C implementation of this API is available as
+\module{xml.etree.cElementTree}.
+
 
 \subsection{Functions\label{elementtree-functions}}
 
index 814e2265753d517fbf83ba176ae86adaa88ad65a..cca23147617c005f3cacc9cbaa957e80b4217d22 100644 (file)
@@ -7,6 +7,11 @@
 \sectionauthor{Lee Busby}{busby1@llnl.gov}
 \modulesynopsis{Provide control for floating point exception handling.}
 
+\note{The \module{fpectl} module is not built by default, and its usage
+      is discouraged and may be dangerous except in the hands of
+      experts.  See also the section \ref{fpectl-limitations} on
+      limitations for more details.}
+
 Most computers carry out floating point operations\index{IEEE-754}
 in conformance with the so-called IEEE-754 standard.
 On any real computer,
@@ -95,7 +100,7 @@ FloatingPointError: in math_1
 \end{verbatim}
 
 
-\subsection{Limitations and other considerations}
+\subsection{Limitations and other considerations \label{fpectl-limitations}}
 
 Setting up a given processor to trap IEEE-754 floating point
 errors currently requires custom code on a per-architecture basis.
index 4dde06587c1adb0371925789e7f207d30cbc48e8..a8c06bb18c1667b21296ceaac8d65665a1b85ae9 100644 (file)
@@ -808,7 +808,7 @@ class C:
 
 \begin{verbatim}
 class C(object):
-    def __init__(self): self.__x = None
+    def __init__(self): self._x = None
     def getx(self): return self._x
     def setx(self, value): self._x = value
     def delx(self): del self._x
index e8b16a31e20fd3b37772fd7a4ba77bdc3157fb0e..b38fcd8dff97f598b10051f9dc48e8e16913b670 100644 (file)
@@ -126,8 +126,9 @@ import getopt, sys
 def main():
     try:
         opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
-    except getopt.GetoptError:
+    except getopt.GetoptError, err:
         # print help information and exit:
+        print str(err) # will print something like "option -a not recognized"
         usage()
         sys.exit(2)
     output = None
@@ -135,11 +136,13 @@ def main():
     for o, a in opts:
         if o == "-v":
             verbose = True
-        if o in ("-h", "--help"):
+        elif o in ("-h", "--help"):
             usage()
             sys.exit()
-        if o in ("-o", "--output"):
+        elif o in ("-o", "--output"):
             output = a
+        else:
+            assert False, "unhandled option"
     # ...
 
 if __name__ == "__main__":
index 62e3fc4829ffcd0a64a787a8cb95ff99b0088296..17f5179309f9312f8e07bb15fd997f7ac115a966 100644 (file)
@@ -86,8 +86,8 @@ arguments: \code{m.update(a); m.update(b)} is equivalent to
 
 \begin{methoddesc}[hash]{digest}{}
 Return the digest of the strings passed to the \method{update()}
-method so far.  This is a 16-byte string which may contain
-non-\ASCII{} characters, including null bytes.
+method so far.  This is a string of \member{digest_size} bytes which may
+contain non-\ASCII{} characters, including null bytes.
 \end{methoddesc}
 
 \begin{methoddesc}[hash]{hexdigest}{}
index eaf7051b417b12bf4be0bff001d724cae25c108a..5f3d8c598af7513df0192240a8cedfea0fb16167 100644 (file)
@@ -76,14 +76,14 @@ Example of use:
 >>> for item in data:
 ...     heappush(heap, item)
 ...
->>> sorted = []
+>>> ordered = []
 >>> while heap:
-...     sorted.append(heappop(heap))
+...     ordered.append(heappop(heap))
 ...
->>> print sorted
+>>> print ordered
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 >>> data.sort()
->>> print data == sorted
+>>> print data == ordered
 True
 >>>
 \end{verbatim}
index 049f6c4804452f65d3a150d541728db15a6efe90..557ee3d0c25b44828da1746b4586b93df4f10c0f 100644 (file)
@@ -304,9 +304,14 @@ Example: \code{httplib.responses[httplib.NOT_FOUND]} is \code{'Not Found'}.
 This will send a request to the server using the HTTP request method
 \var{method} and the selector \var{url}.  If the \var{body} argument is
 present, it should be a string of data to send after the headers are finished.
+Alternatively, it may be an open file object, in which case the
+contents of the file is sent; this file object should support
+\code{fileno()} and \code{read()} methods.
 The header Content-Length is automatically set to the correct value.
 The \var{headers} argument should be a mapping of extra HTTP headers to send
 with the request.
+
+\versionchanged[\var{body} can be a file object]{2.6}
 \end{methoddesc}
 
 \begin{methoddesc}{getresponse}{}
index 598d3518274b1987dd2625876ec627d4b456825a..537930965081f00da1690f8ae64f141ac66591ad 100644 (file)
@@ -161,10 +161,10 @@ Unused.
 
 \begin{funcdesc}{init_builtin}{name}
 Initialize the built-in module called \var{name} and return its module
-object.  If the module was already initialized, it will be initialized
-\emph{again}.  A few modules cannot be initialized twice --- attempting
-to initialize these again will raise an \exception{ImportError}
-exception.  If there is no
+object along with storing it in \code{sys.modules}.  If the module was already
+initialized, it will be initialized \emph{again}.  Re-initialization involves
+the copying of the built-in module's \code{__dict__} from the cached
+module over the module's entry in \code{sys.modules}.  If there is no
 built-in module called \var{name}, \code{None} is returned.
 \end{funcdesc}
 
@@ -208,14 +208,15 @@ user-defined class emulating a file.
 \begin{funcdesc}{load_dynamic}{name, pathname\optional{, file}}
 Load and initialize a module implemented as a dynamically loadable
 shared library and return its module object.  If the module was
-already initialized, it will be initialized \emph{again}.  Some modules
-don't like that and may raise an exception.  The \var{pathname}
-argument must point to the shared library.  The \var{name} argument is
-used to construct the name of the initialization function: an external
-C function called \samp{init\var{name}()} in the shared library is
-called.  The optional \var{file} argument is ignored.  (Note: using
-shared libraries is highly system dependent, and not all systems
-support it.)
+already initialized, it will be initialized \emph{again}.
+Re-initialization involves copying the \code{__dict__} attribute of the cached
+instance of the module over the value used in the module cached in
+\code{sys.modules}.  The \var{pathname} argument must point to the shared
+library.  The \var{name} argument is used to construct the name of the
+initialization function: an external C function called
+\samp{init\var{name}()} in the shared library is called.  The optional
+\var{file} argument is ignored.  (Note: using shared libraries is highly
+system dependent, and not all systems support it.)
 \end{funcdesc}
 
 \begin{funcdesc}{load_source}{name, pathname\optional{, file}}
index 20bbc8dd7643b0359cc95fa2eee59cb35d82d0b4..59fbd98844e8ad2f46e990bd8ef247a71cc9ab48 100644 (file)
@@ -474,8 +474,8 @@ def iteritems(mapping):
     return izip(mapping.iterkeys(), mapping.itervalues())
 
 def nth(iterable, n):
-    "Returns the nth item"
-    return list(islice(iterable, n, n+1))
+    "Returns the nth item or raise IndexError"
+    return list(islice(iterable, n, n+1))[0]
 
 def all(seq, pred=None):
     "Returns True if pred(x) is true for every element in the iterable"
index cc4429420febafb0e217f5589669812ac8528d4b..e01fe0beb7288b041eb434f27d313b7b735323aa 100644 (file)
@@ -528,8 +528,8 @@ as those created locally. Logger-level filtering is applied using
 \method{filter()}.
 \end{methoddesc}
 
-\begin{methoddesc}{makeRecord}{name, lvl, fn, lno, msg, args, exc_info,
-                               func, extra}
+\begin{methoddesc}{makeRecord}{name, lvl, fn, lno, msg, args, exc_info
+                               \optional{, func, extra}}
 This is a factory method which can be overridden in subclasses to create
 specialized \class{LogRecord} instances.
 \versionchanged[\var{func} and \var{extra} were added]{2.5}
@@ -1397,6 +1397,9 @@ Currently, the useful mapping keys in a \class{LogRecord} are:
                         (if available).}
 \lineii{\%(created)f}  {Time when the \class{LogRecord} was created (as
                         returned by \function{time.time()}).}
+\lineii{\%(relativeCreated)d}  {Time in milliseconds when the LogRecord was
+                        created, relative to the time the logging module was
+                        loaded.}
 \lineii{\%(asctime)s}  {Human-readable time when the \class{LogRecord}
                         was created.  By default this is of the form
                         ``2003-07-08 16:49:45,896'' (the numbers after the
@@ -1479,7 +1482,7 @@ source line where the logging call was made, and any exception
 information to be logged.
 
 \begin{classdesc}{LogRecord}{name, lvl, pathname, lineno, msg, args,
-                             exc_info}
+                             exc_info \optional{, func}}
 Returns an instance of \class{LogRecord} initialized with interesting
 information. The \var{name} is the logger name; \var{lvl} is the
 numeric level; \var{pathname} is the absolute pathname of the source
@@ -1489,7 +1492,9 @@ user-supplied message (a format string); \var{args} is the tuple
 which, together with \var{msg}, makes up the user message; and
 \var{exc_info} is the exception tuple obtained by calling
 \function{sys.exc_info() }(or \constant{None}, if no exception information
-is available).
+is available). The \var{func} is the name of the function from which the
+logging call was made. If not specified, it defaults to \var{None}.
+\versionchanged[\var{func} was added]{2.5}
 \end{classdesc}
 
 \begin{methoddesc}{getMessage}{}
index 1e044f4907ca056679ea3ec3a84f802667a4f430..13d5556cd80af627714ac0ab52ca605e191ddaa1 100644 (file)
@@ -344,8 +344,8 @@ the string inside the exception will contain more detail.
 \subsection{Features\label{features}}
 
 \begin{classdesc}{Feature}{database, id, title, desc, display\optional{,
-    level=1\optional{, parent\optional\{, directory\optional{, 
-    attributes=0}}}}
+    level=1\optional{, parent\optional{, directory\optional{, 
+    attributes=0}}}}}
 
   Add a new record to the \code{Feature} table, using the values
   \var{id}, \var{parent.id}, \var{title}, \var{desc}, \var{display},
index 9ded3ae0ca5f8bb56a3da487e71e66f0a11d9ae5..355d8fab2576fc25bc74245b58876bbd7278678a 100644 (file)
@@ -361,6 +361,10 @@ object, except that when the exit status is zero (termination without
 errors), \code{None} is returned.
 Availability: Macintosh, \UNIX, Windows.
 
+The \module{subprocess} module provides more powerful facilities for
+spawning new processes and retrieving their results; using that module
+is preferable to using this function.
+
 \versionchanged[This function worked unreliably under Windows in
   earlier versions of Python.  This was due to the use of the
   \cfunction{_popen()} function from the libraries provided with
@@ -375,8 +379,13 @@ deleted once there are no file descriptors for the file.
 Availability: Macintosh, \UNIX, Windows.
 \end{funcdesc}
 
+There are a number of different \function{popen*()} functions that
+provide slightly different ways to create subprocesses.  Note that the
+\module{subprocess} module is easier to use and more powerful;
+consider using that module before writing code using the
+lower-level \function{popen*()} functions.
 
-For each of the following \function{popen()} variants, if \var{bufsize} is
+For each of the \function{popen*()} variants, if \var{bufsize} is
 specified, it specifies the buffer size for the I/O pipes.
 \var{mode}, if provided, should be the string \code{'b'} or
 \code{'t'}; on Windows this is needed to determine whether the file
@@ -920,6 +929,8 @@ Return a string representing the path to which the symbolic link
 points.  The result may be either an absolute or relative pathname; if
 it is relative, it may be converted to an absolute pathname using
 \code{os.path.join(os.path.dirname(\var{path}), \var{result})}.
+\versionchanged [If the \var{path} is a Unicode object the result will also
+be a Unicode object]{2.6}
 Availability: Macintosh, \UNIX.
 \end{funcdesc}
 
@@ -1545,7 +1556,13 @@ functions are described in section \ref{os-newstreams}.
 \funcline{spawnve}{mode, path, args, env}
 \funcline{spawnvp}{mode, file, args}
 \funcline{spawnvpe}{mode, file, args, env}
-Execute the program \var{path} in a new process.  If \var{mode} is
+Execute the program \var{path} in a new process.  
+
+(Note that the \module{subprocess} module provides more powerful
+facilities for spawning new processes and retrieving their results;
+using that module is preferable to using these functions.)
+
+If \var{mode} is
 \constant{P_NOWAIT}, this function returns the process ID of the new
 process; if \var{mode} is \constant{P_WAIT}, returns the process's
 exit code if it exits normally, or \code{-\var{signal}}, where
@@ -1682,6 +1699,10 @@ and XP) this is the exit status of the command run; on systems using
 a non-native shell, consult your shell documentation.
 
 Availability: Macintosh, \UNIX, Windows.
+
+The \module{subprocess} module provides more powerful facilities for
+spawning new processes and retrieving their results; using that module
+is preferable to using this function.
 \end{funcdesc}
 
 \begin{funcdesc}{times}{}
index a8ab39e25d7b98fa9691af626b38d8ae84700c3e..3290641232f73fb45bcd4f024bbdd8d875079f3d 100644 (file)
@@ -519,7 +519,7 @@ as their value.  The semantics of each element are:
 version of the object.  The next element of the tuple will provide
 arguments for this callable, and later elements provide additional
 state information that will subsequently be used to fully reconstruct
-the pickled date.
+the pickled data.
 
 In the unpickling environment this object must be either a class, a
 callable registered as a ``safe constructor'' (see below), or it must
index 985f580451bf2b8d32951da3a3d88e453d2da329..fa0c1a60edaed4b968ddf49469dc676efb6632b6 100644 (file)
@@ -11,10 +11,10 @@ This module allows you to spawn processes and connect to their
 input/output/error pipes and obtain their return codes under
 \UNIX{} and Windows.
 
-Note that starting with Python 2.0, this functionality is available
-using functions from the \refmodule{os} module which have the same
-names as the factory functions here, but the order of the return
-values is more intuitive in the \refmodule{os} module variants.
+The \module{subprocess} module provides more powerful facilities for
+spawning new processes and retrieving their results.  Using the
+\module{subprocess} module is preferable to using the \module{popen2}
+module.
 
 The primary interface offered by this module is a trio of factory
 functions.  For each of these, if \var{bufsize} is specified, 
@@ -184,3 +184,7 @@ integrate I/O over pipes with their \function{select()} loops, or use
 separate threads to read each of the individual files provided by
 whichever \function{popen*()} function or \class{Popen*} class was
 used.
+
+\begin{seealso}
+  \seemodule{subprocess}{Module for spawning and managing subprocesses.}
+\end{seealso}
index 83581ec9a6519a04202b6b0700551e8322b5c842..a0ea8a1a427a096150967db7c8b4ec82481f4a02 100644 (file)
@@ -216,9 +216,10 @@ any time.
 
 \begin{memberdesc}[xmlparser]{returns_unicode} 
 If this attribute is set to a non-zero integer, the handler functions
-will be passed Unicode strings.  If \member{returns_unicode} is 0,
-8-bit strings containing UTF-8 encoded data will be passed to the
-handlers.
+will be passed Unicode strings.  If \member{returns_unicode} is
+\constant{False}, 8-bit strings containing UTF-8 encoded data will be
+passed to the handlers.  This is \constant{True} by default when
+Python is built with Unicode support.
 \versionchanged[Can be changed at any time to affect the result
   type]{1.6}
 \end{memberdesc}
index ddf17649c7835df43ee0051752933431bb5c11a0..962383f723b233e0ca95e52a65dce909d0edb8a6 100644 (file)
@@ -28,6 +28,18 @@ For normal use, you should only require the initialization/connect,
 included below.
 \end{classdesc}
 
+\begin{classdesc}{SMTP_SSL}{\optional{host\optional{, port\optional{,
+                        local_hostname\optional{,
+                        keyfile\optional{,
+                        certfile}}}}}}
+A \class{SMTP_SSL} instance behaves exactly the same as instances of \class{SMTP}.
+\class{SMTP_SSL} should be used for situations where SSL is required from 
+the beginning of the connection and using \method{starttls()} is not appropriate.
+If \var{host} is not specified, the local host is used. If \var{port} is
+omitted, the standard SMTP-over-SSL port (465) is used. \var{keyfile} and \var{certfile}
+are also optional, and can contain a PEM formatted private key and
+certificate chain file for the SSL connection.
+\end{classdesc}
 
 A nice selection of exceptions is defined as well:
 
index aa75ec9866e3273a14322d7ef7d3751fe3f9b929..f510fd40c0afe83a133e1e0f609bab1ee2153d6d 100644 (file)
@@ -241,8 +241,8 @@ If you want to know the current machine's IP address, you may want to use
 This operation assumes that there is a valid address-to-host mapping for
 the host, and the assumption does not always hold.
 Note: \function{gethostname()} doesn't always return the fully qualified
-domain name; use \code{gethostbyaddr(gethostname())}
-(see below).
+domain name; use \code{getfqdn()}
+(see above).
 \end{funcdesc}
 
 \begin{funcdesc}{gethostbyaddr}{ip_address}
@@ -712,14 +712,15 @@ read until EOF. The return value is a string of the bytes read.
 \end{methoddesc}
 
 \begin{methoddesc}{server}{}
-Returns a string containing the ASN.1 distinguished name identifying the 
-server's certificate.  (See below for an example
-showing what distinguished names look like.)
+Returns a string describing the server's certificate.
+Useful for debugging purposes; do not parse the content of this string
+because its format can't be parsed unambiguously.
 \end{methoddesc}
 
 \begin{methoddesc}{issuer}{}
-Returns a string containing the ASN.1 distinguished name identifying the
-issuer of the server's certificate.
+Returns a string describing the issuer of the server's certificate.
+Useful for debugging purposes; do not parse the content of this string
+because its format can't be parsed unambiguously.
 \end{methoddesc}
 
 \subsection{Example \label{socket-example}}
index d87e064728d1fb6943e99d33f9c510eea7e7f845..82416fa53d997d52c167479980d415188d1eb18b 100644 (file)
@@ -6,14 +6,16 @@
 \sectionauthor{Gerhard Häring}{gh@ghaering.de}
 \versionadded{2.5}
 
-SQLite is a C library that provides a SQL-language database that
-stores data in disk files without requiring a separate server process.
+SQLite is a C library that provides a lightweight disk-based database
+that doesn't require a separate server process and allows accessing
+the database using a nonstandard variant of the SQL query language.
+Some applications can use SQLite for internal data storage.  It's also
+possible to prototype an application using SQLite and then port the
+code to a larger database such as PostgreSQL or Oracle.
 pysqlite was written by Gerhard H\"aring and provides a SQL interface
 compliant with the DB-API 2.0 specification described by
-\pep{249}. This means that it should be possible to write the first
-version of your applications using SQLite for data storage.  If
-switching to a larger database such as PostgreSQL or Oracle is
-later necessary, the switch should be relatively easy.
+\pep{249}. 
 
 To use the module, you must first create a \class{Connection} object
 that represents the database.  Here the data will be stored in the 
@@ -34,8 +36,8 @@ c = conn.cursor()
 
 # Create table
 c.execute('''create table stocks
-(date timestamp, trans varchar, symbol varchar,
- qty decimal, price decimal)''')
+(date text, trans text, symbol text,
+ qty real, price real)''')
 
 # Insert a row of data
 c.execute("""insert into stocks
@@ -144,11 +146,11 @@ committed. The \var{timeout} parameter specifies how long the connection should
 wait for the lock to go away until raising an exception. The default for the
 timeout parameter is 5.0 (five seconds). 
 
-For the \var{isolation_level} parameter, please see \member{isolation_level}
-\ref{sqlite3-Connection-IsolationLevel} property of \class{Connection} objects.
+For the \var{isolation_level} parameter, please see the \member{isolation_level}
+property of \class{Connection} objects in section~\ref{sqlite3-Connection-IsolationLevel}.
 
 SQLite natively supports only the types TEXT, INTEGER, FLOAT, BLOB and NULL. If
-you want to use other types, like you have to add support for them yourself.
+you want to use other types you must add support for them yourself.
 The \var{detect_types} parameter and the using custom \strong{converters} registered with
 the module-level \function{register_converter} function allow you to easily do that.
 
@@ -195,7 +197,7 @@ This can be used to build a shell for SQLite, like in the following example:
     \verbatiminput{sqlite3/complete_statement.py}
 \end{funcdesc}
 
-\begin{funcdesc}{}enable_callback_tracebacks{flag}
+\begin{funcdesc}{enable_callback_tracebacks}{flag}
 By default you will not get any tracebacks in user-defined functions,
 aggregates, converters, authorizer callbacks etc. If you want to debug them,
 you can call this function with \var{flag} as True. Afterwards, you will get
@@ -210,13 +212,14 @@ A \class{Connection} instance has the following attributes and methods:
 \label{sqlite3-Connection-IsolationLevel}
 \begin{memberdesc}{isolation_level}
   Get or set the current isolation level. None for autocommit mode or one of
-  "DEFERRED", "IMMEDIATE" or "EXLUSIVE". See  Controlling Transactions
-  \ref{sqlite3-Controlling-Transactions} for a more detailed explanation.
+  "DEFERRED", "IMMEDIATE" or "EXLUSIVE". See ``Controlling Transactions'', 
+  section~\ref{sqlite3-Controlling-Transactions}, for a more detailed explanation.
 \end{memberdesc}
 
 \begin{methoddesc}{cursor}{\optional{cursorClass}}
   The cursor method accepts a single optional parameter \var{cursorClass}.
-  This is a custom cursor class which must extend \class{sqlite3.Cursor}.
+  If supplied, this must be a custom cursor class that extends 
+  \class{sqlite3.Cursor}.
 \end{methoddesc}
 
 \begin{methoddesc}{execute}{sql, \optional{parameters}}
@@ -242,7 +245,7 @@ parameters given.
 Creates a user-defined function that you can later use from within SQL
 statements under the function name \var{name}. \var{num_params} is the number
 of parameters the function accepts, and \var{func} is a Python callable that is
-called as SQL function.
+called as the SQL function.
 
 The function can return any of the types supported by SQLite: unicode, str,
 int, long, float, buffer and None.
@@ -272,7 +275,7 @@ Example:
 
 Creates a collation with the specified \var{name} and \var{callable}. The
 callable will be passed two string arguments. It should return -1 if the first
-is ordered lower than the second, 0 if they are ordered equal and 1 and if the
+is ordered lower than the second, 0 if they are ordered equal and 1 if the
 first is ordered higher than the second.  Note that this controls sorting
 (ORDER BY in SQL) so your comparisons don't affect other SQL operations.
 
@@ -321,20 +324,21 @@ module.
 
 \begin{memberdesc}{row_factory}
   You can change this attribute to a callable that accepts the cursor and
-  the original row as tuple and will return the real result row.  This
-  way, you can implement more advanced ways of returning results, like
-  ones that can also access columns by name.
+  the original row as tuple and will return the real result row.  This
+  way, you can implement more advanced ways of returning results, such 
+  as returning an object that can also access columns by name.
 
   Example:
 
   \verbatiminput{sqlite3/row_factory.py}
 
-  If the standard tuple types don't suffice for you, and you want name-based
+  If returning a tuple doesn't suffice and you want name-based
   access to columns, you should consider setting \member{row_factory} to the
-  highly-optimized sqlite3.Row type. It provides both
+  highly-optimized \class{sqlite3.Row} type. \class{Row} provides both
   index-based and case-insensitive name-based access to columns with almost
-  no memory overhead. Much better than your own custom dictionary-based
-  approach or even a db_row based solution.
+  no memory overhead. It will probably be better than your own custom 
+  dictionary-based approach or even a db_row based solution.
+  % XXX what's a db_row-based solution?
 \end{memberdesc}
 
 \begin{memberdesc}{text_factory}
@@ -348,7 +352,7 @@ module.
   attribute to \constant{sqlite3.OptimizedUnicode}.
 
   You can also set it to any other callable that accepts a single bytestring
-  parameter and returns the result object.
+  parameter and returns the resulting object.
 
   See the following example code for illustration:
 
@@ -356,7 +360,7 @@ module.
 \end{memberdesc}
 
 \begin{memberdesc}{total_changes}
-  Returns the total number of database rows that have be modified, inserted,
+  Returns the total number of database rows that have been modified, inserted,
   or deleted since the database connection was opened.
 \end{memberdesc}
 
@@ -383,9 +387,9 @@ This example shows how to use the named style:
 
     \verbatiminput{sqlite3/execute_2.py}
 
-    \method{execute} will only execute a single SQL statement. If you try to
+    \method{execute()} will only execute a single SQL statement. If you try to
     execute more than one statement with it, it will raise a Warning. Use
-    \method{executescript} if want to execute multiple SQL statements with one
+    \method{executescript()} if you want to execute multiple SQL statements with one
     call.
 \end{methoddesc}
 
@@ -393,7 +397,7 @@ This example shows how to use the named style:
 \begin{methoddesc}{executemany}{sql, seq_of_parameters}
 Executes a SQL command against all parameter sequences or mappings found in the
 sequence \var{sql}. The \module{sqlite3} module also allows
-to use an iterator yielding parameters instead of a sequence.
+using an iterator yielding parameters instead of a sequence.
 
 \verbatiminput{sqlite3/executemany_1.py}
 
@@ -405,7 +409,7 @@ Here's a shorter example using a generator:
 \begin{methoddesc}{executescript}{sql_script}
 
 This is a nonstandard convenience method for executing multiple SQL statements
-at once. It issues a COMMIT statement before, then executes the SQL script it
+at once. It issues a COMMIT statement first, then executes the SQL script it
 gets as a parameter.
 
 \var{sql_script} can be a bytestring or a Unicode string.
@@ -462,20 +466,19 @@ This is how SQLite types are converted to Python types by default:
 \lineii{BLOB}{buffer}
 \end{tableii}
 
-The type system of the \module{sqlite3} module is extensible in both ways: you can store
+The type system of the \module{sqlite3} module is extensible in two ways: you can store
 additional Python types in a SQLite database via object adaptation, and you can
 let the \module{sqlite3} module convert SQLite types to different Python types via
 converters.
 
 \subsubsection{Using adapters to store additional Python types in SQLite databases}
 
-Like described before, SQLite supports only a limited set of types natively. To
+As described before, SQLite supports only a limited set of types natively. To
 use other Python types with SQLite, you must \strong{adapt} them to one of the sqlite3
-module's supported types for SQLite. So, one of NoneType, int, long, float,
+module's supported types for SQLite: one of NoneType, int, long, float,
 str, unicode, buffer.
 
-The \module{sqlite3} module uses the Python object adaptation, like described in PEP 246
-for this.  The protocol to use is \class{PrepareProtocol}.
+The \module{sqlite3} module uses Python object adaptation, as described in \pep{246} for this.  The protocol to use is \class{PrepareProtocol}.
 
 There are two ways to enable the \module{sqlite3} module to adapt a custom Python type
 to one of the supported ones.
@@ -491,8 +494,8 @@ class Point(object):
         self.x, self.y = x, y
 \end{verbatim}
 
-Now you want to store the point in a single SQLite column. You'll have to
-choose one of the supported types first that you use to represent the point in.
+Now you want to store the point in a single SQLite column.  First you'll have to
+choose one of the supported types first to be used for representing the point.
 Let's just use str and separate the coordinates using a semicolon. Then you
 need to give your class a method \code{__conform__(self, protocol)} which must
 return the converted value. The parameter \var{protocol} will be
@@ -505,13 +508,13 @@ return the converted value. The parameter \var{protocol} will be
 The other possibility is to create a function that converts the type to the
 string representation and register the function with \method{register_adapter}.
 
-    \verbatiminput{sqlite3/adapter_point_2.py}
-
 \begin{notice}
 The type/class to adapt must be a new-style class, i. e. it must have
 \class{object} as one of its bases.
 \end{notice}
 
+    \verbatiminput{sqlite3/adapter_point_2.py}
+
 The \module{sqlite3} module has two default adapters for Python's built-in
 \class{datetime.date} and \class{datetime.datetime} types.  Now let's suppose
 we want to store \class{datetime.datetime} objects not in ISO representation,
@@ -521,16 +524,17 @@ but as a \UNIX{} timestamp.
 
 \subsubsection{Converting SQLite values to custom Python types}
 
-Now that's all nice and dandy that you can send custom Python types to SQLite.
+Writing an adapter lets you send custom Python types to SQLite.
 But to make it really useful we need to make the Python to SQLite to Python
-roundtrip work.
+roundtrip work.  
 
 Enter converters.
 
-Let's go back to the Point class. We stored the x and y coordinates separated
-via semicolons as strings in SQLite.
+Let's go back to the \class{Point} class. We stored the x and y
+coordinates separated via semicolons as strings in SQLite.
 
-Let's first define a converter function that accepts the string as a parameter and constructs a Point object from it.
+First, we'll define a converter function that accepts the string as a
+parameter and constructs a \class{Point} object from it.
 
 \begin{notice}
 Converter functions \strong{always} get called with a string, no matter
@@ -556,11 +560,12 @@ database is actually a point. There are two ways of doing this:
  \item Explicitly via the column name
 \end{itemize}
 
-Both ways are described at \ref{sqlite3-Module-Contents} in the text explaining
-the constants \constant{PARSE_DECLTYPES} and \constant{PARSE_COlNAMES}.
+Both ways are described in ``Module Constants'', section~\ref{sqlite3-Module-Contents}, in
+the entries for the constants \constant{PARSE_DECLTYPES} and
+\constant{PARSE_COLNAMES}.
 
 
-The following example illustrates both ways.
+The following example illustrates both approaches.
 
     \verbatiminput{sqlite3/converter_point.py}
 
@@ -569,8 +574,8 @@ The following example illustrates both ways.
 There are default adapters for the date and datetime types in the datetime
 module. They will be sent as ISO dates/ISO timestamps to SQLite.
 
-The default converters are registered under the name "date" for datetime.date
-and under the name "timestamp" for datetime.datetime.
+The default converters are registered under the name "date" for \class{datetime.date}
+and under the name "timestamp" for \class{datetime.datetime}.
 
 This way, you can use date/timestamps from Python without any additional
 fiddling in most cases. The format of the adapters is also compatible with the
@@ -582,12 +587,12 @@ The following example demonstrates this.
 
 \subsection{Controlling Transactions \label{sqlite3-Controlling-Transactions}}
 
-By default, the \module{sqlite3} module opens transactions implicitly before a DML
-statement (INSERT/UPDATE/DELETE/REPLACE), and commits transactions implicitly
-before a non-DML, non-DQL statement (i. e. anything other than
+By default, the \module{sqlite3} module opens transactions implicitly before a Data Modification Language (DML) 
+statement (i.e. INSERT/UPDATE/DELETE/REPLACE), and commits transactions implicitly
+before a non-DML, non-query statement (i. e. anything other than
 SELECT/INSERT/UPDATE/DELETE/REPLACE).
 
-So if you are within a transaction, and issue a command like \code{CREATE TABLE
+So if you are within a transaction and issue a command like \code{CREATE TABLE
 ...}, \code{VACUUM}, \code{PRAGMA}, the \module{sqlite3} module will commit implicitly
 before executing that command. There are two reasons for doing that. The first
 is that some of these commands don't work within transactions. The other reason
@@ -616,17 +621,17 @@ the connection yourself.
 
 Using the nonstandard \method{execute}, \method{executemany} and
 \method{executescript} methods of the \class{Connection} object, your code can
-be written more concisely, because you don't have to create the - often
-superfluous \class{Cursor} objects explicitly. Instead, the \class{Cursor}
+be written more concisely because you don't have to create the (often
+superfluous) \class{Cursor} objects explicitly. Instead, the \class{Cursor}
 objects are created implicitly and these shortcut methods return the cursor
-objects. This way, you can for example execute a SELECT statement and iterate
+objects. This way, you can execute a SELECT statement and iterate
 over it directly using only a single call on the \class{Connection} object.
 
     \verbatiminput{sqlite3/shortcut_methods.py}
 
 \subsubsection{Accessing columns by name instead of by index}
 
-One cool feature of the \module{sqlite3} module is the builtin \class{sqlite3.Row} class
+One useful feature of the \module{sqlite3} module is the builtin \class{sqlite3.Row} class
 designed to be used as a row factory.
 
 Rows wrapped with this class can be accessed both by index (like tuples) and
index 17e377beb865aa29a98d1aec786e512317b57283..b433bc448619f7c98752ff8de2ae9ef38ce7240b 100644 (file)
@@ -759,8 +759,8 @@ The original string is returned if
 Split the string at the last occurrence of \var{sep}, and return
 a 3-tuple containing the part before the separator, the separator
 itself, and the part after the separator.  If the separator is not
-found, return a 3-tuple containing the string itself, followed by
-two empty strings.
+found, return a 3-tuple containing two empty strings, followed by
+the string itself.
 \versionadded{2.5}
 \end{methoddesc}
 
@@ -822,7 +822,7 @@ boundaries.  Line breaks are not included in the resulting list unless
                                        start\optional{, end}}}
 Return \code{True} if string starts with the \var{prefix}, otherwise
 return \code{False}.  \var{prefix} can also be a tuple of
-suffixes to look for.  With optional \var{start}, test string beginning at
+prefixes to look for.  With optional \var{start}, test string beginning at
 that position.  With optional \var{end}, stop comparing string at that
 position.
 
@@ -864,6 +864,9 @@ optional argument \var{deletechars} are removed, and the remaining
 characters have been mapped through the given translation table, which
 must be a string of length 256.
 
+You can use the \function{maketrans()} helper function in the
+\refmodule{string} module to create a translation table.
+
 For Unicode objects, the \method{translate()} method does not
 accept the optional \var{deletechars} argument.  Instead, it
 returns a copy of the \var{s} where all characters have been mapped
@@ -1398,21 +1401,22 @@ arbitrary objects):
           {(1)}
   \lineiii{\var{a}.clear()}{remove all items from \code{a}}{}
   \lineiii{\var{a}.copy()}{a (shallow) copy of \code{a}}{}
-  \lineiii{\var{a}.has_key(\var{k})}
+  \lineiii{\var{k} in \var{a}}
           {\code{True} if \var{a} has a key \var{k}, else \code{False}}
-          {}
-  \lineiii{\var{k} \code{in} \var{a}}
-          {Equivalent to \var{a}.has_key(\var{k})}
           {(2)}
   \lineiii{\var{k} not in \var{a}}
-          {Equivalent to \code{not} \var{a}.has_key(\var{k})}
+          {Equivalent to \code{not} \var{k} in \var{a}}
           {(2)}
+  \lineiii{\var{a}.has_key(\var{k})}
+          {Equivalent to \var{k} \code{in} \var{a}, use that form in new code}
+          {}
   \lineiii{\var{a}.items()}
           {a copy of \var{a}'s list of (\var{key}, \var{value}) pairs}
           {(3)}
   \lineiii{\var{a}.keys()}{a copy of \var{a}'s list of keys}{(3)}
   \lineiii{\var{a}.update(\optional{\var{b}})}
-          {updates (and overwrites) key/value pairs from \var{b}}
+          {updates \var{a} with key/value pairs from \var{b}, overwriting
+          existing keys, returns \code{None}}
           {(9)}
   \lineiii{\var{a}.fromkeys(\var{seq}\optional{, \var{value}})}
           {Creates a new dictionary with keys from \var{seq} and values set to \var{value}}
@@ -1670,6 +1674,7 @@ flush the read-ahead buffer.
   behavior.
 
   Note that not all file objects are seekable.
+  \versionchanged{Passing float values as offset has been deprecated}[2.6]
 \end{methoddesc}
 
 \begin{methoddesc}[file]{tell}{}
index 1828b2e1cd779da6fd99563b3b2eae20c0e32e0e..bc1649fdbfc2b1ee3c234079be2e82d0c72546f1 100644 (file)
@@ -220,7 +220,7 @@ objects.  They are not available as string methods.
 
 \begin{funcdesc}{maketrans}{from, to}
   Return a translation table suitable for passing to
-  \function{translate()} or \function{regex.compile()}, that will map
+  \function{translate()}, that will map
   each character in \var{from} into the character at the same position
   in \var{to}; \var{from} and \var{to} must have the same length.
 
index 03072f7258a7d6e41f6a4a00637022c9f232b0f1..f6397105acb9a82b653162814782b961e2b38f67 100644 (file)
@@ -12,9 +12,6 @@ connect to their input/output/error pipes, and obtain their return
 codes.  This module intends to replace several other, older modules
 and functions, such as:
 
-% XXX Should add pointers to this module to at least the popen2
-% and commands sections.
-
 \begin{verbatim}
 os.system
 os.spawn*
index 9da86632807edd522281ee3c8cf7e6b78ab78e31..9b4d8488b85b4a97847ef479569416d3f469befe 100644 (file)
@@ -86,7 +86,12 @@ If \var{prefix} is specified, the file name will begin with that
 prefix; otherwise, a default prefix is used.
 
 If \var{dir} is specified, the file will be created in that directory;
-otherwise, a default directory is used.
+otherwise, a default directory is used.  The default directory is chosen
+from a platform-dependent list, but the user of the application can control
+the directory location by setting the \var{TMPDIR}, \var{TEMP} or \var{TMP}
+environment variables.  There is thus no guarantee that the generated
+filename will have any nice properties, such as not requiring quoting when
+passed to external commands via \code{os.popen()}.
 
 If \var{text} is specified, it indicates whether to open the file in
 binary mode (the default) or text mode.  On some platforms, this makes
index f40493d35baa999690bd1f91c4f7692e121335aa..350abae7863bc7bdfd054dd196e748f9313498a2 100644 (file)
@@ -212,8 +212,8 @@ import unittest
 
 class DefaultWidgetSizeTestCase(unittest.TestCase):
     def runTest(self):
-        widget = Widget("The widget")
-        self.failUnless(widget.size() == (50,50), 'incorrect default size')
+        widget = Widget('The widget')
+        self.assertEqual(widget.size(), (50, 50), 'incorrect default size')
 \end{verbatim}
 
 Note that in order to test something, we use the one of the
@@ -247,7 +247,7 @@ import unittest
 
 class SimpleWidgetTestCase(unittest.TestCase):
     def setUp(self):
-        self.widget = Widget("The widget")
+        self.widget = Widget('The widget')
 
 class DefaultWidgetSizeTestCase(SimpleWidgetTestCase):
     def runTest(self):
@@ -273,7 +273,7 @@ import unittest
 
 class SimpleWidgetTestCase(unittest.TestCase):
     def setUp(self):
-        self.widget = Widget("The widget")
+        self.widget = Widget('The widget')
 
     def tearDown(self):
         self.widget.dispose()
@@ -298,7 +298,7 @@ import unittest
 
 class WidgetTestCase(unittest.TestCase):
     def setUp(self):
-        self.widget = Widget("The widget")
+        self.widget = Widget('The widget')
 
     def tearDown(self):
         self.widget.dispose()
@@ -322,8 +322,8 @@ instance we must specify the test method it is to run.  We do this by
 passing the method name in the constructor:
 
 \begin{verbatim}
-defaultSizeTestCase = WidgetTestCase("testDefaultSize")
-resizeTestCase = WidgetTestCase("testResize")
+defaultSizeTestCase = WidgetTestCase('testDefaultSize')
+resizeTestCase = WidgetTestCase('testResize')
 \end{verbatim}
 
 Test case instances are grouped together according to the features
@@ -333,8 +333,8 @@ class:
 
 \begin{verbatim}
 widgetTestSuite = unittest.TestSuite()
-widgetTestSuite.addTest(WidgetTestCase("testDefaultSize"))
-widgetTestSuite.addTest(WidgetTestCase("testResize"))
+widgetTestSuite.addTest(WidgetTestCase('testDefaultSize'))
+widgetTestSuite.addTest(WidgetTestCase('testResize'))
 \end{verbatim}
 
 For the ease of running tests, as we will see later, it is a good
@@ -344,8 +344,8 @@ pre-built test suite:
 \begin{verbatim}
 def suite():
     suite = unittest.TestSuite()
-    suite.addTest(WidgetTestCase("testDefaultSize"))
-    suite.addTest(WidgetTestCase("testResize"))
+    suite.addTest(WidgetTestCase('testDefaultSize'))
+    suite.addTest(WidgetTestCase('testResize'))
     return suite
 \end{verbatim}
 
@@ -353,7 +353,7 @@ or even:
 
 \begin{verbatim}
 def suite():
-    tests = ["testDefaultSize", "testResize"]
+    tests = ['testDefaultSize', 'testResize']
 
     return unittest.TestSuite(map(WidgetTestCase, tests))
 \end{verbatim}
@@ -462,7 +462,7 @@ easier.}
 \subsection{Classes and functions
             \label{unittest-contents}}
 
-\begin{classdesc}{TestCase}{}
+\begin{classdesc}{TestCase}{\optional{methodName}}
   Instances of the \class{TestCase} class represent the smallest
   testable units in the \module{unittest} universe.  This class is
   intended to be used as a base class, with specific tests being
@@ -470,6 +470,23 @@ easier.}
   interface needed by the test runner to allow it to drive the
   test, and methods that the test code can use to check for and
   report various kinds of failure.
+  
+  Each instance of \class{TestCase} will run a single test method:
+  the method named \var{methodName}.  If you remember, we had an
+  earlier example that went something like this:
+  
+  \begin{verbatim}
+  def suite():
+      suite = unittest.TestSuite()
+      suite.addTest(WidgetTestCase('testDefaultSize'))
+      suite.addTest(WidgetTestCase('testResize'))
+      return suite
+  \end{verbatim}
+  
+  Here, we create two instances of \class{WidgetTestCase}, each of
+  which runs a single test.
+  
+  \var{methodName} defaults to \code{'runTest'}.
 \end{classdesc}
 
 \begin{classdesc}{FunctionTestCase}{testFunc\optional{,
@@ -502,6 +519,11 @@ easier.}
   subclass.
 \end{classdesc}
 
+\begin{classdesc}{TestResult}{}
+  This class is used to compile information about which tests have succeeded
+  and which have failed.
+\end{classdesc}
+
 \begin{datadesc}{defaultTestLoader}
   Instance of the \class{TestLoader} class intended to be shared.  If no
   customization of the \class{TestLoader} is needed, this instance can
@@ -574,8 +596,9 @@ Methods in the first group (running the test) are:
 \begin{methoddesc}[TestCase]{run}{\optional{result}}
   Run the test, collecting the result into the test result object
   passed as \var{result}.  If \var{result} is omitted or \constant{None},
-  a temporary result object is created and used, but is not made
-  available to the caller.
+  a temporary result object is created (by calling the
+  \method{defaultTestCase()} method) and used; this result object is not
+  returned to \method{run()}'s caller.
   
   The same effect may be had by simply calling the \class{TestCase}
   instance.
@@ -684,8 +707,13 @@ information on the test:
 \end{methoddesc}
 
 \begin{methoddesc}[TestCase]{defaultTestResult}{}
-  Return the default type of test result object to be used to run this
-  test.
+  Return an instance of the test result class that should be used
+  for this test case class (if no other result instance is provided
+  to the \method{run()} method).
+  
+  For \class{TestCase} instances, this will always be an instance of
+  \class{TestResult};  subclasses of \class{TestCase} should
+  override this as necessary.
 \end{methoddesc}
 
 \begin{methoddesc}[TestCase]{id}{}
@@ -761,26 +789,20 @@ access to the \class{TestResult} object generated by running a set of
 tests for reporting purposes; a \class{TestResult} instance is
 returned by the \method{TestRunner.run()} method for this purpose.
 
-Each instance holds the total number of tests run, and collections of
-failures and errors that occurred among those test runs.  The
-collections contain tuples of \code{(\var{testcase},
-\var{traceback})}, where \var{traceback} is a string containing a
-formatted version of the traceback for the exception.
-
 \class{TestResult} instances have the following attributes that will
 be of interest when inspecting the results of running a set of tests:
 
 \begin{memberdesc}[TestResult]{errors}
   A list containing 2-tuples of \class{TestCase} instances and
-  formatted tracebacks. Each tuple represents a test which raised an
-  unexpected exception.
+  strings holding formatted tracebacks. Each tuple represents a test which
+  raised an unexpected exception.
   \versionchanged[Contains formatted tracebacks instead of
                   \function{sys.exc_info()} results]{2.2}
 \end{memberdesc}
 
 \begin{memberdesc}[TestResult]{failures}
-  A list containing 2-tuples of \class{TestCase} instances and
-  formatted tracebacks. Each tuple represents a test where a failure
+  A list containing 2-tuples of \class{TestCase} instances and strings
+  holding formatted tracebacks. Each tuple represents a test where a failure
   was explicitly signalled using the \method{TestCase.fail*()} or
   \method{TestCase.assert*()} methods.
   \versionchanged[Contains formatted tracebacks instead of
@@ -817,17 +839,25 @@ reporting while tests are being run.
 
 \begin{methoddesc}[TestResult]{startTest}{test}
   Called when the test case \var{test} is about to be run.
+  
+  The default implementation simply increments the instance's
+  \code{testsRun} counter.
 \end{methoddesc}
 
 \begin{methoddesc}[TestResult]{stopTest}{test}
-  Called when the test case \var{test} has been executed, regardless
+  Called after the test case \var{test} has been executed, regardless
   of the outcome.
+  
+  The default implementation does nothing.
 \end{methoddesc}
 
 \begin{methoddesc}[TestResult]{addError}{test, err}
   Called when the test case \var{test} raises an unexpected exception
   \var{err} is a tuple of the form returned by \function{sys.exc_info()}:
   \code{(\var{type}, \var{value}, \var{traceback})}.
+  
+  The default implementation appends \code{(\var{test}, \var{err})} to
+  the instance's \code{errors} attribute.
 \end{methoddesc}
 
 \begin{methoddesc}[TestResult]{addFailure}{test, err}
@@ -835,10 +865,15 @@ reporting while tests are being run.
   \var{err} is a tuple of the form returned by
   \function{sys.exc_info()}:  \code{(\var{type}, \var{value},
   \var{traceback})}.
+  
+  The default implementation appends \code{(\var{test}, \var{err})} to
+  the instance's \code{failures} attribute.
 \end{methoddesc}
 
 \begin{methoddesc}[TestResult]{addSuccess}{test}
   Called when the test case \var{test} succeeds.
+  
+  The default implementation does nothing.
 \end{methoddesc}
 
 
@@ -878,9 +913,12 @@ configurable properties.
   Return a suite of all tests cases given a string specifier.
 
   The specifier \var{name} is a ``dotted name'' that may resolve
-  either to a module, a test case class, a \class{TestSuite} instance,
-  a test method within a test case class, or a callable object which
-  returns a \class{TestCase} or \class{TestSuite} instance.
+  either to a module, a test case class, a test method within a test
+  case class, a \class{TestSuite} instance, or a callable object which
+  returns a \class{TestCase} or \class{TestSuite} instance.  These checks
+  are applied in the order listed here; that is, a method on a possible
+  test case class will be picked up as ``a test method within a test
+  case class'', rather than ``a callable object''.
 
   For example, if you have a module \module{SampleTests} containing a
   \class{TestCase}-derived class \class{SampleTestCase} with three test
@@ -905,7 +943,7 @@ configurable properties.
 
 \begin{methoddesc}[TestLoader]{getTestCaseNames}{testCaseClass}
   Return a sorted sequence of method names found within
-  \var{testCaseClass}.
+  \var{testCaseClass}; this should be a subclass of \class{TestCase}.
 \end{methoddesc}
 
 
index f18efe9cf6eb455a713b144d74ac299668f099a3..86036056e979c7a7ff91cd3f95bf24a23d594933 100644 (file)
@@ -142,7 +142,7 @@ a ? with an empty query; the RFC states that these are equivalent).
 
 \begin{funcdesc}{urljoin}{base, url\optional{, allow_fragments}}
 Construct a full (``absolute'') URL by combining a ``base URL''
-(\var{base}) with a ``relative URL'' (\var{url}).  Informally, this
+(\var{base}) with another URL (\var{url}).  Informally, this
 uses components of the base URL, in particular the addressing scheme,
 the network location and (part of) the path, to provide missing
 components in the relative URL.  For example:
@@ -155,6 +155,20 @@ components in the relative URL.  For example:
 
 The \var{allow_fragments} argument has the same meaning and default as
 for \function{urlparse()}.
+
+\note{If \var{url} is an absolute URL (that is, starting with \code{//}
+      or \code{scheme://}, the \var{url}'s host name and/or scheme
+      will be present in the result.  For example:}
+
+\begin{verbatim}
+>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html',
+...         '//www.python.org/%7Eguido')
+'http://www.python.org/%7Eguido'
+\end{verbatim}
+      
+If you do not want that behavior, preprocess
+the \var{url} with \function{urlsplit()} and \function{urlunsplit()},
+removing possible \em{scheme} and \em{netloc} parts.
 \end{funcdesc}
 
 \begin{funcdesc}{urldefrag}{url}
index a9d52954072975bcb4936cd0f140ef64403aec28..5aa9d8cf385b864bf4ed939a256e55bf18dbc907 100644 (file)
@@ -18,20 +18,11 @@ may compromise privacy since it creates a UUID containing the computer's
 network address.  \function{uuid4()} creates a random UUID.
 
 \begin{classdesc}{UUID}{\optional{hex\optional{, bytes\optional{,
-fields\optional{, int\optional{, version}}}}}}
-
-%Instances of the UUID class represent UUIDs as specified in RFC 4122.
-%UUID objects are immutable, hashable, and usable as dictionary keys.
-%Converting a UUID to a string with str() yields something in the form
-%'12345678-1234-1234-1234-123456789abc'.  The UUID constructor accepts
-%four possible forms: a similar string of hexadecimal digits, or a
-%string of 16 raw bytes as an argument named 'bytes', or a tuple of
-%six integer fields (with 32-bit, 16-bit, 16-bit, 8-bit, 8-bit, and
-%48-bit values respectively) as an argument named 'fields', or a single
-%128-bit integer as an argument named 'int'.
+bytes_le\optional{, fields\optional{, int\optional{, version}}}}}}}
 
 Create a UUID from either a string of 32 hexadecimal digits,
-a string of 16 bytes as the \var{bytes} argument, a tuple of six
+a string of 16 bytes as the \var{bytes} argument, a string of 16 bytes
+in little-endian order as the \var{bytes_le} argument, a tuple of six
 integers (32-bit \var{time_low}, 16-bit \var{time_mid},
 16-bit \var{time_hi_version},
 8-bit \var{clock_seq_hi_variant}, 8-bit \var{clock_seq_low}, 48-bit \var{node})
@@ -45,22 +36,31 @@ UUID('{12345678-1234-5678-1234-567812345678}')
 UUID('12345678123456781234567812345678')
 UUID('urn:uuid:12345678-1234-5678-1234-567812345678')
 UUID(bytes='\x12\x34\x56\x78'*4)
+UUID(bytes_le='\x78\x56\x34\x12\x34\x12\x78\x56' +
+              '\x12\x34\x56\x78\x12\x34\x56\x78')
 UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678))
 UUID(int=0x12345678123456781234567812345678)
 \end{verbatim}
 
-Exactly one of \var{hex}, \var{bytes}, \var{fields}, or \var{int} must
+Exactly one of \var{hex}, \var{bytes}, \var{bytes_le}, \var{fields},
+or \var{int} must
 be given.  The \var{version} argument is optional; if given, the
 resulting UUID will have its variant and version number set according to
 RFC 4122, overriding bits in the given \var{hex}, \var{bytes},
-\var{fields}, or \var{int}.
+\var{bytes_le}, \var{fields}, or \var{int}.
 
 \end{classdesc}
 
 \class{UUID} instances have these read-only attributes:
 
 \begin{memberdesc}{bytes}
-The UUID as a 16-byte string.
+The UUID as a 16-byte string (containing the six
+integer fields in big-endian byte order).
+\end{memberdesc}
+
+\begin{memberdesc}{bytes_le}
+The UUID as a 16-byte string (with \var{time_low}, \var{time_mid},
+and \var{time_hi_version} in little-endian byte order).
 \end{memberdesc}
 
 \begin{memberdesc}{fields}
@@ -95,10 +95,10 @@ The UUID as a URN as specified in RFC 4122.
 
 \begin{memberdesc}{variant}
 The UUID variant, which determines the internal layout of the UUID.
-This will be an integer equal to one of the constants
+This will be one of the integer constants
 \constant{RESERVED_NCS},
 \constant{RFC_4122}, \constant{RESERVED_MICROSOFT}, or
-\constant{RESERVED_FUTURE}).
+\constant{RESERVED_FUTURE}.
 \end{memberdesc}
 
 \begin{memberdesc}{version}
@@ -106,7 +106,7 @@ The UUID version number (1 through 5, meaningful only
 when the variant is \constant{RFC_4122}).
 \end{memberdesc}
 
-The \module{uuid} module defines the following functions
+The \module{uuid} module defines the following functions:
 
 \begin{funcdesc}{getnode}{}
 Get the hardware address as a 48-bit positive integer.  The first time this
@@ -129,11 +129,8 @@ otherwise a random 14-bit sequence number is chosen.
 \index{uuid1}
 
 \begin{funcdesc}{uuid3}{namespace, name}
-Generate a UUID based upon a MD5 hash of the \var{name} string value
-drawn from a specified namespace.   \var{namespace}
-must be one of \constant{NAMESPACE_DNS},
-\constant{NAMESPACE_URL}, \constant{NAMESPACE_OID},
-or \constant{NAMESPACE_X500}.
+Generate a UUID based on the MD5 hash
+of a namespace identifier (which is a UUID) and a name (which is a string).
 \end{funcdesc}
 \index{uuid3}
 
@@ -143,31 +140,32 @@ Generate a random UUID.
 \index{uuid4}
 
 \begin{funcdesc}{uuid5}{namespace, name}
-Generate a UUID based upon a SHA-1 hash of the \var{name} string value
-drawn from a specified namespace.   \var{namespace}
-must be one of \constant{NAMESPACE_DNS},
-\constant{NAMESPACE_URL}, \constant{NAMESPACE_OID},
-or \constant{NAMESPACE_X500}.
+Generate a UUID based on the SHA-1 hash
+of a namespace identifier (which is a UUID) and a name (which is a string).
 \end{funcdesc}
 \index{uuid5}
 
-The \module{uuid} module defines the following namespace constants
+The \module{uuid} module defines the following namespace identifiers
 for use with \function{uuid3()} or \function{uuid5()}.
 
 \begin{datadesc}{NAMESPACE_DNS}
-Fully-qualified domain name namespace UUID.
+When this namespace is specified,
+the \var{name} string is a fully-qualified domain name.
 \end{datadesc}
 
 \begin{datadesc}{NAMESPACE_URL}
-URL namespace UUID.
+When this namespace is specified,
+the \var{name} string is a URL.
 \end{datadesc}
 
 \begin{datadesc}{NAMESPACE_OID}
-ISO OID namespace UUID.
+When this namespace is specified,
+the \var{name} string is an ISO OID.
 \end{datadesc}
 
 \begin{datadesc}{NAMESPACE_X500}
-X.500 DN namespace UUID.
+When this namespace is specified,
+the \var{name} string is an X.500 DN in DER or a text output format.
 \end{datadesc}
 
 The \module{uuid} module defines the following constants
@@ -178,11 +176,11 @@ Reserved for NCS compatibility.
 \end{datadesc}
 
 \begin{datadesc}{RFC_4122}
-Uses UUID layout specified in \rfc{4122}.
+Specifies the UUID layout given in \rfc{4122}.
 \end{datadesc}
 
 \begin{datadesc}{RESERVED_MICROSOFT}
-Reserved for Microsoft backward compatibility.
+Reserved for Microsoft compatibility.
 \end{datadesc}
 
 \begin{datadesc}{RESERVED_FUTURE}
@@ -192,12 +190,13 @@ Reserved for future definition.
 
 \begin{seealso}
   \seerfc{4122}{A Universally Unique IDentifier (UUID) URN Namespace}{
-          This specifies a Uniform Resource Name namespace for UUIDs.}
+This specification defines a Uniform Resource Name namespace for UUIDs,
+the internal format of UUIDs, and methods of generating UUIDs.}
 \end{seealso}
 
 \subsection{Example \label{uuid-example}}
 
-Here is a typical usage:
+Here are some examples of typical usage of the \module{uuid} module:
 \begin{verbatim}
 >>> import uuid
 
index 4b12e9d65a5b09395f4c6a721b48ab08390373f2..37ded9fdaef2f56547b5ef2b8e2d92027d1c6ab6 100755 (executable)
@@ -26,8 +26,9 @@ checks WSGI servers and applications for conformance to the
 WSGI specification (\pep{333}).
 
 % XXX If you're just trying to write a web application...
-% XXX should create a URL on python.org to point people to.
 
+See \url{http://www.wsgi.org} for more information about WSGI,
+and links to tutorials and other resources.
 
 
 
index b08920ccb1374f7b671b672084eb52000505333f..c870d262c62b17fdad3a12c3f4a47fad1abe4554 100644 (file)
@@ -68,7 +68,10 @@ Python type):
   \lineii{arrays}{Any Python sequence type containing conformable
                   elements. Arrays are returned as lists}
   \lineii{structures}{A Python dictionary. Keys must be strings,
-                      values may be any conformable type.}
+                      values may be any conformable type. Objects
+                      of user-defined classes can be passed in;
+                      only their \var{__dict__} attribute is 
+                      transmitted.}
   \lineii{dates}{in seconds since the epoch (pass in an instance of the
                  \class{DateTime} class) or a
                  \class{\refmodule{datetime}.datetime},
@@ -100,6 +103,10 @@ described below.
 compatibility.  New code should use \class{ServerProxy}.
 
 \versionchanged[The \var{use_datetime} flag was added]{2.5}
+
+\versionchanged[Instances of new-style classes can be passed in
+if they have an \var{__dict__} attribute and don't have a base class
+that is marshalled in a special way]{2.6}
 \end{classdesc}
 
 
index 0795b47a34aedf8ef1a65b80339cb8eec53eae05..7e5358178d4c0a0476c65f359422790b9db3b03e 100644 (file)
@@ -17,7 +17,7 @@ cur.executescript("""
 
     insert into book(title, author, published)
     values (
-        'Dirk Gently''s Holistic Detective Agency
+        'Dirk Gently''s Holistic Detective Agency',
         'Douglas Adams',
         1987
     );
index db52cbdedaad0c7f91ea26d8212a4a08fcf5ed32..20b23730d2e0be931abeeb040428303b3bb9da03 100644 (file)
@@ -318,7 +318,7 @@ the name of a widget.
 \item[\var{options}]
 configure the widget's appearance and in some cases, its
 behavior.  The options come in the form of a list of flags and values.
-Flags are proceeded by a `-', like \UNIX{} shell command flags, and
+Flags are preceded by a `-', like \UNIX{} shell command flags, and
 values are put in quotes if they are more than one word.
 \end{description}
 
index ab93c7cf8a118dba15ee8768bcf2ad9e5d155773..cf0301ebd6d840a9358229dd270b9f306dd00fd3 100644 (file)
@@ -883,6 +883,12 @@ sub process_grammar_files(){
             $filename = 'grammar.txt';
         }
         open(GRAMMAR, ">$filename") || die "\n$!\n";
+        print GRAMMAR "##################################################\n";
+        print GRAMMAR "#     This file is only meant to be a guide,     #\n";
+        print GRAMMAR "#    and differs in small ways from the real     #\n";
+        print GRAMMAR "#   grammar.  The exact reference is the file    #\n";
+        print GRAMMAR "#  Grammar/Grammar distributed with the source.  #\n";
+        print GRAMMAR "##################################################\n";
         print GRAMMAR strip_grammar_markup($DefinedGrammars{$lang});
         close(GRAMMAR);
         print "Wrote grammar file $filename\n";
index 7eddfcd6dc6bf625fa50b657a1225db65d12e4be..fb57eb08c39a5910870810673bf378fa847fa1d6 100644 (file)
@@ -378,6 +378,41 @@ additional example of a mutable sequence type.
 
 \end{description} % Sequences
 
+
+\item[Set types]
+These represent unordered, finite sets of unique, immutable objects.
+As such, they cannot be indexed by any subscript. However, they can be
+iterated over, and the built-in function \function{len()} returns the
+number of items in a set. Common uses for sets are
+fast membership testing, removing duplicates from a sequence, and
+computing mathematical operations such as intersection, union, difference,
+and symmetric difference.
+\bifuncindex{len}
+\obindex{set type}
+
+For set elements, the same immutability rules apply as for dictionary
+keys. Note that numeric types obey the normal rules for numeric
+comparison: if two numbers compare equal (e.g., \code{1} and
+\code{1.0}), only one of them can be contained in a set.
+
+There are currently two intrinsic set types:
+
+\begin{description}
+
+\item[Sets]
+These\obindex{set} represent a mutable set. They are created by the
+built-in \function{set()} constructor and can be modified afterwards
+by several methods, such as \method{add()}.
+
+\item[Frozen sets]
+These\obindex{frozenset} represent an immutable set. They are created by
+the built-in \function{frozenset()} constructor. As a frozenset is
+immutable and hashable, it can be used again as an element of another set,
+or as a dictionary key.
+
+\end{description} % Set types
+
+
 \item[Mappings]
 These represent finite sets of objects indexed by arbitrary index sets.
 The subscript notation \code{a[k]} selects the item indexed
@@ -761,7 +796,7 @@ user-defined method object whose associated class is the class
 (call it~\class{C}) of the instance for which the attribute reference
 was initiated or one of its bases,
 it is transformed into a bound user-defined method object whose
-\member{im_class} attribute is~\class{C} whose \member{im_self} attribute
+\member{im_class} attribute is~\class{C} and whose \member{im_self} attribute
 is the instance. Static method and class method objects are also
 transformed, as if they had been retrieved from class~\class{C};
 see above under ``Classes''. See section~\ref{descriptors} for
index c3d8df0cd898ba3e772e9447829e1941df153f8e..404234f68e4960913c5a3bde221064e115f78a96 100644 (file)
@@ -1,5 +1,6 @@
 ;;; py2texi.el -- Conversion of Python LaTeX documentation to Texinfo
 
+;; Copyright (C) 2006  Jeroen Dekkers <jeroen@dekkers.cx>
 ;; Copyright (C) 1998, 1999, 2001, 2002 Milan Zamazal
 
 ;; Author: Milan Zamazal <pdm@zamazal.org>
@@ -168,6 +169,7 @@ Otherwise a generated Info file name is used.")
      "@end table\n")
     ("productionlist" 0 "\n@table @code\n" "@end table\n")
     ("quotation" 0 "@quotation" "@end quotation")
+    ("quote" 0 "@quotation" "@end quotation")
     ("seealso" 0 "See also:\n@table @emph\n" "@end table\n")
     ("seealso*" 0 "@table @emph\n" "@end table\n")
     ("sloppypar" 0 "" "")
@@ -246,11 +248,12 @@ Both BEGIN and END are evaled.  Moreover, you can reference arguments through
     ("env" 1 "@code{\\1}")
     ("EOF" 0 "@code{EOF}")
     ("email" 1 "@email{\\1}")
+    ("em" 1 "@emph{\\1}")
     ("emph" 1 "@emph{\\1}")
     ("envvar" 1 "@env{\\1}")
     ("exception" 1 "@code{\\1}")
     ("exindex" 1 (progn (setq obindex t) "@obindex{\\1}\ 1"))
-    ("fi" 0 (concat "@end " last-if))
+    ("fi" 0 (if (equal last-if "ifx") "" (concat "@end " last-if)))
     ("file" 1 "@file{\\1}")
     ("filenq" 1 "@file{\\1}")
     ("filevar" 1 "@file{@var{\\1}}")
@@ -262,6 +265,7 @@ Both BEGIN and END are evaled.  Moreover, you can reference arguments through
     ("grammartoken" 1 "@code{\\1}")
     ("guilabel" 1 "@strong{\\1}")
     ("hline" 0 "")
+    ("ifx" 0 (progn (setq last-if "ifx") ""))
     ("ifhtml" 0 (concat "@" (setq last-if "ifinfo")))
     ("iftexi" 0 (concat "@" (setq last-if "ifinfo")))
     ("index" 1 (progn (setq cindex t) "@cindex{\\1}\ 1"))
@@ -284,6 +288,7 @@ Both BEGIN and END are evaled.  Moreover, you can reference arguments through
     ("lineiii" 3 "@item \\1 @tab \\2 @tab \\3")
     ("lineiv" 4 "@item \\1 @tab \\2 @tab \\3 @tab \\4")
     ("linev" 5 "@item \\1 @tab \\2 @tab \\3 @tab \\4 @tab \\5")
+    ("locallinewidth" 0 "")
     ("localmoduletable" 0 "")
     ("longprogramopt" 1 "@option{--\\1}")
     ("macro" 1 "@code{@backslash{}\\1}")
@@ -307,6 +312,7 @@ Both BEGIN and END are evaled.  Moreover, you can reference arguments through
     ("moreargs" 0 "@dots{}")
     ("n" 0 "@backslash{}n")
     ("newcommand" 2 "")
+    ("newlength" 1 "")
     ("newsgroup" 1 "@samp{\\1}")
     ("nodename" 1
      (save-excursion
@@ -322,6 +328,7 @@ Both BEGIN and END are evaled.  Moreover, you can reference arguments through
     ("opindex" 1 (progn (setq cindex t) "@cindex{\\1}\ 1"))
     ("option" 1 "@option{\\1}")
     ("optional" 1 "[\\1]")
+    ("paragraph" 1 "@subsubheading \\1")
     ("pep" 1 (progn (setq cindex t) "PEP@ \\1@cindex PEP \\1\n"))
     ("pi" 0 "pi")
     ("platform" 1 "")
@@ -363,6 +370,7 @@ Both BEGIN and END are evaled.  Moreover, you can reference arguments through
     ("seetitle" 1 "@cite{\\1}")
     ("seeurl" 2 "\n@table @url\n@item \\1\n\\2\n@end table\n")
     ("setindexsubitem" 1 (progn (setq cindex t) "@cindex \\1\ 1"))
+    ("setlength" 2 "")
     ("setreleaseinfo" 1 (progn (setq py2texi-releaseinfo "")))
     ("setshortversion" 1
      (progn (setq py2texi-python-short-version (match-string 1 string)) ""))
@@ -382,8 +390,8 @@ Both BEGIN and END are evaled.  Moreover, you can reference arguments through
     ("textasciicircum" 0 "^")
     ("textbackslash" 0 "@backslash{}")
     ("textbar" 0 "|")
-    ; Some common versions of Texinfo don't support @euro yet:
-    ("texteuro" 0 "@euro{}")
+    ("textbf" 1 "@strong{\\1}")
+    ("texteuro" 0 "@euro{}")
     ; Unfortunately, this alternate spelling doesn't actually apply to
     ; the usage found in Python Tutorial, which actually requires a
     ; Euro symbol to make sense, so this is commented out as well.
@@ -394,6 +402,7 @@ Both BEGIN and END are evaled.  Moreover, you can reference arguments through
     ("textrm" 1 "\\1")
     ("texttt" 1 "@code{\\1}")
     ("textunderscore" 0 "_")
+    ("tilde" 0 "~")
     ("title" 1 (progn (setq title (match-string 1 string)) "@settitle \\1"))
     ("today" 0 "@today{}")
     ("token" 1 "@code{\\1}")
@@ -402,6 +411,7 @@ Both BEGIN and END are evaled.  Moreover, you can reference arguments through
     ("u" 0 "@backslash{}u")
     ("ulink" 2 "\\1")
     ("UNIX" 0 "UNIX")
+    ("undefined" 0 "")
     ("unspecified" 0 "@dots{}")
     ("url" 1 "@url{\\1}")
     ("usepackage" 1 "")
@@ -534,15 +544,20 @@ Each list item is of the form (COMMAND ARGNUM SUBSTITUTION) where:
        beg
        end)
     (py2texi-search-safe "\\\\begin{\\(verbatim\\|displaymath\\)}"
-      (replace-match "@example")
-      (setq beg (copy-marker (point) nil))
-      (re-search-forward "\\\\end{\\(verbatim\\|displaymath\\)}")
-      (setq end (copy-marker (match-beginning 0) nil))
-      (replace-match "@end example")
-      (py2texi-texinfo-escape beg end)
-      (put-text-property (- beg (length "@example"))
-                        (+ end (length "@end example"))
-                        'py2texi-protected t))
+      (when (save-excursion
+             ; Make sure we aren't looking at a commented out version
+             ; of a verbatim environment
+             (beginning-of-line)
+             (not (looking-at "%")))
+       (replace-match "@example ")
+       (setq beg (copy-marker (point) nil))
+       (re-search-forward "\\\\end{\\(verbatim\\|displaymath\\)}")
+       (setq end (copy-marker (match-beginning 0) nil))
+       (replace-match "@end example")
+       (py2texi-texinfo-escape beg end)
+       (put-text-property (- beg (length "@example "))
+                          (+ end (length "@end example"))
+                          'py2texi-protected t)))
     (py2texi-search-safe "\\\\verb\\([^a-z]\\)"
       (setq delimiter (match-string 1))
       (replace-match "@code{")
@@ -883,6 +898,10 @@ Do not include .ind files."
 
 (defun py2texi-fix-braces ()
   "Escape braces for Texinfo."
+  (py2texi-search "{@{}"
+    (replace-match "@{"))
+  (py2texi-search "{@}}"
+    (replace-match "@}"))
   (let (string)
     (py2texi-search "{"
        (unless (or (py2texi-protected)
index 2daf812e862adb16fce60a4bb9cd57cc57bc0871..c76c51853bdef1600a2001537891c2f639b95304 100644 (file)
@@ -2831,7 +2831,7 @@ Now what happens when the user writes \code{from Sound.Effects import
 *}?  Ideally, one would hope that this somehow goes out to the
 filesystem, finds which submodules are present in the package, and
 imports them all.  Unfortunately, this operation does not work very
-well on Mac and Windows platforms, where the filesystem does not
+well on Windows platforms, where the filesystem does not
 always have accurate information about the case of a filename!  On
 these platforms, there is no guaranteed way to know whether a file
 \file{ECHO.PY} should be imported as a module \module{echo},
@@ -3036,6 +3036,7 @@ Here are two ways to write a table of squares and cubes:
  8  64  512
  9  81  729
 10 100 1000
+
 >>> for x in range(1,11):
 ...     print '%2d %3d %4d' % (x, x*x, x*x*x)
 ... 
@@ -3051,8 +3052,9 @@ Here are two ways to write a table of squares and cubes:
 10 100 1000
 \end{verbatim}
 
-(Note that one space between each column was added by the way
-\keyword{print} works: it always adds spaces between its arguments.)
+(Note that in the first example, one space between each column was
+added by the way \keyword{print} works: it always adds spaces between
+its arguments.)
 
 This example demonstrates the \method{rjust()} method of string objects,
 which right-justifies a string in a field of a given width by padding
@@ -3521,7 +3523,7 @@ be accessed or printed directly without having to reference \code{.args}.
 
 But use of \code{.args} is discouraged.  Instead, the preferred use is to pass
 a single argument to an exception (which can be a tuple if multiple arguments
-are needed) and have it bound to the \code{message} attribute.  One my also
+are needed) and have it bound to the \code{message} attribute.  One may also
 instantiate an exception first before raising it and add any attributes to it
 as desired.
 
index bf939c0bedcb5affa817f5089a7e84cc7c9c9874..fb68acc03c7d32a32a54c65bc6d72ca60d2a6c53 100644 (file)
@@ -409,7 +409,7 @@ is always executed, or one or more \keyword{except} blocks to catch
 specific exceptions.  You couldn't combine both \keyword{except} blocks and a
 \keyword{finally} block, because generating the right bytecode for the
 combined version was complicated and it wasn't clear what the
-semantics of the combined should be.  
+semantics of the combined statement should be.  
 
 Guido van~Rossum spent some time working with Java, which does support the
 equivalent of combining \keyword{except} blocks and a
@@ -540,10 +540,10 @@ Traceback (most recent call last):
 StopIteration
 \end{verbatim}
 
-Because \keyword{yield} will often be returning \constant{None}, you
+\keyword{yield} will usually return \constant{None}, so you
 should always check for this case.  Don't just use its value in
 expressions unless you're sure that the \method{send()} method
-will be the only method used resume your generator function.
+will be the only method used to resume your generator function.
 
 In addition to \method{send()}, there are two other new methods on
 generators:
@@ -683,22 +683,22 @@ with lock:
 The lock is acquired before the block is executed and always released once 
 the block is complete.
 
-The \module{decimal} module's contexts, which encapsulate the desired
-precision and rounding characteristics for computations, provide a 
-\method{context_manager()} method for getting a context manager:
+The new \function{localcontext()} function in the \module{decimal} module
+makes it easy to save and restore the current decimal context, which
+encapsulates the desired precision and rounding characteristics for
+computations:
 
 \begin{verbatim}
-import decimal
+from decimal import Decimal, Context, localcontext
 
 # Displays with default precision of 28 digits
-v1 = decimal.Decimal('578')
-print v1.sqrt()
+v = Decimal('578')
+print v.sqrt()
 
-ctx = decimal.Context(prec=16) 
-with ctx.context_manager():
+with localcontext(Context(prec=16)):
     # All code in this block uses a precision of 16 digits.
     # The original context is restored on exiting the block.
-    print v1.sqrt()
+    print v.sqrt()
 \end{verbatim}
 
 \subsection{Writing Context Managers\label{context-managers}}
@@ -1115,12 +1115,14 @@ Some examples:
 \begin{verbatim}
 >>> ('http://www.python.org').partition('://')
 ('http', '://', 'www.python.org')
->>> (u'Subject: a quick question').partition(':')
-(u'Subject', u':', u' a quick question')
 >>> ('file:/usr/share/doc/index.html').partition('://')
 ('file:/usr/share/doc/index.html', '', '')
+>>> (u'Subject: a quick question').partition(':')
+(u'Subject', u':', u' a quick question')
 >>> 'www.python.org'.rpartition('.')
 ('www.python', '.', 'org')
+>>> 'www.python.org'.rpartition(':')
+('', '', 'www.python.org')
 \end{verbatim}
 
 (Implemented by Fredrik Lundh following a suggestion by Raymond Hettinger.)
@@ -2114,14 +2116,16 @@ The pysqlite module (\url{http://www.pysqlite.org}), a wrapper for the
 SQLite embedded database, has been added to the standard library under
 the package name \module{sqlite3}.  
 
-SQLite is a C library that provides a SQL-language database that
-stores data in disk files without requiring a separate server process.
+SQLite is a C library that provides a lightweight disk-based database
+that doesn't require a separate server process and allows accessing
+the database using a nonstandard variant of the SQL query language.
+Some applications can use SQLite for internal data storage.  It's also
+possible to prototype an application using SQLite and then port the
+code to a larger database such as PostgreSQL or Oracle.
 pysqlite was written by Gerhard H\"aring and provides a SQL interface
 compliant with the DB-API 2.0 specification described by
-\pep{249}. This means that it should be possible to write the first
-version of your applications using SQLite for data storage.  If
-switching to a larger database such as PostgreSQL or Oracle is
-later necessary, the switch should be relatively easy.
+\pep{249}. 
 
 If you're compiling the Python source yourself, note that the source
 tree doesn't include the SQLite code, only the wrapper module.
@@ -2148,8 +2152,8 @@ c = conn.cursor()
 
 # Create table
 c.execute('''create table stocks
-(date timestamp, trans varchar, symbol varchar,
- qty decimal, price decimal)''')
+(date text, trans text, symbol text,
+ qty real, price real)''')
 
 # Insert a row of data
 c.execute("""insert into stocks
diff --git a/Doc/whatsnew/whatsnew26.tex b/Doc/whatsnew/whatsnew26.tex
new file mode 100644 (file)
index 0000000..afe067e
--- /dev/null
@@ -0,0 +1,137 @@
+\documentclass{howto}
+\usepackage{distutils}
+% $Id$
+
+
+\title{What's New in Python 2.6}
+\release{0.0}
+\author{A.M. Kuchling}
+\authoraddress{\email{amk@amk.ca}}
+
+\begin{document}
+\maketitle
+\tableofcontents
+
+This article explains the new features in Python 2.6.  No release date
+for Python 2.6 has been set; it will probably be released in late 2007.
+
+% Compare with previous release in 2 - 3 sentences here.
+
+This article doesn't attempt to provide a complete specification of
+the new features, but instead provides a convenient overview.  For
+full details, you should refer to the documentation for Python 2.6.
+% add hyperlink when the documentation becomes available online.
+If you want to understand the complete implementation and design
+rationale, refer to the PEP for a particular new feature.
+
+
+%======================================================================
+
+% Large, PEP-level features and changes should be described here.
+
+
+%======================================================================
+\section{Other Language Changes}
+
+Here are all of the changes that Python 2.6 makes to the core Python
+language.
+
+\begin{itemize}
+\item TBD
+
+\end{itemize}
+
+
+%======================================================================
+\subsection{Optimizations}
+
+\begin{itemize}
+
+\item Optimizations should be described here.
+
+\end{itemize}
+
+The net result of the 2.6 optimizations is that Python 2.6 runs the
+pystone benchmark around XX\% faster than Python 2.5.
+
+
+%======================================================================
+\section{New, Improved, and Deprecated Modules}
+
+As usual, Python's standard library received a number of enhancements and
+bug fixes.  Here's a partial list of the most notable changes, sorted
+alphabetically by module name. Consult the
+\file{Misc/NEWS} file in the source tree for a more
+complete list of changes, or look through the CVS logs for all the
+details.
+
+\begin{itemize}
+
+\item The \module{smtplib} module now supports SMTP over 
+SSL thanks to the addition of the \class{SMTP_SSL} class.
+This class supports an interface identical to the existing \class{SMTP} 
+class. (Contributed by Monty Taylor.)
+
+\end{itemize}
+
+
+%======================================================================
+% whole new modules get described in \subsections here
+
+
+% ======================================================================
+\section{Build and C API Changes}
+
+Changes to Python's build process and to the C API include:
+
+\begin{itemize}
+
+\item Detailed changes are listed here.
+
+\end{itemize}
+
+
+%======================================================================
+\subsection{Port-Specific Changes}
+
+Platform-specific changes go here.
+
+
+%======================================================================
+\section{Other Changes and Fixes \label{section-other}}
+
+As usual, there were a bunch of other improvements and bugfixes
+scattered throughout the source tree.  A search through the change
+logs finds there were XXX patches applied and YYY bugs fixed between
+Python 2.5 and 2.6.  Both figures are likely to be underestimates.
+
+Some of the more notable changes are:
+
+\begin{itemize}
+
+\item Details go here.
+
+\end{itemize}
+
+
+%======================================================================
+\section{Porting to Python 2.6}
+
+This section lists previously described changes that may require
+changes to your code:
+
+\begin{itemize}
+
+\item Everything is all in the details!
+
+\end{itemize}
+
+
+%======================================================================
+\section{Acknowledgements \label{acks}}
+
+The author would like to thank the following people for offering
+suggestions, corrections and assistance with various drafts of this
+article: .
+
+\end{document}
index 357afe1a3383a24a90d7aa66651e46b9dce2e78d..87b975dfc995c0afb45c5a43b35ca5b091d05a3f 100644 (file)
@@ -288,9 +288,10 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
 
        */
 
+       /* Declared elsewhere
+
      PyAPI_FUNC(int) PyCallable_Check(PyObject *o);
 
-       /*
         Determine if the object, o, is callable.  Return 1 if the
         object is callable and 0 otherwise.
 
index 23d5d3a0939ab7e9b4f2be861672add94ca98215..761d960991729f22e1429a46a465a945891843d6 100644 (file)
@@ -24,7 +24,7 @@ PyAPI_FUNC(PyObject *) _Py_VaBuildValue_SizeT(const char *, va_list);
 #endif
 
 PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...);
-PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...);
+PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...) Py_FORMAT_PARSETUPLE(PyArg_ParseTuple, 2, 3);
 PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
                                                   const char *, char **, ...);
 PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, const char *, Py_ssize_t, Py_ssize_t, ...);
index be6c51fc5aade8fb5671150941b7a9abfccad6f5..36d517cd99dac61cf8cb132e0714d48aa8cb135c 100644 (file)
@@ -3,6 +3,10 @@
 
 #include "pyconfig.h" /* include for defines */
 
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
 /**************************************************************************
 Symbols and macros to supply platform-independent interfaces to basic
 C language & library operations whose spellings vary across platforms.
@@ -126,7 +130,7 @@ typedef Py_intptr_t Py_ssize_t;
  * Py_ssize_t on the platform.
  */
 #ifndef PY_FORMAT_SIZE_T
-#   if SIZEOF_SIZE_T == SIZEOF_INT
+#   if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__)
 #       define PY_FORMAT_SIZE_T ""
 #   elif SIZEOF_SIZE_T == SIZEOF_LONG
 #       define PY_FORMAT_SIZE_T "l"
@@ -745,6 +749,15 @@ typedef    struct fd_set {
 #define Py_GCC_ATTRIBUTE(x) __attribute__(x)
 #endif
 
+/*
+ * Add PyArg_ParseTuple format where available.
+ */
+#ifdef HAVE_ATTRIBUTE_FORMAT_PARSETUPLE
+#define Py_FORMAT_PARSETUPLE(func,p1,p2) __attribute__((format(func,p1,p2)))
+#else
+#define Py_FORMAT_PARSETUPLE(func,p1,p2)
+#endif
+
 /* Eliminate end-of-loop code not reached warnings from SunPro C
  * when using do{...}while(0) macros
  */
index 6dc53b9e0d269c03d8fadc1b6cc3fe467a23f93a..65c8ce557db21df6db8111f1ea0afe1dd1e2840d 100644 (file)
@@ -199,11 +199,11 @@ class MissingSectionHeaderError(ParsingError):
         self.line = line
 
 
-
 class RawConfigParser:
-    def __init__(self, defaults=None):
-        self._sections = {}
-        self._defaults = {}
+    def __init__(self, defaults=None, dict_type=dict):
+        self._dict = dict_type
+        self._sections = self._dict()
+        self._defaults = self._dict()
         if defaults:
             for key, value in defaults.items():
                 self._defaults[self.optionxform(key)] = value
@@ -224,7 +224,7 @@ class RawConfigParser:
         """
         if section in self._sections:
             raise DuplicateSectionError(section)
-        self._sections[section] = {}
+        self._sections[section] = self._dict()
 
     def has_section(self, section):
         """Indicate whether the named section is present in the configuration.
@@ -307,7 +307,7 @@ class RawConfigParser:
         except KeyError:
             if section != DEFAULTSECT:
                 raise NoSectionError(section)
-            d2 = {}
+            d2 = self._dict()
         d = self._defaults.copy()
         d.update(d2)
         if "__name__" in d:
@@ -453,7 +453,8 @@ class RawConfigParser:
                     elif sectname == DEFAULTSECT:
                         cursect = self._defaults
                     else:
-                        cursect = {'__name__': sectname}
+                        cursect = self._dict()
+                        cursect['__name__'] = sectname
                         self._sections[sectname] = cursect
                     # So sections can't start with a continuation line
                     optname = None
index 0f80584b7ae86d8e3a514eaa773d91f005b655c5..79b0abf1418648aeec070dd63290bcd5117bcd5c 100644 (file)
@@ -26,7 +26,7 @@ class Queue:
         self._init(maxsize)
         # mutex must be held whenever the queue is mutating.  All methods
         # that acquire mutex must release it before returning.  mutex
-        # is shared between the two conditions, so acquiring and
+        # is shared between the three conditions, so acquiring and
         # releasing the conditions also acquires and releases mutex.
         self.mutex = threading.Lock()
         # Notify not_empty whenever an item is added to the queue; a
index 3b0a6a52aa38de587eab54e6459f1122fe5ec5f7..c6f6958d5e235f3290db3f00f3967911c14ad4c8 100644 (file)
@@ -264,8 +264,9 @@ class SimpleXMLRPCDispatcher:
                                        encoding=self.encoding)
         except:
             # report exception back to server
+            exc_type, exc_value, exc_tb = sys.exc_info()
             response = xmlrpclib.dumps(
-                xmlrpclib.Fault(1, "%s:%s" % sys.exc_info()[:2]),
+                xmlrpclib.Fault(1, "%s:%s" % (exc_type, exc_value)),
                 encoding=self.encoding, allow_none=self.allow_none,
                 )
 
@@ -364,9 +365,10 @@ class SimpleXMLRPCDispatcher:
                      'faultString' : fault.faultString}
                     )
             except:
+                exc_type, exc_value, exc_tb = sys.exc_info()
                 results.append(
                     {'faultCode' : 1,
-                     'faultString' : "%s:%s" % sys.exc_info()[:2]}
+                     'faultString' : "%s:%s" % (exc_type, exc_value)}
                     )
         return results
 
index ce8525b7169ba39e1e1f981d7ccd738fe947dd57..3fb56020e29fb1e0a8ce81a2971935df8d282f90 100644 (file)
@@ -306,7 +306,7 @@ def strptime(data_string, format="%a %b %d %H:%M:%S %Y"):
         _cache_lock.release()
     found = format_regex.match(data_string)
     if not found:
-        raise ValueError("time data did not match format:  data=%s  fmt=%s" %
+        raise ValueError("time data %r does not match format %r" %
                          (data_string, format))
     if len(data_string) != found.end():
         raise ValueError("unconverted data remains: %s" %
index c9f4cc677528a7822f71860f34c16d1ceeb10974..93fddf7f99a4473f971474745a74330059150010 100644 (file)
@@ -40,8 +40,11 @@ def register(func, *targs, **kargs):
     func - function to be called at exit
     targs - optional arguments to pass to func
     kargs - optional keyword arguments to pass to func
+
+    func is returned to facilitate usage as a decorator.
     """
     _exithandlers.append((func, targs, kargs))
+    return func
 
 if hasattr(sys, "exitfunc"):
     # Assume it's another registered exit function - append it to our list
index c196cd8a841b5c8c71339938e16bd02beccca7ef..41a5e1470c141dd91acae96f35c4e74390200058 100755 (executable)
@@ -308,7 +308,7 @@ def decode(input, output):
 
 
 def encodestring(s):
-    """Encode a string."""
+    """Encode a string into multiple lines of base-64 data."""
     pieces = []
     for i in range(0, len(s), MAXBINSIZE):
         chunk = s[i : i + MAXBINSIZE]
index 13058832d63f0b382c48ce1315b5b9e0a9c0e174..bba6a5b6a1fcf7c74fd1e24b9fcd3eb2b9058ed6 100644 (file)
@@ -69,6 +69,10 @@ class dbobjTestCase(unittest.TestCase):
         self.db.close()
         self.env.close()
 
+    def test03_dbobj_type_before_open(self):
+        # Ensure this doesn't cause a segfault.
+        self.assertRaises(db.DBInvalidArgError, db.DB().type)
+
 #----------------------------------------------------------------------
 
 def test_suite():
index fa8fd131970906efd5c6b78c59d65b37570cd6a3..80b3b7abf315b27c0604349d6a9e91c5f6340dc5 100755 (executable)
@@ -799,8 +799,10 @@ class FormContentDict(UserDict.UserDict):
     form.dict == {key: [val, val, ...], ...}
 
     """
-    def __init__(self, environ=os.environ):
-        self.dict = self.data = parse(environ=environ)
+    def __init__(self, environ=os.environ, keep_blank_values=0, strict_parsing=0):
+        self.dict = self.data = parse(environ=environ,
+                                      keep_blank_values=keep_blank_values,
+                                      strict_parsing=strict_parsing)
         self.query_string = environ['QUERY_STRING']
 
 
index 1518d75f9d20fd926558077dea05cba49a38662f..f834b8dd17a8f14423e9da8b2acbb79b38873bee 100644 (file)
@@ -329,6 +329,12 @@ class StreamWriter(Codec):
         """
         return getattr(self.stream, name)
 
+    def __enter__(self):
+        return self
+
+    def __exit__(self, type, value, tb):
+        self.stream.close()
+
 ###
 
 class StreamReader(Codec):
@@ -568,6 +574,12 @@ class StreamReader(Codec):
         """
         return getattr(self.stream, name)
 
+    def __enter__(self):
+        return self
+
+    def __exit__(self, type, value, tb):
+        self.stream.close()
+
 ###
 
 class StreamReaderWriter:
@@ -641,6 +653,14 @@ class StreamReaderWriter:
         """
         return getattr(self.stream, name)
 
+    # these are needed to make "with codecs.open(...)" work properly
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, type, value, tb):
+        self.stream.close()
+
 ###
 
 class StreamRecoder:
@@ -751,6 +771,12 @@ class StreamRecoder:
         """
         return getattr(self.stream, name)
 
+    def __enter__(self):
+        return self
+
+    def __exit__(self, type, value, tb):
+        self.stream.close()
+
 ### Shortcuts
 
 def open(filename, mode='rb', encoding=None, errors='strict', buffering=1):
@@ -824,9 +850,10 @@ def EncodedFile(file, data_encoding, file_encoding=None, errors='strict'):
     """
     if file_encoding is None:
         file_encoding = data_encoding
-    info = lookup(data_encoding)
-    sr = StreamRecoder(file, info.encode, info.decode,
-                       info.streamreader, info.streamwriter, errors)
+    data_info = lookup(data_encoding)
+    file_info = lookup(file_encoding)
+    sr = StreamRecoder(file, data_info.encode, data_info.decode,
+                       file_info.streamreader, file_info.streamwriter, errors)
     # Add attributes to simplify introspection
     sr.data_encoding = data_encoding
     sr.file_encoding = file_encoding
index 39b4b165c3771477d058bd2f61790be431acf280..851417b5d5177b5d8ac894c82a9889b3b2bfaca1 100644 (file)
@@ -117,7 +117,8 @@ def hsv_to_rgb(h, s, v):
     p = v*(1.0 - s)
     q = v*(1.0 - s*f)
     t = v*(1.0 - s*(1.0-f))
-    if i%6 == 0: return v, t, p
+    i = i%6
+    if i == 0: return v, t, p
     if i == 1: return q, v, p
     if i == 2: return p, v, t
     if i == 3: return p, q, v
index b08a307b8a75bf87a8a595f25209a21d1b8358e7..353c2c992f1d7481485b095042c62a019614a034 100644 (file)
@@ -577,12 +577,11 @@ class CodeGenerator:
     def visitListComp(self, node):
         self.set_lineno(node)
         # setup list
-        append = "$append%d" % self.__list_count
+        tmpname = "$list%d" % self.__list_count
         self.__list_count = self.__list_count + 1
         self.emit('BUILD_LIST', 0)
         self.emit('DUP_TOP')
-        self.emit('LOAD_ATTR', 'append')
-        self._implicitNameOp('STORE', append)
+        self._implicitNameOp('STORE', tmpname)
 
         stack = []
         for i, for_ in zip(range(len(node.quals)), node.quals):
@@ -594,10 +593,9 @@ class CodeGenerator:
                 self.visit(if_, cont)
             stack.insert(0, (start, cont, anchor))
 
-        self._implicitNameOp('LOAD', append)
+        self._implicitNameOp('LOAD', tmpname)
         self.visit(node.expr)
-        self.emit('CALL_FUNCTION', 1)
-        self.emit('POP_TOP')
+        self.emit('LIST_APPEND')
 
         for start, cont, anchor in stack:
             if cont:
@@ -608,7 +606,7 @@ class CodeGenerator:
                 self.nextBlock(skip_one)
             self.emit('JUMP_ABSOLUTE', start)
             self.startBlock(anchor)
-        self._implicitNameOp('DELETE', append)
+        self._implicitNameOp('DELETE', tmpname)
 
         self.__list_count = self.__list_count - 1
 
index 78a2ab820fcd31d706d026cb479d23852a9c9c02..eb5d97e1879610af67355d1305979f4cdbe71363 100644 (file)
@@ -427,6 +427,8 @@ if sizeof(c_uint) == sizeof(c_void_p):
     c_size_t = c_uint
 elif sizeof(c_ulong) == sizeof(c_void_p):
     c_size_t = c_ulong
+elif sizeof(c_ulonglong) == sizeof(c_void_p):
+    c_size_t = c_ulonglong
 
 # functions
 
index 2ae54052d176983e3d3019c0bf686e255693b810..2b745c206efdb3e8e5251709a341a47b9f6d0976 100644 (file)
@@ -37,7 +37,8 @@ def requires(resource, msg=None):
 
 def find_package_modules(package, mask):
     import fnmatch
-    if hasattr(package, "__loader__"):
+    if (hasattr(package, "__loader__") and
+            hasattr(package.__loader__, '_files')):
         path = package.__name__.replace(".", os.path.sep)
         mask = os.path.join(path, mask)
         for fnm in package.__loader__._files.iterkeys():
index 92c4669b2e3ba2d96118da32ce374ec1e107866e..2867cbf93e6c05855e9b6e2c1673c42295e96d18 100644 (file)
@@ -215,5 +215,14 @@ class BitFieldTest(unittest.TestCase):
                         ("b", c_ubyte, 4)]
         self.failUnlessEqual(sizeof(X), sizeof(c_byte))
 
+    def test_anon_bitfields(self):
+        # anonymous bit-fields gave a strange error message
+        class X(Structure):
+            _fields_ = [("a", c_byte, 4),
+                        ("b", c_ubyte, 4)]
+        class Y(Structure):
+            _anonymous_ = ["_"]
+            _fields_ = [("_", X)]
+
 if __name__ == "__main__":
     unittest.main()
index 9d96a5445e244c1b5a40b9ded358f558ab6e3da2..f47fc37b3f025089b30db505dc3034ad5a400a60 100644 (file)
@@ -101,6 +101,19 @@ class Callbacks(unittest.TestCase):
             after = grc(o)
             self.failUnlessEqual((after, o), (before, o))
 
+    def test_unsupported_restype_1(self):
+        # Only "fundamental" result types are supported for callback
+        # functions, the type must have a non-NULL stgdict->setfunc.
+        # POINTER(c_double), for example, is not supported.
+
+        prototype = self.functype.im_func(POINTER(c_double))
+        # The type is checked when the prototype is called
+        self.assertRaises(TypeError, prototype, lambda: None)
+
+    def test_unsupported_restype_2(self):
+        prototype = self.functype.im_func(object)
+        self.assertRaises(TypeError, prototype, lambda: None)
+
 try:
     WINFUNCTYPE
 except NameError:
index 09e928fdb40dc276b8278e40954282f757b64ead..7371b0fe24b78a0837e418bbd52b057271812d62 100644 (file)
@@ -57,5 +57,21 @@ class Test(unittest.TestCase):
         c_int()
         self.failUnlessEqual(p[:4], [1, 2, 96, 4])
 
+    def test_char_p(self):
+        # This didn't work: bad argument to internal function
+        s = c_char_p("hiho")
+        self.failUnlessEqual(cast(cast(s, c_void_p), c_char_p).value,
+                             "hiho")
+
+    try:
+        c_wchar_p
+    except NameError:
+        pass
+    else:
+        def test_wchar_p(self):
+            s = c_wchar_p("hiho")
+            self.failUnlessEqual(cast(cast(s, c_void_p), c_wchar_p).value,
+                                 "hiho")
+
 if __name__ == "__main__":
     unittest.main()
index 8a4531db936dc3d43ad8a9111e2a258bdb18d586..613163d0ccae00fec2e8d290c631e7927216eb69 100644 (file)
@@ -381,5 +381,35 @@ class PointerMemberTestCase(unittest.TestCase):
         s.p = None
         self.failUnlessEqual(s.x, 12345678)
 
+class TestRecursiveStructure(unittest.TestCase):
+    def test_contains_itself(self):
+        class Recursive(Structure):
+            pass
+
+        try:
+            Recursive._fields_ = [("next", Recursive)]
+        except AttributeError, details:
+            self.failUnless("Structure or union cannot contain itself" in
+                            str(details))
+        else:
+            self.fail("Structure or union cannot contain itself")
+
+
+    def test_vice_versa(self):
+        class First(Structure):
+            pass
+        class Second(Structure):
+            pass
+
+        First._fields_ = [("second", Second)]
+
+        try:
+            Second._fields_ = [("first", First)]
+        except AttributeError, details:
+            self.failUnless("_fields_ is final" in
+                            str(details))
+        else:
+            self.fail("AttributeError not raised")
+
 if __name__ == '__main__':
     unittest.main()
index db530d3af4ad4392b20742387d49f8cafa0245fa..10deacad530331cb88bda3f92985356e99949d2b 100644 (file)
@@ -6,7 +6,8 @@ import unittest, sys
 
 import _ctypes_test
 
-if sys.platform == "win32":
+if sys.platform == "win32" and sizeof(c_void_p) == sizeof(c_int):
+    # Only windows 32-bit has different calling conventions.
 
     class WindowsTestCase(unittest.TestCase):
         def test_callconv_1(self):
index 2f2a617724286c343e407df37c0034bcd6709167..86455f3b4cd355f7abf5e48fcc17ba81fefd3adf 100644 (file)
@@ -131,7 +131,7 @@ __all__ = [
     'ROUND_FLOOR', 'ROUND_UP', 'ROUND_HALF_DOWN',
 
     # Functions for manipulating contexts
-    'setcontext', 'getcontext'
+    'setcontext', 'getcontext', 'localcontext'
 ]
 
 import copy as _copy
@@ -458,6 +458,49 @@ else:
 
     del threading, local        # Don't contaminate the namespace
 
+def localcontext(ctx=None):
+    """Return a context manager for a copy of the supplied context
+
+    Uses a copy of the current context if no context is specified
+    The returned context manager creates a local decimal context
+    in a with statement:
+        def sin(x):
+             with localcontext() as ctx:
+                 ctx.prec += 2
+                 # Rest of sin calculation algorithm
+                 # uses a precision 2 greater than normal
+             return +s # Convert result to normal precision
+
+         def sin(x):
+             with localcontext(ExtendedContext):
+                 # Rest of sin calculation algorithm
+                 # uses the Extended Context from the
+                 # General Decimal Arithmetic Specification
+             return +s # Convert result to normal context
+
+    """
+    # The string below can't be included in the docstring until Python 2.6
+    # as the doctest module doesn't understand __future__ statements
+    """
+    >>> from __future__ import with_statement
+    >>> print getcontext().prec
+    28
+    >>> with localcontext():
+    ...     ctx = getcontext()
+    ...     ctx.prec() += 2
+    ...     print ctx.prec
+    ...
+    30
+    >>> with localcontext(ExtendedContext):
+    ...     print getcontext().prec
+    ...
+    9
+    >>> print getcontext().prec
+    28
+    """
+    if ctx is None: ctx = getcontext()
+    return _ContextManager(ctx)
+
 
 ##### Decimal class ###########################################
 
@@ -2192,23 +2235,14 @@ for name in rounding_functions:
 
 del name, val, globalname, rounding_functions
 
-class ContextManager(object):
-    """Helper class to simplify Context management.
-
-    Sample usage:
-
-    with decimal.ExtendedContext:
-        s = ...
-    return +s # Convert result to normal precision
-
-    with decimal.getcontext() as ctx:
-        ctx.prec += 2
-        s = ...
-    return +s
+class _ContextManager(object):
+    """Context manager class to support localcontext().
 
+      Sets a copy of the supplied context in __enter__() and restores
+      the previous decimal context in __exit__()
     """
     def __init__(self, new_context):
-        self.new_context = new_context
+        self.new_context = new_context.copy()
     def __enter__(self):
         self.saved_context = getcontext()
         setcontext(self.new_context)
@@ -2267,9 +2301,6 @@ class Context(object):
         s.append('traps=[' + ', '.join([t.__name__ for t, v in self.traps.items() if v]) + ']')
         return ', '.join(s) + ')'
 
-    def get_manager(self):
-        return ContextManager(self.copy())
-
     def clear_flags(self):
         """Reset all flags to zero"""
         for flag in self.flags:
index 5b09965867a814418a0351b86170ba78a672733e..6f0e0d881cb3aeb93732b4ab60f750533b324019 100644 (file)
@@ -337,37 +337,47 @@ class bdist_rpm (Command):
         if not self.keep_temp:
             rpm_cmd.append('--clean')
         rpm_cmd.append(spec_path)
+        # Determine the binary rpm names that should be built out of this spec
+        # file
+        # Note that some of these may not be really built (if the file
+        # list is empty)
+        nvr_string = "%{name}-%{version}-%{release}"
+        src_rpm = nvr_string + ".src.rpm"
+        non_src_rpm = "%{arch}/" + nvr_string + ".%{arch}.rpm"
+        q_cmd = r"rpm -q --qf '%s %s\n' --specfile '%s'" % (
+            src_rpm, non_src_rpm, spec_path)
+
+        out = os.popen(q_cmd)
+        binary_rpms = []
+        source_rpm = None
+        while 1:
+            line = out.readline()
+            if not line:
+                break
+            l = string.split(string.strip(line))
+            assert(len(l) == 2)
+            binary_rpms.append(l[1])
+            # The source rpm is named after the first entry in the spec file
+            if source_rpm is None:
+                source_rpm = l[0]
+
+        status = out.close()
+        if status:
+            raise DistutilsExecError("Failed to execute: %s" % repr(q_cmd))
+
         self.spawn(rpm_cmd)
 
-        # XXX this is a nasty hack -- we really should have a proper way to
-        # find out the names of the RPM files created; also, this assumes
-        # that RPM creates exactly one source and one binary RPM.
         if not self.dry_run:
             if not self.binary_only:
-                srpms = glob.glob(os.path.join(rpm_dir['SRPMS'], "*.rpm"))
-                assert len(srpms) == 1, \
-                       "unexpected number of SRPM files found: %s" % srpms
-                dist_file = ('bdist_rpm', 'any',
-                             self._dist_path(srpms[0]))
-                self.distribution.dist_files.append(dist_file)
-                self.move_file(srpms[0], self.dist_dir)
+                srpm = os.path.join(rpm_dir['SRPMS'], source_rpm)
+                assert(os.path.exists(srpm))
+                self.move_file(srpm, self.dist_dir)
 
             if not self.source_only:
-                rpms = glob.glob(os.path.join(rpm_dir['RPMS'], "*/*.rpm"))
-                debuginfo = glob.glob(os.path.join(rpm_dir['RPMS'],
-                                                   "*/*debuginfo*.rpm"))
-                if debuginfo:
-                    rpms.remove(debuginfo[0])
-                assert len(rpms) == 1, \
-                       "unexpected number of RPM files found: %s" % rpms
-                dist_file = ('bdist_rpm', get_python_version(),
-                             self._dist_path(rpms[0]))
-                self.distribution.dist_files.append(dist_file)
-                self.move_file(rpms[0], self.dist_dir)
-                if debuginfo:
-                    dist_file = ('bdist_rpm', get_python_version(),
-                                 self._dist_path(debuginfo[0]))
-                    self.move_file(debuginfo[0], self.dist_dir)
+                for rpm in binary_rpms:
+                    rpm = os.path.join(rpm_dir['RPMS'], rpm)
+                    if os.path.exists(rpm):
+                        self.move_file(rpm, self.dist_dir)
     # run()
 
     def _dist_path(self, path):
@@ -381,6 +391,7 @@ class bdist_rpm (Command):
         spec_file = [
             '%define name ' + self.distribution.get_name(),
             '%define version ' + self.distribution.get_version().replace('-','_'),
+            '%define unmangled_version ' + self.distribution.get_version(),
             '%define release ' + self.release.replace('-','_'),
             '',
             'Summary: ' + self.distribution.get_description(),
@@ -402,9 +413,9 @@ class bdist_rpm (Command):
         # but only after it has run: and we create the spec file before
         # running "sdist", in case of --spec-only.
         if self.use_bzip2:
-            spec_file.append('Source0: %{name}-%{version}.tar.bz2')
+            spec_file.append('Source0: %{name}-%{unmangled_version}.tar.bz2')
         else:
-            spec_file.append('Source0: %{name}-%{version}.tar.gz')
+            spec_file.append('Source0: %{name}-%{unmangled_version}.tar.gz')
 
         spec_file.extend([
             'License: ' + self.distribution.get_license(),
@@ -479,7 +490,7 @@ class bdist_rpm (Command):
         # are just text that we drop in as-is.  Hmmm.
 
         script_options = [
-            ('prep', 'prep_script', "%setup"),
+            ('prep', 'prep_script', "%setup -n %{name}-%{unmangled_version}"),
             ('build', 'build_script', def_build),
             ('install', 'install_script',
              ("%s install "
index cd67544b7aad37419dd307331e1ebfe8f360561d..f79eee3b746b78768e14072d5abc6ef964d16c7c 100644 (file)
@@ -186,7 +186,7 @@ class build_ext (Command):
         # for extensions under Cygwin and AtheOS Python's library directory must be
         # appended to library_dirs
         if sys.platform[:6] == 'cygwin' or sys.platform[:6] == 'atheos' or \
-               (sys.platform.startswith('linux') and
+               ((sys.platform.startswith('linux') or sys.platform.startswith('gnu')) and
                 sysconfig.get_config_var('Py_ENABLE_SHARED')):
             if string.find(sys.executable, sys.exec_prefix) != -1:
                 # building third party extensions
index c31ac29668337739f3d48cdc5b78ab87f7e974d2..c8880310dfcf645fb5728dfb5ad90de79d24c17a 100644 (file)
@@ -35,6 +35,9 @@ class install_egg_info(Command):
             dir_util.remove_tree(target, dry_run=self.dry_run)
         elif os.path.exists(target):
             self.execute(os.unlink,(self.target,),"Removing "+target)
+        elif not os.path.isdir(self.install_dir):
+            self.execute(os.makedirs, (self.install_dir,),
+                         "Creating "+self.install_dir)
         log.info("Writing %s", target)
         if not self.dry_run:
             f = open(target, 'w')
index f8912621c8dc92a45995d9d9a4d5f547e71d6bfa..3177476b3be6a3b7430f11d074d5d101f3165d5e 100644 (file)
@@ -256,7 +256,7 @@ Your selection [default 1]: ''',
         body = StringIO.StringIO()
         for key, value in data.items():
             # handle multiple entries for the same name
-            if type(value) != type([]):
+            if type(value) not in (type([]), type( () )):
                 value = [value]
             for value in value:
                 value = unicode(value).encode("utf-8")
diff --git a/Lib/distutils/command/wininst-8.exe b/Lib/distutils/command/wininst-8.exe
new file mode 100644 (file)
index 0000000..7403bfa
Binary files /dev/null and b/Lib/distutils/command/wininst-8.exe differ
index 96923bdca4bd9b270dbb41b8402e4c6599c2a613..8989d92b4e0f6c7371accb7b2198809ba238f36a 100644 (file)
@@ -509,7 +509,10 @@ def get_config_vars(*args):
                 # are in CFLAGS or LDFLAGS and remove them if they are.
                 # This is needed when building extensions on a 10.3 system
                 # using a universal build of python.
-                for key in ('LDFLAGS', 'BASECFLAGS'):
+                for key in ('LDFLAGS', 'BASECFLAGS',
+                        # a number of derived variables. These need to be
+                        # patched up as well.
+                        'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'):
                     flags = _config_vars[key]
                     flags = re.sub('-arch\s+\w+\s', ' ', flags)
                     flags = re.sub('-isysroot [^ \t]*', ' ', flags)
index 6cd14f77288a7b646904d7a4a48f9f9e466da118..75e8a5316ebba254884a9af1b6388d075ff3efb2 100644 (file)
@@ -82,6 +82,22 @@ def _darwin_compiler_fixup(compiler_so, cc_args):
         except ValueError:
             pass
 
+    # Check if the SDK that is used during compilation actually exists,
+    # the universal build requires the usage of a universal SDK and not all
+    # users have that installed by default.
+    sysroot = None
+    if '-isysroot' in cc_args:
+        idx = cc_args.index('-isysroot')
+        sysroot = cc_args[idx+1]
+    elif '-isysroot' in compiler_so:
+        idx = compiler_so.index('-isysroot')
+        sysroot = compiler_so[idx+1]
+
+    if sysroot and not os.path.isdir(sysroot):
+        log.warn("Compiling with an SDK that doesn't seem to exist: %s",
+                sysroot)
+        log.warn("Please check your Xcode installation")
+
     return compiler_so
 
 class UnixCCompiler(CCompiler):
index 26ebb0e489d660b6f46680d7b37bef7739342264..ee952d392e2a2d06bd994e82a79fbbab23922dba 100644 (file)
@@ -235,10 +235,6 @@ def decode_rfc2231(s):
     parts = s.split(TICK, 2)
     if len(parts) <= 2:
         return None, None, s
-    if len(parts) > 3:
-        charset, language = parts[:2]
-        s = TICK.join(parts[2:])
-        return charset, language, s
     return parts
 
 
index b0ca364ae9cc204cc08a3a5f427aca55e4cbd3ea..f1e7ecc4bdf845f70c5dccfc4f80d859ee220f22 100644 (file)
@@ -28,7 +28,7 @@ Written by Marc-Andre Lemburg (mal@lemburg.com).
 
 """#"
 
-import codecs, types
+import codecs
 from . import aliases
 
 _cache = {}
@@ -60,7 +60,7 @@ def normalize_encoding(encoding):
     """
     # Make sure we have an 8-bit string, because .translate() works
     # differently for Unicode strings.
-    if type(encoding) is types.UnicodeType:
+    if isinstance(encoding, unicode):
         # Note that .encode('latin-1') does *not* use the codec
         # registry, so this call doesn't recurse. (See unicodeobject.c
         # PyUnicode_AsEncodedString() for details)
@@ -90,7 +90,7 @@ def search_function(encoding):
     else:
         modnames = [norm_encoding]
     for modname in modnames:
-        if not modname:
+        if not modname or '.' in modname:
             continue
         try:
             mod = __import__('encodings.' + modname,
index 81e84b6fb8993dc16cca67d548d4dbb2868b0e70..054b36b401a66e54ba39c6a96485a9d0f19c9713 100644 (file)
@@ -52,14 +52,35 @@ class Codec(codecs.Codec):
         return bz2_decode(input, errors)
 
 class IncrementalEncoder(codecs.IncrementalEncoder):
+    def __init__(self, errors='strict'):
+        assert errors == 'strict'
+        self.errors = errors
+        self.compressobj = bz2.BZ2Compressor()
+
     def encode(self, input, final=False):
-        assert self.errors == 'strict'
-        return bz2.compress(input)
+        if final:
+            c = self.compressobj.compress(input)
+            return c + self.compressobj.flush()
+        else:
+            return self.compressobj.compress(input)
+
+    def reset(self):
+        self.compressobj = bz2.BZ2Compressor()
 
 class IncrementalDecoder(codecs.IncrementalDecoder):
+    def __init__(self, errors='strict'):
+        assert errors == 'strict'
+        self.errors = errors
+        self.decompressobj = bz2.BZ2Decompressor()
+
     def decode(self, input, final=False):
-        assert self.errors == 'strict'
-        return bz2.decompress(input)
+        try:
+            return self.decompressobj.decompress(input)
+        except EOFError:
+            return ''
+
+    def reset(self):
+        self.decompressobj = bz2.BZ2Decompressor()
 
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
index f05f6b88db26eda0c18eaade3b0b78d97a75ac7e..d751da69c41585778d5a92783381d0c737b094c4 100644 (file)
@@ -16,7 +16,7 @@ def encode(input, errors='strict'):
 
 def decode(input, errors='strict'):
     prefix = 0
-    if input.startswith(codecs.BOM_UTF8):
+    if input[:3] == codecs.BOM_UTF8:
         input = input[3:]
         prefix = 3
     (output, consumed) = codecs.utf_8_decode(input, errors, True)
index 2694f15511608c24c000021aaf5766897c30914f..3419f9f48f5efbf1be4802f562536ca235e2748e 100644 (file)
@@ -51,14 +51,36 @@ class Codec(codecs.Codec):
         return zlib_decode(input, errors)
 
 class IncrementalEncoder(codecs.IncrementalEncoder):
+    def __init__(self, errors='strict'):
+        assert errors == 'strict'
+        self.errors = errors
+        self.compressobj = zlib.compressobj()
+
     def encode(self, input, final=False):
-        assert self.errors == 'strict'
-        return zlib.compress(input)
+        if final:
+            c = self.compressobj.compress(input)
+            return c + self.compressobj.flush()
+        else:
+            return self.compressobj.compress(input)
+
+    def reset(self):
+        self.compressobj = zlib.compressobj()
 
 class IncrementalDecoder(codecs.IncrementalDecoder):
+    def __init__(self, errors='strict'):
+        assert errors == 'strict'
+        self.errors = errors
+        self.decompressobj = zlib.decompressobj()
+
     def decode(self, input, final=False):
-        assert self.errors == 'strict'
-        return zlib.decompress(input)
+        if final:
+            c = self.decompressobj.decompress(input)
+            return c + self.decompressobj.flush()
+        else:
+            return self.decompressobj.decompress(input)
+
+    def reset(self):
+        self.decompressobj = zlib.decompressobj()
 
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
index 937ee4e8f03fa1c911196f03be53fbfb89dc41d5..9cb67dd55691654df0368f86db2b13ae45b2b810 100644 (file)
@@ -325,6 +325,14 @@ class FTP:
             if rest is not None:
                 self.sendcmd("REST %s" % rest)
             resp = self.sendcmd(cmd)
+            # Some servers apparently send a 200 reply to
+            # a LIST or STOR command, before the 150 reply
+            # (and way before the 226 reply). This seems to
+            # be in violation of the protocol (which only allows
+            # 1xx or error messages for LIST), so we just discard
+            # this response.
+            if resp[0] == '2':
+               resp = self.getresp()
             if resp[0] != '1':
                 raise error_reply, resp
         else:
@@ -332,6 +340,9 @@ class FTP:
             if rest is not None:
                 self.sendcmd("REST %s" % rest)
             resp = self.sendcmd(cmd)
+            # See above.
+            if resp[0] == '2':
+               resp = self.getresp()
             if resp[0] != '1':
                 raise error_reply, resp
             conn, sockaddr = sock.accept()
index 12a527e3608cc177d6fc40a637d3b4fee83ada53..a54f03083231379c642f7d6e0bc65e391f07bbd8 100644 (file)
@@ -25,14 +25,14 @@ def update_wrapper(wrapper,
        assigned is a tuple naming the attributes assigned directly
        from the wrapped function to the wrapper function (defaults to
        functools.WRAPPER_ASSIGNMENTS)
-       updated is a tuple naming the attributes off the wrapper that
+       updated is a tuple naming the attributes of the wrapper that
        are updated with the corresponding attribute from the wrapped
        function (defaults to functools.WRAPPER_UPDATES)
     """
     for attr in assigned:
         setattr(wrapper, attr, getattr(wrapped, attr))
     for attr in updated:
-        getattr(wrapper, attr).update(getattr(wrapped, attr))
+        getattr(wrapper, attr).update(getattr(wrapped, attr, {}))
     # Return the wrapper so this can be used as a decorator via partial()
     return wrapper
 
diff --git a/Lib/genericpath.py b/Lib/genericpath.py
new file mode 100644 (file)
index 0000000..1574cef
--- /dev/null
@@ -0,0 +1,77 @@
+"""
+Path operations common to more than one OS
+Do not use directly.  The OS specific modules import the appropriate
+functions from this module themselves.
+"""
+import os
+import stat
+
+__all__ = ['commonprefix', 'exists', 'getatime', 'getctime', 'getmtime',
+           'getsize', 'isdir', 'isfile']
+
+
+# Does a path exist?
+# This is false for dangling symbolic links on systems that support them.
+def exists(path):
+    """Test whether a path exists.  Returns False for broken symbolic links"""
+    try:
+        st = os.stat(path)
+    except os.error:
+        return False
+    return True
+
+
+# This follows symbolic links, so both islink() and isdir() can be true
+# for the same path ono systems that support symlinks
+def isfile(path):
+    """Test whether a path is a regular file"""
+    try:
+        st = os.stat(path)
+    except os.error:
+        return False
+    return stat.S_ISREG(st.st_mode)
+
+
+# Is a path a directory?
+# This follows symbolic links, so both islink() and isdir()
+# can be true for the same path on systems that support symlinks
+def isdir(s):
+    """Return true if the pathname refers to an existing directory."""
+    try:
+        st = os.stat(s)
+    except os.error:
+        return False
+    return stat.S_ISDIR(st.st_mode)
+
+
+def getsize(filename):
+    """Return the size of a file, reported by os.stat()."""
+    return os.stat(filename).st_size
+
+
+def getmtime(filename):
+    """Return the last modification time of a file, reported by os.stat()."""
+    return os.stat(filename).st_mtime
+
+
+def getatime(filename):
+    """Return the last access time of a file, reported by os.stat()."""
+    return os.stat(filename).st_atime
+
+
+def getctime(filename):
+    """Return the metadata change time of a file, reported by os.stat()."""
+    return os.stat(filename).st_ctime
+
+
+# Return the longest prefix of all list elements.
+def commonprefix(m):
+    "Given a list of pathnames, returns the longest common leading component"
+    if not m: return ''
+    s1 = min(m)
+    s2 = max(m)
+    n = min(len(s1), len(s2))
+    for i in xrange(n):
+        if s1[i] != s2[i]:
+            return s1[:i]
+    return s1[:n]
index 0bf29e86bb5dcc4d521e21eb5bc891c91fb0a729..c37d5a18c27033e03b4747f88ae796b533e7e30d 100644 (file)
@@ -371,7 +371,12 @@ class GzipFile:
         self.extrasize = 0
         self.offset = 0
 
-    def seek(self, offset):
+    def seek(self, offset, whence=0):
+        if whence:
+            if whence == 1:
+                offset = self.offset + offset
+            else:
+                raise ValueError('Seek from end not supported')
         if self.mode == WRITE:
             if offset < self.offset:
                 raise IOError('Negative seek in write mode')
index 789e24edab5a00dfadc2517ec17ae8ce7c5b5134..78b5c0e6dcce35a674ef8b8af5cbda0accb92de5 100644 (file)
@@ -18,8 +18,37 @@ md5(), sha1(), sha224(), sha256(), sha384(), and sha512()
 More algorithms may be available on your platform but the above are
 guaranteed to exist.
 
-Choose your hash function wisely.  Some have known weaknesses.
+Choose your hash function wisely.  Some have known collision weaknesses.
 sha384 and sha512 will be slow on 32 bit platforms.
+
+Hash objects have these methods:
+ - update(arg): Update the hash object with the string arg. Repeated calls
+                are equivalent to a single call with the concatenation of all
+                the arguments.
+ - digest():    Return the digest of the strings passed to the update() method
+                so far. This may contain non-ASCII characters, including
+                NUL bytes.
+ - hexdigest(): Like digest() except the digest is returned as a string of
+                double length, containing only hexadecimal digits.
+ - copy():      Return a copy (clone) of the hash object. This can be used to
+                efficiently compute the digests of strings that share a common
+                initial substring.
+
+For example, to obtain the digest of the string 'Nobody inspects the
+spammish repetition':
+
+    >>> import hashlib
+    >>> m = hashlib.md5()
+    >>> m.update("Nobody inspects")
+    >>> m.update(" the spammish repetition")
+    >>> m.digest()
+    '\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
+
+More condensed:
+
+    >>> hashlib.sha224("Nobody inspects the spammish repetition").hexdigest()
+    'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
+
 """
 
 
index 5ae5efc916ea0118a53bdb0002bbe9fc02f75d97..1e0037f8f8ceae8e0136e5d473ed03d58858c22f 100644 (file)
@@ -704,7 +704,15 @@ class HTTPConnection:
         if self.debuglevel > 0:
             print "send:", repr(str)
         try:
-            self.sock.sendall(str)
+            blocksize=8192
+            if hasattr(str,'read') :
+                if self.debuglevel > 0: print "sendIng a read()able"
+                data=str.read(blocksize)
+                while data:
+                    self.sock.sendall(data)
+                    data=str.read(blocksize)
+            else:
+                self.sock.sendall(str)
         except socket.error, v:
             if v[0] == 32:      # Broken pipe
                 self.close()
@@ -879,7 +887,21 @@ class HTTPConnection:
         self.putrequest(method, url, **skips)
 
         if body and ('content-length' not in header_names):
-            self.putheader('Content-Length', str(len(body)))
+            thelen=None
+            try:
+                thelen=str(len(body))
+            except TypeError, te:
+                # If this is a file-like object, try to
+                # fstat its file descriptor
+                import os
+                try:
+                    thelen = str(os.fstat(body.fileno()).st_size)
+                except (AttributeError, OSError):
+                    # Don't send a length if this failed
+                    if self.debuglevel > 0: print "Cannot stat!!"
+                    
+            if thelen is not None:
+                self.putheader('Content-Length',thelen)
         for hdr, value in headers.iteritems():
             self.putheader(hdr, value)
         self.endheaders()
index 74d5b70240d3b519af80cb1e511f344d44bbf771..436206f063bc47353d50efae2e52422aef83e5a6 100644 (file)
@@ -54,25 +54,68 @@ class CodeContext:
 
     def toggle_code_context_event(self, event=None):
         if not self.label:
-            self.pad_frame = Tkinter.Frame(self.editwin.top,
-                                           bg=self.bgcolor, border=2,
-                                           relief="sunken")
-            self.label = Tkinter.Label(self.pad_frame,
-                                      text="\n" * (self.context_depth - 1),
-                                      anchor="w", justify="left",
-                                      font=self.textfont,
-                                      bg=self.bgcolor, fg=self.fgcolor,
-                                      border=0,
-                                      width=1, # Don't request more than we get
-                                      )
-            self.label.pack(side="top", fill="x", expand=True,
-                            padx=4, pady=0)
-            self.pad_frame.pack(side="top", fill="x", expand=False,
-                                padx=0, pady=0,
-                                after=self.editwin.status_bar)
+            # The following code attempts to figure out the required border
+            # width and vertical padding required for the CodeContext widget
+            # to be perfectly aligned with the text in the main Text widget.
+            # This is done by retrieving the appropriate attributes from the
+            # editwin.text and editwin.text_frame widgets.
+            #
+            # All values are passed through int(str(<value>)), since some
+            # values may be pixel objects, which can't simply be added added
+            # to ints.
+            #
+            # This code is considered somewhat unstable since it relies on
+            # some of Tk's inner workings. However its effect is merely
+            # cosmetic; failure will only cause the CodeContext text to be
+            # somewhat misaligned with the text in the main Text widget.
+            #
+            # To avoid possible errors, all references to the inner workings
+            # of Tk are executed inside try/except blocks.
+            
+            widgets_for_width_calc = self.editwin.text, self.editwin.text_frame
+
+            # calculate the required vertical padding
+            padx = 0
+            for widget in widgets_for_width_calc:
+                try:
+                    # retrieve the "padx" attribte from widget's pack info
+                    padx += int(str( widget.pack_info()['padx'] ))
+                except:
+                    pass
+                try:
+                    # retrieve the widget's "padx" attribte
+                    padx += int(str( widget.cget('padx') ))
+                except:
+                    pass
+
+            # calculate the required border width
+            border_width = 0
+            for widget in widgets_for_width_calc:
+                try:
+                    # retrieve the widget's "border" attribte
+                    border_width += int(str( widget.cget('border') ))
+                except:
+                    pass
+
+            self.label = Tkinter.Label(self.editwin.top,
+                                       text="\n" * (self.context_depth - 1),
+                                       anchor="w", justify="left",
+                                       font=self.textfont,
+                                       bg=self.bgcolor, fg=self.fgcolor,
+                                       width=1, #don't request more than we get
+                                       padx=padx, #line up with text widget
+                                       border=border_width, #match border width
+                                       relief="sunken",
+                                       )
+
+            # CodeContext's label widget is packed before and above the
+            # text_frame widget, thus ensuring that it will appear directly
+            # above it.
+            self.label.pack(side="top", fill="x", expand=False,
+                            before=self.editwin.text_frame)
+            
         else:
             self.label.destroy()
-            self.pad_frame.destroy()
             self.label = None
         idleConf.SetOption("extensions", "CodeContext", "visible",
                            str(self.label is not None))
index bc61afb4310493d1b11b0ef9a0a92c76d5e3f8b0..1841b1cf62b2ec1cb0e3f9aba614263c44fdfae4 100644 (file)
@@ -102,8 +102,8 @@ class EditorWindow(object):
             self.top.instance_dict = {}
         self.recent_files_path = os.path.join(idleConf.GetUserCfgDir(),
                 'recent-files.lst')
-        self.vbar = vbar = Scrollbar(top, name='vbar')
         self.text_frame = text_frame = Frame(top)
+        self.vbar = vbar = Scrollbar(text_frame, name='vbar')
         self.width = idleConf.GetOption('main','EditorWindow','width')
         self.text = text = MultiCallCreator(Text)(
                 text_frame, name='text', padx=5, wrap='none',
index 3b3d79af33c8deb41052565f5122c2c0dba76e08..43e5b452aa02bc89318bf23ea752ad410c7ab503 100644 (file)
@@ -3,6 +3,13 @@ What's New in IDLE 2.6a1?
 
 *Release date: XX-XXX-200X*
 
+- Patch #1362975: Rework CodeContext indentation algorithm to
+  avoid hard-coding pixel widths.
+
+- Some syntax errors were being caught by tokenize during the tabnanny
+  check, resulting in obscure error messages.  Do the syntax check
+  first.  Bug 1562716, 1562719
+
 - IDLE's version number takes a big jump to match the version number of
   the Python release of which it's a part.
 
index 709b3a769594d6462e58e5b82c473c5c06bc14e4..20d00bef92ae707ba7d6a567b7f745e6a4aec903 100644 (file)
@@ -351,6 +351,8 @@ class ModifiedInterpreter(InteractiveInterpreter):
 
     def build_subprocess_arglist(self):
         w = ['-W' + s for s in sys.warnoptions]
+        if 1/2 > 0: # account for new division
+            w.append('-Qnew')
         # Maybe IDLE is installed and is being accessed via sys.path,
         # or maybe it's not installed and the idle.py script is being
         # run from the IDLE source directory.
@@ -726,6 +728,8 @@ class ModifiedInterpreter(InteractiveInterpreter):
                     raise
             except:
                 if use_subprocess:
+                    # When run w/o subprocess, both user and IDLE errors
+                    # are printed here; skip message in that case.
                     print >> self.tkconsole.stderr, \
                              "IDLE internal error in runcode()"
                 self.showtraceback()
index f325ad1d254ecc2e011f3754b0eca2cafda1b480..3746eb830475a7f94b9ceb1f9ab79bb933c5bf7a 100644 (file)
@@ -57,9 +57,10 @@ class ScriptBinding:
         filename = self.getfilename()
         if not filename:
             return
+        if not self.checksyntax(filename):
+            return
         if not self.tabnanny(filename):
             return
-        self.checksyntax(filename)
 
     def tabnanny(self, filename):
         f = open(filename, 'r')
@@ -76,9 +77,6 @@ class ScriptBinding:
             self.editwin.gotoline(nag.get_lineno())
             self.errorbox("Tab/space error", indent_message)
             return False
-        except IndentationError:
-            # From tokenize(), let compile() in checksyntax find it again.
-            pass
         return True
 
     def checksyntax(self, filename):
@@ -139,11 +137,11 @@ class ScriptBinding:
         filename = self.getfilename()
         if not filename:
             return
-        if not self.tabnanny(filename):
-            return
         code = self.checksyntax(filename)
         if not code:
             return
+        if not self.tabnanny(filename):
+            return
         shell = self.shell
         interp = shell.interp
         if PyShell.use_subprocess:
index 0b498b5c878e49bef8a03743cd854115aa8af03a..986a415e2c510a206ac4ff559210ae2db68315bc 100644 (file)
@@ -403,6 +403,7 @@ def getabsfile(object, _filename=None):
     return os.path.normcase(os.path.abspath(_filename))
 
 modulesbyfile = {}
+_filesbymodname = {}
 
 def getmodule(object, _filename=None):
     """Return the module an object was defined in, or None if not found."""
@@ -410,19 +411,32 @@ def getmodule(object, _filename=None):
         return object
     if hasattr(object, '__module__'):
         return sys.modules.get(object.__module__)
+    # Try the filename to modulename cache
+    if _filename is not None and _filename in modulesbyfile:
+        return sys.modules.get(modulesbyfile[_filename])
+    # Try the cache again with the absolute file name
     try:
         file = getabsfile(object, _filename)
     except TypeError:
         return None
     if file in modulesbyfile:
         return sys.modules.get(modulesbyfile[file])
-    for module in sys.modules.values():
+    # Update the filename to module name cache and check yet again
+    # Copy sys.modules in order to cope with changes while iterating
+    for modname, module in sys.modules.items():
         if ismodule(module) and hasattr(module, '__file__'):
+            f = module.__file__
+            if f == _filesbymodname.get(modname, None):
+                # Have already mapped this module, so skip it
+                continue
+            _filesbymodname[modname] = f
             f = getabsfile(module)
+            # Always map to the name the module knows itself by
             modulesbyfile[f] = modulesbyfile[
                 os.path.realpath(f)] = module.__name__
     if file in modulesbyfile:
         return sys.modules.get(modulesbyfile[file])
+    # Check the main module
     main = sys.modules['__main__']
     if not hasattr(object, '__name__'):
         return None
@@ -430,6 +444,7 @@ def getmodule(object, _filename=None):
         mainobject = getattr(main, object.__name__)
         if mainobject is object:
             return main
+    # Check builtins
     builtin = sys.modules['__builtin__']
     if hasattr(builtin, object.__name__):
         builtinobject = getattr(builtin, object.__name__)
@@ -444,7 +459,7 @@ def findsource(object):
     in the file and the line number indexes a line in that list.  An IOError
     is raised if the source code cannot be retrieved."""
     file = getsourcefile(object) or getfile(object)
-    module = getmodule(object)
+    module = getmodule(object, file)
     if module:
         lines = linecache.getlines(file, module.__dict__)
     else:
@@ -457,9 +472,24 @@ def findsource(object):
 
     if isclass(object):
         name = object.__name__
-        pat = re.compile(r'^\s*class\s*' + name + r'\b')
+        pat = re.compile(r'^(\s*)class\s*' + name + r'\b')
+        # make some effort to find the best matching class definition:
+        # use the one with the least indentation, which is the one
+        # that's most probably not inside a function definition.
+        candidates = []
         for i in range(len(lines)):
-            if pat.match(lines[i]): return lines, i
+            match = pat.match(lines[i])
+            if match:
+                # if it's at toplevel, it's already the best one
+                if lines[i][0] == 'c':
+                    return lines, i
+                # else add whitespace to candidate list
+                candidates.append((match.group(1), i))
+        if candidates:
+            # this will sort by whitespace, and by line number,
+            # less whitespace first
+            candidates.sort()
+            return lines, candidates[0][1]
         else:
             raise IOError('could not find class definition')
 
index 1d2fdad36d3374bf1cc283cb8a636421cd4b2bd8..ad6126abfcf7b046620c8643fb3c97ba037a1812 100755 (executable)
@@ -421,7 +421,7 @@ class TixSubWidget(TixWidget):
             except:
                 plist = []
 
-        if (not check_intermediate) or len(plist) < 2:
+        if not check_intermediate:
             # immediate descendant
             TixWidget.__init__(self, master, None, None, {'name' : name})
         else:
@@ -437,6 +437,9 @@ class TixSubWidget(TixWidget):
                     parent = TixSubWidget(parent, plist[i],
                                           destroy_physically=0,
                                           check_intermediate=0)
+            # The Tk widget name is in plist, not in name
+            if plist:
+                name = plist[-1]
             TixWidget.__init__(self, parent, None, None, {'name' : name})
         self.destroy_physically = destroy_physically
 
index bea130cd5ff43f932891c56b5ed52669e61915d6..f8538edf302266b9ad9b5f789d443b5081a8bba5 100644 (file)
@@ -3017,7 +3017,7 @@ class Text(Widget):
         self.tk.call(self._w, 'scan', 'dragto', x, y)
     def search(self, pattern, index, stopindex=None,
            forwards=None, backwards=None, exact=None,
-           regexp=None, nocase=None, count=None):
+           regexp=None, nocase=None, count=None, elide=None):
         """Search PATTERN beginning from INDEX until STOPINDEX.
         Return the index of the first character of a match or an empty string."""
         args = [self._w, 'search']
@@ -3026,6 +3026,7 @@ class Text(Widget):
         if exact: args.append('-exact')
         if regexp: args.append('-regexp')
         if nocase: args.append('-nocase')
+        if elide: args.append('-elide')
         if count: args.append('-count'); args.append(count)
         if pattern[0] == '-': args.append('--')
         args.append(pattern)
index aff069bfa75a9f7337001e8f57a1a843f31fcb1f..d14ca86febc0bf592d5d3a9a18fc96b7efa50a5a 100644 (file)
@@ -102,6 +102,15 @@ def askyesno(title=None, message=None, **options):
     s = _show(title, message, QUESTION, YESNO, **options)
     return s == YES
 
+def askyesnocancel(title=None, message=None, **options):
+    "Ask a question; return true if the answer is yes, None if cancelled."
+    s = _show(title, message, QUESTION, YESNOCANCEL, **options)
+    # s might be a Tcl index object, so convert it to a string
+    s = str(s)
+    if s == CANCEL:
+        return None
+    return s == YES
+
 def askretrycancel(title=None, message=None, **options):
     "Ask if operation should be retried; return true if the answer is yes"
     s = _show(title, message, WARNING, RETRYCANCEL, **options)
@@ -119,4 +128,5 @@ if __name__ == "__main__":
     print "question", askquestion("Spam", "Question?")
     print "proceed", askokcancel("Spam", "Proceed?")
     print "yes/no", askyesno("Spam", "Got it?")
+    print "yes/no/cancel", askyesnocancel("Spam", "Want it?")
     print "try again", askretrycancel("Spam", "Try again?")
index 7b70411bf61f977eeccd01c8c52cfe7cac458ae3..3411d942cadb311e7e4bdf5a45a6c3014575098d 100644 (file)
@@ -46,8 +46,13 @@ class Dialog(Toplevel):
             title -- the dialog title
         '''
         Toplevel.__init__(self, parent)
-        self.transient(parent)
 
+        # If the master is not viewable, don't
+        # make the child transient, or else it
+        # would be opened withdrawn
+        if parent.winfo_viewable():  
+            self.transient(parent)
         if title:
             self.title(title)
 
@@ -124,9 +129,10 @@ class Dialog(Toplevel):
         self.withdraw()
         self.update_idletasks()
 
-        self.apply()
-
-        self.cancel()
+        try:
+            self.apply()
+        finally:
+            self.cancel()
 
     def cancel(self, event=None):
 
index 01a55b1522df23b89de8c31d5c738fb2caaf98e2..fcde9af4ed4e6eb92c571b9707b269997f7be069 100644 (file)
@@ -15,6 +15,7 @@ pictures can easily be drawn.
 """
 
 from math import * # Also for export
+from time import sleep
 import Tkinter
 
 speeds = ['fastest', 'fast', 'normal', 'slow', 'slowest']
@@ -949,7 +950,6 @@ def demo2():
 
 
 if __name__ == '__main__':
-    from time import sleep
     demo()
     sleep(3)
     demo2()
index 953afe9ebe18b746e9e67ad530b91ba5a50b1c0b..b57a9af3689f3c2d4a4936033429f793a60c3bb5 100644 (file)
@@ -214,7 +214,7 @@ class LogRecord:
     information to be logged.
     """
     def __init__(self, name, level, pathname, lineno,
-                 msg, args, exc_info, func):
+                 msg, args, exc_info, func=None):
         """
         Initialize a logging record with interesting information.
         """
@@ -910,10 +910,11 @@ class Manager:
         Ensure that children of the placeholder ph are connected to the
         specified logger.
         """
-        #for c in ph.loggers:
+        name = alogger.name
+        namelen = len(name)
         for c in ph.loggerMap.keys():
-            # XXX Is the following correct?  Shouldn't it be >= 0?
-            if string.find(c.parent.name, alogger.name) != 0:
+            #The if means ... if not c.parent.name.startswith(nm)
+            if c.parent.name[:namelen] != name:
                 alogger.parent = c.parent
                 c.parent = alogger
 
index a31e8d0eca61f80a21147b7761c22f5bca264ea8..a9970d023f93da68038239016c1306e38de6cf40 100644 (file)
@@ -27,7 +27,7 @@ Copyright (C) 2001-2004 Vinay Sajip. All Rights Reserved.
 To use, simply 'import logging' and log away!
 """
 
-import sys, logging, logging.handlers, string, socket, struct, os, traceback
+import sys, logging, logging.handlers, string, socket, struct, os, traceback, types
 
 try:
     import thread
@@ -110,7 +110,7 @@ def _create_formatters(cp):
     flist = string.split(flist, ",")
     formatters = {}
     for form in flist:
-        sectname = "formatter_%s" % form
+        sectname = "formatter_%s" % string.strip(form)
         opts = cp.options(sectname)
         if "format" in opts:
             fs = cp.get(sectname, "format", 1)
@@ -139,7 +139,7 @@ def _install_handlers(cp, formatters):
     handlers = {}
     fixups = [] #for inter-handler references
     for hand in hlist:
-        sectname = "handler_%s" % hand
+        sectname = "handler_%s" % string.strip(hand)
         klass = cp.get(sectname, "class")
         opts = cp.options(sectname)
         if "formatter" in opts:
@@ -176,6 +176,7 @@ def _install_loggers(cp, handlers):
     # configure the root first
     llist = cp.get("loggers", "keys")
     llist = string.split(llist, ",")
+    llist = map(lambda x: string.strip(x), llist)
     llist.remove("root")
     sectname = "logger_root"
     root = logging.root
@@ -190,7 +191,7 @@ def _install_loggers(cp, handlers):
     if len(hlist):
         hlist = string.split(hlist, ",")
         for hand in hlist:
-            log.addHandler(handlers[hand])
+            log.addHandler(handlers[string.strip(hand)])
 
     #and now the others...
     #we don't want to lose the existing loggers,
@@ -225,7 +226,7 @@ def _install_loggers(cp, handlers):
         if len(hlist):
             hlist = string.split(hlist, ",")
             for hand in hlist:
-                logger.addHandler(handlers[hand])
+                logger.addHandler(handlers[string.strip(hand)])
 
     #Disable any old loggers. There's no point deleting
     #them as other threads may continue to hold references
index a0255cee364b00dc5f48451199656529cfafaec4..17eca8a0c435f9d7971da37db8482e6f73a026cc 100644 (file)
@@ -590,11 +590,11 @@ class SysLogHandler(logging.Handler):
         self.address = address
         self.facility = facility
         if type(address) == types.StringType:
-            self._connect_unixsocket(address)
             self.unixsocket = 1
+            self._connect_unixsocket(address)
         else:
-            self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
             self.unixsocket = 0
+            self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 
         self.formatter = None
 
index f93ceb154014fd72355ce68f60eda39d91f32a2b..d389d70a97cca9c77a65d6ec2686712fccaabd2d 100644 (file)
@@ -2,6 +2,7 @@
 
 import os
 from stat import *
+from genericpath import *
 
 __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
            "basename","dirname","commonprefix","getsize","getmtime",
@@ -101,31 +102,6 @@ def ismount(s):
     components = split(s)
     return len(components) == 2 and components[1] == ''
 
-def isdir(s):
-    """Return true if the pathname refers to an existing directory."""
-
-    try:
-        st = os.stat(s)
-    except os.error:
-        return 0
-    return S_ISDIR(st.st_mode)
-
-
-# Get size, mtime, atime of files.
-
-def getsize(filename):
-    """Return the size of a file, reported by os.stat()."""
-    return os.stat(filename).st_size
-
-def getmtime(filename):
-    """Return the last modification time of a file, reported by os.stat()."""
-    return os.stat(filename).st_mtime
-
-def getatime(filename):
-    """Return the last access time of a file, reported by os.stat()."""
-    return os.stat(filename).st_atime
-
-
 def islink(s):
     """Return true if the pathname refers to a symbolic link."""
 
@@ -135,29 +111,6 @@ def islink(s):
     except:
         return False
 
-
-def isfile(s):
-    """Return true if the pathname refers to an existing regular file."""
-
-    try:
-        st = os.stat(s)
-    except os.error:
-        return False
-    return S_ISREG(st.st_mode)
-
-def getctime(filename):
-    """Return the creation time of a file, reported by os.stat()."""
-    return os.stat(filename).st_ctime
-
-def exists(s):
-    """Test whether a path exists.  Returns False for broken symbolic links"""
-
-    try:
-        st = os.stat(s)
-    except os.error:
-        return False
-    return True
-
 # Is `stat`/`lstat` a meaningful difference on the Mac?  This is safe in any
 # case.
 
@@ -170,20 +123,6 @@ def lexists(path):
         return False
     return True
 
-# Return the longest prefix of all list elements.
-
-def commonprefix(m):
-    "Given a list of pathnames, returns the longest common leading component"
-    if not m: return ''
-    s1 = min(m)
-    s2 = max(m)
-    n = min(len(s1), len(s2))
-    for i in xrange(n):
-        if s1[i] != s2[i]:
-            return s1[:i]
-    return s1[:n]
-
-
 def expandvars(path):
     """Dummy to retain interface-compatibility with other operating systems."""
     return path
index ed7c7d1eaa67983274fdcf03204c0d06b6a24b18..084343086c41f6e6eec9996450c78c0db54152cd 100755 (executable)
@@ -2,6 +2,12 @@
 
 """Read/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes."""
 
+# Notes for authors of new mailbox subclasses:
+#
+# Remember to fsync() changes to disk before closing a modified file
+# or returning from a flush() method.  See functions _sync_flush() and
+# _sync_close().
+
 import sys
 import os
 import time
@@ -235,7 +241,7 @@ class Maildir(Mailbox):
         try:
             self._dump_message(message, tmp_file)
         finally:
-            tmp_file.close()
+            _sync_close(tmp_file)
         if isinstance(message, MaildirMessage):
             subdir = message.get_subdir()
             suffix = self.colon + message.get_info()
@@ -246,7 +252,19 @@ class Maildir(Mailbox):
             suffix = ''
         uniq = os.path.basename(tmp_file.name).split(self.colon)[0]
         dest = os.path.join(self._path, subdir, uniq + suffix)
-        os.rename(tmp_file.name, dest)
+        try:
+            if hasattr(os, 'link'):
+                os.link(tmp_file.name, dest)
+                os.remove(tmp_file.name)
+            else:
+                os.rename(tmp_file.name, dest)
+        except OSError, e:
+            os.remove(tmp_file.name)
+            if e.errno == errno.EEXIST:
+                raise ExternalClashError('Name clash with existing message: %s'
+                                         % dest)
+            else:
+                raise
         if isinstance(message, MaildirMessage):
             os.utime(dest, (os.path.getatime(dest), message.get_date()))
         return uniq
@@ -364,12 +382,14 @@ class Maildir(Mailbox):
 
     def get_folder(self, folder):
         """Return a Maildir instance for the named folder."""
-        return Maildir(os.path.join(self._path, '.' + folder), create=False)
+        return Maildir(os.path.join(self._path, '.' + folder),
+                       factory=self._factory,
+                       create=False)
 
     def add_folder(self, folder):
         """Create a folder and return a Maildir instance representing it."""
         path = os.path.join(self._path, '.' + folder)
-        result = Maildir(path)
+        result = Maildir(path, factory=self._factory)
         maildirfolder_path = os.path.join(path, 'maildirfolder')
         if not os.path.exists(maildirfolder_path):
             os.close(os.open(maildirfolder_path, os.O_CREAT | os.O_WRONLY))
@@ -420,12 +440,17 @@ class Maildir(Mailbox):
         except OSError, e:
             if e.errno == errno.ENOENT:
                 Maildir._count += 1
-                return open(path, 'wb+')
+                try:
+                    return _create_carefully(path)
+                except OSError, e:
+                    if e.errno != errno.EEXIST:
+                        raise
             else:
                 raise
-        else:
-            raise ExternalClashError('Name clash prevented file creation: %s' %
-                                     path)
+
+        # Fall through to here if stat succeeded or open raised EEXIST.
+        raise ExternalClashError('Name clash prevented file creation: %s' %
+                                 path)
 
     def _refresh(self):
         """Update table of contents mapping."""
@@ -560,7 +585,8 @@ class _singlefileMailbox(Mailbox):
             new_file.close()
             os.remove(new_file.name)
             raise
-        new_file.close()
+        _sync_close(new_file)
+        # self._file is about to get replaced, so no need to sync.
         self._file.close()
         try:
             os.rename(new_file.name, self._path)
@@ -575,7 +601,7 @@ class _singlefileMailbox(Mailbox):
         self._toc = new_toc
         self._pending = False
         if self._locked:
-            _lock_file(new_file, dotlock=False)
+            _lock_file(self._file, dotlock=False)
 
     def _pre_mailbox_hook(self, f):
         """Called before writing the mailbox to file f."""
@@ -594,7 +620,7 @@ class _singlefileMailbox(Mailbox):
         self.flush()
         if self._locked:
             self.unlock()
-        self._file.close()
+        self._file.close()  # Sync has been done by self.flush() above.
 
     def _lookup(self, key=None):
         """Return (start, stop) or raise KeyError."""
@@ -784,7 +810,7 @@ class MH(Mailbox):
                 if self._locked:
                     _unlock_file(f)
         finally:
-            f.close()
+            _sync_close(f)
         return new_key
 
     def remove(self, key):
@@ -831,7 +857,7 @@ class MH(Mailbox):
                 if self._locked:
                     _unlock_file(f)
         finally:
-            f.close()
+            _sync_close(f)
 
     def get_message(self, key):
         """Return a Message representation or raise a KeyError."""
@@ -918,7 +944,7 @@ class MH(Mailbox):
         """Unlock the mailbox if it is locked."""
         if self._locked:
             _unlock_file(self._file)
-            self._file.close()
+            _sync_close(self._file)
             del self._file
             self._locked = False
 
@@ -941,11 +967,13 @@ class MH(Mailbox):
 
     def get_folder(self, folder):
         """Return an MH instance for the named folder."""
-        return MH(os.path.join(self._path, folder), create=False)
+        return MH(os.path.join(self._path, folder),
+                  factory=self._factory, create=False)
 
     def add_folder(self, folder):
         """Create a folder and return an MH instance representing it."""
-        return MH(os.path.join(self._path, folder))
+        return MH(os.path.join(self._path, folder),
+                  factory=self._factory)
 
     def remove_folder(self, folder):
         """Delete the named folder, which must be empty."""
@@ -1013,7 +1041,7 @@ class MH(Mailbox):
                 else:
                     f.write('\n')
         finally:
-            f.close()
+            _sync_close(f)
 
     def pack(self):
         """Re-name messages to eliminate numbering gaps. Invalidates keys."""
@@ -1023,27 +1051,13 @@ class MH(Mailbox):
         for key in self.iterkeys():
             if key - 1 != prev:
                 changes.append((key, prev + 1))
-                f = open(os.path.join(self._path, str(key)), 'r+')
-                try:
-                    if self._locked:
-                        _lock_file(f)
-                    try:
-                        if hasattr(os, 'link'):
-                            os.link(os.path.join(self._path, str(key)),
-                                    os.path.join(self._path, str(prev + 1)))
-                            if sys.platform == 'os2emx':
-                                # cannot unlink an open file on OS/2
-                                f.close()
-                            os.unlink(os.path.join(self._path, str(key)))
-                        else:
-                            f.close()
-                            os.rename(os.path.join(self._path, str(key)),
-                                      os.path.join(self._path, str(prev + 1)))
-                    finally:
-                        if self._locked:
-                            _unlock_file(f)
-                finally:
-                    f.close()
+                if hasattr(os, 'link'):
+                    os.link(os.path.join(self._path, str(key)),
+                            os.path.join(self._path, str(prev + 1)))
+                    os.unlink(os.path.join(self._path, str(key)))
+                else:
+                    os.rename(os.path.join(self._path, str(key)),
+                              os.path.join(self._path, str(prev + 1)))
             prev += 1
         self._next_key = prev + 1
         if len(changes) == 0:
@@ -1867,6 +1881,15 @@ def _create_temporary(path):
                                               socket.gethostname(),
                                               os.getpid()))
 
+def _sync_flush(f):
+    """Ensure changes to file f are physically on disk."""
+    f.flush()
+    os.fsync(f.fileno())
+
+def _sync_close(f):
+    """Close file f, ensuring all changes are physically on disk."""
+    _sync_flush(f)
+    f.close()
 
 ## Start: classes from the original module (for backward compatibility).
 
index 7a79b5322f169656cc4f928e3ea73d25dbb40a69..b32ec164bb9d89c9b8072dbbe977632740ee4061 100644 (file)
@@ -8,6 +8,7 @@ module as os.path.
 import os
 import stat
 import sys
+from genericpath import *
 
 __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
            "basename","dirname","commonprefix","getsize","getmtime",
@@ -206,86 +207,18 @@ def dirname(p):
     """Returns the directory component of a pathname"""
     return split(p)[0]
 
-
-# Return the longest prefix of all list elements.
-
-def commonprefix(m):
-    "Given a list of pathnames, returns the longest common leading component"
-    if not m: return ''
-    s1 = min(m)
-    s2 = max(m)
-    n = min(len(s1), len(s2))
-    for i in xrange(n):
-        if s1[i] != s2[i]:
-            return s1[:i]
-    return s1[:n]
-
-
-# Get size, mtime, atime of files.
-
-def getsize(filename):
-    """Return the size of a file, reported by os.stat()"""
-    return os.stat(filename).st_size
-
-def getmtime(filename):
-    """Return the last modification time of a file, reported by os.stat()"""
-    return os.stat(filename).st_mtime
-
-def getatime(filename):
-    """Return the last access time of a file, reported by os.stat()"""
-    return os.stat(filename).st_atime
-
-def getctime(filename):
-    """Return the creation time of a file, reported by os.stat()."""
-    return os.stat(filename).st_ctime
-
 # Is a path a symbolic link?
 # This will always return false on systems where posix.lstat doesn't exist.
 
 def islink(path):
-    """Test for symbolic link.  On WindowsNT/95 always returns false"""
+    """Test for symbolic link.
+    On WindowsNT/95 and OS/2 always returns false
+    """
     return False
 
-
-# Does a path exist?
-
-def exists(path):
-    """Test whether a path exists"""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return False
-    return True
-
+# alias exists to lexists
 lexists = exists
 
-
-# Is a path a dos directory?
-# This follows symbolic links, so both islink() and isdir() can be true
-# for the same path.
-
-def isdir(path):
-    """Test whether a path is a directory"""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return False
-    return stat.S_ISDIR(st.st_mode)
-
-
-# Is a path a regular file?
-# This follows symbolic links, so both islink() and isdir() can be true
-# for the same path.
-
-def isfile(path):
-    """Test whether a path is a regular file"""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return False
-    return stat.S_ISREG(st.st_mode)
-
-
 # Is a path a mount point?  Either a root (with or without drive letter)
 # or an UNC path with at most a / or \ after the mount point.
 
index 5ee3d4bc7caf1bba12216f0c64fbda326f1bd7a9..35f97fb351eafea9082f3a42914c9cc733591ab9 100644 (file)
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -156,11 +156,17 @@ def makedirs(name, mode=0777):
     recursive.
 
     """
+    from errno import EEXIST
     head, tail = path.split(name)
     if not tail:
         head, tail = path.split(head)
     if head and tail and not path.exists(head):
-        makedirs(head, mode)
+        try:
+            makedirs(head, mode)
+        except OSError, e:
+            # be happy if someone already created the path
+            if e.errno != EEXIST:
+                raise
         if tail == curdir:           # xxx/newdir/. exists if xxx/newdir exists
             return
     mkdir(name, mode)
index a841422404334edd63a6e24bba489efc564e7dce..4e85c4d48dfc6b79e87dcddae08f61f2f9d0a075 100644 (file)
@@ -7,6 +7,9 @@ module as os.path.
 
 import os
 import stat
+from genericpath import *
+from ntpath import (expanduser, expandvars, isabs, islink, splitdrive,
+                    splitext, split, walk)
 
 __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
            "basename","dirname","commonprefix","getsize","getmtime",
@@ -36,18 +39,6 @@ def normcase(s):
     return s.replace('\\', '/').lower()
 
 
-# Return whether a path is absolute.
-# Trivial in Posix, harder on the Mac or MS-DOS.
-# For DOS it is absolute if it starts with a slash or backslash (current
-# volume), or if a pathname after the volume letter and colon / UNC resource
-# starts with a slash or backslash.
-
-def isabs(s):
-    """Test whether a path is absolute"""
-    s = splitdrive(s)[1]
-    return s != '' and s[:1] in '/\\'
-
-
 # Join two (or more) paths.
 
 def join(a, *p):
@@ -63,17 +54,6 @@ def join(a, *p):
     return path
 
 
-# Split a path in a drive specification (a drive letter followed by a
-# colon) and the path specification.
-# It is always true that drivespec + pathspec == p
-def splitdrive(p):
-    """Split a pathname into drive and path specifiers. Returns a 2-tuple
-"(drive,path)";  either part may be empty"""
-    if p[1:2] == ':':
-        return p[0:2], p[2:]
-    return '', p
-
-
 # Parse UNC paths
 def splitunc(p):
     """Split a pathname into UNC mount point and relative path specifiers.
@@ -103,57 +83,6 @@ def splitunc(p):
     return '', p
 
 
-# Split a path in head (everything up to the last '/') and tail (the
-# rest).  After the trailing '/' is stripped, the invariant
-# join(head, tail) == p holds.
-# The resulting head won't end in '/' unless it is the root.
-
-def split(p):
-    """Split a pathname.
-
-    Return tuple (head, tail) where tail is everything after the final slash.
-    Either part may be empty."""
-
-    d, p = splitdrive(p)
-    # set i to index beyond p's last slash
-    i = len(p)
-    while i and p[i-1] not in '/\\':
-        i = i - 1
-    head, tail = p[:i], p[i:]  # now tail has no slashes
-    # remove trailing slashes from head, unless it's all slashes
-    head2 = head
-    while head2 and head2[-1] in '/\\':
-        head2 = head2[:-1]
-    head = head2 or head
-    return d + head, tail
-
-
-# Split a path in root and extension.
-# The extension is everything starting at the last dot in the last
-# pathname component; the root is everything before that.
-# It is always true that root + ext == p.
-
-def splitext(p):
-    """Split the extension from a pathname.
-
-    Extension is everything from the last dot to the end.
-    Return (root, ext), either part may be empty."""
-    root, ext = '', ''
-    for c in p:
-        if c in ['/','\\']:
-            root, ext = root + ext + c, ''
-        elif c == '.':
-            if ext:
-                root, ext = root + ext, c
-            else:
-                ext = c
-        elif ext:
-            ext = ext + c
-        else:
-            root = root + c
-    return root, ext
-
-
 # Return the tail (basename) part of a path.
 
 def basename(p):
@@ -168,84 +97,12 @@ def dirname(p):
     return split(p)[0]
 
 
-# Return the longest prefix of all list elements.
-
-def commonprefix(m):
-    "Given a list of pathnames, returns the longest common leading component"
-    if not m: return ''
-    s1 = min(m)
-    s2 = max(m)
-    n = min(len(s1), len(s2))
-    for i in xrange(n):
-        if s1[i] != s2[i]:
-            return s1[:i]
-    return s1[:n]
-
-
-# Get size, mtime, atime of files.
-
-def getsize(filename):
-    """Return the size of a file, reported by os.stat()"""
-    return os.stat(filename).st_size
-
-def getmtime(filename):
-    """Return the last modification time of a file, reported by os.stat()"""
-    return os.stat(filename).st_mtime
-
-def getatime(filename):
-    """Return the last access time of a file, reported by os.stat()"""
-    return os.stat(filename).st_atime
-
-def getctime(filename):
-    """Return the creation time of a file, reported by os.stat()."""
-    return os.stat(filename).st_ctime
-
-# Is a path a symbolic link?
-# This will always return false on systems where posix.lstat doesn't exist.
-
-def islink(path):
-    """Test for symbolic link.  On OS/2 always returns false"""
-    return False
-
-
-# Does a path exist?
-# This is false for dangling symbolic links.
-
-def exists(path):
-    """Test whether a path exists"""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return False
-    return True
-
+# alias exists to lexists
 lexists = exists
 
 
 # Is a path a directory?
 
-def isdir(path):
-    """Test whether a path is a directory"""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return False
-    return stat.S_ISDIR(st.st_mode)
-
-
-# Is a path a regular file?
-# This follows symbolic links, so both islink() and isdir() can be true
-# for the same path.
-
-def isfile(path):
-    """Test whether a path is a regular file"""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return False
-    return stat.S_ISREG(st.st_mode)
-
-
 # Is a path a mount point?  Either a root (with or without drive letter)
 # or an UNC path with at most a / or \ after the mount point.
 
@@ -258,131 +115,6 @@ def ismount(path):
     return len(p) == 1 and p[0] in '/\\'
 
 
-# Directory tree walk.
-# For each directory under top (including top itself, but excluding
-# '.' and '..'), func(arg, dirname, filenames) is called, where
-# dirname is the name of the directory and filenames is the list
-# of files (and subdirectories etc.) in the directory.
-# The func may modify the filenames list, to implement a filter,
-# or to impose a different order of visiting.
-
-def walk(top, func, arg):
-    """Directory tree walk whth callback function.
-
-    walk(top, func, arg) calls func(arg, d, files) for each directory d
-    in the tree rooted at top (including top itself); files is a list
-    of all the files and subdirs in directory d."""
-    try:
-        names = os.listdir(top)
-    except os.error:
-        return
-    func(arg, top, names)
-    exceptions = ('.', '..')
-    for name in names:
-        if name not in exceptions:
-            name = join(top, name)
-            if isdir(name):
-                walk(name, func, arg)
-
-
-# Expand paths beginning with '~' or '~user'.
-# '~' means $HOME; '~user' means that user's home directory.
-# If the path doesn't begin with '~', or if the user or $HOME is unknown,
-# the path is returned unchanged (leaving error reporting to whatever
-# function is called with the expanded path as argument).
-# See also module 'glob' for expansion of *, ? and [...] in pathnames.
-# (A function should also be defined to do full *sh-style environment
-# variable expansion.)
-
-def expanduser(path):
-    """Expand ~ and ~user constructs.
-
-    If user or $HOME is unknown, do nothing."""
-    if path[:1] != '~':
-        return path
-    i, n = 1, len(path)
-    while i < n and path[i] not in '/\\':
-        i = i + 1
-    if i == 1:
-        if 'HOME' in os.environ:
-            userhome = os.environ['HOME']
-        elif not 'HOMEPATH' in os.environ:
-            return path
-        else:
-            try:
-                drive = os.environ['HOMEDRIVE']
-            except KeyError:
-                drive = ''
-            userhome = join(drive, os.environ['HOMEPATH'])
-    else:
-        return path
-    return userhome + path[i:]
-
-
-# Expand paths containing shell variable substitutions.
-# The following rules apply:
-#       - no expansion within single quotes
-#       - no escape character, except for '$$' which is translated into '$'
-#       - ${varname} is accepted.
-#       - varnames can be made out of letters, digits and the character '_'
-# XXX With COMMAND.COM you can use any characters in a variable name,
-# XXX except '^|<>='.
-
-def expandvars(path):
-    """Expand shell variables of form $var and ${var}.
-
-    Unknown variables are left unchanged."""
-    if '$' not in path:
-        return path
-    import string
-    varchars = string.letters + string.digits + '_-'
-    res = ''
-    index = 0
-    pathlen = len(path)
-    while index < pathlen:
-        c = path[index]
-        if c == '\'':   # no expansion within single quotes
-            path = path[index + 1:]
-            pathlen = len(path)
-            try:
-                index = path.index('\'')
-                res = res + '\'' + path[:index + 1]
-            except ValueError:
-                res = res + path
-                index = pathlen - 1
-        elif c == '$':  # variable or '$$'
-            if path[index + 1:index + 2] == '$':
-                res = res + c
-                index = index + 1
-            elif path[index + 1:index + 2] == '{':
-                path = path[index+2:]
-                pathlen = len(path)
-                try:
-                    index = path.index('}')
-                    var = path[:index]
-                    if var in os.environ:
-                        res = res + os.environ[var]
-                except ValueError:
-                    res = res + path
-                    index = pathlen - 1
-            else:
-                var = ''
-                index = index + 1
-                c = path[index:index + 1]
-                while c != '' and c in varchars:
-                    var = var + c
-                    index = index + 1
-                    c = path[index:index + 1]
-                if var in os.environ:
-                    res = res + os.environ[var]
-                if c != '':
-                    res = res + c
-        else:
-            res = res + c
-        index = index + 1
-    return res
-
-
 # Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A/B.
 
 def normpath(path):
index 2bc836fe5a421a635648bd05c428b1ec472f2409..88303d00c42c76c75ecda0e1b534355a528974e9 100755 (executable)
@@ -28,7 +28,7 @@ def raw_input(prompt):
     return sys.stdin.readline()
 
 def find_function(funcname, filename):
-    cre = re.compile(r'def\s+%s\s*[(]' % funcname)
+    cre = re.compile(r'def\s+%s\s*[(]' % re.escape(funcname))
     try:
         fp = open(filename)
     except IOError:
index 5d02ea3129dc3941e93f5a04f24fbcfbc867e899..773d1d7563806474d6d17760e3a0ded681b0e91c 100644 (file)
@@ -301,7 +301,7 @@ class AppleScript_Suite_Events:
             return _arguments['----']
 
     def as_(self, _object, _attributes={}, **_arguments):
-        """as_: Coercion
+        """as: Coercion
         Required argument: an AE object reference
         Keyword argument _attributes: AppleEvent attribute dictionary
         Returns: anything
index e95db932d11eb51773f0884c22a7659c07d73949..4970bd722d7f99a1db67b221d50c1ab4c94d8e26 100644 (file)
@@ -1550,7 +1550,7 @@ IE_NOMEM = -1
 AS_PAGLCK = 0x80
 AS_CLAIMGAP = 0x40
 AS_UNMAPWAIT = 0x20
-def AS_TYPE_64BIT(as): return \
+def AS_TYPE_64BIT(as_): return \
 
 AS_LREP_LINKEDLIST = 0
 AS_LREP_SKIPLIST = 1
index 9eac6bc13ebc697798b37aa70bdc4386e5f6b799..15212366057da308114bcf2e9d1fbf73478ca2ad 100644 (file)
@@ -12,6 +12,7 @@ for manipulation of the pathname component of URLs.
 
 import os
 import stat
+from genericpath import *
 
 __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
            "basename","dirname","commonprefix","getsize","getmtime",
@@ -105,50 +106,24 @@ def splitdrive(p):
     return '', p
 
 
-# Return the tail (basename) part of a path.
+# Return the tail (basename) part of a path, same as split(path)[1].
 
 def basename(p):
     """Returns the final component of a pathname"""
-    return split(p)[1]
+    i = p.rfind('/') + 1
+    return p[i:]
 
 
-# Return the head (dirname) part of a path.
+# Return the head (dirname) part of a path, same as split(path)[0].
 
 def dirname(p):
     """Returns the directory component of a pathname"""
-    return split(p)[0]
-
-
-# Return the longest prefix of all list elements.
-
-def commonprefix(m):
-    "Given a list of pathnames, returns the longest common leading component"
-    if not m: return ''
-    s1 = min(m)
-    s2 = max(m)
-    n = min(len(s1), len(s2))
-    for i in xrange(n):
-        if s1[i] != s2[i]:
-            return s1[:i]
-    return s1[:n]
-
-# Get size, mtime, atime of files.
-
-def getsize(filename):
-    """Return the size of a file, reported by os.stat()."""
-    return os.stat(filename).st_size
-
-def getmtime(filename):
-    """Return the last modification time of a file, reported by os.stat()."""
-    return os.stat(filename).st_mtime
-
-def getatime(filename):
-    """Return the last access time of a file, reported by os.stat()."""
-    return os.stat(filename).st_atime
+    i = p.rfind('/') + 1
+    head = p[:i]
+    if head and head != '/'*len(head):
+        head = head.rstrip('/')
+    return head
 
-def getctime(filename):
-    """Return the metadata change time of a file, reported by os.stat()."""
-    return os.stat(filename).st_ctime
 
 # Is a path a symbolic link?
 # This will always return false on systems where os.lstat doesn't exist.
@@ -161,19 +136,6 @@ def islink(path):
         return False
     return stat.S_ISLNK(st.st_mode)
 
-
-# Does a path exist?
-# This is false for dangling symbolic links.
-
-def exists(path):
-    """Test whether a path exists.  Returns False for broken symbolic links"""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return False
-    return True
-
-
 # Being true for dangling symbolic links is also useful.
 
 def lexists(path):
@@ -185,32 +147,6 @@ def lexists(path):
     return True
 
 
-# Is a path a directory?
-# This follows symbolic links, so both islink() and isdir() can be true
-# for the same path.
-
-def isdir(path):
-    """Test whether a path is a directory"""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return False
-    return stat.S_ISDIR(st.st_mode)
-
-
-# Is a path a regular file?
-# This follows symbolic links, so both islink() and isfile() can be true
-# for the same path.
-
-def isfile(path):
-    """Test whether a path is a regular file"""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return False
-    return stat.S_ISREG(st.st_mode)
-
-
 # Are two filenames really pointing to the same file?
 
 def samefile(f1, f2):
@@ -328,8 +264,7 @@ def expanduser(path):
         except KeyError:
             return path
         userhome = pwent.pw_dir
-    if userhome.endswith('/'):
-        i += 1
+    userhome = userhome.rstrip('/')
     return userhome + path[i:]
 
 
index 2acdadcde1f2e9170ff53a84f794f5f20a1a5155..ba0b8049f457714bafa9302eecc9e2f09df8daf9 100644 (file)
@@ -116,7 +116,7 @@ class Stats:
 
     def load_stats(self, arg):
         if not arg:  self.stats = {}
-        elif type(arg) == type(""):
+        elif isinstance(arg, basestring):
             f = open(arg, 'rb')
             self.stats = marshal.load(f)
             f.close()
index fae162dc487509c909db8b477dc6fa93f443c8d0..889113c3dd57b975b493b7ee02323687edac38cf 100644 (file)
@@ -118,6 +118,10 @@ def fork():
         if (slave_fd > STDERR_FILENO):
             os.close (slave_fd)
 
+        # Explicitly open the tty to make it become a controlling tty.
+        tmp_fd = os.open(os.ttyname(STDOUT_FILENO), os.O_RDWR)
+        os.close(tmp_fd)
+
     # Parent and child process.
     return pid, master_fd
 
index 073122417d7b4849e7ad409e231dc86fa70f1d91..079b38c411518d451177587461acb609df5b7276 100644 (file)
@@ -172,7 +172,7 @@ def _readmodule(module, path, inpackage=None):
                     # else it's a nested def
                 else:
                     # it's a function
-                    dict[meth_name] = Function(module, meth_name, file, lineno)
+                    dict[meth_name] = Function(fullmodule, meth_name, file, lineno)
                 stack.append((None, thisindent)) # Marker for nested fns
             elif token == 'class':
                 lineno, thisindent = start
index 3020d119811ddf8b1f8bc3dfc466b247f6330252..3ab57c23071707b0a23c29e58f35afaa09306f37 100644 (file)
@@ -29,12 +29,7 @@ starttagopen = re.compile('<[>a-zA-Z]')
 shorttagopen = re.compile('<[a-zA-Z][-.a-zA-Z0-9]*/')
 shorttag = re.compile('<([a-zA-Z][-.a-zA-Z0-9]*)/([^/]*)/')
 piclose = re.compile('>')
-starttag = re.compile(r'<[a-zA-Z][-_.:a-zA-Z0-9]*\s*('
-        r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)(\s*=\s*'
-        r'(\'[^\']*\'|"[^"]*"|[-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~@]'
-        r'[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*(?=[\s>/<])))?'
-    r')*\s*/?\s*(?=[<>])')
-endtag = re.compile(r'</?[a-zA-Z][-_.:a-zA-Z0-9]*\s*/?\s*(?=[<>])')
+endbracket = re.compile('[<>]')
 tagfind = re.compile('[a-zA-Z][-_.a-zA-Z0-9]*')
 attrfind = re.compile(
     r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)(\s*=\s*'
@@ -254,10 +249,14 @@ class SGMLParser(markupbase.ParserBase):
             self.finish_shorttag(tag, data)
             self.__starttag_text = rawdata[start_pos:match.end(1) + 1]
             return k
-        match = starttag.match(rawdata, i)
+        # XXX The following should skip matching quotes (' or ")
+        # As a shortcut way to exit, this isn't so bad, but shouldn't
+        # be used to locate the actual end of the start tag since the
+        # < or > characters may be embedded in an attribute value.
+        match = endbracket.search(rawdata, i+1)
         if not match:
             return -1
-        j = match.end(0)
+        j = match.start(0)
         # Now parse the data between i+1 and j into a tag and attrs
         attrs = []
         if rawdata[i:i+2] == '<>':
@@ -306,10 +305,10 @@ class SGMLParser(markupbase.ParserBase):
     # Internal -- parse endtag
     def parse_endtag(self, i):
         rawdata = self.rawdata
-        match = endtag.match(rawdata, i)
+        match = endbracket.search(rawdata, i+1)
         if not match:
             return -1
-        j = match.end(0)
+        j = match.start(0)
         tag = rawdata[i+2:j].strip().lower()
         if rawdata[j] == '>':
             j = j+1
index 9c8c4fa48cbc5a5451d0767fe7127f651f2a4f39..a7305ce92eaa61b56aa0119e5db82aa82682bd4d 100755 (executable)
@@ -52,9 +52,10 @@ from sys import stderr
 __all__ = ["SMTPException","SMTPServerDisconnected","SMTPResponseException",
            "SMTPSenderRefused","SMTPRecipientsRefused","SMTPDataError",
            "SMTPConnectError","SMTPHeloError","SMTPAuthenticationError",
-           "quoteaddr","quotedata","SMTP"]
+           "quoteaddr","quotedata","SMTP","SMTP_SSL"]
 
 SMTP_PORT = 25
+SMTP_SSL_PORT = 465
 CRLF="\r\n"
 
 OLDSTYLE_AUTH = re.compile(r"auth=(.*)", re.I)
@@ -240,6 +241,7 @@ class SMTP:
 
         """
         self.esmtp_features = {}
+        self.default_port = SMTP_PORT
         if host:
             (code, msg) = self.connect(host, port)
             if code != 220:
@@ -271,6 +273,13 @@ class SMTP:
         """
         self.debuglevel = debuglevel
 
+    def _get_socket(self,af, socktype, proto,sa):
+        # This makes it simpler for SMTP_SSL to use the SMTP connect code
+        # and just alter the socket connection bit.
+        self.sock = socket.socket(af, socktype, proto)
+        if self.debuglevel > 0: print>>stderr, 'connect:', (host, port)
+        self.sock.connect(sa)
+
     def connect(self, host='localhost', port = 0):
         """Connect to a host on a given port.
 
@@ -289,16 +298,14 @@ class SMTP:
                 try: port = int(port)
                 except ValueError:
                     raise socket.error, "nonnumeric port"
-        if not port: port = SMTP_PORT
+        if not port: port = self.default_port
         if self.debuglevel > 0: print>>stderr, 'connect:', (host, port)
         msg = "getaddrinfo returns an empty list"
         self.sock = None
         for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
             af, socktype, proto, canonname, sa = res
             try:
-                self.sock = socket.socket(af, socktype, proto)
-                if self.debuglevel > 0: print>>stderr, 'connect:', sa
-                self.sock.connect(sa)
+                self._get_socket(af,socktype,proto,sa)
             except socket.error, msg:
                 if self.debuglevel > 0: print>>stderr, 'connect fail:', msg
                 if self.sock:
@@ -716,6 +723,28 @@ class SMTP:
         self.docmd("quit")
         self.close()
 
+class SMTP_SSL(SMTP):
+    """ This is a subclass derived from SMTP that connects over an SSL encrypted
+    socket (to use this class you need a socket module that was compiled with SSL
+    support). If host is not specified, '' (the local host) is used. If port is
+    omitted, the standard SMTP-over-SSL port (465) is used. keyfile and certfile
+    are also optional - they can contain a PEM formatted private key and
+    certificate chain file for the SSL connection.
+    """
+    def __init__(self, host = '', port = 0, local_hostname = None,
+                 keyfile = None, certfile = None):
+        self.keyfile = keyfile
+        self.certfile = certfile
+        SMTP.__init__(self,host,port,local_hostname)
+        self.default_port = SMTP_SSL_PORT
+
+    def _get_socket(self,af, socktype, proto,sa):
+        self.sock = socket.socket(af, socktype, proto)
+        if self.debuglevel > 0: print>>stderr, 'connect:', (host, port)
+        self.sock.connect(sa)
+        sslobj = socket.ssl(self.sock, self.keyfile, self.certfile)
+        self.sock = SSLFakeSocket(self.sock, sslobj)
+        self.file = SSLFakeFile(sslobj)
 
 # Test the sendmail method, which tests most of the others.
 # Note: This always sends to localhost.
index 55e267fd7aed97a8ae242fa1f8eb041757afc648..68ab05e4864747366ec38f3265717b387a238043 100644 (file)
@@ -966,6 +966,8 @@ class Popen(object):
 
             if isinstance(args, types.StringTypes):
                 args = [args]
+            else:
+                args = list(args)
 
             if shell:
                 args = ["/bin/sh", "-c"] + args
@@ -1001,14 +1003,10 @@ class Popen(object):
                     if errwrite:
                         os.dup2(errwrite, 2)
 
-                    # Close pipe fds.  Make sure we doesn't close the same
-                    # fd more than once.
-                    if p2cread:
-                        os.close(p2cread)
-                    if c2pwrite and c2pwrite not in (p2cread,):
-                        os.close(c2pwrite)
-                    if errwrite and errwrite not in (p2cread, c2pwrite):
-                        os.close(errwrite)
+                    # Close pipe fds.  Make sure we don't close the same
+                    # fd more than once, or standard fds.
+                    for fd in set((p2cread, c2pwrite, errwrite))-set((0,1,2)):
+                        if fd: os.close(fd)
 
                     # Close all other fds, if asked for
                     if close_fds:
index d238063949e4273afb002236995a6a1409b965b2..14553a776d3e441aaa18c7603fe3763a98b0004c 100644 (file)
@@ -49,6 +49,7 @@ import stat
 import errno
 import time
 import struct
+import copy
 
 if sys.platform == 'mac':
     # This module needs work for MacOS9, especially in the area of pathname
@@ -138,7 +139,7 @@ TOEXEC  = 0001           # execute/search by other
 def stn(s, length):
     """Convert a python string to a null-terminated string buffer.
     """
-    return s[:length-1] + (length - len(s) - 1) * NUL + NUL
+    return s[:length] + (length - len(s)) * NUL
 
 def nti(s):
     """Convert a number field to a python number.
@@ -146,7 +147,7 @@ def nti(s):
     # There are two possible encodings for a number field, see
     # itn() below.
     if s[0] != chr(0200):
-        n = int(s.rstrip(NUL) or "0", 8)
+        n = int(s.rstrip(NUL + " ") or "0", 8)
     else:
         n = 0L
         for i in xrange(len(s) - 1):
@@ -795,7 +796,6 @@ class TarInfo(object):
         """Construct a TarInfo object. name is the optional name
            of the member.
         """
-
         self.name = name        # member name (dirnames must end with '/')
         self.mode = 0666        # file permissions
         self.uid = 0            # user id
@@ -809,8 +809,6 @@ class TarInfo(object):
         self.gname = "group"    # group name
         self.devmajor = 0       # device major number
         self.devminor = 0       # device minor number
-        self.prefix = ""        # prefix to filename or information
-                                # about sparse files
 
         self.offset = 0         # the tar header starts here
         self.offset_data = 0    # the file's data starts here
@@ -842,24 +840,74 @@ class TarInfo(object):
         tarinfo.gname = buf[297:329].rstrip(NUL)
         tarinfo.devmajor = nti(buf[329:337])
         tarinfo.devminor = nti(buf[337:345])
-        tarinfo.prefix = buf[345:500]
+        prefix = buf[345:500].rstrip(NUL)
+
+        if prefix and not tarinfo.issparse():
+            tarinfo.name = prefix + "/" + tarinfo.name
 
         if tarinfo.chksum not in calc_chksums(buf):
             raise ValueError("invalid header")
         return tarinfo
 
     def tobuf(self, posix=False):
-        """Return a tar header block as a 512 byte string.
+        """Return a tar header as a string of 512 byte blocks.
         """
+        buf = ""
+        type = self.type
+        prefix = ""
+
+        if self.name.endswith("/"):
+            type = DIRTYPE
+
+        if type in (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK):
+            # Prevent "././@LongLink" from being normalized.
+            name = self.name
+        else:
+            name = normpath(self.name)
+
+        if type == DIRTYPE:
+            # directories should end with '/'
+            name += "/"
+
+        linkname = self.linkname
+        if linkname:
+            # if linkname is empty we end up with a '.'
+            linkname = normpath(linkname)
+
+        if posix:
+            if self.size > MAXSIZE_MEMBER:
+                raise ValueError("file is too large (>= 8 GB)")
+
+            if len(self.linkname) > LENGTH_LINK:
+                raise ValueError("linkname is too long (>%d)" % (LENGTH_LINK))
+
+            if len(name) > LENGTH_NAME:
+                prefix = name[:LENGTH_PREFIX + 1]
+                while prefix and prefix[-1] != "/":
+                    prefix = prefix[:-1]
+
+                name = name[len(prefix):]
+                prefix = prefix[:-1]
+
+                if not prefix or len(name) > LENGTH_NAME:
+                    raise ValueError("name is too long")
+
+        else:
+            if len(self.linkname) > LENGTH_LINK:
+                buf += self._create_gnulong(self.linkname, GNUTYPE_LONGLINK)
+
+            if len(name) > LENGTH_NAME:
+                buf += self._create_gnulong(name, GNUTYPE_LONGNAME)
+
         parts = [
-            stn(self.name, 100),
+            stn(name, 100),
             itn(self.mode & 07777, 8, posix),
             itn(self.uid, 8, posix),
             itn(self.gid, 8, posix),
             itn(self.size, 12, posix),
             itn(self.mtime, 12, posix),
             "        ", # checksum field
-            self.type,
+            type,
             stn(self.linkname, 100),
             stn(MAGIC, 6),
             stn(VERSION, 2),
@@ -867,15 +915,38 @@ class TarInfo(object):
             stn(self.gname, 32),
             itn(self.devmajor, 8, posix),
             itn(self.devminor, 8, posix),
-            stn(self.prefix, 155)
+            stn(prefix, 155)
         ]
 
-        buf = struct.pack("%ds" % BLOCKSIZE, "".join(parts))
-        chksum = calc_chksums(buf)[0]
-        buf = buf[:148] + "%06o\0" % chksum + buf[155:]
+        buf += struct.pack("%ds" % BLOCKSIZE, "".join(parts))
+        chksum = calc_chksums(buf[-BLOCKSIZE:])[0]
+        buf = buf[:-364] + "%06o\0" % chksum + buf[-357:]
         self.buf = buf
         return buf
 
+    def _create_gnulong(self, name, type):
+        """Create a GNU longname/longlink header from name.
+           It consists of an extended tar header, with the length
+           of the longname as size, followed by data blocks,
+           which contain the longname as a null terminated string.
+        """
+        name += NUL
+
+        tarinfo = self.__class__()
+        tarinfo.name = "././@LongLink"
+        tarinfo.type = type
+        tarinfo.mode = 0
+        tarinfo.size = len(name)
+
+        # create extended header
+        buf = tarinfo.tobuf()
+        # create name blocks
+        buf += name
+        blocks, remainder = divmod(len(name), BLOCKSIZE)
+        if remainder > 0:
+            buf += (BLOCKSIZE - remainder) * NUL
+        return buf
+
     def isreg(self):
         return self.type in REGULAR_TYPES
     def isfile(self):
@@ -1379,50 +1450,11 @@ class TarFile(object):
         """
         self._check("aw")
 
-        tarinfo.name = normpath(tarinfo.name)
-        if tarinfo.isdir():
-            # directories should end with '/'
-            tarinfo.name += "/"
-
-        if tarinfo.linkname:
-            tarinfo.linkname = normpath(tarinfo.linkname)
-
-        if tarinfo.size > MAXSIZE_MEMBER:
-            if self.posix:
-                raise ValueError("file is too large (>= 8 GB)")
-            else:
-                self._dbg(2, "tarfile: Created GNU tar largefile header")
-
-
-        if len(tarinfo.linkname) > LENGTH_LINK:
-            if self.posix:
-                raise ValueError("linkname is too long (>%d)" % (LENGTH_LINK))
-            else:
-                self._create_gnulong(tarinfo.linkname, GNUTYPE_LONGLINK)
-                tarinfo.linkname = tarinfo.linkname[:LENGTH_LINK -1]
-                self._dbg(2, "tarfile: Created GNU tar extension LONGLINK")
-
-        if len(tarinfo.name) > LENGTH_NAME:
-            if self.posix:
-                prefix = tarinfo.name[:LENGTH_PREFIX + 1]
-                while prefix and prefix[-1] != "/":
-                    prefix = prefix[:-1]
-
-                name = tarinfo.name[len(prefix):]
-                prefix = prefix[:-1]
-
-                if not prefix or len(name) > LENGTH_NAME:
-                    raise ValueError("name is too long (>%d)" % (LENGTH_NAME))
-
-                tarinfo.name   = name
-                tarinfo.prefix = prefix
-            else:
-                self._create_gnulong(tarinfo.name, GNUTYPE_LONGNAME)
-                tarinfo.name = tarinfo.name[:LENGTH_NAME - 1]
-                self._dbg(2, "tarfile: Created GNU tar extension LONGNAME")
+        tarinfo = copy.copy(tarinfo)
 
-        self.fileobj.write(tarinfo.tobuf(self.posix))
-        self.offset += BLOCKSIZE
+        buf = tarinfo.tobuf(self.posix)
+        self.fileobj.write(buf)
+        self.offset += len(buf)
 
         # If there's data to follow, append it.
         if fileobj is not None:
@@ -1781,12 +1813,6 @@ class TarFile(object):
         if tarinfo.isreg() and tarinfo.name.endswith("/"):
             tarinfo.type = DIRTYPE
 
-        # The prefix field is used for filenames > 100 in
-        # the POSIX standard.
-        # name = prefix + '/' + name
-        tarinfo.name = normpath(os.path.join(tarinfo.prefix.rstrip(NUL),
-                                             tarinfo.name))
-
         # Directory names should have a '/' at the end.
         if tarinfo.isdir():
             tarinfo.name += "/"
@@ -1911,10 +1937,6 @@ class TarFile(object):
         self.offset += self._block(tarinfo.size)
         tarinfo.size = origsize
 
-        # Clear the prefix field so that it is not used
-        # as a pathname in next().
-        tarinfo.prefix = ""
-
         return tarinfo
 
     #--------------------------------------------------------------------------
@@ -1972,31 +1994,6 @@ class TarFile(object):
         else:
             return TarIter(self)
 
-    def _create_gnulong(self, name, type):
-        """Write a GNU longname/longlink member to the TarFile.
-           It consists of an extended tar header, with the length
-           of the longname as size, followed by data blocks,
-           which contain the longname as a null terminated string.
-        """
-        name += NUL
-
-        tarinfo = TarInfo()
-        tarinfo.name = "././@LongLink"
-        tarinfo.type = type
-        tarinfo.mode = 0
-        tarinfo.size = len(name)
-
-        # write extended header
-        self.fileobj.write(tarinfo.tobuf())
-        self.offset += BLOCKSIZE
-        # write name blocks
-        self.fileobj.write(name)
-        blocks, remainder = divmod(tarinfo.size, BLOCKSIZE)
-        if remainder > 0:
-            self.fileobj.write(NUL * (BLOCKSIZE - remainder))
-            blocks += 1
-        self.offset += blocks * BLOCKSIZE
-
     def _dbg(self, level, msg):
         """Write debugging output to sys.stderr.
         """
index 496c40040b6bf4b9d0bd53a5de44723a6f3f2db1..27f696cdbf9e8ab446c4872fb8974e704b85a432 100644 (file)
@@ -379,8 +379,8 @@ test_support provides the following useful objects:
       point numbers when you expect them to only be approximately equal
       withing a fuzz factor (``test_support.FUZZ``, which defaults to 1e-6).
 
-    * ``check_syntax(statement)`` - make sure that the statement is *not*
-      correct Python syntax.
+    * ``check_syntax_error(testcase, statement)`` - make sure that the
+      statement is *not* correct Python syntax.
 
 
 Python and C statement coverage results are currently available at
diff --git a/Lib/test/crashers/bogus_sre_bytecode.py b/Lib/test/crashers/bogus_sre_bytecode.py
new file mode 100644 (file)
index 0000000..4bfc730
--- /dev/null
@@ -0,0 +1,47 @@
+"""
+The regular expression engine in '_sre' can segfault when interpreting
+bogus bytecode.
+
+It is unclear whether this is a real bug or a "won't fix" case like
+bogus_code_obj.py, because it requires bytecode that is built by hand,
+as opposed to compiled by 're' from a string-source regexp.  The
+difference with bogus_code_obj, though, is that the only existing regexp
+compiler is written in Python, so that the C code has no choice but
+accept arbitrary bytecode from Python-level.
+
+The test below builds and runs random bytecodes until 'match' crashes
+Python.  I have not investigated why exactly segfaults occur nor how
+hard they would be to fix.  Here are a few examples of 'code' that
+segfault for me:
+
+    [21, 50814, 8, 29, 16]
+    [21, 3967, 26, 10, 23, 54113]
+    [29, 23, 0, 2, 5]
+    [31, 64351, 0, 28, 3, 22281, 20, 4463, 9, 25, 59154, 15245, 2,
+                  16343, 3, 11600, 24380, 10, 37556, 10, 31, 15, 31]
+
+Here is also a 'code' that triggers an infinite uninterruptible loop:
+
+    [29, 1, 8, 21, 1, 43083, 6]
+
+"""
+
+import _sre, random
+
+def pick():
+    n = random.randrange(-65536, 65536)
+    if n < 0:
+        n &= 31
+    return n
+
+ss = ["", "world", "x" * 500]
+
+while 1:
+    code = [pick() for i in range(random.randrange(5, 25))]
+    print code
+    pat = _sre.compile(None, 0, code)
+    for s in ss:
+        try:
+            pat.match(s)
+        except RuntimeError:
+            pass
diff --git a/Lib/test/crashers/infinite_loop_re.py b/Lib/test/crashers/infinite_loop_re.py
new file mode 100644 (file)
index 0000000..9aecc56
--- /dev/null
@@ -0,0 +1,16 @@
+
+# This was taken from http://python.org/sf/1541697
+# It's not technically a crasher.  It may not even truly be infinite,
+# however, I haven't waited a long time to see the result.  It takes
+# 100% of CPU while running this and should be fixed.
+
+import re
+starttag = re.compile(r'<[a-zA-Z][-_.:a-zA-Z0-9]*\s*('
+        r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)(\s*=\s*'
+        r'(\'[^\']*\'|"[^"]*"|[-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~@]'
+        r'[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*(?=[\s>/<])))?'
+    r')*\s*/?\s*(?=[<>])')
+
+if __name__ == '__main__':
+    foo = '<table cellspacing="0" cellpadding="0" style="border-collapse'
+    starttag.match(foo)
diff --git a/Lib/test/crashers/loosing_mro_ref.py b/Lib/test/crashers/loosing_mro_ref.py
new file mode 100644 (file)
index 0000000..f0b8047
--- /dev/null
@@ -0,0 +1,36 @@
+"""
+There is a way to put keys of any type in a type's dictionary.
+I think this allows various kinds of crashes, but so far I have only
+found a convoluted attack of _PyType_Lookup(), which uses the mro of the
+type without holding a strong reference to it.  Probably works with
+super.__getattribute__() too, which uses the same kind of code.
+"""
+
+class MyKey(object):
+    def __hash__(self):
+        return hash('mykey')
+
+    def __cmp__(self, other):
+        # the following line decrefs the previous X.__mro__
+        X.__bases__ = (Base2,)
+        # trash all tuples of length 3, to make sure that the items of
+        # the previous X.__mro__ are really garbage
+        z = []
+        for i in range(1000):
+            z.append((i, None, None))
+        return -1
+
+
+class Base(object):
+    mykey = 'from Base'
+
+class Base2(object):
+    mykey = 'from Base2'
+
+class X(Base):
+    # you can't add a non-string key to X.__dict__, but it can be
+    # there from the beginning :-)
+    locals()[MyKey()] = 5
+
+print X.mykey
+# I get a segfault, or a slightly wrong assertion error in a debug build.
index 453c51c8a701db1dd72fb8e2cfdf26e9006c3dbc..fc1a6c3cbac59eb71a490fb8dc5b029bbf5a1ce7 100644 (file)
@@ -269,7 +269,6 @@ class CommonTest(seq_tests.CommonTest):
         self.assertRaises(TypeError, a.insert)
 
     def test_pop(self):
-        from decimal import Decimal
         a = self.type2test([-1, 0, 1])
         a.pop()
         self.assertEqual(a, [-1, 0])
@@ -281,8 +280,6 @@ class CommonTest(seq_tests.CommonTest):
         self.assertRaises(IndexError, a.pop)
         self.assertRaises(TypeError, a.pop, 42, 42)
         a = self.type2test([0, 10, 20, 30, 40])
-        self.assertEqual(a.pop(Decimal(2)), 20)
-        self.assertRaises(IndexError, a.pop, Decimal(25))
 
     def test_remove(self):
         a = self.type2test([0, 0, 1])
diff --git a/Lib/test/output/test_MimeWriter b/Lib/test/output/test_MimeWriter
deleted file mode 100644 (file)
index 9b97d93..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-test_MimeWriter
-From: bwarsaw@cnri.reston.va.us
-Date: Mon Feb 12 17:21:48 EST 1996
-To: kss-submit@cnri.reston.va.us
-MIME-Version: 1.0
-Content-Type: multipart/knowbot;
-    boundary="801spam999";
-    version="0.1"
-
-This is a multi-part message in MIME format.
-
---801spam999
-Content-Type: multipart/knowbot-metadata;
-    boundary="802spam999"
-
-
---802spam999
-Content-Type: message/rfc822
-KP-Metadata-Type: simple
-KP-Access: read-only
-
-KPMD-Interpreter: python
-KPMD-Interpreter-Version: 1.3
-KPMD-Owner-Name: Barry Warsaw
-KPMD-Owner-Rendezvous: bwarsaw@cnri.reston.va.us
-KPMD-Home-KSS: kss.cnri.reston.va.us
-KPMD-Identifier: hdl://cnri.kss/my_first_knowbot
-KPMD-Launch-Date: Mon Feb 12 16:39:03 EST 1996
-
---802spam999
-Content-Type: text/isl
-KP-Metadata-Type: complex
-KP-Metadata-Key: connection
-KP-Access: read-only
-KP-Connection-Description: Barry's Big Bass Business
-KP-Connection-Id: B4
-KP-Connection-Direction: client
-
-INTERFACE Seller-1;
-
-TYPE Seller = OBJECT
-    DOCUMENTATION "A simple Seller interface to test ILU"
-    METHODS
-            price():INTEGER,
-    END;
-
---802spam999
-Content-Type: message/external-body;
-    access-type="URL";
-    URL="hdl://cnri.kss/generic-knowbot"
-
-Content-Type: text/isl
-KP-Metadata-Type: complex
-KP-Metadata-Key: generic-interface
-KP-Access: read-only
-KP-Connection-Description: Generic Interface for All Knowbots
-KP-Connection-Id: generic-kp
-KP-Connection-Direction: client
-
-
---802spam999--
-
---801spam999
-Content-Type: multipart/knowbot-code;
-    boundary="803spam999"
-
-
---803spam999
-Content-Type: text/plain
-KP-Module-Name: BuyerKP
-
-class Buyer:
-    def __setup__(self, maxprice):
-        self._maxprice = maxprice
-
-    def __main__(self, kos):
-        """Entry point upon arrival at a new KOS."""
-        broker = kos.broker()
-        # B4 == Barry's Big Bass Business :-)
-        seller = broker.lookup('Seller_1.Seller', 'B4')
-        if seller:
-            price = seller.price()
-            print 'Seller wants $', price, '... '
-            if price > self._maxprice:
-                print 'too much!'
-            else:
-                print "I'll take it!"
-        else:
-            print 'no seller found here'
-
---803spam999--
-
---801spam999
-Content-Type: multipart/knowbot-state;
-    boundary="804spam999"
-KP-Main-Module: main
-
-
---804spam999
-Content-Type: text/plain
-KP-Module-Name: main
-
-# instantiate a buyer instance and put it in a magic place for the KOS
-# to find.
-__kp__ = Buyer()
-__kp__.__setup__(500)
-
---804spam999--
-
---801spam999--
diff --git a/Lib/test/output/test_cgi b/Lib/test/output/test_cgi
deleted file mode 100644 (file)
index 26eddfa..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-test_cgi
-'' => []
-'&' => []
-'&&' => []
-'=' => [('', '')]
-'=a' => [('', 'a')]
-'a' => [('a', '')]
-'a=' => [('a', '')]
-'a=' => [('a', '')]
-'&a=b' => [('a', 'b')]
-'a=a+b&b=b+c' => [('a', 'a b'), ('b', 'b c')]
-'a=1&a=2' => [('a', '1'), ('a', '2')]
-''
-'&'
-'&&'
-';'
-';&;'
-'='
-'=&='
-'=;='
-'=a'
-'&=a'
-'=a&'
-'=&a'
-'b=a'
-'b+=a'
-'a=b=a'
-'a=+b=a'
-'&b=a'
-'b&=a'
-'a=a+b&b=b+c'
-'a=a+b&a=b+a'
-'x=1&y=2.0&z=2-3.%2b0'
-'x=1;y=2.0&z=2-3.%2b0'
-'x=1;y=2.0;z=2-3.%2b0'
-'Hbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=env'
-'group_id=5470&set=custom&_assigned_to=31392&_status=1&_category=100&SUBMIT=Browse'
-Testing log
-Testing initlog 1
-Testing log 2
-Test FieldStorage methods that use readline
-Test basic FieldStorage multipart parsing
diff --git a/Lib/test/output/test_cookie b/Lib/test/output/test_cookie
deleted file mode 100644 (file)
index 95c7328..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-test_cookie
-<SimpleCookie: chips='ahoy' vienna='finger'>
-Set-Cookie: chips=ahoy
-Set-Cookie: vienna=finger
-  chips 'ahoy' 'ahoy'
-Set-Cookie: chips=ahoy
-  vienna 'finger' 'finger'
-Set-Cookie: vienna=finger
-<SimpleCookie: keebler='E=mc2; L="Loves"; fudge=\n;'>
-Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"
-  keebler 'E=mc2; L="Loves"; fudge=\n;' 'E=mc2; L="Loves"; fudge=\n;'
-Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"
-<SimpleCookie: keebler='E=mc2'>
-Set-Cookie: keebler=E=mc2
-  keebler 'E=mc2' 'E=mc2'
-Set-Cookie: keebler=E=mc2
-Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme
-
-        <script type="text/javascript">
-        <!-- begin hiding
-        document.cookie = "Customer="WILE_E_COYOTE"; Path=/acme; Version=1";
-        // end hiding -->
-        </script>
-        
-
-        <script type="text/javascript">
-        <!-- begin hiding
-        document.cookie = "Customer="WILE_E_COYOTE"; Path=/acme";
-        // end hiding -->
-        </script>
-        
-If anything blows up after this line, it's from Cookie's doctest.
diff --git a/Lib/test/output/test_global b/Lib/test/output/test_global
deleted file mode 100644 (file)
index a427a29..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-test_global
-got SyntaxError as expected
-got SyntaxError as expected
-got SyntaxError as expected
-as expected, no SyntaxError
diff --git a/Lib/test/output/test_grammar b/Lib/test/output/test_grammar
deleted file mode 100644 (file)
index 5033276..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-test_grammar
-1. Parser
-1.1 Tokens
-1.1.1 Backslashes
-1.1.2 Numeric literals
-1.1.2.1 Plain integers
-1.1.2.2 Long integers
-1.1.2.3 Floating point
-1.1.3 String literals
-1.1.4 Ellipsis literal
-1.2 Grammar
-single_input
-file_input
-expr_input
-eval_input
-funcdef
-lambdef
-simple_stmt
-expr_stmt
-print_stmt
-1 2 3
-1 2 3
-1 1 1
-extended print_stmt
-1 2 3
-1 2 3
-1 1 1
-hello world
-del_stmt
-pass_stmt
-flow_stmt
-break_stmt
-continue_stmt
-continue + try/except ok
-continue + try/finally ok
-testing continue and break in try/except in loop
-return_stmt
-yield_stmt
-raise_stmt
-import_name
-import_from
-global_stmt
-assert_stmt
-if_stmt
-while_stmt
-for_stmt
-try_stmt
-suite
-test
-comparison
-binary mask ops
-shift ops
-additive ops
-multiplicative ops
-unary ops
-selectors
-
-[1, (1,), (1, 2), (1, 2, 3)]
-atoms
-classdef
-['Apple', 'Banana', 'Coco  nut']
-[3, 6, 9, 12, 15]
-[3, 4, 5]
-[(1, 'Apple'), (1, 'Banana'), (1, 'Coconut'), (2, 'Apple'), (2, 'Banana'), (2, 'Coconut'), (3, 'Apple'), (3, 'Banana'), (3, 'Coconut'), (4, 'Apple'), (4, 'Banana'), (4, 'Coconut'), (5, 'Apple'), (5, 'Banana'), (5, 'Coconut')]
-[(1, 'Banana'), (1, 'Coconut'), (2, 'Banana'), (2, 'Coconut'), (3, 'Banana'), (3, 'Coconut'), (4, 'Banana'), (4, 'Coconut'), (5, 'Banana'), (5, 'Coconut')]
-[[1], [1, 1], [1, 2, 4], [1, 3, 9, 27], [1, 4, 16, 64, 256]]
-[False, False, False]
-[[1, 2], [3, 4], [5, 6]]
-[('Boeing', 'Airliner'), ('Boeing', 'Engine'), ('Ford', 'Engine'), ('Macdonalds', 'Cheeseburger')]
diff --git a/Lib/test/output/test_httplib b/Lib/test/output/test_httplib
deleted file mode 100644 (file)
index 302b876..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-test_httplib
-reply: 'HTTP/1.1 200 Ok\r\n'
-Text
-reply: 'HTTP/1.1 400.100 Not Ok\r\n'
-BadStatusLine raised as expected
-InvalidURL raised as expected
-InvalidURL raised as expected
-reply: 'HTTP/1.1 200 OK\r\n'
-header: Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"
-header: Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"
-reply: 'HTTP/1.1 200 OK\r\n'
-header: Content-Length: 14432
-
diff --git a/Lib/test/output/test_math b/Lib/test/output/test_math
deleted file mode 100644 (file)
index 4c8f77c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-test_math
-math module, testing with eps 1e-05
-constants
-acos
-asin
-atan
-atan2
-ceil
-cos
-cosh
-degrees
-exp
-fabs
-floor
-fmod
-frexp
-hypot
-ldexp
-log
-log10
-modf
-pow
-radians
-sin
-sinh
-sqrt
-tan
-tanh
diff --git a/Lib/test/output/test_mmap b/Lib/test/output/test_mmap
deleted file mode 100644 (file)
index 605f840..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-test_mmap
-<type 'mmap.mmap'>
-  Position of foo: 1.0 pages
-  Length of file: 2.0 pages
-  Contents of byte 0: '\x00'
-  Contents of first 3 bytes: '\x00\x00\x00'
-
-  Modifying file's content...
-  Contents of byte 0: '3'
-  Contents of first 3 bytes: '3\x00\x00'
-  Contents of second page: '\x00foobar\x00'
-  Regex match on mmap (page start, length of match): 1.0 6
-  Seek to zeroth byte
-  Seek to 42nd byte
-  Seek to last byte
-  Try to seek to negative position...
-  Try to seek beyond end of mmap...
-  Try to seek to negative position...
-  Attempting resize()
-  Creating 10 byte test data file.
-  Opening mmap with access=ACCESS_READ
-  Ensuring that readonly mmap can't be slice assigned.
-  Ensuring that readonly mmap can't be item assigned.
-  Ensuring that readonly mmap can't be write() to.
-  Ensuring that readonly mmap can't be write_byte() to.
-  Ensuring that readonly mmap can't be resized.
-  Opening mmap with size too big
-  Opening mmap with access=ACCESS_WRITE
-  Modifying write-through memory map.
-  Opening mmap with access=ACCESS_COPY
-  Modifying copy-on-write memory map.
-  Ensuring copy-on-write maps cannot be resized.
-  Ensuring invalid access parameter raises exception.
-  Try opening a bad file descriptor...
-  Ensuring that passing 0 as map length sets map size to current file size.
-  Ensuring that passing 0 as map length sets map size to current file size.
-  anonymous mmap.mmap(-1, PAGESIZE)...
- Test passed
diff --git a/Lib/test/output/test_nis b/Lib/test/output/test_nis
deleted file mode 100644 (file)
index 0853ab4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-test_nis
-nis.maps()
diff --git a/Lib/test/output/test_opcodes b/Lib/test/output/test_opcodes
deleted file mode 100644 (file)
index 4685571..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-test_opcodes
-2. Opcodes
-XXX Not yet fully implemented
-2.1 try inside for loop
-2.2 raise class exceptions
-2.3 comparing function objects
diff --git a/Lib/test/output/test_openpty b/Lib/test/output/test_openpty
deleted file mode 100644 (file)
index a8b8b5e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-test_openpty
-Ping!
diff --git a/Lib/test/output/test_poll b/Lib/test/output/test_poll
deleted file mode 100644 (file)
index ca61d37..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-test_poll
-Running poll test 1
- This is a test.
- This is a test.
- This is a test.
- This is a test.
- This is a test.
- This is a test.
- This is a test.
- This is a test.
- This is a test.
- This is a test.
- This is a test.
- This is a test.
-Poll test 1 complete
-Running poll test 2
-Poll test 2 complete
-Running poll test 3
-Poll test 3 complete
diff --git a/Lib/test/output/test_regex b/Lib/test/output/test_regex
deleted file mode 100644 (file)
index 1deb26f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-test_regex
-no match: -1
-successful search: 6
-caught expected exception
-failed awk syntax: -1
-successful awk syntax: 2
-failed awk syntax: -1
-matching with group names and compile()
--1
-caught expected exception
-matching with group names and symcomp()
-7
-801 999
-801
-('801', '999')
-('801', '999')
-realpat: \([0-9]+\) *\([0-9]+\)
-groupindex: {'one': 1, 'two': 2}
-not case folded search: -1
-case folded search: 6
-__members__: ['last', 'regs', 'translate', 'groupindex', 'realpat', 'givenpat']
-regs: ((6, 11), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1), (-1, -1))
-last: HELLO WORLD
-translate: 256
-givenpat: world
-match with pos: -1
-search with pos: 18
-bogus group: ('world', None, None)
-no name: caught expected exception
diff --git a/Lib/test/output/test_scope b/Lib/test/output/test_scope
deleted file mode 100644 (file)
index a439e44..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-test_scope
-1. simple nesting
-2. extra nesting
-3. simple nesting + rebinding
-4. nesting with global but no free
-5. nesting through class
-6. nesting plus free ref to global
-7. nearest enclosing scope
-8. mixed freevars and cellvars
-9. free variable in method
-10. recursion
-11. unoptimized namespaces
-12. lambdas
-13. UnboundLocal
-14. complex definitions
-15. scope of global statements
-16. check leaks
-17. class and global
-18. verify that locals() works
-19. var is bound and free in class
-20. interaction with trace function
-20. eval and exec with free variables
-21. list comprehension with local variables
-22. eval with free variables
index 0c1430886a9cf621f508d60f3b63870340d52ed3..4a3d58cb28930ebef14ba6633ff384e5005d4701 100644 (file)
@@ -1,15 +1,23 @@
 test_tokenize
-1,0-1,35:      COMMENT "# Tests for the 'tokenize' module.\n"
-2,0-2,43:      COMMENT '# Large bits stolen from test_grammar.py. \n'
+1,0-1,34:      COMMENT "# Tests for the 'tokenize' module."
+1,34-1,35:     NL      '\n'
+2,0-2,42:      COMMENT '# Large bits stolen from test_grammar.py. '
+2,42-2,43:     NL      '\n'
 3,0-3,1:       NL      '\n'
-4,0-4,11:      COMMENT '# Comments\n'
+4,0-4,10:      COMMENT '# Comments'
+4,10-4,11:     NL      '\n'
 5,0-5,3:       STRING  '"#"'
 5,3-5,4:       NEWLINE '\n'
-6,0-6,3:       COMMENT "#'\n"
-7,0-7,3:       COMMENT '#"\n'
-8,0-8,3:       COMMENT '#\\\n'
-9,7-9,9:       COMMENT '#\n'
-10,4-10,10:    COMMENT '# abc\n'
+6,0-6,2:       COMMENT "#'"
+6,2-6,3:       NL      '\n'
+7,0-7,2:       COMMENT '#"'
+7,2-7,3:       NL      '\n'
+8,0-8,2:       COMMENT '#\\'
+8,2-8,3:       NL      '\n'
+9,7-9,8:       COMMENT '#'
+9,8-9,9:       NL      '\n'
+10,4-10,9:     COMMENT '# abc'
+10,9-10,10:    NL      '\n'
 11,0-12,4:     STRING  "'''#\n#'''"
 12,4-12,5:     NEWLINE '\n'
 13,0-13,1:     NL      '\n'
@@ -19,7 +27,8 @@ test_tokenize
 14,7-14,8:     COMMENT '#'
 14,8-14,9:     NEWLINE '\n'
 15,0-15,1:     NL      '\n'
-16,0-16,25:    COMMENT '# Balancing continuation\n'
+16,0-16,24:    COMMENT '# Balancing continuation'
+16,24-16,25:   NL      '\n'
 17,0-17,1:     NL      '\n'
 18,0-18,1:     NAME    'a'
 18,2-18,3:     OP      '='
@@ -93,7 +102,8 @@ test_tokenize
 29,2-29,3:     OP      ')'
 29,3-29,4:     NEWLINE '\n'
 30,0-30,1:     NL      '\n'
-31,0-31,37:    COMMENT '# Backslash means line continuation:\n'
+31,0-31,36:    COMMENT '# Backslash means line continuation:'
+31,36-31,37:   NL      '\n'
 32,0-32,1:     NAME    'x'
 32,2-32,3:     OP      '='
 32,4-32,5:     NUMBER  '1'
@@ -101,13 +111,15 @@ test_tokenize
 33,2-33,3:     NUMBER  '1'
 33,3-33,4:     NEWLINE '\n'
 34,0-34,1:     NL      '\n'
-35,0-35,55:    COMMENT '# Backslash does not means continuation in comments :\\\n'
+35,0-35,54:    COMMENT '# Backslash does not means continuation in comments :\\'
+35,54-35,55:   NL      '\n'
 36,0-36,1:     NAME    'x'
 36,2-36,3:     OP      '='
 36,4-36,5:     NUMBER  '0'
 36,5-36,6:     NEWLINE '\n'
 37,0-37,1:     NL      '\n'
-38,0-38,20:    COMMENT '# Ordinary integers\n'
+38,0-38,19:    COMMENT '# Ordinary integers'
+38,19-38,20:   NL      '\n'
 39,0-39,4:     NUMBER  '0xff'
 39,5-39,7:     OP      '!='
 39,8-39,11:    NUMBER  '255'
@@ -138,7 +150,8 @@ test_tokenize
 44,15-44,16:   NUMBER  '1'
 44,16-44,17:   NEWLINE '\n'
 45,0-45,1:     NL      '\n'
-46,0-46,16:    COMMENT '# Long integers\n'
+46,0-46,15:    COMMENT '# Long integers'
+46,15-46,16:   NL      '\n'
 47,0-47,1:     NAME    'x'
 47,2-47,3:     OP      '='
 47,4-47,6:     NUMBER  '0L'
@@ -172,7 +185,8 @@ test_tokenize
 54,4-54,35:    NUMBER  '123456789012345678901234567890l'
 54,35-54,36:   NEWLINE '\n'
 55,0-55,1:     NL      '\n'
-56,0-56,25:    COMMENT '# Floating-point numbers\n'
+56,0-56,24:    COMMENT '# Floating-point numbers'
+56,24-56,25:   NL      '\n'
 57,0-57,1:     NAME    'x'
 57,2-57,3:     OP      '='
 57,4-57,8:     NUMBER  '3.14'
@@ -185,7 +199,8 @@ test_tokenize
 59,2-59,3:     OP      '='
 59,4-59,9:     NUMBER  '0.314'
 59,9-59,10:    NEWLINE '\n'
-60,0-60,18:    COMMENT '# XXX x = 000.314\n'
+60,0-60,17:    COMMENT '# XXX x = 000.314'
+60,17-60,18:   NL      '\n'
 61,0-61,1:     NAME    'x'
 61,2-61,3:     OP      '='
 61,4-61,8:     NUMBER  '.314'
@@ -219,7 +234,8 @@ test_tokenize
 68,4-68,9:     NUMBER  '3.1e4'
 68,9-68,10:    NEWLINE '\n'
 69,0-69,1:     NL      '\n'
-70,0-70,18:    COMMENT '# String literals\n'
+70,0-70,17:    COMMENT '# String literals'
+70,17-70,18:   NL      '\n'
 71,0-71,1:     NAME    'x'
 71,2-71,3:     OP      '='
 71,4-71,6:     STRING  "''"
@@ -367,7 +383,8 @@ test_tokenize
 125,6-126,3:   STRING  "uR'''spam\n'''"
 126,3-126,4:   NEWLINE '\n'
 127,0-127,1:   NL      '\n'
-128,0-128,14:  COMMENT '# Indentation\n'
+128,0-128,13:  COMMENT '# Indentation'
+128,13-128,14: NL      '\n'
 129,0-129,2:   NAME    'if'
 129,3-129,4:   NUMBER  '1'
 129,4-129,5:   OP      ':'
@@ -439,7 +456,8 @@ test_tokenize
 142,14-142,15: NUMBER  '2'
 142,15-142,16: NEWLINE '\n'
 143,0-143,1:   NL      '\n'
-144,0-144,12:  COMMENT '# Operators\n'
+144,0-144,11:  COMMENT '# Operators'
+144,11-144,12: NL      '\n'
 145,0-145,1:   NL      '\n'
 146,0-146,0:   DEDENT  ''
 146,0-146,0:   DEDENT  ''
@@ -501,7 +519,8 @@ test_tokenize
 149,27-149,28: OP      ')'
 149,28-149,29: NEWLINE '\n'
 150,0-150,1:   NL      '\n'
-151,0-151,13:  COMMENT '# comparison\n'
+151,0-151,12:  COMMENT '# comparison'
+151,12-151,13: NL      '\n'
 152,0-152,2:   NAME    'if'
 152,3-152,4:   NUMBER  '1'
 152,5-152,6:   OP      '<'
@@ -532,7 +551,8 @@ test_tokenize
 152,67-152,71: NAME    'pass'
 152,71-152,72: NEWLINE '\n'
 153,0-153,1:   NL      '\n'
-154,0-154,9:   COMMENT '# binary\n'
+154,0-154,8:   COMMENT '# binary'
+154,8-154,9:   NL      '\n'
 155,0-155,1:   NAME    'x'
 155,2-155,3:   OP      '='
 155,4-155,5:   NUMBER  '1'
@@ -552,7 +572,8 @@ test_tokenize
 157,8-157,9:   NUMBER  '1'
 157,9-157,10:  NEWLINE '\n'
 158,0-158,1:   NL      '\n'
-159,0-159,8:   COMMENT '# shift\n'
+159,0-159,7:   COMMENT '# shift'
+159,7-159,8:   NL      '\n'
 160,0-160,1:   NAME    'x'
 160,2-160,3:   OP      '='
 160,4-160,5:   NUMBER  '1'
@@ -562,7 +583,8 @@ test_tokenize
 160,14-160,15: NUMBER  '1'
 160,15-160,16: NEWLINE '\n'
 161,0-161,1:   NL      '\n'
-162,0-162,11:  COMMENT '# additive\n'
+162,0-162,10:  COMMENT '# additive'
+162,10-162,11: NL      '\n'
 163,0-163,1:   NAME    'x'
 163,2-163,3:   OP      '='
 163,4-163,5:   NUMBER  '1'
@@ -576,7 +598,8 @@ test_tokenize
 163,20-163,21: NUMBER  '1'
 163,21-163,22: NEWLINE '\n'
 164,0-164,1:   NL      '\n'
-165,0-165,17:  COMMENT '# multiplicative\n'
+165,0-165,16:  COMMENT '# multiplicative'
+165,16-165,17: NL      '\n'
 166,0-166,1:   NAME    'x'
 166,2-166,3:   OP      '='
 166,4-166,5:   NUMBER  '1'
@@ -588,7 +611,8 @@ test_tokenize
 166,16-166,17: NUMBER  '1'
 166,17-166,18: NEWLINE '\n'
 167,0-167,1:   NL      '\n'
-168,0-168,8:   COMMENT '# unary\n'
+168,0-168,7:   COMMENT '# unary'
+168,7-168,8:   NL      '\n'
 169,0-169,1:   NAME    'x'
 169,2-169,3:   OP      '='
 169,4-169,5:   OP      '~'
@@ -626,7 +650,8 @@ test_tokenize
 170,24-170,25: NUMBER  '1'
 170,25-170,26: NEWLINE '\n'
 171,0-171,1:   NL      '\n'
-172,0-172,11:  COMMENT '# selector\n'
+172,0-172,10:  COMMENT '# selector'
+172,10-172,11: NL      '\n'
 173,0-173,6:   NAME    'import'
 173,7-173,10:  NAME    'sys'
 173,10-173,11: OP      ','
diff --git a/Lib/test/output/test_types b/Lib/test/output/test_types
deleted file mode 100644 (file)
index b49ce0d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-test_types
-6. Built-in types
-6.1 Truth value testing
-6.2 Boolean operations
-6.3 Comparisons
-6.4 Numeric types (mostly conversions)
-6.4.1 32-bit integers
-6.4.2 Long integers
-6.4.3 Floating point numbers
-6.5 Sequence types
-6.5.1 Strings
-6.5.2 Tuples [see test_tuple.py]
-6.5.3 Lists [see test_list.py]
-6.6 Mappings == Dictionaries [see test_dict.py]
-Buffers
diff --git a/Lib/test/output/test_xdrlib b/Lib/test/output/test_xdrlib
deleted file mode 100644 (file)
index d86caa9..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-test_xdrlib
-pack test 0 succeeded
-pack test 1 succeeded
-pack test 2 succeeded
-pack test 3 succeeded
-pack test 4 succeeded
-pack test 5 succeeded
-pack test 6 succeeded
-pack test 7 succeeded
-pack test 8 succeeded
-unpack test 0 succeeded : 9
-unpack test 1 succeeded : True
-unpack test 2 succeeded : False
-unpack test 3 succeeded : 45
-unpack test 4 succeeded : 1.89999997616
-unpack test 5 succeeded : 1.9
-unpack test 6 succeeded : hello world
-unpack test 7 succeeded : [0, 1, 2, 3, 4]
-unpack test 8 succeeded : ['what', 'is', 'hapnin', 'doctor']
index 7e37c8502927ea09f706a0f9da87d6b34b7b8374..04afcbd8ad8913d84986969147f989205b270ecc 100644 (file)
@@ -9,19 +9,14 @@
 import unittest
 from test import test_support
 
-class TestBug1385040(unittest.TestCase):
-    def testSyntaxError(self):
-        import compiler
-
-        # The following snippet gives a SyntaxError in the interpreter
-        #
-        # If you compile and exec it, the call foo(7) returns (7, 1)
-        self.assertRaises(SyntaxError, compiler.compile,
-                          "def foo(a=1, b): return a, b\n\n", "<string>", "exec")
+#
+# No test cases for outstanding bugs at the moment.
+#
 
 
 def test_main():
-    test_support.run_unittest(TestBug1385040)
+    #test_support.run_unittest()
+    pass
 
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/sgml_input.html b/Lib/test/sgml_input.html
new file mode 100644 (file)
index 0000000..f4d2e6c
--- /dev/null
@@ -0,0 +1,212 @@
+<html>
+ <head>
+  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+  <link rel="stylesheet" type="text/css" href="http://ogame182.de/epicblue/formate.css">
+  <script language="JavaScript" src="js/flotten.js"></script>
+ </head>
+ <body>
+    <script language=JavaScript> if (parent.frames.length == 0) { top.location.href = "http://es.ogame.org/"; } </script> <script language="JavaScript">
+function haha(z1) {
+  eval("location='"+z1.options[z1.selectedIndex].value+"'");
+}
+</script>
+<center>
+<table>
+ <tr>
+  <td></td>
+  <td>
+   <center>
+   <table>
+    <tr>
+     <td><img src="http://ogame182.de/epicblue/planeten/small/s_dschjungelplanet04.jpg" width="50" height="50"></td>
+     <td>
+      <table border="1">
+       <select size="1" onchange="haha(this)">
+                                   <option value="/game/flotten1.php?session=8912ae912fec&cp=33875341&mode=Flotte&gid=&messageziel=&re=0" selected>Alien sex friend    [2:250:6]</option> 
+                                   <option value="/game/flotten1.php?session=8912ae912fec&cp=33905100&mode=Flotte&gid=&messageziel=&re=0" >1989    [2:248:14]</option> 
+                                   <option value="/game/flotten1.php?session=8912ae912fec&cp=34570808&mode=Flotte&gid=&messageziel=&re=0" >1990    [2:248:6]</option> 
+                                   <option value="/game/flotten1.php?session=8912ae912fec&cp=34570858&mode=Flotte&gid=&messageziel=&re=0" >1991    [2:254:6]</option> 
+                                   <option value="/game/flotten1.php?session=8912ae912fec&cp=34572929&mode=Flotte&gid=&messageziel=&re=0" >Colonia    [2:253:12]</option> 
+               </select>
+      </table>
+     </td>
+    </tr>
+  </table>
+  </center>
+  </td>
+  <td>
+   <table border="0" width="100%" cellspacing="0" cellpadding="0">
+    <tr>
+     <td align="center"></td>
+     <td align="center" width="85">
+      <img border="0" src="http://ogame182.de/epicblue/images/metall.gif" width="42" height="22">
+     </td>
+     <td align="center" width="85">
+      <img border="0" src="http://ogame182.de/epicblue/images/kristall.gif" width="42" height="22">
+     </td>
+     <td align="center" width="85">
+      <img border="0" src="http://ogame182.de/epicblue/images/deuterium.gif" width="42" height="22">
+     </td>
+     <td align="center" width="85">
+      <img border="0" src="http://ogame182.de/epicblue/images/energie.gif" width="42" height="22">
+     </td>
+     <td align="center"></td>
+    </tr>
+    <tr>
+     <td align="center"><i><b>&nbsp;&nbsp;</b></i></td>
+     <td align="center" width="85"><i><b><font color="#ffffff">Metal</font></b></i></td>
+     <td align="center" width="85"><i><b><font color="#ffffff">Cristal</font></b></i></td>
+     <td align="center" width="85"><i><b><font color="#ffffff">Deuterio</font></b></i></td>
+     <td align="center" width="85"><i><b><font color="#ffffff">Energía</font></b></i></td>
+     <td align="center"><i><b>&nbsp;&nbsp;</b></i></td>
+    </tr>
+    <tr>
+     <td align="center"></td>
+     <td align="center" width="85">160.636</td>
+     <td align="center" width="85">3.406</td>
+     <td align="center" width="85">39.230</td>
+     <td align="center" width="85"><font color=#ff0000>-80</font>/3.965</td>
+     <td align="center"></td>
+    </tr>
+   </table>
+  </tr>
+ </table>
+  </center>
+<br />
+  <script language="JavaScript">
+  <!--
+     function link_to_gamepay() {
+    self.location = "https://www.gamepay.de/?lang=es&serverID=8&userID=129360&gameID=ogame&gui=v2&chksum=a9751afa9e37e6b1b826356bcca45675";
+  }
+//-->
+  </script>
+<center>
+  <table width="519" border="0" cellpadding="0" cellspacing="1">
+   <tr height="20">
+  <td colspan="8" class="c">Flotas (max. 9)</td>
+   </tr>
+     <tr height="20">
+    <th>Num.</th>
+    <th>Misión</th>
+    <th>Cantidad</th>
+    <th>Comienzo</th>
+    <th>Salida</th>
+    <th>Objetivo</th>
+    <th>Llegada</th>
+    <th>Orden</th>   
+   </tr>
+     <tr height="20">
+    <th>1</th>
+    <th>  
+      <a title="">Espionaje</a>
+      <a title="Flota en el planeta">(F)</a>
+    </th>
+    <th> <a title="Sonda de espionaje: 3 
+">3</a></th>
+    <th>[2:250:6]</th>
+    <th>Wed Aug 9 18:00:02</th>
+    <th>[2:242:5]</th>
+    <th>Wed Aug 9 18:01:02</th>
+    <th>
+         <form action="flotten1.php?session=8912ae912fec" method="POST">
+       <input type="hidden" name="order_return" value="25054490" />
+        <input type="submit" value="Enviar de regreso" />
+     </form>
+            </th>
+   </tr>
+   <tr height="20">
+    <th>2</th>
+    <th>  
+      <a title="">Espionaje</a>
+      <a title="Volver al planeta">(V)</a>
+    </th>
+    <th> <a title="Sonda de espionaje: 3 
+">3</a></th>
+    <th>[2:250:6]</th>
+    <th>Wed Aug 9 17:59:55</th>
+    <th>[2:242:1]</th>
+    <th>Wed Aug 9 18:01:55</th>
+    <th>
+            </th>
+   </tr>
+  </table>
+
+
+  
+<form action="flotten2.php?session=8912ae912fec" method="POST">
+  <table width="519" border="0" cellpadding="0" cellspacing="1">
+       <tr height="20">
+  <td colspan="4" class="c">Nueva misión: elegir naves</td>
+   </tr>
+   <tr height="20">
+  <th>Naves</th>
+  <th>Disponibles</th>
+<!--    <th>Gesch.</th> -->
+    <th>-</th>
+    <th>-</th>
+   </tr>
+   <tr height="20">
+    <th><a title="Velocidad: 8500">Nave pequeña de carga</a></th> 
+    <th>10<input type="hidden" name="maxship202" value="10"/></th>
+<!--    <th>8500 -->
+     <input type="hidden" name="consumption202" value="10"/>
+     <input type="hidden" name="speed202" value="8500" /></th>
+     <input type="hidden" name="capacity202" value="5000" /></th>
+     <th><a href="javascript:maxShip('ship202');" >máx</a> </th>
+     <th><input name="ship202" size="10" value="0" alt="Nave pequeña de carga 10"/></th>
+   </tr>
+   <tr height="20">
+    <th><a title="Velocidad: 12750">Nave grande de carga</a></th> 
+    <th>19<input type="hidden" name="maxship203" value="19"/></th>
+<!--    <th>12750 -->
+     <input type="hidden" name="consumption203" value="50"/>
+     <input type="hidden" name="speed203" value="12750" /></th>
+     <input type="hidden" name="capacity203" value="25000" /></th>
+     <th><a href="javascript:maxShip('ship203');" >máx</a> </th>
+     <th><input name="ship203" size="10" value="0" alt="Nave grande de carga 19"/></th>
+   </tr>
+   <tr height="20">
+    <th><a title="Velocidad: 27000">Crucero</a></th> 
+    <th>6<input type="hidden" name="maxship206" value="6"/></th>
+<!--    <th>27000 -->
+     <input type="hidden" name="consumption206" value="300"/>
+     <input type="hidden" name="speed206" value="27000" /></th>
+     <input type="hidden" name="capacity206" value="800" /></th>
+     <th><a href="javascript:maxShip('ship206');" >máx</a> </th>
+     <th><input name="ship206" size="10" value="0" alt="Crucero 6"/></th>
+   </tr>
+   <tr height="20">
+    <th><a title="Velocidad: 3400">Reciclador</a></th> 
+    <th>1<input type="hidden" name="maxship209" value="1"/></th>
+<!--    <th>3400 -->
+     <input type="hidden" name="consumption209" value="300"/>
+     <input type="hidden" name="speed209" value="3400" /></th>
+     <input type="hidden" name="capacity209" value="20000" /></th>
+     <th><a href="javascript:maxShip('ship209');" >máx</a> </th>
+     <th><input name="ship209" size="10" value="0" alt="Reciclador 1"/></th>
+   </tr>
+   <tr height="20">
+    <th><a title="Velocidad: 170000000">Sonda de espionaje</a></th> 
+    <th>139<input type="hidden" name="maxship210" value="139"/></th>
+<!--    <th>170000000 -->
+     <input type="hidden" name="consumption210" value="1"/>
+     <input type="hidden" name="speed210" value="170000000" /></th>
+     <input type="hidden" name="capacity210" value="5" /></th>
+     <th><a href="javascript:maxShip('ship210');" >máx</a> </th>
+     <th><input name="ship210" size="10" value="0" alt="Sonda de espionaje 139"/></th>
+   </tr>
+   <tr height="20">
+  <th colspan="2"><a href="javascript:noShips();" >Ninguna nave</a></th>
+  <th colspan="2"><a href="javascript:maxShips();" >Todas las naves</a></th>
+   </tr>
+    <tr height="20">
+    <th colspan="4"><input type="submit" value="Continuar" /></th>
+   </tr>
+<tr><th colspan=4>
+<iframe id='a44fb522' name='a44fb522' src='http://ads.gameforgeads.de/adframe.php?n=a44fb522&amp;what=zone:578' framespacing='0' frameborder='no' scrolling='no' width='468' height='60'></iframe>
+<br><center></center></br>
+</th></tr>
+</form>
+</table>
+ </body>
+</html>
index 73447ad1c5fdc020fbcd05335751a2c6f0e815ce..1aa68dedd0d88daa05da5615d3d3b824b793e392 100644 (file)
@@ -1069,7 +1069,7 @@ class MixinStrUnicodeUserStringTest:
         # from raymond's original specification
         S = 'http://www.python.org'
         self.checkequal(('http', '://', 'www.python.org'), S, 'rpartition', '://')
-        self.checkequal(('http://www.python.org', '', ''), S, 'rpartition', '?')
+        self.checkequal(('', '', 'http://www.python.org'), S, 'rpartition', '?')
         self.checkequal(('', 'http://', 'www.python.org'), S, 'rpartition', 'http://')
         self.checkequal(('http://www.python.', 'org', ''), S, 'rpartition', 'org')
 
index 50411058d8a3e0378231f84cc5d34dd5364fd41d..feca1631f2b34f0a870c77f22c94ad647f3ba2ab 100644 (file)
@@ -7,6 +7,8 @@ This should generate Barry's example, modulo some quotes and newlines.
 
 """
 
+import unittest, sys, StringIO
+from test.test_support import run_unittest
 
 from MimeWriter import MimeWriter
 
@@ -77,94 +79,213 @@ EXTERNAL_METADATA = [
         ]
 
 
-def main():
-    import sys
+OUTPUT = '''\
+From: bwarsaw@cnri.reston.va.us
+Date: Mon Feb 12 17:21:48 EST 1996
+To: kss-submit@cnri.reston.va.us
+MIME-Version: 1.0
+Content-Type: multipart/knowbot;
+    boundary="801spam999";
+    version="0.1"
+
+This is a multi-part message in MIME format.
+
+--801spam999
+Content-Type: multipart/knowbot-metadata;
+    boundary="802spam999"
+
+
+--802spam999
+Content-Type: message/rfc822
+KP-Metadata-Type: simple
+KP-Access: read-only
+
+KPMD-Interpreter: python
+KPMD-Interpreter-Version: 1.3
+KPMD-Owner-Name: Barry Warsaw
+KPMD-Owner-Rendezvous: bwarsaw@cnri.reston.va.us
+KPMD-Home-KSS: kss.cnri.reston.va.us
+KPMD-Identifier: hdl://cnri.kss/my_first_knowbot
+KPMD-Launch-Date: Mon Feb 12 16:39:03 EST 1996
+
+--802spam999
+Content-Type: text/isl
+KP-Metadata-Type: complex
+KP-Metadata-Key: connection
+KP-Access: read-only
+KP-Connection-Description: Barry's Big Bass Business
+KP-Connection-Id: B4
+KP-Connection-Direction: client
 
-    # Toplevel headers
+INTERFACE Seller-1;
+
+TYPE Seller = OBJECT
+    DOCUMENTATION "A simple Seller interface to test ILU"
+    METHODS
+            price():INTEGER,
+    END;
+
+--802spam999
+Content-Type: message/external-body;
+    access-type="URL";
+    URL="hdl://cnri.kss/generic-knowbot"
+
+Content-Type: text/isl
+KP-Metadata-Type: complex
+KP-Metadata-Key: generic-interface
+KP-Access: read-only
+KP-Connection-Description: Generic Interface for All Knowbots
+KP-Connection-Id: generic-kp
+KP-Connection-Direction: client
+
+
+--802spam999--
+
+--801spam999
+Content-Type: multipart/knowbot-code;
+    boundary="803spam999"
+
+
+--803spam999
+Content-Type: text/plain
+KP-Module-Name: BuyerKP
+
+class Buyer:
+    def __setup__(self, maxprice):
+        self._maxprice = maxprice
+
+    def __main__(self, kos):
+        """Entry point upon arrival at a new KOS."""
+        broker = kos.broker()
+        # B4 == Barry's Big Bass Business :-)
+        seller = broker.lookup('Seller_1.Seller', 'B4')
+        if seller:
+            price = seller.price()
+            print 'Seller wants $', price, '... '
+            if price > self._maxprice:
+                print 'too much!'
+            else:
+                print "I'll take it!"
+        else:
+            print 'no seller found here'
+
+--803spam999--
+
+--801spam999
+Content-Type: multipart/knowbot-state;
+    boundary="804spam999"
+KP-Main-Module: main
+
+
+--804spam999
+Content-Type: text/plain
+KP-Module-Name: main
+
+# instantiate a buyer instance and put it in a magic place for the KOS
+# to find.
+__kp__ = Buyer()
+__kp__.__setup__(500)
+
+--804spam999--
+
+--801spam999--
+'''
+
+class MimewriterTest(unittest.TestCase):
+
+    def test(self):
+        buf = StringIO.StringIO()
+
+        # Toplevel headers
+
+        toplevel = MimeWriter(buf)
+        toplevel.addheader("From", "bwarsaw@cnri.reston.va.us")
+        toplevel.addheader("Date", "Mon Feb 12 17:21:48 EST 1996")
+        toplevel.addheader("To", "kss-submit@cnri.reston.va.us")
+        toplevel.addheader("MIME-Version", "1.0")
 
-    toplevel = MimeWriter(sys.stdout)
-    toplevel.addheader("From", "bwarsaw@cnri.reston.va.us")
-    toplevel.addheader("Date", "Mon Feb 12 17:21:48 EST 1996")
-    toplevel.addheader("To", "kss-submit@cnri.reston.va.us")
-    toplevel.addheader("MIME-Version", "1.0")
+        # Toplevel body parts
 
-    # Toplevel body parts
+        f = toplevel.startmultipartbody("knowbot", "801spam999",
+                                        [("version", "0.1")], prefix=0)
+        f.write("This is a multi-part message in MIME format.\n")
 
-    f = toplevel.startmultipartbody("knowbot", "801spam999",
-                                    [("version", "0.1")], prefix=0)
-    f.write("This is a multi-part message in MIME format.\n")
+        # First toplevel body part: metadata
 
-    # First toplevel body part: metadata
+        md = toplevel.nextpart()
+        md.startmultipartbody("knowbot-metadata", "802spam999")
 
-    md = toplevel.nextpart()
-    md.startmultipartbody("knowbot-metadata", "802spam999")
+        # Metadata part 1
 
-    # Metadata part 1
+        md1 = md.nextpart()
+        md1.addheader("KP-Metadata-Type", "simple")
+        md1.addheader("KP-Access", "read-only")
+        m = MimeWriter(md1.startbody("message/rfc822"))
+        for key, value in SIMPLE_METADATA:
+            m.addheader("KPMD-" + key, value)
+        m.flushheaders()
+        del md1
 
-    md1 = md.nextpart()
-    md1.addheader("KP-Metadata-Type", "simple")
-    md1.addheader("KP-Access", "read-only")
-    m = MimeWriter(md1.startbody("message/rfc822"))
-    for key, value in SIMPLE_METADATA:
-        m.addheader("KPMD-" + key, value)
-    m.flushheaders()
-    del md1
+        # Metadata part 2
 
-    # Metadata part 2
+        md2 = md.nextpart()
+        for key, value in COMPLEX_METADATA:
+            md2.addheader("KP-" + key, value)
+        f = md2.startbody("text/isl")
+        f.write(SELLER)
+        del md2
 
-    md2 = md.nextpart()
-    for key, value in COMPLEX_METADATA:
-        md2.addheader("KP-" + key, value)
-    f = md2.startbody("text/isl")
-    f.write(SELLER)
-    del md2
+        # Metadata part 3
 
-    # Metadata part 3
+        md3 = md.nextpart()
+        f = md3.startbody("message/external-body",
+                          [("access-type", "URL"),
+                           ("URL", "hdl://cnri.kss/generic-knowbot")])
+        m = MimeWriter(f)
+        for key, value in EXTERNAL_METADATA:
+            md3.addheader("KP-" + key, value)
+        md3.startbody("text/isl")
+        # Phantom body doesn't need to be written
 
-    md3 = md.nextpart()
-    f = md3.startbody("message/external-body",
-                      [("access-type", "URL"),
-                       ("URL", "hdl://cnri.kss/generic-knowbot")])
-    m = MimeWriter(f)
-    for key, value in EXTERNAL_METADATA:
-        md3.addheader("KP-" + key, value)
-    md3.startbody("text/isl")
-    # Phantom body doesn't need to be written
+        md.lastpart()
 
-    md.lastpart()
+        # Second toplevel body part: code
 
-    # Second toplevel body part: code
+        code = toplevel.nextpart()
+        code.startmultipartbody("knowbot-code", "803spam999")
 
-    code = toplevel.nextpart()
-    code.startmultipartbody("knowbot-code", "803spam999")
+        # Code: buyer program source
 
-    # Code: buyer program source
+        buyer = code.nextpart()
+        buyer.addheader("KP-Module-Name", "BuyerKP")
+        f = buyer.startbody("text/plain")
+        f.write(BUYER)
 
-    buyer = code.nextpart()
-    buyer.addheader("KP-Module-Name", "BuyerKP")
-    f = buyer.startbody("text/plain")
-    f.write(BUYER)
+        code.lastpart()
 
-    code.lastpart()
+        # Third toplevel body part: state
 
-    # Third toplevel body part: state
+        state = toplevel.nextpart()
+        state.addheader("KP-Main-Module", "main")
+        state.startmultipartbody("knowbot-state", "804spam999")
 
-    state = toplevel.nextpart()
-    state.addheader("KP-Main-Module", "main")
-    state.startmultipartbody("knowbot-state", "804spam999")
+        # State: a bunch of assignments
 
-    # State: a bunch of assignments
+        st = state.nextpart()
+        st.addheader("KP-Module-Name", "main")
+        f = st.startbody("text/plain")
+        f.write(STATE)
 
-    st = state.nextpart()
-    st.addheader("KP-Module-Name", "main")
-    f = st.startbody("text/plain")
-    f.write(STATE)
+        state.lastpart()
 
-    state.lastpart()
+        # End toplevel body parts
 
-    # End toplevel body parts
+        toplevel.lastpart()
 
-    toplevel.lastpart()
+        self.assertEqual(buf.getvalue(), OUTPUT)
 
+def test_main():
+    run_unittest(MimewriterTest)
 
-main()
+if __name__ == '__main__':
+    test_main()
index cc3367fed8d16bdfa9a4b0c68c8b0832576fbf32..9f79b02e16c8812f0780d8e43e52d03b218b2d1c 100644 (file)
@@ -62,6 +62,7 @@ class TestGenericStringIO(unittest.TestCase):
         eq(f.getvalue(), 'abcde')
         f.write('xyz')
         eq(f.getvalue(), 'abcdexyz')
+        self.assertRaises(IOError, f.truncate, -1)
         f.close()
         self.assertRaises(ValueError, f.write, 'frobnitz')
 
@@ -120,6 +121,28 @@ class TestStringIO(TestGenericStringIO):
 class TestcStringIO(TestGenericStringIO):
     MODULE = cStringIO
 
+    def test_unicode(self):
+
+        if not test_support.have_unicode: return
+
+        # The cStringIO module converts Unicode strings to character
+        # strings when writing them to cStringIO objects.
+        # Check that this works.
+
+        f = self.MODULE.StringIO()
+        f.write(unicode(self._line[:5]))
+        s = f.getvalue()
+        self.assertEqual(s, 'abcde')
+        self.assertEqual(type(s), types.StringType)
+
+        f = self.MODULE.StringIO(unicode(self._line[:5]))
+        s = f.getvalue()
+        self.assertEqual(s, 'abcde')
+        self.assertEqual(type(s), types.StringType)
+
+        self.assertRaises(UnicodeEncodeError, self.MODULE.StringIO,
+                          unicode('\xf4', 'latin-1'))
+
 import sys
 if sys.platform.startswith('java'):
     # Jython doesn't have a buffer object, so we just do a useless
index 7d2b2ae4429371ca1de9be27400ce53282d868fd..50a2c74ad08f7f383a8559bbfedfdb498761fdfd 100644 (file)
@@ -1,59 +1,63 @@
 #! /usr/bin/env python
-from test.test_support import verbose, verify
-from types import TupleType, StringType, IntType
+import unittest
+from test import test_support
 import __future__
 
 GOOD_SERIALS = ("alpha", "beta", "candidate", "final")
 
 features = __future__.all_feature_names
 
-# Verify that all_feature_names appears correct.
-given_feature_names = features[:]
-for name in dir(__future__):
-    obj = getattr(__future__, name, None)
-    if obj is not None and isinstance(obj, __future__._Feature):
-        verify(name in given_feature_names,
-               "%r should have been in all_feature_names" % name)
-        given_feature_names.remove(name)
-verify(len(given_feature_names) == 0,
-       "all_feature_names has too much: %r" % given_feature_names)
-del given_feature_names
-
-for feature in features:
-    value = getattr(__future__, feature)
-    if verbose:
-        print "Checking __future__ ", feature, "value", value
-
-    optional = value.getOptionalRelease()
-    mandatory = value.getMandatoryRelease()
-
-    verify(type(optional) is TupleType, "optional isn't tuple")
-    verify(len(optional) == 5, "optional isn't 5-tuple")
-    major, minor, micro, level, serial = optional
-    verify(type(major) is IntType, "optional major isn't int")
-    verify(type(minor) is IntType, "optional minor isn't int")
-    verify(type(micro) is IntType, "optional micro isn't int")
-    verify(isinstance(level, basestring), "optional level isn't string")
-    verify(level in GOOD_SERIALS,
-           "optional level string has unknown value")
-    verify(type(serial) is IntType, "optional serial isn't int")
-
-    verify(type(mandatory) is TupleType or
-           mandatory is None, "mandatory isn't tuple or None")
-    if mandatory is not None:
-        verify(len(mandatory) == 5, "mandatory isn't 5-tuple")
-        major, minor, micro, level, serial = mandatory
-        verify(type(major) is IntType, "mandatory major isn't int")
-        verify(type(minor) is IntType, "mandatory minor isn't int")
-        verify(type(micro) is IntType, "mandatory micro isn't int")
-        verify(isinstance(level, basestring), "mandatory level isn't string")
-        verify(level in GOOD_SERIALS,
-               "mandatory serial string has unknown value")
-        verify(type(serial) is IntType, "mandatory serial isn't int")
-        verify(optional < mandatory,
-               "optional not less than mandatory, and mandatory not None")
-
-    verify(hasattr(value, "compiler_flag"),
-           "feature is missing a .compiler_flag attr")
-    verify(type(getattr(value, "compiler_flag")) is IntType,
-           ".compiler_flag isn't int")
+class FutureTest(unittest.TestCase):
+
+    def test_names(self):
+        # Verify that all_feature_names appears correct.
+        given_feature_names = features[:]
+        for name in dir(__future__):
+            obj = getattr(__future__, name, None)
+            if obj is not None and isinstance(obj, __future__._Feature):
+                self.assert_(
+                    name in given_feature_names,
+                    "%r should have been in all_feature_names" % name
+                )
+                given_feature_names.remove(name)
+        self.assertEqual(len(given_feature_names), 0,
+               "all_feature_names has too much: %r" % given_feature_names)
+
+    def test_attributes(self):
+        for feature in features:
+            value = getattr(__future__, feature)
+
+            optional = value.getOptionalRelease()
+            mandatory = value.getMandatoryRelease()
+
+            a = self.assert_
+            e = self.assertEqual
+            def check(t, name):
+                a(isinstance(t, tuple), "%s isn't tuple" % name)
+                e(len(t), 5, "%s isn't 5-tuple" % name)
+                (major, minor, micro, level, serial) = t
+                a(isinstance(major, int), "%s major isn't int"  % name)
+                a(isinstance(minor, int), "%s minor isn't int" % name)
+                a(isinstance(micro, int), "%s micro isn't int" % name)
+                a(isinstance(level, basestring),
+                    "%s level isn't string" % name)
+                a(level in GOOD_SERIALS,
+                       "%s level string has unknown value" % name)
+                a(isinstance(serial, int), "%s serial isn't int" % name)
+
+            check(optional, "optional")
+            if mandatory is not None:
+                check(mandatory, "mandatory")
+                a(optional < mandatory,
+                       "optional not less than mandatory, and mandatory not None")
+
+            a(hasattr(value, "compiler_flag"),
+                   "feature is missing a .compiler_flag attr")
+            a(isinstance(getattr(value, "compiler_flag"), int),
+                   ".compiler_flag isn't int")
+
+def test_main():
+    test_support.run_unittest(FutureTest)
+
+if __name__ == "__main__":
+    test_main()
index 6adbf337791024ad34955688cc534462fe6a913f..5c79b4826131a4a4ee6e8e1a730ff9a6800e3529 100755 (executable)
@@ -85,6 +85,13 @@ class BaseTest(unittest.TestCase):
         self.assertNotEqual(id(a), id(b))
         self.assertEqual(a, b)
 
+    def test_deepcopy(self):
+        import copy
+        a = array.array(self.typecode, self.example)
+        b = copy.deepcopy(a)
+        self.assertNotEqual(id(a), id(b))
+        self.assertEqual(a, b)
+
     def test_pickle(self):
         for protocol in (0, 1, 2):
             a = array.array(self.typecode, self.example)
index 8df450456ee37a60e9a067bd898c123dd7e24a42..8272ad91aa818b75c0b3bd00c0545d69417b4e19 100755 (executable)
@@ -134,7 +134,7 @@ class BinASCIITest(unittest.TestCase):
             pass
         else:
             self.fail("binascii.a2b_qp(**{1:1}) didn't raise TypeError")
-        self.assertEqual(binascii.a2b_qp("= "), "")
+        self.assertEqual(binascii.a2b_qp("= "), "")
         self.assertEqual(binascii.a2b_qp("=="), "=")
         self.assertEqual(binascii.a2b_qp("=AX"), "=AX")
         self.assertRaises(TypeError, binascii.b2a_qp, foo="bar")
index 611cd695d96b4b3891fd0a05febc3d012fbea805..14a926a570444899ea19e1fc54a7c1ea49aa7b98 100644 (file)
@@ -1,60 +1,66 @@
-from test.test_support import verify, TestFailed, TESTFN
+import unittest
+from test import test_support
 
 # Simple test to ensure that optimizations in fileobject.c deliver
 # the expected results.  For best testing, run this under a debug-build
 # Python too (to exercise asserts in the C code).
 
-# Repeat string 'pattern' as often as needed to reach total length
-# 'length'.  Then call try_one with that string, a string one larger
-# than that, and a string one smaller than that.  The main driver
-# feeds this all small sizes and various powers of 2, so we exercise
-# all likely stdio buffer sizes, and "off by one" errors on both
-# sides.
-def drive_one(pattern, length):
-    q, r = divmod(length, len(pattern))
-    teststring = pattern * q + pattern[:r]
-    verify(len(teststring) == length)
-    try_one(teststring)
-    try_one(teststring + "x")
-    try_one(teststring[:-1])
-
-# Write s + "\n" + s to file, then open it and ensure that successive
-# .readline()s deliver what we wrote.
-def try_one(s):
-    # Since C doesn't guarantee we can write/read arbitrary bytes in text
-    # files, use binary mode.
-    f = open(TESTFN, "wb")
-    # write once with \n and once without
-    f.write(s)
-    f.write("\n")
-    f.write(s)
-    f.close()
-    f = open(TESTFN, "rb")
-    line = f.readline()
-    if line != s + "\n":
-        raise TestFailed("Expected %r got %r" % (s + "\n", line))
-    line = f.readline()
-    if line != s:
-        raise TestFailed("Expected %r got %r" % (s, line))
-    line = f.readline()
-    if line:
-        raise TestFailed("Expected EOF but got %r" % line)
-    f.close()
-
-# A pattern with prime length, to avoid simple relationships with
-# stdio buffer sizes.
-primepat = "1234567890\00\01\02\03\04\05\06"
-
-nullpat = "\0" * 1000
-
-try:
-    for size in range(1, 257) + [512, 1000, 1024, 2048, 4096, 8192, 10000,
-                      16384, 32768, 65536, 1000000]:
-        drive_one(primepat, size)
-        drive_one(nullpat, size)
-finally:
-    try:
-        import os
-        os.unlink(TESTFN)
-    except:
-        pass
+lengths = range(1, 257) + [512, 1000, 1024, 2048, 4096, 8192, 10000,
+                           16384, 32768, 65536, 1000000]
+
+class BufferSizeTest(unittest.TestCase):
+    def try_one(self, s):
+        # Write s + "\n" + s to file, then open it and ensure that successive
+        # .readline()s deliver what we wrote.
+
+        # Since C doesn't guarantee we can write/read arbitrary bytes in text
+        # files, use binary mode.
+        f = open(test_support.TESTFN, "wb")
+        try:
+            # write once with \n and once without
+            f.write(s)
+            f.write("\n")
+            f.write(s)
+            f.close()
+            f = open(test_support.TESTFN, "rb")
+            line = f.readline()
+            self.assertEqual(line, s + "\n")
+            line = f.readline()
+            self.assertEqual(line, s)
+            line = f.readline()
+            self.assert_(not line) # Must be at EOF
+            f.close()
+        finally:
+            try:
+                import os
+                os.unlink(test_support.TESTFN)
+            except:
+                pass
+
+    def drive_one(self, pattern):
+        for length in lengths:
+            # Repeat string 'pattern' as often as needed to reach total length
+            # 'length'.  Then call try_one with that string, a string one larger
+            # than that, and a string one smaller than that.  Try this with all
+            # small sizes and various powers of 2, so we exercise all likely
+            # stdio buffer sizes, and "off by one" errors on both sides.
+            q, r = divmod(length, len(pattern))
+            teststring = pattern * q + pattern[:r]
+            self.assertEqual(len(teststring), length)
+            self.try_one(teststring)
+            self.try_one(teststring + "x")
+            self.try_one(teststring[:-1])
+
+    def test_primepat(self):
+        # A pattern with prime length, to avoid simple relationships with
+        # stdio buffer sizes.
+        self.drive_one("1234567890\00\01\02\03\04\05\06")
+
+    def test_nullpat(self):
+        self.drive_one("\0" * 1000)
+
+def test_main():
+    test_support.run_unittest(BufferSizeTest)
+
+if __name__ == "__main__":
+    test_main()
index 7b245d17d3011d62a3556f65e3db1f2d53abcbe0..385031f3b7843b54d694d2b3454d7f8d77e94558 100644 (file)
@@ -116,6 +116,7 @@ class BuiltinTest(unittest.TestCase):
         self.assertEqual(abs(0), 0)
         self.assertEqual(abs(1234), 1234)
         self.assertEqual(abs(-1234), 1234)
+        self.assertTrue(abs(-sys.maxint-1) > 0)
         # float
         self.assertEqual(abs(0.0), 0.0)
         self.assertEqual(abs(3.14), 3.14)
@@ -155,6 +156,11 @@ class BuiltinTest(unittest.TestCase):
         S = [10, 20, 30]
         self.assertEqual(any(x > 42 for x in S), False)
 
+    def test_neg(self):
+        x = -sys.maxint-1
+        self.assert_(isinstance(x, int))
+        self.assertEqual(-x, sys.maxint+1)
+
     def test_callable(self):
         self.assert_(callable(len))
         def f(): pass
@@ -686,9 +692,11 @@ class BuiltinTest(unittest.TestCase):
                         pass
 
         s = repr(-1-sys.maxint)
-        self.assertEqual(int(s)+1, -sys.maxint)
+        x = int(s)
+        self.assertEqual(x+1, -sys.maxint)
+        self.assert_(isinstance(x, int))
         # should return long
-        int(s[1:])
+        self.assertEqual(int(s[1:]), sys.maxint+1)
 
         # should return long
         x = int(1e100)
@@ -706,6 +714,11 @@ class BuiltinTest(unittest.TestCase):
         self.assertRaises(ValueError, int, '123\0')
         self.assertRaises(ValueError, int, '53', 40)
 
+        # SF bug 1545497: embedded NULs were not detected with
+        # explicit base
+        self.assertRaises(ValueError, int, '123\0', 10)
+        self.assertRaises(ValueError, int, '123\x00 245', 20)
+
         x = int('1' * 600)
         self.assert_(isinstance(x, long))
 
index 66fecf1aceb38ae4602a2bf695cd1d3c636fcc0f..3979f1545589d594df99e3c1b6111d5288e7db1e 100644 (file)
@@ -1,9 +1,29 @@
 import ConfigParser
 import StringIO
 import unittest
+import UserDict
 
 from test import test_support
 
+class SortedDict(UserDict.UserDict):
+    def items(self):
+        result = self.data.items()
+        result.sort()
+        return result
+
+    def keys(self):
+        result = self.data.keys()
+        result.sort()
+        return result
+    
+    def values(self):
+        result = self.items()
+        return [i[1] for i in values]
+
+    def iteritems(self): return iter(self.items())
+    def iterkeys(self): return iter(self.keys())
+    __iter__ = iterkeys
+    def itervalues(self): return iter(self.values())
 
 class TestCaseBase(unittest.TestCase):
     def newconfig(self, defaults=None):
@@ -414,12 +434,36 @@ class SafeConfigParserTestCase(ConfigParserTestCase):
         self.assertRaises(TypeError, cf.set, "sect", "option2", 1.0)
         self.assertRaises(TypeError, cf.set, "sect", "option2", object())
 
+class SortedTestCase(RawConfigParserTestCase):
+    def newconfig(self, defaults=None):
+        self.cf = self.config_class(defaults=defaults, dict_type=SortedDict)
+        return self.cf
+
+    def test_sorted(self):
+        self.fromstring("[b]\n"
+                        "o4=1\n"
+                        "o3=2\n"
+                        "o2=3\n"
+                        "o1=4\n"
+                        "[a]\n"
+                        "k=v\n")        
+        output = StringIO.StringIO()
+        self.cf.write(output)
+        self.assertEquals(output.getvalue(),
+                          "[a]\n"
+                          "k = v\n\n"       
+                          "[b]\n"
+                          "o1 = 4\n"
+                          "o2 = 3\n"
+                          "o3 = 2\n"
+                          "o4 = 1\n\n")
 
 def test_main():
     test_support.run_unittest(
         ConfigParserTestCase,
         RawConfigParserTestCase,
-        SafeConfigParserTestCase
+        SafeConfigParserTestCase,
+        SortedTestCase
     )
 
 if __name__ == "__main__":
index f93fa555c5ea5d00d0cec0b4fa7255d9d88bea67..52e5e913f438a3d8ff03d84bd7232efda068bb54 100644 (file)
@@ -1,8 +1,9 @@
-from test.test_support import verify, verbose
+from test.test_support import run_unittest
 import cgi
 import os
 import sys
 import tempfile
+import unittest
 from StringIO import StringIO
 
 class HackedSysModule:
@@ -127,119 +128,124 @@ def first_elts(list):
 def first_second_elts(list):
     return map(lambda p:(p[0], p[1][0]), list)
 
-def main():
-    for orig, expect in parse_qsl_test_cases:
-        result = cgi.parse_qsl(orig, keep_blank_values=True)
-        print repr(orig), '=>', result
-        verify(result == expect, "Error parsing %s" % repr(orig))
-
-    for orig, expect in parse_strict_test_cases:
-        # Test basic parsing
-        print repr(orig)
-        d = do_test(orig, "GET")
-        verify(d == expect, "Error parsing %s" % repr(orig))
-        d = do_test(orig, "POST")
-        verify(d == expect, "Error parsing %s" % repr(orig))
-
-        env = {'QUERY_STRING': orig}
-        fcd = cgi.FormContentDict(env)
-        sd = cgi.SvFormContentDict(env)
-        fs = cgi.FieldStorage(environ=env)
-        if type(expect) == type({}):
-            # test dict interface
-            verify(len(expect) == len(fcd))
-            verify(norm(expect.keys()) == norm(fcd.keys()))
-            verify(norm(expect.values()) == norm(fcd.values()))
-            verify(norm(expect.items()) == norm(fcd.items()))
-            verify(fcd.get("nonexistent field", "default") == "default")
-            verify(len(sd) == len(fs))
-            verify(norm(sd.keys()) == norm(fs.keys()))
-            verify(fs.getvalue("nonexistent field", "default") == "default")
-            # test individual fields
-            for key in expect.keys():
-                expect_val = expect[key]
-                verify(key in fcd)
-                verify(norm(fcd[key]) == norm(expect[key]))
-                verify(fcd.get(key, "default") == fcd[key])
-                verify(key in fs)
-                if len(expect_val) > 1:
-                    single_value = 0
+class CgiTests(unittest.TestCase):
+
+    def test_qsl(self):
+        for orig, expect in parse_qsl_test_cases:
+            result = cgi.parse_qsl(orig, keep_blank_values=True)
+            self.assertEqual(result, expect, "Error parsing %s" % repr(orig))
+
+    def test_strict(self):
+        for orig, expect in parse_strict_test_cases:
+            # Test basic parsing
+            d = do_test(orig, "GET")
+            self.assertEqual(d, expect, "Error parsing %s" % repr(orig))
+            d = do_test(orig, "POST")
+            self.assertEqual(d, expect, "Error parsing %s" % repr(orig))
+
+            env = {'QUERY_STRING': orig}
+            fcd = cgi.FormContentDict(env)
+            sd = cgi.SvFormContentDict(env)
+            fs = cgi.FieldStorage(environ=env)
+            if type(expect) == type({}):
+                # test dict interface
+                self.assertEqual(len(expect), len(fcd))
+                self.assertEqual(norm(expect.keys()), norm(fcd.keys()))
+                self.assertEqual(norm(expect.values()), norm(fcd.values()))
+                self.assertEqual(norm(expect.items()), norm(fcd.items()))
+                self.assertEqual(fcd.get("nonexistent field", "default"), "default")
+                self.assertEqual(len(sd), len(fs))
+                self.assertEqual(norm(sd.keys()), norm(fs.keys()))
+                self.assertEqual(fs.getvalue("nonexistent field", "default"), "default")
+                # test individual fields
+                for key in expect.keys():
+                    expect_val = expect[key]
+                    self.assert_(key in fcd)
+                    self.assertEqual(norm(fcd[key]), norm(expect[key]))
+                    self.assertEqual(fcd.get(key, "default"), fcd[key])
+                    self.assert_(key in fs)
+                    if len(expect_val) > 1:
+                        single_value = 0
+                    else:
+                        single_value = 1
+                    try:
+                        val = sd[key]
+                    except IndexError:
+                        self.failIf(single_value)
+                        self.assertEqual(fs.getvalue(key), expect_val)
+                    else:
+                        self.assert_(single_value)
+                        self.assertEqual(val, expect_val[0])
+                        self.assertEqual(fs.getvalue(key), expect_val[0])
+                    self.assertEqual(norm(sd.getlist(key)), norm(expect_val))
+                    if single_value:
+                        self.assertEqual(norm(sd.values()),
+                               first_elts(norm(expect.values())))
+                        self.assertEqual(norm(sd.items()),
+                               first_second_elts(norm(expect.items())))
+
+    def test_weird_formcontentdict(self):
+        # Test the weird FormContentDict classes
+        env = {'QUERY_STRING': "x=1&y=2.0&z=2-3.%2b0&1=1abc"}
+        expect = {'x': 1, 'y': 2.0, 'z': '2-3.+0', '1': '1abc'}
+        d = cgi.InterpFormContentDict(env)
+        for k, v in expect.items():
+            self.assertEqual(d[k], v)
+        for k, v in d.items():
+            self.assertEqual(expect[k], v)
+        self.assertEqual(norm(expect.values()), norm(d.values()))
+
+    def test_log(self):
+        cgi.log("Testing")
+
+        cgi.logfp = StringIO()
+        cgi.initlog("%s", "Testing initlog 1")
+        cgi.log("%s", "Testing log 2")
+        self.assertEqual(cgi.logfp.getvalue(), "Testing initlog 1\nTesting log 2\n")
+        if os.path.exists("/dev/null"):
+            cgi.logfp = None
+            cgi.logfile = "/dev/null"
+            cgi.initlog("%s", "Testing log 3")
+            cgi.log("Testing log 4")
+
+    def test_fieldstorage_readline(self):
+        # FieldStorage uses readline, which has the capacity to read all
+        # contents of the input file into memory; we use readline's size argument
+        # to prevent that for files that do not contain any newlines in
+        # non-GET/HEAD requests
+        class TestReadlineFile:
+            def __init__(self, file):
+                self.file = file
+                self.numcalls = 0
+
+            def readline(self, size=None):
+                self.numcalls += 1
+                if size:
+                    return self.file.readline(size)
                 else:
-                    single_value = 1
-                try:
-                    val = sd[key]
-                except IndexError:
-                    verify(not single_value)
-                    verify(fs.getvalue(key) == expect_val)
-                else:
-                    verify(single_value)
-                    verify(val == expect_val[0])
-                    verify(fs.getvalue(key) == expect_val[0])
-                verify(norm(sd.getlist(key)) == norm(expect_val))
-                if single_value:
-                    verify(norm(sd.values()) == \
-                           first_elts(norm(expect.values())))
-                    verify(norm(sd.items()) == \
-                           first_second_elts(norm(expect.items())))
-
-    # Test the weird FormContentDict classes
-    env = {'QUERY_STRING': "x=1&y=2.0&z=2-3.%2b0&1=1abc"}
-    expect = {'x': 1, 'y': 2.0, 'z': '2-3.+0', '1': '1abc'}
-    d = cgi.InterpFormContentDict(env)
-    for k, v in expect.items():
-        verify(d[k] == v)
-    for k, v in d.items():
-        verify(expect[k] == v)
-    verify(norm(expect.values()) == norm(d.values()))
-
-    print "Testing log"
-    cgi.log("Testing")
-    cgi.logfp = sys.stdout
-    cgi.initlog("%s", "Testing initlog 1")
-    cgi.log("%s", "Testing log 2")
-    if os.path.exists("/dev/null"):
-        cgi.logfp = None
-        cgi.logfile = "/dev/null"
-        cgi.initlog("%s", "Testing log 3")
-        cgi.log("Testing log 4")
-
-    print "Test FieldStorage methods that use readline"
-    # FieldStorage uses readline, which has the capacity to read all
-    # contents of the input file into memory; we use readline's size argument
-    # to prevent that for files that do not contain any newlines in
-    # non-GET/HEAD requests
-    class TestReadlineFile:
-        def __init__(self, file):
-            self.file = file
-            self.numcalls = 0
-
-        def readline(self, size=None):
-            self.numcalls += 1
-            if size:
-                return self.file.readline(size)
-            else:
-                return self.file.readline()
-
-        def __getattr__(self, name):
-            file = self.__dict__['file']
-            a = getattr(file, name)
-            if not isinstance(a, int):
-                setattr(self, name, a)
-            return a
-
-    f = TestReadlineFile(tempfile.TemporaryFile())
-    f.write('x' * 256 * 1024)
-    f.seek(0)
-    env = {'REQUEST_METHOD':'PUT'}
-    fs = cgi.FieldStorage(fp=f, environ=env)
-    # if we're not chunking properly, readline is only called twice
-    # (by read_binary); if we are chunking properly, it will be called 5 times
-    # as long as the chunksize is 1 << 16.
-    verify(f.numcalls > 2)
-
-    print "Test basic FieldStorage multipart parsing"
-    env = {'REQUEST_METHOD':'POST', 'CONTENT_TYPE':'multipart/form-data; boundary=---------------------------721837373350705526688164684', 'CONTENT_LENGTH':'558'}
-    postdata = """-----------------------------721837373350705526688164684
+                    return self.file.readline()
+
+            def __getattr__(self, name):
+                file = self.__dict__['file']
+                a = getattr(file, name)
+                if not isinstance(a, int):
+                    setattr(self, name, a)
+                return a
+
+        f = TestReadlineFile(tempfile.TemporaryFile())
+        f.write('x' * 256 * 1024)
+        f.seek(0)
+        env = {'REQUEST_METHOD':'PUT'}
+        fs = cgi.FieldStorage(fp=f, environ=env)
+        # if we're not chunking properly, readline is only called twice
+        # (by read_binary); if we are chunking properly, it will be called 5 times
+        # as long as the chunksize is 1 << 16.
+        self.assert_(f.numcalls > 2)
+
+    def test_fieldstorage_multipart(self):
+        #Test basic FieldStorage multipart parsing
+        env = {'REQUEST_METHOD':'POST', 'CONTENT_TYPE':'multipart/form-data; boundary=---------------------------721837373350705526688164684', 'CONTENT_LENGTH':'558'}
+        postdata = """-----------------------------721837373350705526688164684
 Content-Disposition: form-data; name="id"
 
 1234
@@ -259,15 +265,19 @@ Content-Disposition: form-data; name="submit"
  Add\x20
 -----------------------------721837373350705526688164684--
 """
-    fs = cgi.FieldStorage(fp=StringIO(postdata), environ=env)
-    verify(len(fs.list) == 4)
-    expect = [{'name':'id', 'filename':None, 'value':'1234'},
-              {'name':'title', 'filename':None, 'value':''},
-              {'name':'file', 'filename':'test.txt','value':'Testing 123.\n'},
-              {'name':'submit', 'filename':None, 'value':' Add '}]
-    for x in range(len(fs.list)):
-        for k, exp in expect[x].items():
-            got = getattr(fs.list[x], k)
-            verify(got == exp)
-
-main()
+        fs = cgi.FieldStorage(fp=StringIO(postdata), environ=env)
+        self.assertEquals(len(fs.list), 4)
+        expect = [{'name':'id', 'filename':None, 'value':'1234'},
+                  {'name':'title', 'filename':None, 'value':''},
+                  {'name':'file', 'filename':'test.txt','value':'Testing 123.\n'},
+                  {'name':'submit', 'filename':None, 'value':' Add '}]
+        for x in range(len(fs.list)):
+            for k, exp in expect[x].items():
+                got = getattr(fs.list[x], k)
+                self.assertEquals(got, exp)
+
+def test_main():
+    run_unittest(CgiTests)
+
+if __name__ == '__main__':
+    test_main()
index f33462a2e84be3e1aea147d1bcb363a444b50eea..3201dd8c5d1e2ccbbdd69162ff6cd3fef87dd699 100644 (file)
@@ -186,6 +186,14 @@ testme ^ 1
 
 # List/dict operations
 
+class Empty: pass
+
+try:
+    1 in Empty()
+    print 'failed, should have raised TypeError'
+except TypeError:
+    pass
+
 1 in testme
 
 testme[1]
index 1bf85834bc8b371a6acd8a1b8d1c164c2af711c2..c558f1bb99b06c4f0d6177fe9aed5e8d78a70d77 100644 (file)
@@ -32,6 +32,7 @@ class Test_GBK(test_multibytecodec_support.TestBase, unittest.TestCase):
         ("abc\x80\x80\xc1\xc4\xc8", "replace", u"abc\ufffd\u804a\ufffd"),
         ("abc\x80\x80\xc1\xc4", "ignore",  u"abc\u804a"),
         ("\x83\x34\x83\x31", "strict", None),
+        (u"\u30fb", "strict", None),
     )
 
 class Test_GB18030(test_multibytecodec_support.TestBase, unittest.TestCase):
@@ -45,6 +46,7 @@ class Test_GB18030(test_multibytecodec_support.TestBase, unittest.TestCase):
         ("abc\x80\x80\xc1\xc4\xc8", "replace", u"abc\ufffd\u804a\ufffd"),
         ("abc\x80\x80\xc1\xc4", "ignore",  u"abc\u804a"),
         ("abc\x84\x39\x84\x39\xc1\xc4", "replace", u"abc\ufffd\u804a"),
+        (u"\u30fb", "strict", "\x819\xa79"),
     )
     has_iso10646 = True
 
index 8153979a85e291e06c9e9648384602216fe29d94..3c800f87771164722672ea83bdfa4633ca9cfa46 100644 (file)
@@ -425,6 +425,10 @@ class UTF8SigTest(ReadTest):
             ]
         )
 
+    def test_bug1601501(self):
+        # SF bug #1601501: check that the codec works with a buffer
+        unicode("\xef\xbb\xbf", "utf-8-sig")
+
 class EscapeDecodeTest(unittest.TestCase):
     def test_empty(self):
         self.assertEquals(codecs.escape_decode(""), ("", 0))
@@ -910,6 +914,18 @@ class StreamReaderTest(unittest.TestCase):
         f = self.reader(self.stream)
         self.assertEquals(f.readlines(), [u'\ud55c\n', u'\uae00'])
 
+class EncodedFileTest(unittest.TestCase):
+
+    def test_basic(self):
+        f = StringIO.StringIO('\xed\x95\x9c\n\xea\xb8\x80')
+        ef = codecs.EncodedFile(f, 'utf-16-le', 'utf-8')
+        self.assertEquals(ef.read(), '\\\xd5\n\x00\x00\xae')
+
+        f = StringIO.StringIO()
+        ef = codecs.EncodedFile(f, 'utf-8', 'latin1')
+        ef.write('\xc3\xbc')
+        self.assertEquals(f.getvalue(), '\xfc')
+
 class Str2StrTest(unittest.TestCase):
 
     def test_read(self):
@@ -1050,6 +1066,14 @@ broken_unicode_with_streams = [
     "punycode",
     "unicode_internal"
 ]
+broken_incremental_coders = broken_unicode_with_streams[:]
+
+# The following encodings only support "strict" mode
+only_strict_mode = [
+    "idna",
+    "zlib_codec",
+    "bz2_codec",
+]
 
 try:
     import bz2
@@ -1099,6 +1123,7 @@ class BasicUnicodeTest(unittest.TestCase):
                     decodedresult += reader.read()
                 self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
 
+            if encoding not in broken_incremental_coders:
                 # check incremental decoder/encoder (fetched via the Python
                 # and C API) and iterencode()/iterdecode()
                 try:
@@ -1139,6 +1164,24 @@ class BasicUnicodeTest(unittest.TestCase):
                     result = u"".join(codecs.iterdecode(codecs.iterencode(u"", encoding), encoding))
                     self.assertEqual(result, u"")
 
+                if encoding not in only_strict_mode:
+                    # check incremental decoder/encoder with errors argument
+                    try:
+                        encoder = codecs.getincrementalencoder(encoding)("ignore")
+                        cencoder = _testcapi.codec_incrementalencoder(encoding, "ignore")
+                    except LookupError: # no IncrementalEncoder
+                        pass
+                    else:
+                        encodedresult = "".join(encoder.encode(c) for c in s)
+                        decoder = codecs.getincrementaldecoder(encoding)("ignore")
+                        decodedresult = u"".join(decoder.decode(c) for c in encodedresult)
+                        self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
+
+                        encodedresult = "".join(cencoder.encode(c) for c in s)
+                        cdecoder = _testcapi.codec_incrementaldecoder(encoding, "ignore")
+                        decodedresult = u"".join(cdecoder.decode(c) for c in encodedresult)
+                        self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
+
     def test_seek(self):
         # all codecs should be able to encode these
         s = u"%s\n%s\n" % (100*u"abc123", 100*u"def456")
@@ -1214,6 +1257,19 @@ class CharmapTest(unittest.TestCase):
             (u"", len(allbytes))
         )
 
+class WithStmtTest(unittest.TestCase):
+    def test_encodedfile(self):
+        f = StringIO.StringIO("\xc3\xbc")
+        with codecs.EncodedFile(f, "latin-1", "utf-8") as ef:
+            self.assertEquals(ef.read(), "\xfc")
+
+    def test_streamreaderwriter(self):
+        f = StringIO.StringIO("\xc3\xbc")
+        info = codecs.lookup("utf-8")
+        with codecs.StreamReaderWriter(f, info.streamreader,
+                                       info.streamwriter, 'strict') as srw:
+            self.assertEquals(srw.read(), u"\xfc")
+
 
 def test_main():
     test_support.run_unittest(
@@ -1234,10 +1290,12 @@ def test_main():
         IDNACodecTest,
         CodecsModuleTest,
         StreamReaderTest,
+        EncodedFileTest,
         Str2StrTest,
         BasicUnicodeTest,
         BasicStrTest,
-        CharmapTest
+        CharmapTest,
+        WithStmtTest,
     )
 
 
diff --git a/Lib/test/test_complex_args.py b/Lib/test/test_complex_args.py
new file mode 100644 (file)
index 0000000..c6d50a9
--- /dev/null
@@ -0,0 +1,91 @@
+
+import unittest
+from test import test_support
+
+class ComplexArgsTestCase(unittest.TestCase):
+
+    def check(self, func, expected, *args):
+        self.assertEqual(func(*args), expected)
+
+    # These functions are tested below as lambdas too.  If you add a function test,
+    # also add a similar lambda test.
+
+    def test_func_parens_no_unpacking(self):
+        def f(((((x))))): return x
+        self.check(f, 1, 1)
+        # Inner parens are elided, same as: f(x,)
+        def f(((x)),): return x
+        self.check(f, 2, 2)
+
+    def test_func_1(self):
+        def f(((((x),)))): return x
+        self.check(f, 3, (3,))
+        def f(((((x)),))): return x
+        self.check(f, 4, (4,))
+        def f(((((x))),)): return x
+        self.check(f, 5, (5,))
+        def f(((x),)): return x
+        self.check(f, 6, (6,))
+
+    def test_func_2(self):
+        def f(((((x)),),)): return x
+        self.check(f, 2, ((2,),))
+
+    def test_func_3(self):
+        def f((((((x)),),),)): return x
+        self.check(f, 3, (((3,),),))
+
+    def test_func_complex(self):
+        def f((((((x)),),),), a, b, c): return x, a, b, c
+        self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7)
+
+        def f(((((((x)),)),),), a, b, c): return x, a, b, c
+        self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7)
+
+        def f(a, b, c, ((((((x)),)),),)): return a, b, c, x
+        self.check(f, (9, 8, 7, 3), 9, 8, 7, (((3,),),))
+
+    # Duplicate the tests above, but for lambda.  If you add a lambda test,
+    # also add a similar function test above.
+
+    def test_lambda_parens_no_unpacking(self):
+        f = lambda (((((x))))): x
+        self.check(f, 1, 1)
+        # Inner parens are elided, same as: f(x,)
+        f = lambda ((x)),: x
+        self.check(f, 2, 2)
+
+    def test_lambda_1(self):
+        f = lambda (((((x),)))): x
+        self.check(f, 3, (3,))
+        f = lambda (((((x)),))): x
+        self.check(f, 4, (4,))
+        f = lambda (((((x))),)): x
+        self.check(f, 5, (5,))
+        f = lambda (((x),)): x
+        self.check(f, 6, (6,))
+
+    def test_lambda_2(self):
+        f = lambda (((((x)),),)): x
+        self.check(f, 2, ((2,),))
+
+    def test_lambda_3(self):
+        f = lambda ((((((x)),),),)): x
+        self.check(f, 3, (((3,),),))
+
+    def test_lambda_complex(self):
+        f = lambda (((((x)),),),), a, b, c: (x, a, b, c)
+        self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7)
+
+        f = lambda ((((((x)),)),),), a, b, c: (x, a, b, c)
+        self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7)
+
+        f = lambda a, b, c, ((((((x)),)),),): (a, b, c, x)
+        self.check(f, (9, 8, 7, 3), 9, 8, 7, (((3,),),))
+
+
+def test_main():
+    test_support.run_unittest(ComplexArgsTestCase)
+
+if __name__ == "__main__":
+    test_main()
index 2cf39ae6672fb2c595221392df38825d31e3a2c2..747785d54f75dfc6d46122645c7dfe851dad6ea3 100644 (file)
@@ -330,32 +330,6 @@ class LockContextTestCase(unittest.TestCase):
                 return True
         self.boilerPlate(lock, locked)
 
-class DecimalContextTestCase(unittest.TestCase):
-
-    # XXX Somebody should write more thorough tests for this
-
-    def testBasic(self):
-        ctx = decimal.getcontext()
-        orig_context = ctx.copy()
-        try:
-            ctx.prec = save_prec = decimal.ExtendedContext.prec + 5
-            with decimal.ExtendedContext.get_manager():
-                self.assertEqual(decimal.getcontext().prec,
-                                 decimal.ExtendedContext.prec)
-            self.assertEqual(decimal.getcontext().prec, save_prec)
-            try:
-                with decimal.ExtendedContext.get_manager():
-                    self.assertEqual(decimal.getcontext().prec,
-                                     decimal.ExtendedContext.prec)
-                    1/0
-            except ZeroDivisionError:
-                self.assertEqual(decimal.getcontext().prec, save_prec)
-            else:
-                self.fail("Didn't raise ZeroDivisionError")
-        finally:
-            decimal.setcontext(orig_context)
-
-
 # This is needed to make the test actually run under regrtest.py!
 def test_main():
     run_suite(
index c20beeeb1e52558700b8b72a50722f0f7de95786..e7c0cf1cccb09bdd1e341d1a3d97afb18ad5ffae 100644 (file)
@@ -1,6 +1,7 @@
 # Simple test suite for Cookie.py
 
-from test.test_support import verify, verbose, run_doctest
+from test.test_support import run_unittest, run_doctest
+import unittest
 import Cookie
 
 import warnings
@@ -8,43 +9,74 @@ warnings.filterwarnings("ignore",
                         ".* class is insecure.*",
                         DeprecationWarning)
 
-# Currently this only tests SimpleCookie
-
-cases = [
-    ('chips=ahoy; vienna=finger', {'chips':'ahoy', 'vienna':'finger'}),
-    ('keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;"',
-     {'keebler' : 'E=mc2; L="Loves"; fudge=\012;'}),
-
-    # Check illegal cookies that have an '=' char in an unquoted value
-    ('keebler=E=mc2', {'keebler' : 'E=mc2'})
-    ]
-
-for data, dict in cases:
-    C = Cookie.SimpleCookie() ; C.load(data)
-    print repr(C)
-    print C.output(sep='\n')
-    for k, v in sorted(dict.iteritems()):
-        print ' ', k, repr( C[k].value ), repr(v)
-        verify(C[k].value == v)
-        print C[k]
-
-C = Cookie.SimpleCookie()
-C.load('Customer="WILE_E_COYOTE"; Version=1; Path=/acme')
-
-verify(C['Customer'].value == 'WILE_E_COYOTE')
-verify(C['Customer']['version'] == '1')
-verify(C['Customer']['path'] == '/acme')
-
-print C.output(['path'])
-print C.js_output()
-print C.js_output(['path'])
-
-# Try cookie with quoted meta-data
-C = Cookie.SimpleCookie()
-C.load('Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"')
-verify(C['Customer'].value == 'WILE_E_COYOTE')
-verify(C['Customer']['version'] == '1')
-verify(C['Customer']['path'] == '/acme')
-
-print "If anything blows up after this line, it's from Cookie's doctest."
-run_doctest(Cookie)
+class CookieTests(unittest.TestCase):
+    # Currently this only tests SimpleCookie
+    def test_basic(self):
+        cases = [
+            { 'data': 'chips=ahoy; vienna=finger',
+              'dict': {'chips':'ahoy', 'vienna':'finger'},
+              'repr': "<SimpleCookie: chips='ahoy' vienna='finger'>",
+              'output': 'Set-Cookie: chips=ahoy\nSet-Cookie: vienna=finger',
+            },
+
+            { 'data': 'keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;"',
+              'dict': {'keebler' : 'E=mc2; L="Loves"; fudge=\012;'},
+              'repr': '''<SimpleCookie: keebler='E=mc2; L="Loves"; fudge=\\n;'>''',
+              'output': 'Set-Cookie: keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;"',
+            },
+
+            # Check illegal cookies that have an '=' char in an unquoted value
+            { 'data': 'keebler=E=mc2',
+              'dict': {'keebler' : 'E=mc2'},
+              'repr': "<SimpleCookie: keebler='E=mc2'>",
+              'output': 'Set-Cookie: keebler=E=mc2',
+            }
+        ]
+
+        for case in cases:
+            C = Cookie.SimpleCookie()
+            C.load(case['data'])
+            self.assertEqual(repr(C), case['repr'])
+            self.assertEqual(C.output(sep='\n'), case['output'])
+            for k, v in sorted(case['dict'].iteritems()):
+                self.assertEqual(C[k].value, v)
+
+    def test_load(self):
+        C = Cookie.SimpleCookie()
+        C.load('Customer="WILE_E_COYOTE"; Version=1; Path=/acme')
+
+        self.assertEqual(C['Customer'].value, 'WILE_E_COYOTE')
+        self.assertEqual(C['Customer']['version'], '1')
+        self.assertEqual(C['Customer']['path'], '/acme')
+
+        self.assertEqual(C.output(['path']),
+            'Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme')
+        self.assertEqual(C.js_output(), """
+        <script type="text/javascript">
+        <!-- begin hiding
+        document.cookie = "Customer="WILE_E_COYOTE"; Path=/acme; Version=1";
+        // end hiding -->
+        </script>
+        """)
+        self.assertEqual(C.js_output(['path']), """
+        <script type="text/javascript">
+        <!-- begin hiding
+        document.cookie = "Customer="WILE_E_COYOTE"; Path=/acme";
+        // end hiding -->
+        </script>
+        """)
+
+    def test_quoted_meta(self):
+        # Try cookie with quoted meta-data
+        C = Cookie.SimpleCookie()
+        C.load('Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"')
+        self.assertEqual(C['Customer'].value, 'WILE_E_COYOTE')
+        self.assertEqual(C['Customer']['version'], '1')
+        self.assertEqual(C['Customer']['path'], '/acme')
+
+def test_main():
+    run_unittest(CookieTests)
+    run_doctest(Cookie)
+
+if __name__ == '__main__':
+    test_main()
index 765bdafad5cbe45c73418cd661585dd627062517..3329104501ab5010c1c7779df398e9f35a4bd4fc 100644 (file)
@@ -852,6 +852,7 @@ class TestDate(HarmlessMixedComparison):
         t = self.theclass(2005, 3, 2)
         self.assertEqual(t.strftime("m:%m d:%d y:%y"), "m:03 d:02 y:05")
         self.assertEqual(t.strftime(""), "") # SF bug #761337
+        self.assertEqual(t.strftime('x'*1000), 'x'*1000) # SF bug #1556784
 
         self.assertRaises(TypeError, t.strftime) # needs an arg
         self.assertRaises(TypeError, t.strftime, "one", "two") # too many args
index 55a53d30f7b9d482567aeccb066f7efb1f41c91e..50df93d7e3a7b0f3b2ce0877c38cc6545f517c00 100644 (file)
@@ -23,6 +23,7 @@ or Behaviour) to test each part, or without parameter to test both parts. If
 you're working through IDLE, you can import this test module and call test_main()
 with the corresponding argument.
 """
+from __future__ import with_statement
 
 import unittest
 import glob
@@ -1057,6 +1058,32 @@ class ContextAPItests(unittest.TestCase):
         self.assertNotEqual(id(c.flags), id(d.flags))
         self.assertNotEqual(id(c.traps), id(d.traps))
 
+class WithStatementTest(unittest.TestCase):
+    # Can't do these as docstrings until Python 2.6
+    # as doctest can't handle __future__ statements
+
+    def test_localcontext(self):
+        # Use a copy of the current context in the block
+        orig_ctx = getcontext()
+        with localcontext() as enter_ctx:
+            set_ctx = getcontext()
+        final_ctx = getcontext()
+        self.assert_(orig_ctx is final_ctx, 'did not restore context correctly')
+        self.assert_(orig_ctx is not set_ctx, 'did not copy the context')
+        self.assert_(set_ctx is enter_ctx, '__enter__ returned wrong context')
+
+    def test_localcontextarg(self):
+        # Use a copy of the supplied context in the block
+        orig_ctx = getcontext()
+        new_ctx = Context(prec=42)
+        with localcontext(new_ctx) as enter_ctx:
+            set_ctx = getcontext()
+        final_ctx = getcontext()
+        self.assert_(orig_ctx is final_ctx, 'did not restore context correctly')
+        self.assert_(set_ctx.prec == new_ctx.prec, 'did not set correct context')
+        self.assert_(new_ctx is not set_ctx, 'did not copy the context')
+        self.assert_(set_ctx is enter_ctx, '__enter__ returned wrong context')
+
 def test_main(arith=False, verbose=None):
     """ Execute the tests.
 
@@ -1077,6 +1104,7 @@ def test_main(arith=False, verbose=None):
         DecimalPythonAPItests,
         ContextAPItests,
         DecimalTest,
+        WithStatementTest,
     ]
 
     try:
index d3ae4551ab8562e34c646e416f21a813c155a7af..2968e3d7d0a8d2b4649fa64ac9b415295e79d5b5 100644 (file)
@@ -2017,6 +2017,13 @@ def supers():
 
     veris(Sub.test(), Base.aProp)
 
+    # Verify that super() doesn't allow keyword args
+    try:
+        super(Base, kw=1)
+    except TypeError:
+        pass
+    else:
+        raise TestFailed, "super shouldn't accept keyword args"
 
 def inherits():
     if verbose: print "Testing inheritance from basic types..."
@@ -3500,6 +3507,13 @@ def test_mutable_bases():
     else:
         raise TestFailed, "shouldn't be able to assign to list.__bases__"
 
+    try:
+        D.__bases__ = (C2, list)
+    except TypeError:
+        pass
+    else:
+        assert 0, "best_base calculation found wanting"
+
     try:
         del D.__bases__
     except TypeError:
index 717ed5e3f3e274e6df21dac1f83883455f8f2095..ff6ccde20488e4e161612410970d970548dbafa1 100644 (file)
@@ -439,6 +439,16 @@ class DictTest(unittest.TestCase):
         else:
             self.fail_("g[42] didn't raise KeyError")
 
+    def test_tuple_keyerror(self):
+        # SF #1576657
+        d = {}
+        try:
+            d[(1,)]
+        except KeyError, e:
+            self.assertEqual(e.args, ((1,),))
+        else:
+            self.fail("missing KeyError")
+
 
 from test import mapping_tests
 
index b5c567675e096e4e4e6cf85468b6d19e2b2b95c4..abce41eef71c11759b736c7b4afe67b365254104 100644 (file)
@@ -196,17 +196,21 @@ class ExceptionTests(unittest.TestCase):
             test_capi2()
             test_capi3()
 
-    def testAttributes(self):
-        # test that exception attributes are happy
+    def test_WindowsError(self):
         try:
-            str(u'Hello \u00E1')
-        except Exception, e:
-            sampleUnicodeEncodeError = e
+            WindowsError
+        except NameError:
+            pass
+        else:
+            self.failUnlessEqual(str(WindowsError(1001)),
+                                 "1001")
+            self.failUnlessEqual(str(WindowsError(1001, "message")),
+                                 "[Error 1001] message")
+            self.failUnlessEqual(WindowsError(1001, "message").errno, 22)
+            self.failUnlessEqual(WindowsError(1001, "message").winerror, 1001)
 
-        try:
-            unicode('\xff')
-        except Exception, e:
-            sampleUnicodeDecodeError = e
+    def testAttributes(self):
+        # test that exception attributes are happy
 
         exceptionList = [
             (BaseException, (), {'message' : '', 'args' : ()}),
@@ -218,11 +222,16 @@ class ExceptionTests(unittest.TestCase):
             (SystemExit, ('foo',),
                 {'message' : 'foo', 'args' : ('foo',), 'code' : 'foo'}),
             (IOError, ('foo',),
-                {'message' : 'foo', 'args' : ('foo',)}),
+                {'message' : 'foo', 'args' : ('foo',), 'filename' : None,
+                 'errno' : None, 'strerror' : None}),
             (IOError, ('foo', 'bar'),
-                {'message' : '', 'args' : ('foo', 'bar')}),
+                {'message' : '', 'args' : ('foo', 'bar'), 'filename' : None,
+                 'errno' : 'foo', 'strerror' : 'bar'}),
             (IOError, ('foo', 'bar', 'baz'),
-                {'message' : '', 'args' : ('foo', 'bar')}),
+                {'message' : '', 'args' : ('foo', 'bar'), 'filename' : 'baz',
+                 'errno' : 'foo', 'strerror' : 'bar'}),
+            (IOError, ('foo', 'bar', 'baz', 'quux'),
+                {'message' : '', 'args' : ('foo', 'bar', 'baz', 'quux')}),
             (EnvironmentError, ('errnoStr', 'strErrorStr', 'filenameStr'),
                 {'message' : '', 'args' : ('errnoStr', 'strErrorStr'),
                  'strerror' : 'strErrorStr', 'errno' : 'errnoStr',
@@ -249,16 +258,16 @@ class ExceptionTests(unittest.TestCase):
                  'print_file_and_line' : None, 'msg' : 'msgStr',
                  'filename' : None, 'lineno' : None, 'offset' : None}),
             (UnicodeError, (), {'message' : '', 'args' : (),}),
-            (sampleUnicodeEncodeError,
-                {'message' : '', 'args' : ('ascii', u'Hello \xe1', 6, 7,
-                                           'ordinal not in range(128)'),
-                 'encoding' : 'ascii', 'object' : u'Hello \xe1',
-                 'start' : 6, 'reason' : 'ordinal not in range(128)'}),
-            (sampleUnicodeDecodeError,
+            (UnicodeEncodeError, ('ascii', u'a', 0, 1, 'ordinal not in range'),
+                {'message' : '', 'args' : ('ascii', u'a', 0, 1,
+                                           'ordinal not in range'),
+                 'encoding' : 'ascii', 'object' : u'a',
+                 'start' : 0, 'reason' : 'ordinal not in range'}),
+            (UnicodeDecodeError, ('ascii', '\xff', 0, 1, 'ordinal not in range'),
                 {'message' : '', 'args' : ('ascii', '\xff', 0, 1,
-                                           'ordinal not in range(128)'),
+                                           'ordinal not in range'),
                  'encoding' : 'ascii', 'object' : '\xff',
-                 'start' : 0, 'reason' : 'ordinal not in range(128)'}),
+                 'start' : 0, 'reason' : 'ordinal not in range'}),
             (UnicodeTranslateError, (u"\u3042", 0, 1, "ouch"),
                 {'message' : '', 'args' : (u'\u3042', 0, 1, 'ouch'),
                  'object' : u'\u3042', 'reason' : 'ouch',
@@ -274,18 +283,14 @@ class ExceptionTests(unittest.TestCase):
         except NameError:
             pass
 
-        for args in exceptionList:
-            expected = args[-1]
+        for exc, args, expected in exceptionList:
             try:
-                exc = args[0]
-                if len(args) == 2:
-                    raise exc
-                else:
-                    raise exc(*args[1])
+                raise exc(*args)
             except BaseException, e:
-                if (e is not exc and     # needed for sampleUnicode errors
-                        type(e) is not exc):
+                if type(e) is not exc:
                     raise
+                # Verify module name
+                self.assertEquals(type(e).__module__, 'exceptions')
                 # Verify no ref leaks in Exc_str()
                 s = str(e)
                 for checkArgName in expected:
@@ -332,6 +337,15 @@ class ExceptionTests(unittest.TestCase):
                 return -1
         self.assertRaises(RuntimeError, g)
 
+    def testUnicodeStrUsage(self):
+        # Make sure both instances and classes have a str and unicode
+        # representation.
+        self.failUnless(str(Exception))
+        self.failUnless(unicode(Exception))
+        self.failUnless(str(Exception('a')))
+        self.failUnless(unicode(Exception(u'a')))
+
+
 def test_main():
     run_unittest(ExceptionTests)
 
index 58a57b51a61f4d8e1b4dac3a09020c55222b6428..2d800b2a5c9e5aa9b64f2413c8b1d7c1a8c30ad8 100755 (executable)
@@ -25,7 +25,7 @@ if sys.platform in ('netbsd1', 'netbsd2', 'netbsd3',
                     'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
                     'freebsd6', 'freebsd7',
                     'bsdos2', 'bsdos3', 'bsdos4',
-                    'openbsd', 'openbsd2', 'openbsd3'):
+                    'openbsd', 'openbsd2', 'openbsd3', 'openbsd4'):
     if struct.calcsize('l') == 8:
         off_t = 'l'
         pid_t = 'i'
index a9b31707a24917c8e357fb136998a9588a413630..8bf5d6e4a96d09564b7ad72cc6ce734868752d41 100644 (file)
@@ -219,8 +219,8 @@ if have_unicode:
     test_exc(unicode('abc %\u3000','raw-unicode-escape'), 1, ValueError,
              "unsupported format character '?' (0x3000) at index 5")
 
-test_exc('%d', '1', TypeError, "int argument required")
-test_exc('%g', '1', TypeError, "float argument required")
+test_exc('%d', '1', TypeError, "int argument required, not str")
+test_exc('%g', '1', TypeError, "float argument required, not str")
 test_exc('no format', '1', TypeError,
          "not all arguments converted during string formatting")
 test_exc('no format', u'1', TypeError,
index 01d6cd29e8a62c8c6e5578001b5e75b59c06d66c..edc17fce78be72d0accc93361b00b5edd43c3946 100644 (file)
@@ -210,6 +210,13 @@ class TestUpdateWrapper(unittest.TestCase):
         self.assertEqual(wrapper.attr, 'This is a different test')
         self.assertEqual(wrapper.dict_attr, f.dict_attr)
 
+    def test_builtin_update(self):
+        # Test for bug #1576241
+        def wrapper():
+            pass
+        functools.update_wrapper(wrapper, max)
+        self.assertEqual(wrapper.__name__, 'max')
+        self.assert_(wrapper.__doc__.startswith('max('))
 
 class TestWraps(TestUpdateWrapper):
 
index f5462e204d637c73541232226f89145c6f329871..9a5f8298cc07ed26b70a61305f2a342a5a982fc9 100644 (file)
@@ -82,6 +82,27 @@ class FutureTest(unittest.TestCase):
         else:
             self.fail("expected exception didn't occur")
 
+    def test_parserhack(self):
+        # test that the parser.c::future_hack function works as expected
+        # Note: although this test must pass, it's not testing the original
+        #       bug as of 2.6 since the with statement is not optional and
+        #       the parser hack disabled. If a new keyword is introduced in
+        #       2.6, change this to refer to the new future import.
+        try:
+            exec("from __future__ import division, with_statement; with = 0")
+        except SyntaxError:
+            pass
+        else:
+            self.fail("syntax error didn't occur")
+
+        try:
+            exec("from __future__ import (with_statement, division); with = 0")
+        except SyntaxError:
+            pass
+        else:
+            self.fail("syntax error didn't occur")
+
+
 def test_main():
     test_support.run_unittest(FutureTest)
 
diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py
new file mode 100644 (file)
index 0000000..53c4607
--- /dev/null
@@ -0,0 +1,184 @@
+import unittest
+from test import test_support
+import os
+import genericpath
+
+class AllCommonTest(unittest.TestCase):
+
+    def assertIs(self, a, b):
+        self.assert_(a is b)
+
+    def test_commonprefix(self):
+        self.assertEqual(
+            genericpath.commonprefix([]),
+            ""
+        )
+        self.assertEqual(
+            genericpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"]),
+            "/home/swen"
+        )
+        self.assertEqual(
+            genericpath.commonprefix(["/home/swen/spam", "/home/swen/eggs"]),
+            "/home/swen/"
+        )
+        self.assertEqual(
+            genericpath.commonprefix(["/home/swen/spam", "/home/swen/spam"]),
+            "/home/swen/spam"
+        )
+
+    def test_getsize(self):
+        f = open(test_support.TESTFN, "wb")
+        try:
+            f.write("foo")
+            f.close()
+            self.assertEqual(genericpath.getsize(test_support.TESTFN), 3)
+        finally:
+            if not f.closed:
+                f.close()
+            os.remove(test_support.TESTFN)
+
+    def test_time(self):
+        f = open(test_support.TESTFN, "wb")
+        try:
+            f.write("foo")
+            f.close()
+            f = open(test_support.TESTFN, "ab")
+            f.write("bar")
+            f.close()
+            f = open(test_support.TESTFN, "rb")
+            d = f.read()
+            f.close()
+            self.assertEqual(d, "foobar")
+
+            self.assert_(
+                genericpath.getctime(test_support.TESTFN) <=
+                genericpath.getmtime(test_support.TESTFN)
+            )
+        finally:
+            if not f.closed:
+                f.close()
+            os.remove(test_support.TESTFN)
+
+    def test_exists(self):
+        self.assertIs(genericpath.exists(test_support.TESTFN), False)
+        f = open(test_support.TESTFN, "wb")
+        try:
+            f.write("foo")
+            f.close()
+            self.assertIs(genericpath.exists(test_support.TESTFN), True)
+        finally:
+            if not f.close():
+                f.close()
+            try:
+                os.remove(test_support.TESTFN)
+            except os.error:
+                pass
+
+        self.assertRaises(TypeError, genericpath.exists)
+
+    def test_isdir(self):
+        self.assertIs(genericpath.isdir(test_support.TESTFN), False)
+        f = open(test_support.TESTFN, "wb")
+        try:
+            f.write("foo")
+            f.close()
+            self.assertIs(genericpath.isdir(test_support.TESTFN), False)
+            os.remove(test_support.TESTFN)
+            os.mkdir(test_support.TESTFN)
+            self.assertIs(genericpath.isdir(test_support.TESTFN), True)
+            os.rmdir(test_support.TESTFN)
+        finally:
+            if not f.close():
+                f.close()
+            try:
+                os.remove(test_support.TESTFN)
+            except os.error:
+                pass
+            try:
+                os.rmdir(test_support.TESTFN)
+            except os.error:
+                pass
+
+        self.assertRaises(TypeError, genericpath.isdir)
+
+    def test_isfile(self):
+        self.assertIs(genericpath.isfile(test_support.TESTFN), False)
+        f = open(test_support.TESTFN, "wb")
+        try:
+            f.write("foo")
+            f.close()
+            self.assertIs(genericpath.isfile(test_support.TESTFN), True)
+            os.remove(test_support.TESTFN)
+            os.mkdir(test_support.TESTFN)
+            self.assertIs(genericpath.isfile(test_support.TESTFN), False)
+            os.rmdir(test_support.TESTFN)
+        finally:
+            if not f.close():
+                f.close()
+            try:
+                os.remove(test_support.TESTFN)
+            except os.error:
+                pass
+            try:
+                os.rmdir(test_support.TESTFN)
+            except os.error:
+                pass
+
+        self.assertRaises(TypeError, genericpath.isdir)
+
+        def test_samefile(self):
+            f = open(test_support.TESTFN + "1", "wb")
+            try:
+                f.write("foo")
+                f.close()
+                self.assertIs(
+                    genericpath.samefile(
+                        test_support.TESTFN + "1",
+                        test_support.TESTFN + "1"
+                    ),
+                    True
+                )
+                # If we don't have links, assume that os.stat doesn't return resonable
+                # inode information and thus, that samefile() doesn't work
+                if hasattr(os, "symlink"):
+                    os.symlink(
+                        test_support.TESTFN + "1",
+                        test_support.TESTFN + "2"
+                    )
+                    self.assertIs(
+                        genericpath.samefile(
+                            test_support.TESTFN + "1",
+                            test_support.TESTFN + "2"
+                        ),
+                        True
+                    )
+                    os.remove(test_support.TESTFN + "2")
+                    f = open(test_support.TESTFN + "2", "wb")
+                    f.write("bar")
+                    f.close()
+                    self.assertIs(
+                        genericpath.samefile(
+                            test_support.TESTFN + "1",
+                            test_support.TESTFN + "2"
+                        ),
+                        False
+                    )
+            finally:
+                if not f.close():
+                    f.close()
+                try:
+                    os.remove(test_support.TESTFN + "1")
+                except os.error:
+                    pass
+                try:
+                    os.remove(test_support.TESTFN + "2")
+                except os.error:
+                    pass
+
+            self.assertRaises(TypeError, genericpath.samefile)
+
+def test_main():
+    test_support.run_unittest(AllCommonTest)
+
+if __name__=="__main__":
+    test_main()
index 4cc953cd3f44b6e0102daed014db49f05749580c..22e4b254c2228de9f4a43e53a194cbddb403019c 100644 (file)
@@ -1,51 +1,51 @@
 """Verify that warnings are issued for global statements following use."""
 
-from test.test_support import check_syntax
+from test.test_support import run_unittest, check_syntax_error
+import unittest
 
 import warnings
+warnings.filterwarnings("error", module="<test string>")
 
-warnings.filterwarnings("error", module="<test code>")
-
-def compile_and_check(text, should_fail=1):
-    try:
-        compile(text, "<test code>", "exec")
-    except SyntaxError, msg:
-        if should_fail:
-            print "got SyntaxError as expected"
-        else:
-            print "raised unexpected SyntaxError:", text
-    else:
-        if should_fail:
-            print "should have raised SyntaxError:", text
-        else:
-            print "as expected, no SyntaxError"
-
-prog_text_1 = """
+class GlobalTests(unittest.TestCase):
+
+    def test1(self):
+        prog_text_1 = """\
 def wrong1():
     a = 1
     b = 2
     global a
     global b
 """
-compile_and_check(prog_text_1)
+        check_syntax_error(self, prog_text_1)
 
-prog_text_2 = """
+    def test2(self):
+        prog_text_2 = """\
 def wrong2():
     print x
     global x
 """
-compile_and_check(prog_text_2)
+        check_syntax_error(self, prog_text_2)
 
-prog_text_3 = """
+    def test3(self):
+        prog_text_3 = """\
 def wrong3():
     print x
     x = 2
     global x
 """
-compile_and_check(prog_text_3)
+        check_syntax_error(self, prog_text_3)
 
-prog_text_4 = """
+    def test4(self):
+        prog_text_4 = """\
 global x
 x = 2
 """
-compile_and_check(prog_text_4, 0)
+        # this should work
+        compile(prog_text_4, "<test string>", "exec")
+
+
+def test_main():
+    run_unittest(GlobalTests)
+
+if __name__ == "__main__":
+    test_main()
index ca84c563ec7a9fd90176eb52f2e29d4585d736c2..f4a04788b08ade13f9e23e8dd262380b89f7ecdd 100644 (file)
 # regression test, the filterwarnings() call has been added to
 # regrtest.py.
 
-from test.test_support import TestFailed, verify, vereq, check_syntax
+from test.test_support import run_unittest, check_syntax_error
+import unittest
 import sys
+# testing import *
+from sys import *
 
-print '1. Parser'
-
-print '1.1 Tokens'
-
-print '1.1.1 Backslashes'
-
-# Backslash means line continuation:
-x = 1 \
-+ 1
-if x != 2: raise TestFailed, 'backslash for line continuation'
-
-# Backslash does not means continuation in comments :\
-x = 0
-if x != 0: raise TestFailed, 'backslash ending comment'
-
-print '1.1.2 Numeric literals'
-
-print '1.1.2.1 Plain integers'
-if 0xff != 255: raise TestFailed, 'hex int'
-if 0377 != 255: raise TestFailed, 'octal int'
-if  2147483647   != 017777777777: raise TestFailed, 'large positive int'
-try:
-    from sys import maxint
-except ImportError:
-    maxint = 2147483647
-if maxint == 2147483647:
-    # The following test will start to fail in Python 2.4;
-    # change the 020000000000 to -020000000000
-    if -2147483647-1 != -020000000000: raise TestFailed, 'max negative int'
-    # XXX -2147483648
-    if 037777777777 < 0: raise TestFailed, 'large oct'
-    if 0xffffffff < 0: raise TestFailed, 'large hex'
-    for s in '2147483648', '040000000000', '0x100000000':
-        try:
-            x = eval(s)
-        except OverflowError:
-            print "OverflowError on huge integer literal " + repr(s)
-elif eval('maxint == 9223372036854775807'):
-    if eval('-9223372036854775807-1 != -01000000000000000000000'):
-        raise TestFailed, 'max negative int'
-    if eval('01777777777777777777777') < 0: raise TestFailed, 'large oct'
-    if eval('0xffffffffffffffff') < 0: raise TestFailed, 'large hex'
-    for s in '9223372036854775808', '02000000000000000000000', \
-             '0x10000000000000000':
-        try:
-            x = eval(s)
-        except OverflowError:
-            print "OverflowError on huge integer literal " + repr(s)
-else:
-    print 'Weird maxint value', maxint
-
-print '1.1.2.2 Long integers'
-x = 0L
-x = 0l
-x = 0xffffffffffffffffL
-x = 0xffffffffffffffffl
-x = 077777777777777777L
-x = 077777777777777777l
-x = 123456789012345678901234567890L
-x = 123456789012345678901234567890l
-
-print '1.1.2.3 Floating point'
-x = 3.14
-x = 314.
-x = 0.314
-# XXX x = 000.314
-x = .314
-x = 3e14
-x = 3E14
-x = 3e-14
-x = 3e+14
-x = 3.e14
-x = .3e14
-x = 3.1e4
-
-print '1.1.3 String literals'
-
-x = ''; y = ""; verify(len(x) == 0 and x == y)
-x = '\''; y = "'"; verify(len(x) == 1 and x == y and ord(x) == 39)
-x = '"'; y = "\""; verify(len(x) == 1 and x == y and ord(x) == 34)
-x = "doesn't \"shrink\" does it"
-y = 'doesn\'t "shrink" does it'
-verify(len(x) == 24 and x == y)
-x = "does \"shrink\" doesn't it"
-y = 'does "shrink" doesn\'t it'
-verify(len(x) == 24 and x == y)
-x = """
+class TokenTests(unittest.TestCase):
+
+    def testBackslash(self):
+        # Backslash means line continuation:
+        x = 1 \
+        + 1
+        self.assertEquals(x, 2, 'backslash for line continuation')
+
+        # Backslash does not means continuation in comments :\
+        x = 0
+        self.assertEquals(x, 0, 'backslash ending comment')
+
+    def testPlainIntegers(self):
+        self.assertEquals(0xff, 255)
+        self.assertEquals(0377, 255)
+        self.assertEquals(2147483647, 017777777777)
+        from sys import maxint
+        if maxint == 2147483647:
+            self.assertEquals(-2147483647-1, -020000000000)
+            # XXX -2147483648
+            self.assert_(037777777777 > 0)
+            self.assert_(0xffffffff > 0)
+            for s in '2147483648', '040000000000', '0x100000000':
+                try:
+                    x = eval(s)
+                except OverflowError:
+                    self.fail("OverflowError on huge integer literal %r" % s)
+        elif maxint == 9223372036854775807:
+            self.assertEquals(-9223372036854775807-1, -01000000000000000000000)
+            self.assert_(01777777777777777777777 > 0)
+            self.assert_(0xffffffffffffffff > 0)
+            for s in '9223372036854775808', '02000000000000000000000', \
+                     '0x10000000000000000':
+                try:
+                    x = eval(s)
+                except OverflowError:
+                    self.fail("OverflowError on huge integer literal %r" % s)
+        else:
+            self.fail('Weird maxint value %r' % maxint)
+
+    def testLongIntegers(self):
+        x = 0L
+        x = 0l
+        x = 0xffffffffffffffffL
+        x = 0xffffffffffffffffl
+        x = 077777777777777777L
+        x = 077777777777777777l
+        x = 123456789012345678901234567890L
+        x = 123456789012345678901234567890l
+
+    def testFloats(self):
+        x = 3.14
+        x = 314.
+        x = 0.314
+        # XXX x = 000.314
+        x = .314
+        x = 3e14
+        x = 3E14
+        x = 3e-14
+        x = 3e+14
+        x = 3.e14
+        x = .3e14
+        x = 3.1e4
+
+    def testStringLiterals(self):
+        x = ''; y = ""; self.assert_(len(x) == 0 and x == y)
+        x = '\''; y = "'"; self.assert_(len(x) == 1 and x == y and ord(x) == 39)
+        x = '"'; y = "\""; self.assert_(len(x) == 1 and x == y and ord(x) == 34)
+        x = "doesn't \"shrink\" does it"
+        y = 'doesn\'t "shrink" does it'
+        self.assert_(len(x) == 24 and x == y)
+        x = "does \"shrink\" doesn't it"
+        y = 'does "shrink" doesn\'t it'
+        self.assert_(len(x) == 24 and x == y)
+        x = """
 The "quick"
 brown fox
 jumps over
 the 'lazy' dog.
 """
-y = '\nThe "quick"\nbrown fox\njumps over\nthe \'lazy\' dog.\n'
-verify(x == y)
-y = '''
+        y = '\nThe "quick"\nbrown fox\njumps over\nthe \'lazy\' dog.\n'
+        self.assertEquals(x, y)
+        y = '''
 The "quick"
 brown fox
 jumps over
 the 'lazy' dog.
-'''; verify(x == y)
-y = "\n\
+'''
+        self.assertEquals(x, y)
+        y = "\n\
 The \"quick\"\n\
 brown fox\n\
 jumps over\n\
 the 'lazy' dog.\n\
-"; verify(x == y)
-y = '\n\
+"
+        self.assertEquals(x, y)
+        y = '\n\
 The \"quick\"\n\
 brown fox\n\
 jumps over\n\
 the \'lazy\' dog.\n\
-'; verify(x == y)
-
-
-print '1.1.4 Ellipsis literal'
-
-x = ...
-verify(x == Ellipsis)
-
-
-print '1.2 Grammar'
-
-print 'single_input' # NEWLINE | simple_stmt | compound_stmt NEWLINE
-# XXX can't test in a script -- this rule is only used when interactive
-
-print 'file_input' # (NEWLINE | stmt)* ENDMARKER
-# Being tested as this very moment this very module
-
-print 'expr_input' # testlist NEWLINE
-# XXX Hard to test -- used only in calls to input()
-
-print 'eval_input' # testlist ENDMARKER
-x = eval('1, 0 or 1')
-
-print 'funcdef'
-### 'def' NAME parameters ':' suite
-### parameters: '(' [varargslist] ')'
-### varargslist: (fpdef ['=' test] ',')* 
-###           ('*' (NAME|',' fpdef ['=' test]) [',' ('**'|'*' '*') NAME]
-###            | ('**'|'*' '*') NAME)
-###            | fpdef ['=' test] (',' fpdef ['=' test])* [',']
-### fpdef: NAME | '(' fplist ')'
-### fplist: fpdef (',' fpdef)* [',']
-### arglist: (argument ',')* (argument | *' test [',' '**' test] | '**' test)
-### argument: [test '='] test   # Really [keyword '='] test
-def f1(): pass
-f1()
-f1(*())
-f1(*(), **{})
-def f2(one_argument): pass
-def f3(two, arguments): pass
-def f4(two, (compound, (argument, list))): pass
-def f5((compound, first), two): pass
-vereq(f2.func_code.co_varnames, ('one_argument',))
-vereq(f3.func_code.co_varnames, ('two', 'arguments'))
-if sys.platform.startswith('java'):
-    vereq(f4.func_code.co_varnames,
-           ('two', '(compound, (argument, list))', 'compound', 'argument',
-                        'list',))
-    vereq(f5.func_code.co_varnames,
-           ('(compound, first)', 'two', 'compound', 'first'))
-else:
-    vereq(f4.func_code.co_varnames,
-          ('two', '.1', 'compound', 'argument',  'list'))
-    vereq(f5.func_code.co_varnames,
-          ('.0', 'two', 'compound', 'first'))
-def a1(one_arg,): pass
-def a2(two, args,): pass
-def v0(*rest): pass
-def v1(a, *rest): pass
-def v2(a, b, *rest): pass
-def v3(a, (b, c), *rest): return a, b, c, rest
-# ceval unpacks the formal arguments into the first argcount names;
-# thus, the names nested inside tuples must appear after these names.
-if sys.platform.startswith('java'):
-    verify(v3.func_code.co_varnames == ('a', '(b, c)', 'rest', 'b', 'c'))
-else:
-    vereq(v3.func_code.co_varnames, ('a', '.1', 'rest', 'b', 'c'))
-verify(v3(1, (2, 3), 4) == (1, 2, 3, (4,)))
-def d01(a=1): pass
-d01()
-d01(1)
-d01(*(1,))
-d01(**{'a':2})
-def d11(a, b=1): pass
-d11(1)
-d11(1, 2)
-d11(1, **{'b':2})
-def d21(a, b, c=1): pass
-d21(1, 2)
-d21(1, 2, 3)
-d21(*(1, 2, 3))
-d21(1, *(2, 3))
-d21(1, 2, *(3,))
-d21(1, 2, **{'c':3})
-def d02(a=1, b=2): pass
-d02()
-d02(1)
-d02(1, 2)
-d02(*(1, 2))
-d02(1, *(2,))
-d02(1, **{'b':2})
-d02(**{'a': 1, 'b': 2})
-def d12(a, b=1, c=2): pass
-d12(1)
-d12(1, 2)
-d12(1, 2, 3)
-def d22(a, b, c=1, d=2): pass
-d22(1, 2)
-d22(1, 2, 3)
-d22(1, 2, 3, 4)
-def d01v(a=1, *rest): pass
-d01v()
-d01v(1)
-d01v(1, 2)
-d01v(*(1, 2, 3, 4))
-d01v(*(1,))
-d01v(**{'a':2})
-def d11v(a, b=1, *rest): pass
-d11v(1)
-d11v(1, 2)
-d11v(1, 2, 3)
-def d21v(a, b, c=1, *rest): pass
-d21v(1, 2)
-d21v(1, 2, 3)
-d21v(1, 2, 3, 4)
-d21v(*(1, 2, 3, 4))
-d21v(1, 2, **{'c': 3})
-def d02v(a=1, b=2, *rest): pass
-d02v()
-d02v(1)
-d02v(1, 2)
-d02v(1, 2, 3)
-d02v(1, *(2, 3, 4))
-d02v(**{'a': 1, 'b': 2})
-def d12v(a, b=1, c=2, *rest): pass
-d12v(1)
-d12v(1, 2)
-d12v(1, 2, 3)
-d12v(1, 2, 3, 4)
-d12v(*(1, 2, 3, 4))
-d12v(1, 2, *(3, 4, 5))
-d12v(1, *(2,), **{'c': 3})
-def d22v(a, b, c=1, d=2, *rest): pass
-d22v(1, 2)
-d22v(1, 2, 3)
-d22v(1, 2, 3, 4)
-d22v(1, 2, 3, 4, 5)
-d22v(*(1, 2, 3, 4))
-d22v(1, 2, *(3, 4, 5))
-d22v(1, *(2, 3), **{'d': 4})
-def d31v((x)): pass
-d31v(1)
-def d32v((x,)): pass
-d32v((1,))
-#keyword only argument tests
-def pos0key1(*, key): return key
-pos0key1(key=100)
-def pos2key2(p1, p2, *, k1, k2=100): return p1,p2,k1,k2
-pos2key2(1, 2, k1=100)
-pos2key2(1, 2, k1=100, k2=200)
-pos2key2(1, 2, k2=100, k1=200)
-def pos2key2dict(p1, p2, *, k1=100, k2, **kwarg): return p1,p2,k1,k2,kwarg
-pos2key2dict(1,2,k2=100,tokwarg1=100,tokwarg2=200)
-pos2key2dict(1,2,tokwarg1=100,tokwarg2=200, k2=100)
-
-### lambdef: 'lambda' [varargslist] ':' test
-print 'lambdef'
-l1 = lambda : 0
-verify(l1() == 0)
-l2 = lambda : a[d] # XXX just testing the expression
-l3 = lambda : [2 < x for x in [-1, 3, 0L]]
-verify(l3() == [0, 1, 0])
-l4 = lambda x = lambda y = lambda z=1 : z : y() : x()
-verify(l4() == 1)
-l5 = lambda x, y, z=2: x + y + z
-verify(l5(1, 2) == 5)
-verify(l5(1, 2, 3) == 6)
-check_syntax("lambda x: x = 2")
-l6 = lambda x, y, *, k=20: x+y+k
-verify(l6(1,2) == 1+2+20)
-verify(l6(1,2,k=10) == 1+2+10)
-
-### stmt: simple_stmt | compound_stmt
-# Tested below
-
-### simple_stmt: small_stmt (';' small_stmt)* [';']
-print 'simple_stmt'
-x = 1; pass; del x
-def foo():
-    # verify statments that end with semi-colons
-    x = 1; pass; del x;
-foo()
-
-### small_stmt: expr_stmt | print_stmt  | pass_stmt | del_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt
-# Tested below
-
-print 'expr_stmt' # (exprlist '=')* exprlist
-1
-1, 2, 3
-x = 1
-x = 1, 2, 3
-x = y = z = 1, 2, 3
-x, y, z = 1, 2, 3
-abc = a, b, c = x, y, z = xyz = 1, 2, (3, 4)
-# NB these variables are deleted below
-
-check_syntax("x + 1 = 1")
-check_syntax("a + 1 = b + 2")
-
-print 'print_stmt' # 'print' (test ',')* [test]
-print 1, 2, 3
-print 1, 2, 3,
-print
-print 0 or 1, 0 or 1,
-print 0 or 1
-
-print 'extended print_stmt' # 'print' '>>' test ','
-import sys
-print >> sys.stdout, 1, 2, 3
-print >> sys.stdout, 1, 2, 3,
-print >> sys.stdout
-print >> sys.stdout, 0 or 1, 0 or 1,
-print >> sys.stdout, 0 or 1
-
-# test printing to an instance
-class Gulp:
-    def write(self, msg): pass
-
-gulp = Gulp()
-print >> gulp, 1, 2, 3
-print >> gulp, 1, 2, 3,
-print >> gulp
-print >> gulp, 0 or 1, 0 or 1,
-print >> gulp, 0 or 1
-
-# test print >> None
-def driver():
-    oldstdout = sys.stdout
-    sys.stdout = Gulp()
-    try:
-        tellme(Gulp())
-        tellme()
-    finally:
-        sys.stdout = oldstdout
-
-# we should see this once
-def tellme(file=sys.stdout):
-    print >> file, 'hello world'
-
-driver()
-
-# we should not see this at all
-def tellme(file=None):
-    print >> file, 'goodbye universe'
-
-driver()
-
-# syntax errors
-check_syntax('print ,')
-check_syntax('print >> x,')
-
-print 'del_stmt' # 'del' exprlist
-del abc
-del x, y, (z, xyz)
-
-print 'pass_stmt' # 'pass'
-pass
-
-print 'flow_stmt' # break_stmt | continue_stmt | return_stmt | raise_stmt
-# Tested below
-
-print 'break_stmt' # 'break'
-while 1: break
-
-print 'continue_stmt' # 'continue'
-i = 1
-while i: i = 0; continue
-
-msg = ""
-while not msg:
-    msg = "continue + try/except ok"
-    try:
-        continue
-        msg = "continue failed to continue inside try"
-    except:
-        msg = "continue inside try called except block"
-print msg
-
-msg = ""
-while not msg:
-    msg = "finally block not called"
-    try:
-        continue
-    finally:
-        msg = "continue + try/finally ok"
-print msg
-
-
-# This test warrants an explanation. It is a test specifically for SF bugs
-# #463359 and #462937. The bug is that a 'break' statement executed or
-# exception raised inside a try/except inside a loop, *after* a continue
-# statement has been executed in that loop, will cause the wrong number of
-# arguments to be popped off the stack and the instruction pointer reset to
-# a very small number (usually 0.) Because of this, the following test
-# *must* written as a function, and the tracking vars *must* be function
-# arguments with default values. Otherwise, the test will loop and loop.
-
-print "testing continue and break in try/except in loop"
-def test_break_continue_loop(extra_burning_oil = 1, count=0):
-    big_hippo = 2
-    while big_hippo:
-        count += 1
+'
+        self.assertEquals(x, y)
+
+    def testEllipsis(self):
+        x = ...
+        self.assert_(x is Ellipsis)
+
+class GrammarTests(unittest.TestCase):
+
+    # single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE
+    # XXX can't test in a script -- this rule is only used when interactive
+
+    # file_input: (NEWLINE | stmt)* ENDMARKER
+    # Being tested as this very moment this very module
+
+    # expr_input: testlist NEWLINE
+    # XXX Hard to test -- used only in calls to input()
+
+    def testEvalInput(self):
+        # testlist ENDMARKER
+        x = eval('1, 0 or 1')
+
+    def testFuncdef(self):
+        ### 'def' NAME parameters ':' suite
+        ### parameters: '(' [varargslist] ')'
+        ### varargslist: (fpdef ['=' test] ',')*
+        ###           ('*' (NAME|',' fpdef ['=' test]) [',' ('**'|'*' '*') NAME]
+        ###            | ('**'|'*' '*') NAME)
+        ###            | fpdef ['=' test] (',' fpdef ['=' test])* [',']
+        ### fpdef: NAME | '(' fplist ')'
+        ### fplist: fpdef (',' fpdef)* [',']
+        ### arglist: (argument ',')* (argument | *' test [',' '**' test] | '**' test)
+        ### argument: [test '='] test   # Really [keyword '='] test
+        def f1(): pass
+        f1()
+        f1(*())
+        f1(*(), **{})
+        def f2(one_argument): pass
+        def f3(two, arguments): pass
+        def f4(two, (compound, (argument, list))): pass
+        def f5((compound, first), two): pass
+        self.assertEquals(f2.func_code.co_varnames, ('one_argument',))
+        self.assertEquals(f3.func_code.co_varnames, ('two', 'arguments'))
+        if sys.platform.startswith('java'):
+            self.assertEquals(f4.func_code.co_varnames,
+                   ('two', '(compound, (argument, list))', 'compound', 'argument',
+                                'list',))
+            self.assertEquals(f5.func_code.co_varnames,
+                   ('(compound, first)', 'two', 'compound', 'first'))
+        else:
+            self.assertEquals(f4.func_code.co_varnames,
+                  ('two', '.1', 'compound', 'argument',  'list'))
+            self.assertEquals(f5.func_code.co_varnames,
+                  ('.0', 'two', 'compound', 'first'))
+        def a1(one_arg,): pass
+        def a2(two, args,): pass
+        def v0(*rest): pass
+        def v1(a, *rest): pass
+        def v2(a, b, *rest): pass
+        def v3(a, (b, c), *rest): return a, b, c, rest
+
+        f1()
+        f2(1)
+        f2(1,)
+        f3(1, 2)
+        f3(1, 2,)
+        f4(1, (2, (3, 4)))
+        v0()
+        v0(1)
+        v0(1,)
+        v0(1,2)
+        v0(1,2,3,4,5,6,7,8,9,0)
+        v1(1)
+        v1(1,)
+        v1(1,2)
+        v1(1,2,3)
+        v1(1,2,3,4,5,6,7,8,9,0)
+        v2(1,2)
+        v2(1,2,3)
+        v2(1,2,3,4)
+        v2(1,2,3,4,5,6,7,8,9,0)
+        v3(1,(2,3))
+        v3(1,(2,3),4)
+        v3(1,(2,3),4,5,6,7,8,9,0)
+
+        # ceval unpacks the formal arguments into the first argcount names;
+        # thus, the names nested inside tuples must appear after these names.
+        if sys.platform.startswith('java'):
+            self.assertEquals(v3.func_code.co_varnames, ('a', '(b, c)', 'rest', 'b', 'c'))
+        else:
+            self.assertEquals(v3.func_code.co_varnames, ('a', '.1', 'rest', 'b', 'c'))
+        self.assertEquals(v3(1, (2, 3), 4), (1, 2, 3, (4,)))
+        def d01(a=1): pass
+        d01()
+        d01(1)
+        d01(*(1,))
+        d01(**{'a':2})
+        def d11(a, b=1): pass
+        d11(1)
+        d11(1, 2)
+        d11(1, **{'b':2})
+        def d21(a, b, c=1): pass
+        d21(1, 2)
+        d21(1, 2, 3)
+        d21(*(1, 2, 3))
+        d21(1, *(2, 3))
+        d21(1, 2, *(3,))
+        d21(1, 2, **{'c':3})
+        def d02(a=1, b=2): pass
+        d02()
+        d02(1)
+        d02(1, 2)
+        d02(*(1, 2))
+        d02(1, *(2,))
+        d02(1, **{'b':2})
+        d02(**{'a': 1, 'b': 2})
+        def d12(a, b=1, c=2): pass
+        d12(1)
+        d12(1, 2)
+        d12(1, 2, 3)
+        def d22(a, b, c=1, d=2): pass
+        d22(1, 2)
+        d22(1, 2, 3)
+        d22(1, 2, 3, 4)
+        def d01v(a=1, *rest): pass
+        d01v()
+        d01v(1)
+        d01v(1, 2)
+        d01v(*(1, 2, 3, 4))
+        d01v(*(1,))
+        d01v(**{'a':2})
+        def d11v(a, b=1, *rest): pass
+        d11v(1)
+        d11v(1, 2)
+        d11v(1, 2, 3)
+        def d21v(a, b, c=1, *rest): pass
+        d21v(1, 2)
+        d21v(1, 2, 3)
+        d21v(1, 2, 3, 4)
+        d21v(*(1, 2, 3, 4))
+        d21v(1, 2, **{'c': 3})
+        def d02v(a=1, b=2, *rest): pass
+        d02v()
+        d02v(1)
+        d02v(1, 2)
+        d02v(1, 2, 3)
+        d02v(1, *(2, 3, 4))
+        d02v(**{'a': 1, 'b': 2})
+        def d12v(a, b=1, c=2, *rest): pass
+        d12v(1)
+        d12v(1, 2)
+        d12v(1, 2, 3)
+        d12v(1, 2, 3, 4)
+        d12v(*(1, 2, 3, 4))
+        d12v(1, 2, *(3, 4, 5))
+        d12v(1, *(2,), **{'c': 3})
+        def d22v(a, b, c=1, d=2, *rest): pass
+        d22v(1, 2)
+        d22v(1, 2, 3)
+        d22v(1, 2, 3, 4)
+        d22v(1, 2, 3, 4, 5)
+        d22v(*(1, 2, 3, 4))
+        d22v(1, 2, *(3, 4, 5))
+        d22v(1, *(2, 3), **{'d': 4})
+        def d31v((x)): pass
+        d31v(1)
+        def d32v((x,)): pass
+        d32v((1,))
+        # keyword only argument tests
+        def pos0key1(*, key): return key
+        pos0key1(key=100)
+        def pos2key2(p1, p2, *, k1, k2=100): return p1,p2,k1,k2
+        pos2key2(1, 2, k1=100)
+        pos2key2(1, 2, k1=100, k2=200)
+        pos2key2(1, 2, k2=100, k1=200)
+        def pos2key2dict(p1, p2, *, k1=100, k2, **kwarg): return p1,p2,k1,k2,kwarg
+        pos2key2dict(1,2,k2=100,tokwarg1=100,tokwarg2=200)
+        pos2key2dict(1,2,tokwarg1=100,tokwarg2=200, k2=100)
+
+    def testLambdef(self):
+        ### lambdef: 'lambda' [varargslist] ':' test
+        l1 = lambda : 0
+        self.assertEquals(l1(), 0)
+        l2 = lambda : a[d] # XXX just testing the expression
+        l3 = lambda : [2 < x for x in [-1, 3, 0L]]
+        self.assertEquals(l3(), [0, 1, 0])
+        l4 = lambda x = lambda y = lambda z=1 : z : y() : x()
+        self.assertEquals(l4(), 1)
+        l5 = lambda x, y, z=2: x + y + z
+        self.assertEquals(l5(1, 2), 5)
+        self.assertEquals(l5(1, 2, 3), 6)
+        check_syntax_error(self, "lambda x: x = 2")
+        l6 = lambda x, y, *, k=20: x+y+k
+        self.assertEquals(l6(1,2), 1+2+20)
+        self.assertEquals(l6(1,2,k=10), 1+2+10)
+
+
+    ### stmt: simple_stmt | compound_stmt
+    # Tested below
+
+    def testSimpleStmt(self):
+        ### simple_stmt: small_stmt (';' small_stmt)* [';']
+        x = 1; pass; del x
+        def foo():
+            # verify statments that end with semi-colons
+            x = 1; pass; del x;
+        foo()
+
+    ### small_stmt: expr_stmt | print_stmt  | pass_stmt | del_stmt | flow_stmt | import_stmt | global_stmt | access_stmt 
+    # Tested below
+
+    def testExprStmt(self):
+        # (exprlist '=')* exprlist
+        1
+        1, 2, 3
+        x = 1
+        x = 1, 2, 3
+        x = y = z = 1, 2, 3
+        x, y, z = 1, 2, 3
+        abc = a, b, c = x, y, z = xyz = 1, 2, (3, 4)
+
+        check_syntax_error(self, "x + 1 = 1")
+        check_syntax_error(self, "a + 1 = b + 2")
+
+    def testPrintStmt(self):
+        # 'print' (test ',')* [test]
+        import StringIO
+
+        # Can't test printing to real stdout without comparing output
+        # which is not available in unittest.
+        save_stdout = sys.stdout
+        sys.stdout = StringIO.StringIO()
+
+        print 1, 2, 3
+        print 1, 2, 3,
+        print
+        print 0 or 1, 0 or 1,
+        print 0 or 1
+
+        # 'print' '>>' test ','
+        print >> sys.stdout, 1, 2, 3
+        print >> sys.stdout, 1, 2, 3,
+        print >> sys.stdout
+        print >> sys.stdout, 0 or 1, 0 or 1,
+        print >> sys.stdout, 0 or 1
+
+        # test printing to an instance
+        class Gulp:
+            def write(self, msg): pass
+
+        gulp = Gulp()
+        print >> gulp, 1, 2, 3
+        print >> gulp, 1, 2, 3,
+        print >> gulp
+        print >> gulp, 0 or 1, 0 or 1,
+        print >> gulp, 0 or 1
+
+        # test print >> None
+        def driver():
+            oldstdout = sys.stdout
+            sys.stdout = Gulp()
+            try:
+                tellme(Gulp())
+                tellme()
+            finally:
+                sys.stdout = oldstdout
+
+        # we should see this once
+        def tellme(file=sys.stdout):
+            print >> file, 'hello world'
+
+        driver()
+
+        # we should not see this at all
+        def tellme(file=None):
+            print >> file, 'goodbye universe'
+
+        driver()
+
+        self.assertEqual(sys.stdout.getvalue(), '''\
+1 2 3
+1 2 3
+1 1 1
+1 2 3
+1 2 3
+1 1 1
+hello world
+''')
+        sys.stdout = save_stdout
+
+        # syntax errors
+        check_syntax_error(self, 'print ,')
+        check_syntax_error(self, 'print >> x,')
+
+    def testDelStmt(self):
+        # 'del' exprlist
+        abc = [1,2,3]
+        x, y, z = abc
+        xyz = x, y, z
+
+        del abc
+        del x, y, (z, xyz)
+
+    def testPassStmt(self):
+        # 'pass'
+        pass
+
+    # flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt
+    # Tested below
+
+    def testBreakStmt(self):
+        # 'break'
+        while 1: break
+
+    def testContinueStmt(self):
+        # 'continue'
+        i = 1
+        while i: i = 0; continue
+
+        msg = ""
+        while not msg:
+            msg = "ok"
+            try:
+                continue
+                msg = "continue failed to continue inside try"
+            except:
+                msg = "continue inside try called except block"
+        if msg != "ok":
+            self.fail(msg)
+
+        msg = ""
+        while not msg:
+            msg = "finally block not called"
+            try:
+                continue
+            finally:
+                msg = "ok"
+        if msg != "ok":
+            self.fail(msg)
+
+    def test_break_continue_loop(self):
+        # This test warrants an explanation. It is a test specifically for SF bugs
+        # #463359 and #462937. The bug is that a 'break' statement executed or
+        # exception raised inside a try/except inside a loop, *after* a continue
+        # statement has been executed in that loop, will cause the wrong number of
+        # arguments to be popped off the stack and the instruction pointer reset to
+        # a very small number (usually 0.) Because of this, the following test
+        # *must* written as a function, and the tracking vars *must* be function
+        # arguments with default values. Otherwise, the test will loop and loop.
+
+        def test_inner(extra_burning_oil = 1, count=0):
+            big_hippo = 2
+            while big_hippo:
+                count += 1
+                try:
+                    if extra_burning_oil and big_hippo == 1:
+                        extra_burning_oil -= 1
+                        break
+                    big_hippo -= 1
+                    continue
+                except:
+                    raise
+            if count > 2 or big_hippo != 1:
+                self.fail("continue then break in try/except in loop broken!")
+        test_inner()
+
+    def testReturn(self):
+        # 'return' [testlist]
+        def g1(): return
+        def g2(): return 1
+        g1()
+        x = g2()
+        check_syntax_error(self, "class foo:return 1")
+
+    def testYield(self):
+        check_syntax_error(self, "class foo:yield 1")
+
+    def testRaise(self):
+        # 'raise' test [',' test]
+        try: raise RuntimeError, 'just testing'
+        except RuntimeError: pass
+        try: raise KeyboardInterrupt
+        except KeyboardInterrupt: pass
+
+    def testImport(self):
+        # 'import' dotted_as_names
+        import sys
+        import time, sys
+        # 'from' dotted_name 'import' ('*' | '(' import_as_names ')' | import_as_names)
+        from time import time
+        from time import (time)
+        # not testable inside a function, but already done at top of the module
+        # from sys import *
+        from sys import path, argv
+        from sys import (path, argv)
+        from sys import (path, argv,)
+
+    def testGlobal(self):
+        # 'global' NAME (',' NAME)*
+        global a
+        global a, b
+        global one, two, three, four, five, six, seven, eight, nine, ten
+
+    def testAssert(self):
+        # assert_stmt: 'assert' test [',' test]
+        assert 1
+        assert 1, 1
+        assert lambda x:x
+        assert 1, lambda x:x+1
         try:
-            if extra_burning_oil and big_hippo == 1:
-                extra_burning_oil -= 1
-                break
-            big_hippo -= 1
-            continue
-        except:
-            raise
-    if count > 2 or big_hippo != 1:
-        print "continue then break in try/except in loop broken!"
-test_break_continue_loop()
-
-print 'return_stmt' # 'return' [testlist]
-def g1(): return
-def g2(): return 1
-g1()
-x = g2()
-check_syntax("class foo:return 1")
-
-print 'yield_stmt'
-check_syntax("class foo:yield 1")
-
-print 'raise_stmt' # 'raise' test [',' test]
-try: raise RuntimeError, 'just testing'
-except RuntimeError: pass
-try: raise KeyboardInterrupt
-except KeyboardInterrupt: pass
-
-print 'import_name' # 'import' dotted_as_names
-import sys
-import time, sys
-print 'import_from' # 'from' dotted_name 'import' ('*' | '(' import_as_names ')' | import_as_names)
-from time import time
-from time import (time)
-from sys import *
-from sys import path, argv
-from sys import (path, argv)
-from sys import (path, argv,)
-
-print 'global_stmt' # 'global' NAME (',' NAME)*
-def f():
-    global a
-    global a, b
-    global one, two, three, four, five, six, seven, eight, nine, ten
-
-print "assert_stmt" # assert_stmt: 'assert' test [',' test]
-assert 1
-assert 1, 1
-assert lambda x:x
-assert 1, lambda x:x+1
-
-### compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef
-# Tested below
-
-print 'if_stmt' # 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
-if 1: pass
-if 1: pass
-else: pass
-if 0: pass
-elif 0: pass
-if 0: pass
-elif 0: pass
-elif 0: pass
-elif 0: pass
-else: pass
-
-print 'while_stmt' # 'while' test ':' suite ['else' ':' suite]
-while 0: pass
-while 0: pass
-else: pass
-
-print 'for_stmt' # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite]
-for i in 1, 2, 3: pass
-for i, j, k in (): pass
-else: pass
-class Squares:
-    def __init__(self, max):
-        self.max = max
-        self.sofar = []
-    def __len__(self): return len(self.sofar)
-    def __getitem__(self, i):
-        if not 0 <= i < self.max: raise IndexError
-        n = len(self.sofar)
-        while n <= i:
-            self.sofar.append(n*n)
-            n = n+1
-        return self.sofar[i]
-n = 0
-for x in Squares(10): n = n+x
-if n != 285: raise TestFailed, 'for over growing sequence'
-
-result = []
-for x, in [(1,), (2,), (3,)]:
-    result.append(x)
-vereq(result, [1, 2, 3])
-
-print 'try_stmt'
-### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite]
-###         | 'try' ':' suite 'finally' ':' suite
-### except_clause: 'except' [expr [',' expr]]
-try:
-    1/0
-except ZeroDivisionError:
-    pass
-else:
-    pass
-try: 1/0
-except EOFError: pass
-except TypeError, msg: pass
-except RuntimeError, msg: pass
-except: pass
-else: pass
-try: 1/0
-except (EOFError, TypeError, ZeroDivisionError): pass
-try: 1/0
-except (EOFError, TypeError, ZeroDivisionError), msg: pass
-try: pass
-finally: pass
-
-print 'suite' # simple_stmt | NEWLINE INDENT NEWLINE* (stmt NEWLINE*)+ DEDENT
-if 1: pass
-if 1:
-    pass
-if 1:
-    #
-    #
-    #
-    pass
-    pass
-    #
-    pass
-    #
-
-print 'test'
-### and_test ('or' and_test)*
-### and_test: not_test ('and' not_test)*
-### not_test: 'not' not_test | comparison
-if not 1: pass
-if 1 and 1: pass
-if 1 or 1: pass
-if not not not 1: pass
-if not 1 and 1 and 1: pass
-if 1 and 1 or 1 and 1 and 1 or not 1 and 1: pass
-
-print 'comparison'
-### comparison: expr (comp_op expr)*
-### comp_op: '<'|'>'|'=='|'>='|'<='|'!='|'in'|'not' 'in'|'is'|'is' 'not'
-if 1: pass
-x = (1 == 1)
-if 1 == 1: pass
-if 1 != 1: pass
-if 1 < 1: pass
-if 1 > 1: pass
-if 1 <= 1: pass
-if 1 >= 1: pass
-if 1 is 1: pass
-if 1 is not 1: pass
-if 1 in (): pass
-if 1 not in (): pass
-if 1 < 1 > 1 == 1 >= 1 <= 1 != 1 in 1 not in 1 is 1 is not 1: pass
-
-print 'binary mask ops'
-x = 1 & 1
-x = 1 ^ 1
-x = 1 | 1
-
-print 'shift ops'
-x = 1 << 1
-x = 1 >> 1
-x = 1 << 1 >> 1
-
-print 'additive ops'
-x = 1
-x = 1 + 1
-x = 1 - 1 - 1
-x = 1 - 1 + 1 - 1 + 1
-
-print 'multiplicative ops'
-x = 1 * 1
-x = 1 / 1
-x = 1 % 1
-x = 1 / 1 * 1 % 1
-
-print 'unary ops'
-x = +1
-x = -1
-x = ~1
-x = ~1 ^ 1 & 1 | 1 & 1 ^ -1
-x = -1*1/1 + 1*1 - ---1*1
-
-print 'selectors'
-### trailer: '(' [testlist] ')' | '[' subscript ']' | '.' NAME
-### subscript: expr | [expr] ':' [expr]
-f1()
-f2(1)
-f2(1,)
-f3(1, 2)
-f3(1, 2,)
-f4(1, (2, (3, 4)))
-v0()
-v0(1)
-v0(1,)
-v0(1,2)
-v0(1,2,3,4,5,6,7,8,9,0)
-v1(1)
-v1(1,)
-v1(1,2)
-v1(1,2,3)
-v1(1,2,3,4,5,6,7,8,9,0)
-v2(1,2)
-v2(1,2,3)
-v2(1,2,3,4)
-v2(1,2,3,4,5,6,7,8,9,0)
-v3(1,(2,3))
-v3(1,(2,3),4)
-v3(1,(2,3),4,5,6,7,8,9,0)
-print
-import sys, time
-c = sys.path[0]
-x = time.time()
-x = sys.modules['time'].time()
-a = '01234'
-c = a[0]
-c = a[-1]
-s = a[0:5]
-s = a[:5]
-s = a[0:]
-s = a[:]
-s = a[-5:]
-s = a[:-1]
-s = a[-4:-3]
-# A rough test of SF bug 1333982.  http://python.org/sf/1333982
-# The testing here is fairly incomplete.
-# Test cases should include: commas with 1 and 2 colons
-d = {}
-d[1] = 1
-d[1,] = 2
-d[1,2] = 3
-d[1,2,3] = 4
-L = list(d)
-L.sort(key=lambda x: x if isinstance(x, tuple) else ())
-print L
-
-
-print 'atoms'
-### atom: '(' [testlist] ')' | '[' [testlist] ']' | '{' [dictsetmaker] '}' | NAME | NUMBER | STRING
-### dictsetmaker: (test ':' test (',' test ':' test)* [',']) | (test (',' test)* [','])
-
-x = (1)
-x = (1 or 2 or 3)
-x = (1 or 2 or 3, 2, 3)
-
-x = []
-x = [1]
-x = [1 or 2 or 3]
-x = [1 or 2 or 3, 2, 3]
-x = []
-
-x = {}
-x = {'one': 1}
-x = {'one': 1,}
-x = {'one' or 'two': 1 or 2}
-x = {'one': 1, 'two': 2}
-x = {'one': 1, 'two': 2,}
-x = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6}
-
-x = {'one'}
-x = {'one', 1,}
-x = {'one', 'two', 'three'}
-x = {2, 3, 4,}
-
-x = x
-x = 'x'
-x = 123
-
-### exprlist: expr (',' expr)* [',']
-### testlist: test (',' test)* [',']
-# These have been exercised enough above
-
-print 'classdef' # 'class' NAME ['(' [testlist] ')'] ':' suite
-class B: pass
-class B2(): pass
-class C1(B): pass
-class C2(B): pass
-class D(C1, C2, B): pass
-class C:
-    def meth1(self): pass
-    def meth2(self, arg): pass
-    def meth3(self, a1, a2): pass
-
-# list comprehension tests
-nums = [1, 2, 3, 4, 5]
-strs = ["Apple", "Banana", "Coconut"]
-spcs = ["  Apple", " Banana ", "Coco  nut  "]
-
-print [s.strip() for s in spcs]
-print [3 * x for x in nums]
-print [x for x in nums if x > 2]
-print [(i, s) for i in nums for s in strs]
-print [(i, s) for i in nums for s in [f for f in strs if "n" in f]]
-print [(lambda a:[a**i for i in range(a+1)])(j) for j in range(5)]
-
-def test_in_func(l):
-    return [0 < x < 3 for x in l if x > 2]
-
-print test_in_func(nums)
-
-def test_nested_front():
-    print [[y for y in [x, x + 1]] for x in [1,3,5]]
-
-test_nested_front()
-
-check_syntax("[i, s for i in nums for s in strs]")
-check_syntax("[x if y]")
-
-suppliers = [
-  (1, "Boeing"),
-  (2, "Ford"),
-  (3, "Macdonalds")
-]
-
-parts = [
-  (10, "Airliner"),
-  (20, "Engine"),
-  (30, "Cheeseburger")
-]
-
-suppart = [
-  (1, 10), (1, 20), (2, 20), (3, 30)
-]
-
-print [
-  (sname, pname)
-    for (sno, sname) in suppliers
-      for (pno, pname) in parts
-        for (sp_sno, sp_pno) in suppart
-          if sno == sp_sno and pno == sp_pno
-]
-
-# generator expression tests
-g = ([x for x in range(10)] for x in range(1))
-verify(g.next() == [x for x in range(10)])
-try:
-    g.next()
-    raise TestFailed, 'should produce StopIteration exception'
-except StopIteration:
-    pass
-
-a = 1
-try:
-    g = (a for d in a)
-    g.next()
-    raise TestFailed, 'should produce TypeError'
-except TypeError:
-    pass
-
-verify(list((x, y) for x in 'abcd' for y in 'abcd') == [(x, y) for x in 'abcd' for y in 'abcd'])
-verify(list((x, y) for x in 'ab' for y in 'xy') == [(x, y) for x in 'ab' for y in 'xy'])
-
-a = [x for x in range(10)]
-b = (x for x in (y for y in a))
-verify(sum(b) == sum([x for x in range(10)]))
-
-verify(sum(x**2 for x in range(10)) == sum([x**2 for x in range(10)]))
-verify(sum(x*x for x in range(10) if x%2) == sum([x*x for x in range(10) if x%2]))
-verify(sum(x for x in (y for y in range(10))) == sum([x for x in range(10)]))
-verify(sum(x for x in (y for y in (z for z in range(10)))) == sum([x for x in range(10)]))
-verify(sum(x for x in [y for y in (z for z in range(10))]) == sum([x for x in range(10)]))
-verify(sum(x for x in (y for y in (z for z in range(10) if True)) if True) == sum([x for x in range(10)]))
-verify(sum(x for x in (y for y in (z for z in range(10) if True) if False) if True) == 0)
-check_syntax("foo(x for x in range(10), 100)")
-check_syntax("foo(100, x for x in range(10))")
-
-# test for outmost iterable precomputation
-x = 10; g = (i for i in range(x)); x = 5
-verify(len(list(g)) == 10)
-
-# This should hold, since we're only precomputing outmost iterable.
-x = 10; t = False; g = ((i,j) for i in range(x) if t for j in range(x))
-x = 5; t = True;
-verify([(i,j) for i in range(10) for j in range(5)] == list(g))
-
-# Grammar allows multiple adjacent 'if's in listcomps and genexps,
-# even though it's silly. Make sure it works (ifelse broke this.)
-verify([ x for x in range(10) if x % 2 if x % 3 ], [1, 5, 7])
-verify((x for x in range(10) if x % 2 if x % 3), [1, 5, 7])
-
-# Test ifelse expressions in various cases
-def _checkeval(msg, ret):
-    "helper to check that evaluation of expressions is done correctly"
-    print x
-    return ret
-
-verify([ x() for x in lambda: True, lambda: False if x() ] == [True])
-verify([ x() for x in (lambda: True, lambda: False) if x() ] == [True])
-verify([ x(False) for x in (lambda x: False if x else True, lambda x: True if x else False) if x(False) ] == [True])
-verify((5 if 1 else _checkeval("check 1", 0)) == 5)
-verify((_checkeval("check 2", 0) if 0 else 5) == 5)
-verify((5 and 6 if 0 else 1) == 1)
-verify(((5 and 6) if 0 else 1) == 1)
-verify((5 and (6 if 1 else 1)) == 6)
-verify((0 or _checkeval("check 3", 2) if 0 else 3) == 3)
-verify((1 or _checkeval("check 4", 2) if 1 else _checkeval("check 5", 3)) == 1)
-verify((0 or 5 if 1 else _checkeval("check 6", 3)) == 5)
-verify((not 5 if 1 else 1) == False)
-verify((not 5 if 0 else 1) == 1)
-verify((6 + 1 if 1 else 2) == 7)
-verify((6 - 1 if 1 else 2) == 5)
-verify((6 * 2 if 1 else 4) == 12)
-verify((6 / 2 if 1 else 3) == 3)
-verify((6 < 4 if 0 else 2) == 2)
+            assert 0, "msg"
+        except AssertionError, e:
+            self.assertEquals(e.args[0], "msg")
+        else:
+            if __debug__:
+                self.fail("AssertionError not raised by assert 0")
+
+    ### compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef
+    # Tested below
+
+    def testIf(self):
+        # 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
+        if 1: pass
+        if 1: pass
+        else: pass
+        if 0: pass
+        elif 0: pass
+        if 0: pass
+        elif 0: pass
+        elif 0: pass
+        elif 0: pass
+        else: pass
+
+    def testWhile(self):
+        # 'while' test ':' suite ['else' ':' suite]
+        while 0: pass
+        while 0: pass
+        else: pass
+
+    def testFor(self):
+        # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite]
+        for i in 1, 2, 3: pass
+        for i, j, k in (): pass
+        else: pass
+        class Squares:
+            def __init__(self, max):
+                self.max = max
+                self.sofar = []
+            def __len__(self): return len(self.sofar)
+            def __getitem__(self, i):
+                if not 0 <= i < self.max: raise IndexError
+                n = len(self.sofar)
+                while n <= i:
+                    self.sofar.append(n*n)
+                    n = n+1
+                return self.sofar[i]
+        n = 0
+        for x in Squares(10): n = n+x
+        if n != 285:
+            self.fail('for over growing sequence')
+
+        result = []
+        for x, in [(1,), (2,), (3,)]:
+            result.append(x)
+        self.assertEqual(result, [1, 2, 3])
+
+    def testTry(self):
+        ### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite]
+        ###         | 'try' ':' suite 'finally' ':' suite
+        ### except_clause: 'except' [expr [',' expr]]
+        try:
+            1/0
+        except ZeroDivisionError:
+            pass
+        else:
+            pass
+        try: 1/0
+        except EOFError: pass
+        except TypeError, msg: pass
+        except RuntimeError, msg: pass
+        except: pass
+        else: pass
+        try: 1/0
+        except (EOFError, TypeError, ZeroDivisionError): pass
+        try: 1/0
+        except (EOFError, TypeError, ZeroDivisionError), msg: pass
+        try: pass
+        finally: pass
+
+    def testSuite(self):
+        # simple_stmt | NEWLINE INDENT NEWLINE* (stmt NEWLINE*)+ DEDENT
+        if 1: pass
+        if 1:
+            pass
+        if 1:
+            #
+            #
+            #
+            pass
+            pass
+            #
+            pass
+            #
+
+    def testTest(self):
+        ### and_test ('or' and_test)*
+        ### and_test: not_test ('and' not_test)*
+        ### not_test: 'not' not_test | comparison
+        if not 1: pass
+        if 1 and 1: pass
+        if 1 or 1: pass
+        if not not not 1: pass
+        if not 1 and 1 and 1: pass
+        if 1 and 1 or 1 and 1 and 1 or not 1 and 1: pass
+
+    def testComparison(self):
+        ### comparison: expr (comp_op expr)*
+        ### comp_op: '<'|'>'|'=='|'>='|'<='|'!='|'in'|'not' 'in'|'is'|'is' 'not'
+        if 1: pass
+        x = (1 == 1)
+        if 1 == 1: pass
+        if 1 != 1: pass
+        if 1 < 1: pass
+        if 1 > 1: pass
+        if 1 <= 1: pass
+        if 1 >= 1: pass
+        if 1 is 1: pass
+        if 1 is not 1: pass
+        if 1 in (): pass
+        if 1 not in (): pass
+        if 1 < 1 > 1 == 1 >= 1 <= 1 != 1 in 1 not in 1 is 1 is not 1: pass
+
+    def testBinaryMaskOps(self):
+        x = 1 & 1
+        x = 1 ^ 1
+        x = 1 | 1
+
+    def testShiftOps(self):
+        x = 1 << 1
+        x = 1 >> 1
+        x = 1 << 1 >> 1
+
+    def testAdditiveOps(self):
+        x = 1
+        x = 1 + 1
+        x = 1 - 1 - 1
+        x = 1 - 1 + 1 - 1 + 1
+
+    def testMultiplicativeOps(self):
+        x = 1 * 1
+        x = 1 / 1
+        x = 1 % 1
+        x = 1 / 1 * 1 % 1
+
+    def testUnaryOps(self):
+        x = +1
+        x = -1
+        x = ~1
+        x = ~1 ^ 1 & 1 | 1 & 1 ^ -1
+        x = -1*1/1 + 1*1 - ---1*1
+
+    def testSelectors(self):
+        ### trailer: '(' [testlist] ')' | '[' subscript ']' | '.' NAME
+        ### subscript: expr | [expr] ':' [expr]
+
+        import sys, time
+        c = sys.path[0]
+        x = time.time()
+        x = sys.modules['time'].time()
+        a = '01234'
+        c = a[0]
+        c = a[-1]
+        s = a[0:5]
+        s = a[:5]
+        s = a[0:]
+        s = a[:]
+        s = a[-5:]
+        s = a[:-1]
+        s = a[-4:-3]
+        # A rough test of SF bug 1333982.  http://python.org/sf/1333982
+        # The testing here is fairly incomplete.
+        # Test cases should include: commas with 1 and 2 colons
+        d = {}
+        d[1] = 1
+        d[1,] = 2
+        d[1,2] = 3
+        d[1,2,3] = 4
+        L = list(d)
+        L.sort(key=lambda x: x if isinstance(x, tuple) else ())
+        self.assertEquals(str(L), '[1, (1,), (1, 2), (1, 2, 3)]')
+
+    def testAtoms(self):
+        ### atom: '(' [testlist] ')' | '[' [testlist] ']' | '{' [dictsetmaker] '}' | NAME | NUMBER | STRING
+        ### dictsetmaker: (test ':' test (',' test ':' test)* [',']) | (test (',' test)* [','])
+
+        x = (1)
+        x = (1 or 2 or 3)
+        x = (1 or 2 or 3, 2, 3)
+
+        x = []
+        x = [1]
+        x = [1 or 2 or 3]
+        x = [1 or 2 or 3, 2, 3]
+        x = []
+
+        x = {}
+        x = {'one': 1}
+        x = {'one': 1,}
+        x = {'one' or 'two': 1 or 2}
+        x = {'one': 1, 'two': 2}
+        x = {'one': 1, 'two': 2,}
+        x = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6}
+
+        x = {'one'}
+        x = {'one', 1,}
+        x = {'one', 'two', 'three'}
+        x = {2, 3, 4,}
+
+        x = x
+        x = 'x'
+        x = 123
+
+    ### exprlist: expr (',' expr)* [',']
+    ### testlist: test (',' test)* [',']
+    # These have been exercised enough above
+
+    def testClassdef(self):
+        # 'class' NAME ['(' [testlist] ')'] ':' suite
+        class B: pass
+        class B2(): pass
+        class C1(B): pass
+        class C2(B): pass
+        class D(C1, C2, B): pass
+        class C:
+            def meth1(self): pass
+            def meth2(self, arg): pass
+            def meth3(self, a1, a2): pass
+
+    def testListcomps(self):
+        # list comprehension tests
+        nums = [1, 2, 3, 4, 5]
+        strs = ["Apple", "Banana", "Coconut"]
+        spcs = ["  Apple", " Banana ", "Coco  nut  "]
+
+        self.assertEqual([s.strip() for s in spcs], ['Apple', 'Banana', 'Coco  nut'])
+        self.assertEqual([3 * x for x in nums], [3, 6, 9, 12, 15])
+        self.assertEqual([x for x in nums if x > 2], [3, 4, 5])
+        self.assertEqual([(i, s) for i in nums for s in strs],
+                         [(1, 'Apple'), (1, 'Banana'), (1, 'Coconut'),
+                          (2, 'Apple'), (2, 'Banana'), (2, 'Coconut'),
+                          (3, 'Apple'), (3, 'Banana'), (3, 'Coconut'),
+                          (4, 'Apple'), (4, 'Banana'), (4, 'Coconut'),
+                          (5, 'Apple'), (5, 'Banana'), (5, 'Coconut')])
+        self.assertEqual([(i, s) for i in nums for s in [f for f in strs if "n" in f]],
+                         [(1, 'Banana'), (1, 'Coconut'), (2, 'Banana'), (2, 'Coconut'),
+                          (3, 'Banana'), (3, 'Coconut'), (4, 'Banana'), (4, 'Coconut'),
+                          (5, 'Banana'), (5, 'Coconut')])
+        self.assertEqual([(lambda a:[a**i for i in range(a+1)])(j) for j in range(5)],
+                         [[1], [1, 1], [1, 2, 4], [1, 3, 9, 27], [1, 4, 16, 64, 256]])
+
+        def test_in_func(l):
+            return [0 < x < 3 for x in l if x > 2]
+
+        self.assertEqual(test_in_func(nums), [False, False, False])
+
+        def test_nested_front():
+            self.assertEqual([[y for y in [x, x + 1]] for x in [1,3,5]],
+                             [[1, 2], [3, 4], [5, 6]])
+
+        test_nested_front()
+
+        check_syntax_error(self, "[i, s for i in nums for s in strs]")
+        check_syntax_error(self, "[x if y]")
+
+        suppliers = [
+          (1, "Boeing"),
+          (2, "Ford"),
+          (3, "Macdonalds")
+        ]
+
+        parts = [
+          (10, "Airliner"),
+          (20, "Engine"),
+          (30, "Cheeseburger")
+        ]
+
+        suppart = [
+          (1, 10), (1, 20), (2, 20), (3, 30)
+        ]
+
+        x = [
+          (sname, pname)
+            for (sno, sname) in suppliers
+              for (pno, pname) in parts
+                for (sp_sno, sp_pno) in suppart
+                  if sno == sp_sno and pno == sp_pno
+        ]
+
+        self.assertEqual(x, [('Boeing', 'Airliner'), ('Boeing', 'Engine'), ('Ford', 'Engine'),
+                             ('Macdonalds', 'Cheeseburger')])
+
+    def testGenexps(self):
+        # generator expression tests
+        g = ([x for x in range(10)] for x in range(1))
+        self.assertEqual(g.next(), [x for x in range(10)])
+        try:
+            g.next()
+            self.fail('should produce StopIteration exception')
+        except StopIteration:
+            pass
+
+        a = 1
+        try:
+            g = (a for d in a)
+            g.next()
+            self.fail('should produce TypeError')
+        except TypeError:
+            pass
+
+        self.assertEqual(list((x, y) for x in 'abcd' for y in 'abcd'), [(x, y) for x in 'abcd' for y in 'abcd'])
+        self.assertEqual(list((x, y) for x in 'ab' for y in 'xy'), [(x, y) for x in 'ab' for y in 'xy'])
+
+        a = [x for x in range(10)]
+        b = (x for x in (y for y in a))
+        self.assertEqual(sum(b), sum([x for x in range(10)]))
+
+        self.assertEqual(sum(x**2 for x in range(10)), sum([x**2 for x in range(10)]))
+        self.assertEqual(sum(x*x for x in range(10) if x%2), sum([x*x for x in range(10) if x%2]))
+        self.assertEqual(sum(x for x in (y for y in range(10))), sum([x for x in range(10)]))
+        self.assertEqual(sum(x for x in (y for y in (z for z in range(10)))), sum([x for x in range(10)]))
+        self.assertEqual(sum(x for x in [y for y in (z for z in range(10))]), sum([x for x in range(10)]))
+        self.assertEqual(sum(x for x in (y for y in (z for z in range(10) if True)) if True), sum([x for x in range(10)]))
+        self.assertEqual(sum(x for x in (y for y in (z for z in range(10) if True) if False) if True), 0)
+        check_syntax_error(self, "foo(x for x in range(10), 100)")
+        check_syntax_error(self, "foo(100, x for x in range(10))")
+
+    def testComprehensionSpecials(self):
+        # test for outmost iterable precomputation
+        x = 10; g = (i for i in range(x)); x = 5
+        self.assertEqual(len(list(g)), 10)
+
+        # This should hold, since we're only precomputing outmost iterable.
+        x = 10; t = False; g = ((i,j) for i in range(x) if t for j in range(x))
+        x = 5; t = True;
+        self.assertEqual([(i,j) for i in range(10) for j in range(5)], list(g))
+
+        # Grammar allows multiple adjacent 'if's in listcomps and genexps,
+        # even though it's silly. Make sure it works (ifelse broke this.)
+        self.assertEqual([ x for x in range(10) if x % 2 if x % 3 ], [1, 5, 7])
+        self.assertEqual(list(x for x in range(10) if x % 2 if x % 3), [1, 5, 7])
+
+        # verify unpacking single element tuples in listcomp/genexp.
+        self.assertEqual([x for x, in [(4,), (5,), (6,)]], [4, 5, 6])
+        self.assertEqual(list(x for x, in [(7,), (8,), (9,)]), [7, 8, 9])
+
+    def testIfElseExpr(self):
+        # Test ifelse expressions in various cases
+        def _checkeval(msg, ret):
+            "helper to check that evaluation of expressions is done correctly"
+            print x
+            return ret
+
+        self.assertEqual([ x() for x in lambda: True, lambda: False if x() ], [True])
+        self.assertEqual([ x() for x in (lambda: True, lambda: False) if x() ], [True])
+        self.assertEqual([ x(False) for x in (lambda x: False if x else True, lambda x: True if x else False) if x(False) ], [True])
+        self.assertEqual((5 if 1 else _checkeval("check 1", 0)), 5)
+        self.assertEqual((_checkeval("check 2", 0) if 0 else 5), 5)
+        self.assertEqual((5 and 6 if 0 else 1), 1)
+        self.assertEqual(((5 and 6) if 0 else 1), 1)
+        self.assertEqual((5 and (6 if 1 else 1)), 6)
+        self.assertEqual((0 or _checkeval("check 3", 2) if 0 else 3), 3)
+        self.assertEqual((1 or _checkeval("check 4", 2) if 1 else _checkeval("check 5", 3)), 1)
+        self.assertEqual((0 or 5 if 1 else _checkeval("check 6", 3)), 5)
+        self.assertEqual((not 5 if 1 else 1), False)
+        self.assertEqual((not 5 if 0 else 1), 1)
+        self.assertEqual((6 + 1 if 1 else 2), 7)
+        self.assertEqual((6 - 1 if 1 else 2), 5)
+        self.assertEqual((6 * 2 if 1 else 4), 12)
+        self.assertEqual((6 / 2 if 1 else 3), 3)
+        self.assertEqual((6 < 4 if 0 else 2), 2)
+
+
+def test_main():
+    run_unittest(TokenTests, GrammarTests)
+
+if __name__ == '__main__':
+    test_main()
index 0f8e03e0a45cb3b49391b3fa6c78108b3467ff74..9989a92b70ac7dd82118e551c0afd4409fa81d66 100644 (file)
@@ -128,6 +128,17 @@ class TestGzip(unittest.TestCase):
             f.seek(newpos)  # positive seek
         f.close()
 
+    def test_seek_whence(self):
+        self.test_write()
+        # Try seek(whence=1), read test
+
+        f = gzip.GzipFile(self.filename)
+        f.read(10)
+        f.seek(10, whence=1)
+        y = f.read(10)
+        f.close()
+        self.assertEquals(y, data1[20:30])
+        
     def test_seek_write(self):
         # Try seek, write test
         f = gzip.GzipFile(self.filename, 'w')
index 90bae887c3155397bde25055f41a11d32309d661..90a4e550093c138a7e9c3900b2d93d3b34307320 100644 (file)
@@ -10,9 +10,10 @@ class FakeSocket:
     def __init__(self, text, fileclass=StringIO.StringIO):
         self.text = text
         self.fileclass = fileclass
+        self.data = ''
 
     def sendall(self, data):
-        self.data = data
+        self.data += data
 
     def makefile(self, mode, bufsize=None):
         if mode != 'r' and mode != 'rb':
@@ -70,103 +71,86 @@ class HeaderTests(TestCase):
                 conn.request('POST', '/', body, headers)
                 self.assertEqual(conn._buffer.count[header.lower()], 1)
 
-# Collect output to a buffer so that we don't have to cope with line-ending
-# issues across platforms.  Specifically, the headers will have \r\n pairs
-# and some platforms will strip them from the output file.
-
-def test():
-    buf = StringIO.StringIO()
-    _stdout = sys.stdout
-    try:
-        sys.stdout = buf
-        _test()
-    finally:
-        sys.stdout = _stdout
-
-    # print individual lines with endings stripped
-    s = buf.getvalue()
-    for line in s.split("\n"):
-        print line.strip()
-
-def _test():
-    # Test HTTP status lines
-
-    body = "HTTP/1.1 200 Ok\r\n\r\nText"
-    sock = FakeSocket(body)
-    resp = httplib.HTTPResponse(sock, 1)
-    resp.begin()
-    print resp.read()
-    resp.close()
-
-    body = "HTTP/1.1 400.100 Not Ok\r\n\r\nText"
-    sock = FakeSocket(body)
-    resp = httplib.HTTPResponse(sock, 1)
-    try:
+class BasicTest(TestCase):
+    def test_status_lines(self):
+        # Test HTTP status lines
+
+        body = "HTTP/1.1 200 Ok\r\n\r\nText"
+        sock = FakeSocket(body)
+        resp = httplib.HTTPResponse(sock)
         resp.begin()
-    except httplib.BadStatusLine:
-        print "BadStatusLine raised as expected"
-    else:
-        print "Expect BadStatusLine"
-
-    # Check invalid host_port
-
-    for hp in ("www.python.org:abc", "www.python.org:"):
-        try:
-            h = httplib.HTTP(hp)
-        except httplib.InvalidURL:
-            print "InvalidURL raised as expected"
-        else:
-            print "Expect InvalidURL"
-
-    for hp,h,p in (("[fe80::207:e9ff:fe9b]:8000", "fe80::207:e9ff:fe9b", 8000),
-                   ("www.python.org:80", "www.python.org", 80),
-                   ("www.python.org", "www.python.org", 80),
-                   ("[fe80::207:e9ff:fe9b]", "fe80::207:e9ff:fe9b", 80)):
-        try:
+        self.assertEqual(resp.read(), 'Text')
+        resp.close()
+
+        body = "HTTP/1.1 400.100 Not Ok\r\n\r\nText"
+        sock = FakeSocket(body)
+        resp = httplib.HTTPResponse(sock)
+        self.assertRaises(httplib.BadStatusLine, resp.begin)
+
+    def test_host_port(self):
+        # Check invalid host_port
+
+        for hp in ("www.python.org:abc", "www.python.org:"):
+            self.assertRaises(httplib.InvalidURL, httplib.HTTP, hp)
+
+        for hp, h, p in (("[fe80::207:e9ff:fe9b]:8000", "fe80::207:e9ff:fe9b", 8000),
+                         ("www.python.org:80", "www.python.org", 80),
+                         ("www.python.org", "www.python.org", 80),
+                         ("[fe80::207:e9ff:fe9b]", "fe80::207:e9ff:fe9b", 80)):
             http = httplib.HTTP(hp)
-        except httplib.InvalidURL:
-            print "InvalidURL raised erroneously"
-        c = http._conn
-        if h != c.host: raise AssertionError, ("Host incorrectly parsed", h, c.host)
-        if p != c.port: raise AssertionError, ("Port incorrectly parsed", p, c.host)
-
-    # test response with multiple message headers with the same field name.
-    text = ('HTTP/1.1 200 OK\r\n'
-            'Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"\r\n'
-            'Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1";'
-            ' Path="/acme"\r\n'
-            '\r\n'
-            'No body\r\n')
-    hdr = ('Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"'
-           ', '
-           'Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"')
-    s = FakeSocket(text)
-    r = httplib.HTTPResponse(s, 1)
-    r.begin()
-    cookies = r.getheader("Set-Cookie")
-    if cookies != hdr:
-        raise AssertionError, "multiple headers not combined properly"
-
-    # Test that the library doesn't attempt to read any data
-    # from a HEAD request.  (Tickles SF bug #622042.)
-    sock = FakeSocket(
-        'HTTP/1.1 200 OK\r\n'
-        'Content-Length: 14432\r\n'
-        '\r\n',
-        NoEOFStringIO)
-    resp = httplib.HTTPResponse(sock, 1, method="HEAD")
-    resp.begin()
-    if resp.read() != "":
-        raise AssertionError, "Did not expect response from HEAD request"
-    resp.close()
+            c = http._conn
+            if h != c.host: self.fail("Host incorrectly parsed: %s != %s" % (h, c.host))
+            if p != c.port: self.fail("Port incorrectly parsed: %s != %s" % (p, c.host))
+
+    def test_response_headers(self):
+        # test response with multiple message headers with the same field name.
+        text = ('HTTP/1.1 200 OK\r\n'
+                'Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"\r\n'
+                'Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1";'
+                ' Path="/acme"\r\n'
+                '\r\n'
+                'No body\r\n')
+        hdr = ('Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"'
+               ', '
+               'Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"')
+        s = FakeSocket(text)
+        r = httplib.HTTPResponse(s)
+        r.begin()
+        cookies = r.getheader("Set-Cookie")
+        if cookies != hdr:
+            self.fail("multiple headers not combined properly")
+
+    def test_read_head(self):
+        # Test that the library doesn't attempt to read any data
+        # from a HEAD request.  (Tickles SF bug #622042.)
+        sock = FakeSocket(
+            'HTTP/1.1 200 OK\r\n'
+            'Content-Length: 14432\r\n'
+            '\r\n',
+            NoEOFStringIO)
+        resp = httplib.HTTPResponse(sock, method="HEAD")
+        resp.begin()
+        if resp.read() != "":
+            self.fail("Did not expect response from HEAD request")
+        resp.close()
+
+    def test_send_file(self):
+        expected = 'GET /foo HTTP/1.1\r\nHost: example.com\r\n' \
+                   'Accept-Encoding: identity\r\nContent-Length:'
 
+        body = open(__file__, 'rb')
+        conn = httplib.HTTPConnection('example.com')
+        sock = FakeSocket(body)
+        conn.sock = sock
+        conn.request('GET', '/foo', body)
+        self.assertTrue(sock.data.startswith(expected))
 
 class OfflineTest(TestCase):
     def test_responses(self):
         self.assertEquals(httplib.responses[httplib.NOT_FOUND], "Not Found")
 
 def test_main(verbose=None):
-    tests = [HeaderTests,OfflineTest]
-    test_support.run_unittest(*tests)
+    test_support.run_unittest(HeaderTests, OfflineTest, BasicTest)
 
-test()
+if __name__ == '__main__':
+    test_main()
index 893ba24617119f313df78e8299cb41f45ba12297..62b14e071bd0da41585376c2293c66f92e3792c1 100644 (file)
@@ -1,43 +1,47 @@
 import imp
-from test.test_support import TestFailed, TestSkipped
-try:
-    import thread
-except ImportError:
-    raise TestSkipped("test only valid when thread support is available")
+import thread
+import unittest
+from test import test_support
 
-def verify_lock_state(expected):
-    if imp.lock_held() != expected:
-        raise TestFailed("expected imp.lock_held() to be %r" % expected)
 
-def testLock():
-    LOOPS = 50
+class LockTests(unittest.TestCase):
 
-    # The import lock may already be held, e.g. if the test suite is run
-    # via "import test.autotest".
-    lock_held_at_start = imp.lock_held()
-    verify_lock_state(lock_held_at_start)
+    """Very basic test of import lock functions."""
 
-    for i in range(LOOPS):
-        imp.acquire_lock()
-        verify_lock_state(True)
+    def verify_lock_state(self, expected):
+        self.failUnlessEqual(imp.lock_held(), expected,
+                             "expected imp.lock_held() to be %r" % expected)
+    def testLock(self):
+        LOOPS = 50
 
-    for i in range(LOOPS):
-        imp.release_lock()
+        # The import lock may already be held, e.g. if the test suite is run
+        # via "import test.autotest".
+        lock_held_at_start = imp.lock_held()
+        self.verify_lock_state(lock_held_at_start)
 
-    # The original state should be restored now.
-    verify_lock_state(lock_held_at_start)
+        for i in range(LOOPS):
+            imp.acquire_lock()
+            self.verify_lock_state(True)
 
-    if not lock_held_at_start:
-        try:
+        for i in range(LOOPS):
             imp.release_lock()
-        except RuntimeError:
-            pass
-        else:
-            raise TestFailed("release_lock() without lock should raise "
-                             "RuntimeError")
+
+        # The original state should be restored now.
+        self.verify_lock_state(lock_held_at_start)
+
+        if not lock_held_at_start:
+            try:
+                imp.release_lock()
+            except RuntimeError:
+                pass
+            else:
+                self.fail("release_lock() without lock should raise "
+                            "RuntimeError")
 
 def test_main():
-    testLock()
+    test_support.run_unittest(
+                LockTests,
+            )
 
 if __name__ == "__main__":
     test_main()
index b64c23bcaa8c424b22d0eb337100fbb314b26861..e37378f06cb83cfa1bde3259fa558deb4214c209 100644 (file)
@@ -1,21 +1,11 @@
-from test.test_support import TESTFN, TestFailed
+from test.test_support import TESTFN, run_unittest
 
+import unittest
 import os
 import random
 import sys
 import py_compile
 
-# Brief digression to test that import is case-sensitive:  if we got this
-# far, we know for sure that "random" exists.
-try:
-    import RAnDoM
-except ImportError:
-    pass
-else:
-    raise TestFailed("import of RAnDoM should have failed (case mismatch)")
-
-# Another brief digression to test the accuracy of manifest float constants.
-from test import double_const  # don't blink -- that *was* the test
 
 def remove_files(name):
     for f in (name + os.extsep + "py",
@@ -26,199 +16,206 @@ def remove_files(name):
         if os.path.exists(f):
             os.remove(f)
 
-def test_with_extension(ext): # ext normally ".py"; perhaps ".pyw"
-    source = TESTFN + ext
-    pyo = TESTFN + os.extsep + "pyo"
-    if sys.platform.startswith('java'):
-        pyc = TESTFN + "$py.class"
-    else:
-        pyc = TESTFN + os.extsep + "pyc"
-
-    f = open(source, "w")
-    print >> f, "# This tests Python's ability to import a", ext, "file."
-    a = random.randrange(1000)
-    b = random.randrange(1000)
-    print >> f, "a =", a
-    print >> f, "b =", b
-    f.close()
-
-    try:
-        try:
-            mod = __import__(TESTFN)
-        except ImportError, err:
-            raise ValueError("import from %s failed: %s" % (ext, err))
 
-        if mod.a != a or mod.b != b:
-            print a, "!=", mod.a
-            print b, "!=", mod.b
-            raise ValueError("module loaded (%s) but contents invalid" % mod)
-    finally:
-        os.unlink(source)
+class ImportTest(unittest.TestCase):
 
-    try:
-        try:
-            reload(mod)
-        except ImportError, err:
-            raise ValueError("import from .pyc/.pyo failed: %s" % err)
-    finally:
+    def testCaseSensitivity(self):
+        # Brief digression to test that import is case-sensitive:  if we got this
+        # far, we know for sure that "random" exists.
         try:
-            os.unlink(pyc)
-        except os.error:
+            import RAnDoM
+        except ImportError:
             pass
-        try:
-            os.unlink(pyo)
-        except os.error:
-            pass
-        del sys.modules[TESTFN]
-
-sys.path.insert(0, os.curdir)
-try:
-    test_with_extension(os.extsep + "py")
-    if sys.platform.startswith("win"):
-        for ext in ".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw":
-            test_with_extension(ext)
-finally:
-    del sys.path[0]
-
-# Verify that the imp module can correctly load and find .py files
-import imp
-x = imp.find_module("os")
-os = imp.load_module("os", *x)
-
-def test_module_with_large_stack(module):
-    # create module w/list of 65000 elements to test bug #561858
-    filename = module + os.extsep + 'py'
-
-    # create a file with a list of 65000 elements
-    f = open(filename, 'w+')
-    f.write('d = [\n')
-    for i in range(65000):
-        f.write('"",\n')
-    f.write(']')
-    f.close()
-
-    # compile & remove .py file, we only need .pyc (or .pyo)
-    f = open(filename, 'r')
-    py_compile.compile(filename)
-    f.close()
-    os.unlink(filename)
-
-    # need to be able to load from current dir
-    sys.path.append('')
-
-    # this used to crash
-    exec('import ' + module)
-
-    # cleanup
-    del sys.path[-1]
-    for ext in 'pyc', 'pyo':
-        fname = module + os.extsep + ext
-        if os.path.exists(fname):
-            os.unlink(fname)
-
-test_module_with_large_stack('longlist')
-
-def test_failing_import_sticks():
-    source = TESTFN + os.extsep + "py"
-    f = open(source, "w")
-    print >> f, "a = 1/0"
-    f.close()
-
-    # New in 2.4, we shouldn't be able to import that no matter how often
-    # we try.
-    sys.path.insert(0, os.curdir)
-    try:
-        for i in 1, 2, 3:
-            try:
-                mod = __import__(TESTFN)
-            except ZeroDivisionError:
-                if TESTFN in sys.modules:
-                    raise TestFailed("damaged module in sys.modules", i)
+        else:
+            self.fail("import of RAnDoM should have failed (case mismatch)")
+
+    def testDoubleConst(self):
+        # Another brief digression to test the accuracy of manifest float constants.
+        from test import double_const  # don't blink -- that *was* the test
+
+    def testImport(self):
+        def test_with_extension(ext):
+            # ext normally ".py"; perhaps ".pyw"
+            source = TESTFN + ext
+            pyo = TESTFN + os.extsep + "pyo"
+            if sys.platform.startswith('java'):
+                pyc = TESTFN + "$py.class"
             else:
-                raise TestFailed("was able to import a damaged module", i)
-    finally:
-        sys.path.pop(0)
-        remove_files(TESTFN)
-
-test_failing_import_sticks()
-
-def test_failing_reload():
-    # A failing reload should leave the module object in sys.modules.
-    source = TESTFN + os.extsep + "py"
-    f = open(source, "w")
-    print >> f, "a = 1"
-    print >> f, "b = 2"
-    f.close()
-
-    sys.path.insert(0, os.curdir)
-    try:
-        mod = __import__(TESTFN)
-        if TESTFN not in sys.modules:
-            raise TestFailed("expected module in sys.modules")
-        if mod.a != 1 or mod.b != 2:
-            raise TestFailed("module has wrong attribute values")
-
-        # On WinXP, just replacing the .py file wasn't enough to
-        # convince reload() to reparse it.  Maybe the timestamp didn't
-        # move enough.  We force it to get reparsed by removing the
-        # compiled file too.
-        remove_files(TESTFN)
-
-        # Now damage the module.
+                pyc = TESTFN + os.extsep + "pyc"
+
+            f = open(source, "w")
+            print >> f, "# This tests Python's ability to import a", ext, "file."
+            a = random.randrange(1000)
+            b = random.randrange(1000)
+            print >> f, "a =", a
+            print >> f, "b =", b
+            f.close()
+
+            try:
+                try:
+                    mod = __import__(TESTFN)
+                except ImportError, err:
+                    self.fail("import from %s failed: %s" % (ext, err))
+
+                self.assertEquals(mod.a, a,
+                    "module loaded (%s) but contents invalid" % mod)
+                self.assertEquals(mod.b, b,
+                    "module loaded (%s) but contents invalid" % mod)
+            finally:
+                os.unlink(source)
+
+            try:
+                try:
+                    reload(mod)
+                except ImportError, err:
+                    self.fail("import from .pyc/.pyo failed: %s" % err)
+            finally:
+                try:
+                    os.unlink(pyc)
+                except OSError:
+                    pass
+                try:
+                    os.unlink(pyo)
+                except OSError:
+                    pass
+                del sys.modules[TESTFN]
+
+        sys.path.insert(0, os.curdir)
+        try:
+            test_with_extension(os.extsep + "py")
+            if sys.platform.startswith("win"):
+                for ext in ".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw":
+                    test_with_extension(ext)
+        finally:
+            del sys.path[0]
+
+    def testImpModule(self):
+        # Verify that the imp module can correctly load and find .py files
+        import imp
+        x = imp.find_module("os")
+        os = imp.load_module("os", *x)
+
+    def test_module_with_large_stack(self, module='longlist'):
+        # create module w/list of 65000 elements to test bug #561858
+        filename = module + os.extsep + 'py'
+
+        # create a file with a list of 65000 elements
+        f = open(filename, 'w+')
+        f.write('d = [\n')
+        for i in range(65000):
+            f.write('"",\n')
+        f.write(']')
+        f.close()
+
+        # compile & remove .py file, we only need .pyc (or .pyo)
+        f = open(filename, 'r')
+        py_compile.compile(filename)
+        f.close()
+        os.unlink(filename)
+
+        # need to be able to load from current dir
+        sys.path.append('')
+
+        # this used to crash
+        exec('import ' + module)
+
+        # cleanup
+        del sys.path[-1]
+        for ext in 'pyc', 'pyo':
+            fname = module + os.extsep + ext
+            if os.path.exists(fname):
+                os.unlink(fname)
+
+    def test_failing_import_sticks(self):
+        source = TESTFN + os.extsep + "py"
         f = open(source, "w")
-        print >> f, "a = 10"
-        print >> f, "b = 20//0"
+        print >> f, "a = 1/0"
         f.close()
+
+        # New in 2.4, we shouldn't be able to import that no matter how often
+        # we try.
+        sys.path.insert(0, os.curdir)
         try:
-            reload(mod)
-        except ZeroDivisionError:
-            pass
-        else:
-            raise TestFailed("was able to reload a damaged module")
-
-        # But we still expect the module to be in sys.modules.
-        mod = sys.modules.get(TESTFN)
-        if mod is None:
-            raise TestFailed("expected module to still be in sys.modules")
-        # We should have replaced a w/ 10, but the old b value should
-        # stick.
-        if mod.a != 10 or mod.b != 2:
-            raise TestFailed("module has wrong attribute values")
-
-    finally:
-        sys.path.pop(0)
-        remove_files(TESTFN)
-        if TESTFN in sys.modules:
-            del sys.modules[TESTFN]
-
-test_failing_reload()
-
-def test_import_name_binding():
-    # import x.y.z binds x in the current namespace
-    import test as x
-    import test.test_support
-    assert x is test, x.__name__
-    assert hasattr(test.test_support, "__file__")
-
-    # import x.y.z as w binds z as w
-    import test.test_support as y
-    assert y is test.test_support, y.__name__
-
-test_import_name_binding()
-
-def test_import_initless_directory_warning():
-    import warnings
-    oldfilters = warnings.filters[:]
-    warnings.simplefilter('error', ImportWarning);
-    try:
-        # Just a random non-package directory we always expect to be
-        # somewhere in sys.path...
-        __import__("site-packages")
-    except ImportWarning:
-        pass
-    else:
-        raise AssertionError
-    finally:
-        warnings.filters = oldfilters
-
-test_import_initless_directory_warning()
+            for i in 1, 2, 3:
+                try:
+                    mod = __import__(TESTFN)
+                except ZeroDivisionError:
+                    if TESTFN in sys.modules:
+                        self.fail("damaged module in sys.modules on %i. try" % i)
+                else:
+                    self.fail("was able to import a damaged module on %i. try" % i)
+        finally:
+            sys.path.pop(0)
+            remove_files(TESTFN)
+
+    def test_failing_reload(self):
+        # A failing reload should leave the module object in sys.modules.
+        source = TESTFN + os.extsep + "py"
+        f = open(source, "w")
+        print >> f, "a = 1"
+        print >> f, "b = 2"
+        f.close()
+
+        sys.path.insert(0, os.curdir)
+        try:
+            mod = __import__(TESTFN)
+            self.assert_(TESTFN in sys.modules, "expected module in sys.modules")
+            self.assertEquals(mod.a, 1, "module has wrong attribute values")
+            self.assertEquals(mod.b, 2, "module has wrong attribute values")
+
+            # On WinXP, just replacing the .py file wasn't enough to
+            # convince reload() to reparse it.  Maybe the timestamp didn't
+            # move enough.  We force it to get reparsed by removing the
+            # compiled file too.
+            remove_files(TESTFN)
+
+            # Now damage the module.
+            f = open(source, "w")
+            print >> f, "a = 10"
+            print >> f, "b = 20//0"
+            f.close()
+
+            self.assertRaises(ZeroDivisionError, reload, mod)
+
+            # But we still expect the module to be in sys.modules.
+            mod = sys.modules.get(TESTFN)
+            self.failIf(mod is None, "expected module to still be in sys.modules")
+
+            # We should have replaced a w/ 10, but the old b value should
+            # stick.
+            self.assertEquals(mod.a, 10, "module has wrong attribute values")
+            self.assertEquals(mod.b, 2, "module has wrong attribute values")
+
+        finally:
+            sys.path.pop(0)
+            remove_files(TESTFN)
+            if TESTFN in sys.modules:
+                del sys.modules[TESTFN]
+
+    def test_import_name_binding(self):
+        # import x.y.z binds x in the current namespace
+        import test as x
+        import test.test_support
+        self.assert_(x is test, x.__name__)
+        self.assert_(hasattr(test.test_support, "__file__"))
+
+        # import x.y.z as w binds z as w
+        import test.test_support as y
+        self.assert_(y is test.test_support, y.__name__)
+
+    def test_import_initless_directory_warning(self):
+        import warnings
+        oldfilters = warnings.filters[:]
+        warnings.simplefilter('error', ImportWarning);
+        try:
+            # Just a random non-package directory we always expect to be
+            # somewhere in sys.path...
+            self.assertRaises(ImportWarning, __import__, "site-packages")
+        finally:
+            warnings.filters = oldfilters
+
+def test_main(verbose=None):
+    run_unittest(ImportTest)
+
+if __name__ == '__main__':
+    test_main()
index e5946e91a0595d5cbdc646c3a88a494b3fc2ed54..071e52196afd420dd54ae198cba50fc3312e466a 100644 (file)
@@ -180,7 +180,18 @@ class TestRetrievingSourceCode(GetSourceBase):
         self.assertEqual(inspect.getcomments(mod.StupidGit), '# line 20\n')
 
     def test_getmodule(self):
+        # Check actual module
+        self.assertEqual(inspect.getmodule(mod), mod)
+        # Check class (uses __module__ attribute)
         self.assertEqual(inspect.getmodule(mod.StupidGit), mod)
+        # Check a method (no __module__ attribute, falls back to filename)
+        self.assertEqual(inspect.getmodule(mod.StupidGit.abuse), mod)
+        # Do it again (check the caching isn't broken)
+        self.assertEqual(inspect.getmodule(mod.StupidGit.abuse), mod)
+        # Check a builtin
+        self.assertEqual(inspect.getmodule(str), sys.modules["__builtin__"])
+        # Check filename override
+        self.assertEqual(inspect.getmodule(None, modfile), mod)
 
     def test_getsource(self):
         self.assertSourceEqual(git.abuse, 29, 39)
index 8f8fc73d93abf272d3c7ef70a7e89bbec86c46e0..8e1118a5e8c05143f316ca00bb97d53dbe832e2f 100644 (file)
@@ -61,6 +61,10 @@ class TestBasicOps(unittest.TestCase):
         self.assertEqual(repr(c), 'count(3)')
         c.next()
         self.assertEqual(repr(c), 'count(4)')
+        c = count(-9)
+        self.assertEqual(repr(c), 'count(-9)')
+        c.next()
+        self.assertEqual(c.next(), -8)
 
     def test_cycle(self):
         self.assertEqual(take(10, cycle('abc')), list('abcabcabca'))
@@ -375,6 +379,7 @@ class TestBasicOps(unittest.TestCase):
 
         # test values of n
         self.assertRaises(TypeError, tee, 'abc', 'invalid')
+        self.assertRaises(ValueError, tee, [], -1)
         for n in xrange(5):
             result = tee('abc', n)
             self.assertEqual(type(result), tuple)
index 92fe7a1b726449ccbf0dbab1d6ab2afabda410ff..e0c781f0f2de7301a7f28a4d3373875173f829b3 100644 (file)
@@ -247,17 +247,23 @@ class LongTest(unittest.TestCase):
             "long(-sys.maxint-1) != -sys.maxint-1")
 
         # long -> int should not fail for hugepos_aslong or hugeneg_aslong
+        x = int(hugepos_aslong)
         try:
-            self.assertEqual(int(hugepos_aslong), hugepos,
+            self.assertEqual(x, hugepos,
                   "converting sys.maxint to long and back to int fails")
         except OverflowError:
             self.fail("int(long(sys.maxint)) overflowed!")
+        if not isinstance(x, int):
+            raise TestFailed("int(long(sys.maxint)) should have returned int")
+        x = int(hugeneg_aslong)
         try:
-            self.assertEqual(int(hugeneg_aslong), hugeneg,
+            self.assertEqual(x, hugeneg,
                   "converting -sys.maxint-1 to long and back to int fails")
         except OverflowError:
             self.fail("int(long(-sys.maxint-1)) overflowed!")
-
+        if not isinstance(x, int):
+            raise TestFailed("int(long(-sys.maxint-1)) should have "
+                             "returned int")
         # but long -> int should overflow for hugepos+1 and hugeneg-1
         x = hugepos_aslong + 1
         try:
@@ -282,6 +288,17 @@ class LongTest(unittest.TestCase):
         self.assert_(type(y) is long,
             "overflowing int conversion must return long not long subtype")
 
+        # long -> Py_ssize_t conversion
+        class X(object):
+            def __getslice__(self, i, j):
+                return i, j
+
+        self.assertEqual(X()[-5L:7L], (-5, 7))
+        # use the clamping effect to test the smallest and largest longs
+        # that fit a Py_ssize_t
+        slicemin, slicemax = X()[-2L**100:2L**100]
+        self.assertEqual(X()[slicemin:slicemax], (slicemin, slicemax))
+
 # ----------------------------------- tests of auto int->long conversion
 
     def test_auto_overflow(self):
index 18373066628b582eebfd419956545abfa40353b5..def58cc2d1f02f342a542bb7ce380dbb33756137 100644 (file)
@@ -666,6 +666,19 @@ class TestMaildir(TestMailbox):
         self._box.lock()
         self._box.unlock()
 
+    def test_folder (self):
+        # Test for bug #1569790: verify that folders returned by .get_folder()
+        # use the same factory function.
+        def dummy_factory (s):
+            return None
+        box = self._factory(self._path, factory=dummy_factory)
+        folder = box.add_folder('folder1')
+        self.assert_(folder._factory is dummy_factory)
+        
+        folder1_alias = box.get_folder('folder1')
+        self.assert_(folder1_alias._factory is dummy_factory)
+
+        
 
 class _TestMboxMMDF(TestMailbox):
 
@@ -740,6 +753,22 @@ class _TestMboxMMDF(TestMailbox):
         self._box.lock()
         self._box.unlock()
 
+    def test_relock(self):
+        # Test case for bug #1575506: the mailbox class was locking the
+        # wrong file object in its flush() method.
+        msg = "Subject: sub\n\nbody\n"
+        key1 = self._box.add(msg)
+        self._box.flush()
+        self._box.close()
+
+        self._box = self._factory(self._path)
+        self._box.lock()
+        key2 = self._box.add(msg)
+        self._box.flush()
+        self.assert_(self._box._locked)
+        self._box.close()
+
+
 
 class TestMbox(_TestMboxMMDF):
 
@@ -766,7 +795,11 @@ class TestMH(TestMailbox):
 
     def test_get_folder(self):
         # Open folders
-        self._box.add_folder('foo.bar')
+        def dummy_factory (s):
+            return None
+        self._box = self._factory(self._path, dummy_factory)
+        
+        new_folder = self._box.add_folder('foo.bar')
         folder0 = self._box.get_folder('foo.bar')
         folder0.add(self._template % 'bar')
         self.assert_(os.path.isdir(os.path.join(self._path, 'foo.bar')))
@@ -774,6 +807,11 @@ class TestMH(TestMailbox):
         self.assert_(folder1.get_string(folder1.keys()[0]) == \
                      self._template % 'bar')
 
+        # Test for bug #1569790: verify that folders returned by .get_folder()
+        # use the same factory function.
+        self.assert_(new_folder._factory is self._box._factory)
+        self.assert_(folder0._factory is self._box._factory)
+
     def test_add_and_remove_folders(self):
         # Delete folders
         self._box.add_folder('one')
@@ -842,6 +880,21 @@ class TestMH(TestMailbox):
         self.assert_(self._box.get_sequences() ==
                      {'foo':[1, 2, 3], 'unseen':[1], 'bar':[3], 'replied':[3]})
 
+        # Test case for packing while holding the mailbox locked.
+        key0 = self._box.add(msg1)
+        key1 = self._box.add(msg1)
+        key2 = self._box.add(msg1)
+        key3 = self._box.add(msg1)
+
+        self._box.remove(key0)
+        self._box.remove(key2)
+        self._box.lock()
+        self._box.pack()
+        self._box.unlock()
+        self.assert_(self._box.get_sequences() ==
+                     {'foo':[1, 2, 3, 4, 5],
+                      'unseen':[1], 'bar':[3], 'replied':[3]})
+        
     def _get_lock_path(self):
         return os.path.join(self._path, '.mh_sequences.lock')
 
index a092265b7f0941c9bfbc632eec288d909ed8fd1b..a45fc3429a6df63d3fc6a25b005cd493361b1aa7 100644 (file)
 # Python test set -- math module
 # XXXX Should not do tests around zero only
 
-from test.test_support import TestFailed, verbose
+from test.test_support import run_unittest, verbose
+import unittest
+import math
 
 seps='1e-05'
 eps = eval(seps)
-print 'math module, testing with eps', seps
-import math
 
-def testit(name, value, expected):
-    if abs(value-expected) > eps:
-        raise TestFailed, '%s returned %f, expected %f'%\
-              (name, value, expected)
-
-print 'constants'
-testit('pi', math.pi, 3.1415926)
-testit('e', math.e, 2.7182818)
-
-print 'acos'
-testit('acos(-1)', math.acos(-1), math.pi)
-testit('acos(0)', math.acos(0), math.pi/2)
-testit('acos(1)', math.acos(1), 0)
-
-print 'asin'
-testit('asin(-1)', math.asin(-1), -math.pi/2)
-testit('asin(0)', math.asin(0), 0)
-testit('asin(1)', math.asin(1), math.pi/2)
-
-print 'atan'
-testit('atan(-1)', math.atan(-1), -math.pi/4)
-testit('atan(0)', math.atan(0), 0)
-testit('atan(1)', math.atan(1), math.pi/4)
-
-print 'atan2'
-testit('atan2(-1, 0)', math.atan2(-1, 0), -math.pi/2)
-testit('atan2(-1, 1)', math.atan2(-1, 1), -math.pi/4)
-testit('atan2(0, 1)', math.atan2(0, 1), 0)
-testit('atan2(1, 1)', math.atan2(1, 1), math.pi/4)
-testit('atan2(1, 0)', math.atan2(1, 0), math.pi/2)
-
-print 'ceil'
-testit('ceil(0.5)', math.ceil(0.5), 1)
-testit('ceil(1.0)', math.ceil(1.0), 1)
-testit('ceil(1.5)', math.ceil(1.5), 2)
-testit('ceil(-0.5)', math.ceil(-0.5), 0)
-testit('ceil(-1.0)', math.ceil(-1.0), -1)
-testit('ceil(-1.5)', math.ceil(-1.5), -1)
-
-print 'cos'
-testit('cos(-pi/2)', math.cos(-math.pi/2), 0)
-testit('cos(0)', math.cos(0), 1)
-testit('cos(pi/2)', math.cos(math.pi/2), 0)
-testit('cos(pi)', math.cos(math.pi), -1)
-
-print 'cosh'
-testit('cosh(0)', math.cosh(0), 1)
-testit('cosh(2)-2*cosh(1)**2', math.cosh(2)-2*math.cosh(1)**2, -1) # Thanks to Lambert
-
-print 'degrees'
-testit('degrees(pi)', math.degrees(math.pi), 180.0)
-testit('degrees(pi/2)', math.degrees(math.pi/2), 90.0)
-testit('degrees(-pi/4)', math.degrees(-math.pi/4), -45.0)
-
-print 'exp'
-testit('exp(-1)', math.exp(-1), 1/math.e)
-testit('exp(0)', math.exp(0), 1)
-testit('exp(1)', math.exp(1), math.e)
-
-print 'fabs'
-testit('fabs(-1)', math.fabs(-1), 1)
-testit('fabs(0)', math.fabs(0), 0)
-testit('fabs(1)', math.fabs(1), 1)
-
-print 'floor'
-testit('floor(0.5)', math.floor(0.5), 0)
-testit('floor(1.0)', math.floor(1.0), 1)
-testit('floor(1.5)', math.floor(1.5), 1)
-testit('floor(-0.5)', math.floor(-0.5), -1)
-testit('floor(-1.0)', math.floor(-1.0), -1)
-testit('floor(-1.5)', math.floor(-1.5), -2)
-
-print 'fmod'
-testit('fmod(10,1)', math.fmod(10,1), 0)
-testit('fmod(10,0.5)', math.fmod(10,0.5), 0)
-testit('fmod(10,1.5)', math.fmod(10,1.5), 1)
-testit('fmod(-10,1)', math.fmod(-10,1), 0)
-testit('fmod(-10,0.5)', math.fmod(-10,0.5), 0)
-testit('fmod(-10,1.5)', math.fmod(-10,1.5), -1)
-
-print 'frexp'
-def testfrexp(name, (mant, exp), (emant, eexp)):
-    if abs(mant-emant) > eps or exp != eexp:
-        raise TestFailed, '%s returned %r, expected %r'%\
-              (name, (mant, exp), (emant,eexp))
-
-testfrexp('frexp(-1)', math.frexp(-1), (-0.5, 1))
-testfrexp('frexp(0)', math.frexp(0), (0, 0))
-testfrexp('frexp(1)', math.frexp(1), (0.5, 1))
-testfrexp('frexp(2)', math.frexp(2), (0.5, 2))
-
-print 'hypot'
-testit('hypot(0,0)', math.hypot(0,0), 0)
-testit('hypot(3,4)', math.hypot(3,4), 5)
-
-print 'ldexp'
-testit('ldexp(0,1)', math.ldexp(0,1), 0)
-testit('ldexp(1,1)', math.ldexp(1,1), 2)
-testit('ldexp(1,-1)', math.ldexp(1,-1), 0.5)
-testit('ldexp(-1,1)', math.ldexp(-1,1), -2)
-
-print 'log'
-testit('log(1/e)', math.log(1/math.e), -1)
-testit('log(1)', math.log(1), 0)
-testit('log(e)', math.log(math.e), 1)
-testit('log(32,2)', math.log(32,2), 5)
-testit('log(10**40, 10)', math.log(10**40, 10), 40)
-testit('log(10**40, 10**20)', math.log(10**40, 10**20), 2)
-
-print 'log10'
-testit('log10(0.1)', math.log10(0.1), -1)
-testit('log10(1)', math.log10(1), 0)
-testit('log10(10)', math.log10(10), 1)
-
-print 'modf'
-def testmodf(name, (v1, v2), (e1, e2)):
-    if abs(v1-e1) > eps or abs(v2-e2):
-        raise TestFailed, '%s returned %r, expected %r'%\
-              (name, (v1,v2), (e1,e2))
-
-testmodf('modf(1.5)', math.modf(1.5), (0.5, 1.0))
-testmodf('modf(-1.5)', math.modf(-1.5), (-0.5, -1.0))
-
-print 'pow'
-testit('pow(0,1)', math.pow(0,1), 0)
-testit('pow(1,0)', math.pow(1,0), 1)
-testit('pow(2,1)', math.pow(2,1), 2)
-testit('pow(2,-1)', math.pow(2,-1), 0.5)
-
-print 'radians'
-testit('radians(180)', math.radians(180), math.pi)
-testit('radians(90)', math.radians(90), math.pi/2)
-testit('radians(-45)', math.radians(-45), -math.pi/4)
-
-print 'sin'
-testit('sin(0)', math.sin(0), 0)
-testit('sin(pi/2)', math.sin(math.pi/2), 1)
-testit('sin(-pi/2)', math.sin(-math.pi/2), -1)
-
-print 'sinh'
-testit('sinh(0)', math.sinh(0), 0)
-testit('sinh(1)**2-cosh(1)**2', math.sinh(1)**2-math.cosh(1)**2, -1)
-testit('sinh(1)+sinh(-1)', math.sinh(1)+math.sinh(-1), 0)
-
-print 'sqrt'
-testit('sqrt(0)', math.sqrt(0), 0)
-testit('sqrt(1)', math.sqrt(1), 1)
-testit('sqrt(4)', math.sqrt(4), 2)
-
-print 'tan'
-testit('tan(0)', math.tan(0), 0)
-testit('tan(pi/4)', math.tan(math.pi/4), 1)
-testit('tan(-pi/4)', math.tan(-math.pi/4), -1)
-
-print 'tanh'
-testit('tanh(0)', math.tanh(0), 0)
-testit('tanh(1)+tanh(-1)', math.tanh(1)+math.tanh(-1), 0)
-
-# RED_FLAG 16-Oct-2000 Tim
-# While 2.0 is more consistent about exceptions than previous releases, it
-# still fails this part of the test on some platforms.  For now, we only
-# *run* test_exceptions() in verbose mode, so that this isn't normally
-# tested.
-
-def test_exceptions():
-    print 'exceptions'
-    try:
-        x = math.exp(-1000000000)
-    except:
-        # mathmodule.c is failing to weed out underflows from libm, or
-        # we've got an fp format with huge dynamic range
-        raise TestFailed("underflowing exp() should not have raised "
-                         "an exception")
-    if x != 0:
-        raise TestFailed("underflowing exp() should have returned 0")
-
-    # If this fails, probably using a strict IEEE-754 conforming libm, and x
-    # is +Inf afterwards.  But Python wants overflows detected by default.
-    try:
-        x = math.exp(1000000000)
-    except OverflowError:
-        pass
-    else:
-        raise TestFailed("overflowing exp() didn't trigger OverflowError")
-
-    # If this fails, it could be a puzzle.  One odd possibility is that
-    # mathmodule.c's macros are getting confused while comparing
-    # Inf (HUGE_VAL) to a NaN, and artificially setting errno to ERANGE
-    # as a result (and so raising OverflowError instead).
-    try:
-        x = math.sqrt(-1.0)
-    except ValueError:
-        pass
-    else:
-        raise TestFailed("sqrt(-1) didn't raise ValueError")
-
-if verbose:
-    test_exceptions()
+class MathTests(unittest.TestCase):
+
+    def ftest(self, name, value, expected):
+        if abs(value-expected) > eps:
+            self.fail('%s returned %f, expected %f'%\
+                      (name, value, expected))
+
+    def testConstants(self):
+        self.ftest('pi', math.pi, 3.1415926)
+        self.ftest('e', math.e, 2.7182818)
+
+    def testAcos(self):
+        self.assertRaises(TypeError, math.acos)
+        self.ftest('acos(-1)', math.acos(-1), math.pi)
+        self.ftest('acos(0)', math.acos(0), math.pi/2)
+        self.ftest('acos(1)', math.acos(1), 0)
+
+    def testAsin(self):
+        self.assertRaises(TypeError, math.asin)
+        self.ftest('asin(-1)', math.asin(-1), -math.pi/2)
+        self.ftest('asin(0)', math.asin(0), 0)
+        self.ftest('asin(1)', math.asin(1), math.pi/2)
+
+    def testAtan(self):
+        self.assertRaises(TypeError, math.atan)
+        self.ftest('atan(-1)', math.atan(-1), -math.pi/4)
+        self.ftest('atan(0)', math.atan(0), 0)
+        self.ftest('atan(1)', math.atan(1), math.pi/4)
+
+    def testAtan2(self):
+        self.assertRaises(TypeError, math.atan2)
+        self.ftest('atan2(-1, 0)', math.atan2(-1, 0), -math.pi/2)
+        self.ftest('atan2(-1, 1)', math.atan2(-1, 1), -math.pi/4)
+        self.ftest('atan2(0, 1)', math.atan2(0, 1), 0)
+        self.ftest('atan2(1, 1)', math.atan2(1, 1), math.pi/4)
+        self.ftest('atan2(1, 0)', math.atan2(1, 0), math.pi/2)
+
+    def testCeil(self):
+        self.assertRaises(TypeError, math.ceil)
+        self.ftest('ceil(0.5)', math.ceil(0.5), 1)
+        self.ftest('ceil(1.0)', math.ceil(1.0), 1)
+        self.ftest('ceil(1.5)', math.ceil(1.5), 2)
+        self.ftest('ceil(-0.5)', math.ceil(-0.5), 0)
+        self.ftest('ceil(-1.0)', math.ceil(-1.0), -1)
+        self.ftest('ceil(-1.5)', math.ceil(-1.5), -1)
+
+    def testCos(self):
+        self.assertRaises(TypeError, math.cos)
+        self.ftest('cos(-pi/2)', math.cos(-math.pi/2), 0)
+        self.ftest('cos(0)', math.cos(0), 1)
+        self.ftest('cos(pi/2)', math.cos(math.pi/2), 0)
+        self.ftest('cos(pi)', math.cos(math.pi), -1)
+
+    def testCosh(self):
+        self.assertRaises(TypeError, math.cosh)
+        self.ftest('cosh(0)', math.cosh(0), 1)
+        self.ftest('cosh(2)-2*cosh(1)**2', math.cosh(2)-2*math.cosh(1)**2, -1) # Thanks to Lambert
+
+    def testDegrees(self):
+        self.assertRaises(TypeError, math.degrees)
+        self.ftest('degrees(pi)', math.degrees(math.pi), 180.0)
+        self.ftest('degrees(pi/2)', math.degrees(math.pi/2), 90.0)
+        self.ftest('degrees(-pi/4)', math.degrees(-math.pi/4), -45.0)
+
+    def testExp(self):
+        self.assertRaises(TypeError, math.exp)
+        self.ftest('exp(-1)', math.exp(-1), 1/math.e)
+        self.ftest('exp(0)', math.exp(0), 1)
+        self.ftest('exp(1)', math.exp(1), math.e)
+
+    def testFabs(self):
+        self.assertRaises(TypeError, math.fabs)
+        self.ftest('fabs(-1)', math.fabs(-1), 1)
+        self.ftest('fabs(0)', math.fabs(0), 0)
+        self.ftest('fabs(1)', math.fabs(1), 1)
+
+    def testFloor(self):
+        self.assertRaises(TypeError, math.floor)
+        self.ftest('floor(0.5)', math.floor(0.5), 0)
+        self.ftest('floor(1.0)', math.floor(1.0), 1)
+        self.ftest('floor(1.5)', math.floor(1.5), 1)
+        self.ftest('floor(-0.5)', math.floor(-0.5), -1)
+        self.ftest('floor(-1.0)', math.floor(-1.0), -1)
+        self.ftest('floor(-1.5)', math.floor(-1.5), -2)
+
+    def testFmod(self):
+        self.assertRaises(TypeError, math.fmod)
+        self.ftest('fmod(10,1)', math.fmod(10,1), 0)
+        self.ftest('fmod(10,0.5)', math.fmod(10,0.5), 0)
+        self.ftest('fmod(10,1.5)', math.fmod(10,1.5), 1)
+        self.ftest('fmod(-10,1)', math.fmod(-10,1), 0)
+        self.ftest('fmod(-10,0.5)', math.fmod(-10,0.5), 0)
+        self.ftest('fmod(-10,1.5)', math.fmod(-10,1.5), -1)
+
+    def testFrexp(self):
+        self.assertRaises(TypeError, math.frexp)
+
+        def testfrexp(name, (mant, exp), (emant, eexp)):
+            if abs(mant-emant) > eps or exp != eexp:
+                self.fail('%s returned %r, expected %r'%\
+                          (name, (mant, exp), (emant,eexp)))
+
+        testfrexp('frexp(-1)', math.frexp(-1), (-0.5, 1))
+        testfrexp('frexp(0)', math.frexp(0), (0, 0))
+        testfrexp('frexp(1)', math.frexp(1), (0.5, 1))
+        testfrexp('frexp(2)', math.frexp(2), (0.5, 2))
+
+    def testHypot(self):
+        self.assertRaises(TypeError, math.hypot)
+        self.ftest('hypot(0,0)', math.hypot(0,0), 0)
+        self.ftest('hypot(3,4)', math.hypot(3,4), 5)
+
+    def testLdexp(self):
+        self.assertRaises(TypeError, math.ldexp)
+        self.ftest('ldexp(0,1)', math.ldexp(0,1), 0)
+        self.ftest('ldexp(1,1)', math.ldexp(1,1), 2)
+        self.ftest('ldexp(1,-1)', math.ldexp(1,-1), 0.5)
+        self.ftest('ldexp(-1,1)', math.ldexp(-1,1), -2)
+
+    def testLog(self):
+        self.assertRaises(TypeError, math.log)
+        self.ftest('log(1/e)', math.log(1/math.e), -1)
+        self.ftest('log(1)', math.log(1), 0)
+        self.ftest('log(e)', math.log(math.e), 1)
+        self.ftest('log(32,2)', math.log(32,2), 5)
+        self.ftest('log(10**40, 10)', math.log(10**40, 10), 40)
+        self.ftest('log(10**40, 10**20)', math.log(10**40, 10**20), 2)
+
+    def testLog10(self):
+        self.assertRaises(TypeError, math.log10)
+        self.ftest('log10(0.1)', math.log10(0.1), -1)
+        self.ftest('log10(1)', math.log10(1), 0)
+        self.ftest('log10(10)', math.log10(10), 1)
+
+    def testModf(self):
+        self.assertRaises(TypeError, math.modf)
+
+        def testmodf(name, (v1, v2), (e1, e2)):
+            if abs(v1-e1) > eps or abs(v2-e2):
+                self.fail('%s returned %r, expected %r'%\
+                          (name, (v1,v2), (e1,e2)))
+
+        testmodf('modf(1.5)', math.modf(1.5), (0.5, 1.0))
+        testmodf('modf(-1.5)', math.modf(-1.5), (-0.5, -1.0))
+
+    def testPow(self):
+        self.assertRaises(TypeError, math.pow)
+        self.ftest('pow(0,1)', math.pow(0,1), 0)
+        self.ftest('pow(1,0)', math.pow(1,0), 1)
+        self.ftest('pow(2,1)', math.pow(2,1), 2)
+        self.ftest('pow(2,-1)', math.pow(2,-1), 0.5)
+
+    def testRadians(self):
+        self.assertRaises(TypeError, math.radians)
+        self.ftest('radians(180)', math.radians(180), math.pi)
+        self.ftest('radians(90)', math.radians(90), math.pi/2)
+        self.ftest('radians(-45)', math.radians(-45), -math.pi/4)
+
+    def testSin(self):
+        self.assertRaises(TypeError, math.sin)
+        self.ftest('sin(0)', math.sin(0), 0)
+        self.ftest('sin(pi/2)', math.sin(math.pi/2), 1)
+        self.ftest('sin(-pi/2)', math.sin(-math.pi/2), -1)
+
+    def testSinh(self):
+        self.assertRaises(TypeError, math.sinh)
+        self.ftest('sinh(0)', math.sinh(0), 0)
+        self.ftest('sinh(1)**2-cosh(1)**2', math.sinh(1)**2-math.cosh(1)**2, -1)
+        self.ftest('sinh(1)+sinh(-1)', math.sinh(1)+math.sinh(-1), 0)
+
+    def testSqrt(self):
+        self.assertRaises(TypeError, math.sqrt)
+        self.ftest('sqrt(0)', math.sqrt(0), 0)
+        self.ftest('sqrt(1)', math.sqrt(1), 1)
+        self.ftest('sqrt(4)', math.sqrt(4), 2)
+
+    def testTan(self):
+        self.assertRaises(TypeError, math.tan)
+        self.ftest('tan(0)', math.tan(0), 0)
+        self.ftest('tan(pi/4)', math.tan(math.pi/4), 1)
+        self.ftest('tan(-pi/4)', math.tan(-math.pi/4), -1)
+
+    def testTanh(self):
+        self.assertRaises(TypeError, math.tanh)
+        self.ftest('tanh(0)', math.tanh(0), 0)
+        self.ftest('tanh(1)+tanh(-1)', math.tanh(1)+math.tanh(-1), 0)
+
+    # RED_FLAG 16-Oct-2000 Tim
+    # While 2.0 is more consistent about exceptions than previous releases, it
+    # still fails this part of the test on some platforms.  For now, we only
+    # *run* test_exceptions() in verbose mode, so that this isn't normally
+    # tested.
+
+    if verbose:
+        def test_exceptions(self):
+            try:
+                x = math.exp(-1000000000)
+            except:
+                # mathmodule.c is failing to weed out underflows from libm, or
+                # we've got an fp format with huge dynamic range
+                self.fail("underflowing exp() should not have raised "
+                          "an exception")
+            if x != 0:
+                self.fail("underflowing exp() should have returned 0")
+
+            # If this fails, probably using a strict IEEE-754 conforming libm, and x
+            # is +Inf afterwards.  But Python wants overflows detected by default.
+            try:
+                x = math.exp(1000000000)
+            except OverflowError:
+                pass
+            else:
+                self.fail("overflowing exp() didn't trigger OverflowError")
+
+            # If this fails, it could be a puzzle.  One odd possibility is that
+            # mathmodule.c's macros are getting confused while comparing
+            # Inf (HUGE_VAL) to a NaN, and artificially setting errno to ERANGE
+            # as a result (and so raising OverflowError instead).
+            try:
+                x = math.sqrt(-1.0)
+            except ValueError:
+                pass
+            else:
+                self.fail("sqrt(-1) didn't raise ValueError")
+
+
+def test_main():
+    run_unittest(MathTests)
+
+if __name__ == '__main__':
+    test_main()
index d2a24770cf203d74620ae71ca14c4e794a9e1064..0b5382307619efc0d288624677f5cc94ec2d7141 100644 (file)
-from test.test_support import verify, vereq, TESTFN
+from test.test_support import TESTFN, run_unittest
 import mmap
+import unittest
 import os, re
 
 PAGESIZE = mmap.PAGESIZE
 
-def test_both():
-    "Test mmap module on Unix systems and Windows"
+class MmapTests(unittest.TestCase):
 
-    # Create a file to be mmap'ed.
-    if os.path.exists(TESTFN):
-        os.unlink(TESTFN)
-    f = open(TESTFN, 'w+')
+    def setUp(self):
+        if os.path.exists(TESTFN):
+            os.unlink(TESTFN)
 
-    try:    # unlink TESTFN no matter what
-        # Write 2 pages worth of data to the file
-        f.write('\0'* PAGESIZE)
-        f.write('foo')
-        f.write('\0'* (PAGESIZE-3) )
-        f.flush()
-        m = mmap.mmap(f.fileno(), 2 * PAGESIZE)
-        f.close()
+    def tearDown(self):
+        try:
+            os.unlink(TESTFN)
+        except OSError:
+            pass
 
-        # Simple sanity checks
+    def test_basic(self):
+        # Test mmap module on Unix systems and Windows
 
-        print type(m)  # SF bug 128713:  segfaulted on Linux
-        print '  Position of foo:', m.find('foo') / float(PAGESIZE), 'pages'
-        vereq(m.find('foo'), PAGESIZE)
+        # Create a file to be mmap'ed.
+        f = open(TESTFN, 'w+')
+        try:
+            # Write 2 pages worth of data to the file
+            f.write('\0'* PAGESIZE)
+            f.write('foo')
+            f.write('\0'* (PAGESIZE-3) )
+            f.flush()
+            m = mmap.mmap(f.fileno(), 2 * PAGESIZE)
+            f.close()
 
-        print '  Length of file:', len(m) / float(PAGESIZE), 'pages'
-        vereq(len(m), 2*PAGESIZE)
+            # Simple sanity checks
 
-        print '  Contents of byte 0:', repr(m[0])
-        vereq(m[0], '\0')
-        print '  Contents of first 3 bytes:', repr(m[0:3])
-        vereq(m[0:3], '\0\0\0')
+            tp = str(type(m))  # SF bug 128713:  segfaulted on Linux
+            self.assertEqual(m.find('foo'), PAGESIZE)
 
-        # Modify the file's content
-        print "\n  Modifying file's content..."
-        m[0] = '3'
-        m[PAGESIZE +3: PAGESIZE +3+3] = 'bar'
+            self.assertEqual(len(m), 2*PAGESIZE)
 
-        # Check that the modification worked
-        print '  Contents of byte 0:', repr(m[0])
-        vereq(m[0], '3')
-        print '  Contents of first 3 bytes:', repr(m[0:3])
-        vereq(m[0:3], '3\0\0')
-        print '  Contents of second page:',  repr(m[PAGESIZE-1 : PAGESIZE + 7])
-        vereq(m[PAGESIZE-1 : PAGESIZE + 7], '\0foobar\0')
+            self.assertEqual(m[0], '\0')
+            self.assertEqual(m[0:3], '\0\0\0')
 
-        m.flush()
+            # Modify the file's content
+            m[0] = '3'
+            m[PAGESIZE +3: PAGESIZE +3+3] = 'bar'
 
-        # Test doing a regular expression match in an mmap'ed file
-        match = re.search('[A-Za-z]+', m)
-        if match is None:
-            print '  ERROR: regex match on mmap failed!'
-        else:
-            start, end = match.span(0)
-            length = end - start
-
-            print '  Regex match on mmap (page start, length of match):',
-            print start / float(PAGESIZE), length
-
-            vereq(start, PAGESIZE)
-            vereq(end, PAGESIZE + 6)
-
-        # test seeking around (try to overflow the seek implementation)
-        m.seek(0,0)
-        print '  Seek to zeroth byte'
-        vereq(m.tell(), 0)
-        m.seek(42,1)
-        print '  Seek to 42nd byte'
-        vereq(m.tell(), 42)
-        m.seek(0,2)
-        print '  Seek to last byte'
-        vereq(m.tell(), len(m))
-
-        print '  Try to seek to negative position...'
-        try:
-            m.seek(-1)
-        except ValueError:
-            pass
-        else:
-            verify(0, 'expected a ValueError but did not get it')
+            # Check that the modification worked
+            self.assertEqual(m[0], '3')
+            self.assertEqual(m[0:3], '3\0\0')
+            self.assertEqual(m[PAGESIZE-1 : PAGESIZE + 7], '\0foobar\0')
 
-        print '  Try to seek beyond end of mmap...'
-        try:
-            m.seek(1,2)
-        except ValueError:
-            pass
-        else:
-            verify(0, 'expected a ValueError but did not get it')
+            m.flush()
 
-        print '  Try to seek to negative position...'
-        try:
-            m.seek(-len(m)-1,2)
-        except ValueError:
-            pass
-        else:
-            verify(0, 'expected a ValueError but did not get it')
+            # Test doing a regular expression match in an mmap'ed file
+            match = re.search('[A-Za-z]+', m)
+            if match is None:
+                self.fail('regex match on mmap failed!')
+            else:
+                start, end = match.span(0)
+                length = end - start
 
-        # Try resizing map
-        print '  Attempting resize()'
-        try:
-            m.resize(512)
-        except SystemError:
-            # resize() not supported
-            # No messages are printed, since the output of this test suite
-            # would then be different across platforms.
-            pass
-        else:
-            # resize() is supported
-            verify(len(m) == 512,
-                    "len(m) is %d, but expecting 512" % (len(m),) )
-            # Check that we can no longer seek beyond the new size.
+                self.assertEqual(start, PAGESIZE)
+                self.assertEqual(end, PAGESIZE + 6)
+
+            # test seeking around (try to overflow the seek implementation)
+            m.seek(0,0)
+            self.assertEqual(m.tell(), 0)
+            m.seek(42,1)
+            self.assertEqual(m.tell(), 42)
+            m.seek(0,2)
+            self.assertEqual(m.tell(), len(m))
+
+            # Try to seek to negative position...
+            self.assertRaises(ValueError, m.seek, -1)
+
+            # Try to seek beyond end of mmap...
+            self.assertRaises(ValueError, m.seek, 1, 2)
+
+            # Try to seek to negative position...
+            self.assertRaises(ValueError, m.seek, -len(m)-1, 2)
+
+            # Try resizing map
             try:
-                m.seek(513,0)
-            except ValueError:
+                m.resize(512)
+            except SystemError:
+                # resize() not supported
+                # No messages are printed, since the output of this test suite
+                # would then be different across platforms.
                 pass
             else:
-                verify(0, 'Could seek beyond the new size')
+                # resize() is supported
+                self.assertEqual(len(m), 512)
+                # Check that we can no longer seek beyond the new size.
+                self.assertRaises(ValueError, m.seek, 513, 0)
+
+                # Check that the underlying file is truncated too
+                # (bug #728515)
+                f = open(TESTFN)
+                f.seek(0, 2)
+                self.assertEqual(f.tell(), 512)
+                f.close()
+                self.assertEqual(m.size(), 512)
 
-            # Check that the underlying file is truncated too
-            # (bug #728515)
-            f = open(TESTFN)
-            f.seek(0, 2)
-            verify(f.tell() == 512, 'Underlying file not truncated')
-            f.close()
-            verify(m.size() == 512, 'New size not reflected in file')
-
-        m.close()
+            m.close()
 
-    finally:
-        try:
-            f.close()
-        except OSError:
-            pass
-        try:
-            os.unlink(TESTFN)
-        except OSError:
-            pass
+        finally:
+            try:
+                f.close()
+            except OSError:
+                pass
 
-    # Test for "access" keyword parameter
-    try:
+    def test_access_parameter(self):
+        # Test for "access" keyword parameter
         mapsize = 10
-        print "  Creating", mapsize, "byte test data file."
         open(TESTFN, "wb").write("a"*mapsize)
-        print "  Opening mmap with access=ACCESS_READ"
         f = open(TESTFN, "rb")
         m = mmap.mmap(f.fileno(), mapsize, access=mmap.ACCESS_READ)
-        verify(m[:] == 'a'*mapsize, "Readonly memory map data incorrect.")
+        self.assertEqual(m[:], 'a'*mapsize, "Readonly memory map data incorrect.")
 
-        print "  Ensuring that readonly mmap can't be slice assigned."
+        # Ensuring that readonly mmap can't be slice assigned
         try:
             m[:] = 'b'*mapsize
         except TypeError:
             pass
         else:
-            verify(0, "Able to write to readonly memory map")
+            self.fail("Able to write to readonly memory map")
 
-        print "  Ensuring that readonly mmap can't be item assigned."
+        # Ensuring that readonly mmap can't be item assigned
         try:
             m[0] = 'b'
         except TypeError:
             pass
         else:
-            verify(0, "Able to write to readonly memory map")
+            self.fail("Able to write to readonly memory map")
 
-        print "  Ensuring that readonly mmap can't be write() to."
+        # Ensuring that readonly mmap can't be write() to
         try:
             m.seek(0,0)
             m.write('abc')
         except TypeError:
             pass
         else:
-            verify(0, "Able to write to readonly memory map")
+            self.fail("Able to write to readonly memory map")
 
-        print "  Ensuring that readonly mmap can't be write_byte() to."
+        # Ensuring that readonly mmap can't be write_byte() to
         try:
             m.seek(0,0)
             m.write_byte('d')
         except TypeError:
             pass
         else:
-            verify(0, "Able to write to readonly memory map")
+            self.fail("Able to write to readonly memory map")
 
-        print "  Ensuring that readonly mmap can't be resized."
+        # Ensuring that readonly mmap can't be resized
         try:
             m.resize(2*mapsize)
         except SystemError:   # resize is not universally supported
@@ -192,12 +160,12 @@ def test_both():
         except TypeError:
             pass
         else:
-            verify(0, "Able to resize readonly memory map")
+            self.fail("Able to resize readonly memory map")
         del m, f
-        verify(open(TESTFN, "rb").read() == 'a'*mapsize,
+        self.assertEqual(open(TESTFN, "rb").read(), 'a'*mapsize,
                "Readonly memory map data file was modified")
 
-        print "  Opening mmap with size too big"
+        # Opening mmap with size too big
         import sys
         f = open(TESTFN, "r+b")
         try:
@@ -208,11 +176,11 @@ def test_both():
             # later tests assume that the length hasn't changed.  We need to
             # repair that.
             if sys.platform.startswith('win'):
-                verify(0, "Opening mmap with size+1 should work on Windows.")
+                self.fail("Opening mmap with size+1 should work on Windows.")
         else:
             # we expect a ValueError on Unix, but not on Windows
             if not sys.platform.startswith('win'):
-                verify(0, "Opening mmap with size+1 should raise ValueError.")
+                self.fail("Opening mmap with size+1 should raise ValueError.")
             m.close()
         f.close()
         if sys.platform.startswith('win'):
@@ -221,12 +189,12 @@ def test_both():
             f.truncate(mapsize)
             f.close()
 
-        print "  Opening mmap with access=ACCESS_WRITE"
+        # Opening mmap with access=ACCESS_WRITE
         f = open(TESTFN, "r+b")
         m = mmap.mmap(f.fileno(), mapsize, access=mmap.ACCESS_WRITE)
-        print "  Modifying write-through memory map."
+        # Modifying write-through memory map
         m[:] = 'c'*mapsize
-        verify(m[:] == 'c'*mapsize,
+        self.assertEqual(m[:], 'c'*mapsize,
                "Write-through memory map memory not updated properly.")
         m.flush()
         m.close()
@@ -234,66 +202,45 @@ def test_both():
         f = open(TESTFN, 'rb')
         stuff = f.read()
         f.close()
-        verify(stuff == 'c'*mapsize,
+        self.assertEqual(stuff, 'c'*mapsize,
                "Write-through memory map data file not updated properly.")
 
-        print "  Opening mmap with access=ACCESS_COPY"
+        # Opening mmap with access=ACCESS_COPY
         f = open(TESTFN, "r+b")
         m = mmap.mmap(f.fileno(), mapsize, access=mmap.ACCESS_COPY)
-        print "  Modifying copy-on-write memory map."
+        # Modifying copy-on-write memory map
         m[:] = 'd'*mapsize
-        verify(m[:] == 'd' * mapsize,
+        self.assertEqual(m[:], 'd' * mapsize,
                "Copy-on-write memory map data not written correctly.")
         m.flush()
-        verify(open(TESTFN, "rb").read() == 'c'*mapsize,
+        self.assertEqual(open(TESTFN, "rb").read(), 'c'*mapsize,
                "Copy-on-write test data file should not be modified.")
-        try:
-            print "  Ensuring copy-on-write maps cannot be resized."
-            m.resize(2*mapsize)
-        except TypeError:
-            pass
-        else:
-            verify(0, "Copy-on-write mmap resize did not raise exception.")
+        # Ensuring copy-on-write maps cannot be resized
+        self.assertRaises(TypeError, m.resize, 2*mapsize)
         del m, f
-        try:
-            print "  Ensuring invalid access parameter raises exception."
-            f = open(TESTFN, "r+b")
-            m = mmap.mmap(f.fileno(), mapsize, access=4)
-        except ValueError:
-            pass
-        else:
-            verify(0, "Invalid access code should have raised exception.")
+
+        # Ensuring invalid access parameter raises exception
+        f = open(TESTFN, "r+b")
+        self.assertRaises(ValueError, mmap.mmap, f.fileno(), mapsize, access=4)
+        f.close()
 
         if os.name == "posix":
             # Try incompatible flags, prot and access parameters.
             f = open(TESTFN, "r+b")
-            try:
-                m = mmap.mmap(f.fileno(), mapsize, flags=mmap.MAP_PRIVATE,
+            self.assertRaises(ValueError, mmap.mmap, f.fileno(), mapsize,
+                              flags=mmap.MAP_PRIVATE,
                               prot=mmap.PROT_READ, access=mmap.ACCESS_WRITE)
-            except ValueError:
-                pass
-            else:
-                verify(0, "Incompatible parameters should raise ValueError.")
             f.close()
-    finally:
-        try:
-            os.unlink(TESTFN)
-        except OSError:
-            pass
 
-    print '  Try opening a bad file descriptor...'
-    try:
-        mmap.mmap(-2, 4096)
-    except mmap.error:
-        pass
-    else:
-        verify(0, 'expected a mmap.error but did not get it')
+    def test_bad_file_desc(self):
+        # Try opening a bad file descriptor...
+        self.assertRaises(mmap.error, mmap.mmap, -2, 4096)
 
-    # Do a tougher .find() test.  SF bug 515943 pointed out that, in 2.2,
-    # searching for data with embedded \0 bytes didn't work.
-    f = open(TESTFN, 'w+')
+    def test_tougher_find(self):
+        # Do a tougher .find() test.  SF bug 515943 pointed out that, in 2.2,
+        # searching for data with embedded \0 bytes didn't work.
+        f = open(TESTFN, 'w+')
 
-    try:    # unlink TESTFN no matter what
         data = 'aabaac\x00deef\x00\x00aa\x00'
         n = len(data)
         f.write(data)
@@ -304,17 +251,14 @@ def test_both():
         for start in range(n+1):
             for finish in range(start, n+1):
                 slice = data[start : finish]
-                vereq(m.find(slice), data.find(slice))
-                vereq(m.find(slice + 'x'), -1)
+                self.assertEqual(m.find(slice), data.find(slice))
+                self.assertEqual(m.find(slice + 'x'), -1)
         m.close()
 
-    finally:
-        os.unlink(TESTFN)
+    def test_double_close(self):
+        # make sure a double close doesn't crash on Solaris (Bug# 665913)
+        f = open(TESTFN, 'w+')
 
-    # make sure a double close doesn't crash on Solaris (Bug# 665913)
-    f = open(TESTFN, 'w+')
-
-    try:    # unlink TESTFN no matter what
         f.write(2**16 * 'a') # Arbitrary character
         f.close()
 
@@ -324,72 +268,46 @@ def test_both():
         mf.close()
         f.close()
 
-    finally:
-        os.unlink(TESTFN)
-
-    # test mapping of entire file by passing 0 for map length
-    if hasattr(os, "stat"):
-        print "  Ensuring that passing 0 as map length sets map size to current file size."
-        f = open(TESTFN, "w+")
+    def test_entire_file(self):
+        # test mapping of entire file by passing 0 for map length
+        if hasattr(os, "stat"):
+            f = open(TESTFN, "w+")
 
-        try:
             f.write(2**16 * 'm') # Arbitrary character
             f.close()
 
             f = open(TESTFN, "rb+")
             mf = mmap.mmap(f.fileno(), 0)
-            verify(len(mf) == 2**16, "Map size should equal file size.")
-            vereq(mf.read(2**16), 2**16 * "m")
+            self.assertEqual(len(mf), 2**16, "Map size should equal file size.")
+            self.assertEqual(mf.read(2**16), 2**16 * "m")
             mf.close()
             f.close()
 
-        finally:
-            os.unlink(TESTFN)
-
-    # test mapping of entire file by passing 0 for map length
-    if hasattr(os, "stat"):
-        print "  Ensuring that passing 0 as map length sets map size to current file size."
-        f = open(TESTFN, "w+")
-        try:
-            f.write(2**16 * 'm') # Arbitrary character
-            f.close()
-
-            f = open(TESTFN, "rb+")
-            mf = mmap.mmap(f.fileno(), 0)
-            verify(len(mf) == 2**16, "Map size should equal file size.")
-            vereq(mf.read(2**16), 2**16 * "m")
-            mf.close()
-            f.close()
-
-        finally:
-            os.unlink(TESTFN)
-
-    # make move works everywhere (64-bit format problem earlier)
-    f = open(TESTFN, 'w+')
+    def test_move(self):
+        # make move works everywhere (64-bit format problem earlier)
+        f = open(TESTFN, 'w+')
 
-    try:    # unlink TESTFN no matter what
         f.write("ABCDEabcde") # Arbitrary character
         f.flush()
 
         mf = mmap.mmap(f.fileno(), 10)
         mf.move(5, 0, 5)
-        verify(mf[:] == "ABCDEABCDE", "Map move should have duplicated front 5")
+        self.assertEqual(mf[:], "ABCDEABCDE", "Map move should have duplicated front 5")
         mf.close()
         f.close()
 
-    finally:
-        os.unlink(TESTFN)
+    def test_anonymous(self):
+        # anonymous mmap.mmap(-1, PAGE)
+        m = mmap.mmap(-1, PAGESIZE)
+        for x in xrange(PAGESIZE):
+            self.assertEqual(m[x], '\0', "anonymously mmap'ed contents should be zero")
 
-def test_anon():
-    print "  anonymous mmap.mmap(-1, PAGESIZE)..."
-    m = mmap.mmap(-1, PAGESIZE)
-    for x in xrange(PAGESIZE):
-        verify(m[x] == '\0', "anonymously mmap'ed contents should be zero")
+        for x in xrange(PAGESIZE):
+            m[x] = ch = chr(x & 255)
+            self.assertEqual(m[x], ch)
 
-    for x in xrange(PAGESIZE):
-        m[x] = ch = chr(x & 255)
-        vereq(m[x], ch)
+def test_main():
+    run_unittest(MmapTests)
 
-test_both()
-test_anon()
-print ' Test passed'
+if __name__ == '__main__':
+    test_main()
index 0b8e45144ad3017bb42d4166ac2737baa292268c..7da241bf75aecee8e4dc125f7e21c5cb06ea573b 100644 (file)
@@ -50,7 +50,7 @@ b/__init__.py
 maybe_test_new = [
     "a.module",
     ["a", "a.module", "sys",
-     "b"],
+     "b", "__future__"],
     ["c"], ["b.something"],
     """\
 a/__init__.py
@@ -58,6 +58,7 @@ a/module.py
                                 from b import something
                                 from c import something
 b/__init__.py
+                                from __future__ import absolute_import
                                 from sys import *
 """]
 
@@ -86,12 +87,13 @@ absolute_import_test = [
     "a.module",
     ["a", "a.module",
      "b", "b.x", "b.y", "b.z",
-     "sys", "exceptions"],
+     "__future__", "sys", "exceptions"],
     ["blahblah", "z"], [],
     """\
 mymodule.py
 a/__init__.py
 a/module.py
+                                from __future__ import absolute_import
                                 import sys # sys
                                 import blahblah # fails
                                 import exceptions # exceptions
@@ -115,7 +117,8 @@ b/z.py
 
 relative_import_test = [
     "a.module",
-    ["a", "a.module",
+    ["__future__",
+     "a", "a.module",
      "a.b", "a.b.y", "a.b.z",
      "a.b.c", "a.b.c.moduleC",
      "a.b.c.d", "a.b.c.e",
@@ -127,6 +130,7 @@ mymodule.py
 a/__init__.py
                                 from .b import y, z # a.b.y, a.b.z
 a/module.py
+                                from __future__ import absolute_import # __future__
                                 import exceptions # exceptions
 a/exceptions.py
 a/sys.py
@@ -253,6 +257,7 @@ class ModuleFinderTest(unittest.TestCase):
             self._do_test(relative_import_test_2)
 
 def test_main():
+    distutils.log.set_threshold(distutils.log.WARN)
     test_support.run_unittest(ModuleFinderTest)
 
 if __name__ == "__main__":
index 95f4b383140db4b028f54b71b39430683965c6ba..fb7f82d18e41ef88f8cc3de933a5cfb85e56c2fa 100644 (file)
@@ -202,6 +202,22 @@ class Test_ISO2022(unittest.TestCase):
         uni = u':hu4:unit\xe9 de famille'
         self.assertEqual(iso2022jp2.decode('iso2022-jp-2'), uni)
 
+    def test_iso2022_jp_g0(self):
+        self.failIf('\x0e' in u'\N{SOFT HYPHEN}'.encode('iso-2022-jp-2'))
+        for encoding in ('iso-2022-jp-2004', 'iso-2022-jp-3'):
+            e = u'\u3406'.encode(encoding)
+            self.failIf(filter(lambda x: x >= '\x80', e))
+
+    def test_bug1572832(self):
+        if sys.maxunicode >= 0x10000:
+            myunichr = unichr
+        else:
+            myunichr = lambda x: unichr(0xD7C0+(x>>10)) + unichr(0xDC00+(x&0x3FF))
+
+        for x in xrange(0x10000, 0x110000):
+            # Any ISO 2022 codec will cause the segfault
+            myunichr(x).encode('iso_2022_jp', 'ignore')
+
 def test_main():
     suite = unittest.TestSuite()
     suite.addTest(unittest.makeSuite(Test_MultibyteCodec))
index 8afda75f482088d42d32c4f608c74485966e262d..621522617ac9c5256312e484b6b812db0e715b9a 100644 (file)
@@ -92,8 +92,8 @@ class Horrid:
         ##self.hashcode = random.randrange(1000000000)
 
     def __hash__(self):
-        ##return self.hashcode
         return 42
+        return self.hashcode
 
     def __eq__(self, other):
         maybe_mutate()   # The point of the test.
index 3c16bf572e3f9c359111967c6093e333298aef30..e90fd66d049e9fb0379166e2dc045853b2005d92 100644 (file)
@@ -47,6 +47,14 @@ except TypeError:
 else:
     raise TestFailed, "dangerous instance method creation allowed"
 
+# Verify that instancemethod() doesn't allow keyword args
+try:
+    new.instancemethod(break_yolks, c, kw=1)
+except TypeError:
+    pass
+else:
+    raise TestFailed, "instancemethod shouldn't accept keyword args"
+
 # It's unclear what the semantics should be for a code object compiled at
 # module scope, but bound and run in a function.  In CPython, `c' is global
 # (by accident?) while in Jython, `c' is local.  The intent of the test
index f5224fec3a4624b1875be1546246ec38061f3aac..590868f0108d1955f690674e0a79283131978c9a 100644 (file)
@@ -1,32 +1,41 @@
-from test.test_support import verbose, TestFailed, TestSkipped
+from test.test_support import verbose, run_unittest
+import unittest
 import nis
 
-print 'nis.maps()'
-try:
-    maps = nis.maps()
-except nis.error, msg:
-    # NIS is probably not active, so this test isn't useful
-    if verbose:
-        raise TestFailed, msg
-    # only do this if running under the regression suite
-    raise TestSkipped, msg
+class NisTests(unittest.TestCase):
+    def test_maps(self):
+        try:
+            maps = nis.maps()
+        except nis.error, msg:
+            # NIS is probably not active, so this test isn't useful
+            if verbose:
+                self.fail("(failing because of verbose mode) %s" % msg)
+            return
+        try:
+            # On some systems, this map is only accessible to the
+            # super user
+            maps.remove("passwd.adjunct.byname")
+        except ValueError:
+            pass
 
-done = 0
-for nismap in maps:
-    if verbose:
-        print nismap
-    mapping = nis.cat(nismap)
-    for k, v in mapping.items():
-        if verbose:
-            print '    ', k, v
-        if not k:
-            continue
-        if nis.match(k, nismap) != v:
-            print "NIS match failed for key `%s' in map `%s'" % (k, nismap)
-        else:
-            # just test the one key, otherwise this test could take a
-            # very long time
-            done = 1
-            break
-    if done:
-        break
+        done = 0
+        for nismap in maps:
+            mapping = nis.cat(nismap)
+            for k, v in mapping.items():
+                if not k:
+                    continue
+                if nis.match(k, nismap) != v:
+                    self.fail("NIS match failed for key `%s' in map `%s'" % (k, nismap))
+                else:
+                    # just test the one key, otherwise this test could take a
+                    # very long time
+                    done = 1
+                    break
+            if done:
+                break
+
+def test_main():
+    run_unittest(NisTests)
+
+if __name__ == '__main__':
+    test_main()
index 742267f5f91486e1e5a21bf12016515f352eec2c..1a2f5d6ce725007a8dccaf158e4fa1d926c0b39c 100644 (file)
 # Python test set -- part 2, opcodes
 
-from test.test_support import TestFailed
-
-
-print '2. Opcodes'
-print 'XXX Not yet fully implemented'
-
-print '2.1 try inside for loop'
-n = 0
-for i in range(10):
-    n = n+i
-    try: 1/0
-    except NameError: pass
-    except ZeroDivisionError: pass
-    except TypeError: pass
-    try: pass
-    except: pass
-    try: pass
-    finally: pass
-    n = n+i
-if n != 90:
-    raise TestFailed, 'try inside for'
-
-
-print '2.2 raise class exceptions'
-
-class AClass(Exception): pass
-class BClass(AClass): pass
-class CClass(Exception): pass
-class DClass(AClass):
-    def __init__(self, ignore):
-        pass
-
-try: raise AClass()
-except: pass
-
-try: raise AClass()
-except AClass: pass
-
-try: raise BClass()
-except AClass: pass
-
-try: raise BClass()
-except CClass: raise TestFailed
-except: pass
-
-a = AClass()
-b = BClass()
-
-try: raise AClass, b
-except BClass, v:
-    if v != b: raise TestFailed, "v!=b"
-else: raise TestFailed, "no exception"
-
-try: raise b
-except AClass, v:
-    if v != b: raise TestFailed, "v!=b AClass"
-
-# not enough arguments
-##try:  raise BClass, a
-##except TypeError: pass
-
-try:  raise DClass, a
-except DClass, v:
-    if not isinstance(v, DClass):
-        raise TestFailed, "v not DClass"
-
-print '2.3 comparing function objects'
-
-f = eval('lambda: None')
-g = eval('lambda: None')
-if f == g: raise TestFailed, "functions should not be same"
-
-f = eval('lambda a: a')
-g = eval('lambda a: a')
-if f == g: raise TestFailed, "functions should not be same"
-
-f = eval('lambda a=1: a')
-g = eval('lambda a=1: a')
-if f == g: raise TestFailed, "functions should not be same"
-
-f = eval('lambda: 0')
-g = eval('lambda: 1')
-if f == g: raise TestFailed
-
-f = eval('lambda: None')
-g = eval('lambda a: None')
-if f == g: raise TestFailed
-
-f = eval('lambda a: None')
-g = eval('lambda b: None')
-if f == g: raise TestFailed
-
-f = eval('lambda a: None')
-g = eval('lambda a=None: None')
-if f == g: raise TestFailed
-
-f = eval('lambda a=0: None')
-g = eval('lambda a=1: None')
-if f == g: raise TestFailed
+from test.test_support import run_unittest
+import unittest
+
+class OpcodeTest(unittest.TestCase):
+
+    def test_try_inside_for_loop(self):
+        n = 0
+        for i in range(10):
+            n = n+i
+            try: 1/0
+            except NameError: pass
+            except ZeroDivisionError: pass
+            except TypeError: pass
+            try: pass
+            except: pass
+            try: pass
+            finally: pass
+            n = n+i
+        if n != 90:
+            self.fail('try inside for')
+
+    def test_raise_class_exceptions(self):
+
+        class AClass(Exception): pass
+        class BClass(AClass): pass
+        class CClass(Exception): pass
+        class DClass(AClass):
+            def __init__(self, ignore):
+                pass
+
+        try: raise AClass()
+        except: pass
+
+        try: raise AClass()
+        except AClass: pass
+
+        try: raise BClass()
+        except AClass: pass
+
+        try: raise BClass()
+        except CClass: self.fail()
+        except: pass
+
+        a = AClass()
+        b = BClass()
+
+        try: raise AClass, b
+        except BClass, v:
+            if v != b: self.fail("v!=b")
+        else: self.fail("no exception")
+
+        try: raise b
+        except AClass, v:
+            if v != b: self.fail("v!=b AClass")
+        else:
+            self.fail("no exception")
+
+        # not enough arguments
+        ##try:  raise BClass, a
+        ##except TypeError: pass
+        ##else: self.fail("no exception")
+
+        try:  raise DClass, a
+        except DClass, v:
+            self.assert_(isinstance(v, DClass))
+        else:
+            self.fail("no exception")
+
+    def test_compare_function_objects(self):
+
+        f = eval('lambda: None')
+        g = eval('lambda: None')
+        self.failIf(f == g)
+
+        f = eval('lambda a: a')
+        g = eval('lambda a: a')
+        self.failIf(f == g)
+
+        f = eval('lambda a=1: a')
+        g = eval('lambda a=1: a')
+        self.failIf(f == g)
+
+        f = eval('lambda: 0')
+        g = eval('lambda: 1')
+        self.failIf(f == g)
+
+        f = eval('lambda: None')
+        g = eval('lambda a: None')
+        self.failIf(f == g)
+
+        f = eval('lambda a: None')
+        g = eval('lambda b: None')
+        self.failIf(f == g)
+
+        f = eval('lambda a: None')
+        g = eval('lambda a=None: None')
+        self.failIf(f == g)
+
+        f = eval('lambda a=0: None')
+        g = eval('lambda a=1: None')
+        self.failIf(f == g)
+
+
+def test_main():
+    run_unittest(OpcodeTest)
+
+if __name__ == '__main__':
+    test_main()
index a8b8550c3c9406e940f9bd2eda0957d5c295fb2f..6471f58ce514b6b501bab8e72eac40e4dcdc4633 100644 (file)
@@ -1,19 +1,23 @@
 # Test to see if openpty works. (But don't worry if it isn't available.)
 
-import os
-from test.test_support import verbose, TestFailed, TestSkipped
+import os, unittest
+from test.test_support import run_unittest, TestSkipped
 
-try:
-    if verbose:
-        print "Calling os.openpty()"
-    master, slave = os.openpty()
-    if verbose:
-        print "(master, slave) = (%d, %d)"%(master, slave)
-except AttributeError:
+if not hasattr(os, "openpty"):
     raise TestSkipped, "No openpty() available."
 
-if not os.isatty(slave):
-    raise TestFailed, "Slave-end of pty is not a terminal."
 
-os.write(slave, 'Ping!')
-print os.read(master, 1024)
+class OpenptyTest(unittest.TestCase):
+    def test(self):
+        master, slave = os.openpty()
+        if not os.isatty(slave):
+            self.fail("Slave-end of pty is not a terminal.")
+
+        os.write(slave, 'Ping!')
+        self.assertEqual(os.read(master, 1024), 'Ping!')
+
+def test_main():
+    run_unittest(OpenptyTest)
+
+if __name__ == '__main__':
+    test_main()
index bf0e196e67152cd2a56d1a8b3ce56abb238f6a24..1c87d0601ddb04ec02709c9aa5cb6b0022ea9b4d 100644 (file)
@@ -223,6 +223,23 @@ class StatAttributeTests(unittest.TestCase):
         except TypeError:
             pass
 
+    def test_utime_dir(self):
+        delta = 1000000
+        st = os.stat(test_support.TESTFN)
+        # round to int, because some systems may support sub-second
+        # time stamps in stat, but not in utime.
+        os.utime(test_support.TESTFN, (st.st_atime, int(st.st_mtime-delta)))
+        st2 = os.stat(test_support.TESTFN)
+        self.assertEquals(st2.st_mtime, int(st.st_mtime-delta))
+
+    # Restrict test to Win32, since there is no guarantee other
+    # systems support centiseconds
+    if sys.platform == 'win32':
+        def test_1565150(self):
+            t1 = 1159195039.25
+            os.utime(self.fname, (t1, t1))
+            self.assertEquals(os.stat(self.fname).st_mtime, t1)
+
 from test import mapping_tests
 
 class EnvironTests(mapping_tests.BasicTestMappingProtocol):
index 96384cd83e09d88cf5beda4be70a3090f9a21d81..0bf12186a0f7de8f3ffff8aaf274278352220c18 100644 (file)
@@ -183,6 +183,44 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase):
     def test_assert(self):
         self.check_suite("assert alo < ahi and blo < bhi\n")
 
+    def test_position(self):
+        # An absolutely minimal test of position information.  Better
+        # tests would be a big project.
+        code = "def f(x):\n    return x + 1\n"
+        st1 = parser.suite(code)
+        st2 = st1.totuple(line_info=1, col_info=1)
+
+        def walk(tree):
+            node_type = tree[0]
+            next = tree[1]
+            if isinstance(next, tuple):
+                for elt in tree[1:]:
+                    for x in walk(elt):
+                        yield x
+            else:
+                yield tree
+
+        terminals = list(walk(st2))
+        self.assertEqual([
+            (1, 'def', 1, 0),
+            (1, 'f', 1, 4),
+            (7, '(', 1, 5),
+            (1, 'x', 1, 6),
+            (8, ')', 1, 7),
+            (11, ':', 1, 8),
+            (4, '', 1, 9),
+            (5, '', 2, -1),
+            (1, 'return', 2, 4),
+            (1, 'x', 2, 11),
+            (14, '+', 2, 13),
+            (2, '1', 2, 15),
+            (4, '', 2, 16),
+            (6, '', 2, -1),
+            (4, '', 2, -1),
+            (0, '', 2, -1)],
+                         terminals)
+
+
 #
 #  Second, we take *invalid* trees and make sure we get ParserError
 #  rejections for them.
index be7d4e8fbe1f1bac8da027681cae2a191b0984dc..779a20a51250c27c678a0623e97e3c74b0aa5a4d 100644 (file)
@@ -160,6 +160,41 @@ class TestTranforms(unittest.TestCase):
         self.assert_('(None)' not in asm)
         self.assertEqual(asm.split().count('RETURN_VALUE'), 1)
 
+    def test_elim_jump_to_return(self):
+        # JUMP_FORWARD to RETURN -->  RETURN
+        def f(cond, true_value, false_value):
+            return true_value if cond else false_value
+        asm = disassemble(f)
+        self.assert_('JUMP_FORWARD' not in asm)
+        self.assert_('JUMP_ABSOLUTE' not in asm)
+        self.assertEqual(asm.split().count('RETURN_VALUE'), 2)
+
+    def test_elim_jump_after_return1(self):
+        # Eliminate dead code: jumps immediately after returns can't be reached
+        def f(cond1, cond2):
+            if cond1: return 1
+            if cond2: return 2
+            while 1:
+                return 3
+            while 1:
+                if cond1: return 4
+                return 5
+            return 6
+        asm = disassemble(f)
+        self.assert_('JUMP_FORWARD' not in asm)
+        self.assert_('JUMP_ABSOLUTE' not in asm)
+        self.assertEqual(asm.split().count('RETURN_VALUE'), 6)
+
+    def test_elim_jump_after_return2(self):
+        # Eliminate dead code: jumps immediately after returns can't be reached
+        def f(cond1, cond2):
+            while 1:
+                if cond1: return 4
+        asm = disassemble(f)
+        self.assert_('JUMP_FORWARD' not in asm)
+        # There should be one jump for the while loop.
+        self.assertEqual(asm.split().count('JUMP_ABSOLUTE'), 1)
+        self.assertEqual(asm.split().count('RETURN_VALUE'), 2)
 
 
 def test_main(verbose=None):
index 73cffd28e5f032095ad57cb0f2db475ae779c3ab..75610b6e2a5df904595db40642f82bb03848be6d 100644 (file)
@@ -15,8 +15,7 @@ class ExceptionClassTests(unittest.TestCase):
         self.failUnless(issubclass(Exception, object))
 
     def verify_instance_interface(self, ins):
-        for attr in ("args", "message", "__str__", "__unicode__", "__repr__",
-                "__getitem__"):
+        for attr in ("args", "message", "__str__", "__repr__", "__getitem__"):
             self.failUnless(hasattr(ins, attr), "%s missing %s attribute" %
                     (ins.__class__.__name__, attr))
 
index 3a48bcecaf49153dca0e257547eb5c9e8beeb0de..60cd3f4b05be498b4eff5262ec7a171727138d69 100644 (file)
@@ -1,7 +1,7 @@
 # Test case for the os.poll() function
 
-import sys, os, select, random
-from test.test_support import verify, verbose, TestSkipped, TESTFN
+import sys, os, select, random, unittest
+from test.test_support import TestSkipped, TESTFN, run_unittest
 
 try:
     select.poll
@@ -16,177 +16,141 @@ def find_ready_matching(ready, flag):
             match.append(fd)
     return match
 
-def test_poll1():
-    """Basic functional test of poll object
-
-    Create a bunch of pipe and test that poll works with them.
-    """
-    print 'Running poll test 1'
-    p = select.poll()
-
-    NUM_PIPES = 12
-    MSG = " This is a test."
-    MSG_LEN = len(MSG)
-    readers = []
-    writers = []
-    r2w = {}
-    w2r = {}
-
-    for i in range(NUM_PIPES):
-        rd, wr = os.pipe()
-        p.register(rd, select.POLLIN)
-        p.register(wr, select.POLLOUT)
-        readers.append(rd)
-        writers.append(wr)
-        r2w[rd] = wr
-        w2r[wr] = rd
-
-    while writers:
-        ready = p.poll()
-        ready_writers = find_ready_matching(ready, select.POLLOUT)
-        if not ready_writers:
-            raise RuntimeError, "no pipes ready for writing"
-        wr = random.choice(ready_writers)
-        os.write(wr, MSG)
-
-        ready = p.poll()
-        ready_readers = find_ready_matching(ready, select.POLLIN)
-        if not ready_readers:
-            raise RuntimeError, "no pipes ready for reading"
-        rd = random.choice(ready_readers)
-        buf = os.read(rd, MSG_LEN)
-        verify(len(buf) == MSG_LEN)
-        print buf
-        os.close(r2w[rd]) ; os.close( rd )
-        p.unregister( r2w[rd] )
-        p.unregister( rd )
-        writers.remove(r2w[rd])
-
-    poll_unit_tests()
-    print 'Poll test 1 complete'
-
-def poll_unit_tests():
-    # returns NVAL for invalid file descriptor
-    FD = 42
-    try:
-        os.close(FD)
-    except OSError:
-        pass
-    p = select.poll()
-    p.register(FD)
-    r = p.poll()
-    verify(r[0] == (FD, select.POLLNVAL))
-
-    f = open(TESTFN, 'w')
-    fd = f.fileno()
-    p = select.poll()
-    p.register(f)
-    r = p.poll()
-    verify(r[0][0] == fd)
-    f.close()
-    r = p.poll()
-    verify(r[0] == (fd, select.POLLNVAL))
-    os.unlink(TESTFN)
-
-    # type error for invalid arguments
-    p = select.poll()
-    try:
-        p.register(p)
-    except TypeError:
-        pass
-    else:
-        print "Bogus register call did not raise TypeError"
-    try:
-        p.unregister(p)
-    except TypeError:
-        pass
-    else:
-        print "Bogus unregister call did not raise TypeError"
-
-    # can't unregister non-existent object
-    p = select.poll()
-    try:
-        p.unregister(3)
-    except KeyError:
-        pass
-    else:
-        print "Bogus unregister call did not raise KeyError"
-
-    # Test error cases
-    pollster = select.poll()
-    class Nope:
-        pass
-
-    class Almost:
-        def fileno(self):
-            return 'fileno'
-
-    try:
-        pollster.register( Nope(), 0 )
-    except TypeError: pass
-    else: print 'expected TypeError exception, not raised'
-
-    try:
-        pollster.register( Almost(), 0 )
-    except TypeError: pass
-    else: print 'expected TypeError exception, not raised'
-
-
-# Another test case for poll().  This is copied from the test case for
-# select(), modified to use poll() instead.
-
-def test_poll2():
-    print 'Running poll test 2'
-    cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done'
-    p = os.popen(cmd, 'r')
-    pollster = select.poll()
-    pollster.register( p, select.POLLIN )
-    for tout in (0, 1000, 2000, 4000, 8000, 16000) + (-1,)*10:
-        if verbose:
-            print 'timeout =', tout
-        fdlist = pollster.poll(tout)
-        if (fdlist == []):
-            continue
-        fd, flags = fdlist[0]
-        if flags & select.POLLHUP:
-            line = p.readline()
-            if line != "":
-                print 'error: pipe seems to be closed, but still returns data'
-            continue
-
-        elif flags & select.POLLIN:
-            line = p.readline()
-            if verbose:
-                print repr(line)
-            if not line:
-                if verbose:
-                    print 'EOF'
-                break
-            continue
-        else:
-            print 'Unexpected return value from select.poll:', fdlist
-    p.close()
-    print 'Poll test 2 complete'
-
-def test_poll3():
-    # test int overflow
-    print 'Running poll test 3'
-    pollster = select.poll()
-    pollster.register(1)
-
-    try:
-        pollster.poll(1L << 64)
-    except OverflowError:
-        pass
-    else:
-        print 'Expected OverflowError with excessive timeout'
-
-    x = 2 + 3
-    if x != 5:
-        print 'Overflow must have occurred'
-    print 'Poll test 3 complete'
-
-
-test_poll1()
-test_poll2()
-test_poll3()
+class PollTests(unittest.TestCase):
+
+    def test_poll1(self):
+        # Basic functional test of poll object
+        # Create a bunch of pipe and test that poll works with them.
+
+        p = select.poll()
+
+        NUM_PIPES = 12
+        MSG = " This is a test."
+        MSG_LEN = len(MSG)
+        readers = []
+        writers = []
+        r2w = {}
+        w2r = {}
+
+        for i in range(NUM_PIPES):
+            rd, wr = os.pipe()
+            p.register(rd, select.POLLIN)
+            p.register(wr, select.POLLOUT)
+            readers.append(rd)
+            writers.append(wr)
+            r2w[rd] = wr
+            w2r[wr] = rd
+
+        bufs = []
+
+        while writers:
+            ready = p.poll()
+            ready_writers = find_ready_matching(ready, select.POLLOUT)
+            if not ready_writers:
+                raise RuntimeError, "no pipes ready for writing"
+            wr = random.choice(ready_writers)
+            os.write(wr, MSG)
+
+            ready = p.poll()
+            ready_readers = find_ready_matching(ready, select.POLLIN)
+            if not ready_readers:
+                raise RuntimeError, "no pipes ready for reading"
+            rd = random.choice(ready_readers)
+            buf = os.read(rd, MSG_LEN)
+            self.assertEqual(len(buf), MSG_LEN)
+            bufs.append(buf)
+            os.close(r2w[rd]) ; os.close( rd )
+            p.unregister( r2w[rd] )
+            p.unregister( rd )
+            writers.remove(r2w[rd])
+
+        self.assertEqual(bufs, [MSG] * NUM_PIPES)
+
+    def poll_unit_tests(self):
+        # returns NVAL for invalid file descriptor
+        FD = 42
+        try:
+            os.close(FD)
+        except OSError:
+            pass
+        p = select.poll()
+        p.register(FD)
+        r = p.poll()
+        self.assertEqual(r[0], (FD, select.POLLNVAL))
+
+        f = open(TESTFN, 'w')
+        fd = f.fileno()
+        p = select.poll()
+        p.register(f)
+        r = p.poll()
+        self.assertEqual(r[0][0], fd)
+        f.close()
+        r = p.poll()
+        self.assertEqual(r[0], (fd, select.POLLNVAL))
+        os.unlink(TESTFN)
+
+        # type error for invalid arguments
+        p = select.poll()
+        self.assertRaises(TypeError, p.register, p)
+        self.assertRaises(TypeError, p.unregister, p)
+
+        # can't unregister non-existent object
+        p = select.poll()
+        self.assertRaises(KeyError, p.unregister, 3)
+
+        # Test error cases
+        pollster = select.poll()
+        class Nope:
+            pass
+
+        class Almost:
+            def fileno(self):
+                return 'fileno'
+
+        self.assertRaises(TypeError, pollster.register, Nope(), 0)
+        self.assertRaises(TypeError, pollster.register, Almost(), 0)
+
+    # Another test case for poll().  This is copied from the test case for
+    # select(), modified to use poll() instead.
+
+    def test_poll2(self):
+        cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done'
+        p = os.popen(cmd, 'r')
+        pollster = select.poll()
+        pollster.register( p, select.POLLIN )
+        for tout in (0, 1000, 2000, 4000, 8000, 16000) + (-1,)*10:
+            fdlist = pollster.poll(tout)
+            if (fdlist == []):
+                continue
+            fd, flags = fdlist[0]
+            if flags & select.POLLHUP:
+                line = p.readline()
+                if line != "":
+                    self.fail('error: pipe seems to be closed, but still returns data')
+                continue
+
+            elif flags & select.POLLIN:
+                line = p.readline()
+                if not line:
+                    break
+                continue
+            else:
+                self.fail('Unexpected return value from select.poll: %s' % fdlist)
+        p.close()
+
+    def test_poll3(self):
+        # test int overflow
+        pollster = select.poll()
+        pollster.register(1)
+
+        self.assertRaises(OverflowError, pollster.poll, 1L << 64)
+
+        x = 2 + 3
+        if x != 5:
+            self.fail('Overflow must have occurred')
+
+def test_main():
+    run_unittest(PollTests)
+
+if __name__ == '__main__':
+    test_main()
index 01703b592ded3dca9ddb7713d00a957c7574dcb2..7c9d4aac0681ec42e0a7ac1b7c76eeef9419a8f5 100644 (file)
@@ -95,6 +95,9 @@ class PyclbrTest(TestCase):
             py_item = getattr(module, name)
             if isinstance(value, pyclbr.Function):
                 self.assert_(isinstance(py_item, (FunctionType, BuiltinFunctionType)))
+                if py_item.__module__ != moduleName:
+                    continue   # skip functions that came from somewhere else
+                self.assertEquals(py_item.__module__, value.module)
             else:
                 self.failUnless(isinstance(py_item, (ClassType, type)))
                 if py_item.__module__ != moduleName:
index e4e592ae02ac98e90bba4d9344bccaa6569d5c54..777e85a18c432e3e960201c72e4579da440b7086 100644 (file)
-from test.test_support import verify, TestFailed, check_syntax, vereq
+import unittest
+from test.test_support import check_syntax_error, run_unittest
 
 import warnings
+warnings.filterwarnings("ignore", r"import \*", SyntaxWarning, "<test string>")
 warnings.filterwarnings("ignore", r"import \*", SyntaxWarning, "<string>")
 
-print "1. simple nesting"
+class ScopeTests(unittest.TestCase):
 
-def make_adder(x):
-    def adder(y):
-        return x + y
-    return adder
+    def testSimpleNesting(self):
 
-inc = make_adder(1)
-plus10 = make_adder(10)
+        def make_adder(x):
+            def adder(y):
+                return x + y
+            return adder
 
-vereq(inc(1), 2)
-vereq(plus10(-2), 8)
+        inc = make_adder(1)
+        plus10 = make_adder(10)
 
-print "2. extra nesting"
+        self.assertEqual(inc(1), 2)
+        self.assertEqual(plus10(-2), 8)
 
-def make_adder2(x):
-    def extra(): # check freevars passing through non-use scopes
-        def adder(y):
-            return x + y
-        return adder
-    return extra()
+    def testExtraNesting(self):
 
-inc = make_adder2(1)
-plus10 = make_adder2(10)
+        def make_adder2(x):
+            def extra(): # check freevars passing through non-use scopes
+                def adder(y):
+                    return x + y
+                return adder
+            return extra()
 
-vereq(inc(1), 2)
-vereq(plus10(-2), 8)
+        inc = make_adder2(1)
+        plus10 = make_adder2(10)
 
-print "3. simple nesting + rebinding"
+        self.assertEqual(inc(1), 2)
+        self.assertEqual(plus10(-2), 8)
 
-def make_adder3(x):
-    def adder(y):
-        return x + y
-    x = x + 1 # check tracking of assignment to x in defining scope
-    return adder
+    def testSimpleAndRebinding(self):
 
-inc = make_adder3(0)
-plus10 = make_adder3(9)
+        def make_adder3(x):
+            def adder(y):
+                return x + y
+            x = x + 1 # check tracking of assignment to x in defining scope
+            return adder
 
-vereq(inc(1), 2)
-vereq(plus10(-2), 8)
+        inc = make_adder3(0)
+        plus10 = make_adder3(9)
 
-print "4. nesting with global but no free"
+        self.assertEqual(inc(1), 2)
+        self.assertEqual(plus10(-2), 8)
 
-def make_adder4(): # XXX add exta level of indirection
-    def nest():
-        def nest():
-            def adder(y):
-                return global_x + y # check that plain old globals work
-            return adder
-        return nest()
-    return nest()
+    def testNestingGlobalNoFree(self):
 
-global_x = 1
-adder = make_adder4()
-vereq(adder(1), 2)
+        def make_adder4(): # XXX add exta level of indirection
+            def nest():
+                def nest():
+                    def adder(y):
+                        return global_x + y # check that plain old globals work
+                    return adder
+                return nest()
+            return nest()
 
-global_x = 10
-vereq(adder(-2), 8)
+        global_x = 1
+        adder = make_adder4()
+        self.assertEqual(adder(1), 2)
 
-print "5. nesting through class"
+        global_x = 10
+        self.assertEqual(adder(-2), 8)
 
-def make_adder5(x):
-    class Adder:
-        def __call__(self, y):
-            return x + y
-    return Adder()
+    def testNestingThroughClass(self):
 
-inc = make_adder5(1)
-plus10 = make_adder5(10)
+        def make_adder5(x):
+            class Adder:
+                def __call__(self, y):
+                    return x + y
+            return Adder()
 
-vereq(inc(1), 2)
-vereq(plus10(-2), 8)
+        inc = make_adder5(1)
+        plus10 = make_adder5(10)
 
-print "6. nesting plus free ref to global"
+        self.assertEqual(inc(1), 2)
+        self.assertEqual(plus10(-2), 8)
 
-def make_adder6(x):
-    global global_nest_x
-    def adder(y):
-        return global_nest_x + y
-    global_nest_x = x
-    return adder
+    def testNestingPlusFreeRefToGlobal(self):
 
-inc = make_adder6(1)
-plus10 = make_adder6(10)
+        def make_adder6(x):
+            global global_nest_x
+            def adder(y):
+                return global_nest_x + y
+            global_nest_x = x
+            return adder
 
-vereq(inc(1), 11) # there's only one global
-vereq(plus10(-2), 8)
+        inc = make_adder6(1)
+        plus10 = make_adder6(10)
 
-print "7. nearest enclosing scope"
+        self.assertEqual(inc(1), 11) # there's only one global
+        self.assertEqual(plus10(-2), 8)
 
-def f(x):
-    def g(y):
-        x = 42 # check that this masks binding in f()
-        def h(z):
-            return x + z
-        return h
-    return g(2)
-
-test_func = f(10)
-vereq(test_func(5), 47)
-
-print "8. mixed freevars and cellvars"
-
-def identity(x):
-    return x
-
-def f(x, y, z):
-    def g(a, b, c):
-        a = a + x # 3
-        def h():
-            # z * (4 + 9)
-            # 3 * 13
-            return identity(z * (b + y))
-        y = c + z # 9
-        return h
-    return g
-
-g = f(1, 2, 3)
-h = g(2, 4, 6)
-vereq(h(), 39)
-
-print "9. free variable in method"
-
-def test():
-    method_and_var = "var"
-    class Test:
-        def method_and_var(self):
-            return "method"
-        def test(self):
-            return method_and_var
-        def actual_global(self):
-            return str("global")
-        def str(self):
-            return str(self)
-    return Test()
-
-t = test()
-vereq(t.test(), "var")
-vereq(t.method_and_var(), "method")
-vereq(t.actual_global(), "global")
-
-method_and_var = "var"
-class Test:
-    # this class is not nested, so the rules are different
-    def method_and_var(self):
-        return "method"
-    def test(self):
-        return method_and_var
-    def actual_global(self):
-        return str("global")
-    def str(self):
-        return str(self)
-
-t = Test()
-vereq(t.test(), "var")
-vereq(t.method_and_var(), "method")
-vereq(t.actual_global(), "global")
-
-print "10. recursion"
+    def testNearestEnclosingScope(self):
 
-def f(x):
-    def fact(n):
-        if n == 0:
-            return 1
-        else:
-            return n * fact(n - 1)
-    if x >= 0:
-        return fact(x)
-    else:
-        raise ValueError, "x must be >= 0"
+        def f(x):
+            def g(y):
+                x = 42 # check that this masks binding in f()
+                def h(z):
+                    return x + z
+                return h
+            return g(2)
 
-vereq(f(6), 720)
+        test_func = f(10)
+        self.assertEqual(test_func(5), 47)
 
+    def testMixedFreevarsAndCellvars(self):
 
-print "11. unoptimized namespaces"
+        def identity(x):
+            return x
 
-check_syntax("""\
+        def f(x, y, z):
+            def g(a, b, c):
+                a = a + x # 3
+                def h():
+                    # z * (4 + 9)
+                    # 3 * 13
+                    return identity(z * (b + y))
+                y = c + z # 9
+                return h
+            return g
+
+        g = f(1, 2, 3)
+        h = g(2, 4, 6)
+        self.assertEqual(h(), 39)
+
+    def testFreeVarInMethod(self):
+
+        def test():
+            method_and_var = "var"
+            class Test:
+                def method_and_var(self):
+                    return "method"
+                def test(self):
+                    return method_and_var
+                def actual_global(self):
+                    return str("global")
+                def str(self):
+                    return str(self)
+            return Test()
+
+        t = test()
+        self.assertEqual(t.test(), "var")
+        self.assertEqual(t.method_and_var(), "method")
+        self.assertEqual(t.actual_global(), "global")
+
+        method_and_var = "var"
+        class Test:
+            # this class is not nested, so the rules are different
+            def method_and_var(self):
+                return "method"
+            def test(self):
+                return method_and_var
+            def actual_global(self):
+                return str("global")
+            def str(self):
+                return str(self)
+
+        t = Test()
+        self.assertEqual(t.test(), "var")
+        self.assertEqual(t.method_and_var(), "method")
+        self.assertEqual(t.actual_global(), "global")
+
+    def testRecursion(self):
+
+        def f(x):
+            def fact(n):
+                if n == 0:
+                    return 1
+                else:
+                    return n * fact(n - 1)
+            if x >= 0:
+                return fact(x)
+            else:
+                raise ValueError, "x must be >= 0"
+
+        self.assertEqual(f(6), 720)
+
+
+    def testUnoptimizedNamespaces(self):
+
+        check_syntax_error(self, """\
 def unoptimized_clash1(strip):
     def f(s):
         from string import *
@@ -188,7 +192,7 @@ def unoptimized_clash1(strip):
     return f
 """)
 
-check_syntax("""\
+        check_syntax_error(self, """\
 def unoptimized_clash2():
     from string import *
     def f(s):
@@ -196,7 +200,7 @@ def unoptimized_clash2():
     return f
 """)
 
-check_syntax("""\
+        check_syntax_error(self, """\
 def unoptimized_clash2():
     from string import *
     def g():
@@ -205,23 +209,23 @@ def unoptimized_clash2():
         return f
 """)
 
-check_syntax("""\
+        check_syntax_error(self, """\
 def f(x):
     def g():
         return x
     del x # can't del name
 """)
 
-check_syntax("""\
+        check_syntax_error(self, """\
 def f():
     def g():
-         from string import *
-         return strip # global or local?
+        from string import *
+        return strip # global or local?
 """)
 
-# and verify a few cases that should work
+        # and verify a few cases that should work
 
-exec("""
+        exec("""
 def noproblem1():
     from string import *
     f = lambda x:x
@@ -238,59 +242,60 @@ def noproblem3():
         y = x
 """)
 
-print "12. lambdas"
-
-f1 = lambda x: lambda y: x + y
-inc = f1(1)
-plus10 = f1(10)
-vereq(inc(1), 2)
-vereq(plus10(5), 15)
-
-f2 = lambda x: (lambda : lambda y: x + y)()
-inc = f2(1)
-plus10 = f2(10)
-vereq(inc(1), 2)
-vereq(plus10(5), 15)
-
-f3 = lambda x: lambda y: global_x + y
-global_x = 1
-inc = f3(None)
-vereq(inc(2), 3)
-
-f8 = lambda x, y, z: lambda a, b, c: lambda : z * (b + y)
-g = f8(1, 2, 3)
-h = g(2, 4, 6)
-vereq(h(), 18)
-
-print "13. UnboundLocal"
-
-def errorInOuter():
-    print y
-    def inner():
-        return y
-    y = 1
-
-def errorInInner():
-    def inner():
-        return y
-    inner()
-    y = 1
-
-try:
-    errorInOuter()
-except UnboundLocalError:
-    pass
-else:
-    raise TestFailed
+    def testLambdas(self):
+
+        f1 = lambda x: lambda y: x + y
+        inc = f1(1)
+        plus10 = f1(10)
+        self.assertEqual(inc(1), 2)
+        self.assertEqual(plus10(5), 15)
+
+        f2 = lambda x: (lambda : lambda y: x + y)()
+        inc = f2(1)
+        plus10 = f2(10)
+        self.assertEqual(inc(1), 2)
+        self.assertEqual(plus10(5), 15)
+
+        f3 = lambda x: lambda y: global_x + y
+        global_x = 1
+        inc = f3(None)
+        self.assertEqual(inc(2), 3)
+
+        f8 = lambda x, y, z: lambda a, b, c: lambda : z * (b + y)
+        g = f8(1, 2, 3)
+        h = g(2, 4, 6)
+        self.assertEqual(h(), 18)
+
+    def testUnboundLocal(self):
+
+        def errorInOuter():
+            print y
+            def inner():
+                return y
+            y = 1
+
+        def errorInInner():
+            def inner():
+                return y
+            inner()
+            y = 1
+
+        try:
+            errorInOuter()
+        except UnboundLocalError:
+            pass
+        else:
+            self.fail()
 
-try:
-    errorInInner()
-except NameError:
-    pass
-else:
-    raise TestFailed
+        try:
+            errorInInner()
+        except NameError:
+            pass
+        else:
+            self.fail()
 
-# test for bug #1501934: incorrect LOAD/STORE_GLOBAL generation
+        # test for bug #1501934: incorrect LOAD/STORE_GLOBAL generation
+        exec("""
 global_x = 1
 def f():
     global_x += 1
@@ -299,34 +304,36 @@ try:
 except UnboundLocalError:
     pass
 else:
-    raise TestFailed, 'scope of global_x not correctly determined'
+    fail('scope of global_x not correctly determined')
+""", {'fail': self.fail})
 
-print "14. complex definitions"
+    def testComplexDefinitions(self):
 
-def makeReturner(*lst):
-    def returner():
-        return lst
-    return returner
+        def makeReturner(*lst):
+            def returner():
+                return lst
+            return returner
 
-vereq(makeReturner(1,2,3)(), (1,2,3))
+        self.assertEqual(makeReturner(1,2,3)(), (1,2,3))
 
-def makeReturner2(**kwargs):
-    def returner():
-        return kwargs
-    return returner
+        def makeReturner2(**kwargs):
+            def returner():
+                return kwargs
+            return returner
 
-vereq(makeReturner2(a=11)()['a'], 11)
+        self.assertEqual(makeReturner2(a=11)()['a'], 11)
 
-def makeAddPair((a, b)):
-    def addPair((c, d)):
-        return (a + c, b + d)
-    return addPair
+        def makeAddPair((a, b)):
+            def addPair((c, d)):
+                return (a + c, b + d)
+            return addPair
 
-vereq(makeAddPair((1, 2))((100, 200)), (101,202))
+        self.assertEqual(makeAddPair((1, 2))((100, 200)), (101,202))
 
-print "15. scope of global statements"
+    def testScopeOfGlobalStmt(self):
 # Examples posted by Samuele Pedroni to python-dev on 3/1/2001
 
+        exec("""\
 # I
 x = 7
 def f():
@@ -339,8 +346,8 @@ def f():
             return h()
         return i()
     return g()
-vereq(f(), 7)
-vereq(x, 7)
+self.assertEqual(f(), 7)
+self.assertEqual(x, 7)
 
 # II
 x = 7
@@ -354,8 +361,8 @@ def f():
             return h()
         return i()
     return g()
-vereq(f(), 2)
-vereq(x, 7)
+self.assertEqual(f(), 2)
+self.assertEqual(x, 7)
 
 # III
 x = 7
@@ -370,8 +377,8 @@ def f():
             return h()
         return i()
     return g()
-vereq(f(), 2)
-vereq(x, 2)
+self.assertEqual(f(), 2)
+self.assertEqual(x, 2)
 
 # IV
 x = 7
@@ -386,8 +393,8 @@ def f():
             return h()
         return i()
     return g()
-vereq(f(), 2)
-vereq(x, 2)
+self.assertEqual(f(), 2)
+self.assertEqual(x, 2)
 
 # XXX what about global statements in class blocks?
 # do they affect methods?
@@ -402,34 +409,36 @@ class Global:
         return x
 
 g = Global()
-vereq(g.get(), 13)
+self.assertEqual(g.get(), 13)
 g.set(15)
-vereq(g.get(), 13)
+self.assertEqual(g.get(), 13)
+""")
 
-print "16. check leaks"
+    def testLeaks(self):
 
-class Foo:
-    count = 0
+        class Foo:
+            count = 0
 
-    def __init__(self):
-        Foo.count += 1
+            def __init__(self):
+                Foo.count += 1
 
-    def __del__(self):
-        Foo.count -= 1
+            def __del__(self):
+                Foo.count -= 1
 
-def f1():
-    x = Foo()
-    def f2():
-        return x
-    f2()
+        def f1():
+            x = Foo()
+            def f2():
+                return x
+            f2()
 
-for i in range(100):
-    f1()
+        for i in range(100):
+            f1()
 
-vereq(Foo.count, 0)
+        self.assertEqual(Foo.count, 0)
 
-print "17. class and global"
+    def testClassAndGlobal(self):
 
+        exec("""\
 def test(x):
     class Foo:
         global x
@@ -438,9 +447,9 @@ def test(x):
     return Foo()
 
 x = 0
-vereq(test(6)(2), 8)
+self.assertEqual(test(6)(2), 8)
 x = -1
-vereq(test(3)(2), 5)
+self.assertEqual(test(3)(2), 5)
 
 looked_up_by_load_name = False
 class X:
@@ -449,104 +458,106 @@ class X:
     locals()['looked_up_by_load_name'] = True
     passed = looked_up_by_load_name
 
-verify(X.passed)
+self.assert_(X.passed)
+""")
 
-print "18. verify that locals() works"
+    def testLocalsFunction(self):
 
-def f(x):
-    def g(y):
-        def h(z):
-            return y + z
-        w = x + y
-        y += 3
-        return locals()
-    return g
+        def f(x):
+            def g(y):
+                def h(z):
+                    return y + z
+                w = x + y
+                y += 3
+                return locals()
+            return g
 
-d = f(2)(4)
-verify('h' in d)
-del d['h']
-vereq(d, {'x': 2, 'y': 7, 'w': 6})
+        d = f(2)(4)
+        self.assert_('h' in d)
+        del d['h']
+        self.assertEqual(d, {'x': 2, 'y': 7, 'w': 6})
 
-print "19. var is bound and free in class"
+    def testBoundAndFree(self):
+        # var is bound and free in class
 
-def f(x):
-    class C:
-        def m(self):
-            return x
-        a = x
-    return C
+        def f(x):
+            class C:
+                def m(self):
+                    return x
+                a = x
+            return C
 
-inst = f(3)()
-vereq(inst.a, inst.m())
+        inst = f(3)()
+        self.assertEqual(inst.a, inst.m())
 
-print "20. interaction with trace function"
+    def testInteractionWithTraceFunc(self):
 
-import sys
-def tracer(a,b,c):
-    return tracer
+        import sys
+        def tracer(a,b,c):
+            return tracer
 
-def adaptgetter(name, klass, getter):
-    kind, des = getter
-    if kind == 1:       # AV happens when stepping from this line to next
-        if des == "":
-            des = "_%s__%s" % (klass.__name__, name)
-        return lambda obj: getattr(obj, des)
+        def adaptgetter(name, klass, getter):
+            kind, des = getter
+            if kind == 1:       # AV happens when stepping from this line to next
+                if des == "":
+                    des = "_%s__%s" % (klass.__name__, name)
+                return lambda obj: getattr(obj, des)
 
-class TestClass:
-    pass
+        class TestClass:
+            pass
 
-sys.settrace(tracer)
-adaptgetter("foo", TestClass, (1, ""))
-sys.settrace(None)
+        sys.settrace(tracer)
+        adaptgetter("foo", TestClass, (1, ""))
+        sys.settrace(None)
 
-try: sys.settrace()
-except TypeError: pass
-else: raise TestFailed, 'sys.settrace() did not raise TypeError'
+        self.assertRaises(TypeError, sys.settrace)
 
-print "20. eval and exec with free variables"
+    def testEvalExecFreeVars(self):
 
-def f(x):
-    return lambda: x + 1
+        def f(x):
+            return lambda: x + 1
 
-g = f(3)
-try:
-    eval(g.func_code)
-except TypeError:
-    pass
-else:
-    print "eval() should have failed, because code contained free vars"
+        g = f(3)
+        self.assertRaises(TypeError, eval, g.func_code)
 
-try:
-    exec(g.func_code)
-except TypeError:
-    pass
-else:
-    print "exec should have failed, because code contained free vars"
+        try:
+            exec(g.func_code, {})
+        except TypeError:
+            pass
+        else:
+            self.fail("exec should have failed, because code contained free vars")
 
-print "21. list comprehension with local variables"
+    def testListCompLocalVars(self):
 
-try:
-    print bad
-except NameError:
-    pass
-else:
-    print "bad should not be defined"
+        try:
+            print bad
+        except NameError:
+            pass
+        else:
+            print "bad should not be defined"
 
-def x():
-    [bad for s in 'a b' for bad in s.split()]
+        def x():
+            [bad for s in 'a b' for bad in s.split()]
 
-x()
-try:
-    print bad
-except NameError:
-    pass
+        x()
+        try:
+            print bad
+        except NameError:
+            pass
 
-print "22. eval with free variables"
+    def testEvalFreeVars(self):
 
-def f(x):
-    def g():
-        x
-        eval("x + 1")
-    return g
+        def f(x):
+            def g():
+                x
+                eval("x + 1")
+            return g
+
+        f(4)()
+
+
+def test_main():
+    run_unittest(ScopeTests)
 
-f(4)()
+if __name__ == '__main__':
+    test_main()
index 03621a67fd2b8e35736528ee707a444a5178f59c..a4830d483b208a1f228f89d64c2810b96b9638f4 100644 (file)
@@ -298,6 +298,17 @@ class TestSet(TestJointOps):
         self.assert_(self.thetype(self.word) not in s)
         self.assertRaises(KeyError, self.s.remove, self.thetype(self.word))
 
+    def test_remove_keyerror_unpacking(self):
+        # bug:  www.python.org/sf/1576657
+        for v1 in ['Q', (1,)]:
+            try:
+                self.s.remove(v1)
+            except KeyError, e:
+                v2 = e.args[0]
+                self.assertEqual(v1, v2)
+            else:
+                self.fail()
+
     def test_discard(self):
         self.s.discard('a')
         self.assert_('a' not in self.s)
index 28a21a466bb7cdece529e14742e5ed7b9ba5a3b6..b6986360ac137b9a9242d95fc7c703c34ece767a 100644 (file)
@@ -286,21 +286,6 @@ DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01//EN'
             ('codepoint', 'convert', 42),
             ])
 
-    def test_attr_values_quoted_markup(self):
-        """Multi-line and markup in attribute values"""
-        self.check_events("""<a title='foo\n<br>bar'>text</a>""",
-            [("starttag", "a", [("title", "foo\n<br>bar")]),
-             ("data", "text"),
-             ("endtag", "a")])
-        self.check_events("""<a title='less < than'>text</a>""",
-            [("starttag", "a", [("title", "less < than")]),
-             ("data", "text"),
-             ("endtag", "a")])
-        self.check_events("""<a title='greater > than'>text</a>""",
-            [("starttag", "a", [("title", "greater > than")]),
-             ("data", "text"),
-             ("endtag", "a")])
-
     def test_attr_funky_names(self):
         self.check_events("""<a a.b='v' c:d=v e-f=v>""", [
             ("starttag", "a", [("a.b", "v"), ("c:d", "v"), ("e-f", "v")]),
@@ -376,6 +361,19 @@ DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01//EN'
             ('decl', 'DOCTYPE doc [<!ATTLIST doc attr (a | b) >]'),
             ])
 
+    def test_read_chunks(self):
+        # SF bug #1541697, this caused sgml parser to hang
+        # Just verify this code doesn't cause a hang.
+        CHUNK = 1024  # increasing this to 8212 makes the problem go away
+
+        f = open(test_support.findfile('sgml_input.html'))
+        fp = sgmllib.SGMLParser()
+        while 1:
+            data = f.read(CHUNK)
+            fp.feed(data)
+            if len(data) != CHUNK:
+                break
+
     # XXX These tests have been disabled by prefixing their names with
     # an underscore.  The first two exercise outstanding bugs in the
     # sgmllib module, and the third exhibits questionable behavior
index c438cc6417efb5ef20929d1ab830e37f8e9a3319..ea224e439c3d5c60b415bb73f846c1f41ba2c20b 100644 (file)
@@ -11,9 +11,23 @@ from test import test_support
 
 class SHATestCase(unittest.TestCase):
     def check(self, data, digest):
-        computed = sha.new(data).hexdigest()
+        # Check digest matches the expected value
+        obj = sha.new(data)
+        computed = obj.hexdigest()
         self.assert_(computed == digest)
 
+        # Verify that the value doesn't change between two consecutive
+        # digest operations.
+        computed_again = obj.hexdigest()
+        self.assert_(computed == computed_again)
+
+        # Check hexdigest() output matches digest()'s output
+        digest = obj.digest()
+        hexd = ""
+        for c in digest:
+            hexd += '%02x' % ord(c)
+        self.assert_(computed == hexd)
+
     def test_case_1(self):
         self.check("abc",
                    "a9993e364706816aba3e25717850c26c9cd0d89d")
@@ -26,6 +40,9 @@ class SHATestCase(unittest.TestCase):
         self.check("a" * 1000000,
                    "34aa973cd4c4daa4f61eeb2bdbad27316534016f")
 
+    def test_case_4(self):
+        self.check(chr(0xAA) * 80,
+                   '4ca0ef38f1794b28a8f8ee110ee79d48ce13be25')
 
 def test_main():
     test_support.run_unittest(SHATestCase)
diff --git a/Lib/test/test_structmembers.py b/Lib/test/test_structmembers.py
new file mode 100644 (file)
index 0000000..93dd2ac
--- /dev/null
@@ -0,0 +1,80 @@
+from _testcapi import test_structmembersType, \
+    CHAR_MAX, CHAR_MIN, UCHAR_MAX, \
+    SHRT_MAX, SHRT_MIN, USHRT_MAX, \
+    INT_MAX, INT_MIN, UINT_MAX, \
+    LONG_MAX, LONG_MIN, ULONG_MAX
+
+import warnings, exceptions, unittest, test.test_warnings
+from test import test_support
+
+ts=test_structmembersType(1,2,3,4,5,6,7,8,9.99999,10.1010101010)
+
+class ReadWriteTests(unittest.TestCase):
+    def test_types(self):
+        ts.T_BYTE=CHAR_MAX
+        self.assertEquals(ts.T_BYTE, CHAR_MAX)
+        ts.T_BYTE=CHAR_MIN
+        self.assertEquals(ts.T_BYTE, CHAR_MIN)
+        ts.T_UBYTE=UCHAR_MAX
+        self.assertEquals(ts.T_UBYTE, UCHAR_MAX)
+
+        ts.T_SHORT=SHRT_MAX
+        self.assertEquals(ts.T_SHORT, SHRT_MAX)
+        ts.T_SHORT=SHRT_MIN
+        self.assertEquals(ts.T_SHORT, SHRT_MIN)
+        ts.T_USHORT=USHRT_MAX
+        self.assertEquals(ts.T_USHORT, USHRT_MAX)
+
+        ts.T_INT=INT_MAX
+        self.assertEquals(ts.T_INT, INT_MAX)
+        ts.T_INT=INT_MIN
+        self.assertEquals(ts.T_INT, INT_MIN)
+        ts.T_UINT=UINT_MAX
+        self.assertEquals(ts.T_UINT, UINT_MAX)
+
+        ts.T_LONG=LONG_MAX
+        self.assertEquals(ts.T_LONG, LONG_MAX)
+        ts.T_LONG=LONG_MIN
+        self.assertEquals(ts.T_LONG, LONG_MIN)
+        ts.T_ULONG=ULONG_MAX
+        self.assertEquals(ts.T_ULONG, ULONG_MAX)
+
+class TestWarnings(test.test_warnings.TestModule):
+    def has_warned(self):
+        self.assertEqual(test.test_warnings.msg.category,
+                         exceptions.RuntimeWarning.__name__)
+
+    def test_byte_max(self):
+        ts.T_BYTE=CHAR_MAX+1
+        self.has_warned()
+
+    def test_byte_min(self):
+        ts.T_BYTE=CHAR_MIN-1
+        self.has_warned()
+
+    def test_ubyte_max(self):
+        ts.T_UBYTE=UCHAR_MAX+1
+        self.has_warned()
+
+    def test_short_max(self):
+        ts.T_SHORT=SHRT_MAX+1
+        self.has_warned()
+
+    def test_short_min(self):
+        ts.T_SHORT=SHRT_MIN-1
+        self.has_warned()
+
+    def test_ushort_max(self):
+        ts.T_USHORT=USHRT_MAX+1
+        self.has_warned()
+
+
+
+def test_main(verbose=None):
+    test_support.run_unittest(
+        ReadWriteTests,
+        TestWarnings
+        )
+
+if __name__ == "__main__":
+    test_main(verbose=True)
index 8c8ac405f8c0f71067b702f5bb9b79f3e33cbae2..64f8d40a40b34c58672f265df5ac4155ce0a70cc 100644 (file)
@@ -234,6 +234,12 @@ class ProcessTestCase(unittest.TestCase):
         stripped = remove_stderr_debug_decorations(output)
         self.assertEqual(stripped, "appleorange")
 
+    def test_stdout_filedes_of_stdout(self):
+        # stdout is set to 1 (#1531862).
+        cmd = r"import sys, os; sys.exit(os.write(sys.stdout.fileno(), '.\n'))"
+        rc = subprocess.call([sys.executable, "-c", cmd], stdout=1)
+        self.assertEquals(rc, 2)
+
     def test_cwd(self):
         tmpdir = os.getenv("TEMP", "/tmp")
         # We cannot use os.path.realpath to canonicalize the path,
index d260fc5ca6c37e386ae01065aa825944f305c663..2829c5566d33403bf6db95e5cc7e10ae8b6e81ec 100644 (file)
@@ -244,13 +244,13 @@ def sortdict(dict):
     withcommas = ", ".join(reprpairs)
     return "{%s}" % withcommas
 
-def check_syntax(statement):
+def check_syntax_error(testcase, statement):
     try:
-        compile(statement, '<string>', 'exec')
+        compile(statement, '<test string>', 'exec')
     except SyntaxError:
         pass
     else:
-        print 'Missing SyntaxError: "%s"' % statement
+        testcase.fail('Missing SyntaxError: "%s"' % statement)
 
 def open_urlresource(url):
     import urllib, urlparse
index acb3f105369128a8718db250ce60fc5e8f1d1efc..a0eaac6d0cfc5286b97c5ff8b15944c211daa5a9 100644 (file)
@@ -235,6 +235,138 @@ SyntaxError: assignment to None (<doctest test.test_syntax[32]>, line 1)
 >>> f() += 1
 Traceback (most recent call last):
 SyntaxError: illegal expression for augmented assignment (<doctest test.test_syntax[33]>, line 1)
+
+
+Test continue in finally in weird combinations.
+
+continue in for loop under finally shouuld be ok.
+
+    >>> def test():
+    ...     try:
+    ...         pass
+    ...     finally:
+    ...         for abc in range(10):
+    ...             continue
+    ...     print abc
+    >>> test()
+    9
+
+Start simple, a continue in a finally should not be allowed.
+
+    >>> def test():
+    ...    for abc in range(10):
+    ...        try:
+    ...            pass
+    ...        finally:
+    ...            continue
+    Traceback (most recent call last):
+      ...
+    SyntaxError: 'continue' not supported inside 'finally' clause (<doctest test.test_syntax[36]>, line 6)
+
+This is essentially a continue in a finally which should not be allowed.
+
+    >>> def test():
+    ...    for abc in range(10):
+    ...        try:
+    ...            pass
+    ...        finally:
+    ...            try:
+    ...                continue
+    ...            except:
+    ...                pass
+    Traceback (most recent call last):
+      ...
+    SyntaxError: 'continue' not supported inside 'finally' clause (<doctest test.test_syntax[37]>, line 7)
+
+    >>> def foo():
+    ...     try:
+    ...         pass
+    ...     finally:
+    ...         continue
+    Traceback (most recent call last):
+      ...
+    SyntaxError: 'continue' not supported inside 'finally' clause (<doctest test.test_syntax[38]>, line 5)
+
+    >>> def foo():
+    ...     for a in ():
+    ...       try:
+    ...           pass
+    ...       finally:
+    ...           continue
+    Traceback (most recent call last):
+      ...
+    SyntaxError: 'continue' not supported inside 'finally' clause (<doctest test.test_syntax[39]>, line 6)
+
+    >>> def foo():
+    ...     for a in ():
+    ...         try:
+    ...             pass
+    ...         finally:
+    ...             try:
+    ...                 continue
+    ...             finally:
+    ...                 pass
+    Traceback (most recent call last):
+      ...
+    SyntaxError: 'continue' not supported inside 'finally' clause (<doctest test.test_syntax[40]>, line 7)
+
+    >>> def foo():
+    ...  for a in ():
+    ...   try: pass
+    ...   finally:
+    ...    try:
+    ...     pass
+    ...    except:
+    ...     continue
+    Traceback (most recent call last):
+      ...
+    SyntaxError: 'continue' not supported inside 'finally' clause (<doctest test.test_syntax[41]>, line 8)
+
+There is one test for a break that is not in a loop.  The compiler
+uses a single data structure to keep track of try-finally and loops,
+so we need to be sure that a break is actually inside a loop.  If it
+isn't, there should be a syntax error.
+
+   >>> try:
+   ...     print 1
+   ...     break
+   ...     print 2
+   ... finally:
+   ...     print 3
+   Traceback (most recent call last):
+     ...
+   SyntaxError: 'break' outside loop (<doctest test.test_syntax[42]>, line 3)
+
+This should probably raise a better error than a SystemError (or none at all).
+In 2.5 there was a missing exception and an assert was triggered in a debug
+build.  The number of blocks must be greater than CO_MAXBLOCKS.  SF #1565514
+
+   >>> while 1:
+   ...  while 2:
+   ...   while 3:
+   ...    while 4:
+   ...     while 5:
+   ...      while 6:
+   ...       while 8:
+   ...        while 9:
+   ...         while 10:
+   ...          while 11:
+   ...           while 12:
+   ...            while 13:
+   ...             while 14:
+   ...              while 15:
+   ...               while 16:
+   ...                while 17:
+   ...                 while 18:
+   ...                  while 19:
+   ...                   while 20:
+   ...                    while 21:
+   ...                     while 22:
+   ...                      break
+   Traceback (most recent call last):
+     ...
+   SystemError: too many statically nested blocks
+
 """
 
 import re
index a47afa4ee17af865ed2cb54c741c8a62e4afd8f5..0cebb299096028f5067476bfd9a43adca3130a45 100644 (file)
@@ -280,6 +280,32 @@ class WriteTest(BaseTest):
             else:
                 self.dst.addfile(tarinfo, f)
 
+
+class Write100Test(BaseTest):
+    # The name field in a tar header stores strings of at most 100 chars.
+    # If a string is shorter than 100 chars it has to be padded with '\0',
+    # which implies that a string of exactly 100 chars is stored without
+    # a trailing '\0'.
+
+    def setUp(self):
+        self.name = "01234567890123456789012345678901234567890123456789"
+        self.name += "01234567890123456789012345678901234567890123456789"
+
+        self.tar = tarfile.open(tmpname(), "w")
+        t = tarfile.TarInfo(self.name)
+        self.tar.addfile(t)
+        self.tar.close()
+
+        self.tar = tarfile.open(tmpname())
+
+    def tearDown(self):
+        self.tar.close()
+
+    def test(self):
+        self.assertEqual(self.tar.getnames()[0], self.name,
+                "failed to store 100 char filename")
+
+
 class WriteSize0Test(BaseTest):
     mode = 'w'
 
@@ -362,13 +388,6 @@ class WriteGNULongTest(unittest.TestCase):
        is tested as well.
     """
 
-    def setUp(self):
-        self.tar = tarfile.open(tmpname(), "w")
-        self.tar.posix = False
-
-    def tearDown(self):
-        self.tar.close()
-
     def _length(self, s):
         blocks, remainder = divmod(len(s) + 1, 512)
         if remainder:
@@ -397,12 +416,23 @@ class WriteGNULongTest(unittest.TestCase):
             tarinfo.linkname = link
             tarinfo.type = tarfile.LNKTYPE
 
-        self.tar.addfile(tarinfo)
+        tar = tarfile.open(tmpname(), "w")
+        tar.posix = False
+        tar.addfile(tarinfo)
 
         v1 = self._calc_size(name, link)
-        v2 = self.tar.offset
+        v2 = tar.offset
         self.assertEqual(v1, v2, "GNU longname/longlink creation failed")
 
+        tar.close()
+
+        tar = tarfile.open(tmpname())
+        member = tar.next()
+        self.failIf(member is None, "unable to read longname member")
+        self.assert_(tarinfo.name == member.name and \
+                     tarinfo.linkname == member.linkname, \
+                     "unable to read longname member")
+
     def test_longname_1023(self):
         self._test(("longnam/" * 127) + "longnam")
 
@@ -623,6 +653,7 @@ def test_main():
         ReadAsteriskTest,
         ReadStreamAsteriskTest,
         WriteTest,
+        Write100Test,
         WriteSize0Test,
         WriteStreamTest,
         WriteGNULongTest,
index aeaa77ef56f5bd510c310438421c7497573e8d0a..2047a6364ef72d5c9d7238c533bff1f24ef5222a 100644 (file)
@@ -27,7 +27,7 @@ has_spawnl = hasattr(os, 'spawnl')
 # number of files that can be opened at one time (see ulimit -n)
 if sys.platform == 'mac':
     TEST_FILES = 32
-elif sys.platform == 'openbsd3':
+elif sys.platform in ('openbsd3', 'openbsd4'):
     TEST_FILES = 48
 else:
     TEST_FILES = 100
index 4fd783489b649ebde40762401bbc92ef87d9fcc5..18129da0b6baf27b678710e64a1f79130999c4b8 100644 (file)
@@ -102,15 +102,19 @@ class TimeTestCase(unittest.TestCase):
         self.assertEquals(expected, result)
 
     def test_strptime(self):
+        # Should be able to go round-trip from strftime to strptime without
+        # throwing an exception.
         tt = time.gmtime(self.t)
         for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I',
                           'j', 'm', 'M', 'p', 'S',
                           'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'):
-            format = ' %' + directive
+            format = '%' + directive
+            strf_output = time.strftime(format, tt)
             try:
-                time.strptime(time.strftime(format, tt), format)
+                time.strptime(strf_output, format)
             except ValueError:
-                self.fail('conversion specifier: %r failed.' % format)
+                self.fail("conversion specifier %r failed with '%s' input." %
+                          (format, strf_output))
 
     def test_asctime(self):
         time.asctime(time.gmtime(self.t))
index b064967bfdfbccf028ab52daa045ddb9128adae4..be6c18dab21afa68234e415e70f73b8f4c0e5ff7 100644 (file)
@@ -1,9 +1,93 @@
-import os, glob, random
+"""Tests for the tokenize module.
+
+The tests were originally written in the old Python style, where the
+test output was compared to a golden file.  This docstring represents
+the first steps towards rewriting the entire test as a doctest.
+
+The tests can be really simple.  Given a small fragment of source
+code, print out a table with the tokens.  The ENDMARK is omitted for
+brevity.
+
+>>> dump_tokens("1 + 1")
+NUMBER      '1'           (1, 0) (1, 1)
+OP          '+'           (1, 2) (1, 3)
+NUMBER      '1'           (1, 4) (1, 5)
+
+A comment generates a token here, unlike in the parser module.  The
+comment token is followed by an NL or a NEWLINE token, depending on
+whether the line contains the completion of a statement.
+
+>>> dump_tokens("if False:\\n"
+...             "    # NL\\n"
+...             "    True = False # NEWLINE\\n")
+NAME        'if'          (1, 0) (1, 2)
+NAME        'False'       (1, 3) (1, 8)
+OP          ':'           (1, 8) (1, 9)
+NEWLINE     '\\n'          (1, 9) (1, 10)
+COMMENT     '# NL'        (2, 4) (2, 8)
+NL          '\\n'          (2, 8) (2, 9)
+INDENT      '    '        (3, 0) (3, 4)
+NAME        'True'        (3, 4) (3, 8)
+OP          '='           (3, 9) (3, 10)
+NAME        'False'       (3, 11) (3, 16)
+COMMENT     '# NEWLINE'   (3, 17) (3, 26)
+NEWLINE     '\\n'          (3, 26) (3, 27)
+DEDENT      ''            (4, 0) (4, 0)
+
+
+There will be a bunch more tests of specific source patterns.
+
+The tokenize module also defines an untokenize function that should
+regenerate the original program text from the tokens.
+
+There are some standard formatting practices that are easy to get right.
+
+>>> roundtrip("if x == 1:\\n"
+...           "    print x\\n")
+if x == 1:
+    print x
+
+Some people use different formatting conventions, which makes
+untokenize a little trickier.  Note that this test involves trailing
+whitespace after the colon.  Note that we use hex escapes to make the
+two trailing blanks apparent in the expected output.
+
+>>> roundtrip("if   x  ==  1  :  \\n"
+...           "  print x\\n")
+if   x  ==  1  :\x20\x20
+  print x
+
+Comments need to go in the right place.
+
+>>> roundtrip("if x == 1:\\n"
+...           "    # A comment by itself.\\n"
+...           "    print x  # Comment here, too.\\n"
+...           "    # Another comment.\\n"
+...           "after_if = True\\n")
+if x == 1:
+    # A comment by itself.
+    print x  # Comment here, too.
+    # Another comment.
+after_if = True
+
+>>> roundtrip("if (x  # The comments need to go in the right place\\n"
+...           "    == 1):\\n"
+...           "    print 'x == 1'\\n")
+if (x  # The comments need to go in the right place
+    == 1):
+    print 'x == 1'
+
+"""
+
+import os, glob, random, time, sys
 from cStringIO import StringIO
 from test.test_support import (verbose, findfile, is_resource_enabled,
                                TestFailed)
-from tokenize import (tokenize, generate_tokens, untokenize,
-                      NUMBER, NAME, OP, STRING)
+from tokenize import (tokenize, generate_tokens, untokenize, tok_name,
+                      ENDMARKER, NUMBER, NAME, OP, STRING, COMMENT)
+
+# How much time in seconds can pass before we print a 'Still working' message.
+_PRINT_WORKING_MSG_INTERVAL = 5 * 60
 
 # Test roundtrip for `untokenize`.  `f` is a file path.  The source code in f
 # is tokenized, converted back to source code via tokenize.untokenize(),
@@ -24,6 +108,23 @@ def test_roundtrip(f):
     if t1 != t2:
         raise TestFailed("untokenize() roundtrip failed for %r" % f)
 
+def dump_tokens(s):
+    """Print out the tokens in s in a table format.
+
+    The ENDMARKER is omitted.
+    """
+    f = StringIO(s)
+    for type, token, start, end, line in generate_tokens(f.readline):
+        if type == ENDMARKER:
+            break
+        type = tok_name[type]
+        print "%(type)-10.10s  %(token)-13.13r %(start)s %(end)s" % locals()
+
+def roundtrip(s):
+    f = StringIO(s)
+    source = untokenize(generate_tokens(f.readline))
+    print source,
+
 # This is an example from the docs, set up as a doctest.
 def decistmt(s):
     """Substitute Decimals for floats in a string of statements.
@@ -66,6 +167,8 @@ def test_main():
     if verbose:
         print 'starting...'
 
+    next_time = time.time() + _PRINT_WORKING_MSG_INTERVAL
+
     # This displays the tokenization of tokenize_tests.py to stdout, and
     # regrtest.py checks that this equals the expected output (in the
     # test/output/ directory).
@@ -85,6 +188,12 @@ def test_main():
         testfiles = random.sample(testfiles, 10)
 
     for f in testfiles:
+        # Print still working message since this test can be really slow
+        if next_time <= time.time():
+            next_time = time.time() + _PRINT_WORKING_MSG_INTERVAL
+            print >>sys.__stdout__, '  test_main still working, be patient...'
+            sys.__stdout__.flush()
+
         test_roundtrip(f)
 
     # Test detecton of IndentationError.
@@ -105,7 +214,7 @@ def foo():
     # Run the doctests in this module.
     from test import test_tokenize  # i.e., this module
     from test.test_support import run_doctest
-    run_doctest(test_tokenize)
+    run_doctest(test_tokenize, verbose)
 
     if verbose:
         print 'finished'
index 9ba1dca23de83e4a0d1b322bbf8016ed6fa836dd..48c5d190e7a42ec8b9d4fb50e8b04237c5bb1485 100644 (file)
@@ -122,6 +122,10 @@ def test():
                                                   X.__name__,
                                                   str_value))
 
+    def test_without_exception(self):
+        err = traceback.format_exception_only(None, None)
+        self.assertEqual(err, ['None\n'])
+
 
 def test_main():
     run_unittest(TracebackCases)
index f0bdfdebf7291c88284b061cb0678bcfdd4d0975..8d269146fd490989482b6bd5a29dc0b561586f3f 100644 (file)
 # Python test set -- part 6, built-in types
 
-from test.test_support import *
-
-print '6. Built-in types'
-
-print '6.1 Truth value testing'
-if None: raise TestFailed, 'None is true instead of false'
-if 0: raise TestFailed, '0 is true instead of false'
-if 0L: raise TestFailed, '0L is true instead of false'
-if 0.0: raise TestFailed, '0.0 is true instead of false'
-if '': raise TestFailed, '\'\' is true instead of false'
-if not 1: raise TestFailed, '1 is false instead of true'
-if not 1L: raise TestFailed, '1L is false instead of true'
-if not 1.0: raise TestFailed, '1.0 is false instead of true'
-if not 'x': raise TestFailed, '\'x\' is false instead of true'
-if not {'x': 1}: raise TestFailed, '{\'x\': 1} is false instead of true'
-def f(): pass
-class C: pass
+from test.test_support import run_unittest, have_unicode
+import unittest
 import sys
-x = C()
-if not f: raise TestFailed, 'f is false instead of true'
-if not C: raise TestFailed, 'C is false instead of true'
-if not sys: raise TestFailed, 'sys is false instead of true'
-if not x: raise TestFailed, 'x is false instead of true'
-
-print '6.2 Boolean operations'
-if 0 or 0: raise TestFailed, '0 or 0 is true instead of false'
-if 1 and 1: pass
-else: raise TestFailed, '1 and 1 is false instead of true'
-if not 1: raise TestFailed, 'not 1 is true instead of false'
-
-print '6.3 Comparisons'
-if 0 < 1 <= 1 == 1 >= 1 > 0 != 1: pass
-else: raise TestFailed, 'int comparisons failed'
-if 0L < 1L <= 1L == 1L >= 1L > 0L != 1L: pass
-else: raise TestFailed, 'long int comparisons failed'
-if 0.0 < 1.0 <= 1.0 == 1.0 >= 1.0 > 0.0 != 1.0: pass
-else: raise TestFailed, 'float comparisons failed'
-if '' < 'a' <= 'a' == 'a' < 'abc' < 'abd' < 'b': pass
-else: raise TestFailed, 'string comparisons failed'
-if None is None: pass
-else: raise TestFailed, 'identity test failed'
-
-try: float('')
-except ValueError: pass
-else: raise TestFailed, "float('') didn't raise ValueError"
-
-try: float('5\0')
-except ValueError: pass
-else: raise TestFailed, "float('5\0') didn't raise ValueError"
-
-try: 5.0 / 0.0
-except ZeroDivisionError: pass
-else: raise TestFailed, "5.0 / 0.0 didn't raise ZeroDivisionError"
-
-try: 5.0 // 0.0
-except ZeroDivisionError: pass
-else: raise TestFailed, "5.0 // 0.0 didn't raise ZeroDivisionError"
-
-try: 5.0 % 0.0
-except ZeroDivisionError: pass
-else: raise TestFailed, "5.0 % 0.0 didn't raise ZeroDivisionError"
-
-try: 5 / 0L
-except ZeroDivisionError: pass
-else: raise TestFailed, "5 / 0L didn't raise ZeroDivisionError"
-
-try: 5 // 0L
-except ZeroDivisionError: pass
-else: raise TestFailed, "5 // 0L didn't raise ZeroDivisionError"
-
-try: 5 % 0L
-except ZeroDivisionError: pass
-else: raise TestFailed, "5 % 0L didn't raise ZeroDivisionError"
-
-print '6.4 Numeric types (mostly conversions)'
-if 0 != 0L or 0 != 0.0 or 0L != 0.0: raise TestFailed, 'mixed comparisons'
-if 1 != 1L or 1 != 1.0 or 1L != 1.0: raise TestFailed, 'mixed comparisons'
-if -1 != -1L or -1 != -1.0 or -1L != -1.0:
-    raise TestFailed, 'int/long/float value not equal'
-# calling built-in types without argument must return 0
-if int() != 0: raise TestFailed, 'int() does not return 0'
-if long() != 0L: raise TestFailed, 'long() does not return 0L'
-if float() != 0.0: raise TestFailed, 'float() does not return 0.0'
-if int(1.9) == 1 == int(1.1) and int(-1.1) == -1 == int(-1.9): pass
-else: raise TestFailed, 'int() does not round properly'
-if long(1.9) == 1L == long(1.1) and long(-1.1) == -1L == long(-1.9): pass
-else: raise TestFailed, 'long() does not round properly'
-if float(1) == 1.0 and float(-1) == -1.0 and float(0) == 0.0: pass
-else: raise TestFailed, 'float() does not work properly'
-print '6.4.1 32-bit integers'
-# Ensure the first 256 integers are shared
-a = 256
-b = 128*2
-if a is not b: raise TestFailed, '256 is not shared'
-if 12 + 24 != 36: raise TestFailed, 'int op'
-if 12 + (-24) != -12: raise TestFailed, 'int op'
-if (-12) + 24 != 12: raise TestFailed, 'int op'
-if (-12) + (-24) != -36: raise TestFailed, 'int op'
-if not 12 < 24: raise TestFailed, 'int op'
-if not -24 < -12: raise TestFailed, 'int op'
-# Test for a particular bug in integer multiply
-xsize, ysize, zsize = 238, 356, 4
-if not (xsize*ysize*zsize == zsize*xsize*ysize == 338912):
-    raise TestFailed, 'int mul commutativity'
-# And another.
-m = -sys.maxint - 1
-for divisor in 1, 2, 4, 8, 16, 32:
-    j = m // divisor
-    prod = divisor * j
-    if prod != m:
-        raise TestFailed, "%r * %r == %r != %r" % (divisor, j, prod, m)
-    if type(prod) is not int:
-        raise TestFailed, ("expected type(prod) to be int, not %r" %
-                           type(prod))
-# Check for expected * overflow to long.
-for divisor in 1, 2, 4, 8, 16, 32:
-    j = m // divisor - 1
-    prod = divisor * j
-    if type(prod) is not long:
-        raise TestFailed, ("expected type(%r) to be long, not %r" %
-                           (prod, type(prod)))
-# Check for expected * overflow to long.
-m = sys.maxint
-for divisor in 1, 2, 4, 8, 16, 32:
-    j = m // divisor + 1
-    prod = divisor * j
-    if type(prod) is not long:
-        raise TestFailed, ("expected type(%r) to be long, not %r" %
-                           (prod, type(prod)))
-
-print '6.4.2 Long integers'
-if 12L + 24L != 36L: raise TestFailed, 'long op'
-if 12L + (-24L) != -12L: raise TestFailed, 'long op'
-if (-12L) + 24L != 12L: raise TestFailed, 'long op'
-if (-12L) + (-24L) != -36L: raise TestFailed, 'long op'
-if not 12L < 24L: raise TestFailed, 'long op'
-if not -24L < -12L: raise TestFailed, 'long op'
-x = sys.maxint
-if int(long(x)) != x: raise TestFailed, 'long op'
-try: y = int(long(x)+1L)
-except OverflowError: raise TestFailed, 'long op'
-if not isinstance(y, long): raise TestFailed, 'long op'
-x = -x
-if int(long(x)) != x: raise TestFailed, 'long op'
-x = x-1
-if int(long(x)) != x: raise TestFailed, 'long op'
-try: y = int(long(x)-1L)
-except OverflowError: raise TestFailed, 'long op'
-if not isinstance(y, long): raise TestFailed, 'long op'
-
-try: 5 << -5
-except ValueError: pass
-else: raise TestFailed, 'int negative shift <<'
-
-try: 5L << -5L
-except ValueError: pass
-else: raise TestFailed, 'long negative shift <<'
-
-try: 5 >> -5
-except ValueError: pass
-else: raise TestFailed, 'int negative shift >>'
-
-try: 5L >> -5L
-except ValueError: pass
-else: raise TestFailed, 'long negative shift >>'
-
-print '6.4.3 Floating point numbers'
-if 12.0 + 24.0 != 36.0: raise TestFailed, 'float op'
-if 12.0 + (-24.0) != -12.0: raise TestFailed, 'float op'
-if (-12.0) + 24.0 != 12.0: raise TestFailed, 'float op'
-if (-12.0) + (-24.0) != -36.0: raise TestFailed, 'float op'
-if not 12.0 < 24.0: raise TestFailed, 'float op'
-if not -24.0 < -12.0: raise TestFailed, 'float op'
-
-print '6.5 Sequence types'
-
-print '6.5.1 Strings'
-if len('') != 0: raise TestFailed, 'len(\'\')'
-if len('a') != 1: raise TestFailed, 'len(\'a\')'
-if len('abcdef') != 6: raise TestFailed, 'len(\'abcdef\')'
-if 'xyz' + 'abcde' != 'xyzabcde': raise TestFailed, 'string concatenation'
-if 'xyz'*3 != 'xyzxyzxyz': raise TestFailed, 'string repetition *3'
-if 0*'abcde' != '': raise TestFailed, 'string repetition 0*'
-if min('abc') != 'a' or max('abc') != 'c': raise TestFailed, 'min/max string'
-if 'a' in 'abc' and 'b' in 'abc' and 'c' in 'abc' and 'd' not in 'abc': pass
-else: raise TestFailed, 'in/not in string'
-x = 'x'*103
-if '%s!'%x != x+'!': raise TestFailed, 'nasty string formatting bug'
-
-#extended slices for strings
-a = '0123456789'
-vereq(a[::], a)
-vereq(a[::2], '02468')
-vereq(a[1::2], '13579')
-vereq(a[::-1],'9876543210')
-vereq(a[::-2], '97531')
-vereq(a[3::-2], '31')
-vereq(a[-100:100:], a)
-vereq(a[100:-100:-1], a[::-1])
-vereq(a[-100L:100L:2L], '02468')
-
-if have_unicode:
-    a = unicode('0123456789', 'ascii')
-    vereq(a[::], a)
-    vereq(a[::2], unicode('02468', 'ascii'))
-    vereq(a[1::2], unicode('13579', 'ascii'))
-    vereq(a[::-1], unicode('9876543210', 'ascii'))
-    vereq(a[::-2], unicode('97531', 'ascii'))
-    vereq(a[3::-2], unicode('31', 'ascii'))
-    vereq(a[-100:100:], a)
-    vereq(a[100:-100:-1], a[::-1])
-    vereq(a[-100L:100L:2L], unicode('02468', 'ascii'))
-
-
-print '6.5.2 Tuples [see test_tuple.py]'
-
-print '6.5.3 Lists [see test_list.py]'
-
-print '6.6 Mappings == Dictionaries [see test_dict.py]'
-
-
-try: type(1, 2)
-except TypeError: pass
-else: raise TestFailed, 'type(), w/2 args expected TypeError'
-
-try: type(1, 2, 3, 4)
-except TypeError: pass
-else: raise TestFailed, 'type(), w/4 args expected TypeError'
-
-print 'Buffers'
-try: buffer('asdf', -1)
-except ValueError: pass
-else: raise TestFailed, "buffer('asdf', -1) should raise ValueError"
-
-try: buffer(None)
-except TypeError: pass
-else: raise TestFailed, "buffer(None) should raise TypeError"
-
-a = buffer('asdf')
-hash(a)
-b = a * 5
-if a == b:
-    raise TestFailed, 'buffers should not be equal'
-if str(b) != ('asdf' * 5):
-    raise TestFailed, 'repeated buffer has wrong content'
-if str(a * 0) != '':
-    raise TestFailed, 'repeated buffer zero times has wrong content'
-if str(a + buffer('def')) != 'asdfdef':
-    raise TestFailed, 'concatenation of buffers yields wrong content'
-if str(buffer(a)) != 'asdf':
-    raise TestFailed, 'composing buffers failed'
-if str(buffer(a, 2)) != 'df':
-    raise TestFailed, 'specifying buffer offset failed'
-if str(buffer(a, 0, 2)) != 'as':
-    raise TestFailed, 'specifying buffer size failed'
-if str(buffer(a, 1, 2)) != 'sd':
-    raise TestFailed, 'specifying buffer offset and size failed'
-try: buffer(buffer('asdf', 1), -1)
-except ValueError: pass
-else: raise TestFailed, "buffer(buffer('asdf', 1), -1) should raise ValueError"
-if str(buffer(buffer('asdf', 0, 2), 0)) != 'as':
-    raise TestFailed, 'composing length-specified buffer failed'
-if str(buffer(buffer('asdf', 0, 2), 0, 5000)) != 'as':
-    raise TestFailed, 'composing length-specified buffer failed'
-if str(buffer(buffer('asdf', 0, 2), 0, -1)) != 'as':
-    raise TestFailed, 'composing length-specified buffer failed'
-if str(buffer(buffer('asdf', 0, 2), 1, 2)) != 's':
-    raise TestFailed, 'composing length-specified buffer failed'
-
-try: a[1] = 'g'
-except TypeError: pass
-else: raise TestFailed, "buffer assignment should raise TypeError"
-
-try: a[0:1] = 'g'
-except TypeError: pass
-else: raise TestFailed, "buffer slice assignment should raise TypeError"
-
-# array.array() returns an object that does not implement a char buffer,
-# something which int() uses for conversion.
-import array
-try: int(buffer(array.array('c')))
-except TypeError :pass
-else: raise TestFailed, "char buffer (at C level) not working"
+
+class TypesTests(unittest.TestCase):
+
+    def test_truth_values(self):
+        if None: self.fail('None is true instead of false')
+        if 0: self.fail('0 is true instead of false')
+        if 0L: self.fail('0L is true instead of false')
+        if 0.0: self.fail('0.0 is true instead of false')
+        if '': self.fail('\'\' is true instead of false')
+        if not 1: self.fail('1 is false instead of true')
+        if not 1L: self.fail('1L is false instead of true')
+        if not 1.0: self.fail('1.0 is false instead of true')
+        if not 'x': self.fail('\'x\' is false instead of true')
+        if not {'x': 1}: self.fail('{\'x\': 1} is false instead of true')
+        def f(): pass
+        class C: pass
+        import sys
+        x = C()
+        if not f: self.fail('f is false instead of true')
+        if not C: self.fail('C is false instead of true')
+        if not sys: self.fail('sys is false instead of true')
+        if not x: self.fail('x is false instead of true')
+
+    def test_boolean_ops(self):
+        if 0 or 0: self.fail('0 or 0 is true instead of false')
+        if 1 and 1: pass
+        else: self.fail('1 and 1 is false instead of true')
+        if not 1: self.fail('not 1 is true instead of false')
+
+    def test_comparisons(self):
+        if 0 < 1 <= 1 == 1 >= 1 > 0 != 1: pass
+        else: self.fail('int comparisons failed')
+        if 0L < 1L <= 1L == 1L >= 1L > 0L != 1L: pass
+        else: self.fail('long int comparisons failed')
+        if 0.0 < 1.0 <= 1.0 == 1.0 >= 1.0 > 0.0 != 1.0: pass
+        else: self.fail('float comparisons failed')
+        if '' < 'a' <= 'a' == 'a' < 'abc' < 'abd' < 'b': pass
+        else: self.fail('string comparisons failed')
+        if None is None: pass
+        else: self.fail('identity test failed')
+
+    def test_float_constructor(self):
+        self.assertRaises(ValueError, float, '')
+        self.assertRaises(ValueError, float, '5\0')
+
+    def test_zero_division(self):
+        try: 5.0 / 0.0
+        except ZeroDivisionError: pass
+        else: self.fail("5.0 / 0.0 didn't raise ZeroDivisionError")
+
+        try: 5.0 // 0.0
+        except ZeroDivisionError: pass
+        else: self.fail("5.0 // 0.0 didn't raise ZeroDivisionError")
+
+        try: 5.0 % 0.0
+        except ZeroDivisionError: pass
+        else: self.fail("5.0 % 0.0 didn't raise ZeroDivisionError")
+
+        try: 5 / 0L
+        except ZeroDivisionError: pass
+        else: self.fail("5 / 0L didn't raise ZeroDivisionError")
+
+        try: 5 // 0L
+        except ZeroDivisionError: pass
+        else: self.fail("5 // 0L didn't raise ZeroDivisionError")
+
+        try: 5 % 0L
+        except ZeroDivisionError: pass
+        else: self.fail("5 % 0L didn't raise ZeroDivisionError")
+
+    def test_numeric_types(self):
+        if 0 != 0L or 0 != 0.0 or 0L != 0.0: self.fail('mixed comparisons')
+        if 1 != 1L or 1 != 1.0 or 1L != 1.0: self.fail('mixed comparisons')
+        if -1 != -1L or -1 != -1.0 or -1L != -1.0:
+            self.fail('int/long/float value not equal')
+        # calling built-in types without argument must return 0
+        if int() != 0: self.fail('int() does not return 0')
+        if long() != 0L: self.fail('long() does not return 0L')
+        if float() != 0.0: self.fail('float() does not return 0.0')
+        if int(1.9) == 1 == int(1.1) and int(-1.1) == -1 == int(-1.9): pass
+        else: self.fail('int() does not round properly')
+        if long(1.9) == 1L == long(1.1) and long(-1.1) == -1L == long(-1.9): pass
+        else: self.fail('long() does not round properly')
+        if float(1) == 1.0 and float(-1) == -1.0 and float(0) == 0.0: pass
+        else: self.fail('float() does not work properly')
+
+    def test_normal_integers(self):
+        # Ensure the first 256 integers are shared
+        a = 256
+        b = 128*2
+        if a is not b: self.fail('256 is not shared')
+        if 12 + 24 != 36: self.fail('int op')
+        if 12 + (-24) != -12: self.fail('int op')
+        if (-12) + 24 != 12: self.fail('int op')
+        if (-12) + (-24) != -36: self.fail('int op')
+        if not 12 < 24: self.fail('int op')
+        if not -24 < -12: self.fail('int op')
+        # Test for a particular bug in integer multiply
+        xsize, ysize, zsize = 238, 356, 4
+        if not (xsize*ysize*zsize == zsize*xsize*ysize == 338912):
+            self.fail('int mul commutativity')
+        # And another.
+        m = -sys.maxint - 1
+        for divisor in 1, 2, 4, 8, 16, 32:
+            j = m // divisor
+            prod = divisor * j
+            if prod != m:
+                self.fail("%r * %r == %r != %r" % (divisor, j, prod, m))
+            if type(prod) is not int:
+                self.fail("expected type(prod) to be int, not %r" %
+                                   type(prod))
+        # Check for expected * overflow to long.
+        for divisor in 1, 2, 4, 8, 16, 32:
+            j = m // divisor - 1
+            prod = divisor * j
+            if type(prod) is not long:
+                self.fail("expected type(%r) to be long, not %r" %
+                                   (prod, type(prod)))
+        # Check for expected * overflow to long.
+        m = sys.maxint
+        for divisor in 1, 2, 4, 8, 16, 32:
+            j = m // divisor + 1
+            prod = divisor * j
+            if type(prod) is not long:
+                self.fail("expected type(%r) to be long, not %r" %
+                                   (prod, type(prod)))
+
+    def test_long_integers(self):
+        if 12L + 24L != 36L: self.fail('long op')
+        if 12L + (-24L) != -12L: self.fail('long op')
+        if (-12L) + 24L != 12L: self.fail('long op')
+        if (-12L) + (-24L) != -36L: self.fail('long op')
+        if not 12L < 24L: self.fail('long op')
+        if not -24L < -12L: self.fail('long op')
+        x = sys.maxint
+        if int(long(x)) != x: self.fail('long op')
+        try: y = int(long(x)+1L)
+        except OverflowError: self.fail('long op')
+        if not isinstance(y, long): self.fail('long op')
+        x = -x
+        if int(long(x)) != x: self.fail('long op')
+        x = x-1
+        if int(long(x)) != x: self.fail('long op')
+        try: y = int(long(x)-1L)
+        except OverflowError: self.fail('long op')
+        if not isinstance(y, long): self.fail('long op')
+
+        try: 5 << -5
+        except ValueError: pass
+        else: self.fail('int negative shift <<')
+
+        try: 5L << -5L
+        except ValueError: pass
+        else: self.fail('long negative shift <<')
+
+        try: 5 >> -5
+        except ValueError: pass
+        else: self.fail('int negative shift >>')
+
+        try: 5L >> -5L
+        except ValueError: pass
+        else: self.fail('long negative shift >>')
+
+    def test_floats(self):
+        if 12.0 + 24.0 != 36.0: self.fail('float op')
+        if 12.0 + (-24.0) != -12.0: self.fail('float op')
+        if (-12.0) + 24.0 != 12.0: self.fail('float op')
+        if (-12.0) + (-24.0) != -36.0: self.fail('float op')
+        if not 12.0 < 24.0: self.fail('float op')
+        if not -24.0 < -12.0: self.fail('float op')
+
+    def test_strings(self):
+        if len('') != 0: self.fail('len(\'\')')
+        if len('a') != 1: self.fail('len(\'a\')')
+        if len('abcdef') != 6: self.fail('len(\'abcdef\')')
+        if 'xyz' + 'abcde' != 'xyzabcde': self.fail('string concatenation')
+        if 'xyz'*3 != 'xyzxyzxyz': self.fail('string repetition *3')
+        if 0*'abcde' != '': self.fail('string repetition 0*')
+        if min('abc') != 'a' or max('abc') != 'c': self.fail('min/max string')
+        if 'a' in 'abc' and 'b' in 'abc' and 'c' in 'abc' and 'd' not in 'abc': pass
+        else: self.fail('in/not in string')
+        x = 'x'*103
+        if '%s!'%x != x+'!': self.fail('nasty string formatting bug')
+
+        #extended slices for strings
+        a = '0123456789'
+        self.assertEqual(a[::], a)
+        self.assertEqual(a[::2], '02468')
+        self.assertEqual(a[1::2], '13579')
+        self.assertEqual(a[::-1],'9876543210')
+        self.assertEqual(a[::-2], '97531')
+        self.assertEqual(a[3::-2], '31')
+        self.assertEqual(a[-100:100:], a)
+        self.assertEqual(a[100:-100:-1], a[::-1])
+        self.assertEqual(a[-100L:100L:2L], '02468')
+
+        if have_unicode:
+            a = unicode('0123456789', 'ascii')
+            self.assertEqual(a[::], a)
+            self.assertEqual(a[::2], unicode('02468', 'ascii'))
+            self.assertEqual(a[1::2], unicode('13579', 'ascii'))
+            self.assertEqual(a[::-1], unicode('9876543210', 'ascii'))
+            self.assertEqual(a[::-2], unicode('97531', 'ascii'))
+            self.assertEqual(a[3::-2], unicode('31', 'ascii'))
+            self.assertEqual(a[-100:100:], a)
+            self.assertEqual(a[100:-100:-1], a[::-1])
+            self.assertEqual(a[-100L:100L:2L], unicode('02468', 'ascii'))
+
+
+    def test_type_function(self):
+        self.assertRaises(TypeError, type, 1, 2)
+        self.assertRaises(TypeError, type, 1, 2, 3, 4)
+
+    def test_buffers(self):
+        self.assertRaises(ValueError, buffer, 'asdf', -1)
+        self.assertRaises(TypeError, buffer, None)
+
+        a = buffer('asdf')
+        hash(a)
+        b = a * 5
+        if a == b:
+            self.fail('buffers should not be equal')
+        if str(b) != ('asdf' * 5):
+            self.fail('repeated buffer has wrong content')
+        if str(a * 0) != '':
+            self.fail('repeated buffer zero times has wrong content')
+        if str(a + buffer('def')) != 'asdfdef':
+            self.fail('concatenation of buffers yields wrong content')
+        if str(buffer(a)) != 'asdf':
+            self.fail('composing buffers failed')
+        if str(buffer(a, 2)) != 'df':
+            self.fail('specifying buffer offset failed')
+        if str(buffer(a, 0, 2)) != 'as':
+            self.fail('specifying buffer size failed')
+        if str(buffer(a, 1, 2)) != 'sd':
+            self.fail('specifying buffer offset and size failed')
+        self.assertRaises(ValueError, buffer, buffer('asdf', 1), -1)
+        if str(buffer(buffer('asdf', 0, 2), 0)) != 'as':
+            self.fail('composing length-specified buffer failed')
+        if str(buffer(buffer('asdf', 0, 2), 0, 5000)) != 'as':
+            self.fail('composing length-specified buffer failed')
+        if str(buffer(buffer('asdf', 0, 2), 0, -1)) != 'as':
+            self.fail('composing length-specified buffer failed')
+        if str(buffer(buffer('asdf', 0, 2), 1, 2)) != 's':
+            self.fail('composing length-specified buffer failed')
+
+        try: a[1] = 'g'
+        except TypeError: pass
+        else: self.fail("buffer assignment should raise TypeError")
+
+        try: a[0:1] = 'g'
+        except TypeError: pass
+        else: self.fail("buffer slice assignment should raise TypeError")
+
+        # array.array() returns an object that does not implement a char buffer,
+        # something which int() uses for conversion.
+        import array
+        try: int(buffer(array.array('c')))
+        except TypeError: pass
+        else: self.fail("char buffer (at C level) not working")
+
+def test_main():
+    run_unittest(TypesTests)
+
+if __name__ == '__main__':
+    test_main()
index 517ecfddfeb1693ab589ff1a0de5e16c0c1f5a4e..38ff9acd5014ea93bd111c4b0cf99e0ab9bfd3cc 100644 (file)
@@ -92,6 +92,9 @@ class UnicodeTest(
                 "\\xfe\\xff'")
             testrepr = repr(u''.join(map(unichr, xrange(256))))
             self.assertEqual(testrepr, latin1repr)
+            # Test repr works on wide unicode escapes without overflow.
+            self.assertEqual(repr(u"\U00010000" * 39 + u"\uffff" * 4096),
+                             repr(u"\U00010000" * 39 + u"\uffff" * 4096))
 
     def test_iterators(self):
         # Make sure unicode objects have an __iter__ method
index e9517c508c51ee38c1a8a7a8a9dc0b85a02f4028..8fc88a5f2e858f86816410f882177b403a4d9379 100644 (file)
@@ -1,3 +1,56 @@
+from test import test_support
+import unittest
+
 import xdrlib
 
-xdrlib._test()
+class XDRTest(unittest.TestCase):
+
+    def test_xdr(self):
+        p = xdrlib.Packer()
+
+        s = 'hello world'
+        a = ['what', 'is', 'hapnin', 'doctor']
+
+        p.pack_int(42)
+        p.pack_uint(9)
+        p.pack_bool(True)
+        p.pack_bool(False)
+        p.pack_uhyper(45L)
+        p.pack_float(1.9)
+        p.pack_double(1.9)
+        p.pack_string(s)
+        p.pack_list(range(5), p.pack_uint)
+        p.pack_array(a, p.pack_string)
+
+        # now verify
+        data = p.get_buffer()
+        up = xdrlib.Unpacker(data)
+
+        self.assertEqual(up.get_position(), 0)
+
+        self.assertEqual(up.unpack_int(), 42)
+        self.assertEqual(up.unpack_uint(), 9)
+        self.assert_(up.unpack_bool() is True)
+
+        # remember position
+        pos = up.get_position()
+        self.assert_(up.unpack_bool() is False)
+
+        # rewind and unpack again
+        up.set_position(pos)
+        self.assert_(up.unpack_bool() is False)
+
+        self.assertEqual(up.unpack_uhyper(), 45L)
+        self.assertAlmostEqual(up.unpack_float(), 1.9)
+        self.assertAlmostEqual(up.unpack_double(), 1.9)
+        self.assertEqual(up.unpack_string(), s)
+        self.assertEqual(up.unpack_list(up.unpack_uint), range(5))
+        self.assertEqual(up.unpack_array(up.unpack_string), a)
+        up.done()
+        self.assertRaises(EOFError, up.unpack_uint)
+
+def test_main():
+    test_support.run_unittest(XDRTest)
+
+if __name__ == "__main__":
+    test_main()
index 64d8fe86bc1af04b51f9c69efefac769efa0f640..ccc1b602ecb8130ec1669daab17772f10018e70b 100644 (file)
@@ -86,6 +86,15 @@ class XMLRPCTestCase(unittest.TestCase):
         s = xmlrpclib.dumps((new_d,), methodresponse=True)
         self.assert_(isinstance(s, str))
 
+    def test_newstyle_class(self):
+        class T(object):
+            pass
+        t = T()
+        t.x = 100
+        t.y = "Hello"
+        ((t2,), dummy) = xmlrpclib.loads(xmlrpclib.dumps((t,)))
+        self.assertEquals(t2, t.__dict__)
+
     def test_dump_big_long(self):
         self.assertRaises(OverflowError, xmlrpclib.dumps, (2L**99,))
 
index 5d652670a9313e7e8523b59757576a5e3a155769..125382216f7f6b9fd5294b456aca5d9e7f2eb05e 100644 (file)
@@ -24,7 +24,7 @@ each time a new token is found."""
 
 __author__ = 'Ka-Ping Yee <ping@lfw.org>'
 __credits__ = \
-    'GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, Skip Montanaro'
+    'GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, Skip Montanaro, Raymond Hettinger'
 
 import string, re
 from token import *
@@ -159,14 +159,73 @@ def tokenize_loop(readline, tokeneater):
     for token_info in generate_tokens(readline):
         tokeneater(*token_info)
 
+class Untokenizer:
+
+    def __init__(self):
+        self.tokens = []
+        self.prev_row = 1
+        self.prev_col = 0
+
+    def add_whitespace(self, start):
+        row, col = start
+        assert row <= self.prev_row
+        col_offset = col - self.prev_col
+        if col_offset:
+            self.tokens.append(" " * col_offset)
+
+    def untokenize(self, iterable):
+        for t in iterable:
+            if len(t) == 2:
+                self.compat(t, iterable)
+                break
+            tok_type, token, start, end, line = t
+            self.add_whitespace(start)
+            self.tokens.append(token)
+            self.prev_row, self.prev_col = end
+            if tok_type in (NEWLINE, NL):
+                self.prev_row += 1
+                self.prev_col = 0
+        return "".join(self.tokens)
+
+    def compat(self, token, iterable):
+        startline = False
+        indents = []
+        toks_append = self.tokens.append
+        toknum, tokval = token
+        if toknum in (NAME, NUMBER):
+            tokval += ' '
+        if toknum in (NEWLINE, NL):
+            startline = True
+        for tok in iterable:
+            toknum, tokval = tok[:2]
+
+            if toknum in (NAME, NUMBER):
+                tokval += ' '
+
+            if toknum == INDENT:
+                indents.append(tokval)
+                continue
+            elif toknum == DEDENT:
+                indents.pop()
+                continue
+            elif toknum in (NEWLINE, NL):
+                startline = True
+            elif startline and indents:
+                toks_append(indents[-1])
+                startline = False
+            toks_append(tokval)
 
 def untokenize(iterable):
     """Transform tokens back into Python source code.
 
     Each element returned by the iterable must be a token sequence
-    with at least two elements, a token number and token value.
+    with at least two elements, a token number and token value.  If
+    only two tokens are passed, the resulting output is poor.
+
+    Round-trip invariant for full input:
+        Untokenized source will match input source exactly
 
-    Round-trip invariant:
+    Round-trip invariant for limited intput:
         # Output text will tokenize the back to the input
         t1 = [tok[:2] for tok in generate_tokens(f.readline)]
         newcode = untokenize(t1)
@@ -174,31 +233,8 @@ def untokenize(iterable):
         t2 = [tok[:2] for tokin generate_tokens(readline)]
         assert t1 == t2
     """
-
-    startline = False
-    indents = []
-    toks = []
-    toks_append = toks.append
-    for tok in iterable:
-        toknum, tokval = tok[:2]
-
-        if toknum in (NAME, NUMBER):
-            tokval += ' '
-
-        if toknum == INDENT:
-            indents.append(tokval)
-            continue
-        elif toknum == DEDENT:
-            indents.pop()
-            continue
-        elif toknum in (NEWLINE, COMMENT, NL):
-            startline = True
-        elif startline and indents:
-            toks_append(indents[-1])
-            startline = False
-        toks_append(tokval)
-    return ''.join(toks)
-
+    ut = Untokenizer()
+    return ut.untokenize(iterable)
 
 def generate_tokens(readline):
     """
@@ -237,7 +273,7 @@ def generate_tokens(readline):
             if endmatch:
                 pos = end = endmatch.end(0)
                 yield (STRING, contstr + line[:end],
-                           strstart, (lnum, end), contline + line)
+                       strstart, (lnum, end), contline + line)
                 contstr, needcont = '', 0
                 contline = None
             elif needcont and line[-2:] != '\\\n' and line[-3:] != '\\\r\n':
@@ -263,7 +299,15 @@ def generate_tokens(readline):
             if pos == max: break
 
             if line[pos] in '#\r\n':           # skip comments or blank lines
-                yield ((NL, COMMENT)[line[pos] == '#'], line[pos:],
+                if line[pos] == '#':
+                    comment_token = line[pos:].rstrip('\r\n')
+                    nl_pos = pos + len(comment_token)
+                    yield (COMMENT, comment_token,
+                           (lnum, pos), (lnum, pos + len(comment_token)), line)
+                    yield (NL, line[nl_pos:],
+                           (lnum, nl_pos), (lnum, len(line)), line)
+                else:
+                    yield ((NL, COMMENT)[line[pos] == '#'], line[pos:],
                            (lnum, pos), (lnum, len(line)), line)
                 continue
 
@@ -294,9 +338,10 @@ def generate_tokens(readline):
                    (initial == '.' and token != '.'):      # ordinary number
                     yield (NUMBER, token, spos, epos, line)
                 elif initial in '\r\n':
-                    yield (parenlev > 0 and NL or NEWLINE,
-                               token, spos, epos, line)
+                    yield (NL if parenlev > 0 else NEWLINE,
+                           token, spos, epos, line)
                 elif initial == '#':
+                    assert not token.endswith("\n")
                     yield (COMMENT, token, spos, epos, line)
                 elif token in triple_quoted:
                     endprog = endprogs[token]
index eb2fdf690a24b37436ad7be7837d1104551b94fc..e395ad77d6713e17f69c4142bc7f5eda1e4d9562 100644 (file)
@@ -162,6 +162,11 @@ def format_exception_only(etype, value):
 
     """
 
+    # Gracefully handle (the way Python 2.4 and earlier did) the case of
+    # being called with (None, None).
+    if etype is None:
+        return [_format_final_exc_line(etype, value)]
+
     stype = etype.__name__
     smod = etype.__module__
     if smod not in ("exceptions", "__main__", "__builtin__"):
index e01f4215f6d1c439ab561e4fd11a1974e6291524..90f7aa07e899d37f6cd337fc02888040848c8d5f 100644 (file)
@@ -302,13 +302,13 @@ class URLopener:
 
         if proxy_passwd:
             import base64
-            proxy_auth = base64.encodestring(proxy_passwd).strip()
+            proxy_auth = base64.b64encode(proxy_passwd).strip()
         else:
             proxy_auth = None
 
         if user_passwd:
             import base64
-            auth = base64.encodestring(user_passwd).strip()
+            auth = base64.b64encode(user_passwd).strip()
         else:
             auth = None
         h = httplib.HTTP(host)
@@ -387,12 +387,12 @@ class URLopener:
             if not host: raise IOError, ('https error', 'no host given')
             if proxy_passwd:
                 import base64
-                proxy_auth = base64.encodestring(proxy_passwd).strip()
+                proxy_auth = base64.b64encode(proxy_passwd).strip()
             else:
                 proxy_auth = None
             if user_passwd:
                 import base64
-                auth = base64.encodestring(user_passwd).strip()
+                auth = base64.b64encode(user_passwd).strip()
             else:
                 auth = None
             h = httplib.HTTPS(host, 0,
index 1e19f33d12f7d286281e38b201fb9acc9dc15f3a..a880e647a81d572a77527dc076bd730bff83bbb8 100644 (file)
@@ -674,7 +674,7 @@ class ProxyHandler(BaseHandler):
             proxy_type = orig_type
         if user and password:
             user_pass = '%s:%s' % (unquote(user), unquote(password))
-            creds = base64.encodestring(user_pass).strip()
+            creds = base64.b64encode(user_pass).strip()
             req.add_header('Proxy-authorization', 'Basic ' + creds)
         hostport = unquote(hostport)
         req.set_proxy(hostport, proxy_type)
@@ -798,7 +798,7 @@ class AbstractBasicAuthHandler:
         user, pw = self.passwd.find_user_password(realm, host)
         if pw is not None:
             raw = "%s:%s" % (user, pw)
-            auth = 'Basic %s' % base64.encodestring(raw).strip()
+            auth = 'Basic %s' % base64.b64encode(raw).strip()
             if req.headers.get(self.auth_header, None) == auth:
                 return None
             req.add_header(self.auth_header, auth)
index 3ccedb0b1df7a145417aca3e223de997c7a8498e..da89f7298d44f277e34a45e069d61d74b030b3de 100755 (executable)
--- a/Lib/uu.py
+++ b/Lib/uu.py
@@ -114,6 +114,7 @@ def decode(in_file, out_file=None, mode=None, quiet=0):
     #
     # Open the output file
     #
+    opened = False
     if out_file == '-':
         out_file = sys.stdout
     elif isinstance(out_file, basestring):
@@ -123,6 +124,7 @@ def decode(in_file, out_file=None, mode=None, quiet=0):
         except AttributeError:
             pass
         out_file = fp
+        opened = True
     #
     # Main decoding loop
     #
@@ -140,6 +142,8 @@ def decode(in_file, out_file=None, mode=None, quiet=0):
         s = in_file.readline()
     if not s:
         raise Error('Truncated input file')
+    if opened:
+        out_file.close()
 
 def test():
     """uuencode/uudecode main program"""
index 9fd1615604c7afd6505fb30b76caa91cc8697ca7..0d5f44f7b2bce251d7bf0af167d8e13d21104cd9 100644 (file)
@@ -165,7 +165,10 @@ class GenericBrowser(BaseBrowser):
         cmdline = [self.name] + [arg.replace("%s", url)
                                  for arg in self.args]
         try:
-            p = subprocess.Popen(cmdline, close_fds=True)
+            if sys.platform[:3] == 'win':
+                p = subprocess.Popen(cmdline)
+            else:
+                p = subprocess.Popen(cmdline, close_fds=True)
             return not p.wait()
         except OSError:
             return False
@@ -178,11 +181,14 @@ class BackgroundBrowser(GenericBrowser):
     def open(self, url, new=0, autoraise=1):
         cmdline = [self.name] + [arg.replace("%s", url)
                                  for arg in self.args]
-        setsid = getattr(os, 'setsid', None)
-        if not setsid:
-            setsid = getattr(os, 'setpgrp', None)
         try:
-            p = subprocess.Popen(cmdline, close_fds=True, preexec_fn=setsid)
+            if sys.platform[:3] == 'win':
+                p = subprocess.Popen(cmdline)
+            else:
+                setsid = getattr(os, 'setsid', None)
+                if not setsid:
+                    setsid = getattr(os, 'setpgrp', None)
+                p = subprocess.Popen(cmdline, close_fds=True, preexec_fn=setsid)
             return (p.poll() is None)
         except OSError:
             return False
@@ -441,7 +447,7 @@ def register_X_browsers():
 
         # if successful, register it
         if retncode is None and commd:
-            register("gnome", None, BackgroundBrowser(commd))
+            register("gnome", None, BackgroundBrowser(commd.split()))
 
     # First, the Mozilla/Netscape browsers
     for browser in ("mozilla-firefox", "firefox",
index b349eb9b7949944ca66d4e3f7f54a2ac8548473e..796dfafd2fff6489c0e083edd38cbcebb32eaf8d 100644 (file)
@@ -227,61 +227,3 @@ class Unpacker:
     def unpack_array(self, unpack_item):
         n = self.unpack_uint()
         return self.unpack_farray(n, unpack_item)
-
-
-# test suite
-def _test():
-    p = Packer()
-    packtest = [
-        (p.pack_uint,    (9,)),
-        (p.pack_bool,    (True,)),
-        (p.pack_bool,    (False,)),
-        (p.pack_uhyper,  (45L,)),
-        (p.pack_float,   (1.9,)),
-        (p.pack_double,  (1.9,)),
-        (p.pack_string,  ('hello world',)),
-        (p.pack_list,    (range(5), p.pack_uint)),
-        (p.pack_array,   (['what', 'is', 'hapnin', 'doctor'], p.pack_string)),
-        ]
-    succeedlist = [1] * len(packtest)
-    count = 0
-    for method, args in packtest:
-        print 'pack test', count,
-        try:
-            method(*args)
-            print 'succeeded'
-        except ConversionError, var:
-            print 'ConversionError:', var.msg
-            succeedlist[count] = 0
-        count = count + 1
-    data = p.get_buffer()
-    # now verify
-    up = Unpacker(data)
-    unpacktest = [
-        (up.unpack_uint,   (), lambda x: x == 9),
-        (up.unpack_bool,   (), lambda x: x is True),
-        (up.unpack_bool,   (), lambda x: x is False),
-        (up.unpack_uhyper, (), lambda x: x == 45L),
-        (up.unpack_float,  (), lambda x: 1.89 < x < 1.91),
-        (up.unpack_double, (), lambda x: 1.89 < x < 1.91),
-        (up.unpack_string, (), lambda x: x == 'hello world'),
-        (up.unpack_list,   (up.unpack_uint,), lambda x: x == range(5)),
-        (up.unpack_array,  (up.unpack_string,),
-         lambda x: x == ['what', 'is', 'hapnin', 'doctor']),
-        ]
-    count = 0
-    for method, args, pred in unpacktest:
-        print 'unpack test', count,
-        try:
-            if succeedlist[count]:
-                x = method(*args)
-                print pred(x) and 'succeeded' or 'failed', ':', x
-            else:
-                print 'skipping'
-        except ConversionError, var:
-            print 'ConversionError:', var.msg
-        count = count + 1
-
-
-if __name__ == '__main__':
-    _test()
index 72866f1cf813f1681a1c927bd76500e2474ee673..da3d396aa0525af4982a392b83a29f2b51c54b4f 100644 (file)
@@ -593,9 +593,21 @@ class Marshaller:
         try:
             f = self.dispatch[type(value)]
         except KeyError:
-            raise TypeError, "cannot marshal %s objects" % type(value)
-        else:
-            f(self, value, write)
+            # check if this object can be marshalled as a structure
+            try:
+                value.__dict__
+            except:
+                raise TypeError, "cannot marshal %s objects" % type(value)
+            # check if this class is a sub-class of a basic type,
+            # because we don't know how to marshal these types
+            # (e.g. a string sub-class)
+            for type_ in type(value).__mro__:
+                if type_ in self.dispatch.keys():
+                    raise TypeError, "cannot marshal %s objects" % type(value)
+            # XXX(twouters): using "_arbitrary_instance" as key as a quick-fix
+            # for the p3yk merge, this should probably be fixed more neatly.
+            f = self.dispatch["_arbitrary_instance"]
+        f(self, value, write)
 
     def dump_nil (self, value, write):
         if not self.allow_none:
@@ -713,6 +725,9 @@ class Marshaller:
             self.dump_struct(value.__dict__, write)
     dispatch[DateTime] = dump_instance
     dispatch[Binary] = dump_instance
+    # XXX(twouters): using "_arbitrary_instance" as key as a quick-fix
+    # for the p3yk merge, this should probably be fixed more neatly.
+    dispatch["_arbitrary_instance"] = dump_instance
 
 ##
 # XML-RPC unmarshaller.
index 083209b2c2cbba33be94340545eacfca03466137..8bdebe6806d0635a9f4109adfb25741276c641c6 100755 (executable)
@@ -10,9 +10,10 @@ bootstrap issues (/usr/bin/python is Python 2.3 on OSX 10.4)
 Usage: see USAGE variable in the script.
 """
 import platform, os, sys, getopt, textwrap, shutil, urllib2, stat, time, pwd
+import grp
 
-INCLUDE_TIMESTAMP=1
-VERBOSE=1
+INCLUDE_TIMESTAMP = 1
+VERBOSE = 1
 
 from plistlib import Plist
 
@@ -32,7 +33,7 @@ except ImportError:
 
 def shellQuote(value):
     """
-    Return the string value in a form that can savely be inserted into
+    Return the string value in a form that can safely be inserted into
     a shell command.
     """
     return "'%s'"%(value.replace("'", "'\"'\"'"))
@@ -55,28 +56,28 @@ def getFullVersion():
 
     raise RuntimeError, "Cannot find full version??"
 
-# The directory we'll use to create the build, will be erased and recreated
-WORKDIR="/tmp/_py"
+# The directory we'll use to create the build (will be erased and recreated)
+WORKDIR = "/tmp/_py"
 
-# The directory we'll use to store third-party sources, set this to something
+# The directory we'll use to store third-party sources. Set this to something
 # else if you don't want to re-fetch required libraries every time.
-DEPSRC=os.path.join(WORKDIR, 'third-party')
-DEPSRC=os.path.expanduser('~/Universal/other-sources')
+DEPSRC = os.path.join(WORKDIR, 'third-party')
+DEPSRC = os.path.expanduser('~/Universal/other-sources')
 
 # Location of the preferred SDK
-SDKPATH="/Developer/SDKs/MacOSX10.4u.sdk"
-#SDKPATH="/"
+SDKPATH = "/Developer/SDKs/MacOSX10.4u.sdk"
+#SDKPATH = "/"
 
-ARCHLIST=('i386', 'ppc',)
+ARCHLIST = ('i386', 'ppc',)
 
 # Source directory (asume we're in Mac/BuildScript)
-SRCDIR=os.path.dirname(
+SRCDIR = os.path.dirname(
         os.path.dirname(
             os.path.dirname(
                 os.path.abspath(__file__
         ))))
 
-USAGE=textwrap.dedent("""\
+USAGE = textwrap.dedent("""\
     Usage: build_python [options]
 
     Options:
@@ -91,7 +92,7 @@ USAGE=textwrap.dedent("""\
 
 # Instructions for building libraries that are necessary for building a
 # batteries included python.
-LIBRARY_RECIPES=[
+LIBRARY_RECIPES = [
     dict(
         name="Bzip2 1.0.3",
         url="http://www.bzip.org/1.0.3/bzip2-1.0.3.tar.gz",
@@ -183,7 +184,7 @@ LIBRARY_RECIPES=[
 
 
 # Instructions for building packages inside the .mpkg.
-PKG_RECIPES=[
+PKG_RECIPES = [
     dict(
         name="PythonFramework",
         long_name="Python Framework",
@@ -200,7 +201,7 @@ PKG_RECIPES=[
         long_name="GUI Applications",
         source="/Applications/MacPython %(VER)s",
         readme="""\
-            This package installs IDLE (an interactive Python IDLE),
+            This package installs IDLE (an interactive Python IDE),
             Python Launcher and Build Applet (create application bundles
             from python scripts).
 
@@ -256,8 +257,7 @@ PKG_RECIPES=[
         readme="""\
             This package updates the system python installation on
             Mac OS X 10.3 to ensure that you can build new python extensions
-            using that copy of python after installing this version of
-            python.
+            using that copy of python after installing this version.
             """,
         postflight="../Tools/fixapplepython23.py",
         topdir="/Library/Frameworks/Python.framework",
@@ -323,7 +323,7 @@ def checkEnvironment():
 
 
 
-def parseOptions(args = None):
+def parseOptions(args=None):
     """
     Parse arguments and update global settings.
     """
@@ -636,15 +636,15 @@ def buildPython():
     print "Running make"
     runCommand("make")
 
-    print "Runing make frameworkinstall"
+    print "Running make frameworkinstall"
     runCommand("make frameworkinstall DESTDIR=%s"%(
         shellQuote(rootDir)))
 
-    print "Runing make frameworkinstallextras"
+    print "Running make frameworkinstallextras"
     runCommand("make frameworkinstallextras DESTDIR=%s"%(
         shellQuote(rootDir)))
 
-    print "Copy required shared libraries"
+    print "Copying required shared libraries"
     if os.path.exists(os.path.join(WORKDIR, 'libraries', 'Library')):
         runCommand("mv %s/* %s"%(
             shellQuote(os.path.join(
@@ -657,9 +657,13 @@ def buildPython():
 
     print "Fix file modes"
     frmDir = os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework')
+    gid = grp.getgrnam('admin').gr_gid
+
     for dirpath, dirnames, filenames in os.walk(frmDir):
         for dn in dirnames:
             os.chmod(os.path.join(dirpath, dn), 0775)
+            os.chown(os.path.join(dirpath, dn), -1, gid)
+
 
         for fn in filenames:
             if os.path.islink(fn):
@@ -668,7 +672,8 @@ def buildPython():
             # "chmod g+w $fn"
             p = os.path.join(dirpath, fn)
             st = os.stat(p)
-            os.chmod(p, stat.S_IMODE(st.st_mode) | stat.S_IXGRP)
+            os.chmod(p, stat.S_IMODE(st.st_mode) | stat.S_IWGRP)
+            os.chown(p, -1, gid)
 
     # We added some directories to the search path during the configure
     # phase. Remove those because those directories won't be there on
@@ -729,8 +734,8 @@ def patchScript(inPath, outPath):
 def packageFromRecipe(targetDir, recipe):
     curdir = os.getcwd()
     try:
-        # The major version (such as 2.5) is included in the pacakge name
-        # because haveing two version of python installed at the same time is
+        # The major version (such as 2.5) is included in the package name
+        # because having two version of python installed at the same time is
         # common.
         pkgname = '%s-%s'%(recipe['name'], getVersion())
         srcdir  = recipe.get('source')
@@ -904,7 +909,7 @@ def installSize(clear=False, _saved=[]):
 
 def buildDMG():
     """
-    Create DMG containing the rootDir
+    Create DMG containing the rootDir.
     """
     outdir = os.path.join(WORKDIR, 'diskimage')
     if os.path.exists(outdir):
@@ -917,7 +922,7 @@ def buildDMG():
     imagepath = imagepath + '.dmg'
 
     os.mkdir(outdir)
-    runCommand("hdiutil create -volname 'Univeral MacPython %s' -srcfolder %s %s"%(
+    runCommand("hdiutil create -volname 'Universal MacPython %s' -srcfolder %s %s"%(
             getFullVersion(),
             shellQuote(os.path.join(WORKDIR, 'installer')),
             shellQuote(imagepath)))
@@ -945,6 +950,10 @@ def setIcon(filePath, icnsPath):
     ref, isDirectory = Carbon.File.FSPathMakeRef(filePath)
 
     if isDirectory:
+        # There is a problem with getting this into the pax(1) archive,
+        # just ignore directory icons for now.
+        return
+
         tmpPath = os.path.join(filePath, "Icon\r")
         if not os.path.exists(tmpPath):
             fp = open(tmpPath, 'w')
index 85d400fe123f4f61c44ce4dcc3ee82157051e3c5..9f5918ed78d089bddd3e6f32f52ea45d44ff9766 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# FIXME
 PYVER="@PYVER@"
 
 if [ -d /Developer/Documentation ]; then
@@ -8,5 +7,5 @@ if [ -d /Developer/Documentation ]; then
                mkdir -p /Developer/Documentation/Python
        fi
 
-       ln -fhs /Library/Frameworks/Python.framework/Versions/${PYVER}/Resources/English.lproj/Documentation "/Developer/Documentation/Python/Reference Documentation"
+       ln -fhs /Library/Frameworks/Python.framework/Versions/${PYVER}/Resources/English.lproj/Documentation "/Developer/Documentation/Python/Reference Documentation @PYVER@"
 fi
index c42e11e31b695541b06932a219b78a710cb21457..5e82f331cfa32a83015a8216f1f3e71cfdc489bc 100755 (executable)
@@ -47,22 +47,29 @@ done
 echo "${PYTHON_ROOT}/bin is not on your PATH or at least not early enough"
 case "${BSH}" in
 *csh)
+       if [ -f "${HOME}/.tcshrc" ]; then
+               RC="${HOME}/.tcshrc"
+       else
+               RC="${HOME}/.cshrc"
+       fi
        # Create backup copy before patching
-       if [ -f "${HOME}/.cshrc" ]; then
-               cp -fp "${HOME}/.cshrc" "${HOME}/.cshrc.pysave"
+       if [ -f "${RC}" ]; then
+               cp -fp "${RC}" "${RC}.pysave"
        fi
-       echo "" >> "${HOME}/.cshrc"
-       echo "# Setting PATH for MacPython ${PYVER}" >> "${HOME}/.cshrc"
-       echo "# The orginal version is saved in .cshrc.pysave" >> "${HOME}/.cshrc"
-       echo "set path=(${PYTHON_ROOT}/bin "'$path'")" >> "${HOME}/.cshrc"
+       echo "" >> "${RC}"
+       echo "# Setting PATH for MacPython ${PYVER}" >> "${RC}"
+       echo "# The orginal version is saved in .cshrc.pysave" >> "${RC}"
+       echo "set path=(${PYTHON_ROOT}/bin "'$path'")" >> "${RC}"
        if [ `id -ur` = 0 ]; then
-               chown "${USER}" "${HOME}/.cshrc"
+               chown "${USER}" "${RC}"
        fi
        exit 0
        ;;
 bash)
        if [ -e "${HOME}/.bash_profile" ]; then
                PR="${HOME}/.bash_profile"
+       elif [ -e "${HOME}/.bash_login" ]; then
+               PR="${HOME}/.bash_login"
        elif [ -e "${HOME}/.profile" ]; then
                PR="${HOME}/.profile"
        else
index 11f14386204572dd7ebea74fc3a8466c2a4343c9..8b2e1dbabf87146423dffd9b307ede4f2a46fe84 100644 (file)
@@ -101,7 +101,7 @@ install_versionedtools:
        fi
 
 
-pythonw: $(srcdir)/Tools/pythonw.c
+pythonw: $(srcdir)/Tools/pythonw.c Makefile
        $(CC) $(LDFLAGS) -o $@ $(srcdir)/Tools/pythonw.c \
                -DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/Python"'
 
@@ -249,3 +249,6 @@ clean:
        rm pythonw
        cd PythonLauncher && make clean
        cd IDLE && make clean
+
+Makefile: $(srcdir)/Makefile.in ../config.status
+       cd .. && CONFIG_FILES=Mac/Makefile CONFIG_HEADERS= $(SHELL) ./config.status
index ba375ba7b096c81f50ea4fa71ab88e4314c40894..1f3695eec17135acd22be2647717ddda4813c250 100755 (executable)
             [NSNumber numberWithBool: inspect], @"inspect",
             [NSNumber numberWithBool: optimize], @"optimize",
             [NSNumber numberWithBool: nosite], @"nosite",
-            [NSNumber numberWithBool: nosite], @"nosite",
+            [NSNumber numberWithBool: tabs], @"tabs",
             others, @"others",
             scriptargs, @"scriptargs",
             [NSNumber numberWithBool: with_terminal], @"with_terminal",
     if (value) optimize = [value boolValue];
     value = [dict objectForKey: @"nosite"];
     if (value) nosite = [value boolValue];
-    value = [dict objectForKey: @"nosite"];
+    value = [dict objectForKey: @"tabs"];
     if (value) tabs = [value boolValue];
     value = [dict objectForKey: @"others"];
     if (value) others = [value retain];
         tabs?" -t":"",
         others,
         [self _replaceSingleQuotes:script],
-        scriptargs,
+        scriptargs ? scriptargs : @"",
         with_terminal? "&& echo Exit status: $? && exit 1" : " &"];
 }
 
index 1e58b02aa0a742f3530285497c8c6259df6fd19a..5e74d7bde37856b14de6f598ef797aebf74dd6f8 100644 (file)
@@ -48,7 +48,7 @@ will have to do the work yourself if you really want this.
 
 A second reason for using frameworks is that they put Python-related items in
 only two places: "/Library/Framework/Python.framework" and 
-"/Applications/MacPython 2.5".  This simplifies matters for users installing 
+"/Applications/MacPython 2.6".  This simplifies matters for users installing 
 Python from a binary distribution if they want to get rid of it again. Moreover,
 due to the way frameworks work a user without admin privileges can install a 
 binary distribution in his or her home directory without recompilation.
@@ -75,7 +75,7 @@ PyObjC.
 
 This directory contains a Makefile that will create a couple of python-related
 applications (fullblown OSX .app applications, that is) in
-"/Applications/MacPython 2.3", and a hidden helper application Python.app 
+"/Applications/MacPython 2.6", and a hidden helper application Python.app 
 inside the Python.framework, and unix tools "python" and "pythonw" into 
 /usr/local/bin.  In addition it has a target "installmacsubtree" that installs 
 the relevant portions of the Mac subtree into the Python.framework.
@@ -90,20 +90,16 @@ in the sequence
  3. make install
 
 This sequence will put the framework in /Library/Framework/Python.framework,
-the applications in /Applications/MacPython 2.5 and the unix tools in 
+the applications in "/Applications/MacPython 2.6" and the unix tools in 
 /usr/local/bin.
 
 Installing in another place, for instance $HOME/Library/Frameworks if you have
 no admin privileges on your machine, has only been tested very lightly. This
 can be done by configuring with --enable-framework=$HOME/Library/Frameworks.
-The other two directories, /Applications/MacPython-2.3 and /usr/local/bin, will 
-then also be deposited in $HOME. This is sub-optimal for the unix tools, which 
-you would want in $HOME/bin, but there is no easy way to fix this right now.
-
-Note that there are no references to the actual locations in the code or
-resource files, so you are free to move things around afterwards. For example,
-you could use --enable-framework=/tmp/newversion/Library/Frameworks and use
-/tmp/newversion as the basis for an installer or something.
+The other two directories, "/Applications/MacPython-2.6" and /usr/local/bin, 
+will then also be deposited in $HOME. This is sub-optimal for the unix tools, 
+which you would want in $HOME/bin, but there is no easy way to fix this right 
+now.
 
 If you want to install some part, but not all, read the main Makefile. The
 frameworkinstall is composed of a couple of sub-targets that install the
@@ -111,7 +107,7 @@ framework itself, the Mac subtree, the applications and the unix tools.
 
 There is an extra target frameworkinstallextras that is not part of the
 normal frameworkinstall which installs the Demo and Tools directories
-into /Applications/MacPython-2.3, this is useful for binary distributions.
+into "/Applications/MacPython 2.6", this is useful for binary distributions.
 
 What do all these programs do?
 ===============================
index fb8645a629b74de93cc10fe9c0e30985e3321b59..6ba54019f0773e5f29bd1bc329aabf96a1e439eb 100644 (file)
@@ -123,7 +123,8 @@ def main():
             makescript(GXX_SCRIPT, "g++")
     #  Finally fix the makefile
     rv = fix(MAKEFILE, do_apply)
-    sys.exit(rv)
+    #sys.exit(rv)
+    sys.exit(0)
 
 if __name__ == '__main__':
     main()
index 9c8d7baa9d673ce5c9894c5e813b4324ec2358ad..19ce69fb83dcb98789382493b1159f37bf310628 100644 (file)
@@ -346,7 +346,7 @@ platform: $(BUILDPYTHON)
 
 # Build the shared modules
 sharedmods: $(BUILDPYTHON)
-       case $$MAKEFLAGS in \
+       @case $$MAKEFLAGS in \
        *-s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \
        *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \
        esac
@@ -457,7 +457,7 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \
                $(SIGNAL_OBJS) \
                $(MODOBJS) \
                $(srcdir)/Modules/getbuildinfo.c
-       $(CC) -c $(PY_CFLAGS) -DSVNVERSION=\"`LANG=C $(SVNVERSION)`\" -o $@ $(srcdir)/Modules/getbuildinfo.c
+       $(CC) -c $(PY_CFLAGS) -DSVNVERSION=\"`LC_ALL=C $(SVNVERSION)`\" -o $@ $(srcdir)/Modules/getbuildinfo.c
 
 Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile
        $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \
index 11e9551055269147cb237b8cb19572138792abcb..d5d7675bc25d48bf332d6c4693e7ad4a96e917ad 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -242,6 +242,7 @@ Dag Gruneau
 Michael Guravage
 Lars Gustäbel
 Barry Haddow
+Václav Haisman
 Paul ten Hagen
 Rasmus Hahn
 Peter Haight
@@ -365,6 +366,7 @@ Detlef Lannert
 Soren Larsen
 Piers Lauder
 Ben Laurie
+Simon Law
 Chris Lawrence
 Christopher Lee
 Inyeol Lee
@@ -611,6 +613,7 @@ William Tanksley
 Christian Tanzer
 Steven Taschuk
 Amy Taylor
+Monty Taylor
 Tobias Thelen
 Robin Thomas
 Eric Tiedemann
@@ -631,6 +634,7 @@ Stephen Turner
 Bill Tutt
 Doobee R. Tzeck
 Lionel Ulmer
+Roger Upole
 Michael Urman
 Hector Urtubia
 Dmitry Vasiliev
index be4ca88ff54d79f65876e475bee62403a952702d..f2452f2b973b3d79dcf179b55c31b8aeb2094080 100644 (file)
@@ -11679,7 +11679,7 @@ Changes to the build process
 - The way GNU readline is configured is totally different.  The
 --with-readline configure option is gone.  It is now an extension
 module, which may be loaded dynamically.  You must enable it (and
-specify the correct linraries to link with) in the Modules/Setup file.
+specify the correct libraries to link with) in the Modules/Setup file.
 Importing the module installs some hooks which enable command line
 editing.  When the interpreter shell is invoked interactively, it
 attempts to import the readline module; when this fails, the default
index 952ca42d99654d5c64a51d234f6c3df3f75d2306..fa87d92ad321b3ec81d7e4a4a20e27895c26eb26 100644 (file)
@@ -91,7 +91,7 @@ dynamically allocated memory blocks.  The special bit patterns are:
 
 #define CLEANBYTE     0xCB   /* clean (newly allocated) memory */
 #define DEADBYTE      0xDB   /* dead (newly freed) memory */
-#define FORBIDDENBYTE 0xFB   /* fordidden -- untouchable bytes */
+#define FORBIDDENBYTE 0xFB   /* forbidden -- untouchable bytes */
 
 Strings of these bytes are unlikely to be valid addresses, floats, or 7-bit
 ASCII strings.
index 08c54d24e88d32248c23d12f776bb50f9498c02b..21c375d9db79c061e0c5a48704030136eabbc0f5 100644 (file)
@@ -62,39 +62,39 @@ endif
 
 
 if exists("python_highlight_builtins")
-  syn keyword pythonBuiltin    unichr all set abs vars int __import__ unicode
-  syn keyword pythonBuiltin    enumerate exit issubclass
-  syn keyword pythonBuiltin    divmod file Ellipsis isinstance open any
-  syn keyword pythonBuiltin    locals help filter basestring slice copyright min
-  syn keyword pythonBuiltin    super sum tuple hex execfile long id chr
-  syn keyword pythonBuiltin    complex bool zip pow dict True oct NotImplemented
-  syn keyword pythonBuiltin    map None float hash getattr buffer max reversed
-  syn keyword pythonBuiltin    object quit len repr callable credits setattr
-  syn keyword pythonBuiltin    eval frozenset sorted ord __debug__ hasattr
-  syn keyword pythonBuiltin    delattr False license classmethod type
-  syn keyword pythonBuiltin    list iter reload range globals
-  syn keyword pythonBuiltin    staticmethod str property round dir cmp
+  syn keyword pythonBuiltin    Ellipsis False None NotImplemented True __debug__
+  syn keyword pythonBuiltin    __import__ abs all any basestring bool
+  syn keyword pythonBuiltin    buffer callable chr classmethod cmp
+  syn keyword pythonBuiltin    complex copyright credits delattr dict
+  syn keyword pythonBuiltin    dir divmod enumerate eval execfile exit file
+  syn keyword pythonBuiltin    filter float frozenset getattr globals hasattr
+  syn keyword pythonBuiltin    hash help hex id int isinstance
+  syn keyword pythonBuiltin    issubclass iter len license list locals long map
+  syn keyword pythonBuiltin    max min object oct open ord pow property quit
+  syn keyword pythonBuiltin    range reload repr reversed round
+  syn keyword pythonBuiltin    set setattr slice sorted staticmethod str sum
+  syn keyword pythonBuiltin    super tuple type unichr unicode vars zip
 
 endif
 
 
 if exists("python_highlight_exceptions")
-  syn keyword pythonException    GeneratorExit ImportError RuntimeError
-  syn keyword pythonException    UnicodeTranslateError MemoryError StopIteration
-  syn keyword pythonException    PendingDeprecationWarning EnvironmentError
-  syn keyword pythonException    LookupError OSError DeprecationWarning
-  syn keyword pythonException    UnicodeError UnicodeEncodeError
-  syn keyword pythonException    FloatingPointError ReferenceError NameError
-  syn keyword pythonException    IOError SyntaxError
-  syn keyword pythonException    FutureWarning ImportWarning SystemExit
-  syn keyword pythonException    Exception EOFError StandardError ValueError
-  syn keyword pythonException    TabError KeyError ZeroDivisionError SystemError
-  syn keyword pythonException    UnicodeDecodeError IndentationError
-  syn keyword pythonException    AssertionError TypeError IndexError
-  syn keyword pythonException    RuntimeWarning KeyboardInterrupt UserWarning
-  syn keyword pythonException    SyntaxWarning UnboundLocalError ArithmeticError
-  syn keyword pythonException    Warning NotImplementedError AttributeError
-  syn keyword pythonException    OverflowError BaseException
+  syn keyword pythonException    ArithmeticError AssertionError AttributeError
+  syn keyword pythonException    BaseException DeprecationWarning EOFError
+  syn keyword pythonException    EnvironmentError Exception FloatingPointError
+  syn keyword pythonException    FutureWarning GeneratorExit IOError ImportError
+  syn keyword pythonException    ImportWarning IndentationError IndexError
+  syn keyword pythonException    KeyError KeyboardInterrupt LookupError
+  syn keyword pythonException    MemoryError NameError NotImplementedError
+  syn keyword pythonException    OSError OverflowError PendingDeprecationWarning
+  syn keyword pythonException    ReferenceError RuntimeError RuntimeWarning
+  syn keyword pythonException    StandardError StopIteration SyntaxError
+  syn keyword pythonException    SyntaxWarning SystemError SystemExit TabError
+  syn keyword pythonException    TypeError UnboundLocalError UnicodeDecodeError
+  syn keyword pythonException    UnicodeEncodeError UnicodeError
+  syn keyword pythonException    UnicodeTranslateError UnicodeWarning
+  syn keyword pythonException    UserWarning ValueError Warning
+  syn keyword pythonException    ZeroDivisionError
 
 endif
 
index 3f2a3d8a23acb6f99b8ac70d7ce9356ce7ae1893..55dd27702d6aa8cd4ce8a1a0496617c8551bb43a 100644 (file)
@@ -5,9 +5,9 @@ import exceptions
 import __builtin__
 from string import Template
 
-comment_header = """" Auto-generated Vim syntax file for Python
+comment_header = '''" Auto-generated Vim syntax file for Python.
 "
-" To use: copy or symlink to ~/.vim/syntax/python.vim"""
+" To use: copy or symlink to ~/.vim/syntax/python.vim'''
 
 statement_header = """
 if exists("b:current_syntax")
@@ -30,14 +30,14 @@ boolean_ops = ('and', 'in', 'is', 'not', 'or')
 import_stmts = ('import', 'from')
 object_defs = ('def', 'class')
 
-exception_names = frozenset(exc for exc in dir(exceptions)
+exception_names = sorted(exc for exc in dir(exceptions)
                                 if not exc.startswith('__'))
 
 # Need to include functions that start with '__' (e.g., __import__), but
 # nothing that comes with modules (e.g., __name__), so just exclude anything in
 # the 'exceptions' module since we want to ignore exceptions *and* what any
 # module would have
-builtin_names = frozenset(builtin for builtin in dir(__builtin__)
+builtin_names = sorted(builtin for builtin in dir(__builtin__)
                             if builtin not in dir(exceptions))
 
 escapes = (r'+\\[abfnrtv\'"\\]+', r'"\\\o\{1,3}"', r'"\\x\x\{2}"',
index ff7c4c6d967cb7a898bed49faa2165b3f96c45e6..11ec638042ec3e0bc9e6bf317ccd939171ebdcdf 100644 (file)
@@ -21,7 +21,8 @@
 " Python: 4 spaces
 " C: 4 spaces
 au BufRead,BufNewFile *.py,*pyw set shiftwidth=4
-au BufRead,BufNewFile *.c,*.h set shiftwidth=4
+au BufRead *.c,*.h set shiftwidth=8
+au BufNewFile *.c,*.h set shiftwidth=4
 
 " Number of spaces that a pre-existing tab is equal to.
 " For the amount of space used for a new tab use shiftwidth.
index ad459365e80fb7fa6aa674d7f095596bf89171fe..79f06dcf0ab5d317a387dd5895198ea282a86b63 100644 (file)
@@ -98,7 +98,7 @@
 #error "eek! DBVER can't handle minor versions > 9"
 #endif
 
-#define PY_BSDDB_VERSION "4.4.5"
+#define PY_BSDDB_VERSION "4.4.6"
 static char *rcs_id = "$Id$";
 
 
@@ -1779,9 +1779,7 @@ DB_get_type(DBObject* self, PyObject* args)
         return NULL;
     CHECK_DB_NOT_CLOSED(self);
 
-    MYDB_BEGIN_ALLOW_THREADS;
     type = _DB_get_type(self);
-    MYDB_END_ALLOW_THREADS;
     if (type == -1)
         return NULL;
     return PyInt_FromLong(type);
@@ -2430,7 +2428,7 @@ DB_stat(DBObject* self, PyObject* args, PyObject* kwargs)
 #if (DBVER >= 43)
     PyObject* txnobj = NULL;
     DB_TXN *txn = NULL;
-    static char* kwnames[] = { "txn", "flags", NULL };
+    static char* kwnames[] = { "flags", "txn", NULL };
 #else
     static char* kwnames[] = { "flags", NULL };
 #endif
index 7948516401b858ae54d6ff1ef19ee8c86452303e..dc7feeba1c8b3e9b25c12d4bef98e3dd4cef838c 100644 (file)
@@ -2589,16 +2589,22 @@ static PPROC FindAddress(void *handle, char *name, PyObject *type)
        PPROC address;
        char *mangled_name;
        int i;
-       StgDictObject *dict = PyType_stgdict((PyObject *)type);
+       StgDictObject *dict;
 
        address = (PPROC)GetProcAddress(handle, name);
+#ifdef _WIN64
+       /* win64 has no stdcall calling conv, so it should
+          also not have the name mangling of it.
+       */
+       return address;
+#else
        if (address)
                return address;
-
        if (((size_t)name & ~0xFFFF) == 0) {
                return NULL;
        }
 
+       dict = PyType_stgdict((PyObject *)type);
        /* It should not happen that dict is NULL, but better be safe */
        if (dict==NULL || dict->flags & FUNCFLAG_CDECL)
                return address;
@@ -2617,6 +2623,7 @@ static PPROC FindAddress(void *handle, char *name, PyObject *type)
                        return address;
        }
        return NULL;
+#endif
 }
 #endif
 
@@ -4588,11 +4595,11 @@ cast(void *ptr, PyObject *src, PyObject *ctype)
                        if (obj->b_objects == NULL)
                                goto failed;
                }
+               Py_XINCREF(obj->b_objects);
                result->b_objects = obj->b_objects;
-               if (result->b_objects) {
+               if (result->b_objects && PyDict_Check(result->b_objects)) {
                        PyObject *index;
                        int rc;
-                       Py_INCREF(obj->b_objects);
                        index = PyLong_FromVoidPtr((void *)src);
                        if (index == NULL)
                                goto failed;
index 7331d01dcd53515b955a93ab52dc11449f3767f2..d13fec4e9ead92e2cc0af9ea836266becc7e7f9c 100644 (file)
 
 /* some functions handy for testing */
 
+EXPORT(int)myprintf(char *fmt, ...)
+{
+       int result;
+       va_list argptr;
+       va_start(argptr, fmt);
+       result = vprintf(fmt, argptr);
+       va_end(argptr);
+       return result;
+}
+
 EXPORT(char *)my_strtok(char *token, const char *delim)
 {
        return strtok(token, delim);
index d5ab43bc1d63f7ffd3ff45ca7bf810eaccf3ec62..89b44aa0d9550766e99ba04ea515e1da377c4e5d 100644 (file)
@@ -294,14 +294,17 @@ ffi_info *AllocFunctionCallback(PyObject *callable,
                p->restype = &ffi_type_void;
        } else {
                StgDictObject *dict = PyType_stgdict(restype);
-               if (dict == NULL)
-                       goto error;
+               if (dict == NULL || dict->setfunc == NULL) {
+                 PyErr_SetString(PyExc_TypeError,
+                                 "invalid result type for callback function");
+                 goto error;
+               }
                p->setfunc = dict->setfunc;
                p->restype = &dict->ffi_type_pointer;
        }
 
        cc = FFI_DEFAULT_ABI;
-#if defined(MS_WIN32) && !defined(_WIN32_WCE)
+#if defined(MS_WIN32) && !defined(_WIN32_WCE) && !defined(MS_WIN64)
        if (is_cdecl == 0)
                cc = FFI_STDCALL;
 #endif
index e0765e917cb336ee5a1ab443df0f2e2637735236..18e1991e4db9249f2c37c184374878c0f4be73ff 100644 (file)
@@ -638,7 +638,7 @@ static int _call_function_pointer(int flags,
        }
        
        cc = FFI_DEFAULT_ABI;
-#if defined(MS_WIN32) && !defined(_WIN32_WCE)
+#if defined(MS_WIN32) && !defined(MS_WIN64) && !defined(_WIN32_WCE)
        if ((flags & FUNCFLAG_CDECL) == 0)
                cc = FFI_STDCALL;
 #endif
@@ -683,6 +683,14 @@ static int _call_function_pointer(int flags,
                return -1;
        }
 #endif
+#ifdef MS_WIN64
+       if (delta != 0) {
+               PyErr_Format(PyExc_RuntimeError,
+                            "ffi_call failed with code %d",
+                            delta);
+               return -1;
+       }
+#else
        if (delta < 0) {
                if (flags & FUNCFLAG_CDECL)
                        PyErr_Format(PyExc_ValueError,
@@ -703,6 +711,7 @@ static int _call_function_pointer(int flags,
                             delta);
                return -1;
        }
+#endif
 #endif
        if ((flags & FUNCFLAG_PYTHONAPI) && PyErr_Occurred())
                return -1;
@@ -979,7 +988,11 @@ PyObject *_CallProc(PPROC pProc,
        }
        for (i = 0; i < argcount; ++i) {
                atypes[i] = args[i].ffi_type;
-               if (atypes[i]->type == FFI_TYPE_STRUCT)
+               if (atypes[i]->type == FFI_TYPE_STRUCT 
+#ifdef _WIN64
+                   && atypes[i]->size <= sizeof(void *)
+#endif
+                   )
                        avalues[i] = (void *)args[i].value.p;
                else
                        avalues[i] = (void *)&args[i].value;
@@ -1099,7 +1112,11 @@ static PyObject *load_library(PyObject *self, PyObject *args)
        hMod = LoadLibrary(name);
        if (!hMod)
                return PyErr_SetFromWindowsErr(GetLastError());
+#ifdef _WIN64
+       return PyLong_FromVoidPtr(hMod);
+#else
        return Py_BuildValue("i", hMod);
+#endif
 }
 
 static char free_library_doc[] =
@@ -1230,11 +1247,11 @@ static PyObject *py_dl_open(PyObject *self, PyObject *args)
 
 static PyObject *py_dl_close(PyObject *self, PyObject *args)
 {
-       void * handle;
+       int handle;
 
        if (!PyArg_ParseTuple(args, "i:dlclose", &handle))
                return NULL;
-       if (dlclose(handle)) {
+       if (dlclose((void*)handle)) {
                PyErr_SetString(PyExc_OSError,
                                       ctypes_dlerror());
                return NULL;
@@ -1246,12 +1263,12 @@ static PyObject *py_dl_close(PyObject *self, PyObject *args)
 static PyObject *py_dl_sym(PyObject *self, PyObject *args)
 {
        char *name;
-       void *handle;
+       int handle;
        void *ptr;
 
        if (!PyArg_ParseTuple(args, "is:dlsym", &handle, &name))
                return NULL;
-       ptr = ctypes_dlsym(handle, name);
+       ptr = ctypes_dlsym((void*)handle, name);
        if (!ptr) {
                PyErr_SetString(PyExc_OSError,
                                       ctypes_dlerror());
@@ -1269,7 +1286,7 @@ static PyObject *py_dl_sym(PyObject *self, PyObject *args)
 static PyObject *
 call_function(PyObject *self, PyObject *args)
 {
-       PPROC func;
+       int func;
        PyObject *arguments;
        PyObject *result;
 
@@ -1279,7 +1296,7 @@ call_function(PyObject *self, PyObject *args)
                              &PyTuple_Type, &arguments))
                return NULL;
 
-       result =  _CallProc(func,
+       result =  _CallProc((PPROC)func,
                            arguments,
 #ifdef MS_WIN32
                            NULL,
@@ -1300,7 +1317,7 @@ call_function(PyObject *self, PyObject *args)
 static PyObject *
 call_cdeclfunction(PyObject *self, PyObject *args)
 {
-       PPROC func;
+       int func;
        PyObject *arguments;
        PyObject *result;
 
@@ -1310,7 +1327,7 @@ call_cdeclfunction(PyObject *self, PyObject *args)
                              &PyTuple_Type, &arguments))
                return NULL;
 
-       result =  _CallProc(func,
+       result =  _CallProc((PPROC)func,
                            arguments,
 #ifdef MS_WIN32
                            NULL,
@@ -1493,7 +1510,7 @@ resize(PyObject *self, PyObject *args)
 #else
                              "On:resize",
 #endif
-                             (PyObject *)&obj, &size))
+                             &obj, &size))
                return NULL;
 
        dict = PyObject_stgdict((PyObject *)obj);
index c16a387464f9c928a0dc89daf526a6e2fbbddca0..ad83195276f94d5ccec3f954ce956b6a807dc2b7 100644 (file)
@@ -1315,7 +1315,11 @@ z_set(void *ptr, PyObject *value, unsigned size)
                *(char **)ptr = PyString_AS_STRING(str);
                return str;
        } else if (PyInt_Check(value) || PyLong_Check(value)) {
+#if SIZEOF_VOID_P == SIZEOF_LONG_LONG
+               *(char **)ptr = (char *)PyInt_AsUnsignedLongLongMask(value);
+#else
                *(char **)ptr = (char *)PyInt_AsUnsignedLongMask(value);
+#endif
                _RET(value);
        }
        PyErr_Format(PyExc_TypeError,
@@ -1360,7 +1364,11 @@ Z_set(void *ptr, PyObject *value, unsigned size)
                if (!value)
                        return NULL;
        } else if (PyInt_Check(value) || PyLong_Check(value)) {
+#if SIZEOF_VOID_P == SIZEOF_LONG_LONG
+               *(wchar_t **)ptr = (wchar_t *)PyInt_AsUnsignedLongLongMask(value);
+#else
                *(wchar_t **)ptr = (wchar_t *)PyInt_AsUnsignedLongMask(value);
+#endif
                Py_INCREF(Py_None);
                return Py_None;
        } else if (!PyUnicode_Check(value)) {
index 1595b00a5ff1dcfcb7296482aba426db721bbec7..55af70cd8b2d174e059c7acbb2fb364dadd3563d 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef __ppc__
+#if !(defined(__APPLE__) && !defined(__ppc__))
 /* -----------------------------------------------------------------------
    ffi.c - Copyright (c) 1998 Geoffrey Keating
 
index 46759f43498583642745ecb0dd34c71e3a968264..9542fba1a2908369cd2114b1d203ac42509aea4b 100644 (file)
@@ -376,3 +376,7 @@ ffi_closure_raw_SYSV:
 #endif
 
 #endif /* ifndef __x86_64__ */
+
+#ifdef __ELF__
+.section .note.GNU-stack,"",%progbits
+#endif
index 9af6b716d2b08533abe6d34df3443af94e24310d..3f23a052eddce94b72eec4803e11a27b7daf1a9a 100644 (file)
@@ -34,6 +34,8 @@
 /* ffi_prep_args is called by the assembly routine once stack space
    has been allocated for the function's arguments */
 
+extern void Py_FatalError(char *msg);
+
 /*@-exportheader@*/
 void ffi_prep_args(char *stack, extended_cif *ecif)
 /*@=exportheader@*/
@@ -44,11 +46,10 @@ void ffi_prep_args(char *stack, extended_cif *ecif)
   register ffi_type **p_arg;
 
   argp = stack;
-
   if (ecif->cif->rtype->type == FFI_TYPE_STRUCT)
     {
       *(void **) argp = ecif->rvalue;
-      argp += 4;
+      argp += sizeof(void *);
     }
 
   p_argv = ecif->avalue;
@@ -60,8 +61,8 @@ void ffi_prep_args(char *stack, extended_cif *ecif)
       size_t z;
 
       /* Align if necessary */
-      if ((sizeof(int) - 1) & (unsigned) argp)
-       argp = (char *) ALIGN(argp, sizeof(int));
+      if ((sizeof(void *) - 1) & (size_t) argp)
+       argp = (char *) ALIGN(argp, sizeof(void *));
 
       z = (*p_arg)->size;
       if (z < sizeof(int))
@@ -108,7 +109,11 @@ void ffi_prep_args(char *stack, extended_cif *ecif)
       p_argv++;
       argp += z;
     }
-  
+
+  if (argp - stack > ecif->cif->bytes) 
+    {
+      Py_FatalError("FFI BUG: not enough stack space for arguments");
+    }
   return;
 }
 
@@ -128,6 +133,9 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
       break;
 
     case FFI_TYPE_UINT64:
+#ifdef _WIN64
+    case FFI_TYPE_POINTER:
+#endif
       cif->flags = FFI_TYPE_SINT64;
       break;
 
@@ -139,6 +147,7 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
   return FFI_OK;
 }
 
+#ifdef _WIN32
 /*@-declundef@*/
 /*@-exportheader@*/
 extern int
@@ -160,6 +169,16 @@ ffi_call_STDCALL(void (*)(char *, extended_cif *),
                 void (*fn)());
 /*@=declundef@*/
 /*@=exportheader@*/
+#endif
+
+#ifdef _WIN64
+extern int
+ffi_call_AMD64(void (*)(char *, extended_cif *),
+                /*@out@*/ extended_cif *,
+                unsigned, unsigned,
+                /*@out@*/ unsigned *,
+                void (*fn)());
+#endif
 
 int
 ffi_call(/*@dependent@*/ ffi_cif *cif, 
@@ -188,6 +207,7 @@ ffi_call(/*@dependent@*/ ffi_cif *cif,
   
   switch (cif->abi) 
     {
+#if !defined(_WIN64)
     case FFI_SYSV:
       /*@-usedef@*/
       return ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, 
@@ -201,6 +221,14 @@ ffi_call(/*@dependent@*/ ffi_cif *cif,
                              cif->flags, ecif.rvalue, fn);
       /*@=usedef@*/
       break;
+#else
+    case FFI_SYSV:
+      /*@-usedef@*/
+      return ffi_call_AMD64(ffi_prep_args, &ecif, cif->bytes, 
+                          cif->flags, ecif.rvalue, fn);
+      /*@=usedef@*/
+      break;
+#endif
 
     default:
       FFI_ASSERT(0);
@@ -213,10 +241,14 @@ ffi_call(/*@dependent@*/ ffi_cif *cif,
 /** private members **/
 
 static void ffi_prep_incoming_args_SYSV (char *stack, void **ret,
-                                        void** args, ffi_cif* cif);
+                                         void** args, ffi_cif* cif);
 /* This function is jumped to by the trampoline */
 
+#ifdef _WIN64
+void *
+#else
 static void __fastcall
+#endif
 ffi_closure_SYSV (ffi_closure *closure, int *argp)
 {
   // this is our return value storage
@@ -244,6 +276,7 @@ ffi_closure_SYSV (ffi_closure *closure, int *argp)
 
   rtype = cif->flags;
 
+#if defined(_WIN32) && !defined(_WIN64)
 #ifdef _MSC_VER
   /* now, do a generic return based on the value of rtype */
   if (rtype == FFI_TYPE_INT)
@@ -303,6 +336,15 @@ ffi_closure_SYSV (ffi_closure *closure, int *argp)
           : "eax", "edx");
     }
 #endif
+#endif
+
+#ifdef _WIN64
+  /* The result is returned in rax.  This does the right thing for
+     result types except for floats; we have to 'mov xmm0, rax' in the
+     caller to correct this.
+  */
+  return *(void **)resp;
+#endif
 }
 
 /*@-exportheader@*/
@@ -330,8 +372,8 @@ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue,
       size_t z;
 
       /* Align if necessary */
-      if ((sizeof(int) - 1) & (unsigned) argp) {
-       argp = (char *) ALIGN(argp, sizeof(int));
+      if ((sizeof(char *) - 1) & (size_t) argp) {
+       argp = (char *) ALIGN(argp, sizeof(char*));
       }
 
       z = (*p_arg)->size;
@@ -347,24 +389,8 @@ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue,
   return;
 }
 
-/* How to make a trampoline.  Derived from gcc/config/i386/i386.c. */
-
-#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX,BYTES) \
-{ unsigned char *__tramp = (unsigned char*)(TRAMP); \
-   unsigned int  __fun = (unsigned int)(FUN); \
-   unsigned int  __ctx = (unsigned int)(CTX); \
-   unsigned int  __dis = __fun - ((unsigned int) __tramp + 8 + 4); \
-   *(unsigned char*)  &__tramp[0] = 0xb9; \
-   *(unsigned int*)   &__tramp[1] = __ctx; /* mov ecx, __ctx */ \
-   *(unsigned char*)  &__tramp[5] = 0x8b; \
-   *(unsigned char*)  &__tramp[6] = 0xd4; /* mov edx, esp */ \
-   *(unsigned char*)  &__tramp[7] = 0xe8; \
-   *(unsigned int*)   &__tramp[8] = __dis; /* call __fun  */ \
-   *(unsigned char*)  &__tramp[12] = 0xC2; /* ret BYTES */ \
-   *(unsigned short*) &__tramp[13] = BYTES; \
- }
-
 /* the cif must already be prep'ed */
+extern void ffi_closure_OUTER();
 
 ffi_status
 ffi_prep_closure (ffi_closure* closure,
@@ -373,19 +399,78 @@ ffi_prep_closure (ffi_closure* closure,
                  void *user_data)
 {
   short bytes;
+  char *tramp;
+#ifdef _WIN64
+  int mask;
+#endif
   FFI_ASSERT (cif->abi == FFI_SYSV);
   
   if (cif->abi == FFI_SYSV)
     bytes = 0;
+#if !defined(_WIN64)
   else if (cif->abi == FFI_STDCALL)
     bytes = cif->bytes;
+#endif
   else
     return FFI_BAD_ABI;
 
-  FFI_INIT_TRAMPOLINE (&closure->tramp[0],
-                      &ffi_closure_SYSV,
-                      (void*)closure,
-                      bytes);
+  tramp = &closure->tramp[0];
+
+#define BYTES(text) memcpy(tramp, text, sizeof(text)), tramp += sizeof(text)-1
+#define POINTER(x) *(void**)tramp = (void*)(x), tramp += sizeof(void*)
+#define SHORT(x) *(short*)tramp = x, tramp += sizeof(short)
+#define INT(x) *(int*)tramp = x, tramp += sizeof(int)
+
+#ifdef _WIN64
+  if (cif->nargs >= 1 &&
+      (cif->arg_types[0]->type == FFI_TYPE_FLOAT
+       || cif->arg_types[0]->type == FFI_TYPE_DOUBLE))
+    mask |= 1;
+  if (cif->nargs >= 2 &&
+      (cif->arg_types[1]->type == FFI_TYPE_FLOAT
+       || cif->arg_types[1]->type == FFI_TYPE_DOUBLE))
+    mask |= 2;
+  if (cif->nargs >= 3 &&
+      (cif->arg_types[2]->type == FFI_TYPE_FLOAT
+       || cif->arg_types[2]->type == FFI_TYPE_DOUBLE))
+    mask |= 4;
+  if (cif->nargs >= 4 &&
+      (cif->arg_types[3]->type == FFI_TYPE_FLOAT
+       || cif->arg_types[3]->type == FFI_TYPE_DOUBLE))
+    mask |= 8;
+
+  /* 41 BB ----         mov         r11d,mask */
+  BYTES("\x41\xBB"); INT(mask);
+
+  /* 48 B8 --------     mov         rax, closure                       */
+  BYTES("\x48\xB8"); POINTER(closure);
+
+  /* 49 BA --------     mov         r10, ffi_closure_OUTER */
+  BYTES("\x49\xBA"); POINTER(ffi_closure_OUTER);
+
+  /* 41 FF E2           jmp         r10 */
+  BYTES("\x41\xFF\xE2");
+
+#else
+
+  /* mov ecx, closure */
+  BYTES("\xb9"); POINTER(closure);
+
+  /* mov edx, esp */
+  BYTES("\x8b\xd4");
+
+  /* call ffi_closure_SYSV */
+  BYTES("\xe8"); POINTER((char*)&ffi_closure_SYSV - (tramp + 4));
+
+  /* ret bytes */
+  BYTES("\xc2");
+  SHORT(bytes);
+  
+#endif
+
+  if (tramp - &closure->tramp[0] > FFI_TRAMPOLINE_SIZE)
+    Py_FatalError("FFI_TRAMPOLINE_SIZE too small in " __FILE__);
+
   closure->cif  = cif;
   closure->user_data = user_data;
   closure->fun  = fun;
index 203142d9ce11bae52c9074a401dbff8cb724a1e9..a88d8744f7f240f7f7d83ce28ca22825ddda6bee 100644 (file)
@@ -174,12 +174,10 @@ typedef struct {
 
 /* ---- Definitions for the raw API -------------------------------------- */
 
-#ifndef FFI_SIZEOF_ARG
-# if LONG_MAX == 2147483647
-#  define FFI_SIZEOF_ARG        4
-# elif LONG_MAX == 9223372036854775807
-#  define FFI_SIZEOF_ARG        8
-# endif
+#ifdef _WIN64
+#define FFI_SIZEOF_ARG 8
+#else
+#define FFI_SIZEOF_ARG 4
 #endif
 
 typedef union {
index 78c0c37caeb3e81d0460b534152def505841463a..0da79d4c1ad700f5ad9e75d4fdae098967754fe3 100644 (file)
@@ -44,7 +44,9 @@ typedef enum ffi_abi {
 
   /* ---- Intel x86 Win32 ---------- */
   FFI_SYSV,
+#ifndef _WIN64
   FFI_STDCALL,
+#endif
   /* TODO: Add fastcall support for the sake of completeness */
   FFI_DEFAULT_ABI = FFI_SYSV,
 
@@ -67,8 +69,8 @@ typedef enum ffi_abi {
 
 #define FFI_CLOSURES 1
 
-#ifdef X86_64
-#define FFI_TRAMPOLINE_SIZE 24
+#ifdef _WIN64
+#define FFI_TRAMPOLINE_SIZE 29
 #define FFI_NATIVE_RAW_API 0
 #else
 #define FFI_TRAMPOLINE_SIZE 15
diff --git a/Modules/_ctypes/libffi_msvc/win64.asm b/Modules/_ctypes/libffi_msvc/win64.asm
new file mode 100644 (file)
index 0000000..301188b
--- /dev/null
@@ -0,0 +1,156 @@
+PUBLIC ffi_call_AMD64
+
+EXTRN  __chkstk:NEAR
+EXTRN  ffi_closure_SYSV:NEAR
+
+_TEXT  SEGMENT
+
+;;; ffi_closure_OUTER will be called with these registers set:
+;;;    rax points to 'closure'
+;;;    r11 contains a bit mask that specifies which of the
+;;;    first four parameters are float or double
+;;;
+;;; It must move the parameters passed in registers to their stack location,
+;;; call ffi_closure_SYSV for the actual work, then return the result.
+;;; 
+ffi_closure_OUTER PROC FRAME
+       ;; save actual arguments to their stack space.
+       test    r11, 1
+       jne     first_is_float  
+       mov     QWORD PTR [rsp+8], rcx
+       jmp     second
+first_is_float:
+       movlpd  QWORD PTR [rsp+8], xmm0
+
+second:
+       test    r11, 2
+       jne     second_is_float 
+       mov     QWORD PTR [rsp+16], rdx
+       jmp     third
+second_is_float:
+       movlpd  QWORD PTR [rsp+16], xmm1
+
+third:
+       test    r11, 4
+       jne     third_is_float  
+       mov     QWORD PTR [rsp+24], r8
+       jmp     forth
+third_is_float:
+       movlpd  QWORD PTR [rsp+24], xmm2
+
+forth:
+       test    r11, 8
+       jne     forth_is_float  
+       mov     QWORD PTR [rsp+32], r9
+       jmp     done
+forth_is_float:
+       movlpd  QWORD PTR [rsp+32], xmm3
+
+done:
+.ALLOCSTACK 40
+       sub     rsp, 40
+.ENDPROLOG
+       mov     rcx, rax        ; context is first parameter
+       mov     rdx, rsp        ; stack is second parameter
+       add     rdx, 40         ; correct our own area
+       mov     rax, ffi_closure_SYSV
+       call    rax             ; call the real closure function
+       ;; Here, code is missing that handles float return values
+       add     rsp, 40
+       movd    xmm0, rax       ; In case the closure returned a float.
+       ret     0
+ffi_closure_OUTER ENDP
+
+
+;;; ffi_call_AMD64
+
+stack$ = 0
+prepfunc$ = 32
+ecif$ = 40
+bytes$ = 48
+flags$ = 56
+rvalue$ = 64
+fn$ = 72
+
+ffi_call_AMD64 PROC FRAME
+
+       mov     QWORD PTR [rsp+32], r9
+       mov     QWORD PTR [rsp+24], r8
+       mov     QWORD PTR [rsp+16], rdx
+       mov     QWORD PTR [rsp+8], rcx
+.PUSHREG rbp
+       push    rbp
+.ALLOCSTACK 48
+       sub     rsp, 48                                 ; 00000030H
+.SETFRAME rbp, 32
+       lea     rbp, QWORD PTR [rsp+32]
+.ENDPROLOG
+
+       mov     eax, DWORD PTR bytes$[rbp]
+       add     rax, 15
+       and     rax, -16
+       call    __chkstk
+       sub     rsp, rax
+       lea     rax, QWORD PTR [rsp+32]
+       mov     QWORD PTR stack$[rbp], rax
+
+       mov     rdx, QWORD PTR ecif$[rbp]
+       mov     rcx, QWORD PTR stack$[rbp]
+       call    QWORD PTR prepfunc$[rbp]
+
+       mov     rsp, QWORD PTR stack$[rbp]
+
+       movlpd  xmm3, QWORD PTR [rsp+24]
+       movd    r9, xmm3
+
+       movlpd  xmm2, QWORD PTR [rsp+16]
+       movd    r8, xmm2
+
+       movlpd  xmm1, QWORD PTR [rsp+8]
+       movd    rdx, xmm1
+
+       movlpd  xmm0, QWORD PTR [rsp]
+       movd    rcx, xmm0
+
+       call    QWORD PTR fn$[rbp]
+ret_int$:
+       cmp     DWORD PTR flags$[rbp], 1 ; FFI_TYPE_INT
+       jne     ret_float$
+
+       mov     rcx, QWORD PTR rvalue$[rbp]
+       mov     DWORD PTR [rcx], eax
+       jmp     SHORT ret_nothing$
+
+ret_float$:
+       cmp     DWORD PTR flags$[rbp], 2 ; FFI_TYPE_FLOAT
+       jne     SHORT ret_double$
+
+       mov     rax, QWORD PTR rvalue$[rbp]
+       movlpd  QWORD PTR [rax], xmm0
+       jmp     SHORT ret_nothing$
+
+ret_double$:
+       cmp     DWORD PTR flags$[rbp], 3 ; FFI_TYPE_DOUBLE
+       jne     SHORT ret_int64$
+
+       mov     rax, QWORD PTR rvalue$[rbp]
+       movlpd  QWORD PTR [rax], xmm0
+       jmp     SHORT ret_nothing$
+
+ret_int64$:
+       cmp     DWORD PTR flags$[rbp], 12 ; FFI_TYPE_SINT64
+       jne     ret_nothing$
+
+       mov     rcx, QWORD PTR rvalue$[rbp]
+       mov     QWORD PTR [rcx], rax
+       jmp     SHORT ret_nothing$
+       
+ret_nothing$:
+       xor     eax, eax
+
+       lea     rsp, QWORD PTR [rbp+16]
+       pop     rbp
+       ret     0
+ffi_call_AMD64 ENDP
+_TEXT  ENDS
+END
index 0942b48d11b9e92e08fa39ebff27a039ad1c291c..c34ae01b960674d291ba7edc9e57fca10d3a8605 100644 (file)
@@ -173,11 +173,11 @@ MakeFields(PyObject *type, CFieldObject *descr,
 
        for (i = 0; i < PySequence_Fast_GET_SIZE(fieldlist); ++i) {
                PyObject *pair = PySequence_Fast_GET_ITEM(fieldlist, i); /* borrowed */
-               PyObject *fname, *ftype;
+               PyObject *fname, *ftype, *bits;
                CFieldObject *fdescr;
                CFieldObject *new_descr;
                /* Convert to PyArg_UnpackTuple... */
-               if (!PyArg_ParseTuple(pair, "OO", &fname, &ftype)) {
+               if (!PyArg_ParseTuple(pair, "OO|O", &fname, &ftype, &bits)) {
                        Py_DECREF(fieldlist);
                        return -1;
                }
@@ -335,14 +335,14 @@ StructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct)
        stgdict = PyType_stgdict(type);
        if (!stgdict)
                return -1;
+       /* If this structure/union is already marked final we cannot assign
+          _fields_ anymore. */
+
        if (stgdict->flags & DICTFLAG_FINAL) {/* is final ? */
                PyErr_SetString(PyExc_AttributeError,
                                "_fields_ is final");
                return -1;
        }
-       /* XXX This should probably be moved to a point when all this
-          stuff is sucessfully finished. */
-       stgdict->flags |= DICTFLAG_FINAL;       /* set final */
 
        if (stgdict->ffi_type_pointer.elements)
                PyMem_Free(stgdict->ffi_type_pointer.elements);
@@ -476,5 +476,15 @@ StructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct)
        stgdict->size = size;
        stgdict->align = total_align;
        stgdict->length = len;  /* ADD ffi_ofs? */
+
+       /* We did check that this flag was NOT set above, it must not
+          have been set until now. */
+       if (stgdict->flags & DICTFLAG_FINAL) {
+               PyErr_SetString(PyExc_AttributeError,
+                               "Structure or union cannot contain itself");
+               return -1;
+       }
+       stgdict->flags |= DICTFLAG_FINAL;
+
        return MakeAnonFields(type);
 }
index 2921d53a8f574549f3ed56550d4b08fb75721cac..aeb1ef5f22e552cb03fe49a296c60d1c6fe839e0 100644 (file)
@@ -2334,6 +2334,10 @@ PyCurses_tparm(PyObject *self, PyObject *args)
        }
 
        result = tparm(fmt,i1,i2,i3,i4,i5,i6,i7,i8,i9);
+       if (!result) {
+               PyErr_SetString(PyCursesError, "tparm() returned NULL");
+               return NULL;
+       }
 
        return PyString_FromString(result);
 }
index d30a3508c074e16dd900c19b12e2b6ddc21ecb97..a24f2868c50eac7017cf61b628249610822ab4d8 100644 (file)
@@ -1166,9 +1166,10 @@ entrance:
 
             /* install new repeat context */
             ctx->u.rep = (SRE_REPEAT*) PyObject_MALLOC(sizeof(*ctx->u.rep));
-            /* XXX(nnorwitz): anything else we need to do on error? */
-            if (!ctx->u.rep)
+            if (!ctx->u.rep) {
+                PyErr_NoMemory();
                 RETURN_FAILURE;
+            }
             ctx->u.rep->count = -1;
             ctx->u.rep->pattern = ctx->pattern;
             ctx->u.rep->prev = state->repeat;
@@ -1884,6 +1885,8 @@ pattern_match(PatternObject* self, PyObject* args, PyObject* kw)
     }
 
     TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
+    if (PyErr_Occurred())
+        return NULL;
 
     state_fini(&state);
 
@@ -1922,6 +1925,9 @@ pattern_search(PatternObject* self, PyObject* args, PyObject* kw)
 
     state_fini(&state);
 
+    if (PyErr_Occurred())
+        return NULL;
+
     return pattern_new_match(self, &state, status);
 }
 
@@ -2071,6 +2077,9 @@ pattern_findall(PatternObject* self, PyObject* args, PyObject* kw)
 #endif
         }
 
+       if (PyErr_Occurred())
+           goto error;
+
         if (status <= 0) {
             if (status == 0)
                 break;
@@ -2198,6 +2207,9 @@ pattern_split(PatternObject* self, PyObject* args, PyObject* kw)
 #endif
         }
 
+       if (PyErr_Occurred())
+           goto error;
+
         if (status <= 0) {
             if (status == 0)
                 break;
@@ -2347,6 +2359,9 @@ pattern_subx(PatternObject* self, PyObject* ptemplate, PyObject* string,
 #endif
         }
 
+       if (PyErr_Occurred())
+           goto error;
+
         if (status <= 0) {
             if (status == 0)
                 break;
@@ -3250,6 +3265,8 @@ scanner_match(ScannerObject* self, PyObject *unused)
         status = sre_umatch(state, PatternObject_GetCode(self->pattern));
 #endif
     }
+    if (PyErr_Occurred())
+        return NULL;
 
     match = pattern_new_match((PatternObject*) self->pattern,
                                state, status);
@@ -3281,6 +3298,8 @@ scanner_search(ScannerObject* self, PyObject *unused)
         status = sre_usearch(state, PatternObject_GetCode(self->pattern));
 #endif
     }
+    if (PyErr_Occurred())
+        return NULL;
 
     match = pattern_new_match((PatternObject*) self->pattern,
                                state, status);
index 3b91b24515f4268d1b9e22a88ed90eee3b9d1377..f1e1092ac7dad9eea6798c4e32db052d80f341b8 100644 (file)
@@ -317,7 +317,7 @@ PySocket_ssl(PyObject *self, PyObject *args)
 
        if (!PyArg_ParseTuple(args, "O!|zz:ssl",
                              PySocketModule.Sock_Type,
-                             (PyObject*)&Sock,
+                             &Sock,
                              &key_file, &cert_file))
                return NULL;
 
index f5f3ab23bdcb07e51dd5465e8b7c8b76559621a1..b11f0aebfc1135a0a52ffc2f40d3ceaa1c9f55b4 100644 (file)
@@ -6,6 +6,8 @@
  */
 
 #include "Python.h"
+#include <float.h>
+#include "structmember.h"
 
 #ifdef WITH_THREAD
 #include "pythread.h"
@@ -35,13 +37,13 @@ raiseTestError(const char* test_name, const char* msg)
    platforms have these hardcoded.  Better safe than sorry.
 */
 static PyObject*
-sizeof_error(const char* fatname, const char* typename,
+sizeof_error(const char* fatname, const char* typname,
         int expected, int got)
 {
        char buf[1024];
        PyOS_snprintf(buf, sizeof(buf),
                "%.200s #define == %d but sizeof(%.200s) == %d",
-               fatname, expected, typename, got);
+               fatname, expected, typname, got);
        PyErr_SetString(TestError, buf);
        return (PyObject*)NULL;
 }
@@ -615,7 +617,7 @@ _make_call(void *callable)
 {
        PyObject *rc;
        PyGILState_STATE s = PyGILState_Ensure();
-       rc = PyObject_CallFunction(callable, "");
+       rc = PyObject_CallFunction((PyObject *)callable, "");
        Py_XDECREF(rc);
        PyGILState_Release(s);
 }
@@ -665,6 +667,9 @@ test_thread_state(PyObject *self, PyObject *args)
        PyThread_acquire_lock(thread_done, 1);  /* wait for thread to finish */
        Py_END_ALLOW_THREADS
 
+       /* Release lock we acquired above.  This is required on HP-UX. */
+       PyThread_release_lock(thread_done);
+
        PyThread_free_lock(thread_done);
        Py_RETURN_NONE;
 }
@@ -756,6 +761,105 @@ static PyMethodDef TestMethods[] = {
 
 #define AddSym(d, n, f, v) {PyObject *o = f(v); PyDict_SetItemString(d, n, o); Py_DECREF(o);}
 
+typedef struct {
+       char byte_member;
+       unsigned char ubyte_member;
+       short short_member;
+       unsigned short ushort_member;
+       int int_member;
+       unsigned int uint_member;
+       long long_member;
+       unsigned long ulong_member;
+       float float_member;
+       double double_member;
+} all_structmembers;
+
+typedef struct {
+    PyObject_HEAD
+       all_structmembers structmembers;
+} test_structmembers;
+
+static struct PyMemberDef test_members[] = {
+       {"T_BYTE", T_BYTE, offsetof(test_structmembers, structmembers.byte_member), 0, NULL},
+       {"T_UBYTE", T_UBYTE, offsetof(test_structmembers, structmembers.ubyte_member), 0, NULL},
+       {"T_SHORT", T_SHORT, offsetof(test_structmembers, structmembers.short_member), 0, NULL},
+       {"T_USHORT", T_USHORT, offsetof(test_structmembers, structmembers.ushort_member), 0, NULL},
+       {"T_INT", T_INT, offsetof(test_structmembers, structmembers.int_member), 0, NULL},
+       {"T_UINT", T_UINT, offsetof(test_structmembers, structmembers.uint_member), 0, NULL},
+       {"T_LONG", T_LONG, offsetof(test_structmembers, structmembers.long_member), 0, NULL},
+       {"T_ULONG", T_ULONG, offsetof(test_structmembers, structmembers.ulong_member), 0, NULL},
+       {"T_FLOAT", T_FLOAT, offsetof(test_structmembers, structmembers.float_member), 0, NULL},
+       {"T_DOUBLE", T_DOUBLE, offsetof(test_structmembers, structmembers.double_member), 0, NULL},
+       {NULL}
+};
+
+
+static PyObject *test_structmembers_new(PyTypeObject *type, PyObject *args, PyObject *kwargs){
+       static char *keywords[]={"T_BYTE", "T_UBYTE", "T_SHORT", "T_USHORT", "T_INT", "T_UINT",
+               "T_LONG", "T_ULONG", "T_FLOAT", "T_DOUBLE", NULL};
+       test_structmembers *ob=PyObject_New(test_structmembers, type);
+       if (ob==NULL)
+               return NULL;
+       memset(&ob->structmembers, 0, sizeof(all_structmembers));
+       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|bBhHiIlkfd", keywords,
+               &ob->structmembers.byte_member, &ob->structmembers.ubyte_member,
+               &ob->structmembers.short_member, &ob->structmembers.ushort_member,
+               &ob->structmembers.int_member, &ob->structmembers.uint_member, 
+               &ob->structmembers.long_member, &ob->structmembers.ulong_member,
+               &ob->structmembers.float_member, &ob->structmembers.double_member)){
+               Py_DECREF(ob);
+               return NULL;
+               }
+       return (PyObject *)ob;
+}
+
+static void test_structmembers_free(PyObject *ob){
+       PyObject_FREE(ob);
+}
+
+static PyTypeObject test_structmembersType = {
+    PyObject_HEAD_INIT(NULL)
+    0,
+       "test_structmembersType",
+       sizeof(test_structmembers),     /* tp_basicsize */
+       0,                              /* tp_itemsize */
+       test_structmembers_free,        /* destructor tp_dealloc */
+       0,                              /* tp_print */
+       0,                              /* tp_getattr */
+       0,                              /* tp_setattr */
+       0,                              /* tp_compare */
+       0,                              /* tp_repr */
+       0,                              /* tp_as_number */
+       0,                              /* tp_as_sequence */
+       0,                              /* tp_as_mapping */
+       0,                              /* tp_hash */
+       0,                              /* tp_call */
+       0,                              /* tp_str */
+       PyObject_GenericGetAttr,
+       PyObject_GenericSetAttr,
+       0,                              /* tp_as_buffer */
+       0,                              /* tp_flags */
+       "Type containing all structmember types",
+       0,                              /* traverseproc tp_traverse */
+       0,                              /* tp_clear */
+       0,                              /* tp_richcompare */
+       0,                              /* tp_weaklistoffset */
+       0,                              /* tp_iter */
+       0,                              /* tp_iternext */
+       0,                              /* tp_methods */
+       test_members,   /* tp_members */
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       test_structmembers_new,                 /* tp_new */
+};
+
+
 PyMODINIT_FUNC
 init_testcapi(void)
 {
@@ -765,16 +869,28 @@ init_testcapi(void)
        if (m == NULL)
                return;
 
+       test_structmembersType.ob_type=&PyType_Type;
+       Py_INCREF(&test_structmembersType);
+       PyModule_AddObject(m, "test_structmembersType", (PyObject *)&test_structmembersType);
+
+       PyModule_AddObject(m, "CHAR_MAX", PyInt_FromLong(CHAR_MAX));
+       PyModule_AddObject(m, "CHAR_MIN", PyInt_FromLong(CHAR_MIN));
        PyModule_AddObject(m, "UCHAR_MAX", PyInt_FromLong(UCHAR_MAX));
+       PyModule_AddObject(m, "SHRT_MAX", PyInt_FromLong(SHRT_MAX));
+       PyModule_AddObject(m, "SHRT_MIN", PyInt_FromLong(SHRT_MIN));
        PyModule_AddObject(m, "USHRT_MAX", PyInt_FromLong(USHRT_MAX));
+       PyModule_AddObject(m, "INT_MAX",  PyLong_FromLong(INT_MAX));
+       PyModule_AddObject(m, "INT_MIN",  PyLong_FromLong(INT_MIN));
        PyModule_AddObject(m, "UINT_MAX",  PyLong_FromUnsignedLong(UINT_MAX));
-       PyModule_AddObject(m, "ULONG_MAX", PyLong_FromUnsignedLong(ULONG_MAX));
-       PyModule_AddObject(m, "INT_MIN", PyInt_FromLong(INT_MIN));
-       PyModule_AddObject(m, "LONG_MIN", PyInt_FromLong(LONG_MIN));
-       PyModule_AddObject(m, "PY_SSIZE_T_MIN", PyInt_FromSsize_t(PY_SSIZE_T_MIN));
-       PyModule_AddObject(m, "INT_MAX", PyInt_FromLong(INT_MAX));
        PyModule_AddObject(m, "LONG_MAX", PyInt_FromLong(LONG_MAX));
+       PyModule_AddObject(m, "LONG_MIN", PyInt_FromLong(LONG_MIN));
+       PyModule_AddObject(m, "ULONG_MAX", PyLong_FromUnsignedLong(ULONG_MAX));
+       PyModule_AddObject(m, "FLT_MAX", PyFloat_FromDouble(FLT_MAX));
+       PyModule_AddObject(m, "FLT_MIN", PyFloat_FromDouble(FLT_MIN));
+       PyModule_AddObject(m, "DBL_MAX", PyFloat_FromDouble(DBL_MAX));
+       PyModule_AddObject(m, "DBL_MIN", PyFloat_FromDouble(DBL_MIN));
        PyModule_AddObject(m, "PY_SSIZE_T_MAX", PyInt_FromSsize_t(PY_SSIZE_T_MAX));
+       PyModule_AddObject(m, "PY_SSIZE_T_MIN", PyInt_FromSsize_t(PY_SSIZE_T_MIN));
 
        TestError = PyErr_NewException("_testcapi.error", NULL, NULL);
        Py_INCREF(TestError);
index fbeb13a630245bdc40f0f5c3486468f857159164..0a45d2e0c02b04a0ed606608ea00157f0f247595 100644 (file)
@@ -1686,7 +1686,7 @@ al_GetParamInfo(PyObject *self, PyObject *args)
 {
        int res, param;
        ALparamInfo pinfo;
-       PyObject *v, *item;;
+       PyObject *v, *item;
 
        if (!PyArg_ParseTuple(args, "ii:GetParamInfo", &res, &param))
                return NULL;
index 6ce6b07f9f2b46124b06eeec9a149f298edf493f..552f80c0a604b5c6fee154df3a66afcdcb1eb205 100644 (file)
@@ -1495,7 +1495,7 @@ PyMethodDef array_methods[] = {
         copy_doc},
        {"count",       (PyCFunction)array_count,       METH_O,
         count_doc},
-       {"__deepcopy__",(PyCFunction)array_copy,        METH_NOARGS,
+       {"__deepcopy__",(PyCFunction)array_copy,        METH_O,
         copy_doc},
        {"extend",      (PyCFunction)array_extend,      METH_O,
         extend_doc},
index 8f5d30c80585d90ceeb633bbb0117c7f86f5fcc4..ce009758dee4e64787c03aa3a3a52ecbfb98461e 100644 (file)
@@ -472,8 +472,12 @@ audioop_findfit(PyObject *self, PyObject *args)
         double aj_m1, aj_lm1;
         double sum_ri_2, sum_aij_2, sum_aij_ri, result, best_result, factor;
 
+       /* Passing a short** for an 's' argument is correct only
+          if the string contents is aligned for interpretation
+          as short[]. Due to the definition of PyStringObject,
+          this is currently (Python 2.6) the case. */
         if ( !PyArg_ParseTuple(args, "s#s#:findfit",
-                              &cp1, &len1, &cp2, &len2) )
+                              (char**)&cp1, &len1, (char**)&cp2, &len2) )
                 return 0;
         if ( len1 & 1 || len2 & 1 ) {
                 PyErr_SetString(AudioopError, "Strings should be even-sized");
@@ -530,7 +534,7 @@ audioop_findfactor(PyObject *self, PyObject *args)
         double sum_ri_2, sum_aij_ri, result;
 
         if ( !PyArg_ParseTuple(args, "s#s#:findfactor",
-                              &cp1, &len1, &cp2, &len2) )
+                              (char**)&cp1, &len1, (char**)&cp2, &len2) )
                 return 0;
         if ( len1 & 1 || len2 & 1 ) {
                 PyErr_SetString(AudioopError, "Strings should be even-sized");
@@ -562,7 +566,8 @@ audioop_findmax(PyObject *self, PyObject *args)
         double aj_m1, aj_lm1;
         double result, best_result;
 
-        if ( !PyArg_ParseTuple(args, "s#i:findmax", &cp1, &len1, &len2) )
+        if ( !PyArg_ParseTuple(args, "s#i:findmax", 
+                              (char**)&cp1, &len1, &len2) )
                 return 0;
         if ( len1 & 1 ) {
                 PyErr_SetString(AudioopError, "Strings should be even-sized");
index 3b2c8b254cd3fb17300f83ff8c4d390a9aa881e2..4dee45198ef19c81d73c47e6a8c8d9741b98e6ac 100644 (file)
@@ -1057,8 +1057,7 @@ binascii_a2b_qp(PyObject *self, PyObject *args, PyObject *kwargs)
                        in++;
                        if (in >= datalen) break;
                        /* Soft line breaks */
-                       if ((data[in] == '\n') || (data[in] == '\r') ||
-                           (data[in] == ' ') || (data[in] == '\t')) {
+                       if ((data[in] == '\n') || (data[in] == '\r')) {
                                if (data[in] != '\n') {
                                        while (in < datalen && data[in] != '\n') in++;
                                }
index 146e2ee8ff6dc4167863f0008831c8131203c137..5a4e5d99581eac82d0044c495d809ec125710d25 100644 (file)
@@ -1016,12 +1016,12 @@ BZ2File_seek(BZ2FileObject *self, PyObject *args)
                case MODE_CLOSED:
                        PyErr_SetString(PyExc_ValueError,
                                        "I/O operation on closed file");
-                       goto cleanup;;
+                       goto cleanup;
 
                default:
                        PyErr_SetString(PyExc_IOError,
                                        "seek works only while reading");
-                       goto cleanup;;
+                       goto cleanup;
        }
 
        if (where == 2) {
index fabc3cde6db8eb96eeb46127aed3a0e8dea12020..f3178abe131f61c7108d35d70db1d4c8c60abc95 100644 (file)
@@ -1024,7 +1024,7 @@ save_int(Picklerobject *self, PyObject *args)
 static int
 save_long(Picklerobject *self, PyObject *args)
 {
-       int size;
+       Py_ssize_t size;
        int res = -1;
        PyObject *repr = NULL;
 
@@ -1066,7 +1066,7 @@ save_long(Picklerobject *self, PyObject *args)
                 * byte at the start, and cut it back later if possible.
                 */
                nbytes = (nbits >> 3) + 1;
-               if ((int)nbytes < 0 || (size_t)(int)nbytes != nbytes) {
+               if (nbytes > INT_MAX) {
                        PyErr_SetString(PyExc_OverflowError, "long too large "
                                "to pickle");
                        goto finally;
@@ -1208,12 +1208,14 @@ save_string(Picklerobject *self, PyObject *args, int doput)
                        c_str[1] = size;
                        len = 2;
                }
-               else {
+               else if (size <= INT_MAX) {
                        c_str[0] = BINSTRING;
                        for (i = 1; i < 5; i++)
                                c_str[i] = (int)(size >> ((i - 1) * 8));
                        len = 5;
                }
+               else
+                       return -1;    /* string too large */
 
                if (self->write_func(self, c_str, len) < 0)
                        return -1;
@@ -1286,7 +1288,7 @@ modified_EncodeRawUnicodeEscape(const Py_UNICODE *s, int size)
 static int
 save_unicode(Picklerobject *self, PyObject *args, int doput)
 {
-       int size, len;
+       Py_ssize_t size, len;
        PyObject *repr=0;
 
        if (!PyUnicode_Check(args))
@@ -1325,6 +1327,8 @@ save_unicode(Picklerobject *self, PyObject *args, int doput)
 
                if ((size = PyString_Size(repr)) < 0)
                        goto err;
+               if (size > INT_MAX)
+                       return -1;   /* string too large */
 
                c_str[0] = BINUNICODE;
                for (i = 1; i < 5; i++)
index 4debb7263bdf8a00489b2b153f14972ba6e6de0a..3f762b09fb02692a388bdd805e3e99fc32370c34 100644 (file)
@@ -289,7 +289,17 @@ IO_truncate(IOobject *self, PyObject *args) {
        
         if (!IO__opencheck(self)) return NULL;
         if (!PyArg_ParseTuple(args, "|n:truncate", &pos)) return NULL;
-        if (pos < 0) pos = self->pos;
+
+       if (PyTuple_Size(args) == 0) {
+               /* No argument passed, truncate to current position */
+               pos = self->pos;
+       }
+
+        if (pos < 0) {
+               errno = EINVAL;
+               PyErr_SetFromErrno(PyExc_IOError);
+               return NULL;
+       }
 
         if (self->string_size > pos) self->string_size = pos;
         self->pos = self->string_size;
@@ -657,11 +667,9 @@ newIobject(PyObject *s) {
   char *buf;
   Py_ssize_t size;
 
-  if (PyObject_AsReadBuffer(s, (const void **)&buf, &size)) {
-      PyErr_Format(PyExc_TypeError, "expected read buffer, %.200s found",
-                  s->ob_type->tp_name);
+  if (PyObject_AsCharBuffer(s, (const char **)&buf, &size) != 0)
       return NULL;
-  }
+
   self = PyObject_New(Iobject, &Itype);
   if (!self) return NULL;
   Py_INCREF(s);
index fb51297ae06bf29828e10a764213340bce8344ac..c811a67eda00f72d5fde4839332e0c84bcae702c 100644 (file)
 #undef hz
 #endif
 
-#define GBK_PREDECODE(dc1, dc2, assi) \
+/* GBK and GB2312 map differently in few codepoints that are listed below:
+ *
+ *             gb2312                          gbk
+ * A1A4                U+30FB KATAKANA MIDDLE DOT      U+00B7 MIDDLE DOT
+ * A1AA                U+2015 HORIZONTAL BAR           U+2014 EM DASH
+ * A844                undefined                       U+2015 HORIZONTAL BAR
+ */
+
+#define GBK_DECODE(dc1, dc2, assi) \
        if ((dc1) == 0xa1 && (dc2) == 0xaa) (assi) = 0x2014; \
        else if ((dc1) == 0xa8 && (dc2) == 0x44) (assi) = 0x2015; \
-       else if ((dc1) == 0xa1 && (dc2) == 0xa4) (assi) = 0x00b7;
-#define GBK_PREENCODE(code, assi) \
+       else if ((dc1) == 0xa1 && (dc2) == 0xa4) (assi) = 0x00b7; \
+       else TRYMAP_DEC(gb2312, assi, dc1 ^ 0x80, dc2 ^ 0x80); \
+       else TRYMAP_DEC(gbkext, assi, dc1, dc2);
+
+#define GBK_ENCODE(code, assi) \
        if ((code) == 0x2014) (assi) = 0xa1aa; \
        else if ((code) == 0x2015) (assi) = 0xa844; \
-       else if ((code) == 0x00b7) (assi) = 0xa1a4;
+       else if ((code) == 0x00b7) (assi) = 0xa1a4; \
+       else if ((code) != 0x30fb && TRYMAP_ENC_COND(gbcommon, assi, code));
 
 /*
  * GB2312 codec
@@ -99,8 +111,7 @@ ENCODER(gbk)
 
                REQUIRE_OUTBUF(2)
 
-               GBK_PREENCODE(c, code)
-               else TRYMAP_ENC(gbcommon, code, c);
+               GBK_ENCODE(c, code)
                else return 1;
 
                OUT1((code >> 8) | 0x80)
@@ -129,9 +140,7 @@ DECODER(gbk)
 
                REQUIRE_INBUF(2)
 
-               GBK_PREDECODE(c, IN2, **outbuf)
-               else TRYMAP_DEC(gb2312, **outbuf, c ^ 0x80, IN2 ^ 0x80);
-               else TRYMAP_DEC(gbkext, **outbuf, c, IN2);
+               GBK_DECODE(c, IN2, **outbuf)
                else return 2;
 
                NEXT(2, 1)
@@ -187,9 +196,7 @@ ENCODER(gb18030)
 
                REQUIRE_OUTBUF(2)
 
-               GBK_PREENCODE(c, code)
-               else TRYMAP_ENC(gbcommon, code, c);
-               else TRYMAP_ENC(gb18030ext, code, c);
+               GBK_ENCODE(c, code)
                else {
                        const struct _gb18030_to_unibmp_ranges *utrrange;
 
@@ -287,9 +294,7 @@ DECODER(gb18030)
                        return 4;
                }
 
-               GBK_PREDECODE(c, c2, **outbuf)
-               else TRYMAP_DEC(gb2312, **outbuf, c ^ 0x80, c2 ^ 0x80);
-               else TRYMAP_DEC(gbkext, **outbuf, c, c2);
+               GBK_DECODE(c, c2, **outbuf)
                else TRYMAP_DEC(gb18030ext, **outbuf, c, c2);
                else return 2;
 
index 8a2ab7eb2f4e5658e9ec1bdccd77004041ef52d1..55196a9ea4cdf449158a686f3db5cb3c5ea5451a 100644 (file)
@@ -592,9 +592,11 @@ ksx1001_encoder(const ucs4_t *data, Py_ssize_t *length)
 {
        DBCHAR coded;
        assert(*length == 1);
-       TRYMAP_ENC(cp949, coded, *data)
-               if (!(coded & 0x8000))
-                       return coded;
+       if (*data < 0x10000) {
+               TRYMAP_ENC(cp949, coded, *data)
+                       if (!(coded & 0x8000))
+                               return coded;
+       }
        return MAP_UNMAPPABLE;
 }
 
@@ -628,11 +630,13 @@ jisx0208_encoder(const ucs4_t *data, Py_ssize_t *length)
 {
        DBCHAR coded;
        assert(*length == 1);
-       if (*data == 0xff3c) /* F/W REVERSE SOLIDUS */
-               return 0x2140;
-       else TRYMAP_ENC(jisxcommon, coded, *data) {
-               if (!(coded & 0x8000))
-                       return coded;
+       if (*data < 0x10000) {
+               if (*data == 0xff3c) /* F/W REVERSE SOLIDUS */
+                       return 0x2140;
+               else TRYMAP_ENC(jisxcommon, coded, *data) {
+                       if (!(coded & 0x8000))
+                               return coded;
+               }
        }
        return MAP_UNMAPPABLE;
 }
@@ -665,9 +669,11 @@ jisx0212_encoder(const ucs4_t *data, Py_ssize_t *length)
 {
        DBCHAR coded;
        assert(*length == 1);
-       TRYMAP_ENC(jisxcommon, coded, *data) {
-               if (coded & 0x8000)
-                       return coded & 0x7fff;
+       if (*data < 0x10000) {
+               TRYMAP_ENC(jisxcommon, coded, *data) {
+                       if (coded & 0x8000)
+                               return coded & 0x7fff;
+               }
        }
        return MAP_UNMAPPABLE;
 }
@@ -854,7 +860,7 @@ jisx0213_2000_2_encoder(const ucs4_t *data, Py_ssize_t *length)
        if (coded == MAP_UNMAPPABLE || coded == MAP_MULTIPLE_AVAIL)
                return coded;
        else if (coded & 0x8000)
-               return coded;
+               return coded & 0x7fff;
        else
                return MAP_UNMAPPABLE;
 }
@@ -901,7 +907,7 @@ jisx0213_2004_2_encoder(const ucs4_t *data, Py_ssize_t *length)
        if (coded == MAP_UNMAPPABLE || coded == MAP_MULTIPLE_AVAIL)
                return coded;
        else if (coded & 0x8000)
-               return coded;
+               return coded & 0x7fff;
        else
                return MAP_UNMAPPABLE;
 }
@@ -970,9 +976,11 @@ gb2312_encoder(const ucs4_t *data, Py_ssize_t *length)
 {
        DBCHAR coded;
        assert(*length == 1);
-       TRYMAP_ENC(gbcommon, coded, *data) {
-               if (!(coded & 0x8000))
-                       return coded;
+       if (*data < 0x10000) {
+               TRYMAP_ENC(gbcommon, coded, *data) {
+                       if (!(coded & 0x8000))
+                               return coded;
+               }
        }
        return MAP_UNMAPPABLE;
 }
@@ -992,7 +1000,10 @@ dummy_encoder(const ucs4_t *data, Py_ssize_t *length)
 
 /*-*- registry tables -*-*/
 
-#define REGISTRY_KSX1001       { CHARSET_KSX1001, 1, 2,                \
+#define REGISTRY_KSX1001_G0    { CHARSET_KSX1001, 0, 2,                \
+                                 ksx1001_init,                         \
+                                 ksx1001_decoder, ksx1001_encoder }
+#define REGISTRY_KSX1001_G1    { CHARSET_KSX1001, 1, 2,                \
                                  ksx1001_init,                         \
                                  ksx1001_decoder, ksx1001_encoder }
 #define REGISTRY_JISX0201_R    { CHARSET_JISX0201_R, 0, 1,             \
@@ -1034,7 +1045,7 @@ dummy_encoder(const ucs4_t *data, Py_ssize_t *length)
                                  jisx0213_init,                        \
                                  jisx0213_2004_2_decoder,              \
                                  jisx0213_2004_2_encoder }
-#define REGISTRY_GB2312                { CHARSET_GB2312, 1, 2,                 \
+#define REGISTRY_GB2312                { CHARSET_GB2312, 0, 2,                 \
                                  gb2312_init,                          \
                                  gb2312_decoder, gb2312_encoder }
 #define REGISTRY_CNS11643_1    { CHARSET_CNS11643_1, 1, 2,             \
@@ -1054,7 +1065,7 @@ dummy_encoder(const ucs4_t *data, Py_ssize_t *length)
        };
 
 static const struct iso2022_designation iso2022_kr_designations[] = {
-       REGISTRY_KSX1001, REGISTRY_SENTINEL
+       REGISTRY_KSX1001_G1, REGISTRY_SENTINEL
 };
 CONFIGDEF(kr, 0)
 
@@ -1071,7 +1082,7 @@ static const struct iso2022_designation iso2022_jp_1_designations[] = {
 CONFIGDEF(jp_1, NO_SHIFT | USE_JISX0208_EXT)
 
 static const struct iso2022_designation iso2022_jp_2_designations[] = {
-       REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_KSX1001,
+       REGISTRY_JISX0208, REGISTRY_JISX0212, REGISTRY_KSX1001_G0,
        REGISTRY_GB2312, REGISTRY_JISX0201_R, REGISTRY_JISX0208_O,
        REGISTRY_ISO8859_1, REGISTRY_ISO8859_7, REGISTRY_SENTINEL
 };
index b266c8f9b47c848d8979408324ae74dfda4b2c17..71c54f093fc96a24ef11f8fb3fa57453d5e64c56 100644 (file)
@@ -159,29 +159,32 @@ static const struct dbcs_map *mapping_list;
 #endif
 
 #define _TRYMAP_ENC(m, assi, val)                              \
-       if ((m)->map != NULL && (val) >= (m)->bottom &&         \
+       ((m)->map != NULL && (val) >= (m)->bottom &&            \
            (val)<= (m)->top && ((assi) = (m)->map[(val) -      \
            (m)->bottom]) != NOCHAR)
-#define TRYMAP_ENC(charset, assi, uni)                         \
+#define TRYMAP_ENC_COND(charset, assi, uni)                    \
        _TRYMAP_ENC(&charset##_encmap[(uni) >> 8], assi, (uni) & 0xff)
+#define TRYMAP_ENC(charset, assi, uni)                         \
+       if TRYMAP_ENC_COND(charset, assi, uni)
+
 #define _TRYMAP_DEC(m, assi, val)                              \
-       if ((m)->map != NULL && (val) >= (m)->bottom &&         \
+       ((m)->map != NULL && (val) >= (m)->bottom &&            \
            (val)<= (m)->top && ((assi) = (m)->map[(val) -      \
            (m)->bottom]) != UNIINV)
 #define TRYMAP_DEC(charset, assi, c1, c2)                      \
-       _TRYMAP_DEC(&charset##_decmap[c1], assi, c2)
+       if _TRYMAP_DEC(&charset##_decmap[c1], assi, c2)
 
 #define _TRYMAP_ENC_MPLANE(m, assplane, asshi, asslo, val)     \
-       if ((m)->map != NULL && (val) >= (m)->bottom &&         \
+       ((m)->map != NULL && (val) >= (m)->bottom &&            \
            (val)<= (m)->top &&                                 \
            ((assplane) = (m)->map[((val) - (m)->bottom)*3]) != 0 && \
            (((asshi) = (m)->map[((val) - (m)->bottom)*3 + 1]), 1) && \
            (((asslo) = (m)->map[((val) - (m)->bottom)*3 + 2]), 1))
 #define TRYMAP_ENC_MPLANE(charset, assplane, asshi, asslo, uni)        \
-       _TRYMAP_ENC_MPLANE(&charset##_encmap[(uni) >> 8], \
+       if _TRYMAP_ENC_MPLANE(&charset##_encmap[(uni) >> 8], \
                           assplane, asshi, asslo, (uni) & 0xff)
 #define TRYMAP_DEC_MPLANE(charset, assi, plane, c1, c2)                \
-       _TRYMAP_DEC(&charset##_decmap[plane][c1], assi, c2)
+       if _TRYMAP_DEC(&charset##_decmap[plane][c1], assi, c2)
 
 #if Py_UNICODE_SIZE == 2
 #define DECODE_SURROGATE(c)                                    \
index b57ccbcb0092af8aca4d95654d5bae759fc1262e..7ffa316013c83df561c0fed2479d0f247b1ddbe2 100644 (file)
@@ -1149,9 +1149,9 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
 
        PyObject *newfmt = NULL;        /* py string, the output format */
        char *pnew;     /* pointer to available byte in output format */
-       char totalnew;  /* number bytes total in output format buffer,
+       int totalnew;   /* number bytes total in output format buffer,
                           exclusive of trailing \0 */
-       char usednew;   /* number bytes used so far in output format buffer */
+       int usednew;    /* number bytes used so far in output format buffer */
 
        char *ptoappend; /* pointer to string to append to output buffer */
        int ntoappend;  /* # of bytes to append to output buffer */
index ee5a7f01c22dbde280120ee352befe6299e62e3b..83f5f436e960e6ff3b24635f3209d4b2ae86edb3 100644 (file)
@@ -246,11 +246,13 @@ dbm_get(register dbmobject *dp, PyObject *args)
 {
        datum key, val;
        PyObject *defvalue = Py_None;
+       char *tmp_ptr;
        int tmp_size;
 
        if (!PyArg_ParseTuple(args, "s#|O:get",
-                              &key.dptr, &tmp_size, &defvalue))
+                              &tmp_ptr, &tmp_size, &defvalue))
                return NULL;
+       key.dptr = tmp_ptr;
        key.dsize = tmp_size;
         check_dbmobject_open(dp);
        val = dbm_fetch(dp->di_dbm, key);
@@ -267,11 +269,13 @@ dbm_setdefault(register dbmobject *dp, PyObject *args)
 {
        datum key, val;
        PyObject *defvalue = NULL;
+       char *tmp_ptr;
        int tmp_size;
 
        if (!PyArg_ParseTuple(args, "s#|S:setdefault",
-                              &key.dptr, &tmp_size, &defvalue))
+                              &tmp_ptr, &tmp_size, &defvalue))
                return NULL;
+       key.dptr = tmp_ptr;
        key.dsize = tmp_size;
         check_dbmobject_open(dp);
        val = dbm_fetch(dp->di_dbm, key);
index 99f2897e53d79525cfb6cd183394e3ee3f8b05c0..2dd058e4b8f315e4d0aac39bcc7fde381193a3b5 100644 (file)
@@ -1153,6 +1153,7 @@ PyDoc_STRVAR(gc__doc__,
 "disable() -- Disable automatic garbage collection.\n"
 "isenabled() -- Returns true if automatic collection is enabled.\n"
 "collect() -- Do a full collection right now.\n"
+"get_count() -- Return the current collection counts.\n"
 "set_debug() -- Set debugging flags.\n"
 "get_debug() -- Get debugging flags.\n"
 "set_threshold() -- Set the collection thresholds.\n"
index d91389033ff4ec719105716ef4dafc8b0dbbd16d..7fcbb103667a81aa83c6b32771cf8c24719c0d20 100644 (file)
@@ -618,11 +618,15 @@ static PyTypeObject tee_type = {
 static PyObject *
 tee(PyObject *self, PyObject *args)
 {
-       int i, n=2;
+       Py_ssize_t i, n=2;
        PyObject *it, *iterable, *copyable, *result;
 
-       if (!PyArg_ParseTuple(args, "O|i", &iterable, &n))
+       if (!PyArg_ParseTuple(args, "O|n", &iterable, &n))
                return NULL;
+       if (n < 0) {
+               PyErr_SetString(PyExc_ValueError, "n must be >= 0");
+               return NULL;
+       }
        result = PyTuple_New(n);
        if (result == NULL)
                return NULL;
@@ -2068,7 +2072,7 @@ count_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 static PyObject *
 count_next(countobject *lz)
 {
-       return PyInt_FromSize_t(lz->cnt++);
+       return PyInt_FromSsize_t(lz->cnt++);
 }
 
 static PyObject *
index c1c7363c83b9c210335c33474f40375fdc1e70e1..b435d768a8ecc238979022e92ec4fe964ac0be27 100644 (file)
@@ -28,7 +28,9 @@
 #if defined(linux)
 #include <linux/soundcard.h>
 
+#ifndef HAVE_STDINT_H
 typedef unsigned long uint32_t;
+#endif
 
 #elif defined(__FreeBSD__)
 #include <machine/soundcard.h>
index 3f39c9bffcd14340c8a584bbb30b1d1d7ef10f7a..ac6b38dccd09382df55833d50c7728e3093e24e1 100644 (file)
@@ -59,31 +59,32 @@ static char *usage_line =
 static char *usage_1 = "\
 Options and arguments (and corresponding environment variables):\n\
 -c cmd : program passed in as string (terminates option list)\n\
--d     : debug output from parser (also PYTHONDEBUG=x)\n\
+-d     : debug output from parser; also PYTHONDEBUG=x\n\
 -E     : ignore environment variables (such as PYTHONPATH)\n\
 -h     : print this help message and exit (also --help)\n\
--i     : inspect interactively after running script, (also PYTHONINSPECT=x)\n\
-         and force prompts, even if stdin does not appear to be a terminal\n\
+-i     : inspect interactively after running script; forces a prompt even\n\
+         if stdin does not appear to be a terminal; also PYTHONINSPECT=x\n\
 ";
 static char *usage_2 = "\
 -m mod : run library module as a script (terminates option list)\n\
--O     : optimize generated bytecode (a tad; also PYTHONOPTIMIZE=x)\n\
+-O     : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x\n\
 -OO    : remove doc-strings in addition to the -O optimizations\n\
 -S     : don't imply 'import site' on initialization\n\
 -t     : issue warnings about inconsistent tab usage (-tt: issue errors)\n\
--u     : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x)\n\
+-u     : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x\n\
 ";
 static char *usage_3 = "\
          see man page for details on internal buffering relating to '-u'\n\
--v     : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\
+-v     : verbose (trace import statements); also PYTHONVERBOSE=x\n\
+         can be supplied multiple times to increase verbosity\n\
 -V     : print the Python version number and exit (also --version)\n\
--W arg : warning control (arg is action:message:category:module:lineno)\n\
+-W arg : warning control; arg is action:message:category:module:lineno\n\
 -x     : skip first line of source, allowing use of non-Unix forms of #!cmd\n\
 file   : program read from script file\n\
 -      : program read from stdin (default; interactive mode if a tty)\n\
 ";
 static char *usage_4 = "\
-arg ...: arguments passed to program in sys.argv[1:]\n\
+arg ...: arguments passed to program in sys.argv[1:]\n\n\
 Other environment variables:\n\
 PYTHONSTARTUP: file executed on interactive startup (no default)\n\
 PYTHONPATH   : '%c'-separated list of directories prefixed to the\n\
index 731b1d92d02bdaae6f9ce83741f476d242e25301..632dffd2f17ff2c75143549bafa3972b2de38765 100644 (file)
@@ -48,10 +48,10 @@ is_error(double x)
 }
 
 static PyObject *
-math_1(PyObject *args, double (*func) (double), char *argsfmt)
+math_1(PyObject *arg, double (*func) (double))
 {
-       double x;
-       if (!  PyArg_ParseTuple(args, argsfmt, &x))
+       double x = PyFloat_AsDouble(arg);
+       if (x == -1.0 && PyErr_Occurred())
                return NULL;
        errno = 0;
        PyFPE_START_PROTECT("in math_1", return 0)
@@ -65,10 +65,15 @@ math_1(PyObject *args, double (*func) (double), char *argsfmt)
 }
 
 static PyObject *
-math_2(PyObject *args, double (*func) (double, double), char *argsfmt)
+math_2(PyObject *args, double (*func) (double, double), char *funcname)
 {
+       PyObject *ox, *oy;
        double x, y;
-       if (! PyArg_ParseTuple(args, argsfmt, &x, &y))
+       if (! PyArg_UnpackTuple(args, funcname, 2, 2, &ox, &oy))
+               return NULL;
+       x = PyFloat_AsDouble(ox);
+       y = PyFloat_AsDouble(oy);
+       if ((x == -1.0 || y == -1.0) && PyErr_Occurred())
                return NULL;
        errno = 0;
        PyFPE_START_PROTECT("in math_2", return 0)
@@ -83,13 +88,13 @@ math_2(PyObject *args, double (*func) (double, double), char *argsfmt)
 
 #define FUNC1(funcname, func, docstring) \
        static PyObject * math_##funcname(PyObject *self, PyObject *args) { \
-               return math_1(args, func, "d:" #funcname); \
+               return math_1(args, func); \
        }\
         PyDoc_STRVAR(math_##funcname##_doc, docstring);
 
 #define FUNC2(funcname, func, docstring) \
        static PyObject * math_##funcname(PyObject *self, PyObject *args) { \
-               return math_2(args, func, "dd:" #funcname); \
+               return math_2(args, func, #funcname); \
        }\
         PyDoc_STRVAR(math_##funcname##_doc, docstring);
 
@@ -135,11 +140,11 @@ FUNC1(tanh, tanh,
       "tanh(x)\n\nReturn the hyperbolic tangent of x.")
 
 static PyObject *
-math_frexp(PyObject *self, PyObject *args)
+math_frexp(PyObject *self, PyObject *arg)
 {
-       double x;
        int i;
-       if (! PyArg_ParseTuple(args, "d:frexp", &x))
+       double x = PyFloat_AsDouble(arg);
+       if (x == -1.0 && PyErr_Occurred())
                return NULL;
        errno = 0;
        x = frexp(x, &i);
@@ -179,10 +184,10 @@ PyDoc_STRVAR(math_ldexp_doc,
 "ldexp(x, i) -> x * (2**i)");
 
 static PyObject *
-math_modf(PyObject *self, PyObject *args)
+math_modf(PyObject *self, PyObject *arg)
 {
-       double x, y;
-       if (! PyArg_ParseTuple(args, "d:modf", &x))
+       double y, x = PyFloat_AsDouble(arg);
+       if (x == -1.0 && PyErr_Occurred())
                return NULL;
        errno = 0;
        x = modf(x, &y);
@@ -208,7 +213,7 @@ PyDoc_STRVAR(math_modf_doc,
 */
 
 static PyObject*
-loghelper(PyObject* args, double (*func)(double), char *format, PyObject *arg)
+loghelper(PyObject* arg, double (*func)(double), char *funcname)
 {
        /* If it is long, do it ourselves. */
        if (PyLong_Check(arg)) {
@@ -229,7 +234,7 @@ loghelper(PyObject* args, double (*func)(double), char *format, PyObject *arg)
        }
 
        /* Else let libm handle it by itself. */
-       return math_1(args, func, format);
+       return math_1(arg, func);
 }
 
 static PyObject *
@@ -239,28 +244,15 @@ math_log(PyObject *self, PyObject *args)
        PyObject *base = NULL;
        PyObject *num, *den;
        PyObject *ans;
-       PyObject *newargs;
 
        if (!PyArg_UnpackTuple(args, "log", 1, 2, &arg, &base))
                return NULL;
-       if (base == NULL)
-               return loghelper(args, log, "d:log", arg);
 
-       newargs = PyTuple_Pack(1, arg);
-       if (newargs == NULL)
-               return NULL;
-       num = loghelper(newargs, log, "d:log", arg);
-       Py_DECREF(newargs);
-       if (num == NULL)
-               return NULL;
+       num = loghelper(arg, log, "log");
+       if (num == NULL || base == NULL)
+               return num;
 
-       newargs = PyTuple_Pack(1, base);
-       if (newargs == NULL) {
-               Py_DECREF(num);
-               return NULL;
-       }
-       den = loghelper(newargs, log, "d:log", base);
-       Py_DECREF(newargs);
+       den = loghelper(base, log, "log");
        if (den == NULL) {
                Py_DECREF(num);
                return NULL;
@@ -277,25 +269,23 @@ PyDoc_STRVAR(math_log_doc,
 If the base not specified, returns the natural logarithm (base e) of x.");
 
 static PyObject *
-math_log10(PyObject *self, PyObject *args)
+math_log10(PyObject *self, PyObject *arg)
 {
-       PyObject *arg;
-
-       if (!PyArg_UnpackTuple(args, "log10", 1, 1, &arg))
-               return NULL;
-       return loghelper(args, log10, "d:log10", arg);
+       return loghelper(arg, log10, "log10");
 }
 
 PyDoc_STRVAR(math_log10_doc,
 "log10(x) -> the base 10 logarithm of x.");
 
+/* XXX(nnorwitz): Should we use the platform M_PI or something more accurate
+   like: 3.14159265358979323846264338327950288 */
 static const double degToRad = 3.141592653589793238462643383 / 180.0;
 
 static PyObject *
-math_degrees(PyObject *self, PyObject *args)
+math_degrees(PyObject *self, PyObject *arg)
 {
-       double x;
-       if (! PyArg_ParseTuple(args, "d:degrees", &x))
+       double x = PyFloat_AsDouble(arg);
+       if (x == -1.0 && PyErr_Occurred())
                return NULL;
        return PyFloat_FromDouble(x / degToRad);
 }
@@ -304,10 +294,10 @@ PyDoc_STRVAR(math_degrees_doc,
 "degrees(x) -> converts angle x from radians to degrees");
 
 static PyObject *
-math_radians(PyObject *self, PyObject *args)
+math_radians(PyObject *self, PyObject *arg)
 {
-       double x;
-       if (! PyArg_ParseTuple(args, "d:radians", &x))
+       double x = PyFloat_AsDouble(arg);
+       if (x == -1.0 && PyErr_Occurred())
                return NULL;
        return PyFloat_FromDouble(x * degToRad);
 }
@@ -316,31 +306,31 @@ PyDoc_STRVAR(math_radians_doc,
 "radians(x) -> converts angle x from degrees to radians");
 
 static PyMethodDef math_methods[] = {
-       {"acos",        math_acos,      METH_VARARGS,   math_acos_doc},
-       {"asin",        math_asin,      METH_VARARGS,   math_asin_doc},
-       {"atan",        math_atan,      METH_VARARGS,   math_atan_doc},
+       {"acos",        math_acos,      METH_O,         math_acos_doc},
+       {"asin",        math_asin,      METH_O,         math_asin_doc},
+       {"atan",        math_atan,      METH_O,         math_atan_doc},
        {"atan2",       math_atan2,     METH_VARARGS,   math_atan2_doc},
-       {"ceil",        math_ceil,      METH_VARARGS,   math_ceil_doc},
-       {"cos",         math_cos,       METH_VARARGS,   math_cos_doc},
-       {"cosh",        math_cosh,      METH_VARARGS,   math_cosh_doc},
-       {"degrees",     math_degrees,   METH_VARARGS,   math_degrees_doc},
-       {"exp",         math_exp,       METH_VARARGS,   math_exp_doc},
-       {"fabs",        math_fabs,      METH_VARARGS,   math_fabs_doc},
-       {"floor",       math_floor,     METH_VARARGS,   math_floor_doc},
+       {"ceil",        math_ceil,      METH_O,         math_ceil_doc},
+       {"cos",         math_cos,       METH_O,         math_cos_doc},
+       {"cosh",        math_cosh,      METH_O,         math_cosh_doc},
+       {"degrees",     math_degrees,   METH_O,         math_degrees_doc},
+       {"exp",         math_exp,       METH_O,         math_exp_doc},
+       {"fabs",        math_fabs,      METH_O,         math_fabs_doc},
+       {"floor",       math_floor,     METH_O,         math_floor_doc},
        {"fmod",        math_fmod,      METH_VARARGS,   math_fmod_doc},
-       {"frexp",       math_frexp,     METH_VARARGS,   math_frexp_doc},
+       {"frexp",       math_frexp,     METH_O,         math_frexp_doc},
        {"hypot",       math_hypot,     METH_VARARGS,   math_hypot_doc},
        {"ldexp",       math_ldexp,     METH_VARARGS,   math_ldexp_doc},
        {"log",         math_log,       METH_VARARGS,   math_log_doc},
-       {"log10",       math_log10,     METH_VARARGS,   math_log10_doc},
-       {"modf",        math_modf,      METH_VARARGS,   math_modf_doc},
+       {"log10",       math_log10,     METH_O,         math_log10_doc},
+       {"modf",        math_modf,      METH_O,         math_modf_doc},
        {"pow",         math_pow,       METH_VARARGS,   math_pow_doc},
-       {"radians",     math_radians,   METH_VARARGS,   math_radians_doc},
-       {"sin",         math_sin,       METH_VARARGS,   math_sin_doc},
-       {"sinh",        math_sinh,      METH_VARARGS,   math_sinh_doc},
-       {"sqrt",        math_sqrt,      METH_VARARGS,   math_sqrt_doc},
-       {"tan",         math_tan,       METH_VARARGS,   math_tan_doc},
-       {"tanh",        math_tanh,      METH_VARARGS,   math_tanh_doc},
+       {"radians",     math_radians,   METH_O,         math_radians_doc},
+       {"sin",         math_sin,       METH_O,         math_sin_doc},
+       {"sinh",        math_sinh,      METH_O,         math_sinh_doc},
+       {"sqrt",        math_sqrt,      METH_O,         math_sqrt_doc},
+       {"tan",         math_tan,       METH_O,         math_tan_doc},
+       {"tanh",        math_tanh,      METH_O,         math_tanh_doc},
        {NULL,          NULL}           /* sentinel */
 };
 
@@ -358,6 +348,8 @@ initmath(void)
        if (m == NULL)
                goto finally;
        d = PyModule_GetDict(m);
+       if (d == NULL)
+               goto finally;
 
         if (!(v = PyFloat_FromDouble(atan(1.0) * 4.0)))
                 goto finally;
index a728d3dfa763330673175139cf13064be2b77d18..d39169aa30337de47a492b8977c5410923c0c913 100644 (file)
@@ -470,7 +470,7 @@ static PyObject *
 mmap_tell_method(mmap_object *self, PyObject *unused)
 {
        CHECK_VALID(NULL);
-       return PyInt_FromLong((long) self->pos);
+       return PyInt_FromSize_t(self->pos);
 }
 
 static PyObject *
index 9716838ba231dd945e0a32cf53f12b37d9c20753..eb59c4d8ecf8f56cb459bf42541c948cd82a3a03 100644 (file)
@@ -34,7 +34,9 @@
 
 #if defined(linux)
 
+#ifndef HAVE_STDINT_H
 typedef unsigned long uint32_t;
+#endif
 
 #elif defined(__FreeBSD__)
 
index 39394a54c3e8652355c776eef5f468a4ef310a68..78180b0edd36dc244246fca389d578c9a56ce23e 100644 (file)
@@ -74,7 +74,8 @@ static PyObject*
 node2tuple(node *n,                     /* node to convert               */
            SeqMaker mkseq,              /* create sequence               */
            SeqInserter addelem,         /* func. to add elem. in seq.    */
-           int lineno)                  /* include line numbers?         */
+           int lineno,                  /* include line numbers?         */
+           int col_offset)              /* include column offsets?       */
 {
     if (n == NULL) {
         Py_INCREF(Py_None);
@@ -95,7 +96,7 @@ node2tuple(node *n,                     /* node to convert               */
         }
         (void) addelem(v, 0, w);
         for (i = 0; i < NCH(n); i++) {
-            w = node2tuple(CHILD(n, i), mkseq, addelem, lineno);
+            w = node2tuple(CHILD(n, i), mkseq, addelem, lineno, col_offset);
             if (w == NULL) {
                 Py_DECREF(v);
                 return ((PyObject*) NULL);
@@ -108,12 +109,14 @@ node2tuple(node *n,                     /* node to convert               */
         return (v);
     }
     else if (ISTERMINAL(TYPE(n))) {
-        PyObject *result = mkseq(2 + lineno);
+        PyObject *result = mkseq(2 + lineno + col_offset);
         if (result != NULL) {
             (void) addelem(result, 0, PyInt_FromLong(TYPE(n)));
             (void) addelem(result, 1, PyString_FromString(STR(n)));
             if (lineno == 1)
                 (void) addelem(result, 2, PyInt_FromLong(n->n_lineno));
+            if (col_offset == 1)
+                (void) addelem(result, 3, PyInt_FromLong(n->n_col_offset));
         }
         return (result);
     }
@@ -289,29 +292,35 @@ static PyObject*
 parser_st2tuple(PyST_Object *self, PyObject *args, PyObject *kw)
 {
     PyObject *line_option = 0;
+    PyObject *col_option = 0;
     PyObject *res = 0;
     int ok;
 
-    static char *keywords[] = {"ast", "line_info", NULL};
+    static char *keywords[] = {"ast", "line_info", "col_info", NULL};
 
     if (self == NULL) {
-        ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|O:st2tuple", keywords,
-                                         &PyST_Type, &self, &line_option);
+        ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|OO:st2tuple", keywords,
+                                         &PyST_Type, &self, &line_option,
+                                         &col_option);
     }
     else
-        ok = PyArg_ParseTupleAndKeywords(args, kw, "|O:totuple", &keywords[1],
-                                         &line_option);
+        ok = PyArg_ParseTupleAndKeywords(args, kw, "|OO:totuple", &keywords[1],
+                                         &line_option, &col_option);
     if (ok != 0) {
         int lineno = 0;
+        int col_offset = 0;
         if (line_option != NULL) {
             lineno = (PyObject_IsTrue(line_option) != 0) ? 1 : 0;
         }
+        if (col_option != NULL) {
+            col_offset = (PyObject_IsTrue(col_option) != 0) ? 1 : 0;
+        }
         /*
          *  Convert ST into a tuple representation.  Use Guido's function,
          *  since it's known to work already.
          */
         res = node2tuple(((PyST_Object*)self)->st_node,
-                         PyTuple_New, PyTuple_SetItem, lineno);
+                         PyTuple_New, PyTuple_SetItem, lineno, col_offset);
     }
     return (res);
 }
@@ -327,28 +336,34 @@ static PyObject*
 parser_st2list(PyST_Object *self, PyObject *args, PyObject *kw)
 {
     PyObject *line_option = 0;
+    PyObject *col_option = 0;
     PyObject *res = 0;
     int ok;
 
-    static char *keywords[] = {"ast", "line_info", NULL};
+    static char *keywords[] = {"ast", "line_info", "col_info", NULL};
 
     if (self == NULL)
-        ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|O:st2list", keywords,
-                                         &PyST_Type, &self, &line_option);
+        ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|OO:st2list", keywords,
+                                         &PyST_Type, &self, &line_option,
+                                         &col_option);
     else
-        ok = PyArg_ParseTupleAndKeywords(args, kw, "|O:tolist", &keywords[1],
-                                         &line_option);
+        ok = PyArg_ParseTupleAndKeywords(args, kw, "|OO:tolist", &keywords[1],
+                                         &line_option, &col_option);
     if (ok) {
         int lineno = 0;
+        int col_offset = 0;
         if (line_option != 0) {
             lineno = PyObject_IsTrue(line_option) ? 1 : 0;
         }
+        if (col_option != NULL) {
+            col_offset = (PyObject_IsTrue(col_option) != 0) ? 1 : 0;
+        }
         /*
          *  Convert ST into a tuple representation.  Use Guido's function,
          *  since it's known to work already.
          */
         res = node2tuple(self->st_node,
-                         PyList_New, PyList_SetItem, lineno);
+                         PyList_New, PyList_SetItem, lineno, col_offset);
     }
     return (res);
 }
index 5c67be6dc08e4df0e308ad8b9a4769b0badb2ae0..3260c3d9092d0ea7d54565fad1f347988c51772d 100644 (file)
@@ -792,7 +792,7 @@ time_t_to_FILE_TIME(int time_in, int nsec_in, FILETIME *out_ptr)
        /* XXX endianness */
        __int64 out;
        out = time_in + secs_between_epochs;
-       out = out * 10000000 + nsec_in;
+       out = out * 10000000 + nsec_in / 100;
        memcpy(out_ptr, &out, sizeof(out));
 }
 
@@ -828,6 +828,106 @@ attribute_data_to_stat(WIN32_FILE_ATTRIBUTE_DATA *info, struct win32_stat *resul
        return 0;
 }
 
+/* Emulate GetFileAttributesEx[AW] on Windows 95 */
+static int checked = 0;
+static BOOL (CALLBACK *gfaxa)(LPCSTR, GET_FILEEX_INFO_LEVELS, LPVOID);
+static BOOL (CALLBACK *gfaxw)(LPCWSTR, GET_FILEEX_INFO_LEVELS, LPVOID);
+static void
+check_gfax()
+{
+       HINSTANCE hKernel32;
+       if (checked)
+           return;
+       checked = 1;
+       hKernel32 = GetModuleHandle("KERNEL32");
+       *(FARPROC*)&gfaxa = GetProcAddress(hKernel32, "GetFileAttributesExA");
+       *(FARPROC*)&gfaxw = GetProcAddress(hKernel32, "GetFileAttributesExW");
+}
+
+static BOOL WINAPI
+Py_GetFileAttributesExA(LPCSTR pszFile, 
+                      GET_FILEEX_INFO_LEVELS level,
+                       LPVOID pv)
+{
+       BOOL result;
+       HANDLE hFindFile;
+       WIN32_FIND_DATAA FileData;
+       LPWIN32_FILE_ATTRIBUTE_DATA pfad = pv;
+       /* First try to use the system's implementation, if that is
+          available and either succeeds to gives an error other than
+          that it isn't implemented. */
+       check_gfax();
+       if (gfaxa) {
+               result = gfaxa(pszFile, level, pv);
+               if (result || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+                       return result;
+       }
+       /* It's either not present, or not implemented.
+          Emulate using FindFirstFile. */
+       if (level != GetFileExInfoStandard) {
+               SetLastError(ERROR_INVALID_PARAMETER);
+               return FALSE;
+       }
+       /* Use GetFileAttributes to validate that the file name
+          does not contain wildcards (which FindFirstFile would
+          accept). */
+       if (GetFileAttributesA(pszFile) == 0xFFFFFFFF)
+               return FALSE;
+       hFindFile = FindFirstFileA(pszFile, &FileData);
+       if (hFindFile == INVALID_HANDLE_VALUE)
+               return FALSE;
+       FindClose(hFindFile);
+       pfad->dwFileAttributes = FileData.dwFileAttributes;
+       pfad->ftCreationTime   = FileData.ftCreationTime;
+       pfad->ftLastAccessTime = FileData.ftLastAccessTime;
+       pfad->ftLastWriteTime  = FileData.ftLastWriteTime;
+       pfad->nFileSizeHigh    = FileData.nFileSizeHigh;
+       pfad->nFileSizeLow     = FileData.nFileSizeLow;
+       return TRUE;
+}
+
+static BOOL WINAPI
+Py_GetFileAttributesExW(LPCWSTR pszFile, 
+                      GET_FILEEX_INFO_LEVELS level,
+                       LPVOID pv)
+{
+       BOOL result;
+       HANDLE hFindFile;
+       WIN32_FIND_DATAW FileData;
+       LPWIN32_FILE_ATTRIBUTE_DATA pfad = pv;
+       /* First try to use the system's implementation, if that is
+          available and either succeeds to gives an error other than
+          that it isn't implemented. */
+       check_gfax();
+       if (gfaxa) {
+               result = gfaxw(pszFile, level, pv);
+               if (result || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+                       return result;
+       }
+       /* It's either not present, or not implemented.
+          Emulate using FindFirstFile. */
+       if (level != GetFileExInfoStandard) {
+               SetLastError(ERROR_INVALID_PARAMETER);
+               return FALSE;
+       }
+       /* Use GetFileAttributes to validate that the file name
+          does not contain wildcards (which FindFirstFile would
+          accept). */
+       if (GetFileAttributesW(pszFile) == 0xFFFFFFFF)
+               return FALSE;
+       hFindFile = FindFirstFileW(pszFile, &FileData);
+       if (hFindFile == INVALID_HANDLE_VALUE)
+               return FALSE;
+       FindClose(hFindFile);
+       pfad->dwFileAttributes = FileData.dwFileAttributes;
+       pfad->ftCreationTime   = FileData.ftCreationTime;
+       pfad->ftLastAccessTime = FileData.ftLastAccessTime;
+       pfad->ftLastWriteTime  = FileData.ftLastWriteTime;
+       pfad->nFileSizeHigh    = FileData.nFileSizeHigh;
+       pfad->nFileSizeLow     = FileData.nFileSizeLow;
+       return TRUE;
+}
+
 static int 
 win32_stat(const char* path, struct win32_stat *result)
 {
@@ -835,7 +935,7 @@ win32_stat(const char* path, struct win32_stat *result)
        int code;
        char *dot;
        /* XXX not supported on Win95 and NT 3.x */
-       if (!GetFileAttributesExA(path, GetFileExInfoStandard, &info)) {
+       if (!Py_GetFileAttributesExA(path, GetFileExInfoStandard, &info)) {
                /* Protocol violation: we explicitly clear errno, instead of
                   setting it to a POSIX error. Callers should use GetLastError. */
                errno = 0;
@@ -863,7 +963,7 @@ win32_wstat(const wchar_t* path, struct win32_stat *result)
        const wchar_t *dot;
        WIN32_FILE_ATTRIBUTE_DATA info;
        /* XXX not supported on Win95 and NT 3.x */
-       if (!GetFileAttributesExW(path, GetFileExInfoStandard, &info)) {
+       if (!Py_GetFileAttributesExW(path, GetFileExInfoStandard, &info)) {
                /* Protocol violation: we explicitly clear errno, instead of
                   setting it to a POSIX error. Callers should use GetLastError. */
                errno = 0;
@@ -2458,7 +2558,8 @@ posix_utime(PyObject *self, PyObject *args)
                        wpath = PyUnicode_AS_UNICODE(obwpath);
                        Py_BEGIN_ALLOW_THREADS
                        hFile = CreateFileW(wpath, FILE_WRITE_ATTRIBUTES, 0,
-                                           NULL, OPEN_EXISTING, 0, NULL);
+                                           NULL, OPEN_EXISTING,
+                                           FILE_FLAG_BACKUP_SEMANTICS, NULL);
                        Py_END_ALLOW_THREADS
                        if (hFile == INVALID_HANDLE_VALUE)
                                return win32_error_unicode("utime", wpath);
@@ -2473,7 +2574,8 @@ posix_utime(PyObject *self, PyObject *args)
                        return NULL;
                Py_BEGIN_ALLOW_THREADS
                hFile = CreateFileA(apath, FILE_WRITE_ATTRIBUTES, 0,
-                                   NULL, OPEN_EXISTING, 0, NULL);
+                                   NULL, OPEN_EXISTING,
+                                   FILE_FLAG_BACKUP_SEMANTICS, NULL);
                Py_END_ALLOW_THREADS
                if (hFile == INVALID_HANDLE_VALUE) {
                        win32_error("utime", apath);
@@ -2501,11 +2603,11 @@ posix_utime(PyObject *self, PyObject *args)
                if (extract_time(PyTuple_GET_ITEM(arg, 0),
                                 &atimesec, &ausec) == -1)
                        goto done;
-               time_t_to_FILE_TIME(atimesec, ausec, &atime);
+               time_t_to_FILE_TIME(atimesec, 1000*ausec, &atime);
                if (extract_time(PyTuple_GET_ITEM(arg, 1),
                                 &mtimesec, &musec) == -1)
                        goto done;
-               time_t_to_FILE_TIME(mtimesec, musec, &mtime);
+               time_t_to_FILE_TIME(mtimesec, 1000*musec, &mtime);
        }
        if (!SetFileTime(hFile, NULL, &atime, &mtime)) {
                /* Avoid putting the file name into the error here,
@@ -5585,17 +5687,53 @@ Return a string representing the path to which the symbolic link points.");
 static PyObject *
 posix_readlink(PyObject *self, PyObject *args)
 {
+       PyObject* v;
        char buf[MAXPATHLEN];
        char *path;
        int n;
-       if (!PyArg_ParseTuple(args, "s:readlink", &path))
+#ifdef Py_USING_UNICODE
+       int arg_is_unicode = 0;
+#endif
+
+       if (!PyArg_ParseTuple(args, "et:readlink", 
+                               Py_FileSystemDefaultEncoding, &path))
                return NULL;
+#ifdef Py_USING_UNICODE
+       v = PySequence_GetItem(args, 0);
+       if (v == NULL) return NULL;
+
+       if (PyUnicode_Check(v)) {
+               arg_is_unicode = 1;
+       }
+       Py_DECREF(v);
+#endif
+
        Py_BEGIN_ALLOW_THREADS
        n = readlink(path, buf, (int) sizeof buf);
        Py_END_ALLOW_THREADS
        if (n < 0)
                return posix_error_with_filename(path);
-       return PyString_FromStringAndSize(buf, n);
+
+       v = PyString_FromStringAndSize(buf, n);
+#ifdef Py_USING_UNICODE
+       if (arg_is_unicode) {
+               PyObject *w;
+
+               w = PyUnicode_FromEncodedObject(v,
+                               Py_FileSystemDefaultEncoding,
+                               "strict");
+               if (w != NULL) {
+                       Py_DECREF(v);
+                       v = w;
+               }
+               else {
+                       /* fall back to the original byte string, as
+                          discussed in patch #683592 */
+                       PyErr_Clear();
+               }
+       }
+#endif
+       return v;
 }
 #endif /* HAVE_READLINK */
 
@@ -7877,7 +8015,7 @@ win32_urandom(PyObject *self, PyObject *args)
 
                pCryptGenRandom = (CRYPTGENRANDOM)GetProcAddress(
                                                hAdvAPI32, "CryptGenRandom");
-               if (pCryptAcquireContext == NULL)
+               if (pCryptGenRandom == NULL)
                        return PyErr_Format(PyExc_NotImplementedError,
                                            "CryptGenRandom not found");
 
@@ -8617,3 +8755,4 @@ INITFUNC(void)
 }
 #endif
 
+
index 92f2d1f15f35f3e9ab521b5c0c4bb8fb3db1ffb6..853874be2506e78b65bcab6a970542a2d9dc80ad 100644 (file)
@@ -768,10 +768,16 @@ readline_until_enter_or_signal(char *prompt, int *signal)
 
                while (!has_input)
                {       struct timeval timeout = {0, 100000}; /* 0.1 seconds */
+
+                       /* [Bug #1552726] Only limit the pause if an input hook has been 
+                          defined.  */
+                       struct timeval *timeoutp = NULL;
+                       if (PyOS_InputHook) 
+                               timeoutp = &timeout;
                        FD_SET(fileno(rl_instream), &selectset);
                        /* select resets selectset if no input was available */
                        has_input = select(fileno(rl_instream) + 1, &selectset,
-                                          NULL, NULL, &timeout);
+                                          NULL, NULL, timeoutp);
                        if(PyOS_InputHook) PyOS_InputHook();
                }
 
index fe6f3b6a25fa5fcf7c9a73dec5c4a5891df6c396..d38c660e77059cc1f5fda41f7de5614851737db9 100644 (file)
@@ -298,6 +298,10 @@ initresource(void)
        PyModule_AddIntConstant(m, "RLIMIT_MEMLOCK", RLIMIT_MEMLOCK);
 #endif
 
+#ifdef RLIMIT_SBSIZE
+       PyModule_AddIntConstant(m, "RLIMIT_SBSIZE", RLIMIT_SBSIZE);
+#endif
+
 #ifdef RUSAGE_SELF
        PyModule_AddIntConstant(m, "RUSAGE_SELF", RUSAGE_SELF);
 #endif
index f03b34c057f8689683bba791bc53d9b06dbe704d..c9f0388a302c4cabcfbfb2df83650adc3f09bb00 100644 (file)
@@ -364,19 +364,16 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
 #define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM
 #define sockaddr_l2 sockaddr_l2cap
 #define sockaddr_rc sockaddr_rfcomm
-#define _BT_SOCKADDR_MEMB(s, proto) &((s)->sock_addr)
 #define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb)
 #define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb)
 #elif defined(__NetBSD__)
 #define sockaddr_l2 sockaddr_bt
 #define sockaddr_rc sockaddr_bt
 #define sockaddr_sco sockaddr_bt
-#define _BT_SOCKADDR_MEMB(s, proto) &((s)->sock_addr)
 #define _BT_L2_MEMB(sa, memb) ((sa)->bt_##memb)
 #define _BT_RC_MEMB(sa, memb) ((sa)->bt_##memb)
 #define _BT_SCO_MEMB(sa, memb) ((sa)->bt_##memb)
 #else
-#define _BT_SOCKADDR_MEMB(s, proto) (&((s)->sock_addr).bt_##proto)
 #define _BT_L2_MEMB(sa, memb) ((sa)->l2_##memb)
 #define _BT_RC_MEMB(sa, memb) ((sa)->rc_##memb)
 #define _BT_SCO_MEMB(sa, memb) ((sa)->sco_##memb)
@@ -388,6 +385,8 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
 #define SEGMENT_SIZE (32 * 1024 -1)
 #endif
 
+#define        SAS2SA(x)       ((struct sockaddr *)(x))
+
 /*
  * Constants for getnameinfo()
  */
@@ -1174,7 +1173,7 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto)
 
 static int
 getsockaddrarg(PySocketSockObject *s, PyObject *args,
-              struct sockaddr **addr_ret, int *len_ret)
+              struct sockaddr *addr_ret, int *len_ret)
 {
        switch (s->sock_family) {
 
@@ -1184,9 +1183,10 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                struct sockaddr_un* addr;
                char *path;
                int len;
-               addr = (struct sockaddr_un*)&(s->sock_addr).un;
                if (!PyArg_Parse(args, "t#", &path, &len))
                        return 0;
+
+               addr = (struct sockaddr_un*)addr_ret;
 #ifdef linux
                if (len > 0 && path[0] == 0) {
                        /* Linux abstract namespace extension */
@@ -1209,7 +1209,6 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                }
                addr->sun_family = s->sock_family;
                memcpy(addr->sun_path, path, len);
-               *addr_ret = (struct sockaddr *) addr;
 #if defined(PYOS_OS2)
                *len_ret = sizeof(*addr);
 #else
@@ -1224,7 +1223,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
        {
                struct sockaddr_nl* addr;
                int pid, groups;
-               addr = (struct sockaddr_nl *)&(s->sock_addr).nl;
+               addr = (struct sockaddr_nl *)addr_ret;
                if (!PyTuple_Check(args)) {
                        PyErr_Format(
                                PyExc_TypeError,
@@ -1238,7 +1237,6 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                addr->nl_family = AF_NETLINK;
                addr->nl_pid = pid;
                addr->nl_groups = groups;
-               *addr_ret = (struct sockaddr *) addr;
                *len_ret = sizeof(*addr);
                return 1;
        }
@@ -1249,7 +1247,6 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                struct sockaddr_in* addr;
                char *host;
                int port, result;
-               addr=(struct sockaddr_in*)&(s->sock_addr).in;
                if (!PyTuple_Check(args)) {
                        PyErr_Format(
                                PyExc_TypeError,
@@ -1261,6 +1258,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                if (!PyArg_ParseTuple(args, "eti:getsockaddrarg",
                                      "idna", &host, &port))
                        return 0;
+               addr=(struct sockaddr_in*)addr_ret;
                 result = setipaddr(host, (struct sockaddr *)addr,
                                    sizeof(*addr),  AF_INET);
                 PyMem_Free(host);
@@ -1268,7 +1266,6 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                        return 0;
                addr->sin_family = AF_INET;
                addr->sin_port = htons((short)port);
-               *addr_ret = (struct sockaddr *) addr;
                *len_ret = sizeof *addr;
                return 1;
        }
@@ -1279,7 +1276,6 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                struct sockaddr_in6* addr;
                char *host;
                int port, flowinfo, scope_id, result;
-               addr = (struct sockaddr_in6*)&(s->sock_addr).in6;
                flowinfo = scope_id = 0;
                if (!PyTuple_Check(args)) {
                        PyErr_Format(
@@ -1294,6 +1290,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                                      &scope_id)) {
                        return 0;
                }
+               addr = (struct sockaddr_in6*)addr_ret;
                 result = setipaddr(host, (struct sockaddr *)addr,
                                    sizeof(*addr), AF_INET6);
                 PyMem_Free(host);
@@ -1303,7 +1300,6 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                addr->sin6_port = htons((short)port);
                addr->sin6_flowinfo = flowinfo;
                addr->sin6_scope_id = scope_id;
-               *addr_ret = (struct sockaddr *) addr;
                *len_ret = sizeof *addr;
                return 1;
        }
@@ -1315,9 +1311,10 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                switch (s->sock_proto) {
                case BTPROTO_L2CAP:
                {
-                       struct sockaddr_l2 *addr = (struct sockaddr_l2 *) _BT_SOCKADDR_MEMB(s, l2);
+                       struct sockaddr_l2 *addr;
                        char *straddr;
 
+                       addr = (struct sockaddr_l2 *)addr_ret;
                        _BT_L2_MEMB(addr, family) = AF_BLUETOOTH;
                        if (!PyArg_ParseTuple(args, "si", &straddr,
                                              &_BT_L2_MEMB(addr, psm))) {
@@ -1328,15 +1325,15 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                        if (setbdaddr(straddr, &_BT_L2_MEMB(addr, bdaddr)) < 0)
                                return 0;
 
-                       *addr_ret = (struct sockaddr *) addr;
                        *len_ret = sizeof *addr;
                        return 1;
                }
                case BTPROTO_RFCOMM:
                {
-                       struct sockaddr_rc *addr = (struct sockaddr_rc *) _BT_SOCKADDR_MEMB(s, rc);
+                       struct sockaddr_rc *addr;
                        char *straddr;
 
+                       addr = (struct sockaddr_rc *)addr_ret;
                        _BT_RC_MEMB(addr, family) = AF_BLUETOOTH;
                        if (!PyArg_ParseTuple(args, "si", &straddr,
                                              &_BT_RC_MEMB(addr, channel))) {
@@ -1347,16 +1344,16 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                        if (setbdaddr(straddr, &_BT_RC_MEMB(addr, bdaddr)) < 0)
                                return 0;
 
-                       *addr_ret = (struct sockaddr *) addr;
                        *len_ret = sizeof *addr;
                        return 1;
                }
 #if !defined(__FreeBSD__)
                case BTPROTO_SCO:
                {
-                       struct sockaddr_sco *addr = (struct sockaddr_sco *) _BT_SOCKADDR_MEMB(s, sco);
+                       struct sockaddr_sco *addr;
                        char *straddr;
 
+                       addr = (struct sockaddr_sco *)addr_ret;
                        _BT_SCO_MEMB(addr, family) = AF_BLUETOOTH;
                        straddr = PyString_AsString(args);
                        if (straddr == NULL) {
@@ -1367,7 +1364,6 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                        if (setbdaddr(straddr, &_BT_SCO_MEMB(addr, bdaddr)) < 0)
                                return 0;
 
-                       *addr_ret = (struct sockaddr *) addr;
                        *len_ret = sizeof *addr;
                        return 1;
                }
@@ -1409,22 +1405,21 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                        s->errorhandler();
                        return 0;
                }
-               addr = &(s->sock_addr.ll);
-               addr->sll_family = AF_PACKET;
-               addr->sll_protocol = htons((short)protoNumber);
-               addr->sll_ifindex = ifr.ifr_ifindex;
-               addr->sll_pkttype = pkttype;
-               addr->sll_hatype = hatype;
                if (halen > 8) {
                  PyErr_SetString(PyExc_ValueError,
                                  "Hardware address must be 8 bytes or less");
                  return 0;
                }
+               addr = (struct sockaddr_ll*)addr_ret;
+               addr->sll_family = AF_PACKET;
+               addr->sll_protocol = htons((short)protoNumber);
+               addr->sll_ifindex = ifr.ifr_ifindex;
+               addr->sll_pkttype = pkttype;
+               addr->sll_hatype = hatype;
                if (halen != 0) {
                  memcpy(&addr->sll_addr, haddr, halen);
                }
                addr->sll_halen = halen;
-               *addr_ret = (struct sockaddr *) addr;
                *len_ret = sizeof *addr;
                return 1;
        }
@@ -1551,8 +1546,7 @@ sock_accept(PySocketSockObject *s)
        Py_BEGIN_ALLOW_THREADS
        timeout = internal_select(s, 0);
        if (!timeout)
-               newfd = accept(s->sock_fd, (struct sockaddr *) &addrbuf,
-                              &addrlen);
+               newfd = accept(s->sock_fd, SAS2SA(&addrbuf), &addrlen);
        Py_END_ALLOW_THREADS
 
        if (timeout == 1) {
@@ -1578,7 +1572,7 @@ sock_accept(PySocketSockObject *s)
                SOCKETCLOSE(newfd);
                goto finally;
        }
-       addr = makesockaddr(s->sock_fd, (struct sockaddr *) &addrbuf,
+       addr = makesockaddr(s->sock_fd, SAS2SA(&addrbuf),
                            addrlen, s->sock_proto);
        if (addr == NULL)
                goto finally;
@@ -1819,14 +1813,14 @@ string of that length; otherwise it is an integer.");
 static PyObject *
 sock_bind(PySocketSockObject *s, PyObject *addro)
 {
-       struct sockaddr *addr;
+       sock_addr_t addrbuf;
        int addrlen;
        int res;
 
-       if (!getsockaddrarg(s, addro, &addr, &addrlen))
+       if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen))
                return NULL;
        Py_BEGIN_ALLOW_THREADS
-       res = bind(s->sock_fd, addr, addrlen);
+       res = bind(s->sock_fd, SAS2SA(&addrbuf), addrlen);
        Py_END_ALLOW_THREADS
        if (res < 0)
                return s->errorhandler();
@@ -1952,16 +1946,16 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen,
 static PyObject *
 sock_connect(PySocketSockObject *s, PyObject *addro)
 {
-       struct sockaddr *addr;
+       sock_addr_t addrbuf;
        int addrlen;
        int res;
        int timeout;
 
-       if (!getsockaddrarg(s, addro, &addr, &addrlen))
+       if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen))
                return NULL;
 
        Py_BEGIN_ALLOW_THREADS
-       res = internal_connect(s, addr, addrlen, &timeout);
+       res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout);
        Py_END_ALLOW_THREADS
 
        if (timeout == 1) {
@@ -1986,16 +1980,16 @@ is a pair (host, port).");
 static PyObject *
 sock_connect_ex(PySocketSockObject *s, PyObject *addro)
 {
-       struct sockaddr *addr;
+       sock_addr_t addrbuf;
        int addrlen;
        int res;
        int timeout;
 
-       if (!getsockaddrarg(s, addro, &addr, &addrlen))
+       if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen))
                return NULL;
 
        Py_BEGIN_ALLOW_THREADS
-       res = internal_connect(s, addr, addrlen, &timeout);
+       res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout);
        Py_END_ALLOW_THREADS
 
        /* Signals are not errors (though they may raise exceptions).  Adapted
@@ -2075,11 +2069,11 @@ sock_getsockname(PySocketSockObject *s)
                return NULL;
        memset(&addrbuf, 0, addrlen);
        Py_BEGIN_ALLOW_THREADS
-       res = getsockname(s->sock_fd, (struct sockaddr *) &addrbuf, &addrlen);
+       res = getsockname(s->sock_fd, SAS2SA(&addrbuf), &addrlen);
        Py_END_ALLOW_THREADS
        if (res < 0)
                return s->errorhandler();
-       return makesockaddr(s->sock_fd, (struct sockaddr *) &addrbuf, addrlen,
+       return makesockaddr(s->sock_fd, SAS2SA(&addrbuf), addrlen,
                            s->sock_proto);
 }
 
@@ -2104,11 +2098,11 @@ sock_getpeername(PySocketSockObject *s)
                return NULL;
        memset(&addrbuf, 0, addrlen);
        Py_BEGIN_ALLOW_THREADS
-       res = getpeername(s->sock_fd, (struct sockaddr *) &addrbuf, &addrlen);
+       res = getpeername(s->sock_fd, SAS2SA(&addrbuf), &addrlen);
        Py_END_ALLOW_THREADS
        if (res < 0)
                return s->errorhandler();
-       return makesockaddr(s->sock_fd, (struct sockaddr *) &addrbuf, addrlen,
+       return makesockaddr(s->sock_fd, SAS2SA(&addrbuf), addrlen,
                            s->sock_proto);
 }
 
@@ -2443,14 +2437,14 @@ sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, int len, int flags,
 #ifndef MS_WINDOWS
 #if defined(PYOS_OS2) && !defined(PYCC_GCC)
                n = recvfrom(s->sock_fd, cbuf, len, flags,
-                            (struct sockaddr *) &addrbuf, &addrlen);
+                            SAS2SA(&addrbuf), &addrlen);
 #else
                n = recvfrom(s->sock_fd, cbuf, len, flags,
                             (void *) &addrbuf, &addrlen);
 #endif
 #else
                n = recvfrom(s->sock_fd, cbuf, len, flags,
-                            (struct sockaddr *) &addrbuf, &addrlen);
+                            SAS2SA(&addrbuf), &addrlen);
 #endif
        }
        Py_END_ALLOW_THREADS
@@ -2464,7 +2458,7 @@ sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, int len, int flags,
                 return -1;
        }
 
-       if (!(*addr = makesockaddr(s->sock_fd, (struct sockaddr *) &addrbuf,
+       if (!(*addr = makesockaddr(s->sock_fd, SAS2SA(&addrbuf),
                                   addrlen, s->sock_proto)))
                return -1;
 
@@ -2664,7 +2658,7 @@ sock_sendto(PySocketSockObject *s, PyObject *args)
 {
        PyObject *addro;
        char *buf;
-       struct sockaddr *addr;
+       sock_addr_t addrbuf;
        int addrlen, len, n = -1, flags, timeout;
 
        flags = 0;
@@ -2675,16 +2669,16 @@ sock_sendto(PySocketSockObject *s, PyObject *args)
                        return NULL;
        }
 
-       if (!getsockaddrarg(s, addro, &addr, &addrlen))
-               return NULL;
-
        if (!IS_SELECTABLE(s))
                return select_error();
 
+       if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen))
+               return NULL;
+
        Py_BEGIN_ALLOW_THREADS
        timeout = internal_select(s, 1);
        if (!timeout)
-               n = sendto(s->sock_fd, buf, len, flags, addr, addrlen);
+               n = sendto(s->sock_fd, buf, len, flags, SAS2SA(&addrbuf), addrlen);
        Py_END_ALLOW_THREADS
 
        if (timeout == 1) {
@@ -2973,10 +2967,9 @@ socket_gethostbyname(PyObject *self, PyObject *args)
 
        if (!PyArg_ParseTuple(args, "s:gethostbyname", &name))
                return NULL;
-       if (setipaddr(name, (struct sockaddr *)&addrbuf,  sizeof(addrbuf), AF_INET) < 0)
+       if (setipaddr(name, SAS2SA(&addrbuf),  sizeof(addrbuf), AF_INET) < 0)
                return NULL;
-       return makeipaddr((struct sockaddr *)&addrbuf,
-               sizeof(struct sockaddr_in));
+       return makeipaddr(SAS2SA(&addrbuf), sizeof(struct sockaddr_in));
 }
 
 PyDoc_STRVAR(gethostbyname_doc,
index ae38c86cbc698a344e3aa0a0010c94972b54d2d6..84f2422f418283c57d5a82e473431982705e1f08 100644 (file)
@@ -114,7 +114,6 @@ typedef struct {
        int sock_family;        /* Address family, e.g., AF_INET */
        int sock_type;          /* Socket type, e.g., SOCK_STREAM */
        int sock_proto;         /* Protocol type, usually 0 */
-       sock_addr_t sock_addr;  /* Socket address */
        PyObject *(*errorhandler)(void); /* Error handler; checks
                                            errno, returns NULL and
                                            sets a Python exception */
index 361429668a6c9451eb680915c7eb68a64296cfaa..baf6673af149592a888cf90ba3703c74a3be4512 100644 (file)
@@ -25,6 +25,7 @@ typedef struct {
 static void
 lock_dealloc(lockobject *self)
 {
+       assert(self->lock_lock);
        /* Unlock the lock so it's safe to free it */
        PyThread_acquire_lock(self->lock_lock, 0);
        PyThread_release_lock(self->lock_lock);
index a11a0b70b7cbb87474456865f0b4a279a3b66969..a30d30c8eb7291e26d95f06ab31ec1c67540727f 100644 (file)
@@ -75,7 +75,7 @@ static PyMemberDef DB_members[] = {
         {NULL}
 };
 
-// forward declaration
+/* forward declaration */
 static PyTypeObject UCD_Type;
 
 static PyObject*
index 881076246efb8e014f444e9f8d349394690c930c..03883be9672b059d14afafe6e694215d852e648e 100644 (file)
@@ -1524,20 +1524,18 @@ _PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation)
                if (cmp > 0) {
                        switch (operation) {
                        case PY_ITERSEARCH_COUNT:
-                               ++n;
-                               if (n <= 0) {
-                                       /* XXX(nnorwitz): int means ssize_t */
+                               if (n == PY_SSIZE_T_MAX) {
                                        PyErr_SetString(PyExc_OverflowError,
-                                               "count exceeds C int size");
+                                              "count exceeds C integer size");
                                        goto Fail;
                                }
+                               ++n;
                                break;
 
                        case PY_ITERSEARCH_INDEX:
                                if (wrapped) {
-                                       /* XXX(nnorwitz): int means ssize_t */
                                        PyErr_SetString(PyExc_OverflowError,
-                                               "index exceeds C int size");
+                                              "index exceeds C integer size");
                                        goto Fail;
                                }
                                goto Done;
@@ -1552,9 +1550,9 @@ _PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation)
                }
 
                if (operation == PY_ITERSEARCH_INDEX) {
-                       ++n;
-                       if (n <= 0)
+                       if (n == PY_SSIZE_T_MAX)
                                wrapped = 1;
+                       ++n;
                }
        }
 
index 11079776f3629a7a91c23d490217c2cc6f21c15a..85826a9ff48c8b66143fb23aa34514937b17841d 100644 (file)
@@ -152,6 +152,8 @@ method_new(PyTypeObject* type, PyObject* args, PyObject *kw)
        PyObject *self;
        PyObject *classObj = NULL;
 
+       if (!_PyArg_NoKeywords("instancemethod", kw))
+               return NULL;
        if (!PyArg_UnpackTuple(args, "method", 2, 3,
                              &func, &self, &classObj))
                return NULL;
index 64585a41d6384bdd3446c8e7fe566d669cf3d071..09aba61c90289a2f29754d3281b019dbb7d7cbef 100644 (file)
 typedef PyDictEntry dictentry;
 typedef PyDictObject dictobject;
 
+/* Set a key error with the specified argument, wrapping it in a
+ * tuple automatically so that tuple keys are not unpacked as the
+ * exception arguments. */
+static void
+set_key_error(PyObject *arg)
+{
+       PyObject *tup;
+       tup = PyTuple_Pack(1, arg);
+       if (!tup)
+               return; /* caller will expect error to be set anyway */
+       PyErr_SetObject(PyExc_KeyError, tup);
+       Py_DECREF(tup);
+}
+
 /* Define this out if you don't want conversion statistics on exit. */
 #undef SHOW_CONVERSION_COUNTS
 
@@ -307,6 +321,8 @@ lookdict(dictobject *mp, PyObject *key, register long hash)
                else if (ep->me_key == dummy && freeslot == NULL)
                        freeslot = ep;
        }
+       assert(0);      /* NOT REACHED */
+       return 0;
 }
 
 /*
@@ -366,6 +382,8 @@ lookdict_string(dictobject *mp, PyObject *key, register long hash)
                if (ep->me_key == dummy && freeslot == NULL)
                        freeslot = ep;
        }
+       assert(0);      /* NOT REACHED */
+       return 0;
 }
 
 /*
@@ -691,7 +709,7 @@ PyDict_DelItem(PyObject *op, PyObject *key)
        if (ep == NULL)
                return -1;
        if (ep->me_value == NULL) {
-               PyErr_SetObject(PyExc_KeyError, key);
+               set_key_error(key);
                return -1;
        }
        old_key = ep->me_key;
@@ -1000,7 +1018,7 @@ dict_subscript(dictobject *mp, register PyObject *key)
                                return PyObject_CallFunctionObjArgs(missing,
                                        (PyObject *)mp, key, NULL);
                }
-               PyErr_SetObject(PyExc_KeyError, key);
+               set_key_error(key);
                return NULL;
        }
        else
@@ -1644,7 +1662,7 @@ dict_pop(dictobject *mp, PyObject *args)
                        Py_INCREF(deflt);
                        return deflt;
                }
-               PyErr_SetObject(PyExc_KeyError, key);
+               set_key_error(key);
                return NULL;
        }
        old_key = ep->me_key;
index c3ead698e81597f25e5d60dc242680a705a4aff1..0cd819c5a1559396d9aa43ce64615d22578fffbc 100644 (file)
@@ -81,6 +81,7 @@ BaseException_clear(PyBaseExceptionObject *self)
 static void
 BaseException_dealloc(PyBaseExceptionObject *self)
 {
+    _PyObject_GC_UNTRACK(self);
     BaseException_clear(self);
     self->ob_type->tp_free((PyObject *)self);
 }
@@ -174,27 +175,10 @@ BaseException_setstate(PyObject *self, PyObject *state)
     Py_RETURN_NONE;
 }
 
-#ifdef Py_USING_UNICODE
-/* while this method generates fairly uninspired output, it a least
- * guarantees that we can display exceptions that have unicode attributes
- */
-static PyObject *
-BaseException_unicode(PyBaseExceptionObject *self)
-{
-    if (PyTuple_GET_SIZE(self->args) == 0)
-        return PyUnicode_FromUnicode(NULL, 0);
-    if (PyTuple_GET_SIZE(self->args) == 1)
-        return PyObject_Unicode(PyTuple_GET_ITEM(self->args, 0));
-    return PyObject_Unicode(self->args);
-}
-#endif /* Py_USING_UNICODE */
 
 static PyMethodDef BaseException_methods[] = {
    {"__reduce__", (PyCFunction)BaseException_reduce, METH_NOARGS },
    {"__setstate__", (PyCFunction)BaseException_setstate, METH_O },
-#ifdef Py_USING_UNICODE
-   {"__unicode__", (PyCFunction)BaseException_unicode, METH_NOARGS },
-#endif
    {NULL, NULL, 0, NULL},
 };
 
@@ -206,12 +190,19 @@ BaseException_getitem(PyBaseExceptionObject *self, Py_ssize_t index)
     return PySequence_GetItem(self->args, index);
 }
 
+static PyObject *
+BaseException_getslice(PyBaseExceptionObject *self,
+                       Py_ssize_t start, Py_ssize_t stop)
+{
+    return PySequence_GetSlice(self->args, start, stop);
+}
+
 static PySequenceMethods BaseException_as_sequence = {
     0,                      /* sq_length; */
     0,                      /* sq_concat; */
     0,                      /* sq_repeat; */
     (ssizeargfunc)BaseException_getitem,  /* sq_item; */
-    0,                      /* sq_slice; */
+    (ssizessizeargfunc)BaseException_getslice,  /* sq_slice; */
     0,                      /* sq_ass_item; */
     0,                      /* sq_ass_slice; */
     0,                      /* sq_contains; */
@@ -456,6 +447,7 @@ SystemExit_clear(PySystemExitObject *self)
 static void
 SystemExit_dealloc(PySystemExitObject *self)
 {
+    _PyObject_GC_UNTRACK(self);
     SystemExit_clear(self);
     self->ob_type->tp_free((PyObject *)self);
 }
@@ -518,7 +510,7 @@ EnvironmentError_init(PyEnvironmentErrorObject *self, PyObject *args,
     if (BaseException_init((PyBaseExceptionObject *)self, args, kwds) == -1)
         return -1;
 
-    if (PyTuple_GET_SIZE(args) <= 1) {
+    if (PyTuple_GET_SIZE(args) <= 1 || PyTuple_GET_SIZE(args) > 3) {
         return 0;
     }
 
@@ -562,6 +554,7 @@ EnvironmentError_clear(PyEnvironmentErrorObject *self)
 static void
 EnvironmentError_dealloc(PyEnvironmentErrorObject *self)
 {
+    _PyObject_GC_UNTRACK(self);
     EnvironmentError_clear(self);
     self->ob_type->tp_free((PyObject *)self);
 }
@@ -760,6 +753,7 @@ WindowsError_clear(PyWindowsErrorObject *self)
 static void
 WindowsError_dealloc(PyWindowsErrorObject *self)
 {
+    _PyObject_GC_UNTRACK(self);
     WindowsError_clear(self);
     self->ob_type->tp_free((PyObject *)self);
 }
@@ -834,9 +828,9 @@ WindowsError_str(PyWindowsErrorObject *self)
             return NULL;
         }
 
-        if (self->myerrno) {
-            Py_INCREF(self->myerrno);
-            PyTuple_SET_ITEM(tuple, 0, self->myerrno);
+        if (self->winerror) {
+            Py_INCREF(self->winerror);
+            PyTuple_SET_ITEM(tuple, 0, self->winerror);
         }
         else {
             Py_INCREF(Py_None);
@@ -858,7 +852,7 @@ WindowsError_str(PyWindowsErrorObject *self)
         Py_DECREF(fmt);
         Py_DECREF(tuple);
     }
-    else if (self->myerrno && self->strerror) {
+    else if (self->winerror && self->strerror) {
         PyObject *fmt;
         PyObject *tuple;
 
@@ -872,9 +866,9 @@ WindowsError_str(PyWindowsErrorObject *self)
             return NULL;
         }
 
-        if (self->myerrno) {
-            Py_INCREF(self->myerrno);
-            PyTuple_SET_ITEM(tuple, 0, self->myerrno);
+        if (self->winerror) {
+            Py_INCREF(self->winerror);
+            PyTuple_SET_ITEM(tuple, 0, self->winerror);
         }
         else {
             Py_INCREF(Py_None);
@@ -1035,6 +1029,7 @@ SyntaxError_clear(PySyntaxErrorObject *self)
 static void
 SyntaxError_dealloc(PySyntaxErrorObject *self)
 {
+    _PyObject_GC_UNTRACK(self);
     SyntaxError_clear(self);
     self->ob_type->tp_free((PyObject *)self);
 }
@@ -1551,6 +1546,7 @@ UnicodeError_clear(PyUnicodeErrorObject *self)
 static void
 UnicodeError_dealloc(PyUnicodeErrorObject *self)
 {
+    _PyObject_GC_UNTRACK(self);
     UnicodeError_clear(self);
     self->ob_type->tp_free((PyObject *)self);
 }
@@ -1637,7 +1633,7 @@ UnicodeEncodeError_str(PyObject *self)
 static PyTypeObject _PyExc_UnicodeEncodeError = {
     PyObject_HEAD_INIT(NULL)
     0,
-    "UnicodeEncodeError",
+    EXC_MODULE_NAME "UnicodeEncodeError",
     sizeof(PyUnicodeErrorObject), 0,
     (destructor)UnicodeError_dealloc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     (reprfunc)UnicodeEncodeError_str, 0, 0, 0,
@@ -1812,7 +1808,7 @@ static PyTypeObject _PyExc_UnicodeTranslateError = {
     (destructor)UnicodeError_dealloc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     (reprfunc)UnicodeTranslateError_str, 0, 0, 0,
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
-    PyDoc_STR("Unicode decoding error."), (traverseproc)UnicodeError_traverse,
+    PyDoc_STR("Unicode translation error."), (traverseproc)UnicodeError_traverse,
     (inquiry)UnicodeError_clear, 0, 0, 0, 0, 0, UnicodeError_members,
     0, &_PyExc_UnicodeError, 0, 0, 0, offsetof(PyUnicodeErrorObject, dict),
     (initproc)UnicodeTranslateError_init, 0, BaseException_new,
index fb8a542d44296900d6449b9642f237f43b592732..f2aeb9d6044a7846c577b2a97cd4f5e6921544b6 100644 (file)
@@ -540,7 +540,7 @@ file_seek(PyFileObject *f, PyObject *args)
        int whence;
        int ret;
        Py_off_t offset;
-       PyObject *offobj;
+       PyObject *offobj, *off_index;
 
        if (f->f_fp == NULL)
                return err_closed();
@@ -548,12 +548,25 @@ file_seek(PyFileObject *f, PyObject *args)
        whence = 0;
        if (!PyArg_ParseTuple(args, "O|i:seek", &offobj, &whence))
                return NULL;
+       off_index = PyNumber_Index(offobj);
+       if (!off_index) {
+               if (!PyFloat_Check(offobj))
+                       return NULL;
+               /* Deprecated in 2.6 */
+               PyErr_Clear();
+               if (PyErr_Warn(PyExc_DeprecationWarning,
+                              "integer argument expected, got float"))
+                       return NULL;
+               off_index = offobj;
+               Py_INCREF(offobj);
+       }
 #if !defined(HAVE_LARGEFILE_SUPPORT)
-       offset = PyInt_AsLong(offobj);
+       offset = PyInt_AsLong(off_index);
 #else
-       offset = PyLong_Check(offobj) ?
-               PyLong_AsLongLong(offobj) : PyInt_AsLong(offobj);
+       offset = PyLong_Check(off_index) ?
+               PyLong_AsLongLong(off_index) : PyInt_AsLong(off_index);
 #endif
+       Py_DECREF(off_index);
        if (PyErr_Occurred())
                return NULL;
 
@@ -927,7 +940,7 @@ file_readinto(PyFileObject *f, PyObject *args)
                ndone += nnow;
                ntodo -= nnow;
        }
-       return PyInt_FromLong((long)ndone);
+       return PyInt_FromSsize_t(ndone);
 }
 
 /**************************************************************************
@@ -1006,6 +1019,7 @@ getline_via_fgets(FILE *fp)
        size_t nfree;   /* # of free buffer slots; pvend-pvfree */
        size_t total_v_size;  /* total # of slots in buffer */
        size_t increment;       /* amount to increment the buffer */
+       size_t prev_v_size;
 
        /* Optimize for normal case:  avoid _PyString_Resize if at all
         * possible via first reading into stack buffer "buf".
@@ -1120,8 +1134,11 @@ getline_via_fgets(FILE *fp)
                /* expand buffer and try again */
                assert(*(pvend-1) == '\0');
                increment = total_v_size >> 2;  /* mild exponential growth */
+               prev_v_size = total_v_size;
                total_v_size += increment;
-               if (total_v_size > PY_SSIZE_T_MAX) {
+               /* check for overflow */
+               if (total_v_size <= prev_v_size ||
+                   total_v_size > PY_SSIZE_T_MAX) {
                        PyErr_SetString(PyExc_OverflowError,
                            "line is longer than a Python string can hold");
                        Py_DECREF(v);
@@ -1130,7 +1147,7 @@ getline_via_fgets(FILE *fp)
                if (_PyString_Resize(&v, (int)total_v_size) < 0)
                        return NULL;
                /* overwrite the trailing null byte */
-               pvfree = BUF(v) + (total_v_size - increment - 1);
+               pvfree = BUF(v) + (prev_v_size - 1);
        }
        if (BUF(v) + total_v_size != p)
                _PyString_Resize(&v, p - BUF(v));
@@ -2014,7 +2031,7 @@ file_init(PyObject *self, PyObject *args, PyObject *kwds)
                 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|si:file", 
                                                  kwlist, &o_name, &mode, 
                                                  &bufsize))
-                        return -1;
+                        goto Error;
 
                if (fill_file_fields(foself, NULL, o_name, mode,
                                     fclose) == NULL)
index b420c128bde3389545b11a4bfdb3f68a2127e3b1..0b746dee8d4dc0f859732e0bc0aae93a0bf550b5 100644 (file)
@@ -557,6 +557,17 @@ int_mul(PyObject *v, PyObject *w)
        }
 }
 
+/* Integer overflow checking for unary negation: on a 2's-complement
+ * box, -x overflows iff x is the most negative long.  In this case we
+ * get -x == x.  However, -x is undefined (by C) if x /is/ the most
+ * negative long (it's a signed overflow case), and some compilers care.
+ * So we cast x to unsigned long first.  However, then other compilers
+ * warn about applying unary minus to an unsigned operand.  Hence the
+ * weird "0-".
+ */
+#define UNARY_NEG_WOULD_OVERFLOW(x)    \
+       ((x) < 0 && (unsigned long)(x) == 0-(unsigned long)(x))
+
 /* Return type of i_divmod */
 enum divmod_result {
        DIVMOD_OK,              /* Correct result */
@@ -576,7 +587,7 @@ i_divmod(register long x, register long y,
                return DIVMOD_ERROR;
        }
        /* (-sys.maxint-1)/-1 is the only overflow case. */
-       if (y == -1 && x < 0 && x == -x)
+       if (y == -1 && UNARY_NEG_WOULD_OVERFLOW(x))
                return DIVMOD_OVERFLOW;
        xdivy = x / y;
        xmody = x - xdivy * y;
@@ -744,10 +755,10 @@ int_pow(PyIntObject *v, PyIntObject *w, PyIntObject *z)
 static PyObject *
 int_neg(PyIntObject *v)
 {
-       register long a, x;
+       register long a;
        a = v->ob_ival;
-       x = -a;
-       if (a < 0 && x < 0) {
+        /* check for overflow */
+       if (UNARY_NEG_WOULD_OVERFLOW(a)) {
                PyObject *o = PyLong_FromLong(a);
                if (o != NULL) {
                        PyObject *result = PyNumber_Negative(o);
@@ -756,7 +767,7 @@ int_neg(PyIntObject *v)
                }
                return NULL;
        }
-       return PyInt_FromLong(x);
+       return PyInt_FromLong(-a);
 }
 
 static PyObject *
@@ -955,8 +966,25 @@ int_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
                return PyInt_FromLong(0L);
        if (base == -909)
                return PyNumber_Int(x);
-       if (PyString_Check(x))
-               return PyInt_FromString(PyString_AS_STRING(x), NULL, base);
+       if (PyString_Check(x)) {
+               /* Since PyInt_FromString doesn't have a length parameter,
+                * check here for possible NULs in the string. */
+               char *string = PyString_AS_STRING(x);
+               if (strlen(string) != PyString_Size(x)) {
+                       /* create a repr() of the input string,
+                        * just like PyInt_FromString does */
+                       PyObject *srepr;
+                       srepr = PyObject_Repr(x);
+                       if (srepr == NULL)
+                               return NULL;
+                       PyErr_Format(PyExc_ValueError,
+                            "invalid literal for int() with base %d: %s",
+                            base, PyString_AS_STRING(srepr));
+                       Py_DECREF(srepr);
+                       return NULL;
+               }
+               return PyInt_FromString(string, NULL, base);
+       }
 #ifdef Py_USING_UNICODE
        if (PyUnicode_Check(x))
                return PyInt_FromUnicode(PyUnicode_AS_UNICODE(x),
index 9a11680fda6d0f2fc06dcd6a9260023ab175cbaf..4c9c4c3cd1ed03170cc7f6731fdefd3c5c7d7aee 100644 (file)
@@ -863,17 +863,12 @@ static PyObject *
 listpop(PyListObject *self, PyObject *args)
 {
        Py_ssize_t i = -1;
-       PyObject *v, *arg = NULL;
+       PyObject *v;
        int status;
 
-       if (!PyArg_UnpackTuple(args, "pop", 0, 1, &arg))
+       if (!PyArg_ParseTuple(args, "|n:pop", &i))
                return NULL;
-       if (arg != NULL) {
-               if (PyInt_Check(arg))
-                       i = PyInt_AS_LONG((PyIntObject*) arg);
-               else if (!PyArg_ParseTuple(args, "|n:pop", &i))
-                       return NULL;
-       }
+
        if (self->ob_size == 0) {
                /* Special-case most common failure cause */
                PyErr_SetString(PyExc_IndexError, "pop from empty list");
@@ -951,9 +946,10 @@ islt(PyObject *x, PyObject *y, PyObject *compare)
        if (res == NULL)
                return -1;
        if (!PyInt_Check(res)) {
+               PyErr_Format(PyExc_TypeError,
+                            "comparison function must return int, not %.200s",
+                            res->ob_type->tp_name);
                Py_DECREF(res);
-               PyErr_SetString(PyExc_TypeError,
-                               "comparison function must return int");
                return -1;
        }
        i = PyInt_AsLong(res);
@@ -2507,8 +2503,9 @@ list_subscript(PyListObject* self, PyObject* item)
                }
        }
        else {
-               PyErr_SetString(PyExc_TypeError,
-                               "list indices must be integers");
+               PyErr_Format(PyExc_TypeError,
+                            "list indices must be integers, not %.200s",
+                            item->ob_type->tp_name);
                return NULL;
        }
 }
@@ -2624,6 +2621,11 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
 
                        garbage = (PyObject**)
                                PyMem_MALLOC(slicelength*sizeof(PyObject*));
+                       if (!garbage) {
+                               Py_DECREF(seq);
+                               PyErr_NoMemory();
+                               return -1;
+                       }
 
                        selfitems = self->ob_item;
                        seqitems = PySequence_Fast_ITEMS(seq);
@@ -2646,8 +2648,9 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
                }
        }
        else {
-               PyErr_SetString(PyExc_TypeError,
-                               "list indices must be integers");
+               PyErr_Format(PyExc_TypeError,
+                            "list indices must be integers, not %.200s",
+                            item->ob_type->tp_name);
                return -1;
        }
 }
index 566e6a7547cd98a3eada9a0de87dda2da1e585e1..f68656bb5e9e1e1168728ad2b3af6823a50e31aa 100644 (file)
@@ -191,6 +191,18 @@ PyLong_FromDouble(double dval)
        return (PyObject *)v;
 }
 
+/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
+ * anything about what happens when a signed integer operation overflows,
+ * and some compilers think they're doing you a favor by being "clever"
+ * then.  The bit pattern for the largest postive signed long is
+ * (unsigned long)LONG_MAX, and for the smallest negative signed long
+ * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
+ * However, some other compilers warn about applying unary minus to an
+ * unsigned operand.  Hence the weird "0-".
+ */
+#define PY_ABS_LONG_MIN                (0-(unsigned long)LONG_MIN)
+#define PY_ABS_SSIZE_T_MIN     (0-(size_t)PY_SSIZE_T_MIN)
+
 /* Get a C long int from a long int object.
    Returns -1 and sets an error condition if overflow occurs. */
 
@@ -223,14 +235,16 @@ PyLong_AsLong(PyObject *vv)
                if ((x >> SHIFT) != prev)
                        goto overflow;
        }
-       /* Haven't lost any bits, but if the sign bit is set we're in
-        * trouble *unless* this is the min negative number.  So,
-        * trouble iff sign bit set && (positive || some bit set other
-        * than the sign bit).
-        */
-       if ((long)x < 0 && (sign > 0 || (x << 1) != 0))
-               goto overflow;
-       return (long)x * sign;
+       /* Haven't lost any bits, but casting to long requires extra care
+        * (see comment above).
+         */
+       if (x <= (unsigned long)LONG_MAX) {
+               return (long)x * sign;
+       }
+       else if (sign < 0 && x == PY_ABS_LONG_MIN) {
+               return LONG_MIN;
+       }
+       /* else overflow */
 
  overflow:
        PyErr_SetString(PyExc_OverflowError,
@@ -266,14 +280,16 @@ _PyLong_AsSsize_t(PyObject *vv) {
                if ((x >> SHIFT) != prev)
                        goto overflow;
        }
-       /* Haven't lost any bits, but if the sign bit is set we're in
-        * trouble *unless* this is the min negative number.  So,
-        * trouble iff sign bit set && (positive || some bit set other
-        * than the sign bit).
+       /* Haven't lost any bits, but casting to a signed type requires
+        * extra care (see comment above).
         */
-       if ((Py_ssize_t)x < 0 && (sign > 0 || (x << 1) != 0))
-               goto overflow;
-       return (Py_ssize_t)x * sign;
+       if (x <= (size_t)PY_SSIZE_T_MAX) {
+               return (Py_ssize_t)x * sign;
+       }
+       else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
+               return PY_SSIZE_T_MIN;
+       }
+       /* else overflow */
 
  overflow:
        PyErr_SetString(PyExc_OverflowError,
@@ -1165,7 +1181,7 @@ long_format(PyObject *aa, int base)
 {
        register PyLongObject *a = (PyLongObject *)aa;
        PyStringObject *str;
-       Py_ssize_t i;
+       Py_ssize_t i, j, sz;
        Py_ssize_t size_a;
        char *p;
        int bits;
@@ -1185,11 +1201,18 @@ long_format(PyObject *aa, int base)
                ++bits;
                i >>= 1;
        }
-       i = 5 + (size_a*SHIFT + bits-1) / bits;
-       str = (PyStringObject *) PyString_FromStringAndSize((char *)0, i);
+       i = 5;
+       j = size_a*SHIFT + bits-1;
+       sz = i + j / bits;
+       if (j / SHIFT < size_a || sz < i) {
+               PyErr_SetString(PyExc_OverflowError,
+                               "long is too large to format");
+               return NULL;
+       }
+       str = (PyStringObject *) PyString_FromStringAndSize((char *)0, sz);
        if (str == NULL)
                return NULL;
-       p = PyString_AS_STRING(str) + i;
+       p = PyString_AS_STRING(str) + sz;
        *p = '\0';
        if (a->ob_size < 0)
                sign = '-';
@@ -1301,7 +1324,7 @@ long_format(PyObject *aa, int base)
                } while ((*q++ = *p++) != '\0');
                q--;
                _PyString_Resize((PyObject **)&str,
-                                (int) (q - PyString_AS_STRING(str)));
+                                (Py_ssize_t) (q - PyString_AS_STRING(str)));
        }
        return (PyObject *)str;
 }
@@ -1359,14 +1382,14 @@ long_from_binary_base(char **str, int base)
        while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
                ++p;
        *str = p;
-       n = (p - start) * bits_per_char;
-       if (n / bits_per_char != p - start) {
+       /* n <- # of Python digits needed, = ceiling(n/SHIFT). */
+       n = (p - start) * bits_per_char + SHIFT - 1;
+       if (n / bits_per_char < p - start) {
                PyErr_SetString(PyExc_ValueError,
                                "long string too large to convert");
                return NULL;
        }
-       /* n <- # of Python digits needed, = ceiling(n/SHIFT). */
-       n = (n + SHIFT - 1) / SHIFT;
+       n = n / SHIFT;
        z = _PyLong_New(n);
        if (z == NULL)
                return NULL;
index 0ca8f2bcaf20498c07c849d12b70c4269bd33113..840570e06cdd92be929a0221e5d1dba874c0928a 100644 (file)
@@ -691,7 +691,8 @@ extremely desirable that it be this fast.
 
 #undef Py_ADDRESS_IN_RANGE
 
-#if defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)
+#if defined(__GNUC__) && ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) || \
+                         (__GNUC__ >= 4))
 #define Py_NO_INLINE __attribute__((__noinline__))
 #else
 #define Py_NO_INLINE
index d489711270d40dd891ae1708968d83a62089659d..0af1f154fefcbd50bf4663474f898a98437177fb 100644 (file)
 #include "Python.h"
 #include "structmember.h"
 
+/* Set a key error with the specified argument, wrapping it in a
+ * tuple automatically so that tuple keys are not unpacked as the
+ * exception arguments. */
+static void
+set_key_error(PyObject *arg)
+{
+       PyObject *tup;
+       tup = PyTuple_Pack(1, arg);
+       if (!tup)
+               return; /* caller will expect error to be set anyway */
+       PyErr_SetObject(PyExc_KeyError, tup);
+       Py_DECREF(tup);
+}
+
 /* This must be >= 1. */
 #define PERTURB_SHIFT 5
 
@@ -179,11 +193,13 @@ set_lookkey_string(PySetObject *so, PyObject *key, register long hash)
                if (entry->key == dummy && freeslot == NULL)
                        freeslot = entry;
        }
+       assert(0);      /* NOT REACHED */
+       return 0;
 }
 
 /*
 Internal routine to insert a new key into the table.
-Used both by the internal resize routine and by the public insert routine.
+Used by the public insert routine.
 Eats a reference to key.
 */
 static int
@@ -215,6 +231,35 @@ set_insert_key(register PySetObject *so, PyObject *key, long hash)
        return 0;
 }
 
+/*
+Internal routine used by set_table_resize() to insert an item which is
+known to be absent from the set.  This routine also assumes that
+the set contains no deleted entries.  Besides the performance benefit,
+using set_insert_clean() in set_table_resize() is dangerous (SF bug #1456209).
+Note that no refcounts are changed by this routine; if needed, the caller
+is responsible for incref'ing `key`.
+*/
+static void
+set_insert_clean(register PySetObject *so, PyObject *key, long hash)
+{
+       register size_t i;
+       register size_t perturb;
+       register size_t mask = (size_t)so->mask;
+       setentry *table = so->table;
+       register setentry *entry;
+
+       i = hash & mask;
+       entry = &table[i];
+       for (perturb = hash; entry->key != NULL; perturb >>= PERTURB_SHIFT) {
+               i = (i << 2) + i + perturb + 1;
+               entry = &table[i & mask];
+       }
+       so->fill++;
+       entry->key = key;
+       entry->hash = hash;
+       so->used++;
+}
+
 /*
 Restructure the table by allocating a new table and reinserting all
 keys again.  When entries have been deleted, the new table may
@@ -296,11 +341,7 @@ set_table_resize(PySetObject *so, Py_ssize_t minused)
                } else {
                        /* ACTIVE */
                        --i;
-                       if(set_insert_key(so, entry->key, entry->hash) == -1) {
-                               if (is_oldtable_malloced)
-                                       PyMem_DEL(oldtable);
-                               return -1;
-                       }
+                       set_insert_clean(so, entry->key, entry->hash);
                }
        }
 
@@ -319,8 +360,10 @@ set_add_entry(register PySetObject *so, setentry *entry)
        assert(so->fill <= so->mask);  /* at least one empty slot */
        n_used = so->used;
        Py_INCREF(entry->key);
-       if (set_insert_key(so, entry->key, entry->hash) == -1)
+       if (set_insert_key(so, entry->key, entry->hash) == -1) {
+               Py_DECREF(entry->key);
                return -1;
+       }
        if (!(so->used > n_used && so->fill*3 >= (so->mask+1)*2))
                return 0;
        return set_table_resize(so, so->used>50000 ? so->used*2 : so->used*4);
@@ -1155,7 +1198,12 @@ set_intersection(PySetObject *so, PyObject *other)
                }
 
                while (set_next((PySetObject *)other, &pos, &entry)) {
-                       if (set_contains_entry(so, entry)) {
+                       int rv = set_contains_entry(so, entry);
+                       if (rv == -1) {
+                               Py_DECREF(result);
+                               return NULL;
+                       }
+                       if (rv) {
                                if (set_add_entry(result, entry) == -1) {
                                        Py_DECREF(result);
                                        return NULL;
@@ -1172,8 +1220,27 @@ set_intersection(PySetObject *so, PyObject *other)
        }
 
        while ((key = PyIter_Next(it)) != NULL) {
-               if (set_contains_key(so, key)) {
-                       if (set_add_key(result, key) == -1) {
+               int rv;
+               setentry entry;
+               long hash = PyObject_Hash(key);
+
+               if (hash == -1) {
+                       Py_DECREF(it);
+                       Py_DECREF(result);
+                       Py_DECREF(key);
+                       return NULL;
+               }
+               entry.hash = hash;
+               entry.key = key;
+               rv = set_contains_entry(so, &entry);
+               if (rv == -1) {
+                       Py_DECREF(it);
+                       Py_DECREF(result);
+                       Py_DECREF(key);
+                       return NULL;
+               }
+               if (rv) {
+                       if (set_add_entry(result, &entry) == -1) {
                                Py_DECREF(it);
                                Py_DECREF(result);
                                Py_DECREF(key);
@@ -1249,7 +1316,8 @@ set_difference_update_internal(PySetObject *so, PyObject *other)
                Py_ssize_t pos = 0;
 
                while (set_next((PySetObject *)other, &pos, &entry))
-                       set_discard_entry(so, entry);
+                       if (set_discard_entry(so, entry) == -1)
+                               return -1;
        } else {
                PyObject *key, *it;
                it = PyObject_GetIter(other);
@@ -1312,17 +1380,26 @@ set_difference(PySetObject *so, PyObject *other)
                        entrycopy.hash = entry->hash;
                        entrycopy.key = entry->key;
                        if (!PyDict_Contains(other, entry->key)) {
-                               if (set_add_entry((PySetObject *)result, &entrycopy) == -1)
+                               if (set_add_entry((PySetObject *)result, &entrycopy) == -1) {
+                                       Py_DECREF(result);
                                        return NULL;
+                               }
                        }
                }
                return result;
        }
 
        while (set_next(so, &pos, &entry)) {
-               if (!set_contains_entry((PySetObject *)other, entry)) {
-                       if (set_add_entry((PySetObject *)result, entry) == -1)
+               int rv = set_contains_entry((PySetObject *)other, entry);
+               if (rv == -1) {
+                       Py_DECREF(result);
+                       return NULL;
+               }
+               if (!rv) {
+                       if (set_add_entry((PySetObject *)result, entry) == -1) {
+                               Py_DECREF(result);
                                return NULL;
+                       }
                }
        }
        return result;
@@ -1374,11 +1451,18 @@ set_symmetric_difference_update(PySetObject *so, PyObject *other)
                PyObject *value;
                int rv;
                while (PyDict_Next(other, &pos, &key, &value)) {
-                       rv = set_discard_key(so, key);
+                       setentry an_entry;
+                       long hash = PyObject_Hash(key);
+
+                       if (hash == -1)
+                               return NULL;
+                       an_entry.hash = hash;
+                       an_entry.key = key;
+                       rv = set_discard_entry(so, &an_entry);
                        if (rv == -1)
                                return NULL;
                        if (rv == DISCARD_NOTFOUND) {
-                               if (set_add_key(so, key) == -1)
+                               if (set_add_entry(so, &an_entry) == -1)
                                        return NULL;
                        }
                }
@@ -1481,7 +1565,10 @@ set_issubset(PySetObject *so, PyObject *other)
                Py_RETURN_FALSE;
 
        while (set_next(so, &pos, &entry)) {
-               if (!set_contains_entry((PySetObject *)other, entry))
+               int rv = set_contains_entry((PySetObject *)other, entry);
+               if (rv == -1)
+                       return NULL;
+               if (!rv)
                        Py_RETURN_FALSE;
        }
        Py_RETURN_TRUE;
@@ -1628,7 +1715,7 @@ set_remove(PySetObject *so, PyObject *key)
                Py_DECREF(tmpkey);
                return result;
        } else if (rv == DISCARD_NOTFOUND) {
-               PyErr_SetObject(PyExc_KeyError, key);
+               set_key_error(key);
                return NULL;
        }
        Py_RETURN_NONE;
index 14863475d4951c5d0b3a5d38fc04393733a668f3..105ba317d6c7ca7a9d97e68d202a18664f838c38 100644 (file)
@@ -78,12 +78,12 @@ stringlib_rpartition(
             }
 
     if (pos < 0) {
-       Py_INCREF(str_obj);
-       PyTuple_SET_ITEM(out, 0, (PyObject*) str_obj);
        Py_INCREF(STRINGLIB_EMPTY);
-       PyTuple_SET_ITEM(out, 1, (PyObject*) STRINGLIB_EMPTY);
+       PyTuple_SET_ITEM(out, 0, (PyObject*) STRINGLIB_EMPTY);
        Py_INCREF(STRINGLIB_EMPTY);
-       PyTuple_SET_ITEM(out, 2, (PyObject*) STRINGLIB_EMPTY);
+       PyTuple_SET_ITEM(out, 1, (PyObject*) STRINGLIB_EMPTY);
+       Py_INCREF(str_obj);        
+       PyTuple_SET_ITEM(out, 2, (PyObject*) str_obj);
        return out;
     }
 
index 028b375b49f4a806eef8677e1fd44d3d30ca8901..61e6af5766383d693eb7241eaf2e6baff51ef95e 100644 (file)
@@ -804,10 +804,22 @@ string_print(PyStringObject *op, FILE *fp, int flags)
                return ret;
        }
        if (flags & Py_PRINT_RAW) {
+               char *data = op->ob_sval;
+               Py_ssize_t size = op->ob_size;
+               while (size > INT_MAX) {
+                       /* Very long strings cannot be written atomically.
+                        * But don't write exactly INT_MAX bytes at a time
+                        * to avoid memory aligment issues.
+                        */
+                       const int chunk_size = INT_MAX & ~0x3FFF;
+                       fwrite(data, 1, chunk_size, fp);
+                       data += chunk_size;
+                       size -= chunk_size;
+               }
 #ifdef __VMS
-                if (op->ob_size) fwrite(op->ob_sval, (int) op->ob_size, 1, fp);
+                if (size) fwrite(data, (int)size, 1, fp);
 #else
-                fwrite(op->ob_sval, 1, (int) op->ob_size, fp);
+                fwrite(data, 1, (int)size, fp);
 #endif
                return 0;
        }
@@ -844,7 +856,7 @@ PyString_Repr(PyObject *obj, int smartquotes)
        register PyStringObject* op = (PyStringObject*) obj;
        size_t newsize = 2 + 4 * op->ob_size;
        PyObject *v;
-       if (newsize > PY_SSIZE_T_MAX) {
+       if (newsize > PY_SSIZE_T_MAX || newsize / 4 != op->ob_size) {
                PyErr_SetString(PyExc_OverflowError,
                        "string is too large to make repr");
        }
@@ -1059,8 +1071,9 @@ string_contains(PyObject *str_obj, PyObject *sub_obj)
                        return PyUnicode_Contains(str_obj, sub_obj);
 #endif
                if (!PyString_Check(sub_obj)) {
-                       PyErr_SetString(PyExc_TypeError,
-                           "'in <string>' requires string as left operand");
+                       PyErr_Format(PyExc_TypeError,
+                           "'in <string>' requires string as left operand, "
+                           "not %.200s", sub_obj->ob_type->tp_name);
                        return -1;
                }
        }
@@ -1228,8 +1241,9 @@ string_subscript(PyStringObject* self, PyObject* item)
                }
        }
        else {
-               PyErr_SetString(PyExc_TypeError,
-                               "string indices must be integers");
+               PyErr_Format(PyExc_TypeError,
+                            "string indices must be integers, not %.200s",
+                            item->ob_type->tp_name);
                return NULL;
        }
 }
@@ -1543,11 +1557,11 @@ string_partition(PyStringObject *self, PyObject *sep_obj)
 }
 
 PyDoc_STRVAR(rpartition__doc__,
-"S.rpartition(sep) -> (head, sep, tail)\n\
+"S.rpartition(sep) -> (tail, sep, head)\n\
 \n\
 Searches for the separator sep in S, starting at the end of S, and returns\n\
 the part before it, the separator itself, and the part after it.  If the\n\
-separator is not found, returns S and two empty strings.");
+separator is not found, returns two empty strings and S.");
 
 static PyObject *
 string_rpartition(PyStringObject *self, PyObject *sep_obj)
@@ -4136,7 +4150,8 @@ formatfloat(char *buf, size_t buflen, int flags,
        double x;
        x = PyFloat_AsDouble(v);
        if (x == -1.0 && PyErr_Occurred()) {
-               PyErr_SetString(PyExc_TypeError, "float argument required");
+               PyErr_Format(PyExc_TypeError, "float argument required, "
+                            "not %.200s", v->ob_type->tp_name);
                return -1;
        }
        if (prec < 0)
@@ -4237,7 +4252,7 @@ _PyString_FormatLong(PyObject *val, int flags, int prec, int type,
                return NULL;
        }
        llen = PyString_Size(result);
-       if (llen > PY_SSIZE_T_MAX) {
+       if (llen > INT_MAX) {
                PyErr_SetString(PyExc_ValueError, "string too large in _PyString_FormatLong");
                return NULL;
        }
@@ -4331,7 +4346,8 @@ formatint(char *buf, size_t buflen, int flags,
 
        x = PyInt_AsLong(v);
        if (x == -1 && PyErr_Occurred()) {
-               PyErr_SetString(PyExc_TypeError, "int argument required");
+               PyErr_Format(PyExc_TypeError, "int argument required, not %.200s",
+                            v->ob_type->tp_name);
                return -1;
        }
        if (x < 0 && type == 'u') {
@@ -4726,9 +4742,10 @@ PyString_Format(PyObject *format, PyObject *args)
                        default:
                                PyErr_Format(PyExc_ValueError,
                                  "unsupported format character '%c' (0x%x) "
-                                 "at index %i",
+                                 "at index %zd",
                                  c, c,
-                                 (int)(fmt - 1 - PyString_AsString(format)));
+                                 (Py_ssize_t)(fmt - 1 -
+                                              PyString_AsString(format)));
                                goto error;
                        }
                        if (sign) {
index 6f3711f1f457f290cc05d532a2e644c506b1b495..c85b35a6037396e95c558d2775903a97a3e847f2 100644 (file)
@@ -620,8 +620,9 @@ tuplesubscript(PyTupleObject* self, PyObject* item)
                }
        }
        else {
-               PyErr_SetString(PyExc_TypeError, 
-                               "tuple indices must be integers");
+               PyErr_Format(PyExc_TypeError, 
+                            "tuple indices must be integers, not %.200s",
+                            item->ob_type->tp_name);
                return NULL;
        }
 }
index ea1d1a28db91f7e704b112ca9495333f3b30bab1..1bef2088c9e31da2be42cc092bd7eab2bd45c76b 100644 (file)
@@ -98,7 +98,7 @@ type_module(PyTypeObject *type, void *context)
                s = strrchr(type->tp_name, '.');
                if (s != NULL)
                        return PyString_FromStringAndSize(
-                               type->tp_name, (int)(s - type->tp_name));
+                           type->tp_name, (Py_ssize_t)(s - type->tp_name));
                return PyString_FromString("__builtin__");
        }
 }
@@ -3644,7 +3644,7 @@ hackcheck(PyObject *self, setattrofunc func, char *what)
        while (type && type->tp_flags & Py_TPFLAGS_HEAPTYPE)
                type = type->tp_base;
         /* If type is NULL now, this is a really weird type.
-           In the same of backwards compatibility (?), just shut up. */
+           In the spirit of backwards compatibility (?), just shut up. */
        if (type && type->tp_setattro != func) {
                PyErr_Format(PyExc_TypeError,
                             "can't apply this %s to %s object",
@@ -3861,7 +3861,7 @@ tp_new_wrapper(PyObject *self, PyObject *args, PyObject *kwds)
        while (staticbase && (staticbase->tp_flags & Py_TPFLAGS_HEAPTYPE))
                staticbase = staticbase->tp_base;
         /* If staticbase is NULL now, it is a really weird type.
-           In the same of backwards compatibility (?), just shut up. */
+           In the spirit of backwards compatibility (?), just shut up. */
        if (staticbase && staticbase->tp_new != type->tp_new) {
                PyErr_Format(PyExc_TypeError,
                             "%s.__new__(%s) is not safe, use %s.__new__()",
@@ -4017,19 +4017,10 @@ slot_sq_length(PyObject *self)
                return -1;
        len = PyInt_AsSsize_t(res);
        Py_DECREF(res);
-       if (len == -1 && PyErr_Occurred())
-               return -1;
-#if SIZEOF_SIZE_T < SIZEOF_INT
-       /* Overflow check -- range of PyInt is more than C ssize_t */
-       if (len != (int)len) {
-               PyErr_SetString(PyExc_OverflowError,
-                       "__len__() should return 0 <= outcome < 2**31");
-               return -1;
-       }
-#endif
        if (len < 0) {
-               PyErr_SetString(PyExc_ValueError,
-                               "__len__() should return >= 0");
+               if (!PyErr_Occurred())
+                       PyErr_SetString(PyExc_ValueError,
+                                       "__len__() should return >= 0");
                return -1;
        }
        return len;
@@ -5583,6 +5574,8 @@ super_init(PyObject *self, PyObject *args, PyObject *kwds)
        PyObject *obj = NULL;
        PyTypeObject *obj_type = NULL;
 
+       if (!_PyArg_NoKeywords("super", kwds))
+               return -1;
        if (!PyArg_ParseTuple(args, "O!|O:super", &PyType_Type, &type, &obj))
                return -1;
        if (obj == Py_None)
index 92301c0012359205934bd1fa57d566d6b3152adc..bde34541ca861dbc57d41d26f206aaf360255b0f 100644 (file)
@@ -2040,7 +2040,32 @@ PyObject *unicodeescape_string(const Py_UNICODE *s,
 
     static const char *hexdigit = "0123456789abcdef";
 
-    repr = PyString_FromStringAndSize(NULL, 2 + 6*size + 1);
+    /* XXX(nnorwitz): rather than over-allocating, it would be
+       better to choose a different scheme.  Perhaps scan the
+       first N-chars of the string and allocate based on that size.
+    */
+    /* Initial allocation is based on the longest-possible unichr
+       escape.
+
+       In wide (UTF-32) builds '\U00xxxxxx' is 10 chars per source
+       unichr, so in this case it's the longest unichr escape. In
+       narrow (UTF-16) builds this is five chars per source unichr
+       since there are two unichrs in the surrogate pair, so in narrow
+       (UTF-16) builds it's not the longest unichr escape.
+
+       In wide or narrow builds '\uxxxx' is 6 chars per source unichr,
+       so in the narrow (UTF-16) build case it's the longest unichr
+       escape.
+    */
+
+    repr = PyString_FromStringAndSize(NULL,
+        2
+#ifdef Py_UNICODE_WIDE
+        + 10*size
+#else
+        + 6*size
+#endif
+        + 1);
     if (repr == NULL)
         return NULL;
 
@@ -2065,15 +2090,6 @@ PyObject *unicodeescape_string(const Py_UNICODE *s,
 #ifdef Py_UNICODE_WIDE
         /* Map 21-bit characters to '\U00xxxxxx' */
         else if (ch >= 0x10000) {
-           Py_ssize_t offset = p - PyString_AS_STRING(repr);
-
-           /* Resize the string if necessary */
-           if (offset + 12 > PyString_GET_SIZE(repr)) {
-               if (_PyString_Resize(&repr, PyString_GET_SIZE(repr) + 100))
-                   return NULL;
-               p = PyString_AS_STRING(repr) + offset;
-           }
-
             *p++ = '\\';
             *p++ = 'U';
             *p++ = hexdigit[(ch >> 28) & 0x0000000F];
@@ -2086,8 +2102,8 @@ PyObject *unicodeescape_string(const Py_UNICODE *s,
             *p++ = hexdigit[ch & 0x0000000F];
            continue;
         }
-#endif
-       /* Map UTF-16 surrogate pairs to Unicode \UXXXXXXXX escapes */
+#else
+       /* Map UTF-16 surrogate pairs to '\U00xxxxxx' */
        else if (ch >= 0xD800 && ch < 0xDC00) {
            Py_UNICODE ch2;
            Py_UCS4 ucs;
@@ -2112,6 +2128,7 @@ PyObject *unicodeescape_string(const Py_UNICODE *s,
            s--;
            size++;
        }
+#endif
 
         /* Map 16-bit characters to '\uxxxx' */
         if (ch >= 256) {
@@ -2367,6 +2384,7 @@ PyObject *_PyUnicode_DecodeUnicodeInternal(const char *s,
     Py_UNICODE unimax = PyUnicode_GetMax();
 #endif
 
+    /* XXX overflow detection missing */
     v = _PyUnicode_New((size+Py_UNICODE_SIZE-1)/ Py_UNICODE_SIZE);
     if (v == NULL)
        goto onError;
@@ -3153,6 +3171,7 @@ PyObject *PyUnicode_DecodeCharmap(const char *s,
                        Py_ssize_t needed = (targetsize - extrachars) + \
                                     (targetsize << 2);
                        extrachars += needed;
+                       /* XXX overflow detection missing */
                        if (_PyUnicode_Resize(&v,
                                             PyUnicode_GET_SIZE(v) + needed) < 0) {
                            Py_DECREF(x);
@@ -6695,11 +6714,11 @@ unicode_partition(PyUnicodeObject *self, PyObject *separator)
 }
 
 PyDoc_STRVAR(rpartition__doc__,
-"S.rpartition(sep) -> (head, sep, tail)\n\
+"S.rpartition(sep) -> (tail, sep, head)\n\
 \n\
 Searches for the separator sep in S, starting at the end of S, and returns\n\
 the part before it, the separator itself, and the part after it.  If the\n\
-separator is not found, returns S and two empty strings.");
+separator is not found, returns two empty strings and S.");
 
 static PyObject*
 unicode_rpartition(PyUnicodeObject *self, PyObject *separator)
@@ -7744,10 +7763,11 @@ PyObject *PyUnicode_Format(PyObject *format,
            default:
                PyErr_Format(PyExc_ValueError,
                             "unsupported format character '%c' (0x%x) "
-                            "at index %i",
+                            "at index %zd",
                             (31<=c && c<=126) ? (char)c : '?',
                              (int)c,
-                            (int)(fmt -1 - PyUnicode_AS_UNICODE(uformat)));
+                            (Py_ssize_t)(fmt - 1 -
+                                         PyUnicode_AS_UNICODE(uformat)));
                goto onError;
            }
            if (sign) {
index 2a16c3512fd70b7d1526920c60d280f16b14bb03..0ede011064b5e6448a241692f80caee2b6db3fe2 100644 (file)
@@ -44,7 +44,7 @@ RSC=rc.exe
 # PROP Target_Dir ""\r
 F90=df.exe\r
 # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c\r
-# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\Include" /I ".." /I "..\..\..\db-4.1.25\build_win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\Include" /I ".." /I "..\..\..\db-4.4.20\build_win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
 # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD BASE RSC /l 0x409 /d "NDEBUG"\r
@@ -54,7 +54,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386\r
-# ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\db-4.1.25\build_win32\Release_static\libdb41s.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"msvcrt" /out:"./_bsddb.pyd"\r
+# ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\db-4.4.20\build_win32\Release\libdb44s.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"msvcrt" /out:"./_bsddb.pyd"\r
 # SUBTRACT LINK32 /pdb:none\r
 \r
 !ELSEIF  "$(CFG)" == "_bsddb - Win32 Debug"\r
@@ -72,7 +72,7 @@ LINK32=link.exe
 # PROP Target_Dir ""\r
 F90=df.exe\r
 # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c\r
-# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\Include" /I ".." /I "..\..\..\db-4.1.25\build_win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\Include" /I ".." /I "..\..\..\db-4.4.20\build_win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
 # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
@@ -82,7 +82,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\db-4.1.25\build_win32\Release_static\libdb41s.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"msvcrtd" /out:"./_bsddb_d.pyd" /pdbtype:sept\r
+# ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\db-4.4.20\build_win32\Release\libdb44s.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"msvcrtd" /out:"./_bsddb_d.pyd" /pdbtype:sept\r
 # SUBTRACT LINK32 /pdb:none\r
 \r
 !ENDIF \r
diff --git a/PC/VC6/_ctypes.dsp b/PC/VC6/_ctypes.dsp
new file mode 100644 (file)
index 0000000..fdf186a
--- /dev/null
@@ -0,0 +1,131 @@
+# Microsoft Developer Studio Project File - Name="_ctypes" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
+\r
+CFG=_ctypes - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "_ctypes.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "_ctypes.mak" CFG="_ctypes - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "_ctypes - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "_ctypes - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName "_ctypes"\r
+# PROP Scc_LocalPath ".."\r
+CPP=cl.exe\r
+MTL=midl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "_ctypes - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "."\r
+# PROP Intermediate_Dir "x86-temp-release\_ctypes"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+F90=df.exe\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\Include" /I ".." /I "..\..\Modules\_ctypes\libffi_msvc" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1d1a0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_ctypes.pyd"\r
+# SUBTRACT LINK32 /pdb:none\r
+\r
+!ELSEIF  "$(CFG)" == "_ctypes - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "."\r
+# PROP Intermediate_Dir "x86-temp-debug\_ctypes"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+F90=df.exe\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\Include" /I ".." /I "..\..\Modules\_ctypes\libffi_msvc" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1d1a0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_ctypes_d.pyd" /pdbtype:sept\r
+# SUBTRACT LINK32 /pdb:none\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "_ctypes - Win32 Release"\r
+# Name "_ctypes - Win32 Debug"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_ctypes\_ctypes.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_ctypes\callbacks.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_ctypes\callproc.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_ctypes\cfield.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_ctypes\libffi_msvc\ffi.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_ctypes\malloc_closure.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_ctypes\libffi_msvc\prep_cif.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_ctypes\stgdict.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_ctypes\libffi_msvc\win32.c\r
+# End Source File\r
+# End Target\r
+# End Project\r
similarity index 61%
rename from PC/VC6/zlib.dsp
rename to PC/VC6/_ctypes_test.dsp
index 42fe6740f85e25168421c9548743ee6e0d11895b..942b30c0553fe33fc22788e469d6d1b351064b0a 100644 (file)
@@ -1,35 +1,35 @@
-# Microsoft Developer Studio Project File - Name="zlib" - Package Owner=<4>\r
+# Microsoft Developer Studio Project File - Name="_ctypes_test" - Package Owner=<4>\r
 # Microsoft Developer Studio Generated Build File, Format Version 6.00\r
 # ** DO NOT EDIT **\r
 \r
 # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
 \r
-CFG=zlib - Win32 Debug\r
+CFG=_ctypes_test - Win32 Debug\r
 !MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
 !MESSAGE use the Export Makefile command and run\r
 !MESSAGE \r
-!MESSAGE NMAKE /f "zlib.mak".\r
+!MESSAGE NMAKE /f "_ctypes_test.mak".\r
 !MESSAGE \r
 !MESSAGE You can specify a configuration when running NMAKE\r
 !MESSAGE by defining the macro CFG on the command line. For example:\r
 !MESSAGE \r
-!MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Debug"\r
+!MESSAGE NMAKE /f "_ctypes_test.mak" CFG="_ctypes_test - Win32 Debug"\r
 !MESSAGE \r
 !MESSAGE Possible choices for configuration are:\r
 !MESSAGE \r
-!MESSAGE "zlib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")\r
-!MESSAGE "zlib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "_ctypes_test - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "_ctypes_test - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
 !MESSAGE \r
 \r
 # Begin Project\r
 # PROP AllowPerConfigDependencies 0\r
-# PROP Scc_ProjName "zlib"\r
+# PROP Scc_ProjName "_ctypes_test"\r
 # PROP Scc_LocalPath ".."\r
 CPP=cl.exe\r
 MTL=midl.exe\r
 RSC=rc.exe\r
 \r
-!IF  "$(CFG)" == "zlib - Win32 Release"\r
+!IF  "$(CFG)" == "_ctypes_test - Win32 Release"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -39,12 +39,12 @@ RSC=rc.exe
 # PROP Use_MFC 0\r
 # PROP Use_Debug_Libraries 0\r
 # PROP Output_Dir "."\r
-# PROP Intermediate_Dir "x86-temp-release\zlib"\r
+# PROP Intermediate_Dir "x86-temp-release\_ctypes_test"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
 F90=df.exe\r
 # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c\r
-# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\Include" /I ".." /I "..\..\..\zlib-1.1.4" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\Include" /I ".." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
 # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD BASE RSC /l 0x409 /d "NDEBUG"\r
@@ -54,15 +54,10 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386\r
-# ADD LINK32 ..\..\..\zlib-1.1.4\zlib.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib.pyd"\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"./_ctypes_test.pyd"\r
 # SUBTRACT LINK32 /pdb:none\r
-# Begin Special Build Tool\r
-SOURCE="$(InputPath)"\r
-PreLink_Desc=Checking static zlib has been built\r
-PreLink_Cmds=cd ..\..\..\zlib-1.1.4    nmake -nologo -f msdos\makefile.w32 zlib.lib\r
-# End Special Build Tool\r
 \r
-!ELSEIF  "$(CFG)" == "zlib - Win32 Debug"\r
+!ELSEIF  "$(CFG)" == "_ctypes_test - Win32 Debug"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -72,12 +67,12 @@ PreLink_Cmds=cd ..\..\..\zlib-1.1.4 nmake -nologo -f msdos\makefile.w32 zlib.lib
 # PROP Use_MFC 0\r
 # PROP Use_Debug_Libraries 1\r
 # PROP Output_Dir "."\r
-# PROP Intermediate_Dir "x86-temp-debug\zlib"\r
+# PROP Intermediate_Dir "x86-temp-debug\_ctypes_test"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
 F90=df.exe\r
 # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c\r
-# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\Include" /I ".." /I "..\..\..\zlib-1.1.4" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\Include" /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
 # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
@@ -87,23 +82,18 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 ..\..\..\zlib-1.1.4\zlib.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib_d.pyd" /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"./_ctypes_test_d.pyd" /pdbtype:sept\r
 # SUBTRACT LINK32 /pdb:none\r
-# Begin Special Build Tool\r
-SOURCE="$(InputPath)"\r
-PreLink_Desc=Checking static zlib has been built\r
-PreLink_Cmds=cd ..\..\..\zlib-1.1.4    nmake -nologo -f msdos\makefile.w32 zlib.lib\r
-# End Special Build Tool\r
 \r
 !ENDIF \r
 \r
 # Begin Target\r
 \r
-# Name "zlib - Win32 Release"\r
-# Name "zlib - Win32 Debug"\r
+# Name "_ctypes_test - Win32 Release"\r
+# Name "_ctypes_test - Win32 Debug"\r
 # Begin Source File\r
 \r
-SOURCE=..\..\Modules\zlibmodule.c\r
+SOURCE=..\..\Modules\_ctypes\_ctypes_test.c\r
 # End Source File\r
 # End Target\r
 # End Project\r
diff --git a/PC/VC6/_elementtree.dsp b/PC/VC6/_elementtree.dsp
new file mode 100644 (file)
index 0000000..5c9a08b
--- /dev/null
@@ -0,0 +1,111 @@
+# Microsoft Developer Studio Project File - Name="_elementtree" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
+\r
+CFG=_elementtree - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "_elementtree.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "_elementtree.mak" CFG="_elementtree - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "_elementtree - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "_elementtree - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName "_elementtree"\r
+# PROP Scc_LocalPath ".."\r
+CPP=cl.exe\r
+MTL=midl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "_elementtree - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "."\r
+# PROP Intermediate_Dir "x86-temp-release\_elementtree"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+F90=df.exe\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\Include" /I ".." /I "..\..\Modules\expat" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "XML_NS" /D "XML_DTD" /D "BYTEORDER=1234" /D "XML_CONTEXT_BYTES=1024" /D "USE_PYEXPAT_CAPI" /D "XML_STATIC" /D "HAVE_MEMMOVE" /YX /FD /c\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1d100000" /subsystem:windows /dll /debug /machine:I386 /out:"./_elementtree.pyd"\r
+# SUBTRACT LINK32 /pdb:none\r
+\r
+!ELSEIF  "$(CFG)" == "_elementtree - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "."\r
+# PROP Intermediate_Dir "x86-temp-debug\_elementtree"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+F90=df.exe\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\Include" /I ".." /I "..\..\Modules\expat" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "XML_NS" /D "XML_DTD" /D "BYTEORDER=1234" /D "XML_CONTEXT_BYTES=1024" /D "USE_PYEXPAT_CAPI" /D "XML_STATIC" /D "HAVE_MEMMOVE" /YX /FD /c\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1d100000" /subsystem:windows /dll /debug /machine:I386 /out:"./_elementtree_d.pyd" /pdbtype:sept\r
+# SUBTRACT LINK32 /pdb:none\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "_elementtree - Win32 Release"\r
+# Name "_elementtree - Win32 Debug"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_elementtree.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\expat\xmlparse.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\expat\xmlrole.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\expat\xmltok.c\r
+# End Source File\r
+# End Target\r
+# End Project\r
diff --git a/PC/VC6/_sqlite3.dsp b/PC/VC6/_sqlite3.dsp
new file mode 100644 (file)
index 0000000..a48ef72
--- /dev/null
@@ -0,0 +1,131 @@
+# Microsoft Developer Studio Project File - Name="_sqlite3" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
+\r
+CFG=_sqlite3 - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "_sqlite3.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "_sqlite3.mak" CFG="_sqlite3 - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "_sqlite3 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "_sqlite3 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName "_sqlite3"\r
+# PROP Scc_LocalPath ".."\r
+CPP=cl.exe\r
+MTL=midl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "_sqlite3 - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "."\r
+# PROP Intermediate_Dir "x86-temp-release\_sqlite3"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+F90=df.exe\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\Include" /I ".." /I "..\..\..\sqlite-source-3.3.4" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "MODULE_NAME=\"sqlite3\"" /YX /FD /c\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386\r
+# ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\sqlite-source-3.3.4\sqlite3.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sqlite3.pyd"\r
+# SUBTRACT LINK32 /pdb:none\r
+\r
+!ELSEIF  "$(CFG)" == "_sqlite3 - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "."\r
+# PROP Intermediate_Dir "x86-temp-debug\_sqlite3"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+F90=df.exe\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\Include" /I ".." /I "..\..\..\sqlite-source-3.3.4" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "MODULE_NAME=\"sqlite3\"" /YX /FD /c\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\sqlite-source-3.3.4\sqlite3.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sqlite3_d.pyd" /pdbtype:sept\r
+# SUBTRACT LINK32 /pdb:none\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "_sqlite3 - Win32 Release"\r
+# Name "_sqlite3 - Win32 Debug"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_sqlite\cache.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_sqlite\connection.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_sqlite\cursor.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_sqlite\microprotocols.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_sqlite\module.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_sqlite\prepare_protocol.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_sqlite\row.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_sqlite\statement.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\_sqlite\util.c\r
+# End Source File\r
+# End Target\r
+# End Project\r
index ce78526096dba399660ee4429da74d2af815b197..f8ba0335d29189f3efa981807efda74d01755640 100644 (file)
@@ -2,17 +2,17 @@
 !IFDEF DEBUG
 MODULE=_ssl_d.pyd
 TEMP_DIR=x86-temp-debug/_ssl
-CFLAGS=/Od /Zi /MDd /LDd /DDEBUG /D_DEBUG
+CFLAGS=/Od /Zi /MDd /LDd /DDEBUG /D_DEBUG /DWIN32
 SSL_LIB_DIR=$(SSL_DIR)/out32.dbg
 !ELSE
 MODULE=_ssl.pyd
 TEMP_DIR=x86-temp-release/_ssl
-CFLAGS=/Ox /MD /LD
+CFLAGS=/Ox /MD /LD /DWIN32
 SSL_LIB_DIR=$(SSL_DIR)/out32
 !ENDIF
 
 INCLUDES=-I ../../Include -I .. -I $(SSL_DIR)/inc32
-LIBS=gdi32.lib wsock32.lib /libpath:$(SSL_LIB_DIR) libeay32.lib ssleay32.lib
+LIBS=gdi32.lib wsock32.lib user32.lib advapi32.lib /libpath:$(SSL_LIB_DIR) libeay32.lib ssleay32.lib
 
 SOURCE=../../Modules/_ssl.c $(SSL_LIB_DIR)/libeay32.lib $(SSL_LIB_DIR)/ssleay32.lib
 
index 18104e304c17cc5ac0cf1f6ff8659f4e34d5b755..d06198c9b95e4ec16a7119e913ec1dab6e4befda 100644 (file)
@@ -17,8 +17,8 @@ CFG=_tkinter - Win32 Release
 !MESSAGE \r
 !MESSAGE Possible choices for configuration are:\r
 !MESSAGE \r
-!MESSAGE "_tkinter - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
 !MESSAGE "_tkinter - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "_tkinter - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
 !MESSAGE \r
 \r
 # Begin Project\r
@@ -44,7 +44,7 @@ RSC=rc.exe
 # PROP Target_Dir ""\r
 F90=df.exe\r
 # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c\r
-# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\..\tcl84\include" /I "..\..\Include" /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\..\tcltk\include" /I "..\..\Include" /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c\r
 # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
@@ -54,7 +54,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 ..\..\..\tcl84\lib\tk84.lib ..\..\..\tcl84\lib\tcl84.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib"\r
+# ADD LINK32 ..\..\..\tcltk\lib\tk84.lib ..\..\..\tcltk\lib\tcl84.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib"\r
 # SUBTRACT LINK32 /pdb:none\r
 \r
 !ELSEIF  "$(CFG)" == "_tkinter - Win32 Release"\r
@@ -72,7 +72,7 @@ LINK32=link.exe
 # PROP Target_Dir ""\r
 F90=df.exe\r
 # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c\r
-# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\..\tcl84\include" /I "..\..\Include" /I ".." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c\r
+# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\..\tcltk\include" /I "..\..\Include" /I ".." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c\r
 # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD BASE RSC /l 0x409 /d "NDEBUG"\r
@@ -82,15 +82,15 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386\r
-# ADD LINK32 ..\..\..\tcl84\lib\tk84.lib ..\..\..\tcl84\lib\tcl84.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib"\r
+# ADD LINK32 ..\..\..\tcltk\lib\tk84.lib ..\..\..\tcltk\lib\tcl84.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib"\r
 # SUBTRACT LINK32 /pdb:none\r
 \r
 !ENDIF \r
 \r
 # Begin Target\r
 \r
-# Name "_tkinter - Win32 Debug"\r
 # Name "_tkinter - Win32 Release"\r
+# Name "_tkinter - Win32 Debug"\r
 # Begin Source File\r
 \r
 SOURCE=..\..\Modules\_tkinter.c\r
index 065703491eb9cd45ebed85747b3c3f8ff2da519c..fa1064d86b183ab01918a4e9cfdc9ba63798f5c5 100644 (file)
@@ -44,7 +44,7 @@ RSC=rc.exe
 # PROP Target_Dir ""\r
 F90=df.exe\r
 # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c\r
-# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\Include" /I ".." /I "..\..\..\bzip2-1.0.2" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\Include" /I ".." /I "..\..\..\bzip2-1.0.3" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
 # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD BASE RSC /l 0x409 /d "NDEBUG"\r
@@ -54,12 +54,8 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386\r
-# ADD LINK32 ..\..\..\bzip2-1.0.2\libbz2.lib /nologo /base:"0x1D170000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./bz2.pyd"\r
+# ADD LINK32 ..\..\..\bzip2-1.0.3\libbz2.lib /nologo /base:"0x1D170000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./bz2.pyd"\r
 # SUBTRACT LINK32 /pdb:none /nodefaultlib\r
-# Begin Special Build Tool\r
-SOURCE="$(InputPath)"\r
-PreLink_Cmds=cd ..\..\..\bzip2-1.0.2   nmake /nologo /f makefile.msc\r
-# End Special Build Tool\r
 \r
 !ELSEIF  "$(CFG)" == "bz2 - Win32 Debug"\r
 \r
@@ -76,7 +72,7 @@ PreLink_Cmds=cd ..\..\..\bzip2-1.0.2  nmake /nologo /f makefile.msc
 # PROP Target_Dir ""\r
 F90=df.exe\r
 # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c\r
-# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\Include" /I ".." /I "..\..\..\bzip2-1.0.2" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\Include" /I ".." /I "..\..\..\bzip2-1.0.3" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c\r
 # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
@@ -86,12 +82,8 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 ..\..\..\bzip2-1.0.2\libbz2.lib /nologo /base:"0x1D170000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"msvcrt" /nodefaultlib:"libc" /out:"./bz2_d.pyd" /pdbtype:sept\r
+# ADD LINK32 ..\..\..\bzip2-1.0.3\libbz2.lib /nologo /base:"0x1D170000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"msvcrt" /nodefaultlib:"libc" /out:"./bz2_d.pyd" /pdbtype:sept\r
 # SUBTRACT LINK32 /pdb:none\r
-# Begin Special Build Tool\r
-SOURCE="$(InputPath)"\r
-PreLink_Cmds=cd ..\..\..\bzip2-1.0.2   nmake /nologo /f makefile.msc\r
-# End Special Build Tool\r
 \r
 !ENDIF \r
 \r
index a762260ed93b740f138c7c94accab93549c931ec..daf1535dd2d8b02f4f48002c3e57a12c711f8d68 100644 (file)
@@ -3,7 +3,7 @@ Microsoft Developer Studio Workspace File, Format Version 6.00
 \r
 ###############################################################################\r
 \r
-Project: "_bsddb"=.\_bsddb.dsp - Package Owner=<4>\r
+Project: "_bsddb"=".\_bsddb.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -18,7 +18,43 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "_socket"=.\_socket.dsp - Package Owner=<4>\r
+Project: "_ctypes"=".\_ctypes.dsp" - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "_ctypes_test"=".\_ctypes_test.dsp" - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "_elementtree"=".\_elementtree.dsp" - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "_socket"=".\_socket.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -33,7 +69,19 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "_ssl"=.\_ssl.dsp - Package Owner=<4>\r
+Project: "_sqlite3"=".\_sqlite3.dsp" - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "_ssl"=".\_ssl.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -54,7 +102,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "_testcapi"=.\_testcapi.dsp - Package Owner=<4>\r
+Project: "_testcapi"=".\_testcapi.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -69,7 +117,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "_tkinter"=.\_tkinter.dsp - Package Owner=<4>\r
+Project: "_tkinter"=".\_tkinter.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -84,7 +132,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "bz2"=.\bz2.dsp - Package Owner=<4>\r
+Project: "bz2"=".\bz2.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -96,7 +144,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "make_versioninfo"=.\make_versioninfo.dsp - Package Owner=<4>\r
+Project: "make_versioninfo"=".\make_versioninfo.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -108,7 +156,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "pyexpat"=.\pyexpat.dsp - Package Owner=<4>\r
+Project: "pyexpat"=".\pyexpat.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -123,7 +171,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "python"=.\python.dsp - Package Owner=<4>\r
+Project: "python"=".\python.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -138,7 +186,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "pythoncore"=.\pythoncore.dsp - Package Owner=<4>\r
+Project: "pythoncore"=".\pythoncore.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -153,7 +201,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "pythonw"=.\pythonw.dsp - Package Owner=<4>\r
+Project: "pythonw"=".\pythonw.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -168,7 +216,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "select"=.\select.dsp - Package Owner=<4>\r
+Project: "select"=".\select.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -183,7 +231,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "unicodedata"=.\unicodedata.dsp - Package Owner=<4>\r
+Project: "unicodedata"=".\unicodedata.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -198,7 +246,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "w9xpopen"=.\w9xpopen.dsp - Package Owner=<4>\r
+Project: "w9xpopen"=".\w9xpopen.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
@@ -210,22 +258,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "winsound"=.\winsound.dsp - Package Owner=<4>\r
-\r
-Package=<5>\r
-{{{\r
-}}}\r
-\r
-Package=<4>\r
-{{{\r
-    Begin Project Dependency\r
-    Project_Dep_Name pythoncore\r
-    End Project Dependency\r
-}}}\r
-\r
-###############################################################################\r
-\r
-Project: "zlib"=.\zlib.dsp - Package Owner=<4>\r
+Project: "winsound"=".\winsound.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
index ec2ec3ea1dc9bdde71309894fe30818544194a22..ca504d644aef7f1ad0d8fa3aceb9ed59758cfc96 100644 (file)
@@ -44,7 +44,7 @@ RSC=rc.exe
 # PROP Target_Dir ""\r
 F90=df.exe\r
 # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c\r
-# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\Include" /I ".." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "USE_DL_EXPORT" /YX /FD /Zm200 /c\r
+# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\Include" /I ".." /I "..\..\modules\zlib" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "USE_DL_EXPORT" /YX /FD /Zm200 /c\r
 # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"\r
 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"\r
 # ADD BASE RSC /l 0x409 /d "NDEBUG"\r
@@ -54,7 +54,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386\r
-# ADD LINK32 largeint.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x1e000000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./python25.dll"\r
+# ADD LINK32 largeint.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x1e000000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./python26.dll"\r
 # SUBTRACT LINK32 /pdb:none\r
 \r
 !ELSEIF  "$(CFG)" == "pythoncore - Win32 Debug"\r
@@ -72,7 +72,7 @@ LINK32=link.exe
 # PROP Target_Dir ""\r
 F90=df.exe\r
 # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c\r
-# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\Include" /I ".." /D "_DEBUG" /D "USE_DL_EXPORT" /D "WIN32" /D "_WINDOWS" /YX /FD /Zm200 /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\Include" /I ".." /I "..\..\modules\zlib" /D "_DEBUG" /D "USE_DL_EXPORT" /D "WIN32" /D "_WINDOWS" /YX /FD /Zm200 /c\r
 # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"\r
 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
@@ -82,7 +82,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 largeint.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x1e000000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./python25_d.dll" /pdbtype:sept\r
+# ADD LINK32 largeint.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x1e000000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./python26_d.dll" /pdbtype:sept\r
 # SUBTRACT LINK32 /pdb:none\r
 \r
 !ENDIF \r
@@ -129,6 +129,10 @@ SOURCE=..\..\Modules\_csv.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Modules\_functoolsmodule.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\Modules\_heapqmodule.c\r
 # End Source File\r
 # Begin Source File\r
@@ -141,6 +145,10 @@ SOURCE=..\..\Modules\_localemodule.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Modules\_lsprof.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\Modules\_randommodule.c\r
 # End Source File\r
 # Begin Source File\r
@@ -149,10 +157,18 @@ SOURCE=..\..\Modules\_sre.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Modules\_struct.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\PC\_subprocess.c\r
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Modules\_typesmodule.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\Modules\_weakref.c\r
 # End Source File\r
 # Begin Source File\r
@@ -169,6 +185,10 @@ SOURCE=..\..\Parser\acceler.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Modules\zlib\adler32.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\Modules\arraymodule.c\r
 # End Source File\r
 # Begin Source File\r
@@ -245,6 +265,10 @@ SOURCE=..\..\Objects\complexobject.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Modules\zlib\compress.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\config.c\r
 # End Source File\r
 # Begin Source File\r
@@ -253,6 +277,10 @@ SOURCE=..\..\Modules\cPickle.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Modules\zlib\crc32.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\Modules\cStringIO.c\r
 # End Source File\r
 # Begin Source File\r
@@ -261,6 +289,10 @@ SOURCE=..\..\Modules\datetimemodule.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Modules\zlib\deflate.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\Objects\descrobject.c\r
 # End Source File\r
 # Begin Source File\r
@@ -289,7 +321,7 @@ SOURCE=..\..\Python\errors.c
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\Python\exceptions.c\r
+SOURCE=..\..\Objects\exceptions.c\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -313,10 +345,6 @@ SOURCE=..\..\Objects\funcobject.c
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\Modules\_functoolsmodule.c\r
-# End Source File\r
-# Begin Source File\r
-\r
 SOURCE=..\..\Python\future.c\r
 # End Source File\r
 # Begin Source File\r
@@ -391,6 +419,18 @@ SOURCE=..\..\Python\importdl.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Modules\zlib\inffast.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\zlib\inflate.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\zlib\inftrees.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\Objects\intobject.c\r
 # End Source File\r
 # Begin Source File\r
@@ -427,7 +467,7 @@ SOURCE=..\..\Modules\mathmodule.c
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\Modules\md5c.c\r
+SOURCE=..\..\Modules\md5.c\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -503,10 +543,18 @@ SOURCE=..\..\Parser\parsetok.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Python\peephole.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\Modules\posixmodule.c\r
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Python\pyarena.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\Python\pyfpe.c\r
 # End Source File\r
 # Begin Source File\r
@@ -519,11 +567,11 @@ SOURCE=..\..\Python\pystrtod.c
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\python_nt.rc\r
+SOURCE="..\..\Python\Python-ast.c"\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\Python\Python-ast.c\r
+SOURCE=..\python_nt.rc\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -539,11 +587,11 @@ SOURCE=..\..\Modules\rgbimgmodule.c
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\Objects\setobject.c\r
+SOURCE=..\..\Modules\rotatingtree.c\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\Modules\shamodule.c\r
+SOURCE=..\..\Objects\setobject.c\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -555,6 +603,10 @@ SOURCE=..\..\Modules\sha512module.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Modules\shamodule.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\Modules\signalmodule.c\r
 # End Source File\r
 # Begin Source File\r
@@ -575,10 +627,6 @@ SOURCE=..\..\Python\structmember.c
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\Modules\structmodule.c\r
-# End Source File\r
-# Begin Source File\r
-\r
 SOURCE=..\..\Objects\structseq.c\r
 # End Source File\r
 # Begin Source File\r
@@ -615,6 +663,10 @@ SOURCE=..\..\Python\traceback.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\Modules\zlib\trees.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\Objects\tupleobject.c\r
 # End Source File\r
 # Begin Source File\r
@@ -645,5 +697,13 @@ SOURCE=..\..\Modules\yuvconvert.c
 \r
 SOURCE=..\..\Modules\zipimport.c\r
 # End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\zlibmodule.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\Modules\zlib\zutil.c\r
+# End Source File\r
 # End Target\r
 # End Project\r
index 394b5614feb28d8e3eaa85c7694a25f35f3ff55f..cfa549f6361e724bfb204486111e2a70309a9a13 100644 (file)
@@ -62,40 +62,37 @@ unpack into new subdirectories of dist\.
 
 _tkinter
     Python wrapper for the Tk windowing system.  Requires building
-    Tcl/Tk first.  Following are instructions for Tcl/Tk 8.4.3:
+    Tcl/Tk first.  Following are instructions for Tcl/Tk 8.4.12.
 
     Get source
     ----------
-    Go to
-        http://prdownloads.sourceforge.net/tcl/
-    and download
-        tcl843-src.zip
-        tk843-src.zip
-    Unzip into
-        dist\tcl8.4.3\
-        dist\tk8.4.3\
-    respectively.
-
-    Build Tcl first (done here w/ MSVC 6 on Win98SE)
+    In the dist directory, run
+    svn export http://svn.python.org/projects/external/tcl8.4.12
+    svn export http://svn.python.org/projects/external/tk8.4.12
+    svn export http://svn.python.org/projects/external/tix-8.4.0
+
+    Build Tcl first (done here w/ MSVC 6 on Win2K)
     ---------------
-    cd dist\tcl8.4.3\win
-    run vcvars32.bat [necessary even on Win2K]
+    cd dist\tcl8.4.12\win
+    run vcvars32.bat
     nmake -f makefile.vc
-    nmake -f makefile.vc INSTALLDIR=..\..\tcl84 install
+    nmake -f makefile.vc INSTALLDIR=..\..\tcltk install
 
     XXX Should we compile with OPTS=threads?
 
-    XXX Some tests failed in "nmake -f makefile.vc test".
-    XXX all.tcl:  Total 10480   Passed 9743    Skipped 719     Failed 18
-    XXX
-    XXX That was on Win98SE.  On Win2K:
-    XXX all.tcl   Total 10480   Passed 9781    Skipped 698     Failed  1
+    Optional:  run tests, via
+        nmake -f makefile.vc test
+
+        all.tcl:        Total   10835   Passed  10096   Skipped 732     Failed  7
+        Sourced 129 Test Files.
+        Files with failing tests: exec.test expr.test io.test main.test string.test stri
+        ngObj.test
 
     Build Tk
     --------
-    cd dist\tk8.4.3\win
-    nmake -f makefile.vc TCLDIR=..\..\tcl8.4.3
-    nmake -f makefile.vc TCLDIR=..\..\tcl8.4.3 INSTALLDIR=..\..\tcl84 install
+    cd dist\tk8.4.12\win
+    nmake -f makefile.vc TCLDIR=..\..\tcl8.4.12
+    nmake -f makefile.vc TCLDIR=..\..\tcl8.4.12 INSTALLDIR=..\..\tcltk install
 
     XXX Should we compile with OPTS=threads?
 
@@ -103,96 +100,59 @@ _tkinter
     XXX failed.  It popped up tons of little windows, and did lots of
     XXX stuff, and nothing blew up.
 
-    XXX Our installer copies a lot of stuff out of the Tcl/Tk install
-    XXX directory.  Is all of that really needed for Python use of Tcl/Tk?
-
-    Make sure the installer matches
-    -------------------------------
-    Ensure that the Wise compiler vrbl _TCLDIR_ is set to the name of
-    the common Tcl/Tk installation directory (tcl84 for the instructions
-    above).  This is needed so the installer can copy various Tcl/Tk
-    files into the Python distribution.
-
-
-zlib
-    Python wrapper for the zlib compression library.  Get the source code
-    for version 1.1.4 from a convenient mirror at:
-        http://www.gzip.org/zlib/
-    Unpack into dist\zlib-1.1.4.
-    A custom pre-link step in the zlib project settings should manage to
-    build zlib-1.1.4\zlib.lib by magic before zlib.pyd (or zlib_d.pyd) is
-    linked in PCbuild\.
-    However, the zlib project is not smart enough to remove anything under
-    zlib-1.1.4\ when you do a clean, so if you want to rebuild zlib.lib
-    you need to clean up zlib-1.1.4\ by hand.
+   Built Tix
+   ---------
+   cd dist\tix-8.4.0\win
+   nmake -f python.mak
+   nmake -f python.mak install
 
 bz2
     Python wrapper for the libbz2 compression library.  Homepage
         http://sources.redhat.com/bzip2/
-    Download the source tarball, bzip2-1.0.2.tar.gz.
-    Unpack into dist\bzip2-1.0.2.  WARNING:  If you're using WinZip, you
-    must disable its "TAR file smart CR/LF conversion" feature (under
-    Options -> Configuration -> Miscellaneous -> Other) for the duration.
-
-    A custom pre-link step in the bz2 project settings should manage to
-    build bzip2-1.0.2\libbz2.lib by magic before bz2.pyd (or bz2_d.pyd) is
-    linked in PCbuild\.
-    However, the bz2 project is not smart enough to remove anything under
-    bzip2-1.0.2\ when you do a clean, so if you want to rebuild bzip2.lib
-    you need to clean up bzip2-1.0.2\ by hand.
-
-    The build step shouldn't yield any warnings or errors, and should end
-    by displaying 6 blocks each terminated with
-        FC: no differences encountered
-    If FC finds differences, see the warning abou WinZip above (when I
-    first tried it, sample3.ref failed due to CRLF conversion).
-
-    All of this managed to build bzip2-1.0.2\libbz2.lib, which the Python
+    Download the source from the python.org copy into the dist
+    directory:
+
+    svn export http://svn.python.org/projects/external/bzip2-1.0.3
+
+    And requires building bz2 first.
+
+    cd dist\bzip2-1.0.3
+    nmake -f makefile.msc
+
+    All of this managed to build bzip2-1.0.3\libbz2.lib, which the Python
     project links in.
 
 
 _bsddb
-    Go to Sleepycat's download page:
-        http://www.sleepycat.com/download/
-
-    and download version 4.1.25.  The file name is db-4.1.25.NC.zip.
-    XXX with or without strong cryptography?  I picked "without".
-
-    Unpack into
-        dist\db-4.1.25
-
-    [If using WinZip to unpack the db-4.1.25.NC distro, that requires
-     renaming the directory (to remove ".NC") after unpacking.
-    ]
-
-    Open
-        dist\db-4.1.25\docs\index.html
-
-    and follow the Windows instructions for building the Sleepycat
-    software.  Note that Berkeley_DB.dsw is in the build_win32 subdirectory.
-    Build the Release version ("build_all -- Win32 Release").
-
-    XXX We're actually linking against Release_static\libdb41s.lib.
-    XXX This yields the following warnings:
-"""
-Compiling...
-_bsddb.c
-Linking...
-   Creating library ./_bsddb.lib and object ./_bsddb.exp
-LINK : warning LNK4049: locally defined symbol "_malloc" imported
-LINK : warning LNK4049: locally defined symbol "_free" imported
-LINK : warning LNK4049: locally defined symbol "_fclose" imported
-LINK : warning LNK4049: locally defined symbol "_fopen" imported
-_bsddb.pyd - 0 error(s), 4 warning(s)
-"""
-    XXX This isn't encouraging, but I don't know what to do about it.
+    To use the version of bsddb that Python is built with by default, invoke
+    (in the dist directory)
+
+     svn export http://svn.python.org/projects/external/db-4.4.20
+
+    Then open db-4.4.20\build_win32\Berkeley_DB.dsw and build the "db_static"
+    project for "Release" mode.
+
+    Alternatively, if you want to start with the original sources,
+    go to Sleepycat's download page:
+        http://www.sleepycat.com/downloads/releasehistorybdb.html
+
+    and download version 4.4.20.
+
+    With or without strong cryptography? You can choose either with or
+    without strong cryptography, as per the instructions below.  By
+    default, Python is built and distributed WITHOUT strong crypto.
+
+    Unpack the sources; if you downloaded the non-crypto version, rename
+    the directory from db-4.4.20.NC to db-4.4.20.
+
+    Now apply any patches that apply to your version.
 
     To run extensive tests, pass "-u bsddb" to regrtest.py.  test_bsddb3.py
     is then enabled.  Running in verbose mode may be helpful.
 
     XXX The test_bsddb3 tests don't always pass, on Windows (according to
-    XXX me) or on Linux (according to Barry).  I had much better luck
-    XXX on Win2K than on Win98SE.  The common failure mode across platforms
+    XXX me) or on Linux (according to Barry).  (I had much better luck
+    XXX on Win2K than on Win98SE.)  The common failure mode across platforms
     XXX is
     XXX     DBAgainError: (11, 'Resource temporarily unavailable -- unable
     XXX                         to join the environment')
index 35f137a24a3de664320816304dc6a0329881ac2b..f4af92af8aecb7c0aa6b9ece20fb0e6c32f65220 100644 (file)
--- a/PC/_msi.c
+++ b/PC/_msi.c
@@ -495,7 +495,7 @@ summary_getproperty(msiobj* si, PyObject *args)
 
     status = MsiSummaryInfoGetProperty(si->h, field, &type, &ival, 
        &fval, sval, &ssize);
-    if (status = ERROR_MORE_DATA) {
+    if (status == ERROR_MORE_DATA) {
        sval = malloc(ssize);
         status = MsiSummaryInfoGetProperty(si->h, field, &type, &ival, 
            &fval, sval, &ssize);
diff --git a/PC/bdist_wininst/wininst-8.sln b/PC/bdist_wininst/wininst-8.sln
new file mode 100644 (file)
index 0000000..1dec8a2
--- /dev/null
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wininst", "wininst-8.vcproj", "{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Release|Win32 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.ActiveCfg = Debug|Win32
+               {EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Debug|Win32.Build.0 = Debug|Win32
+               {EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.ActiveCfg = Release|Win32
+               {EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}.Release|Win32.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/PC/bdist_wininst/wininst-8.vcproj b/PC/bdist_wininst/wininst-8.vcproj
new file mode 100644 (file)
index 0000000..69b86a3
--- /dev/null
@@ -0,0 +1,320 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="8.00"
+       Name="wininst"
+       ProjectGUID="{EB1C19C1-1F18-421E-9735-CAEE69DC6A3C}"
+       RootNamespace="wininst"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory=".\..\..\lib\distutils\command"
+                       IntermediateDirectory=".\temp-release"
+                       ConfigurationType="1"
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="false"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               PreprocessorDefinitions="NDEBUG"
+                               MkTypLibCompatible="true"
+                               SuppressStartupBanner="true"
+                               TargetEnvironment="1"
+                               TypeLibraryName=".\..\..\lib\distutils\command/wininst.tlb"
+                               HeaderFileName=""
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="1"
+                               InlineFunctionExpansion="1"
+                               AdditionalIncludeDirectories="..\..\Include,..\..\Modules\zlib"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+                               StringPooling="true"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               PrecompiledHeaderFile=".\temp-release/wininst.pch"
+                               AssemblerListingLocation=".\temp-release/"
+                               ObjectFile=".\temp-release/"
+                               ProgramDataBaseFileName=".\temp-release/"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                               CompileAs="0"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="NDEBUG"
+                               Culture="1031"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="imagehlp.lib comctl32.lib"
+                               OutputFile="..\..\lib\distutils\command/wininst-8.exe"
+                               LinkIncremental="1"
+                               SuppressStartupBanner="true"
+                               IgnoreDefaultLibraryNames="LIBC"
+                               ProgramDatabaseFile=".\..\..\lib\distutils\command/wininst-6.pdb"
+                               SubSystem="2"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory=".\."
+                       IntermediateDirectory=".\temp-debug"
+                       ConfigurationType="1"
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="false"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               PreprocessorDefinitions="_DEBUG"
+                               MkTypLibCompatible="true"
+                               SuppressStartupBanner="true"
+                               TargetEnvironment="1"
+                               TypeLibraryName=".\./wininst.tlb"
+                               HeaderFileName=""
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="..\..\Include,..\..\Modules\zlib"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+                               RuntimeLibrary="2"
+                               UsePrecompiledHeader="0"
+                               PrecompiledHeaderFile=".\temp-debug/wininst.pch"
+                               AssemblerListingLocation=".\temp-debug/"
+                               ObjectFile=".\temp-debug/"
+                               ProgramDataBaseFileName=".\temp-debug/"
+                               BrowseInformation="1"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                               DebugInformationFormat="1"
+                               CompileAs="0"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="_DEBUG"
+                               Culture="1031"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="imagehlp.lib comctl32.lib"
+                               OutputFile="..\..\lib\distutils\command/wininst-8_d.exe"
+                               LinkIncremental="2"
+                               SuppressStartupBanner="true"
+                               IgnoreDefaultLibraryNames="LIBC"
+                               GenerateDebugInformation="true"
+                               SubSystem="2"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+                       >
+                       <File
+                               RelativePath="extract.c"
+                               >
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               Optimization="1"
+                                               AdditionalIncludeDirectories=""
+                                               PreprocessorDefinitions=""
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               Optimization="0"
+                                               AdditionalIncludeDirectories=""
+                                               PreprocessorDefinitions=""
+                                               BrowseInformation="1"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="install.c"
+                               >
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               Optimization="1"
+                                               AdditionalIncludeDirectories=""
+                                               PreprocessorDefinitions=""
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               Optimization="0"
+                                               AdditionalIncludeDirectories=""
+                                               PreprocessorDefinitions=""
+                                               BrowseInformation="1"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="install.rc"
+                               >
+                       </File>
+                       <Filter
+                               Name="zlib"
+                               >
+                               <File
+                                       RelativePath="..\..\Modules\zlib\adler32.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\Modules\zlib\crc32.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\Modules\zlib\inffast.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\Modules\zlib\inflate.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\Modules\zlib\inftrees.c"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\..\Modules\zlib\zutil.c"
+                                       >
+                               </File>
+                       </Filter>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl"
+                       >
+                       <File
+                               RelativePath="archive.h"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+                       >
+                       <File
+                               RelativePath="PythonPowered.bmp"
+                               >
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
index 7c0d4bb1bc5688efe57c91a8f4653bf733732416..17714e35b06ebb7fa6222e6b6ced4445ab2d3c5d 100644 (file)
@@ -39,7 +39,7 @@
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalOptions="/export:initexample"
-                               AdditionalDependencies="odbc32.lib odbccp32.lib python25.lib"
+                               AdditionalDependencies="odbc32.lib odbccp32.lib python26.lib"
                                OutputFile=".\Release/example.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="TRUE"
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalOptions="/export:initexample"
-                               AdditionalDependencies="odbc32.lib odbccp32.lib python25_d.lib"
+                               AdditionalDependencies="odbc32.lib odbccp32.lib python26_d.lib"
                                OutputFile=".\Debug/example_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="TRUE"
index 4aedce73ac42041f3e5bf3438083a05b5eb979ce..f2ef7f95b8ae85a793f848a030edbe49f3f24c79 100644 (file)
@@ -39,8 +39,12 @@ MS_CORE_DLL.
    would be ISO C conforming). Neither renaming is feasible, so
    we just silence the warnings. */
 
+#ifndef _CRT_SECURE_NO_DEPRECATE
 #define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#ifndef _CRT_NONSTDC_NO_DEPRECATE
 #define _CRT_NONSTDC_NO_DEPRECATE 1
+#endif
 
 /* Windows CE does not have these */
 #ifndef MS_WINCE
index a77fdd4bed0c62eed33a5c40e48eed057f00e39b..748ee44f7f8cd78bd451d1ca07ff623f7e9dff65 100644 (file)
@@ -4,6 +4,7 @@
        Version="7.10"
        Name="_ctypes"
        ProjectGUID="{F22F40F4-D318-40DC-96B3-88DC81CE0894}"
+       RootNamespace="_ctypes"
        Keyword="Win32Proj">
        <Platforms>
                <Platform
                        CharacterSet="2">
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_OPTERON"
+                               AdditionalOptions=" /USECL:MS_OPTERON /GS-"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\_ctypes\libffi_msvc"
                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
                </File>
                <File
                        RelativePath="..\Modules\_ctypes\libffi_msvc\win32.c">
+                       <FileConfiguration
+                               Name="ReleaseAMD64|Win32"
+                               ExcludedFromBuild="TRUE">
+                               <Tool
+                                       Name="VCCLCompilerTool"/>
+                       </FileConfiguration>
+               </File>
+               <File
+                       RelativePath="..\Modules\_ctypes\libffi_msvc\win64.asm">
+                       <FileConfiguration
+                               Name="Debug|Win32"
+                               ExcludedFromBuild="TRUE">
+                               <Tool
+                                       Name="VCCustomBuildTool"/>
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="Release|Win32"
+                               ExcludedFromBuild="TRUE">
+                               <Tool
+                                       Name="VCCustomBuildTool"/>
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="ReleaseAMD64|Win32">
+                               <Tool
+                                       Name="VCCustomBuildTool"
+                                       CommandLine="amd64_ml64 /nologo /c /Fo &quot;$(IntDir)\win64.obj&quot; &quot;$(InputPath)&quot;
+"
+                                       Outputs="&quot;$(IntDir)\win64.obj&quot;"/>
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="ReleaseItanium|Win32"
+                               ExcludedFromBuild="TRUE">
+                               <Tool
+                                       Name="VCCustomBuildTool"/>
+                       </FileConfiguration>
                </File>
        </Files>
        <Globals>
diff --git a/PCbuild/amd64_ml64.bat b/PCbuild/amd64_ml64.bat
new file mode 100644 (file)
index 0000000..fa9acf1
--- /dev/null
@@ -0,0 +1,17 @@
+@echo off
+rem Try to find the AMD64 assembler and call it with the supplied arguments.
+
+set MLEXE=Microsoft Platform SDK\Bin\Win64\x86\AMD64\ml64.EXE
+
+rem For the environment variables see also
+rem http://msdn.microsoft.com/library/en-us/win64/win64/wow64_implementation_details.asp
+
+if exist "%ProgramFiles%\%MLEXE%" (
+  set ML64="%ProgramFiles%\%MLEXE%"
+) else if exist "%ProgramW6432%\%MLEXE%" (
+  set ML64="%ProgramW6432%\%MLEXE%"
+) else (
+  set ML64=ml64.exe
+)
+
+%ML64% %*
index f0f71b8ab16ceb2cd1fb9b2230805064048676e8..ebaa78f7cf6a423d74354ccbef07ec2d05c3056e 100644 (file)
                <File
                        RelativePath="..\Parser\parsetok.c">
                </File>
+               <File
+                       RelativePath="..\Python\peephole.c">
+               </File>
                <File
                        RelativePath="..\Modules\posixmodule.c">
                </File>
                <File
                        RelativePath="..\Modules\sha512module.c">
                </File>
-               <File
-                       RelativePath="..\Modules\sha512module.c">
-               </File>
                <File
                        RelativePath="..\Modules\shamodule.c">
                </File>
                <File
                        RelativePath="..\Modules\signalmodule.c">
                </File>
-               <File
-                       RelativePath="..\Modules\signalmodule.c">
-               </File>
                <File
                        RelativePath="..\Objects\sliceobject.c">
                </File>
index b09f5c2b373b28a8f05c8f9c87d54686459baa5c..80b9c645ab4b736a867debf4c524fa858746a92c 100644 (file)
@@ -4,20 +4,24 @@
        Version="8,00"
        Name="_ctypes"
        ProjectGUID="{F22F40F4-D318-40DC-96B3-88DC81CE0894}"
+       RootNamespace="_ctypes"
        Keyword="Win32Proj"
        >
        <Platforms>
                <Platform
                        Name="Win32"
                />
+               <Platform
+                       Name="x64"
+               />
        </Platforms>
        <ToolFiles>
        </ToolFiles>
        <Configurations>
                <Configuration
                        Name="Debug|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-debug\_ctypes"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        CharacterSet="2"
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
-                               OutputFile="./_ctypes_d.pyd"
+                               OutputFile="$(OutDir)\_ctypes_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./_ctypes_d.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="0"
                                BaseAddress="0x1D1A0000"
-                               ImportLibrary=".\./_ctypes_d.lib"
+                               ImportLibrary=""
                                TargetMachine="1"
                        />
                        <Tool
                        />
                </Configuration>
                <Configuration
-                       Name="Release|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-release\_ctypes"
+                       Name="Debug|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        CharacterSet="2"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\_ctypes\libffi_msvc"
-                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-                               StringPooling="true"
-                               RuntimeLibrary="2"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+                               MinimalRebuild="false"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                Detect64BitPortabilityProblems="false"
-                               DebugInformationFormat="0"
+                               DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        <Tool
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
-                               OutputFile="./_ctypes.pyd"
+                               OutputFile="$(OutDir)\_ctypes_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               GenerateDebugInformation="false"
-                               ProgramDatabaseFile=".\./_ctypes.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                SubSystem="0"
-                               OptimizeReferences="0"
-                               EnableCOMDATFolding="0"
                                BaseAddress="0x1D1A0000"
-                               ImportLibrary=".\./_ctypes.lib"
-                               TargetMachine="1"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseAMD64|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory="amd64-temp-release\_ctypes"
+                       Name="Release|Win32"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        CharacterSet="2"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_OPTERON"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\_ctypes\libffi_msvc"
                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
-                               Detect64BitPortabilityProblems="true"
-                               DebugInformationFormat="3"
+                               Detect64BitPortabilityProblems="false"
+                               DebugInformationFormat="0"
                                CompileAs="0"
                        />
                        <Tool
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK /EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
-                               OutputFile="./_ctypes.pyd"
+                               AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+                               OutputFile="$(OutDir)\_ctypes.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               GenerateDebugInformation="false"
-                               ProgramDatabaseFile=".\./_ctypes.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                SubSystem="0"
                                OptimizeReferences="0"
                                EnableCOMDATFolding="0"
                                BaseAddress="0x1D1A0000"
-                               ImportLibrary=".\./_ctypes.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="1"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseItanium|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory="ia64-temp-release\_ctypes"
+                       Name="Release|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        CharacterSet="2"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_ITANIUM"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\_ctypes\libffi_msvc"
                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
-                               Detect64BitPortabilityProblems="true"
-                               DebugInformationFormat="3"
+                               Detect64BitPortabilityProblems="false"
+                               DebugInformationFormat="0"
                                CompileAs="0"
                        />
                        <Tool
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK /EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
-                               OutputFile="./_ctypes.pyd"
+                               AdditionalOptions="/EXPORT:DllGetClassObject,PRIVATE /EXPORT:DllCanUnloadNow,PRIVATE"
+                               OutputFile="$(OutDir)\_ctypes.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               GenerateDebugInformation="false"
-                               ProgramDatabaseFile=".\./_ctypes.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                SubSystem="0"
                                OptimizeReferences="0"
                                EnableCOMDATFolding="0"
                                BaseAddress="0x1D1A0000"
-                               ImportLibrary=".\./_ctypes.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
index e4503ea0be829afd4214edc50323495b9d2b5d0d..f25290196837b5b5603943041da3d05ce9562b54 100644 (file)
@@ -4,20 +4,24 @@
        Version="8,00"
        Name="_ctypes_test"
        ProjectGUID="{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}"
+       RootNamespace="_ctypes_test"
        Keyword="Win32Proj"
        >
        <Platforms>
                <Platform
                        Name="Win32"
                />
+               <Platform
+                       Name="x64"
+               />
        </Platforms>
        <ToolFiles>
        </ToolFiles>
        <Configurations>
                <Configuration
                        Name="Debug|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-debug\_ctypes_test"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes_test"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        CharacterSet="2"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               OutputFile="./_ctypes_test_d.pyd"
+                               OutputFile="$(OutDir)\_ctypes_test_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./_ctypes_test_d.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="0"
-                               ImportLibrary=".\./_ctypes_test_d.lib"
+                               ImportLibrary=""
                                TargetMachine="1"
                        />
                        <Tool
                        />
                </Configuration>
                <Configuration
-                       Name="Release|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-release\_ctypes_test"
+                       Name="Debug|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes_test"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        CharacterSet="2"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-                               StringPooling="true"
-                               RuntimeLibrary="2"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+                               MinimalRebuild="false"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                Detect64BitPortabilityProblems="true"
-                               DebugInformationFormat="0"
+                               DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        <Tool
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               OutputFile="./_ctypes_test.pyd"
+                               OutputFile="$(OutDir)/_ctypes_test_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               GenerateDebugInformation="false"
-                               ProgramDatabaseFile=".\./_ctypes_test.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                SubSystem="0"
-                               OptimizeReferences="0"
-                               EnableCOMDATFolding="0"
-                               ImportLibrary=".\./_ctypes_test.lib"
-                               TargetMachine="1"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseItanium|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory="ia64-temp-release\_ctypes_test"
+                       Name="Release|Win32"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes_test"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        CharacterSet="2"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_ITANIUM"
-                               Optimization="0"
+                               InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-                               MinimalRebuild="false"
-                               BasicRuntimeChecks="0"
-                               RuntimeLibrary="3"
-                               BufferSecurityCheck="false"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+                               StringPooling="true"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                Detect64BitPortabilityProblems="true"
-                               DebugInformationFormat="3"
+                               DebugInformationFormat="0"
                                CompileAs="0"
                        />
                        <Tool
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
-                               OutputFile="./_ctypes_test_d.pyd"
+                               OutputFile="$(OutDir)\_ctypes_test.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./_ctypes_test_d.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="0"
-                               ImportLibrary=".\./_ctypes_test_d.lib"
-                               TargetMachine="0"
+                               OptimizeReferences="0"
+                               EnableCOMDATFolding="0"
+                               ImportLibrary=""
+                               TargetMachine="1"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseAMD64|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory="amd64-temp-release\_ctypes_test"
+                       Name="Release|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_ctypes_test"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        CharacterSet="2"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_OPTERON"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC"
                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                Detect64BitPortabilityProblems="true"
-                               DebugInformationFormat="3"
+                               DebugInformationFormat="0"
                                CompileAs="0"
                        />
                        <Tool
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
-                               OutputFile="./_ctypes_test.pyd"
+                               OutputFile="$(OutDir)\_ctypes_test.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               GenerateDebugInformation="false"
-                               ProgramDatabaseFile=".\./_ctypes_test.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                SubSystem="0"
                                OptimizeReferences="0"
                                EnableCOMDATFolding="0"
-                               ImportLibrary=".\./_ctypes_test.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
index a496f7a1a27ce69ad8bbaf7bdae7d32c1712c332..d88c85fc044cd0c76ef63b430793ac2c69d2b942 100644 (file)
@@ -4,19 +4,23 @@
        Version="8,00"
        Name="_elementtree"
        ProjectGUID="{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}"
+       RootNamespace="_elementtree"
        >
        <Platforms>
                <Platform
                        Name="Win32"
                />
+               <Platform
+                       Name="x64"
+               />
        </Platforms>
        <ToolFiles>
        </ToolFiles>
        <Configurations>
                <Configuration
                        Name="Debug|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-debug\_elementtree"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_elementtree"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalDependencies="odbccp32.lib"
-                               OutputFile="./_elementtree_d.pyd"
+                               OutputFile="$(OutDir)\_elementtree_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./_elementtree_d.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1D100000"
-                               ImportLibrary=".\./_elementtree_d.lib"
+                               ImportLibrary=""
                                TargetMachine="1"
                        />
                        <Tool
                        />
                </Configuration>
                <Configuration
-                       Name="Release|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-release\_elementtree"
+                       Name="Debug|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_elementtree"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               Optimization="2"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\expat"
-                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
-                               StringPooling="true"
-                               RuntimeLibrary="2"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="_DEBUG;HAVE_EXPAT_H;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalDependencies="odbccp32.lib"
-                               OutputFile="./_elementtree.pyd"
+                               OutputFile="$(OutDir)\_elementtree_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./_elementtree.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1D100000"
-                               ImportLibrary=".\./_elementtree.lib"
-                               TargetMachine="1"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseItanium|Win32"
-                       OutputDirectory="./."
-                       IntermediateDirectory=".\ia64-temp-release\_elementtree"
+                       Name="Release|Win32"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_elementtree"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_ITANIUM"
                                Optimization="2"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\expat"
                                PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
                                AdditionalDependencies="odbccp32.lib"
-                               OutputFile="./_elementtree.pyd"
+                               OutputFile="$(OutDir)\_elementtree.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./_elementtree.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1D100000"
-                               ImportLibrary=".\./_elementtree.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="1"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseAMD64|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory="amd64-temp-release\_elementtree"
+                       Name="Release|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_elementtree"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_OPTERON /GS-"
                                Optimization="2"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC,..\Modules\expat"
                                PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;XML_NS;XML_DTD;BYTEORDER=1234;XML_CONTEXT_BYTES=1024;USE_PYEXPAT_CAPI;XML_STATIC;HAVE_MEMMOVE"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
                                BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
                                AdditionalDependencies="odbccp32.lib"
-                               OutputFile="./_elementtree.pyd"
+                               OutputFile="$(OutDir)\_elementtree.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./_elementtree.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1D100000"
-                               ImportLibrary=".\./_elementtree.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
index 125db7d1900a3fb4576bae6f61e488bf6a5518e0..ac9e0796c57f1dc8d8ab19bc70f86d2e35b0a2e4 100644 (file)
@@ -4,19 +4,23 @@
        Version="8,00"
        Name="_msi"
        ProjectGUID="{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}"
+       RootNamespace="_msi"
        >
        <Platforms>
                <Platform
                        Name="Win32"
                />
+               <Platform
+                       Name="x64"
+               />
        </Platforms>
        <ToolFiles>
        </ToolFiles>
        <Configurations>
                <Configuration
                        Name="Debug|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-debug\_msi"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_msi"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
-                               OutputFile="./_msi.pyd"
+                               OutputFile="$(OutDir)\_msi.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./_msi.pdb"
+                               ProgramDatabaseFile=""
                                BaseAddress="0x1D160000"
-                               ImportLibrary=".\./_msi.lib"
+                               ImportLibrary=""
                                TargetMachine="1"
                        />
                        <Tool
                        />
                </Configuration>
                <Configuration
-                       Name="Release|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-release\_msi"
+                       Name="Debug|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_msi"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               Optimization="2"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL"
-                               StringPooling="true"
-                               RuntimeLibrary="2"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
+                               DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        <Tool
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
-                               OutputFile="./_msi.pyd"
+                               OutputFile="$(OutDir)\_msi.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               ProgramDatabaseFile=".\./_msi.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                BaseAddress="0x1D160000"
-                               ImportLibrary=".\./_msi.lib"
-                               TargetMachine="1"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseItanium|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\ia64-temp-release\_msi"
+                       Name="Release|Win32"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_msi"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_ITANIUM"
                                Optimization="2"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC"
                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
-                               DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        <Tool
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
                                AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
-                               OutputFile="./_msi.pyd"
+                               OutputFile="$(OutDir)\_msi.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               ProgramDatabaseFile=".\./_msi.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                BaseAddress="0x1D160000"
-                               ImportLibrary=".\./_msi.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="1"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseAMD64|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory="amd64-temp-release\_msi"
+                       Name="Release|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_msi"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_OPTERON /GS-"
                                Optimization="2"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC"
                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
-                               DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        <Tool
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
-                               AdditionalDependencies="fci.lib msi.lib rpcrt4.lib bufferoverflowU.lib"
-                               OutputFile="./_msi.pyd"
+                               AdditionalDependencies="fci.lib msi.lib rpcrt4.lib"
+                               OutputFile="$(OutDir)\_msi.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               ProgramDatabaseFile=".\./_msi.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                BaseAddress="0x1D160000"
-                               ImportLibrary=".\./_msi.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
index cd26b8b191ad6d8f4a300c22e06a1766f061f2c7..3ede48f7afee0da34fef25f556a8f9053d2c55d6 100644 (file)
@@ -4,19 +4,23 @@
        Version="8,00"
        Name="_sqlite3"
        ProjectGUID="{2FF0A312-22F9-4C34-B070-842916DE27A9}"
+       RootNamespace="_sqlite3"
        >
        <Platforms>
                <Platform
                        Name="Win32"
                />
+               <Platform
+                       Name="x64"
+               />
        </Platforms>
        <ToolFiles>
        </ToolFiles>
        <Configurations>
                <Configuration
                        Name="Debug|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-debug\_sqlite3"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_sqlite3"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalDependencies="..\..\sqlite-source-3.3.4\sqlite3.lib"
-                               OutputFile="./_sqlite3_d.pyd"
+                               OutputFile="$(OutDir)\_sqlite3_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                IgnoreDefaultLibraryNames=""
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./_sqlite3_d.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1e180000"
-                               ImportLibrary=".\./_sqlite3_d.lib"
+                               ImportLibrary=""
                                TargetMachine="1"
                        />
                        <Tool
                        />
                </Configuration>
                <Configuration
-                       Name="Release|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-release\_sqlite3"
+                       Name="Debug|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_sqlite"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               Optimization="2"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include;..\PC;..\..\sqlite-source-3.3.4"
-                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;MODULE_NAME=\&quot;sqlite3\&quot;"
-                               StringPooling="true"
-                               RuntimeLibrary="2"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;MODULE_NAME=\&quot;sqlite3\&quot;"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalDependencies="..\..\sqlite-source-3.3.4\sqlite3.lib"
-                               OutputFile="./_sqlite3.pyd"
+                               OutputFile="$(OutDir)\_sqlite3_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                IgnoreDefaultLibraryNames=""
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./_sqlite3.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1e180000"
-                               ImportLibrary=".\./_sqlite3.lib"
-                               TargetMachine="1"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseItanium|Win32"
-                       OutputDirectory="./."
-                       IntermediateDirectory=".\ia64-temp-release\_sqlite3"
+                       Name="Release|Win32"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_sqlite3"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_ITANIUM"
                                Optimization="2"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include;..\PC;..\..\sqlite-source-3.3.4"
                                PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;MODULE_NAME=\&quot;sqlite3\&quot;"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
-                               AdditionalDependencies="..\..\sqlite-source-3.3.4\ia64\sqlite3.lib"
-                               OutputFile="./_sqlite3.pyd"
+                               AdditionalDependencies="..\..\sqlite-source-3.3.4\sqlite3.lib"
+                               OutputFile="$(OutDir)\_sqlite3.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                IgnoreDefaultLibraryNames=""
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./_sqlite3.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1e180000"
-                               ImportLibrary=".\./_sqlite3.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="1"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseAMD64|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory="amd64-temp-release\_sqlite3"
+                       Name="Release|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\_sqlite3"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_OPTERON"
                                Optimization="2"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include;..\PC;..\..\sqlite-source-3.3.4"
                                PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;MODULE_NAME=\&quot;sqlite3\&quot;"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
-                               AdditionalDependencies="..\..\sqlite-source-3.3.4\amd64\sqlite3.lib"
-                               OutputFile="./_sqlite3.pyd"
+                               AdditionalDependencies="..\..\sqlite-source-3.3.4\sqlite3.lib"
+                               OutputFile="$(OutDir)\_sqlite3.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                IgnoreDefaultLibraryNames=""
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./_sqlite3.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1e180000"
-                               ImportLibrary=".\./_sqlite3.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
index 4cebf45ccd8455debc898c55a2ed5ac85a657e89..85416ed39d15243741098059882476e45046b9da 100644 (file)
@@ -3,19 +3,23 @@
 #include <sys/stat.h>
 #include <stdio.h>
 
-/* This file creates the getbuildinfo.o object, by first
-   invoking subwcrev.exe (if found), and then invoking cl.exe.
-   As a side effect, it might generate PCBuild\getbuildinfo2.c
-   also. If this isn't a subversion checkout, or subwcrev isn't
-   found, it compiles ..\\Modules\\getbuildinfo.c instead.
+/* This file creates the getbuildinfo2.c file, by
+   invoking subwcrev.exe (if found).
+   If this isn't a subversion checkout, or subwcrev isn't
+   found, it copies ..\\Modules\\getbuildinfo.c instead.
+
+   A file, getbuildinfo2.h is then updated to define
+   SUBWCREV if it was a subversion checkout.
+
+   getbuildinfo2.c is part of the pythoncore project with
+   getbuildinfo2.h as a forced include.  This helps
+   VisualStudio refrain from unnecessary compiles much of the
+   time.
 
    Currently, subwcrev.exe is found from the registry entries
    of TortoiseSVN.
 
-   No attempt is made to place getbuildinfo.o into the proper
-   binary directory. This isn't necessary, as this tool is
-   invoked as a pre-link step for pythoncore, so that overwrites
-   any previous getbuildinfo.o.
+   make_buildinfo.exe is called as a pre-build step for pythoncore.
 
 */
 
@@ -40,11 +44,11 @@ int make_buildinfo2()
            type != REG_SZ)
                /* Registry corrupted */
                return 0;
-       strcat(command, "bin\\subwcrev.exe");
+       strcat_s(command, sizeof(command), "bin\\subwcrev.exe");
        if (_stat(command+1, &st) < 0)
                /* subwcrev.exe not part of the release */
                return 0;
-       strcat(command, "\" .. ..\\Modules\\getbuildinfo.c getbuildinfo2.c");
+       strcat_s(command, sizeof(command), "\" .. ..\\Modules\\getbuildinfo.c getbuildinfo2.c");
        puts(command); fflush(stdout);
        if (system(command) < 0)
                return 0;
@@ -53,40 +57,25 @@ int make_buildinfo2()
 
 int main(int argc, char*argv[])
 {
-       char command[500] = "cl.exe -c -D_WIN32 -DUSE_DL_EXPORT -D_WINDOWS -DWIN32 -D_WINDLL ";
-       int do_unlink, result;
-       if (argc != 2) {
-               fprintf(stderr, "make_buildinfo $(ConfigurationName)\n");
-               return EXIT_FAILURE;
-       }
-       if (strcmp(argv[1], "Release") == 0) {
-               strcat(command, "-MD ");
-       }
-       else if (strcmp(argv[1], "Debug") == 0) {
-               strcat(command, "-D_DEBUG -MDd ");
-       }
-       else if (strcmp(argv[1], "ReleaseItanium") == 0) {
-               strcat(command, "-MD /USECL:MS_ITANIUM ");
-       }
-       else if (strcmp(argv[1], "ReleaseAMD64") == 0) {
-               strcat(command, "-MD ");
-               strcat(command, "-MD /USECL:MS_OPTERON ");
-       }
-       else {
-               fprintf(stderr, "unsupported configuration %s\n", argv[1]);
-               return EXIT_FAILURE;
-       }
+       char command[500] = "";
+       int svn;
+       FILE *f;
 
-       if ((do_unlink = make_buildinfo2()))
-               strcat(command, "getbuildinfo2.c -DSUBWCREV ");
-       else
-               strcat(command, "..\\Modules\\getbuildinfo.c");
-       strcat(command, " -Fogetbuildinfo.o -I..\\Include -I..\\PC");
-       puts(command); fflush(stdout);
-       result = system(command);
-       if (do_unlink)
-               unlink("getbuildinfo2.c");
-       if (result < 0)
+       if (fopen_s(&f, "getbuildinfo2.h", "w"))
                return EXIT_FAILURE;
+       /* Get getbuildinfo.c from svn as getbuildinfo2.c */
+       svn = make_buildinfo2();
+       if (svn) {
+               puts("got getbuildinfo2.c from svn.  Updating getbuildinfo2.h");
+               /* yes.  make sure SUBWCREV is defined */
+               fprintf(f, "#define SUBWCREV\n");
+       } else {
+               puts("didn't get getbuildinfo2.c from svn.  Copying from Modules and clearing getbuildinfo2.h");
+               strcat_s(command, sizeof(command), "copy ..\\Modules\\getbuildinfo.c getbuildinfo2.c");
+               puts(command); fflush(stdout);
+               if (system(command) < 0)
+                       return EXIT_FAILURE;
+       }
+       fclose(f);
        return 0;
 }
\ No newline at end of file
index 5dc6bca570a34b7633ad6285eec92a1c126e043c..58ed000fe5e49f8a43b0a3123d5fc05d11382dfd 100644 (file)
@@ -4,6 +4,7 @@
        Version="8,00"
        Name="make_buildinfo"
        ProjectGUID="{C73F0EC1-358B-4177-940F-0846AC8B04CD}"
+       RootNamespace="make_buildinfo"
        Keyword="Win32Proj"
        >
        <Platforms>
@@ -40,7 +41,7 @@
                        <Tool
                                Name="VCCLCompilerTool"
                                Optimization="0"
-                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
                                MinimalRebuild="true"
                                BasicRuntimeChecks="3"
                                RuntimeLibrary="1"
                        />
                        <Tool
                                Name="VCPostBuildEventTool"
-                       />
-               </Configuration>
-               <Configuration
-                       Name="Release|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory=".\x86-temp-release\make_buildinfo"
-                       ConfigurationType="1"
-                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-                       CharacterSet="2"
-                       >
-                       <Tool
-                               Name="VCPreBuildEventTool"
-                       />
-                       <Tool
-                               Name="VCCustomBuildTool"
-                       />
-                       <Tool
-                               Name="VCXMLDataGeneratorTool"
-                       />
-                       <Tool
-                               Name="VCWebServiceProxyGeneratorTool"
-                       />
-                       <Tool
-                               Name="VCMIDLTool"
-                       />
-                       <Tool
-                               Name="VCCLCompilerTool"
-                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
-                               RuntimeLibrary="0"
-                               UsePrecompiledHeader="0"
-                               WarningLevel="3"
-                               Detect64BitPortabilityProblems="true"
-                               DebugInformationFormat="3"
-                       />
-                       <Tool
-                               Name="VCManagedResourceCompilerTool"
-                       />
-                       <Tool
-                               Name="VCResourceCompilerTool"
-                       />
-                       <Tool
-                               Name="VCPreLinkEventTool"
-                       />
-                       <Tool
-                               Name="VCLinkerTool"
-                               OutputFile="$(OutDir)/make_buildinfo.exe"
-                               LinkIncremental="1"
-                               GenerateDebugInformation="true"
-                               SubSystem="1"
-                               OptimizeReferences="2"
-                               EnableCOMDATFolding="2"
-                               TargetMachine="1"
-                       />
-                       <Tool
-                               Name="VCALinkTool"
-                       />
-                       <Tool
-                               Name="VCManifestTool"
-                       />
-                       <Tool
-                               Name="VCXDCMakeTool"
-                       />
-                       <Tool
-                               Name="VCBscMakeTool"
-                       />
-                       <Tool
-                               Name="VCFxCopTool"
-                       />
-                       <Tool
-                               Name="VCAppVerifierTool"
-                       />
-                       <Tool
-                               Name="VCWebDeploymentTool"
-                       />
-                       <Tool
-                               Name="VCPostBuildEventTool"
+                               Description="Making getbuildinfo2.c"
+                               CommandLine="$(TargetPath)"
                        />
                </Configuration>
        </Configurations>
index 9f4762687310abf0dafd4b66f3d8f7d288c519ba..35d65a066459ae02d5ff0bb573c6499efdf36724 100644 (file)
@@ -2,8 +2,8 @@ Microsoft Visual Studio Solution File, Format Version 9.00
 # Visual Studio 2005
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore.vcproj", "{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"
        ProjectSection(ProjectDependencies) = postProject
-               {C73F0EC1-358B-4177-940F-0846AC8B04CD} = {C73F0EC1-358B-4177-940F-0846AC8B04CD}
                {F0E0541E-F17D-430B-97C4-93ADF0DD284E} = {F0E0541E-F17D-430B-97C4-93ADF0DD284E}
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD} = {C73F0EC1-358B-4177-940F-0846AC8B04CD}
        EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw", "pythonw.vcproj", "{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"
@@ -61,137 +61,244 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
                readme.txt = readme.txt
        EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore_pgo", "pythoncore_pgo.vcproj", "{8B59C1FF-2439-4BE9-9F24-84D4982D28D4}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"
        ProjectSection(ProjectDependencies) = postProject
                {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
        EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_versioninfo", "make_versioninfo.vcproj", "{F0E0541E-F17D-430B-97C4-93ADF0DD284E}"
 EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
                Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
+               PGIRelease|Win32 = PGIRelease|Win32
+               PGIRelease|x64 = PGIRelease|x64
+               PGORelease|Win32 = PGORelease|Win32
+               PGORelease|x64 = PGORelease|x64
                Release|Win32 = Release|Win32
-               ReleaseAMD64|Win32 = ReleaseAMD64|Win32
-               ReleaseItanium|Win32 = ReleaseItanium|Win32
+               Release|x64 = Release|x64
        EndGlobalSection
        GlobalSection(ProjectConfigurationPlatforms) = postSolution
                {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.ActiveCfg = Debug|Win32
                {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|Win32.Build.0 = Debug|Win32
+               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.ActiveCfg = Debug|x64
+               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Debug|x64.Build.0 = Debug|x64
+               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGIRelease|Win32.ActiveCfg = PGIRelease|Win32
+               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGIRelease|Win32.Build.0 = PGIRelease|Win32
+               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGIRelease|x64.ActiveCfg = PGIRelease|x64
+               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGIRelease|x64.Build.0 = PGIRelease|x64
+               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGORelease|Win32.ActiveCfg = PGORelease|Win32
+               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGORelease|Win32.Build.0 = PGORelease|Win32
+               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGORelease|x64.ActiveCfg = PGORelease|x64
+               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.PGORelease|x64.Build.0 = PGORelease|x64
                {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.ActiveCfg = Release|Win32
                {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|Win32.Build.0 = Release|Win32
-               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
-               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
-               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
-               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.ActiveCfg = Release|x64
+               {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}.Release|x64.Build.0 = Release|x64
                {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.ActiveCfg = Debug|Win32
                {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|Win32.Build.0 = Debug|Win32
+               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.ActiveCfg = Debug|x64
+               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Debug|x64.Build.0 = Debug|x64
+               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGIRelease|Win32.ActiveCfg = Release|Win32
+               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGIRelease|Win32.Build.0 = Release|Win32
+               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGIRelease|x64.ActiveCfg = Release|x64
+               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGIRelease|x64.Build.0 = Release|x64
+               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGORelease|Win32.ActiveCfg = Release|Win32
+               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGORelease|Win32.Build.0 = Release|Win32
+               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGORelease|x64.ActiveCfg = Release|x64
+               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.PGORelease|x64.Build.0 = Release|x64
                {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.ActiveCfg = Release|Win32
                {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|Win32.Build.0 = Release|Win32
-               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
-               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
-               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
-               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.ActiveCfg = Release|x64
+               {F4229CC3-873C-49AE-9729-DD308ED4CD4A}.Release|x64.Build.0 = Release|x64
                {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Debug|Win32.ActiveCfg = Debug|Win32
                {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Debug|Win32.Build.0 = Debug|Win32
+               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Debug|x64.ActiveCfg = Debug|x64
+               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Debug|x64.Build.0 = Debug|x64
+               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGIRelease|Win32.ActiveCfg = Release|Win32
+               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGIRelease|Win32.Build.0 = Release|Win32
+               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGIRelease|x64.ActiveCfg = Release|x64
+               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGIRelease|x64.Build.0 = Release|x64
+               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGORelease|Win32.ActiveCfg = Release|Win32
+               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGORelease|Win32.Build.0 = Release|Win32
+               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGORelease|x64.ActiveCfg = Release|x64
+               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.PGORelease|x64.Build.0 = Release|x64
                {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Release|Win32.ActiveCfg = Release|Win32
                {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Release|Win32.Build.0 = Release|Win32
-               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
-               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
-               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
-               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Release|x64.ActiveCfg = Release|x64
+               {97239A56-DBC0-41D2-BC14-C87D9B97D63B}.Release|x64.Build.0 = Release|x64
                {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Debug|Win32.ActiveCfg = Debug|Win32
                {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Debug|Win32.Build.0 = Debug|Win32
+               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Debug|x64.ActiveCfg = Debug|x64
+               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Debug|x64.Build.0 = Debug|x64
+               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGIRelease|Win32.ActiveCfg = Release|Win32
+               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGIRelease|Win32.Build.0 = Release|Win32
+               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGIRelease|x64.ActiveCfg = Release|x64
+               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGIRelease|x64.Build.0 = Release|x64
+               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGORelease|Win32.ActiveCfg = Release|Win32
+               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGORelease|Win32.Build.0 = Release|Win32
+               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGORelease|x64.ActiveCfg = Release|x64
+               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.PGORelease|x64.Build.0 = Release|x64
                {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Release|Win32.ActiveCfg = Release|Win32
                {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Release|Win32.Build.0 = Release|Win32
-               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
-               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
-               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
-               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Release|x64.ActiveCfg = Release|x64
+               {FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}.Release|x64.Build.0 = Release|x64
                {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.ActiveCfg = Debug|Win32
                {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|Win32.Build.0 = Debug|Win32
+               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.ActiveCfg = Debug|x64
+               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Debug|x64.Build.0 = Debug|x64
+               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGIRelease|Win32.ActiveCfg = Release|Win32
+               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGIRelease|Win32.Build.0 = Release|Win32
+               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGIRelease|x64.ActiveCfg = Release|x64
+               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGIRelease|x64.Build.0 = Release|x64
+               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGORelease|Win32.ActiveCfg = Release|Win32
+               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGORelease|Win32.Build.0 = Release|Win32
+               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGORelease|x64.ActiveCfg = Release|x64
+               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.PGORelease|x64.Build.0 = Release|x64
                {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.ActiveCfg = Release|Win32
                {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|Win32.Build.0 = Release|Win32
-               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.ReleaseAMD64|Win32.ActiveCfg = Release|Win32
-               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.ReleaseItanium|Win32.ActiveCfg = Release|Win32
+               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.ActiveCfg = Release|x64
+               {E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}.Release|x64.Build.0 = Release|x64
                {51F35FAE-FB92-4B2C-9187-1542C065AD77}.Debug|Win32.ActiveCfg = Debug|Win32
                {51F35FAE-FB92-4B2C-9187-1542C065AD77}.Debug|Win32.Build.0 = Debug|Win32
+               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.Debug|x64.ActiveCfg = Debug|x64
+               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.Debug|x64.Build.0 = Debug|x64
+               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGIRelease|Win32.ActiveCfg = Release|Win32
+               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGIRelease|Win32.Build.0 = Release|Win32
+               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGIRelease|x64.ActiveCfg = Release|x64
+               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGIRelease|x64.Build.0 = Release|x64
+               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGORelease|Win32.ActiveCfg = Release|Win32
+               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGORelease|Win32.Build.0 = Release|Win32
+               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGORelease|x64.ActiveCfg = Release|x64
+               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.PGORelease|x64.Build.0 = Release|x64
                {51F35FAE-FB92-4B2C-9187-1542C065AD77}.Release|Win32.ActiveCfg = Release|Win32
                {51F35FAE-FB92-4B2C-9187-1542C065AD77}.Release|Win32.Build.0 = Release|Win32
-               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
-               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
-               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
-               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.Release|x64.ActiveCfg = Release|x64
+               {51F35FAE-FB92-4B2C-9187-1542C065AD77}.Release|x64.Build.0 = Release|x64
                {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Debug|Win32.ActiveCfg = Debug|Win32
                {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Debug|Win32.Build.0 = Debug|Win32
+               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Debug|x64.ActiveCfg = Debug|x64
+               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Debug|x64.Build.0 = Debug|x64
+               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGIRelease|Win32.ActiveCfg = Release|Win32
+               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGIRelease|Win32.Build.0 = Release|Win32
+               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGIRelease|x64.ActiveCfg = Release|x64
+               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGIRelease|x64.Build.0 = Release|x64
+               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGORelease|Win32.ActiveCfg = Release|Win32
+               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGORelease|Win32.Build.0 = Release|Win32
+               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGORelease|x64.ActiveCfg = Release|x64
+               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.PGORelease|x64.Build.0 = Release|x64
                {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Release|Win32.ActiveCfg = Release|Win32
                {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Release|Win32.Build.0 = Release|Win32
-               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
-               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
-               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
-               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Release|x64.ActiveCfg = Release|x64
+               {1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}.Release|x64.Build.0 = Release|x64
                {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.ActiveCfg = Debug|Win32
                {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|Win32.Build.0 = Debug|Win32
-               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.ActiveCfg = Release|Win32
-               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.Build.0 = Release|Win32
-               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseAMD64|Win32.ActiveCfg = Release|Win32
-               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseAMD64|Win32.Build.0 = Release|Win32
-               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseItanium|Win32.ActiveCfg = Release|Win32
-               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.ReleaseItanium|Win32.Build.0 = Release|Win32
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.ActiveCfg = Debug|Win32
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Debug|x64.Build.0 = Debug|Win32
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGIRelease|Win32.ActiveCfg = Debug|Win32
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGIRelease|Win32.Build.0 = Debug|Win32
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGIRelease|x64.ActiveCfg = Debug|Win32
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGORelease|Win32.ActiveCfg = Debug|Win32
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGORelease|Win32.Build.0 = Debug|Win32
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.PGORelease|x64.ActiveCfg = Debug|Win32
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.ActiveCfg = Debug|Win32
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|Win32.Build.0 = Debug|Win32
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.ActiveCfg = Debug|Win32
+               {C73F0EC1-358B-4177-940F-0846AC8B04CD}.Release|x64.Build.0 = Debug|Win32
                {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Debug|Win32.ActiveCfg = Debug|Win32
                {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Debug|Win32.Build.0 = Debug|Win32
+               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Debug|x64.ActiveCfg = Debug|x64
+               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Debug|x64.Build.0 = Debug|x64
+               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGIRelease|Win32.ActiveCfg = Release|Win32
+               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGIRelease|Win32.Build.0 = Release|Win32
+               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGIRelease|x64.ActiveCfg = Release|x64
+               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGIRelease|x64.Build.0 = Release|x64
+               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGORelease|Win32.ActiveCfg = Release|Win32
+               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGORelease|Win32.Build.0 = Release|Win32
+               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGORelease|x64.ActiveCfg = Release|x64
+               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.PGORelease|x64.Build.0 = Release|x64
                {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Release|Win32.ActiveCfg = Release|Win32
                {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Release|Win32.Build.0 = Release|Win32
-               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
-               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
-               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
-               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Release|x64.ActiveCfg = Release|x64
+               {2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}.Release|x64.Build.0 = Release|x64
                {F22F40F4-D318-40DC-96B3-88DC81CE0894}.Debug|Win32.ActiveCfg = Debug|Win32
                {F22F40F4-D318-40DC-96B3-88DC81CE0894}.Debug|Win32.Build.0 = Debug|Win32
+               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.Debug|x64.ActiveCfg = Debug|x64
+               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.Debug|x64.Build.0 = Debug|x64
+               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGIRelease|Win32.ActiveCfg = Release|Win32
+               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGIRelease|Win32.Build.0 = Release|Win32
+               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGIRelease|x64.ActiveCfg = Release|x64
+               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGIRelease|x64.Build.0 = Release|x64
+               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGORelease|Win32.ActiveCfg = Release|Win32
+               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGORelease|Win32.Build.0 = Release|Win32
+               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGORelease|x64.ActiveCfg = Release|x64
+               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.PGORelease|x64.Build.0 = Release|x64
                {F22F40F4-D318-40DC-96B3-88DC81CE0894}.Release|Win32.ActiveCfg = Release|Win32
                {F22F40F4-D318-40DC-96B3-88DC81CE0894}.Release|Win32.Build.0 = Release|Win32
-               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
-               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
+               {F22F40F4-D318-40DC-96B3-88DC81CE0894}.Release|x64.ActiveCfg = Release|x64
                {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Debug|Win32.ActiveCfg = Debug|Win32
                {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Debug|Win32.Build.0 = Debug|Win32
+               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Debug|x64.ActiveCfg = Debug|x64
+               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Debug|x64.Build.0 = Debug|x64
+               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGIRelease|Win32.ActiveCfg = Release|Win32
+               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGIRelease|Win32.Build.0 = Release|Win32
+               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGIRelease|x64.ActiveCfg = Release|x64
+               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGIRelease|x64.Build.0 = Release|x64
+               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGORelease|Win32.ActiveCfg = Release|Win32
+               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGORelease|Win32.Build.0 = Release|Win32
+               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGORelease|x64.ActiveCfg = Release|x64
+               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.PGORelease|x64.Build.0 = Release|x64
                {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Release|Win32.ActiveCfg = Release|Win32
                {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Release|Win32.Build.0 = Release|Win32
-               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
-               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
+               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Release|x64.ActiveCfg = Release|x64
+               {8CF334D9-4F82-42EB-97AF-83592C5AFD2F}.Release|x64.Build.0 = Release|x64
                {2FF0A312-22F9-4C34-B070-842916DE27A9}.Debug|Win32.ActiveCfg = Debug|Win32
                {2FF0A312-22F9-4C34-B070-842916DE27A9}.Debug|Win32.Build.0 = Debug|Win32
+               {2FF0A312-22F9-4C34-B070-842916DE27A9}.Debug|x64.ActiveCfg = Debug|x64
+               {2FF0A312-22F9-4C34-B070-842916DE27A9}.Debug|x64.Build.0 = Debug|x64
+               {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGIRelease|Win32.ActiveCfg = Release|Win32
+               {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGIRelease|Win32.Build.0 = Release|Win32
+               {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGIRelease|x64.ActiveCfg = Release|x64
+               {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGIRelease|x64.Build.0 = Release|x64
+               {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGORelease|Win32.ActiveCfg = Release|Win32
+               {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGORelease|Win32.Build.0 = Release|Win32
+               {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGORelease|x64.ActiveCfg = Release|x64
+               {2FF0A312-22F9-4C34-B070-842916DE27A9}.PGORelease|x64.Build.0 = Release|x64
                {2FF0A312-22F9-4C34-B070-842916DE27A9}.Release|Win32.ActiveCfg = Release|Win32
                {2FF0A312-22F9-4C34-B070-842916DE27A9}.Release|Win32.Build.0 = Release|Win32
-               {2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
-               {2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
-               {2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
-               {2FF0A312-22F9-4C34-B070-842916DE27A9}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
-               {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.Debug|Win32.ActiveCfg = Release|Win32
-               {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.Debug|Win32.Build.0 = Release|Win32
-               {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.Release|Win32.ActiveCfg = Release|Win32
-               {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.Release|Win32.Build.0 = Release|Win32
-               {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.ReleaseAMD64|Win32.ActiveCfg = Release|Win32
-               {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.ReleaseAMD64|Win32.Build.0 = Release|Win32
-               {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.ReleaseItanium|Win32.ActiveCfg = Release|Win32
-               {8B59C1FF-2439-4BE9-9F24-84D4982D28D4}.ReleaseItanium|Win32.Build.0 = Release|Win32
+               {2FF0A312-22F9-4C34-B070-842916DE27A9}.Release|x64.ActiveCfg = Release|x64
+               {2FF0A312-22F9-4C34-B070-842916DE27A9}.Release|x64.Build.0 = Release|x64
                {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.ActiveCfg = Debug|Win32
                {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|Win32.Build.0 = Debug|Win32
+               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.ActiveCfg = Debug|x64
+               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Debug|x64.Build.0 = Debug|x64
+               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGIRelease|Win32.ActiveCfg = Release|Win32
+               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGIRelease|Win32.Build.0 = Release|Win32
+               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGIRelease|x64.ActiveCfg = Release|x64
+               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGIRelease|x64.Build.0 = Release|x64
+               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGORelease|Win32.ActiveCfg = Release|Win32
+               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGORelease|Win32.Build.0 = Release|Win32
+               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGORelease|x64.ActiveCfg = Release|x64
+               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.PGORelease|x64.Build.0 = Release|x64
                {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.ActiveCfg = Release|Win32
                {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|Win32.Build.0 = Release|Win32
-               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseAMD64|Win32.ActiveCfg = ReleaseAMD64|Win32
-               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseAMD64|Win32.Build.0 = ReleaseAMD64|Win32
-               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseItanium|Win32.ActiveCfg = ReleaseItanium|Win32
-               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.ReleaseItanium|Win32.Build.0 = ReleaseItanium|Win32
+               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.ActiveCfg = Release|x64
+               {B11D750F-CD1F-4A96-85CE-E69A5C5259F9}.Release|x64.Build.0 = Release|x64
                {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|Win32.ActiveCfg = Debug|Win32
                {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|Win32.Build.0 = Debug|Win32
+               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|x64.ActiveCfg = Debug|Win32
+               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Debug|x64.Build.0 = Debug|Win32
+               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGIRelease|Win32.ActiveCfg = Release|Win32
+               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGIRelease|Win32.Build.0 = Release|Win32
+               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGIRelease|x64.ActiveCfg = Release|Win32
+               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGORelease|Win32.ActiveCfg = Release|Win32
+               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGORelease|Win32.Build.0 = Release|Win32
+               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.PGORelease|x64.ActiveCfg = Release|Win32
                {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|Win32.ActiveCfg = Release|Win32
                {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|Win32.Build.0 = Release|Win32
-               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseAMD64|Win32.ActiveCfg = Release|Win32
-               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseAMD64|Win32.Build.0 = Release|Win32
-               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseItanium|Win32.ActiveCfg = Release|Win32
-               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.ReleaseItanium|Win32.Build.0 = Release|Win32
+               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.ActiveCfg = Release|Win32
+               {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.Build.0 = Release|Win32
        EndGlobalSection
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE
index 555df913059ed129257a381fcbc317d07de8d929..7fa8d0475116877824d0017bc9532ce69c939c8f 100644 (file)
@@ -4,19 +4,23 @@
        Version="8,00"
        Name="python"
        ProjectGUID="{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}"
+       RootNamespace="python"
        >
        <Platforms>
                <Platform
                        Name="Win32"
                />
+               <Platform
+                       Name="x64"
+               />
        </Platforms>
        <ToolFiles>
        </ToolFiles>
        <Configurations>
                <Configuration
                        Name="Release|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-release\python"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\python"
                        ConfigurationType="1"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalDependencies="odbccp32.lib"
-                               OutputFile=".\./python.exe"
+                               OutputFile="$(OutDir)\python.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./python.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="1"
                                StackReserveSize="2000000"
                                BaseAddress="0x1d000000"
                        />
                </Configuration>
                <Configuration
-                       Name="Debug|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-debug\python"
+                       Name="Release|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\python"
                        ConfigurationType="1"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               Optimization="0"
+                               Optimization="2"
+                               InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
-                               RuntimeLibrary="3"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+                               StringPooling="true"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
-                               BrowseInformation="1"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
                                DebugInformationFormat="3"
                        />
                        <Tool
                                Name="VCResourceCompilerTool"
-                               PreprocessorDefinitions="_DEBUG"
+                               PreprocessorDefinitions="NDEBUG"
                                Culture="1033"
-                               AdditionalIncludeDirectories="..\Include"
                        />
                        <Tool
                                Name="VCPreLinkEventTool"
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalDependencies="odbccp32.lib"
-                               OutputFile="./python_d.exe"
+                               OutputFile="$(OutDir)\python.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./python_d.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="1"
                                StackReserveSize="2000000"
                                BaseAddress="0x1d000000"
-                               TargetMachine="1"
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseItanium|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\ia64-temp-release\python"
+                       Name="Debug|Win32"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\python"
                        ConfigurationType="1"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_ITANIUM /VSEXTCOMP_VERBOSE"
-                               Optimization="2"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
-                               StringPooling="true"
-                               BasicRuntimeChecks="0"
-                               RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
+                               BrowseInformation="1"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCResourceCompilerTool"
-                               PreprocessorDefinitions="NDEBUG"
+                               PreprocessorDefinitions="_DEBUG"
                                Culture="1033"
+                               AdditionalIncludeDirectories="..\Include"
                        />
                        <Tool
                                Name="VCPreLinkEventTool"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK /VSEXTCOMP_VERBOSE"
                                AdditionalDependencies="odbccp32.lib"
-                               OutputFile=".\./python.exe"
+                               OutputFile="$(OutDir)\python_d.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./python.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="1"
                                StackReserveSize="2000000"
                                BaseAddress="0x1d000000"
-                               TargetMachine="0"
+                               TargetMachine="1"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseAMD64|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory="amd64-temp-release\python"
+                       Name="Debug|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\python"
                        ConfigurationType="1"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_OPTERON"
-                               Optimization="2"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
-                               StringPooling="true"
-                               BasicRuntimeChecks="0"
-                               RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
+                               BrowseInformation="1"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCResourceCompilerTool"
-                               PreprocessorDefinitions="NDEBUG"
+                               PreprocessorDefinitions="_DEBUG"
                                Culture="1033"
+                               AdditionalIncludeDirectories="..\Include"
                        />
                        <Tool
                                Name="VCPreLinkEventTool"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
-                               AdditionalDependencies="odbccp32.lib"
-                               OutputFile=".\./python.exe"
+                               AdditionalDependencies="odbccp32.lib python26_d.lib"
+                               OutputFile="$(OutDir)\python_d.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./python.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="1"
                                StackReserveSize="2000000"
                                BaseAddress="0x1d000000"
-                               TargetMachine="0"
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
index 5fa154b1cfb1c4433e1d6aafd41019ea9ea0c9b9..f3358792fb6df01dac74f83ea8e526b908eb2fa3 100644 (file)
                <Platform
                        Name="Win32"
                />
+               <Platform
+                       Name="x64"
+               />
        </Platforms>
        <ToolFiles>
        </ToolFiles>
        <Configurations>
                <Configuration
                        Name="Release|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-release\pythoncore"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
@@ -25,6 +28,7 @@
                        >
                        <Tool
                                Name="VCPreBuildEventTool"
+                               CommandLine=""
                        />
                        <Tool
                                Name="VCCustomBuildTool"
                        />
                        <Tool
                                Name="VCPreLinkEventTool"
-                               Description="generate buildinfo"
-                               CommandLine="make_buildinfo.exe $(ConfigurationName)&#x0D;&#x0A;"
+                               CommandLine=""
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalDependencies="getbuildinfo.o"
-                               OutputFile="./python25.dll"
+                               OutputFile="$(OutDir)\python26.dll"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
                                IgnoreDefaultLibraryNames="libc"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./python25.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                LinkTimeCodeGeneration="0"
                                BaseAddress="0x1e000000"
-                               ImportLibrary=".\./python25.lib"
+                               ImportLibrary=""
                                TargetMachine="1"
                        />
                        <Tool
                                Name="VCPostBuildEventTool"
                        />
                </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
+                       ConfigurationType="2"
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="false"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                               CommandLine=""
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalOptions="/Zm200 "
+                               Optimization="2"
+                               InlineFunctionExpansion="1"
+                               WholeProgramOptimization="false"
+                               AdditionalIncludeDirectories="..\Include,..\PC"
+                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;_CRT_SECURE_NO_DEPRECATE"
+                               StringPooling="true"
+                               RuntimeLibrary="2"
+                               BufferSecurityCheck="false"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                               Detect64BitPortabilityProblems="true"
+                               DebugInformationFormat="3"
+                               CompileAs="0"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="NDEBUG"
+                               Culture="1033"
+                               AdditionalIncludeDirectories="..\Include"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                               CommandLine=""
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               OutputFile="$(OutDir)\python26.dll"
+                               LinkIncremental="1"
+                               SuppressStartupBanner="true"
+                               IgnoreDefaultLibraryNames="libc"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="0"
+                               BaseAddress="0x1e000000"
+                               ImportLibrary=""
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
                <Configuration
                        Name="Debug|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-debug\pythoncore"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalDependencies="getbuildinfo.o"
-                               OutputFile="./python25_d.dll"
+                               OutputFile="$(OutDir)\python26_d.dll"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
                                IgnoreDefaultLibraryNames="libc"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./python25_d.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1e000000"
-                               ImportLibrary=".\./python25_d.lib"
+                               ImportLibrary=""
                                TargetMachine="1"
                        />
                        <Tool
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseItanium|Win32"
-                       OutputDirectory="./."
-                       IntermediateDirectory=".\ia64-temp-release\pythoncore"
+                       Name="Debug|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
+                       ConfigurationType="2"
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="false"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalOptions="/Zm200 "
+                               Optimization="0"
+                               AdditionalIncludeDirectories="..\Include,..\PC"
+                               PreprocessorDefinitions="_DEBUG;USE_DL_EXPORT;WIN32;_WINDOWS;_CRT_SECURE_NO_DEPRECATE"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                               DebugInformationFormat="3"
+                               CompileAs="0"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="_DEBUG"
+                               Culture="1033"
+                               AdditionalIncludeDirectories="..\Include"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                               CommandLine=""
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               OutputFile="$(OutDir)\python26_d.dll"
+                               LinkIncremental="1"
+                               SuppressStartupBanner="true"
+                               IgnoreDefaultLibraryNames="libc"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
+                               SubSystem="2"
+                               BaseAddress="0x1e000000"
+                               ImportLibrary=""
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="PGIRelease|Win32"
+                       OutputDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        >
                        <Tool
                                Name="VCPreBuildEventTool"
+                               Description="Get getbuildinfo2.c"
+                               CommandLine="make_buildinfo.exe"
                        />
                        <Tool
                                Name="VCCustomBuildTool"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_ITANIUM"
+                               AdditionalOptions="/Zm200 "
                                Optimization="2"
                                InlineFunctionExpansion="1"
+                               WholeProgramOptimization="true"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT"
+                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;_CRT_SECURE_NO_DEPRECATE"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCPreLinkEventTool"
-                               Description="generate buildinfo"
-                               CommandLine="make_buildinfo.exe $(ConfigurationName)"
+                               CommandLine=""
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
-                               AdditionalDependencies="getbuildinfo.o"
-                               OutputFile="./python25.dll"
+                               OutputFile="$(OutDir)/python26.dll"
                                LinkIncremental="1"
-                               SuppressStartupBanner="false"
+                               SuppressStartupBanner="true"
                                IgnoreDefaultLibraryNames="libc"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./python25.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
+                               LinkTimeCodeGeneration="2"
                                BaseAddress="0x1e000000"
-                               ImportLibrary=".\./python25.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="1"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                        <Tool
                                Name="VCPostBuildEventTool"
+                               CommandLine=""
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseAMD64|Win32"
-                       OutputDirectory="./."
-                       IntermediateDirectory=".\amd64-temp-release\pythoncore"
+                       Name="PGIRelease|x64"
+                       OutputDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        >
                        <Tool
                                Name="VCPreBuildEventTool"
+                               Description="Get getbuildinfo2.c"
+                               CommandLine="make_buildinfo.exe"
                        />
                        <Tool
                                Name="VCCustomBuildTool"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions="/Zm200  /USECL:MS_OPTERON /GS-"
+                               AdditionalOptions="/Zm200 "
                                Optimization="2"
                                InlineFunctionExpansion="1"
+                               WholeProgramOptimization="true"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT"
+                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;_CRT_SECURE_NO_DEPRECATE"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCPreLinkEventTool"
-                               Description="generate buildinfo"
-                               CommandLine="make_buildinfo.exe $(ConfigurationName)"
+                               CommandLine=""
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
-                               AdditionalDependencies="getbuildinfo.o"
-                               OutputFile="./python25.dll"
+                               OutputFile="$(OutDir)/python26.dll"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
                                IgnoreDefaultLibraryNames="libc"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./python25.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
+                               LinkTimeCodeGeneration="2"
                                BaseAddress="0x1e000000"
-                               ImportLibrary=".\./python25.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                        <Tool
                                Name="VCPostBuildEventTool"
+                               CommandLine=""
                        />
                </Configuration>
-       </Configurations>
-       <References>
-       </References>
-       <Files>
-               <Filter
-                       Name="zlib"
+               <Configuration
+                       Name="PGORelease|Win32"
+                       OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(PlatformName)\PGIRelease\pythoncore"
+                       ConfigurationType="2"
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="false"
+                       BuildLogFile="$(OutDir)\BuildLog.htm"
+                       ExcludeBuckets="7"
                        >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalOptions="/Zm200 "
+                               Optimization="2"
+                               InlineFunctionExpansion="1"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="..\Include,..\PC"
+                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;_CRT_SECURE_NO_DEPRECATE"
+                               StringPooling="true"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                               DebugInformationFormat="3"
+                               CompileAs="0"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="NDEBUG"
+                               Culture="1033"
+                               AdditionalIncludeDirectories="..\Include"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                               CommandLine="copy $(PlatformName)\python.exe $(IntDir)&#x0D;&#x0A;$(IntDir)\python.exe ../Tools/pybench/pybench.py -n 1&#x0D;&#x0A;"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               OutputFile="$(OutDir)\python26.dll"
+                               LinkIncremental="1"
+                               SuppressStartupBanner="true"
+                               IgnoreDefaultLibraryNames="libc"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="3"
+                               ProfileGuidedDatabase="$(IntDir)\$(TargetName).pgd"
+                               BaseAddress="0x1e000000"
+                               ImportLibrary=""
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="PGORelease|x64"
+                       OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythoncore"
+                       ConfigurationType="2"
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="false"
+                       BuildLogFile="$(OutDir)\BuildLog.htm"
+                       ExcludeBuckets="7"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               AdditionalOptions="/Zm200 "
+                               Optimization="2"
+                               InlineFunctionExpansion="1"
+                               WholeProgramOptimization="true"
+                               AdditionalIncludeDirectories="..\Include,..\PC"
+                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;_CRT_SECURE_NO_DEPRECATE"
+                               StringPooling="true"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                               DebugInformationFormat="3"
+                               CompileAs="0"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="NDEBUG"
+                               Culture="1033"
+                               AdditionalIncludeDirectories="..\Include"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                               CommandLine="copy $(PlatformName)\python.exe $(IntDir)&#x0D;&#x0A;$(IntDir)\python.exe ../Tools/pybench/pybench.py -n 1&#x0D;&#x0A;"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               OutputFile="$(OutDir)\python26.dll"
+                               LinkIncremental="1"
+                               SuppressStartupBanner="true"
+                               IgnoreDefaultLibraryNames="libc"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
+                               SubSystem="2"
+                               LinkTimeCodeGeneration="3"
+                               ProfileGuidedDatabase="$(IntDir)\$(TargetName).pgd"
+                               BaseAddress="0x1e000000"
+                               ImportLibrary=""
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="zlib"
+                       >
+                       <File
+                               RelativePath="..\Modules\zlib\adler32.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Modules\zlib\compress.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Modules\zlib\crc32.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Modules\zlib\deflate.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Modules\zlib\gzio.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Modules\zlib\infback.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Modules\zlib\inffast.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Modules\zlib\inflate.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Modules\zlib\inftrees.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Modules\zlib\trees.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Modules\zlib\uncompr.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Modules\zlibmodule.c"
+                               >
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="..\Modules\zlib"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|x64"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="..\Modules\zlib"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="..\Modules\zlib"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Debug|x64"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="..\Modules\zlib"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="PGIRelease|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="..\Modules\zlib"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="PGIRelease|x64"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="..\Modules\zlib"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="PGORelease|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="..\Modules\zlib"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="PGORelease|x64"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               AdditionalIncludeDirectories="..\Modules\zlib"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\Modules\zlib\zutil.c"
+                               >
+                       </File>
+               </Filter>
+               <Filter
+                       Name="include files"
+                       >
+                       <File
+                               RelativePath="..\Include\abstract.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\asdl.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\ast.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\bitset.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\boolobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\bufferobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\cellobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\ceval.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\classobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\cobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\code.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\codecs.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\compile.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\complexobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\cStringIO.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\datetime.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\descrobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\dictobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\enumobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\errcode.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\eval.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\fileobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\floatobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\frameobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\funcobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\genobject.h"
+                               >
+                       </File>
                        <File
-                               RelativePath="..\Modules\zlib\adler32.c"
+                               RelativePath="..\Include\graminit.h"
                                >
                        </File>
                        <File
-                               RelativePath="..\Modules\zlib\compress.c"
+                               RelativePath="..\Include\grammar.h"
                                >
                        </File>
                        <File
-                               RelativePath="..\Modules\zlib\crc32.c"
+                               RelativePath="..\Include\import.h"
                                >
                        </File>
                        <File
-                               RelativePath="..\Modules\zlib\deflate.c"
+                               RelativePath="..\Include\intobject.h"
                                >
                        </File>
                        <File
-                               RelativePath="..\Modules\zlib\gzio.c"
+                               RelativePath="..\Include\intrcheck.h"
                                >
                        </File>
                        <File
-                               RelativePath="..\Modules\zlib\infback.c"
+                               RelativePath="..\Include\iterobject.h"
                                >
                        </File>
                        <File
-                               RelativePath="..\Modules\zlib\inffast.c"
+                               RelativePath="..\Include\listobject.h"
                                >
                        </File>
                        <File
-                               RelativePath="..\Modules\zlib\inflate.c"
+                               RelativePath="..\Include\longintrepr.h"
                                >
                        </File>
                        <File
-                               RelativePath="..\Modules\zlib\inftrees.c"
+                               RelativePath="..\Include\longobject.h"
                                >
                        </File>
                        <File
-                               RelativePath="..\Modules\zlib\trees.c"
+                               RelativePath="..\Include\marshal.h"
                                >
                        </File>
                        <File
-                               RelativePath="..\Modules\zlib\uncompr.c"
+                               RelativePath="..\Include\metagrammar.h"
                                >
                        </File>
                        <File
-                               RelativePath="..\Modules\zlibmodule.c"
+                               RelativePath="..\Include\methodobject.h"
                                >
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories="..\Modules\zlib"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="Debug|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories="..\Modules\zlib"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="ReleaseItanium|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories="..\Modules\zlib"
-                                       />
-                               </FileConfiguration>
-                               <FileConfiguration
-                                       Name="ReleaseAMD64|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories="..\Modules\zlib"
-                                       />
-                               </FileConfiguration>
                        </File>
                        <File
-                               RelativePath="..\Modules\zlib\zutil.c"
+                               RelativePath="..\Include\modsupport.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\moduleobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\node.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\object.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\objimpl.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\opcode.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\osdefs.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\parsetok.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\patchlevel.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pgen.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pgenheaders.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\py_curses.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pyarena.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\PC\pyconfig.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pydebug.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pyerrors.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pyexpat.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pyfpe.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pygetopt.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pymactoolbox.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pymem.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pyport.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pystate.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pystrtod.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\Python-ast.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\Python.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pythonrun.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\pythread.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\rangeobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\setobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\sliceobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\stringobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\structmember.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\structseq.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\symtable.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\sysmodule.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\timefuncs.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\token.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\traceback.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\tupleobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\ucnhash.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\unicodeobject.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\Include\weakrefobject.h"
                                >
                        </File>
                </Filter>
                        RelativePath="..\Pc\_subprocess.c"
                        >
                </File>
+               <File
+                       RelativePath="..\Modules\_typesmodule.c"
+                       >
+               </File>
                <File
                        RelativePath="..\Modules\_weakref.c"
                        >
                        RelativePath="..\Python\getargs.c"
                        >
                </File>
+               <File
+                       RelativePath=".\getbuildinfo2.c"
+                       >
+                       <FileConfiguration
+                               Name="Release|Win32"
+                               >
+                               <Tool
+                                       Name="VCCLCompilerTool"
+                                       ForcedIncludeFiles="getbuildinfo2.h"
+                               />
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="Release|x64"
+                               >
+                               <Tool
+                                       Name="VCCLCompilerTool"
+                                       ForcedIncludeFiles="getbuildinfo2.h"
+                               />
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="Debug|Win32"
+                               >
+                               <Tool
+                                       Name="VCCLCompilerTool"
+                                       ForcedIncludeFiles="getbuildinfo2.h"
+                               />
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="Debug|x64"
+                               >
+                               <Tool
+                                       Name="VCCLCompilerTool"
+                                       ForcedIncludeFiles="getbuildinfo2.h"
+                               />
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="PGIRelease|Win32"
+                               >
+                               <Tool
+                                       Name="VCCLCompilerTool"
+                                       ForcedIncludeFiles="getbuildinfo2.h"
+                               />
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="PGIRelease|x64"
+                               >
+                               <Tool
+                                       Name="VCCLCompilerTool"
+                                       ForcedIncludeFiles="getbuildinfo2.h"
+                               />
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="PGORelease|Win32"
+                               >
+                               <Tool
+                                       Name="VCCLCompilerTool"
+                                       ForcedIncludeFiles="getbuildinfo2.h"
+                               />
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="PGORelease|x64"
+                               >
+                               <Tool
+                                       Name="VCCLCompilerTool"
+                                       ForcedIncludeFiles="getbuildinfo2.h"
+                               />
+                       </FileConfiguration>
+               </File>
                <File
                        RelativePath="..\Python\getcompiler.c"
                        >
                                        AdditionalIncludeDirectories="..\Python"
                                />
                        </FileConfiguration>
+                       <FileConfiguration
+                               Name="Release|x64"
+                               >
+                               <Tool
+                                       Name="VCCLCompilerTool"
+                                       AdditionalIncludeDirectories="..\Python"
+                               />
+                       </FileConfiguration>
                        <FileConfiguration
                                Name="Debug|Win32"
                                >
                                />
                        </FileConfiguration>
                        <FileConfiguration
-                               Name="ReleaseItanium|Win32"
+                               Name="Debug|x64"
+                               >
+                               <Tool
+                                       Name="VCCLCompilerTool"
+                                       AdditionalIncludeDirectories="..\Python"
+                               />
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="PGIRelease|Win32"
+                               >
+                               <Tool
+                                       Name="VCCLCompilerTool"
+                                       AdditionalIncludeDirectories="..\Python"
+                               />
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="PGIRelease|x64"
+                               >
+                               <Tool
+                                       Name="VCCLCompilerTool"
+                                       AdditionalIncludeDirectories="..\Python"
+                               />
+                       </FileConfiguration>
+                       <FileConfiguration
+                               Name="PGORelease|Win32"
                                >
                                <Tool
                                        Name="VCCLCompilerTool"
                                />
                        </FileConfiguration>
                        <FileConfiguration
-                               Name="ReleaseAMD64|Win32"
+                               Name="PGORelease|x64"
                                >
                                <Tool
                                        Name="VCCLCompilerTool"
                        RelativePath="..\Parser\parsetok.c"
                        >
                </File>
+               <File
+                       RelativePath="..\Python\peephole.c"
+                       >
+               </File>
                <File
                        RelativePath="..\Modules\posixmodule.c"
                        >
diff --git a/PCbuild8/pythoncore_pgo.vcproj b/PCbuild8/pythoncore_pgo.vcproj
deleted file mode 100644 (file)
index 9a312ad..0000000
+++ /dev/null
@@ -1,781 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-       ProjectType="Visual C++"
-       Version="8,00"
-       Name="pythoncore_pgo"
-       ProjectGUID="{8B59C1FF-2439-4BE9-9F24-84D4982D28D4}"
-       RootNamespace="pythoncore_pgo"
-       Keyword="Win32Proj"
-       >
-       <Platforms>
-               <Platform
-                       Name="Win32"
-               />
-       </Platforms>
-       <ToolFiles>
-       </ToolFiles>
-       <Configurations>
-               <Configuration
-                       Name="Release|Win32"
-                       OutputDirectory="$(ProjectName)"
-                       IntermediateDirectory=".\x86-temp-release\$(ProjectName)"
-                       ConfigurationType="2"
-                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-                       UseOfMFC="0"
-                       ATLMinimizesCRunTimeLibraryUsage="false"
-                       >
-                       <Tool
-                               Name="VCPreBuildEventTool"
-                       />
-                       <Tool
-                               Name="VCCustomBuildTool"
-                       />
-                       <Tool
-                               Name="VCXMLDataGeneratorTool"
-                       />
-                       <Tool
-                               Name="VCWebServiceProxyGeneratorTool"
-                       />
-                       <Tool
-                               Name="VCMIDLTool"
-                       />
-                       <Tool
-                               Name="VCCLCompilerTool"
-                               AdditionalOptions="/Zm200 "
-                               Optimization="2"
-                               InlineFunctionExpansion="1"
-                               WholeProgramOptimization="true"
-                               AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;_CRT_SECURE_NO_DEPRECATE"
-                               StringPooling="true"
-                               RuntimeLibrary="2"
-                               EnableFunctionLevelLinking="true"
-                               UsePrecompiledHeader="0"
-                               WarningLevel="3"
-                               SuppressStartupBanner="true"
-                               DebugInformationFormat="3"
-                               CompileAs="0"
-                       />
-                       <Tool
-                               Name="VCManagedResourceCompilerTool"
-                       />
-                       <Tool
-                               Name="VCResourceCompilerTool"
-                               PreprocessorDefinitions="NDEBUG"
-                               Culture="1033"
-                               AdditionalIncludeDirectories="..\Include"
-                       />
-                       <Tool
-                               Name="VCPreLinkEventTool"
-                               Description="Generate buildinfo &amp; profile guided optimizations (please be patient)"
-                               CommandLine="make_buildinfo.exe $(ConfigurationName)&#x0D;&#x0A;link @$(ProjectName)_link.txt&#x0D;&#x0A;$(OutDir)\python ../Tools/pybench/pybench.py -n 1&#x0D;&#x0A;"
-                       />
-                       <Tool
-                               Name="VCLinkerTool"
-                               AdditionalDependencies="getbuildinfo.o"
-                               OutputFile="$(OutDir)/python25.dll"
-                               LinkIncremental="1"
-                               SuppressStartupBanner="true"
-                               IgnoreDefaultLibraryNames="libc"
-                               GenerateDebugInformation="true"
-                               ProgramDatabaseFile="$(OutDir)/python25.pdb"
-                               SubSystem="2"
-                               LinkTimeCodeGeneration="3"
-                               BaseAddress="0x1e000000"
-                               ImportLibrary="$(OutDir)/python25.lib"
-                               TargetMachine="1"
-                       />
-                       <Tool
-                               Name="VCALinkTool"
-                       />
-                       <Tool
-                               Name="VCManifestTool"
-                       />
-                       <Tool
-                               Name="VCXDCMakeTool"
-                       />
-                       <Tool
-                               Name="VCBscMakeTool"
-                       />
-                       <Tool
-                               Name="VCFxCopTool"
-                       />
-                       <Tool
-                               Name="VCAppVerifierTool"
-                       />
-                       <Tool
-                               Name="VCWebDeploymentTool"
-                       />
-                       <Tool
-                               Name="VCPostBuildEventTool"
-                       />
-               </Configuration>
-       </Configurations>
-       <References>
-       </References>
-       <Files>
-               <Filter
-                       Name="zlib"
-                       >
-                       <File
-                               RelativePath="..\Modules\zlib\adler32.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\Modules\zlib\compress.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\Modules\zlib\crc32.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\Modules\zlib\deflate.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\Modules\zlib\gzio.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\Modules\zlib\infback.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\Modules\zlib\inffast.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\Modules\zlib\inflate.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\Modules\zlib\inftrees.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\Modules\zlib\trees.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\Modules\zlib\uncompr.c"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\Modules\zlibmodule.c"
-                               >
-                               <FileConfiguration
-                                       Name="Release|Win32"
-                                       >
-                                       <Tool
-                                               Name="VCCLCompilerTool"
-                                               AdditionalIncludeDirectories="..\Modules\zlib"
-                                       />
-                               </FileConfiguration>
-                       </File>
-                       <File
-                               RelativePath="..\Modules\zlib\zutil.c"
-                               >
-                       </File>
-               </Filter>
-               <File
-                       RelativePath="..\Modules\_bisectmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\cjkcodecs\_codecs_cn.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\cjkcodecs\_codecs_hk.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\cjkcodecs\_codecs_iso2022.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\cjkcodecs\_codecs_jp.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\cjkcodecs\_codecs_kr.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\cjkcodecs\_codecs_tw.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\_codecsmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\_csv.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\_functoolsmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\_heapqmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\_hotshot.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\_localemodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\_lsprof.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\_randommodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\_sre.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\_struct.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Pc\_subprocess.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\_weakref.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Pc\_winreg.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\abstract.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Parser\acceler.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\arraymodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\asdl.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\ast.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\audioop.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\binascii.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Parser\bitset.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\bltinmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\boolobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\bufferobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\cellobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\ceval.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\classobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\cmathmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\cobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\codecs.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\codeobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\collectionsmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\compile.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\complexobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\PC\config.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\cPickle.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\cStringIO.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\datetimemodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\descrobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\dictobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\PC\dl_nt.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\dynload_win.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\enumobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\errnomodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\errors.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\exceptions.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\fileobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Parser\firstsets.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\floatobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\frameobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\frozen.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\funcobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\future.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\gcmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\genobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\getargs.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\getcompiler.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\getcopyright.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\getmtime.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\getopt.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\PC\getpathp.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\getplatform.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\getversion.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\graminit.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Parser\grammar.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Parser\grammar1.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\imageop.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\import.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\PC\import_nt.c"
-                       >
-                       <FileConfiguration
-                               Name="Release|Win32"
-                               >
-                               <Tool
-                                       Name="VCCLCompilerTool"
-                                       AdditionalIncludeDirectories="..\Python"
-                               />
-                       </FileConfiguration>
-               </File>
-               <File
-                       RelativePath="..\Python\importdl.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\intobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\iterobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\itertoolsmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Parser\listnode.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\listobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\longobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\main.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\marshal.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\mathmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\md5.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\md5module.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Parser\metagrammar.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\methodobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\mmapmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\modsupport.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\moduleobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\PC\msvcrtmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\cjkcodecs\multibytecodec.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Parser\myreadline.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\mysnprintf.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\mystrtoul.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Parser\node.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\object.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\obmalloc.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\operator.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Parser\parser.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\parsermodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Parser\parsetok.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\posixmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\pyarena.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\pyfpe.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\pystate.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\pystrtod.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\Python-ast.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\PCbuild8\python.exe"
-                       >
-                       <FileConfiguration
-                               Name="Release|Win32"
-                               >
-                               <Tool
-                                       Name="VCCustomBuildTool"
-                                       CommandLine="xcopy $(InputFileName)* $(OutDir) /F /I /Y&#x0D;&#x0A;"
-                                       Outputs="$(OutDir)\$(InputFileName)"
-                               />
-                       </FileConfiguration>
-               </File>
-               <File
-                       RelativePath="..\PC\python_nt.rc"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\pythonrun.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\rangeobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\rgbimgmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\rotatingtree.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\setobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\sha256module.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\sha512module.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\sha512module.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\shamodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\signalmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\signalmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\sliceobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\stringobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\stropmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\structmember.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\structseq.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\symtable.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\symtablemodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\sysmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\thread.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\threadmodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\timemodule.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Parser\tokenizer.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Python\traceback.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\tupleobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\typeobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\unicodectype.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\unicodeobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Objects\weakrefobject.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\xxsubtype.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\yuvconvert.c"
-                       >
-               </File>
-               <File
-                       RelativePath="..\Modules\zipimport.c"
-                       >
-               </File>
-       </Files>
-       <Globals>
-       </Globals>
-</VisualStudioProject>
diff --git a/PCbuild8/pythoncore_pgo_link.txt b/PCbuild8/pythoncore_pgo_link.txt
deleted file mode 100644 (file)
index cf43e6f..0000000
+++ /dev/null
@@ -1,311 +0,0 @@
-/OUT:".\pythoncore_pgo/python25.dll" /INCREMENTAL:NO /DLL /MANIFEST /MANIFESTFILE:".\x86-temp-release\pythoncore_pgo\python25.dll.intermediate.manifest" /NODEFAULTLIB:"libc" /DEBUG /PDB:".\pythoncore_pgo/python25.pdb" /SUBSYSTEM:WINDOWS /LTCG:PGINSTRUMENT /PGD:".\pythoncore_pgo\python25.pgd" /BASE:"0x1e000000" /IMPLIB:"pythoncore_pgo/python25.lib" /MACHINE:X86 getbuildinfo.o kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
-
-".\x86-temp-release\pythoncore_pgo\adler32.obj"
-
-".\x86-temp-release\pythoncore_pgo\compress.obj"
-
-".\x86-temp-release\pythoncore_pgo\crc32.obj"
-
-".\x86-temp-release\pythoncore_pgo\deflate.obj"
-
-".\x86-temp-release\pythoncore_pgo\gzio.obj"
-
-".\x86-temp-release\pythoncore_pgo\infback.obj"
-
-".\x86-temp-release\pythoncore_pgo\inffast.obj"
-
-".\x86-temp-release\pythoncore_pgo\inflate.obj"
-
-".\x86-temp-release\pythoncore_pgo\inftrees.obj"
-
-".\x86-temp-release\pythoncore_pgo\trees.obj"
-
-".\x86-temp-release\pythoncore_pgo\uncompr.obj"
-
-".\x86-temp-release\pythoncore_pgo\zlibmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\zutil.obj"
-
-".\x86-temp-release\pythoncore_pgo\_bisectmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecs_cn.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecs_hk.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecs_iso2022.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecs_jp.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecs_kr.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecs_tw.obj"
-
-".\x86-temp-release\pythoncore_pgo\_codecsmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\_csv.obj"
-
-".\x86-temp-release\pythoncore_pgo\_functoolsmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\_heapqmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\_hotshot.obj"
-
-".\x86-temp-release\pythoncore_pgo\_localemodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\_lsprof.obj"
-
-".\x86-temp-release\pythoncore_pgo\_randommodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\_sre.obj"
-
-".\x86-temp-release\pythoncore_pgo\_struct.obj"
-
-".\x86-temp-release\pythoncore_pgo\_subprocess.obj"
-
-".\x86-temp-release\pythoncore_pgo\_weakref.obj"
-
-".\x86-temp-release\pythoncore_pgo\_winreg.obj"
-
-".\x86-temp-release\pythoncore_pgo\abstract.obj"
-
-".\x86-temp-release\pythoncore_pgo\acceler.obj"
-
-".\x86-temp-release\pythoncore_pgo\arraymodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\asdl.obj"
-
-".\x86-temp-release\pythoncore_pgo\ast.obj"
-
-".\x86-temp-release\pythoncore_pgo\audioop.obj"
-
-".\x86-temp-release\pythoncore_pgo\binascii.obj"
-
-".\x86-temp-release\pythoncore_pgo\bitset.obj"
-
-".\x86-temp-release\pythoncore_pgo\bltinmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\boolobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\bufferobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\cellobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\ceval.obj"
-
-".\x86-temp-release\pythoncore_pgo\classobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\cmathmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\cobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\codecs.obj"
-
-".\x86-temp-release\pythoncore_pgo\codeobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\collectionsmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\compile.obj"
-
-".\x86-temp-release\pythoncore_pgo\complexobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\config.obj"
-
-".\x86-temp-release\pythoncore_pgo\cPickle.obj"
-
-".\x86-temp-release\pythoncore_pgo\cStringIO.obj"
-
-".\x86-temp-release\pythoncore_pgo\datetimemodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\descrobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\dictobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\dl_nt.obj"
-
-".\x86-temp-release\pythoncore_pgo\dynload_win.obj"
-
-".\x86-temp-release\pythoncore_pgo\enumobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\errnomodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\errors.obj"
-
-".\x86-temp-release\pythoncore_pgo\exceptions.obj"
-
-".\x86-temp-release\pythoncore_pgo\fileobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\firstsets.obj"
-
-".\x86-temp-release\pythoncore_pgo\floatobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\frameobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\frozen.obj"
-
-".\x86-temp-release\pythoncore_pgo\funcobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\future.obj"
-
-".\x86-temp-release\pythoncore_pgo\gcmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\genobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\getargs.obj"
-
-".\x86-temp-release\pythoncore_pgo\getcompiler.obj"
-
-".\x86-temp-release\pythoncore_pgo\getcopyright.obj"
-
-".\x86-temp-release\pythoncore_pgo\getmtime.obj"
-
-".\x86-temp-release\pythoncore_pgo\getopt.obj"
-
-".\x86-temp-release\pythoncore_pgo\getpathp.obj"
-
-".\x86-temp-release\pythoncore_pgo\getplatform.obj"
-
-".\x86-temp-release\pythoncore_pgo\getversion.obj"
-
-".\x86-temp-release\pythoncore_pgo\graminit.obj"
-
-".\x86-temp-release\pythoncore_pgo\grammar.obj"
-
-".\x86-temp-release\pythoncore_pgo\grammar1.obj"
-
-".\x86-temp-release\pythoncore_pgo\imageop.obj"
-
-".\x86-temp-release\pythoncore_pgo\import.obj"
-
-".\x86-temp-release\pythoncore_pgo\import_nt.obj"
-
-".\x86-temp-release\pythoncore_pgo\importdl.obj"
-
-".\x86-temp-release\pythoncore_pgo\intobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\iterobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\itertoolsmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\listnode.obj"
-
-".\x86-temp-release\pythoncore_pgo\listobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\longobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\main.obj"
-
-".\x86-temp-release\pythoncore_pgo\marshal.obj"
-
-".\x86-temp-release\pythoncore_pgo\mathmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\md5.obj"
-
-".\x86-temp-release\pythoncore_pgo\md5module.obj"
-
-".\x86-temp-release\pythoncore_pgo\metagrammar.obj"
-
-".\x86-temp-release\pythoncore_pgo\methodobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\mmapmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\modsupport.obj"
-
-".\x86-temp-release\pythoncore_pgo\moduleobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\msvcrtmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\multibytecodec.obj"
-
-".\x86-temp-release\pythoncore_pgo\myreadline.obj"
-
-".\x86-temp-release\pythoncore_pgo\mysnprintf.obj"
-
-".\x86-temp-release\pythoncore_pgo\mystrtoul.obj"
-
-".\x86-temp-release\pythoncore_pgo\node.obj"
-
-".\x86-temp-release\pythoncore_pgo\object.obj"
-
-".\x86-temp-release\pythoncore_pgo\obmalloc.obj"
-
-".\x86-temp-release\pythoncore_pgo\operator.obj"
-
-".\x86-temp-release\pythoncore_pgo\parser.obj"
-
-".\x86-temp-release\pythoncore_pgo\parsermodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\parsetok.obj"
-
-".\x86-temp-release\pythoncore_pgo\posixmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\pyarena.obj"
-
-".\x86-temp-release\pythoncore_pgo\pyfpe.obj"
-
-".\x86-temp-release\pythoncore_pgo\pystate.obj"
-
-".\x86-temp-release\pythoncore_pgo\pystrtod.obj"
-
-".\x86-temp-release\pythoncore_pgo\Python-ast.obj"
-
-".\x86-temp-release\pythoncore_pgo\python_nt.res"
-
-".\x86-temp-release\pythoncore_pgo\pythonrun.obj"
-
-".\x86-temp-release\pythoncore_pgo\rangeobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\rgbimgmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\rotatingtree.obj"
-
-".\x86-temp-release\pythoncore_pgo\setobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\sha256module.obj"
-
-".\x86-temp-release\pythoncore_pgo\sha512module.obj"
-
-".\x86-temp-release\pythoncore_pgo\shamodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\signalmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\sliceobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\stringobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\stropmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\structmember.obj"
-
-".\x86-temp-release\pythoncore_pgo\structseq.obj"
-
-".\x86-temp-release\pythoncore_pgo\symtable.obj"
-
-".\x86-temp-release\pythoncore_pgo\symtablemodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\sysmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\thread.obj"
-
-".\x86-temp-release\pythoncore_pgo\threadmodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\timemodule.obj"
-
-".\x86-temp-release\pythoncore_pgo\tokenizer.obj"
-
-".\x86-temp-release\pythoncore_pgo\traceback.obj"
-
-".\x86-temp-release\pythoncore_pgo\tupleobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\typeobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\unicodectype.obj"
-
-".\x86-temp-release\pythoncore_pgo\unicodeobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\weakrefobject.obj"
-
-".\x86-temp-release\pythoncore_pgo\xxsubtype.obj"
-
-".\x86-temp-release\pythoncore_pgo\yuvconvert.obj"
-
-".\x86-temp-release\pythoncore_pgo\zipimport.obj"
index 42716735c09b779a1a9cba38820e01886ae515ff..f692363c5d152635a4f4befe1ff8ef2042b6891c 100644 (file)
@@ -4,19 +4,23 @@
        Version="8,00"
        Name="pythonw"
        ProjectGUID="{F4229CC3-873C-49AE-9729-DD308ED4CD4A}"
+       RootNamespace="pythonw"
        >
        <Platforms>
                <Platform
                        Name="Win32"
                />
+               <Platform
+                       Name="x64"
+               />
        </Platforms>
        <ToolFiles>
        </ToolFiles>
        <Configurations>
                <Configuration
                        Name="Debug|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-debug\pythonw"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythonw"
                        ConfigurationType="1"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               OutputFile="./pythonw_d.exe"
+                               OutputFile="$(OutDir)\pythonw_d.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./pythonw_d.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                StackReserveSize="2000000"
                                BaseAddress="0x1d000000"
                        />
                </Configuration>
                <Configuration
-                       Name="Release|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-release\pythonw"
+                       Name="Debug|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythonw"
                        ConfigurationType="1"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               Optimization="2"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-                               StringPooling="true"
-                               RuntimeLibrary="2"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
                        />
                        <Tool
                                Name="VCResourceCompilerTool"
-                               PreprocessorDefinitions="NDEBUG"
+                               PreprocessorDefinitions="_DEBUG"
                                Culture="1033"
                        />
                        <Tool
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               OutputFile=".\./pythonw.exe"
+                               OutputFile="$(OutDir)\pythonw_d.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./pythonw.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                StackReserveSize="2000000"
                                BaseAddress="0x1d000000"
-                               TargetMachine="1"
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseItanium|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\ia64-temp-release\pythonw"
+                       Name="Release|Win32"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythonw"
                        ConfigurationType="1"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_ITANIUM"
                                Optimization="2"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC"
                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
-                               OutputFile=".\./pythonw.exe"
+                               OutputFile="$(OutDir)\pythonw.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./pythonw.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                StackReserveSize="2000000"
                                BaseAddress="0x1d000000"
-                               TargetMachine="0"
+                               TargetMachine="1"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseAMD64|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory="amd64-temp-release\pythonw"
+                       Name="Release|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\pythonw"
                        ConfigurationType="1"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_OPTERON"
                                Optimization="2"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC"
                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
-                               OutputFile=".\./pythonw.exe"
+                               OutputFile="$(OutDir)\pythonw.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./pythonw.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                StackReserveSize="2000000"
                                BaseAddress="0x1d000000"
-                               TargetMachine="0"
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
index e521fee9e0843bd58c8c57b63ebca7e428c14f86..fa4fcb54cac38c3900681599292e3f4882c97c87 100644 (file)
@@ -12,7 +12,7 @@ the "Standard" toolbar"), and build the projects.
 The proper order to build subprojects:
 
 1) pythoncore (this builds the main Python DLL and library files,
-               python25.{dll, lib} in Release mode)
+               python26.{dll, lib} in Release mode)
               NOTE:  in previous releases, this subproject was
               named after the release number, e.g. python20.
 
@@ -25,8 +25,21 @@ The proper order to build subprojects:
    to the subsystems they implement, or are running a Python core buildbot
    test slave; see SUBPROJECTS below)
 
+Binary files go into PCBuild8\Win32 or \x64 directories and don't
+interfere with each other.
+
 When using the Debug setting, the output files have a _d added to
-their name:  python25_d.dll, python_d.exe, parser_d.pyd, and so on.
+their name:  python26_d.dll, python_d.exe, parser_d.pyd, and so on.
+
+There are two special configurations for the pythoncore project and
+the solution.  These are PGIRelease and PGORelease.  They are for
+createing profile-guided optimized versions of python.dll.
+The former creates the instrumented binaries, and the latter
+runs python.exe with the instrumented python.dll on the performance
+testsuite, and creates a new, optimized, python.dll in
+PCBuild8\Win32\PGORelease, or in the x64 folder.  Note that although
+we can cross-compile x64 binaries on a 32 bit machine, we cannot
+create the PGO binaries, since they require actually running the code.
 
 SUBPROJECTS
 -----------
@@ -37,12 +50,6 @@ supporting that module unless they import the module.
 
 pythoncore
     .dll and .lib
-pythoncore_pgo
-       .dll and .lib, a variant of pythoncore that is optimized through a 
-       Profile Guided Optimization (PGO), employing pybench as the profile
-       case to optimize for. The results are produced as a python25.{dll,lib}
-       in the subfolder 'pythoncore_pgo'. To use this instead of the 
-       standard Python dll place this dll with the python.exe.
 python
     .exe
 pythonw
index 97a554b2ccbd71dfe0ccfb2775825ab341ed520c..72888cb541d23a3e29aa30ea54de31a72e04f8b0 100644 (file)
@@ -4,19 +4,23 @@
        Version="8,00"
        Name="select"
        ProjectGUID="{97239A56-DBC0-41D2-BC14-C87D9B97D63B}"
+       RootNamespace="select"
        >
        <Platforms>
                <Platform
                        Name="Win32"
                />
+               <Platform
+                       Name="x64"
+               />
        </Platforms>
        <ToolFiles>
        </ToolFiles>
        <Configurations>
                <Configuration
                        Name="Release|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-release\select"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\select"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalDependencies="wsock32.lib"
-                               OutputFile="./select.pyd"
+                               OutputFile="$(OutDir)\select.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                IgnoreDefaultLibraryNames="libc"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./select.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1D110000"
-                               ImportLibrary=".\./select.lib"
+                               ImportLibrary=""
                                TargetMachine="1"
                        />
                        <Tool
                        />
                </Configuration>
                <Configuration
-                       Name="Debug|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-debug\select"
+                       Name="Release|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\select"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               Optimization="0"
+                               Optimization="2"
+                               InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"
-                               RuntimeLibrary="3"
+                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"
+                               StringPooling="true"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalDependencies="wsock32.lib"
-                               OutputFile="./select_d.pyd"
+                               OutputFile="$(OutDir)\select.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               IgnoreDefaultLibraryNames="libc,msvcrt"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               IgnoreDefaultLibraryNames="libc"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./select_d.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1D110000"
-                               ImportLibrary=".\./select_d.lib"
-                               TargetMachine="1"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseItanium|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\ia64-temp-release\select"
+                       Name="Debug|Win32"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\select"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_ITANIUM"
-                               Optimization="2"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"
-                               StringPooling="true"
-                               BasicRuntimeChecks="0"
-                               RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
                                AdditionalDependencies="wsock32.lib"
-                               OutputFile="./select.pyd"
+                               OutputFile="$(OutDir)\select_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               IgnoreDefaultLibraryNames="libc"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               IgnoreDefaultLibraryNames="libc,msvcrt"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./select.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1D110000"
-                               ImportLibrary=".\./select.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="1"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseAMD64|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory="amd64-temp-release\select"
+                       Name="Debug|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\select"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_OPTERON"
-                               Optimization="2"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"
-                               StringPooling="true"
-                               BasicRuntimeChecks="0"
-                               RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
                                AdditionalDependencies="wsock32.lib"
-                               OutputFile="./select.pyd"
+                               OutputFile="$(OutDir)\select_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               IgnoreDefaultLibraryNames="libc"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               IgnoreDefaultLibraryNames="libc,msvcrt"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./select.pdb"
+                               ProgramDatabaseFile=""
                                SubSystem="2"
                                BaseAddress="0x1D110000"
-                               ImportLibrary=".\./select.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
index d6c375bcab13bbce3f5292f6124939ddd7f787ce..75d7483de40c50a788c8dbcf9e04f59ad6fbebe6 100644 (file)
@@ -4,19 +4,23 @@
        Version="8,00"
        Name="unicodedata"
        ProjectGUID="{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}"
+       RootNamespace="unicodedata"
        >
        <Platforms>
                <Platform
                        Name="Win32"
                />
+               <Platform
+                       Name="x64"
+               />
        </Platforms>
        <ToolFiles>
        </ToolFiles>
        <Configurations>
                <Configuration
                        Name="Release|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-release\unicodedata"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\unicodedata"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               OutputFile="./unicodedata.pyd"
+                               OutputFile="$(OutDir)\unicodedata.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               ProgramDatabaseFile=".\./unicodedata.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                BaseAddress="0x1D120000"
-                               ImportLibrary=".\./unicodedata.lib"
+                               ImportLibrary=""
                                TargetMachine="1"
                        />
                        <Tool
                        />
                </Configuration>
                <Configuration
-                       Name="Debug|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-debug\unicodedata"
+                       Name="Release|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\unicodedata"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               Optimization="0"
+                               Optimization="2"
+                               InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
-                               BasicRuntimeChecks="3"
-                               RuntimeLibrary="3"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+                               StringPooling="true"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        <Tool
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               OutputFile="./unicodedata_d.pyd"
+                               OutputFile="$(OutDir)\unicodedata.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./unicodedata_d.pdb"
+                               ProgramDatabaseFile=""
                                BaseAddress="0x1D120000"
-                               ImportLibrary=".\./unicodedata_d.lib"
-                               TargetMachine="1"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseItanium|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\ia64-temp-release\unicodedata"
+                       Name="Debug|Win32"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\unicodedata"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_ITANIUM"
-                               Optimization="2"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
-                               StringPooling="true"
-                               BasicRuntimeChecks="0"
-                               RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
-                               OutputFile="./unicodedata.pyd"
+                               OutputFile="$(OutDir)\unicodedata_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               ProgramDatabaseFile=".\./unicodedata.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                BaseAddress="0x1D120000"
-                               ImportLibrary=".\./unicodedata.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="1"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseAMD64|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory="amd64-temp-release\unicodedata"
+                       Name="Debug|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\unicodedata"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_OPTERON /GS-"
-                               Optimization="2"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
-                               StringPooling="true"
-                               BasicRuntimeChecks="0"
-                               RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MMAP_EXPORTS"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
                                DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
-                               OutputFile="./unicodedata.pyd"
+                               OutputFile="$(OutDir)\unicodedata_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               ProgramDatabaseFile=".\./unicodedata.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                BaseAddress="0x1D120000"
-                               ImportLibrary=".\./unicodedata.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
index 3539ecc49aad2bb0a4c16a16919b9a20b105b458..c159750343449168b354f29fd0e7aa44d1adca41 100644 (file)
@@ -4,19 +4,23 @@
        Version="8,00"
        Name="w9xpopen"
        ProjectGUID="{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}"
+       RootNamespace="w9xpopen"
        >
        <Platforms>
                <Platform
                        Name="Win32"
                />
+               <Platform
+                       Name="x64"
+               />
        </Platforms>
        <ToolFiles>
        </ToolFiles>
        <Configurations>
                <Configuration
                        Name="Debug|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-debug\w9xpopen"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\w9xpopen"
                        ConfigurationType="1"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               OutputFile="./w9xpopen_d.exe"
+                               OutputFile="$(OutDir)\w9xpopen_d.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./w9xpopen_d.pdb"
+                               ProgramDatabaseFile=""
                                TargetMachine="1"
                        />
                        <Tool
                                Name="VCPostBuildEventTool"
                        />
                </Configuration>
+               <Configuration
+                       Name="Debug|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\w9xpopen"
+                       ConfigurationType="1"
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="false"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                               DebugInformationFormat="3"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               OutputFile="$(OutDir)\w9xpopen_d.exe"
+                               LinkIncremental="1"
+                               SuppressStartupBanner="true"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
                <Configuration
                        Name="Release|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-release\w9xpopen"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\w9xpopen"
                        ConfigurationType="1"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               OutputFile=".\./w9xpopen.exe"
+                               OutputFile="$(OutDir)\w9xpopen.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               ProgramDatabaseFile=".\./w9xpopen.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                TargetMachine="1"
                        />
                        <Tool
                                Name="VCPostBuildEventTool"
                        />
                </Configuration>
+               <Configuration
+                       Name="Release|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\w9xpopen"
+                       ConfigurationType="1"
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="false"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               TargetEnvironment="3"
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               InlineFunctionExpansion="1"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+                               StringPooling="true"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="true"
+                               UsePrecompiledHeader="0"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               OutputFile="$(OutDir)\w9xpopen.exe"
+                               LinkIncremental="1"
+                               SuppressStartupBanner="true"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
+                               TargetMachine="17"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCWebDeploymentTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
        </Configurations>
        <References>
        </References>
index 6a84ebbe1a8498677cf936c8122a30f928761ae3..6ccb43bfbfe1b1cfa1b447d5fe2d44d6dc7b1779 100644 (file)
@@ -4,19 +4,23 @@
        Version="8,00"
        Name="winsound"
        ProjectGUID="{51F35FAE-FB92-4B2C-9187-1542C065AD77}"
+       RootNamespace="winsound"
        >
        <Platforms>
                <Platform
                        Name="Win32"
                />
+               <Platform
+                       Name="x64"
+               />
        </Platforms>
        <ToolFiles>
        </ToolFiles>
        <Configurations>
                <Configuration
                        Name="Debug|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-debug\winsound"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\winsound"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalDependencies="winmm.lib"
-                               OutputFile="./winsound_d.pyd"
+                               OutputFile="$(OutDir)\winsound_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
+                               AdditionalLibraryDirectories="$(OutDir)"
                                GenerateDebugInformation="true"
-                               ProgramDatabaseFile=".\./winsound_d.pdb"
+                               ProgramDatabaseFile=""
                                BaseAddress="0x1D160000"
-                               ImportLibrary=".\./winsound_d.lib"
+                               ImportLibrary=""
                                TargetMachine="1"
                        />
                        <Tool
                        />
                </Configuration>
                <Configuration
-                       Name="Release|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\x86-temp-release\winsound"
+                       Name="Debug|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\winsound"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               Optimization="2"
-                               InlineFunctionExpansion="1"
+                               Optimization="0"
                                AdditionalIncludeDirectories="..\Include,..\PC"
-                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"
-                               StringPooling="true"
-                               RuntimeLibrary="2"
-                               EnableFunctionLevelLinking="true"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
+                               DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        <Tool
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalDependencies="winmm.lib"
-                               OutputFile="./winsound.pyd"
+                               OutputFile="$(OutDir)\winsound_d.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               ProgramDatabaseFile=".\./winsound.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                BaseAddress="0x1D160000"
-                               ImportLibrary=".\./winsound.lib"
-                               TargetMachine="1"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseItanium|Win32"
-                       OutputDirectory=".\."
-                       IntermediateDirectory=".\ia64-temp-release\winsound"
+                       Name="Release|Win32"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\winsound"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_ITANIUM"
                                Optimization="2"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC"
                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
-                               DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        <Tool
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:IA64 /USELINK:MS_SDK"
                                AdditionalDependencies="winmm.lib"
-                               OutputFile="./winsound.pyd"
+                               OutputFile="$(OutDir)\winsound.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               ProgramDatabaseFile=".\./winsound.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                BaseAddress="0x1D160000"
-                               ImportLibrary=".\./winsound.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="1"
                        />
                        <Tool
                                Name="VCALinkTool"
                        />
                </Configuration>
                <Configuration
-                       Name="ReleaseAMD64|Win32"
-                       OutputDirectory="."
-                       IntermediateDirectory="amd64-temp-release\winsound"
+                       Name="Release|x64"
+                       OutputDirectory="$(PlatformName)"
+                       IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\winsound"
                        ConfigurationType="2"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
+                               TargetEnvironment="3"
                        />
                        <Tool
                                Name="VCCLCompilerTool"
-                               AdditionalOptions=" /USECL:MS_OPTERON /GS-"
                                Optimization="2"
                                InlineFunctionExpansion="1"
                                AdditionalIncludeDirectories="..\Include,..\PC"
                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WINSOUND_EXPORTS"
                                StringPooling="true"
-                               BasicRuntimeChecks="0"
                                RuntimeLibrary="2"
-                               BufferSecurityCheck="false"
                                EnableFunctionLevelLinking="true"
                                UsePrecompiledHeader="0"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
-                               Detect64BitPortabilityProblems="true"
-                               DebugInformationFormat="3"
                                CompileAs="0"
                        />
                        <Tool
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalOptions=" /MACHINE:AMD64 /USELINK:MS_SDK"
                                AdditionalDependencies="winmm.lib"
-                               OutputFile="./winsound.pyd"
+                               OutputFile="$(OutDir)\winsound.pyd"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
-                               ProgramDatabaseFile=".\./winsound.pdb"
+                               AdditionalLibraryDirectories="$(OutDir)"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=""
                                BaseAddress="0x1D160000"
-                               ImportLibrary=".\./winsound.lib"
-                               TargetMachine="0"
+                               ImportLibrary=""
+                               TargetMachine="17"
                        />
                        <Tool
                                Name="VCALinkTool"
index 45302ed37e185ad35dbb7ad27b28dd58e5f8422a..134e14cc314538071d67f5242d20e9c5c81dbb6a 100644 (file)
@@ -183,7 +183,7 @@ static void
 future_hack(parser_state *ps)
 {
        node *n = ps->p_stack.s_top->s_parent;
-       node *ch;
+       node *ch, *cch;
        int i;
 
        /* from __future__ import ..., must have at least 4 children */
@@ -197,15 +197,17 @@ future_hack(parser_state *ps)
        if (NCH(ch) == 1 && STR(CHILD(ch, 0)) &&
            strcmp(STR(CHILD(ch, 0)), "__future__") != 0)
                return;
-       for (i = 3; i < NCH(n); i += 2) {
-               /* XXX: assume we don't have parentheses in import:
-                       from __future__ import (x, y, z)
-               */
-               ch = CHILD(n, i);
-               if (NCH(ch) == 1)
-                       ch = CHILD(ch, 0);
-               if (NCH(ch) >= 1 && TYPE(CHILD(ch, 0)) == NAME &&
-                   strcmp(STR(CHILD(ch, 0)), "with_statement") == 0) {
+       ch = CHILD(n, 3);
+       /* ch can be a star, a parenthesis or import_as_names */
+       if (TYPE(ch) == STAR)
+               return;
+       if (TYPE(ch) == LPAR)
+               ch = CHILD(n, 4);
+       
+       for (i = 0; i < NCH(ch); i += 2) {
+               cch = CHILD(ch, i);
+               if (NCH(cch) >= 1 && TYPE(CHILD(cch, 0)) == NAME &&
+                   strcmp(STR(CHILD(cch, 0)), "with_statement") == 0) {
                        ps->p_flags |= CO_FUTURE_WITH_STATEMENT;
                        break;
                }
index 01a3051518cdc26557eb1174db6e6a89bfed6879..71bed2991976b50505e9e66b3109e35638dad7a8 100644 (file)
@@ -82,9 +82,6 @@ PyParser_ParseFileFlags(FILE *fp, const char *filename, grammar *g, int start,
        return parsetok(tok, g, start, err_ret, flags);
 }
 
-/* Parse input coming from the given tokenizer structure.
-   Return error code. */
-
 #ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD
 static char with_msg[] =
 "%s:%d: Warning: 'with' will become a reserved keyword in Python 2.6\n";
@@ -101,6 +98,9 @@ warn(const char *msg, const char *filename, int lineno)
 }
 #endif
 
+/* Parse input coming from the given tokenizer structure.
+   Return error code. */
+
 static node *
 parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
         int flags)
index 2a731060dfb5e8c8681e44483729fcbae07ce121..947ad9c3454b911a020beb43f635dfe3d12bd98b 100644 (file)
@@ -896,7 +896,7 @@ tok_nextc(register struct tok_state *tok)
                                tok->cur = tok->buf + cur;
                                tok->line_start = tok->cur;
                                /* replace "\r\n" with "\n" */
-                               /* For Mac leave the \r, giving syntax error */
+                               /* For Mac leave the \r, giving syntax error */
                                pt = tok->inp - 2;
                                if (pt >= tok->buf && *pt == '\r') {
                                        *pt++ = '\n';
index 672a715e24a95710a1a04f7e15bdc7687d705bd2..411c42ffd9cc645eb3c7172a2f188b879e5b34d8 100644 (file)
 
 #include <assert.h>
 
-/* XXX TO DO
-   - re-indent this file (should be done)
-   - internal error checking (freeing memory, etc.)
-   - syntax errors
-*/
-
 /* Data structure used internally */
 struct compiling {
     char *c_encoding; /* source encoding */
@@ -43,7 +37,7 @@ static PyObject *parsestr(const char *s, const char *encoding);
 static PyObject *parsestrplus(struct compiling *, const node *n);
 
 #ifndef LINENO
-#define LINENO(n)      ((n)->n_lineno)
+#define LINENO(n)       ((n)->n_lineno)
 #endif
 
 static identifier
@@ -68,7 +62,7 @@ ast_error(const node *n, const char *errstr)
 {
     PyObject *u = Py_BuildValue("zi", errstr, LINENO(n));
     if (!u)
-       return 0;
+        return 0;
     PyErr_SetObject(PyExc_SyntaxError, u);
     Py_DECREF(u);
     return 0;
@@ -82,36 +76,36 @@ ast_error_finish(const char *filename)
 
     assert(PyErr_Occurred());
     if (!PyErr_ExceptionMatches(PyExc_SyntaxError))
-       return;
+        return;
 
     PyErr_Fetch(&type, &value, &tback);
     errstr = PyTuple_GetItem(value, 0);
     if (!errstr)
-       return;
+        return;
     Py_INCREF(errstr);
     lineno = PyInt_AsLong(PyTuple_GetItem(value, 1));
     if (lineno == -1) {
-       Py_DECREF(errstr);
-       return;
+        Py_DECREF(errstr);
+        return;
     }
     Py_DECREF(value);
 
     loc = PyErr_ProgramText(filename, lineno);
     if (!loc) {
-       Py_INCREF(Py_None);
-       loc = Py_None;
+        Py_INCREF(Py_None);
+        loc = Py_None;
     }
     tmp = Py_BuildValue("(zlOO)", filename, lineno, Py_None, loc);
     Py_DECREF(loc);
     if (!tmp) {
-       Py_DECREF(errstr);
-       return;
+        Py_DECREF(errstr);
+        return;
     }
     value = PyTuple_Pack(2, errstr, tmp);
     Py_DECREF(errstr);
     Py_DECREF(tmp);
     if (!value)
-       return;
+        return;
     PyErr_Restore(type, value, tback);
 }
 
@@ -246,7 +240,7 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename,
             if (TYPE(CHILD(n, 0)) == NEWLINE) {
                 stmts = asdl_seq_new(1, arena);
                 if (!stmts)
-                   goto error;
+                    goto error;
                 asdl_seq_SET(stmts, 0, Pass(n->n_lineno, n->n_col_offset,
                                             arena));
                 return Interactive(stmts, arena);
@@ -256,11 +250,11 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename,
                 num = num_stmts(n);
                 stmts = asdl_seq_new(num, arena);
                 if (!stmts)
-                   goto error;
+                    goto error;
                 if (num == 1) {
-                   s = ast_for_stmt(&c, n);
-                   if (!s)
-                       goto error;
+                    s = ast_for_stmt(&c, n);
+                    if (!s)
+                        goto error;
                     asdl_seq_SET(stmts, 0, s);
                 }
                 else {
@@ -347,38 +341,38 @@ set_context(expr_ty e, expr_context_ty ctx, const node *n)
 
     switch (e->kind) {
         case Attribute_kind:
-           if (ctx == Store &&
-                   !strcmp(PyString_AS_STRING(e->v.Attribute.attr), "None")) {
-                   return ast_error(n, "assignment to None");
-           }
-           e->v.Attribute.ctx = ctx;
-           break;
+            if (ctx == Store &&
+                    !strcmp(PyString_AS_STRING(e->v.Attribute.attr), "None")) {
+                    return ast_error(n, "assignment to None");
+            }
+            e->v.Attribute.ctx = ctx;
+            break;
         case Subscript_kind:
-           e->v.Subscript.ctx = ctx;
-           break;
+            e->v.Subscript.ctx = ctx;
+            break;
         case Name_kind:
-           if (ctx == Store &&
-               !strcmp(PyString_AS_STRING(e->v.Name.id), "None")) {
-                   return ast_error(n, "assignment to None");
-           }
-           e->v.Name.ctx = ctx;
-           break;
+            if (ctx == Store &&
+                !strcmp(PyString_AS_STRING(e->v.Name.id), "None")) {
+                    return ast_error(n, "assignment to None");
+            }
+            e->v.Name.ctx = ctx;
+            break;
         case List_kind:
-           e->v.List.ctx = ctx;
-           s = e->v.List.elts;
-           break;
+            e->v.List.ctx = ctx;
+            s = e->v.List.elts;
+            break;
         case Tuple_kind:
             if (asdl_seq_LEN(e->v.Tuple.elts) == 0) 
                 return ast_error(n, "can't assign to ()");
-           e->v.Tuple.ctx = ctx;
-           s = e->v.Tuple.elts;
-           break;
+            e->v.Tuple.ctx = ctx;
+            s = e->v.Tuple.elts;
+            break;
         case Lambda_kind:
             expr_name = "lambda";
             break;
         case Call_kind:
             expr_name = "function call";
-           break;
+            break;
         case BoolOp_kind:
         case BinOp_kind:
         case UnaryOp_kind:
@@ -428,12 +422,12 @@ set_context(expr_ty e, expr_context_ty ctx, const node *n)
        context for all the contained elements.  
     */
     if (s) {
-       int i;
+        int i;
 
-       for (i = 0; i < asdl_seq_LEN(s); i++) {
-           if (!set_context((expr_ty)asdl_seq_GET(s, i), ctx, n))
-               return 0;
-       }
+        for (i = 0; i < asdl_seq_LEN(s); i++) {
+            if (!set_context((expr_ty)asdl_seq_GET(s, i), ctx, n))
+                return 0;
+        }
     }
     return 1;
 }
@@ -484,13 +478,13 @@ ast_for_comp_op(const node *n)
     */
     REQ(n, comp_op);
     if (NCH(n) == 1) {
-       n = CHILD(n, 0);
-       switch (TYPE(n)) {
+        n = CHILD(n, 0);
+        switch (TYPE(n)) {
             case LESS:
                 return Lt;
             case GREATER:
                 return Gt;
-            case EQEQUAL:                      /* == */
+            case EQEQUAL:                       /* == */
                 return Eq;
             case LESSEQUAL:
                 return LtE;
@@ -507,11 +501,11 @@ ast_for_comp_op(const node *n)
                 PyErr_Format(PyExc_SystemError, "invalid comp_op: %s",
                              STR(n));
                 return (cmpop_ty)0;
-       }
+        }
     }
     else if (NCH(n) == 2) {
-       /* handle "not in" and "is not" */
-       switch (TYPE(CHILD(n, 0))) {
+        /* handle "not in" and "is not" */
+        switch (TYPE(CHILD(n, 0))) {
             case NAME:
                 if (strcmp(STR(CHILD(n, 1)), "in") == 0)
                     return NotIn;
@@ -521,7 +515,7 @@ ast_for_comp_op(const node *n)
                 PyErr_Format(PyExc_SystemError, "invalid comp_op: %s %s",
                              STR(CHILD(n, 0)), STR(CHILD(n, 1)));
                 return (cmpop_ty)0;
-       }
+        }
     }
     PyErr_Format(PyExc_SystemError, "invalid comp_op: has %d children",
                  NCH(n));
@@ -536,10 +530,11 @@ seq_for_testlist(struct compiling *c, const node *n)
     expr_ty expression;
     int i;
     assert(TYPE(n) == testlist
-          || TYPE(n) == listmaker
-          || TYPE(n) == testlist_gexp
-          || TYPE(n) == testlist_safe
-          );
+           || TYPE(n) == listmaker
+           || TYPE(n) == testlist_gexp
+           || TYPE(n) == testlist_safe
+           || TYPE(n) == testlist1
+           );
 
     seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
     if (!seq)
@@ -567,20 +562,37 @@ compiler_complex_args(struct compiling *c, const node *n)
     if (!args)
         return NULL;
 
+    /* fpdef: NAME | '(' fplist ')'
+       fplist: fpdef (',' fpdef)* [',']
+    */
     REQ(n, fplist);
     for (i = 0; i < len; i++) {
-        const node *child = CHILD(CHILD(n, 2*i), 0);
+        const node *fpdef_node = CHILD(n, 2*i);
+        const node *child;
         expr_ty arg;
+set_name:
+        /* fpdef_node is either a NAME or an fplist */
+        child = CHILD(fpdef_node, 0);
         if (TYPE(child) == NAME) {
-               if (!strcmp(STR(child), "None")) {
-                       ast_error(child, "assignment to None");
-                       return NULL;
-                   }   
+                if (!strcmp(STR(child), "None")) {
+                        ast_error(child, "assignment to None");
+                        return NULL;
+                    }   
             arg = Name(NEW_IDENTIFIER(child), Store, LINENO(child),
                        child->n_col_offset, c->c_arena);
-           }
+            }
         else {
-            arg = compiler_complex_args(c, CHILD(CHILD(n, 2*i), 1));
+            assert(TYPE(fpdef_node) == fpdef);
+            /* fpdef_node[0] is not a name, so it must be a '(', get CHILD[1] */
+            child = CHILD(fpdef_node, 1);
+            assert(TYPE(child) == fplist);
+            /* NCH == 1 means we have (x), we need to elide the extra parens */
+            if (NCH(child) == 1) {
+                fpdef_node = CHILD(child, 0);
+                assert(TYPE(fpdef_node) == fpdef);
+                goto set_name;
+            }
+            arg = compiler_complex_args(c, child);
         }
         asdl_seq_SET(args, i, arg);
     }
@@ -731,6 +743,7 @@ ast_for_arguments(struct compiling *c, const node *n)
         ch = CHILD(n, i);
         switch (TYPE(ch)) {
             case fpdef:
+            handle_fpdef:
                 /* XXX Need to worry about checking if TYPE(CHILD(n, i+1)) is
                    anything other than EQUAL or a comma? */
                 /* XXX Should NCH(n) check be made a separate check? */
@@ -758,7 +771,11 @@ ast_for_arguments(struct compiling *c, const node *n)
                                      compiler_complex_args(c, ch));
                     } else {
                         /* def foo((x)): setup for checking NAME below. */
+                        /* Loop because there can be many parens and tuple
+                           unpacking mixed in. */
                         ch = CHILD(ch, 0);
+                        assert(TYPE(ch) == fpdef);
+                        goto handle_fpdef;
                     }
                 }
                 if (TYPE(CHILD(ch, 0)) == NAME) {
@@ -773,7 +790,7 @@ ast_for_arguments(struct compiling *c, const node *n)
                     if (!name)
                         goto error;
                     asdl_seq_SET(posargs, k++, name);
-                                         
+
                 }
                 i += 2; /* the name and the comma */
                 break;
@@ -847,15 +864,15 @@ ast_for_dotted_name(struct compiling *c, const node *n)
         return NULL;
     e = Name(id, Load, lineno, col_offset, c->c_arena);
     if (!e)
-       return NULL;
+        return NULL;
 
     for (i = 2; i < NCH(n); i+=2) {
         id = NEW_IDENTIFIER(CHILD(n, i));
-       if (!id)
-           return NULL;
-       e = Attribute(e, id, Load, lineno, col_offset, c->c_arena);
-       if (!e)
-           return NULL;
+        if (!id)
+            return NULL;
+        e = Attribute(e, id, Load, lineno, col_offset, c->c_arena);
+        if (!e)
+            return NULL;
     }
 
     return e;
@@ -874,24 +891,24 @@ ast_for_decorator(struct compiling *c, const node *n)
     
     name_expr = ast_for_dotted_name(c, CHILD(n, 1));
     if (!name_expr)
-       return NULL;
-       
+        return NULL;
+        
     if (NCH(n) == 3) { /* No arguments */
-       d = name_expr;
-       name_expr = NULL;
+        d = name_expr;
+        name_expr = NULL;
     }
     else if (NCH(n) == 5) { /* Call with no arguments */
-       d = Call(name_expr, NULL, NULL, NULL, NULL, LINENO(n),
+        d = Call(name_expr, NULL, NULL, NULL, NULL, LINENO(n),
                  n->n_col_offset, c->c_arena);
-       if (!d)
-           return NULL;
-       name_expr = NULL;
+        if (!d)
+            return NULL;
+        name_expr = NULL;
     }
     else {
-       d = ast_for_call(c, CHILD(n, 3), name_expr);
-       if (!d)
-           return NULL;
-       name_expr = NULL;
+        d = ast_for_call(c, CHILD(n, 3), name_expr);
+        if (!d)
+            return NULL;
+        name_expr = NULL;
     }
 
     return d;
@@ -908,12 +925,12 @@ ast_for_decorators(struct compiling *c, const node *n)
     decorator_seq = asdl_seq_new(NCH(n), c->c_arena);
     if (!decorator_seq)
         return NULL;
-       
+        
     for (i = 0; i < NCH(n); i++) {
         d = ast_for_decorator(c, CHILD(n, i));
-           if (!d)
-               return NULL;
-           asdl_seq_SET(decorator_seq, i, d);
+            if (!d)
+                return NULL;
+            asdl_seq_SET(decorator_seq, i, d);
     }
     return decorator_seq;
 }
@@ -931,28 +948,28 @@ ast_for_funcdef(struct compiling *c, const node *n)
     REQ(n, funcdef);
 
     if (NCH(n) == 6) { /* decorators are present */
-       decorator_seq = ast_for_decorators(c, CHILD(n, 0));
-       if (!decorator_seq)
-           return NULL;
-       name_i = 2;
+        decorator_seq = ast_for_decorators(c, CHILD(n, 0));
+        if (!decorator_seq)
+            return NULL;
+        name_i = 2;
     }
     else {
-       name_i = 1;
+        name_i = 1;
     }
 
     name = NEW_IDENTIFIER(CHILD(n, name_i));
     if (!name)
-       return NULL;
+        return NULL;
     else if (!strcmp(STR(CHILD(n, name_i)), "None")) {
-       ast_error(CHILD(n, name_i), "assignment to None");
-       return NULL;
+        ast_error(CHILD(n, name_i), "assignment to None");
+        return NULL;
     }
     args = ast_for_arguments(c, CHILD(n, name_i + 1));
     if (!args)
-       return NULL;
+        return NULL;
     body = ast_for_suite(c, CHILD(n, name_i + 3));
     if (!body)
-       return NULL;
+        return NULL;
 
     return FunctionDef(name, args, body, decorator_seq, LINENO(n),
                        n->n_col_offset, c->c_arena);
@@ -994,17 +1011,22 @@ ast_for_ifexpr(struct compiling *c, const node *n)
     assert(NCH(n) == 5);
     body = ast_for_expr(c, CHILD(n, 0));
     if (!body)
-       return NULL;
+        return NULL;
     expression = ast_for_expr(c, CHILD(n, 2));
     if (!expression)
-       return NULL;
+        return NULL;
     orelse = ast_for_expr(c, CHILD(n, 4));
     if (!orelse)
-       return NULL;
+        return NULL;
     return IfExp(expression, body, orelse, LINENO(n), n->n_col_offset,
                  c->c_arena);
 }
 
+/* XXX(nnorwitz): the listcomp and genexpr code should be refactored
+   so there is only a single version.  Possibly for loops can also re-use
+   the code.
+*/
+
 /* Count the number of 'for' loop in a list comprehension.
 
    Helper for ast_for_listcomp().
@@ -1020,14 +1042,14 @@ count_list_fors(const node *n)
     n_fors++;
     REQ(ch, list_for);
     if (NCH(ch) == 5)
-       ch = CHILD(ch, 4);
+        ch = CHILD(ch, 4);
     else
-       return n_fors;
+        return n_fors;
  count_list_iter:
     REQ(ch, list_iter);
     ch = CHILD(ch, 0);
     if (TYPE(ch) == list_for)
-       goto count_list_for;
+        goto count_list_for;
     else if (TYPE(ch) == list_if) {
         if (NCH(ch) == 3) {
             ch = CHILD(ch, 2);
@@ -1055,12 +1077,12 @@ count_list_ifs(const node *n)
  count_list_iter:
     REQ(n, list_iter);
     if (TYPE(CHILD(n, 0)) == list_for)
-       return n_ifs;
+        return n_ifs;
     n = CHILD(n, 0);
     REQ(n, list_if);
     n_ifs++;
     if (NCH(n) == 2)
-       return n_ifs;
+        return n_ifs;
     n = CHILD(n, 2);
     goto count_list_iter;
 }
@@ -1092,61 +1114,65 @@ ast_for_listcomp(struct compiling *c, const node *n)
 
     listcomps = asdl_seq_new(n_fors, c->c_arena);
     if (!listcomps)
-       return NULL;
+        return NULL;
 
     ch = CHILD(n, 1);
     for (i = 0; i < n_fors; i++) {
-       comprehension_ty lc;
-       asdl_seq *t;
+        comprehension_ty lc;
+        asdl_seq *t;
         expr_ty expression;
+        node *for_ch;
 
-       REQ(ch, list_for);
+        REQ(ch, list_for);
 
-       t = ast_for_exprlist(c, CHILD(ch, 1), Store);
+        for_ch = CHILD(ch, 1);
+        t = ast_for_exprlist(c, for_ch, Store);
         if (!t)
             return NULL;
         expression = ast_for_testlist(c, CHILD(ch, 3));
         if (!expression)
             return NULL;
 
-       if (asdl_seq_LEN(t) == 1)
-           lc = comprehension((expr_ty)asdl_seq_GET(t, 0), expression, NULL,
+        /* Check the # of children rather than the length of t, since
+           [x for x, in ... ] has 1 element in t, but still requires a Tuple. */
+        if (NCH(for_ch) == 1)
+            lc = comprehension((expr_ty)asdl_seq_GET(t, 0), expression, NULL,
                                c->c_arena);
-       else
-           lc = comprehension(Tuple(t, Store, LINENO(ch), ch->n_col_offset,
+        else
+            lc = comprehension(Tuple(t, Store, LINENO(ch), ch->n_col_offset,
                                      c->c_arena),
                                expression, NULL, c->c_arena);
         if (!lc)
             return NULL;
 
-       if (NCH(ch) == 5) {
-           int j, n_ifs;
-           asdl_seq *ifs;
+        if (NCH(ch) == 5) {
+            int j, n_ifs;
+            asdl_seq *ifs;
 
-           ch = CHILD(ch, 4);
-           n_ifs = count_list_ifs(ch);
+            ch = CHILD(ch, 4);
+            n_ifs = count_list_ifs(ch);
             if (n_ifs == -1)
                 return NULL;
 
-           ifs = asdl_seq_new(n_ifs, c->c_arena);
-           if (!ifs)
-               return NULL;
+            ifs = asdl_seq_new(n_ifs, c->c_arena);
+            if (!ifs)
+                return NULL;
 
-           for (j = 0; j < n_ifs; j++) {
+            for (j = 0; j < n_ifs; j++) {
             REQ(ch, list_iter);
-                   ch = CHILD(ch, 0);
-                   REQ(ch, list_if);
-
-               asdl_seq_SET(ifs, j, ast_for_expr(c, CHILD(ch, 1)));
-               if (NCH(ch) == 3)
-                   ch = CHILD(ch, 2);
-               }
-               /* on exit, must guarantee that ch is a list_for */
-               if (TYPE(ch) == list_iter)
-                       ch = CHILD(ch, 0);
+                    ch = CHILD(ch, 0);
+                    REQ(ch, list_if);
+
+                asdl_seq_SET(ifs, j, ast_for_expr(c, CHILD(ch, 1)));
+                if (NCH(ch) == 3)
+                    ch = CHILD(ch, 2);
+                }
+                /* on exit, must guarantee that ch is a list_for */
+                if (TYPE(ch) == list_iter)
+                        ch = CHILD(ch, 0);
             lc->ifs = ifs;
-           }
-           asdl_seq_SET(listcomps, i, lc);
+            }
+            asdl_seq_SET(listcomps, i, lc);
     }
 
     return ListComp(elt, listcomps, LINENO(n), n->n_col_offset, c->c_arena);
@@ -1161,34 +1187,34 @@ ast_for_listcomp(struct compiling *c, const node *n)
 static int
 count_gen_fors(const node *n)
 {
-       int n_fors = 0;
-       node *ch = CHILD(n, 1);
+        int n_fors = 0;
+        node *ch = CHILD(n, 1);
 
  count_gen_for:
-       n_fors++;
-       REQ(ch, gen_for);
-       if (NCH(ch) == 5)
-               ch = CHILD(ch, 4);
-       else
-               return n_fors;
+        n_fors++;
+        REQ(ch, gen_for);
+        if (NCH(ch) == 5)
+                ch = CHILD(ch, 4);
+        else
+                return n_fors;
  count_gen_iter:
-       REQ(ch, gen_iter);
-       ch = CHILD(ch, 0);
-       if (TYPE(ch) == gen_for)
-               goto count_gen_for;
-       else if (TYPE(ch) == gen_if) {
-               if (NCH(ch) == 3) {
-                       ch = CHILD(ch, 2);
-                       goto count_gen_iter;
-               }
-               else
-                   return n_fors;
-       }
-
-       /* Should never be reached */
-       PyErr_SetString(PyExc_SystemError,
-                       "logic error in count_gen_fors");
-       return -1;
+        REQ(ch, gen_iter);
+        ch = CHILD(ch, 0);
+        if (TYPE(ch) == gen_for)
+                goto count_gen_for;
+        else if (TYPE(ch) == gen_if) {
+                if (NCH(ch) == 3) {
+                        ch = CHILD(ch, 2);
+                        goto count_gen_iter;
+                }
+                else
+                    return n_fors;
+        }
+
+        /* Should never be reached */
+        PyErr_SetString(PyExc_SystemError,
+                        "logic error in count_gen_fors");
+        return -1;
 }
 
 /* Count the number of 'if' statements in a generator expression.
@@ -1199,19 +1225,19 @@ count_gen_fors(const node *n)
 static int
 count_gen_ifs(const node *n)
 {
-       int n_ifs = 0;
-
-       while (1) {
-               REQ(n, gen_iter);
-               if (TYPE(CHILD(n, 0)) == gen_for)
-                       return n_ifs;
-               n = CHILD(n, 0);
-               REQ(n, gen_if);
-               n_ifs++;
-               if (NCH(n) == 2)
-                       return n_ifs;
-               n = CHILD(n, 2);
-       }
+        int n_ifs = 0;
+
+        while (1) {
+                REQ(n, gen_iter);
+                if (TYPE(CHILD(n, 0)) == gen_for)
+                        return n_ifs;
+                n = CHILD(n, 0);
+                REQ(n, gen_if);
+                n_ifs++;
+                if (NCH(n) == 2)
+                        return n_ifs;
+                n = CHILD(n, 2);
+        }
 }
 
 /* TODO(jhylton): Combine with list comprehension code? */
@@ -1219,7 +1245,7 @@ static expr_ty
 ast_for_genexp(struct compiling *c, const node *n)
 {
     /* testlist_gexp: test ( gen_for | (',' test)* [','] )
-       argument: [test '='] test [gen_for]      # Really [keyword '='] test */
+       argument: [test '='] test [gen_for]       # Really [keyword '='] test */
     expr_ty elt;
     asdl_seq *genexps;
     int i, n_fors;
@@ -1245,17 +1271,21 @@ ast_for_genexp(struct compiling *c, const node *n)
         comprehension_ty ge;
         asdl_seq *t;
         expr_ty expression;
+        node *for_ch;
         
         REQ(ch, gen_for);
         
-        t = ast_for_exprlist(c, CHILD(ch, 1), Store);
+        for_ch = CHILD(ch, 1);
+        t = ast_for_exprlist(c, for_ch, Store);
         if (!t)
             return NULL;
         expression = ast_for_expr(c, CHILD(ch, 3));
         if (!expression)
             return NULL;
 
-        if (asdl_seq_LEN(t) == 1)
+        /* Check the # of children rather than the length of t, since
+           (x for x, in ...) has 1 element in t, but still requires a Tuple. */
+        if (NCH(for_ch) == 1)
             ge = comprehension((expr_ty)asdl_seq_GET(t, 0), expression,
                                NULL, c->c_arena);
         else
@@ -1312,57 +1342,57 @@ ast_for_atom(struct compiling *c, const node *n)
     
     switch (TYPE(ch)) {
     case NAME:
-       /* All names start in Load context, but may later be
-          changed. */
-       return Name(NEW_IDENTIFIER(ch), Load, LINENO(n), n->n_col_offset, c->c_arena);
+        /* All names start in Load context, but may later be
+           changed. */
+        return Name(NEW_IDENTIFIER(ch), Load, LINENO(n), n->n_col_offset, c->c_arena);
     case STRING: {
-       PyObject *str = parsestrplus(c, n);
-       if (!str)
-           return NULL;
+        PyObject *str = parsestrplus(c, n);
+        if (!str)
+            return NULL;
 
-       PyArena_AddPyObject(c->c_arena, str);
-       return Str(str, LINENO(n), n->n_col_offset, c->c_arena);
+        PyArena_AddPyObject(c->c_arena, str);
+        return Str(str, LINENO(n), n->n_col_offset, c->c_arena);
     }
     case NUMBER: {
-       PyObject *pynum = parsenumber(STR(ch));
-       if (!pynum)
-           return NULL;
+        PyObject *pynum = parsenumber(STR(ch));
+        if (!pynum)
+            return NULL;
 
-       PyArena_AddPyObject(c->c_arena, pynum);
-       return Num(pynum, LINENO(n), n->n_col_offset, c->c_arena);
+        PyArena_AddPyObject(c->c_arena, pynum);
+        return Num(pynum, LINENO(n), n->n_col_offset, c->c_arena);
     }
     case DOT:
        /* Ellipsis */
        return Ellipsis(LINENO(n), n->n_col_offset, c->c_arena);
     case LPAR: /* some parenthesized expressions */
-       ch = CHILD(n, 1);
-       
-       if (TYPE(ch) == RPAR)
-           return Tuple(NULL, Load, LINENO(n), n->n_col_offset, c->c_arena);
-       
-       if (TYPE(ch) == yield_expr)
-           return ast_for_expr(c, ch);
-       
-       if ((NCH(ch) > 1) && (TYPE(CHILD(ch, 1)) == gen_for))
-           return ast_for_genexp(c, ch);
-       
-       return ast_for_testlist_gexp(c, ch);
+        ch = CHILD(n, 1);
+        
+        if (TYPE(ch) == RPAR)
+            return Tuple(NULL, Load, LINENO(n), n->n_col_offset, c->c_arena);
+        
+        if (TYPE(ch) == yield_expr)
+            return ast_for_expr(c, ch);
+        
+        if ((NCH(ch) > 1) && (TYPE(CHILD(ch, 1)) == gen_for))
+            return ast_for_genexp(c, ch);
+        
+        return ast_for_testlist_gexp(c, ch);
     case LSQB: /* list (or list comprehension) */
-       ch = CHILD(n, 1);
-       
-       if (TYPE(ch) == RSQB)
-           return List(NULL, Load, LINENO(n), n->n_col_offset, c->c_arena);
-       
-       REQ(ch, listmaker);
-       if (NCH(ch) == 1 || TYPE(CHILD(ch, 1)) == COMMA) {
-           asdl_seq *elts = seq_for_testlist(c, ch);
-           if (!elts)
-               return NULL;
+        ch = CHILD(n, 1);
+        
+        if (TYPE(ch) == RSQB)
+            return List(NULL, Load, LINENO(n), n->n_col_offset, c->c_arena);
+        
+        REQ(ch, listmaker);
+        if (NCH(ch) == 1 || TYPE(CHILD(ch, 1)) == COMMA) {
+            asdl_seq *elts = seq_for_testlist(c, ch);
+            if (!elts)
+                return NULL;
 
-           return List(elts, Load, LINENO(n), n->n_col_offset, c->c_arena);
-       }
-       else
-           return ast_for_listcomp(c, ch);
+            return List(elts, Load, LINENO(n), n->n_col_offset, c->c_arena);
+        }
+        else
+            return ast_for_listcomp(c, ch);
     case LBRACE: {
        /* dictsetmaker: test ':' test (',' test ':' test)* [','] |
         *               test (',' test)* [',']  */
@@ -1415,8 +1445,8 @@ ast_for_atom(struct compiling *c, const node *n)
         }
     }
     default:
-       PyErr_Format(PyExc_SystemError, "unhandled atom %d", TYPE(ch));
-       return NULL;
+        PyErr_Format(PyExc_SystemError, "unhandled atom %d", TYPE(ch));
+        return NULL;
     }
 }
 
@@ -1440,31 +1470,31 @@ ast_for_slice(struct compiling *c, const node *n)
         if (!step)
             return NULL;
             
-       return Index(step, c->c_arena);
+        return Index(step, c->c_arena);
     }
 
     if (TYPE(ch) == test) {
-       lower = ast_for_expr(c, ch);
+        lower = ast_for_expr(c, ch);
         if (!lower)
             return NULL;
     }
 
     /* If there's an upper bound it's in the second or third position. */
     if (TYPE(ch) == COLON) {
-       if (NCH(n) > 1) {
-           node *n2 = CHILD(n, 1);
+        if (NCH(n) > 1) {
+            node *n2 = CHILD(n, 1);
 
-           if (TYPE(n2) == test) {
-               upper = ast_for_expr(c, n2);
+            if (TYPE(n2) == test) {
+                upper = ast_for_expr(c, n2);
                 if (!upper)
                     return NULL;
             }
-       }
+        }
     } else if (NCH(n) > 2) {
-       node *n2 = CHILD(n, 2);
+        node *n2 = CHILD(n, 2);
 
-       if (TYPE(n2) == test) {
-           upper = ast_for_expr(c, n2);
+        if (TYPE(n2) == test) {
+            upper = ast_for_expr(c, n2);
             if (!upper)
                 return NULL;
         }
@@ -1495,13 +1525,13 @@ ast_for_slice(struct compiling *c, const node *n)
 static expr_ty
 ast_for_binop(struct compiling *c, const node *n)
 {
-       /* Must account for a sequence of expressions.
-          How should A op B op C by represented?  
-          BinOp(BinOp(A, op, B), op, C).
-       */
+        /* Must account for a sequence of expressions.
+           How should A op B op C by represented?  
+           BinOp(BinOp(A, op, B), op, C).
+        */
 
-       int i, nops;
-       expr_ty expr1, expr2, result;
+        int i, nops;
+        expr_ty expr1, expr2, result;
         operator_ty newoperator;
 
         expr1 = ast_for_expr(c, CHILD(n, 0));
@@ -1516,17 +1546,17 @@ ast_for_binop(struct compiling *c, const node *n)
         if (!newoperator)
             return NULL;
 
-       result = BinOp(expr1, newoperator, expr2, LINENO(n), n->n_col_offset,
+        result = BinOp(expr1, newoperator, expr2, LINENO(n), n->n_col_offset,
                        c->c_arena);
-       if (!result)
+        if (!result)
             return NULL;
 
-       nops = (NCH(n) - 1) / 2;
-       for (i = 1; i < nops; i++) {
-               expr_ty tmp_result, tmp;
-               const node* next_oper = CHILD(n, i * 2 + 1);
+        nops = (NCH(n) - 1) / 2;
+        for (i = 1; i < nops; i++) {
+                expr_ty tmp_result, tmp;
+                const node* next_oper = CHILD(n, i * 2 + 1);
 
-               newoperator = get_operator(next_oper);
+                newoperator = get_operator(next_oper);
                 if (!newoperator)
                     return NULL;
 
@@ -1535,13 +1565,13 @@ ast_for_binop(struct compiling *c, const node *n)
                     return NULL;
 
                 tmp_result = BinOp(result, newoperator, tmp, 
-                                  LINENO(next_oper), next_oper->n_col_offset,
+                                   LINENO(next_oper), next_oper->n_col_offset,
                                    c->c_arena);
-               if (!tmp) 
-                       return NULL;
-               result = tmp_result;
-       }
-       return result;
+                if (!tmp) 
+                        return NULL;
+                result = tmp_result;
+        }
+        return result;
 }
 
 static expr_ty
@@ -1688,8 +1718,8 @@ ast_for_power(struct compiling *c, const node *n)
         tmp = ast_for_trailer(c, ch, e);
         if (!tmp)
             return NULL;
-       tmp->lineno = e->lineno;
-       tmp->col_offset = e->col_offset;
+        tmp->lineno = e->lineno;
+        tmp->col_offset = e->col_offset;
         e = tmp;
     }
     if (TYPE(CHILD(n, NCH(n) - 1)) == factor) {
@@ -1747,8 +1777,8 @@ ast_for_expr(struct compiling *c, const node *n)
                 return ast_for_lambdef(c, CHILD(n, 0));
             else if (NCH(n) > 1)
                 return ast_for_ifexpr(c, n);
-           /* Fallthrough */
-       case or_test:
+            /* Fallthrough */
+        case or_test:
         case and_test:
             if (NCH(n) == 1) {
                 n = CHILD(n, 0);
@@ -1789,7 +1819,7 @@ ast_for_expr(struct compiling *c, const node *n)
             else {
                 expr_ty expression;
                 asdl_int_seq *ops;
-               asdl_seq *cmps;
+                asdl_seq *cmps;
                 ops = asdl_int_seq_new(NCH(n) / 2, c->c_arena);
                 if (!ops)
                     return NULL;
@@ -1803,12 +1833,12 @@ ast_for_expr(struct compiling *c, const node *n)
                     newoperator = ast_for_comp_op(CHILD(n, i));
                     if (!newoperator) {
                         return NULL;
-                   }
+                    }
 
                     expression = ast_for_expr(c, CHILD(n, i + 1));
                     if (!expression) {
                         return NULL;
-                   }
+                    }
                         
                     asdl_seq_SET(ops, i / 2, newoperator);
                     asdl_seq_SET(cmps, i / 2, expression);
@@ -1816,7 +1846,7 @@ ast_for_expr(struct compiling *c, const node *n)
                 expression = ast_for_expr(c, CHILD(n, 0));
                 if (!expression) {
                     return NULL;
-               }
+                }
                     
                 return Compare(expression, ops, cmps, LINENO(n),
                                n->n_col_offset, c->c_arena);
@@ -1839,20 +1869,20 @@ ast_for_expr(struct compiling *c, const node *n)
             }
             return ast_for_binop(c, n);
         case yield_expr: {
-           expr_ty exp = NULL;
-           if (NCH(n) == 2) {
-               exp = ast_for_testlist(c, CHILD(n, 1));
-               if (!exp)
-                   return NULL;
-           }
-           return Yield(exp, LINENO(n), n->n_col_offset, c->c_arena);
-       }
+            expr_ty exp = NULL;
+            if (NCH(n) == 2) {
+                exp = ast_for_testlist(c, CHILD(n, 1));
+                if (!exp)
+                    return NULL;
+            }
+            return Yield(exp, LINENO(n), n->n_col_offset, c->c_arena);
+        }
         case factor:
             if (NCH(n) == 1) {
                 n = CHILD(n, 0);
                 goto loop;
             }
-           return ast_for_factor(c, n);
+            return ast_for_factor(c, n);
         case power:
             return ast_for_power(c, n);
         default:
@@ -1869,7 +1899,7 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func)
     /*
       arglist: (argument ',')* (argument [',']| '*' test [',' '**' test]
                | '**' test)
-      argument: [test '='] test [gen_for]       # Really [keyword '='] test
+      argument: [test '='] test [gen_for]        # Really [keyword '='] test
     */
 
     int i, nargs, nkeywords, ngens;
@@ -1883,20 +1913,20 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func)
     nkeywords = 0;
     ngens = 0;
     for (i = 0; i < NCH(n); i++) {
-       node *ch = CHILD(n, i);
-       if (TYPE(ch) == argument) {
-           if (NCH(ch) == 1)
-               nargs++;
-           else if (TYPE(CHILD(ch, 1)) == gen_for)
-               ngens++;
+        node *ch = CHILD(n, i);
+        if (TYPE(ch) == argument) {
+            if (NCH(ch) == 1)
+                nargs++;
+            else if (TYPE(CHILD(ch, 1)) == gen_for)
+                ngens++;
             else
-               nkeywords++;
-       }
+                nkeywords++;
+        }
     }
     if (ngens > 1 || (ngens && (nargs || nkeywords))) {
         ast_error(n, "Generator expression must be parenthesized "
-                 "if not sole argument");
-       return NULL;
+                  "if not sole argument");
+        return NULL;
     }
 
     if (nargs + nkeywords + ngens > 255) {
@@ -1913,32 +1943,32 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func)
     nargs = 0;
     nkeywords = 0;
     for (i = 0; i < NCH(n); i++) {
-       node *ch = CHILD(n, i);
-       if (TYPE(ch) == argument) {
-           expr_ty e;
-           if (NCH(ch) == 1) {
-               if (nkeywords) {
-                   ast_error(CHILD(ch, 0),
-                             "non-keyword arg after keyword arg");
-                   return NULL;
-               }
-               e = ast_for_expr(c, CHILD(ch, 0));
+        node *ch = CHILD(n, i);
+        if (TYPE(ch) == argument) {
+            expr_ty e;
+            if (NCH(ch) == 1) {
+                if (nkeywords) {
+                    ast_error(CHILD(ch, 0),
+                              "non-keyword arg after keyword arg");
+                    return NULL;
+                }
+                e = ast_for_expr(c, CHILD(ch, 0));
                 if (!e)
                     return NULL;
-               asdl_seq_SET(args, nargs++, e);
-           }  
-           else if (TYPE(CHILD(ch, 1)) == gen_for) {
-               e = ast_for_genexp(c, ch);
+                asdl_seq_SET(args, nargs++, e);
+            }  
+            else if (TYPE(CHILD(ch, 1)) == gen_for) {
+                e = ast_for_genexp(c, ch);
                 if (!e)
                     return NULL;
-               asdl_seq_SET(args, nargs++, e);
+                asdl_seq_SET(args, nargs++, e);
             }
-           else {
-               keyword_ty kw;
-               identifier key;
+            else {
+                keyword_ty kw;
+                identifier key;
 
-               /* CHILD(ch, 0) is test, but must be an identifier? */ 
-               e = ast_for_expr(c, CHILD(ch, 0));
+                /* CHILD(ch, 0) is test, but must be an identifier? */ 
+                e = ast_for_expr(c, CHILD(ch, 0));
                 if (!e)
                     return NULL;
                 /* f(lambda x: x[0] = 3) ends up getting parsed with
@@ -1953,24 +1983,24 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func)
                   ast_error(CHILD(ch, 0), "keyword can't be an expression");
                   return NULL;
                 }
-               key = e->v.Name.id;
-               e = ast_for_expr(c, CHILD(ch, 2));
+                key = e->v.Name.id;
+                e = ast_for_expr(c, CHILD(ch, 2));
                 if (!e)
                     return NULL;
-               kw = keyword(key, e, c->c_arena);
+                kw = keyword(key, e, c->c_arena);
                 if (!kw)
                     return NULL;
-               asdl_seq_SET(keywords, nkeywords++, kw);
-           }
-       }
-       else if (TYPE(ch) == STAR) {
-           vararg = ast_for_expr(c, CHILD(n, i+1));
-           i++;
-       }
-       else if (TYPE(ch) == DOUBLESTAR) {
-           kwarg = ast_for_expr(c, CHILD(n, i+1));
-           i++;
-       }
+                asdl_seq_SET(keywords, nkeywords++, kw);
+            }
+        }
+        else if (TYPE(ch) == STAR) {
+            vararg = ast_for_expr(c, CHILD(n, i+1));
+            i++;
+        }
+        else if (TYPE(ch) == DOUBLESTAR) {
+            kwarg = ast_for_expr(c, CHILD(n, i+1));
+            i++;
+        }
     }
 
     return Call(func, args, keywords, vararg, kwarg, func->lineno, func->col_offset, c->c_arena);
@@ -1994,12 +2024,12 @@ ast_for_testlist(struct compiling *c, const node* n)
                TYPE(n) == testlist1);
     }
     if (NCH(n) == 1)
-       return ast_for_expr(c, CHILD(n, 0));
+        return ast_for_expr(c, CHILD(n, 0));
     else {
         asdl_seq *tmp = seq_for_testlist(c, n);
         if (!tmp)
             return NULL;
-       return Tuple(tmp, Load, LINENO(n), n->n_col_offset, c->c_arena);
+        return Tuple(tmp, Load, LINENO(n), n->n_col_offset, c->c_arena);
     }
 }
 
@@ -2010,7 +2040,7 @@ ast_for_testlist_gexp(struct compiling *c, const node* n)
     /* argument: test [ gen_for ] */
     assert(TYPE(n) == testlist_gexp || TYPE(n) == argument);
     if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == gen_for)
-       return ast_for_genexp(c, n);
+        return ast_for_genexp(c, n);
     return ast_for_testlist(c, n);
 }
 
@@ -2044,23 +2074,23 @@ ast_for_expr_stmt(struct compiling *c, const node *n)
                 | ('=' (yield_expr|testlist))*)
        testlist: test (',' test)* [',']
        augassign: '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^='
-               | '<<=' | '>>=' | '**=' | '//='
+                | '<<=' | '>>=' | '**=' | '//='
        test: ... here starts the operator precendence dance
      */
 
     if (NCH(n) == 1) {
-       expr_ty e = ast_for_testlist(c, CHILD(n, 0));
+        expr_ty e = ast_for_testlist(c, CHILD(n, 0));
         if (!e)
             return NULL;
 
-       return Expr(e, LINENO(n), n->n_col_offset, c->c_arena);
+        return Expr(e, LINENO(n), n->n_col_offset, c->c_arena);
     }
     else if (TYPE(CHILD(n, 1)) == augassign) {
         expr_ty expr1, expr2;
         operator_ty newoperator;
-       node *ch = CHILD(n, 0);
+        node *ch = CHILD(n, 0);
 
-       expr1 = ast_for_testlist(c, ch);
+        expr1 = ast_for_testlist(c, ch);
         if (!expr1)
             return NULL;
         /* TODO(nas): Remove duplicated error checks (set_context does it) */
@@ -2089,13 +2119,13 @@ ast_for_expr_stmt(struct compiling *c, const node *n)
                           "assignment");
                 return NULL;
         }
-       set_context(expr1, Store, ch);
+        set_context(expr1, Store, ch);
 
-       ch = CHILD(n, 2);
-       if (TYPE(ch) == testlist)
-           expr2 = ast_for_testlist(c, ch);
-       else
-           expr2 = ast_for_expr(c, ch);
+        ch = CHILD(n, 2);
+        if (TYPE(ch) == testlist)
+            expr2 = ast_for_testlist(c, ch);
+        else
+            expr2 = ast_for_expr(c, ch);
         if (!expr2)
             return NULL;
 
@@ -2103,45 +2133,45 @@ ast_for_expr_stmt(struct compiling *c, const node *n)
         if (!newoperator)
             return NULL;
 
-       return AugAssign(expr1, newoperator, expr2, LINENO(n), n->n_col_offset, c->c_arena);
+        return AugAssign(expr1, newoperator, expr2, LINENO(n), n->n_col_offset, c->c_arena);
     }
     else {
-       int i;
-       asdl_seq *targets;
-       node *value;
+        int i;
+        asdl_seq *targets;
+        node *value;
         expr_ty expression;
 
-       /* a normal assignment */
-       REQ(CHILD(n, 1), EQUAL);
-       targets = asdl_seq_new(NCH(n) / 2, c->c_arena);
-       if (!targets)
-           return NULL;
-       for (i = 0; i < NCH(n) - 2; i += 2) {
-           expr_ty e;
-           node *ch = CHILD(n, i);
-           if (TYPE(ch) == yield_expr) {
-               ast_error(ch, "assignment to yield expression not possible");
-               return NULL;
-           }
-           e = ast_for_testlist(c, ch);
-
-           /* set context to assign */
-           if (!e) 
-             return NULL;
-
-           if (!set_context(e, Store, CHILD(n, i)))
-             return NULL;
-
-           asdl_seq_SET(targets, i / 2, e);
-       }
-       value = CHILD(n, NCH(n) - 1);
-       if (TYPE(value) == testlist)
-           expression = ast_for_testlist(c, value);
-       else
-           expression = ast_for_expr(c, value);
-       if (!expression)
-           return NULL;
-       return Assign(targets, expression, LINENO(n), n->n_col_offset, c->c_arena);
+        /* a normal assignment */
+        REQ(CHILD(n, 1), EQUAL);
+        targets = asdl_seq_new(NCH(n) / 2, c->c_arena);
+        if (!targets)
+            return NULL;
+        for (i = 0; i < NCH(n) - 2; i += 2) {
+            expr_ty e;
+            node *ch = CHILD(n, i);
+            if (TYPE(ch) == yield_expr) {
+                ast_error(ch, "assignment to yield expression not possible");
+                return NULL;
+            }
+            e = ast_for_testlist(c, ch);
+
+            /* set context to assign */
+            if (!e) 
+              return NULL;
+
+            if (!set_context(e, Store, CHILD(n, i)))
+              return NULL;
+
+            asdl_seq_SET(targets, i / 2, e);
+        }
+        value = CHILD(n, NCH(n) - 1);
+        if (TYPE(value) == testlist)
+            expression = ast_for_testlist(c, value);
+        else
+            expression = ast_for_expr(c, value);
+        if (!expression)
+            return NULL;
+        return Assign(targets, expression, LINENO(n), n->n_col_offset, c->c_arena);
     }
 }
 
@@ -2158,19 +2188,19 @@ ast_for_print_stmt(struct compiling *c, const node *n)
 
     REQ(n, print_stmt);
     if (NCH(n) >= 2 && TYPE(CHILD(n, 1)) == RIGHTSHIFT) {
-       dest = ast_for_expr(c, CHILD(n, 2));
+        dest = ast_for_expr(c, CHILD(n, 2));
         if (!dest)
             return NULL;
-           start = 4;
+            start = 4;
     }
     seq = asdl_seq_new((NCH(n) + 1 - start) / 2, c->c_arena);
     if (!seq)
-       return NULL;
+        return NULL;
     for (i = start, j = 0; i < NCH(n); i += 2, ++j) {
         expression = ast_for_expr(c, CHILD(n, i));
         if (!expression)
             return NULL;
-       asdl_seq_SET(seq, j, expression);
+        asdl_seq_SET(seq, j, expression);
     }
     nl = (TYPE(CHILD(n, NCH(n) - 1)) == COMMA) ? false : true;
     return Print(dest, seq, nl, LINENO(n), n->n_col_offset, c->c_arena);
@@ -2187,14 +2217,14 @@ ast_for_exprlist(struct compiling *c, const node *n, expr_context_ty context)
 
     seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
     if (!seq)
-       return NULL;
+        return NULL;
     for (i = 0; i < NCH(n); i += 2) {
-       e = ast_for_expr(c, CHILD(n, i));
-       if (!e)
-           return NULL;
-       asdl_seq_SET(seq, i / 2, e);
-       if (context && !set_context(e, context, CHILD(n, i)))
-           return NULL;
+        e = ast_for_expr(c, CHILD(n, i));
+        if (!e)
+            return NULL;
+        asdl_seq_SET(seq, i / 2, e);
+        if (context && !set_context(e, context, CHILD(n, i)))
+            return NULL;
     }
     return seq;
 }
@@ -2236,9 +2266,9 @@ ast_for_flow_stmt(struct compiling *c, const node *n)
         case continue_stmt:
             return Continue(LINENO(n), n->n_col_offset, c->c_arena);
         case yield_stmt: { /* will reduce to yield_expr */
-           expr_ty exp = ast_for_expr(c, CHILD(ch, 0));
-           if (!exp)
-               return NULL;
+            expr_ty exp = ast_for_expr(c, CHILD(ch, 0));
+            if (!exp)
+                return NULL;
             return Expr(exp, LINENO(n), n->n_col_offset, c->c_arena);
         }
         case return_stmt:
@@ -2311,10 +2341,6 @@ alias_for_import_name(struct compiling *c, const node *n)
         case import_as_name:
             str = NULL;
             if (NCH(n) == 3) {
-                if (strcmp(STR(CHILD(n, 1)), "as") != 0) {
-                    ast_error(n, "must use 'as' in import");
-                    return NULL;
-                }
                 str = NEW_IDENTIFIER(CHILD(n, 2));
             }
             return alias(NEW_IDENTIFIER(CHILD(n, 0)), str, c->c_arena);
@@ -2327,10 +2353,6 @@ alias_for_import_name(struct compiling *c, const node *n)
                 alias_ty a = alias_for_import_name(c, CHILD(n, 0));
                 if (!a)
                     return NULL;
-                if (strcmp(STR(CHILD(n, 1)), "as") != 0) {
-                    ast_error(n, "must use 'as' in import");
-                    return NULL;
-                }
                 assert(!a->asname);
                 a->asname = NEW_IDENTIFIER(CHILD(n, 2));
                 return a;
@@ -2365,13 +2387,13 @@ alias_for_import_name(struct compiling *c, const node *n)
                 --s;
                 *s = '\0';
                 PyString_InternInPlace(&str);
-               PyArena_AddPyObject(c->c_arena, str);
+                PyArena_AddPyObject(c->c_arena, str);
                 return alias(str, NULL, c->c_arena);
             }
             break;
         case STAR:
-           str = PyString_InternFromString("*");
-           PyArena_AddPyObject(c->c_arena, str);
+            str = PyString_InternFromString("*");
+            PyArena_AddPyObject(c->c_arena, str);
             return alias(str, NULL, c->c_arena);
         default:
             PyErr_Format(PyExc_SystemError,
@@ -2403,69 +2425,69 @@ ast_for_import_stmt(struct compiling *c, const node *n)
     n = CHILD(n, 0);
     if (TYPE(n) == import_name) {
         n = CHILD(n, 1);
-       REQ(n, dotted_as_names);
-       aliases = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
-       if (!aliases)
-               return NULL;
-       for (i = 0; i < NCH(n); i += 2) {
+        REQ(n, dotted_as_names);
+        aliases = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
+        if (!aliases)
+                return NULL;
+        for (i = 0; i < NCH(n); i += 2) {
             alias_ty import_alias = alias_for_import_name(c, CHILD(n, i));
             if (!import_alias)
                 return NULL;
-           asdl_seq_SET(aliases, i / 2, import_alias);
+            asdl_seq_SET(aliases, i / 2, import_alias);
         }
-       return Import(aliases, lineno, col_offset, c->c_arena);
+        return Import(aliases, lineno, col_offset, c->c_arena);
     }
     else if (TYPE(n) == import_from) {
         int n_children;
-       int idx, ndots = 0;
-       alias_ty mod = NULL;
-       identifier modname;
-       
+        int idx, ndots = 0;
+        alias_ty mod = NULL;
+        identifier modname;
+        
        /* Count the number of dots (for relative imports) and check for the
           optional module name */
-       for (idx = 1; idx < NCH(n); idx++) {
-           if (TYPE(CHILD(n, idx)) == dotted_name) {
-               mod = alias_for_import_name(c, CHILD(n, idx));
-               idx++;
-               break;
-           } else if (TYPE(CHILD(n, idx)) != DOT) {
-               break;
-           }
-           ndots++;
-       }
-       idx++; /* skip over the 'import' keyword */
+        for (idx = 1; idx < NCH(n); idx++) {
+            if (TYPE(CHILD(n, idx)) == dotted_name) {
+                mod = alias_for_import_name(c, CHILD(n, idx));
+                idx++;
+                break;
+            } else if (TYPE(CHILD(n, idx)) != DOT) {
+                break;
+            }
+            ndots++;
+        }
+        idx++; /* skip over the 'import' keyword */
         switch (TYPE(CHILD(n, idx))) {
         case STAR:
             /* from ... import * */
-           n = CHILD(n, idx);
-           n_children = 1;
-           if (ndots) {
-               ast_error(n, "'import *' not allowed with 'from .'");
-               return NULL;
-           }
-           break;
-       case LPAR:
-           /* from ... import (x, y, z) */
-           n = CHILD(n, idx + 1);
-           n_children = NCH(n);
-           break;
-       case import_as_names:
-           /* from ... import x, y, z */
-           n = CHILD(n, idx);
-           n_children = NCH(n);
+            n = CHILD(n, idx);
+            n_children = 1;
+            if (ndots) {
+                ast_error(n, "'import *' not allowed with 'from .'");
+                return NULL;
+            }
+            break;
+        case LPAR:
+            /* from ... import (x, y, z) */
+            n = CHILD(n, idx + 1);
+            n_children = NCH(n);
+            break;
+        case import_as_names:
+            /* from ... import x, y, z */
+            n = CHILD(n, idx);
+            n_children = NCH(n);
             if (n_children % 2 == 0) {
                 ast_error(n, "trailing comma not allowed without"
                              " surrounding parentheses");
                 return NULL;
             }
-           break;
-       default:
-           ast_error(n, "Unexpected node-type in from-import");
-           return NULL;
-       }
+            break;
+        default:
+            ast_error(n, "Unexpected node-type in from-import");
+            return NULL;
+        }
 
-       aliases = asdl_seq_new((n_children + 1) / 2, c->c_arena);
-       if (!aliases)
+        aliases = asdl_seq_new((n_children + 1) / 2, c->c_arena);
+        if (!aliases)
             return NULL;
 
         /* handle "from ... import *" special b/c there's no children */
@@ -2473,14 +2495,14 @@ ast_for_import_stmt(struct compiling *c, const node *n)
             alias_ty import_alias = alias_for_import_name(c, n);
             if (!import_alias)
                 return NULL;
-               asdl_seq_SET(aliases, 0, import_alias);
+                asdl_seq_SET(aliases, 0, import_alias);
         }
         else {
-           for (i = 0; i < NCH(n); i += 2) {
+            for (i = 0; i < NCH(n); i += 2) {
                 alias_ty import_alias = alias_for_import_name(c, CHILD(n, i));
                 if (!import_alias)
                     return NULL;
-                   asdl_seq_SET(aliases, i / 2, import_alias);
+                    asdl_seq_SET(aliases, i / 2, import_alias);
             }
         }
         if (mod != NULL)
@@ -2507,12 +2529,12 @@ ast_for_global_stmt(struct compiling *c, const node *n)
     REQ(n, global_stmt);
     s = asdl_seq_new(NCH(n) / 2, c->c_arena);
     if (!s)
-       return NULL;
+        return NULL;
     for (i = 1; i < NCH(n); i += 2) {
-       name = NEW_IDENTIFIER(CHILD(n, i));
-       if (!name)
-           return NULL;
-       asdl_seq_SET(s, i / 2, name);
+        name = NEW_IDENTIFIER(CHILD(n, i));
+        if (!name)
+            return NULL;
+        asdl_seq_SET(s, i / 2, name);
     }
     return Global(s, LINENO(n), n->n_col_offset, c->c_arena);
 }
@@ -2526,7 +2548,7 @@ ast_for_assert_stmt(struct compiling *c, const node *n)
         expr_ty expression = ast_for_expr(c, CHILD(n, 1));
         if (!expression)
             return NULL;
-       return Assert(expression, NULL, LINENO(n), n->n_col_offset, c->c_arena);
+        return Assert(expression, NULL, LINENO(n), n->n_col_offset, c->c_arena);
     }
     else if (NCH(n) == 4) {
         expr_ty expr1, expr2;
@@ -2538,7 +2560,7 @@ ast_for_assert_stmt(struct compiling *c, const node *n)
         if (!expr2)
             return NULL;
             
-       return Assert(expr1, expr2, LINENO(n), n->n_col_offset, c->c_arena);
+        return Assert(expr1, expr2, LINENO(n), n->n_col_offset, c->c_arena);
     }
     PyErr_Format(PyExc_SystemError,
                  "improper number of parts to 'assert' statement: %d",
@@ -2560,53 +2582,53 @@ ast_for_suite(struct compiling *c, const node *n)
     total = num_stmts(n);
     seq = asdl_seq_new(total, c->c_arena);
     if (!seq)
-       return NULL;
+        return NULL;
     if (TYPE(CHILD(n, 0)) == simple_stmt) {
-       n = CHILD(n, 0);
-       /* simple_stmt always ends with a NEWLINE,
-          and may have a trailing SEMI 
-       */
-       end = NCH(n) - 1;
-       if (TYPE(CHILD(n, end - 1)) == SEMI)
-           end--;
+        n = CHILD(n, 0);
+        /* simple_stmt always ends with a NEWLINE,
+           and may have a trailing SEMI 
+        */
+        end = NCH(n) - 1;
+        if (TYPE(CHILD(n, end - 1)) == SEMI)
+            end--;
         /* loop by 2 to skip semi-colons */
-       for (i = 0; i < end; i += 2) {
-           ch = CHILD(n, i);
-           s = ast_for_stmt(c, ch);
-           if (!s)
-               return NULL;
-           asdl_seq_SET(seq, pos++, s);
-       }
+        for (i = 0; i < end; i += 2) {
+            ch = CHILD(n, i);
+            s = ast_for_stmt(c, ch);
+            if (!s)
+                return NULL;
+            asdl_seq_SET(seq, pos++, s);
+        }
     }
     else {
-       for (i = 2; i < (NCH(n) - 1); i++) {
-           ch = CHILD(n, i);
-           REQ(ch, stmt);
-           num = num_stmts(ch);
-           if (num == 1) {
-               /* small_stmt or compound_stmt with only one child */
-               s = ast_for_stmt(c, ch);
-               if (!s)
-                   return NULL;
-               asdl_seq_SET(seq, pos++, s);
-           }
-           else {
-               int j;
-               ch = CHILD(ch, 0);
-               REQ(ch, simple_stmt);
-               for (j = 0; j < NCH(ch); j += 2) {
-                   /* statement terminates with a semi-colon ';' */
-                   if (NCH(CHILD(ch, j)) == 0) {
-                       assert((j + 1) == NCH(ch));
-                       break;
-                   }
-                   s = ast_for_stmt(c, CHILD(ch, j));
-                   if (!s)
-                       return NULL;
-                   asdl_seq_SET(seq, pos++, s);
-               }
-           }
-       }
+        for (i = 2; i < (NCH(n) - 1); i++) {
+            ch = CHILD(n, i);
+            REQ(ch, stmt);
+            num = num_stmts(ch);
+            if (num == 1) {
+                /* small_stmt or compound_stmt with only one child */
+                s = ast_for_stmt(c, ch);
+                if (!s)
+                    return NULL;
+                asdl_seq_SET(seq, pos++, s);
+            }
+            else {
+                int j;
+                ch = CHILD(ch, 0);
+                REQ(ch, simple_stmt);
+                for (j = 0; j < NCH(ch); j += 2) {
+                    /* statement terminates with a semi-colon ';' */
+                    if (NCH(CHILD(ch, j)) == 0) {
+                        assert((j + 1) == NCH(ch));
+                        break;
+                    }
+                    s = ast_for_stmt(c, CHILD(ch, j));
+                    if (!s)
+                        return NULL;
+                    asdl_seq_SET(seq, pos++, s);
+                }
+            }
+        }
     }
     assert(pos == seq->size);
     return seq;
@@ -2633,7 +2655,7 @@ ast_for_if_stmt(struct compiling *c, const node *n)
         if (!suite_seq)
             return NULL;
             
-       return If(expression, suite_seq, NULL, LINENO(n), n->n_col_offset, c->c_arena);
+        return If(expression, suite_seq, NULL, LINENO(n), n->n_col_offset, c->c_arena);
     }
 
     s = STR(CHILD(n, 4));
@@ -2655,28 +2677,28 @@ ast_for_if_stmt(struct compiling *c, const node *n)
         if (!seq2)
             return NULL;
 
-       return If(expression, seq1, seq2, LINENO(n), n->n_col_offset, c->c_arena);
+        return If(expression, seq1, seq2, LINENO(n), n->n_col_offset, c->c_arena);
     }
     else if (s[2] == 'i') {
-       int i, n_elif, has_else = 0;
-       asdl_seq *orelse = NULL;
-       n_elif = NCH(n) - 4;
+        int i, n_elif, has_else = 0;
+        asdl_seq *orelse = NULL;
+        n_elif = NCH(n) - 4;
         /* must reference the child n_elif+1 since 'else' token is third,
            not fourth, child from the end. */
-       if (TYPE(CHILD(n, (n_elif + 1))) == NAME
-           && STR(CHILD(n, (n_elif + 1)))[2] == 's') {
-           has_else = 1;
-           n_elif -= 3;
-       }
-       n_elif /= 4;
-
-       if (has_else) {
+        if (TYPE(CHILD(n, (n_elif + 1))) == NAME
+            && STR(CHILD(n, (n_elif + 1)))[2] == 's') {
+            has_else = 1;
+            n_elif -= 3;
+        }
+        n_elif /= 4;
+
+        if (has_else) {
             expr_ty expression;
             asdl_seq *seq1, *seq2;
 
-           orelse = asdl_seq_new(1, c->c_arena);
-           if (!orelse)
-               return NULL;
+            orelse = asdl_seq_new(1, c->c_arena);
+            if (!orelse)
+                return NULL;
             expression = ast_for_expr(c, CHILD(n, NCH(n) - 6));
             if (!expression)
                 return NULL;
@@ -2687,20 +2709,20 @@ ast_for_if_stmt(struct compiling *c, const node *n)
             if (!seq2)
                 return NULL;
 
-           asdl_seq_SET(orelse, 0, If(expression, seq1, seq2, 
-                                      LINENO(CHILD(n, NCH(n) - 6)), CHILD(n, NCH(n) - 6)->n_col_offset,
+            asdl_seq_SET(orelse, 0, If(expression, seq1, seq2, 
+                                       LINENO(CHILD(n, NCH(n) - 6)), CHILD(n, NCH(n) - 6)->n_col_offset,
                                        c->c_arena));
-           /* the just-created orelse handled the last elif */
-           n_elif--;
-       }
+            /* the just-created orelse handled the last elif */
+            n_elif--;
+        }
 
-       for (i = 0; i < n_elif; i++) {
-           int off = 5 + (n_elif - i - 1) * 4;
+        for (i = 0; i < n_elif; i++) {
+            int off = 5 + (n_elif - i - 1) * 4;
             expr_ty expression;
             asdl_seq *suite_seq;
-           asdl_seq *newobj = asdl_seq_new(1, c->c_arena);
-           if (!newobj)
-               return NULL;
+            asdl_seq *newobj = asdl_seq_new(1, c->c_arena);
+            if (!newobj)
+                return NULL;
             expression = ast_for_expr(c, CHILD(n, off));
             if (!expression)
                 return NULL;
@@ -2708,14 +2730,14 @@ ast_for_if_stmt(struct compiling *c, const node *n)
             if (!suite_seq)
                 return NULL;
 
-           asdl_seq_SET(newobj, 0,
-                        If(expression, suite_seq, orelse, 
-                           LINENO(CHILD(n, off)), CHILD(n, off)->n_col_offset, c->c_arena));
-           orelse = newobj;
-       }
-       return If(ast_for_expr(c, CHILD(n, 1)),
-                 ast_for_suite(c, CHILD(n, 3)),
-                 orelse, LINENO(n), n->n_col_offset, c->c_arena);
+            asdl_seq_SET(newobj, 0,
+                         If(expression, suite_seq, orelse, 
+                            LINENO(CHILD(n, off)), CHILD(n, off)->n_col_offset, c->c_arena));
+            orelse = newobj;
+        }
+        return If(ast_for_expr(c, CHILD(n, 1)),
+                  ast_for_suite(c, CHILD(n, 3)),
+                  orelse, LINENO(n), n->n_col_offset, c->c_arena);
     }
 
     PyErr_Format(PyExc_SystemError,
@@ -2739,7 +2761,7 @@ ast_for_while_stmt(struct compiling *c, const node *n)
         suite_seq = ast_for_suite(c, CHILD(n, 3));
         if (!suite_seq)
             return NULL;
-       return While(expression, suite_seq, NULL, LINENO(n), n->n_col_offset, c->c_arena);
+        return While(expression, suite_seq, NULL, LINENO(n), n->n_col_offset, c->c_arena);
     }
     else if (NCH(n) == 7) {
         expr_ty expression;
@@ -2755,7 +2777,7 @@ ast_for_while_stmt(struct compiling *c, const node *n)
         if (!seq2)
             return NULL;
 
-       return While(expression, seq1, seq2, LINENO(n), n->n_col_offset, c->c_arena);
+        return While(expression, seq1, seq2, LINENO(n), n->n_col_offset, c->c_arena);
     }
 
     PyErr_Format(PyExc_SystemError,
@@ -2775,7 +2797,7 @@ ast_for_for_stmt(struct compiling *c, const node *n)
     REQ(n, for_stmt);
 
     if (NCH(n) == 9) {
-       seq = ast_for_suite(c, CHILD(n, 8));
+        seq = ast_for_suite(c, CHILD(n, 8));
         if (!seq)
             return NULL;
     }
@@ -2787,9 +2809,9 @@ ast_for_for_stmt(struct compiling *c, const node *n)
     /* Check the # of children rather than the length of _target, since
        for x, in ... has 1 element in _target, but still requires a Tuple. */
     if (NCH(node_target) == 1)
-       target = (expr_ty)asdl_seq_GET(_target, 0);
+        target = (expr_ty)asdl_seq_GET(_target, 0);
     else
-       target = Tuple(_target, Store, LINENO(n), n->n_col_offset, c->c_arena);
+        target = Tuple(_target, Store, LINENO(n), n->n_col_offset, c->c_arena);
 
     expression = ast_for_testlist(c, CHILD(n, 3));
     if (!expression)
@@ -2814,7 +2836,7 @@ ast_for_except_clause(struct compiling *c, const node *exc, node *body)
         if (!suite_seq)
             return NULL;
 
-       return excepthandler(NULL, NULL, suite_seq, LINENO(exc),
+        return excepthandler(NULL, NULL, suite_seq, LINENO(exc),
                              exc->n_col_offset, c->c_arena);
     }
     else if (NCH(exc) == 2) {
@@ -2828,16 +2850,16 @@ ast_for_except_clause(struct compiling *c, const node *exc, node *body)
         if (!suite_seq)
             return NULL;
 
-       return excepthandler(expression, NULL, suite_seq, LINENO(exc),
+        return excepthandler(expression, NULL, suite_seq, LINENO(exc),
                              exc->n_col_offset, c->c_arena);
     }
     else if (NCH(exc) == 4) {
         asdl_seq *suite_seq;
         expr_ty expression;
-       expr_ty e = ast_for_expr(c, CHILD(exc, 3));
-       if (!e)
+        expr_ty e = ast_for_expr(c, CHILD(exc, 3));
+        if (!e)
             return NULL;
-       if (!set_context(e, Store, CHILD(exc, 3)))
+        if (!set_context(e, Store, CHILD(exc, 3)))
             return NULL;
         expression = ast_for_expr(c, CHILD(exc, 1));
         if (!expression)
@@ -2846,7 +2868,7 @@ ast_for_except_clause(struct compiling *c, const node *exc, node *body)
         if (!suite_seq)
             return NULL;
 
-       return excepthandler(expression, e, suite_seq, LINENO(exc),
+        return excepthandler(expression, e, suite_seq, LINENO(exc),
                              exc->n_col_offset, c->c_arena);
     }
 
@@ -2901,8 +2923,8 @@ ast_for_try_stmt(struct compiling *c, const node *n)
     }
     
     if (n_except > 0) {
-       int i;
-       stmt_ty except_st;
+        int i;
+        stmt_ty except_st;
         /* process except statements to create a try ... except */
         asdl_seq *handlers = asdl_seq_new(n_except, c->c_arena);
         if (handlers == NULL)
@@ -2916,17 +2938,17 @@ ast_for_try_stmt(struct compiling *c, const node *n)
             asdl_seq_SET(handlers, i, e);
         }
 
-       except_st = TryExcept(body, handlers, orelse, LINENO(n),
+        except_st = TryExcept(body, handlers, orelse, LINENO(n),
                               n->n_col_offset, c->c_arena);
         if (!finally)
-           return except_st;
+            return except_st;
 
         /* if a 'finally' is present too, we nest the TryExcept within a
            TryFinally to emulate try ... except ... finally */
-       body = asdl_seq_new(1, c->c_arena);
-       if (body == NULL)
-           return NULL;
-       asdl_seq_SET(body, 0, except_st);
+        body = asdl_seq_new(1, c->c_arena);
+        if (body == NULL)
+            return NULL;
+        asdl_seq_SET(body, 0, except_st);
     }
 
     /* must be a try ... finally (except clauses are in body, if any exist) */
@@ -2938,10 +2960,6 @@ static expr_ty
 ast_for_with_var(struct compiling *c, const node *n)
 {
     REQ(n, with_var);
-    if (strcmp(STR(CHILD(n, 0)), "as") != 0) {
-        ast_error(n, "expected \"with [expr] as [var]\"");
-        return NULL;
-    }
     return ast_for_expr(c, CHILD(n, 1));
 }
 
@@ -2961,9 +2979,9 @@ ast_for_with_stmt(struct compiling *c, const node *n)
         if (!optional_vars) {
             return NULL;
         }
-       if (!set_context(optional_vars, Store, n)) {
-           return NULL;
-       }
+        if (!set_context(optional_vars, Store, n)) {
+            return NULL;
+        }
         suite_index = 4;
     }
 
@@ -2972,7 +2990,7 @@ ast_for_with_stmt(struct compiling *c, const node *n)
         return NULL;
     }
     return With(context_expr, optional_vars, suite_seq, LINENO(n), 
-               n->n_col_offset, c->c_arena);
+                n->n_col_offset, c->c_arena);
 }
 
 static stmt_ty
@@ -2984,23 +3002,23 @@ ast_for_classdef(struct compiling *c, const node *n)
     REQ(n, classdef);
 
     if (!strcmp(STR(CHILD(n, 1)), "None")) {
-           ast_error(n, "assignment to None");
-           return NULL;
+            ast_error(n, "assignment to None");
+            return NULL;
     }
 
     if (NCH(n) == 4) {
         s = ast_for_suite(c, CHILD(n, 3));
         if (!s)
             return NULL;
-       return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n),
+        return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n),
                         n->n_col_offset, c->c_arena);
     }
     /* check for empty base list */
     if (TYPE(CHILD(n,3)) == RPAR) {
-       s = ast_for_suite(c, CHILD(n,5));
-       if (!s)
-               return NULL;
-       return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n),
+        s = ast_for_suite(c, CHILD(n,5));
+        if (!s)
+                return NULL;
+        return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n),
                         n->n_col_offset, c->c_arena);
     }
 
@@ -3020,20 +3038,20 @@ static stmt_ty
 ast_for_stmt(struct compiling *c, const node *n)
 {
     if (TYPE(n) == stmt) {
-       assert(NCH(n) == 1);
-       n = CHILD(n, 0);
+        assert(NCH(n) == 1);
+        n = CHILD(n, 0);
     }
     if (TYPE(n) == simple_stmt) {
-       assert(num_stmts(n) == 1);
-       n = CHILD(n, 0);
+        assert(num_stmts(n) == 1);
+        n = CHILD(n, 0);
     }
     if (TYPE(n) == small_stmt) {
        REQ(n, small_stmt);
        n = CHILD(n, 0);
        /* small_stmt: expr_stmt | print_stmt  | del_stmt | pass_stmt
                     | flow_stmt | import_stmt | global_stmt | assert_stmt
-       */
-       switch (TYPE(n)) {
+        */
+        switch (TYPE(n)) {
             case expr_stmt:
                 return ast_for_expr_stmt(c, n);
             case print_stmt:
@@ -3059,11 +3077,11 @@ ast_for_stmt(struct compiling *c, const node *n)
     }
     else {
         /* compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt
-                       | funcdef | classdef
-       */
-       node *ch = CHILD(n, 0);
-       REQ(n, compound_stmt);
-       switch (TYPE(ch)) {
+                        | funcdef | classdef
+        */
+        node *ch = CHILD(n, 0);
+        REQ(n, compound_stmt);
+        switch (TYPE(ch)) {
             case if_stmt:
                 return ast_for_if_stmt(c, ch);
             case while_stmt:
@@ -3083,144 +3101,144 @@ ast_for_stmt(struct compiling *c, const node *n)
                              "unhandled small_stmt: TYPE=%d NCH=%d\n",
                              TYPE(n), NCH(n));
                 return NULL;
-       }
+        }
     }
 }
 
 static PyObject *
 parsenumber(const char *s)
 {
-       const char *end;
-       long x;
-       double dx;
+        const char *end;
+        long x;
+        double dx;
 #ifndef WITHOUT_COMPLEX
-       Py_complex c;
-       int imflag;
+        Py_complex c;
+        int imflag;
 #endif
 
-       errno = 0;
-       end = s + strlen(s) - 1;
+        errno = 0;
+        end = s + strlen(s) - 1;
 #ifndef WITHOUT_COMPLEX
-       imflag = *end == 'j' || *end == 'J';
+        imflag = *end == 'j' || *end == 'J';
 #endif
-       if (*end == 'l' || *end == 'L')
-               return PyLong_FromString((char *)s, (char **)0, 0);
-       if (s[0] == '0') {
-               x = (long) PyOS_strtoul((char *)s, (char **)&end, 0);
-               if (x < 0 && errno == 0) {
-                               return PyLong_FromString((char *)s,
-                                                        (char **)0,
-                                                        0);
-               }
-       }
-       else
-               x = PyOS_strtol((char *)s, (char **)&end, 0);
-       if (*end == '\0') {
-               if (errno != 0)
-                       return PyLong_FromString((char *)s, (char **)0, 0);
-               return PyInt_FromLong(x);
-       }
-       /* XXX Huge floats may silently fail */
+        if (*end == 'l' || *end == 'L')
+                return PyLong_FromString((char *)s, (char **)0, 0);
+        if (s[0] == '0') {
+                x = (long) PyOS_strtoul((char *)s, (char **)&end, 0);
+                if (x < 0 && errno == 0) {
+                                return PyLong_FromString((char *)s,
+                                                         (char **)0,
+                                                         0);
+                }
+        }
+        else
+                x = PyOS_strtol((char *)s, (char **)&end, 0);
+        if (*end == '\0') {
+                if (errno != 0)
+                        return PyLong_FromString((char *)s, (char **)0, 0);
+                return PyInt_FromLong(x);
+        }
+        /* XXX Huge floats may silently fail */
 #ifndef WITHOUT_COMPLEX
-       if (imflag) {
-               c.real = 0.;
-               PyFPE_START_PROTECT("atof", return 0)
-               c.imag = PyOS_ascii_atof(s);
-               PyFPE_END_PROTECT(c)
-               return PyComplex_FromCComplex(c);
-       }
-       else
+        if (imflag) {
+                c.real = 0.;
+                PyFPE_START_PROTECT("atof", return 0)
+                c.imag = PyOS_ascii_atof(s);
+                PyFPE_END_PROTECT(c)
+                return PyComplex_FromCComplex(c);
+        }
+        else
 #endif
-       {
-               PyFPE_START_PROTECT("atof", return 0)
-               dx = PyOS_ascii_atof(s);
-               PyFPE_END_PROTECT(dx)
-               return PyFloat_FromDouble(dx);
-       }
+        {
+                PyFPE_START_PROTECT("atof", return 0)
+                dx = PyOS_ascii_atof(s);
+                PyFPE_END_PROTECT(dx)
+                return PyFloat_FromDouble(dx);
+        }
 }
 
 static PyObject *
 decode_utf8(const char **sPtr, const char *end, char* encoding)
 {
 #ifndef Py_USING_UNICODE
-       Py_FatalError("decode_utf8 should not be called in this build.");
+        Py_FatalError("decode_utf8 should not be called in this build.");
         return NULL;
 #else
-       PyObject *u, *v;
-       char *s, *t;
-       t = s = (char *)*sPtr;
-       /* while (s < end && *s != '\\') s++; */ /* inefficient for u".." */
-       while (s < end && (*s & 0x80)) s++;
-       *sPtr = s;
-       u = PyUnicode_DecodeUTF8(t, s - t, NULL);
-       if (u == NULL)
-               return NULL;
-       v = PyUnicode_AsEncodedString(u, encoding, NULL);
-       Py_DECREF(u);
-       return v;
+        PyObject *u, *v;
+        char *s, *t;
+        t = s = (char *)*sPtr;
+        /* while (s < end && *s != '\\') s++; */ /* inefficient for u".." */
+        while (s < end && (*s & 0x80)) s++;
+        *sPtr = s;
+        u = PyUnicode_DecodeUTF8(t, s - t, NULL);
+        if (u == NULL)
+                return NULL;
+        v = PyUnicode_AsEncodedString(u, encoding, NULL);
+        Py_DECREF(u);
+        return v;
 #endif
 }
 
 static PyObject *
 decode_unicode(const char *s, size_t len, int rawmode, const char *encoding)
 {
-       PyObject *v, *u;
-       char *buf;
-       char *p;
-       const char *end;
-       if (encoding == NULL) {
-               buf = (char *)s;
-               u = NULL;
-       } else if (strcmp(encoding, "iso-8859-1") == 0) {
-               buf = (char *)s;
-               u = NULL;
-       } else {
-               /* "\XX" may become "\u005c\uHHLL" (12 bytes) */
-               u = PyString_FromStringAndSize((char *)NULL, len * 4);
-               if (u == NULL)
-                       return NULL;
-               p = buf = PyString_AsString(u);
-               end = s + len;
-               while (s < end) {
-                       if (*s == '\\') {
-                               *p++ = *s++;
-                               if (*s & 0x80) {
-                                       strcpy(p, "u005c");
-                                       p += 5;
-                               }
-                       }
-                       if (*s & 0x80) { /* XXX inefficient */
-                               PyObject *w;
-                               char *r;
-                               Py_ssize_t rn, i;
-                               w = decode_utf8(&s, end, "utf-16-be");
-                               if (w == NULL) {
-                                       Py_DECREF(u);
-                                       return NULL;
-                               }
-                               r = PyString_AsString(w);
-                               rn = PyString_Size(w);
-                               assert(rn % 2 == 0);
-                               for (i = 0; i < rn; i += 2) {
-                                       sprintf(p, "\\u%02x%02x",
-                                               r[i + 0] & 0xFF,
-                                               r[i + 1] & 0xFF);
-                                       p += 6;
-                               }
-                               Py_DECREF(w);
-                       } else {
-                               *p++ = *s++;
-                       }
-               }
-               len = p - buf;
-               s = buf;
-       }
-       if (rawmode)
-               v = PyUnicode_DecodeRawUnicodeEscape(s, len, NULL);
-       else
-               v = PyUnicode_DecodeUnicodeEscape(s, len, NULL);
-       Py_XDECREF(u);
-       return v;
+        PyObject *v, *u;
+        char *buf;
+        char *p;
+        const char *end;
+        if (encoding == NULL) {
+                buf = (char *)s;
+                u = NULL;
+        } else if (strcmp(encoding, "iso-8859-1") == 0) {
+                buf = (char *)s;
+                u = NULL;
+        } else {
+                /* "\XX" may become "\u005c\uHHLL" (12 bytes) */
+                u = PyString_FromStringAndSize((char *)NULL, len * 4);
+                if (u == NULL)
+                        return NULL;
+                p = buf = PyString_AsString(u);
+                end = s + len;
+                while (s < end) {
+                        if (*s == '\\') {
+                                *p++ = *s++;
+                                if (*s & 0x80) {
+                                        strcpy(p, "u005c");
+                                        p += 5;
+                                }
+                        }
+                        if (*s & 0x80) { /* XXX inefficient */
+                                PyObject *w;
+                                char *r;
+                                Py_ssize_t rn, i;
+                                w = decode_utf8(&s, end, "utf-16-be");
+                                if (w == NULL) {
+                                        Py_DECREF(u);
+                                        return NULL;
+                                }
+                                r = PyString_AsString(w);
+                                rn = PyString_Size(w);
+                                assert(rn % 2 == 0);
+                                for (i = 0; i < rn; i += 2) {
+                                        sprintf(p, "\\u%02x%02x",
+                                                r[i + 0] & 0xFF,
+                                                r[i + 1] & 0xFF);
+                                        p += 6;
+                                }
+                                Py_DECREF(w);
+                        } else {
+                                *p++ = *s++;
+                        }
+                }
+                len = p - buf;
+                s = buf;
+        }
+        if (rawmode)
+                v = PyUnicode_DecodeRawUnicodeEscape(s, len, NULL);
+        else
+                v = PyUnicode_DecodeUnicodeEscape(s, len, NULL);
+        Py_XDECREF(u);
+        return v;
 }
 
 /* s is a Python string literal, including the bracketing quote characters,
@@ -3230,75 +3248,75 @@ decode_unicode(const char *s, size_t len, int rawmode, const char *encoding)
 static PyObject *
 parsestr(const char *s, const char *encoding)
 {
-       size_t len;
-       int quote = Py_CHARMASK(*s);
-       int rawmode = 0;
-       int need_encoding;
-       int unicode = 0;
-
-       if (isalpha(quote) || quote == '_') {
-               if (quote == 'u' || quote == 'U') {
-                       quote = *++s;
-                       unicode = 1;
-               }
-               if (quote == 'r' || quote == 'R') {
-                       quote = *++s;
-                       rawmode = 1;
-               }
-       }
-       if (quote != '\'' && quote != '\"') {
-               PyErr_BadInternalCall();
-               return NULL;
-       }
-       s++;
-       len = strlen(s);
-       if (len > INT_MAX) {
-               PyErr_SetString(PyExc_OverflowError, 
-                               "string to parse is too long");
-               return NULL;
-       }
-       if (s[--len] != quote) {
-               PyErr_BadInternalCall();
-               return NULL;
-       }
-       if (len >= 4 && s[0] == quote && s[1] == quote) {
-               s += 2;
-               len -= 2;
-               if (s[--len] != quote || s[--len] != quote) {
-                       PyErr_BadInternalCall();
-                       return NULL;
-               }
-       }
+        size_t len;
+        int quote = Py_CHARMASK(*s);
+        int rawmode = 0;
+        int need_encoding;
+        int unicode = 0;
+
+        if (isalpha(quote) || quote == '_') {
+                if (quote == 'u' || quote == 'U') {
+                        quote = *++s;
+                        unicode = 1;
+                }
+                if (quote == 'r' || quote == 'R') {
+                        quote = *++s;
+                        rawmode = 1;
+                }
+        }
+        if (quote != '\'' && quote != '\"') {
+                PyErr_BadInternalCall();
+                return NULL;
+        }
+        s++;
+        len = strlen(s);
+        if (len > INT_MAX) {
+                PyErr_SetString(PyExc_OverflowError, 
+                                "string to parse is too long");
+                return NULL;
+        }
+        if (s[--len] != quote) {
+                PyErr_BadInternalCall();
+                return NULL;
+        }
+        if (len >= 4 && s[0] == quote && s[1] == quote) {
+                s += 2;
+                len -= 2;
+                if (s[--len] != quote || s[--len] != quote) {
+                        PyErr_BadInternalCall();
+                        return NULL;
+                }
+        }
 #ifdef Py_USING_UNICODE
-       if (unicode || Py_UnicodeFlag) {
-               return decode_unicode(s, len, rawmode, encoding);
-       }
+        if (unicode || Py_UnicodeFlag) {
+                return decode_unicode(s, len, rawmode, encoding);
+        }
 #endif
-       need_encoding = (encoding != NULL &&
-                        strcmp(encoding, "utf-8") != 0 &&
-                        strcmp(encoding, "iso-8859-1") != 0);
-       if (rawmode || strchr(s, '\\') == NULL) {
-               if (need_encoding) {
+        need_encoding = (encoding != NULL &&
+                         strcmp(encoding, "utf-8") != 0 &&
+                         strcmp(encoding, "iso-8859-1") != 0);
+        if (rawmode || strchr(s, '\\') == NULL) {
+                if (need_encoding) {
 #ifndef Py_USING_UNICODE
-                       /* This should not happen - we never see any other
-                          encoding. */
-                       Py_FatalError(
+                        /* This should not happen - we never see any other
+                           encoding. */
+                        Py_FatalError(
                             "cannot deal with encodings in this build.");
 #else
-                       PyObject *v, *u = PyUnicode_DecodeUTF8(s, len, NULL);
-                       if (u == NULL)
-                               return NULL;
-                       v = PyUnicode_AsEncodedString(u, encoding, NULL);
-                       Py_DECREF(u);
-                       return v;
+                        PyObject *v, *u = PyUnicode_DecodeUTF8(s, len, NULL);
+                        if (u == NULL)
+                                return NULL;
+                        v = PyUnicode_AsEncodedString(u, encoding, NULL);
+                        Py_DECREF(u);
+                        return v;
 #endif
-               } else {
-                       return PyString_FromStringAndSize(s, len);
-               }
-       }
+                } else {
+                        return PyString_FromStringAndSize(s, len);
+                }
+        }
 
-       return PyString_DecodeEscape(s, len, NULL, unicode,
-                                    need_encoding ? encoding : NULL);
+        return PyString_DecodeEscape(s, len, NULL, unicode,
+                                     need_encoding ? encoding : NULL);
 }
 
 /* Build a Python string object out of a STRING atom.  This takes care of
@@ -3308,36 +3326,36 @@ parsestr(const char *s, const char *encoding)
 static PyObject *
 parsestrplus(struct compiling *c, const node *n)
 {
-       PyObject *v;
-       int i;
-       REQ(CHILD(n, 0), STRING);
-       if ((v = parsestr(STR(CHILD(n, 0)), c->c_encoding)) != NULL) {
-               /* String literal concatenation */
-               for (i = 1; i < NCH(n); i++) {
-                       PyObject *s;
-                       s = parsestr(STR(CHILD(n, i)), c->c_encoding);
-                       if (s == NULL)
-                               goto onError;
-                       if (PyString_Check(v) && PyString_Check(s)) {
-                               PyString_ConcatAndDel(&v, s);
-                               if (v == NULL)
-                                   goto onError;
-                       }
+        PyObject *v;
+        int i;
+        REQ(CHILD(n, 0), STRING);
+        if ((v = parsestr(STR(CHILD(n, 0)), c->c_encoding)) != NULL) {
+                /* String literal concatenation */
+                for (i = 1; i < NCH(n); i++) {
+                        PyObject *s;
+                        s = parsestr(STR(CHILD(n, i)), c->c_encoding);
+                        if (s == NULL)
+                                goto onError;
+                        if (PyString_Check(v) && PyString_Check(s)) {
+                                PyString_ConcatAndDel(&v, s);
+                                if (v == NULL)
+                                    goto onError;
+                        }
 #ifdef Py_USING_UNICODE
-                       else {
-                               PyObject *temp = PyUnicode_Concat(v, s);
-                               Py_DECREF(s);
-                               Py_DECREF(v);
-                               v = temp;
-                               if (v == NULL)
-                                   goto onError;
-                       }
+                        else {
+                                PyObject *temp = PyUnicode_Concat(v, s);
+                                Py_DECREF(s);
+                                Py_DECREF(v);
+                                v = temp;
+                                if (v == NULL)
+                                    goto onError;
+                        }
 #endif
-               }
-       }
-       return v;
+                }
+        }
+        return v;
 
  onError:
-       Py_XDECREF(v);
-       return NULL;
+        Py_XDECREF(v);
+        return NULL;
 }
index 8d7147b12814dce25cccb22621b9b6486c892368..73b02205165228b3af7319479306eb213f89c294 100644 (file)
@@ -539,7 +539,7 @@ PyDoc_STRVAR(eval_doc,
 Evaluate the source in the context of globals and locals.\n\
 The source may be a string representing a Python expression\n\
 or a code object as returned by compile().\n\
-The globals must be a dictionary and locals can be any mappping,\n\
+The globals must be a dictionary and locals can be any mapping,\n\
 defaulting to the current globals and locals.\n\
 If only globals is given, locals defaults to it.\n");
 
@@ -1972,10 +1972,11 @@ builtin_sum(PyObject *self, PyObject *args)
 }
 
 PyDoc_STRVAR(sum_doc,
-"sum(sequence, start=0) -> value\n\
+"sum(sequence[, start]) -> value\n\
 \n\
 Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
-of parameter 'start'.  When the sequence is empty, returns start.");
+of parameter 'start' (which defaults to 0).  When the sequence is\n\
+empty, returns start.");
 
 
 static PyObject *
index 2ae12c3ebe1f6eae22bc9d872355fe68ad609cb2..82aa66855f732a9d493a1e4965bc3895f449b591 100644 (file)
@@ -184,10 +184,10 @@ static int pcall[PCALL_NUM];
 PyObject *
 PyEval_GetCallStats(PyObject *self)
 {
-       return Py_BuildValue("iiiiiiiiii",
+       return Py_BuildValue("iiiiiiiiiii",
                             pcall[0], pcall[1], pcall[2], pcall[3],
                             pcall[4], pcall[5], pcall[6], pcall[7],
-                            pcall[8], pcall[9]);
+                            pcall[8], pcall[9], pcall[10]);
 }
 #else
 #define PCALL(O)
@@ -4043,8 +4043,10 @@ import_all_from(PyObject *locals, PyObject *v)
                value = PyObject_GetAttr(v, name);
                if (value == NULL)
                        err = -1;
-               else
+               else if (PyDict_CheckExact(locals))
                        err = PyDict_SetItem(locals, name, value);
+               else
+                       err = PyObject_SetItem(locals, name, value);
                Py_DECREF(name);
                Py_XDECREF(value);
                if (err != 0)
index 1ab315b7e27196ba69814934501132445bec2a2a..bdafd922f4c3eef518818ec5c92ab8b66fce07bb 100644 (file)
@@ -6,9 +6,10 @@
  * object:
  *   1. Checks for future statements.  See future.c
  *   2. Builds a symbol table. See symtable.c.
- *   3. Generate code for basic blocks.         See compiler_mod() in this file.
+ *   3. Generate code for basic blocks.  See compiler_mod() in this file.
  *   4. Assemble the basic blocks into final code.  See assemble() in
- *   this file.         
+ *      this file.      
+ *   5. Optimize the byte code (peephole optimizations).  See peephole.c
  *
  * Note that compiler_mod() suggests module, but the module ast type
  * (mod_ty) has cases for expressions and interactive statements.
@@ -16,7 +17,8 @@
  * CAUTION: The VISIT_* macros abort the current function when they
  * encounter a problem. So don't invoke them when there is memory
  * which needs to be released. Code blocks are OK, as the compiler
- * structure takes care of releasing those.
+ * structure takes care of releasing those.  Use the arena to manage
+ * objects.
  */
 
 #include "Python.h"
 
 int Py_OptimizeFlag = 0;
 
-/*
-  ISSUES:
-
-  opcode_stack_effect() function should be reviewed since stack depth bugs
-  could be really hard to find later.
-
-  Dead code is being generated (i.e. after unconditional jumps).
-    XXX(nnorwitz): not sure this is still true
-*/
-
 #define DEFAULT_BLOCK_SIZE 16
 #define DEFAULT_BLOCKS 8
 #define DEFAULT_CODE_SIZE 128
@@ -116,11 +108,11 @@ struct compiler_unit {
 
        int u_argcount;    /* number of arguments for block */ 
        int u_kwonlyargcount; /* number of keyword only arguments for block */
-    /* Pointer to the most recently allocated block.  By following b_list
-       members, you can reach all early allocated blocks. */
+       /* Pointer to the most recently allocated block.  By following b_list
+          members, you can reach all early allocated blocks. */
        basicblock *u_blocks;
        basicblock *u_curblock; /* pointer to current block */
-       int u_tmpname;     /* temporary variables for list comps */
+       int u_tmpname;          /* temporary variables for list comps */
 
        int u_nfblocks;
        struct fblockinfo u_fblock[CO_MAXBLOCKS];
@@ -153,17 +145,6 @@ struct compiler {
        PyArena *c_arena;        /* pointer to memory allocation arena */
 };
 
-struct assembler {
-       PyObject *a_bytecode;  /* string containing bytecode */
-       int a_offset;          /* offset into bytecode */
-       int a_nblocks;         /* number of reachable blocks */
-       basicblock **a_postorder; /* list of blocks in dfs postorder */
-       PyObject *a_lnotab;    /* string containing lnotab */
-       int a_lnotab_off;      /* offset into lnotab */
-       int a_lineno;          /* last lineno of emitted instruction */
-       int a_lineno_off;      /* bytecode offset of last lineno */
-};
-
 static int compiler_enter_scope(struct compiler *, identifier, void *, int);
 static void compiler_free(struct compiler *);
 static basicblock *compiler_new_block(struct compiler *);
@@ -188,6 +169,8 @@ static int compiler_push_fblock(struct compiler *, enum fblocktype,
                                basicblock *);
 static void compiler_pop_fblock(struct compiler *, enum fblocktype,
                                basicblock *);
+/* Returns true if there is a loop on the fblock stack. */
+static int compiler_in_loop(struct compiler *);
 
 static int inplace_binop(struct compiler *, operator_ty);
 static int expr_constant(expr_ty e);
@@ -395,47 +378,6 @@ dictbytype(PyObject *src, int scope_type, int flag, int offset)
        return dest;
 }
 
-/*
-
-Leave this debugging code for just a little longer.
-
-static void
-compiler_display_symbols(PyObject *name, PyObject *symbols)
-{
-PyObject *key, *value;
-int flags;
-Py_ssize_t pos = 0;
-
-fprintf(stderr, "block %s\n", PyString_AS_STRING(name));
-while (PyDict_Next(symbols, &pos, &key, &value)) {
-flags = PyInt_AsLong(value);
-fprintf(stderr, "var %s:", PyString_AS_STRING(key));
-if (flags & DEF_GLOBAL)
-fprintf(stderr, " declared_global");
-if (flags & DEF_LOCAL)
-fprintf(stderr, " local");
-if (flags & DEF_PARAM)
-fprintf(stderr, " param");
-if (flags & DEF_STAR)
-fprintf(stderr, " stararg");
-if (flags & DEF_DOUBLESTAR)
-fprintf(stderr, " starstar");
-if (flags & DEF_INTUPLE)
-fprintf(stderr, " tuple");
-if (flags & DEF_FREE)
-fprintf(stderr, " free");
-if (flags & DEF_FREE_GLOBAL)
-fprintf(stderr, " global");
-if (flags & DEF_FREE_CLASS)
-fprintf(stderr, " free/class");
-if (flags & DEF_IMPORT)
-fprintf(stderr, " import");
-fprintf(stderr, "\n");
-}
-       fprintf(stderr, "\n");
-}
-*/
-
 static void
 compiler_unit_check(struct compiler_unit *u)
 {
@@ -610,7 +552,7 @@ compiler_new_block(struct compiler *c)
                return NULL;
        }
        memset((void *)b, 0, sizeof(basicblock));
-    /* Extend the singly linked list of blocks with new block. */
+       /* Extend the singly linked list of blocks with new block. */
        b->b_list = u->u_blocks;
        u->u_blocks = b;
        return b;
@@ -649,7 +591,7 @@ compiler_use_next_block(struct compiler *c, basicblock *block)
 /* Returns the offset of the next instruction in the current block's
    b_instr array.  Resizes the b_instr as necessary.
    Returns -1 on failure.
- */
+*/
 
 static int
 compiler_next_instr(struct compiler *c, basicblock *b)
@@ -693,7 +635,7 @@ compiler_next_instr(struct compiler *c, basicblock *b)
    already been set.  If it has been set, the call has no effect.
 
    Every time a new node is b
-   */
+*/
 
 static void
 compiler_set_lineno(struct compiler *c, int off)
@@ -1053,8 +995,8 @@ compiler_addop_j(struct compiler *c, int opcode, basicblock *b, int absolute)
    from the current block to the new block.
 */
 
-/* XXX The returns inside these macros make it impossible to decref
-   objects created in the local function.
+/* The returns inside these macros make it impossible to decref objects
+   created in the local function.  Local objects should use the arena.
 */
 
 
@@ -1722,6 +1664,8 @@ static int
 compiler_continue(struct compiler *c)
 {
        static const char LOOP_ERROR_MSG[] = "'continue' not properly in loop";
+       static const char IN_FINALLY_ERROR_MSG[] = 
+                       "'continue' not supported inside 'finally' clause";
        int i;
 
        if (!c->u->u_nfblocks)
@@ -1733,15 +1677,18 @@ compiler_continue(struct compiler *c)
                break;
        case EXCEPT:
        case FINALLY_TRY:
-               while (--i >= 0 && c->u->u_fblock[i].fb_type != LOOP)
-                       ;
+               while (--i >= 0 && c->u->u_fblock[i].fb_type != LOOP) {
+                       /* Prevent continue anywhere under a finally
+                             even if hidden in a sub-try or except. */
+                       if (c->u->u_fblock[i].fb_type == FINALLY_END)
+                               return compiler_error(c, IN_FINALLY_ERROR_MSG);
+               }
                if (i == -1)
                        return compiler_error(c, LOOP_ERROR_MSG);
                ADDOP_JABS(c, CONTINUE_LOOP, c->u->u_fblock[i].fb_block);
                break;
        case FINALLY_END:
-               return compiler_error(c,
-                       "'continue' not supported inside 'finally' clause");
+               return compiler_error(c, IN_FINALLY_ERROR_MSG);
        }
 
        return 1;
@@ -2084,7 +2031,7 @@ compiler_visit_stmt(struct compiler *c, stmt_ty s)
 {
        int i, n;
 
-    /* Always assign a lineno to the next instruction for a stmt. */
+       /* Always assign a lineno to the next instruction for a stmt. */
        c->u->u_lineno = s->lineno;
        c->u->u_lineno_set = false;
 
@@ -2168,7 +2115,7 @@ compiler_visit_stmt(struct compiler *c, stmt_ty s)
        case Pass_kind:
                break;
        case Break_kind:
-               if (!c->u->u_nfblocks)
+                if (!compiler_in_loop(c))
                        return compiler_error(c, "'break' outside loop");
                ADDOP(c, BREAK_LOOP);
                break;
@@ -2522,7 +2469,6 @@ compiler_compare(struct compiler *c, expr_ty e)
        }
        return 1;
 }
-#undef CMPCAST
 
 static int
 compiler_call(struct compiler *c, expr_ty e)
@@ -2622,7 +2568,7 @@ compiler_listcomp_generator(struct compiler *c, PyObject *tmpname,
        } 
        ADDOP_JABS(c, JUMP_ABSOLUTE, start);
        compiler_use_next_block(c, anchor);
-       /* delete the append method added to locals */
+       /* delete the temporary list name added to locals */
        if (gen_index == 1)
            if (!compiler_nameop(c, tmpname, Del))
                return 0;
@@ -2635,15 +2581,9 @@ compiler_listcomp(struct compiler *c, expr_ty e)
 {
        identifier tmp;
        int rc = 0;
-       static identifier append;
        asdl_seq *generators = e->v.ListComp.generators;
 
        assert(e->kind == ListComp_kind);
-       if (!append) {
-               append = PyString_InternFromString("append");
-               if (!append)
-                       return 0;
-       }
        tmp = compiler_new_tmpname(c);
        if (!tmp)
                return 0;
@@ -2944,9 +2884,9 @@ compiler_visit_expr(struct compiler *c, expr_ty e)
 {
        int i, n;
 
-    /* If expr e has a different line number than the last expr/stmt,
-       set a new line number for the next instruction.
-       */
+       /* If expr e has a different line number than the last expr/stmt,
+           set a new line number for the next instruction.
+        */
        if (e->lineno > c->u->u_lineno) {
                c->u->u_lineno = e->lineno;
                c->u->u_lineno_set = false;
@@ -2995,14 +2935,6 @@ compiler_visit_expr(struct compiler *c, expr_ty e)
        case Yield_kind:
                if (c->u->u_ste->ste_type != FunctionBlock)
                        return compiler_error(c, "'yield' outside function");
-               /*
-               for (i = 0; i < c->u->u_nfblocks; i++) {
-                       if (c->u->u_fblock[i].fb_type == FINALLY_TRY)
-                               return compiler_error(
-                                       c, "'yield' not allowed in a 'try' "
-                                       "block with a 'finally' clause");
-               }
-               */
                if (e->v.Yield.value) {
                        VISIT(c, expr, e->v.Yield.value);
                }
@@ -3140,8 +3072,11 @@ static int
 compiler_push_fblock(struct compiler *c, enum fblocktype t, basicblock *b)
 {
        struct fblockinfo *f;
-       if (c->u->u_nfblocks >= CO_MAXBLOCKS)
+       if (c->u->u_nfblocks >= CO_MAXBLOCKS) {
+               PyErr_SetString(PyExc_SystemError,
+                               "too many statically nested blocks");
                return 0;
+       }
        f = &c->u->u_fblock[c->u->u_nfblocks++];
        f->fb_type = t;
        f->fb_block = b;
@@ -3158,6 +3093,16 @@ compiler_pop_fblock(struct compiler *c, enum fblocktype t, basicblock *b)
        assert(u->u_fblock[u->u_nfblocks].fb_block == b);
 }
 
+static int
+compiler_in_loop(struct compiler *c) {
+        int i;
+        struct compiler_unit *u = c->u;
+        for (i = 0; i < u->u_nfblocks; ++i) {
+                if (u->u_fblock[i].fb_type == LOOP)
+                        return 1;
+        }
+        return 0;
+}
 /* Raises a SyntaxError and returns 0.
    If something goes wrong, a different exception may be raised.
 */
@@ -3316,7 +3261,6 @@ compiler_visit_nested_slice(struct compiler *c, slice_ty s,
        return 1;
 }
 
-
 static int
 compiler_visit_slice(struct compiler *c, slice_ty s, expr_context_ty ctx)
 {
@@ -3358,12 +3302,26 @@ compiler_visit_slice(struct compiler *c, slice_ty s, expr_context_ty ctx)
        return compiler_handle_subscr(c, kindname, ctx);
 }
 
+
+/* End of the compiler section, beginning of the assembler section */
+
 /* do depth-first search of basic block graph, starting with block.
    post records the block indices in post-order.
 
    XXX must handle implicit jumps from one block to next
 */
 
+struct assembler {
+       PyObject *a_bytecode;  /* string containing bytecode */
+       int a_offset;          /* offset into bytecode */
+       int a_nblocks;         /* number of reachable blocks */
+       basicblock **a_postorder; /* list of blocks in dfs postorder */
+       PyObject *a_lnotab;    /* string containing lnotab */
+       int a_lnotab_off;      /* offset into lnotab */
+       int a_lineno;          /* last lineno of emitted instruction */
+       int a_lineno_off;      /* bytecode offset of last lineno */
+};
+
 static void
 dfs(struct compiler *c, basicblock *b, struct assembler *a)
 {
index 48ed05c555f6faf71071bf68af3d25e1f5ab08a6..28c1ea55a3a067ae40dbdb06f1565d15cc9a8c77 100644 (file)
@@ -560,7 +560,8 @@ PyErr_NewException(char *name, PyObject *base, PyObject *dict)
                        goto failure;
        }
        if (PyDict_GetItemString(dict, "__module__") == NULL) {
-               modulename = PyString_FromStringAndSize(name, (int)(dot-name));
+               modulename = PyString_FromStringAndSize(name,
+                                                    (Py_ssize_t)(dot-name));
                if (modulename == NULL)
                        goto failure;
                if (PyDict_SetItemString(dict, "__module__", modulename) != 0)
index 8dc5e784f5ae70d6ab933d8da758d00ea5afa228..f6ddfaa91bab97748ed008ffe8870ba36cae963a 100644 (file)
@@ -816,7 +816,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
 #endif
                        else
                                return converterr("string", arg, msgbuf, bufsize);
-                       if ((int)strlen(*p) != PyString_Size(arg))
+                       if ((Py_ssize_t)strlen(*p) != PyString_Size(arg))
                                return converterr("string without null bytes",
                                                  arg, msgbuf, bufsize);
                }
@@ -883,7 +883,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
                                format++;
                        }
                        else if (*p != NULL &&
-                                (int)strlen(*p) != PyString_Size(arg))
+                                (Py_ssize_t)strlen(*p) != PyString_Size(arg))
                                return converterr(
                                        "string without null bytes or None", 
                                        arg, msgbuf, bufsize);
@@ -1030,7 +1030,8 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
                           PyMem_Free()ing it after usage
 
                        */
-                       if ((int)strlen(PyString_AS_STRING(s)) != size) {
+                       if ((Py_ssize_t)strlen(PyString_AS_STRING(s))
+                                                               != size) {
                                Py_DECREF(s);
                                return converterr(
                                        "(encoded string without NULL bytes)",
@@ -1746,7 +1747,7 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m
 /* For type constructors that don't take keyword args
  *
  * Sets a TypeError and returns 0 if the kwds dict is 
- * not emtpy, returns 1 otherwise
+ * not empty, returns 1 otherwise
  */
 int
 _PyArg_NoKeywords(const char *funcname, PyObject *kw)
index 4c6c05a2cdeb99d99bb4f1c2d97631c22dfc1448..9e46e0290a1dbe4bf6dd3057d7de6faba158ae96 100644 (file)
@@ -64,6 +64,8 @@ extern time_t PyOS_GetLastModificationTime(char *, FILE *);
        Python 2.5b3: 62111 (fix wrong code: x += yield)
        Python 2.5c1: 62121 (fix wrong lnotab with for loops and
                                    storing constants that should have been removed)
+       Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
+       Python 2.6a0: 62141 (peephole optimizations)
        Python 3000:   3000
                              3010 (removed UNARY_CONVERT)
                      3020 (added BUILD_SET)
@@ -799,14 +801,16 @@ parse_source_module(const char *pathname, FILE *fp)
 {
        PyCodeObject *co = NULL;
        mod_ty mod;
-        PyArena *arena = PyArena_New();
+       PyArena *arena = PyArena_New();
+       if (arena == NULL)
+               return NULL;
 
        mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, 0, 
                                   NULL, arena);
        if (mod) {
                co = PyAST_Compile(mod, pathname, NULL, arena);
        }
-        PyArena_Free(arena);
+       PyArena_Free(arena);
        return co;
 }
 
@@ -1030,7 +1034,7 @@ is_builtin(char *name)
 
 /* Return an importer object for a sys.path/pkg.__path__ item 'p',
    possibly by fetching it from the path_importer_cache dict. If it
-   wasn't yet cached, traverse path_hooks until it a hook is found
+   wasn't yet cached, traverse path_hooks until a hook is found
    that can handle the path item. Return None if no hook could;
    this tells our caller it should fall back to the builtin
    import mechanism. Cache the result in path_importer_cache.
@@ -1802,7 +1806,7 @@ load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
 
 
 /* Initialize a built-in module.
-   Return 1 for succes, 0 if the module is not found, and -1 with
+   Return 1 for success, 0 if the module is not found, and -1 with
    an exception set if the initialization failed. */
 
 static int
@@ -2117,7 +2121,7 @@ get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
                size_t len;
                if (lastdot == NULL && level > 0) {
                        PyErr_SetString(PyExc_ValueError,
-                                       "Relative importpath too deep");
+                               "Attempted relative import in non-package");
                        return NULL;
                }
                if (lastdot == NULL)
@@ -2136,7 +2140,8 @@ get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
                char *dot = strrchr(buf, '.');
                if (dot == NULL) {
                        PyErr_SetString(PyExc_ValueError,
-                                       "Relative importpath too deep");
+                               "Attempted relative import beyond "
+                               "toplevel package");
                        return NULL;
                }
                *dot = '\0';
index 2667b65c6dab286012d217a145cb80417041820d..4e02ac6548ddff1f8e499a01c265a16b5c7480c4 100644 (file)
@@ -547,6 +547,11 @@ r_object(RFILE *p)
                        int size;
                        PyLongObject *ob;
                        n = r_long(p);
+                       if (n < -INT_MAX || n > INT_MAX) {
+                               PyErr_SetString(PyExc_ValueError,
+                                               "bad marshal data");
+                               return NULL;
+                       }
                        size = n<0 ? -n : n;
                        ob = _PyLong_New(size);
                        if (ob == NULL)
@@ -655,7 +660,7 @@ r_object(RFILE *p)
        case TYPE_INTERNED:
        case TYPE_STRING:
                n = r_long(p);
-               if (n < 0) {
+               if (n < 0 || n > INT_MAX) {
                        PyErr_SetString(PyExc_ValueError, "bad marshal data");
                        return NULL;
                }
@@ -690,7 +695,7 @@ r_object(RFILE *p)
                char *buffer;
 
                n = r_long(p);
-               if (n < 0) {
+               if (n < 0 || n > INT_MAX) {
                        PyErr_SetString(PyExc_ValueError, "bad marshal data");
                        return NULL;
                }
@@ -711,7 +716,7 @@ r_object(RFILE *p)
 
        case TYPE_TUPLE:
                n = r_long(p);
-               if (n < 0) {
+               if (n < 0 || n > INT_MAX) {
                        PyErr_SetString(PyExc_ValueError, "bad marshal data");
                        return NULL;
                }
@@ -734,7 +739,7 @@ r_object(RFILE *p)
 
        case TYPE_LIST:
                n = r_long(p);
-               if (n < 0) {
+               if (n < 0 || n > INT_MAX) {
                        PyErr_SetString(PyExc_ValueError, "bad marshal data");
                        return NULL;
                }
@@ -833,11 +838,12 @@ r_object(RFILE *p)
                        
                        v = NULL;
 
-                       argcount = r_long(p);
-                       kwonlyargcount = r_long(p);
-                       nlocals = r_long(p);
-                       stacksize = r_long(p);
-                       flags = r_long(p);
+                        /* XXX ignore long->int overflows for now */
+                       argcount = (int)r_long(p);
+                       kwonlyargcount = (int)r_long(p);
+                       nlocals = (int)r_long(p);
+                       stacksize = (int)r_long(p);
+                       flags = (int)r_long(p);
                        code = r_object(p);
                        if (code == NULL)
                                goto code_error;
@@ -862,7 +868,7 @@ r_object(RFILE *p)
                        name = r_object(p);
                        if (name == NULL)
                                goto code_error;
-                       firstlineno = r_long(p);
+                       firstlineno = (int)r_long(p);
                        lnotab = r_object(p);
                        if (lnotab == NULL)
                                goto code_error;
@@ -1035,10 +1041,16 @@ PyMarshal_WriteObjectToString(PyObject *x, int version)
        wf.strings = (version > 0) ? PyDict_New() : NULL;
        w_object(x, &wf);
        Py_XDECREF(wf.strings);
-       if (wf.str != NULL)
-               _PyString_Resize(&wf.str,
-                   (int) (wf.ptr -
-                          PyString_AS_STRING((PyStringObject *)wf.str)));
+       if (wf.str != NULL) {
+               char *base = PyString_AS_STRING((PyStringObject *)wf.str);
+               if (wf.ptr - base > PY_SSIZE_T_MAX) {
+                       Py_DECREF(wf.str);
+                       PyErr_SetString(PyExc_OverflowError,
+                                       "too much marshall data for a string");
+                       return NULL;
+               }
+               _PyString_Resize(&wf.str, (Py_ssize_t)(wf.ptr - base));
+       }
        if (wf.error) {
                Py_XDECREF(wf.str);
                PyErr_SetString(PyExc_ValueError,
index e291014ca4acd36328741388d3861a77bbd070fd..1aa3df2852c2226d084a6acb8cc4c47b281f5afc 100644 (file)
@@ -421,7 +421,7 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags)
                                                        "string too long for Python string");
                                                return NULL;
                                        }
-                                       n = (int)m;
+                                       n = (Py_ssize_t)m;
                                }
                                v = PyString_FromStringAndSize(str, n);
                        }
index 0dda4be2ee828b387fda3044f7cf09a520e95ffb..f0070575dbf68bdba5fb56cf945cd3ee7ffb3710 100644 (file)
@@ -195,13 +195,10 @@ overflowed:
        return (unsigned long)-1;
 }
 
-/* Checking for overflow in PyOS_strtol is a PITA since C doesn't define
- * anything about what happens when a signed integer operation overflows,
- * and some compilers think they're doing you a favor by being "clever"
- * then.  Python assumes a 2's-complement representation, so that the bit
- * pattern for the largest postive signed long is LONG_MAX, and for
- * the smallest negative signed long is LONG_MAX + 1.
+/* Checking for overflow in PyOS_strtol is a PITA; see comments
+ * about PY_ABS_LONG_MIN in longobject.c.
  */
+#define PY_ABS_LONG_MIN                (0-(unsigned long)LONG_MIN)
 
 long
 PyOS_strtol(char *str, char **ptr, int base)
@@ -224,8 +221,7 @@ PyOS_strtol(char *str, char **ptr, int base)
                if (sign == '-')
                        result = -result;
        }
-       else if (sign == '-' && uresult == (unsigned long)LONG_MAX + 1) {
-               assert(LONG_MIN == -LONG_MAX-1);
+       else if (sign == '-' && uresult == PY_ABS_LONG_MIN) {
                result = LONG_MIN;
        }
        else {
index 145996095812c28e591547e8fce8ecafa0130d13..28e4c4c32f1213694b7f9a60a0b5500c8a00096e 100644 (file)
@@ -514,6 +514,13 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
                        case SETUP_EXCEPT:
                        case SETUP_FINALLY:
                                tgt = GETJUMPTGT(codestr, i);
+                               /* Replace JUMP_* to a RETURN into just a RETURN */
+                               if (UNCONDITIONAL_JUMP(opcode) &&
+                                   codestr[tgt] == RETURN_VALUE) {
+                                       codestr[i] = RETURN_VALUE;
+                                       memset(codestr+i+1, NOP, 2);
+                                       continue;
+                               }
                                if (!UNCONDITIONAL_JUMP(codestr[tgt]))
                                        continue;
                                tgttgt = GETJUMPTGT(codestr, tgt);
@@ -531,12 +538,16 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
                                goto exitUnchanged;
 
                                /* Replace RETURN LOAD_CONST None RETURN with just RETURN */
+                               /* Remove unreachable JUMPs after RETURN */
                        case RETURN_VALUE:
-                               if (i+4 >= codelen  ||
-                                   codestr[i+4] != RETURN_VALUE         ||
-                                   !ISBASICBLOCK(blocks,i,5))
+                               if (i+4 >= codelen)
                                        continue;
-                               memset(codestr+i+1, NOP, 4);
+                               if (codestr[i+4] == RETURN_VALUE &&
+                                   ISBASICBLOCK(blocks,i,5))
+                                       memset(codestr+i+1, NOP, 4);
+                               else if (UNCONDITIONAL_JUMP(codestr[i+1]) &&
+                                        ISBASICBLOCK(blocks,i,4))
+                                       memset(codestr+i+1, NOP, 3);
                                break;
                }
        }
index f591a597672f19f19a41831eb92e3d89de8bc4d0..cc25e3ed38e95edf45391ca37e4d03ee243892e3 100644 (file)
@@ -309,9 +309,14 @@ PyThreadState_Swap(PyThreadState *newts)
        */
 #if defined(Py_DEBUG) && defined(WITH_THREAD)
        if (newts) {
+               /* This can be called from PyEval_RestoreThread(). Similar
+                  to it, we need to ensure errno doesn't change.
+               */
+               int err = errno;
                PyThreadState *check = PyGILState_GetThisThreadState();
                if (check && check->interp == newts->interp && check != newts)
                        Py_FatalError("Invalid thread state for this thread");
+               errno = err;
        }
 #endif
        return oldts;
@@ -496,7 +501,7 @@ _PyGILState_Fini(void)
 {
        PyThread_delete_key(autoTLSkey);
        autoTLSkey = 0;
-       autoInterpreterState = NULL;;
+       autoInterpreterState = NULL;
 }
 
 /* When a thread state is created for a thread by some mechanism other than
@@ -504,7 +509,7 @@ _PyGILState_Fini(void)
    it so it doesn't try to create another thread state for the thread (this is
    a better fix for SF bug #1010677 than the first one attempted).
 */
-void
+static void
 _PyGILState_NoteThreadState(PyThreadState* tstate)
 {
        /* If autoTLSkey is 0, this must be the very first threadstate created
index e170090a82e9e4d05c8d9808ca7e37d69482e1fa..15fad813b9a78451daebc2ad669323b96d291970 100644 (file)
@@ -527,11 +527,15 @@ Py_NewInterpreter(void)
        bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
        if (bimod != NULL) {
                interp->builtins = PyModule_GetDict(bimod);
+               if (interp->builtins == NULL)
+                       goto handle_error;
                Py_INCREF(interp->builtins);
        }
        sysmod = _PyImport_FindExtension("sys", "sys");
        if (bimod != NULL && sysmod != NULL) {
                interp->sysdict = PyModule_GetDict(sysmod);
+               if (interp->sysdict == NULL)
+                       goto handle_error;
                Py_INCREF(interp->sysdict);
                PySys_SetPath(Py_GetPath());
                PyDict_SetItemString(interp->sysdict, "modules",
@@ -545,6 +549,7 @@ Py_NewInterpreter(void)
        if (!PyErr_Occurred())
                return tstate;
 
+handle_error:
        /* Oops, it didn't work.  Undo it all. */
 
        PyErr_Print();
@@ -718,6 +723,15 @@ PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flag
        ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
                      PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
 
+#if 0
+/* Keep an example of flags with future keyword support. */
+#define PARSER_FLAGS(flags) \
+       ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
+                     PyPARSE_DONT_IMPLY_DEDENT : 0) \
+                   | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
+                      PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
+#endif
+
 int
 PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
 {
index 688a4b80d9ceda5963c60e5c49c294ac91cd2b67..2bb6e4e85c709d7ff3768c932927839c63afc3b5 100644 (file)
@@ -62,29 +62,28 @@ PyMember_GetOne(const char *addr, PyMemberDef *l)
        addr += l->offset;
        switch (l->type) {
        case T_BYTE:
-               v = PyInt_FromLong(
-                       (long) (((*(char*)addr & 0xff) ^ 0x80) - 0x80));
+               v = PyInt_FromLong(*(char*)addr);
                break;
        case T_UBYTE:
-               v = PyInt_FromLong((long) *(char*)addr & 0xff);
+               v = PyLong_FromUnsignedLong(*(unsigned char*)addr);
                break;
        case T_SHORT:
-               v = PyInt_FromLong((long) *(short*)addr);
+               v = PyInt_FromLong(*(short*)addr);
                break;
        case T_USHORT:
-               v = PyInt_FromLong((long) *(unsigned short*)addr);
+               v = PyLong_FromUnsignedLong(*(unsigned short*)addr);
                break;
        case T_INT:
-               v = PyInt_FromLong((long) *(int*)addr);
+               v = PyInt_FromLong(*(int*)addr);
                break;
        case T_UINT:
-               v = PyInt_FromLong((long) *(unsigned int*)addr);
+               v = PyLong_FromUnsignedLong(*(unsigned int*)addr);
                break;
        case T_LONG:
                v = PyInt_FromLong(*(long*)addr);
                break;
        case T_ULONG:
-               v = PyLong_FromDouble((double) *(unsigned long*)addr);
+               v = PyLong_FromUnsignedLong(*(unsigned long*)addr);
                break;
        case T_FLOAT:
                v = PyFloat_FromDouble((double)*(float*)addr);
@@ -179,68 +178,107 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v)
        }
        addr += l->offset;
        switch (l->type) {
-       case T_BYTE:
-       case T_UBYTE:
-               if (!PyInt_Check(v)) {
-                       PyErr_BadArgument();
+       case T_BYTE:{
+               long long_val;
+               long_val = PyInt_AsLong(v);
+               if ((long_val == -1) && PyErr_Occurred())
                        return -1;
-               }
-               *(char*)addr = (char) PyInt_AsLong(v);
+               /* XXX: For compatibility, only warn about truncations
+                  for now. */
+               if ((long_val > CHAR_MAX) || (long_val < CHAR_MIN))
+                       PyErr_Warn(PyExc_RuntimeWarning, "Truncation of value to char");
+               *(char*)addr = (char)long_val;
                break;
-       case T_SHORT:
-       case T_USHORT:
-               if (!PyInt_Check(v)) {
-                       PyErr_BadArgument();
-                       return -1;
                }
-               *(short*)addr = (short) PyInt_AsLong(v);
+       case T_UBYTE:{
+               long long_val;
+               long_val = PyInt_AsLong(v);
+               if ((long_val == -1) && PyErr_Occurred())
+                       return -1;
+               if ((long_val > UCHAR_MAX) || (long_val < 0))
+                       PyErr_Warn(PyExc_RuntimeWarning, "Truncation of value to unsigned char");
+               *(unsigned char*)addr = (unsigned char)long_val;
                break;
-       case T_UINT:
-       case T_INT:
-               if (!PyInt_Check(v)) {
-                       PyErr_BadArgument();
+               }
+       case T_SHORT:{
+               long long_val;
+               long_val = PyInt_AsLong(v);
+               if ((long_val == -1) && PyErr_Occurred())
                        return -1;
+               if ((long_val > SHRT_MAX) || (long_val < SHRT_MIN))
+                       PyErr_Warn(PyExc_RuntimeWarning, "Truncation of value to short");
+               *(short*)addr = (short)long_val;
+               break;
                }
-               *(int*)addr = (int) PyInt_AsLong(v);
+       case T_USHORT:{
+               long long_val;
+               long_val = PyInt_AsLong(v);
+               if ((long_val == -1) && PyErr_Occurred())
+                       return -1;
+               if ((long_val > USHRT_MAX) || (long_val < 0))
+                       PyErr_Warn(PyExc_RuntimeWarning, "Truncation of value to unsigned short");
+               *(unsigned short*)addr = (unsigned short)long_val;
                break;
-       case T_LONG:
-               if (!PyInt_Check(v)) {
-                       PyErr_BadArgument();
+               }
+       case T_INT:{
+               long long_val;
+               long_val = PyInt_AsLong(v);
+               if ((long_val == -1) && PyErr_Occurred())
                        return -1;
+               if ((long_val > INT_MAX) || (long_val < INT_MIN))
+                       PyErr_Warn(PyExc_RuntimeWarning, "Truncation of value to int");
+               *(int *)addr = (int)long_val;
+               break;
+               }
+       case T_UINT:{
+               unsigned long ulong_val;
+               ulong_val = PyLong_AsUnsignedLong(v);
+               if ((ulong_val == (unsigned int)-1) && PyErr_Occurred()) {
+                       /* XXX: For compatibility, accept negative int values
+                          as well. */
+                       PyErr_Clear();
+                       ulong_val = PyLong_AsLong(v);
+                       if ((ulong_val == (unsigned int)-1) && PyErr_Occurred())
+                               return -1;
+                       PyErr_Warn(PyExc_RuntimeWarning, "Writing negative value into unsigned field");
                }
-               *(long*)addr = PyInt_AsLong(v);
+               if (ulong_val > UINT_MAX)
+                       PyErr_Warn(PyExc_RuntimeWarning, "Truncation of value to unsigned int");
+               *(unsigned int *)addr = (unsigned int)ulong_val;
                break;
-       case T_ULONG:
-               if (PyInt_Check(v))
-                       *(long*)addr = PyInt_AsLong(v);
-               else if (PyLong_Check(v))
-                       *(long*)addr = PyLong_AsLong(v);
-               else {
-                       PyErr_BadArgument();
+               }
+       case T_LONG:{
+               *(long*)addr = PyLong_AsLong(v);
+               if ((*(long*)addr == -1) && PyErr_Occurred())
                        return -1;
+               break;
+               }
+       case T_ULONG:{
+               *(unsigned long*)addr = PyLong_AsUnsignedLong(v);
+               if ((*(unsigned long*)addr == (unsigned long)-1)
+                   && PyErr_Occurred()) {
+                       /* XXX: For compatibility, accept negative int values
+                          as well. */
+                       PyErr_Clear();
+                       *(unsigned long*)addr = PyLong_AsLong(v);
+                       if ((*(unsigned long*)addr == (unsigned int)-1) && PyErr_Occurred())
+                               return -1;
+                       PyErr_Warn(PyExc_RuntimeWarning, "Writing negative value into unsigned field");
                }
                break;
-       case T_FLOAT:
-               if (PyInt_Check(v))
-                       *(float*)addr =
-                               (float) PyInt_AsLong(v);
-               else if (PyFloat_Check(v))
-                       *(float*)addr =
-                               (float) PyFloat_AsDouble(v);
-               else {
-                       PyErr_BadArgument();
-                       return -1;
                }
+       case T_FLOAT:{
+               double double_val;
+               double_val = PyFloat_AsDouble(v);
+               if ((double_val == -1) && PyErr_Occurred())
+                       return -1;
+               *(float*)addr = (float)double_val;
                break;
+               }
        case T_DOUBLE:
-               if (PyInt_Check(v))
-                       *(double*)addr = (double) PyInt_AsLong(v);
-               else if (PyFloat_Check(v))
-                       *(double*)addr = PyFloat_AsDouble(v);
-               else {
-                       PyErr_BadArgument();
+               *(double*)addr = PyFloat_AsDouble(v);
+               if ((*(double*)addr == -1) && PyErr_Occurred())
                        return -1;
-               }
                break;
        case T_OBJECT:
        case T_OBJECT_EX:
index a2df6691af762840485dd792ad714ad087dc88fa..b74a440d4f5812dba44375465335fe8786a1efee 100644 (file)
@@ -979,6 +979,8 @@ svnversion_init(void)
 
        br_start = python + 8;
        br_end = strchr(br_start, '/');
+       assert(br_end);
+
        /* Works even for trunk,
           as we are in trunk/Python/sysmodule.c */
        br_end2 = strchr(br_end+1, '/');
@@ -991,6 +993,8 @@ svnversion_init(void)
        }
        else if (istag || strncmp(br_start, "branches", 8) == 0) {
                len = br_end2 - br_start;
+               assert(len >= 13);
+               assert(len < (sizeof(patchlevel_revision) - 13));
                strncpy(branch, br_start, len);
                branch[len] = '\0';
 
@@ -1221,7 +1225,7 @@ makepathobject(char *path, int delim)
                p = strchr(path, delim);
                if (p == NULL)
                        p = strchr(path, '\0'); /* End of string */
-               w = PyString_FromStringAndSize(path, (int) (p - path));
+               w = PyString_FromStringAndSize(path, (Py_ssize_t) (p - path));
                if (w == NULL) {
                        Py_DECREF(v);
                        return NULL;
diff --git a/README b/README
index c1f0a48a97be33265474c891da11ace7f9b14895..ed6b1396abb577ec8345768919fc102a3332000c 100644 (file)
--- a/README
+++ b/README
@@ -231,6 +231,11 @@ old K&R-C-only compilers is no longer possible.  ANSI C compilers are
 available for all modern systems, either in the form of updated
 compilers from the vendor, or one of the free compilers (gcc).
 
+If "make install" fails mysteriously during the "compiling the library"
+step, make sure that you don't have any of the PYTHONPATH or PYTHONHOME
+environment variables set, as they may interfere with the newly built
+executable which is compiling the library.
+
 Unsupported systems
 -------------------
 
index 8a72eb93d06e27c5177078ec6b3a2755d3c44bb2..c49bb848d95757b35eea49bc838885b1ab610f57 100644 (file)
@@ -872,6 +872,12 @@ def add_files(db):
                     version=version, language=lang)
     tmpfiles.append("msvcr71.dll")
 
+    # Check if _ctypes.pyd exists
+    have_ctypes = os.path.exists(srcdir+"/PCBuild/_ctypes.pyd")
+    if not have_ctypes:
+        print "WARNING: _ctypes.pyd not found, ctypes will not be included"
+        extensions.remove("_ctypes.pyd")
+
     # Add all .py files in Lib, except lib-tk, test
     dirs={}
     pydirs = [(root,"Lib")]
@@ -889,6 +895,8 @@ def add_files(db):
             # data: Lib/email/test
             # output: Lib/test
             testsuite.set_current()
+        elif not have_ctypes and dir == "ctypes":
+            continue
         else:
             default_feature.set_current()
         lib = PyDirectory(db, cab, parent, dir, dir, "%s|%s" % (parent.make_short(dir), dir))
@@ -913,6 +921,7 @@ def add_files(db):
             lib.add_file("185test.db")
             lib.add_file("audiotest.au")
             lib.add_file("cfgparser.1")
+            lib.add_file("sgml_input.html")
             lib.add_file("test.xml")
             lib.add_file("test.xml.out")
             lib.add_file("testtar.tar")
index 306497537706973b4e6af8304ffd4dc6ea34979e..09396492b5f0aa577d7327557d8d103596a62610 100644 (file)
@@ -22,6 +22,8 @@ product_codes = {
     '2.4.2150':'{b191e49c-ea23-43b2-b28a-14e0784069b8}', # 2.4.2
     '2.4.3121':'{f669ed4d-1dce-41c4-9617-d985397187a1}', # 2.4.3c1
     '2.4.3150':'{75e71add-042c-4f30-bfac-a9ec42351313}', # 2.4.3
+    '2.4.4121':'{cd2862db-22a4-4688-8772-85407ea21550}', # 2.4.4c1
+    '2.4.4150':'{60e2c8c9-6cf3-4b1a-9618-e304946c94e6}', # 2.4.4
     '2.5.101': '{bc14ce3e-5e72-4a64-ac1f-bf59a571898c}', # 2.5a1
     '2.5.102': '{5eed51c1-8e9d-4071-94c5-b40de5d49ba5}', # 2.5a2
     '2.5.103': '{73dcd966-ffec-415f-bb39-8342c1f47017}', # 2.5a3
index 370175a333c71b52d8960defb23710fd21e7b21e..392ff50fe2b7b8af40388969770bb71d2890de22 100755 (executable)
@@ -885,7 +885,7 @@ python pybench.py -s p25.pybench -c p21.pybench
                 else:
                     bench.print_benchmark(hidenoise=hidenoise,
                                           limitnames=limitnames)
-            except IOError:
+            except IOError, reason:
                 print '* Error opening/reading file %s: %s' % (
                     repr(show_bench),
                     reason)
@@ -931,8 +931,13 @@ python pybench.py -s p25.pybench -c p21.pybench
                 bench.name = reportfile
                 pickle.dump(bench,f)
                 f.close()
-            except IOError:
+            except IOError, reason:
                 print '* Error opening/writing reportfile'
+            except IOError, reason:
+                print '* Error opening/writing reportfile %s: %s' % (
+                    reportfile,
+                    reason)
+                print
 
 if __name__ == '__main__':
     PyBenchCmdline()
old mode 100644 (file)
new mode 100755 (executable)
index e8fc619b80e49da393445857db9a6703eb8c7955..537f0a18534c3de0b121cde61e645959f2c81fc7 100755 (executable)
@@ -5,7 +5,7 @@
 Usage: nocoding.py dir1 [dir2...]
 """
 
-__author__ = "Oleg Broytmann, Reinhold Birkenfeld"
+__author__ = "Oleg Broytmann, Georg Brandl"
 
 import sys, os, re, getopt
 
index d5eb515e2acb995427f781bc17184355cf84c259..71e0ded9cf5b53deea9fb50ddd3e799403676104 100644 (file)
@@ -15,7 +15,7 @@ The file also must be of appropriate size - not bigger than a megabyte.
 
 walk_python_files() recursively lists all Python files under the given directories.
 """
-__author__ = "Oleg Broytmann, Reinhold Birkenfeld"
+__author__ = "Oleg Broytmann, Georg Brandl"
 
 __all__ = ["has_python_ext", "looks_like_python", "can_be_compiled", "walk_python_files"]
 
index 033bb687ab8b60fd9a588fcbd0be20042251c4df..9f153f632add5dc4746f4f2e6aa494677ffa6de2 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
-# From configure.in Revision: 46754 .
+# From configure.in Revision: 51211 .
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.60 for python 3.0.
+# Generated by GNU Autoconf 2.61 for python 3.0.
 #
 # Report bugs to <http://www.python.org/python-bugs>.
 #
@@ -13,7 +13,8 @@
 ## M4sh Initialization.  ##
 ## --------------------- ##
 
-# Be Bourne compatible
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
@@ -22,10 +23,13 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
 fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
+
+
 
 
 # PATH needs CR
@@ -218,7 +222,7 @@ test \$exitcode = 0) || { (exit 1); exit 1; }
 else
   as_candidate_shells=
     as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /usr/bin/posix$PATH_SEPARATOR/bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
@@ -236,7 +240,6 @@ IFS=$as_save_IFS
         # Try only shells that exist, to save several forks.
         if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
                { ("$as_shell") 2> /dev/null <<\_ASEOF
-# Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
@@ -245,10 +248,12 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
 fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
+
 
 :
 _ASEOF
@@ -256,7 +261,6 @@ _ASEOF
   CONFIG_SHELL=$as_shell
               as_have_required=yes
               if { "$as_shell" 2> /dev/null <<\_ASEOF
-# Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
@@ -265,10 +269,12 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
 fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
+
 
 :
 (as_func_return () {
@@ -515,19 +521,28 @@ else
   as_mkdir_p=false
 fi
 
-# Find out whether ``test -x'' works.  Don't use a zero-byte file, as
-# systems may use methods other than mode bits to determine executability.
-cat >conf$$.file <<_ASEOF
-#! /bin/sh
-exit 0
-_ASEOF
-chmod +x conf$$.file
-if test -x conf$$.file >/dev/null 2>&1; then
-  as_executable_p="test -x"
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
 else
-  as_executable_p=:
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+       case $1 in
+        -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
 fi
-rm -f conf$$.file
+as_executable_p=$as_test_x
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -568,36 +583,36 @@ ac_unique_file="Include/object.h"
 # Factoring default headers for most tests.
 ac_includes_default="\
 #include <stdio.h>
-#if HAVE_SYS_TYPES_H
+#ifdef HAVE_SYS_TYPES_H
 # include <sys/types.h>
 #endif
-#if HAVE_SYS_STAT_H
+#ifdef HAVE_SYS_STAT_H
 # include <sys/stat.h>
 #endif
-#if STDC_HEADERS
+#ifdef STDC_HEADERS
 # include <stdlib.h>
 # include <stddef.h>
 #else
-# if HAVE_STDLIB_H
+# ifdef HAVE_STDLIB_H
 #  include <stdlib.h>
 # endif
 #endif
-#if HAVE_STRING_H
-# if !STDC_HEADERS && HAVE_MEMORY_H
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
 #  include <memory.h>
 # endif
 # include <string.h>
 #endif
-#if HAVE_STRINGS_H
+#ifdef HAVE_STRINGS_H
 # include <strings.h>
 #endif
-#if HAVE_INTTYPES_H
+#ifdef HAVE_INTTYPES_H
 # include <inttypes.h>
 #endif
-#if HAVE_STDINT_H
+#ifdef HAVE_STDINT_H
 # include <stdint.h>
 #endif
-#if HAVE_UNISTD_H
+#ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif"
 
@@ -724,6 +739,7 @@ target_alias
 CC
 CFLAGS
 LDFLAGS
+LIBS
 CPPFLAGS
 CPP'
 
@@ -831,10 +847,10 @@ do
   -disable-* | --disable-*)
     ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       { echo "$as_me: error: invalid feature name: $ac_feature" >&2
    { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
     eval enable_$ac_feature=no ;;
 
   -docdir | --docdir | --docdi | --doc | --do)
@@ -850,10 +866,10 @@ do
   -enable-* | --enable-*)
     ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       { echo "$as_me: error: invalid feature name: $ac_feature" >&2
    { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
     eval enable_$ac_feature=\$ac_optarg ;;
 
   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
@@ -1047,19 +1063,19 @@ do
   -with-* | --with-*)
     ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       { echo "$as_me: error: invalid package name: $ac_package" >&2
    { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
     eval with_$ac_package=\$ac_optarg ;;
 
   -without-* | --without-*)
     ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       { echo "$as_me: error: invalid package name: $ac_package" >&2
    { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
     eval with_$ac_package=no ;;
 
   --x)
@@ -1339,6 +1355,7 @@ Some influential environment variables:
   CFLAGS      C compiler flags
   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
               nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
   CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
   CPP         C preprocessor
@@ -1408,7 +1425,7 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 python configure 3.0
-generated by GNU Autoconf 2.60
+generated by GNU Autoconf 2.61
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
@@ -1422,7 +1439,7 @@ This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by python $as_me 3.0, which was
-generated by GNU Autoconf 2.60.  Invocation command line was
+generated by GNU Autoconf 2.61.  Invocation command line was
 
   $ $0 $@
 
@@ -1986,7 +2003,12 @@ case $ac_sys_system/$ac_sys_release in
   # On OpenBSD, select(2) is not available if _XOPEN_SOURCE is defined,
   # even though select is a POSIX function. Reported by J. Ribbens.
   # Reconfirmed for OpenBSD 3.3 by Zachary Hamm, for 3.4 by Jason Ish.
-  OpenBSD/2.* | OpenBSD/3.[0123456789])
+  OpenBSD/2.* | OpenBSD/3.[0123456789] | OpenBSD/4.[0])
+    define_xopen_source=no;;
+  # Defining _XOPEN_SOURCE on NetBSD version prior to the introduction of
+  # _NETBSD_SOURCE disables certain features (eg. setgroups). Reported by
+  # Marc Recht
+  NetBSD/1.5 | NetBSD/1.5.* | NetBSD/1.6 | NetBSD/1.6.* | NetBSD/1.6A-S)
     define_xopen_source=no;;
   # On Solaris 2.6, sys/wait.h is inconsistent in the usage
   # of union __?sigval. Reported by Stuart Bishop.
@@ -2218,7 +2240,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2258,7 +2280,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="gcc"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2315,7 +2337,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2356,7 +2378,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -2414,7 +2436,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2458,7 +2480,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2599,7 +2621,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
 # in a Makefile.  We should not override ac_cv_exeext if it was cached,
 # so that the user can short-circuit this test for compilers unknown to
 # Autoconf.
-for ac_file in $ac_files
+for ac_file in $ac_files ''
 do
   test -f "$ac_file" || continue
   case $ac_file in
@@ -2627,6 +2649,12 @@ done
 test "$ac_cv_exeext" = no && ac_cv_exeext=
 
 else
+  ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
@@ -2638,8 +2666,6 @@ See \`config.log' for more details." >&2;}
 fi
 
 ac_exeext=$ac_cv_exeext
-{ echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6; }
 
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
@@ -2817,27 +2843,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_compiler_gnu=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -2892,27 +2901,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_prog_cc_g=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -2947,27 +2939,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   :
 else
   echo "$as_me: failed program was:" >&5
@@ -3003,27 +2978,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_prog_cc_g=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -3139,27 +3097,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_prog_cc_c89=$ac_arg
 else
   echo "$as_me: failed program was:" >&5
@@ -3250,7 +3191,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_CXX="$as_dir/$ac_word$ac_exec_ext"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3291,7 +3232,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_CXX="$as_dir/$ac_word$ac_exec_ext"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3340,7 +3281,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CXX="$ac_prog"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3439,17 +3380,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   :
 else
   echo "$as_me: failed program was:" >&5
@@ -3483,17 +3417,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   # Broken: success on invalid input.
 continue
 else
@@ -3558,17 +3485,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   :
 else
   echo "$as_me: failed program was:" >&5
@@ -3602,17 +3522,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   # Broken: success on invalid input.
 continue
 else
@@ -3667,7 +3580,7 @@ do
   for ac_prog in grep ggrep; do
   for ac_exec_ext in '' $ac_executable_extensions; do
     ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-    { test -f "$ac_path_GREP" && $as_executable_p "$ac_path_GREP"; } || continue
+    { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
     # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -3749,7 +3662,7 @@ do
   for ac_prog in egrep; do
   for ac_exec_ext in '' $ac_executable_extensions; do
     ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-    { test -f "$ac_path_EGREP" && $as_executable_p "$ac_path_EGREP"; } || continue
+    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
     # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -4159,7 +4072,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4199,7 +4112,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4257,7 +4170,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_AR="$ac_prog"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4300,7 +4213,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_SVNVERSION="found"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4404,7 +4317,7 @@ case $as_dir/ in
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; }; then
+       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
          if test $ac_prog = install &&
            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
@@ -4785,6 +4698,67 @@ echo "${ECHO_T}$ac_cv_olimit_ok" >&6; }
   fi
 fi
 
+# Check whether GCC supports PyArg_ParseTuple format
+if test "$GCC" = "yes"
+then
+  { echo "$as_me:$LINENO: checking whether gcc supports ParseTuple __format__" >&5
+echo $ECHO_N "checking whether gcc supports ParseTuple __format__... $ECHO_C" >&6; }
+  save_CFLAGS=$CFLAGS
+  CFLAGS="$CFLAGS -Werror"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+    void f(char*,...)__attribute((format(PyArg_ParseTuple, 1, 2)));
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ATTRIBUTE_FORMAT_PARSETUPLE 1
+_ACEOF
+
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$save_CFLAGS
+fi
+
 # On some compilers, pthreads are available without further options
 # (e.g. MacOS X). On some of these systems, the compiler will not
 # complain if unaccepted options are passed (e.g. gcc on Mac OS X).
@@ -5175,27 +5149,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_header_stdc=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -5371,27 +5328,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -5461,12 +5401,13 @@ done
 
 
 
+
 
 
 for ac_header in asm/types.h conio.h curses.h direct.h dlfcn.h errno.h \
 fcntl.h grp.h \
-shadow.h io.h langinfo.h libintl.h ncurses.h poll.h process.h pthread.h \
-signal.h stropts.h termios.h thread.h \
+io.h langinfo.h libintl.h ncurses.h poll.h process.h pthread.h \
+shadow.h signal.h stdint.h stropts.h termios.h thread.h \
 unistd.h utime.h \
 sys/audioio.h sys/bsdtty.h sys/file.h sys/loadavg.h sys/lock.h sys/mkdev.h \
 sys/modem.h \
@@ -5512,27 +5453,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -5568,17 +5492,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -5686,27 +5603,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -5779,27 +5679,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_search_opendir=$ac_res
 else
   echo "$as_me: failed program was:" >&5
@@ -5808,7 +5692,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext
   if test "${ac_cv_search_opendir+set}" = set; then
   break
@@ -5879,27 +5763,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_search_opendir=$ac_res
 else
   echo "$as_me: failed program was:" >&5
@@ -5908,7 +5776,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext
   if test "${ac_cv_search_opendir+set}" = set; then
   break
@@ -5965,27 +5833,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_header_sys_types_h_makedev=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -5994,7 +5846,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_header_sys_types_h_makedev=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 
 fi
@@ -6036,27 +5888,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -6092,17 +5927,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -6201,27 +6029,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -6257,17 +6068,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -6371,27 +6175,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -6455,27 +6242,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -6560,27 +6330,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_has_makedev=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -6589,7 +6343,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_has_makedev=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 if test "$ac_cv_has_makedev" = "no"; then
     # we didn't link, try if _OSF_SOURCE will allow us to link
@@ -6624,27 +6378,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_has_makedev=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -6653,7 +6391,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_has_makedev=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
     if test "$ac_cv_has_makedev" = "yes"; then
 
@@ -6715,27 +6453,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   sol_lfs_bug=no
 else
   echo "$as_me: failed program was:" >&5
@@ -6811,27 +6532,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_mode_t=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -6891,27 +6595,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_off_t=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -6971,27 +6658,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_pid_t=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -7049,27 +6719,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_signal=int
 else
   echo "$as_me: failed program was:" >&5
@@ -7125,27 +6778,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_size_t=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -7243,27 +6879,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_ssize_t=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -7324,27 +6943,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_int=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -7358,16 +6960,15 @@ fi
 { echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
 echo "${ECHO_T}$ac_cv_type_int" >&6; }
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
 { echo "$as_me:$LINENO: checking size of int" >&5
 echo $ECHO_N "checking size of int... $ECHO_C" >&6; }
 if test "${ac_cv_sizeof_int+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test "$ac_cv_type_int" = yes; then
-  # The cast to long int works around a bug in the HP C Compiler
-  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-  # This bug is HP SR number 8606223364.
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
@@ -7377,7 +6978,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef int ac__type_sizeof_;
+   typedef int ac__type_sizeof_;
 int
 main ()
 {
@@ -7401,27 +7002,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -7431,7 +7015,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef int ac__type_sizeof_;
+   typedef int ac__type_sizeof_;
 int
 main ()
 {
@@ -7455,27 +7039,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -7502,7 +7069,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef int ac__type_sizeof_;
+   typedef int ac__type_sizeof_;
 int
 main ()
 {
@@ -7526,27 +7093,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -7556,7 +7106,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef int ac__type_sizeof_;
+   typedef int ac__type_sizeof_;
 int
 main ()
 {
@@ -7580,27 +7130,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -7637,7 +7170,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef int ac__type_sizeof_;
+   typedef int ac__type_sizeof_;
 int
 main ()
 {
@@ -7661,27 +7194,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
@@ -7694,11 +7210,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_int=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
+'') if test "$ac_cv_type_int" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (int)
 See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; } ;;
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_int=0
+   fi ;;
 esac
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -7708,7 +7228,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef int ac__type_sizeof_;
+   typedef int ac__type_sizeof_;
 static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
 static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
 #include <stdio.h>
@@ -7767,21 +7287,25 @@ echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
+if test "$ac_cv_type_int" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (int)
 See \`config.log' for more details." >&2;}
    { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_int=0
+   fi
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
-else
-  ac_cv_sizeof_int=0
-fi
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
 echo "${ECHO_T}$ac_cv_sizeof_int" >&6; }
+
+
+
 cat >>confdefs.h <<_ACEOF
 #define SIZEOF_INT $ac_cv_sizeof_int
 _ACEOF
@@ -7824,27 +7348,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_long=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -7858,16 +7365,15 @@ fi
 { echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
 echo "${ECHO_T}$ac_cv_type_long" >&6; }
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
 { echo "$as_me:$LINENO: checking size of long" >&5
 echo $ECHO_N "checking size of long... $ECHO_C" >&6; }
 if test "${ac_cv_sizeof_long+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test "$ac_cv_type_long" = yes; then
-  # The cast to long int works around a bug in the HP C Compiler
-  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-  # This bug is HP SR number 8606223364.
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
@@ -7877,7 +7383,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef long ac__type_sizeof_;
+   typedef long ac__type_sizeof_;
 int
 main ()
 {
@@ -7901,27 +7407,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -7931,7 +7420,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef long ac__type_sizeof_;
+   typedef long ac__type_sizeof_;
 int
 main ()
 {
@@ -7955,27 +7444,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -8002,7 +7474,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef long ac__type_sizeof_;
+   typedef long ac__type_sizeof_;
 int
 main ()
 {
@@ -8026,27 +7498,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -8056,7 +7511,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef long ac__type_sizeof_;
+   typedef long ac__type_sizeof_;
 int
 main ()
 {
@@ -8080,27 +7535,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -8137,7 +7575,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef long ac__type_sizeof_;
+   typedef long ac__type_sizeof_;
 int
 main ()
 {
@@ -8161,27 +7599,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
@@ -8194,11 +7615,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_long=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
+'') if test "$ac_cv_type_long" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (long)
 See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; } ;;
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_long=0
+   fi ;;
 esac
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -8208,7 +7633,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef long ac__type_sizeof_;
+   typedef long ac__type_sizeof_;
 static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
 static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
 #include <stdio.h>
@@ -8267,21 +7692,25 @@ echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
+if test "$ac_cv_type_long" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (long)
 See \`config.log' for more details." >&2;}
    { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_long=0
+   fi
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
-else
-  ac_cv_sizeof_long=0
-fi
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
 echo "${ECHO_T}$ac_cv_sizeof_long" >&6; }
+
+
+
 cat >>confdefs.h <<_ACEOF
 #define SIZEOF_LONG $ac_cv_sizeof_long
 _ACEOF
@@ -8324,27 +7753,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_void_p=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -8358,16 +7770,15 @@ fi
 { echo "$as_me:$LINENO: result: $ac_cv_type_void_p" >&5
 echo "${ECHO_T}$ac_cv_type_void_p" >&6; }
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
 { echo "$as_me:$LINENO: checking size of void *" >&5
 echo $ECHO_N "checking size of void *... $ECHO_C" >&6; }
 if test "${ac_cv_sizeof_void_p+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test "$ac_cv_type_void_p" = yes; then
-  # The cast to long int works around a bug in the HP C Compiler
-  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-  # This bug is HP SR number 8606223364.
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
@@ -8377,7 +7788,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef void * ac__type_sizeof_;
+   typedef void * ac__type_sizeof_;
 int
 main ()
 {
@@ -8401,27 +7812,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -8431,7 +7825,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef void * ac__type_sizeof_;
+   typedef void * ac__type_sizeof_;
 int
 main ()
 {
@@ -8455,27 +7849,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -8502,7 +7879,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef void * ac__type_sizeof_;
+   typedef void * ac__type_sizeof_;
 int
 main ()
 {
@@ -8526,27 +7903,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -8556,7 +7916,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef void * ac__type_sizeof_;
+   typedef void * ac__type_sizeof_;
 int
 main ()
 {
@@ -8580,27 +7940,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -8637,7 +7980,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef void * ac__type_sizeof_;
+   typedef void * ac__type_sizeof_;
 int
 main ()
 {
@@ -8661,27 +8004,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
@@ -8694,11 +8020,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_void_p=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *)
+'') if test "$ac_cv_type_void_p" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (void *)
 See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; } ;;
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_void_p=0
+   fi ;;
 esac
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -8708,7 +8038,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef void * ac__type_sizeof_;
+   typedef void * ac__type_sizeof_;
 static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
 static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
 #include <stdio.h>
@@ -8767,21 +8097,25 @@ echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (void *)
+if test "$ac_cv_type_void_p" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (void *)
 See \`config.log' for more details." >&2;}
    { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_void_p=0
+   fi
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
-else
-  ac_cv_sizeof_void_p=0
-fi
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5
 echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6; }
+
+
+
 cat >>confdefs.h <<_ACEOF
 #define SIZEOF_VOID_P $ac_cv_sizeof_void_p
 _ACEOF
@@ -8824,27 +8158,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_short=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -8858,16 +8175,15 @@ fi
 { echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
 echo "${ECHO_T}$ac_cv_type_short" >&6; }
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
 { echo "$as_me:$LINENO: checking size of short" >&5
 echo $ECHO_N "checking size of short... $ECHO_C" >&6; }
 if test "${ac_cv_sizeof_short+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test "$ac_cv_type_short" = yes; then
-  # The cast to long int works around a bug in the HP C Compiler
-  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-  # This bug is HP SR number 8606223364.
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
@@ -8877,7 +8193,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef short ac__type_sizeof_;
+   typedef short ac__type_sizeof_;
 int
 main ()
 {
@@ -8901,27 +8217,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -8931,7 +8230,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef short ac__type_sizeof_;
+   typedef short ac__type_sizeof_;
 int
 main ()
 {
@@ -8955,27 +8254,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -9002,7 +8284,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef short ac__type_sizeof_;
+   typedef short ac__type_sizeof_;
 int
 main ()
 {
@@ -9026,27 +8308,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -9056,7 +8321,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef short ac__type_sizeof_;
+   typedef short ac__type_sizeof_;
 int
 main ()
 {
@@ -9080,27 +8345,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -9137,7 +8385,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef short ac__type_sizeof_;
+   typedef short ac__type_sizeof_;
 int
 main ()
 {
@@ -9161,27 +8409,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
@@ -9194,11 +8425,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_short=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
+'') if test "$ac_cv_type_short" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (short)
 See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; } ;;
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_short=0
+   fi ;;
 esac
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -9208,7 +8443,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef short ac__type_sizeof_;
+   typedef short ac__type_sizeof_;
 static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
 static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
 #include <stdio.h>
@@ -9267,21 +8502,25 @@ echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
+if test "$ac_cv_type_short" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (short)
 See \`config.log' for more details." >&2;}
    { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_short=0
+   fi
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
-else
-  ac_cv_sizeof_short=0
-fi
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
 echo "${ECHO_T}$ac_cv_sizeof_short" >&6; }
+
+
+
 cat >>confdefs.h <<_ACEOF
 #define SIZEOF_SHORT $ac_cv_sizeof_short
 _ACEOF
@@ -9324,27 +8563,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_float=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -9358,16 +8580,15 @@ fi
 { echo "$as_me:$LINENO: result: $ac_cv_type_float" >&5
 echo "${ECHO_T}$ac_cv_type_float" >&6; }
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
 { echo "$as_me:$LINENO: checking size of float" >&5
 echo $ECHO_N "checking size of float... $ECHO_C" >&6; }
 if test "${ac_cv_sizeof_float+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test "$ac_cv_type_float" = yes; then
-  # The cast to long int works around a bug in the HP C Compiler
-  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-  # This bug is HP SR number 8606223364.
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
@@ -9377,7 +8598,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef float ac__type_sizeof_;
+   typedef float ac__type_sizeof_;
 int
 main ()
 {
@@ -9401,27 +8622,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -9431,7 +8635,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef float ac__type_sizeof_;
+   typedef float ac__type_sizeof_;
 int
 main ()
 {
@@ -9455,27 +8659,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -9502,7 +8689,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef float ac__type_sizeof_;
+   typedef float ac__type_sizeof_;
 int
 main ()
 {
@@ -9526,27 +8713,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -9556,7 +8726,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef float ac__type_sizeof_;
+   typedef float ac__type_sizeof_;
 int
 main ()
 {
@@ -9580,27 +8750,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -9637,7 +8790,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef float ac__type_sizeof_;
+   typedef float ac__type_sizeof_;
 int
 main ()
 {
@@ -9661,27 +8814,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
@@ -9694,11 +8830,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_float=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (float)
+'') if test "$ac_cv_type_float" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (float)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (float)
 See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; } ;;
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_float=0
+   fi ;;
 esac
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -9708,7 +8848,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef float ac__type_sizeof_;
+   typedef float ac__type_sizeof_;
 static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
 static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
 #include <stdio.h>
@@ -9767,21 +8907,25 @@ echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (float)
+if test "$ac_cv_type_float" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (float)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (float)
 See \`config.log' for more details." >&2;}
    { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_float=0
+   fi
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
-else
-  ac_cv_sizeof_float=0
-fi
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_sizeof_float" >&5
 echo "${ECHO_T}$ac_cv_sizeof_float" >&6; }
+
+
+
 cat >>confdefs.h <<_ACEOF
 #define SIZEOF_FLOAT $ac_cv_sizeof_float
 _ACEOF
@@ -9824,27 +8968,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_double=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -9858,16 +8985,15 @@ fi
 { echo "$as_me:$LINENO: result: $ac_cv_type_double" >&5
 echo "${ECHO_T}$ac_cv_type_double" >&6; }
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
 { echo "$as_me:$LINENO: checking size of double" >&5
 echo $ECHO_N "checking size of double... $ECHO_C" >&6; }
 if test "${ac_cv_sizeof_double+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test "$ac_cv_type_double" = yes; then
-  # The cast to long int works around a bug in the HP C Compiler
-  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-  # This bug is HP SR number 8606223364.
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
@@ -9877,7 +9003,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef double ac__type_sizeof_;
+   typedef double ac__type_sizeof_;
 int
 main ()
 {
@@ -9901,27 +9027,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -9931,7 +9040,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef double ac__type_sizeof_;
+   typedef double ac__type_sizeof_;
 int
 main ()
 {
@@ -9955,27 +9064,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -10002,7 +9094,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef double ac__type_sizeof_;
+   typedef double ac__type_sizeof_;
 int
 main ()
 {
@@ -10026,27 +9118,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -10056,7 +9131,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef double ac__type_sizeof_;
+   typedef double ac__type_sizeof_;
 int
 main ()
 {
@@ -10080,27 +9155,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -10137,7 +9195,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef double ac__type_sizeof_;
+   typedef double ac__type_sizeof_;
 int
 main ()
 {
@@ -10161,27 +9219,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
@@ -10194,11 +9235,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_double=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (double)
+'') if test "$ac_cv_type_double" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (double)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (double)
 See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; } ;;
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_double=0
+   fi ;;
 esac
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -10208,7 +9253,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef double ac__type_sizeof_;
+   typedef double ac__type_sizeof_;
 static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
 static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
 #include <stdio.h>
@@ -10267,21 +9312,25 @@ echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (double)
+if test "$ac_cv_type_double" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (double)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (double)
 See \`config.log' for more details." >&2;}
    { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_double=0
+   fi
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
-else
-  ac_cv_sizeof_double=0
-fi
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_sizeof_double" >&5
 echo "${ECHO_T}$ac_cv_sizeof_double" >&6; }
+
+
+
 cat >>confdefs.h <<_ACEOF
 #define SIZEOF_DOUBLE $ac_cv_sizeof_double
 _ACEOF
@@ -10324,27 +9373,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_fpos_t=yes
 else
   echo "$as_me: failed program was:" >&5
 { echo "$as_me:$LINENO: result: $ac_cv_type_fpos_t" >&5
 echo "${ECHO_T}$ac_cv_type_fpos_t" >&6; }
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
 { echo "$as_me:$LINENO: checking size of fpos_t" >&5
 echo $ECHO_N "checking size of fpos_t... $ECHO_C" >&6; }
 if test "${ac_cv_sizeof_fpos_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test "$ac_cv_type_fpos_t" = yes; then
-  # The cast to long int works around a bug in the HP C Compiler
-  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-  # This bug is HP SR number 8606223364.
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
@@ -10377,7 +9408,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef fpos_t ac__type_sizeof_;
+   typedef fpos_t ac__type_sizeof_;
 int
 main ()
 {
@@ -10401,27 +9432,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -10431,7 +9445,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef fpos_t ac__type_sizeof_;
+   typedef fpos_t ac__type_sizeof_;
 int
 main ()
 {
@@ -10455,27 +9469,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -10502,7 +9499,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef fpos_t ac__type_sizeof_;
+   typedef fpos_t ac__type_sizeof_;
 int
 main ()
 {
@@ -10526,27 +9523,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -10556,7 +9536,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef fpos_t ac__type_sizeof_;
+   typedef fpos_t ac__type_sizeof_;
 int
 main ()
 {
@@ -10580,27 +9560,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -10637,7 +9600,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef fpos_t ac__type_sizeof_;
+   typedef fpos_t ac__type_sizeof_;
 int
 main ()
 {
@@ -10661,27 +9624,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
@@ -10694,11 +9640,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_fpos_t=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (fpos_t)
+'') if test "$ac_cv_type_fpos_t" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (fpos_t)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (fpos_t)
 See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; } ;;
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_fpos_t=0
+   fi ;;
 esac
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -10708,7 +9658,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef fpos_t ac__type_sizeof_;
+   typedef fpos_t ac__type_sizeof_;
 static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
 static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
 #include <stdio.h>
@@ -10767,21 +9717,25 @@ echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (fpos_t)
+if test "$ac_cv_type_fpos_t" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (fpos_t)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (fpos_t)
 See \`config.log' for more details." >&2;}
    { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_fpos_t=0
+   fi
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
-else
-  ac_cv_sizeof_fpos_t=0
-fi
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_sizeof_fpos_t" >&5
 echo "${ECHO_T}$ac_cv_sizeof_fpos_t" >&6; }
+
+
+
 cat >>confdefs.h <<_ACEOF
 #define SIZEOF_FPOS_T $ac_cv_sizeof_fpos_t
 _ACEOF
@@ -10824,27 +9778,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_size_t=yes
 else
   echo "$as_me: failed program was:" >&5
 { echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
 echo "${ECHO_T}$ac_cv_type_size_t" >&6; }
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
 { echo "$as_me:$LINENO: checking size of size_t" >&5
 echo $ECHO_N "checking size of size_t... $ECHO_C" >&6; }
 if test "${ac_cv_sizeof_size_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test "$ac_cv_type_size_t" = yes; then
-  # The cast to long int works around a bug in the HP C Compiler
-  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-  # This bug is HP SR number 8606223364.
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
@@ -10877,7 +9813,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef size_t ac__type_sizeof_;
+   typedef size_t ac__type_sizeof_;
 int
 main ()
 {
@@ -10901,27 +9837,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -10931,7 +9850,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef size_t ac__type_sizeof_;
+   typedef size_t ac__type_sizeof_;
 int
 main ()
 {
@@ -10955,27 +9874,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -11002,7 +9904,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef size_t ac__type_sizeof_;
+   typedef size_t ac__type_sizeof_;
 int
 main ()
 {
@@ -11026,27 +9928,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -11056,7 +9941,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef size_t ac__type_sizeof_;
+   typedef size_t ac__type_sizeof_;
 int
 main ()
 {
@@ -11080,27 +9965,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -11137,7 +10005,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef size_t ac__type_sizeof_;
+   typedef size_t ac__type_sizeof_;
 int
 main ()
 {
@@ -11161,27 +10029,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
@@ -11194,11 +10045,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_size_t=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t)
+'') if test "$ac_cv_type_size_t" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (size_t)
 See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; } ;;
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_size_t=0
+   fi ;;
 esac
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -11208,7 +10063,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef size_t ac__type_sizeof_;
+   typedef size_t ac__type_sizeof_;
 static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
 static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
 #include <stdio.h>
@@ -11267,21 +10122,25 @@ echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t)
+if test "$ac_cv_type_size_t" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (size_t)
 See \`config.log' for more details." >&2;}
    { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_size_t=0
+   fi
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
-else
-  ac_cv_sizeof_size_t=0
-fi
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_sizeof_size_t" >&5
 echo "${ECHO_T}$ac_cv_sizeof_size_t" >&6; }
+
+
+
 cat >>confdefs.h <<_ACEOF
 #define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
 _ACEOF
@@ -11319,27 +10178,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 
 cat >>confdefs.h <<\_ACEOF
@@ -11396,27 +10238,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_long_long=yes
 else
   echo "$as_me: failed program was:" >&5
 { echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
 echo "${ECHO_T}$ac_cv_type_long_long" >&6; }
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
 { echo "$as_me:$LINENO: checking size of long long" >&5
 echo $ECHO_N "checking size of long long... $ECHO_C" >&6; }
 if test "${ac_cv_sizeof_long_long+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test "$ac_cv_type_long_long" = yes; then
-  # The cast to long int works around a bug in the HP C Compiler
-  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-  # This bug is HP SR number 8606223364.
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
@@ -11449,7 +10273,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef long long ac__type_sizeof_;
+   typedef long long ac__type_sizeof_;
 int
 main ()
 {
@@ -11473,27 +10297,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -11503,7 +10310,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef long long ac__type_sizeof_;
+   typedef long long ac__type_sizeof_;
 int
 main ()
 {
@@ -11527,27 +10334,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -11574,7 +10364,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef long long ac__type_sizeof_;
+   typedef long long ac__type_sizeof_;
 int
 main ()
 {
@@ -11598,27 +10388,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -11628,7 +10401,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef long long ac__type_sizeof_;
+   typedef long long ac__type_sizeof_;
 int
 main ()
 {
@@ -11652,27 +10425,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -11709,7 +10465,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef long long ac__type_sizeof_;
+   typedef long long ac__type_sizeof_;
 int
 main ()
 {
@@ -11733,27 +10489,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
@@ -11766,11 +10505,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_long_long=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
+'') if test "$ac_cv_type_long_long" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (long long)
 See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; } ;;
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_long_long=0
+   fi ;;
 esac
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -11780,7 +10523,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef long long ac__type_sizeof_;
+   typedef long long ac__type_sizeof_;
 static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
 static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
 #include <stdio.h>
@@ -11839,21 +10582,25 @@ echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
+if test "$ac_cv_type_long_long" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (long long)
 See \`config.log' for more details." >&2;}
    { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_long_long=0
+   fi
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
-else
-  ac_cv_sizeof_long_long=0
-fi
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
 echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6; }
+
+
+
 cat >>confdefs.h <<_ACEOF
 #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
 _ACEOF
@@ -11861,20 +10608,29 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for uintptr_t support" >&5
-echo $ECHO_N "checking for uintptr_t support... $ECHO_C" >&6; }
-have_uintptr_t=no
-cat >conftest.$ac_ext <<_ACEOF
+{ echo "$as_me:$LINENO: checking for uintptr_t" >&5
+echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_uintptr_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
+#ifdef HAVE_STDINT_H
+        #include <stdint.h>
+        #endif
 
+typedef uintptr_t ac__type_new_;
 int
 main ()
 {
-uintptr_t x; x = (uintptr_t)0;
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
   ;
   return 0;
 }
@@ -11892,46 +10648,28 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_UINTPTR_T 1
-_ACEOF
-
-  have_uintptr_t=yes
-
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_uintptr_t=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-
+       ac_cv_type_uintptr_t=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $have_uintptr_t" >&5
-echo "${ECHO_T}$have_uintptr_t" >&6; }
-if test "$have_uintptr_t" = yes ; then
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
+echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6; }
+if test $ac_cv_type_uintptr_t = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINTPTR_T 1
+_ACEOF
+
 { echo "$as_me:$LINENO: checking for uintptr_t" >&5
 echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6; }
 if test "${ac_cv_type_uintptr_t+set}" = set; then
@@ -11969,27 +10707,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_uintptr_t=yes
 else
   echo "$as_me: failed program was:" >&5
 { echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
 echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6; }
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
 { echo "$as_me:$LINENO: checking size of uintptr_t" >&5
 echo $ECHO_N "checking size of uintptr_t... $ECHO_C" >&6; }
 if test "${ac_cv_sizeof_uintptr_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test "$ac_cv_type_uintptr_t" = yes; then
-  # The cast to long int works around a bug in the HP C Compiler
-  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-  # This bug is HP SR number 8606223364.
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
@@ -12022,7 +10742,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef uintptr_t ac__type_sizeof_;
+   typedef uintptr_t ac__type_sizeof_;
 int
 main ()
 {
@@ -12046,27 +10766,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -12076,7 +10779,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef uintptr_t ac__type_sizeof_;
+   typedef uintptr_t ac__type_sizeof_;
 int
 main ()
 {
@@ -12100,27 +10803,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -12147,7 +10833,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef uintptr_t ac__type_sizeof_;
+   typedef uintptr_t ac__type_sizeof_;
 int
 main ()
 {
@@ -12171,27 +10857,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -12201,7 +10870,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef uintptr_t ac__type_sizeof_;
+   typedef uintptr_t ac__type_sizeof_;
 int
 main ()
 {
@@ -12225,27 +10894,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -12282,7 +10934,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef uintptr_t ac__type_sizeof_;
+   typedef uintptr_t ac__type_sizeof_;
 int
 main ()
 {
@@ -12306,27 +10958,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
@@ -12339,11 +10974,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_uintptr_t=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uintptr_t)
+'') if test "$ac_cv_type_uintptr_t" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (uintptr_t)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (uintptr_t)
 See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; } ;;
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_uintptr_t=0
+   fi ;;
 esac
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -12353,7 +10992,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-                  typedef uintptr_t ac__type_sizeof_;
+   typedef uintptr_t ac__type_sizeof_;
 static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
 static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
 #include <stdio.h>
@@ -12412,21 +11051,25 @@ echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uintptr_t)
+if test "$ac_cv_type_uintptr_t" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (uintptr_t)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (uintptr_t)
 See \`config.log' for more details." >&2;}
    { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_uintptr_t=0
+   fi
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
-else
-  ac_cv_sizeof_uintptr_t=0
-fi
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_sizeof_uintptr_t" >&5
 echo "${ECHO_T}$ac_cv_sizeof_uintptr_t" >&6; }
+
+
+
 cat >>confdefs.h <<_ACEOF
 #define SIZEOF_UINTPTR_T $ac_cv_sizeof_uintptr_t
 _ACEOF
@@ -12434,6 +11077,8 @@ _ACEOF
 
 fi
 
+
+
 # Hmph. AC_CHECK_SIZEOF() doesn't include <sys/types.h>.
 { echo "$as_me:$LINENO: checking size of off_t" >&5
 echo $ECHO_N "checking size of off_t... $ECHO_C" >&6; }
@@ -12630,27 +11275,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   have_pthread_t=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -13168,27 +11796,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_dl_dlopen=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -13197,7 +11809,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_dl_dlopen=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -13255,27 +11867,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_dld_shl_load=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -13284,7 +11880,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_dld_shl_load=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -13350,27 +11946,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_search_sem_init=$ac_res
 else
   echo "$as_me: failed program was:" >&5
@@ -13379,7 +11959,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext
   if test "${ac_cv_search_sem_init+set}" = set; then
   break
@@ -13448,27 +12028,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_intl_textdomain=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -13477,7 +12041,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_intl_textdomain=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -13524,27 +12088,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define AIX_GENUINE_CPLUSPLUS 1
@@ -13560,7 +12108,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 echo "${ECHO_T}no" >&6; }
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext;;
        *) ;;
 esac
@@ -13609,27 +12157,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_nsl_t_open=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -13638,7 +12170,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_nsl_t_open=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -13690,27 +12222,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_socket_socket=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -13719,7 +12235,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_socket_socket=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -13774,27 +12290,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_net_socket=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -13803,7 +12303,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_net_socket=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -14057,27 +12557,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -14113,17 +12596,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -14229,27 +12705,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -14285,17 +12744,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -14426,27 +12878,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
 
     { echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6; }
@@ -14525,27 +12961,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_func_pthread_detach=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -14554,7 +12974,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_func_pthread_detach=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_func_pthread_detach" >&5
@@ -14602,27 +13022,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -14658,17 +13061,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -14769,27 +13165,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -14825,17 +13204,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -14944,27 +13316,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_pthreads_pthread_create=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -14973,7 +13329,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_pthreads_pthread_create=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -15031,27 +13387,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_c_r_pthread_create=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -15060,7 +13400,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_c_r_pthread_create=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -15118,27 +13458,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_pthread___pthread_create_system=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -15147,7 +13471,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_pthread___pthread_create_system=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -15205,27 +13529,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_cma_pthread_create=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -15234,7 +13542,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_cma_pthread_create=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -15270,7 +13578,7 @@ fi
 
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 
@@ -15323,27 +13631,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_mpc_usconfig=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -15352,7 +13644,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_mpc_usconfig=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -15412,27 +13704,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_thread_thr_create=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -15441,7 +13717,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_thread_thr_create=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -15633,27 +13909,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -15662,7 +13922,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -15806,27 +14066,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   { echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6; }
                ipv6=yes
@@ -16205,27 +14448,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -16234,7 +14461,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -16457,27 +14684,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -16486,7 +14697,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -16533,27 +14744,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_CHROOT 1
@@ -16601,27 +14795,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_LINK 1
@@ -16669,27 +14846,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_SYMLINK 1
@@ -16737,27 +14897,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_FCHDIR 1
@@ -16805,27 +14948,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_FSYNC 1
@@ -16873,27 +14999,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_FDATASYNC 1
@@ -16951,27 +15060,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_CTERMID_R 1
@@ -17023,27 +15115,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_FLOCK 1
@@ -17095,27 +15170,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_GETPAGESIZE 1
@@ -17152,7 +15210,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_TRUE="$ac_prog"
     echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -17220,27 +15278,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_c_inet_aton=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -17249,7 +15291,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_c_inet_aton=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -17301,27 +15343,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_resolv_inet_aton=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -17330,7 +15356,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_resolv_inet_aton=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -17400,27 +15426,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_z_inflateCopy=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -17429,7 +15439,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_z_inflateCopy=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -17484,27 +15494,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_HSTRERROR 1
@@ -17521,7 +15515,7 @@ echo "${ECHO_T}no" >&6; }
 
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 
 { echo "$as_me:$LINENO: checking for inet_aton" >&5
@@ -17560,27 +15554,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_INET_ATON 1
@@ -17597,7 +15575,7 @@ echo "${ECHO_T}no" >&6; }
 
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 
 { echo "$as_me:$LINENO: checking for inet_pton" >&5
@@ -17636,27 +15614,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_INET_PTON 1
@@ -17712,27 +15673,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_SETGROUPS 1
@@ -17820,27 +15764,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -17849,7 +15777,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -17903,27 +15831,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_util_openpty=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -17932,7 +15844,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_util_openpty=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -17986,27 +15898,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_bsd_openpty=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -18015,7 +15911,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_bsd_openpty=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -18102,27 +15998,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -18131,7 +16011,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -18185,27 +16065,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_util_forkpty=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -18214,7 +16078,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_util_forkpty=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -18268,27 +16132,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_bsd_forkpty=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -18297,7 +16145,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_bsd_forkpty=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -18391,27 +16239,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -18420,7 +16252,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -18506,27 +16338,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -18535,7 +16351,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -18624,27 +16440,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -18653,7 +16453,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -18691,27 +16491,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define GETPGRP_HAVE_ARG 1
@@ -18797,27 +16580,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -18826,7 +16593,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -18864,27 +16631,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define SETPGRP_HAVE_ARG 1
@@ -18970,27 +16720,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -18999,7 +16733,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -19037,27 +16771,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   :
 else
   echo "$as_me: failed program was:" >&5
@@ -19117,27 +16834,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
 
 
 cat >>confdefs.h <<\_ACEOF
@@ -19157,7 +16858,7 @@ echo "${ECHO_T}no" >&6; }
 
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 
 # On OSF/1 V5.1, getaddrinfo is available, but a define
@@ -19199,27 +16900,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
 
 { echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6; }
@@ -19372,7 +17057,7 @@ buggygetaddrinfo=yes
 
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 
 if test "$buggygetaddrinfo" = "yes"; then
@@ -19455,27 +17140,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -19484,7 +17153,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -19537,27 +17206,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_header_time=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -19595,7 +17247,9 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
-struct tm *tp; tp->tm_sec;
+struct tm tm;
+                                    int *p = &tm.tm_sec;
+                                    return !p;
   ;
   return 0;
 }
@@ -19613,27 +17267,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_struct_tm=time.h
 else
   echo "$as_me: failed program was:" >&5
@@ -19692,27 +17329,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_tm_tm_zone=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -19751,27 +17371,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_tm_tm_zone=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -19820,8 +17423,7 @@ int
 main ()
 {
 #ifndef tzname
-  char *p = (char *) tzname;
-  return !p;
+  (void) tzname;
 #endif
 
   ;
@@ -19841,27 +17443,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_tzname=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -19927,27 +17512,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_var_tzname=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -19956,7 +17525,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_var_tzname=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_var_tzname" >&5
@@ -20005,27 +17574,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_rdev=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20061,27 +17613,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_rdev=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20141,27 +17676,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_blksize=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20197,27 +17715,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_blksize=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20277,27 +17778,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_flags=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20333,27 +17817,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_flags=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20413,27 +17880,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_gen=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20469,27 +17919,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_gen=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20549,27 +17982,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_birthtime=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20605,27 +18021,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_birthtime=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20685,27 +18084,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_blocks=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20741,27 +18123,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_blocks=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20832,27 +18197,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_header_time_altzone=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -20909,27 +18257,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 
 cat >>confdefs.h <<\_ACEOF
@@ -20983,27 +18314,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_struct_addrinfo=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -21060,27 +18374,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_struct_sockaddr_storage=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -21140,27 +18437,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_c_char_unsigned=no
 else
   echo "$as_me: failed program was:" >&5
@@ -21199,10 +18479,10 @@ main ()
 #ifndef __cplusplus
   /* Ultrix mips cc rejects this.  */
   typedef int charset[2];
-  const charset x;
+  const charset cs;
   /* SunOS 4.1.1 cc rejects this.  */
-  char const *const *ccp;
-  char **p;
+  char const *const *pcpcc;
+  char **ppc;
   /* NEC SVR4.0.2 mips cc rejects this.  */
   struct point {int x, y;};
   static struct point const zero = {0,0};
@@ -21211,11 +18491,11 @@ main ()
      an arm of an if-expression whose if-part is not a constant
      expression */
   const char *g = "string";
-  ccp = &g + (g ? g-g : 0);
+  pcpcc = &g + (g ? g-g : 0);
   /* HPUX 7.0 cc rejects these. */
-  ++ccp;
-  p = (char**) ccp;
-  ccp = (char const *const *) p;
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
   { /* SCO 3.2v4 cc rejects this.  */
     char *t;
     char const *s = 0 ? (char *) 0 : (char const *) 0;
@@ -21242,7 +18522,7 @@ main ()
     const int foo = 10;
     if (!foo) return 0;
   }
-  return !x[0] && !zero.x;
+  return !cs[0] && !zero.x;
 #endif
 
   ;
@@ -21262,27 +18542,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_c_const=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -21335,27 +18598,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   works=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -21404,27 +18650,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   works=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -21473,27 +18702,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 
 cat >>confdefs.h <<\_ACEOF
@@ -21538,43 +18750,26 @@ main ()
 {
 return foo(10, "", 3.14);
   ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 
 cat >>confdefs.h <<\_ACEOF
@@ -21628,27 +18823,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_SOCKETPAIR 1
@@ -21700,27 +18878,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   { echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6; }
 
@@ -21775,27 +18936,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   :
 else
   echo "$as_me: failed program was:" >&5
@@ -21882,27 +19026,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_func_gethostbyname_r=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -21911,7 +19039,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_func_gethostbyname_r=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname_r" >&5
@@ -21964,27 +19092,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
     cat >>confdefs.h <<\_ACEOF
 #define HAVE_GETHOSTBYNAME_R 1
@@ -22045,27 +19156,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
       cat >>confdefs.h <<\_ACEOF
 #define HAVE_GETHOSTBYNAME_R 1
@@ -22124,27 +19218,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
         cat >>confdefs.h <<\_ACEOF
 #define HAVE_GETHOSTBYNAME_R 1
@@ -22248,27 +19325,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -22277,7 +19338,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -22367,27 +19428,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_func___fpu_control=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -22396,7 +19441,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_func___fpu_control=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_func___fpu_control" >&5
@@ -22447,27 +19492,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_ieee___fpu_control=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -22476,7 +19505,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_ieee___fpu_control=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -22647,27 +19676,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
@@ -22676,7 +19689,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 ac_res=`eval echo '${'$as_ac_var'}'`
@@ -22735,27 +19748,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -22791,17 +19787,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -22912,27 +19901,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_wchar_t=yes
 else
   echo "$as_me: failed program was:" >&5
 { echo "$as_me:$LINENO: result: $ac_cv_type_wchar_t" >&5
 echo "${ECHO_T}$ac_cv_type_wchar_t" >&6; }
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
 { echo "$as_me:$LINENO: checking size of wchar_t" >&5
 echo $ECHO_N "checking size of wchar_t... $ECHO_C" >&6; }
 if test "${ac_cv_sizeof_wchar_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test "$ac_cv_type_wchar_t" = yes; then
-  # The cast to long int works around a bug in the HP C Compiler
-  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-  # This bug is HP SR number 8606223364.
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
@@ -22966,7 +19937,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <wchar.h>
 
-                  typedef wchar_t ac__type_sizeof_;
+   typedef wchar_t ac__type_sizeof_;
 int
 main ()
 {
@@ -22986,31 +19957,14 @@ esac
 eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=0 ac_mid=0
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -23021,7 +19975,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <wchar.h>
 
-                  typedef wchar_t ac__type_sizeof_;
+   typedef wchar_t ac__type_sizeof_;
 int
 main ()
 {
@@ -23045,27 +19999,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -23093,7 +20030,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <wchar.h>
 
-                  typedef wchar_t ac__type_sizeof_;
+   typedef wchar_t ac__type_sizeof_;
 int
 main ()
 {
@@ -23117,27 +20054,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=-1 ac_mid=-1
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
@@ -23148,7 +20068,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <wchar.h>
 
-                  typedef wchar_t ac__type_sizeof_;
+   typedef wchar_t ac__type_sizeof_;
 int
 main ()
 {
@@ -23172,27 +20092,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
@@ -23230,7 +20133,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <wchar.h>
 
-                  typedef wchar_t ac__type_sizeof_;
+   typedef wchar_t ac__type_sizeof_;
 int
 main ()
 {
@@ -23254,27 +20157,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
@@ -23287,11 +20173,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_wchar_t=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (wchar_t)
+'') if test "$ac_cv_type_wchar_t" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (wchar_t)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (wchar_t)
 See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; } ;;
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_wchar_t=0
+   fi ;;
 esac
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -23302,7 +20192,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <wchar.h>
 
-                  typedef wchar_t ac__type_sizeof_;
+   typedef wchar_t ac__type_sizeof_;
 static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
 static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
 #include <stdio.h>
@@ -23361,21 +20251,25 @@ echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (wchar_t)
+if test "$ac_cv_type_wchar_t" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (wchar_t)
 See \`config.log' for more details." >&5
 echo "$as_me: error: cannot compute sizeof (wchar_t)
 See \`config.log' for more details." >&2;}
    { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_wchar_t=0
+   fi
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
-else
-  ac_cv_sizeof_wchar_t=0
-fi
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_sizeof_wchar_t" >&5
 echo "${ECHO_T}$ac_cv_sizeof_wchar_t" >&6; }
+
+
+
 cat >>confdefs.h <<_ACEOF
 #define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t
 _ACEOF
@@ -23418,27 +20312,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 
 cat >>confdefs.h <<\_ACEOF
@@ -23634,7 +20511,8 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
-#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
+#if  ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \
+       && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN)
  bogus endian macros
 #endif
 
@@ -23655,27 +20533,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   # It does; now see whether it defined to BIG_ENDIAN or not.
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -23710,27 +20571,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_c_bigendian=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -23781,27 +20625,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
   ac_cv_c_bigendian=yes
 fi
@@ -24015,27 +20842,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_have_getc_unlocked=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -24044,7 +20855,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_have_getc_unlocked=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 
@@ -24105,27 +20916,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_readline_readline=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -24134,7 +20929,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_readline_readline=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -24194,27 +20989,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_termcap_readline=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -24223,7 +21002,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_termcap_readline=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -24283,27 +21062,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_readline_rl_callback_handler_install=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -24312,7 +21075,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_readline_rl_callback_handler_install=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -24348,17 +21111,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   have_readline=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -24434,27 +21190,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_readline_rl_pre_input_hook=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -24463,7 +21203,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_readline_rl_pre_input_hook=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -24518,30 +21258,14 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_readline_rl_completion_matches=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -24550,7 +21274,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_lib_readline_rl_completion_matches=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
@@ -24586,17 +21310,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
   have_readline=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -24825,27 +21542,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_tm_tm_zone=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -24884,27 +21584,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_tm_tm_zone=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -24953,8 +21636,7 @@ int
 main ()
 {
 #ifndef tzname
-  char *p = (char *) tzname;
-  return !p;
+  (void) tzname;
 #endif
 
   ;
@@ -24974,27 +21656,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_tzname=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -25060,27 +21725,11 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_var_tzname=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -25089,7 +21738,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_cv_var_tzname=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_var_tzname" >&5
@@ -25268,27 +21917,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_stat_tv_nsec=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -25348,27 +21980,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_stat_tv_nsec2=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -25428,27 +22043,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_mvwdelch_is_expression=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -25508,27 +22106,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_window_has_flags=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -25583,27 +22164,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_CURSES_IS_TERM_RESIZED 1
@@ -25652,27 +22216,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_CURSES_RESIZE_TERM 1
@@ -25721,27 +22268,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_CURSES_RESIZETERM 1
@@ -25762,55 +22292,38 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 { echo "$as_me:$LINENO: checking for /dev/ptmx" >&5
 echo $ECHO_N "checking for /dev/ptmx... $ECHO_C" >&6; }
-if test "${ac_cv_file__dev_ptmx+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  test "$cross_compiling" = yes &&
-  { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
-echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
-   { (exit 1); exit 1; }; }
-if test -r "/dev/ptmx"; then
-  ac_cv_file__dev_ptmx=yes
-else
-  ac_cv_file__dev_ptmx=no
-fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_file__dev_ptmx" >&5
-echo "${ECHO_T}$ac_cv_file__dev_ptmx" >&6; }
-if test $ac_cv_file__dev_ptmx = yes; then
+
+if test -r /dev/ptmx
+then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_DEV_PTMX 1
 _ACEOF
 
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
 
 { echo "$as_me:$LINENO: checking for /dev/ptc" >&5
 echo $ECHO_N "checking for /dev/ptc... $ECHO_C" >&6; }
-if test "${ac_cv_file__dev_ptc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  test "$cross_compiling" = yes &&
-  { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
-echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
-   { (exit 1); exit 1; }; }
-if test -r "/dev/ptc"; then
-  ac_cv_file__dev_ptc=yes
-else
-  ac_cv_file__dev_ptc=no
-fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_file__dev_ptc" >&5
-echo "${ECHO_T}$ac_cv_file__dev_ptc" >&6; }
-if test $ac_cv_file__dev_ptc = yes; then
+
+if test -r /dev/ptc
+then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_DEV_PTC 1
 _ACEOF
 
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
 
-
 { echo "$as_me:$LINENO: checking for %zd printf() format support" >&5
 echo $ECHO_N "checking for %zd printf() format support... $ECHO_C" >&6; }
 if test "$cross_compiling" = yes; then
@@ -25832,12 +22345,26 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 int main()
 {
-    char buffer[4];
+    char buffer[256];
+
+#ifdef HAVE_SSIZE_T
+typedef ssize_t Py_ssize_t;
+#elif SIZEOF_VOID_P == SIZEOF_LONG
+typedef long Py_ssize_t;
+#else
+typedef int Py_ssize_t;
+#endif
 
     if(sprintf(buffer, "%zd", (size_t)123) < 0)
                return 1;
 
-    if (strncmp(buffer, "123", 3))
+    if (strcmp(buffer, "123"))
+       return 1;
+
+    if (sprintf(buffer, "%zd", (Py_ssize_t)-123) < 0)
+               return 1;
+
+    if (strcmp(buffer, "-123"))
        return 1;
 
     return 0;
@@ -25929,27 +22456,10 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-        { ac_try='test -s conftest.$ac_objext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_type_socklen_t=yes
 else
   echo "$as_me: failed program was:" >&5
@@ -26115,7 +22625,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF
 ## M4sh Initialization.  ##
 ## --------------------- ##
 
-# Be Bourne compatible
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
@@ -26124,10 +22635,13 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
 fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
+
+
 
 
 # PATH needs CR
@@ -26351,19 +22865,28 @@ else
   as_mkdir_p=false
 fi
 
-# Find out whether ``test -x'' works.  Don't use a zero-byte file, as
-# systems may use methods other than mode bits to determine executability.
-cat >conf$$.file <<_ASEOF
-#! /bin/sh
-exit 0
-_ASEOF
-chmod +x conf$$.file
-if test -x conf$$.file >/dev/null 2>&1; then
-  as_executable_p="test -x"
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
 else
-  as_executable_p=:
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+       case $1 in
+        -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
 fi
-rm -f conf$$.file
+as_executable_p=$as_test_x
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -26379,7 +22902,7 @@ exec 6>&1
 # values after options handling.
 ac_log="
 This file was extended by python $as_me 3.0, which was
-generated by GNU Autoconf 2.60.  Invocation command line was
+generated by GNU Autoconf 2.61.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -26407,7 +22930,7 @@ current configuration.
 Usage: $0 [OPTIONS] [FILE]...
 
   -h, --help       print this help, then exit
-  -V, --version    print version number, then exit
+  -V, --version    print version number and configuration settings, then exit
   -q, --quiet      do not print progress messages
   -d, --debug      don't remove temporary files
       --recheck    update $as_me by reconfiguring in the same conditions
@@ -26428,7 +22951,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
 python config.status 3.0
-configured by $0, generated by GNU Autoconf 2.60,
+configured by $0, generated by GNU Autoconf 2.61,
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
 Copyright (C) 2006 Free Software Foundation, Inc.
index 5d44ccec79c174b87d52bb0eccff8a7d9bbcc5a7..82bc90ea952d009bd280b83772e6cc81bff87f78 100644 (file)
@@ -201,7 +201,12 @@ case $ac_sys_system/$ac_sys_release in
   # On OpenBSD, select(2) is not available if _XOPEN_SOURCE is defined,
   # even though select is a POSIX function. Reported by J. Ribbens.
   # Reconfirmed for OpenBSD 3.3 by Zachary Hamm, for 3.4 by Jason Ish.
-  OpenBSD/2.* | OpenBSD/3.@<:@0123456789@:>@) 
+  OpenBSD/2.* | OpenBSD/3.@<:@0123456789@:>@ | OpenBSD/4.@<:@0@:>@) 
+    define_xopen_source=no;;
+  # Defining _XOPEN_SOURCE on NetBSD version prior to the introduction of
+  # _NETBSD_SOURCE disables certain features (eg. setgroups). Reported by
+  # Marc Recht
+  NetBSD/1.5 | NetBSD/1.5.* | NetBSD/1.6 | NetBSD/1.6.* | NetBSD/1.6[A-S])
     define_xopen_source=no;;
   # On Solaris 2.6, sys/wait.h is inconsistent in the usage
   # of union __?sigval. Reported by Stuart Bishop.
@@ -890,6 +895,22 @@ else
   fi
 fi
 
+# Check whether GCC supports PyArg_ParseTuple format
+if test "$GCC" = "yes"
+then
+  AC_MSG_CHECKING(whether gcc supports ParseTuple __format__)
+  save_CFLAGS=$CFLAGS
+  CFLAGS="$CFLAGS -Werror"
+  AC_TRY_COMPILE([
+    void f(char*,...)__attribute((format(PyArg_ParseTuple, 1, 2)));
+  ],,
+  AC_DEFINE(HAVE_ATTRIBUTE_FORMAT_PARSETUPLE, 1, [Define if GCC supports __attribute__((format(PyArg_ParseTuple, 2, 3)))])
+  AC_MSG_RESULT(yes),
+  AC_MSG_RESULT(no)
+  )
+  CFLAGS=$save_CFLAGS
+fi
+
 # On some compilers, pthreads are available without further options
 # (e.g. MacOS X). On some of these systems, the compiler will not
 # complain if unaccepted options are passed (e.g. gcc on Mac OS X).
@@ -1068,8 +1089,8 @@ dnl AC_MSG_RESULT($cpp_type)
 AC_HEADER_STDC
 AC_CHECK_HEADERS(asm/types.h conio.h curses.h direct.h dlfcn.h errno.h \
 fcntl.h grp.h \
-shadow.h io.h langinfo.h libintl.h ncurses.h poll.h process.h pthread.h \
-signal.h stropts.h termios.h thread.h \
+io.h langinfo.h libintl.h ncurses.h poll.h process.h pthread.h \
+shadow.h signal.h stdint.h stropts.h termios.h thread.h \
 unistd.h utime.h \
 sys/audioio.h sys/bsdtty.h sys/file.h sys/loadavg.h sys/lock.h sys/mkdev.h \
 sys/modem.h \
@@ -1197,16 +1218,12 @@ if test "$have_long_long" = yes ; then
 AC_CHECK_SIZEOF(long long, 8)
 fi
 
-AC_MSG_CHECKING(for uintptr_t support)
-have_uintptr_t=no
-AC_TRY_COMPILE([], [uintptr_t x; x = (uintptr_t)0;], [
-  AC_DEFINE(HAVE_UINTPTR_T, 1, [Define this if you have the type uintptr_t.]) 
-  have_uintptr_t=yes
-])
-AC_MSG_RESULT($have_uintptr_t)
-if test "$have_uintptr_t" = yes ; then
-AC_CHECK_SIZEOF(uintptr_t, 4)
-fi
+AC_CHECK_TYPES(uintptr_t, 
+   [AC_CHECK_SIZEOF(uintptr_t, 4)], 
+   [], [#ifdef HAVE_STDINT_H
+        #include <stdint.h>
+        #endif])
+
 
 # Hmph. AC_CHECK_SIZEOF() doesn't include <sys/types.h>.
 AC_MSG_CHECKING(size of off_t)
@@ -3342,8 +3359,27 @@ AC_TRY_COMPILE([#include <curses.h>], void *x=resizeterm,
   AC_MSG_RESULT(no)
 )
 
-AC_CHECK_FILE(/dev/ptmx, AC_DEFINE(HAVE_DEV_PTMX, 1, [Define if we have /dev/ptmx.]))
-AC_CHECK_FILE(/dev/ptc, AC_DEFINE(HAVE_DEV_PTC, 1, [Define if we have /dev/ptc.]))
+AC_MSG_CHECKING(for /dev/ptmx)
+
+if test -r /dev/ptmx
+then
+  AC_MSG_RESULT(yes)
+  AC_DEFINE(HAVE_DEV_PTMX, 1,
+  [Define if we have /dev/ptmx.])
+else
+  AC_MSG_RESULT(no)
+fi
+
+AC_MSG_CHECKING(for /dev/ptc)
+
+if test -r /dev/ptc
+then
+  AC_MSG_RESULT(yes)
+  AC_DEFINE(HAVE_DEV_PTC, 1,
+  [Define if we have /dev/ptc.])
+else
+  AC_MSG_RESULT(no)
+fi
 
 AC_MSG_CHECKING(for %zd printf() format support)
 AC_TRY_RUN([#include <stdio.h>
@@ -3352,14 +3388,28 @@ AC_TRY_RUN([#include <stdio.h>
 
 int main()
 {
-    char buffer[4];
+    char buffer[256];
+
+#ifdef HAVE_SSIZE_T
+typedef ssize_t Py_ssize_t;
+#elif SIZEOF_VOID_P == SIZEOF_LONG
+typedef long Py_ssize_t;
+#else
+typedef int Py_ssize_t;
+#endif
 
     if(sprintf(buffer, "%zd", (size_t)123) < 0)
                return 1;
 
-    if (strncmp(buffer, "123", 3))
+    if (strcmp(buffer, "123"))
        return 1;
-    
+
+    if (sprintf(buffer, "%zd", (Py_ssize_t)-123) < 0)
+               return 1;
+
+    if (strcmp(buffer, "-123"))
+       return 1;
+
     return 0;
 }],
 [AC_MSG_RESULT(yes)
index a3d7f6e3bfce66a2848ae2e8a0474a6b310e4286..6407871725821006d57bfe412dbaed97a7d99012 100644 (file)
@@ -40,6 +40,9 @@
 /* Define to 1 if you have the <asm/types.h> header file. */
 #undef HAVE_ASM_TYPES_H
 
+/* Define if GCC supports __attribute__((format(PyArg_ParseTuple, 2, 3))) */
+#undef HAVE_ATTRIBUTE_FORMAT_PARSETUPLE
+
 /* Define to 1 if you have the `bind_textdomain_codeset' function. */
 #undef HAVE_BIND_TEXTDOMAIN_CODESET
 
 /* Define this if you have tcl and TCL_UTF_MAX==6 */
 #undef HAVE_UCS4_TCL
 
-/* Define this if you have the type uintptr_t. */
+/* Define to 1 if the system has the type `uintptr_t'. */
 #undef HAVE_UINTPTR_T
 
 /* Define to 1 if you have the `uname' function. */
index 1e58a2f81a8584c8c7208e7838000aac576fcc73..39001071c77df4f04f9045f1714704e52ed98af6 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -679,7 +679,8 @@ class PyBuildExt(build_ext):
                             # save the include directory with the db.h version
                             # (first occurrance only)
                             db_ver_inc_map[db_ver] = d
-                            print "db.h: found", db_ver, "in", d
+                            if db_setup_debug:
+                                print "db.h: found", db_ver, "in", d
                         else:
                             # we already found a header for this library version
                             if db_setup_debug: print "db.h: ignoring", d
@@ -719,8 +720,9 @@ class PyBuildExt(build_ext):
                         if db_setup_debug: print "db lib: ", dblib, "not found"
 
         except db_found:
-            print "db lib: using", db_ver, dblib
-            if db_setup_debug: print "db: lib dir", dblib_dir, "inc dir", db_incdir
+            if db_setup_debug:
+                print "db lib: using", db_ver, dblib
+                print "db: lib dir", dblib_dir, "inc dir", db_incdir
             db_incs = [db_incdir]
             dblibs = [dblib]
             # We add the runtime_library_dirs argument because the
@@ -741,7 +743,7 @@ class PyBuildExt(build_ext):
             dblib_dir = None
 
         # The sqlite interface
-        sqlite_setup_debug = True   # verbose debug prints from this script?
+        sqlite_setup_debug = False   # verbose debug prints from this script?
 
         # We hunt for #define SQLITE_VERSION "n.n.n"
         # We need to find >= sqlite version 3.0.8
@@ -773,7 +775,8 @@ class PyBuildExt(build_ext):
                                         for x in sqlite_version.split(".")])
                     if sqlite_version_tuple >= MIN_SQLITE_VERSION_NUMBER:
                         # we win!
-                        print "%s/sqlite3.h: version %s"%(d, sqlite_version)
+                        if sqlite_setup_debug:
+                            print "%s/sqlite3.h: version %s"%(d, sqlite_version)
                         sqlite_incdir = d
                         break
                     else: