kumquat-buildroot/package/python-augeas/0001-Use-CFFI-in-out-of-line-API-mode-49.patch
Thomas Petazzoni c2767180bd package/python-augeas: new package
We backport an upstream patch that fixes the loading of the native
library by the FFI logic. Without this, "import augeas" doesn't work
as it goes into the ctypes.utils.find_library() logic that tries to
use a compiler on the target to find the augeas native library.

Based on initial work from Nicolas Carrier <nicolas.carrier@orolia.com>

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2021-06-24 23:42:02 +02:00

102 lines
3.2 KiB
Diff

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