Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r87387:d1382b9d843b
Date: 2016-09-26 09:01 +0200
http://bitbucket.org/pypy/pypy/changeset/d1382b9d843b/

Log:    If libpypy-c.so is a symlink, look first around the non-deferred
        path to libpypy-c.so, and then look around where the symlink points
        to. Should fix virtualenv (e.g. seen in
        module.test_lib_pypy.cffi_tests.cffi0.test_zintegration)

diff --git a/pypy/module/sys/initpath.py b/pypy/module/sys/initpath.py
--- a/pypy/module/sys/initpath.py
+++ b/pypy/module/sys/initpath.py
@@ -157,6 +157,22 @@
     return space.wrap(resolvedirof(filename))
 
 
+def find_stdlib_link(state, executable):
+    path, prefix = find_stdlib(state, executable)
+    if path is None:
+        if os.path.islink(executable):
+            # If we can't find the stdlib from the given 'executable',
+            # which is usually the path of libpypy-c.so, then we try
+            # to look if this libpypy-c.so is a symlink and follow that.
+            try:
+                link = _readlink_maybe(executable)
+            except OSError:
+                pass
+            else:
+                return find_stdlib_link(state, link)
+    return path, prefix
+
+
 @unwrap_spec(executable='str0', dynamic=int)
 def pypy_find_stdlib(space, executable, dynamic=1):
     if dynamic and space.config.translation.shared:
@@ -164,7 +180,7 @@
         if dynamic_location:
             executable = rffi.charp2str(dynamic_location)
             pypy_init_free(dynamic_location)
-    path, prefix = find_stdlib(get_state(space), executable)
+    path, prefix = find_stdlib_link(get_state(space), executable)
     if path is None:
         return space.w_None
     w_prefix = space.wrap(prefix)
@@ -229,11 +245,7 @@
                 dlerror());
         return NULL;
     }
-    char *p = realpath(info.dli_fname, NULL);
-    if (p == NULL) {
-        p = strdup(info.dli_fname);
-    }
-    return p;
+    return strdup(info.dli_fname);
 }
 """
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to