[Buildroot] [PATCH v3 1/1] package/meson: bump to version 0.53.0
James Hilliard
james.hilliard1 at gmail.com
Thu Jan 23 01:56:32 UTC 2020
Removed patch that is now upstream.
Add patch to prevent passing an invalid linker to gcc fixing:
ERROR: Unable to determine dynamic linker
Signed-off-by: James Hilliard <james.hilliard1 at gmail.com>
---
Changes v2 -> v3:
- backport upstream fix from commit instead of pull request
Changes v1 -> v2:
- add patch to prevent passing an invalid linker to gcc
---
...ic-libs-when-default-library-static.patch} | 0
...dist.py-import-lzma-only-when-needed.patch | 50 -----
...-environment-Replace-LD-with-LANG-LD.patch | 193 ++++++++++++++++++
package/meson/meson.hash | 4 +-
package/meson/meson.mk | 2 +-
5 files changed, 196 insertions(+), 53 deletions(-)
rename package/meson/{0003-Prefer-ext-static-libs-when-default-library-static.patch => 0002-Prefer-ext-static-libs-when-default-library-static.patch} (100%)
delete mode 100644 package/meson/0002-mdist.py-import-lzma-only-when-needed.patch
create mode 100644 package/meson/0003-environment-Replace-LD-with-LANG-LD.patch
diff --git a/package/meson/0003-Prefer-ext-static-libs-when-default-library-static.patch b/package/meson/0002-Prefer-ext-static-libs-when-default-library-static.patch
similarity index 100%
rename from package/meson/0003-Prefer-ext-static-libs-when-default-library-static.patch
rename to package/meson/0002-Prefer-ext-static-libs-when-default-library-static.patch
diff --git a/package/meson/0002-mdist.py-import-lzma-only-when-needed.patch b/package/meson/0002-mdist.py-import-lzma-only-when-needed.patch
deleted file mode 100644
index 81758bc1b3..0000000000
--- a/package/meson/0002-mdist.py-import-lzma-only-when-needed.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From a3443360c8c0014638366d5bb2f5aa7683d5aec2 Mon Sep 17 00:00:00 2001
-From: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
-Date: Sat, 19 Oct 2019 09:52:06 +0200
-Subject: [PATCH] mdist.py: import lzma only when needed
-
-Importing lzma requires that python was built with lzma support. Buildroot
-builds its own version of python, without lzma support (i.e. without
-dependency on host-xz).
-
-lzma is anyway only needed to make the dist target, which we don't do in
-Buildroot. Therefore, in the Buildroot context, everything still works
-properly without lzma support.
-
-Moving the import down to the place where it is actually needed does not
-remove any functionality but fixes the problem for Buildroot.
-
-Source of patch:
-http://lists.busybox.net/pipermail/buildroot/2019-October/262990.html
-http://code.bulix.org/gdxcu4-914360
-
-Fixes https://github.com/mesonbuild/meson/issues/6012
-
-Signed-off-by: Bernd Kuhls <bernd.kuhls at t-online.de>
----
- mesonbuild/mdist.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/mesonbuild/mdist.py b/mesonbuild/mdist.py
-index 7b753826..28e2fced 100644
---- a/mesonbuild/mdist.py
-+++ b/mesonbuild/mdist.py
-@@ -13,7 +13,6 @@
- # limitations under the License.
-
-
--import lzma
- import gzip
- import os
- import sys
-@@ -133,6 +132,7 @@ def create_dist_hg(dist_name, archives, src_root, bld_root, dist_sub, dist_scrip
- if dist_scripts:
- mlog.warning('dist scripts are not supported in Mercurial projects')
- if 'xztar' in archives:
-+ import lzma
- with lzma.open(xzname, 'wb') as xf, open(tarname, 'rb') as tf:
- shutil.copyfileobj(tf, xf)
- output_names.append(xzname)
---
-2.20.1
-
diff --git a/package/meson/0003-environment-Replace-LD-with-LANG-LD.patch b/package/meson/0003-environment-Replace-LD-with-LANG-LD.patch
new file mode 100644
index 0000000000..225b62fdd8
--- /dev/null
+++ b/package/meson/0003-environment-Replace-LD-with-LANG-LD.patch
@@ -0,0 +1,193 @@
+From abfa2fd3289c1e8aee230d58935e72fb617ed4e9 Mon Sep 17 00:00:00 2001
+From: Dylan Baker <dylan at pnwbakers.com>
+Date: Mon, 13 Jan 2020 11:15:36 -0800
+Subject: [PATCH] environment: Replace LD with <LANG>LD
+
+The rust code is ugly, because rust is annoying. It doesn't invoke a
+linker directly (unless that linker is link.exe or lld-link.exe),
+instead it invokes the C compiler (gcc or clang usually) to do it's
+linking. Meson doesn't have good abstractions for this, though we
+probably should because some of the D compilers do the same thing.
+Either that or we should just call the c compiler directly, like vala
+does.
+
+This changes the public interface for meson, which we don't do unless we
+absolutely have to. In this case I think we need to do it. A fair number
+of projects have already been using 'ld' in their cross/native files to
+get the ld binary and call it directly in custom_targets or generators,
+and we broke that. While we could hit this problem again names like
+`c_ld` and `cpp_ld` are far less likely to cause collisions than `ld`.
+Additionally this gives a way to set the linker on a per-compiler basis,
+which is probably in itself very useful.
+
+Fixes #6442
+[james.hilliard1 at gmail.com: backport from upstream commit
+730a7b296fdff8aca58e15829485b3b68262d3c0]
+Signed-off-by: James Hilliard <james.hilliard1 at gmail.com>
+---
+ docs/markdown/howtox.md | 34 +++++++++++++-------
+ mesonbuild/envconfig.py | 10 +++++-
+ mesonbuild/environment.py | 66 ++++++++++++++++++++++++---------------
+ run_unittests.py | 7 +++--
+ 4 files changed, 77 insertions(+), 40 deletions(-)
+
+diff --git a/mesonbuild/envconfig.py b/mesonbuild/envconfig.py
+index 0f277a7b..a13ac419 100644
+--- a/mesonbuild/envconfig.py
++++ b/mesonbuild/envconfig.py
+@@ -305,11 +305,19 @@ class BinaryTable(HasEnvVarFallback):
+ 'rust': 'RUSTC',
+ 'vala': 'VALAC',
+
++ # Linkers
++ 'c_ld': 'CC_LD',
++ 'cpp_ld': 'CXX_LD',
++ 'd_ld': 'D_LD',
++ 'fortran_ld': 'F_LD',
++ 'objc_ld': 'OBJC_LD',
++ 'objcpp_ld': 'OBJCPP_LD',
++ 'rust_ld': 'RUST_LD',
++
+ # Binutils
+ 'strip': 'STRIP',
+ 'ar': 'AR',
+ 'windres': 'WINDRES',
+- 'ld': 'LD',
+
+ # Other tools
+ 'cmake': 'CMAKE',
+diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
+index 77fc1aea..58d135dc 100644
+--- a/mesonbuild/environment.py
++++ b/mesonbuild/environment.py
+@@ -748,7 +748,7 @@ class Environment:
+ check_args += self.coredata.compiler_options[for_machine][comp_class.language + '_args'].value
+
+ override = [] # type: typing.List[str]
+- value = self.binaries[for_machine].lookup_entry('ld')
++ value = self.binaries[for_machine].lookup_entry(comp_class.language + 'ld')
+ if value is not None:
+ override = comp_class.use_linker_args(value[0])
+ check_args += override
+@@ -811,7 +811,7 @@ class Environment:
+ check_args = comp_class.LINKER_PREFIX + ['--version'] + extra_args
+
+ override = [] # type: typing.List[str]
+- value = self.binaries[for_machine].lookup_entry('ld')
++ value = self.binaries[for_machine].lookup_entry(comp_class.language + 'ld')
+ if value is not None:
+ override = comp_class.use_linker_args(value[0])
+ check_args += override
+@@ -1354,6 +1354,7 @@ class Environment:
+
+ cc = self.detect_c_compiler(for_machine)
+ is_link_exe = isinstance(cc.linker, VisualStudioLikeLinkerMixin)
++ override = self.binaries[for_machine].lookup_entry('rustld')
+
+ for compiler in compilers:
+ if isinstance(compiler, str):
+@@ -1377,32 +1378,45 @@ class Environment:
+ # the default use that, and second add the necessary arguments
+ # to rust to use -fuse-ld
+
+- extra_args = {}
+- always_args = []
+- if is_link_exe:
+- compiler.extend(['-C', 'linker={}'.format(cc.linker.exelist[0])])
+- extra_args['direct'] = True
+- extra_args['machine'] = cc.linker.machine
+- elif not ((info.is_darwin() and isinstance(cc, AppleClangCCompiler)) or
+- isinstance(cc, GnuCCompiler)):
++ if override is None:
++ extra_args = {}
++ always_args = []
++ if is_link_exe:
++ compiler.extend(['-C', 'linker={}'.format(cc.linker.exelist[0])])
++ extra_args['direct'] = True
++ extra_args['machine'] = cc.linker.machine
++ elif not ((info.is_darwin() and isinstance(cc, AppleClangCCompiler)) or
++ isinstance(cc, GnuCCompiler)):
++ c = cc.exelist[1] if cc.exelist[0].endswith('ccache') else cc.exelist[0]
++ compiler.extend(['-C', 'linker={}'.format(c)])
++
++ # This trickery with type() gets us the class of the linker
++ # so we can initialize a new copy for the Rust Compiler
++ if is_link_exe:
++ linker = type(cc.linker)(for_machine, always_args, exelist=cc.linker.exelist,
++ version=cc.linker.version, **extra_args)
++ else:
++ linker = type(cc.linker)(compiler, for_machine, cc.linker.id, cc.LINKER_PREFIX,
++ always_args=always_args, version=cc.linker.version,
++ **extra_args)
++ elif 'link' in override[0]:
++ linker = self._guess_win_linker(
++ override, RustCompiler, for_machine, use_linker_prefix=False)
++ linker.direct = True
++ else:
++ # We're creating a new type of "C" compiler, that has rust
++ # as it's language. This is gross, but I can't figure out
++ # another way to handle this, because rustc is actually
++ # invoking the c compiler as it's linker.
++ b = type('b', (type(cc), ), {})
++ b.language = RustCompiler.language
++ linker = self._guess_nix_linker(cc.exelist, b, for_machine)
++
++ # Of course, we're not going to use any of that, we just
++ # need it to get the proper arguments to pass to rustc
+ c = cc.exelist[1] if cc.exelist[0].endswith('ccache') else cc.exelist[0]
+ compiler.extend(['-C', 'linker={}'.format(c)])
+-
+- value = self.binaries[for_machine].lookup_entry('ld')
+- if value is not None:
+- for a in cc.use_linker_args(value[0]):
+- always_args.extend(['-C', 'link-arg={}'.format(a)])
+-
+- # This trickery with type() gets us the class of the linker
+- # so we can initialize a new copy for the Rust Compiler
+-
+- if is_link_exe:
+- linker = type(cc.linker)(for_machine, always_args, exelist=cc.linker.exelist,
+- version=cc.linker.version, **extra_args)
+- else:
+- linker = type(cc.linker)(compiler, for_machine, cc.linker.id, cc.LINKER_PREFIX,
+- always_args=always_args, version=cc.linker.version,
+- **extra_args)
++ compiler.extend(['-C', 'link-args={}'.format(' '.join(cc.use_linker_args(override[0])))])
+
+ return RustCompiler(
+ compiler, version, for_machine, is_cross, info, exe_wrap,
+diff --git a/run_unittests.py b/run_unittests.py
+index 669c8ffe..87c6b690 100755
+--- a/run_unittests.py
++++ b/run_unittests.py
+@@ -43,6 +43,7 @@ from distutils.dir_util import copy_tree
+ import mesonbuild.mlog
+ import mesonbuild.depfile
+ import mesonbuild.compilers
++import mesonbuild.envconfig
+ import mesonbuild.environment
+ import mesonbuild.mesonlib
+ import mesonbuild.coredata
+@@ -4624,7 +4625,8 @@ class WindowsTests(BasePlatformTests):
+ def _check_ld(self, name: str, lang: str, expected: str) -> None:
+ if not shutil.which(name):
+ raise unittest.SkipTest('Could not find {}.'.format(name))
+- with mock.patch.dict(os.environ, {'LD': name}):
++ envvar = mesonbuild.envconfig.BinaryTable.evarMap['{}ld'.format(lang)]
++ with mock.patch.dict(os.environ, {envvar: name}):
+ env = get_fake_env()
+ try:
+ comp = getattr(env, 'detect_{}_compiler'.format(lang))(MachineChoice.HOST)
+@@ -5876,7 +5878,8 @@ c = ['{0}']
+ raise unittest.SkipTest('Solaris currently cannot override the linker.')
+ if not shutil.which(check):
+ raise unittest.SkipTest('Could not find {}.'.format(check))
+- with mock.patch.dict(os.environ, {'LD': name}):
++ envvar = mesonbuild.envconfig.BinaryTable.evarMap['{}ld'.format(lang)]
++ with mock.patch.dict(os.environ, {envvar: name}):
+ env = get_fake_env()
+ comp = getattr(env, 'detect_{}_compiler'.format(lang))(MachineChoice.HOST)
+ if lang != 'rust' and comp.use_linker_args('foo') == []:
+--
+2.20.1
+
diff --git a/package/meson/meson.hash b/package/meson/meson.hash
index 461e908b4a..3039526857 100644
--- a/package/meson/meson.hash
+++ b/package/meson/meson.hash
@@ -1,4 +1,4 @@
# Locally calculated after checking pgp signature
-# https://github.com/mesonbuild/meson/releases/download/0.52.1/meson-0.52.1.tar.gz.asc
-sha256 0c277472e49950a5537e3de3e60c57b80dbf425788470a1a8ed27446128fc035 meson-0.52.1.tar.gz
+# https://github.com/mesonbuild/meson/releases/download/0.53.0/meson-0.53.0.tar.gz.sig
+sha256 035e75993ab6fa6c9ebf902b835c64cf397a763eb8e65c9bb6e1cc9730a9d3f6 meson-0.53.0.tar.gz
sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 COPYING
diff --git a/package/meson/meson.mk b/package/meson/meson.mk
index d409ae7b52..22d7353659 100644
--- a/package/meson/meson.mk
+++ b/package/meson/meson.mk
@@ -4,7 +4,7 @@
#
################################################################################
-MESON_VERSION = 0.52.1
+MESON_VERSION = 0.53.0
MESON_SITE = https://github.com/mesonbuild/meson/releases/download/$(MESON_VERSION)
MESON_LICENSE = Apache-2.0
MESON_LICENSE_FILES = COPYING
--
2.20.1
More information about the buildroot
mailing list