diff mbox series

[1/2] allow build infrastructure to pick up installed meson tool

Message ID 20190503131851.12315-1-norbert.lange@andritz.com
State Rejected
Headers show
Series [1/2] allow build infrastructure to pick up installed meson tool | expand

Commit Message

Norbert Lange May 3, 2019, 1:18 p.m. UTC
From: Norbert Lange <nolange79@gmail.com>

Automatically check for an available meson tool,
and use it aslond the version is fitting.

Some concerns are about being able to figure out the
correct version for all available packages in buildroot.
The min version could be set to version 1.0 to postpone the
problem, but still have the infrastructure in place
to allow users to override the version.

Currently host-ninja will still be always built.

Signed-off-by: Norbert Lange <nolange79@gmail.com>
---
 package/meson/meson.mk                   |  1 -
 package/pkg-meson.mk                     |  4 +--
 support/dependencies/check-host-meson.mk | 16 +++++++++
 support/dependencies/check-host-meson.sh | 45 ++++++++++++++++++++++++
 4 files changed, 63 insertions(+), 3 deletions(-)
 create mode 100644 support/dependencies/check-host-meson.mk
 create mode 100755 support/dependencies/check-host-meson.sh

--
2.20.1

Comments

Peter Seiderer May 3, 2019, 4:57 p.m. UTC | #1
Hello Norbert,

appreciating every patch which speeds up the buildroot build process ;-),
but some nits, one minor comments and one major concern, see below...

On Fri,  3 May 2019 15:18:50 +0200, Norbert Lange <nolange79@gmail.com> wrote:

> From: Norbert Lange <nolange79@gmail.com>
>
> Automatically check for an available meson tool,
> and use it aslond the version is fitting.

s/aslond/as long/

>
> Some concerns are about being able to figure out the
> correct version for all available packages in buildroot.
> The min version could be set to version 1.0 to postpone the

You mean 1.0 to disable host meson usage?

> problem, but still have the infrastructure in place
> to allow users to override the version.
>
> Currently host-ninja will still be always built.
>
> Signed-off-by: Norbert Lange <nolange79@gmail.com>
> ---
>  package/meson/meson.mk                   |  1 -
>  package/pkg-meson.mk                     |  4 +--
>  support/dependencies/check-host-meson.mk | 16 +++++++++
>  support/dependencies/check-host-meson.sh | 45 ++++++++++++++++++++++++
>  4 files changed, 63 insertions(+), 3 deletions(-)
>  create mode 100644 support/dependencies/check-host-meson.mk
>  create mode 100755 support/dependencies/check-host-meson.sh
>
> diff --git a/package/meson/meson.mk b/package/meson/meson.mk
> index cf62b0ddde..2ce7a26ab5 100644
> --- a/package/meson/meson.mk
> +++ b/package/meson/meson.mk
> @@ -10,7 +10,6 @@ MESON_LICENSE = Apache-2.0
>  MESON_LICENSE_FILES = COPYING
>  MESON_SETUP_TYPE = setuptools
>
> -HOST_MESON_DEPENDENCIES = host-ninja
>  HOST_MESON_NEEDS_HOST_PYTHON = python3
>
>  HOST_MESON_TARGET_ENDIAN = $(call LOWERCASE,$(BR2_ENDIAN))
> diff --git a/package/pkg-meson.mk b/package/pkg-meson.mk
> index 7f1838c09a..25e9bb814e 100644
> --- a/package/pkg-meson.mk
> +++ b/package/pkg-meson.mk
> @@ -25,7 +25,7 @@
>  # $(HOST_DIR)/bin/python3 will not look for Meson modules in
>  # $HOME/.local/lib/python3.x/site-packages
>  #
> -MESON		= PYTHONNOUSERSITE=y $(HOST_DIR)/bin/meson
> +MESON		= PYTHONNOUSERSITE=y $(BR2_MESON)
>  NINJA		= PYTHONNOUSERSITE=y $(HOST_DIR)/bin/ninja
>  NINJA_OPTS	= $(if $(VERBOSE),-v) -j$(PARALLEL_JOBS)
>
> @@ -105,7 +105,7 @@ endef
>  endif
>  endif
>
> -$(2)_DEPENDENCIES += host-meson
> +$(2)_DEPENDENCIES += $(BR2_MESON_HOST_DEPENDENCY)
>
>  #
>  # Build step. Only define it if not already defined by the package .mk
> diff --git a/support/dependencies/check-host-meson.mk b/support/dependencies/check-host-meson.mk
> new file mode 100644
> index 0000000000..6c779b3e6d
> --- /dev/null
> +++ b/support/dependencies/check-host-meson.mk
> @@ -0,0 +1,16 @@
> +# Set this to either 0.49 or higher, depending on the highest minimum
> +# version required by any of the packages bundled in Buildroot. If a
> +# package is bumped or a new one added, and it requires a higher
> +# version, our meson infra will catch it and build its own.
> +#
> +BR2_MESON_VERSION_MIN = 0.49

