|
@@ -0,0 +1,101 @@
|
|
|
+From 9de73fefbe83c74840a93c039258845c49271b9b Mon Sep 17 00:00:00 2001
|
|
|
+From: Jeffery To <jeffery.to@gmail.com>
|
|
|
+Date: Sun, 8 Nov 2020 21:51:09 +0800
|
|
|
+Subject: [PATCH] Use CFFI in out-of-line API mode (#49)
|
|
|
+
|
|
|
+Currently, ffi.py is called during setup to generate augeas.py; this
|
|
|
+file would normally be used for out-of-line ABI mode. ffi.py is also
|
|
|
+imported at run-time, instead of the generated augeas.py, and used in
|
|
|
+in-line ABI mode.
|
|
|
+
|
|
|
+This changes usage of CFFI to out-of-line API mode (CFFI's "main mode of
|
|
|
+usage"): ffi.py is called during setup to generate _augeas.abi3.so (a C
|
|
|
+extension module); this generated module is imported at run-time.
|
|
|
+
|
|
|
+With this change, the headers/development files for augeas (i.e.
|
|
|
+libaugeas-dev on Debian, augeas-devel on Fedora, etc.) and the C
|
|
|
+compiler are required for build/setup. (These were not necessary
|
|
|
+previously.)
|
|
|
+
|
|
|
+Closes https://github.com/hercules-team/python-augeas/issues/48.
|
|
|
+
|
|
|
+Upstream: commit 712c2028568df7760bc98d95577e35709078bfea
|
|
|
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
|
|
|
+---
|
|
|
+ augeas/__init__.py | 2 +-
|
|
|
+ augeas/ffi.py | 27 ++++++++++++++++++++++-----
|
|
|
+ setup.py | 1 +
|
|
|
+ 3 files changed, 24 insertions(+), 6 deletions(-)
|
|
|
+
|
|
|
+diff --git a/augeas/__init__.py b/augeas/__init__.py
|
|
|
+index 9bd97bf..1c0f580 100644
|
|
|
+--- a/augeas/__init__.py
|
|
|
++++ b/augeas/__init__.py
|
|
|
+@@ -32,7 +32,7 @@ format and the transformation into a tree.
|
|
|
+
|
|
|
+ from sys import version_info as _pyver
|
|
|
+
|
|
|
+-from augeas.ffi import ffi, lib
|
|
|
++from _augeas import ffi, lib
|
|
|
+
|
|
|
+ __author__ = "Nathaniel McCallum <nathaniel@natemccallum.com>"
|
|
|
+ __credits__ = """Jeff Schroeder <jeffschroeder@computer.org>
|
|
|
+diff --git a/augeas/ffi.py b/augeas/ffi.py
|
|
|
+index a24daf5..1931764 100644
|
|
|
+--- a/augeas/ffi.py
|
|
|
++++ b/augeas/ffi.py
|
|
|
+@@ -1,9 +1,28 @@
|
|
|
++import os
|
|
|
++import subprocess
|
|
|
++
|
|
|
+ from cffi import FFI
|
|
|
+
|
|
|
++def get_include_dirs():
|
|
|
++ XML2_CONFIG = os.environ.get('XML2_CONFIG', 'xml2-config')
|
|
|
++ PKG_CONFIG = os.environ.get('PKG_CONFIG', 'pkg-config')
|
|
|
++ try:
|
|
|
++ stdout = subprocess.check_output([XML2_CONFIG, '--cflags'])
|
|
|
++ except (OSError, subprocess.CalledProcessError):
|
|
|
++ try:
|
|
|
++ stdout = subprocess.check_output([PKG_CONFIG, '--cflags', 'libxml-2.0'])
|
|
|
++ except (OSError, subprocess.CalledProcessError):
|
|
|
++ stdout = b''
|
|
|
++ cflags = stdout.decode('utf-8').split()
|
|
|
++ return [cflag[2:] for cflag in cflags if cflag.startswith('-I')]
|
|
|
++
|
|
|
+ ffi = FFI()
|
|
|
+-ffi.set_source("augeas",
|
|
|
+- None,
|
|
|
+- libraries=['augeas'])
|
|
|
++ffi.set_source("_augeas",
|
|
|
++ """
|
|
|
++ #include <augeas.h>
|
|
|
++ """,
|
|
|
++ libraries=['augeas'],
|
|
|
++ include_dirs=get_include_dirs())
|
|
|
+
|
|
|
+ ffi.cdef("""
|
|
|
+ typedef struct augeas augeas;
|
|
|
+@@ -44,7 +63,5 @@ const char *aug_error_details(augeas *aug);
|
|
|
+ void free(void *);
|
|
|
+ """)
|
|
|
+
|
|
|
+-lib = ffi.dlopen("augeas")
|
|
|
+-
|
|
|
+ if __name__ == "__main__":
|
|
|
+ ffi.compile(verbose=True)
|
|
|
+diff --git a/setup.py b/setup.py
|
|
|
+index 7d55877..17f9516 100755
|
|
|
+--- a/setup.py
|
|
|
++++ b/setup.py
|
|
|
+@@ -22,6 +22,7 @@ setup(name=name,
|
|
|
+ setup_requires=["cffi>=1.0.0"],
|
|
|
+ cffi_modules=["augeas/ffi.py:ffi"],
|
|
|
+ install_requires=["cffi>=1.0.0"],
|
|
|
++ zip_safe=False,
|
|
|
+ url="http://augeas.net/",
|
|
|
+ classifiers=[
|
|
|
+ "Programming Language :: Python :: 2.7",
|
|
|
+--
|
|
|
+2.31.1
|
|
|
+
|