From 360e4b8fb19f34360093bc15ef9aad13115a6069 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 14 May 2007 22:51:27 +0000 Subject: Merged revisions 55325-55327 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/p3yk ................ r55326 | guido.van.rossum | 2007-05-14 15:07:35 -0700 (Mon, 14 May 2007) | 2 lines Don't use err.message, use err.args[0]. ................ r55327 | guido.van.rossum | 2007-05-14 15:11:37 -0700 (Mon, 14 May 2007) | 259 lines Merged revisions 54988-55226,55228-55323 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r54995 | neal.norwitz | 2007-04-26 23:45:32 -0700 (Thu, 26 Apr 2007) | 3 lines This gets the test working on Solaris. It seems a little hokey to me, but the test passed on Linux and Solaris, hopefully other platforms too. ........ r55002 | georg.brandl | 2007-04-27 12:20:00 -0700 (Fri, 27 Apr 2007) | 2 lines Version fix (bug #1708710) ........ r55021 | neal.norwitz | 2007-04-29 16:53:24 -0700 (Sun, 29 Apr 2007) | 1 line There really are some tests that are problematic. ........ r55024 | kristjan.jonsson | 2007-04-30 08:17:46 -0700 (Mon, 30 Apr 2007) | 1 line Complete revamp of PCBuild8 directory. Use subdirectories for each project under the main pcbuild solution. Now make extensive use of property sheets to simplify project configuration. x64 build fully supported, and the process for building PGO version (Profiler Guided Optimization) simplified. All projects are now present, except _ssl, which needs to be reimplemented. Also, some of the projects that require external libraries need extra work to fully compile on x64. ........ r55025 | thomas.heller | 2007-04-30 08:44:17 -0700 (Mon, 30 Apr 2007) | 4 lines Make sure to call PyErr_NoMemory() in several places where PyMem_Malloc() could potentially fail. Will backport to the release25-maint branch. ........ r55027 | thomas.heller | 2007-04-30 09:04:57 -0700 (Mon, 30 Apr 2007) | 8 lines When accessing the .value attribute of a c_wchar_p instance, and the instance does not point to a valid wchar_t zero-terminated string, raise a ValueError. c_char_p does this already. The ValueError message now contains the correct pointer address. Will backport to release25-maint. ........ r55036 | georg.brandl | 2007-04-30 23:04:11 -0700 (Mon, 30 Apr 2007) | 2 lines Bug #1710295: exceptions are now new-style classes. ........ r55038 | georg.brandl | 2007-04-30 23:08:15 -0700 (Mon, 30 Apr 2007) | 2 lines Patch #1710352: add missing public functions to locale.__all__. ........ r55041 | vinay.sajip | 2007-05-01 03:20:03 -0700 (Tue, 01 May 2007) | 1 line Added new optional credentials argument to SMTPHandler.__init__, and smtp.login() is now called in SMTPHandler.emit() if credentials are specified. ........ r55042 | vinay.sajip | 2007-05-01 03:21:45 -0700 (Tue, 01 May 2007) | 1 line Added documentation for new optional credentials argument to SMTPHandler.__init__(). ........ r55070 | neal.norwitz | 2007-05-01 21:47:55 -0700 (Tue, 01 May 2007) | 3 lines Stop using PyMem_FREE while the GIL is not held. For details see: http://mail.python.org/pipermail/python-dev/2007-May/072896.html ........ r55080 | armin.rigo | 2007-05-02 12:23:31 -0700 (Wed, 02 May 2007) | 6 lines Fix for #1303614 and #1174712: - __dict__ descriptor abuse for subclasses of built-in types - subclassing from both ModuleType and another built-in types Thanks zseil for the patch. ........ r55083 | georg.brandl | 2007-05-02 13:02:29 -0700 (Wed, 02 May 2007) | 3 lines Actually raise an exception before calling ast_error_finish. Triggers an assertion otherwise. ........ r55087 | neal.norwitz | 2007-05-02 23:47:18 -0700 (Wed, 02 May 2007) | 1 line Handle a couple of uncaught errors. This should be backported ........ r55090 | neal.norwitz | 2007-05-03 00:20:57 -0700 (Thu, 03 May 2007) | 4 lines Remove dead code. This code couldn't be reached because earlier in the function there is another check for z != Py_None. ........ r55092 | thomas.heller | 2007-05-03 05:02:08 -0700 (Thu, 03 May 2007) | 1 line Fix building _ctypes.pyd for x64 / Windows. ........ r55093 | thomas.heller | 2007-05-03 05:05:20 -0700 (Thu, 03 May 2007) | 1 line Don't truncate pointers to integers (on win64 platform). ........ r55094 | walter.doerwald | 2007-05-03 08:13:55 -0700 (Thu, 03 May 2007) | 3 lines Clarify the behaviour of PyUnicode_DecodeUTF16(): A BOM is only skipped in native order mode, and only if it's the first two bytes. ........ r55101 | kristjan.jonsson | 2007-05-03 13:04:53 -0700 (Thu, 03 May 2007) | 2 lines Fix pcbuild8 after recent overhaul: Added the version resource to python26.dll. Adjust stacksize to 2Mb and made large address aware for 32 bits, and set stacksize to 3Mb for 64 bits. Todo: Set .dll optimized load addresses, and side-by-side packaging of the python26.dll. ........ r55102 | kristjan.jonsson | 2007-05-03 13:09:56 -0700 (Thu, 03 May 2007) | 1 line Fix those parts in the testsuite that assumed that sys.maxint would cause overflow on x64. Now the testsuite is well behaved on that platform. ........ r55103 | kristjan.jonsson | 2007-05-03 13:27:03 -0700 (Thu, 03 May 2007) | 11 lines Fix problems in x64 build that were discovered by the testsuite: - Reenable modules on x64 that had been disabled aeons ago for Itanium. - Cleared up confusion about compilers for 64 bit windows. There is only Itanium and x64. Added macros MS_WINI64 and MS_WINX64 for those rare cases where it matters, such as the disabling of modules above. - Set target platform (_WIN32_WINNT and WINVER) to 0x0501 (XP) for x64, and 0x0400 (NT 4.0) otherwise, which are the targeted minimum platforms. - Fixed thread_nt.h. The emulated InterlockedCompareExchange function didn?\194?\180t work on x64, probaby due to the lack of a "volatile" specifier. Anyway, win95 is no longer a target platform. - Itertools module used wrong constant to check for overflow in count() - PyInt_AsSsize_t couldn't deal with attribute error when accessing the __long__ member. - PyLong_FromSsize_t() incorrectly specified that the operand were unsigned. With these changes, the x64 passes the testsuite, for those modules present. ........ r55107 | kristjan.jonsson | 2007-05-03 17:25:08 -0700 (Thu, 03 May 2007) | 1 line Revert compiler comment to AMD64 for x64/AMD64 builds. ........ r55115 | thomas.heller | 2007-05-04 00:14:39 -0700 (Fri, 04 May 2007) | 4 lines Fix some ctypes test crashes, when running with a debug Python version on win64 by using proper argtypes and restype function attributes. ........ r55117 | thomas.heller | 2007-05-04 01:20:41 -0700 (Fri, 04 May 2007) | 4 lines On 64-bit Windows, ffi_arg must be 8 bytes long. This fixes the remaining crashes in the ctypes tests, when functions return float or double types. ........ r55120 | kristjan.jonsson | 2007-05-04 08:48:15 -0700 (Fri, 04 May 2007) | 1 line Update the pcbuild8 solution. Straightened out the _ctypes project by using a .vsproj file and a masm64.rules file to avoid redundancy ........ r55121 | kristjan.jonsson | 2007-05-04 10:28:06 -0700 (Fri, 04 May 2007) | 1 line Minor fix of PCBuild8/_ctypes vcproj, moving include dir into the .vsprops file. ........ r55129 | thomas.heller | 2007-05-04 12:54:22 -0700 (Fri, 04 May 2007) | 3 lines Do not truncate 64-bit pointers to 32-bit integers. Fixes SF #1703286, will backport to release25-maint. ........ r55131 | thomas.heller | 2007-05-04 12:56:32 -0700 (Fri, 04 May 2007) | 1 line Oops, these tests do not run on Windows CE. ........ r55140 | brett.cannon | 2007-05-04 18:34:02 -0700 (Fri, 04 May 2007) | 2 lines Deprecate BaseException.message as per PEP 352. ........ r55154 | georg.brandl | 2007-05-05 11:55:37 -0700 (Sat, 05 May 2007) | 2 lines Bug #1713535: typo in logging example. ........ r55158 | vinay.sajip | 2007-05-06 10:53:37 -0700 (Sun, 06 May 2007) | 1 line Updates of recent changes to logging. ........ r55165 | neal.norwitz | 2007-05-07 00:02:26 -0700 (Mon, 07 May 2007) | 1 line Verify changes to the trunk go to the normal checkins list ........ r55169 | kristjan.jonsson | 2007-05-07 09:46:54 -0700 (Mon, 07 May 2007) | 1 line As per Armin Rigo's suggestion, remove special handing from intobject.c to deal with the peculiarities of classobject's implementation of the number protocol. The nb_long method of classobject now falls back to nb_int if there is no __long__ attribute present. ........ r55197 | collin.winter | 2007-05-08 21:14:36 -0700 (Tue, 08 May 2007) | 9 lines Fix a bug in test.test_support.open_urlresource(). If the call to requires() doesn't precede the filesystem check, we get the following situation: 1. ./python Lib/test/regrtest.py test_foo # test needs urlfetch, not enabled, so skipped 2. ./python Lib/test/regrtest.py -u urlfetch test_foo # test runs 3. ./python Lib/test/regrtest.py test_foo # test runs (!) By moving the call to requires() *before* the filesystem check, the fact that fetched files are cached on the local disk becomes an implementation detail, rather than a semantics-changing point of note. ........ r55198 | neal.norwitz | 2007-05-08 23:43:15 -0700 (Tue, 08 May 2007) | 1 line Add markup for True/False. Will backport ........ r55205 | walter.doerwald | 2007-05-09 11:10:47 -0700 (Wed, 09 May 2007) | 4 lines Backport checkin: Fix a segfault when b"" was passed to b2a_qp() -- it was using strchr() instead of memchr(). ........ r55241 | neal.norwitz | 2007-05-10 22:55:15 -0700 (Thu, 10 May 2007) | 6 lines Don't ever report a failure when the sum of the reference count differences are zero. This should help reduce the false positives. The message about references leaking is maintained to provide as much info as possible rather than simply suppressing the message at the source. ........ r55242 | neal.norwitz | 2007-05-10 23:23:01 -0700 (Thu, 10 May 2007) | 1 line Fix typo in docstring (the module is popen2, not 3). ........ r55244 | neal.norwitz | 2007-05-10 23:56:52 -0700 (Thu, 10 May 2007) | 1 line Remove trailing whitespace in docstring ........ r55245 | neal.norwitz | 2007-05-10 23:57:33 -0700 (Thu, 10 May 2007) | 1 line Deprecate os.popen* and popen2 module in favor of the subprocess module. ........ r55247 | neal.norwitz | 2007-05-11 00:13:30 -0700 (Fri, 11 May 2007) | 1 line Deprecate os.popen* and popen2 module in favor of the subprocess module. (forgot the doc) ........ r55253 | georg.brandl | 2007-05-11 02:41:37 -0700 (Fri, 11 May 2007) | 3 lines Remove an XXX that is unnecessary. ........ r55258 | georg.brandl | 2007-05-11 04:04:26 -0700 (Fri, 11 May 2007) | 2 lines Patch #1714700: clarify os.linesep vs. tfiles opened in text mode. (backport) ........ r55259 | georg.brandl | 2007-05-11 04:43:56 -0700 (Fri, 11 May 2007) | 2 lines Update DDJ link. ........ r55273 | raymond.hettinger | 2007-05-11 10:59:59 -0700 (Fri, 11 May 2007) | 1 line Better tests for posixpath.commonprefix ........ r55287 | georg.brandl | 2007-05-12 14:06:41 -0700 (Sat, 12 May 2007) | 2 lines Bug #1046945: document SWIG options of distutils. ........ r55290 | georg.brandl | 2007-05-13 01:04:07 -0700 (Sun, 13 May 2007) | 2 lines Add bz2 to content encodings. ........ r55297 | neal.norwitz | 2007-05-13 13:45:05 -0700 (Sun, 13 May 2007) | 3 lines Remove Amoeba doc which was removed in version 1.0! according to Misc/HISTORY. Hopefully Guido won't shed a tear. :-) ........ r55298 | neal.norwitz | 2007-05-13 13:54:19 -0700 (Sun, 13 May 2007) | 1 line Remove references to stdwin which was removed long ago. ........ r55299 | neal.norwitz | 2007-05-13 14:13:42 -0700 (Sun, 13 May 2007) | 3 lines Remove support for freebsd[23] which haven't been released since 2000 or earlier. http://www.freebsd.org/releases/index.html ........ r55320 | raymond.hettinger | 2007-05-14 13:52:31 -0700 (Mon, 14 May 2007) | 1 line Small speedup. ........ ................ --- Demo/threads/README | 2 - Doc/Makefile.deps | 1 - Doc/api/concrete.tex | 8 +- Doc/dist/dist.tex | 22 +- Doc/lib/lib.tex | 5 - Doc/lib/libamoeba.tex | 131 - Doc/lib/libdifflib.tex | 2 +- Doc/lib/libexcs.tex | 22 +- Doc/lib/liblogging.tex | 9 +- Doc/lib/libos.tex | 30 +- Doc/lib/libpopen2.tex | 1 + Doc/lib/libpprint.tex | 8 +- Doc/lib/libstdwin.tex | 832 ------ Doc/tools/listmodules | 13 +- Doc/tut/tut.tex | 14 +- Include/pymem.h | 2 + Lib/ConfigParser.py | 15 + Lib/ctypes/test/test_checkretval.py | 2 +- Lib/ctypes/test/test_loading.py | 28 + Lib/ctypes/test/test_python_api.py | 9 +- Lib/ctypes/test/test_random_things.py | 4 + Lib/genericpath.py | 7 +- Lib/locale.py | 8 +- Lib/logging/handlers.py | 19 +- Lib/mimetypes.py | 2 + Lib/os.py | 38 +- Lib/plat-freebsd2/IN.py | 187 -- Lib/plat-freebsd2/regen | 3 - Lib/plat-freebsd3/IN.py | 189 -- Lib/plat-freebsd3/regen | 4 - Lib/plat-mac/pimp.py | 9 +- Lib/popen2.py | 3 + Lib/test/crashers/dangerous_subclassing.py | 12 - Lib/test/crashers/modify_dict_attr.py | 19 - Lib/test/regrtest.py | 5 +- Lib/test/string_tests.py | 4 +- Lib/test/test___all__.py | 2 + Lib/test/test_bz2.py | 18 +- Lib/test/test_cmd_line.py | 13 +- Lib/test/test_defaultdict.py | 2 +- Lib/test/test_descr.py | 80 +- Lib/test/test_exceptions.py | 70 +- Lib/test/test_fileio.py | 2 +- Lib/test/test_format.py | 8 +- Lib/test/test_index.py | 9 +- Lib/test/test_itertools.py | 6 +- Lib/test/test_pep352.py | 72 +- Lib/test/test_popen2.py | 6 + Lib/test/test_posixpath.py | 10 + Lib/test/test_pty.py | 19 + Lib/test/test_support.py | 2 +- Lib/test/test_unittest.py | 6 +- Misc/build.sh | 3 +- Misc/cheatsheet | 6 - Modules/_ctypes/callbacks.c | 23 +- Modules/_ctypes/callproc.c | 30 +- Modules/_ctypes/cfield.c | 16 +- Modules/_ctypes/ctypes.h | 6 + Modules/_ctypes/libffi_msvc/ffitarget.h | 4 + Modules/_ctypes/stgdict.c | 12 +- Modules/datetimemodule.c | 2 + Modules/getbuildinfo.c | 11 +- Modules/itertoolsmodule.c | 4 +- Modules/posixmodule.c | 3 +- Objects/exceptions.c | 42 +- Objects/floatobject.c | 13 +- Objects/intobject.c | 5 +- Objects/typeobject.c | 89 +- PC/config.c | 12 +- PC/make_versioninfo.c | 5 + PC/pyconfig.h | 21 +- PCbuild8/PGInstrument.vsprops | 13 + PCbuild8/PGUpdate.vsprops | 12 + PCbuild8/Uninstal.wse | 514 ---- PCbuild8/_bsddb.vcproj | 385 --- PCbuild8/_bsddb/_bsddb.vcproj | 652 +++++ PCbuild8/_ctypes.vcproj | 410 --- PCbuild8/_ctypes/_ctypes.vcproj | 859 ++++++ PCbuild8/_ctypes/_ctypes.vsprops | 15 + PCbuild8/_ctypes/masm64.rules | 305 ++ PCbuild8/_ctypes_test.vcproj | 370 --- PCbuild8/_ctypes_test/_ctypes_test.vcproj | 640 +++++ PCbuild8/_elementtree.vcproj | 388 --- PCbuild8/_elementtree/_elementtree.vcproj | 724 +++++ PCbuild8/_msi.vcproj | 375 --- PCbuild8/_msi/_msi.vcproj | 644 +++++ PCbuild8/_socket.vcproj | 381 --- PCbuild8/_socket/_socket.vcproj | 648 +++++ PCbuild8/_sqlite3.vcproj | 411 --- PCbuild8/_sqlite3/_sqlite3.vcproj | 724 +++++ PCbuild8/_ssl.mak | 21 - PCbuild8/_ssl.vcproj | 121 - PCbuild8/_testcapi.vcproj | 374 --- PCbuild8/_testcapi/_testcapi.vcproj | 636 +++++ PCbuild8/_tkinter.vcproj | 389 --- PCbuild8/_tkinter/_tkinter.vcproj | 640 +++++ PCbuild8/build.bat | 17 + PCbuild8/build_pgo.bat | 39 + PCbuild8/build_ssl.py | 163 -- PCbuild8/bz2.vcproj | 390 --- PCbuild8/bz2/bz2.vcproj | 652 +++++ PCbuild8/db.build | 10 - PCbuild8/field3.py | 35 - PCbuild8/make_buildinfo.c | 81 - PCbuild8/make_buildinfo.vcproj | 115 - PCbuild8/make_buildinfo/make_buildinfo.c | 66 + PCbuild8/make_buildinfo/make_buildinfo.vcproj | 104 + PCbuild8/make_versioninfo.vcproj | 204 -- PCbuild8/make_versioninfo/make_versioninfo.vcproj | 107 + PCbuild8/pcbuild.sln | 612 ++-- PCbuild8/pyd.vsprops | 13 + PCbuild8/pyd_d.vsprops | 14 + PCbuild8/pyexpat.vcproj | 393 --- PCbuild8/pyexpat/pyexpat.vcproj | 664 +++++ PCbuild8/pyproject.vsprops | 38 + PCbuild8/python.build | 21 - PCbuild8/python.iss | 346 --- PCbuild8/python.vcproj | 399 --- PCbuild8/python/python.vcproj | 666 +++++ PCbuild8/python20.wse | 3135 --------------------- PCbuild8/pythoncore.vcproj | 1946 ------------- PCbuild8/pythoncore/getbuildinfo.vsprops | 12 + PCbuild8/pythoncore/pythoncore.vcproj | 1880 ++++++++++++ PCbuild8/pythonw.vcproj | 383 --- PCbuild8/pythonw/pythonw.vcproj | 660 +++++ PCbuild8/readme.txt | 234 +- PCbuild8/rmpyc.py | 7 +- PCbuild8/rt.bat | 11 +- PCbuild8/select.vcproj | 379 --- PCbuild8/select/select.vcproj | 644 +++++ PCbuild8/unicodedata.vcproj | 371 --- PCbuild8/unicodedata/unicodedata.vcproj | 636 +++++ PCbuild8/w9xpopen.vcproj | 353 --- PCbuild8/winsound.vcproj | 375 --- PCbuild8/winsound/winsound.vcproj | 644 +++++ Python/ast.c | 4 + Python/ceval.c | 1 - Python/thread_nt.h | 63 +- Tools/msi/msilib.py | 8 +- 139 files changed, 14481 insertions(+), 15366 deletions(-) delete mode 100644 Doc/lib/libamoeba.tex delete mode 100644 Doc/lib/libstdwin.tex delete mode 100644 Lib/plat-freebsd2/IN.py delete mode 100755 Lib/plat-freebsd2/regen delete mode 100644 Lib/plat-freebsd3/IN.py delete mode 100755 Lib/plat-freebsd3/regen delete mode 100644 Lib/test/crashers/dangerous_subclassing.py delete mode 100644 Lib/test/crashers/modify_dict_attr.py create mode 100644 PCbuild8/PGInstrument.vsprops create mode 100644 PCbuild8/PGUpdate.vsprops delete mode 100644 PCbuild8/Uninstal.wse delete mode 100644 PCbuild8/_bsddb.vcproj create mode 100644 PCbuild8/_bsddb/_bsddb.vcproj delete mode 100644 PCbuild8/_ctypes.vcproj create mode 100644 PCbuild8/_ctypes/_ctypes.vcproj create mode 100644 PCbuild8/_ctypes/_ctypes.vsprops create mode 100644 PCbuild8/_ctypes/masm64.rules delete mode 100644 PCbuild8/_ctypes_test.vcproj create mode 100644 PCbuild8/_ctypes_test/_ctypes_test.vcproj delete mode 100644 PCbuild8/_elementtree.vcproj create mode 100644 PCbuild8/_elementtree/_elementtree.vcproj delete mode 100644 PCbuild8/_msi.vcproj create mode 100644 PCbuild8/_msi/_msi.vcproj delete mode 100644 PCbuild8/_socket.vcproj create mode 100644 PCbuild8/_socket/_socket.vcproj delete mode 100644 PCbuild8/_sqlite3.vcproj create mode 100644 PCbuild8/_sqlite3/_sqlite3.vcproj delete mode 100644 PCbuild8/_ssl.mak delete mode 100644 PCbuild8/_ssl.vcproj delete mode 100644 PCbuild8/_testcapi.vcproj create mode 100644 PCbuild8/_testcapi/_testcapi.vcproj delete mode 100644 PCbuild8/_tkinter.vcproj create mode 100644 PCbuild8/_tkinter/_tkinter.vcproj create mode 100644 PCbuild8/build.bat create mode 100644 PCbuild8/build_pgo.bat delete mode 100644 PCbuild8/build_ssl.py delete mode 100644 PCbuild8/bz2.vcproj create mode 100644 PCbuild8/bz2/bz2.vcproj delete mode 100644 PCbuild8/db.build delete mode 100644 PCbuild8/field3.py delete mode 100644 PCbuild8/make_buildinfo.c delete mode 100644 PCbuild8/make_buildinfo.vcproj create mode 100644 PCbuild8/make_buildinfo/make_buildinfo.c create mode 100644 PCbuild8/make_buildinfo/make_buildinfo.vcproj delete mode 100644 PCbuild8/make_versioninfo.vcproj create mode 100644 PCbuild8/make_versioninfo/make_versioninfo.vcproj create mode 100644 PCbuild8/pyd.vsprops create mode 100644 PCbuild8/pyd_d.vsprops delete mode 100644 PCbuild8/pyexpat.vcproj create mode 100644 PCbuild8/pyexpat/pyexpat.vcproj create mode 100644 PCbuild8/pyproject.vsprops delete mode 100644 PCbuild8/python.build delete mode 100644 PCbuild8/python.iss delete mode 100644 PCbuild8/python.vcproj create mode 100644 PCbuild8/python/python.vcproj delete mode 100644 PCbuild8/python20.wse delete mode 100644 PCbuild8/pythoncore.vcproj create mode 100644 PCbuild8/pythoncore/getbuildinfo.vsprops create mode 100644 PCbuild8/pythoncore/pythoncore.vcproj delete mode 100644 PCbuild8/pythonw.vcproj create mode 100644 PCbuild8/pythonw/pythonw.vcproj delete mode 100644 PCbuild8/select.vcproj create mode 100644 PCbuild8/select/select.vcproj delete mode 100644 PCbuild8/unicodedata.vcproj create mode 100644 PCbuild8/unicodedata/unicodedata.vcproj delete mode 100644 PCbuild8/w9xpopen.vcproj delete mode 100644 PCbuild8/winsound.vcproj create mode 100644 PCbuild8/winsound/winsound.vcproj diff --git a/Demo/threads/README b/Demo/threads/README index fee6aad..a379521 100644 --- a/Demo/threads/README +++ b/Demo/threads/README @@ -3,10 +3,8 @@ This directory contains some demonstrations of the thread module. These are mostly "proof of concept" type applications: Generator.py Generator class implemented with threads. -find.py Parallelized "find(1)" (looks for directories). sync.py Condition variables primitives by Tim Peters. telnet.py Version of ../sockets/telnet.py using threads. -wpi.py Version of ../scripts/pi.py using threads (needs stdwin). Coroutine.py Coroutines using threads, by Tim Peters (22 May 94) fcmp.py Example of above, by Tim diff --git a/Doc/Makefile.deps b/Doc/Makefile.deps index 0246653..96800ac 100644 --- a/Doc/Makefile.deps +++ b/Doc/Makefile.deps @@ -204,7 +204,6 @@ LIBFILES= $(MANSTYLES) $(INDEXSTYLES) $(COMMONTEX) \ lib/libcrypto.tex \ lib/libhashlib.tex \ lib/libhmac.tex \ - lib/libstdwin.tex \ lib/libsun.tex \ lib/libxdrlib.tex \ lib/libimghdr.tex \ diff --git a/Doc/api/concrete.tex b/Doc/api/concrete.tex index e1ab3ec..7e37395 100644 --- a/Doc/api/concrete.tex +++ b/Doc/api/concrete.tex @@ -1188,10 +1188,10 @@ These are the UTF-16 codec APIs: *byteorder == 1: big endian \end{verbatim} - and then switches according to all byte order marks (BOM) it finds - in the input data. BOMs are not copied into the resulting Unicode - string. After completion, \var{*byteorder} is set to the current - byte order at the end of input data. + and then switches if the first two bytes of the input data are a byte order + mark (BOM) and the specified byte order is native order. This BOM is not + copied into the resulting Unicode string. After completion, \var{*byteorder} + is set to the current byte order at the. If \var{byteorder} is \NULL{}, the codec starts in native order mode. diff --git a/Doc/dist/dist.tex b/Doc/dist/dist.tex index 928b642..ff5106a 100644 --- a/Doc/dist/dist.tex +++ b/Doc/dist/dist.tex @@ -486,9 +486,24 @@ list; the \command{build\_ext} command knows how to deal with SWIG extensions: it will run SWIG on the interface file and compile the resulting C/\Cpp{} file into your extension. -\XXX{SWIG support is rough around the edges and largely untested; - especially SWIG support for \Cpp{} extensions! Explain in more detail - here when the interface firms up.} +\XXX{SWIG support is rough around the edges and largely untested!} + +This warning notwithstanding, options to SWIG can be currently passed +like this: + +\begin{verbatim} +setup(... + ext_modules=[Extension('_foo', ['foo.i'], + swig_opts=['-modern', '-I../include'])], + py_modules=['foo'], + ) +\end{verbatim} + +Or on the commandline like this: + +\begin{verbatim} +> python setup.py build_ext --swig-opts="-modern -I../include" +\end{verbatim} On some platforms, you can include non-source files that are processed by the compiler and included in your extension. Currently, this just @@ -1017,6 +1032,7 @@ Options for 'build_ext' command: --include-dirs (-I) list of directories to search for header files --define (-D) C preprocessor macros to define --undef (-U) C preprocessor macros to undefine + --swig-opts list of SWIG command line options [...] \end{verbatim} diff --git a/Doc/lib/lib.tex b/Doc/lib/lib.tex index d87cd5e..05d84c3 100644 --- a/Doc/lib/lib.tex +++ b/Doc/lib/lib.tex @@ -423,11 +423,6 @@ and how to embed it in other applications. % OTHER PLATFORM-SPECIFIC STUFF % ============= -% XXX(nnorwitz): all these modules (down to next comment) need to be (re)moved. -%\input{libamoeba} % AMOEBA ONLY - -%\input{libstdwin} % STDWIN ONLY - \input{libsun} % SUNOS ONLY \input{libsunaudio} % XXX(nnorwitz): the modules below this comment should be kept. diff --git a/Doc/lib/libamoeba.tex b/Doc/lib/libamoeba.tex deleted file mode 100644 index ce6babc..0000000 --- a/Doc/lib/libamoeba.tex +++ /dev/null @@ -1,131 +0,0 @@ -\chapter{Amoeba Specific Services} - -\section{\module{amoeba} --- - Amoeba system support} - -\declaremodule{builtin}{amoeba} - \platform{Amoeba} -\modulesynopsis{Functions for the Amoeba operating system.} - - -This module provides some object types and operations useful for -Amoeba applications. It is only available on systems that support -Amoeba operations. RPC errors and other Amoeba errors are reported as -the exception \code{amoeba.error = 'amoeba.error'}. - -The module \module{amoeba} defines the following items: - -\begin{funcdesc}{name_append}{path, cap} -Stores a capability in the Amoeba directory tree. -Arguments are the pathname (a string) and the capability (a capability -object as returned by -\function{name_lookup()}). -\end{funcdesc} - -\begin{funcdesc}{name_delete}{path} -Deletes a capability from the Amoeba directory tree. -Argument is the pathname. -\end{funcdesc} - -\begin{funcdesc}{name_lookup}{path} -Looks up a capability. -Argument is the pathname. -Returns a -\dfn{capability} -object, to which various interesting operations apply, described below. -\end{funcdesc} - -\begin{funcdesc}{name_replace}{path, cap} -Replaces a capability in the Amoeba directory tree. -Arguments are the pathname and the new capability. -(This differs from -\function{name_append()} -in the behavior when the pathname already exists: -\function{name_append()} -finds this an error while -\function{name_replace()} -allows it, as its name suggests.) -\end{funcdesc} - -\begin{datadesc}{capv} -A table representing the capability environment at the time the -interpreter was started. -(Alas, modifying this table does not affect the capability environment -of the interpreter.) -For example, -\code{amoeba.capv['ROOT']} -is the capability of your root directory, similar to -\code{getcap("ROOT")} -in C. -\end{datadesc} - -\begin{excdesc}{error} -The exception raised when an Amoeba function returns an error. -The value accompanying this exception is a pair containing the numeric -error code and the corresponding string, as returned by the C function -\cfunction{err_why()}. -\end{excdesc} - -\begin{funcdesc}{timeout}{msecs} -Sets the transaction timeout, in milliseconds. -Returns the previous timeout. -Initially, the timeout is set to 2 seconds by the Python interpreter. -\end{funcdesc} - -\subsection{Capability Operations} - -Capabilities are written in a convenient \ASCII{} format, also used by the -Amoeba utilities -\emph{c2a}(U) -and -\emph{a2c}(U). -For example: - -\begin{verbatim} ->>> amoeba.name_lookup('/profile/cap') -aa:1c:95:52:6a:fa/14(ff)/8e:ba:5b:8:11:1a ->>> -\end{verbatim} -% -The following methods are defined for capability objects. - -\begin{methoddesc}[capability]{dir_list}{} -Returns a list of the names of the entries in an Amoeba directory. -\end{methoddesc} - -\begin{methoddesc}[capability]{b_read}{offset, maxsize} -Reads (at most) -\var{maxsize} -bytes from a bullet file at offset -\var{offset.} -The data is returned as a string. -EOF is reported as an empty string. -\end{methoddesc} - -\begin{methoddesc}[capability]{b_size}{} -Returns the size of a bullet file. -\end{methoddesc} - -\begin{methoddesc}[capability]{dir_append}{} -\funcline{dir_delete}{} -\funcline{dir_lookup}{} -\funcline{dir_replace}{} -Like the corresponding -\samp{name_}* -functions, but with a path relative to the capability. -(For paths beginning with a slash the capability is ignored, since this -is the defined semantics for Amoeba.) -\end{methoddesc} - -\begin{methoddesc}[capability]{std_info}{} -Returns the standard info string of the object. -\end{methoddesc} - -\begin{methoddesc}[capability]{tod_gettime}{} -Returns the time (in seconds since the Epoch, in UCT, as for \POSIX) from -a time server. -\end{methoddesc} - -\begin{methoddesc}[capability]{tod_settime}{t} -Sets the time kept by a time server. -\end{methoddesc} diff --git a/Doc/lib/libdifflib.tex b/Doc/lib/libdifflib.tex index acb5ed1..7fb8e92 100644 --- a/Doc/lib/libdifflib.tex +++ b/Doc/lib/libdifflib.tex @@ -302,7 +302,7 @@ emu \begin{seealso} - \seetitle[http://www.ddj.com/documents/s=1103/ddj8807c/] + \seetitle[http://www.ddj.com/184407970?pgno=5] {Pattern Matching: The Gestalt Approach}{Discussion of a similar algorithm by John W. Ratcliff and D. E. Metzener. This was published in diff --git a/Doc/lib/libexcs.tex b/Doc/lib/libexcs.tex index d119ed9..631c798 100644 --- a/Doc/lib/libexcs.tex +++ b/Doc/lib/libexcs.tex @@ -23,14 +23,10 @@ an ``associated value'' indicating the detailed cause of the error. This may be a string or a tuple containing several items of information (e.g., an error code and a string explaining the code). The associated value is the second argument to the -\keyword{raise}\stindex{raise} statement. For string exceptions, the -associated value itself will be stored in the variable named as the -second argument of the \keyword{except} clause (if any). For class -exceptions, that variable receives the exception instance. If the -exception class is derived from the standard root class -\exception{BaseException}, the associated value is present as the -exception instance's \member{args} attribute. If there is a single argument -(as is preferred), it is bound to the \member{message} attribute. +\keyword{raise}\stindex{raise} statement. If the exception class is +derived from the standard root class \exception{BaseException}, the +associated value is present as the exception instance's \member{args} +attribute. User code can raise built-in exceptions. This can be used to test an exception handler or to report an error condition ``just like'' the @@ -56,14 +52,8 @@ The base class for all built-in exceptions. It is not meant to be directly inherited by user-defined classes (for that use \exception{Exception}). If \function{str()} or \function{unicode()} is called on an instance of this class, the representation of the argument(s) to the instance are returned or -the emptry string when there were no arguments. If only a single argument is -passed in, it is stored in the \member{message} attribute. If more than one -argument is passed in, \member{message} is set to the empty string. These -semantics are meant to reflect the fact that \member{message} is to store a -text message explaining why the exception had been raised. If more data needs -to be attached to the exception, attach it through arbitrary attributes on the -instance. All arguments are also stored in \member{args} as a tuple, but it will -eventually be deprecated and thus its use is discouraged. +the emptry string when there were no arguments. All arguments are +stored in \member{args} as a tuple. \versionadded{2.5} \end{excdesc} diff --git a/Doc/lib/liblogging.tex b/Doc/lib/liblogging.tex index dabab53..5783cbf 100644 --- a/Doc/lib/liblogging.tex +++ b/Doc/lib/liblogging.tex @@ -203,7 +203,7 @@ logged messages. For example: \begin{verbatim} FORMAT = "%(asctime)-15s %(clientip)s %(user)-8s %(message)s" logging.basicConfig(format=FORMAT) - dict = { 'clientip' : '192.168.0.1', 'user' : 'fbloggs' } + d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logging.warning("Protocol problem: %s", "connection reset", extra=d) \end{verbatim} @@ -1296,13 +1296,16 @@ The \class{SMTPHandler} class, located in the \module{logging.handlers} module, supports sending logging messages to an email address via SMTP. -\begin{classdesc}{SMTPHandler}{mailhost, fromaddr, toaddrs, subject} +\begin{classdesc}{SMTPHandler}{mailhost, fromaddr, toaddrs, subject\optional{, + credentials}} Returns a new instance of the \class{SMTPHandler} class. The instance is initialized with the from and to addresses and subject line of the email. The \var{toaddrs} should be a list of strings. To specify a non-standard SMTP port, use the (host, port) tuple format for the \var{mailhost} argument. If you use a string, the standard SMTP port -is used. +is used. If your SMTP server requires authentication, you can specify a +(username, password) tuple for the \var{credentials} argument. +\versionchanged[\var{credentials} was added]{2.6} \end{classdesc} \begin{methoddesc}{emit}{record} diff --git a/Doc/lib/libos.tex b/Doc/lib/libos.tex index 638ed6b..2454e57 100644 --- a/Doc/lib/libos.tex +++ b/Doc/lib/libos.tex @@ -361,9 +361,8 @@ 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. +\deprecated{2.6}{This function is obsolete. Use the + \module{subprocess} module.} \versionchanged[This function worked unreliably under Windows in earlier versions of Python. This was due to the use of the @@ -380,10 +379,9 @@ 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. +provide slightly different ways to create subprocesses. +\deprecated{2.6}{All of the \function{popen*()} functions are obsolete. + Use the \module{subprocess} module.} For each of the \function{popen*()} variants, if \var{bufsize} is specified, it specifies the buffer size for the I/O pipes. @@ -400,8 +398,7 @@ be passed to the shell (as with \function{os.system()}). These methods do not make it possible to retrieve the exit status from the child processes. The only way to control the input and output streams and also retrieve the return codes is to use the -\class{Popen3} and \class{Popen4} classes from the \refmodule{popen2} -module; these are only available on \UNIX. +\refmodule{subprocess} module; these are only available on \UNIX. For a discussion of possible deadlock conditions related to the use of these functions, see ``\ulink{Flow Control @@ -411,6 +408,8 @@ Issues}{popen2-flow-control.html}'' \begin{funcdesc}{popen2}{cmd\optional{, mode\optional{, bufsize}}} Executes \var{cmd} as a sub-process. Returns the file objects \code{(\var{child_stdin}, \var{child_stdout})}. +\deprecated{2.6}{All of the \function{popen*()} functions are obsolete. + Use the \module{subprocess} module.} Availability: Macintosh, \UNIX, Windows. \versionadded{2.0} \end{funcdesc} @@ -418,6 +417,8 @@ Availability: Macintosh, \UNIX, Windows. \begin{funcdesc}{popen3}{cmd\optional{, mode\optional{, bufsize}}} Executes \var{cmd} as a sub-process. Returns the file objects \code{(\var{child_stdin}, \var{child_stdout}, \var{child_stderr})}. +\deprecated{2.6}{All of the \function{popen*()} functions are obsolete. + Use the \module{subprocess} module.} Availability: Macintosh, \UNIX, Windows. \versionadded{2.0} \end{funcdesc} @@ -425,6 +426,8 @@ Availability: Macintosh, \UNIX, Windows. \begin{funcdesc}{popen4}{cmd\optional{, mode\optional{, bufsize}}} Executes \var{cmd} as a sub-process. Returns the file objects \code{(\var{child_stdin}, \var{child_stdout_and_stderr})}. +\deprecated{2.6}{All of the \function{popen*()} functions are obsolete. + Use the \module{subprocess} module.} Availability: Macintosh, \UNIX, Windows. \versionadded{2.0} \end{funcdesc} @@ -2006,9 +2009,12 @@ Also available via \module{os.path}. \begin{datadesc}{linesep} The string used to separate (or, rather, terminate) lines on the -current platform. This may be a single character, such as \code{'\e -n'} for \POSIX{} or \code{'\e r'} for Mac OS, or multiple characters, -for example, \code{'\e r\e n'} for Windows. +current platform. This may be a single character, such as +\code{'\e n'} for \POSIX{} or \code{'\e r'} for Mac OS, or multiple +characters, for example, \code{'\e r\e n'} for Windows. +Do not use \var{os.linesep} as a line terminator when writing files +opened in text mode (the default); use a single \code{'\e n'} instead, +on all platforms. \end{datadesc} \begin{datadesc}{devnull} diff --git a/Doc/lib/libpopen2.tex b/Doc/lib/libpopen2.tex index 322a9b9..5d40e1a 100644 --- a/Doc/lib/libpopen2.tex +++ b/Doc/lib/libpopen2.tex @@ -5,6 +5,7 @@ \modulesynopsis{Subprocesses with accessible standard I/O streams.} \sectionauthor{Drew Csillag}{drew_csillag@geocities.com} +\deprecated{2.6}{This module is obsolete. Use the \module{subprocess} module.} This module allows you to spawn processes and connect to their input/output/error pipes and obtain their return codes under diff --git a/Doc/lib/libpprint.tex b/Doc/lib/libpprint.tex index 9203b3a..ce35b44 100644 --- a/Doc/lib/libpprint.tex +++ b/Doc/lib/libpprint.tex @@ -118,7 +118,7 @@ were added]{2.4} \begin{funcdesc}{isreadable}{object} Determine if the formatted representation of \var{object} is ``readable,'' or can be used to reconstruct the value using -\function{eval()}\bifuncindex{eval}. This always returns false for +\function{eval()}\bifuncindex{eval}. This always returns \code{False} for recursive objects. \begin{verbatim} @@ -176,10 +176,10 @@ objects don't need to be created. \begin{methoddesc}[PrettyPrinter]{isreadable}{object} Determine if the formatted representation of the object is ``readable,'' or can be used to reconstruct the value using -\function{eval()}\bifuncindex{eval}. Note that this returns false for +\function{eval()}\bifuncindex{eval}. Note that this returns \code{False} for recursive objects. If the \var{depth} parameter of the \class{PrettyPrinter} is set and the object is deeper than allowed, -this returns false. +this returns \code{False}. \end{methoddesc} \begin{methoddesc}[PrettyPrinter]{isrecursive}{object} @@ -199,7 +199,7 @@ object to be presented. The second is a dictionary which contains the context (direct and indirect containers for \var{object} that are affecting the presentation) as the keys; if an object needs to be presented which is already represented in \var{context}, the third -return value should be true. Recursive calls to the \method{format()} +return value should be \code{True}. Recursive calls to the \method{format()} method should add additional entries for containers to this dictionary. The third argument, \var{maxlevels}, gives the requested limit to recursion; this will be \code{0} if there is no requested diff --git a/Doc/lib/libstdwin.tex b/Doc/lib/libstdwin.tex deleted file mode 100644 index f2278e5..0000000 --- a/Doc/lib/libstdwin.tex +++ /dev/null @@ -1,832 +0,0 @@ -\chapter{Standard Windowing Interface} - -The modules in this chapter are available only on those systems where -the STDWIN library is available. STDWIN runs on \UNIX{} under X11 and -on the Macintosh. See CWI report CS-R8817. - -\warning{Using STDWIN is not recommended for new -applications. It has never been ported to Microsoft Windows or -Windows NT, and for X11 or the Macintosh it lacks important -functionality --- in particular, it has no tools for the construction -of dialogs. For most platforms, alternative, native solutions exist -(though none are currently documented in this manual): Tkinter for -\UNIX{} under X11, native Xt with Motif or Athena widgets for \UNIX{} -under X11, Win32 for Windows and Windows NT, and a collection of -native toolkit interfaces for the Macintosh.} - - -\section{\module{stdwin} --- - Platform-independent Graphical User Interface System} - -\declaremodule{builtin}{stdwin} -\modulesynopsis{Older graphical user interface system for X11 and Macintosh.} - - -This module defines several new object types and functions that -provide access to the functionality of STDWIN. - -On \UNIX{} running X11, it can only be used if the \envvar{DISPLAY} -environment variable is set or an explicit -\programopt{-display} \var{displayname} argument is passed to the -Python interpreter. - -Functions have names that usually resemble their C STDWIN counterparts -with the initial `w' dropped. Points are represented by pairs of -integers; rectangles by pairs of points. For a complete description -of STDWIN please refer to the documentation of STDWIN for C -programmers (aforementioned CWI report). - -\subsection{Functions Defined in Module \module{stdwin}} -\nodename{STDWIN Functions} - -The following functions are defined in the \module{stdwin} module: - -\begin{funcdesc}{open}{title} -Open a new window whose initial title is given by the string argument. -Return a window object; window object methods are described -below.\footnote{ - The Python version of STDWIN does not support draw procedures; - all drawing requests are reported as draw events.} -\end{funcdesc} - -\begin{funcdesc}{getevent}{} -Wait for and return the next event. -An event is returned as a triple: the first element is the event -type, a small integer; the second element is the window object to which -the event applies, or -\code{None} -if it applies to no window in particular; -the third element is type-dependent. -Names for event types and command codes are defined in the standard -module \refmodule{stdwinevents}. -\end{funcdesc} - -\begin{funcdesc}{pollevent}{} -Return the next event, if one is immediately available. -If no event is available, return \code{()}. -\end{funcdesc} - -\begin{funcdesc}{getactive}{} -Return the window that is currently active, or \code{None} if no -window is currently active. (This can be emulated by monitoring -WE_ACTIVATE and WE_DEACTIVATE events.) -\end{funcdesc} - -\begin{funcdesc}{listfontnames}{pattern} -Return the list of font names in the system that match the pattern (a -string). The pattern should normally be \code{'*'}; returns all -available fonts. If the underlying window system is X11, other -patterns follow the standard X11 font selection syntax (as used e.g. -in resource definitions), i.e. the wildcard character \code{'*'} -matches any sequence of characters (including none) and \code{'?'} -matches any single character. -On the Macintosh this function currently returns an empty list. -\end{funcdesc} - -\begin{funcdesc}{setdefscrollbars}{hflag, vflag} -Set the flags controlling whether subsequently opened windows will -have horizontal and/or vertical scroll bars. -\end{funcdesc} - -\begin{funcdesc}{setdefwinpos}{h, v} -Set the default window position for windows opened subsequently. -\end{funcdesc} - -\begin{funcdesc}{setdefwinsize}{width, height} -Set the default window size for windows opened subsequently. -\end{funcdesc} - -\begin{funcdesc}{getdefscrollbars}{} -Return the flags controlling whether subsequently opened windows will -have horizontal and/or vertical scroll bars. -\end{funcdesc} - -\begin{funcdesc}{getdefwinpos}{} -Return the default window position for windows opened subsequently. -\end{funcdesc} - -\begin{funcdesc}{getdefwinsize}{} -Return the default window size for windows opened subsequently. -\end{funcdesc} - -\begin{funcdesc}{getscrsize}{} -Return the screen size in pixels. -\end{funcdesc} - -\begin{funcdesc}{getscrmm}{} -Return the screen size in millimetres. -\end{funcdesc} - -\begin{funcdesc}{fetchcolor}{colorname} -Return the pixel value corresponding to the given color name. -Return the default foreground color for unknown color names. -Hint: the following code tests whether you are on a machine that -supports more than two colors: -\begin{verbatim} -if stdwin.fetchcolor('black') != \ - stdwin.fetchcolor('red') != \ - stdwin.fetchcolor('white'): - print 'color machine' -else: - print 'monochrome machine' -\end{verbatim} -\end{funcdesc} - -\begin{funcdesc}{setfgcolor}{pixel} -Set the default foreground color. -This will become the default foreground color of windows opened -subsequently, including dialogs. -\end{funcdesc} - -\begin{funcdesc}{setbgcolor}{pixel} -Set the default background color. -This will become the default background color of windows opened -subsequently, including dialogs. -\end{funcdesc} - -\begin{funcdesc}{getfgcolor}{} -Return the pixel value of the current default foreground color. -\end{funcdesc} - -\begin{funcdesc}{getbgcolor}{} -Return the pixel value of the current default background color. -\end{funcdesc} - -\begin{funcdesc}{setfont}{fontname} -Set the current default font. -This will become the default font for windows opened subsequently, -and is also used by the text measuring functions \function{textwidth()}, -\function{textbreak()}, \function{lineheight()} and -\function{baseline()} below. This accepts two more optional -parameters, size and style: Size is the font size (in `points'). -Style is a single character specifying the style, as follows: -\code{'b'} = bold, -\code{'i'} = italic, -\code{'o'} = bold + italic, -\code{'u'} = underline; -default style is roman. -Size and style are ignored under X11 but used on the Macintosh. -(Sorry for all this complexity --- a more uniform interface is being designed.) -\end{funcdesc} - -\begin{funcdesc}{menucreate}{title} -Create a menu object referring to a global menu (a menu that appears in -all windows). -Methods of menu objects are described below. -Note: normally, menus are created locally; see the window method -\method{menucreate()} below. -\warning{The menu only appears in a window as long as the object -returned by this call exists.} -\end{funcdesc} - -\begin{funcdesc}{newbitmap}{width, height} -Create a new bitmap object of the given dimensions. -Methods of bitmap objects are described below. -Not available on the Macintosh. -\end{funcdesc} - -\begin{funcdesc}{fleep}{} -Cause a beep or bell (or perhaps a `visual bell' or flash, hence the -name). -\end{funcdesc} - -\begin{funcdesc}{message}{string} -Display a dialog box containing the string. -The user must click OK before the function returns. -\end{funcdesc} - -\begin{funcdesc}{askync}{prompt, default} -Display a dialog that prompts the user to answer a question with yes or -no. Return 0 for no, 1 for yes. If the user hits the Return key, the -default (which must be 0 or 1) is returned. If the user cancels the -dialog, \exception{KeyboardInterrupt} is raised. -\end{funcdesc} - -\begin{funcdesc}{askstr}{prompt, default} -Display a dialog that prompts the user for a string. -If the user hits the Return key, the default string is returned. -If the user cancels the dialog, \exception{KeyboardInterrupt} is -raised. -\end{funcdesc} - -\begin{funcdesc}{askfile}{prompt, default, new} -Ask the user to specify a filename. If \var{new} is zero it must be -an existing file; otherwise, it must be a new file. If the user -cancels the dialog, \exception{KeyboardInterrupt} is raised. -\end{funcdesc} - -\begin{funcdesc}{setcutbuffer}{i, string} -Store the string in the system's cut buffer number \var{i}, where it -can be found (for pasting) by other applications. On X11, there are 8 -cut buffers (numbered 0..7). Cut buffer number 0 is the `clipboard' -on the Macintosh. -\end{funcdesc} - -\begin{funcdesc}{getcutbuffer}{i} -Return the contents of the system's cut buffer number \var{i}. -\end{funcdesc} - -\begin{funcdesc}{rotatecutbuffers}{n} -On X11, rotate the 8 cut buffers by \var{n}. Ignored on the -Macintosh. -\end{funcdesc} - -\begin{funcdesc}{getselection}{i} -Return X11 selection number \var{i.} Selections are not cut buffers. -Selection numbers are defined in module \refmodule{stdwinevents}. -Selection \constant{WS_PRIMARY} is the \dfn{primary} selection (used -by \program{xterm}, for instance); selection \constant{WS_SECONDARY} -is the \dfn{secondary} selection; selection \constant{WS_CLIPBOARD} is -the \dfn{clipboard} selection (used by \program{xclipboard}). On the -Macintosh, this always returns an empty string. -\end{funcdesc} - -\begin{funcdesc}{resetselection}{i} -Reset selection number \var{i}, if this process owns it. (See window -method \method{setselection()}). -\end{funcdesc} - -\begin{funcdesc}{baseline}{} -Return the baseline of the current font (defined by STDWIN as the -vertical distance between the baseline and the top of the -characters). -\end{funcdesc} - -\begin{funcdesc}{lineheight}{} -Return the total line height of the current font. -\end{funcdesc} - -\begin{funcdesc}{textbreak}{str, width} -Return the number of characters of the string that fit into a space of -\var{width} -bits wide when drawn in the current font. -\end{funcdesc} - -\begin{funcdesc}{textwidth}{str} -Return the width in bits of the string when drawn in the current font. -\end{funcdesc} - -\begin{funcdesc}{connectionnumber}{} -\funcline{fileno}{} -(X11 under \UNIX{} only) Return the ``connection number'' used by the -underlying X11 implementation. (This is normally the file number of -the socket.) Both functions return the same value; -\method{connectionnumber()} is named after the corresponding function in -X11 and STDWIN, while \method{fileno()} makes it possible to use the -\module{stdwin} module as a ``file'' object parameter to -\function{select.select()}. Note that if \constant{select()} implies that -input is possible on \module{stdwin}, this does not guarantee that an -event is ready --- it may be some internal communication going on -between the X server and the client library. Thus, you should call -\function{stdwin.pollevent()} until it returns \code{None} to check for -events if you don't want your program to block. Because of internal -buffering in X11, it is also possible that \function{stdwin.pollevent()} -returns an event while \function{select()} does not find \module{stdwin} to -be ready, so you should read any pending events with -\function{stdwin.pollevent()} until it returns \code{None} before entering -a blocking \function{select()} call. -\withsubitem{(in module select)}{\ttindex{select()}} -\end{funcdesc} - -\subsection{Window Objects} -\nodename{STDWIN Window Objects} - -Window objects are created by \function{stdwin.open()}. They are closed -by their \method{close()} method or when they are garbage-collected. -Window objects have the following methods: - -\begin{methoddesc}[window]{begindrawing}{} -Return a drawing object, whose methods (described below) allow drawing -in the window. -\end{methoddesc} - -\begin{methoddesc}[window]{change}{rect} -Invalidate the given rectangle; this may cause a draw event. -\end{methoddesc} - -\begin{methoddesc}[window]{gettitle}{} -Returns the window's title string. -\end{methoddesc} - -\begin{methoddesc}[window]{getdocsize}{} -\begin{sloppypar} -Return a pair of integers giving the size of the document as set by -\method{setdocsize()}. -\end{sloppypar} -\end{methoddesc} - -\begin{methoddesc}[window]{getorigin}{} -Return a pair of integers giving the origin of the window with respect -to the document. -\end{methoddesc} - -\begin{methoddesc}[window]{gettitle}{} -Return the window's title string. -\end{methoddesc} - -\begin{methoddesc}[window]{getwinsize}{} -Return a pair of integers giving the size of the window. -\end{methoddesc} - -\begin{methoddesc}[window]{getwinpos}{} -Return a pair of integers giving the position of the window's upper -left corner (relative to the upper left corner of the screen). -\end{methoddesc} - -\begin{methoddesc}[window]{menucreate}{title} -Create a menu object referring to a local menu (a menu that appears -only in this window). -Methods of menu objects are described below. -\warning{The menu only appears as long as the object -returned by this call exists.} -\end{methoddesc} - -\begin{methoddesc}[window]{scroll}{rect, point} -Scroll the given rectangle by the vector given by the point. -\end{methoddesc} - -\begin{methoddesc}[window]{setdocsize}{point} -Set the size of the drawing document. -\end{methoddesc} - -\begin{methoddesc}[window]{setorigin}{point} -Move the origin of the window (its upper left corner) -to the given point in the document. -\end{methoddesc} - -\begin{methoddesc}[window]{setselection}{i, str} -Attempt to set X11 selection number \var{i} to the string \var{str}. -(See \module{stdwin} function \function{getselection()} for the -meaning of \var{i}.) Return true if it succeeds. -If succeeds, the window ``owns'' the selection until -(a) another application takes ownership of the selection; or -(b) the window is deleted; or -(c) the application clears ownership by calling -\function{stdwin.resetselection(\var{i})}. When another application -takes ownership of the selection, a \constant{WE_LOST_SEL} event is -received for no particular window and with the selection number as -detail. Ignored on the Macintosh. -\end{methoddesc} - -\begin{methoddesc}[window]{settimer}{dsecs} -Schedule a timer event for the window in \code{\var{dsecs}/10} -seconds. -\end{methoddesc} - -\begin{methoddesc}[window]{settitle}{title} -Set the window's title string. -\end{methoddesc} - -\begin{methoddesc}[window]{setwincursor}{name} -\begin{sloppypar} -Set the window cursor to a cursor of the given name. It raises -\exception{RuntimeError} if no cursor of the given name exists. -Suitable names include -\code{'ibeam'}, -\code{'arrow'}, -\code{'cross'}, -\code{'watch'} -and -\code{'plus'}. -On X11, there are many more (see \code{}). -\end{sloppypar} -\end{methoddesc} - -\begin{methoddesc}[window]{setwinpos}{h, v} -Set the position of the window's upper left corner (relative to -the upper left corner of the screen). -\end{methoddesc} - -\begin{methoddesc}[window]{setwinsize}{width, height} -Set the window's size. -\end{methoddesc} - -\begin{methoddesc}[window]{show}{rect} -Try to ensure that the given rectangle of the document is visible in -the window. -\end{methoddesc} - -\begin{methoddesc}[window]{textcreate}{rect} -Create a text-edit object in the document at the given rectangle. -Methods of text-edit objects are described below. -\end{methoddesc} - -\begin{methoddesc}[window]{setactive}{} -Attempt to make this window the active window. If successful, this -will generate a WE_ACTIVATE event (and a WE_DEACTIVATE event in case -another window in this application became inactive). -\end{methoddesc} - -\begin{methoddesc}[window]{close}{} -Discard the window object. It should not be used again. -\end{methoddesc} - -\subsection{Drawing Objects} - -Drawing objects are created exclusively by the window method -\method{begindrawing()}. Only one drawing object can exist at any -given time; the drawing object must be deleted to finish drawing. No -drawing object may exist when \function{stdwin.getevent()} is called. -Drawing objects have the following methods: - -\begin{methoddesc}[drawing]{box}{rect} -Draw a box just inside a rectangle. -\end{methoddesc} - -\begin{methoddesc}[drawing]{circle}{center, radius} -Draw a circle with given center point and radius. -\end{methoddesc} - -\begin{methoddesc}[drawing]{elarc}{center, (rh, rv), (a1, a2)} -Draw an elliptical arc with given center point. -\code{(\var{rh}, \var{rv})} -gives the half sizes of the horizontal and vertical radii. -\code{(\var{a1}, \var{a2})} -gives the angles (in degrees) of the begin and end points. -0 degrees is at 3 o'clock, 90 degrees is at 12 o'clock. -\end{methoddesc} - -\begin{methoddesc}[drawing]{erase}{rect} -Erase a rectangle. -\end{methoddesc} - -\begin{methoddesc}[drawing]{fillcircle}{center, radius} -Draw a filled circle with given center point and radius. -\end{methoddesc} - -\begin{methoddesc}[drawing]{fillelarc}{center, (rh, rv), (a1, a2)} -Draw a filled elliptical arc; arguments as for \method{elarc()}. -\end{methoddesc} - -\begin{methoddesc}[drawing]{fillpoly}{points} -Draw a filled polygon given by a list (or tuple) of points. -\end{methoddesc} - -\begin{methoddesc}[drawing]{invert}{rect} -Invert a rectangle. -\end{methoddesc} - -\begin{methoddesc}[drawing]{line}{p1, p2} -Draw a line from point -\var{p1} -to -\var{p2}. -\end{methoddesc} - -\begin{methoddesc}[drawing]{paint}{rect} -Fill a rectangle. -\end{methoddesc} - -\begin{methoddesc}[drawing]{poly}{points} -Draw the lines connecting the given list (or tuple) of points. -\end{methoddesc} - -\begin{methoddesc}[drawing]{shade}{rect, percent} -Fill a rectangle with a shading pattern that is about -\var{percent} -percent filled. -\end{methoddesc} - -\begin{methoddesc}[drawing]{text}{p, str} -Draw a string starting at point p (the point specifies the -top left coordinate of the string). -\end{methoddesc} - -\begin{methoddesc}[drawing]{xorcircle}{center, radius} -\funcline{xorelarc}{center, (rh, rv), (a1, a2)} -\funcline{xorline}{p1, p2} -\funcline{xorpoly}{points} -Draw a circle, an elliptical arc, a line or a polygon, respectively, -in XOR mode. -\end{methoddesc} - -\begin{methoddesc}[drawing]{setfgcolor}{} -\funcline{setbgcolor}{} -\funcline{getfgcolor}{} -\funcline{getbgcolor}{} -These functions are similar to the corresponding functions described -above for the \module{stdwin} -module, but affect or return the colors currently used for drawing -instead of the global default colors. -When a drawing object is created, its colors are set to the window's -default colors, which are in turn initialized from the global default -colors when the window is created. -\end{methoddesc} - -\begin{methoddesc}[drawing]{setfont}{} -\funcline{baseline}{} -\funcline{lineheight}{} -\funcline{textbreak}{} -\funcline{textwidth}{} -These functions are similar to the corresponding functions described -above for the \module{stdwin} -module, but affect or use the current drawing font instead of -the global default font. -When a drawing object is created, its font is set to the window's -default font, which is in turn initialized from the global default -font when the window is created. -\end{methoddesc} - -\begin{methoddesc}[drawing]{bitmap}{point, bitmap, mask} -Draw the \var{bitmap} with its top left corner at \var{point}. -If the optional \var{mask} argument is present, it should be either -the same object as \var{bitmap}, to draw only those bits that are set -in the bitmap, in the foreground color, or \code{None}, to draw all -bits (ones are drawn in the foreground color, zeros in the background -color). -Not available on the Macintosh. -\end{methoddesc} - -\begin{methoddesc}[drawing]{cliprect}{rect} -Set the ``clipping region'' to a rectangle. -The clipping region limits the effect of all drawing operations, until -it is changed again or until the drawing object is closed. When a -drawing object is created the clipping region is set to the entire -window. When an object to be drawn falls partly outside the clipping -region, the set of pixels drawn is the intersection of the clipping -region and the set of pixels that would be drawn by the same operation -in the absence of a clipping region. -\end{methoddesc} - -\begin{methoddesc}[drawing]{noclip}{} -Reset the clipping region to the entire window. -\end{methoddesc} - -\begin{methoddesc}[drawing]{close}{} -\funcline{enddrawing}{} -Discard the drawing object. It should not be used again. -\end{methoddesc} - -\subsection{Menu Objects} - -A menu object represents a menu. -The menu is destroyed when the menu object is deleted. -The following methods are defined: - - -\begin{methoddesc}[menu]{additem}{text, shortcut} -Add a menu item with given text. -The shortcut must be a string of length 1, or omitted (to specify no -shortcut). -\end{methoddesc} - -\begin{methoddesc}[menu]{setitem}{i, text} -Set the text of item number \var{i}. -\end{methoddesc} - -\begin{methoddesc}[menu]{enable}{i, flag} -Enable or disables item \var{i}. -\end{methoddesc} - -\begin{methoddesc}[menu]{check}{i, flag} -Set or clear the \dfn{check mark} for item \var{i}. -\end{methoddesc} - -\begin{methoddesc}[menu]{close}{} -Discard the menu object. It should not be used again. -\end{methoddesc} - -\subsection{Bitmap Objects} - -A bitmap represents a rectangular array of bits. -The top left bit has coordinate (0, 0). -A bitmap can be drawn with the \method{bitmap()} method of a drawing object. -Bitmaps are currently not available on the Macintosh. - -The following methods are defined: - - -\begin{methoddesc}[bitmap]{getsize}{} -Return a tuple representing the width and height of the bitmap. -(This returns the values that have been passed to the -\function{newbitmap()} function.) -\end{methoddesc} - -\begin{methoddesc}[bitmap]{setbit}{point, bit} -Set the value of the bit indicated by \var{point} to \var{bit}. -\end{methoddesc} - -\begin{methoddesc}[bitmap]{getbit}{point} -Return the value of the bit indicated by \var{point}. -\end{methoddesc} - -\begin{methoddesc}[bitmap]{close}{} -Discard the bitmap object. It should not be used again. -\end{methoddesc} - -\subsection{Text-edit Objects} - -A text-edit object represents a text-edit block. -For semantics, see the STDWIN documentation for \C{} programmers. -The following methods exist: - - -\begin{methoddesc}[text-edit]{arrow}{code} -Pass an arrow event to the text-edit block. -The \var{code} must be one of \constant{WC_LEFT}, \constant{WC_RIGHT}, -\constant{WC_UP} or \constant{WC_DOWN} (see module -\refmodule{stdwinevents}). -\end{methoddesc} - -\begin{methoddesc}[text-edit]{draw}{rect} -Pass a draw event to the text-edit block. -The rectangle specifies the redraw area. -\end{methoddesc} - -\begin{methoddesc}[text-edit]{event}{type, window, detail} -Pass an event gotten from -\function{stdwin.getevent()} -to the text-edit block. -Return true if the event was handled. -\end{methoddesc} - -\begin{methoddesc}[text-edit]{getfocus}{} -Return 2 integers representing the start and end positions of the -focus, usable as slice indices on the string returned by -\method{gettext()}. -\end{methoddesc} - -\begin{methoddesc}[text-edit]{getfocustext}{} -Return the text in the focus. -\end{methoddesc} - -\begin{methoddesc}[text-edit]{getrect}{} -Return a rectangle giving the actual position of the text-edit block. -(The bottom coordinate may differ from the initial position because -the block automatically shrinks or grows to fit.) -\end{methoddesc} - -\begin{methoddesc}[text-edit]{gettext}{} -Return the entire text buffer. -\end{methoddesc} - -\begin{methoddesc}[text-edit]{move}{rect} -Specify a new position for the text-edit block in the document. -\end{methoddesc} - -\begin{methoddesc}[text-edit]{replace}{str} -Replace the text in the focus by the given string. -The new focus is an insert point at the end of the string. -\end{methoddesc} - -\begin{methoddesc}[text-edit]{setfocus}{i, j} -Specify the new focus. -Out-of-bounds values are silently clipped. -\end{methoddesc} - -\begin{methoddesc}[text-edit]{settext}{str} -Replace the entire text buffer by the given string and set the focus -to \code{(0, 0)}. -\end{methoddesc} - -\begin{methoddesc}[text-edit]{setview}{rect} -Set the view rectangle to \var{rect}. If \var{rect} is \code{None}, -viewing mode is reset. In viewing mode, all output from the text-edit -object is clipped to the viewing rectangle. This may be useful to -implement your own scrolling text subwindow. -\end{methoddesc} - -\begin{methoddesc}[text-edit]{close}{} -Discard the text-edit object. It should not be used again. -\end{methoddesc} - -\subsection{Example} -\nodename{STDWIN Example} - -Here is a minimal example of using STDWIN in Python. -It creates a window and draws the string ``Hello world'' in the top -left corner of the window. -The window will be correctly redrawn when covered and re-exposed. -The program quits when the close icon or menu item is requested. - -\begin{verbatim} -import stdwin -from stdwinevents import * - -def main(): - mywin = stdwin.open('Hello') - # - while 1: - (type, win, detail) = stdwin.getevent() - if type == WE_DRAW: - draw = win.begindrawing() - draw.text((0, 0), 'Hello, world') - del draw - elif type == WE_CLOSE: - break - -main() -\end{verbatim} - - -\section{\module{stdwinevents} --- - Constants for use with \module{stdwin}} - -\declaremodule{standard}{stdwinevents} -\modulesynopsis{Constant definitions for use with \module{stdwin}} - - -This module defines constants used by STDWIN for event types -(\constant{WE_ACTIVATE} etc.), command codes (\constant{WC_LEFT} etc.) -and selection types (\constant{WS_PRIMARY} etc.). -Read the file for details. -Suggested usage is - -\begin{verbatim} ->>> from stdwinevents import * ->>> -\end{verbatim} - - -\section{\module{rect} --- - Functions for use with \module{stdwin}} - -\declaremodule{standard}{rect} -\modulesynopsis{Geometry-related utility function for use with - \module{stdwin}.} - - -This module contains useful operations on rectangles. -A rectangle is defined as in module \refmodule{stdwin}: -a pair of points, where a point is a pair of integers. -For example, the rectangle - -\begin{verbatim} -(10, 20), (90, 80) -\end{verbatim} - -is a rectangle whose left, top, right and bottom edges are 10, 20, 90 -and 80, respectively. Note that the positive vertical axis points -down (as in \refmodule{stdwin}). - -The module defines the following objects: - -\begin{excdesc}{error} -The exception raised by functions in this module when they detect an -error. The exception argument is a string describing the problem in -more detail. -\end{excdesc} - -\begin{datadesc}{empty} -The rectangle returned when some operations return an empty result. -This makes it possible to quickly check whether a result is empty: - -\begin{verbatim} ->>> import rect ->>> r1 = (10, 20), (90, 80) ->>> r2 = (0, 0), (10, 20) ->>> r3 = rect.intersect([r1, r2]) ->>> if r3 is rect.empty: print 'Empty intersection' -Empty intersection ->>> -\end{verbatim} -\end{datadesc} - -\begin{funcdesc}{is_empty}{r} -Returns true if the given rectangle is empty. -A rectangle -\code{(\var{left}, \var{top}), (\var{right}, \var{bottom})} -is empty if -\begin{math}\var{left} \geq \var{right}\end{math} or -\begin{math}\var{top} \geq \var{bottom}\end{math}. -\end{funcdesc} - -\begin{funcdesc}{intersect}{list} -Returns the intersection of all rectangles in the list argument. -It may also be called with a tuple argument. Raises -\exception{rect.error} if the list is empty. Returns -\constant{rect.empty} if the intersection of the rectangles is empty. -\end{funcdesc} - -\begin{funcdesc}{union}{list} -Returns the smallest rectangle that contains all non-empty rectangles in -the list argument. It may also be called with a tuple argument or -with two or more rectangles as arguments. Returns -\constant{rect.empty} if the list is empty or all its rectangles are -empty. -\end{funcdesc} - -\begin{funcdesc}{pointinrect}{point, rect} -Returns true if the point is inside the rectangle. By definition, a -point \code{(\var{h}, \var{v})} is inside a rectangle -\code{(\var{left}, \var{top}), (\var{right}, \var{bottom})} if -\begin{math}\var{left} \leq \var{h} < \var{right}\end{math} and -\begin{math}\var{top} \leq \var{v} < \var{bottom}\end{math}. -\end{funcdesc} - -\begin{funcdesc}{inset}{rect, (dh, dv)} -Returns a rectangle that lies inside the \var{rect} argument by -\var{dh} pixels horizontally and \var{dv} pixels vertically. If -\var{dh} or \var{dv} is negative, the result lies outside \var{rect}. -\end{funcdesc} - -\begin{funcdesc}{rect2geom}{rect} -Converts a rectangle to geometry representation: -\code{(\var{left}, \var{top}), (\var{width}, \var{height})}. -\end{funcdesc} - -\begin{funcdesc}{geom2rect}{geom} -Converts a rectangle given in geometry representation back to the -standard rectangle representation -\code{(\var{left}, \var{top}), (\var{right}, \var{bottom})}. -\end{funcdesc} diff --git a/Doc/tools/listmodules b/Doc/tools/listmodules index 8469972..a60496b 100755 --- a/Doc/tools/listmodules +++ b/Doc/tools/listmodules @@ -34,12 +34,11 @@ import getopt import glob import os import re -import string import sys -REMOVE_DIRS = ["dos-8x3", "encodings", "distutils", - "lib-old", "lib-stdwin", "test"] +REMOVE_DIRS = ["encodings", "distutils", + "lib-old", ""test"] def main(): @@ -156,17 +155,17 @@ def main(): else: modules = modules_by_name.keys() modules.sort() - print string.join(modules, "\n") + print "\n".join(modules) def ignore_from_modulelist(data, ignore_dict): - for name in string.split(data): + for name in data.split(): ignore_dict[name] = name def ignore_from_idx(data, ignore_dict): - data = string.replace(data, r"\hackscore {}", "_") + data = data.replace(r"\hackscore {}", "_") rx = re.compile(r"\\indexentry\s*{([^@]*)@") - for line in string.split(data, "\n"): + for line in data.split("\n"): m = rx.match(line) if m: name = m.group(1) diff --git a/Doc/tut/tut.tex b/Doc/tut/tut.tex index 6558be2..df6f351 100644 --- a/Doc/tut/tut.tex +++ b/Doc/tut/tut.tex @@ -184,12 +184,12 @@ your local Python guru or system administrator. (E.g., \file{/usr/local/python} is a popular alternative location.) On Windows machines, the Python installation is usually placed in -\file{C:\e Python24}, though you can change this when you're running +\file{C:\e Python26}, though you can change this when you're running the installer. To add this directory to your path, you can type the following command into the command prompt in a DOS box: \begin{verbatim} -set path=%path%;C:\python24 +set path=%path%;C:\python26 \end{verbatim} @@ -2605,8 +2605,8 @@ the core of the language but are nevertheless built in, either for efficiency or to provide access to operating system primitives such as system calls. The set of such modules is a configuration option which also depends on the underlying platform For example, -the \module{amoeba} module is only provided on systems that somehow -support Amoeba primitives. One particular module deserves some +the \module{winreg} module is only provided on Windows systems. +One particular module deserves some attention: \ulink{\module{sys}}{../lib/module-sys.html}% \refstmodindex{sys}, which is built into every Python interpreter. The variables \code{sys.ps1} and @@ -3539,7 +3539,7 @@ as desired. ... print 'x =', x ... print 'y =', y ... - + ('spam', 'eggs') ('spam', 'eggs') x = spam @@ -4638,7 +4638,7 @@ operating system: >>> os.system('time 0:02') 0 >>> os.getcwd() # Return the current working directory -'C:\\Python24' +'C:\\Python26' >>> os.chdir('/server/accesslogs') \end{verbatim} @@ -5243,7 +5243,7 @@ applications include caching objects that are expensive to create: Traceback (most recent call last): File "", line 1, in -toplevel- d['primary'] # entry was automatically removed - File "C:/PY24/lib/weakref.py", line 46, in __getitem__ + File "C:/python26/lib/weakref.py", line 46, in __getitem__ o = self.data[key]() KeyError: 'primary' \end{verbatim} diff --git a/Include/pymem.h b/Include/pymem.h index 671f967..7f74f37 100644 --- a/Include/pymem.h +++ b/Include/pymem.h @@ -30,6 +30,8 @@ extern "C" { debugging info to dynamic memory blocks. The system routines have no idea what to do with that stuff, and the Python wrappers have no idea what to do with raw blocks obtained directly by the system routines then. + + The GIL must be held when using these APIs. */ /* diff --git a/Lib/ConfigParser.py b/Lib/ConfigParser.py index 6457e0f..28299bd 100644 --- a/Lib/ConfigParser.py +++ b/Lib/ConfigParser.py @@ -106,6 +106,21 @@ MAX_INTERPOLATION_DEPTH = 10 class Error(Exception): """Base class for ConfigParser exceptions.""" + def _get_message(self): + """Getter for 'message'; needed only to override deprecation in + BaseException.""" + return self.__message + + def _set_message(self, value): + """Setter for 'message'; needed only to override deprecation in + BaseException.""" + self.__message = value + + # BaseException.message has been deprecated since Python 2.6. To prevent + # DeprecationWarning from popping up over this pre-existing attribute, use + # a new property that takes lookup precedence. + message = property(_get_message, _set_message) + def __init__(self, msg=''): self.message = msg Exception.__init__(self, msg) diff --git a/Lib/ctypes/test/test_checkretval.py b/Lib/ctypes/test/test_checkretval.py index e055c49..28be6c6 100644 --- a/Lib/ctypes/test/test_checkretval.py +++ b/Lib/ctypes/test/test_checkretval.py @@ -34,7 +34,7 @@ class Test(unittest.TestCase): def test_oledll(self): self.failUnlessRaises(WindowsError, oledll.oleaut32.CreateTypeLib2, - 0, 0, 0) + 0, None, None) if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_loading.py b/Lib/ctypes/test/test_loading.py index f265a73..256cdf9 100644 --- a/Lib/ctypes/test/test_loading.py +++ b/Lib/ctypes/test/test_loading.py @@ -73,5 +73,33 @@ class LoaderTest(unittest.TestCase): self.failUnlessRaises(AttributeError, dll.__getitem__, 1234) + if os.name == "nt": + def test_1703286_A(self): + from _ctypes import LoadLibrary, FreeLibrary + # On winXP 64-bit, advapi32 loads at an address that does + # NOT fit into a 32-bit integer. FreeLibrary must be able + # to accept this address. + + # These are tests for http://www.python.org/sf/1703286 + handle = LoadLibrary("advapi32") + FreeLibrary(handle) + + def test_1703286_B(self): + # Since on winXP 64-bit advapi32 loads like described + # above, the (arbitrarily selected) CloseEventLog function + # also has a high address. 'call_function' should accept + # addresses so large. + from _ctypes import call_function + advapi32 = windll.advapi32 + # Calling CloseEventLog with a NULL argument should fail, + # but the call should not segfault or so. + self.failUnlessEqual(0, advapi32.CloseEventLog(None)) + windll.kernel32.GetProcAddress.argtypes = c_void_p, c_char_p + windll.kernel32.GetProcAddress.restype = c_void_p + proc = windll.kernel32.GetProcAddress(advapi32._handle, "CloseEventLog") + self.failUnless(proc) + # This is the real test: call the function via 'call_function' + self.failUnlessEqual(0, call_function(proc, (None,))) + if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_python_api.py b/Lib/ctypes/test/test_python_api.py index 9d13474..265ee55 100644 --- a/Lib/ctypes/test/test_python_api.py +++ b/Lib/ctypes/test/test_python_api.py @@ -10,7 +10,10 @@ from _ctypes import PyObj_FromPtr ################################################################ from sys import getrefcount as grc - +if sys.version_info > (2, 4): + c_py_ssize_t = c_size_t +else: + c_py_ssize_t = c_int class PythonAPITestCase(unittest.TestCase): @@ -18,7 +21,7 @@ class PythonAPITestCase(unittest.TestCase): PyString_FromStringAndSize = pythonapi.PyString_FromStringAndSize PyString_FromStringAndSize.restype = py_object - PyString_FromStringAndSize.argtypes = c_char_p, c_int + PyString_FromStringAndSize.argtypes = c_char_p, c_py_ssize_t self.failUnlessEqual(PyString_FromStringAndSize("abcdefghi", 3), "abc") @@ -66,7 +69,7 @@ class PythonAPITestCase(unittest.TestCase): def test_PyOS_snprintf(self): PyOS_snprintf = pythonapi.PyOS_snprintf - PyOS_snprintf.argtypes = POINTER(c_char), c_int, c_char_p + PyOS_snprintf.argtypes = POINTER(c_char), c_size_t, c_char_p buf = c_buffer(256) PyOS_snprintf(buf, sizeof(buf), "Hello from %s", "ctypes") diff --git a/Lib/ctypes/test/test_random_things.py b/Lib/ctypes/test/test_random_things.py index 78a665b..12b4e62 100644 --- a/Lib/ctypes/test/test_random_things.py +++ b/Lib/ctypes/test/test_random_things.py @@ -13,6 +13,10 @@ if sys.platform == "win32": def test(self): from _ctypes import call_function + windll.kernel32.LoadLibraryA.restype = c_void_p + windll.kernel32.GetProcAddress.argtypes = c_void_p, c_char_p + windll.kernel32.GetProcAddress.restype = c_void_p + hdll = windll.kernel32.LoadLibraryA("kernel32") funcaddr = windll.kernel32.GetProcAddress(hdll, "GetModuleHandleA") diff --git a/Lib/genericpath.py b/Lib/genericpath.py index ef8ea7f..73d7b26 100644 --- a/Lib/genericpath.py +++ b/Lib/genericpath.py @@ -70,11 +70,10 @@ def commonprefix(m): if not m: return '' s1 = min(m) s2 = max(m) - n = min(len(s1), len(s2)) - for i in range(n): - if s1[i] != s2[i]: + for i, c in enumerate(s1): + if c != s2[i]: return s1[:i] - return s1[:n] + return s1 # Split a path in root and extension. # The extension is everything starting at the last dot in the last diff --git a/Lib/locale.py b/Lib/locale.py index 35f4a79..dea0ab7 100644 --- a/Lib/locale.py +++ b/Lib/locale.py @@ -19,9 +19,11 @@ import sys, encodings, encodings.aliases # Yuck: LC_MESSAGES is non-standard: can't tell whether it exists before # trying the import. So __all__ is also fiddled at the end of the file. -__all__ = ["setlocale","Error","localeconv","strcoll","strxfrm", - "format","str","atof","atoi","LC_CTYPE","LC_COLLATE", - "LC_TIME","LC_MONETARY","LC_NUMERIC", "LC_ALL","CHAR_MAX"] +__all__ = ["getlocale", "getdefaultlocale", "getpreferredencoding", "Error", + "setlocale", "resetlocale", "localeconv", "strcoll", "strxfrm", + "str", "atof", "atoi", "format", "format_string", "currency", + "normalize", "LC_CTYPE", "LC_COLLATE", "LC_TIME", "LC_MONETARY", + "LC_NUMERIC", "LC_ALL", "CHAR_MAX"] try: diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py index 71ec9c3..00dd05b 100644 --- a/Lib/logging/handlers.py +++ b/Lib/logging/handlers.py @@ -726,22 +726,25 @@ class SMTPHandler(logging.Handler): """ A handler class which sends an SMTP email for each logging event. """ - def __init__(self, mailhost, fromaddr, toaddrs, subject): + def __init__(self, mailhost, fromaddr, toaddrs, subject, credentials=None): """ Initialize the handler. Initialize the instance with the from and to addresses and subject line of the email. To specify a non-standard SMTP port, use the - (host, port) tuple format for the mailhost argument. + (host, port) tuple format for the mailhost argument. To specify + authentication credentials, supply a (username, password) tuple + for the credentials argument. """ logging.Handler.__init__(self) if type(mailhost) == types.TupleType: - host, port = mailhost - self.mailhost = host - self.mailport = port + self.mailhost, self.mailport = mailhost else: - self.mailhost = mailhost - self.mailport = None + self.mailhost, self.mailport = mailhost, None + if type(credentials) == types.TupleType: + self.username, self.password = credentials + else: + self.username = None self.fromaddr = fromaddr if type(toaddrs) == types.StringType: toaddrs = [toaddrs] @@ -797,6 +800,8 @@ class SMTPHandler(logging.Handler): ",".join(self.toaddrs), self.getSubject(record), formatdate(), msg) + if self.username: + smtp.login(self.username, self.password) smtp.sendmail(self.fromaddr, self.toaddrs, msg) smtp.quit() except (KeyboardInterrupt, SystemExit): diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py index 8774170..1b73a65 100644 --- a/Lib/mimetypes.py +++ b/Lib/mimetypes.py @@ -329,11 +329,13 @@ def _default_mime_types(): '.tgz': '.tar.gz', '.taz': '.tar.gz', '.tz': '.tar.gz', + '.tbz2': '.tar.bz2', } encodings_map = { '.gz': 'gzip', '.Z': 'compress', + '.bz2': 'bzip2', } # Before adding new types, make sure they are either registered with IANA, diff --git a/Lib/os.py b/Lib/os.py index 34359c1..268b3cf 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -664,9 +664,15 @@ if _exists("fork"): is a string it will be passed to the shell (as with os.system()). If 'bufsize' is specified, it sets the buffer size for the I/O pipes. The file objects (child_stdin, child_stdout) are returned.""" - import popen2 - stdout, stdin = popen2.popen2(cmd, bufsize) - return stdin, stdout + import warnings + msg = "os.popen2 is deprecated. Use the subprocess module." + warnings.warn(msg, DeprecationWarning, stacklevel=2) + + import subprocess + PIPE = subprocess.PIPE + p = subprocess.Popen(cmd, shell=True, bufsize=bufsize, + stdin=PIPE, stdout=PIPE, close_fds=True) + return p.stdin, p.stdout __all__.append("popen2") if not _exists("popen3"): @@ -677,9 +683,16 @@ if _exists("fork"): is a string it will be passed to the shell (as with os.system()). If 'bufsize' is specified, it sets the buffer size for the I/O pipes. The file objects (child_stdin, child_stdout, child_stderr) are returned.""" - import popen2 - stdout, stdin, stderr = popen2.popen3(cmd, bufsize) - return stdin, stdout, stderr + import warnings + msg = "os.popen3 is deprecated. Use the subprocess module." + warnings.warn(msg, DeprecationWarning, stacklevel=2) + + import subprocess + PIPE = subprocess.PIPE + p = subprocess.Popen(cmd, shell=True, bufsize=bufsize, + stdin=PIPE, stdout=PIPE, stderr=PIPE, + close_fds=True) + return p.stdin, p.stdout, p.stderr __all__.append("popen3") if not _exists("popen4"): @@ -690,9 +703,16 @@ if _exists("fork"): is a string it will be passed to the shell (as with os.system()). If 'bufsize' is specified, it sets the buffer size for the I/O pipes. The file objects (child_stdin, child_stdout_stderr) are returned.""" - import popen2 - stdout, stdin = popen2.popen4(cmd, bufsize) - return stdin, stdout + import warnings + msg = "os.popen4 is deprecated. Use the subprocess module." + warnings.warn(msg, DeprecationWarning, stacklevel=2) + + import subprocess + PIPE = subprocess.PIPE + p = subprocess.Popen(cmd, shell=True, bufsize=bufsize, + stdin=PIPE, stdout=PIPE, + stderr=subprocess.STDOUT, close_fds=True) + return p.stdin, p.stdout __all__.append("popen4") import copy_reg as _copy_reg diff --git a/Lib/plat-freebsd2/IN.py b/Lib/plat-freebsd2/IN.py deleted file mode 100644 index 64dab8b..0000000 --- a/Lib/plat-freebsd2/IN.py +++ /dev/null @@ -1,187 +0,0 @@ -# Generated by h2py from /usr/include/netinet/in.h -IPPROTO_IP = 0 -IPPROTO_ICMP = 1 -IPPROTO_IGMP = 2 -IPPROTO_GGP = 3 -IPPROTO_IPIP = 4 -IPPROTO_TCP = 6 -IPPROTO_ST = 7 -IPPROTO_EGP = 8 -IPPROTO_PIGP = 9 -IPPROTO_RCCMON = 10 -IPPROTO_NVPII = 11 -IPPROTO_PUP = 12 -IPPROTO_ARGUS = 13 -IPPROTO_EMCON = 14 -IPPROTO_XNET = 15 -IPPROTO_CHAOS = 16 -IPPROTO_UDP = 17 -IPPROTO_MUX = 18 -IPPROTO_MEAS = 19 -IPPROTO_HMP = 20 -IPPROTO_PRM = 21 -IPPROTO_IDP = 22 -IPPROTO_TRUNK1 = 23 -IPPROTO_TRUNK2 = 24 -IPPROTO_LEAF1 = 25 -IPPROTO_LEAF2 = 26 -IPPROTO_RDP = 27 -IPPROTO_IRTP = 28 -IPPROTO_TP = 29 -IPPROTO_BLT = 30 -IPPROTO_NSP = 31 -IPPROTO_INP = 32 -IPPROTO_SEP = 33 -IPPROTO_3PC = 34 -IPPROTO_IDPR = 35 -IPPROTO_XTP = 36 -IPPROTO_DDP = 37 -IPPROTO_CMTP = 38 -IPPROTO_TPXX = 39 -IPPROTO_IL = 40 -IPPROTO_SIP = 41 -IPPROTO_SDRP = 42 -IPPROTO_SIPSR = 43 -IPPROTO_SIPFRAG = 44 -IPPROTO_IDRP = 45 -IPPROTO_RSVP = 46 -IPPROTO_GRE = 47 -IPPROTO_MHRP = 48 -IPPROTO_BHA = 49 -IPPROTO_ESP = 50 -IPPROTO_AH = 51 -IPPROTO_INLSP = 52 -IPPROTO_SWIPE = 53 -IPPROTO_NHRP = 54 -IPPROTO_AHIP = 61 -IPPROTO_CFTP = 62 -IPPROTO_HELLO = 63 -IPPROTO_SATEXPAK = 64 -IPPROTO_KRYPTOLAN = 65 -IPPROTO_RVD = 66 -IPPROTO_IPPC = 67 -IPPROTO_ADFS = 68 -IPPROTO_SATMON = 69 -IPPROTO_VISA = 70 -IPPROTO_IPCV = 71 -IPPROTO_CPNX = 72 -IPPROTO_CPHB = 73 -IPPROTO_WSN = 74 -IPPROTO_PVP = 75 -IPPROTO_BRSATMON = 76 -IPPROTO_ND = 77 -IPPROTO_WBMON = 78 -IPPROTO_WBEXPAK = 79 -IPPROTO_EON = 80 -IPPROTO_VMTP = 81 -IPPROTO_SVMTP = 82 -IPPROTO_VINES = 83 -IPPROTO_TTP = 84 -IPPROTO_IGP = 85 -IPPROTO_DGP = 86 -IPPROTO_TCF = 87 -IPPROTO_IGRP = 88 -IPPROTO_OSPFIGP = 89 -IPPROTO_SRPC = 90 -IPPROTO_LARP = 91 -IPPROTO_MTP = 92 -IPPROTO_AX25 = 93 -IPPROTO_IPEIP = 94 -IPPROTO_MICP = 95 -IPPROTO_SCCSP = 96 -IPPROTO_ETHERIP = 97 -IPPROTO_ENCAP = 98 -IPPROTO_APES = 99 -IPPROTO_GMTP = 100 -IPPROTO_DIVERT = 254 -IPPROTO_RAW = 255 -IPPROTO_MAX = 256 -IPPORT_RESERVED = 1024 -IPPORT_USERRESERVED = 5000 -IPPORT_HIFIRSTAUTO = 40000 -IPPORT_HILASTAUTO = 44999 -IPPORT_RESERVEDSTART = 600 -def IN_CLASSA(i): return (((int)(i) & 0x80000000) == 0) - -IN_CLASSA_NET = 0xff000000 -IN_CLASSA_NSHIFT = 24 -IN_CLASSA_HOST = 0x00ffffff -IN_CLASSA_MAX = 128 -def IN_CLASSB(i): return (((int)(i) & 0xc0000000) == 0x80000000) - -IN_CLASSB_NET = 0xffff0000 -IN_CLASSB_NSHIFT = 16 -IN_CLASSB_HOST = 0x0000ffff -IN_CLASSB_MAX = 65536 -def IN_CLASSC(i): return (((int)(i) & 0xe0000000) == 0xc0000000) - -IN_CLASSC_NET = 0xffffff00 -IN_CLASSC_NSHIFT = 8 -IN_CLASSC_HOST = 0x000000ff -def IN_CLASSD(i): return (((int)(i) & 0xf0000000) == 0xe0000000) - -IN_CLASSD_NET = 0xf0000000 -IN_CLASSD_NSHIFT = 28 -IN_CLASSD_HOST = 0x0fffffff -def IN_MULTICAST(i): return IN_CLASSD(i) - -def IN_EXPERIMENTAL(i): return (((int)(i) & 0xf0000000) == 0xf0000000) - -def IN_BADCLASS(i): return (((int)(i) & 0xf0000000) == 0xf0000000) - -INADDR_ANY = 0x00000000 -INADDR_BROADCAST = 0xffffffff -INADDR_NONE = 0xffffffff -INADDR_UNSPEC_GROUP = 0xe0000000 -INADDR_ALLHOSTS_GROUP = 0xe0000001 -INADDR_ALLRTRS_GROUP = 0xe0000002 -INADDR_MAX_LOCAL_GROUP = 0xe00000ff -IN_LOOPBACKNET = 127 -IP_OPTIONS = 1 -IP_HDRINCL = 2 -IP_TOS = 3 -IP_TTL = 4 -IP_RECVOPTS = 5 -IP_RECVRETOPTS = 6 -IP_RECVDSTADDR = 7 -IP_RETOPTS = 8 -IP_MULTICAST_IF = 9 -IP_MULTICAST_TTL = 10 -IP_MULTICAST_LOOP = 11 -IP_ADD_MEMBERSHIP = 12 -IP_DROP_MEMBERSHIP = 13 -IP_MULTICAST_VIF = 14 -IP_RSVP_ON = 15 -IP_RSVP_OFF = 16 -IP_RSVP_VIF_ON = 17 -IP_RSVP_VIF_OFF = 18 -IP_PORTRANGE = 19 -IP_RECVIF = 20 -IP_FW_ADD = 50 -IP_FW_DEL = 51 -IP_FW_FLUSH = 52 -IP_FW_ZERO = 53 -IP_FW_GET = 54 -IP_NAT = 55 -IP_DEFAULT_MULTICAST_TTL = 1 -IP_DEFAULT_MULTICAST_LOOP = 1 -IP_MAX_MEMBERSHIPS = 20 -IP_PORTRANGE_DEFAULT = 0 -IP_PORTRANGE_HIGH = 1 -IP_PORTRANGE_LOW = 2 -IPPROTO_MAXID = (IPPROTO_IDP + 1) -IPCTL_FORWARDING = 1 -IPCTL_SENDREDIRECTS = 2 -IPCTL_DEFTTL = 3 -IPCTL_DEFMTU = 4 -IPCTL_RTEXPIRE = 5 -IPCTL_RTMINEXPIRE = 6 -IPCTL_RTMAXCACHE = 7 -IPCTL_SOURCEROUTE = 8 -IPCTL_DIRECTEDBROADCAST = 9 -IPCTL_INTRQMAXLEN = 10 -IPCTL_INTRQDROPS = 11 -IPCTL_ACCEPTSOURCEROUTE = 13 -IPCTL_MAXID = 13 -IP_NAT_IN = 0x00000001 -IP_NAT_OUT = 0x00000002 diff --git a/Lib/plat-freebsd2/regen b/Lib/plat-freebsd2/regen deleted file mode 100755 index 8f7e15e..0000000 --- a/Lib/plat-freebsd2/regen +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/sh -set -v -h2py -i '(u_long)' /usr/include/netinet/in.h diff --git a/Lib/plat-freebsd3/IN.py b/Lib/plat-freebsd3/IN.py deleted file mode 100644 index 81a430c..0000000 --- a/Lib/plat-freebsd3/IN.py +++ /dev/null @@ -1,189 +0,0 @@ -# Generated by h2py from /usr/include/netinet/in.h -IPPROTO_IP = 0 -IPPROTO_ICMP = 1 -IPPROTO_IGMP = 2 -IPPROTO_GGP = 3 -IPPROTO_IPIP = 4 -IPPROTO_TCP = 6 -IPPROTO_ST = 7 -IPPROTO_EGP = 8 -IPPROTO_PIGP = 9 -IPPROTO_RCCMON = 10 -IPPROTO_NVPII = 11 -IPPROTO_PUP = 12 -IPPROTO_ARGUS = 13 -IPPROTO_EMCON = 14 -IPPROTO_XNET = 15 -IPPROTO_CHAOS = 16 -IPPROTO_UDP = 17 -IPPROTO_MUX = 18 -IPPROTO_MEAS = 19 -IPPROTO_HMP = 20 -IPPROTO_PRM = 21 -IPPROTO_IDP = 22 -IPPROTO_TRUNK1 = 23 -IPPROTO_TRUNK2 = 24 -IPPROTO_LEAF1 = 25 -IPPROTO_LEAF2 = 26 -IPPROTO_RDP = 27 -IPPROTO_IRTP = 28 -IPPROTO_TP = 29 -IPPROTO_BLT = 30 -IPPROTO_NSP = 31 -IPPROTO_INP = 32 -IPPROTO_SEP = 33 -IPPROTO_3PC = 34 -IPPROTO_IDPR = 35 -IPPROTO_XTP = 36 -IPPROTO_DDP = 37 -IPPROTO_CMTP = 38 -IPPROTO_TPXX = 39 -IPPROTO_IL = 40 -IPPROTO_SIP = 41 -IPPROTO_SDRP = 42 -IPPROTO_SIPSR = 43 -IPPROTO_SIPFRAG = 44 -IPPROTO_IDRP = 45 -IPPROTO_RSVP = 46 -IPPROTO_GRE = 47 -IPPROTO_MHRP = 48 -IPPROTO_BHA = 49 -IPPROTO_ESP = 50 -IPPROTO_AH = 51 -IPPROTO_INLSP = 52 -IPPROTO_SWIPE = 53 -IPPROTO_NHRP = 54 -IPPROTO_AHIP = 61 -IPPROTO_CFTP = 62 -IPPROTO_HELLO = 63 -IPPROTO_SATEXPAK = 64 -IPPROTO_KRYPTOLAN = 65 -IPPROTO_RVD = 66 -IPPROTO_IPPC = 67 -IPPROTO_ADFS = 68 -IPPROTO_SATMON = 69 -IPPROTO_VISA = 70 -IPPROTO_IPCV = 71 -IPPROTO_CPNX = 72 -IPPROTO_CPHB = 73 -IPPROTO_WSN = 74 -IPPROTO_PVP = 75 -IPPROTO_BRSATMON = 76 -IPPROTO_ND = 77 -IPPROTO_WBMON = 78 -IPPROTO_WBEXPAK = 79 -IPPROTO_EON = 80 -IPPROTO_VMTP = 81 -IPPROTO_SVMTP = 82 -IPPROTO_VINES = 83 -IPPROTO_TTP = 84 -IPPROTO_IGP = 85 -IPPROTO_DGP = 86 -IPPROTO_TCF = 87 -IPPROTO_IGRP = 88 -IPPROTO_OSPFIGP = 89 -IPPROTO_SRPC = 90 -IPPROTO_LARP = 91 -IPPROTO_MTP = 92 -IPPROTO_AX25 = 93 -IPPROTO_IPEIP = 94 -IPPROTO_MICP = 95 -IPPROTO_SCCSP = 96 -IPPROTO_ETHERIP = 97 -IPPROTO_ENCAP = 98 -IPPROTO_APES = 99 -IPPROTO_GMTP = 100 -IPPROTO_DIVERT = 254 -IPPROTO_RAW = 255 -IPPROTO_MAX = 256 -IPPORT_RESERVED = 1024 -IPPORT_USERRESERVED = 5000 -IPPORT_HIFIRSTAUTO = 49152 -IPPORT_HILASTAUTO = 65535 -IPPORT_RESERVEDSTART = 600 -def IN_CLASSA(i): return (((int)(i) & 0x80000000) == 0) - -IN_CLASSA_NET = 0xff000000 -IN_CLASSA_NSHIFT = 24 -IN_CLASSA_HOST = 0x00ffffff -IN_CLASSA_MAX = 128 -def IN_CLASSB(i): return (((int)(i) & 0xc0000000) == 0x80000000) - -IN_CLASSB_NET = 0xffff0000 -IN_CLASSB_NSHIFT = 16 -IN_CLASSB_HOST = 0x0000ffff -IN_CLASSB_MAX = 65536 -def IN_CLASSC(i): return (((int)(i) & 0xe0000000) == 0xc0000000) - -IN_CLASSC_NET = 0xffffff00 -IN_CLASSC_NSHIFT = 8 -IN_CLASSC_HOST = 0x000000ff -def IN_CLASSD(i): return (((int)(i) & 0xf0000000) == 0xe0000000) - -IN_CLASSD_NET = 0xf0000000 -IN_CLASSD_NSHIFT = 28 -IN_CLASSD_HOST = 0x0fffffff -def IN_MULTICAST(i): return IN_CLASSD(i) - -def IN_EXPERIMENTAL(i): return (((int)(i) & 0xf0000000) == 0xf0000000) - -def IN_BADCLASS(i): return (((int)(i) & 0xf0000000) == 0xf0000000) - -INADDR_ANY = 0x00000000 -INADDR_LOOPBACK = 0x7f000001 -INADDR_BROADCAST = 0xffffffff -INADDR_NONE = 0xffffffff -INADDR_UNSPEC_GROUP = 0xe0000000 -INADDR_ALLHOSTS_GROUP = 0xe0000001 -INADDR_ALLRTRS_GROUP = 0xe0000002 -INADDR_MAX_LOCAL_GROUP = 0xe00000ff -IN_LOOPBACKNET = 127 -IP_OPTIONS = 1 -IP_HDRINCL = 2 -IP_TOS = 3 -IP_TTL = 4 -IP_RECVOPTS = 5 -IP_RECVRETOPTS = 6 -IP_RECVDSTADDR = 7 -IP_RETOPTS = 8 -IP_MULTICAST_IF = 9 -IP_MULTICAST_TTL = 10 -IP_MULTICAST_LOOP = 11 -IP_ADD_MEMBERSHIP = 12 -IP_DROP_MEMBERSHIP = 13 -IP_MULTICAST_VIF = 14 -IP_RSVP_ON = 15 -IP_RSVP_OFF = 16 -IP_RSVP_VIF_ON = 17 -IP_RSVP_VIF_OFF = 18 -IP_PORTRANGE = 19 -IP_RECVIF = 20 -IP_FW_ADD = 50 -IP_FW_DEL = 51 -IP_FW_FLUSH = 52 -IP_FW_ZERO = 53 -IP_FW_GET = 54 -IP_NAT = 55 -IP_DEFAULT_MULTICAST_TTL = 1 -IP_DEFAULT_MULTICAST_LOOP = 1 -IP_MAX_MEMBERSHIPS = 20 -IP_PORTRANGE_DEFAULT = 0 -IP_PORTRANGE_HIGH = 1 -IP_PORTRANGE_LOW = 2 -IPPROTO_MAXID = (IPPROTO_IDP + 1) -IPCTL_FORWARDING = 1 -IPCTL_SENDREDIRECTS = 2 -IPCTL_DEFTTL = 3 -IPCTL_DEFMTU = 4 -IPCTL_RTEXPIRE = 5 -IPCTL_RTMINEXPIRE = 6 -IPCTL_RTMAXCACHE = 7 -IPCTL_SOURCEROUTE = 8 -IPCTL_DIRECTEDBROADCAST = 9 -IPCTL_INTRQMAXLEN = 10 -IPCTL_INTRQDROPS = 11 -IPCTL_STATS = 12 -IPCTL_ACCEPTSOURCEROUTE = 13 -IPCTL_MAXID = 14 -IP_NAT_IN = 0x00000001 -IP_NAT_OUT = 0x00000002 diff --git a/Lib/plat-freebsd3/regen b/Lib/plat-freebsd3/regen deleted file mode 100755 index 170f155..0000000 --- a/Lib/plat-freebsd3/regen +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/sh -set -v -h2py -i '(u_long)' /usr/include/netinet/in.h - diff --git a/Lib/plat-mac/pimp.py b/Lib/plat-mac/pimp.py index 09f63db..2a66d19 100644 --- a/Lib/plat-mac/pimp.py +++ b/Lib/plat-mac/pimp.py @@ -14,7 +14,7 @@ intention is that the end user will use this through a GUI. """ import sys import os -import popen2 +import subprocess import urllib import urllib2 import urlparse @@ -101,10 +101,11 @@ def _cmd(output, dir, *cmditems): output.write("+ %s\n" % cmd) if NO_EXECUTE: return 0 - child = popen2.Popen4(cmd) - child.tochild.close() + child = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + child.stdin.close() while 1: - line = child.fromchild.readline() + line = child.stdout.readline() if not line: break if output: diff --git a/Lib/popen2.py b/Lib/popen2.py index 6c5cd61..2e25868 100644 --- a/Lib/popen2.py +++ b/Lib/popen2.py @@ -8,6 +8,9 @@ and popen3(cmd) which return two or three pipes to the spawned command. import os import sys +import warnings +warnings.warn("The popen2 module is deprecated. Use the subprocess module.", + DeprecationWarning, stacklevel=2) __all__ = ["popen2", "popen3", "popen4"] diff --git a/Lib/test/crashers/dangerous_subclassing.py b/Lib/test/crashers/dangerous_subclassing.py deleted file mode 100644 index 0479952..0000000 --- a/Lib/test/crashers/dangerous_subclassing.py +++ /dev/null @@ -1,12 +0,0 @@ - -# http://python.org/sf/1174712 - -import types - -class X(types.ModuleType, str): - """Such a subclassing is incorrectly allowed -- - see the SF bug report for explanations""" - -if __name__ == '__main__': - X('name') # segfault: ModuleType.__init__() reads - # the dict at the wrong offset diff --git a/Lib/test/crashers/modify_dict_attr.py b/Lib/test/crashers/modify_dict_attr.py deleted file mode 100644 index be675c1..0000000 --- a/Lib/test/crashers/modify_dict_attr.py +++ /dev/null @@ -1,19 +0,0 @@ - -# http://python.org/sf/1303614 - -class Y(object): - pass - -class type_with_modifiable_dict(type, Y): - pass - -class MyClass(object, metaclass=type_with_modifiable_dict): - """This class has its __dict__ attribute indirectly - exposed via the __dict__ getter/setter of Y. - """ - - -if __name__ == '__main__': - dictattr = Y.__dict__['__dict__'] - dictattr.__delete__(MyClass) # if we set tp_dict to NULL, - print(MyClass) # doing anything with MyClass segfaults diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index 7458b5e..3681a9d 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -689,9 +689,10 @@ def dash_R(the_module, test, indirect_test, huntrleaks): deltas.append(sys.gettotalrefcount() - rc - 2) print(file=sys.stderr) if any(deltas): - print(test, 'leaked', deltas, 'references', file=sys.stderr) + msg = '%s leaked %s references, sum=%s' % (test, deltas, sum(deltas)) + print(msg, file=sys.stderr) refrep = open(fname, "a") - print(test, 'leaked', deltas, 'references', file=refrep) + print(msg, file=refrep) refrep.close() def dash_R_cleanup(fs, ps, pic): diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py index b1b64a8..f2c9579 100644 --- a/Lib/test/string_tests.py +++ b/Lib/test/string_tests.py @@ -2,7 +2,7 @@ Common tests shared by test_str, test_unicode, test_userstring and test_string. """ -import unittest, string, sys +import unittest, string, sys, struct from test import test_support from UserList import UserList @@ -507,7 +507,7 @@ class BaseTest(unittest.TestCase): def test_replace_overflow(self): # Check for overflow checking on 32 bit machines - if sys.maxint != 2147483647: + if sys.maxint != 2147483647 or struct.calcsize("P") > 4: return A2_16 = "A" * (2**16) self.checkraises(OverflowError, A2_16, "replace", "", A2_16) diff --git a/Lib/test/test___all__.py b/Lib/test/test___all__.py index 7a39ca3..e7ed2f7 100644 --- a/Lib/test/test___all__.py +++ b/Lib/test/test___all__.py @@ -7,6 +7,8 @@ warnings.filterwarnings("ignore", "the gopherlib module is deprecated", DeprecationWarning, "") +warnings.filterwarnings("ignore", ".*popen2 module is deprecated.*", + DeprecationWarning) class AllTest(unittest.TestCase): diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py index 44684c3..0ddfc57 100644 --- a/Lib/test/test_bz2.py +++ b/Lib/test/test_bz2.py @@ -5,7 +5,7 @@ from test.test_support import TESTFN import unittest from cStringIO import StringIO import os -import popen2 +import subprocess import sys import bz2 @@ -21,18 +21,20 @@ class BaseTest(unittest.TestCase): if has_cmdline_bunzip2: def decompress(self, data): - pop = popen2.Popen3("bunzip2", capturestderr=1) - pop.tochild.write(data) - pop.tochild.close() - ret = pop.fromchild.read() - pop.fromchild.close() + pop = subprocess.Popen("bunzip2", shell=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + pop.stdin.write(data) + pop.stdin.close() + ret = pop.stdout.read() + pop.stdout.close() if pop.wait() != 0: ret = bz2.decompress(data) return ret else: - # popen2.Popen3 doesn't exist on Windows, and even if it did, bunzip2 - # isn't available to run. + # bunzip2 isn't available to run on Windows. def decompress(self, data): return bz2.decompress(data) diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py index cacae7a..d3f07c7 100644 --- a/Lib/test/test_cmd_line.py +++ b/Lib/test/test_cmd_line.py @@ -1,18 +1,19 @@ import test.test_support, unittest import sys -import popen2 import subprocess class CmdLineTest(unittest.TestCase): def start_python(self, cmd_line): - outfp, infp = popen2.popen4('"%s" %s' % (sys.executable, cmd_line)) - infp.close() - data = outfp.read() - outfp.close() + cmd = '"%s" %s' % (sys.executable, cmd_line) + p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + p.stdin.close() + data = p.stdout.read() + p.stdout.close() # try to cleanup the child so we don't appear to leak when running # with regrtest -R. This should be a no-op on Windows. - popen2._cleanup() + subprocess._cleanup() return data def exit_code(self, *args): diff --git a/Lib/test/test_defaultdict.py b/Lib/test/test_defaultdict.py index a8dfdb1..18c1eb6 100644 --- a/Lib/test/test_defaultdict.py +++ b/Lib/test/test_defaultdict.py @@ -137,7 +137,7 @@ class TestDefaultDict(unittest.TestCase): try: d1[(1,)] except KeyError as err: - self.assertEqual(err.message, (1,)) + self.assertEqual(err.args[0], (1,)) else: self.fail("expected KeyError") diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 4b6d734..e8d94f4 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -3,6 +3,7 @@ from test.test_support import verify, vereq, verbose, TestFailed, TESTFN, get_original_stdout from copy import deepcopy import warnings +import types warnings.filterwarnings("ignore", r'complex divmod\(\), // and % are deprecated$', @@ -814,6 +815,16 @@ def pymods(): ("getattr", "foo"), ("delattr", "foo")]) + # http://python.org/sf/1174712 + try: + class Module(types.ModuleType, str): + pass + except TypeError: + pass + else: + raise TestFailed("inheriting from ModuleType and str at the " + "same time should fail") + def multi(): if verbose: print("Testing multiple inheritance...") class C(object): @@ -2734,8 +2745,73 @@ def setdict(): cant(a, []) cant(a, 1) del a.__dict__ # Deleting __dict__ is allowed - # Classes don't allow __dict__ assignment - cant(C, {}) + + class Base(object): + pass + def verify_dict_readonly(x): + """ + x has to be an instance of a class inheriting from Base. + """ + cant(x, {}) + try: + del x.__dict__ + except (AttributeError, TypeError): + pass + else: + raise TestFailed, "shouldn't allow del %r.__dict__" % x + dict_descr = Base.__dict__["__dict__"] + try: + dict_descr.__set__(x, {}) + except (AttributeError, TypeError): + pass + else: + raise TestFailed, "dict_descr allowed access to %r's dict" % x + + # Classes don't allow __dict__ assignment and have readonly dicts + class Meta1(type, Base): + pass + class Meta2(Base, type): + pass + class D(object): + __metaclass__ = Meta1 + class E(object): + __metaclass__ = Meta2 + for cls in C, D, E: + verify_dict_readonly(cls) + class_dict = cls.__dict__ + try: + class_dict["spam"] = "eggs" + except TypeError: + pass + else: + raise TestFailed, "%r's __dict__ can be modified" % cls + + # Modules also disallow __dict__ assignment + class Module1(types.ModuleType, Base): + pass + class Module2(Base, types.ModuleType): + pass + for ModuleType in Module1, Module2: + mod = ModuleType("spam") + verify_dict_readonly(mod) + mod.__dict__["spam"] = "eggs" + + # Exception's __dict__ can be replaced, but not deleted + class Exception1(Exception, Base): + pass + class Exception2(Base, Exception): + pass + for ExceptionType in Exception, Exception1, Exception2: + e = ExceptionType() + e.__dict__ = {"a": 1} + vereq(e.a, 1) + try: + del e.__dict__ + except (TypeError, AttributeError): + pass + else: + raise TestFaied, "%r's __dict__ can be deleted" % e + def pickles(): if verbose: diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index dbaf01c..b1d6790 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -9,7 +9,9 @@ try: except ImportError: cPickle = None -from test.test_support import TESTFN, unlink, run_unittest +from test.test_support import (TESTFN, unlink, run_unittest, + guard_warnings_filter) +from test.test_pep352 import ignore_message_warning # XXX This is not really enough, each *operation* should be tested! @@ -278,38 +280,40 @@ class ExceptionTests(unittest.TestCase): except NameError: pass - for exc, args, expected in exceptionList: - try: - e = exc(*args) - except: - print("\nexc=%r, args=%r" % (exc, args)) - raise - else: - # Verify module name - self.assertEquals(type(e).__module__, '__builtin__') - # Verify no ref leaks in Exc_str() - s = str(e) - for checkArgName in expected: - value = getattr(e, checkArgName) - self.assertEquals(repr(value), - repr(expected[checkArgName]), - '%r.%s == %r, expected %r' % ( - e, checkArgName, - value, expected[checkArgName])) - - # test for pickling support - for p in pickle, cPickle: - if p is None: - continue # cPickle not found -- skip it - for protocol in range(p.HIGHEST_PROTOCOL + 1): - s = p.dumps(e, protocol) - new = p.loads(s) - for checkArgName in expected: - got = repr(getattr(new, checkArgName)) - want = repr(expected[checkArgName]) - self.assertEquals(got, want, - 'pickled "%r", attribute "%s' % - (e, checkArgName)) + with guard_warnings_filter(): + ignore_message_warning() + for exc, args, expected in exceptionList: + try: + e = exc(*args) + except: + print("\nexc=%r, args=%r" % (exc, args)) + raise + else: + # Verify module name + self.assertEquals(type(e).__module__, '__builtin__') + # Verify no ref leaks in Exc_str() + s = str(e) + for checkArgName in expected: + value = getattr(e, checkArgName) + self.assertEquals(repr(value), + repr(expected[checkArgName]), + '%r.%s == %r, expected %r' % ( + e, checkArgName, + value, expected[checkArgName])) + + # test for pickling support + for p in pickle, cPickle: + if p is None: + continue # cPickle not found -- skip it + for protocol in range(p.HIGHEST_PROTOCOL + 1): + s = p.dumps(e, protocol) + new = p.loads(s) + for checkArgName in expected: + got = repr(getattr(new, checkArgName)) + want = repr(expected[checkArgName]) + self.assertEquals(got, want, + 'pickled "%r", attribute "%s' % + (e, checkArgName)) def testKeywordArgs(self): # test that builtin exception don't take keyword args, diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py index be2f781..5bad843 100644 --- a/Lib/test/test_fileio.py +++ b/Lib/test/test_fileio.py @@ -166,7 +166,7 @@ class OtherFileTests(unittest.TestCase): try: f = _fileio._FileIO(TESTFN, bad_mode) except ValueError as msg: - if msg.message != 0: + if msg.args[0] != 0: s = str(msg) if s.find(TESTFN) != -1 or s.find(bad_mode) == -1: self.fail("bad error message for invalid mode: %s" % s) diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py index a006bbf..718320d 100644 --- a/Lib/test/test_format.py +++ b/Lib/test/test_format.py @@ -1,5 +1,7 @@ from test.test_support import verbose, have_unicode, TestFailed import sys +from test.test_support import MAX_Py_ssize_t +maxsize = MAX_Py_ssize_t # test string formatting operator (I am not sure if this is being tested # elsewhere but, surely, some of the given cases are *not* tested because @@ -238,11 +240,11 @@ class Foobar(int): test_exc('%o', Foobar(), TypeError, "expected string or Unicode object, int found") -if sys.maxint == 2**31-1: +if maxsize == 2**31-1: # crashes 2.2.1 and earlier: try: - "%*d"%(sys.maxint, -127) + "%*d"%(maxsize, -127) except MemoryError: pass else: - raise TestFailed, '"%*d"%(sys.maxint, -127) should fail' + raise TestFailed, '"%*d"%(maxsize, -127) should fail' diff --git a/Lib/test/test_index.py b/Lib/test/test_index.py index 8055c33..653665e 100644 --- a/Lib/test/test_index.py +++ b/Lib/test/test_index.py @@ -1,7 +1,10 @@ import unittest from test import test_support import operator +import sys from sys import maxint +maxsize = test_support.MAX_Py_ssize_t +minsize = -maxsize-1 class oldstyle: def __index__(self): @@ -177,7 +180,7 @@ class OverflowTestCase(unittest.TestCase): def _getitem_helper(self, base): class GetItem(base): def __len__(self): - return maxint + return maxint #cannot return long here def __getitem__(self, key): return key def __getslice__(self, i, j): @@ -185,8 +188,8 @@ class OverflowTestCase(unittest.TestCase): x = GetItem() self.assertEqual(x[self.pos], self.pos) self.assertEqual(x[self.neg], self.neg) - self.assertEqual(x[self.neg:self.pos], (-1, maxint)) - self.assertEqual(x[self.neg:self.pos:1].indices(maxint), (0, maxint, 1)) + self.assertEqual(x[self.neg:self.pos], (maxint+minsize, maxsize)) + self.assertEqual(x[self.neg:self.pos:1].indices(maxsize), (0, maxsize, 1)) def test_getitem(self): self._getitem_helper(object) diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py index c2a539c..765501d 100644 --- a/Lib/test/test_itertools.py +++ b/Lib/test/test_itertools.py @@ -5,6 +5,8 @@ from weakref import proxy import sys import operator import random +maxsize = test_support.MAX_Py_ssize_t +minsize = -maxsize-1 def lzip(*args): return list(zip(*args)) @@ -55,7 +57,7 @@ class TestBasicOps(unittest.TestCase): self.assertEqual(take(2, lzip('abc',count(3))), [('a', 3), ('b', 4)]) self.assertRaises(TypeError, count, 2, 3) self.assertRaises(TypeError, count, 'a') - self.assertRaises(OverflowError, list, islice(count(sys.maxint-5), 10)) + self.assertRaises(OverflowError, list, islice(count(maxsize-5), 10)) c = count(3) self.assertEqual(repr(c), 'count(3)') next(c) @@ -336,7 +338,7 @@ class TestBasicOps(unittest.TestCase): self.assertRaises(ValueError, islice, range(10), 1, 'a') self.assertRaises(ValueError, islice, range(10), 'a', 1, 1) self.assertRaises(ValueError, islice, range(10), 1, 'a', 1) - self.assertEqual(len(list(islice(count(), 1, 10, sys.maxint))), 1) + self.assertEqual(len(list(islice(count(), 1, 10, maxsize))), 1) def test_takewhile(self): data = [1, 3, 5, 20, 2, 4, 6, 8] diff --git a/Lib/test/test_pep352.py b/Lib/test/test_pep352.py index e39a397..b372ce9 100644 --- a/Lib/test/test_pep352.py +++ b/Lib/test/test_pep352.py @@ -5,6 +5,13 @@ from test.test_support import run_unittest, guard_warnings_filter import os from platform import system as platform_system +def ignore_message_warning(): + """Ignore the DeprecationWarning for BaseException.message.""" + warnings.resetwarnings() + warnings.filterwarnings("ignore", "BaseException.message", + DeprecationWarning) + + class ExceptionClassTests(unittest.TestCase): """Tests for anything relating to exception objects themselves (e.g., @@ -14,9 +21,12 @@ class ExceptionClassTests(unittest.TestCase): self.failUnless(issubclass(Exception, object)) def verify_instance_interface(self, ins): - for attr in ("args", "message", "__str__", "__repr__"): - self.failUnless(hasattr(ins, attr), "%s missing %s attribute" % - (ins.__class__.__name__, attr)) + with guard_warnings_filter(): + ignore_message_warning() + for attr in ("args", "message", "__str__", "__repr__"): + self.failUnless(hasattr(ins, attr), + "%s missing %s attribute" % + (ins.__class__.__name__, attr)) def test_inheritance(self): # Make sure the inheritance hierarchy matches the documentation @@ -79,7 +89,7 @@ class ExceptionClassTests(unittest.TestCase): inheritance_tree.close() self.failUnlessEqual(len(exc_set), 0, "%s not accounted for" % exc_set) - interface_tests = ("length", "args", "message", "str", "unicode", "repr") + interface_tests = ("length", "args", "message", "str", "repr") def interface_test_driver(self, results): for test_name, (given, expected) in zip(self.interface_tests, results): @@ -90,29 +100,57 @@ class ExceptionClassTests(unittest.TestCase): # Make sure interface works properly when given a single argument arg = "spam" exc = Exception(arg) - results = ([len(exc.args), 1], [exc.args[0], arg], [exc.message, arg], - [str(exc), str(arg)], [str(exc), str(arg)], - [repr(exc), exc.__class__.__name__ + repr(exc.args)]) - self.interface_test_driver(results) + with guard_warnings_filter(): + ignore_message_warning() + results = ([len(exc.args), 1], [exc.args[0], arg], + [exc.message, arg], + [str(exc), str(arg)], + [repr(exc), exc.__class__.__name__ + repr(exc.args)]) + self.interface_test_driver(results) def test_interface_multi_arg(self): # Make sure interface correct when multiple arguments given arg_count = 3 args = tuple(range(arg_count)) exc = Exception(*args) - results = ([len(exc.args), arg_count], [exc.args, args], - [exc.message, ''], [str(exc), str(args)], - [str(exc), str(args)], - [repr(exc), exc.__class__.__name__ + repr(exc.args)]) - self.interface_test_driver(results) + with guard_warnings_filter(): + ignore_message_warning() + results = ([len(exc.args), arg_count], [exc.args, args], + [exc.message, ''], [str(exc), str(args)], + [repr(exc), exc.__class__.__name__ + repr(exc.args)]) + self.interface_test_driver(results) def test_interface_no_arg(self): # Make sure that with no args that interface is correct exc = Exception() - results = ([len(exc.args), 0], [exc.args, tuple()], [exc.message, ''], - [str(exc), ''], [str(exc), ''], - [repr(exc), exc.__class__.__name__ + '()']) - self.interface_test_driver(results) + with guard_warnings_filter(): + ignore_message_warning() + results = ([len(exc.args), 0], [exc.args, tuple()], + [exc.message, ''], + [str(exc), ''], + [repr(exc), exc.__class__.__name__ + '()']) + self.interface_test_driver(results) + + def test_message_deprecation(self): + # As of Python 2.6, BaseException.message is deprecated. + with guard_warnings_filter(): + warnings.resetwarnings() + warnings.filterwarnings('error') + + try: + BaseException().message + except DeprecationWarning: + pass + else: + self.fail("BaseException.message not deprecated") + + exc = BaseException() + try: + exc.message = '' + except DeprecationWarning: + pass + else: + self.fail("BaseException.message assignment not deprecated") class UsageTests(unittest.TestCase): diff --git a/Lib/test/test_popen2.py b/Lib/test/test_popen2.py index 31f22d6..023871f 100644 --- a/Lib/test/test_popen2.py +++ b/Lib/test/test_popen2.py @@ -1,6 +1,12 @@ #! /usr/bin/env python """Test script for popen2.py""" +import warnings +warnings.filterwarnings("ignore", ".*popen2 module is deprecated.*", + DeprecationWarning) +warnings.filterwarnings("ignore", "os\.popen. is deprecated.*", + DeprecationWarning) + import os import sys import unittest diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py index 0abf464..88aa68c 100644 --- a/Lib/test/test_posixpath.py +++ b/Lib/test/test_posixpath.py @@ -130,6 +130,16 @@ class PosixPathTest(unittest.TestCase): "/home/swen/spam" ) + testlist = ['', 'abc', 'Xbcd', 'Xb', 'XY', 'abcd', 'aXc', 'abd', 'ab', 'aX', 'abcX'] + for s1 in testlist: + for s2 in testlist: + p = posixpath.commonprefix([s1, s2]) + self.assert_(s1.startswith(p)) + self.assert_(s2.startswith(p)) + if s1 != s2: + n = len(p) + self.assertNotEqual(s1[n:n+1], s2[n:n+1]) + def test_getsize(self): f = open(test_support.TESTFN, "wb") try: diff --git a/Lib/test/test_pty.py b/Lib/test/test_pty.py index 5ce387b..245a9e4 100644 --- a/Lib/test/test_pty.py +++ b/Lib/test/test_pty.py @@ -1,3 +1,5 @@ +import errno +import fcntl import pty import os import sys @@ -40,6 +42,7 @@ def normalize_output(data): # Marginal testing of pty suite. Cannot do extensive 'do or fail' testing # because pty code is not too portable. +# XXX(nnorwitz): these tests leak fds when there is an error. class PtyTest(unittest.TestCase): def setUp(self): # isatty() and close() can hang on some platforms. Set an alarm @@ -70,6 +73,22 @@ class PtyTest(unittest.TestCase): self.assertTrue(os.isatty(slave_fd), 'slave_fd is not a tty') + # Solaris requires reading the fd before anything is returned. + # My guess is that since we open and close the slave fd + # in master_open(), we need to read the EOF. + + # Ensure the fd is non-blocking in case there's nothing to read. + orig_flags = fcntl.fcntl(master_fd, fcntl.F_GETFL) + fcntl.fcntl(master_fd, fcntl.F_SETFL, orig_flags | os.O_NONBLOCK) + try: + s1 = os.read(master_fd, 1024) + self.assertEquals('', s1) + except OSError as e: + if e.errno != errno.EAGAIN: + raise + # Restore the original flags. + fcntl.fcntl(master_fd, fcntl.F_SETFL, orig_flags) + debug("Writing to slave_fd") os.write(slave_fd, TEST_STRING_1) s1 = os.read(master_fd, 1024) diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index 7cbee0a..5692a83 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -256,6 +256,7 @@ def check_syntax_error(testcase, statement): def open_urlresource(url): import urllib, urlparse + requires('urlfetch') filename = urlparse.urlparse(url)[2].split('/')[-1] # '/': it's URL! for path in [os.path.curdir, os.path.pardir]: @@ -263,7 +264,6 @@ def open_urlresource(url): if os.path.exists(fn): return open(fn) - requires('urlfetch') print('\tfetching %s ...' % url, file=get_original_stdout()) fn, _ = urllib.urlretrieve(url, filename) return open(fn) diff --git a/Lib/test/test_unittest.py b/Lib/test/test_unittest.py index 70f12d2..327d65f 100644 --- a/Lib/test/test_unittest.py +++ b/Lib/test/test_unittest.py @@ -540,7 +540,8 @@ class Test_TestLoader(TestCase): # audioop should now be loaded, thanks to loadTestsFromName() self.failUnless(module_name in sys.modules) finally: - del sys.modules[module_name] + if module_name in sys.modules: + del sys.modules[module_name] ################################################################ ### Tests for TestLoader.loadTestsFromName() @@ -936,7 +937,8 @@ class Test_TestLoader(TestCase): # audioop should now be loaded, thanks to loadTestsFromName() self.failUnless(module_name in sys.modules) finally: - del sys.modules[module_name] + if module_name in sys.modules: + del sys.modules[module_name] ################################################################ ### /Tests for TestLoader.loadTestsFromNames() diff --git a/Misc/build.sh b/Misc/build.sh index 4babcbc..7e0ef43 100755 --- a/Misc/build.sh +++ b/Misc/build.sh @@ -196,7 +196,7 @@ if [ $err = 0 -a "$BUILD_DISABLED" != "yes" ]; then ## ensure that the reflog exists so the grep doesn't fail touch $REFLOG $PYTHON $REGRTEST_ARGS -R 4:3:$REFLOG -u network $LEAKY_SKIPS >& build/$F - NUM_FAILURES=`egrep -vc "$LEAKY_TESTS" $REFLOG` + NUM_FAILURES=`egrep -vc "($LEAKY_TESTS|sum=0)" $REFLOG` update_status "Testing refleaks ($NUM_FAILURES failures)" "$F" $start mail_on_failure "refleak" $REFLOG @@ -245,4 +245,3 @@ echo "" >> $RESULT_FILE rsync $RSYNC_OPTS html/* $REMOTE_SYSTEM:$REMOTE_DIR cd ../build rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ - diff --git a/Misc/cheatsheet b/Misc/cheatsheet index 0e34b15..08764eb 100644 --- a/Misc/cheatsheet +++ b/Misc/cheatsheet @@ -2054,12 +2054,6 @@ zipfile Read & write PK zipped files. sha Interface to the SHA message digest algorithm HMAC Keyed-Hashing for Message Authentication -- RFC 2104. -* Stdwin * Standard Window System - - stdwin Standard Window System interface - stdwinevents Stdwin event, command, and selection constants - rect Rectangle manipulation operations - * SGI IRIX * (4 & 5) al SGI audio facilities diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c index 89b44aa..cbcf2b8 100644 --- a/Modules/_ctypes/callbacks.c +++ b/Modules/_ctypes/callbacks.c @@ -384,8 +384,27 @@ long Call_GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) return E_FAIL; } - result = PyObject_CallFunction(func, - "iii", rclsid, riid, ppv); + { + PyObject *py_rclsid = PyLong_FromVoidPtr(rclsid); + PyObject *py_riid = PyLong_FromVoidPtr(riid); + PyObject *py_ppv = PyLong_FromVoidPtr(ppv); + if (!py_rclsid || !py_riid || !py_ppv) { + Py_XDECREF(py_rclsid); + Py_XDECREF(py_riid); + Py_XDECREF(py_ppv); + Py_DECREF(func); + PyErr_WriteUnraisable(context ? context : Py_None); + return E_FAIL; + } + result = PyObject_CallFunctionObjArgs(func, + py_rclsid, + py_riid, + py_ppv, + NULL); + Py_DECREF(py_rclsid); + Py_DECREF(py_riid); + Py_DECREF(py_ppv); + } Py_DECREF(func); if (!result) { PyErr_WriteUnraisable(context ? context : Py_None); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index fb70963..94cd6f7 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -533,8 +533,10 @@ static int ConvParam(PyObject *obj, int index, struct argument *pa) size += 1; /* terminating NUL */ size *= sizeof(wchar_t); pa->value.p = PyMem_Malloc(size); - if (!pa->value.p) + if (!pa->value.p) { + PyErr_NoMemory(); return -1; + } memset(pa->value.p, 0, size); pa->keep = PyCObject_FromVoidPtr(pa->value.p, PyMem_Free); if (!pa->keep) { @@ -1120,10 +1122,10 @@ static char free_library_doc[] = Free the handle of an executable previously loaded by LoadLibrary.\n"; static PyObject *free_library(PyObject *self, PyObject *args) { - HMODULE hMod; - if (!PyArg_ParseTuple(args, "i:FreeLibrary", &hMod)) + void *hMod; + if (!PyArg_ParseTuple(args, PY_VOID_P_CODE ":FreeLibrary", &hMod)) return NULL; - if (!FreeLibrary(hMod)) + if (!FreeLibrary((HMODULE)hMod)) return PyErr_SetFromWindowsErr(GetLastError()); Py_INCREF(Py_None); return Py_None; @@ -1242,11 +1244,11 @@ static PyObject *py_dl_open(PyObject *self, PyObject *args) static PyObject *py_dl_close(PyObject *self, PyObject *args) { - int handle; + void *handle; - if (!PyArg_ParseTuple(args, "i:dlclose", &handle)) + if (!PyArg_ParseTuple(args, PY_VOID_P_CODE ":dlclose", &handle)) return NULL; - if (dlclose((void*)handle)) { + if (dlclose(handle)) { PyErr_SetString(PyExc_OSError, ctypes_dlerror()); return NULL; @@ -1258,10 +1260,10 @@ static PyObject *py_dl_close(PyObject *self, PyObject *args) static PyObject *py_dl_sym(PyObject *self, PyObject *args) { char *name; - int handle; + void *handle; void *ptr; - if (!PyArg_ParseTuple(args, "is:dlsym", &handle, &name)) + if (!PyArg_ParseTuple(args, PY_VOID_P_CODE "s:dlsym", &handle, &name)) return NULL; ptr = ctypes_dlsym((void*)handle, name); if (!ptr) { @@ -1269,7 +1271,7 @@ static PyObject *py_dl_sym(PyObject *self, PyObject *args) ctypes_dlerror()); return NULL; } - return Py_BuildValue("i", ptr); + return PyLong_FromVoidPtr(ptr); } #endif @@ -1281,12 +1283,12 @@ static PyObject *py_dl_sym(PyObject *self, PyObject *args) static PyObject * call_function(PyObject *self, PyObject *args) { - int func; + void *func; PyObject *arguments; PyObject *result; if (!PyArg_ParseTuple(args, - "iO!", + PY_VOID_P_CODE "O!", &func, &PyTuple_Type, &arguments)) return NULL; @@ -1312,12 +1314,12 @@ call_function(PyObject *self, PyObject *args) static PyObject * call_cdeclfunction(PyObject *self, PyObject *args) { - int func; + void *func; PyObject *arguments; PyObject *result; if (!PyArg_ParseTuple(args, - "iO!", + PY_VOID_P_CODE "O!", &func, &PyTuple_Type, &arguments)) return NULL; diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index 9b90882..6b0a526 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -1366,7 +1366,7 @@ z_get(void *ptr, unsigned size) if (IsBadStringPtrA(*(char **)ptr, -1)) { PyErr_Format(PyExc_ValueError, "invalid string pointer %p", - ptr); + *(char **)ptr); return NULL; } #endif @@ -1426,7 +1426,7 @@ Z_set(void *ptr, PyObject *value, unsigned size) size *= sizeof(wchar_t); buffer = (wchar_t *)PyMem_Malloc(size); if (!buffer) - return NULL; + return PyErr_NoMemory(); memset(buffer, 0, size); keep = PyCObject_FromVoidPtr(buffer, PyMem_Free); if (!keep) { @@ -1451,9 +1451,17 @@ Z_get(void *ptr, unsigned size) { wchar_t *p; p = *(wchar_t **)ptr; - if (p) + if (p) { +#if defined(MS_WIN32) && !defined(_WIN32_WCE) + if (IsBadStringPtrW(*(wchar_t **)ptr, -1)) { + PyErr_Format(PyExc_ValueError, + "invalid string pointer %p", + *(wchar_t **)ptr); + return NULL; + } +#endif return PyUnicode_FromWideChar(p, wcslen(p)); - else { + } else { Py_INCREF(Py_None); return Py_None; } diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index 0af7851..5fb6030 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -23,6 +23,12 @@ typedef int Py_ssize_t; #define PY_LONG_LONG LONG_LONG #endif +#if SIZEOF_VOID_P == SIZEOF_LONG +#define PY_VOID_P_CODE "k" +#elif defined(HAVE_LONG_LONG) && (SIZEOF_VOID_P == SIZEOF_LONG_LONG) +#define PY_VOID_P_CODE "K" +#endif + typedef struct tagPyCArgObject PyCArgObject; typedef struct tagCDataObject CDataObject; typedef PyObject *(* GETFUNC)(void *, unsigned size); diff --git a/Modules/_ctypes/libffi_msvc/ffitarget.h b/Modules/_ctypes/libffi_msvc/ffitarget.h index 0da79d4..85f5ee8 100644 --- a/Modules/_ctypes/libffi_msvc/ffitarget.h +++ b/Modules/_ctypes/libffi_msvc/ffitarget.h @@ -36,7 +36,11 @@ /* ---- Generic type definitions ----------------------------------------- */ #ifndef LIBFFI_ASM +#ifndef _WIN64 typedef unsigned long ffi_arg; +#else +typedef unsigned __int64 ffi_arg; +#endif typedef signed long ffi_sarg; typedef enum ffi_abi { diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c index c34ae01..4241d3c 100644 --- a/Modules/_ctypes/stgdict.c +++ b/Modules/_ctypes/stgdict.c @@ -72,8 +72,10 @@ StgDict_clone(StgDictObject *dst, StgDictObject *src) return 0; size = sizeof(ffi_type *) * (src->length + 1); dst->ffi_type_pointer.elements = PyMem_Malloc(size); - if (dst->ffi_type_pointer.elements == NULL) + if (dst->ffi_type_pointer.elements == NULL) { + PyErr_NoMemory(); return -1; + } memcpy(dst->ffi_type_pointer.elements, src->ffi_type_pointer.elements, size); @@ -355,6 +357,10 @@ StructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct) total_align = align ? align : 1; stgdict->ffi_type_pointer.type = FFI_TYPE_STRUCT; stgdict->ffi_type_pointer.elements = PyMem_Malloc(sizeof(ffi_type *) * (basedict->length + len + 1)); + if (stgdict->ffi_type_pointer.elements == NULL) { + PyErr_NoMemory(); + return -1; + } memset(stgdict->ffi_type_pointer.elements, 0, sizeof(ffi_type *) * (basedict->length + len + 1)); memcpy(stgdict->ffi_type_pointer.elements, @@ -369,6 +375,10 @@ StructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct) total_align = 1; stgdict->ffi_type_pointer.type = FFI_TYPE_STRUCT; stgdict->ffi_type_pointer.elements = PyMem_Malloc(sizeof(ffi_type *) * (len + 1)); + if (stgdict->ffi_type_pointer.elements == NULL) { + PyErr_NoMemory(); + return -1; + } memset(stgdict->ffi_type_pointer.elements, 0, sizeof(ffi_type *) * (len + 1)); ffi_ofs = 0; diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c index 9872685..c31d8e6 100644 --- a/Modules/datetimemodule.c +++ b/Modules/datetimemodule.c @@ -13,7 +13,9 @@ /* Differentiate between building the core module and building extension * modules. */ +#ifndef Py_BUILD_CORE #define Py_BUILD_CORE +#endif #include "datetime.h" #undef Py_BUILD_CORE diff --git a/Modules/getbuildinfo.c b/Modules/getbuildinfo.c index a017dab..0f71ca0 100644 --- a/Modules/getbuildinfo.c +++ b/Modules/getbuildinfo.c @@ -20,10 +20,7 @@ #endif #endif -#ifdef SUBWCREV #define SVNVERSION "$WCRANGE$$WCMODS?M:$" -#endif - const char * Py_GetBuildInfo(void) { @@ -40,9 +37,9 @@ Py_GetBuildInfo(void) const char * _Py_svnversion(void) { -#ifdef SVNVERSION - return SVNVERSION; -#else + /* the following string can be modified by subwcrev.exe */ + static const char svnversion[] = SVNVERSION; + if (!strstr(svnversion, "$")) + return svnversion; /* it was interpolated */ return "exported"; -#endif } diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 1b8f51c..eb73f07 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -2073,9 +2073,9 @@ count_new(PyTypeObject *type, PyObject *args, PyObject *kwds) static PyObject * count_next(countobject *lz) { - if (lz->cnt == LONG_MAX) { + if (lz->cnt == PY_SSIZE_T_MAX) { PyErr_SetString(PyExc_OverflowError, - "cannot count beyond LONG_MAX"); + "cannot count beyond PY_SSIZE_T_MAX"); return NULL; } return PyInt_FromSsize_t(lz->cnt++); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 425fa5a..1900656 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -259,7 +259,6 @@ extern int lstat(const char *, struct stat *); #include #endif #include "osdefs.h" -#define _WIN32_WINNT 0x0400 /* Needed for CryptoAPI on some systems */ #include #include /* for ShellExecute() */ #define popen _popen @@ -6272,8 +6271,8 @@ posix_fdopen(PyObject *self, PyObject *args) #else fp = fdopen(fd, mode); #endif - PyMem_FREE(mode); Py_END_ALLOW_THREADS + PyMem_FREE(mode); if (fp == NULL) return posix_error(); f = PyFile_FromFile(fp, "", orgmode, fclose); diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 1096bac..c15c4ad 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -176,13 +176,6 @@ static PyMethodDef BaseException_methods[] = { }; -static PyMemberDef BaseException_members[] = { - {"message", T_OBJECT, offsetof(PyBaseExceptionObject, message), 0, - PyDoc_STR("exception message")}, - {NULL} /* Sentinel */ -}; - - static PyObject * BaseException_get_dict(PyBaseExceptionObject *self) { @@ -238,9 +231,42 @@ BaseException_set_args(PyBaseExceptionObject *self, PyObject *val) return 0; } +static PyObject * +BaseException_get_message(PyBaseExceptionObject *self) +{ + int ret; + ret = PyErr_WarnEx(PyExc_DeprecationWarning, + "BaseException.message has been deprecated as " + "of Python 2.6", + 1); + if (ret == -1) + return NULL; + + Py_INCREF(self->message); + return self->message; +} + +static int +BaseException_set_message(PyBaseExceptionObject *self, PyObject *val) +{ + int ret; + ret = PyErr_WarnEx(PyExc_DeprecationWarning, + "BaseException.message has been deprecated as " + "of Python 2.6", + 1); + if (ret == -1) + return -1; + Py_INCREF(val); + Py_DECREF(self->message); + self->message = val; + return 0; +} + static PyGetSetDef BaseException_getset[] = { {"__dict__", (getter)BaseException_get_dict, (setter)BaseException_set_dict}, {"args", (getter)BaseException_get_args, (setter)BaseException_set_args}, + {"message", (getter)BaseException_get_message, + (setter)BaseException_set_message}, {NULL}, }; @@ -276,7 +302,7 @@ static PyTypeObject _PyExc_BaseException = { 0, /* tp_iter */ 0, /* tp_iternext */ BaseException_methods, /* tp_methods */ - BaseException_members, /* tp_members */ + 0, /* tp_members */ BaseException_getset, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ diff --git a/Objects/floatobject.c b/Objects/floatobject.c index fde2380..b5fb9cf 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -675,18 +675,7 @@ float_pow(PyObject *v, PyObject *w, PyObject *z) /* Sort out special cases here instead of relying on pow() */ if (iw == 0) { /* v**0 is 1, even 0**0 */ - PyFPE_START_PROTECT("pow", return NULL) - if ((PyObject *)z != Py_None) { - double iz; - CONVERT_TO_DOUBLE(z, iz); - ix = fmod(1.0, iz); - if (ix != 0 && iz < 0) - ix += iz; - } - else - ix = 1.0; - PyFPE_END_PROTECT(ix) - return PyFloat_FromDouble(ix); + return PyFloat_FromDouble(1.0); } if (iv == 0.0) { /* 0**w is error if w<0, else 1 */ if (iw < 0.0) { diff --git a/Objects/intobject.c b/Objects/intobject.c index 0aae6ac..7f56acf 100644 --- a/Objects/intobject.c +++ b/Objects/intobject.c @@ -214,11 +214,10 @@ PyInt_AsSsize_t(register PyObject *op) return -1; } - if (nb->nb_long != 0) { + if (nb->nb_long != 0) io = (PyIntObject*) (*nb->nb_long) (op); - } else { + else io = (PyIntObject*) (*nb->nb_int) (op); - } if (io == NULL) return -1; if (!PyInt_Check(io)) { diff --git a/Objects/typeobject.c b/Objects/typeobject.c index f743196..f6ae69b 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1360,10 +1360,12 @@ extra_ivars(PyTypeObject *type, PyTypeObject *base) type->tp_itemsize != base->tp_itemsize; } if (type->tp_weaklistoffset && base->tp_weaklistoffset == 0 && - type->tp_weaklistoffset + sizeof(PyObject *) == t_size) + type->tp_weaklistoffset + sizeof(PyObject *) == t_size && + type->tp_flags & Py_TPFLAGS_HEAPTYPE) t_size -= sizeof(PyObject *); if (type->tp_dictoffset && base->tp_dictoffset == 0 && - type->tp_dictoffset + sizeof(PyObject *) == t_size) + type->tp_dictoffset + sizeof(PyObject *) == t_size && + type->tp_flags & Py_TPFLAGS_HEAPTYPE) t_size -= sizeof(PyObject *); return t_size != b_size; @@ -1389,12 +1391,73 @@ static int object_init(PyObject *, PyObject *, PyObject *); static int update_slot(PyTypeObject *, PyObject *); static void fixup_slot_dispatchers(PyTypeObject *); +/* + * Helpers for __dict__ descriptor. We don't want to expose the dicts + * inherited from various builtin types. The builtin base usually provides + * its own __dict__ descriptor, so we use that when we can. + */ +static PyTypeObject * +get_builtin_base_with_dict(PyTypeObject *type) +{ + while (type->tp_base != NULL) { + if (type->tp_dictoffset != 0 && + !(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) + return type; + type = type->tp_base; + } + return NULL; +} + +static PyObject * +get_dict_descriptor(PyTypeObject *type) +{ + static PyObject *dict_str; + PyObject *descr; + + if (dict_str == NULL) { + dict_str = PyString_InternFromString("__dict__"); + if (dict_str == NULL) + return NULL; + } + descr = _PyType_Lookup(type, dict_str); + if (descr == NULL || !PyDescr_IsData(descr)) + return NULL; + + return descr; +} + +static void +raise_dict_descr_error(PyObject *obj) +{ + PyErr_Format(PyExc_TypeError, + "this __dict__ descriptor does not support " + "'%.200s' objects", obj->ob_type->tp_name); +} + static PyObject * subtype_dict(PyObject *obj, void *context) { - PyObject **dictptr = _PyObject_GetDictPtr(obj); + PyObject **dictptr; PyObject *dict; + PyTypeObject *base; + base = get_builtin_base_with_dict(obj->ob_type); + if (base != NULL) { + descrgetfunc func; + PyObject *descr = get_dict_descriptor(base); + if (descr == NULL) { + raise_dict_descr_error(obj); + return NULL; + } + func = descr->ob_type->tp_descr_get; + if (func == NULL) { + raise_dict_descr_error(obj); + return NULL; + } + return func(descr, obj, (PyObject *)(obj->ob_type)); + } + + dictptr = _PyObject_GetDictPtr(obj); if (dictptr == NULL) { PyErr_SetString(PyExc_AttributeError, "This object has no __dict__"); @@ -1410,9 +1473,27 @@ subtype_dict(PyObject *obj, void *context) static int subtype_setdict(PyObject *obj, PyObject *value, void *context) { - PyObject **dictptr = _PyObject_GetDictPtr(obj); + PyObject **dictptr; PyObject *dict; + PyTypeObject *base; + + base = get_builtin_base_with_dict(obj->ob_type); + if (base != NULL) { + descrsetfunc func; + PyObject *descr = get_dict_descriptor(base); + if (descr == NULL) { + raise_dict_descr_error(obj); + return -1; + } + func = descr->ob_type->tp_descr_set; + if (func == NULL) { + raise_dict_descr_error(obj); + return -1; + } + return func(descr, obj, value); + } + dictptr = _PyObject_GetDictPtr(obj); if (dictptr == NULL) { PyErr_SetString(PyExc_AttributeError, "This object has no __dict__"); diff --git a/PC/config.c b/PC/config.c index e8cb1d2..b9978ef 100644 --- a/PC/config.c +++ b/PC/config.c @@ -6,21 +6,21 @@ #include "Python.h" extern void initarray(void); -#ifndef MS_WIN64 +#ifndef MS_WINI64 extern void initaudioop(void); #endif extern void initbinascii(void); extern void initcmath(void); extern void initerrno(void); extern void initgc(void); -#ifndef MS_WIN64 +#ifndef MS_WINI64 extern void initimageop(void); #endif extern void initmath(void); extern void init_md5(void); extern void initnt(void); extern void initoperator(void); -#ifndef MS_WIN64 +#ifndef MS_WINI64 extern void initrgbimg(void); #endif extern void initsignal(void); @@ -82,7 +82,7 @@ struct _inittab _PyImport_Inittab[] = { {"_ast", init_ast}, {"atexit", initatexit}, #ifdef MS_WINDOWS -#ifndef MS_WIN64 +#ifndef MS_WINI64 {"audioop", initaudioop}, #endif #endif @@ -90,14 +90,14 @@ struct _inittab _PyImport_Inittab[] = { {"cmath", initcmath}, {"errno", initerrno}, {"gc", initgc}, -#ifndef MS_WIN64 +#ifndef MS_WINI64 {"imageop", initimageop}, #endif {"math", initmath}, {"_md5", init_md5}, {"nt", initnt}, /* Use the NT os functions, not posix */ {"operator", initoperator}, -#ifndef MS_WIN64 +#ifndef MS_WINI64 {"rgbimg", initrgbimg}, #endif {"signal", initsignal}, diff --git a/PC/make_versioninfo.c b/PC/make_versioninfo.c index 41c026f..b9f9b88 100644 --- a/PC/make_versioninfo.c +++ b/PC/make_versioninfo.c @@ -27,7 +27,12 @@ int main(int argc, char **argv) PY_MICRO_VERSION*1000 + PY_RELEASE_LEVEL*10 + PY_RELEASE_SERIAL); printf("#define MS_DLL_ID \"%d.%d\"\n", PY_MAJOR_VERSION, PY_MINOR_VERSION); + printf("#ifndef _DEBUG\n"); printf("#define PYTHON_DLL_NAME \"python%d%d.dll\"\n", PY_MAJOR_VERSION, PY_MINOR_VERSION); + printf("#else\n"); + printf("#define PYTHON_DLL_NAME \"python%d%d_d.dll\"\n", + PY_MAJOR_VERSION, PY_MINOR_VERSION); + printf("#endif\n"); return 0; } diff --git a/PC/pyconfig.h b/PC/pyconfig.h index c432fa8..cecc575 100644 --- a/PC/pyconfig.h +++ b/PC/pyconfig.h @@ -128,6 +128,8 @@ MS_CORE_DLL. defined on Win32 *and* Win64. Win32 only code must therefore be guarded as follows: #if defined(MS_WIN32) && !defined(MS_WIN64) + Some modules are disabled on Itanium processors, therefore we + have MS_WINI64 set for those targets, otherwise MS_WINX64 */ #ifdef _WIN64 #define MS_WIN64 @@ -135,17 +137,28 @@ MS_CORE_DLL. /* set the COMPILER */ #ifdef MS_WIN64 -#ifdef _M_IX86 -#define COMPILER _Py_PASTE_VERSION("64 bit (Intel)") -#elif defined(_M_IA64) +#if defined(_M_IA64) #define COMPILER _Py_PASTE_VERSION("64 bit (Itanium)") -#elif defined(_M_AMD64) +#define MS_WINI64 +#elif defined(_M_X64) #define COMPILER _Py_PASTE_VERSION("64 bit (AMD64)") +#define MS_WINX64 #else #define COMPILER _Py_PASTE_VERSION("64 bit (Unknown)") #endif #endif /* MS_WIN64 */ +/* set the version macros for the windows headers */ +#ifdef MS_WINX64 +/* 64 bit only runs on XP or greater */ +#define _WIN32_WINNT 0x0501 +#define WINVER 0x0501 +#else +/* NT 4.0 or greater required otherwise */ +#define _WIN32_WINNT 0x0400 +#define WINVER 0x0400 +#endif + /* _W64 is not defined for VC6 or eVC4 */ #ifndef _W64 #define _W64 diff --git a/PCbuild8/PGInstrument.vsprops b/PCbuild8/PGInstrument.vsprops new file mode 100644 index 0000000..58518b7 --- /dev/null +++ b/PCbuild8/PGInstrument.vsprops @@ -0,0 +1,13 @@ + + + + diff --git a/PCbuild8/PGUpdate.vsprops b/PCbuild8/PGUpdate.vsprops new file mode 100644 index 0000000..0501126 --- /dev/null +++ b/PCbuild8/PGUpdate.vsprops @@ -0,0 +1,12 @@ + + + + diff --git a/PCbuild8/Uninstal.wse b/PCbuild8/Uninstal.wse deleted file mode 100644 index 306f3bc..0000000 --- a/PCbuild8/Uninstal.wse +++ /dev/null @@ -1,514 +0,0 @@ -Document Type: WSE -item: Global - Version=8.14 - Flags=00000100 - Split=1420 - Languages=65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - Copy Default=1 - Japanese Font Name=MS Gothic - Japanese Font Size=10 - Start Gradient=0 0 255 - End Gradient=0 0 0 - Windows Flags=00000000000000000000101000001000 - Message Font=MS Sans Serif - Font Size=8 - Disk Label=GLBS - Disk Filename=INSTALL - Patch Flags=0000000000000001 - Patch Threshold=200 - Patch Memory=4096 - Per-User Version ID=1 - Crystal Format=10111100101100000010001001001001 - Step View=&Properties -end -item: Remark - Text=Note from Tim: This is a verbatim copy of Wise's Uninstal.wse, altered at the end to write -end -item: Remark - Text=uninstall info under HKCU instead of HKLM if our DOADMIN var is false. -end -item: Remark -end -item: Remark - Text= Install Support for uninstalling the application. -end -item: Remark -end -item: Set Variable - Variable=UNINSTALL_PATH - Value=%_LOGFILE_PATH_% - Flags=00000010 -end -item: Set Variable - Variable=UNINSTALL_PATH - Value=%UNINSTALL_PATH%\UNWISE.EXE -end -item: Compiler Variable If - Variable=_EXE_OS_TYPE_ - Value=WIN32 -end -item: Install File - Source=%_WISE_%\UNWISE32.EXE - Destination=%UNINSTALL_PATH% - Flags=0000000000000010 -end -item: Compiler Variable Else -end -item: Install File - Source=%_WISE_%\UNWISE.EXE - Destination=%UNINSTALL_PATH% - Flags=0000000000000010 -end -item: Compiler Variable End -end -item: Remark -end -item: Remark - Text= Install Support for multiple languages -end -item: Remark -end -item: Set Variable - Variable=UNINSTALL_LANG - Value=%UNINSTALL_PATH% - Flags=00000010 -end -item: Set Variable - Variable=UNINSTALL_LANG - Value=%UNINSTALL_LANG%\UNWISE.INI -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=C - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.FRA - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_C_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.FRA - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=D - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.FRA - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_D_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.FRA - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=E - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.DEU - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_E_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.DEU - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=F - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.PTG - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_F_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.PTG - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=G - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.ESP - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_G_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.ESP - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=H - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.ESP - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_H_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.ESP - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=I - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.ITA - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_I_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.ITA - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=J - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.DAN - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_J_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.DAN - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=K - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.FIN - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_K_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.FIN - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=L - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.ISL - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_L_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.ISL - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=M - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.NLD - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_M_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.NLD - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=N - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.NOR - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_N_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.NOR - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=O - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.SVE - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_O_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.SVE - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Compiler Variable If - Variable=_LANG_LIST_ - Value=P - Flags=00000010 -end -item: Compiler Variable If - Value=%_WISE_%\LANGUAGE\UNWISE.JPN - Flags=00000011 -end -item: If/While Statement - Variable=LANG - Value=%_LANG_P_NAME_% -end -item: Install File - Source=%_WISE_%\LANGUAGE\UNWISE.JPN - Destination=%UNINSTALL_LANG% - Flags=0000000000000010 -end -item: End Block -end -item: Compiler Variable End -end -item: Compiler Variable End -end -item: Remark -end -item: Remark - Text= Install the add/remove or uninstall icon -end -item: Remark -end -item: Set Variable - Variable=UNINSTALL_PATH - Value=%UNINSTALL_PATH% - Flags=00010100 -end -item: Set Variable - Variable=INST_LOG_PATH - Value=%_LOGFILE_PATH_% - Flags=00010100 -end -item: Check Configuration - Flags=10111011 -end -item: If/While Statement - Variable=DOADMIN - Value=1 -end -item: Remark - Text=Write uninstall info under HKLM. This if/else/end block added by Tim. -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=%APPTITLE% - Value Name=DisplayName - Root=2 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=%UNINSTALL_PATH% %INST_LOG_PATH% - New Value= - Value Name=UninstallString - Root=2 -end -item: Else Statement -end -item: Remark - Text=The same, but write under HKCU instead. -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=%APPTITLE% - Value Name=DisplayName - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=%UNINSTALL_PATH% %INST_LOG_PATH% - New Value= - Value Name=UninstallString - Root=1 -end -item: End Block -end -item: Else Statement -end -item: Add ProgMan Icon - Group=%GROUP% - Icon Name=Uninstall %APPTITLE% - Command Line=%UNINSTALL_PATH% %INST_LOG_PATH% -end -item: End Block -end -item: Check Configuration - Flags=11110010 -end -item: If/While Statement - Variable=DOBRAND - Value=1 -end -item: Edit Registry - Total Keys=2 - item: Key - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=%COMPANY% - Value Name=RegCompany - Root=2 - end - item: Key - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=%NAME% - Value Name=RegOwner - Root=2 - end -end -item: End Block -end -item: End Block -end diff --git a/PCbuild8/_bsddb.vcproj b/PCbuild8/_bsddb.vcproj deleted file mode 100644 index 22e362a..0000000 --- a/PCbuild8/_bsddb.vcproj +++ /dev/null @@ -1,385 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/_bsddb/_bsddb.vcproj b/PCbuild8/_bsddb/_bsddb.vcproj new file mode 100644 index 0000000..9416b43 --- /dev/null +++ b/PCbuild8/_bsddb/_bsddb.vcproj @@ -0,0 +1,652 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/_ctypes.vcproj b/PCbuild8/_ctypes.vcproj deleted file mode 100644 index 80b9c64..0000000 --- a/PCbuild8/_ctypes.vcproj +++ /dev/null @@ -1,410 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/_ctypes/_ctypes.vcproj b/PCbuild8/_ctypes/_ctypes.vcproj new file mode 100644 index 0000000..85ca24b --- /dev/null +++ b/PCbuild8/_ctypes/_ctypes.vcproj @@ -0,0 +1,859 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/_ctypes/_ctypes.vsprops b/PCbuild8/_ctypes/_ctypes.vsprops new file mode 100644 index 0000000..28155bd --- /dev/null +++ b/PCbuild8/_ctypes/_ctypes.vsprops @@ -0,0 +1,15 @@ + + + + + diff --git a/PCbuild8/_ctypes/masm64.rules b/PCbuild8/_ctypes/masm64.rules new file mode 100644 index 0000000..d25d86c --- /dev/null +++ b/PCbuild8/_ctypes/masm64.rules @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/_ctypes_test.vcproj b/PCbuild8/_ctypes_test.vcproj deleted file mode 100644 index f252901..0000000 --- a/PCbuild8/_ctypes_test.vcproj +++ /dev/null @@ -1,370 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/_ctypes_test/_ctypes_test.vcproj b/PCbuild8/_ctypes_test/_ctypes_test.vcproj new file mode 100644 index 0000000..27f8e53 --- /dev/null +++ b/PCbuild8/_ctypes_test/_ctypes_test.vcproj @@ -0,0 +1,640 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/_elementtree.vcproj b/PCbuild8/_elementtree.vcproj deleted file mode 100644 index d88c85f..0000000 --- a/PCbuild8/_elementtree.vcproj +++ /dev/null @@ -1,388 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/_elementtree/_elementtree.vcproj b/PCbuild8/_elementtree/_elementtree.vcproj new file mode 100644 index 0000000..d0fe7fe --- /dev/null +++ b/PCbuild8/_elementtree/_elementtree.vcproj @@ -0,0 +1,724 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/_msi.vcproj b/PCbuild8/_msi.vcproj deleted file mode 100644 index ac9e079..0000000 --- a/PCbuild8/_msi.vcproj +++ /dev/null @@ -1,375 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/_msi/_msi.vcproj b/PCbuild8/_msi/_msi.vcproj new file mode 100644 index 0000000..dc581d1 --- /dev/null +++ b/PCbuild8/_msi/_msi.vcproj @@ -0,0 +1,644 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/_socket.vcproj b/PCbuild8/_socket.vcproj deleted file mode 100644 index 95c3941..0000000 --- a/PCbuild8/_socket.vcproj +++ /dev/null @@ -1,381 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/_socket/_socket.vcproj b/PCbuild8/_socket/_socket.vcproj new file mode 100644 index 0000000..28e80d6 --- /dev/null +++ b/PCbuild8/_socket/_socket.vcproj @@ -0,0 +1,648 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/_sqlite3.vcproj b/PCbuild8/_sqlite3.vcproj deleted file mode 100644 index 3ede48f..0000000 --- a/PCbuild8/_sqlite3.vcproj +++ /dev/null @@ -1,411 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/_sqlite3/_sqlite3.vcproj b/PCbuild8/_sqlite3/_sqlite3.vcproj new file mode 100644 index 0000000..f81c5a1 --- /dev/null +++ b/PCbuild8/_sqlite3/_sqlite3.vcproj @@ -0,0 +1,724 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/_ssl.mak b/PCbuild8/_ssl.mak deleted file mode 100644 index 9de425f..0000000 --- a/PCbuild8/_ssl.mak +++ /dev/null @@ -1,21 +0,0 @@ - -!IFDEF DEBUG -MODULE=_ssl_d.pyd -TEMP_DIR=x86-temp-debug/_ssl -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 /DWIN32 -SSL_LIB_DIR=$(SSL_DIR)/out32 -!ENDIF - -INCLUDES=-I ../Include -I ../PC -I $(SSL_DIR)/inc32 -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 - -$(MODULE): $(SOURCE) ../PC/*.h ../Include/*.h - @if not exist "$(TEMP_DIR)/." mkdir "$(TEMP_DIR)" - cl /nologo $(SOURCE) $(CFLAGS) /Fo$(TEMP_DIR)\$*.obj $(INCLUDES) /link /out:$(MODULE) $(LIBS) diff --git a/PCbuild8/_ssl.vcproj b/PCbuild8/_ssl.vcproj deleted file mode 100644 index bd1299d..0000000 --- a/PCbuild8/_ssl.vcproj +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/_testcapi.vcproj b/PCbuild8/_testcapi.vcproj deleted file mode 100644 index 4b4524a..0000000 --- a/PCbuild8/_testcapi.vcproj +++ /dev/null @@ -1,374 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/_testcapi/_testcapi.vcproj b/PCbuild8/_testcapi/_testcapi.vcproj new file mode 100644 index 0000000..61d94ab --- /dev/null +++ b/PCbuild8/_testcapi/_testcapi.vcproj @@ -0,0 +1,636 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/_tkinter.vcproj b/PCbuild8/_tkinter.vcproj deleted file mode 100644 index 7233375..0000000 --- a/PCbuild8/_tkinter.vcproj +++ /dev/null @@ -1,389 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/_tkinter/_tkinter.vcproj b/PCbuild8/_tkinter/_tkinter.vcproj new file mode 100644 index 0000000..ba0887b --- /dev/null +++ b/PCbuild8/_tkinter/_tkinter.vcproj @@ -0,0 +1,640 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/build.bat b/PCbuild8/build.bat new file mode 100644 index 0000000..8c61a70 --- /dev/null +++ b/PCbuild8/build.bat @@ -0,0 +1,17 @@ +@echo off +rem A batch program to build or rebuild a particular configuration. +rem just for convenience. + +setlocal +set platf=Win32 +set conf=Release +set build=/build + +:CheckOpts +if "%1"=="-c" (set conf=%2) & shift & shift & goto CheckOpts +if "%1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts +if "%1"=="-r" (set build=/rebuild) & shift & goto CheckOpts + +set cmd=devenv pcbuild.sln %build% "%conf%|%platf%" +echo %cmd% +%cmd% \ No newline at end of file diff --git a/PCbuild8/build_pgo.bat b/PCbuild8/build_pgo.bat new file mode 100644 index 0000000..ec85323 --- /dev/null +++ b/PCbuild8/build_pgo.bat @@ -0,0 +1,39 @@ +@echo off +rem A batch program to build PGO (Profile guided optimization) by first +rem building instrumented binaries, then running the testsuite, and +rem finally building the optimized code. +rem Note, after the first instrumented run, one can just keep on +rem building the PGUpdate configuration while developing. + +setlocal +set platf=Win32 + +rem use the performance testsuite. This is quick and simple +set job1=..\tools\pybench\pybench.py -n 1 -C 1 --with-gc +set path1=..\tools\pybench + +rem or the whole testsuite for more thorough testing +set job2=..\lib\test\regrtest.py +set path2=..\lib + +set job=%job1% +set clrpath=%path1% + +:CheckOpts +if "%1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts +if "%1"=="-2" (set job=%job2%) & (set clrpath=%path2%) & shift & goto CheckOpts + +set folder=%platf%PGO + + +@echo on +rem build the instrumented version +call build -r -p %platf% -c PGInstrument + +rem remove .pyc files, .pgc files and execute the job +%folder%\python.exe rmpyc.py %clrpath% +del %folder%\*.pgc +%folder%\python.exe %job% + +rem finally build the optimized version +call build -r -p %platf% -c PGUpdate diff --git a/PCbuild8/build_ssl.py b/PCbuild8/build_ssl.py deleted file mode 100644 index 8f485a2..0000000 --- a/PCbuild8/build_ssl.py +++ /dev/null @@ -1,163 +0,0 @@ -# Script for building the _ssl module for Windows. -# Uses Perl to setup the OpenSSL environment correctly -# and build OpenSSL, then invokes a simple nmake session -# for _ssl.pyd itself. - -# THEORETICALLY, you can: -# * Unpack the latest SSL release one level above your main Python source -# directory. It is likely you will already find the zlib library and -# any other external packages there. -# * Install ActivePerl and ensure it is somewhere on your path. -# * Run this script from the PCBuild directory. -# -# it should configure and build SSL, then build the ssl Python extension -# without intervention. - -import os, sys, re - -# Find all "foo.exe" files on the PATH. -def find_all_on_path(filename, extras = None): - entries = os.environ["PATH"].split(os.pathsep) - ret = [] - for p in entries: - fname = os.path.abspath(os.path.join(p, filename)) - if os.path.isfile(fname) and fname not in ret: - ret.append(fname) - if extras: - for p in extras: - fname = os.path.abspath(os.path.join(p, filename)) - if os.path.isfile(fname) and fname not in ret: - ret.append(fname) - return ret - -# Find a suitable Perl installation for OpenSSL. -# cygwin perl does *not* work. ActivePerl does. -# Being a Perl dummy, the simplest way I can check is if the "Win32" package -# is available. -def find_working_perl(perls): - for perl in perls: - fh = os.popen(perl + ' -e "use Win32;"') - fh.read() - rc = fh.close() - if rc: - continue - return perl - print "Can not find a suitable PERL:" - if perls: - print " the following perl interpreters were found:" - for p in perls: - print " ", p - print " None of these versions appear suitable for building OpenSSL" - else: - print " NO perl interpreters were found on this machine at all!" - print " Please install ActivePerl and ensure it appears on your path" - print "The Python SSL module was not built" - return None - -# Locate the best SSL directory given a few roots to look into. -def find_best_ssl_dir(sources): - candidates = [] - for s in sources: - try: - s = os.path.abspath(s) - fnames = os.listdir(s) - except os.error: - fnames = [] - for fname in fnames: - fqn = os.path.join(s, fname) - if os.path.isdir(fqn) and fname.startswith("openssl-"): - candidates.append(fqn) - # Now we have all the candidates, locate the best. - best_parts = [] - best_name = None - for c in candidates: - parts = re.split("[.-]", os.path.basename(c))[1:] - # eg - openssl-0.9.7-beta1 - ignore all "beta" or any other qualifiers - if len(parts) >= 4: - continue - if parts > best_parts: - best_parts = parts - best_name = c - if best_name is not None: - print "Found an SSL directory at '%s'" % (best_name,) - else: - print "Could not find an SSL directory in '%s'" % (sources,) - return best_name - -def main(): - debug = "-d" in sys.argv - build_all = "-a" in sys.argv - make_flags = "" - if build_all: - make_flags = "-a" - # perl should be on the path, but we also look in "\perl" and "c:\\perl" - # as "well known" locations - perls = find_all_on_path("perl.exe", ["\\perl\\bin", "C:\\perl\\bin"]) - perl = find_working_perl(perls) - if perl is None: - sys.exit(1) - - print "Found a working perl at '%s'" % (perl,) - # Look for SSL 2 levels up from pcbuild - ie, same place zlib etc all live. - ssl_dir = find_best_ssl_dir(("../..",)) - if ssl_dir is None: - sys.exit(1) - - old_cd = os.getcwd() - try: - os.chdir(ssl_dir) - # If the ssl makefiles do not exist, we invoke Perl to generate them. - if not os.path.isfile(os.path.join(ssl_dir, "32.mak")) or \ - not os.path.isfile(os.path.join(ssl_dir, "d32.mak")): - print "Creating the makefiles..." - # Put our working Perl at the front of our path - os.environ["PATH"] = os.path.split(perl)[0] + \ - os.pathsep + \ - os.environ["PATH"] - # ms\32all.bat will reconfigure OpenSSL and then try to build - # all outputs (debug/nondebug/dll/lib). So we filter the file - # to exclude any "nmake" commands and then execute. - tempname = "ms\\32all_py.bat" - - in_bat = open("ms\\32all.bat") - temp_bat = open(tempname,"w") - while 1: - cmd = in_bat.readline() - print 'cmd', repr(cmd) - if not cmd: break - if cmd.strip()[:5].lower() == "nmake": - continue - temp_bat.write(cmd) - in_bat.close() - temp_bat.close() - os.system(tempname) - try: - os.remove(tempname) - except: - pass - - # Now run make. - print "Executing nmake over the ssl makefiles..." - if debug: - rc = os.system("nmake /nologo -f d32.mak") - if rc: - print "Executing d32.mak failed" - print rc - sys.exit(rc) - else: - rc = os.system("nmake /nologo -f 32.mak") - if rc: - print "Executing 32.mak failed" - print rc - sys.exit(rc) - finally: - os.chdir(old_cd) - # And finally, we can build the _ssl module itself for Python. - defs = "SSL_DIR=%s" % (ssl_dir,) - if debug: - defs = defs + " " + "DEBUG=1" - rc = os.system('nmake /nologo -f _ssl.mak ' + defs + " " + make_flags) - sys.exit(rc) - -if __name__=='__main__': - main() diff --git a/PCbuild8/bz2.vcproj b/PCbuild8/bz2.vcproj deleted file mode 100644 index 48805db..0000000 --- a/PCbuild8/bz2.vcproj +++ /dev/null @@ -1,390 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/bz2/bz2.vcproj b/PCbuild8/bz2/bz2.vcproj new file mode 100644 index 0000000..68935de --- /dev/null +++ b/PCbuild8/bz2/bz2.vcproj @@ -0,0 +1,652 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/db.build b/PCbuild8/db.build deleted file mode 100644 index 85caec3..0000000 --- a/PCbuild8/db.build +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/PCbuild8/field3.py b/PCbuild8/field3.py deleted file mode 100644 index 47f24ca..0000000 --- a/PCbuild8/field3.py +++ /dev/null @@ -1,35 +0,0 @@ -# An absurd workaround for the lack of arithmetic in MS's resource compiler. -# After building Python, run this, then paste the output into the appropriate -# part of PC\python_nt.rc. -# Example output: -# -# * For 2.3a0, -# * PY_MICRO_VERSION = 0 -# * PY_RELEASE_LEVEL = 'alpha' = 0xA -# * PY_RELEASE_SERIAL = 1 -# * -# * and 0*1000 + 10*10 + 1 = 101. -# */ -# #define FIELD3 101 - -import sys - -major, minor, micro, level, serial = sys.version_info -levelnum = {'alpha': 0xA, - 'beta': 0xB, - 'candidate': 0xC, - 'final': 0xF, - }[level] -string = sys.version.split()[0] # like '2.3a0' - -print " * For %s," % string -print " * PY_MICRO_VERSION = %d" % micro -print " * PY_RELEASE_LEVEL = %r = %s" % (level, hex(levelnum)) -print " * PY_RELEASE_SERIAL = %d" % serial -print " *" - -field3 = micro * 1000 + levelnum * 10 + serial - -print " * and %d*1000 + %d*10 + %d = %d" % (micro, levelnum, serial, field3) -print " */" -print "#define FIELD3", field3 diff --git a/PCbuild8/make_buildinfo.c b/PCbuild8/make_buildinfo.c deleted file mode 100644 index 85416ed..0000000 --- a/PCbuild8/make_buildinfo.c +++ /dev/null @@ -1,81 +0,0 @@ -#include -#include -#include -#include - -/* 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. - - make_buildinfo.exe is called as a pre-build step for pythoncore. - -*/ - -int make_buildinfo2() -{ - struct _stat st; - HKEY hTortoise; - char command[500]; - DWORD type, size; - if (_stat(".svn", &st) < 0) - return 0; - /* Allow suppression of subwcrev.exe invocation if a no_subwcrev file is present. */ - if (_stat("no_subwcrev", &st) == 0) - return 0; - if (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\TortoiseSVN", &hTortoise) != ERROR_SUCCESS && - RegOpenKey(HKEY_CURRENT_USER, "Software\\TortoiseSVN", &hTortoise) != ERROR_SUCCESS) - /* Tortoise not installed */ - return 0; - command[0] = '"'; /* quote the path to the executable */ - size = sizeof(command) - 1; - if (RegQueryValueEx(hTortoise, "Directory", 0, &type, command+1, &size) != ERROR_SUCCESS || - type != REG_SZ) - /* Registry corrupted */ - return 0; - strcat_s(command, sizeof(command), "bin\\subwcrev.exe"); - if (_stat(command+1, &st) < 0) - /* subwcrev.exe not part of the release */ - return 0; - strcat_s(command, sizeof(command), "\" .. ..\\Modules\\getbuildinfo.c getbuildinfo2.c"); - puts(command); fflush(stdout); - if (system(command) < 0) - return 0; - return 1; -} - -int main(int argc, char*argv[]) -{ - char command[500] = ""; - int svn; - FILE *f; - - 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 diff --git a/PCbuild8/make_buildinfo.vcproj b/PCbuild8/make_buildinfo.vcproj deleted file mode 100644 index 58ed000..0000000 --- a/PCbuild8/make_buildinfo.vcproj +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/make_buildinfo/make_buildinfo.c b/PCbuild8/make_buildinfo/make_buildinfo.c new file mode 100644 index 0000000..6f89716 --- /dev/null +++ b/PCbuild8/make_buildinfo/make_buildinfo.c @@ -0,0 +1,66 @@ +#include +#include +#include +#include + +/* This file creates the local getbuildinfo.c file, by + invoking subwcrev.exe (if found). This replaces tokens + int the file with information about the build. + If this isn't a subversion checkout, or subwcrev isn't + found, it copies ..\\Modules\\getbuildinfo.c instead. + + Currently, subwcrev.exe is found from the registry entries + of TortoiseSVN. + + make_buildinfo.exe is called as a pre-build step for pythoncore. +*/ + +int make_buildinfo2() +{ + struct _stat st; + HKEY hTortoise; + char command[500]; + DWORD type, size; + if (_stat("..\\.svn", &st) < 0) + return 0; + /* Allow suppression of subwcrev.exe invocation if a no_subwcrev file is present. */ + if (_stat("no_subwcrev", &st) == 0) + return 0; + if (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\TortoiseSVN", &hTortoise) != ERROR_SUCCESS && + RegOpenKey(HKEY_CURRENT_USER, "Software\\TortoiseSVN", &hTortoise) != ERROR_SUCCESS) + /* Tortoise not installed */ + return 0; + command[0] = '"'; /* quote the path to the executable */ + size = sizeof(command) - 1; + if (RegQueryValueEx(hTortoise, "Directory", 0, &type, command+1, &size) != ERROR_SUCCESS || + type != REG_SZ) + /* Registry corrupted */ + return 0; + strcat_s(command, sizeof(command), "bin\\subwcrev.exe"); + if (_stat(command+1, &st) < 0) + /* subwcrev.exe not part of the release */ + return 0; + strcat_s(command, sizeof(command), "\" .. ..\\Modules\\getbuildinfo.c getbuildinfo.c"); + puts(command); fflush(stdout); + if (system(command) < 0) + return 0; + return 1; +} + +int main(int argc, char*argv[]) +{ + char command[500] = ""; + int svn; + /* Get getbuildinfo.c from svn as getbuildinfo2.c */ + svn = make_buildinfo2(); + if (svn) { + puts("subcwrev succeeded, generated getbuildinfo.c"); + } else { + puts("Couldn't run subwcrev.exe on getbuildinfo.c. Copying it"); + strcat_s(command, sizeof(command), "copy /Y ..\\Modules\\getbuildinfo.c getbuildinfo.c"); + puts(command); fflush(stdout); + if (system(command) < 0) + return EXIT_FAILURE; + } + return 0; +} \ No newline at end of file diff --git a/PCbuild8/make_buildinfo/make_buildinfo.vcproj b/PCbuild8/make_buildinfo/make_buildinfo.vcproj new file mode 100644 index 0000000..c3f3491 --- /dev/null +++ b/PCbuild8/make_buildinfo/make_buildinfo.vcproj @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/make_versioninfo.vcproj b/PCbuild8/make_versioninfo.vcproj deleted file mode 100644 index e9efd53..0000000 --- a/PCbuild8/make_versioninfo.vcproj +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/make_versioninfo/make_versioninfo.vcproj b/PCbuild8/make_versioninfo/make_versioninfo.vcproj new file mode 100644 index 0000000..6e51944 --- /dev/null +++ b/PCbuild8/make_versioninfo/make_versioninfo.vcproj @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/pcbuild.sln b/PCbuild8/pcbuild.sln index 35d65a0..e866638 100644 --- a/PCbuild8/pcbuild.sln +++ b/PCbuild8/pcbuild.sln @@ -1,304 +1,410 @@ 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}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore\pythoncore.vcproj", "{987306EC-6BAD-4440-B4FB-A699A1EE6A28}" ProjectSection(ProjectDependencies) = postProject - {F0E0541E-F17D-430B-97C4-93ADF0DD284E} = {F0E0541E-F17D-430B-97C4-93ADF0DD284E} - {C73F0EC1-358B-4177-940F-0846AC8B04CD} = {C73F0EC1-358B-4177-940F-0846AC8B04CD} + {87AB87DB-B665-4621-A67B-878C15B93FF0} = {87AB87DB-B665-4621-A67B-878C15B93FF0} + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED} = {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw", "pythonw.vcproj", "{F4229CC3-873C-49AE-9729-DD308ED4CD4A}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_versioninfo", "make_versioninfo\make_versioninfo.vcproj", "{2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_buildinfo", "make_buildinfo\make_buildinfo.vcproj", "{87AB87DB-B665-4621-A67B-878C15B93FF0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes", "_ctypes\_ctypes.vcproj", "{8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}" ProjectSection(ProjectDependencies) = postProject - {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "select", "select.vcproj", "{97239A56-DBC0-41D2-BC14-C87D9B97D63B}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes_test", "_ctypes_test\_ctypes_test.vcproj", "{F548A318-960A-4B37-9CD6-86B1B0E33CC8}" ProjectSection(ProjectDependencies) = postProject - {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unicodedata", "unicodedata.vcproj", "{FA5FC7EB-C72F-415F-AE42-91DD605ABDDA}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_elementtree", "_elementtree\_elementtree.vcproj", "{CB025148-F0A1-4B32-A669-19EE0534136D}" ProjectSection(ProjectDependencies) = postProject - {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w9xpopen", "w9xpopen.vcproj", "{E9E0A1F6-0009-4E8C-B8F8-1B8F5D49A058}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_msi", "_msi\_msi.vcproj", "{A25ADCC5-8DE1-4F88-B842-C287923280B1}" + ProjectSection(ProjectDependencies) = postProject + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} + EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsound", "winsound.vcproj", "{51F35FAE-FB92-4B2C-9187-1542C065AD77}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sqlite3", "_sqlite3\_sqlite3.vcproj", "{D50E5319-41CC-429A-8E81-B1CD391C3A7B}" ProjectSection(ProjectDependencies) = postProject - {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_elementtree", "_elementtree.vcproj", "{1966DDE2-4AB7-4E4E-ACC9-C121E4D37F8E}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python\python.vcproj", "{AE617428-B823-4B87-BC6D-DC7C12C746D3}" ProjectSection(ProjectDependencies) = postProject - {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_buildinfo", "make_buildinfo.vcproj", "{C73F0EC1-358B-4177-940F-0846AC8B04CD}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw", "pythonw\pythonw.vcproj", "{98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}" + ProjectSection(ProjectDependencies) = postProject + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} + EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_msi", "_msi.vcproj", "{2C0BEFB9-70E2-4F80-AC5B-4AB8EE023574}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "select", "select\select.vcproj", "{0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}" ProjectSection(ProjectDependencies) = postProject - {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes", "_ctypes.vcproj", "{F22F40F4-D318-40DC-96B3-88DC81CE0894}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unicodedata", "unicodedata\unicodedata.vcproj", "{D04B2089-7DA9-4D92-B23F-07453BC46652}" ProjectSection(ProjectDependencies) = postProject - {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes_test", "_ctypes_test.vcproj", "{8CF334D9-4F82-42EB-97AF-83592C5AFD2F}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsound", "winsound\winsound.vcproj", "{1015E3B4-FD3B-4402-AA6E-7806514156D6}" ProjectSection(ProjectDependencies) = postProject - {F22F40F4-D318-40DC-96B3-88DC81CE0894} = {F22F40F4-D318-40DC-96B3-88DC81CE0894} + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sqlite3", "_sqlite3.vcproj", "{2FF0A312-22F9-4C34-B070-842916DE27A9}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_socket", "_socket\_socket.vcproj", "{AE31A248-5367-4EB2-A511-8722BC351CB4}" ProjectSection(ProjectDependencies) = postProject - {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8B172265-1F31-4880-A29C-11A4B7A80172}" - ProjectSection(SolutionItems) = preProject - ..\Modules\getbuildinfo.c = ..\Modules\getbuildinfo.c - readme.txt = readme.txt +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb\_bsddb.vcproj", "{E644B843-F7CA-4888-AA6D-653C77592856}" + ProjectSection(ProjectDependencies) = postProject + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python", "python.vcproj", "{B11D750F-CD1F-4A96-85CE-E69A5C5259F9}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testcapi", "_testcapi\_testcapi.vcproj", "{1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}" ProjectSection(ProjectDependencies) = postProject - {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_versioninfo", "make_versioninfo.vcproj", "{F0E0541E-F17D-430B-97C4-93ADF0DD284E}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_tkinter", "_tkinter\_tkinter.vcproj", "{3A1515AF-3694-4222-91F2-9837BDF60F9A}" + ProjectSection(ProjectDependencies) = postProject + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bz2", "bz2\bz2.vcproj", "{18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}" + ProjectSection(ProjectDependencies) = postProject + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pyexpat", "pyexpat\pyexpat.vcproj", "{80EBF51A-6018-4589-9A53-5AAF2872E230}" + ProjectSection(ProjectDependencies) = postProject + {987306EC-6BAD-4440-B4FB-A699A1EE6A28} = {987306EC-6BAD-4440-B4FB-A699A1EE6A28} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{310B6D98-CFE1-4215-97C1-E52989488A50}" + ProjectSection(SolutionItems) = preProject + readme.txt = readme.txt + EndProjectSection 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 + PGInstrument|Win32 = PGInstrument|Win32 + PGInstrument|x64 = PGInstrument|x64 + PGUpdate|Win32 = PGUpdate|Win32 + PGUpdate|x64 = PGUpdate|x64 Release|Win32 = Release|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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.Release|x64.ActiveCfg = Release|Win32 - {F0E0541E-F17D-430B-97C4-93ADF0DD284E}.Release|x64.Build.0 = Release|Win32 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.Debug|Win32.ActiveCfg = Debug|Win32 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.Debug|Win32.Build.0 = Debug|Win32 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.Debug|x64.ActiveCfg = Debug|x64 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.Debug|x64.Build.0 = Debug|x64 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.Release|Win32.ActiveCfg = Release|Win32 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.Release|Win32.Build.0 = Release|Win32 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.Release|x64.ActiveCfg = Release|x64 + {987306EC-6BAD-4440-B4FB-A699A1EE6A28}.Release|x64.Build.0 = Release|x64 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.Debug|Win32.ActiveCfg = Debug|Win32 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.Debug|Win32.Build.0 = Debug|Win32 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.Debug|x64.ActiveCfg = Debug|Win32 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.Debug|x64.Build.0 = Debug|Win32 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.PGInstrument|Win32.ActiveCfg = Debug|Win32 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.PGInstrument|Win32.Build.0 = Debug|Win32 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.PGInstrument|x64.ActiveCfg = Debug|Win32 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.PGUpdate|Win32.ActiveCfg = Debug|Win32 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.PGUpdate|Win32.Build.0 = Debug|Win32 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.PGUpdate|x64.ActiveCfg = Debug|Win32 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.Release|Win32.ActiveCfg = Debug|Win32 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.Release|Win32.Build.0 = Debug|Win32 + {2AB2AC43-1B73-40B1-8964-95B3FC3F15ED}.Release|x64.ActiveCfg = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.Debug|Win32.ActiveCfg = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.Debug|Win32.Build.0 = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.Debug|x64.ActiveCfg = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.Debug|x64.Build.0 = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.PGInstrument|Win32.ActiveCfg = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.PGInstrument|Win32.Build.0 = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.PGInstrument|x64.ActiveCfg = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.PGUpdate|Win32.ActiveCfg = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.PGUpdate|Win32.Build.0 = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.PGUpdate|x64.ActiveCfg = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.Release|Win32.ActiveCfg = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.Release|Win32.Build.0 = Debug|Win32 + {87AB87DB-B665-4621-A67B-878C15B93FF0}.Release|x64.ActiveCfg = Debug|Win32 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.Debug|Win32.ActiveCfg = Debug|Win32 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.Debug|Win32.Build.0 = Debug|Win32 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.Debug|x64.ActiveCfg = Debug|x64 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.Debug|x64.Build.0 = Debug|x64 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.Release|Win32.ActiveCfg = Release|Win32 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.Release|Win32.Build.0 = Release|Win32 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.Release|x64.ActiveCfg = Release|x64 + {8D80F68B-F6EC-4E69-9B04-73F632A8A8ED}.Release|x64.Build.0 = Release|x64 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.Debug|Win32.ActiveCfg = Debug|Win32 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.Debug|Win32.Build.0 = Debug|Win32 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.Debug|x64.ActiveCfg = Debug|x64 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.Debug|x64.Build.0 = Debug|x64 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.Release|Win32.ActiveCfg = Release|Win32 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.Release|Win32.Build.0 = Release|Win32 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.Release|x64.ActiveCfg = Release|x64 + {F548A318-960A-4B37-9CD6-86B1B0E33CC8}.Release|x64.Build.0 = Release|x64 + {CB025148-F0A1-4B32-A669-19EE0534136D}.Debug|Win32.ActiveCfg = Debug|Win32 + {CB025148-F0A1-4B32-A669-19EE0534136D}.Debug|Win32.Build.0 = Debug|Win32 + {CB025148-F0A1-4B32-A669-19EE0534136D}.Debug|x64.ActiveCfg = Debug|x64 + {CB025148-F0A1-4B32-A669-19EE0534136D}.Debug|x64.Build.0 = Debug|x64 + {CB025148-F0A1-4B32-A669-19EE0534136D}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {CB025148-F0A1-4B32-A669-19EE0534136D}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {CB025148-F0A1-4B32-A669-19EE0534136D}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {CB025148-F0A1-4B32-A669-19EE0534136D}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {CB025148-F0A1-4B32-A669-19EE0534136D}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {CB025148-F0A1-4B32-A669-19EE0534136D}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {CB025148-F0A1-4B32-A669-19EE0534136D}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {CB025148-F0A1-4B32-A669-19EE0534136D}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {CB025148-F0A1-4B32-A669-19EE0534136D}.Release|Win32.ActiveCfg = Release|Win32 + {CB025148-F0A1-4B32-A669-19EE0534136D}.Release|Win32.Build.0 = Release|Win32 + {CB025148-F0A1-4B32-A669-19EE0534136D}.Release|x64.ActiveCfg = Release|x64 + {CB025148-F0A1-4B32-A669-19EE0534136D}.Release|x64.Build.0 = Release|x64 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.Debug|Win32.ActiveCfg = Debug|Win32 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.Debug|Win32.Build.0 = Debug|Win32 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.Debug|x64.ActiveCfg = Debug|x64 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.Debug|x64.Build.0 = Debug|x64 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.Release|Win32.ActiveCfg = Release|Win32 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.Release|Win32.Build.0 = Release|Win32 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.Release|x64.ActiveCfg = Release|x64 + {A25ADCC5-8DE1-4F88-B842-C287923280B1}.Release|x64.Build.0 = Release|x64 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.Debug|Win32.ActiveCfg = Debug|Win32 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.Debug|Win32.Build.0 = Debug|Win32 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.Debug|x64.ActiveCfg = Debug|x64 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.Debug|x64.Build.0 = Debug|x64 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.Release|Win32.ActiveCfg = Release|Win32 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.Release|Win32.Build.0 = Release|Win32 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.Release|x64.ActiveCfg = Release|x64 + {D50E5319-41CC-429A-8E81-B1CD391C3A7B}.Release|x64.Build.0 = Release|x64 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.Debug|Win32.Build.0 = Debug|Win32 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.Debug|x64.ActiveCfg = Debug|x64 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.Debug|x64.Build.0 = Debug|x64 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.Release|Win32.ActiveCfg = Release|Win32 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.Release|Win32.Build.0 = Release|Win32 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.Release|x64.ActiveCfg = Release|x64 + {AE617428-B823-4B87-BC6D-DC7C12C746D3}.Release|x64.Build.0 = Release|x64 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.Debug|Win32.ActiveCfg = Debug|Win32 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.Debug|Win32.Build.0 = Debug|Win32 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.Debug|x64.ActiveCfg = Debug|x64 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.Debug|x64.Build.0 = Debug|x64 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.Release|Win32.ActiveCfg = Release|Win32 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.Release|Win32.Build.0 = Release|Win32 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.Release|x64.ActiveCfg = Release|x64 + {98C3DB47-DD1F-4A4B-9D3C-1DBB32AC6667}.Release|x64.Build.0 = Release|x64 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.Debug|Win32.ActiveCfg = Debug|Win32 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.Debug|Win32.Build.0 = Debug|Win32 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.Debug|x64.ActiveCfg = Debug|x64 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.Debug|x64.Build.0 = Debug|x64 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.Release|Win32.ActiveCfg = Release|Win32 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.Release|Win32.Build.0 = Release|Win32 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.Release|x64.ActiveCfg = Release|x64 + {0BAFC4A4-8DB5-4CC6-9DDB-A1D32C682B2F}.Release|x64.Build.0 = Release|x64 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.Debug|Win32.ActiveCfg = Debug|Win32 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.Debug|Win32.Build.0 = Debug|Win32 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.Debug|x64.ActiveCfg = Debug|x64 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.Debug|x64.Build.0 = Debug|x64 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.Release|Win32.ActiveCfg = Release|Win32 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.Release|Win32.Build.0 = Release|Win32 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.Release|x64.ActiveCfg = Release|x64 + {D04B2089-7DA9-4D92-B23F-07453BC46652}.Release|x64.Build.0 = Release|x64 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.Debug|Win32.ActiveCfg = Debug|Win32 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.Debug|Win32.Build.0 = Debug|Win32 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.Debug|x64.ActiveCfg = Debug|x64 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.Debug|x64.Build.0 = Debug|x64 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.Release|Win32.ActiveCfg = Release|Win32 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.Release|Win32.Build.0 = Release|Win32 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.Release|x64.ActiveCfg = Release|x64 + {1015E3B4-FD3B-4402-AA6E-7806514156D6}.Release|x64.Build.0 = Release|x64 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.Debug|Win32.ActiveCfg = Debug|Win32 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.Debug|Win32.Build.0 = Debug|Win32 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.Debug|x64.ActiveCfg = Debug|x64 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.Debug|x64.Build.0 = Debug|x64 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.Release|Win32.ActiveCfg = Release|Win32 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.Release|Win32.Build.0 = Release|Win32 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.Release|x64.ActiveCfg = Release|x64 + {AE31A248-5367-4EB2-A511-8722BC351CB4}.Release|x64.Build.0 = Release|x64 + {E644B843-F7CA-4888-AA6D-653C77592856}.Debug|Win32.ActiveCfg = Debug|Win32 + {E644B843-F7CA-4888-AA6D-653C77592856}.Debug|Win32.Build.0 = Debug|Win32 + {E644B843-F7CA-4888-AA6D-653C77592856}.Debug|x64.ActiveCfg = Debug|x64 + {E644B843-F7CA-4888-AA6D-653C77592856}.Debug|x64.Build.0 = Debug|x64 + {E644B843-F7CA-4888-AA6D-653C77592856}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {E644B843-F7CA-4888-AA6D-653C77592856}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {E644B843-F7CA-4888-AA6D-653C77592856}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {E644B843-F7CA-4888-AA6D-653C77592856}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {E644B843-F7CA-4888-AA6D-653C77592856}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {E644B843-F7CA-4888-AA6D-653C77592856}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {E644B843-F7CA-4888-AA6D-653C77592856}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {E644B843-F7CA-4888-AA6D-653C77592856}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {E644B843-F7CA-4888-AA6D-653C77592856}.Release|Win32.ActiveCfg = PGInstrument|Win32 + {E644B843-F7CA-4888-AA6D-653C77592856}.Release|Win32.Build.0 = PGInstrument|Win32 + {E644B843-F7CA-4888-AA6D-653C77592856}.Release|x64.ActiveCfg = Release|x64 + {E644B843-F7CA-4888-AA6D-653C77592856}.Release|x64.Build.0 = Release|x64 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.Debug|Win32.ActiveCfg = Debug|Win32 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.Debug|Win32.Build.0 = Debug|Win32 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.Debug|x64.ActiveCfg = Debug|x64 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.Debug|x64.Build.0 = Debug|x64 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.Release|Win32.ActiveCfg = Release|Win32 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.Release|Win32.Build.0 = Release|Win32 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.Release|x64.ActiveCfg = Release|x64 + {1E8DCFC4-1EF8-4076-8CA2-B08D3C979749}.Release|x64.Build.0 = Release|x64 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.Debug|Win32.ActiveCfg = Debug|Win32 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.Debug|Win32.Build.0 = Debug|Win32 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.Debug|x64.ActiveCfg = Debug|x64 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.Debug|x64.Build.0 = Debug|x64 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.Release|Win32.ActiveCfg = Release|Win32 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.Release|Win32.Build.0 = Release|Win32 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.Release|x64.ActiveCfg = Release|x64 + {3A1515AF-3694-4222-91F2-9837BDF60F9A}.Release|x64.Build.0 = Release|x64 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.Debug|Win32.ActiveCfg = Debug|Win32 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.Debug|Win32.Build.0 = Debug|Win32 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.Debug|x64.ActiveCfg = Debug|x64 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.Debug|x64.Build.0 = Debug|x64 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.Release|Win32.ActiveCfg = Release|Win32 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.Release|Win32.Build.0 = Release|Win32 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.Release|x64.ActiveCfg = Release|x64 + {18C518FB-33CB-4C16-AA05-8DEA8DE66DF0}.Release|x64.Build.0 = Release|x64 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.Debug|Win32.ActiveCfg = Debug|Win32 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.Debug|Win32.Build.0 = Debug|Win32 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.Debug|x64.ActiveCfg = Debug|x64 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.Debug|x64.Build.0 = Debug|x64 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.Release|Win32.ActiveCfg = Release|Win32 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.Release|Win32.Build.0 = Release|Win32 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.Release|x64.ActiveCfg = Release|x64 + {80EBF51A-6018-4589-9A53-5AAF2872E230}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/PCbuild8/pyd.vsprops b/PCbuild8/pyd.vsprops new file mode 100644 index 0000000..afbfb50 --- /dev/null +++ b/PCbuild8/pyd.vsprops @@ -0,0 +1,13 @@ + + + + diff --git a/PCbuild8/pyd_d.vsprops b/PCbuild8/pyd_d.vsprops new file mode 100644 index 0000000..4bb3a40 --- /dev/null +++ b/PCbuild8/pyd_d.vsprops @@ -0,0 +1,14 @@ + + + + diff --git a/PCbuild8/pyexpat.vcproj b/PCbuild8/pyexpat.vcproj deleted file mode 100644 index bc449cd..0000000 --- a/PCbuild8/pyexpat.vcproj +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/pyexpat/pyexpat.vcproj b/PCbuild8/pyexpat/pyexpat.vcproj new file mode 100644 index 0000000..f45a0f7 --- /dev/null +++ b/PCbuild8/pyexpat/pyexpat.vcproj @@ -0,0 +1,664 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/pyproject.vsprops b/PCbuild8/pyproject.vsprops new file mode 100644 index 0000000..e4c5f73 --- /dev/null +++ b/PCbuild8/pyproject.vsprops @@ -0,0 +1,38 @@ + + + + + + + + + + diff --git a/PCbuild8/python.build b/PCbuild8/python.build deleted file mode 100644 index 4e1fcc0..0000000 --- a/PCbuild8/python.build +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/python.iss b/PCbuild8/python.iss deleted file mode 100644 index b1ed65d..0000000 --- a/PCbuild8/python.iss +++ /dev/null @@ -1,346 +0,0 @@ -; Script generated by the Inno Setup Script Wizard. -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! - -; This is the whole ball of wax for an Inno installer for Python. -; To use, download Inno Setup from http://www.jrsoftware.org/isdl.htm/, -; install it, and double-click on this file. That launches the Inno -; script compiler. The GUI is extemely simple, and has only one button -; you may not recognize instantly: click it. You're done. It builds -; the installer into PCBuild/Python-2.2a1.exe. Size and speed of the -; installer are competitive with the Wise installer; Inno uninstall -; seems much quicker than Wise (but also feebler, and the uninstall -; log is in some un(human)readable binary format). -; -; What's Done -; ----------- -; All the usual Windows Python files are installed by this now. -; All the usual Windows Python Start menu entries are created and -; work fine. -; .py, .pyw, .pyc and .pyo extensions are registered. -; PROBLEM: Inno uninstall does not restore their previous registry -; associations (if any). Wise did. This will make life -; difficult for alpha (etc) testers. -; The Python install is fully functional for "typical" uses. -; -; What's Not Done -; --------------- -; None of "Mark Hammond's" registry entries are written. -; No installation of files is done into the system dir: -; The MS DLLs aren't handled at all by this yet. -; Python22.dll is unpacked into the main Python dir. -; -; Inno can't do different things on NT/2000 depending on whether the user -; has Admin privileges, so I don't know how to "solve" either of those, -; short of building two installers (one *requiring* Admin privs, the -; other not doing anything that needs Admin privs). -; -; Inno has no concept of variables, so lots of lines in this file need -; to be fiddled by hand across releases. Simplest way out: stick this -; file in a giant triple-quoted r-string (note that backslashes are -; required all over the place here -- forward slashes DON'T WORK in -; Inno), and use %(yadda)s string interpolation to do substitutions; i.e., -; write a very simple Python program to *produce* this script. - -[Setup] -AppName=Python and combined Win32 Extensions -AppVerName=Python 2.2.2 and combined Win32 Extensions 150 -AppId=Python 2.2.2.150 -AppVersion=2.2.2.150 -AppCopyright=Python is Copyright © 2001 Python Software Foundation. Win32 Extensions are Copyright © 1996-2001 Greg Stein and Mark Hammond. - -; Default install dir; value of {app} later (unless user overrides). -; {sd} = system root drive, probably "C:". -DefaultDirName={sd}\Python22 -;DefaultDirName={pf}\Python - -; Start menu folder name; value of {group} later (unless user overrides). -DefaultGroupName=Python 2.2 - -; Point SourceDir to one above PCBuild = src. -; means this script can run unchanged from anyone's CVS tree, no matter -; what they called the top-level directories. -SourceDir=. -OutputDir=.. -OutputBaseFilename=Python-2.2.2-Win32-150-Setup - -AppPublisher=PythonLabs at Digital Creations -AppPublisherURL=http://www.python.org -AppSupportURL=http://www.python.org -AppUpdatesURL=http://www.python.org - -AlwaysCreateUninstallIcon=true -ChangesAssociations=true -UninstallLogMode=new -AllowNoIcons=true -AdminPrivilegesRequired=true -UninstallDisplayIcon={app}\pyc.ico -WizardDebug=false - -; The fewer screens the better; leave these commented. - -Compression=bzip -InfoBeforeFile=LICENSE.txt -;InfoBeforeFile=Misc\NEWS - -; uncomment the following line if you want your installation to run on NT 3.51 too. -; MinVersion=4,3.51 - -[Types] -Name: normal; Description: Select desired components; Flags: iscustom - -[Components] -Name: main; Description: Python and Win32 Extensions; Types: normal -Name: docs; Description: Python documentation (HTML); Types: normal -Name: tk; Description: TCL/TK, tkinter, and Idle; Types: normal -Name: tools; Description: Python utility scripts (Tools\); Types: normal -Name: test; Description: Python test suite (Lib\test\); Types: normal - -[Tasks] -Name: extensions; Description: Register file associations (.py, .pyw, .pyc, .pyo); Components: main; Check: IsAdminLoggedOn - -[Files] -; Caution: Using forward slashes instead screws up in amazing ways. -; Unknown: By the time Components (and other attrs) are added to these lines, they're -; going to get awfully long. But don't see a way to continue logical lines across -; physical lines. - -Source: LICENSE.txt; DestDir: {app}; CopyMode: alwaysoverwrite -Source: README.txt; DestDir: {app}; CopyMode: alwaysoverwrite -Source: News.txt; DestDir: {app}; CopyMode: alwaysoverwrite -Source: *.ico; DestDir: {app}; CopyMode: alwaysoverwrite; Components: main - -Source: python.exe; DestDir: {app}; CopyMode: alwaysoverwrite; Components: main -Source: pythonw.exe; DestDir: {app}; CopyMode: alwaysoverwrite; Components: main -Source: w9xpopen.exe; DestDir: {app}; CopyMode: alwaysoverwrite; Components: main - - -Source: DLLs\tcl83.dll; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: tk -Source: DLLs\tk83.dll; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: tk -Source: tcl\*.*; DestDir: {app}\tcl; CopyMode: alwaysoverwrite; Components: tk; Flags: recursesubdirs - -Source: sysdir\python22.dll; DestDir: {sys}; CopyMode: alwaysskipifsameorolder; Components: main; Flags: sharedfile restartreplace -Source: sysdir\PyWinTypes22.dll; DestDir: {sys}; CopyMode: alwaysskipifsameorolder; Components: main; Flags: restartreplace sharedfile -Source: sysdir\pythoncom22.dll; DestDir: {sys}; CopyMode: alwaysskipifsameorolder; Components: main; Flags: restartreplace sharedfile - -Source: DLLs\_socket.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\_socket.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\_sre.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\_sre.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\_symtable.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\_symtable.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\_testcapi.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\_testcapi.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\_tkinter.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: tk -Source: libs\_tkinter.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: tk - -Source: DLLs\bsddb.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\bsddb.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\mmap.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\mmap.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\parser.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\parser.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\pyexpat.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\pyexpat.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\select.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\select.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\unicodedata.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\unicodedata.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\_winreg.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\_winreg.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\winsound.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\winsound.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\zlib.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main -Source: libs\zlib.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: libs\python22.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main - -Source: DLLs\expat.dll; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main - - - -Source: Lib\*.py; DestDir: {app}\Lib; CopyMode: alwaysoverwrite; Components: main -Source: Lib\compiler\*.*; DestDir: {app}\Lib\compiler; CopyMode: alwaysoverwrite; Components: main; Flags: recursesubdirs -Source: Lib\distutils\*.*; DestDir: {app}\Lib\distutils; CopyMode: alwaysoverwrite; Components: main; Flags: recursesubdirs -Source: Lib\email\*.*; DestDir: {app}\Lib\email; CopyMode: alwaysoverwrite; Components: main; Flags: recursesubdirs -Source: Lib\encodings\*.*; DestDir: {app}\Lib\encodings; CopyMode: alwaysoverwrite; Components: main; Flags: recursesubdirs -Source: Lib\hotshot\*.*; DestDir: {app}\Lib\hotshot; CopyMode: alwaysoverwrite; Components: main; Flags: recursesubdirs -Source: Lib\lib-old\*.*; DestDir: {app}\Lib\lib-old; CopyMode: alwaysoverwrite; Components: main; Flags: recursesubdirs -Source: Lib\xml\*.*; DestDir: {app}\Lib\xml; CopyMode: alwaysoverwrite; Components: main; Flags: recursesubdirs -Source: Lib\hotshot\*.*; DestDir: {app}\Lib\hotshot; CopyMode: alwaysoverwrite; Components: main; Flags: recursesubdirs -Source: Lib\test\*.*; DestDir: {app}\Lib\test; CopyMode: alwaysoverwrite; Components: test; Flags: recursesubdirs - -Source: Lib\site-packages\README.txt; DestDir: {app}\Lib\site-packages; CopyMode: alwaysoverwrite; Components: main - -Source: Lib\site-packages\PyWin32.chm; DestDir: {app}\Lib\site-packages; CopyMode: alwaysoverwrite; Components: docs -Source: Lib\site-packages\win32\*.*; DestDir: {app}\Lib\site-packages\win32; CopyMode: alwaysoverwrite; Components: main; Flags: recursesubdirs -Source: Lib\site-packages\win32com\*.*; DestDir: {app}\Lib\site-packages\win32com; CopyMode: alwaysoverwrite; Components: main; Flags: recursesubdirs -Source: Lib\site-packages\win32comext\*.*; DestDir: {app}\Lib\site-packages\win32comext; CopyMode: alwaysoverwrite; Components: main; Flags: recursesubdirs - -Source: Lib\lib-tk\*.py; DestDir: {app}\Lib\lib-tk; CopyMode: alwaysoverwrite; Components: tk; Flags: recursesubdirs - -Source: include\*.h; DestDir: {app}\include; CopyMode: alwaysoverwrite; Components: main - -Source: Tools\idle\*.*; DestDir: {app}\Tools\idle; CopyMode: alwaysoverwrite; Components: tk; Flags: recursesubdirs - -Source: Tools\pynche\*.*; DestDir: {app}\Tools\pynche; CopyMode: alwaysoverwrite; Components: tools; Flags: recursesubdirs -Source: Tools\scripts\*.*; DestDir: {app}\Tools\Scripts; CopyMode: alwaysoverwrite; Components: tools; Flags: recursesubdirs -Source: Tools\webchecker\*.*; DestDir: {app}\Tools\webchecker; CopyMode: alwaysoverwrite; Components: tools; Flags: recursesubdirs -Source: Tools\versioncheck\*.*; DestDir: {app}\Tools\versioncheck; CopyMode: alwaysoverwrite; Components: tools; Flags: recursesubdirs - -Source: Doc\*.*; DestDir: {app}\Doc; CopyMode: alwaysoverwrite; Flags: recursesubdirs; Components: docs - - -[Icons] -Name: {group}\Python (command line); Filename: {app}\python.exe; WorkingDir: {app}; Components: main -Name: {group}\Python Manuals; Filename: {app}\Doc\index.html; WorkingDir: {app}; Components: docs -Name: {group}\Win32 Extensions Help; Filename: {app}\Lib\site-packages\PyWin32.chm; WorkingDir: {app}\Lib\site-packages; Components: docs -Name: {group}\Module Docs; Filename: {app}\pythonw.exe; WorkingDir: {app}; Parameters: """{app}\Tools\Scripts\pydoc.pyw"""; Components: tools -Name: {group}\IDLE (Python GUI); Filename: {app}\pythonw.exe; WorkingDir: {app}; Parameters: """{app}\Tools\idle\idle.pyw"""; Components: tools - -[Registry] -; Register .py -Tasks: extensions; Root: HKCR; Subkey: .py; ValueType: string; ValueName: ; ValueData: Python File; Flags: uninsdeletevalue -Tasks: extensions; Root: HKCR; Subkey: .py; ValueType: string; ValueName: Content Type; ValueData: text/plain; Flags: uninsdeletevalue -Tasks: extensions; Root: HKCR; Subkey: Python File; ValueType: string; ValueName: ; ValueData: Python File; Flags: uninsdeletekey -Tasks: extensions; Root: HKCR; Subkey: Python File\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\Py.ico -Tasks: extensions; Root: HKCR; Subkey: Python File\shell\open\command; ValueType: string; ValueName: ; ValueData: """{app}\python.exe"" ""%1"" %*" - -; Register .pyc -Tasks: extensions; Root: HKCR; Subkey: .pyc; ValueType: string; ValueName: ; ValueData: Python CompiledFile; Flags: uninsdeletevalue -Tasks: extensions; Root: HKCR; Subkey: Python CompiledFile; ValueType: string; ValueName: ; ValueData: Compiled Python File; Flags: uninsdeletekey -Tasks: extensions; Root: HKCR; Subkey: Python CompiledFile\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\pyc.ico -Tasks: extensions; Root: HKCR; Subkey: Python CompiledFile\shell\open\command; ValueType: string; ValueName: ; ValueData: """{app}\python.exe"" ""%1"" %*" - -; Register .pyo -Tasks: extensions; Root: HKCR; Subkey: .pyo; ValueType: string; ValueName: ; ValueData: Python CompiledFile; Flags: uninsdeletevalue - -; Register .pyw -Tasks: extensions; Root: HKCR; Subkey: .pyw; ValueType: string; ValueName: ; ValueData: Python NoConFile; Flags: uninsdeletevalue -Tasks: extensions; Root: HKCR; Subkey: .pyw; ValueType: string; ValueName: Content Type; ValueData: text/plain; Flags: uninsdeletevalue -Tasks: extensions; Root: HKCR; Subkey: Python NoConFile; ValueType: string; ValueName: ; ValueData: Python File (no console); Flags: uninsdeletekey -Tasks: extensions; Root: HKCR; Subkey: Python NoConFile\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\Py.ico -Tasks: extensions; Root: HKCR; Subkey: Python NoConFile\shell\open\command; ValueType: string; ValueName: ; ValueData: """{app}\pythonw.exe"" ""%1"" %*" - - -; Python Registry Keys -Root: HKLM; Subkey: SOFTWARE\Python; Flags: uninsdeletekeyifempty; Check: IsAdminLoggedOn -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore; Flags: uninsdeletekeyifempty -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2; Flags: uninsdeletekeyifempty -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2\PythonPath; ValueData: "{app}\Lib;{app}\DLLs"; Flags: uninsdeletekeyifempty -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2\PythonPath\tk; ValueData: {app}\Lib\lib-tk; Flags: uninsdeletekey; Components: tk -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2\PythonPath\win32; ValueData: "{app}\lib\site-packages\win32;{app}\lib\site-packages\win32\lib"; Flags: uninsdeletekey -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2\PythonPath\win32com; ValueData: C:\Python\lib\site-packages; Flags: uninsdeletekey -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2\Modules; Flags: uninsdeletekeyifempty -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2\Modules\pythoncom; ValueData: {sys}\pythoncom22.dll; Flags: uninsdeletekey -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2\Modules\pywintypes; ValueData: {sys}\PyWinTypes22.dll; Flags: uninsdeletekey -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2\InstallPath; ValueData: {app}; Flags: uninsdeletekeyifempty; ValueType: string -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2\InstallPath\InstallGroup; ValueData: {group}; Flags: uninsdeletekey -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2\Help; Flags: uninsdeletekeyifempty -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2\Help\Main Python Documentation; ValueType: string; ValueData: {app}\Doc\index.html; Flags: uninsdeletekey; Components: docs -Root: HKLM; Subkey: SOFTWARE\Python\PythonCore\2.2\Help\Python Win32 Documentation; ValueType: string; ValueData: {app}\lib\site-packages\PyWin32.chm; Flags: uninsdeletekey; Components: docs - -[_ISTool] -EnableISX=true - - -[Code] -Program Setup; - -Function IsAdminNotLoggedOn(): Boolean; -begin - Result := Not IsAdminLoggedOn(); -end; - -begin -end. - - - - -[UninstallDelete] -Name: {app}\Lib\compiler\*.pyc; Type: files -Name: {app}\Lib\compiler\*.pyo; Type: files -Name: {app}\Lib\compiler; Type: dirifempty -Name: {app}\Lib\distutils\command\*.pyc; Type: files -Name: {app}\Lib\distutils\command\*.pyo; Type: files -Name: {app}\Lib\distutils\command; Type: dirifempty -Name: {app}\Lib\distutils\*.pyc; Type: files -Name: {app}\Lib\distutils\*.pyo; Type: files -Name: {app}\Lib\distutils; Type: dirifempty -Name: {app}\Lib\email\test\*.pyc; Type: files -Name: {app}\Lib\email\test\*.pyo; Type: files -Name: {app}\Lib\email\test; Type: dirifempty -Name: {app}\Lib\email\*.pyc; Type: files -Name: {app}\Lib\email\*.pyo; Type: files -Name: {app}\Lib\email; Type: dirifempty -Name: {app}\Lib\encodings\*.pyc; Type: files -Name: {app}\Lib\encodings\*.pyo; Type: files -Name: {app}\Lib\encodings; Type: dirifempty -Name: {app}\Lib\hotshot\*.pyc; Type: files -Name: {app}\Lib\hotshot\*.pyo; Type: files -Name: {app}\Lib\hotshot; Type: dirifempty -Name: {app}\Lib\lib-old\*.pyc; Type: files -Name: {app}\Lib\lib-old\*.pyo; Type: files -Name: {app}\Lib\lib-old; Type: dirifempty -Name: {app}\Lib\lib-tk\*.pyc; Type: files -Name: {app}\Lib\lib-tk\*.pyo; Type: files -Name: {app}\Lib\lib-tk; Type: dirifempty -Name: {app}\Lib\test\*.pyc; Type: files -Name: {app}\Lib\test\*.pyo; Type: files -Name: {app}\Lib\test; Type: dirifempty -Name: {app}\Lib\xml\dom\*.pyc; Type: files -Name: {app}\Lib\xml\dom\*.pyo; Type: files -Name: {app}\Lib\xml\dom; Type: dirifempty -Name: {app}\Lib\xml\parsers\*.pyc; Type: files -Name: {app}\Lib\xml\parsers\*.pyo; Type: files -Name: {app}\Lib\xml\parsers; Type: dirifempty -Name: {app}\Lib\xml\sax\*.pyc; Type: files -Name: {app}\Lib\xml\sax\*.pyo; Type: files -Name: {app}\Lib\xml\sax; Type: dirifempty -Name: {app}\Lib\xml\*.pyc; Type: files -Name: {app}\Lib\xml\*.pyo; Type: files -Name: {app}\Lib\xml; Type: dirifempty - -Name: {app}\Lib\site-packages\win32; Type: filesandordirs -Name: {app}\Lib\site-packages\win32com; Type: filesandordirs -Name: {app}\Lib\site-packages\win32comext; Type: filesandordirs -Name: {app}\Lib\site-packages\pythoncom.py*; Type: files -Name: {app}\Lib\site-packages; Type: dirifempty - -Name: {app}\Lib\*.pyc; Type: files -Name: {app}\Lib; Type: dirifempty - -Name: {app}\Tools\pynche\*.pyc; Type: files -Name: {app}\Tools\pynche\*.pyo; Type: files -Name: {app}\Tools\pynche; Type: dirifempty - -Name: {app}\Tools\idle\*.pyc; Type: files -Name: {app}\Tools\idle\*.pyo; Type: files -Name: {app}\Tools\idle; Type: dirifempty - -Name: {app}\Tools\scripts\*.pyc; Type: files -Name: {app}\Tools\scripts\*.pyo; Type: files -Name: {app}\Tools\scripts; Type: dirifempty - -Name: {app}\Tools\versioncheck\*.pyc; Type: files -Name: {app}\Tools\versioncheck\*.pyo; Type: files -Name: {app}\Tools\versioncheck; Type: dirifempty - -Name: {app}\Tools\webchecker\*.pyc; Type: files -Name: {app}\Tools\webchecker\*.pyo; Type: files -Name: {app}\Tools\webchecker; Type: dirifempty - -Name: {app}\Tools; Type: dirifempty - diff --git a/PCbuild8/python.vcproj b/PCbuild8/python.vcproj deleted file mode 100644 index 7fa8d04..0000000 --- a/PCbuild8/python.vcproj +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/python/python.vcproj b/PCbuild8/python/python.vcproj new file mode 100644 index 0000000..2ec1b8a --- /dev/null +++ b/PCbuild8/python/python.vcproj @@ -0,0 +1,666 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/python20.wse b/PCbuild8/python20.wse deleted file mode 100644 index a8d9785..0000000 --- a/PCbuild8/python20.wse +++ /dev/null @@ -1,3135 +0,0 @@ -Document Type: WSE -item: Global - Version=9.0 - Title=Python 2.4a1 - Flags=00010100 - Languages=65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - Japanese Font Name=MS Gothic - Japanese Font Size=10 - Start Gradient=0 255 0 - End Gradient=0 128 0 - Windows Flags=00000100000011010010010100001010 - Log Pathname=%MAINDIR%\INSTALL.LOG - Message Font=MS Sans Serif - Font Size=8 - Pages Modified=00010000011101000000000100000111 - Extra Pages=00000000000000000000000010110010 - Disk Filename=SETUP - Patch Flags=0000000000001001 - Patch Threshold=85 - Patch Memory=4000 - MIF PDF Version=1.0 - MIF SMS Version=2.0 - EXE Filename=Python-2.4a1.exe - Dialogs Version=8 - Version File=2.4a1 - Version Description=Python Programming Language - Version Copyright=©2001-2007 Python Software Foundation - Version Company=Python Software Foundation - Crystal Format=10111100101100000010001001001001 - Step View=&All - Variable Name1=_WISE_ - Variable Description1=WISE root directory - Variable Default1=C:\Programme\Wise Installation System - Variable Flags1=00001000 - Variable Name2=_TCLDIR_ - Variable Description2=The directory in which the Tcl/Tk installation - Variable Description2=lives. This must be a sibling of the Python - Variable Description2=directory. - Variable Default2=tcl84 - Variable Flags2=00001000 - Variable Name3=_DOC_ - Variable Description3=The unpacked HTML doc directory. - Variable Default3=..\html - Variable Flags3=00001001 - Variable Name4=_SYS_ - Variable Description4=System directory (where to find MSVCRT.DLL) - Variable Default4=C:\Windows\System - Variable Values4=C:\Windows\System - Variable Values4=C:\WINNT\System32 - Variable Values4=C:\Code\MSDLLs - Variable Values4=C:\Windows\System32 - Variable Flags4=00000010 - Variable Name5=_PYMAJOR_ - Variable Description5=Python major version number; the 2 in 2.3. - Variable Default5=2 - Variable Flags5=00001000 - Variable Name6=_PYMINOR_ - Variable Description6=Python minor version number; the 3 in 2.3 - Variable Default6=3 - Variable Flags6=00001000 - Variable Name7=_DOADMIN_ - Variable Description7=The initial value for %DOADMIN%. - Variable Description7=When 0, we never try to write under HKLM, - Variable Description7=and install the Python + MS runtime DLLs in - Variable Description7=the Python directory instead of the system dir. - Variable Default7=1 - Variable Values7=1 - Variable Values7=0 - Variable Flags7=00001010 - Variable Name8=_ALIASNAME_ - Variable Flags8=00001000 - Variable Name9=_ALIASPATH_ - Variable Flags9=00001000 - Variable Name10=_ALIASTYPE_ - Variable Flags10=00001000 -end -item: Set Variable - Variable=PYVER_STRING - Value=2.3 -end -item: Remark -end -item: Remark - Text=When the version number changes, set the compiler -end -item: Remark - Text=vrbls _PYMAJOR_ and _PYMINOR_. -end -item: Remark - Text=Nothing in the script below should need fiddling then. -end -item: Remark - Text=Other things that need fiddling: -end -item: Remark - Text= PYVER_STRING above. -end -item: Remark - Text= The "Title:" in the upper left corner of the GUI. -end -item: Remark - Text= Build Settings and Version Resource on step 6 (Finish) of the Installation Expert -end -item: Remark - Text= Be sure to select Steps->All or you may not see these! -end -item: Remark -end -item: Remark - Text=When the version of Tcl/Tk changes, the compiler vrbl -end -item: Remark - Text=_TCLDIR_ may also need to be changed. -end -item: Remark -end -item: Set Variable - Variable=APPTITLE - Value=Python %PYVER_STRING% -end -item: Remark - Text=PY_VERSION should be major.minor only; used to create the registry key; must match MS_DLL_ID in python_nt.rc -end -item: Set Variable - Variable=PY_VERSION - Value=%_PYMAJOR_%.%_PYMINOR_% -end -item: Remark - Text=GROUP is the Start menu group name; user can override. -end -item: Set Variable - Variable=GROUP - Value=Python %PY_VERSION% - Flags=10000000 -end -item: Remark - Text=MAINDIR is the app directory; user can override. -end -item: Set Variable - Variable=MAINDIR - Value=Python%_PYMAJOR_%%_PYMINOR_% -end -item: Remark -end -item: Set Variable - Variable=DOADMIN - Value=%_DOADMIN_% -end -item: Remark - Text=Give non-admin users a chance to abort. -end -item: Check Configuration - Flags=10011111 -end -item: Set Variable - Variable=DOADMIN - Value=0 -end -item: Display Message - Title=Doing non-admin install - Text=The current login does not have Administrator Privileges on this machine. Python will install its registry information into the per-user area only for the current login, instead of into the per-machine area for every account on this machine. Some advanced uses of Python may not work as a result (for example, running a Python script as a service). - Text= - Text=If this is not what you want, please click Cancel to abort this installation, log on as an Administrator, and start the installation again. - Flags=00001000 -end -item: End Block -end -item: Remark -end -item: Remark - Text=BEGIN WIZARD STUFF ----------------------------------------------------------------------------------------------------------------------------- -end -item: Remark - Text=Note from Tim: the "stop" on the next line is actually "pause". -end -item: Open/Close INSTALL.LOG - Flags=00000001 -end -item: Remark - Text=If the destination system does not have a writable Windows\System directory, system files will be written to the Windows\ directory -end -item: Check if File/Dir Exists - Pathname=%SYS% - Flags=10000100 -end -item: Set Variable - Variable=SYS - Value=%WIN% -end -item: End Block -end -item: Check Configuration - Flags=10111011 -end -item: Get Registry Key Value - Variable=COMMON - Key=SOFTWARE\Microsoft\Windows\CurrentVersion - Default=C:\Program Files\Common Files - Value Name=CommonFilesDir - Flags=00000100 -end -item: Get Registry Key Value - Variable=PROGRAM_FILES - Key=SOFTWARE\Microsoft\Windows\CurrentVersion - Default=C:\Program Files - Value Name=ProgramFilesDir - Flags=00000100 -end -item: Set Variable - Variable=EXPLORER - Value=1 -end -item: End Block -end -item: Remark - Text=Note from Tim: The Wizard hardcod "C:" at the start of the replacement text for MAINDIR. -end -item: Remark - Text=That's not appropriate if the system drive doesn't happen to be C:. -end -item: Remark - Text=I removed the "C:", and that did the right thing for two people who tested it on non-C: machines, -end -item: Remark - Text=but it's unclear whether it will always do the right thing. -end -item: Set Variable - Variable=MAINDIR - Value=\%MAINDIR% - Flags=00001100 -end -item: Remark - Text=BACKUP is the variable that holds the path that all backup files will be copied to when overwritten -end -item: Set Variable - Variable=BACKUP - Value=%MAINDIR%\BACKUP - Flags=10000000 -end -item: Remark - Text=DOBACKUP determines if a backup will be performed. The possible values are A (do backup) or B (do not do backup) -end -item: Set Variable - Variable=DOBACKUP - Value=A -end -item: Remark - Text=BRANDING determines if the installation will be branded with a name and company. By default, this is written to the INST directory (installation media). -end -item: Set Variable - Variable=BRANDING - Value=0 -end -item: If/While Statement - Variable=BRANDING - Value=1 -end -item: Read INI Value - Variable=NAME - Pathname=%INST%\CUSTDATA.INI - Section=Registration - Item=Name -end -item: Read INI Value - Variable=COMPANY - Pathname=%INST%\CUSTDATA.INI - Section=Registration - Item=Company -end -item: If/While Statement - Variable=NAME -end -item: Set Variable - Variable=DOBRAND - Value=1 -end -item: Get System Information - Variable=NAME - Flags=00000110 -end -item: Get System Information - Variable=COMPANY - Flags=00000111 -end -item: End Block -end -item: End Block -end -item: Remark - Text=END WIZARD STUFF ----------------------------------------------------------------------------------------------------------------------------- -end -item: Remark -end -item: Remark - Text=Set vrbls for the "Advanced Options" subdialog of Components. -end -item: Set Variable - Variable=SELECT_ADMIN - Value=A -end -item: If/While Statement - Variable=DOADMIN - Value=0 -end -item: Set Variable - Variable=SELECT_ADMIN - Value=B -end -item: End Block -end -item: Remark -end -item: Remark - Text=TASKS values: -end -item: Remark - Text=A: Register file extensions -end -item: Remark - Text=B: Create Start Menu shortcuts -end -item: Set Variable - Variable=TASKS - Value=AB -end -item: Remark -end -item: Remark - Text=COMPONENTS values: -end -item: Remark - Text=A: interpreter and libraries -end -item: Remark - Text=B: Tcl/Tk -end -item: Remark - Text=C: docs -end -item: Remark - Text=D: tools -end -item: Remark - Text=E: test suite -end -item: Set Variable - Variable=COMPONENTS - Value=ABCDE -end -item: Remark -end -item: Remark - Text=March thru the user GUI. -end -item: Wizard Block - Direction Variable=DIRECTION - Display Variable=DISPLAY - Bitmap Pathname=.\installer.bmp - X Position=9 - Y Position=10 - Filler Color=11173759 - Dialog=Select Destination Directory - Dialog=Backup Replaced Files - Dialog=Select Components - Dialog=Select Program Manager Group - Variable= - Variable= - Variable= - Variable=TASKS - Value= - Value= - Value= - Value=B - Compare=0 - Compare=0 - Compare=0 - Compare=3 - Flags=00000011 -end -item: If/While Statement - Variable=DISPLAY - Value=Start Installation -end -item: Set Variable - Variable=SUMMARY - Value=Install directory: %MAINDIR%%CRLF% -end -item: Remark -end -item: If/While Statement - Variable=SELECT_ADMIN - Value=A -end -item: Set Variable - Variable=SUMMARY - Value=%CRLF%Doing admin install.%CRLF% - Flags=00000001 -end -item: Else Statement -end -item: Set Variable - Variable=SUMMARY - Value=%CRLF%Doing non-admin install.%CRLF% - Flags=00000001 -end -item: End Block -end -item: Remark -end -item: If/While Statement - Variable=DOBACKUP - Value=A -end -item: Set Variable - Variable=SUMMARY - Value=%CRLF%Make backups, into %BACKUP%%CRLF% - Flags=00000001 -end -item: Else Statement -end -item: Set Variable - Variable=SUMMARY - Value=%CRLF%Don't make backups.%CRLF% - Flags=00000001 -end -item: End Block -end -item: Remark -end -item: Set Variable - Variable=SUMMARY - Value=%CRLF%Components:%CRLF% - Flags=00000001 -end -item: If/While Statement - Variable=COMPONENTS - Value=A - Flags=00000010 -end -item: Set Variable - Variable=SUMMARY - Value= Python interpreter and libraries%CRLF% - Flags=00000001 -end -item: End Block -end -item: If/While Statement - Variable=COMPONENTS - Value=B - Flags=00000010 -end -item: Set Variable - Variable=SUMMARY - Value= Tcl/Tk (Tkinter, IDLE, pydoc)%CRLF% - Flags=00000001 -end -item: End Block -end -item: If/While Statement - Variable=COMPONENTS - Value=C - Flags=00000010 -end -item: Set Variable - Variable=SUMMARY - Value= Python documentation%CRLF% - Flags=00000001 -end -item: End Block -end -item: If/While Statement - Variable=COMPONENTS - Value=D - Flags=00000010 -end -item: Set Variable - Variable=SUMMARY - Value= Tool and utility scripts%CRLF% - Flags=00000001 -end -item: End Block -end -item: If/While Statement - Variable=COMPONENTS - Value=E - Flags=00000010 -end -item: Set Variable - Variable=SUMMARY - Value= Python test suite%CRLF% - Flags=00000001 -end -item: End Block -end -item: Remark -end -item: If/While Statement - Variable=TASKS - Value=A - Flags=00000010 -end -item: Set Variable - Variable=SUMMARY - Value=%CRLF%Register file extensions.%CRLF% - Flags=00000001 -end -item: Else Statement -end -item: Set Variable - Variable=SUMMARY - Value=%CRLF%Don't register file extensions.%CRLF% - Flags=00000001 -end -item: End Block -end -item: Remark -end -item: If/While Statement - Variable=TASKS - Value=B - Flags=00000010 -end -item: Set Variable - Variable=SUMMARY - Value=%CRLF%Start Menu group: %GROUP%%CRLF% - Flags=00000001 -end -item: Else Statement -end -item: Set Variable - Variable=SUMMARY - Value=%CRLF%No Start Menu shortcuts.%CRLF% - Flags=00000001 -end -item: End Block -end -item: End Block -end -item: Remark -end -item: Custom Dialog Set - Name=Select Destination Directory - Display Variable=DISPLAY - item: Dialog - Title=%APPTITLE% Installation - Title French=Installation de %APPTITLE% - Title German=Installation von %APPTITLE% - Title Spanish=Instalación de %APPTITLE% - Title Italian=Installazione di %APPTITLE% - Width=339 - Height=280 - Font Name=Helv - Font Size=8 - item: Push Button - Rectangle=188 234 244 253 - Variable=DIRECTION - Value=N - Create Flags=01010000000000010000000000000001 - Text=&Next > - Text French=&Suite > - Text German=&Weiter > - Text Spanish=&Siguiente > - Text Italian=&Avanti > - end - item: Push Button - Rectangle=264 234 320 253 - Action=3 - Create Flags=01010000000000010000000000000000 - Text=&Cancel - Text French=&Annuler - Text German=&Abbrechen - Text Spanish=&Cancelar - Text Italian=&Annulla - end - item: Static - Rectangle=10 225 320 226 - Action=3 - Create Flags=01010000000000000000000000000111 - end - item: Static - Rectangle=108 11 323 33 - Create Flags=01010000000000000000000000000000 - Flags=0000000000000001 - Name=Times New Roman - Font Style=-24 0 0 0 700 255 0 0 0 3 2 1 18 - Text=Select Destination Directory - Text French=Sélectionner le répertoire de destination - Text German=Zielverzeichnis wählen - Text Spanish=Seleccione el directorio de destino - Text Italian=Selezionare Directory di destinazione - end - item: Listbox - Rectangle=108 58 321 219 - Variable=MAINDIR - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000100000010000000101000001 - Flags=0000110000001010 - Text=%MAINDIR% - Text= - end - item: Static - Rectangle=108 40 313 58 - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000000000000000000000000000 - Text=Please select a directory for the %APPTITLE% files. - end - end - item: Dialog - Title=Select Destination Directory - Title French=Sélectionner le répertoire de destination - Title German=Zielverzeichnis wählen - Title Spanish=Seleccione el directorio de destino - Title Italian=Selezionare Directory di destinazione - Width=276 - Height=216 - Font Name=Helv - Font Size=8 - item: Listbox - Rectangle=6 6 204 186 - Variable=MAINDIR - Create Flags=01010000100000010000000101000000 - Flags=0000110000100010 - Text=%MAINDIR% - Text French=%MAINDIR% - Text German=%MAINDIR% - Text Spanish=%MAINDIR% - Text Italian=%MAINDIR% - end - item: Push Button - Rectangle=209 8 265 26 - Create Flags=01010000000000010000000000000001 - Text=OK - Text French=OK - Text German=OK - Text Spanish=Aceptar - Text Italian=OK - end - item: Push Button - Rectangle=209 31 265 50 - Variable=MAINDIR - Value=%MAINDIR_SAVE% - Create Flags=01010000000000010000000000000000 - Flags=0000000000000001 - Text=Cancel - Text French=Annuler - Text German=Abbrechen - Text Spanish=Cancelar - Text Italian=Annulla - end - end -end -item: Custom Dialog Set - Name=Backup Replaced Files - Display Variable=DISPLAY - item: Dialog - Title=%APPTITLE% Installation - Title French=Fichiers de Sauvegarde Remplacés - Title German=Sicherungskopie von ersetzten Dateien erstellen - Title Portuguese=Ficheiros substituídos de segurança - Title Spanish=Copias de seguridad de los archivos reemplazados - Title Italian=Backup file sostituiti - Title Danish=Sikkerhedskopiering af erstattede filer - Title Dutch=Vervangen bestanden kopiëren - Title Norwegian=Sikkerhetskopiere erstattede filer - Title Swedish=Säkerhetskopiera utbytta filer - Width=350 - Height=280 - Font Name=Helv - Font Size=8 - item: Push Button - Rectangle=188 234 244 251 - Variable=DIRECTION - Value=N - Create Flags=01010000000000010000000000000001 - Text=&Next > - Text French=&Suivant> - Text German=&Weiter> - Text Portuguese=&Próximo> - Text Spanish=&Siguiente > - Text Italian=&Avanti > - Text Danish=&Næste> - Text Dutch=&Volgende> - Text Norwegian=&Neste> - Text Swedish=&Nästa > - end - item: Push Button - Rectangle=131 234 188 251 - Variable=DIRECTION - Value=B - Create Flags=01010000000000010000000000000000 - Text=< &Back - Text French=<&Retour - Text German=<&Zurück - Text Portuguese=<&Retornar - Text Spanish=<&Retroceder - Text Italian=< &Indietro - Text Danish=<&Tilbage - Text Dutch=<&Terug - Text Norwegian=<&Tilbake - Text Swedish=< &Tillbaka - end - item: Push Button - Rectangle=278 234 330 251 - Action=3 - Create Flags=01010000000000010000000000000000 - Text=Cancel - Text French=Annuler - Text German=Abbrechen - Text Portuguese=Cancelar - Text Spanish=Cancelar - Text Italian=Annulla - Text Danish=Annuller - Text Dutch=Annuleren - Text Norwegian=Avbryt - Text Swedish=Avbryt - end - item: Static - Rectangle=11 221 329 223 - Action=3 - Create Flags=01010000000000000000000000000111 - end - item: Static - Rectangle=108 46 320 98 - Create Flags=01010000000000000000000000000000 - Text=This installation program can create backup copies of all files replaced during the installation. These files will be used when the software is uninstalled and a rollback is requested. If backup copies are not created, you will only be able to uninstall the software and not roll the system back to a previous state. - Text= - Text=Do you want to create backups of replaced files? - Text French=Le programme d'installation peut créer des copies de sauvegarde de tous les fichiers remplacés pendant l'installation. Ces fichiers sont utilisés au cas où le logiciel est désinstallé et que l'on procède à la reprise du système. Si les copies de sauvegarde ne sont pas créées, on ne pourra que désinstaller le logiciel sans reprendre le système à un état précédent. Voulez-vous créer une sauvegarde des fichiers remplacés ? - Text German=Dieses Installationsprogramm kann Sicherungskopien von allen während der Installation ersetzten Dateien erstellen. Diese Dateien werden zur Rückgängigmachung der Installation und bei Anforderung eines Rollbacks verwendet. Ohne Sicherungskopien ist nur eine Rückgängigmachung der Installation möglich, nicht aber ein Rollback des Systems. Sicherungskopien der ersetzten Dateien erstellen? - Text Portuguese=Este programa de instalação pode criar cópias de segurança de todos os ficheiros substituídos durante a instalação. Estes ficheiros serão utilizados quando o programa for desinstalado e for requisitada uma retomada. Se as cópias de segurança não forem criadas, só poderá desinstalar o programa e não pode retomar um estado anterior do sistema. Deseja criar cópias de segurança dos ficheiros substituídos? - Text Spanish=Este programa de instalación puede crear copias de seguridad de todos los archivos reemplazados durante la instalación. Estos archivos se utilizarán cuando se desinstale el software y se solicite volver al estado anterior. Si no se crean copias de seguridad, únicamente podrá desinstalar el software y no podrá devolver el sistema al estado anterior. ¿Desea crear archivos de seguridad de los archivos reemplazados? - Text Italian=Questo programma di installazione può creare copie di backup di tutti i file sostituiti durante l’installazione. Questi file saranno usati quando il software sarà disinstallato e sarà richiesto un ritorno allo stato precedente. Se non crei le copie di backup, potrai solo disinstallare il software, ma non potrai riportare il sistema allo stato precedente. Vuoi creare i file di backup dei file sostituiti? - Text Danish=Dette installationsprogram kan oprette sikkerhedskopier af alle filer, som erstattes under installationen. Disse filer benyttes, når softwaren fjernes, og den tidligere systemkonfiguration genetableres. Hvis der ikke oprettes sikkerhedskopier, kan du kun fjerne den installerede software og ikke genetablere den tidligere systemkonfiguration. Vil du oprette sikkerhedskopier af filer, som erstattes? - Text Dutch=Dit installatieprogramma kan kopieën maken van alle bestanden die tijdens de installatie worden vervangen. Deze worden dan gebruikt als de software-installatie ongedaan wordt gemaakt en u het systeem wilt laten terugkeren naar de oorspronkelijke staat. Als er geen back-up kopieën worden gemaakt, kunt u de software enkel verwijderen maar het systeem niet in de oorspronkelijke staat terugbrengen. Wilt u een back-up maken van de vervangen bestanden? - Text Norwegian=Dette installasjonsprogrammet kan lage sikkerhetskopier av alle filer som blir erstattet under installasjonen. Disse filene vil tas i bruk når programvaren er avinstallert og det er behov for tilbakestilling. Hvis det ikke er laget sikkerhetskopier, kan du kun avinstallere programvaren og ikke stille systemet tilbake til tidligere status. Ønsker du å lage sikkerhetskopier av de filene som blir erstattet nå? - Text Swedish=Installationsprogrammet kan skapa säkerhetskopior av alla filer som byts ut under installationen. Dessa filer kan sedan användas när programvaran avinstalleras och du begär rollback. Om du då inte har några säkerhetskopior kan du bara avinstallera programvaran, inte återskapa systemet i dess tidigare skick. Vill du göra säkerhetskopior av de ersatta filerna? - end - item: Radio Button - Rectangle=141 106 265 136 - Variable=DOBACKUP - Create Flags=01010000000000010000000000001001 - Text=&Yes, make backups - Text=N&o, do not make backups - Text= - Text French=&Oui - Text French=N&on - Text French= - Text German=&Ja - Text German=N&ein - Text German= - Text Portuguese=&Sim - Text Portuguese=Nã&o - Text Portuguese= - Text Spanish=&Sí - Text Spanish=N&o - Text Spanish= - Text Italian=&Sì - Text Italian=N&o - Text Italian= - Text Danish=&Ja - Text Danish=&Nej - Text Danish= - Text Dutch=&Ja - Text Dutch=N&ee - Text Dutch= - Text Norwegian=&Ja - Text Norwegian=&Nei - Text Norwegian= - Text Swedish=&Ja - Text Swedish=N&ej - Text Swedish= - end - item: Static - Control Name=BACK2 - Rectangle=108 173 320 208 - Action=1 - Create Flags=01010000000000000000000000000111 - Text=Backup File Destination Directory - Text French=Répertoire de destination des fichiers de sauvegarde - Text German=Zielverzeichnis für die Sicherungsdatei - Text Portuguese=Directório de destino de ficheiro de segurança - Text Spanish=Directorio de Destino de los Archivos de Seguridad - Text Italian=Directory di destinazione dei file di backup - Text Danish=Destinationsbibliotek til sikkerhedskopier - Text Dutch=Doeldirectory backup-bestand - Text Norwegian=Målkatalog for sikkerhetskopier - Text Swedish=Katalog för säkerhetskopierade filer - end - item: Push Button - Control Name=BACK3 - Rectangle=265 185 318 203 - Variable=BACKUP_SAVE - Value=%BACKUP% - Destination Dialog=1 - Action=2 - Create Flags=01010000000000010000000000000000 - Text=B&rowse... - Text French=P&arcourir - Text German=B&lättern... - Text Portuguese=P&rocurar - Text Spanish=V&isualizar... - Text Italian=Sfoglia... - Text Danish=&Gennemse... - Text Dutch=B&laderen... - Text Norwegian=Bla igjennom - Text Swedish=&Bläddra - end - item: Static - Control Name=BACK4 - Rectangle=129 188 254 200 - Destination Dialog=2 - Create Flags=01010000000000000000000000000000 - Text=%BACKUP% - Text French=%BACKUP% - Text German=%BACKUP% - Text Portuguese=%BACKUP% - Text Spanish=%BACKUP% - Text Italian=%BACKUP% - Text Danish=%BACKUP% - Text Dutch=%BACKUP% - Text Norwegian=%BACKUP% - Text Swedish=%BACKUP% - end - item: Static - Rectangle=108 11 323 36 - Create Flags=01010000000000000000000000000000 - Flags=0000000000000001 - Name=Times New Roman - Font Style=-24 0 0 0 700 255 0 0 0 3 2 1 18 - Text=Backup Replaced Files - Text French=Sélectionner les composants - Text German=Komponenten auswählen - Text Spanish=Seleccione componentes - Text Italian=Selezionare i componenti - end - item: If/While Statement - Variable=DOBACKUP - Value=B - end - item: Set Control Attribute - Control Name=BACK3 - Operation=1 - end - item: Set Control Attribute - Control Name=BACK4 - Operation=1 - end - item: Else Statement - end - item: Set Control Attribute - Control Name=BACK3 - end - item: Set Control Attribute - Control Name=BACK4 - end - item: End Block - end - end - item: Dialog - Title=Select Destination Directory - Title French=Choisissez le répertoire de destination - Title German=Zielverzeichnis wählen - Title Portuguese=Seleccionar Directório de Destino - Title Spanish=Seleccione el Directorio de Destino - Title Italian=Seleziona Directory di destinazione - Title Danish=Vælg Destinationsbibliotek - Title Dutch=Kies Doeldirectory - Title Norwegian=Velg målkatalog - Title Swedish=Välj destinationskalatog - Width=276 - Height=216 - Font Name=Helv - Font Size=8 - item: Listbox - Rectangle=6 3 200 186 - Variable=BACKUP - Create Flags=01010000100000010000000101000000 - Flags=0000110000100010 - Text=%BACKUP% - Text= - Text French=%BACKUP% - Text French= - Text German=%BACKUP% - Text German= - Text Portuguese=%BACKUP% - Text Portuguese= - Text Spanish=%BACKUP% - Text Spanish= - Text Italian=%BACKUP% - Text Italian= - Text Danish=%BACKUP% - Text Danish= - Text Dutch=%BACKUP% - Text Dutch= - Text Norwegian=%BACKUP% - Text Norwegian= - Text Swedish=%BACKUP% - Text Swedish= - end - item: Push Button - Rectangle=209 8 265 26 - Create Flags=01010000000000010000000000000001 - Text=OK - Text French=OK - Text German=OK - Text Portuguese=OK - Text Spanish=ACEPTAR - Text Italian=OK - Text Danish=OK - Text Dutch=OK - Text Norwegian=OK - Text Swedish=OK - end - item: Push Button - Rectangle=209 31 265 50 - Variable=BACKUP - Value=%BACKUP_SAVE% - Create Flags=01010000000000010000000000000000 - Flags=0000000000000001 - Text=Cancel - Text French=Annuler - Text German=Abbrechen - Text Portuguese=Cancelar - Text Spanish=Cancelar - Text Italian=Annulla - Text Danish=Slet - Text Dutch=Annuleren - Text Norwegian=Avbryt - Text Swedish=Avbryt - end - end -end -item: Custom Dialog Set - Name=Select Components - Display Variable=DISPLAY - item: Dialog - Title=%APPTITLE% Installation - Title French=Installation de %APPTITLE% - Title German=Installation von %APPTITLE% - Title Spanish=Instalación de %APPTITLE% - Title Italian=Installazione di %APPTITLE% - Width=339 - Height=280 - Font Name=Helv - Font Size=8 - item: Push Button - Rectangle=188 234 244 253 - Variable=DIRECTION - Value=N - Create Flags=01010000000000010000000000000001 - Text=&Next > - Text French=&Suite > - Text German=&Weiter > - Text Spanish=&Siguiente > - Text Italian=&Avanti > - end - item: Push Button - Rectangle=131 234 188 253 - Variable=DIRECTION - Value=B - Create Flags=01010000000000010000000000000000 - Text=< &Back - Text French=< &Retour - Text German=< &Zurück - Text Spanish=< &Atrás - Text Italian=< &Indietro - end - item: Push Button - Rectangle=264 234 320 253 - Action=3 - Create Flags=01010000000000010000000000000000 - Text=&Cancel - Text French=&Annuler - Text German=&Abbrechen - Text Spanish=&Cancelar - Text Italian=&Annulla - end - item: Checkbox - Rectangle=108 66 313 156 - Variable=COMPONENTS - Create Flags=01010000000000010000000000000011 - Flags=0000000000000110 - Text=Python interpreter and libraries - Text=Tcl/Tk (Tkinter, IDLE, pydoc) - Text=Python HTML docs - Text=Python utility scripts (Tools/) - Text=Python test suite (Lib/test/) - Text= - Text French=Python interpreter, library and IDLE - Text French=Python HTML docs - Text French=Python utility scripts (Tools/) - Text French=Python test suite (Lib/test/) - Text French= - Text German=Python interpreter, library and IDLE - Text German=Python HTML docs - Text German=Python utility scripts (Tools/) - Text German=Python test suite (Lib/test/) - Text German= - Text Spanish=Python interpreter, library and IDLE - Text Spanish=Python HTML docs - Text Spanish=Python utility scripts (Tools/) - Text Spanish=Python test suite (Lib/test/) - Text Spanish= - Text Italian=Python interpreter, library and IDLE - Text Italian=Python HTML docs - Text Italian=Python utility scripts (Tools/) - Text Italian=Python test suite (Lib/test/) - Text Italian= - end - item: Static - Rectangle=108 45 320 63 - Create Flags=01010000000000000000000000000000 - Text=Choose which components to install by checking the boxes below. - Text French=Choisissez les composants que vous voulez installer en cochant les cases ci-dessous. - Text German=Wählen Sie die zu installierenden Komponenten, indem Sie in die entsprechenden Kästchen klicken. - Text Spanish=Elija los componentes que desee instalar marcando los cuadros de abajo. - Text Italian=Scegliere quali componenti installare selezionando le caselle sottostanti. - end - item: Push Button - Rectangle=188 203 269 220 - Destination Dialog=1 - Action=2 - Enabled Color=00000000000000000000000011111111 - Create Flags=01010000000000010000000000000000 - Text=Advanced Options ... - end - item: Static - Rectangle=10 225 320 226 - Action=3 - Create Flags=01010000000000000000000000000111 - end - item: Static - Rectangle=108 10 323 43 - Create Flags=01010000000000000000000000000000 - Flags=0000000000000001 - Name=Times New Roman - Font Style=-24 0 0 0 700 255 0 0 0 3 2 1 18 - Text=Select Components - Text French=Sélectionner les composants - Text German=Komponenten auswählen - Text Spanish=Seleccione componentes - Text Italian=Selezionare i componenti - end - item: Static - Rectangle=251 180 311 193 - Variable=COMPONENTS - Value=MAINDIR - Create Flags=01010000000000000000000000000010 - end - item: Static - Rectangle=251 168 311 179 - Variable=COMPONENTS - Create Flags=01010000000000000000000000000010 - end - item: Static - Rectangle=123 168 234 181 - Create Flags=01010000000000000000000000000000 - Text=Disk Space Required: - Text French=Espace disque requis : - Text German=Notwendiger Speicherplatz: - Text Spanish=Espacio requerido en el disco: - Text Italian=Spazio su disco necessario: - end - item: Static - Rectangle=123 180 234 193 - Create Flags=01010000000000000000000000000000 - Text=Disk Space Remaining: - Text French=Espace disque disponible : - Text German=Verbleibender Speicherplatz: - Text Spanish=Espacio en disco disponible: - Text Italian=Spazio su disco disponibile: - end - item: Static - Rectangle=108 158 320 196 - Action=1 - Create Flags=01010000000000000000000000000111 - end - item: If/While Statement - Variable=DLG_EVENT_TYPE - Value=VERIFY - end - item: Remark - Text=If they're installing Tcl/Tk, Tools, or the test suite, doesn't make much sense unless they're installing Python too. - end - item: If/While Statement - Variable=COMPONENTS - Value=BDE - Flags=00001010 - end - item: If/While Statement - Variable=COMPONENTS - Value=A - Flags=00000011 - end - item: Display Message - Title=Are you sure? - Text=Installing Tcl/Tk, Tools or the test suite doesn't make much sense unless you install the Python interpreter and libraries too. - Text= - Text=Click Yes if that's really what you want. - Flags=00101101 - end - item: Remark - Text=Nothing -- just proceed to the next dialog. - end - item: Else Statement - end - item: Remark - Text=Return to the dialog. - end - item: Set Variable - Variable=DLG_EVENT_TYPE - end - item: End Block - end - item: End Block - end - item: End Block - end - item: End Block - end - end - item: Dialog - Title=Advanced Options - Width=339 - Height=213 - Font Name=Helv - Font Size=8 - item: Radio Button - Control Name=ADMIN2 - Rectangle=11 46 90 76 - Variable=SELECT_ADMIN - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000000000010000000000001001 - Text=Admin install - Text=Non-Admin installl - Text= - end - item: Push Button - Rectangle=188 170 244 189 - Variable=DIRECTION - Value=N - Create Flags=01010000000000010000000000000001 - Text=OK - Text French=&Suite > - Text German=&Weiter > - Text Spanish=&Siguiente > - Text Italian=&Avanti > - end - item: Static - Rectangle=5 3 326 83 - Action=1 - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000000000000000000000000111 - end - item: Static - Control Name=ADMIN1 - Rectangle=11 11 321 45 - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000000000000000000000000000 - Text=By default, the install records settings in the per-machine area of the registry (HKLM), and installs the Python and C runtime DLLs to %SYS32%. Choose "Non-Admin install" if you would prefer settings made in the per-user registry (HKCU), and DLLs installed in %MAINDIR%. - end - item: Static - Rectangle=5 90 326 157 - Action=1 - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000000000000000000000000111 - end - item: Checkbox - Rectangle=11 121 243 151 - Variable=TASKS - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000000000010000000000000011 - Text=Register file extensions (.py, .pyw, .pyc, .pyo) - Text=Create Start Menu shortcuts - Text= - end - item: Static - Rectangle=11 103 320 121 - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000000000000000000000000000 - Text=Choose tasks to perform by checking the boxes below. - end - item: If/While Statement - Variable=DLG_EVENT_TYPE - Value=INIT - end - item: If/While Statement - Variable=DOADMIN - Value=1 - end - item: Set Control Attribute - Control Name=ADMIN2 - end - item: Else Statement - end - item: Set Control Text - Control Name=ADMIN1 - Control Text=This section is available only if logged in to an account with Administrator privileges. - end - item: Set Control Attribute - Control Name=ADMIN2 - Operation=1 - end - item: End Block - end - item: End Block - end - end -end -item: Custom Dialog Set - Name=Select Program Manager Group - Display Variable=DISPLAY - item: Dialog - Title=%APPTITLE% Installation - Title French=Installation de %APPTITLE% - Title German=Installation von %APPTITLE% - Title Spanish=Instalación de %APPTITLE% - Title Italian=Installazione di %APPTITLE% - Width=339 - Height=280 - Font Name=Helv - Font Size=8 - item: Push Button - Rectangle=188 234 244 253 - Variable=DIRECTION - Value=N - Create Flags=01010000000000010000000000000001 - Text=&Next > - Text French=&Suite > - Text German=&Weiter > - Text Spanish=&Siguiente > - Text Italian=&Avanti > - end - item: Push Button - Rectangle=131 234 188 253 - Variable=DIRECTION - Value=B - Create Flags=01010000000000010000000000000000 - Flags=0000000000000001 - Text=< &Back - Text French=< &Retour - Text German=< &Zurück - Text Spanish=< &Atrás - Text Italian=< &Indietro - end - item: Push Button - Rectangle=264 234 320 253 - Action=3 - Create Flags=01010000000000010000000000000000 - Text=&Cancel - Text French=&Annuler - Text German=&Abbrechen - Text Spanish=&Cancelar - Text Italian=&Annulla - end - item: Static - Rectangle=10 225 320 226 - Action=3 - Create Flags=01010000000000000000000000000111 - end - item: Static - Rectangle=108 10 323 53 - Create Flags=01010000000000000000000000000000 - Flags=0000000000000001 - Name=Times New Roman - Font Style=-24 0 0 0 700 255 0 0 0 3 2 1 18 - Text=Select Start Menu Group - Text French=Sélectionner le groupe du Gestionnaire de programme - Text German=Bestimmung der Programm-Managergruppe - Text Spanish=Seleccione grupo del Administrador de programas - Text Italian=Selezionare il gruppo ProgMan - end - item: Static - Rectangle=108 35 320 65 - Create Flags=01010000000000000000000000000000 - Text=Enter the name of the Start Menu program group to which to add the %APPTITLE% icons: - Text French=Entrez le nom du groupe du Gestionnaire de programme dans lequel vous souhaitez ajouter les icônes de %APPTITLE% : - Text German=Geben Sie den Namen der Programmgruppe ein, der das Symbol %APPTITLE% hinzugefügt werden soll: - Text Spanish=Escriba el nombre del grupo del Administrador de programas en el que desea agregar los iconos de %APPTITLE%: - Text Italian=Inserire il nome del gruppo Program Manager per aggiungere le icone %APPTITLE% a: - end - item: Combobox - Rectangle=108 56 320 219 - Variable=GROUP - Create Flags=01010000001000010000001100000001 - Flags=0000000000000001 - Text=%GROUP% - Text= - Text French=%GROUP% - Text German=%GROUP% - Text Spanish=%GROUP% - Text Italian=%GROUP% - end - end -end -item: Custom Dialog Set - Name=Start Installation - Display Variable=DISPLAY - item: Dialog - Title=%APPTITLE% Installation - Title French=Installation de %APPTITLE% - Title German=Installation von %APPTITLE% - Title Spanish=Instalación de %APPTITLE% - Title Italian=Installazione di %APPTITLE% - Width=339 - Height=280 - Font Name=Helv - Font Size=8 - item: Push Button - Rectangle=188 234 244 253 - Variable=DIRECTION - Value=N - Create Flags=01010000000000010000000000000001 - Text=&Next > - Text French=&Suite > - Text German=&Weiter > - Text Spanish=&Siguiente > - Text Italian=&Avanti > - end - item: Push Button - Rectangle=131 234 188 253 - Variable=DIRECTION - Value=B - Create Flags=01010000000000010000000000000000 - Text=< &Back - Text French=< &Retour - Text German=< &Zurück - Text Spanish=< &Atrás - Text Italian=< &Indietro - end - item: Push Button - Rectangle=264 234 320 253 - Action=3 - Create Flags=01010000000000010000000000000000 - Text=&Cancel - Text French=&Annuler - Text German=&Abbrechen - Text Spanish=&Cancelar - Text Italian=&Annulla - end - item: Static - Rectangle=10 225 320 226 - Action=3 - Create Flags=01010000000000000000000000000111 - end - item: Static - Rectangle=108 10 323 53 - Create Flags=01010000000000000000000000000000 - Flags=0000000000000001 - Name=Times New Roman - Font Style=-24 0 0 0 700 255 0 0 0 3 2 1 18 - Text=Ready to Install! - Text French=Prêt à installer ! - Text German=Installationsbereit! - Text Spanish=¡Preparado para la instalación! - Text Italian=Pronto per l'installazione! - end - item: Static - Rectangle=108 40 320 62 - Create Flags=01010000000000000000000000000000 - Text=Click the Next button to install %APPTITLE%, or the Back button to change choices: - Text French=Vous êtes maintenant prêt à installer les fichiers %APPTITLE%. - Text French= - Text French=Cliquez sur le bouton Suite pour commencer l'installation ou sur le bouton Retour pour entrer les informations d'installation à nouveau. - Text German=Sie können %APPTITLE% nun installieren. - Text German= - Text German=Klicken Sie auf "Weiter", um mit der Installation zu beginnen. Klicken Sie auf "Zurück", um die Installationsinformationen neu einzugeben. - Text Spanish=Ya está listo para instalar %APPTITLE%. - Text Spanish= - Text Spanish=Presione el botón Siguiente para comenzar la instalación o presione Atrás para volver a ingresar la información para la instalación. - Text Italian=Ora è possibile installare %APPTITLE%. - Text Italian= - Text Italian=Premere il pulsante Avanti per avviare l'installazione o il pulsante Indietro per reinserire le informazioni di installazione. - end - item: Editbox - Rectangle=108 66 324 219 - Help Context=16711681 - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000100000000001100011000100 - Text=%SUMMARY% - end - end -end -item: Remark -end -item: If/While Statement - Variable=DISPLAY - Value=Select Destination Directory -end -item: Remark - Text=User may have changed MAINDIR, so reset BACKUP to match. -end -item: Set Variable - Variable=BACKUP - Value=%MAINDIR%\BACKUP -end -item: End Block -end -item: Remark -end -item: End Block -end -item: Remark -end -item: Remark - Text=BEGIN WIZARD STUFF ----------------------------------------------------------------------------------------------------------------------------- -end -item: Remark - Text=When the BACKUP feature is enabled, the BACKUPDIR is initialized -end -item: If/While Statement - Variable=DOBACKUP - Value=A -end -item: Set Variable - Variable=BACKUPDIR - Value=%BACKUP% -end -item: End Block -end -item: Remark - Text=The BRANDING information is written to the INI file on the installation media. -end -item: If/While Statement - Variable=BRANDING - Value=1 -end -item: If/While Statement - Variable=DOBRAND - Value=1 -end -item: Edit INI File - Pathname=%INST%\CUSTDATA.INI - Settings=[Registration] - Settings=NAME=%NAME% - Settings=COMPANY=%COMPANY% - Settings= -end -item: End Block -end -item: End Block -end -item: Remark - Text=Begin writing to the INSTALL.LOG -end -item: Open/Close INSTALL.LOG -end -item: Remark - Text=Check free disk space calculates free disk space as well as component sizes. -end -item: Remark - Text=It should be located before all Install File actions. -end -item: Check Disk Space - Component=COMPONENTS -end -item: Remark - Text=This include script allows uninstall support -end -item: Remark - Text=Note from Tim: this is our own Uninstal.wse, a copy of Wise's except -end -item: Remark - Text=it writes to HKCU (instead of HKLM) if the user doesn't have admin privs. -end -item: Include Script - Pathname=.\Uninstal.wse -end -item: Remark - Text=Note from Tim: these seeming no-ops actually convert to short filenames. -end -item: Set Variable - Variable=COMMON - Value=%COMMON% - Flags=00010100 -end -item: Set Variable - Variable=MAINDIR - Value=%MAINDIR% - Flags=00010100 -end -item: Remark - Text=This IF/THEN/ELSE reads the correct registry entries for shortcut/icon placement -end -item: Check Configuration - Flags=10111011 -end -item: Get Registry Key Value - Variable=STARTUPDIR - Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - Default=%WIN%\Start Menu\Programs\StartUp - Value Name=StartUp - Flags=00000010 -end -item: Get Registry Key Value - Variable=DESKTOPDIR - Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - Default=%WIN%\Desktop - Value Name=Desktop - Flags=00000010 -end -item: Get Registry Key Value - Variable=STARTMENUDIR - Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - Default=%WIN%\Start Menu - Value Name=Start Menu - Flags=00000010 -end -item: Get Registry Key Value - Variable=GROUPDIR - Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - Default=%WIN%\Start Menu\Programs - Value Name=Programs - Flags=00000010 -end -item: Get Registry Key Value - Variable=CSTARTUPDIR - Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - Default=%STARTUPDIR% - Value Name=Common Startup - Flags=00000100 -end -item: Get Registry Key Value - Variable=CDESKTOPDIR - Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - Default=%DESKTOPDIR% - Value Name=Common Desktop - Flags=00000100 -end -item: Get Registry Key Value - Variable=CSTARTMENUDIR - Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - Default=%STARTMENUDIR% - Value Name=Common Start Menu - Flags=00000100 -end -item: Get Registry Key Value - Variable=CGROUPDIR - Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - Default=%GROUPDIR% - Value Name=Common Programs - Flags=00000100 -end -item: Else Statement -end -item: Remark - Text=Note from Tim: the Wizard left this block empty! -end -item: Remark - Text=Perhaps it's only relevant on Windows 3.1. -end -item: End Block -end -item: Remark - Text=END WIZARD STUFF ----------------------------------------------------------------------------------------------------------------------------- -end -item: Remark -end -item: If/While Statement - Variable=SELECT_ADMIN - Value=B -end -item: Remark - Text=The user chose a non-admin install in "Advanced Options". -end -item: Remark - Text=This should come after the include of Uninstal.wse above, because -end -item: Remark - Text=writing uninstall info to HKCU is ineffective except under Win2K. -end -item: Set Variable - Variable=DOADMIN - Value=0 -end -item: End Block -end -item: Remark -end -item: Set Variable - Variable=CGROUP_SAVE - Value=%GROUP% -end -item: If/While Statement - Variable=TASKS - Value=B - Flags=00000010 -end -item: If/While Statement - Variable=DOADMIN - Value=1 -end -item: Set Variable - Variable=GROUP - Value=%CGROUPDIR%\%GROUP% -end -item: Else Statement -end -item: Set Variable - Variable=GROUP - Value=%GROUPDIR%\%GROUP% -end -item: End Block -end -item: End Block -end -item: Remark -end -item: Remark - Text=Long section to install files. -end -item: Remark -end -item: If/While Statement - Variable=DOADMIN - Value=1 -end -item: Set Variable - Variable=DLLDEST - Value=%SYS32% -end -item: Else Statement -end -item: Set Variable - Variable=DLLDEST - Value=%MAINDIR% -end -item: End Block -end -item: Remark -end -item: Remark - Text=Install the license even if they deselect everything . -end -item: Install File - Source=..\license - Destination=%MAINDIR%\LICENSE.txt - Flags=0000000000000010 -end -item: Install File - Source=..\readme - Destination=%MAINDIR%\README.txt - Flags=0000000000000010 -end -item: Install File - Source=..\misc\news - Destination=%MAINDIR%\NEWS.txt - Flags=0000000000000010 -end -item: Remark - Text=Icons -- always install so that the uninstaller can use them for its own display. -end -item: Install File - Source=..\pc\pycon.ico - Destination=%MAINDIR%\pycon.ico - Flags=0000000010000010 -end -item: Install File - Source=..\pc\pyc.ico - Destination=%MAINDIR%\pyc.ico - Flags=0000000010000010 -end -item: Install File - Source=..\pc\py.ico - Destination=%MAINDIR%\py.ico - Flags=0000000010000010 -end -item: Remark -end -item: Remark - Text=These arrange to (recursively!) delete all .pyc and .pyo files at uninstall time. -end -item: Remark - Text=This "does the right thing": any directories left empty at the end are removed. -end -item: Add Text to INSTALL.LOG - Text=File Tree: %MAINDIR%\*.pyc -end -item: Add Text to INSTALL.LOG - Text=File Tree: %MAINDIR%\*.pyo -end -item: Remark -end -item: Remark - Text=A: interpreter and libraries -end -item: If/While Statement - Variable=COMPONENTS - Value=A - Flags=00000010 -end -item: Remark - Text=Executables -end -item: Install File - Source=.\python.exe - Destination=%MAINDIR%\python.exe - Flags=0000000000000010 -end -item: Install File - Source=.\pythonw.exe - Destination=%MAINDIR%\pythonw.exe - Flags=0000000000000010 -end -item: Install File - Source=.\w9xpopen.exe - Destination=%MAINDIR%\w9xpopen.exe - Flags=0000000000000010 -end -item: Remark -end -item: Remark - Text=Extension module DLLs (.pyd); keep in synch with libs directory next -end -item: Install File - Source=.\_winreg.pyd - Destination=%MAINDIR%\DLLs\_winreg.pyd - Description=Extension modules - Flags=0000000000000010 -end -item: Install File - Source=.\_csv.pyd - Destination=%MAINDIR%\DLLs\_csv.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\_sre.pyd - Destination=%MAINDIR%\DLLs\_sre.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\_ssl.pyd - Destination=%MAINDIR%\DLLs\_ssl.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\_symtable.pyd - Destination=%MAINDIR%\DLLs\_symtable.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\_testcapi.pyd - Destination=%MAINDIR%\DLLs\_testcapi.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\_tkinter.pyd - Destination=%MAINDIR%\DLLs\_tkinter.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\_socket.pyd - Destination=%MAINDIR%\DLLs\_socket.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\_bsddb.pyd - Destination=%MAINDIR%\DLLs\_bsddb.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\bz2.pyd - Destination=%MAINDIR%\DLLs\bz2.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\datetime.pyd - Destination=%MAINDIR%\DLLs\datetime.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\mmap.pyd - Destination=%MAINDIR%\DLLs\mmap.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\parser.pyd - Destination=%MAINDIR%\DLLs\parser.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\pyexpat.pyd - Destination=%MAINDIR%\DLLs\pyexpat.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\select.pyd - Destination=%MAINDIR%\DLLs\select.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\unicodedata.pyd - Destination=%MAINDIR%\DLLs\unicodedata.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\winsound.pyd - Destination=%MAINDIR%\DLLs\winsound.pyd - Flags=0000000000000010 -end -item: Install File - Source=.\zlib.pyd - Destination=%MAINDIR%\DLLs\zlib.pyd - Flags=0000000000000010 -end -item: Remark -end -item: Remark - Text=Link libraries (.lib); keep in synch with DLLs above, except that the Python lib lives here. -end -item: Install File - Source=.\_winreg.lib - Destination=%MAINDIR%\libs\_winreg.lib - Description=Link library files - Flags=0000000000000010 -end -item: Install File - Source=.\_csv.lib - Destination=%MAINDIR%\libs\_csv.lib - Flags=0000000000000010 -end -item: Install File - Source=.\_sre.lib - Destination=%MAINDIR%\libs\_sre.lib - Flags=0000000000000010 -end -item: Install File - Source=.\_ssl.lib - Destination=%MAINDIR%\libs\_ssl.lib - Flags=0000000000000010 -end -item: Install File - Source=.\_symtable.lib - Destination=%MAINDIR%\libs\_symtable.lib - Flags=0000000000000010 -end -item: Install File - Source=.\_testcapi.lib - Destination=%MAINDIR%\libs\_testcapi.lib - Flags=0000000000000010 -end -item: Install File - Source=.\_tkinter.lib - Destination=%MAINDIR%\libs\_tkinter.lib - Description=Extension modules - Flags=0000000000000010 -end -item: Install File - Source=.\_socket.lib - Destination=%MAINDIR%\libs\_socket.lib - Flags=0000000000000010 -end -item: Install File - Source=.\_bsddb.lib - Destination=%MAINDIR%\libs\_bsddb.lib - Flags=0000000000000010 -end -item: Install File - Source=.\bz2.lib - Destination=%MAINDIR%\libs\bz2.lib - Flags=0000000000000010 -end -item: Install File - Source=.\datetime.lib - Destination=%MAINDIR%\libs\datetime.lib - Flags=0000000000000010 -end -item: Install File - Source=.\mmap.lib - Destination=%MAINDIR%\libs\mmap.lib - Flags=0000000000000010 -end -item: Install File - Source=.\parser.lib - Destination=%MAINDIR%\libs\parser.lib - Flags=0000000000000010 -end -item: Install File - Source=.\pyexpat.lib - Destination=%MAINDIR%\libs\pyexpat.lib - Flags=0000000000000010 -end -item: Install File - Source=.\select.lib - Destination=%MAINDIR%\libs\select.lib - Flags=0000000000000010 -end -item: Install File - Source=.\unicodedata.lib - Destination=%MAINDIR%\libs\unicodedata.lib - Flags=0000000000000010 -end -item: Install File - Source=.\winsound.lib - Destination=%MAINDIR%\libs\winsound.lib - Flags=0000000000000010 -end -item: Install File - Source=.\zlib.lib - Destination=%MAINDIR%\libs\zlib.lib - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=.\python%_pymajor_%%_pyminor_%.lib - Destination=%MAINDIR%\libs\python%_PYMAJOR_%%_PYMINOR_%.lib - Flags=0000000000000010 -end -item: Remark -end -item: Remark - Text=Main Python DLL -end -item: Remark - Text=Tell Wise it's OK to delete the Python DLL at uninstall time, -end -item: Remark - Text=despite that we (may) write it into a system directory. -end -item: Add Text to INSTALL.LOG - Text=Non-System File: -end -item: Install File - Source=.\python%_pymajor_%%_pyminor_%.dll - Destination=%DLLDEST%\python%_PYMAJOR_%%_PYMINOR_%.dll - Flags=0000000000000010 -end -item: Remark -end -item: Remark - Text=Libraries (Lib/) -end -item: Install File - Source=..\lib\*.py - Destination=%MAINDIR%\Lib - Description=Library Modules - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\lib\bsddb\*.py - Destination=%MAINDIR%\Lib\bsddb - Description=Berkeley database package - Flags=0000000100000010 -end -item: Remark -end -item: Install File - Source=..\lib\compiler\*.py - Destination=%MAINDIR%\Lib\compiler - Description=Python compiler written in Python - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\lib\distutils\*.py - Destination=%MAINDIR%\Lib\distutils - Description=Distribution utility modules - Flags=0000000000000010 -end -item: Install File - Source=..\lib\distutils\readme - Destination=%MAINDIR%\Lib\distutils\README.txt - Flags=0000000000000010 -end -item: Install File - Source=..\lib\distutils\command\*.py - Destination=%MAINDIR%\Lib\distutils\command - Flags=0000000000000010 -end -item: Install File - Source=..\lib\distutils\command\wininst.exe - Destination=%MAINDIR%\Lib\distutils\command\wininst.exe - Flags=0000000000000010 -end -item: Install File - Source=..\lib\distutils\command\command_template - Destination=%MAINDIR%\Lib\distutils\command\command_template - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\lib\email\*.py - Destination=%MAINDIR%\Lib\email - Description=Library email package - Flags=0000000000000010 -end -item: Install File - Source=..\lib\email\test\*.py - Destination=%MAINDIR%\Lib\email\test - Description=email tests - Flags=0000000000000010 -end -item: Install File - Source=..\lib\email\test\data\*.txt - Destination=%MAINDIR%\Lib\email\test\data - Description=email test data - Flags=0000000000000010 -end -item: Install File - Source=..\lib\email\test\data\*.gif - Destination=%MAINDIR%\Lib\email\test\data - Description=email test data - Flags=0000000000000010 -end -item: Install File - Source=..\lib\email\test\data\*.au - Destination=%MAINDIR%\Lib\email\test\data - Description=email test data - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\lib\encodings\*.py - Destination=%MAINDIR%\Lib\encodings - Description=Unicode encoding tables - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\lib\hotshot\*.py - Destination=%MAINDIR%\Lib\hotshot - Description=Fast Python profiler - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\lib\lib-old\*.py - Destination=%MAINDIR%\Lib\lib-old - Description=Obsolete modules - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\lib\lib-tk\*.py - Destination=%MAINDIR%\Lib\lib-tk - Description=Tkinter related library modules - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\lib\logging\*.py - Destination=%MAINDIR%\Lib\logging - Description=Logging package - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\lib\site-packages\readme - Destination=%MAINDIR%\Lib\site-packages\README.txt - Description=Site packages - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\lib\xml\*.py - Destination=%MAINDIR%\Lib\xml - Description=XML support packages - Flags=0000000000000010 -end -item: Install File - Source=..\lib\xml\dom\*.py - Destination=%MAINDIR%\Lib\xml\dom - Flags=0000000000000010 -end -item: Install File - Source=..\lib\xml\parsers\*.py - Destination=%MAINDIR%\Lib\xml\parsers - Flags=0000000000000010 -end -item: Install File - Source=..\lib\xml\sax\*.py - Destination=%MAINDIR%\Lib\xml\sax - Flags=0000000000000010 -end -item: Remark -end -item: Remark - Text=C Include files -end -item: Install File - Source=..\include\*.h - Destination=%MAINDIR%\include - Description=Header files - Flags=0000000000000010 -end -item: Install File - Source=..\pc\pyconfig.h - Destination=%MAINDIR%\include\pyconfig.h - Description=Header files (pyconfig.h) - Flags=0000000000000010 -end -item: Remark -end -item: Remark - Text=Microsoft C runtime libraries -end -item: Install File - Source=%_SYS_%\MSVCIRT.DLL - Destination=%DLLDEST%\MSVCIRT.DLL - Description=Visual C++ Runtime DLLs - Flags=0000011000010011 -end -item: Install File - Source=%_SYS_%\MSVCRT.DLL - Destination=%DLLDEST%\MSVCRT.DLL - Description=Visual C++ Runtime DLLs - Flags=0000011000010011 -end -item: End Block -end -item: Remark -end -item: Remark - Text=B: Tcl/Tk (Tkinter, IDLE, pydoc) -end -item: If/While Statement - Variable=COMPONENTS - Value=B - Flags=00000010 -end -item: Remark - Text=Tcl/Tk -end -item: Install File - Source=..\..\%_tcldir_%\bin\*.dll - Destination=%MAINDIR%\DLLs - Description=Tcl/Tk binaries and libraries - Flags=0000000000000010 -end -item: Install File - Source=..\..\%_tcldir_%\lib\*.* - Destination=%MAINDIR%\tcl - Description=Tcl/Tk binaries and libraries - Flags=0000000100000010 -end -item: Remark -end -item: Remark - Text=IDLE -end -item: Install File - Source=..\Lib\idlelib\*.py - Destination=%MAINDIR%\Lib\idlelib - Description=Integrated DeveLopment Environment for Python - Flags=0000000000000010 -end -item: Install File - Source=..\Lib\idlelib\*.txt - Destination=%MAINDIR%\Lib\idlelib - Description=Integrated DeveLopment Environment for Python - Flags=0000000000000010 -end -item: Install File - Source=..\Lib\idlelib\*.def - Destination=%MAINDIR%\Lib\idlelib - Description=Integrated DeveLopment Environment for Python - Flags=0000000000000010 -end -item: Install File - Source=..\Lib\idlelib\Icons\* - Destination=%MAINDIR%\Lib\idlelib\Icons - Description=Integrated DeveLopment Environment for Python - Flags=0000000000000010 -end -item: Install File - Source=..\Tools\scripts\idle - Destination=%MAINDIR%\Lib\idlelib\idle.pyw - Description=IDLE bootstrap script - Flags=0000000000000010 -end -item: Remark -end -item: Remark - Text=Windows pydoc driver -end -item: Install File - Source=..\tools\scripts\*.pyw - Destination=%MAINDIR%\Tools\Scripts - Description=Windows pydoc driver - Flags=0000000000000010 -end -item: End Block -end -item: Remark -end -item: Remark - Text=C: docs -end -item: If/While Statement - Variable=COMPONENTS - Value=C - Flags=00000010 -end -item: Install File - Source=%_DOC_%\*.* - Destination=%MAINDIR%\Doc - Description=Python Documentation (HTML) - Flags=0000000100000010 -end -item: End Block -end -item: Remark -end -item: Remark - Text=D: tools -end -item: If/While Statement - Variable=COMPONENTS - Value=D - Flags=00000010 -end -item: Install File - Source=..\tools\scripts\*.py - Destination=%MAINDIR%\Tools\Scripts - Description=Utility Scripts - Flags=0000000000000010 -end -item: Install File - Source=..\tools\scripts\*.doc - Destination=%MAINDIR%\Tools\Scripts - Description=Utility Scripts - Flags=0000000000000010 -end -item: Install File - Source=..\tools\scripts\readme - Destination=%MAINDIR%\Tools\Scripts\README.txt - Description=Utility Scripts - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\tools\webchecker\*.py - Destination=%MAINDIR%\Tools\webchecker - Description=Web checker tool - Flags=0000000000000010 -end -item: Install File - Source=..\tools\webchecker\readme - Destination=%MAINDIR%\Tools\webchecker\README.txt - Description=Web checker tool - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\tools\versioncheck\*.py - Destination=%MAINDIR%\Tools\versioncheck - Description=Version checker tool - Flags=0000000000000010 -end -item: Install File - Source=..\tools\versioncheck\readme - Destination=%MAINDIR%\Tools\versioncheck\README.txt - Description=Version checker tool - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\tools\pynche\*.py - Destination=%MAINDIR%\Tools\pynche - Description=pynche color editor - Flags=0000000000000010 -end -item: Install File - Source=..\tools\pynche\*.txt - Destination=%MAINDIR%\Tools\pynche - Description=pynche color editor - Flags=0000000000000010 -end -item: Install File - Source=..\tools\pynche\x\*.txt - Destination=%MAINDIR%\Tools\pynche\X - Description=pynche color editor - X files - Flags=0000000000000010 -end -item: Install File - Source=..\tools\pynche\readme - Destination=%MAINDIR%\Tools\pynche\README.txt - Description=pynche color editor - README - Flags=0000000100000010 -end -item: Install File - Source=..\tools\pynche\pynche - Destination=%MAINDIR%\Tools\pynche\pynche.py - Description=pynche color editor - main - Flags=0000000100000010 -end -item: Install File - Source=..\tools\pynche\pynche.pyw - Destination=%MAINDIR%\Tools\pynche\pynche.pyw - Description=pynche color editor - noconsole main - Flags=0000000100000010 -end -item: Remark -end -item: Install File - Source=..\tools\i18n\*.py - Destination=%MAINDIR%\Tools\i18n - Description=Internationalization helpers - Flags=0000000000000010 -end -item: End Block -end -item: Remark -end -item: Remark - Text=E: test suite -end -item: If/While Statement - Variable=COMPONENTS - Value=E - Flags=00000010 -end -item: Install File - Source=..\lib\test\audiotest.au - Destination=%MAINDIR%\Lib\test\audiotest.au - Description=Python Test files - Flags=0000000000000010 -end -item: Install File - Source=..\lib\test\*.uue - Destination=%MAINDIR%\Lib\test - Description=Python Test files - Flags=0000000000000010 -end -item: Install File - Source=..\lib\test\*.py - Destination=%MAINDIR%\Lib\test - Description=Python Test files - Flags=0000000000000010 -end -item: Install File - Source=..\lib\test\*.xml - Destination=%MAINDIR%\Lib\test - Description=Python Test files - Flags=0000000000000010 -end -item: Install File - Source=..\lib\test\*.out - Destination=%MAINDIR%\Lib\test - Description=Python Test files - Flags=0000000000000010 -end -item: Install File - Source=..\lib\test\*.bz2 - Destination=%MAINDIR%\Lib\test - Description=Python Test files - Flags=0000000000000010 -end -item: Install File - Source=..\lib\test\*.tar - Destination=%MAINDIR%\Lib\test - Description=Python Test files - Flags=0000000000000010 -end -item: Install File - Source=..\lib\test\*.gz - Destination=%MAINDIR%\Lib\test - Description=Python Test files - Flags=0000000000000010 -end -item: Install File - Source=..\lib\test\*.txt - Destination=%MAINDIR%\Lib\test - Description=Python Test files - Flags=0000000000000010 -end -item: Remark -end -item: Install File - Source=..\lib\test\output\*.* - Destination=%MAINDIR%\Lib\test\output - Description=Python Test output files - Flags=0000000000000010 -end -item: End Block -end -item: Remark -end -item: Remark - Text=DONE with file copying. -end -item: Remark - Text=The rest is registry and Start Menu fiddling. -end -item: Remark -end -item: If/While Statement - Variable=COMPONENTS - Value=A - Flags=00000010 -end -item: If/While Statement - Variable=TASKS - Value=A - Flags=00000010 -end -item: Remark - Text=Register file extensions. As usual, Admin privs get in the way, but with a twist: -end -item: Remark - Text=You don't need admin privs to write to HKEY_CLASSES_ROOT *except* under Win2K. -end -item: Remark - Text=On Win2K, a user without Admin privs has to register extensions under HKCU\Software\CLASSES instead. -end -item: Remark - Text=But while you can *do* that under other flavors of Windows too, it has no useful effect except in Win2K. -end -item: Set Variable - Variable=USE_HKCR - Value=1 -end -item: Check Configuration - Flags=11110010 -end -item: If/While Statement - Variable=DOADMIN - Value=0 -end -item: Set Variable - Variable=USE_HKCR - Value=0 -end -item: End Block -end -item: End Block -end -item: If/While Statement - Variable=USE_HKCR - Value=1 -end -item: Remark - Text=File types. -end -item: Edit Registry - Total Keys=1 - Key=Python.File - New Value=Python File -end -item: Edit Registry - Total Keys=1 - Key=Python.File\shell\open\command - New Value=%MAINDIR%\python.exe "%%1" %%* -end -item: Edit Registry - Total Keys=1 - Key=Python.File\DefaultIcon - New Value=%MAINDIR%\Py.ico -end -item: Remark -end -item: Edit Registry - Total Keys=1 - Key=Python.NoConFile - New Value=Python File (no console) -end -item: Edit Registry - Total Keys=1 - Key=Python.NoConFile\shell\open\command - New Value=%MAINDIR%\pythonw.exe "%%1" %%* -end -item: Edit Registry - Total Keys=1 - Key=Python.NoConFile\DefaultIcon - New Value=%MAINDIR%\Py.ico -end -item: Remark -end -item: Edit Registry - Total Keys=1 - Key=Python.CompiledFile - New Value=Compiled Python File -end -item: Edit Registry - Total Keys=1 - Key=Python.CompiledFile\shell\open\command - New Value=%MAINDIR%\python.exe "%%1" %%* -end -item: Edit Registry - Total Keys=1 - Key=Python.CompiledFile\DefaultIcon - New Value=%MAINDIR%\pyc.ico -end -item: Remark -end -item: Remark - Text=File extensions. -end -item: Edit Registry - Total Keys=1 - Key=.py - New Value=Python.File -end -item: Edit Registry - Total Keys=1 - Key=.py - New Value=text/plain - Value Name=Content Type -end -item: Remark -end -item: Edit Registry - Total Keys=1 - Key=.pyw - New Value=Python.NoConFile -end -item: Edit Registry - Total Keys=1 - Key=.pyw - New Value=text/plain - Value Name=Content Type -end -item: Remark -end -item: Edit Registry - Total Keys=1 - Key=.pyc - New Value=Python.CompiledFile -end -item: Edit Registry - Total Keys=1 - Key=.pyo - New Value=Python.CompiledFile -end -item: Else Statement -end -item: Remark - Text=File types. -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\Python.File - New Value=Python File - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\Python.File\shell\open\command - New Value=%MAINDIR%\python.exe "%%1" %%* - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\Python.File\DefaultIcon - New Value=%MAINDIR%\Py.ico - Root=1 -end -item: Remark -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\Python.NoConFile - New Value=Python File (no console) - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\Python.NoConFile\shell\open\command - New Value=%MAINDIR%\pythonw.exe "%%1" %%* - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\Python.NoConFile\DefaultIcon - New Value=%MAINDIR%\Py.ico - Root=1 -end -item: Remark -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\Python.CompiledFile - New Value=Compiled Python File - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\Python.CompiledFile\shell\open\command - New Value=%MAINDIR%\python.exe "%%1" %%* - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\Python.CompiledFile\DefaultIcon - New Value=%MAINDIR%\pyc.ico - Root=1 -end -item: Remark -end -item: Remark - Text=File extensions. -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\.py - New Value=Python.File - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\.py - New Value=text/plain - Value Name=Content Type - Root=1 -end -item: Remark -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\.pyw - New Value=Python.NoConFile - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\.pyw - New Value=text/plain - Value Name=Content Type - Root=1 -end -item: Remark -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\.pyc - New Value=Python.CompiledFile - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\.pyo - New Value=Python.CompiledFile - Root=1 -end -item: End Block -end -item: Remark -end -item: Remark - Text=If we're installing IDLE, also set an Edit context menu action to use IDLE, for .py and .pyw files. -end -item: If/While Statement - Variable=COMPONENTS - Value=B - Flags=00000010 -end -item: If/While Statement - Variable=USE_HKCR - Value=1 -end -item: Edit Registry - Total Keys=1 - Key=Python.NoConFile\shell\Edit with IDLE\command - New Value=%MAINDIR%\pythonw.exe %MAINDIR%\Lib\idlelib\idle.pyw -n -e "%%1" -end -item: Edit Registry - Total Keys=1 - Key=Python.File\shell\Edit with IDLE\command - New Value=%MAINDIR%\pythonw.exe %MAINDIR%\Lib\idlelib\idle.pyw -n -e "%%1" -end -item: Else Statement -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\Python.NoConFile\shell\Edit with IDLE\command - New Value=%MAINDIR%\pythonw.exe %MAINDIR%\Lib\idlelib\idle.pyw -n -e "%%1" - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\CLASSES\Python.File\shell\Edit with IDLE\command - New Value=%MAINDIR%\pythonw.exe %MAINDIR%\Lib\idlelib\idle.pyw -n -e "%%1" - Root=1 -end -item: End Block -end -item: End Block -end -item: End Block -end -item: Remark -end -item: Remark - Text=Register Python paths. -end -item: Remark - Text=Write to HKLM for admin, else HKCU. Keep these blocks otherwise identical! -end -item: If/While Statement - Variable=DOADMIN - Value=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\Python\PythonCore\CurrentVersion - Root=130 -end -item: Edit Registry - Total Keys=1 - Key=Software\Python\PythonCore\%PY_VERSION%\InstallPath - New Value=%MAINDIR% - Root=2 -end -item: Edit Registry - Total Keys=1 - Key=Software\Python\PythonCore\%PY_VERSION%\InstallPath\InstallGroup - New Value=%CGROUP_SAVE% - New Value= - Root=2 -end -item: Edit Registry - Total Keys=1 - Key=Software\Python\PythonCore\%PY_VERSION%\PythonPath - New Value=%MAINDIR%\Lib;%MAINDIR%\DLLs;%MAINDIR%\Lib\lib-tk - New Value= - Root=2 -end -item: Edit Registry - Total Keys=1 - Key=Software\Python\PythonCore\%PY_VERSION%\Modules - Root=2 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\App Paths\Python.exe - New Value=%MAINDIR%\Python.exe - Root=2 -end -item: Else Statement -end -item: Edit Registry - Total Keys=1 - Key=Software\Python\PythonCore\CurrentVersion - Root=129 -end -item: Edit Registry - Total Keys=1 - Key=Software\Python\PythonCore\%PY_VERSION%\InstallPath - New Value=%MAINDIR% - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\Python\PythonCore\%PY_VERSION%\InstallPath\InstallGroup - New Value=%CGROUP_SAVE% - New Value= - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\Python\PythonCore\%PY_VERSION%\PythonPath - New Value=%MAINDIR%\Lib;%MAINDIR%\DLLs;%MAINDIR%\Lib\lib-tk - New Value= - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\Python\PythonCore\%PY_VERSION%\Modules - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\App Paths\Python.exe - New Value=%MAINDIR%\Python.exe - Root=1 -end -item: End Block -end -item: End Block -end -item: Remark -end -item: Remark - Text=Registry fiddling for docs. -end -item: Remark - Text=Write to HKLM for admin, else HKCU. Keep these blocks otherwise identical! -end -item: If/While Statement - Variable=COMPONENTS - Value=C - Flags=00000010 -end -item: If/While Statement - Variable=DOADMIN - Value=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\Python\PythonCore\%PY_VERSION%\Help\Main Python Documentation - New Value=%MAINDIR%\Doc\index.html - Root=2 -end -item: Else Statement -end -item: Edit Registry - Total Keys=1 - Key=Software\Python\PythonCore\%PY_VERSION%\Help\Main Python Documentation - New Value=%MAINDIR%\Doc\index.html - Root=1 -end -item: End Block -end -item: End Block -end -item: Remark -end -item: Remark - Text=Set the app publisher and URL entries for Win2K add/remove. -end -item: Remark - Text=It doesn't hurt on other systems. -end -item: Remark - Text=As usual, write to HKLM or HKCU depending on Admin privs. -end -item: Remark - Text=CAUTION: If you set this info on the "Windows 2000" page (step 6) of the -end -item: Remark - Text=Installation Expert, it only shows up in the "If" block below. Keep in synch! -end -item: If/While Statement - Variable=DOADMIN - Value=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=http://www.python.org/ - Value Name=HelpLink - Root=2 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=PythonLabs at Zope Corporation - Value Name=Publisher - Root=2 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=http://www.python.org/ - Value Name=URLInfoAbout - Root=2 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=%PYVER_STRING% - Value Name=DisplayVersion - Root=2 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=%MAINDIR%\py.ico,-0 - Value Name=DisplayIcon - Root=2 -end -item: Else Statement -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=http://www.python.org/ - Value Name=HelpLink - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=PythonLabs at Zope Corporation - Value Name=Publisher - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=http://www.python.org/ - Value Name=URLInfoAbout - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=%PYVER_STRING% - Value Name=DisplayVersion - Root=1 -end -item: Edit Registry - Total Keys=1 - Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\%APPTITLE% - New Value=%MAINDIR%\py.ico,-0 - Value Name=DisplayIcon - Root=1 -end -item: End Block -end -item: Remark -end -item: Remark - Text=Populate Start Menu group -end -item: If/While Statement - Variable=TASKS - Value=B - Flags=00000010 -end -item: Remark - Text=Shortcut to installer no matter what. -end -item: Create Shortcut - Source=%MAINDIR%\unwise.exe - Destination=%GROUP%\Uninstall Python.lnk - Working Directory=%MAINDIR% - Key Type=1536 - Flags=00000001 -end -item: Remark -end -item: If/While Statement - Variable=COMPONENTS - Value=A - Flags=00000010 -end -item: Create Shortcut - Source=%MAINDIR%\python.exe - Destination=%GROUP%\Python (command line).lnk - Working Directory=%MAINDIR% - Icon Pathname=%MAINDIR%\pycon.ico - Key Type=1536 - Flags=00000001 -end -item: End Block -end -item: Remark -end -item: If/While Statement - Variable=COMPONENTS - Value=B - Flags=00000010 -end -item: Create Shortcut - Source=%MAINDIR%\pythonw.exe - Destination=%GROUP%\IDLE (Python GUI).lnk - Command Options="%MAINDIR%\Lib\idlelib\idle.pyw" - Working Directory=%MAINDIR% - Key Type=1536 - Flags=00000001 -end -item: Create Shortcut - Source=%MAINDIR%\pythonw.exe - Destination=%GROUP%\Module Docs.lnk - Command Options="%MAINDIR%\Tools\Scripts\pydocgui.pyw" - Working Directory=%MAINDIR% - Key Type=1536 - Flags=00000001 -end -item: End Block -end -item: Remark -end -item: If/While Statement - Variable=COMPONENTS - Value=C - Flags=00000010 -end -item: Create Shortcut - Source=%MAINDIR%\Doc\index.html - Destination=%GROUP%\Python Manuals.lnk - Working Directory=%MAINDIR% - Key Type=1536 - Flags=00000001 -end -item: End Block -end -item: End Block -end -item: Remark -end -item: Remark - Text=I don't think we need this, but have always done it. -end -item: Self-Register OCXs/DLLs - Description=Updating System Configuration, Please Wait... -end -item: Remark -end -remarked item: Remark - Text=Don't enable "Delete in-use files". Here's what happens: -end -remarked item: Remark - Text=Install Python; uninstall Python; install Python again. Reboot the machine. -end -remarked item: Remark - Text=Now UNWISE.EXE is missing. I think this is a Wise bug, but so it goes. -end -remarked item: Add Text to INSTALL.LOG - Text=Delete in-use files: On -end -item: Remark -end -item: Wizard Block - Direction Variable=DIRECTION - Display Variable=DISPLAY - Bitmap Pathname=.\installer.bmp - X Position=9 - Y Position=10 - Filler Color=11173759 - Flags=00000011 -end -item: Custom Dialog Set - Name=Finished - Display Variable=DISPLAY - item: Dialog - Title=%APPTITLE% Installation - Title French=Installation de %APPTITLE% - Title German=Installation von %APPTITLE% - Title Spanish=Instalación de %APPTITLE% - Title Italian=Installazione di %APPTITLE% - Width=339 - Height=280 - Font Name=Helv - Font Size=8 - item: Push Button - Rectangle=188 234 244 253 - Variable=DIRECTION - Value=N - Create Flags=01010000000000010000000000000001 - Text=&Finish - Text French=&Fin - Text German=&Weiter - Text Spanish=&Terminar - Text Italian=&Fine - end - item: Push Button - Rectangle=264 234 320 253 - Variable=DISABLED - Value=! - Action=3 - Create Flags=01010000000000010000000000000000 - Text=&Cancel - Text French=&Annuler - Text German=&Abbrechen - Text Spanish=&Cancelar - Text Italian=&Annulla - end - item: Static - Rectangle=108 10 323 48 - Create Flags=01010000000000000000000000000000 - Flags=0000000000000001 - Name=Times New Roman - Font Style=-24 0 0 0 700 255 0 0 0 3 2 1 18 - Text=Installation Completed! - Text French=Installation terminée ! - Text German=Die Installation ist abgeschlossen! - Text Spanish=¡Instalación terminada! - Text Italian=Installazione completata! - end - item: Static - Rectangle=108 44 320 82 - Create Flags=01010000000000000000000000000000 - Text=%APPTITLE% has been successfully installed. - Text= - Text=Press the Finish button to exit this installation. - Text French=%APPTITLE% est maintenant installé. - Text French= - Text French=Cliquez sur le bouton Fin pour quitter l'installation. - Text German=%APPTITLE% wurde erfolgreich installiert. - Text German= - Text German=Klicken Sie auf "Weiter", um die Installation zu beenden. - Text Spanish=%APPTITLE% se ha instalado con éxito. - Text Spanish= - Text Spanish=Presione el botón Terminar para salir de esta instalación. - Text Italian=L'installazione %APPTITLE% è stata portata a termine con successo. - Text Italian= - Text Italian=Premere il pulsante Fine per uscire dall'installazione. - end - item: Static - Rectangle=10 225 320 226 - Action=3 - Create Flags=01010000000000000000000000000111 - end - item: Static - Rectangle=106 105 312 210 - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000000000000000000000000000 - Text=Special Windows thanks to: - Text= - Text=Wise Solutions, for the use of InstallMaster 8.1. - Text= http://www.wisesolutions.com/ - Text= - Text= - Text=LettError, Erik van Blokland, for the Python for Windows graphic. - Text= http://www.letterror.com/ - Text= - Text= - Text=Mark Hammond, without whose years of freely shared Windows expertise, Python for Windows would still be Python for DOS. - end - item: Static - Rectangle=106 95 312 96 - Action=3 - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000000000000000000000001001 - end - end -end -item: End Block -end -item: New Event - Name=Cancel -end -item: Remark - Text=This include script supports a rollback to preinstallation state if the user chooses to cancel before the installation is complete. -end -item: Include Script - Pathname=%_WISE_%\INCLUDE\rollback.wse -end diff --git a/PCbuild8/pythoncore.vcproj b/PCbuild8/pythoncore.vcproj deleted file mode 100644 index 16a250e..0000000 --- a/PCbuild8/pythoncore.vcproj +++ /dev/null @@ -1,1946 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/pythoncore/getbuildinfo.vsprops b/PCbuild8/pythoncore/getbuildinfo.vsprops new file mode 100644 index 0000000..2aff8d3 --- /dev/null +++ b/PCbuild8/pythoncore/getbuildinfo.vsprops @@ -0,0 +1,12 @@ + + + + diff --git a/PCbuild8/pythoncore/pythoncore.vcproj b/PCbuild8/pythoncore/pythoncore.vcproj new file mode 100644 index 0000000..150277a --- /dev/null +++ b/PCbuild8/pythoncore/pythoncore.vcproj @@ -0,0 +1,1880 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/pythonw.vcproj b/PCbuild8/pythonw.vcproj deleted file mode 100644 index f692363..0000000 --- a/PCbuild8/pythonw.vcproj +++ /dev/null @@ -1,383 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/pythonw/pythonw.vcproj b/PCbuild8/pythonw/pythonw.vcproj new file mode 100644 index 0000000..9e2dc7b --- /dev/null +++ b/PCbuild8/pythonw/pythonw.vcproj @@ -0,0 +1,660 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/readme.txt b/PCbuild8/readme.txt index fa4fcb5..eb8cd31 100644 --- a/PCbuild8/readme.txt +++ b/PCbuild8/readme.txt @@ -2,44 +2,66 @@ Building Python using VC++ 8.0 ------------------------------------- This directory is used to build Python for Win32 platforms, e.g. Windows 95, 98 and NT. It requires Microsoft Visual C++ 8.0 -(a.k.a. Visual Studio 2005). +(a.k.a. Visual Studio 2005). There are two Platforms defined, Win32 +and x64. (For other Windows platforms and compilers, see ../PC/readme.txt.) All you need to do is open the workspace "pcbuild.sln" in MSVC++, select the Debug or Release setting (using "Solution Configuration" from -the "Standard" toolbar"), and build the projects. +the "Standard" toolbar"), and build the solution. -The proper order to build subprojects: +A .bat file, build.bat, is provided to simplify command line builds. -1) pythoncore (this builds the main Python DLL and library files, - python26.{dll, lib} in Release mode) - NOTE: in previous releases, this subproject was - named after the release number, e.g. python20. +Some of the subprojects rely on external libraries and won't build +unless you have them installed. -2) python (this builds the main Python executable, - python.exe in Release mode) - -3) the other subprojects, as desired or needed (note: you probably don't - want to build most of the other subprojects, unless you're building an - entire Python distribution from scratch, or specifically making changes - 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. +Binary files go into PCBuild8\$(PlatformName)($ConfigurationName), +which will be something like Win32Debug, Win32Release, x64Release, etc. When using the Debug setting, the output files have a _d added to 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. +PROFILER GUIDED OPTIMIZATION +---------------------------- +There are two special solution configurations for Profiler Guided +Optimization. Careful use of this has been shown to yield more than +10% extra speed. +1) Build the PGInstrument solution configuration. This will yield +binaries in the win32PGO or x64PGO folders. (You may want do start +by erasing any .pgc files there, present from earlier runs.) +2) Instrument the binaries. Do this by for example running the test +suite: win32PGO\python.exe ..\lib\test\regrtest.py. This will excercise +python thoroughly. +3) Build the PGUpdate solution configuration (You may need to ask it +to rebuild.) This will incorporate the information gathered in step 2 +and produce new binaries in the same win32PGO or x64pPGO folders. +4) (optional) You can continue to build the PGUpdate configuration as +you work on python. It will continue to use the data from step 2, even +if you add or modify files as part of your work. Thus, it makes sense to +run steps 1 and 2 maybe once a week, and then use step 3) for all regular +work. + +A .bat file, build_pgo.bat is included to automate this process + +You can convince yourself of the benefits of the PGO by comparing the +results of the python testsuite with the regular Release build. + + +C RUNTIME +--------- +Visual Studio 2005 uses version 8 of the C runtime. The executables are +linked to a CRT "side by side" assembly which must be present on the target +machine. This is avalible under the VC/Redist folder of your visual studio +distribution. Note that ServicePack1 of Visual Studio 2005 has a different +version than the original. On XP and later operating systems that support +side-by-side assemblies it is not enough to have the msvcrt80.dll present, +it has to be there as a whole assembly, that is, a folder with the .dll +and a .manifest. Also, a check is made for the correct version. +Therefore, one should distribute this assembly with the dlls, and keep +it in the same directory. For compatibility with older systems, one should +also set the PATH to this directory so that the dll can be found. +For more info, see the Readme in the VC/Redist folder. + SUBPROJECTS ----------- @@ -267,164 +289,22 @@ _ssl build_ssl.py/MSVC isn't clever enough to clean OpenSSL - you must do this by hand. -Building for Itanium --------------------- - -The project files support a ReleaseItanium configuration which creates -Win64/Itanium binaries. For this to work, you need to install the Platform -SDK, in particular the 64-bit support. This includes an Itanium compiler -(future releases of the SDK likely include an AMD64 compiler as well). -In addition, you need the Visual Studio plugin for external C compilers, -from http://sf.net/projects/vsextcomp. The plugin will wrap cl.exe, to -locate the proper target compiler, and convert compiler options -accordingly. The project files require atleast version 0.8. Building for AMD64 ------------------ -The build process for the ReleaseAMD64 configuration is very similar -to the Itanium configuration; make sure you use the latest version of -vsextcomp. - -Building Python Using the free MS Toolkit Compiler --------------------------------------------------- - -The build process for Visual C++ can be used almost unchanged with the free MS -Toolkit Compiler. This provides a way of building Python using freely -available software. - -Requirements - - To build Python, the following tools are required: - - * The Visual C++ Toolkit Compiler - from http://msdn.microsoft.com/visualc/vctoolkit2003/ - * A recent Platform SDK - from http://www.microsoft.com/downloads/details.aspx?FamilyID=484269e2-3b89-47e3-8eb7-1f2be6d7123a - * The .NET 1.1 SDK - from http://www.microsoft.com/downloads/details.aspx?FamilyID=9b3a2ca6-3647-4070-9f41-a333c6b9181d - - [Does anyone have better URLs for the last 2 of these?] - - The toolkit compiler is needed as it is an optimising compiler (the - compiler supplied with the .NET SDK is a non-optimising version). The - platform SDK is needed to provide the Windows header files and libraries - (the Windows 2003 Server SP1 edition, typical install, is known to work - - other configurations or versions are probably fine as well). The .NET 1.1 - SDK is needed because it contains a version of msvcrt.dll which links to - the msvcr71.dll CRT. Note that the .NET 2.0 SDK is NOT acceptable, as it - references msvcr80.dll. - - All of the above items should be installed as normal. - - If you intend to build the openssl (needed for the _ssl extension) you - will need the C runtime sources installed as part of the platform SDK. - - In addition, you will need Nant, available from - http://nant.sourceforge.net. The 0.85 release candidate 3 version is known - to work. This is the latest released version at the time of writing. Later - "nightly build" versions are known NOT to work - it is not clear at - present whether future released versions will work. - -Setting up the environment - - Start a platform SDK "build environment window" from the start menu. The - "Windows XP 32-bit retail" version is known to work. - - Add the following directories to your PATH: - * The toolkit compiler directory - * The SDK "Win64" binaries directory - * The Nant directory - Add to your INCLUDE environment variable: - * The toolkit compiler INCLUDE directory - Add to your LIB environment variable: - * The toolkit compiler LIB directory - * The .NET SDK Visual Studio 2003 VC7\lib directory - - The following commands should set things up as you need them: - - rem Set these values according to where you installed the software - set TOOLKIT=C:\Program Files\Microsoft Visual C++ Toolkit 2003 - set SDK=C:\Program Files\Microsoft Platform SDK - set NET=C:\Program Files\Microsoft Visual Studio .NET 2003 - set NANT=C:\Utils\Nant - - set PATH=%TOOLKIT%\bin;%PATH%;%SDK%\Bin\win64;%NANT%\bin - set INCLUDE=%TOOLKIT%\include;%INCLUDE% - set LIB=%TOOLKIT%\lib;%NET%\VC7\lib;%LIB% - - The "win64" directory from the SDK is added to supply executables such as - "cvtres" and "lib", which are not available elsewhere. The versions in the - "win64" directory are 32-bit programs, so they are fine to use here. - - That's it. To build Python (the core only, no binary extensions which - depend on external libraries) you just need to issue the command - - nant -buildfile:python.build all - - from within the PCBuild directory. - -Extension modules - - To build those extension modules which require external libraries - (_tkinter, bz2, _bsddb, _sqlite3, _ssl) you can follow the instructions - for the Visual Studio build above, with a few minor modifications. These - instructions have only been tested using the sources in the Python - subversion repository - building from original sources should work, but - has not been tested. - - For each extension module you wish to build, you should remove the - associated include line from the excludeprojects section of pc.build. - - The changes required are: - - _tkinter - The tix makefile (tix-8.4.0\win\makefile.vc) must be modified to - remove references to TOOLS32. The relevant lines should be changed to - read: - cc32 = cl.exe - link32 = link.exe - include32 = - The remainder of the build instructions will work as given. - - bz2 - No changes are needed - - _bsddb - The file db.build should be copied from the Python PCBuild directory - to the directory db-4.4.20\build_win32. - - The file db_static.vcproj in db-4.4.20\build_win32 should be edited to - remove the string "$(SolutionDir)" - this occurs in 2 places, only - relevant for 64-bit builds. (The edit is required as otherwise, nant - wants to read the solution file, which is not in a suitable form). - - The bsddb library can then be build with the command - nant -buildfile:db.build all - run from the db-4.4.20\build_win32 directory. - - _sqlite3 - No changes are needed. However, in order for the tests to succeed, a - copy of sqlite3.dll must be downloaded, and placed alongside - python.exe. - - _ssl - The documented build process works as written. However, it needs a - copy of the file setargv.obj, which is not supplied in the platform - SDK. However, the sources are available (in the crt source code). To - build setargv.obj, proceed as follows: +Select x64 as the destination platform. - Copy setargv.c, cruntime.h and internal.h from %SDK%\src\crt to a - temporary directory. - Compile using "cl /c /I. /MD /D_CRTBLD setargv.c" - Copy the resulting setargv.obj to somewhere on your LIB environment - (%SDK%\lib is a reasonable place). - - With setargv.obj in place, the standard build process should work - fine. YOUR OWN EXTENSION DLLs ----------------------- If you want to create your own extension module DLL, there's an example with easy-to-follow instructions in ../PC/example/; read the file readme.txt there first. +Also, you can simply use Visual Studio to "Add new project to solution". +Elect to create a win32 project, .dll, empty project. +This will create a subdirectory with a .vcproj file in it. Now, You can +simply copy most of another .vcproj, like _test_capi/_test_capi.vcproj over +(you can't just copy and rename it, since the target will have a unique GUID.) +At some point we want to be able to provide a template for creating a +project. diff --git a/PCbuild8/rmpyc.py b/PCbuild8/rmpyc.py index 43c8576..c3410f8 100644 --- a/PCbuild8/rmpyc.py +++ b/PCbuild8/rmpyc.py @@ -1,4 +1,5 @@ # Remove all the .pyc and .pyo files under ../Lib. +import sys def deltree(root): @@ -21,5 +22,9 @@ def deltree(root): return npyc, npyo -npyc, npyo = deltree("../Lib") +path = "../Lib" +if len(sys.argv) > 1: + path = sys.argv[1] + +npyc, npyo = deltree(path) print npyc, ".pyc deleted,", npyo, ".pyo deleted" diff --git a/PCbuild8/rt.bat b/PCbuild8/rt.bat index 2e0aba3..8927879 100644 --- a/PCbuild8/rt.bat +++ b/PCbuild8/rt.bat @@ -2,6 +2,8 @@ rem Run Tests. Run the regression test suite. rem Usage: rt [-d] [-O] [-q] regrtest_args rem -d Run Debug build (python_d.exe). Else release build. +rem -pgo Run PGO build, e.g. for instrumentation +rem -x64 Run the x64 version, otherwise win32 rem -O Run python.exe or python_d.exe (see -d) with -O. rem -q "quick" -- normally the tests are run twice, the first time rem after deleting all the .py[co] files reachable from Lib/. @@ -24,16 +26,21 @@ rem rt -u "network,largefile" setlocal -set exe=python +set platf=win32 +set exe=python.exe set qmode= set dashO= +set conf=Release PATH %PATH%;..\..\tcltk\bin :CheckOpts if "%1"=="-O" (set dashO=-O) & shift & goto CheckOpts if "%1"=="-q" (set qmode=yes) & shift & goto CheckOpts -if "%1"=="-d" (set exe=python_d) & shift & goto CheckOpts +if "%1"=="-d" (set exe=python_d.exe) & (set conf=Debug) & shift & goto CheckOpts +if "%1"=="-x64" (set platf=x64) & shift & goto CheckOpts +if "%1"=="-pgo" (set conf=PGO) & shift & goto CheckOpts +set exe=%platf%%conf%\%exe% set cmd=%exe% %dashO% -E -tt ../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9 if defined qmode goto Qmode diff --git a/PCbuild8/select.vcproj b/PCbuild8/select.vcproj deleted file mode 100644 index 72888cb..0000000 --- a/PCbuild8/select.vcproj +++ /dev/null @@ -1,379 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/select/select.vcproj b/PCbuild8/select/select.vcproj new file mode 100644 index 0000000..a20a18b --- /dev/null +++ b/PCbuild8/select/select.vcproj @@ -0,0 +1,644 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/unicodedata.vcproj b/PCbuild8/unicodedata.vcproj deleted file mode 100644 index 75d7483..0000000 --- a/PCbuild8/unicodedata.vcproj +++ /dev/null @@ -1,371 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/unicodedata/unicodedata.vcproj b/PCbuild8/unicodedata/unicodedata.vcproj new file mode 100644 index 0000000..8e9bb5e --- /dev/null +++ b/PCbuild8/unicodedata/unicodedata.vcproj @@ -0,0 +1,636 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCbuild8/w9xpopen.vcproj b/PCbuild8/w9xpopen.vcproj deleted file mode 100644 index c159750..0000000 --- a/PCbuild8/w9xpopen.vcproj +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/winsound.vcproj b/PCbuild8/winsound.vcproj deleted file mode 100644 index 6ccb43b..0000000 --- a/PCbuild8/winsound.vcproj +++ /dev/null @@ -1,375 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCbuild8/winsound/winsound.vcproj b/PCbuild8/winsound/winsound.vcproj new file mode 100644 index 0000000..c46ba2a --- /dev/null +++ b/PCbuild8/winsound/winsound.vcproj @@ -0,0 +1,644 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Python/ast.c b/Python/ast.c index 6f62b6c..82eaeff 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -248,6 +248,8 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, goto error; asdl_seq_SET(stmts, 0, Pass(n->n_lineno, n->n_col_offset, arena)); + if (!asdl_seq_GET(stmts, 0)) + goto error; return Interactive(stmts, arena); } else { @@ -278,6 +280,8 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, return Interactive(stmts, arena); } default: + PyErr_Format(PyExc_SystemError, + "invalid node %d for PyAST_FromNode", TYPE(n)); goto error; } error: diff --git a/Python/ceval.c b/Python/ceval.c index 3bb2178..df3fa79 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -487,7 +487,6 @@ volatile int _Py_Ticker = 100; PyObject * PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals) { - /* XXX raise SystemError if globals is NULL */ return PyEval_EvalCodeEx(co, globals, locals, (PyObject **)NULL, 0, diff --git a/Python/thread_nt.h b/Python/thread_nt.h index 27fca72..9445529 100644 --- a/Python/thread_nt.h +++ b/Python/thread_nt.h @@ -15,72 +15,16 @@ typedef struct NRMUTEX { HANDLE hevent ; } NRMUTEX, *PNRMUTEX ; -typedef PVOID WINAPI interlocked_cmp_xchg_t(PVOID *dest, PVOID exc, PVOID comperand) ; - -/* Sorry mate, but we haven't got InterlockedCompareExchange in Win95! */ -static PVOID WINAPI -interlocked_cmp_xchg(PVOID *dest, PVOID exc, PVOID comperand) -{ - static LONG spinlock = 0 ; - PVOID result ; - DWORD dwSleep = 0; - - /* Acqire spinlock (yielding control to other threads if cant aquire for the moment) */ - while(InterlockedExchange(&spinlock, 1)) - { - // Using Sleep(0) can cause a priority inversion. - // Sleep(0) only yields the processor if there's - // another thread of the same priority that's - // ready to run. If a high-priority thread is - // trying to acquire the lock, which is held by - // a low-priority thread, then the low-priority - // thread may never get scheduled and hence never - // free the lock. NT attempts to avoid priority - // inversions by temporarily boosting the priority - // of low-priority runnable threads, but the problem - // can still occur if there's a medium-priority - // thread that's always runnable. If Sleep(1) is used, - // then the thread unconditionally yields the CPU. We - // only do this for the second and subsequent even - // iterations, since a millisecond is a long time to wait - // if the thread can be scheduled in again sooner - // (~100,000 instructions). - // Avoid priority inversion: 0, 1, 0, 1,... - Sleep(dwSleep); - dwSleep = !dwSleep; - } - result = *dest ; - if (result == comperand) - *dest = exc ; - /* Release spinlock */ - spinlock = 0 ; - return result ; -} ; - -static interlocked_cmp_xchg_t *ixchg; BOOL InitializeNonRecursiveMutex(PNRMUTEX mutex) { - if (!ixchg) - { - /* Sorely, Win95 has no InterlockedCompareExchange API (Win98 has), so we have to use emulation */ - HANDLE kernel = GetModuleHandle("kernel32.dll") ; - if (!kernel || (ixchg = (interlocked_cmp_xchg_t *)GetProcAddress(kernel, "InterlockedCompareExchange")) == NULL) - ixchg = interlocked_cmp_xchg ; - } - mutex->owned = -1 ; /* No threads have entered NonRecursiveMutex */ mutex->thread_id = 0 ; mutex->hevent = CreateEvent(NULL, FALSE, FALSE, NULL) ; return mutex->hevent != NULL ; /* TRUE if the mutex is created */ } -#ifdef InterlockedCompareExchange -#undef InterlockedCompareExchange -#endif -#define InterlockedCompareExchange(dest,exchange,comperand) (ixchg((dest), (exchange), (comperand))) - VOID DeleteNonRecursiveMutex(PNRMUTEX mutex) { @@ -98,7 +42,7 @@ EnterNonRecursiveMutex(PNRMUTEX mutex, BOOL wait) /* InterlockedIncrement(&mutex->owned) == 0 means that no thread currently owns the mutex */ if (!wait) { - if (InterlockedCompareExchange((PVOID *)&mutex->owned, (PVOID)0, (PVOID)-1) != (PVOID)-1) + if (InterlockedCompareExchange(&mutex->owned, 0, -1) != -1) return WAIT_TIMEOUT ; ret = WAIT_OBJECT_0 ; } @@ -196,7 +140,10 @@ PyThread_start_new_thread(void (*func)(void *), void *arg) if (obj.done == NULL) return -1; - rv = _beginthread(bootstrap, _pythread_stacksize, &obj); + rv = _beginthread(bootstrap, + Py_SAFE_DOWNCAST(_pythread_stacksize, + Py_ssize_t, int), + &obj); if (rv == (Py_uintptr_t)-1) { /* I've seen errno == EAGAIN here, which means "there are * too many threads". diff --git a/Tools/msi/msilib.py b/Tools/msi/msilib.py index d7b86cc..548b640 100644 --- a/Tools/msi/msilib.py +++ b/Tools/msi/msilib.py @@ -5,7 +5,7 @@ import win32com.client.gencache import win32com.client import pythoncom, pywintypes from win32com.client import constants -import re, string, os, sets, glob, popen2, sys, _winreg, struct +import re, string, os, sets, glob, subprocess, sys, _winreg, struct try: basestring @@ -388,8 +388,10 @@ class CAB: else: print "WARNING: cabarc.exe not found in registry" cabarc = "cabarc.exe" - f = popen2.popen4(r'"%s" -m lzx:21 n %s.cab @%s.txt' % (cabarc, self.name, self.name))[0] - for line in f: + cmd = r'"%s" -m lzx:21 n %s.cab @%s.txt' % (cabarc, self.name, self.name) + p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT)[0] + for line in (p.stdout, p.stdin): if line.startswith(" -- adding "): sys.stdout.write(".") else: -- cgit v0.12