unofficial mirror of notmuch@notmuchmail.org
 help / color / Atom feed
* [PATCH] configure: use cffi.FFI().verify() to test buildability of CFFI bindings
@ 2020-06-09  5:34 Tomi Ollila
  2020-06-09 11:07 ` David Bremner
  0 siblings, 1 reply; 4+ messages in thread
From: Tomi Ollila @ 2020-06-09  5:34 UTC (permalink / raw)
  To: notmuch; +Cc: tomi.ollila

Checking existence of pyconfig.h to determine whether CFFI-based
notmuch bindings are buildable is not enough; for example Fedora 32
ships pyconfig.h in python3-libs package, but python3-devel is required
to be installed for the bindings to build.

Executing cffi.FFI().verify() is pretty close to what is done in
bindings/python-cffi/notmuch2/_build.py to get the c code part of the
bindings built.
---

I just could not get this right last time. Probably I concentrated on
testing in debian 10 container so much, that the small differences in
other systems went unnoticed (had that fedora 32 host polluted by
installed python3-devel when doing final tests on that system)...

 configure | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/configure b/configure
index f4b3c61a..d85fe5d2 100755
--- a/configure
+++ b/configure
@@ -711,14 +711,12 @@ if [ $have_python -eq 0 ]; then
     errors=$((errors + 1))
 fi
 
-have_python3_dev=0
+have_python3=0
 if [ $have_python -eq 1 ]; then
-    printf "Checking for python3 dev (>= 3.5)..."
-    if "$python" -c 'import os, sys, sysconfig;
-assert sys.version_info >= (3,5)
-assert os.path.isfile(sysconfig.get_config_h_filename())' >/dev/null 2>&1; then
+    printf "Checking for python3 (>= 3.5)..."
+    if "$python" -c 'import sys, sysconfig; assert sys.version_info >= (3,5)'; >/dev/null 2>&1; then
         printf "Yes.\n"
-        have_python3_dev=1
+        have_python3=1
     else
         printf "No (will not install CFFI-based python bindings).\n"
     fi
@@ -726,9 +724,9 @@ fi
 
 have_python3_cffi=0
 have_python3_pytest=0
-if [ $have_python3_dev -eq 1 ]; then
+if [ $have_python3 -eq 1 ]; then
     printf "Checking for python3 cffi and setuptools... "
-    if "$python" -c 'import cffi; import setuptools' >/dev/null 2>&1; then
+    if "$python" -c 'import cffi,setuptools; cffi.FFI().verify()' >/dev/null 2>&1; then
         printf "Yes.\n"
         have_python3_cffi=1
     else
-- 
2.26.2

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

* Re: [PATCH] configure: use cffi.FFI().verify() to test buildability of CFFI bindings
  2020-06-09  5:34 [PATCH] configure: use cffi.FFI().verify() to test buildability of CFFI bindings Tomi Ollila
@ 2020-06-09 11:07 ` David Bremner
  2020-06-09 12:32   ` [PATCH v2] " Tomi Ollila
  0 siblings, 1 reply; 4+ messages in thread
From: David Bremner @ 2020-06-09 11:07 UTC (permalink / raw)
  To: Tomi Ollila, notmuch; +Cc: tomi.ollila

Tomi Ollila <tomi.ollila@iki.fi> writes:

> Checking existence of pyconfig.h to determine whether CFFI-based
> notmuch bindings are buildable is not enough; for example Fedora 32
> ships pyconfig.h in python3-libs package, but python3-devel is required
> to be installed for the bindings to build.
>
> Executing cffi.FFI().verify() is pretty close to what is done in
> bindings/python-cffi/notmuch2/_build.py to get the c code part of the
> bindings built.

For me (debian 10, python 3.8.3) this leaves __pycache__ in the top
directory. This is particularly unfortunate when configure is invoked by
"make clean"; I know, who runs clean first, except all debian packages
;). 

I tried adding a call to "cffi.verifier.cleanup_tmpdir()" per the cffi
docs, but there seems to be a nested __pycache__ directory that is not
cleaned up by that (or is created later).  I guess the best option is
just to rm -rf __pycache__ at the appropriate point in configure?

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

* [PATCH v2] configure: use cffi.FFI().verify() to test buildability of CFFI bindings
  2020-06-09 11:07 ` David Bremner
