[pypy-commit] cffi default: Add the keyword "relative_to=..." to verify(), as per
arigo
noreply at buildbot.pypy.org
Wed Dec 24 16:51:56 CET 2014
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r1600:b97105235b12
Date: 2014-12-24 16:52 +0100
http://bitbucket.org/cffi/cffi/changeset/b97105235b12/
Log: Add the keyword "relative_to=..." to verify(), as per
https://bitbucket.org/cffi/cffi/pull-request/53
diff --git a/cffi/ffiplatform.py b/cffi/ffiplatform.py
--- a/cffi/ffiplatform.py
+++ b/cffi/ffiplatform.py
@@ -11,6 +11,9 @@
"""
+LIST_OF_FILE_NAMES = ['include_dirs', 'library_dirs',
+ 'extra_objects', 'depends']
+
def get_extension(srcfilename, modname, sources=(), **kwds):
from distutils.core import Extension
allsources = [srcfilename]
diff --git a/cffi/verifier.py b/cffi/verifier.py
--- a/cffi/verifier.py
+++ b/cffi/verifier.py
@@ -17,7 +17,7 @@
def __init__(self, ffi, preamble, tmpdir=None, modulename=None,
ext_package=None, tag='', force_generic_engine=False,
- source_extension='.c', flags=None, **kwds):
+ source_extension='.c', flags=None, relative_to=None, **kwds):
self.ffi = ffi
self.preamble = preamble
if not modulename:
@@ -26,7 +26,7 @@
self._vengine = vengine_class(self)
self._vengine.patch_extension_kwds(kwds)
self.flags = flags
- self.kwds = kwds
+ self.kwds = self.make_relative_to(kwds, relative_to)
#
if modulename:
if tag:
@@ -109,6 +109,20 @@
def generates_python_module(self):
return self._vengine._gen_python_module
+ def make_relative_to(self, kwds, relative_to):
+ if relative_to and os.path.dirname(relative_to):
+ dirname = os.path.dirname(relative_to)
+ kwds = kwds.copy()
+ for key in ffiplatform.LIST_OF_FILE_NAMES:
+ if key in kwds:
+ lst = kwds[key]
+ if not isinstance(lst, (list, tuple)):
+ raise TypeError("keyword '%s' should be a list or tuple"
+ % (key,))
+ lst = [os.path.join(dirname, fn) for fn in lst]
+ kwds[key] = lst
+ return kwds
+
# ----------
def _locate_module(self):
diff --git a/testing/test_verify.py b/testing/test_verify.py
--- a/testing/test_verify.py
+++ b/testing/test_verify.py
@@ -1349,7 +1349,7 @@
""")
def test_tmpdir():
- import tempfile, os, shutil
+ import tempfile, os
from testing.udir import udir
tmpdir = tempfile.mkdtemp(dir=str(udir))
ffi = FFI()
@@ -1358,6 +1358,20 @@
assert os.listdir(tmpdir)
assert lib.foo(100) == 142
+def test_relative_to():
+ import tempfile, os
+ from testing.udir import udir
+ tmpdir = tempfile.mkdtemp(dir=str(udir))
+ ffi = FFI()
+ ffi.cdef("int foo(int);")
+ f = open(os.path.join(tmpdir, 'foo.h'), 'w')
+ print >> f, "int foo(int a) { return a + 42; }"
+ f.close()
+ lib = ffi.verify('#include "foo.h"',
+ include_dirs=['.'],
+ relative_to=os.path.join(tmpdir, 'x'))
+ assert lib.foo(100) == 142
+
def test_bug1():
ffi = FFI()
ffi.cdef("""
More information about the pypy-commit
mailing list