All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 1/2] package/python-augeas: new package
@ 2021-06-21 20:34 Thomas Petazzoni
  2021-06-21 20:34 ` [Buildroot] [PATCH 2/2] support/testing/tests/package/test_python_augeas: new test Thomas Petazzoni
  2021-06-24 21:53 ` [Buildroot] [PATCH 1/2] package/python-augeas: new package Yann E. MORIN
  0 siblings, 2 replies; 4+ messages in thread
From: Thomas Petazzoni @ 2021-06-21 20:34 UTC (permalink / raw)
  To: buildroot

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>
---
 DEVELOPERS                                    |   2 +
 package/Config.in                             |   1 +
 ...-Use-CFFI-in-out-of-line-API-mode-49.patch | 101 ++++++++++++++++++
 package/python-augeas/Config.in               |   8 ++
 package/python-augeas/python-augeas.hash      |   3 +
 package/python-augeas/python-augeas.mk        |  21 ++++
 6 files changed, 136 insertions(+)
 create mode 100644 package/python-augeas/0001-Use-CFFI-in-out-of-line-API-mode-49.patch
 create mode 100644 package/python-augeas/Config.in
 create mode 100644 package/python-augeas/python-augeas.hash
 create mode 100644 package/python-augeas/python-augeas.mk

diff --git a/DEVELOPERS b/DEVELOPERS
index f6621e9670..06d311a085 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1986,6 +1986,7 @@ F:	configs/galileo_defconfig
 
 N:	Nicolas Carrier <nicolas.carrier@orolia.com>
 F:	package/php-xdebug/
+F:	package/python-augeas/
 
 N:	Nicolas Cavallari <nicolas.cavallari@green-communications.fr>
 F:	package/libgit2/
@@ -2672,6 +2673,7 @@ F:	package/pkg-autotools.mk
 F:	package/pkg-generic.mk
 F:	package/python/
 F:	package/python3/
+F:	package/python-augeas/
 F:	package/python-mad/
 F:	package/python-serial/
 F:	package/qextserialport/
diff --git a/package/Config.in b/package/Config.in
index cb8ece4919..35e6d4d493 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -908,6 +908,7 @@ menu "External python modules"
 	source "package/python-async-lru/Config.in"
 	source "package/python-async-timeout/Config.in"
 	source "package/python-attrs/Config.in"
+	source "package/python-augeas/Config.in"
 	source "package/python-autobahn/Config.in"
 	source "package/python-automat/Config.in"
 	source "package/python-avro/Config.in"
diff --git a/package/python-augeas/0001-Use-CFFI-in-out-of-line-API-mode-49.patch b/package/python-augeas/0001-Use-CFFI-in-out-of-line-API-mode-49.patch
new file mode 100644
index 0000000000..da9093d723
--- /dev/null
+++ b/package/python-augeas/0001-Use-CFFI-in-out-of-line-API-mode-49.patch
@@ -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
+
diff --git a/package/python-augeas/Config.in b/package/python-augeas/Config.in
new file mode 100644
index 0000000000..3503a83b3b
--- /dev/null
+++ b/package/python-augeas/Config.in
@@ -0,0 +1,8 @@
+config BR2_PACKAGE_PYTHON_AUGEAS
+	bool "python-augeas"
+	depends on BR2_PACKAGE_AUGEAS
+	select BR2_PACKAGE_PYTHON_CFFI # runtime
+	help
+	  Pure python bindings for Augeas.
+
+	  https://github.com/hercules-team/python-augeas
diff --git a/package/python-augeas/python-augeas.hash b/package/python-augeas/python-augeas.hash
new file mode 100644
index 0000000000..f4f4209875
--- /dev/null
+++ b/package/python-augeas/python-augeas.hash
@@ -0,0 +1,3 @@
+# Locally computed
+sha256  1a1d2cdaf2ad4c091ed5ec7976c52d16e14ecfbf40b1bdcaced2465255fb0f87  python-augeas-1.1.0.tar.gz
+sha256  dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551  COPYING
diff --git a/package/python-augeas/python-augeas.mk b/package/python-augeas/python-augeas.mk
new file mode 100644
index 0000000000..7adaa84f49
--- /dev/null
+++ b/package/python-augeas/python-augeas.mk
@@ -0,0 +1,21 @@
+################################################################################
+#
+# 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))
-- 
2.31.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH 2/2] support/testing/tests/package/test_python_augeas: new test
  2021-06-21 20:34 [Buildroot] [PATCH 1/2] package/python-augeas: new package Thomas Petazzoni
@ 2021-06-21 20:34 ` Thomas Petazzoni
  2021-06-24 21:53 ` [Buildroot] [PATCH 1/2] package/python-augeas: new package Yann E. MORIN
  1 sibling, 0 replies; 4+ messages in thread
From: Thomas Petazzoni @ 2021-06-21 20:34 UTC (permalink / raw)
  To: buildroot

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
 DEVELOPERS                                          |  4 ++++
 .../testing/tests/package/sample_python_augeas.py   |  9 +++++++++
 support/testing/tests/package/test_python_augeas.py | 13 +++++++++++++
 3 files changed, 26 insertions(+)
 create mode 100644 support/testing/tests/package/sample_python_augeas.py
 create mode 100644 support/testing/tests/package/test_python_augeas.py

