Message ID | 20191023211924.950430-1-grzegorz@blach.pl |
---|---|
State | Accepted |
Headers | show |
Series | package/dbus-python: Fix build with python 3.8 | expand |
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
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
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
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 --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))
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(-)