[Buildroot] [PATCH] package/pkg-meson.mk: set Python sysconfigdata

Adam Duskett aduskett at gmail.com
Mon Sep 16 18:41:42 UTC 2019


All;


On Sun, Aug 4, 2019 at 3:05 PM Arnout Vandecappelle (Essensium/Mind)
<arnout at mind.be> wrote:
>
> meson has support for Python dependencies, to e.g. build Python modules.
> It parses Python's sysconfig module to find the appropriate
> configuration variables. However, the sysconfig module is the one for
> the host, _not_ for the target. Therefore, wrong values may be set. Many
> of them get overridden anyway by the cross-compilation.conf. One
> particular one that is problematic is that it uses the python-XXX.pc
> pkg-config file for the host instead of the target, because it
> explicitly sets the PKG_CONFIG_LIBDIR found in sysconfig.
>
> Use the same trick as for python package: pass PYTHONPATH,
> PYTHONNOUSERSITE and _PYTHON_SYSCONFIGDATA_NAME in the environment to
> point to staging instead of host. This ensures the sysconfig from the
> target is used instead of the one from the host.
>
> An alternative would be to patch meson to not use the PKG_CONFIG_LIBDIR
> from sysconfig. However, it is likely that other problems will pop up at
> some point because of using the wrong sysconfig.
>
> Note that this approach will still break things when meson needs to
> build something for the host during a target build.
>
> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout at mind.be>
> Cc: Adam Duskett <Aduskett at gmail.com>
> Cc: Eric Le Bihan <eric.le.bihan.dev at free.fr>
> Cc: Peter Seiderer <ps.report at gmx.net>
> Cc: James Hilliard <james.hilliard1 at gmail.com>
> Cc: Yann E. MORIN <yann.morin.1998 at free.fr>
> ---
> The setting of _PYTHON_SYSCONFIGDATA_NAME is different from the one in
> pkg-python.mk. I don't understand how that definition could work: for
> Python2, it is empty, so sysconfig tries to import a module with name
> "". So apparently the call paths used by meson and by
> setuptools/distutils are slightly different.
> ---
>  package/pkg-meson.mk | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/package/pkg-meson.mk b/package/pkg-meson.mk
> index 0b811d1cc0..3f875c08ce 100644
> --- a/package/pkg-meson.mk
> +++ b/package/pkg-meson.mk
> @@ -81,6 +81,9 @@ define $(2)_CONFIGURE_CMDS
>             -e "s%@HOST_DIR@%$$(HOST_DIR)%g" \
>             package/meson/cross-compilation.conf.in \
>             > $$($$(PKG)_SRCDIR)/build/cross-compilation.conf
> +       _PYTHON_SYSCONFIGDATA_NAME="$$(if $$(BR2_PACKAGE_PYTHON3),$$(PKG_PYTHON_SYSCONFIGDATA_NAME),_sysconfigdata)" \
> +       PYTHONPATH="$$(if $$(BR2_PACKAGE_PYTHON3),$$(PYTHON3_PATH),$$(PYTHON_PATH))" \
> +       PYTHONNOUSERSITE=1 \
>         PATH=$$(BR_PATH) $$($$(PKG)_CONF_ENV) $$(MESON) \
>                 --prefix=/usr \
>                 --libdir=lib \
> --
> 2.21.0
>
Not only does this work, it also fixes cross-compiled python libraries names
built by meson (such as the new versions of python-gobject)

Tested-by: Adam Duskett <Aduskett at gmail.com>


More information about the buildroot mailing list