diff --git a/DEVELOPERS b/DEVELOPERS
index 06d311a085..9ff590978c 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1987,6 +1987,8 @@ F:	configs/galileo_defconfig
 N:	Nicolas Carrier <nicolas.carrier@orolia.com>
 F:	package/php-xdebug/
 F:	package/python-augeas/
+F:	support/testing/tests/package/sample_python_augeas.py
+F:	support/testing/tests/package/test_python_augeas.py
 
 N:	Nicolas Cavallari <nicolas.cavallari@green-communications.fr>
 F:	package/libgit2/
@@ -2687,6 +2689,8 @@ F:	package/squashfs/
 F:	package/wayland/
 F:	package/weston/
 F:	support/testing/tests/boot/test_syslinux.py
+F:	support/testing/tests/package/sample_python_augeas.py
+F:	support/testing/tests/package/test_python_augeas.py
 F:	toolchain/
 
 N:	Timo Ketola <timo.ketola@exertus.fi>
diff --git a/support/testing/tests/package/sample_python_augeas.py b/support/testing/tests/package/sample_python_augeas.py
new file mode 100644
index 0000000000..d62afa564e
--- /dev/null
+++ b/support/testing/tests/package/sample_python_augeas.py
@@ -0,0 +1,9 @@
+import augeas
+
+a = augeas.Augeas(root="/")
+hosts = a.match("/files/etc/hosts/*")
+assert(hosts is not None)
+assert(len(hosts) == 2)
+
+assert(a.get("/files/etc/hosts/1/ipaddr") == "127.0.0.1")
+assert(a.get("/files/etc/hosts/1/canonical") == "localhost")
diff --git a/support/testing/tests/package/test_python_augeas.py b/support/testing/tests/package/test_python_augeas.py
new file mode 100644
index 0000000000..c1424668d6
--- /dev/null
+++ b/support/testing/tests/package/test_python_augeas.py
@@ -0,0 +1,13 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonAugeas(TestPythonPackageBase):
+    __test__ = True
+    config = TestPythonPackageBase.config + \
+        """
+        BR2_PACKAGE_AUGEAS=y
+        BR2_PACKAGE_PYTHON3=y
+        BR2_PACKAGE_PYTHON_AUGEAS=y
+        """
+    sample_scripts = ["tests/package/sample_python_augeas.py"]
+    timeout = 60
-- 
2.31.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH 1/2] package/python-augeas: new package
  2021-06-21 20:34 [Buildroot] [PATCH 1/2] package/python-augeas: new package Thomas Petazzoni
  2021-06-21 20:34 ` [Buildroot] [PATCH 2/2] support/testing/tests/package/test_python_augeas: new test Thomas Petazzoni
@ 2021-06-24 21:53 ` Yann E. MORIN
  2021-06-25  6:51   ` Thomas Petazzoni
  1 sibling, 1 reply; 4+ messages in thread
From: Yann E. MORIN @ 2021-06-24 21:53 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2021-06-21 22:34 +0200, Thomas Petazzoni spake thusly:
> 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>

A new package with a runtime test? Applied to master, thanks.

[--SNIP--]
> diff --git a/package/python-augeas/python-augeas.mk b/package/python-augeas/python-augeas.mk
> new file mode 100644
> index 0000000000..7adaa84f49
> --- /dev/null
> +++ b/package/python-augeas/python-augeas.mk
> @@ -0,0 +1,21 @@
> +################################################################################
> +#
> +# 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.

They've now replied, and I am not sure I followed... Augeas' .pc does
not yield libxml2' CFLAGS, because it is a Requires.Private.

So, why does python-augeas need the CFLAGS from libxml2?

Anyway...

Regards,
Yann E. MORIN.

> +PYTHON_AUGEAS_ENV = XML2_CONFIG=/bin/false
> +
> +$(eval $(python-package))
> -- 
> 2.31.1
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH 1/2] package/python-augeas: new package
  2021-06-24 21:53 ` [Buildroot] [PATCH 1/2] package/python-augeas: new package Yann E. MORIN
@ 2021-06-25  6:51   ` Thomas Petazzoni
  0 siblings, 0 replies; 4+ messages in thread
From: Thomas Petazzoni @ 2021-06-25  6:51 UTC (permalink / raw)
  To: buildroot

On Thu, 24 Jun 2021 23:53:53 +0200
"Yann E. MORIN" <yann.morin.1998@free.fr> wrote:

> > +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.  
> 
> They've now replied, and I am not sure I followed... Augeas' .pc does
> not yield libxml2' CFLAGS, because it is a Requires.Private.
> 
> So, why does python-augeas need the CFLAGS from libxml2?

Yeah, I was also confused by their reply, and didn't investigate
further at this point.

Thanks for looking at the patch and merging!

Thomas
-- 
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-06-25  6:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-21 20:34 [Buildroot] [PATCH 1/2] package/python-augeas: new package Thomas Petazzoni
2021-06-21 20:34 ` [Buildroot] [PATCH 2/2] support/testing/tests/package/test_python_augeas: new test Thomas Petazzoni
2021-06-24 21:53 ` [Buildroot] [PATCH 1/2] package/python-augeas: new package Yann E. MORIN
2021-06-25  6:51   ` Thomas Petazzoni

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.