Author: Armin Rigo <[email protected]>
Branch: cffi-1.0
Changeset: r2030:077c1e514b9a
Date: 2015-05-17 13:09 +0200
http://bitbucket.org/cffi/cffi/changeset/077c1e514b9a/
Log: Describe how to write in a way that loads both in cffi-0.9 and
cffi-1.0
diff --git a/doc/source/cdef.rst b/doc/source/cdef.rst
--- a/doc/source/cdef.rst
+++ b/doc/source/cdef.rst
@@ -666,5 +666,50 @@
needed with ``verify()`` but is just creating confusion with
``set_source()``.
+The following example should work both with old (pre-1.0) and new
+versions of CFFI (as CFFI 1.0 does not work in PyPy < 2.6)::
+
+ # in a separate file "package/foo_build.py"
+ import cffi
+
+ ffi = cffi.FFI()
+ C_HEADER_SRC = '''
+ #include "somelib.h"
+ '''
+ C_KEYWORDS = dict(libraries=['somelib'])
+
+ if hasattr(ffi, 'set_source'):
+ ffi.set_source("package._foo", C_HEADER_SRC, **C_KEYWORDS)
+
+ ffi.cdef('''
+ int foo(int);
+ ''')
+
+ if __name__ == "__main__":
+ ffi.compile()
+
+And in the main program::
+
+ try:
+ from package._foo import ffi, lib
+ except ImportError:
+ from package.foo_build import ffi, C_HEADER_SRC, C_KEYWORDS
+ lib = ffi.verify(C_HEADER_SRC, **C_KEYWORDS)
+
+(FWIW, this latest trick can be used more generally to allow the
+import to "work" even if the ``_foo`` module was not generated yet.)
+
+Then you would say, in the Setuptools ``setup.py`` script::
+
+ setup(
+ ...,
+ setup_requires=["cffi"], # any version
+ cffi_modules=["package/foo_build.py:ffi"],
+ install_requires=["cffi"], # any version
+ )
+
+i.e. still giving ``cffi_modules``---it produces a warning if the CFFI
+version installed is pre-1.0, but still works.
+
.. __: out-of-line-api_
.. __: distutils-setuptools_
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit