Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package meson for openSUSE:Factory checked 
in at 2021-01-22 21:48:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/meson (Old)
 and      /work/SRC/openSUSE:Factory/.meson.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "meson"

Fri Jan 22 21:48:59 2021 rev:67 rq:863732 version:0.56.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/meson/meson.changes      2020-11-17 
21:25:04.397365181 +0100
+++ /work/SRC/openSUSE:Factory/.meson.new.28504/meson.changes   2021-01-22 
21:49:01.185567906 +0100
@@ -1,0 +2,23 @@
+Sat Jan 16 13:05:47 UTC 2021 - Bj??rn Lie <bjorn....@gmail.com>
+
+- Update to version 0.56.2:
+  + This release fixes a Python 3.5 compat issue.
+
+-------------------------------------------------------------------
+Thu Jan  7 13:00:11 UTC 2021 - Bj??rn Lie <bjorn....@gmail.com>
+
+- Drop meson-suse-ify-macros.patch: No longer needed.
+
+-------------------------------------------------------------------
+Wed Jan  6 11:32:14 UTC 2021 - Dominique Leuenberger <dims...@opensuse.org>
+
+- Update to version 0.56.1:
+  + pkgconfig: Make external deps of static library public.
+  + interpreter: store correct files for project regeneration.
+  + environment: Properly pass linker to rustc.
+  + Add aarch64 assembly test.
+- Drop 7930.patch: fixed upstream.
+- Add new keyid C24E631BABB1FE70 to the keyring (counter signed by
+  the old key id): the old key was about to expire.
+
+-------------------------------------------------------------------

Old:
----
  7930.patch
  meson-0.56.0.tar.gz
  meson-0.56.0.tar.gz.asc
  meson-suse-ify-macros.patch

New:
----
  meson-0.56.2.tar.gz
  meson-0.56.2.tar.gz.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ meson.spec ++++++
--- /var/tmp/diff_new_pack.pyVfKp/_old  2021-01-22 21:49:01.813568797 +0100
+++ /var/tmp/diff_new_pack.pyVfKp/_new  2021-01-22 21:49:01.817568802 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package meson
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -28,7 +28,7 @@
 %{!?vim_data_dir:%global vim_data_dir %{_datadir}/vim}
 %bcond_with     setuptools
 Name:           meson%{name_ext}
-Version:        0.56.0
+Version:        0.56.2
 Release:        0
 Summary:        Python-based build system
 License:        Apache-2.0
@@ -37,14 +37,10 @@
 Source:         
https://github.com/%{_name}/meson/releases/download/%{version}/meson-%{version}.tar.gz
 Source1:        
https://github.com/%{_name}/meson/releases/download/%{version}/meson-%{version}.tar.gz.asc
 Source2:        meson.keyring
-# PATCH-FIX-OPENSUSE meson-suse-ify-macros.patch dims...@opensuse.org -- Make 
the macros non-RedHat specific: so far there are no separate {C,CXX,F}FLAGS.
-Patch0:         meson-suse-ify-macros.patch
 # PATCH-FIX-OPENSUSE meson-test-installed-bin.patch dims...@opensuse.org -- We 
want the test suite to run against /usr/bin/meson coming from our meson package.
 Patch1:         meson-test-installed-bin.patch
 # PATCH-FEATURE-OPENSUSE meson-distutils.patch tchva...@suse.com -- build and 
install using distutils instead of full setuptools
 Patch2:         meson-distutils.patch
-# PATCH-FIX-UPSTREAM 7930.patch -- pkgconfig: Make external deps of static 
library public
-Patch3:         
https://patch-diff.githubusercontent.com/raw/mesonbuild/meson/pull/7930.patch
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 BuildRequires:  python3-base
@@ -159,12 +155,10 @@
 
 %prep
 %setup -q -n meson-%{version}
-%patch0 -p1
 %patch1 -p1
 %if !%{with setuptools}
 %patch2 -p1
 %endif
-%patch3 -p1
 
 # We do not have gmock available at this moment - can't run the test suite for 
it
 rm -r "test cases/frameworks/3 gmock" \

++++++ meson-0.56.0.tar.gz -> meson-0.56.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/PKG-INFO new/meson-0.56.2/PKG-INFO
--- old/meson-0.56.0/PKG-INFO   2020-10-30 09:26:05.839237700 +0100
+++ new/meson-0.56.2/PKG-INFO   2021-01-10 13:49:51.051664400 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: meson
-Version: 0.56.0
+Version: 0.56.2
 Summary: A high performance build system
 Home-page: https://mesonbuild.com
 Author: Jussi Pakkanen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/README.md new/meson-0.56.2/README.md
--- old/meson-0.56.0/README.md  2020-08-15 18:27:05.000000000 +0200
+++ new/meson-0.56.2/README.md  2021-01-09 11:14:21.000000000 +0100
@@ -7,7 +7,6 @@
 #### Status
 
 
