diff mbox series

package/dbus-python: Fix build with python 3.8

Message ID 20191023211924.950430-1-grzegorz@blach.pl
State Accepted
Headers show
Series package/dbus-python: Fix build with python 3.8 | expand

Commit Message

Grzegorz Blach Oct. 23, 2019, 9:19 p.m. UTC
test/import-repeatedly.c uses an embedded python interpreter
and PYTHON_EXTRA_LIBS is used only for building this test case,
so set PYTHON_EXTRA_LIBS with `python3-config --libs --embed`
to build this test case and don't link the module with libpython3.so.

Fixes:
 - http://autobuild.buildroot.org/results/b30/b308eeb5c5d95ab9f1dbfc19f9183f2ba3ba0ce3/
 - http://autobuild.buildroot.org/results/0dd/0dd9203f859b97ee5a3b6358644c26f8ab784ed8/
   and many similar failures.

Signed-off-by: Grzegorz Blach <grzegorz@blach.pl>
---
Changes v1 -> v2:
 - Set PYTHON_EXTRA_LIBS with `python3-config --libs --embed`
   instead of appending --embed to PYTHON_LIBS
---
 package/dbus-python/dbus-python.mk | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Thomas Petazzoni Oct. 24, 2019, 8:05 a.m. UTC | #1
On Wed, 23 Oct 2019 21:19:21 +0000
Grzegorz Blach <grzegorz@blach.pl> wrote:

> test/import-repeatedly.c uses an embedded python interpreter
> and PYTHON_EXTRA_LIBS is used only for building this test case,
> so set PYTHON_EXTRA_LIBS with `python3-config --libs --embed`
> to build this test case and don't link the module with libpython3.so.
> 
> Fixes:
>  - http://autobuild.buildroot.org/results/b30/b308eeb5c5d95ab9f1dbfc19f9183f2ba3ba0ce3/
>  - http://autobuild.buildroot.org/results/0dd/0dd9203f859b97ee5a3b6358644c26f8ab784ed8/
>    and many similar failures.
> 
> Signed-off-by: Grzegorz Blach <grzegorz@blach.pl>
> ---
> Changes v1 -> v2:
>  - Set PYTHON_EXTRA_LIBS with `python3-config --libs --embed`
>    instead of appending --embed to PYTHON_LIBS

