summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2004-07-06 19:23:27 (GMT)
committerThomas Heller <theller@ctypes.org>2004-07-06 19:23:27 (GMT)
commita146feaa10f2f18a89a3fa21d04579b5c2bf6969 (patch)
treeceffde5ecf1767507846e019b7aa5c02ae9e592a
parent5124b4a082552225f3c54fedb6836fbb1613e170 (diff)
downloadcpython-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.
-rw-r--r--Lib/distutils/command/bdist_wininst.py28
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