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