[![PyPI](https://img.shields.io/pypi/v/meson.svg)](https://pypi.python.org/pypi/meson)
-[![Travis](https://travis-ci.org/mesonbuild/meson.svg?branch=master)](https://travis-ci.org/mesonbuild/meson)
 [![Build 
Status](https://dev.azure.com/jussi0947/jussi/_apis/build/status/mesonbuild.meson)](https://dev.azure.com/jussi0947/jussi/_build/latest?definitionId=1)
 
[![Codecov](https://codecov.io/gh/mesonbuild/meson/coverage.svg?branch=master)](https://codecov.io/gh/mesonbuild/meson/branch/master)
 [![Code Quality: 
Python](https://img.shields.io/lgtm/grade/python/g/mesonbuild/meson.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/mesonbuild/meson/context:python)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/cross/linux-mingw-w64-32bit.txt 
new/meson-0.56.2/cross/linux-mingw-w64-32bit.txt
--- old/meson-0.56.0/cross/linux-mingw-w64-32bit.txt    2020-10-18 
23:29:13.000000000 +0200
+++ new/meson-0.56.2/cross/linux-mingw-w64-32bit.txt    2021-01-06 
00:18:35.000000000 +0100
@@ -1,12 +1,14 @@
 [binaries]
 c = '/usr/bin/i686-w64-mingw32-gcc'
 cpp = '/usr/bin/i686-w64-mingw32-g++'
+objc = '/usr/bin/i686-w64-mingw32-gcc'
 ar = '/usr/bin/i686-w64-mingw32-ar'
 strip = '/usr/bin/i686-w64-mingw32-strip'
 pkgconfig = '/usr/bin/i686-w64-mingw32-pkg-config'
 windres = '/usr/bin/i686-w64-mingw32-windres'
 exe_wrapper = 'wine'
 ld = '/usr/bin/i686-w64-mingw32-ld'
+cmake = '/usr/bin/cmake'
 
 [properties]
 # Directory that contains 'bin', 'lib', etc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/cross/linux-mingw-w64-64bit.txt 
new/meson-0.56.2/cross/linux-mingw-w64-64bit.txt
--- old/meson-0.56.0/cross/linux-mingw-w64-64bit.txt    2020-10-18 
23:29:13.000000000 +0200
+++ new/meson-0.56.2/cross/linux-mingw-w64-64bit.txt    2021-01-06 
00:18:35.000000000 +0100
@@ -1,11 +1,13 @@
 [binaries]
 c = '/usr/bin/x86_64-w64-mingw32-gcc'
 cpp = '/usr/bin/x86_64-w64-mingw32-g++'
+objc = '/usr/bin/x86_64-w64-mingw32-gcc'
 ar = '/usr/bin/x86_64-w64-mingw32-ar'
 strip = '/usr/bin/x86_64-w64-mingw32-strip'
 pkgconfig = '/usr/bin/x86_64-w64-mingw32-pkg-config'
 windres = '/usr/bin/x86_64-w64-mingw32-windres'
 exe_wrapper = 'wine64'
+cmake = '/usr/bin/cmake'
 
 [properties]
 # Directory that contains 'bin', 'lib', etc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/man/meson.1 new/meson-0.56.2/man/meson.1
--- old/meson-0.56.0/man/meson.1        2020-10-18 23:33:00.000000000 +0200
+++ new/meson-0.56.2/man/meson.1        2021-01-09 23:56:47.000000000 +0100
@@ -1,4 +1,4 @@
-.TH MESON "1" "October 2020" "meson 0.56.0" "User Commands"
+.TH MESON "1" "January 2021" "meson 0.56.2" "User Commands"
 .SH NAME
 meson - a high productivity build system
 .SH DESCRIPTION
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/meson.egg-info/PKG-INFO 
new/meson-0.56.2/meson.egg-info/PKG-INFO
--- old/meson-0.56.0/meson.egg-info/PKG-INFO    2020-10-30 09:25:47.000000000 
+0100
+++ new/meson-0.56.2/meson.egg-info/PKG-INFO    2021-01-10 13:49:44.000000000 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: meson
-Version: 0.56.0
+Version: 0.56.2
 Summary: A high performance build system
 Home-page: https://mesonbuild.com
 Author: Jussi Pakkanen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/meson.egg-info/SOURCES.txt 
new/meson-0.56.2/meson.egg-info/SOURCES.txt
--- old/meson-0.56.0/meson.egg-info/SOURCES.txt 2020-10-30 09:25:48.000000000 
+0100
+++ new/meson-0.56.2/meson.egg-info/SOURCES.txt 2021-01-10 13:49:44.000000000 
+0100
@@ -363,6 +363,12 @@
 test cases/cmake/23 cmake toolchain/meson.build
 test cases/cmake/23 cmake toolchain/nativefile.ini.in
 test cases/cmake/23 cmake toolchain/subprojects/cmMod/CMakeLists.txt
+test cases/cmake/24 mixing languages/main.c
+test cases/cmake/24 mixing languages/meson.build
+test cases/cmake/24 mixing languages/subprojects/cmTest/CMakeLists.txt
+test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.c
+test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.h
+test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.m
 test cases/cmake/3 advanced no dep/main.cpp
 test cases/cmake/3 advanced no dep/meson.build
 test cases/cmake/3 advanced no dep/test.json
@@ -3093,6 +3099,10 @@
 test cases/unit/84 change option choices/meson.build
 test cases/unit/84 change option choices/meson_options.1.txt
 test cases/unit/84 change option choices/meson_options.2.txt
+test cases/unit/85 nested subproject regenerate depends/main.c
+test cases/unit/85 nested subproject regenerate depends/meson.build
+test cases/unit/85 nested subproject regenerate 
depends/subprojects/sub1/meson.build
+test cases/unit/85 nested subproject regenerate 
depends/subprojects/sub2/CMakeLists.txt
 test cases/unit/9 d dedup/meson.build
 test cases/unit/9 d dedup/prog.c
 test cases/vala/1 basic/meson.build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/backend/ninjabackend.py 
new/meson-0.56.2/mesonbuild/backend/ninjabackend.py
--- old/meson-0.56.0/mesonbuild/backend/ninjabackend.py 2020-10-18 
23:29:13.000000000 +0200
+++ new/meson-0.56.2/mesonbuild/backend/ninjabackend.py 2021-01-06 
11:39:48.000000000 +0100
@@ -1489,7 +1489,7 @@
         self.create_target_source_introspection(target, valac, args, 
all_files, [])
         return other_src[0], other_src[1], vala_c_src
 
-    def generate_rust_target(self, target):
+    def generate_rust_target(self, target: build.BuildTarget) -> None:
         rustc = target.compilers['rust']
         # Rust compiler takes only the main file as input and
         # figures out what other files are needed via import
@@ -1533,7 +1533,8 @@
         depfile = os.path.join(target.subdir, target.name + '.d')
         args += ['--emit', 'dep-info={}'.format(depfile), '--emit', 'link']
         args += target.get_extra_args('rust')
-        args += ['-o', os.path.join(target.subdir, target.get_filename())]
+        args += rustc.get_output_args(os.path.join(target.subdir, 
target.get_filename()))
+        args += 
self.environment.coredata.get_external_args(target.for_machine, rustc.language)
         orderdeps = [os.path.join(t.subdir, t.get_filename()) for t in 
target.link_targets]
         linkdirs = OrderedDict()
         for d in target.link_targets:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/build.py 
new/meson-0.56.2/mesonbuild/build.py
--- old/meson-0.56.0/mesonbuild/build.py        2020-10-26 12:18:42.000000000 
+0100
+++ new/meson-0.56.2/mesonbuild/build.py        2021-01-06 11:39:48.000000000 
+0100
@@ -1359,11 +1359,12 @@
         for link_target in self.link_targets:
             if isinstance(link_target, SharedModule):
                 if self.environment.machines[self.for_machine].is_darwin():
-                    raise MesonException('''target links against shared 
modules.
-This is not permitted on OSX''')
+                    raise MesonException(
+                        'target links against shared modules. This is not 
permitted on OSX')
                 else:
-                    mlog.warning('''target links against shared modules. This 
is not
-recommended as it is not supported on some platforms''')
+                    mlog.warning('target links against shared modules. This '
+                                 'is not recommended as it is not supported on 
some '
+                                 'platforms')
                 return
 
 class Generator:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/cmake/interpreter.py 
new/meson-0.56.2/mesonbuild/cmake/interpreter.py
--- old/meson-0.56.0/mesonbuild/cmake/interpreter.py    2020-10-26 
12:18:42.000000000 +0100
+++ new/meson-0.56.2/mesonbuild/cmake/interpreter.py    2021-01-09 
11:14:21.000000000 +0100
@@ -231,7 +231,7 @@
         if target.install_paths:
             self.install_dir = target.install_paths[0]
 
-        self.languages           = []  # type: T.List[str]
+        self.languages           = set() # type: T.Set[str]
         self.sources             = []  # type: T.List[Path]
         self.generated           = []  # type: T.List[Path]
         self.generated_ctgt      = []  # type: T.List[CustomTargetReference]
@@ -250,19 +250,40 @@
         self.name = _sanitize_cmake_name(self.name)
 
         self.generated_raw = []  # type: T.List[Path]
+
         for i in target.files:
-            # Determine the meson language
+            languages    = set()  #  type: T.Set[str]
+            src_suffixes = set()  #  type: T.Set[str]
+
+            # Insert suffixes
+            for j in i.sources:
+                if not j.suffix:
+                    continue
+                src_suffixes.add(j.suffix[1:])
+
+            # Determine the meson language(s)
+            # Extract the default language from the explicit CMake field
             lang_cmake_to_meson = {val.lower(): key for key, val in 
language_map.items()}
-            lang = lang_cmake_to_meson.get(i.language.lower(), 'c')
-            if lang not in self.languages:
-                self.languages += [lang]
-            if lang not in self.compile_opts:
-                self.compile_opts[lang] = []
+            languages.add(lang_cmake_to_meson.get(i.language.lower(), 'c'))
+
+            # Determine missing languages from the source suffixes
+            for sfx in src_suffixes:
+                for key, val in lang_suffixes.items():
+                    if sfx in val:
+                        languages.add(key)
+                        break
+
+            # Register the new languages and initialize the compile opts array
+            for lang in languages:
+                self.languages.add(lang)
+                if lang not in self.compile_opts:
+                    self.compile_opts[lang] = []
 
             # Add arguments, but avoid duplicates
             args = i.flags
             args += ['-D{}'.format(x) for x in i.defines]
-            self.compile_opts[lang] += [x for x in args if x not in 
self.compile_opts[lang]]
+            for lang in languages:
+                self.compile_opts[lang] += [x for x in args if x not in 
self.compile_opts[lang]]
 
             # Handle include directories
             self.includes += [x.path for x in i.includes if x.path not in 
self.includes and not x.isSystem]
@@ -502,6 +523,20 @@
         self.link_libraries = [x for x in self.link_libraries if x.lower() not 
in blacklist_link_libs]
         self.link_flags = [x for x in self.link_flags if check_flag(x)]
 
+        # Handle OSX frameworks
+        def handle_frameworks(flags: T.List[str]) -> T.List[str]:
+            res = []  # type: T.List[str]
+            for i in flags:
+                p = Path(i)
+                if not p.exists() or not p.name.endswith('.framework'):
+                    res += [i]
+                    continue
+                res += ['-framework', p.stem]
+            return res
+
+        self.link_libraries = handle_frameworks(self.link_libraries)
+        self.link_flags     = handle_frameworks(self.link_flags)
+
         # Handle explicit CMake add_dependency() calls
         for i in self.depends_raw:
             dep_tgt = output_target_map.target(i)
@@ -850,6 +885,7 @@
 
     def configure(self, extra_cmake_options: T.List[str]) -> CMakeExecutor:
         # Find CMake
+        # TODO: Using MachineChoice.BUILD should always be correct here, but 
also evaluate the use of self.for_machine
         cmake_exe = CMakeExecutor(self.env, '>=3.7', MachineChoice.BUILD)
         if not cmake_exe.found():
             raise CMakeException('Unable to find CMake')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/compilers/c.py 
new/meson-0.56.2/mesonbuild/compilers/c.py
--- old/meson-0.56.0/mesonbuild/compilers/c.py  2020-10-18 23:29:13.000000000 
+0200
+++ new/meson-0.56.2/mesonbuild/compilers/c.py  2021-01-06 11:39:48.000000000 
+0100
@@ -428,7 +428,11 @@
 
     def get_options(self) -> 'OptionDictType':
         opts = super().get_options()
-        c_stds = ['none', 'c89', 'c99', 'c11']
+        c_stds = ['none', 'c89', 'c99', 'c11',
+                  # Need to have these to be compatible with projects
+                  # that set c_std to e.g. gnu99.
+                  # https://github.com/mesonbuild/meson/issues/7611
+                  'gnu89', 'gnu90', 'gnu9x', 'gnu99', 'gnu1x', 'gnu11']
         opts.update({
             'std': coredata.UserComboOption(
                 'C language standard to use',
@@ -442,8 +446,8 @@
         args = []
         std = options['std']
         # As of MVSC 16.7, /std:c11 is the only valid C standard option.
-        if std.value in {'c11'}:
-            args.append('/std:' + std.value)
+        if std.value in {'c11', 'gnu11'}:
+            args.append('/std:c11')
         return args
 
 
@@ -458,6 +462,25 @@
                            full_version=full_version)
         ClangClCompiler.__init__(self, target)
 
+    def get_options(self) -> 'OptionDictType':
+        # Clang-cl can compile up to c99, but doesn't have a std-swtich for
+        # them. Unlike recent versions of MSVC it doesn't (as of 10.0.1)
+        # support c11
+        opts = super().get_options()
+        c_stds = ['none', 'c89', 'c99',
+                  # Need to have these to be compatible with projects
+                  # that set c_std to e.g. gnu99.
+                  # https://github.com/mesonbuild/meson/issues/7611
+                  'gnu89', 'gnu90', 'gnu9x', 'gnu99']
+        opts.update({
+            'std': coredata.UserComboOption(
+                'C language standard to use',
+                c_stds,
+                'none',
+            ),
+        })
+        return opts
+
 
 class IntelClCCompiler(IntelVisualStudioLikeCompiler, 
VisualStudioLikeCCompilerMixin, CCompiler):
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/compilers/compilers.py 
new/meson-0.56.2/mesonbuild/compilers/compilers.py
--- old/meson-0.56.0/mesonbuild/compilers/compilers.py  2020-10-18 
23:29:13.000000000 +0200
+++ new/meson-0.56.2/mesonbuild/compilers/compilers.py  2021-01-06 
11:39:48.000000000 +0100
@@ -785,7 +785,7 @@
             # On Windows antivirus programs and the like hold on to files so
             # they can't be deleted. There's not much to do in this case. Also,
             # catch OSError because the directory is then no longer empty.
-            yield None
+            return
 
     @contextlib.contextmanager
     def cached_compile(self, code: str, cdata: coredata.CoreData, *,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/meson-0.56.0/mesonbuild/compilers/mixins/emscripten.py 
new/meson-0.56.2/mesonbuild/compilers/mixins/emscripten.py
--- old/meson-0.56.0/mesonbuild/compilers/mixins/emscripten.py  2020-10-18 
23:29:13.000000000 +0200
+++ new/meson-0.56.2/mesonbuild/compilers/mixins/emscripten.py  2021-01-06 
11:39:48.000000000 +0100
@@ -50,7 +50,7 @@
 
     def thread_link_flags(self, env: 'Environment') -> T.List[str]:
         args = ['-s', 'USE_PTHREADS=1']
-        count = 
env.coredata.compiler_options[self.for_machine]['{}_thread_count'.format(self.language)].value
  # type: int
+        count = 
env.coredata.compiler_options[self.for_machine][self.language]['thread_count'].value
  # type: int
         if count:
             args.extend(['-s', 'PTHREAD_POOL_SIZE={}'.format(count)])
         return args
@@ -58,7 +58,7 @@
     def get_options(self) -> 'coredata.OptionDictType':
         opts = super().get_options()
         opts.update({
-            '{}_thread_count'.format(self.language): 
coredata.UserIntegerOption(
+            'thread_count': coredata.UserIntegerOption(
                 'Number of threads to use in web assembly, set to 0 to 
disable',
                 (0, None, 4),  # Default was picked at random
             ),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/compilers/rust.py 
new/meson-0.56.2/mesonbuild/compilers/rust.py
--- old/meson-0.56.0/mesonbuild/compilers/rust.py       2020-10-18 
23:29:13.000000000 +0200
+++ new/meson-0.56.2/mesonbuild/compilers/rust.py       2021-01-06 
11:39:48.000000000 +0100
@@ -119,6 +119,10 @@
     def get_output_args(self, outputname: str) -> T.List[str]:
         return ['-o', outputname]
 
+    @classmethod
+    def use_linker_args(cls, linker: str) -> T.List[str]:
+        return ['-C', 'linker={}'.format(linker)]
+
     # Rust does not have a use_linker_args because it dispatches to a gcc-like
     # C compiler for dynamic linking, as such we invoke the C compiler's
     # use_linker_args method instead.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/coredata.py 
new/meson-0.56.2/mesonbuild/coredata.py
--- old/meson-0.56.0/mesonbuild/coredata.py     2020-10-30 09:24:38.000000000 
+0100
+++ new/meson-0.56.2/mesonbuild/coredata.py     2021-01-09 23:56:47.000000000 
+0100
@@ -39,7 +39,7 @@
     OptionDictType = T.Union[T.Dict[str, 'UserOption[T.Any]'], 
OptionOverrideProxy]
     CompilerCheckCacheKey = T.Tuple[T.Tuple[str, ...], str, str, T.Tuple[str, 
...], str]
 
-version = '0.56.0'
+version = '0.56.2'
 backendlist = ['ninja', 'vs', 'vs2010', 'vs2015', 'vs2017', 'vs2019', 'xcode']
 
 default_yielding = False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/dependencies/base.py 
new/meson-0.56.2/mesonbuild/dependencies/base.py
--- old/meson-0.56.0/mesonbuild/dependencies/base.py    2020-10-18 
23:29:13.000000000 +0200
+++ new/meson-0.56.2/mesonbuild/dependencies/base.py    2021-01-06 
11:39:48.000000000 +0100
@@ -1087,10 +1087,11 @@
         # AttributeError exceptions in derived classes
         self.traceparser = None  # type: CMakeTraceParser
 
-        self.cmakebin = CMakeExecutor(environment, 
CMakeDependency.class_cmake_version, MachineChoice.BUILD, silent=self.silent)
+        # TODO further evaluate always using MachineChoice.BUILD
+        self.cmakebin = CMakeExecutor(environment, 
CMakeDependency.class_cmake_version, self.for_machine, silent=self.silent)
         if not self.cmakebin.found():
             self.cmakebin = None
-            msg = 'No CMake binary for machine {} not found. Giving 
up.'.format(MachineChoice.BUILD)
+            msg = 'No CMake binary for machine {} not found. Giving 
up.'.format(self.for_machine)
             if self.required:
                 raise DependencyException(msg)
             mlog.debug(msg)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/environment.py 
new/meson-0.56.2/mesonbuild/environment.py
--- old/meson-0.56.0/mesonbuild/environment.py  2020-10-30 09:17:30.000000000 
+0100
+++ new/meson-0.56.2/mesonbuild/environment.py  2021-01-06 11:39:48.000000000 
+0100
@@ -129,6 +129,9 @@
     VisualStudioCPPCompiler,
 )
 
+if T.TYPE_CHECKING:
+    from .dependencies import ExternalProgram
+
 build_filename = 'meson.build'
 
 CompilersDict = T.Dict[str, Compiler]
@@ -869,7 +872,7 @@
                 defines[rest[0]] = rest[1]
         return defines
 
-    def _get_compilers(self, lang, for_machine):
+    def _get_compilers(self, lang: str, for_machine: MachineChoice) -> 
T.Tuple[T.List[T.List[str]], T.List[str], T.Optional['ExternalProgram']]:
         '''
         The list of compilers is detected in the exact same way for
         C, C++, ObjC, ObjC++, Fortran, CS so consolidate it here.
@@ -1062,9 +1065,17 @@
             self.__failed_to_detect_linker(compiler, check_args, o, e)
         return linker
 
-    def _detect_c_or_cpp_compiler(self, lang: str, for_machine: MachineChoice) 
-> Compiler:
+    def _detect_c_or_cpp_compiler(self, lang: str, for_machine: MachineChoice, 
*, override_compiler: T.Optional[T.List[str]] = None) -> Compiler:
+        """Shared implementation for finding the C or C++ compiler to use.
+
+        the override_compiler option is provided to allow compilers which use
+        the compiler (GCC or Clang usually) as their shared linker, to find
+        the linker they need.
+        """
         popen_exceptions = {}
         compilers, ccache, exe_wrap = self._get_compilers(lang, for_machine)
+        if override_compiler is not None:
+            compilers = [override_compiler]
         is_cross = self.is_cross_build(for_machine)
         info = self.machines[for_machine]
 
@@ -1619,9 +1630,9 @@
             return comp_class(exelist, version, for_machine, info, is_cross)
         raise EnvironmentException('Unknown compiler "' + ' '.join(exelist) + 
'"')
 
-    def detect_rust_compiler(self, for_machine):
-        popen_exceptions = {}
-        compilers, ccache, exe_wrap = self._get_compilers('rust', for_machine)
+    def detect_rust_compiler(self, for_machine: MachineChoice) -> RustCompiler:
+        popen_exceptions = {}  # type: T.Dict[str, Exception]
+        compilers, _, exe_wrap = self._get_compilers('rust', for_machine)
         is_cross = self.is_cross_build(for_machine)
         info = self.machines[for_machine]
 
@@ -1634,7 +1645,7 @@
                 compiler = [compiler]
             arg = ['--version']
             try:
-                p, out = Popen_safe(compiler + arg)[0:2]
+                out = Popen_safe(compiler + arg)[1]
             except OSError as e:
                 popen_exceptions[' '.join(compiler + arg)] = e
                 continue
@@ -1651,17 +1662,30 @@
                 # the default use that, and second add the necessary arguments
                 # to rust to use -fuse-ld
 
+                if any(a.startswith('linker=') for a in compiler):
+                    mlog.warning(
+                        'Please do not put -C linker= in your compiler '
+                        'command, set rust_ld=command in your cross file '
+                        'or use the RUST_LD environment variable. meson '
+                        'will override your seletion otherwise.')
+
                 if override is None:
                     extra_args = {}
                     always_args = []
                     if is_link_exe:
-                        compiler.extend(['-C', 
'linker={}'.format(cc.linker.exelist[0])])
+                        
compiler.extend(RustCompiler.use_linker_args(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)])
+                    else:
+                        exelist = cc.linker.exelist.copy()
+                        if 'ccache' in exelist[0]:
+                            del exelist[0]
+                        c = exelist.pop(0)
+                        compiler.extend(RustCompiler.use_linker_args(c))
+
+                        # Also ensure that we pass any extra arguments to the 
linker
+                        for l in exelist:
+                            compiler.extend(['-C', 'link-arg={}'.format(l)])
 
                     # This trickery with type() gets us the class of the linker
                     # so we can initialize a new copy for the Rust Compiler
@@ -1675,21 +1699,22 @@
                 elif 'link' in override[0]:
                     linker = self._guess_win_linker(
                         override, RustCompiler, for_machine, 
use_linker_prefix=False)
+                    # rustc takes linker arguments without a prefix, and
+                    # inserts the correct prefix itself.
                     linker.direct = True
+                    
compiler.extend(RustCompiler.use_linker_args(linker.exelist[0]))
                 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)
+                    # On linux and macos rust will invoke the c compiler for
+                    # linking, on windows it will use lld-link or link.exe.
+                    # we will simply ask for the C compiler that coresponds to
+                    # it, and use that.
+                    cc = self._detect_c_or_cpp_compiler('c', for_machine, 
override_compiler=override)
+                    linker = cc.linker
 
                     # 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)])
-                    compiler.extend(['-C', 'link-args={}'.format(' 
'.join(cc.use_linker_args(override[0])))])
+                    c = linker.exelist[1] if 
linker.exelist[0].endswith('ccache') else linker.exelist[0]
+                    compiler.extend(RustCompiler.use_linker_args(c))
 
                 self.coredata.add_lang_args(RustCompiler.language, 
RustCompiler, for_machine, self)
                 return RustCompiler(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/interpreter.py 
new/meson-0.56.2/mesonbuild/interpreter.py
--- old/meson-0.56.0/mesonbuild/interpreter.py  2020-10-26 12:18:42.000000000 
+0100
+++ new/meson-0.56.2/mesonbuild/interpreter.py  2021-01-06 11:39:48.000000000 
+0100
@@ -2383,6 +2383,7 @@
                 default_project_options: T.Optional[T.Dict[str, str]] = None,
                 mock: bool = False,
                 ast: T.Optional[mparser.CodeBlockNode] = None,
+                is_translated: bool = False,
             ) -> None:
         super().__init__(build.environment.get_source_dir(), subdir, 
subproject)
         self.an_unpicklable_object = mesonlib.an_unpicklable_object
@@ -2421,8 +2422,16 @@
             self.default_project_options = {}
         self.project_default_options = {}
         self.build_func_dict()
+
         # build_def_files needs to be defined before parse_project is called
-        self.build_def_files = [os.path.join(self.subdir, 
environment.build_filename)]
+        #
+        # For non-meson subprojects, we'll be using the ast. Even if it does
+        # exist we don't want to add a dependency on it, it's autogenerated
+        # from the actual build files, and is just for reference.
+        self.build_def_files = []
+        build_filename = os.path.join(self.subdir, environment.build_filename)
+        if not is_translated:
+            self.build_def_files.append(build_filename)
         if not mock:
             self.parse_project()
         self._redetect_machines()
@@ -2690,7 +2699,7 @@
             varlist = mesonlib.stringlistify(variables)
             if list_new:
                 FeatureNew.single_use('variables as list of strings', 
'0.56.0', self.subproject)
-            variables = {}
+            variables = collections.OrderedDict()
             for v in varlist:
                 try:
                     (key, value) = v.split('=', 1)
@@ -2941,11 +2950,14 @@
                 return self.disabled_subproject(subp_name, exception=e)
             raise e
 
-    def _do_subproject_meson(self, subp_name, subdir, default_options, kwargs, 
ast=None, build_def_files=None):
+    def _do_subproject_meson(self, subp_name: str, subdir: str, 
default_options, kwargs,
+                             ast: T.Optional[mparser.CodeBlockNode] = None,
+                             build_def_files: T.Optional[T.List[str]] = None,
+                             is_translated: bool = False) -> SubprojectHolder:
         with mlog.nested():
             new_build = self.build.copy()
             subi = Interpreter(new_build, self.backend, subp_name, subdir, 
self.subproject_dir,
-                               self.modules, default_options, ast=ast)
+                               self.modules, default_options, ast=ast, 
is_translated=is_translated)
             subi.subprojects = self.subprojects
 
             subi.subproject_stack = self.subproject_stack + [subp_name]
@@ -2971,8 +2983,8 @@
         # Duplicates are possible when subproject uses files from project root
         if build_def_files:
             self.build_def_files = list(set(self.build_def_files + 
build_def_files))
-        else:
-            self.build_def_files = list(set(self.build_def_files + 
subi.build_def_files))
+        # We always need the subi.build_def_files, to propgate sub-sub-projects
+        self.build_def_files = list(set(self.build_def_files + 
subi.build_def_files))
         self.build.merge(subi.build)
         self.build.subprojects[subp_name] = subi.project_version
         self.summary.update(subi.summary)
@@ -3016,7 +3028,7 @@
                 mlog.cmd_ci_include(meson_filename)
                 mlog.log()
 
-            result = self._do_subproject_meson(subp_name, subdir, 
default_options, kwargs, ast, cm_int.bs_files)
+            result = self._do_subproject_meson(subp_name, subdir, 
default_options, kwargs, ast, cm_int.bs_files, is_translated=True)
             result.cm_interpreter = cm_int
 
         mlog.log()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/linkers.py 
new/meson-0.56.2/mesonbuild/linkers.py
--- old/meson-0.56.0/mesonbuild/linkers.py      2020-10-18 23:29:13.000000000 
+0200
+++ new/meson-0.56.2/mesonbuild/linkers.py      2021-01-06 11:39:48.000000000 
+0100
@@ -1219,8 +1219,13 @@
             return ([], set())
         processed_rpaths = prepare_rpaths(rpath_paths, build_dir, from_dir)
         all_paths = mesonlib.OrderedSet([os.path.join('$ORIGIN', p) for p in 
processed_rpaths])
+        rpath_dirs_to_remove = set()
+        for p in all_paths:
+            rpath_dirs_to_remove.add(p.encode('utf8'))
         if build_rpath != '':
             all_paths.add(build_rpath)
+            for p in build_rpath.split(':'):
+                rpath_dirs_to_remove.add(p.encode('utf8'))
 
         # In order to avoid relinking for RPATH removal, the binary needs to 
contain just
         # enough space in the ELF header to hold the final installation RPATH.
@@ -1231,7 +1236,7 @@
                 paths = padding
             else:
                 paths = paths + ':' + padding
-        return (self._apply_prefix('-rpath,{}'.format(paths)), set())
+        return (self._apply_prefix('-rpath,{}'.format(paths)), 
rpath_dirs_to_remove)
 
     def get_soname_args(self, env: 'Environment', prefix: str, shlib_name: str,
                         suffix: str, soversion: str, darwin_versions: 
T.Tuple[str, str],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/modules/pkgconfig.py 
new/meson-0.56.2/mesonbuild/modules/pkgconfig.py
--- old/meson-0.56.0/mesonbuild/modules/pkgconfig.py    2020-10-26 
12:18:42.000000000 +0100
+++ new/meson-0.56.2/mesonbuild/modules/pkgconfig.py    2021-01-06 
11:39:48.000000000 +0100
@@ -131,7 +131,7 @@
                 if obj.found():
                     processed_libs += obj.get_link_args()
                     processed_cflags += obj.get_compile_args()
-                    self._add_lib_dependencies(obj.libraries, 
obj.whole_libraries, obj.ext_deps, public)
+                    self._add_lib_dependencies(obj.libraries, 
obj.whole_libraries, obj.ext_deps, public, private_external_deps=True)
             elif isinstance(obj, dependencies.Dependency):
                 if obj.found():
                     processed_libs += obj.get_link_args()
@@ -160,7 +160,7 @@
 
         return processed_libs, processed_reqs, processed_cflags
 
-    def _add_lib_dependencies(self, link_targets, link_whole_targets, 
external_deps, public):
+    def _add_lib_dependencies(self, link_targets, link_whole_targets, 
external_deps, public, private_external_deps=False):
         add_libs = self.add_pub_libs if public else self.add_priv_libs
         # Recursively add all linked libraries
         for t in link_targets:
@@ -173,7 +173,10 @@
         for t in link_whole_targets:
             self._add_link_whole(t, public)
         # And finally its external dependencies
-        self.add_priv_libs(external_deps)
+        if private_external_deps:
+            self.add_priv_libs(external_deps)
+        else:
+            add_libs(external_deps)
 
     def _add_link_whole(self, t, public):
         # Don't include static libraries that we link_whole. But we still need 
to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/modules/qt.py 
new/meson-0.56.2/mesonbuild/modules/qt.py
--- old/meson-0.56.0/mesonbuild/modules/qt.py   2020-10-18 23:29:13.000000000 
+0200
+++ new/meson-0.56.2/mesonbuild/modules/qt.py   2020-11-22 03:19:19.000000000 
+0100
@@ -236,7 +236,7 @@
                 if c.endswith('.qm'):
                     ts_files.append(c.rstrip('.qm')+'.ts')
                 else:
-                    raise MesonException('qt.compile_translations: qresource 
can only contain ts files, found {}'.format(c))
+                    raise MesonException('qt.compile_translations: qresource 
can only contain qm files, found {}'.format(c))
             results = self.preprocess(state, [], {'qresources': qresource, 
'rcc_extra_arguments': kwargs.get('rcc_extra_arguments', [])})
         self._detect_tools(state.environment, kwargs.get('method', 'auto'))
         translations = []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/msubprojects.py 
new/meson-0.56.2/mesonbuild/msubprojects.py
--- old/meson-0.56.0/mesonbuild/msubprojects.py 2020-10-18 23:29:13.000000000 
+0200
+++ new/meson-0.56.2/mesonbuild/msubprojects.py 2021-01-06 11:39:48.000000000 
+0100
@@ -85,7 +85,7 @@
     return True
 
 def git_checkout(repo_dir, revision, create=False):
-    cmd = ['checkout', revision, '--']
+    cmd = ['checkout', '--ignore-other-worktrees', revision, '--']
     if create:
         cmd.insert('-b', 1)
     try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/scripts/depfixer.py 
new/meson-0.56.2/mesonbuild/scripts/depfixer.py
--- old/meson-0.56.0/mesonbuild/scripts/depfixer.py     2020-09-18 
00:00:44.000000000 +0200
+++ new/meson-0.56.2/mesonbuild/scripts/depfixer.py     2020-12-28 
22:59:09.000000000 +0100
@@ -313,7 +313,7 @@
         # Only add each one once.
         new_rpaths = OrderedSet()  # type: OrderedSet[bytes]
         if new_rpath:
-            new_rpaths.add(new_rpath)
+            new_rpaths.update(new_rpath.split(b':'))
         if old_rpath:
             # Filter out build-only rpath entries
             # added by get_link_dep_subdirs() or
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/mesonbuild/wrap/wrap.py 
new/meson-0.56.2/mesonbuild/wrap/wrap.py
--- old/meson-0.56.0/mesonbuild/wrap/wrap.py    2020-10-18 23:29:13.000000000 
+0200
+++ new/meson-0.56.2/mesonbuild/wrap/wrap.py    2021-01-09 11:14:21.000000000 
+0100
@@ -31,7 +31,8 @@
 from .._pathlib import Path
 from . import WrapMode
 from .. import coredata
-from ..mesonlib import verbose_git, quiet_git, GIT, ProgressBar, MesonException
+from ..mesonlib import quiet_git, GIT, ProgressBar, MesonException
+from  .. import mesonlib
 
 if T.TYPE_CHECKING:
     import http.client
@@ -186,6 +187,15 @@
         return wrap.directory
     return packagename
 
+def verbose_git(cmd: T.List[str], workingdir: str, check: bool = False) -> 
bool:
+    '''
+    Wrapper to convert GitException to WrapException caught in interpreter.
+    '''
+    try:
+        return mesonlib.verbose_git(cmd, workingdir, check=check)
+    except mesonlib.GitException as e:
+        raise WrapException(str(e))
+
 class Resolver:
     def __init__(self, source_dir: str, subdir: str, wrap_mode: WrapMode = 
WrapMode.default) -> None:
         self.source_dir = source_dir
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.56.0/run_unittests.py 
new/meson-0.56.2/run_unittests.py
--- old/meson-0.56.0/run_unittests.py   2020-10-18 23:29:13.000000000 +0200
+++ new/meson-0.56.2/run_unittests.py   2021-01-09 11:14:21.000000000 +0100
@@ -13,6 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from mesonbuild.compilers.objc import AppleClangObjCCompiler
 import time
 import stat
 import subprocess
@@ -124,15 +125,6 @@
         return True
     return False
 
-def is_pull():
-    # Travis
-    if os.environ.get('TRAVIS_PULL_REQUEST', 'false') != 'false':
-        return True
-    # Azure
-    if 'SYSTEM_PULLREQUEST_ISFORK' in os.environ:
-        return True
-    return False
-
 def _git_init(project_dir):
     subprocess.check_call(['git', 'init'], cwd=project_dir, 
stdout=subprocess.DEVNULL)
     subprocess.check_call(['git', 'config',
@@ -1448,43 +1440,6 @@
             res = re.search(r'syn keyword mesonBuiltin(\s+\\\s\w+)+', 
f.read(), re.MULTILINE)
             defined = set([a.strip() for a in res.group().split('\\')][1:])
             self.assertEqual(defined, set(chain(interp.funcs.keys(), 
interp.builtin.keys())))
-
-    @unittest.skipIf(is_pull(), 'Skipping because this is a pull request')
-    def test_json_grammar_syntax_highlighting(self):
-        '''
-        Ensure that syntax highlighting JSON grammar written by TingPing was
-        updated for new functions in the global namespace in build files.
-        https://github.com/TingPing/language-meson/
-        '''
-        env = get_fake_env()
-        interp = Interpreter(FakeBuild(env), mock=True)
-        url = 
'https://raw.githubusercontent.com/TingPing/language-meson/master/grammars/meson.json'
-        try:
-            # Use a timeout to avoid blocking forever in case the network is
-            # slow or unavailable in a weird way
-            r = urllib.request.urlopen(url, timeout=URLOPEN_TIMEOUT)
-        except urllib.error.URLError as e:
-            # Skip test when network is not available, such as during packaging
-            # by a distro or Flatpak
-            if not isinstance(e, urllib.error.HTTPError):
-                raise unittest.SkipTest('Network unavailable')
-            # Don't fail the test if github is down, but do fail if 4xx
-            if e.code >= 500:
-                raise unittest.SkipTest('Server error ' + str(e.code))
-            raise e
-        # On Python 3.5, we must decode bytes to string. Newer versions don't 
require that.
-        grammar = json.loads(r.read().decode('utf-8', 'surrogatepass'))
-        for each in grammar['patterns']:
-            if 'name' in each and each['name'] == 
'support.function.builtin.meson':
-                # The string is of the form: 
(?x)\\b(func1|func2|...\n)\\b\\s*(?=\\() and
-                # we convert that to [func1, func2, ...] without using regex 
to parse regex
-                funcs = 
set(each['match'].split('\\b(')[1].split('\n')[0].split('|'))
-            if 'name' in each and each['name'] == 'support.variable.meson':
-                # \\b(builtin1|builtin2...)\\b
-                builtin = 
set(each['match'].split('\\b(')[1].split(')\\b')[0].split('|'))
-        self.assertEqual(builtin, set(interp.builtin.keys()))
-        self.assertEqual(funcs, set(interp.funcs.keys()))
-
     def test_all_functions_defined_in_ast_interpreter(self):
         '''
         Ensure that the all functions defined in the Interpreter are also 
defined
@@ -2942,20 +2897,22 @@
         # the source tree leads to all kinds of trouble.
         with tempfile.TemporaryDirectory() as project_dir:
             with open(os.path.join(project_dir, 'meson.build'), 'w') as ofile:
-                ofile.write('''project('disttest', 'c', version : '1.4.3')
-e = executable('distexe', 'distexe.c')
-test('dist test', e)
-subproject('vcssub', required : false)
-subproject('tarballsub', required : false)
-''')
+                ofile.write(textwrap.dedent('''\
+                    project('disttest', 'c', version : '1.4.3')
+                    e = executable('distexe', 'distexe.c')
+                    test('dist test', e)
+                    subproject('vcssub', required : false)
+                    subproject('tarballsub', required : false)
+                    '''))
             with open(os.path.join(project_dir, 'distexe.c'), 'w') as ofile:
-                ofile.write('''#include<stdio.h>
+                ofile.write(textwrap.dedent('''\
+                    #include<stdio.h>
 
-int main(int argc, char **argv) {
-    printf("I am a distribution test.\\n");
-    return 0;
-}
-''')
+                    int main(int argc, char **argv) {
+                        printf("I am a distribution test.\\n");
+                        return 0;
+                    }
+                    '''))
             xz_distfile = os.path.join(self.distdir, 'disttest-1.4.3.tar.xz')
             xz_checksumfile = xz_distfile + '.sha256sum'
             zip_distfile = os.path.join(self.distdir, 'disttest-1.4.3.zip')
@@ -3614,8 +3571,8 @@
         """
         tdir = os.path.join(self.unit_test_dir, '30 shared_mod linking')
         out = self.init(tdir)
-        msg = ('''WARNING: target links against shared modules. This is not
-recommended as it is not supported on some platforms''')
+        msg = ('WARNING: target links against shared modules. This is not '
+               'recommended as it is not supported on some platforms')
         self.assertIn(msg, out)
 
     def test_ndebug_if_release_disabled(self):
@@ -5247,6 +5204,20 @@
         wrap = PackageDefinition(redirect_wrap)
         self.assertEqual(wrap.get('url'), 'http://invalid')
 
+    @skip_if_no_cmake
+    def test_nested_cmake_rebuild(self) -> None:
+        # This checks a bug where if a non-meson project is used as a third
+        # level (or deeper) subproject it doesn't cause a rebuild if the build
+        # files for that project are changed
+        testdir = os.path.join(self.unit_test_dir, '85 nested subproject 
regenerate depends')
+        cmakefile = Path(testdir) / 'subprojects' / 'sub2' / 'CMakeLists.txt'
+        self.init(testdir)
+        self.build()
+        with cmakefile.open('a') as f:
+            os.utime(str(cmakefile))
+        self.assertReconfiguredBuildIsNoop()
+
+
 class FailureTests(BasePlatformTests):
     '''
     Tests that test failure conditions. Build files here should be dynamically
@@ -7250,16 +7221,18 @@
         testdir = os.path.join(self.unit_test_dir, '61 identity cross')
 
         nativefile = tempfile.NamedTemporaryFile(mode='w')
-        nativefile.write('''[binaries]
-c = ['{0}']
-'''.format(os.path.join(testdir, 'build_wrapper.py')))
+        nativefile.write(textwrap.dedent('''\
+            [binaries]
+            c = ['{0}']
+            '''.format(os.path.join(testdir, 'build_wrapper.py'))))
         nativefile.flush()
         self.meson_native_file = nativefile.name
 
         crossfile = tempfile.NamedTemporaryFile(mode='w')
-        crossfile.write('''[binaries]
-c = ['{0}']
-'''.format(os.path.join(testdir, 'host_wrapper.py')))
+        crossfile.write(textwrap.dedent('''\
+            [binaries]
+            c = ['{0}']
+            '''.format(os.path.join(testdir, 'host_wrapper.py'))))
         crossfile.flush()
         self.meson_cross_file = crossfile.name
 
@@ -7272,9 +7245,10 @@
             'CC_FOR_BUILD': '"' + os.path.join(testdir, 'build_wrapper.py') + 
'"',
         }
         crossfile = tempfile.NamedTemporaryFile(mode='w')
-        crossfile.write('''[binaries]
-c = ['{0}']
-'''.format(os.path.join(testdir, 'host_wrapper.py')))
+        crossfile.write(textwrap.dedent('''\
+            [binaries]
+            c = ['{0}']
+            '''.format(os.path.join(testdir, 'host_wrapper.py'))))
         crossfile.flush()
         self.meson_cross_file = crossfile.name
         # TODO should someday be explicit about build platform only here
@@ -7320,6 +7294,11 @@
             with mock.patch.dict(os.environ, {envvar: name}):
                 env = get_fake_env()
                 comp = getattr(env, 
'detect_{}_compiler'.format(lang))(MachineChoice.HOST)
+                if isinstance(comp, (mesonbuild.compilers.AppleClangCCompiler,
+                                     
mesonbuild.compilers.AppleClangCPPCompiler,
+                                     
mesonbuild.compilers.AppleClangObjCCompiler,
+                                     
mesonbuild.compilers.AppleClangObjCPPCompiler)):
+                    raise unittest.SkipTest('AppleClang is currently only 
supported with ld64')
                 if lang != 'rust' and comp.use_linker_args('bfd') == []:
                     raise unittest.SkipTest(
                         'Compiler {} does not support using alternative 
linkers'.format(comp.id))
@@ -7335,8 +7314,9 @@
         self._check_ld('ld.lld', 'lld', 'c', 'ld.lld')
 
     @skip_if_not_language('rust')
+    @skipIfNoExecutable('ld.gold')  # need an additional check here because 
_check_ld checks for gcc
     def test_ld_environment_variable_rust(self):
-        self._check_ld('ld.gold', 'gold', 'rust', 'ld.gold')
+        self._check_ld('gcc', 'gcc -fuse-ld=gold', 'rust', 'ld.gold')
 
     def test_ld_environment_variable_cpp(self):
         self._check_ld('ld.gold', 'gold', 'cpp', 'ld.gold')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/2 
advanced/subprojects/cmMod/CMakeLists.txt" "new/meson-0.56.2/test cases/cmake/2 
advanced/subprojects/cmMod/CMakeLists.txt"
--- "old/meson-0.56.0/test cases/cmake/2 
advanced/subprojects/cmMod/CMakeLists.txt"     2020-10-18 23:29:13.000000000 
+0200
+++ "new/meson-0.56.2/test cases/cmake/2 
advanced/subprojects/cmMod/CMakeLists.txt"     2021-01-04 11:54:09.000000000 
+0100
@@ -23,6 +23,16 @@
 target_link_libraries(cmModLibStatic ;ZLIB::ZLIB;)
 target_link_libraries(testEXE cmModLib)
 
+if(APPLE)
+  find_library(COREFOUNDATION_FRAMEWORK "CoreFoundation")
+  if(NOT COREFOUNDATION_FRAMEWORK)
+    message(FATAL_ERROR "CoreFoundation framework not found")
+  endif()
+
+  target_link_libraries(cmModLibStatic "${COREFOUNDATION_FRAMEWORK}")
+  target_compile_definitions(cmModLibStatic PUBLIC USE_FRAMEWORK)
+endif()
+
 target_compile_definitions(cmModLibStatic PUBLIC CMMODLIB_STATIC_DEFINE)
 
 install(TARGETS testEXE LIBRARY DESTINATION lib RUNTIME DESTINATION bin)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/2 
advanced/subprojects/cmMod/lib/cmMod.cpp" "new/meson-0.56.2/test cases/cmake/2 
advanced/subprojects/cmMod/lib/cmMod.cpp"
--- "old/meson-0.56.0/test cases/cmake/2 
advanced/subprojects/cmMod/lib/cmMod.cpp"      2020-08-15 18:27:05.000000000 
+0200
+++ "new/meson-0.56.2/test cases/cmake/2 
advanced/subprojects/cmMod/lib/cmMod.cpp"      2021-01-04 11:54:09.000000000 
+0100
@@ -6,10 +6,19 @@
 #error "Invalid value of CONFIG_OPT"
 #endif
 
+#ifdef USE_FRAMEWORK
+#include <CoreFoundation/CoreFoundation.h>
+#endif
+
 using namespace std;
 
 cmModClass::cmModClass(string foo) {
   str = foo + " World " + zlibVersion();
+
+#ifdef USE_FRAMEWORK
+  CFStringRef ref = CFStringCreateWithCString(NULL, str.c_str(), 
kCFStringEncodingUTF8);
+  CFRelease(ref);
+#endif
 }
 
 string cmModClass::getStr() const {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/24 mixing 
languages/main.c" "new/meson-0.56.2/test cases/cmake/24 mixing languages/main.c"
--- "old/meson-0.56.0/test cases/cmake/24 mixing languages/main.c"      
1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.56.2/test cases/cmake/24 mixing languages/main.c"      
2021-01-06 00:18:35.000000000 +0100
@@ -0,0 +1,5 @@
+#include <cmTest.h>
+
+int main(void) {
+  return doStuff();
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/24 mixing 
languages/meson.build" "new/meson-0.56.2/test cases/cmake/24 mixing 
languages/meson.build"
--- "old/meson-0.56.0/test cases/cmake/24 mixing languages/meson.build" 
1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.56.2/test cases/cmake/24 mixing languages/meson.build" 
2021-01-06 00:18:35.000000000 +0100
@@ -0,0 +1,13 @@
+project('CMake mix', ['c', 'cpp'])
+
+if not add_languages('objc', required : false)
+  error('MESON_SKIP_TEST: No ObjC compiler')
+endif
+
+cm = import('cmake')
+
+sub_pro = cm.subproject('cmTest')
+sub_dep = sub_pro.dependency('cmTest', include_type: 'system')
+
+exe1 = executable('exe1', ['main.c'], dependencies: [sub_dep])
+test('test1', exe1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/24 mixing 
languages/subprojects/cmTest/CMakeLists.txt" "new/meson-0.56.2/test 
cases/cmake/24 mixing languages/subprojects/cmTest/CMakeLists.txt"
--- "old/meson-0.56.0/test cases/cmake/24 mixing 
languages/subprojects/cmTest/CMakeLists.txt"   1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.56.2/test cases/cmake/24 mixing 
languages/subprojects/cmTest/CMakeLists.txt"   2021-01-06 00:18:35.000000000 
+0100
@@ -0,0 +1,8 @@
+cmake_minimum_required(VERSION 3.5)
+
+project(cmTest)
+
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+add_library(cmTest STATIC cmTest.c cmTest.m)
+target_compile_definitions(cmTest PUBLIC SOME_MAGIC_DEFINE=42)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/24 mixing 
languages/subprojects/cmTest/cmTest.c" "new/meson-0.56.2/test cases/cmake/24 
mixing languages/subprojects/cmTest/cmTest.c"
--- "old/meson-0.56.0/test cases/cmake/24 mixing 
languages/subprojects/cmTest/cmTest.c" 1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.56.2/test cases/cmake/24 mixing 
languages/subprojects/cmTest/cmTest.c" 2021-01-06 00:18:35.000000000 +0100
@@ -0,0 +1,13 @@
+#include "cmTest.h"
+#include <stdio.h>
+
+#if SOME_MAGIC_DEFINE != 42
+#error "SOME_MAGIC_DEFINE != 42"
+#endif
+
+int foo(int x);
+
+int doStuff(void) {
+  printf("Hello World\n");
+  return foo(42);
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/24 mixing 
languages/subprojects/cmTest/cmTest.h" "new/meson-0.56.2/test cases/cmake/24 
mixing languages/subprojects/cmTest/cmTest.h"
--- "old/meson-0.56.0/test cases/cmake/24 mixing 
languages/subprojects/cmTest/cmTest.h" 1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.56.2/test cases/cmake/24 mixing 
languages/subprojects/cmTest/cmTest.h" 2021-01-06 00:18:35.000000000 +0100
@@ -0,0 +1,3 @@
+#pragma once
+
+int doStuff(void);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/24 mixing 
languages/subprojects/cmTest/cmTest.m" "new/meson-0.56.2/test cases/cmake/24 
mixing languages/subprojects/cmTest/cmTest.m"
--- "old/meson-0.56.0/test cases/cmake/24 mixing 
languages/subprojects/cmTest/cmTest.m" 1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.56.2/test cases/cmake/24 mixing 
languages/subprojects/cmTest/cmTest.m" 2021-01-06 00:18:35.000000000 +0100
@@ -0,0 +1,7 @@
+#if SOME_MAGIC_DEFINE != 42
+#error "SOME_MAGIC_DEFINE != 42"
+#endif
+
+int foo(int x) {
+  return 42 - x;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/common/122 llvm ir and 
assembly/square-aarch64.S" "new/meson-0.56.2/test cases/common/122 llvm ir and 
assembly/square-aarch64.S"
--- "old/meson-0.56.0/test cases/common/122 llvm ir and 
assembly/square-aarch64.S"      2020-09-18 00:00:51.000000000 +0200
+++ "new/meson-0.56.2/test cases/common/122 llvm ir and 
assembly/square-aarch64.S"      2021-01-06 11:39:48.000000000 +0100
@@ -15,6 +15,15 @@
 
 #else
 
-#error gas syntax assembly for this test needs to be written
+.text
+.globl SYMBOL_NAME(square_unsigned)
+# ifdef __linux__
+.type square_unsigned, %function
+#endif
+
+SYMBOL_NAME(square_unsigned):
+    mul x1, x0, x0
+    mov x0, x1
+    ret
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/common/29 multiline 
string/meson.build" "new/meson-0.56.2/test cases/common/29 multiline 
string/meson.build"
--- "old/meson-0.56.0/test cases/common/29 multiline string/meson.build"        
2020-08-15 18:27:05.000000000 +0200
+++ "new/meson-0.56.2/test cases/common/29 multiline string/meson.build"        
2021-01-09 11:14:21.000000000 +0100
@@ -26,6 +26,8 @@
 
 cc = meson.get_compiler('c')
 prog = '''
+#include <stdio.h>
+
 int main(void) {
   int num = 1;
   printf("%d\n", num);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/failing/76 link with shared 
module on osx/test.json" "new/meson-0.56.2/test cases/failing/76 link with 
shared module on osx/test.json"
--- "old/meson-0.56.0/test cases/failing/76 link with shared module on 
osx/test.json"   2020-08-15 18:27:05.000000000 +0200
+++ "new/meson-0.56.2/test cases/failing/76 link with shared module on 
osx/test.json"   2020-11-22 03:19:19.000000000 +0100
@@ -1,7 +1,7 @@
 {
   "stdout": [
     {
-      "line": "test cases/failing/76 link with shared module on 
osx/meson.build:8:0: ERROR: target links against shared modules."
+      "line": "test cases/failing/76 link with shared module on 
osx/meson.build:8:0: ERROR: target links against shared modules. This is not 
permitted on OSX"
     }
   ]
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/frameworks/8 flex/lexer.l" 
"new/meson-0.56.2/test cases/frameworks/8 flex/lexer.l"
--- "old/meson-0.56.0/test cases/frameworks/8 flex/lexer.l"     2020-08-15 
18:27:05.000000000 +0200
+++ "new/meson-0.56.2/test cases/frameworks/8 flex/lexer.l"     2021-01-09 
11:14:21.000000000 +0100
@@ -1,6 +1,9 @@
 %{
 #include <stdlib.h>
 #include "parser.tab.h"
+
+extern int yylex(void);
+extern int yyerror(); 
 %}
 
 %% 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/frameworks/8 flex/parser.y" 
"new/meson-0.56.2/test cases/frameworks/8 flex/parser.y"
--- "old/meson-0.56.0/test cases/frameworks/8 flex/parser.y"    2020-08-15 
18:27:05.000000000 +0200
+++ "new/meson-0.56.2/test cases/frameworks/8 flex/parser.y"    2021-01-09 
11:14:21.000000000 +0100
@@ -1,3 +1,8 @@
+%{
+extern int yylex(void);
+extern int yyerror();
+%}
+
 %token BOOLEAN
 
 %%
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/rust/2 
sharedlib/meson.build" "new/meson-0.56.2/test cases/rust/2 
sharedlib/meson.build"
--- "old/meson-0.56.0/test cases/rust/2 sharedlib/meson.build"  2020-08-15 
18:27:05.000000000 +0200
+++ "new/meson-0.56.2/test cases/rust/2 sharedlib/meson.build"  2021-01-09 
11:14:21.000000000 +0100
@@ -1,5 +1,9 @@
 project('rust shared library', 'rust')
 
+if host_machine.system() == 'darwin'
+  error('MESON_SKIP_TEST: doesnt work right on macos, please fix!')
+endif
+
 l = shared_library('stuff', 'stuff.rs', install : true)
 e = executable('prog', 'prog.rs', link_with : l, install : true)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/rust/4 
polyglot/meson.build" "new/meson-0.56.2/test cases/rust/4 polyglot/meson.build"
--- "old/meson-0.56.0/test cases/rust/4 polyglot/meson.build"   2020-08-15 
18:27:05.000000000 +0200
+++ "new/meson-0.56.2/test cases/rust/4 polyglot/meson.build"   2021-01-09 
11:14:21.000000000 +0100
@@ -1,5 +1,9 @@
 project('rust and c polyglot executable', 'c', 'rust')
 
+if host_machine.system() == 'darwin'
+  error('MESON_SKIP_TEST: doesnt work right on macos, please fix!')
+endif
+
 l = library('stuff', 'stuff.rs', rust_crate_type: 'cdylib', install : true)
 e = executable('prog', 'prog.c', link_with : l, install : true)
 test('polyglottest', e)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/unit/59 introspect 
buildoptions/meson.build" "new/meson-0.56.2/test cases/unit/59 introspect 
buildoptions/meson.build"
--- "old/meson-0.56.0/test cases/unit/59 introspect buildoptions/meson.build"   
2020-08-15 18:27:05.000000000 +0200
+++ "new/meson-0.56.2/test cases/unit/59 introspect buildoptions/meson.build"   
2021-01-09 11:14:21.000000000 +0100
@@ -1,4 +1,4 @@
-project('introspect buildargs', ['c'], default_options: ['c_std=c11', 
'cpp_std=c++14', 'buildtype=release'])
+project('introspect buildargs', ['c'], default_options: ['c_std=c99', 
'cpp_std=c++14', 'buildtype=release'])
 
 subA = subproject('projectA')
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/unit/85 nested subproject 
regenerate depends/main.c" "new/meson-0.56.2/test cases/unit/85 nested 
subproject regenerate depends/main.c"
--- "old/meson-0.56.0/test cases/unit/85 nested subproject regenerate 
depends/main.c"   1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.56.2/test cases/unit/85 nested subproject regenerate 
depends/main.c"   2021-01-06 11:39:48.000000000 +0100
@@ -0,0 +1,3 @@
+int main(void) {
+    return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/unit/85 nested subproject 
regenerate depends/meson.build" "new/meson-0.56.2/test cases/unit/85 nested 
subproject regenerate depends/meson.build"
--- "old/meson-0.56.0/test cases/unit/85 nested subproject regenerate 
depends/meson.build"      1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.56.2/test cases/unit/85 nested subproject regenerate 
depends/meson.build"      2021-01-06 11:39:48.000000000 +0100
@@ -0,0 +1,6 @@
+project('nested subproject regenerate depends', 'c')
+
+s = subproject('sub1')
+
+# This is needed to make msbuild noop check work correctly
+executable('exe', 'main.c')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/unit/85 nested subproject 
regenerate depends/subprojects/sub1/meson.build" "new/meson-0.56.2/test 
cases/unit/85 nested subproject regenerate depends/subprojects/sub1/meson.build"
--- "old/meson-0.56.0/test cases/unit/85 nested subproject regenerate 
depends/subprojects/sub1/meson.build"     1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.56.2/test cases/unit/85 nested subproject regenerate 
depends/subprojects/sub1/meson.build"     2021-01-06 11:39:48.000000000 +0100
@@ -0,0 +1,4 @@
+project('sub1')
+
+cmake = import('cmake')
+cmake.subproject('sub2')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.56.0/test cases/unit/85 nested subproject 
regenerate depends/subprojects/sub2/CMakeLists.txt" "new/meson-0.56.2/test 
cases/unit/85 nested subproject regenerate 
depends/subprojects/sub2/CMakeLists.txt"
--- "old/meson-0.56.0/test cases/unit/85 nested subproject regenerate 
depends/subprojects/sub2/CMakeLists.txt"  1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.56.2/test cases/unit/85 nested subproject regenerate 
depends/subprojects/sub2/CMakeLists.txt"  2021-01-06 11:39:48.000000000 +0100
@@ -0,0 +1 @@
+project(sub2)

++++++ meson.keyring ++++++
--- /var/tmp/diff_new_pack.pyVfKp/_old  2021-01-22 21:49:02.745570118 +0100
+++ /var/tmp/diff_new_pack.pyVfKp/_new  2021-01-22 21:49:02.749570124 +0100
@@ -138,3 +138,55 @@
 Yk4Wl26lcjaUkwNEwPvTEtq3fjwKoisLbg==
 =Smkh
 -----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+dxBkBtFt+g3obj4=
+=AiRn
+-----END PGP PUBLIC KEY BLOCK-----

Reply via email to