diff --git a/Doc/library/hashlib.rst b/Doc/library/hashlib.rst index a725e076dfd..f1f5237eb43 100644 --- a/Doc/library/hashlib.rst +++ b/Doc/library/hashlib.rst @@ -19,6 +19,10 @@ algorithm (defined in Internet :rfc:`1321`). The terms "secure hash" and "message digest" are interchangeable. Older algorithms were called message digests. The modern term is secure hash. +.. note:: + If you want the adler32 or crc32 hash functions they are available in + the :mod:`zlib` module. + .. warning:: Some algorithms have known hash collision weaknesses, see the FAQ at the end. diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py index 39216a532fc..d2b2c9a347c 100644 --- a/Lib/distutils/sysconfig.py +++ b/Lib/distutils/sysconfig.py @@ -23,7 +23,8 @@ EXEC_PREFIX = os.path.normpath(sys.exec_prefix) # Path to the base directory of the project. On Windows the binary may -# live in project/PCBuild9 +# live in project/PCBuild9. If we're dealing with an x64 Windows build, +# it'll live in project/PCbuild/amd64. project_base = os.path.dirname(os.path.abspath(sys.executable)) if os.name == "nt" and "pcbuild" in project_base[-8:].lower(): project_base = os.path.abspath(os.path.join(project_base, os.path.pardir)) @@ -31,6 +32,10 @@ if os.name == "nt" and "\\pc\\v" in project_base[-10:].lower(): project_base = os.path.abspath(os.path.join(project_base, os.path.pardir, os.path.pardir)) +# PC/AMD64 +if os.name == "nt" and "\\pcbuild\\amd64" in project_base[-14:].lower(): + project_base = os.path.abspath(os.path.join(project_base, os.path.pardir, + os.path.pardir)) # python_build: (Boolean) if true, we're either building Python or # building an extension with an un-installed Python, so we use diff --git a/Lib/hashlib.py b/Lib/hashlib.py index a39cb57bd80..efe66ec600d 100644 --- a/Lib/hashlib.py +++ b/Lib/hashlib.py @@ -18,6 +18,9 @@ More algorithms may be available on your platform but the above are guaranteed to exist. +NOTE: If you want the adler32 or crc32 hash functions they are available in +the zlib module. + Choose your hash function wisely. Some have known collision weaknesses. sha384 and sha512 will be slow on 32 bit platforms. diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index 2212af55916..100b26f7316 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -1157,6 +1157,14 @@ def __init__(self): if sys.platform != 'sunos5': self.expected.add('test_nis') + # TODO: This is a hack to raise TestSkipped if -3 is not enabled. + # Instead of relying on callable to have a warning, we should expose + # the -3 flag to Python code somehow + with test_support.catch_warning() as w: + callable(int) + if w.message is None: + self.expected.add('test_py3kwarn') + self.valid = True def isvalid(self): diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py index 6eac67e9900..fe1da52c8c7 100644 --- a/Lib/test/test_import.py +++ b/Lib/test/test_import.py @@ -255,8 +255,20 @@ def test_trailing_slash(self): self.assertEqual(mod.testdata, 'test_trailing_slash') unload("test_trailing_slash") +class RelativeImport(unittest.TestCase): + def tearDown(self): + try: + del sys.modules["test.relimport"] + except: + pass + + def test_relimport_star(self): + # This will import * from .test_import. + from . import relimport + self.assertTrue(hasattr(relimport, "RelativeImport")) + def test_main(verbose=None): - run_unittest(ImportTest, PathsTests) + run_unittest(ImportTest, PathsTests, RelativeImport) if __name__ == '__main__': test_main() diff --git a/Lib/test/test_int_literal.py b/Lib/test/test_int_literal.py index c9ad2a3b2ff..9bd0c412ce9 100644 --- a/Lib/test/test_int_literal.py +++ b/Lib/test/test_int_literal.py @@ -6,7 +6,7 @@ import unittest from test import test_support -class TextHexOctBin(unittest.TestCase): +class TestHexOctBin(unittest.TestCase): def test_hex_baseline(self): # A few upper/lowercase tests @@ -141,7 +141,7 @@ def test_bin_unsigned(self): self.assertEqual(-0b1111111111111111111111111111111111111111111111111111111111111111, -18446744073709551615) def test_main(): - test_support.run_unittest(TextHexOctBin) + test_support.run_unittest(TestHexOctBin) if __name__ == "__main__": test_main() diff --git a/Lib/test/test_nis.py b/Lib/test/test_nis.py index 55dd32c7e01..757edd6c2f1 100644 --- a/Lib/test/test_nis.py +++ b/Lib/test/test_nis.py @@ -1,4 +1,4 @@ -from test.test_support import verbose, run_unittest +from test import test_support import unittest import nis @@ -8,8 +8,10 @@ def test_maps(self): maps = nis.maps() except nis.error as msg: # NIS is probably not active, so this test isn't useful - if verbose: - self.fail("(failing because of verbose mode) %s" % msg) + if test_support.verbose: + print("Test Skipped:", msg) + # Can't raise TestSkipped as regrtest only recognizes the exception + # import time. return try: # On some systems, this map is only accessible to the @@ -35,7 +37,7 @@ def test_maps(self): break def test_main(): - run_unittest(NisTests) + test_support.run_unittest(NisTests) if __name__ == '__main__': test_main() diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 13f8f9eed66..57e9d15afe5 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -9,6 +9,7 @@ import time import os +import pwd import unittest import warnings warnings.filterwarnings('ignore', '.* potential security risk .*', @@ -141,6 +142,33 @@ def test_stat(self): if hasattr(posix, 'stat'): self.assert_(posix.stat(test_support.TESTFN)) + if hasattr(posix, 'chown'): + def test_chown(self): + # raise an OSError if the file does not exist + os.unlink(test_support.TESTFN) + self.assertRaises(OSError, posix.chown, test_support.TESTFN, -1, -1) + + # re-create the file + open(test_support.TESTFN, 'w').close() + if os.getuid() == 0: + try: + # Many linux distros have a nfsnobody user as MAX_UID-2 + # that makes a good test case for signedness issues. + # http://bugs.python.org/issue1747858 + # This part of the test only runs when run as root. + # Only scary people run their tests as root. + ent = pwd.getpwnam('nfsnobody') + posix.chown(test_support.TESTFN, ent.pw_uid, ent.pw_gid) + except KeyError: + pass + else: + # non-root cannot chown to root, raises OSError + self.assertRaises(OSError, posix.chown, + test_support.TESTFN, 0, 0) + + # test a successful chown call + posix.chown(test_support.TESTFN, os.getuid(), os.getgid()) + def test_chdir(self): if hasattr(posix, 'chdir'): posix.chdir(os.curdir) diff --git a/Lib/test/test_print.py b/Lib/test/test_print.py index baeab3da49c..10ef60a7efe 100644 --- a/Lib/test/test_print.py +++ b/Lib/test/test_print.py @@ -12,8 +12,6 @@ # 2.x from StringIO import StringIO -from contextlib import contextmanager - NotDefined = object() # A dispatch table all 8 combinations of providing @@ -40,15 +38,6 @@ lambda args, sep, end, file: print(sep=sep, end=end, file=file, *args), } -@contextmanager -def stdout_redirected(new_stdout): - save_stdout = sys.stdout - sys.stdout = new_stdout - try: - yield None - finally: - sys.stdout = save_stdout - # Class used to test __str__ and print class ClassWith__str__: def __init__(self, x): @@ -69,8 +58,7 @@ def check(self, expected, args, end is not NotDefined, file is not NotDefined)] - t = StringIO() - with stdout_redirected(t): + with test_support.captured_stdout() as t: fn(args, sep, end, file) self.assertEqual(t.getvalue(), expected) diff --git a/Lib/test/test_winsound.py b/Lib/test/test_winsound.py index 7cdc27534f3..dac569c9628 100644 --- a/Lib/test/test_winsound.py +++ b/Lib/test/test_winsound.py @@ -23,25 +23,27 @@ def test_errors(self): self.assertRaises(ValueError, winsound.Beep, 32768, 75) def test_extremes(self): - if _have_soundcard(): - winsound.Beep(37, 75) - winsound.Beep(32767, 75) - else: - # The behaviour of winsound.Beep() seems to differ between - # different versions of Windows when there's either a) no - # sound card entirely, b) legacy beep driver has been disabled, - # or c) the legacy beep driver has been uninstalled. Sometimes - # RuntimeErrors are raised, sometimes they're not. Meh. - try: - winsound.Beep(37, 75) - winsound.Beep(32767, 75) - except RuntimeError: - pass + self._beep(37, 75) + self._beep(32767, 75) def test_increasingfrequency(self): - if _have_soundcard(): - for i in range(100, 2000, 100): - winsound.Beep(i, 75) + for i in xrange(100, 2000, 100): + self._beep(i, 75) + + def _beep(self, *args): + # these tests used to use _have_soundcard(), but it's quite + # possible to have a soundcard, and yet have the beep driver + # disabled. So basically, we have no way of knowing whether + # a beep should be produced or not, so currently if these + # tests fail we're ignoring them + # + # XXX the right fix for this is to define something like + # _have_enabled_beep_driver() and use that instead of the + # try/except below + try: + winsound.Beep(*args) + except RuntimeError: + pass class MessageBeepTest(unittest.TestCase): diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py index 0adf507c849..d2fd504e864 100644 --- a/Lib/test/test_zlib.py +++ b/Lib/test/test_zlib.py @@ -1,6 +1,7 @@ import unittest from test import test_support import zlib +import binascii import random @@ -46,6 +47,12 @@ def test_crc32_adler32_unsigned(self): self.assertEqual(zlib.adler32(foo+foo), 3573550353) self.assertEqual(zlib.adler32('spam'), 72286642) + def test_same_as_binascii_crc32(self): + foo = 'abcdefghijklmnop' + crc = -1808088941 + self.assertEqual(binascii.crc32(foo), crc) + self.assertEqual(zlib.crc32(foo), crc) + self.assertEqual(binascii.crc32('spam'), zlib.crc32('spam')) diff --git a/Lib/zipfile.py b/Lib/zipfile.py index 2865c0a2c16..719ed445fc1 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -8,8 +8,10 @@ try: import zlib # We may need its compression method + crc32 = zlib.crc32 except ImportError: zlib = None + crc32 = binascii.crc32 __all__ = ["BadZipfile", "error", "ZIP_STORED", "ZIP_DEFLATED", "is_zipfile", "ZipInfo", "ZipFile", "PyZipFile", "LargeZipFile" ] @@ -36,13 +38,13 @@ class LargeZipFile(Exception): # Here are some struct module formats for reading headers structEndArchive = "<4s4H2LH" # 9 items, end of archive, 22 bytes stringEndArchive = b"PK\005\006" # magic number for end of archive record -structCentralDir = "<4s4B4HlLL5HLL"# 19 items, central directory, 46 bytes +structCentralDir = "<4s4B4HLLL5HLL"# 19 items, central directory, 46 bytes stringCentralDir = b"PK\001\002" # magic number for central directory -structFileHeader = "<4s2B4HlLL2H" # 12 items, file header record, 30 bytes +structFileHeader = "<4s2B4HLLL2H" # 12 items, file header record, 30 bytes stringFileHeader = b"PK\003\004" # magic number for file header -structEndArchive64Locator = "<4slql" # 4 items, locate Zip64 header, 20 bytes +structEndArchive64Locator = "<4sLQL" # 4 items, locate Zip64 header, 20 bytes stringEndArchive64Locator = b"PK\x06\x07" # magic token for locator header -structEndArchive64 = "<4sqhhllqqqq" # 10 items, end of archive (Zip64), 56 bytes +structEndArchive64 = "<4sQHHLLQQQQ" # 10 items, end of archive (Zip64), 56 bytes stringEndArchive64 = b"PK\x06\x06" # magic token for Zip64 header @@ -140,7 +142,7 @@ def _EndRecData(fpin): endrec = list(endrec) endrec.append("") # Append the archive comment endrec.append(filesize - 22) # Append the record start offset - if endrec[-4] == -1 or endrec[-4] == 0xffffffff: + if endrec[-4] == 0xffffffff: return _EndRecData64(fpin, -22, endrec) return endrec # Search the last END_BLOCK bytes of the file for the record signature. @@ -160,7 +162,7 @@ def _EndRecData(fpin): # Append the archive comment and start offset endrec.append(comment) endrec.append(filesize - END_BLOCK + start) - if endrec[-4] == -1 or endrec[-4] == 0xffffffff: + if endrec[-4] == 0xffffffff: return _EndRecData64(fpin, - END_BLOCK + start, endrec) return endrec return # Error, return None @@ -247,7 +249,7 @@ def FileHeader(self): if file_size > ZIP64_LIMIT or compress_size > ZIP64_LIMIT: # File is larger than what fits into a 4 byte integer, # fall back to the ZIP64 extension - fmt = '= 24: - counts = unpack(' ZIP64_LIMIT: extra.append(zinfo.header_offset) - header_offset = -1 # struct "l" format: 32 one bits + header_offset = 0xffffffff # -1 32 bit else: header_offset = zinfo.header_offset @@ -1055,7 +1058,7 @@ def close(self): if extra: # Append a ZIP64 field to the extra's extra_data = struct.pack( - '>sys.stderr, (structCentralDir, + stringCentralDir, create_version, + zinfo.create_system, extract_version, zinfo.reserved, + zinfo.flag_bits, zinfo.compress_type, dostime, dosdate, + zinfo.CRC, compress_size, file_size, + len(zinfo.filename), len(extra_data), len(zinfo.comment), + 0, zinfo.internal_attr, zinfo.external_attr, + header_offset) + raise self.fp.write(centdir) self.fp.write(zinfo.filename.encode("utf-8")) self.fp.write(extra_data) @@ -1091,10 +1105,8 @@ def close(self): stringEndArchive64Locator, 0, pos2, 1) self.fp.write(zip64locrec) - # XXX Why is `pos3` computed next? It's never referenced. - pos3 = self.fp.tell() endrec = struct.pack(structEndArchive, stringEndArchive, - 0, 0, count, count, pos2 - pos1, -1, 0) + 0, 0, count, count, pos2 - pos1, 0xffffffff, 0) self.fp.write(endrec) else: diff --git a/Misc/ACKS b/Misc/ACKS index 8d311139208..dbc86df634c 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -736,6 +736,7 @@ Lars Wirzenius Stefan Witzel Klaus-Juergen Wolf Dan Wolfe +David Wolever Richard Wolff Gordon Worley Thomas Wouters diff --git a/Misc/developers.txt b/Misc/developers.txt index 7c9df3394f0..d161e76d249 100644 --- a/Misc/developers.txt +++ b/Misc/developers.txt @@ -17,6 +17,8 @@ the format to accommodate documentation needs as they arise. Permissions History ------------------- +- Jeff Rush was given SVN access on 18 March 2008 by AMK, for Distutils work. + - David Wolever was given SVN access on 17 March 2008 by MvL, for 2to3 work. diff --git a/Modules/binascii.c b/Modules/binascii.c index 5f8705dc4e9..2b4b352f0df 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -902,7 +902,7 @@ binascii_crc32(PyObject *self, PyObject *args) Py_ssize_t len; long result; - if ( !PyArg_ParseTuple(args, "s#|l:crc32", &bin_data, &len, &crc) ) + if ( !PyArg_ParseTuple(args, "s#|k:crc32", &bin_data, &len, &crc) ) return NULL; crc = ~ crc; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 3e91f00b778..716bf7d78a1 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1906,9 +1906,9 @@ static PyObject * posix_chown(PyObject *self, PyObject *args) { char *path = NULL; - int uid, gid; + long uid, gid; int res; - if (!PyArg_ParseTuple(args, "etii:chown", + if (!PyArg_ParseTuple(args, "etll:chown", Py_FileSystemDefaultEncoding, &path, &uid, &gid)) return NULL; diff --git a/Objects/abstract.c b/Objects/abstract.c index c0298a8aa39..dd05fe116dd 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2600,6 +2600,11 @@ PyObject_IsInstance(PyObject *inst, PyObject *cls) static PyObject *name = NULL; PyObject *t, *v, *tb; PyObject *checker; + + /* Quick test for an exact match */ + if (Py_TYPE(inst) == (PyTypeObject *)cls) + return 1; + PyErr_Fetch(&t, &v, &tb); if (name == NULL) { diff --git a/Objects/cellobject.c b/Objects/cellobject.c index 490afe0b148..50a3897f48a 100644 --- a/Objects/cellobject.c +++ b/Objects/cellobject.c @@ -51,6 +51,18 @@ cell_dealloc(PyCellObject *op) PyObject_GC_Del(op); } +static int +cell_compare(PyCellObject *a, PyCellObject *b) +{ + if (a->ob_ref == NULL) { + if (b->ob_ref == NULL) + return 0; + return -1; + } else if (b->ob_ref == NULL) + return 1; + return PyObject_Compare(a->ob_ref, b->ob_ref); +} + static PyObject * cell_repr(PyCellObject *op) { @@ -102,7 +114,7 @@ PyTypeObject PyCell_Type = { 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ - 0, /* tp_compare */ + (cmpfunc)cell_compare, /* tp_compare */ (reprfunc)cell_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ diff --git a/PCbuild/_bsddb.vcproj b/PCbuild/_bsddb.vcproj index 3efdcce0c50..f9d77e86578 100644 --- a/PCbuild/_bsddb.vcproj +++ b/PCbuild/_bsddb.vcproj @@ -1,7 +1,7 @@ @@ -423,7 +418,7 @@ /> diff --git a/PCbuild/_sqlite3.vcproj b/PCbuild/_sqlite3.vcproj index 646c5453fc2..19d549752df 100644 --- a/PCbuild/_sqlite3.vcproj +++ b/PCbuild/_sqlite3.vcproj @@ -1,7 +1,7 @@ @@ -446,12 +428,9 @@ /> diff --git a/PCbuild/_tkinter.vcproj b/PCbuild/_tkinter.vcproj index e3baa5cee17..e8f8aa5ed3c 100644 --- a/PCbuild/_tkinter.vcproj +++ b/PCbuild/_tkinter.vcproj @@ -56,7 +56,7 @@ /> + + + + + + + diff --git a/Python/ast.c b/Python/ast.c index d5d84f74b8b..be25ac3613f 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -2386,10 +2386,6 @@ ast_for_import_stmt(struct compiling *c, const node *n) /* from ... import * */ n = CHILD(n, idx); n_children = 1; - if (ndots) { - ast_error(n, "'import *' not allowed with 'from .'"); - return NULL; - } break; case LPAR: /* from ... import (x, y, z) */ diff --git a/Tools/buildbot/external-amd64.bat b/Tools/buildbot/external-amd64.bat index 0ea4d641607..8fd452a011a 100644 --- a/Tools/buildbot/external-amd64.bat +++ b/Tools/buildbot/external-amd64.bat @@ -1,48 +1,17 @@ @rem Fetches (and builds if necessary) external dependencies -@REM XXX FIXME - building for x64 disabled for now. - @rem Assume we start inside the Python source directory -cd .. -call "%VS90COMNTOOLS%vsvars32.bat" +call "Tools\buildbot\external-common.bat" +call "%VS90COMNTOOLS%\vsvars32.bat" -@rem bzip -if not exist bzip2-1.0.3 svn export http://svn.python.org/projects/external/bzip2-1.0.3 - -@rem Sleepycat db -@rem Remove VS 2003 builds -if exist db-4.4.20 if not exist db-4.4.20\build_win32\this_is_for_vs9 ( - echo Removing old build - rd /s/q db-4.4.20 -) -if not exist db-4.4.20 svn export http://svn.python.org/projects/external/db-4.4.20-vs9 db-4.4.20 -if not exist db-4.4.20\build_win32\debug\libdb44sd.lib ( - vcbuild db-4.4.20\build_win32\db_static.vcproj "Debug AMD64|x64" +if not exist tcltk64\bin\tcl84g.dll ( + cd tcl-8.4.18.2\win + nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 INSTALLDIR=..\..\tcltk64 clean all install + cd ..\.. ) -@rem OpenSSL -if not exist openssl-0.9.8g ( - if exist openssl-0.9.8a rd /s/q openssl-0.9.8a - svn export http://svn.python.org/projects/external/openssl-0.9.8g +if not exist tcltk64\bin\tk84g.dll ( + cd tk-8.4.18.1\win + nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 INSTALLDIR=..\..\tcltk64 TCLDIR=..\..\tcl-8.4.18.2 clean all install + cd ..\.. ) - -@rem tcltk -if not exist tcl8.4.16 ( - if exist tcltk rd /s/q tcltk - if exist tcl8.4.12 rd /s/q tcl8.4.12 - if exist tk8.4.12 rd /s/q tk8.4.12 - svn export http://svn.python.org/projects/external/tcl8.4.16 - svn export http://svn.python.org/projects/external/tk8.4.16 -@REM cd tcl8.4.16\win -@REM nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 -@REM nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 INSTALLDIR=..\..\tcltk install -@REM cd ..\.. -@REM cd tk8.4.16\win -@REM nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 TCLDIR=..\..\tcl8.4.16 -@REM nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 TCLDIR=..\..\tcl8.4.16 INSTALLDIR=..\..\tcltk install -@REM cd ..\.. -) - -@rem sqlite -if not exist sqlite-source-3.3.4 svn export http://svn.python.org/projects/external/sqlite-source-3.3.4 -@REM if not exist build\PCbuild\sqlite3.dll copy sqlite-source-3.3.4\sqlite3.dll build\PCbuild diff --git a/Tools/buildbot/external.bat b/Tools/buildbot/external.bat index ae18ead3858..41136056001 100644 --- a/Tools/buildbot/external.bat +++ b/Tools/buildbot/external.bat @@ -1,46 +1,17 @@ @rem Fetches (and builds if necessary) external dependencies @rem Assume we start inside the Python source directory -cd .. -call "%VS90COMNTOOLS%vsvars32.bat" +call "Tools\buildbot\external-common.bat" +call "%VS90COMNTOOLS%\vsvars32.bat" -@rem bzip -if not exist bzip2-1.0.3 svn export http://svn.python.org/projects/external/bzip2-1.0.3 - -@rem Sleepycat db -@rem Remove VS 2003 builds -if exist db-4.4.20 if not exist db-4.4.20\build_win32\this_is_for_vs9 ( - echo Removing old build - rd /s/q db-4.4.20 -) -if not exist db-4.4.20 svn export http://svn.python.org/projects/external/db-4.4.20-vs9 db-4.4.20 -if not exist db-4.4.20\build_win32\debug\libdb44sd.lib ( - vcbuild db-4.4.20\build_win32\db_static.vcproj "Debug|Win32" +if not exist tcltk\bin\tcl84g.dll ( + cd tcl-8.4.18.2\win + nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 INSTALLDIR=..\..\tcltk clean all install + cd ..\.. ) -@rem OpenSSL -if not exist openssl-0.9.8g ( - if exist openssl-0.9.8a rd /s/q openssl-0.9.8a - svn export http://svn.python.org/projects/external/openssl-0.9.8g +if not exist tcltk\bin\tk84g.dll ( + cd tk-8.4.18.1\win + nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 INSTALLDIR=..\..\tcltk TCLDIR=..\..\tcl-8.4.18.2 clean all install + cd ..\.. ) - -@rem tcltk -if not exist tcl8.4.16 ( - if exist tcltk rd /s/q tcltk - if exist tcl8.4.12 rd /s/q tcl8.4.12 - if exist tk8.4.12 rd /s/q tk8.4.12 - svn export http://svn.python.org/projects/external/tcl8.4.16 - svn export http://svn.python.org/projects/external/tk8.4.16 - cd tcl8.4.16\win - nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 - nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 INSTALLDIR=..\..\tcltk install - cd ..\.. - cd tk8.4.16\win - nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 TCLDIR=..\..\tcl8.4.16 - nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 TCLDIR=..\..\tcl8.4.16 INSTALLDIR=..\..\tcltk install - cd ..\.. -) - -@rem sqlite -if not exist sqlite-source-3.3.4 svn export http://svn.python.org/projects/external/sqlite-source-3.3.4 -if not exist build\PCbuild\sqlite3.dll copy sqlite-source-3.3.4\sqlite3.dll build\PCbuild