@ 2020-06-09 12:32   ` Tomi Ollila
  2020-06-10 10:20     ` David Bremner
  0 siblings, 1 reply; 4+ messages in thread
From: Tomi Ollila @ 2020-06-09 12:32 UTC (permalink / raw)
  To: notmuch; +Cc: tomi.ollila

Checking existence of pyconfig.h to determine whether CFFI-based
notmuch bindings are buildable is not enough; for example Fedora 32
ships pyconfig.h in python3-libs package, but python3-devel is required
to be installed for the bindings to build.

Executing cffi.FFI().verify() is pretty close to what is done in
bindings/python-cffi/notmuch2/_build.py to get the c code part of the
bindings built.
---

diff to v1:

> +    rm -rf __pycache__  # cffi.FFI().verify() uses this space

fits pretty well w/ pytest $conf removal few lines below

 configure | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/configure b/configure
index f4b3c61a..05ade05b 100755
--- a/configure
+++ b/configure
@@ -711,14 +711,12 @@ if [ $have_python -eq 0 ]; then
     errors=$((errors + 1))
 fi
 
-have_python3_dev=0
+have_python3=0
 if [ $have_python -eq 1 ]; then
-    printf "Checking for python3 dev (>= 3.5)..."
-    if "$python" -c 'import os, sys, sysconfig;
-assert sys.version_info >= (3,5)
-assert os.path.isfile(sysconfig.get_config_h_filename())' >/dev/null 2>&1; then
+    printf "Checking for python3 (>= 3.5)..."
+    if "$python" -c 'import sys, sysconfig; assert sys.version_info >= (3,5)'; >/dev/null 2>&1; then
         printf "Yes.\n"
-        have_python3_dev=1
+        have_python3=1
     else
         printf "No (will not install CFFI-based python bindings).\n"
     fi
@@ -726,14 +724,15 @@ fi
 
 have_python3_cffi=0
 have_python3_pytest=0
-if [ $have_python3_dev -eq 1 ]; then
+if [ $have_python3 -eq 1 ]; then
     printf "Checking for python3 cffi and setuptools... "
-    if "$python" -c 'import cffi; import setuptools' >/dev/null 2>&1; then
+    if "$python" -c 'import cffi,setuptools; cffi.FFI().verify()' >/dev/null 2>&1; then
         printf "Yes.\n"
         have_python3_cffi=1
     else
         printf "No (will not install CFFI-based python bindings).\n"
     fi
+    rm -rf __pycache__  # cffi.FFI().verify() uses this space
 
     printf "Checking for python3 pytest (>= 3.0)... "
     conf=$(mktemp)
-- 
2.25.1

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

* Re: [PATCH v2] configure: use cffi.FFI().verify() to test buildability of CFFI bindings
  2020-06-09 12:32   ` [PATCH v2] " Tomi Ollila
@ 2020-06-10 10:20     ` David Bremner
  0 siblings, 0 replies; 4+ messages in thread
From: David Bremner @ 2020-06-10 10:20 UTC (permalink / raw)
  To: Tomi Ollila, notmuch; +Cc: tomi.ollila

Tomi Ollila <tomi.ollila@iki.fi> writes:

> Checking existence of pyconfig.h to determine whether CFFI-based
> notmuch bindings are buildable is not enough; for example Fedora 32
> ships pyconfig.h in python3-libs package, but python3-devel is required
> to be installed for the bindings to build.
>
> Executing cffi.FFI().verify() is pretty close to what is done in
> bindings/python-cffi/notmuch2/_build.py to get the c code part of the
> bindings built.

v2 pushed to master and release

d

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

end of thread, back to index

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-09  5:34 [PATCH] configure: use cffi.FFI().verify() to test buildability of CFFI bindings Tomi Ollila
2020-06-09 11:07 ` David Bremner
2020-06-09 12:32   ` [PATCH v2] " Tomi Ollila
2020-06-10 10:20     ` David Bremner

unofficial mirror of notmuch@notmuchmail.org

Archives are clonable:
	git clone --mirror https://yhetil.org/notmuch/0 notmuch/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 notmuch notmuch/ https://yhetil.org/notmuch \
		notmuch@notmuchmail.org
	public-inbox-index notmuch

Example config snippet for mirrors

Newsgroups are available over NNTP:
	nntp://news.yhetil.org/yhetil.mail.notmuch.general
	nntp://news.gmane.io/gmane.mail.notmuch.general


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git