fix an incompatibility with virtualenv (rhbz#742641)
Previously, we manually fixed up the library search path to be below %{pypyprefix}, by patching pypy/translator/goal/app_main.py (adding LIBRARY_INSTALLATION_PATH in patch 3, then using sed to change it to the correct value in %prep after applying the patch). This led to issues when using pypy with virtualenv, so now (as suggested in https://codespeak.net/issue/pypy-dev/issue614 ) we simply install the pypy binary into %{pypyprefix}, and make /usr/bin/pypy be a symlink to it. This allows pypy to find its libraries both when run outside a virtualenv, and within it. Resolves https://bugzilla.redhat.com/show_bug.cgi?id=742641
This commit is contained in:
parent
e21faf468c
commit
a8e52ca5f8
@ -1,16 +0,0 @@
|
||||
diff -r cd083843b67a pypy/translator/goal/app_main.py
|
||||
--- a/pypy/translator/goal/app_main.py Mon Dec 20 17:17:45 2010 +0100
|
||||
+++ b/pypy/translator/goal/app_main.py Wed Dec 22 17:43:21 2010 -0500
|
||||
@@ -191,6 +191,12 @@
|
||||
IS_WINDOWS = False
|
||||
|
||||
def get_library_path(executable):
|
||||
+ # FIXME: get this from translator configuration
|
||||
+ dirname = LIBRARY_INSTALLATION_PATH
|
||||
+ newpath = sys.pypy_initial_path(dirname)
|
||||
+ if newpath:
|
||||
+ return newpath
|
||||
+
|
||||
search = executable
|
||||
while 1:
|
||||
dirname = resolvedirof(search)
|
44
pypy.spec
44
pypy.spec
@ -1,6 +1,6 @@
|
||||
Name: pypy
|
||||
Version: 1.7
|
||||
Release: 3%{?dist}
|
||||
Release: 4%{?dist}
|
||||
Summary: Python implementation with a Just-In-Time compiler
|
||||
|
||||
Group: Development/Languages
|
||||
@ -149,18 +149,6 @@ Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
|
||||
# of "ls" (http://bugs.python.org/issue7108)
|
||||
Patch2: fix-test_commands-expected-ls-output-issue7108.patch
|
||||
|
||||
# When locating the pypy standard libraries, look first within
|
||||
# LIBRARY_INSTALLATION_PATH.
|
||||
# We convert this from being a non-existant variable into a string literal
|
||||
# with the value of "pypyprefix" in the "prep" phase below.
|
||||
#
|
||||
# We still use the scanning relative to the binary location when invoking a
|
||||
# pypy binary during the build (e.g. during "check")
|
||||
#
|
||||
# Sent upstream (with caveats) as:
|
||||
# https://codespeak.net/issue/pypy-dev/issue614
|
||||
Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
|
||||
|
||||
# Try to improve the readability of the generated .c code, by adding in the
|
||||
# RPython source as comments where possible.
|
||||
# A version of this was sent upstream as:
|
||||
@ -344,14 +332,6 @@ pushd lib-python/%{pylibver}
|
||||
%patch2 -p0
|
||||
popd
|
||||
|
||||
# Look for the pypy libraries within LIBRARY_INSTALLATION_PATH first:
|
||||
%patch3 -p1
|
||||
# Fixup LIBRARY_INSTALLATION_PATH to be a string literal containing our value
|
||||
# for "pypyprefix":
|
||||
sed -i \
|
||||
-e 's|LIBRARY_INSTALLATION_PATH|"%{pypyprefix}"|' \
|
||||
pypy/translator/goal/app_main.py
|
||||
|
||||
%patch4 -p1 -b .more-readable-c-code
|
||||
|
||||
%patch5 -p1
|
||||
@ -535,7 +515,19 @@ rm -rf $RPM_BUILD_ROOT
|
||||
InstallPyPy() {
|
||||
ExeName=$1
|
||||
|
||||
install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{_bindir}
|
||||
# To ensure compatibility with virtualenv, pypy finds its libraries
|
||||
# relative to itself; this happens within
|
||||
# pypy/translator/goal/app_main.py:get_library_path
|
||||
# which calls sys.pypy_initial_path(dirname) on the dir containing
|
||||
# the executable, with symlinks resolved.
|
||||
#
|
||||
# Hence we make /usr/bin/pypy be a symlink to the real binary, which we
|
||||
# place within /usr/lib[64]/pypy-1.* as pypy
|
||||
#
|
||||
# This ought to enable our pypy build to work with virtualenv
|
||||
# (rhbz#742641)
|
||||
install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{pypyprefix}/$ExeName
|
||||
ln -s %{pypyprefix}/$ExeName %{buildroot}/%{_bindir}
|
||||
|
||||
# The generated machine code doesn't need an executable stack, but
|
||||
# one of the assembler files (gcmaptable.s) doesn't have the necessary
|
||||
@ -546,10 +538,11 @@ InstallPyPy() {
|
||||
#
|
||||
# I tried various approaches involving fixing the build, but the simplest
|
||||
# approach is to postprocess the ELF file:
|
||||
execstack --clear-execstack %{buildroot}/%{_bindir}/$ExeName
|
||||
execstack --clear-execstack %{buildroot}/%{pypyprefix}/$ExeName
|
||||
}
|
||||
|
||||
mkdir -p %{buildroot}/%{_bindir}
|
||||
mkdir -p %{buildroot}/%{pypyprefix}
|
||||
|
||||
InstallPyPy pypy
|
||||
|
||||
@ -570,7 +563,6 @@ InstallPyPy pypy-stackless
|
||||
# PREFIX/lib-python/modified.2.5.2
|
||||
# as given on the above page, i.e. it uses '-' not '.'
|
||||
|
||||
mkdir -p %{buildroot}/%{pypyprefix}
|
||||
cp -a lib-python %{buildroot}/%{pypyprefix}
|
||||
|
||||
cp -a lib_pypy %{buildroot}/%{pypyprefix}
|
||||
@ -859,6 +851,7 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%defattr(-,root,root,-)
|
||||
%doc LICENSE README
|
||||
%{_bindir}/pypy
|
||||
%{pypyprefix}/pypy
|
||||
|
||||
%files devel
|
||||
%defattr(-,root,root,-)
|
||||
@ -875,6 +868,9 @@ rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Jan 31 2012 David Malcolm <dmalcolm@redhat.com> - 1.7-4
|
||||
- fix an incompatibility with virtualenv (rhbz#742641)
|
||||
|
||||
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.7-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user