diff options
author | Thomas Heller <theller@ctypes.org> | 2004-07-06 19:23:27 (GMT) |
---|---|---|
committer | Thomas Heller <theller@ctypes.org> | 2004-07-06 19:23:27 (GMT) |
commit | a146feaa10f2f18a89a3fa21d04579b5c2bf6969 (patch) | |
tree | ceffde5ecf1767507846e019b7aa5c02ae9e592a /Lib/distutils/command | |
parent | 5124b4a082552225f3c54fedb6836fbb1613e170 (diff) | |
download | cpython-a146feaa10f2f18a89a3fa21d04579b5c2bf6969.zip cpython-a146feaa10f2f18a89a3fa21d04579b5c2bf6969.tar.gz cpython-a146feaa10f2f18a89a3fa21d04579b5c2bf6969.tar.bz2 |
Fix SF#983164.
Patch from Mark Hammond:
bdist_wininst attempts to use the correct MSVC runtime for the current
version of Python. This doesn't work correctly when --target-version
is set. In that case, bdist_wininst still uses the *current*
sys.version (ie, 2.4) rather than the version specified as
--target-version. Thus, the msvc7 runtime based executable stub is
*always* used.
This patch "hard-codes" knowledge of earlier Python versions,
providing the correct result when Python 2.4 is used to build Python
2.3 and earlier distributions.
Remove the short variant (-v) of the --target-version command line
options, it conflicts with the --verbose/-v standard distutils switch.
Diffstat (limited to 'Lib/distutils/command')
-rw-r--r-- | Lib/distutils/command/bdist_wininst.py | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py index 324ce31..7c593ad 100644 --- a/Lib/distutils/command/bdist_wininst.py +++ b/Lib/distutils/command/bdist_wininst.py @@ -24,7 +24,7 @@ class bdist_wininst (Command): ('keep-temp', 'k', "keep the pseudo-installation tree around after " + "creating the distribution archive"), - ('target-version=', 'v', + ('target-version=', None, "require a specific python version" + " on the target system"), ('no-target-compile', 'c', @@ -265,10 +265,34 @@ class bdist_wininst (Command): def get_exe_bytes (self): from distutils.msvccompiler import get_build_version + # If a target-version other than the current version has been + # specified, then using the MSVC version from *this* build is no good. + # Without actually finding and executing the target version and parsing + # its sys.version, we just hard-code our knowledge of old versions. + # NOTE: Possible alternative is to allow "--target-version" to + # specify a Python executable rather than a simple version string. + # We can then execute this program to obtain any info we need, such + # as the real sys.version string for the build. + cur_version = get_python_version() + if self.target_version and self.target_version != cur_version: + # If the target version is *later* than us, then we assume they + # use what we use + # string compares seem wrong, but are what sysconfig.py itself uses + if self.target_version > cur_version: + bv = get_build_version() + else: + if self.target_version < "2.4": + bv = "6" + else: + bv = "7.1" + else: + # for current version - use authoritative check. + bv = get_build_version() + # wininst-x.y.exe is in the same directory as this file directory = os.path.dirname(__file__) # we must use a wininst-x.y.exe built with the same C compiler # used for python. XXX What about mingw, borland, and so on? - filename = os.path.join(directory, "wininst-%s.exe" % get_build_version()) + filename = os.path.join(directory, "wininst-%s.exe" % bv) return open(filename, "rb").read() # class bdist_wininst |