Needs support for third version number, see latest meson bump to 0.50 and revert, but
0.50.1 worked ([1], [2], [3])...

The major concern is no distribution will ship meson with the still needed
buildroot patch, see [4]...

Regards,
Peter

[1] https://git.buildroot.net/buildroot/commit/?id=114e9dcd28e1001b74689215ec669b8940dc3ea9
[2] https://git.buildroot.net/buildroot/commit/?id=c37b81af64dd8d6729325d8edbe633e6a186bb3d
[3] https://git.buildroot.net/buildroot/commit/?id=70fb5e610761dd6468a058c580acc3d4f81fe547
[4] https://git.buildroot.net/buildroot/tree/package/meson/0001-Only-fix-RPATH-if-install_rpath-is-not-empty.patch

> +
> +BR2_MESON_CANDIDATES ?= meson
> +BR2_MESON ?= $(call suitable-host-package,meson,\
> +	$(BR2_MESON_VERSION_MIN) $(BR2_MESON_CANDIDATES))
> +ifeq ($(BR2_MESON),)
> +BR2_MESON = $(HOST_DIR)/bin/meson
> +BR2_MESON_HOST_DEPENDENCY = host-meson host-ninja
> +else
> +BR2_MESON_HOST_DEPENDENCY = host-ninja
> +endif
> diff --git a/support/dependencies/check-host-meson.sh b/support/dependencies/check-host-meson.sh
> new file mode 100755
> index 0000000000..805fac9349
> --- /dev/null
> +++ b/support/dependencies/check-host-meson.sh
> @@ -0,0 +1,45 @@
> +#!/bin/sh
> +
> +# prevent shift error
> +[ $# -lt 2 ] && exit 1
> +
> +split_version() {
> +    local VARPREFIX
> +    local NUMBERS
> +    local major
> +    local minor
> +
> +    VARPREFIX=$1
> +    NUMBERS=$2
> +
> +    major=${NUMBERS%%\.*}
> +    NUMBERS=${NUMBERS#$major}; NUMBERS=${NUMBERS#\.}
> +    minor=${NUMBERS%%\.*}
> +    NUMBERS=${NUMBERS#$minor}; NUMBERS=${NUMBERS#\.}
> +
> +    # ensure that missing values are 0
> +    eval "${VARPREFIX}_major=\$major; ${VARPREFIX}_minor=\$((minor + 0)); ${VARPREFIX}_bugfix=\$((NUMBERS + 0));"
> +}
> +
> +split_version req "$1"
> +
> +shift
> +
> +for candidate; do
> +
> +    # Try to locate the candidate. Discard it if not located.
> +    meson=$(which "${candidate}" 2>/dev/null)
> +    [ -n "${meson}" ] || continue
> +
> +    split_version cur "$("${meson}" --version)"
> +
> +    [ -n "${cur_major}" -a "${cur_major}" -ge "${req_major}" ] || continue
> +    [ "${cur_major}" -gt "${req_major}" ] || [ "${cur_minor}" -ge "${req_minor}" ] || continue
> +    [ "${cur_minor}" -gt "${req_minor}" ] || [ "${cur_bugfix}" -ge "${req_bugfix}" ] || continue
> +
> +    echo "${meson}"
> +    exit
> +done
> +
> +# echo nothing: no suitable meson found
> +exit 1
> --
> 2.20.1
>
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Norbert Lange May 3, 2019, 7:21 p.m. UTC | #2
Am Fr., 3. Mai 2019 um 18:57 Uhr schrieb Peter Seiderer <ps.report@gmx.net>:
>
> Hello Norbert,
>
> appreciating every patch which speeds up the buildroot build process ;-),
> but some nits, one minor comments and one major concern, see below...
>
> On Fri,  3 May 2019 15:18:50 +0200, Norbert Lange <nolange79@gmail.com> wrote:
>
> > From: Norbert Lange <nolange79@gmail.com>
> >
> > Automatically check for an available meson tool,
> > and use it aslond the version is fitting.
>
> s/aslond/as long/

Ack

> >
> > Some concerns are about being able to figure out the
> > correct version for all available packages in buildroot.
> > The min version could be set to version 1.0 to postpone the
>
> You mean 1.0 to disable host meson usage?

Yes, so meson is always built like it is now,
if this is too critical to enable by default.

> > problem, but still have the infrastructure in place
> > to allow users to override the version.
> >
> > Currently host-ninja will still be always built.
> >
> > Signed-off-by: Norbert Lange <nolange79@gmail.com>
> > ---
> >  package/meson/meson.mk                   |  1 -
> >  package/pkg-meson.mk                     |  4 +--
> >  support/dependencies/check-host-meson.mk | 16 +++++++++
> >  support/dependencies/check-host-meson.sh | 45 ++++++++++++++++++++++++
> >  4 files changed, 63 insertions(+), 3 deletions(-)
> >  create mode 100644 support/dependencies/check-host-meson.mk
> >  create mode 100755 support/dependencies/check-host-meson.sh
> >
> > diff --git a/package/meson/meson.mk b/package/meson/meson.mk
> > index cf62b0ddde..2ce7a26ab5 100644
> > --- a/package/meson/meson.mk
> > +++ b/package/meson/meson.mk
> > @@ -10,7 +10,6 @@ MESON_LICENSE = Apache-2.0
> >  MESON_LICENSE_FILES = COPYING
> >  MESON_SETUP_TYPE = setuptools
> >
> > -HOST_MESON_DEPENDENCIES = host-ninja
> >  HOST_MESON_NEEDS_HOST_PYTHON = python3
> >
> >  HOST_MESON_TARGET_ENDIAN = $(call LOWERCASE,$(BR2_ENDIAN))
> > diff --git a/package/pkg-meson.mk b/package/pkg-meson.mk
> > index 7f1838c09a..25e9bb814e 100644
> > --- a/package/pkg-meson.mk
> > +++ b/package/pkg-meson.mk
> > @@ -25,7 +25,7 @@
> >  # $(HOST_DIR)/bin/python3 will not look for Meson modules in
> >  # $HOME/.local/lib/python3.x/site-packages
> >  #
> > -MESON                = PYTHONNOUSERSITE=y $(HOST_DIR)/bin/meson
> > +MESON                = PYTHONNOUSERSITE=y $(BR2_MESON)
> >  NINJA                = PYTHONNOUSERSITE=y $(HOST_DIR)/bin/ninja
> >  NINJA_OPTS   = $(if $(VERBOSE),-v) -j$(PARALLEL_JOBS)
> >
> > @@ -105,7 +105,7 @@ endef
> >  endif
> >  endif
> >
> > -$(2)_DEPENDENCIES += host-meson
> > +$(2)_DEPENDENCIES += $(BR2_MESON_HOST_DEPENDENCY)
> >
> >  #
> >  # Build step. Only define it if not already defined by the package .mk
> > diff --git a/support/dependencies/check-host-meson.mk b/support/dependencies/check-host-meson.mk
> > new file mode 100644
> > index 0000000000..6c779b3e6d
> > --- /dev/null
> > +++ b/support/dependencies/check-host-meson.mk
> > @@ -0,0 +1,16 @@
> > +# Set this to either 0.49 or higher, depending on the highest minimum
> > +# version required by any of the packages bundled in Buildroot. If a
> > +# package is bumped or a new one added, and it requires a higher
> > +# version, our meson infra will catch it and build its own.
> > +#
> > +BR2_MESON_VERSION_MIN = 0.49
>
> Needs support for third version number, see latest meson bump to 0.50 and revert, but
> 0.50.1 worked ([1], [2], [3])...

There is support for up to 3 version components in
support/dependencies/check-host-meson.sh

>
> The major concern is no distribution will ship meson with the still needed
> buildroot patch, see [4]...

Ok, news to me.
Whats the practical effect though, does rpath even work if you
relocated buildroot?
Is it necessary if you set LD_LIBRARY_PATH?
(From my personal experience I was never happy with RPATH).

>
> Regards,
> Peter

Regards, Norbert
Thomas Petazzoni May 7, 2019, 8:56 p.m. UTC | #3
Hello,

On Fri, 3 May 2019 18:57:21 +0200
Peter Seiderer <ps.report@gmx.net> wrote:

> The major concern is no distribution will ship meson with the still needed
> buildroot patch, see [4]...

Indeed, that makes it impractical/impossible to use a system-provided
meson. If we want to get there at some point, the
0001-Only-fix-RPATH-if-install_rpath-is-not-empty.patch patch needs to
be upstreamed in a form or another.

Best regards,

Thomas
Norbert Lange May 8, 2019, 9:38 a.m. UTC | #4
Am Di., 7. Mai 2019 um 22:56 Uhr schrieb Thomas Petazzoni
<thomas.petazzoni@bootlin.com>:
>
> Hello,
>
> On Fri, 3 May 2019 18:57:21 +0200
> Peter Seiderer <ps.report@gmx.net> wrote:
>
> > The major concern is no distribution will ship meson with the still needed
> > buildroot patch, see [4]...
>
> Indeed, that makes it impractical/impossible to use a system-provided
> meson. If we want to get there at some point, the
> 0001-Only-fix-RPATH-if-install_rpath-is-not-empty.patch patch needs to
> be upstreamed in a form or another.

I see why you would not want to depend on a system provided meson,
but it does work for target libraries.
So my proposal would be to incorporate the changes now,
with min-version set to a value that always evaluates to false.

So a user like me can enable the system meson easily,
even if its not officially supported or tested.

Norbert
diff mbox series

Patch

diff --git a/package/meson/meson.mk b/package/meson/meson.mk
index cf62b0ddde..2ce7a26ab5 100644
--- a/package/meson/meson.mk
+++ b/package/meson/meson.mk
@@ -10,7 +10,6 @@  MESON_LICENSE = Apache-2.0
 MESON_LICENSE_FILES = COPYING
 MESON_SETUP_TYPE = setuptools

-HOST_MESON_DEPENDENCIES = host-ninja
 HOST_MESON_NEEDS_HOST_PYTHON = python3

 HOST_MESON_TARGET_ENDIAN = $(call LOWERCASE,$(BR2_ENDIAN))
diff --git a/package/pkg-meson.mk b/package/pkg-meson.mk
index 7f1838c09a..25e9bb814e 100644
--- a/package/pkg-meson.mk
+++ b/package/pkg-meson.mk
@@ -25,7 +25,7 @@ 
 # $(HOST_DIR)/bin/python3 will not look for Meson modules in
 # $HOME/.local/lib/python3.x/site-packages
 #
-MESON		= PYTHONNOUSERSITE=y $(HOST_DIR)/bin/meson
+MESON		= PYTHONNOUSERSITE=y $(BR2_MESON)
 NINJA		= PYTHONNOUSERSITE=y $(HOST_DIR)/bin/ninja
 NINJA_OPTS	= $(if $(VERBOSE),-v) -j$(PARALLEL_JOBS)

@@ -105,7 +105,7 @@  endef
 endif
 endif

-$(2)_DEPENDENCIES += host-meson
+$(2)_DEPENDENCIES += $(BR2_MESON_HOST_DEPENDENCY)

 #
 # Build step. Only define it if not already defined by the package .mk
diff --git a/support/dependencies/check-host-meson.mk b/support/dependencies/check-host-meson.mk
new file mode 100644
index 0000000000..6c779b3e6d
--- /dev/null
+++ b/support/dependencies/check-host-meson.mk
@@ -0,0 +1,16 @@ 
+# Set this to either 0.49 or higher, depending on the highest minimum
+# version required by any of the packages bundled in Buildroot. If a
+# package is bumped or a new one added, and it requires a higher
+# version, our meson infra will catch it and build its own.
+#
+BR2_MESON_VERSION_MIN = 0.49
+
+BR2_MESON_CANDIDATES ?= meson
+BR2_MESON ?= $(call suitable-host-package,meson,\
+	$(BR2_MESON_VERSION_MIN) $(BR2_MESON_CANDIDATES))
+ifeq ($(BR2_MESON),)
+BR2_MESON = $(HOST_DIR)/bin/meson
+BR2_MESON_HOST_DEPENDENCY = host-meson host-ninja
+else
+BR2_MESON_HOST_DEPENDENCY = host-ninja
+endif
diff --git a/support/dependencies/check-host-meson.sh b/support/dependencies/check-host-meson.sh
new file mode 100755
index 0000000000..805fac9349
--- /dev/null
+++ b/support/dependencies/check-host-meson.sh
@@ -0,0 +1,45 @@ 
+#!/bin/sh
+
+# prevent shift error
+[ $# -lt 2 ] && exit 1
+
+split_version() {
+    local VARPREFIX
+    local NUMBERS
+    local major
+    local minor
+
+    VARPREFIX=$1
+    NUMBERS=$2
+
+    major=${NUMBERS%%\.*}
+    NUMBERS=${NUMBERS#$major}; NUMBERS=${NUMBERS#\.}
+    minor=${NUMBERS%%\.*}
+    NUMBERS=${NUMBERS#$minor}; NUMBERS=${NUMBERS#\.}
+
+    # ensure that missing values are 0
+    eval "${VARPREFIX}_major=\$major; ${VARPREFIX}_minor=\$((minor + 0)); ${VARPREFIX}_bugfix=\$((NUMBERS + 0));"
+}
+
+split_version req "$1"
+
+shift
+
+for candidate; do
+
+    # Try to locate the candidate. Discard it if not located.
+    meson=$(which "${candidate}" 2>/dev/null)
+    [ -n "${meson}" ] || continue
+
+    split_version cur "$("${meson}" --version)"
+
+    [ -n "${cur_major}" -a "${cur_major}" -ge "${req_major}" ] || continue
+    [ "${cur_major}" -gt "${req_major}" ] || [ "${cur_minor}" -ge "${req_minor}" ] || continue
+    [ "${cur_minor}" -gt "${req_minor}" ] || [ "${cur_bugfix}" -ge "${req_bugfix}" ] || continue
+
+    echo "${meson}"
+    exit
+done
+
+# echo nothing: no suitable meson found
+exit 1