This doesn't change the fix, which I think still isn't correct (but I
haven't checked in details). A Python extension should not need the
--embed option.

Thomas
Thomas Petazzoni Oct. 24, 2019, 8:06 a.m. UTC | #2
On Thu, 24 Oct 2019 10:05:34 +0200
Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote:

> On Wed, 23 Oct 2019 21:19:21 +0000
> Grzegorz Blach <grzegorz@blach.pl> wrote:
> 
> > test/import-repeatedly.c uses an embedded python interpreter
> > and PYTHON_EXTRA_LIBS is used only for building this test case,
> > so set PYTHON_EXTRA_LIBS with `python3-config --libs --embed`
> > to build this test case and don't link the module with libpython3.so.
> > 
> > Fixes:
> >  - http://autobuild.buildroot.org/results/b30/b308eeb5c5d95ab9f1dbfc19f9183f2ba3ba0ce3/
> >  - http://autobuild.buildroot.org/results/0dd/0dd9203f859b97ee5a3b6358644c26f8ab784ed8/
> >    and many similar failures.
> > 
> > Signed-off-by: Grzegorz Blach <grzegorz@blach.pl>
> > ---
> > Changes v1 -> v2:
> >  - Set PYTHON_EXTRA_LIBS with `python3-config --libs --embed`
> >    instead of appending --embed to PYTHON_LIBS  
> 
> This doesn't change the fix, which I think still isn't correct (but I
> haven't checked in details). A Python extension should not need the
> --embed option.

And I replied too fast, without reading your commit log. Reading it, it
makes more sense. However, I think it should be fixed in the
dbus-python build system itself, so that the fix can be upstreamed.
Could you have a look at that ?

Of course, it's not trivial, because you need to pass --embed for
Python >= 3.8, but not for older versions of Python.

Thomas
Arnout Vandecappelle Oct. 24, 2019, 8:43 a.m. UTC | #3
On 24/10/2019 10:06, Thomas Petazzoni wrote:
> On Thu, 24 Oct 2019 10:05:34 +0200
> Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote:
> 
>> On Wed, 23 Oct 2019 21:19:21 +0000
>> Grzegorz Blach <grzegorz@blach.pl> wrote:
>>
>>> test/import-repeatedly.c uses an embedded python interpreter
>>> and PYTHON_EXTRA_LIBS is used only for building this test case,
>>> so set PYTHON_EXTRA_LIBS with `python3-config --libs --embed`
>>> to build this test case and don't link the module with libpython3.so.
>>>
>>> Fixes:
>>>  - http://autobuild.buildroot.org/results/b30/b308eeb5c5d95ab9f1dbfc19f9183f2ba3ba0ce3/
>>>  - http://autobuild.buildroot.org/results/0dd/0dd9203f859b97ee5a3b6358644c26f8ab784ed8/
>>>    and many similar failures.
>>>
>>> Signed-off-by: Grzegorz Blach <grzegorz@blach.pl>
>>> ---
>>> Changes v1 -> v2:
>>>  - Set PYTHON_EXTRA_LIBS with `python3-config --libs --embed`
>>>    instead of appending --embed to PYTHON_LIBS  
>>
>> This doesn't change the fix, which I think still isn't correct (but I
>> haven't checked in details). A Python extension should not need the
>> --embed option.
> 
> And I replied too fast, without reading your commit log. Reading it, it
> makes more sense. However, I think it should be fixed in the
> dbus-python build system itself, so that the fix can be upstreamed.
> Could you have a look at that ?
> 
> Of course, it's not trivial, because you need to pass --embed for
> Python >= 3.8, but not for older versions of Python.

 Actually, it looks like this should be retrieved from sysconfig. So maybe it's
just a matter of setting the proper environment variables like we do in
pkg-python? In other words, I think the entire logic in dbus-python.mk could be
replaced with:

DBUS_PYTHON_CONF_ENV = $(PKG_PYTHON_SETUPTOOLS_ENV)
HOST_DBUS_PYTHON_CONF_ENV = $(HOST_PKG_PYTHON_SETUPTOOLS_ENV)

 We may still need to set PYTHON=$(HOST_DIR)/bin/python[23] as well.

 Regards,
 Arnout
Thomas Petazzoni Oct. 25, 2019, 4:22 p.m. UTC | #4
On Wed, 23 Oct 2019 21:19:21 +0000
Grzegorz Blach <grzegorz@blach.pl> wrote:

> test/import-repeatedly.c uses an embedded python interpreter
> and PYTHON_EXTRA_LIBS is used only for building this test case,
> so set PYTHON_EXTRA_LIBS with `python3-config --libs --embed`
> to build this test case and don't link the module with libpython3.so.
> 
> Fixes:
>  - http://autobuild.buildroot.org/results/b30/b308eeb5c5d95ab9f1dbfc19f9183f2ba3ba0ce3/
>  - http://autobuild.buildroot.org/results/0dd/0dd9203f859b97ee5a3b6358644c26f8ab784ed8/
>    and many similar failures.
> 
> Signed-off-by: Grzegorz Blach <grzegorz@blach.pl>

Guess what, in the end, after investigating, I agree that this patch
was the right solution! PYTHON_LIBS is used when building Python
extensions and PYTHON_EXTRA_LIBS is used when building code that embeds
a Python interpreter.

So this patch made perfect sense. Of course, it would be *much* better
for ax_python_devel.m4 to use python-config, rather than do its
convoluted logic, but your patch is simple is easy, so I've applied.

Thanks!

Thomas
diff mbox series

Patch

diff --git a/package/dbus-python/dbus-python.mk b/package/dbus-python/dbus-python.mk
index eaf4e5f483..d48208f1d1 100644
--- a/package/dbus-python/dbus-python.mk
+++ b/package/dbus-python/dbus-python.mk
@@ -35,14 +35,16 @@  DBUS_PYTHON_DEPENDENCIES += python3 host-python3
 DBUS_PYTHON_CONF_ENV += \
 	PYTHON=$(HOST_DIR)/bin/python3 \
 	PYTHON_INCLUDES="`$(STAGING_DIR)/usr/bin/python3-config --includes`" \
-	PYTHON_LIBS="`$(STAGING_DIR)/usr/bin/python3-config --ldflags`"
+	PYTHON_LIBS="`$(STAGING_DIR)/usr/bin/python3-config --ldflags`" \
+	PYTHON_EXTRA_LIBS="`$(STAGING_DIR)/usr/bin/python3-config --libs --embed`"
 
 HOST_DBUS_PYTHON_DEPENDENCIES += host-python3
 
 HOST_DBUS_PYTHON_CONF_ENV += \
 	PYTHON=$(HOST_DIR)/bin/python3 \
 	PYTHON_INCLUDES="`$(HOST_DIR)/usr/bin/python3-config --includes`" \
-	PYTHON_LIBS="`$(HOST_DIR)/usr/bin/python3-config --ldflags`"
+	PYTHON_LIBS="`$(HOST_DIR)/usr/bin/python3-config --ldflags`" \
+	PYTHON_EXTRA_LIBS="`$(HOST_DIR)/usr/bin/python3-config --libs --embed`"
 endif
 
 $(eval $(autotools-package))