+++ /dev/null
-From 712c2028568df7760bc98d95577e35709078bfea 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.
----
- augeas/__init__.py | 2 +-
- augeas/ffi.py | 27 ++++++++++++++++++++++-----
- setup.py | 1 +
- 3 files changed, 24 insertions(+), 6 deletions(-)
-
---- a/augeas/__init__.py
-+++ b/augeas/__init__.py
-@@ -32,7 +32,7 @@ format and the transformation into a tre
-
- 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>
---- 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 *au
- void free(void *);
- """)
-
--lib = ffi.dlopen("augeas")
--
- if __name__ == "__main__":
- ffi.compile(verbose=True)
---- 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",
--- /dev/null
+#!/bin/sh
+
+[ "$1" = python3-augeas ] || exit 0
+
+python3 - <<'EOF'
+import augeas
+
+# Basic instantiation (in-memory, no files touched)
+a = augeas.Augeas(root="/dev/null", loadpath=None,
+ flags=augeas.Augeas.NO_LOAD | augeas.Augeas.NO_MODL_AUTOLOAD)
+
+# Set and get a value
+a.set("/test/key", "value")
+assert a.get("/test/key") == "value", "get after set failed"
+
+# Match
+a.set("/test/a", "1")
+a.set("/test/b", "2")
+matches = a.match("/test/*")
+assert len(matches) == 3, f"Expected 3 matches, got {len(matches)}"
+
+# Remove
+a.remove("/test/key")
+assert a.get("/test/key") is None, "Expected None after remove"
+
+a.close()
+print("python-augeas OK")
+EOF