Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r1047:2f3a42e203c4
Date: 2012-11-19 17:21 +0100
http://bitbucket.org/cffi/cffi/changeset/2f3a42e203c4/

Log:    90% of a fix for issue #40.

diff --git a/cffi/ffiplatform.py b/cffi/ffiplatform.py
--- a/cffi/ffiplatform.py
+++ b/cffi/ffiplatform.py
@@ -58,3 +58,21 @@
 except ImportError:
     def samefile(f1, f2):
         return os.path.abspath(f1) == os.path.abspath(f2)
+
+def maybe_relative_path(path):
+    if not os.path.isabs(path):
+        return path      # already relative
+    dir = path
+    names = []
+    while True:
+        prevdir = dir
+        dir, name = os.path.split(prevdir)
+        if dir == prevdir or not dir:
+            return path     # failed to make it relative
+        names.append(name)
+        try:
+            if samefile(dir, os.curdir):
+                names.reverse()
+                return os.path.join(*names)
+        except OSError:
+            pass
diff --git a/cffi/verifier.py b/cffi/verifier.py
--- a/cffi/verifier.py
+++ b/cffi/verifier.py
@@ -70,7 +70,7 @@
     def get_extension(self):
         if not self._has_source:
             self._write_source()
-        sourcename = self.sourcefilename
+        sourcename = ffiplatform.maybe_relative_path(self.sourcefilename)
         modname = self.get_module_name()
         return ffiplatform.get_extension(sourcename, modname, **self.kwds)
 
diff --git a/testing/test_zdistutils.py b/testing/test_zdistutils.py
--- a/testing/test_zdistutils.py
+++ b/testing/test_zdistutils.py
@@ -2,6 +2,7 @@
 import py
 from cffi import FFI, FFIError
 from cffi.verifier import Verifier, _locate_engine_class
+from cffi.ffiplatform import maybe_relative_path
 from testing.udir import udir
 
 
@@ -143,7 +144,7 @@
         v = ffi.verifier
         ext = v.get_extension()
         assert 'distutils.extension.Extension' in str(ext.__class__)
-        assert ext.sources == [v.sourcefilename]
+        assert ext.sources == [maybe_relative_path(v.sourcefilename)]
         assert ext.name == v.get_module_name()
         assert ext.define_macros == [('TEST_EXTENSION_OBJECT', '1')]
 
@@ -171,7 +172,8 @@
         v = ffi.verifier
         ext = v.get_extension()
         assert 'distutils.extension.Extension' in str(ext.__class__)
-        assert ext.sources == [v.sourcefilename, extra_source]
+        assert ext.sources == [maybe_relative_path(v.sourcefilename),
+                               extra_source]
         assert ext.name == v.get_module_name()
 
     def test_install_and_reload_module(self, targetpackage='', ext_package=''):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to