summaryrefslogtreecommitdiffstats
path: root/Lib/distutils
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2012-06-25 19:52:24 (GMT)
committerDavid Malcolm <dmalcolm@redhat.com>2012-06-25 19:52:24 (GMT)
commit555bfc7ed08e25f40342d7f0bc24e5380d515bfe (patch)
treeee228eef2ead41560bb181b557048a33aa5771fd /Lib/distutils
parent2e5f371210d91442ec67073bb4dfc52d46e51ef8 (diff)
downloadcpython-555bfc7ed08e25f40342d7f0bc24e5380d515bfe.zip
cpython-555bfc7ed08e25f40342d7f0bc24e5380d515bfe.tar.gz
cpython-555bfc7ed08e25f40342d7f0bc24e5380d515bfe.tar.bz2
Issue #14443: ensure that brp-python-bytecompile is invoked with the correct
python executable The __os_install_macro defines some post-processing activities during an rpm build; one of the scripts it calls is brp-python-bytecompile, which can take an argument: the python executable with which to byte-compile .py files in the package payload. In some older versions of rpm (e.g. in RHEL 6), this invocation doesn't pass in an argument, and brp-python-bytecompile defaults to using /usr/bin/python, which can lead to the .py files being byte-compiled for the wrong version of python. This has been fixed in later versions of rpm by passing in %{__python} as an argument to brp-python-bytecompile. Workaround this by detecting if __os_install_post has a 0-argument invocation of brp-python-bytecompile, and if so generating an equivalent macro that has the argument, and explicitly provide the new definition within the specfile.
Diffstat (limited to 'Lib/distutils')
-rw-r--r--Lib/distutils/command/bdist_rpm.py17
1 files changed, 16 insertions, 1 deletions
diff --git a/Lib/distutils/command/bdist_rpm.py b/Lib/distutils/command/bdist_rpm.py
index 401bc41..ac46217 100644
--- a/Lib/distutils/command/bdist_rpm.py
+++ b/Lib/distutils/command/bdist_rpm.py
@@ -3,7 +3,7 @@
Implements the Distutils 'bdist_rpm' command (create RPM source and binary
distributions)."""
-import sys, os
+import subprocess, sys, os
from distutils.core import Command
from distutils.debug import DEBUG
from distutils.util import get_platform
@@ -406,6 +406,21 @@ class bdist_rpm(Command):
'Summary: ' + self.distribution.get_description(),
]
+ # Workaround for #14443 which affects some RPM based systems such as
+ # RHEL6 (and probably derivatives)
+ vendor_hook = subprocess.getoutput('rpm --eval %{__os_install_post}')
+ # Generate a potential replacement value for __os_install_post (whilst
+ # normalizing the whitespace to simplify the test for whether the
+ # invocation of brp-python-bytecompile passes in __python):
+ vendor_hook = '\n'.join([' %s \\' % line.strip()
+ for line in vendor_hook.splitlines()])
+ problem = "brp-python-bytecompile \\\n"
+ fixed = "brp-python-bytecompile %{__python} \\\n"
+ fixed_hook = vendor_hook.replace(problem, fixed)
+ if fixed_hook != vendor_hook:
+ spec_file.append('# Workaround for http://bugs.python.org/issue14443')
+ spec_file.append('%define __os_install_post ' + fixed_hook + '\n')
+
# put locale summaries into spec file
# XXX not supported for now (hard to put a dictionary
# in a config file -- arg!)