--- /dev/null
+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
+
--- /dev/null
+################################################################################
+#
+# python-augeas
+#
+################################################################################
+
+PYTHON_AUGEAS_VERSION = 1.1.0
+PYTHON_AUGEAS_SITE = $(call github,hercules-team,python-augeas,v$(PYTHON_AUGEAS_VERSION))
+PYTHON_AUGEAS_SETUP_TYPE = setuptools
+PYTHON_AUGEAS_LICENSE = LGPL-2.1+
+PYTHON_AUGEAS_LICENSE_FILES = COPYING
+PYTHON_AUGEAS_DEPENDENCIES = augeas host-python-cffi host-pkgconf
+# This will tell python-augeas to not call xml2-config, and instead
+# use pkg-config to find libxml2. libxml2 is an indirect dependency of
+# augeas, which is why it's not in our dependencies. It's odd that
+# python-augeas searches for libxml2, but that's what it
+# does. Question asked in the pull request at
+# https://github.com/hercules-team/python-augeas/pull/49.
+PYTHON_AUGEAS_ENV = XML2_CONFIG=/bin/false
+
+$(eval $(python-package))