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-10-01 22:28:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/meson (Old)
 and      /work/SRC/openSUSE:Factory/.meson.new.2443 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "meson"

Fri Oct  1 22:28:57 2021 rev:75 rq:922180 version:0.59.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/meson/meson.changes      2021-08-27 
21:43:20.069930960 +0200
+++ /work/SRC/openSUSE:Factory/.meson.new.2443/meson.changes    2021-10-01 
22:29:02.381372527 +0200
@@ -1,0 +2,11 @@
+Wed Sep 29 12:23:31 UTC 2021 - Dominique Leuenberger <dims...@opensuse.org>
+
+- Add meson-rust-1.55.patch: Fix test suite run with rust 1.55.
+
+-------------------------------------------------------------------
+Wed Sep 29 06:27:10 UTC 2021 - Dominique Leuenberger <dims...@opensuse.org>
+
+- Update to version 0.59.2:
+  + No upstream changes provided.
+
+-------------------------------------------------------------------

Old:
----
  meson-0.59.1.tar.gz
  meson-0.59.1.tar.gz.asc

New:
----
  meson-0.59.2.tar.gz
  meson-0.59.2.tar.gz.asc
  meson-rust-1.55.patch

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

Other differences:
------------------
++++++ meson.spec ++++++
--- /var/tmp/diff_new_pack.ttaGZi/_old  2021-10-01 22:29:02.817373333 +0200
+++ /var/tmp/diff_new_pack.ttaGZi/_new  2021-10-01 22:29:02.817373333 +0200
@@ -28,7 +28,7 @@
 %{!?vim_data_dir:%global vim_data_dir %{_datadir}/vim}
 %bcond_with     setuptools
 Name:           meson%{name_ext}
-Version:        0.59.1
+Version:        0.59.2
 Release:        0
 Summary:        Python-based build system
 License:        Apache-2.0
@@ -41,6 +41,8 @@
 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 meson-rust-1.55.patch gh#mesonbuikd/meson#9310 
dims...@opensuse.org -- Fix test suite with rust 1.55
+Patch3:         meson-rust-1.55.patch
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 BuildRequires:  python3-base
@@ -163,6 +165,9 @@
 %if !%{with setuptools}
 %patch2 -p1
 %endif
+pushd "test cases/rust/5 polyglot static"
+%patch3 -p4
+popd
 
 # 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.59.1.tar.gz -> meson-0.59.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/PKG-INFO new/meson-0.59.2/PKG-INFO
--- old/meson-0.59.1/PKG-INFO   2021-08-18 13:26:21.929528700 +0200
+++ new/meson-0.59.2/PKG-INFO   2021-09-28 19:15:11.939847000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: meson
-Version: 0.59.1
+Version: 0.59.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.59.1/data/test.schema.json 
new/meson-0.59.2/data/test.schema.json
--- old/meson-0.59.1/data/test.schema.json      2021-08-18 13:22:15.000000000 
+0200
+++ new/meson-0.59.2/data/test.schema.json      2021-09-28 19:04:57.000000000 
+0200
@@ -21,11 +21,14 @@
             "type": "string",
             "enum": [
               "file",
+              "python_file",
               "dir",
               "exe",
               "shared_lib",
+              "python_lib",
               "pdb",
               "implib",
+              "py_implib",
               "implibempty",
               "expr"
             ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/man/meson.1 new/meson-0.59.2/man/meson.1
--- old/meson-0.59.1/man/meson.1        2021-08-18 13:22:33.000000000 +0200
+++ new/meson-0.59.2/man/meson.1        2021-09-28 19:04:57.000000000 +0200
@@ -1,4 +1,4 @@
-.TH MESON "1" "August 2021" "meson 0.59.1" "User Commands"
+.TH MESON "1" "September 2021" "meson 0.59.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.59.1/meson.egg-info/PKG-INFO 
new/meson-0.59.2/meson.egg-info/PKG-INFO
--- old/meson-0.59.1/meson.egg-info/PKG-INFO    2021-08-18 13:26:15.000000000 
+0200
+++ new/meson-0.59.2/meson.egg-info/PKG-INFO    2021-09-28 19:15:06.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: meson
-Version: 0.59.1
+Version: 0.59.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.59.1/meson.egg-info/SOURCES.txt 
new/meson-0.59.2/meson.egg-info/SOURCES.txt
--- old/meson-0.59.1/meson.egg-info/SOURCES.txt 2021-08-18 13:26:15.000000000 
+0200
+++ new/meson-0.59.2/meson.egg-info/SOURCES.txt 2021-09-28 19:15:06.000000000 
+0200
@@ -892,6 +892,12 @@
 test cases/common/153 wrap file should not failed/subprojects/foo.wrap
 test cases/common/153 wrap file should not failed/subprojects/patchdir.wrap
 test cases/common/153 wrap file should not failed/subprojects/zlib.wrap
+test cases/common/153 wrap file should not failed/subprojects/bar-1.0/bar.c
+test cases/common/153 wrap file should not 
failed/subprojects/bar-1.0/meson.build
+test cases/common/153 wrap file should not failed/subprojects/foo-1.0/foo.c
+test cases/common/153 wrap file should not 
failed/subprojects/foo-1.0/meson.build
+test cases/common/153 wrap file should not 
failed/subprojects/foo-1.0-patchdir/foo.c
+test cases/common/153 wrap file should not 
failed/subprojects/foo-1.0-patchdir/meson.build
 test cases/common/153 wrap file should not 
failed/subprojects/packagecache/foo-1.0-patch.tar.xz
 test cases/common/153 wrap file should not 
failed/subprojects/packagecache/foo-1.0.tar.xz
 test cases/common/153 wrap file should not 
failed/subprojects/packagecache/zlib-1.2.8-8-wrap.zip
@@ -1697,6 +1703,7 @@
 test cases/common/98 subproject subdir/subprojects/sub/lib/sub.c
 test cases/common/98 subproject subdir/subprojects/sub/lib/sub.h
 test cases/common/98 subproject subdir/subprojects/sub_implicit/meson.build
+test cases/common/98 subproject 
subdir/subprojects/sub_implicit/meson_options.txt
 test cases/common/98 subproject 
subdir/subprojects/sub_implicit/subprojects/subsub/foo.h
 test cases/common/98 subproject 
subdir/subprojects/sub_implicit/subprojects/subsub/meson.build
 test cases/common/98 subproject 
subdir/subprojects/sub_implicit/subprojects/subsub/subprojects/subsubsub.wrap
@@ -1917,6 +1924,8 @@
 test cases/failing/113 cmake executable dependency/test.json
 test cases/failing/113 cmake executable 
dependency/subprojects/cmlib/CMakeLists.txt
 test cases/failing/113 cmake executable dependency/subprojects/cmlib/main.c
+test cases/failing/114 allow_fallback with fallback/meson.build
+test cases/failing/114 allow_fallback with fallback/test.json
 test cases/failing/12 string arithmetic/meson.build
 test cases/failing/12 string arithmetic/test.json
 test cases/failing/13 array arithmetic/meson.build
@@ -2450,8 +2459,12 @@
 test cases/frameworks/4 qt/meson.build
 test cases/frameworks/4 qt/meson_options.txt
 test cases/frameworks/4 qt/q5core.cpp
+test cases/frameworks/4 qt/qt4_lang.qrc
 test cases/frameworks/4 qt/qt4core_fr.ts
+test cases/frameworks/4 qt/qt4embedded_fr.ts
+test cases/frameworks/4 qt/qt5_lang.qrc
 test cases/frameworks/4 qt/qt5core_fr.ts
+test cases/frameworks/4 qt/qt5embedded_fr.ts
 test cases/frameworks/4 qt/qtinterface.cpp
 test cases/frameworks/4 qt/stuff.qrc
 test cases/frameworks/4 qt/stuff2.qrc
@@ -2778,10 +2791,13 @@
 test cases/python/1 basic/gluon/gluonator.py
 test cases/python/1 basic/subdir/meson.build
 test cases/python/1 basic/subdir/subprog.py
-test cases/python/2 extmodule/blaster.py
+test cases/python/2 extmodule/blaster.py.in
 test cases/python/2 extmodule/meson.build
+test cases/python/2 extmodule/test.json
 test cases/python/2 extmodule/ext/meson.build
 test cases/python/2 extmodule/ext/tachyon_module.c
+test cases/python/2 extmodule/ext/nested/meson.build
+test cases/python/2 extmodule/ext/wrongdir/meson.build
 test cases/python/3 cython/cytest.py
 test cases/python/3 cython/meson.build
 test cases/python/3 cython/libdir/cstorer.pxd
@@ -3303,6 +3319,8 @@
 test cases/unit/79 user options for subproject/.gitignore
 test cases/unit/79 user options for subproject/75 user options for 
subproject/.gitignore
 test cases/unit/79 user options for subproject/75 user options for 
subproject/meson.build
+test cases/unit/79 user options for subproject/subprojects/sub/meson.build
+test cases/unit/79 user options for 
subproject/subprojects/sub/meson_options.txt
 test cases/unit/8 -L -l order/first.pc
 test cases/unit/8 -L -l order/meson.build
 test cases/unit/8 -L -l order/prog.c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/_typing.py 
new/meson-0.59.2/mesonbuild/_typing.py
--- old/meson-0.59.1/mesonbuild/_typing.py      2021-08-18 13:22:15.000000000 
+0200
+++ new/meson-0.59.2/mesonbuild/_typing.py      2021-09-28 19:04:57.000000000 
+0200
@@ -36,6 +36,9 @@
 class StringProtocol(Protocol):
     def __str__(self) -> str: ...
 
+class SizedStringProtocol(Protocol, StringProtocol, typing.Sized):
+    pass
+
 class ImmutableListProtocol(Protocol[T]):
 
     """A protocol used in cases where a list is returned, but should not be
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/compilers/compilers.py 
new/meson-0.59.2/mesonbuild/compilers/compilers.py
--- old/meson-0.59.1/mesonbuild/compilers/compilers.py  2021-08-18 
13:22:33.000000000 +0200
+++ new/meson-0.59.2/mesonbuild/compilers/compilers.py  2021-09-28 
19:04:57.000000000 +0200
@@ -1150,11 +1150,12 @@
     def get_compiler_check_args(self, mode: CompileCheckMode) -> T.List[str]:
         """Arguments to pass the compiler and/or linker for checks.
 
-        The default implementation turns off optimizations. mode should be
-        one of:
+        The default implementation turns off optimizations.
 
         Examples of things that go here:
           - extra arguments for error checking
+          - Arguments required to make the compiler exit with a non-zero status
+            when something is wrong.
         """
         return self.get_no_optimization_args()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/compilers/mixins/clang.py 
new/meson-0.59.2/mesonbuild/compilers/mixins/clang.py
--- old/meson-0.59.1/mesonbuild/compilers/mixins/clang.py       2021-08-18 
13:22:15.000000000 +0200
+++ new/meson-0.59.2/mesonbuild/compilers/mixins/clang.py       2021-09-28 
19:04:57.000000000 +0200
@@ -81,7 +81,11 @@
         return ['-include-pch', os.path.join(pch_dir, 
self.get_pch_name(header))]
 
     def get_compiler_check_args(self, mode: CompileCheckMode) -> T.List[str]:
-        myargs = []  # type: T.List[str]
+        # Clang is different than GCC, it will return True when a symbol isn't
+        # defined in a header. Specifically this seems ot have something to do
+        # with functions that may be in a header on some systems, but not all 
of
+        # them. `strlcat` specifically with can trigger this.
+        myargs: T.List[str] = ['-Werror=implicit-function-declaration']
         if mode is CompileCheckMode.COMPILE:
             myargs.extend(['-Werror=unknown-warning-option', 
'-Werror=unused-command-line-argument'])
             if mesonlib.version_compare(self.version, '>=3.6.0'):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/compilers/objc.py 
new/meson-0.59.2/mesonbuild/compilers/objc.py
--- old/meson-0.59.1/mesonbuild/compilers/objc.py       2021-08-18 
13:22:15.000000000 +0200
+++ new/meson-0.59.2/mesonbuild/compilers/objc.py       2021-09-28 
19:04:57.000000000 +0200
@@ -90,7 +90,7 @@
         opts.update({
             OptionKey('std', machine=self.for_machine, lang='c'): 
coredata.UserComboOption(
                 'C language standard to use',
-                ['none', 'c89', 'c99', 'c11', 'c17', 'gnu99', 'gnu11'],
+                ['none', 'c89', 'c99', 'c11', 'c17', 'gnu89', 'gnu99', 
'gnu11', 'gnu17'],
                 'none',
             )
         })
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/compilers/objcpp.py 
new/meson-0.59.2/mesonbuild/compilers/objcpp.py
--- old/meson-0.59.1/mesonbuild/compilers/objcpp.py     2021-08-18 
13:22:15.000000000 +0200
+++ new/meson-0.59.2/mesonbuild/compilers/objcpp.py     2021-09-28 
19:04:57.000000000 +0200
@@ -91,7 +91,7 @@
         opts.update({
             OptionKey('std', machine=self.for_machine, lang='cpp'): 
coredata.UserComboOption(
                 'C++ language standard to use',
-                ['none', 'c++98', 'c++11', 'c++14', 'c++17'],
+                ['none', 'c++98', 'c++11', 'c++14', 'c++17', 'gnu++98', 
'gnu++11', 'gnu++14', 'gnu++17'],
                 'none',
             )
         })
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/coredata.py 
new/meson-0.59.2/mesonbuild/coredata.py
--- old/meson-0.59.1/mesonbuild/coredata.py     2021-08-18 13:22:33.000000000 
+0200
+++ new/meson-0.59.2/mesonbuild/coredata.py     2021-09-28 19:04:57.000000000 
+0200
@@ -43,7 +43,7 @@
     KeyedOptionDictType = T.Union[T.Dict['OptionKey', 'UserOption[T.Any]'], 
OptionOverrideProxy]
     CompilerCheckCacheKey = T.Tuple[T.Tuple[str, ...], str, str, T.Tuple[str, 
...], str]
 
-version = '0.59.1'
+version = '0.59.2'
 backendlist = ['ninja', 'vs', 'vs2010', 'vs2012', 'vs2013', 'vs2015', 
'vs2017', 'vs2019', 'xcode']
 
 default_yielding = False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/dependencies/base.py 
new/meson-0.59.2/mesonbuild/dependencies/base.py
--- old/meson-0.59.1/mesonbuild/dependencies/base.py    2021-08-18 
13:22:33.000000000 +0200
+++ new/meson-0.59.2/mesonbuild/dependencies/base.py    2021-09-28 
19:04:57.000000000 +0200
@@ -104,7 +104,7 @@
             return mlog.red('NO')
         if not self.version:
             return mlog.green('YES')
-        return mlog.AnsiText([mlog.green('YES'), ' ', mlog.cyan(self.version)])
+        return mlog.AnsiText(mlog.green('YES'), ' ', mlog.cyan(self.version))
 
     def get_compile_args(self) -> T.List[str]:
         if self.include_type == 'system':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/environment.py 
new/meson-0.59.2/mesonbuild/environment.py
--- old/meson-0.59.1/mesonbuild/environment.py  2021-08-18 13:22:15.000000000 
+0200
+++ new/meson-0.59.2/mesonbuild/environment.py  2021-09-28 19:04:57.000000000 
+0200
@@ -313,6 +313,9 @@
         trial = 'x86'
     elif trial == 'arm64':
         trial = 'aarch64'
+    elif trial.startswith('aarch64'):
+        # This can be `aarch64_be`
+        trial = 'aarch64'
     elif trial.startswith('arm') or trial.startswith('earm'):
         trial = 'arm'
     elif trial.startswith(('powerpc64', 'ppc64')):
@@ -358,7 +361,7 @@
 
     return trial
 
-def detect_cpu(compilers: CompilersDict):
+def detect_cpu(compilers: CompilersDict) -> str:
     if mesonlib.is_windows():
         trial = detect_windows_arch(compilers)
     elif mesonlib.is_freebsd() or mesonlib.is_netbsd() or 
mesonlib.is_openbsd() or mesonlib.is_aix():
@@ -372,10 +375,13 @@
         # Same check as above for cpu_family
         if any_compiler_has_define(compilers, '__i386__'):
             trial = 'i686' # All 64 bit cpus have at least this level of x86 
support.
-    elif trial == 'aarch64':
+    elif trial.startswith('aarch64'):
         # Same check as above for cpu_family
         if any_compiler_has_define(compilers, '__arm__'):
             trial = 'arm'
+        else:
+            # for aarch64_be
+            trial = 'aarch64'
     elif trial.startswith('earm'):
         trial = 'arm'
     elif trial == 'e2k':
@@ -386,20 +392,22 @@
             trial = 'mips'
         else:
             trial = 'mips64'
+    elif trial == 'ppc':
+        # AIX always returns powerpc, check here for 64-bit
+        if any_compiler_has_define(compilers, '__64BIT__'):
+            trial = 'ppc64'
 
     # Add more quirks here as bugs are reported. Keep in sync with
     # detect_cpu_family() above.
     return trial
 
-def detect_system():
+def detect_system() -> str:
     if sys.platform == 'cygwin':
         return 'cygwin'
     return platform.system().lower()
 
-def detect_msys2_arch():
-    if 'MSYSTEM_CARCH' in os.environ:
-        return os.environ['MSYSTEM_CARCH']
-    return None
+def detect_msys2_arch() -> T.Optional[str]:
+    return os.environ.get('MSYSTEM_CARCH', None)
 
 def detect_machine_info(compilers: T.Optional[CompilersDict] = None) -> 
MachineInfo:
     """Detect the machine we're running on
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/meson-0.59.1/mesonbuild/interpreter/dependencyfallbacks.py 
new/meson-0.59.2/mesonbuild/interpreter/dependencyfallbacks.py
--- old/meson-0.59.1/mesonbuild/interpreter/dependencyfallbacks.py      
2021-08-18 13:22:25.000000000 +0200
+++ new/meson-0.59.2/mesonbuild/interpreter/dependencyfallbacks.py      
2021-09-28 19:04:57.000000000 +0200
@@ -16,7 +16,8 @@
 
 
 class DependencyFallbacksHolder(MesonInterpreterObject):
-    def __init__(self, interpreter: 'Interpreter', names: T.List[str], 
allow_fallback: T.Optional[bool] = None) -> None:
+    def __init__(self, interpreter: 'Interpreter', names: T.List[str], 
allow_fallback: T.Optional[bool] = None,
+                 default_options: T.Optional[T.List[str]] = None) -> None:
         super().__init__(subproject=interpreter.subproject)
         self.interpreter = interpreter
         self.subproject = interpreter.subproject
@@ -27,7 +28,7 @@
         self.allow_fallback = allow_fallback
         self.subproject_name = None
         self.subproject_varname = None
-        self.subproject_kwargs = None
+        self.subproject_kwargs = {'default_options': default_options or []}
         self.names: T.List[str] = []
         for name in names:
             if not name:
@@ -39,13 +40,12 @@
                 raise InterpreterException('dependency_fallbacks name {name!r} 
is duplicated')
             self.names.append(name)
 
-    def set_fallback(self, fbinfo: T.Optional[T.Union[T.List[str], str]], 
default_options: T.Optional[T.List[str]] = None) -> None:
-        # Legacy: This converts dependency()'s fallback and default_options 
kwargs.
+    def set_fallback(self, fbinfo: T.Optional[T.Union[T.List[str], str]]) -> 
None:
+        # Legacy: This converts dependency()'s fallback kwargs.
         if fbinfo is None:
-            if default_options is not None:
-                mlog.warning('The "default_options" keyword argument does 
nothing without a fallback subproject.',
-                             location=self.interpreter.current_node)
             return
+        if self.allow_fallback is not None:
+            raise InvalidArguments('"fallback" and "allow_fallback" arguments 
are mutually exclusive')
         fbinfo = stringlistify(fbinfo)
         if len(fbinfo) == 0:
             # dependency('foo', fallback: []) is the same as dependency('foo', 
allow_fallback: false)
@@ -58,10 +58,9 @@
             subp_name, varname = fbinfo
         else:
             raise InterpreterException('Fallback info must have one or two 
items.')
-        kwargs = {'default_options': default_options or []}
-        self._subproject_impl(subp_name, varname, kwargs)
+        self._subproject_impl(subp_name, varname)
 
-    def _subproject_impl(self, subp_name: str, varname: str, kwargs: 
TYPE_nkwargs) -> None:
+    def _subproject_impl(self, subp_name: str, varname: str) -> None:
         if not varname:
             # If no variable name is specified, check if the wrap file has one.
             # If the wrap file has a variable name, better use it because the
@@ -73,7 +72,6 @@
         assert self.subproject_name is None
         self.subproject_name = subp_name
         self.subproject_varname = varname
-        self.subproject_kwargs = kwargs
 
     def _do_dependency_cache(self, kwargs: TYPE_nkwargs, func_args: TYPE_nvar, 
func_kwargs: TYPE_nkwargs) -> T.Optional[Dependency]:
         name = func_args[0]
@@ -316,7 +314,7 @@
                 if subp_name:
                     self.forcefallback |= subp_name in force_fallback_for
                     if self.forcefallback or self.allow_fallback is True or 
required or self._get_subproject(subp_name):
-                        self._subproject_impl(subp_name, varname, {})
+                        self._subproject_impl(subp_name, varname)
                     break
 
         candidates = self._get_candidates()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/interpreter/interpreter.py 
new/meson-0.59.2/mesonbuild/interpreter/interpreter.py
--- old/meson-0.59.1/mesonbuild/interpreter/interpreter.py      2021-08-18 
13:22:33.000000000 +0200
+++ new/meson-0.59.2/mesonbuild/interpreter/interpreter.py      2021-09-28 
19:04:57.000000000 +0200
@@ -1560,8 +1560,8 @@
             raise InvalidArguments('"allow_fallback" argument must be boolean')
         fallback = kwargs.get('fallback')
         default_options = kwargs.get('default_options')
-        df = DependencyFallbacksHolder(self, names, allow_fallback)
-        df.set_fallback(fallback, default_options)
+        df = DependencyFallbacksHolder(self, names, allow_fallback, 
default_options)
+        df.set_fallback(fallback)
         not_found_message = kwargs.get('not_found_message', '')
         if not isinstance(not_found_message, str):
             raise InvalidArguments('The not_found_message must be a string.')
@@ -1582,7 +1582,7 @@
                 raise InvalidArguments('The `include_type` kwarg must be a 
string')
             actual = d.get_include_type()
             if wanted != actual:
-                mlog.debug(f'Current include type of {names[0]} is {actual}. 
Converting to requested {wanted}')
+                mlog.debug(f'Current include type of {args[0]} is {actual}. 
Converting to requested {wanted}')
                 d = d.generate_system_dependency(wanted)
         return d
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/mesonlib/universal.py 
new/meson-0.59.2/mesonbuild/mesonlib/universal.py
--- old/meson-0.59.1/mesonbuild/mesonlib/universal.py   2021-08-18 
13:22:15.000000000 +0200
+++ new/meson-0.59.2/mesonbuild/mesonlib/universal.py   2021-09-28 
19:04:57.000000000 +0200
@@ -644,7 +644,7 @@
     return platname == 'windows'
 
 def is_wsl() -> bool:
-    return is_linux() and 'microsoft' in platform.version().lower()
+    return is_linux() and 'microsoft' in platform.release().lower()
 
 def is_cygwin() -> bool:
     return sys.platform == 'cygwin'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/mesonmain.py 
new/meson-0.59.2/mesonbuild/mesonmain.py
--- old/meson-0.59.1/mesonbuild/mesonmain.py    2021-08-18 13:22:33.000000000 
+0200
+++ new/meson-0.59.2/mesonbuild/mesonmain.py    2021-09-28 19:04:57.000000000 
+0200
@@ -82,6 +82,7 @@
             '-requiresAny',
             '-requires', 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64',
             '-products', '*',
+            '-utf8',
             '-format',
             'json'
         ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/mlog.py 
new/meson-0.59.2/mesonbuild/mlog.py
--- old/meson-0.59.1/mesonbuild/mlog.py 2021-08-18 13:22:15.000000000 +0200
+++ new/meson-0.59.2/mesonbuild/mlog.py 2021-09-28 19:04:57.000000000 +0200
@@ -22,7 +22,7 @@
 from pathlib import Path
 
 if T.TYPE_CHECKING:
-    from ._typing import StringProtocol
+    from ._typing import StringProtocol, SizedStringProtocol
 
 """This is (mostly) a standalone module used to write logging
 information about Meson runs. Some output goes to screen,
@@ -143,7 +143,7 @@
 TV_LoggableList = T.List[TV_Loggable]
 
 class AnsiText:
-    def __init__(self, *args: TV_LoggableList):
+    def __init__(self, *args: 'SizedStringProtocol'):
         self.args = args
 
     def __len__(self) -> int:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/modules/gnome.py 
new/meson-0.59.2/mesonbuild/modules/gnome.py
--- old/meson-0.59.1/mesonbuild/modules/gnome.py        2021-08-18 
13:22:33.000000000 +0200
+++ new/meson-0.59.2/mesonbuild/modules/gnome.py        2021-09-28 
19:04:57.000000000 +0200
@@ -815,7 +815,9 @@
     def _get_scanner_cflags(cflags):
         'g-ir-scanner only accepts -I/-D/-U; must ignore all other flags'
         for f in cflags:
-            if f.startswith(('-D', '-U', '-I')):
+            # _FORTIFY_SOURCE depends on / works together with -O, on the 
other hand this
+            # just invokes the preprocessor anyway
+            if f.startswith(('-D', '-U', '-I')) and not 
f.startswith('-D_FORTIFY_SOURCE'):
                 yield f
 
     @staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/modules/python.py 
new/meson-0.59.2/mesonbuild/modules/python.py
--- old/meson-0.59.1/mesonbuild/modules/python.py       2021-08-18 
13:22:33.000000000 +0200
+++ new/meson-0.59.2/mesonbuild/modules/python.py       2021-09-28 
19:04:57.000000000 +0200
@@ -272,6 +272,7 @@
   'variables': sysconfig.get_config_vars(),
   'paths': sysconfig.get_paths(),
   'install_paths': install_paths,
+  'sys_paths': sys.path,
   'version': sysconfig.get_python_version(),
   'platform': sysconfig.get_platform(),
   'is_pypy': '__pypy__' in sys.builtin_module_names,
@@ -279,15 +280,82 @@
 }))
 '''
 
+if T.TYPE_CHECKING:
+    class PythonIntrospectionDict(TypedDict):
+
+        install_paths: T.Dict[str, str]
+        is_pypy: bool
+        link_libpython: bool
+        paths: T.Dict[str, str]
+        platform: str
+        suffix : str
+        variables: T.Dict[str, str]
+        version: str
+
 class PythonExternalProgram(ExternalProgram):
     def __init__(self, name: str, command: T.Optional[T.List[str]] = None, 
ext_prog: T.Optional[ExternalProgram] = None):
         if ext_prog is None:
             super().__init__(name, command=command, silent=True)
         else:
-            self.name = ext_prog.name
+            self.name = name
             self.command = ext_prog.command
             self.path = ext_prog.path
-        self.info: T.Dict[str, str] = {}
+        self.info: 'PythonIntrospectionDict' = {
+            'install_paths': {},
+            'is_pypy': False,
+            'link_libpython': False,
+            'paths': {},
+            'platform': 'sentinal',
+            'variables': {},
+            'version': '0.0',
+        }
+
+    def _check_version(self, version: str) -> bool:
+        if self.name == 'python2':
+            return mesonlib.version_compare(version, '< 3.0')
+        elif self.name == 'python3':
+            return mesonlib.version_compare(version, '>= 3.0')
+        return True
+
+    def sanity(self) -> bool:
+        # Sanity check, we expect to have something that at least quacks in 
tune
+        cmd = self.get_command() + ['-c', INTROSPECT_COMMAND]
+        p, stdout, stderr = mesonlib.Popen_safe(cmd)
+        try:
+            info = json.loads(stdout)
+        except json.JSONDecodeError:
+            info = None
+            mlog.debug('Could not introspect Python (%s): exit code %d' % 
(str(p.args), p.returncode))
+            mlog.debug('Program stdout:\n')
+            mlog.debug(stdout)
+            mlog.debug('Program stderr:\n')
+            mlog.debug(stderr)
+
+        if info is not None and self._check_version(info['version']):
+            variables = info['variables']
+            info['suffix'] = variables.get('EXT_SUFFIX') or 
variables.get('SO') or variables.get('.so')
+            self.info = T.cast('PythonIntrospectionDict', info)
+            self.platlib = self._get_path('platlib')
+            self.purelib = self._get_path('purelib')
+            return True
+        else:
+            return False
+
+    def _get_path(self, key: str) -> None:
+        user_dir = str(Path.home())
+        sys_paths = self.info['sys_paths']
+        rel_path = self.info['install_paths'][key][1:]
+        if not any(p.endswith(rel_path) for p in sys_paths if not 
p.startswith(user_dir)):
+            # On Debian derivatives sysconfig install path is broken and is not
+            # included in the locations python actually lookup.
+            # See https://github.com/mesonbuild/meson/issues/8739.
+            mlog.warning('Broken python installation detected. Python files',
+                         'installed by Meson might not be found by python 
interpreter.',
+                         once=True)
+            if mesonlib.is_debianlike():
+                rel_path = 'lib/python3/dist-packages'
+        return rel_path
+
 
 class PythonInstallation(ExternalProgramHolder):
     def __init__(self, python, interpreter):
@@ -295,10 +363,10 @@
         info = python.info
         prefix = 
self.interpreter.environment.coredata.get_option(mesonlib.OptionKey('prefix'))
         self.variables = info['variables']
+        self.suffix = info['suffix']
         self.paths = info['paths']
-        install_paths = info['install_paths']
-        self.platlib_install_path = os.path.join(prefix, 
install_paths['platlib'][1:])
-        self.purelib_install_path = os.path.join(prefix, 
install_paths['purelib'][1:])
+        self.platlib_install_path = os.path.join(prefix, python.platlib)
+        self.purelib_install_path = os.path.join(prefix, python.purelib)
         self.version = info['version']
         self.platform = info['platform']
         self.is_pypy = info['is_pypy']
@@ -319,10 +387,10 @@
 
     @permittedKwargs(mod_kwargs)
     def extension_module_method(self, args, kwargs):
-        if 'subdir' in kwargs and 'install_dir' in kwargs:
-            raise InvalidArguments('"subdir" and "install_dir" are mutually 
exclusive')
-
-        if 'subdir' in kwargs:
+        if 'install_dir' in kwargs:
+            if 'subdir' in kwargs:
+                raise InvalidArguments('"subdir" and "install_dir" are 
mutually exclusive')
+        else:
             subdir = kwargs.pop('subdir', '')
             if not isinstance(subdir, str):
                 raise InvalidArguments('"subdir" argument must be a string.')
@@ -340,12 +408,10 @@
                 new_deps.append(dep)
             kwargs['dependencies'] = new_deps
 
-        suffix = self.variables.get('EXT_SUFFIX') or self.variables.get('SO') 
or self.variables.get('.so')
-
         # msys2's python3 has "-cpython-36m.dll", we have to be clever
-        split = suffix.rsplit('.', 1)
-        suffix = split.pop(-1)
-        args[0] += ''.join(s for s in split)
+        # FIXME: explain what the specific cleverness is here
+        split, suffix = self.suffix.rsplit('.', 1)
+        args[0] += split
 
         kwargs['name_prefix'] = ''
         kwargs['name_suffix'] = suffix
@@ -498,12 +564,6 @@
         else:
             return None
 
-    def _check_version(self, name_or_path, version):
-        if name_or_path == 'python2':
-            return mesonlib.version_compare(version, '< 3.0')
-        elif name_or_path == 'python3':
-            return mesonlib.version_compare(version, '>= 3.0')
-        return True
 
     @FeatureNewKwargs('python.find_installation', '0.49.0', ['disabler'])
     @FeatureNewKwargs('python.find_installation', '0.51.0', ['modules'])
@@ -515,13 +575,15 @@
         want_modules = mesonlib.extract_as_list(kwargs, 'modules')  # type: 
T.List[str]
         found_modules = []    # type: T.List[str]
         missing_modules = []  # type: T.List[str]
+        fallback = args[0] if args else ''
+        display_name = fallback or 'python'
 
         if len(args) > 1:
             raise InvalidArguments('find_installation takes zero or one 
positional argument.')
 
         name_or_path = 
state.environment.lookup_binary_entry(MachineChoice.HOST, 'python')
         if name_or_path is None and args:
-            name_or_path = args[0]
+            name_or_path = fallback
             if not isinstance(name_or_path, str):
                 raise InvalidArguments('find_installation argument must be a 
string.')
 
@@ -532,8 +594,8 @@
         if not name_or_path:
             python = PythonExternalProgram('python3', mesonlib.python_command)
         else:
-            tmp_python = ExternalProgram.from_entry('python3', name_or_path)
-            python = PythonExternalProgram('python3', ext_prog=tmp_python)
+            tmp_python = ExternalProgram.from_entry(display_name, name_or_path)
+            python = PythonExternalProgram(display_name, ext_prog=tmp_python)
 
             if not python.found() and mesonlib.is_windows():
                 pythonpath = self._get_win_pythonpath(name_or_path)
@@ -581,25 +643,13 @@
                 raise mesonlib.MesonException('{} is missing modules: 
{}'.format(name_or_path or 'python', ', '.join(missing_modules)))
             return NonExistingExternalProgram()
         else:
-            # Sanity check, we expect to have something that at least quacks 
in tune
-            try:
-                cmd = python.get_command() + ['-c', INTROSPECT_COMMAND]
-                p, stdout, stderr = mesonlib.Popen_safe(cmd)
-                info = json.loads(stdout)
-            except json.JSONDecodeError:
-                info = None
-                mlog.debug('Could not introspect Python (%s): exit code %d' % 
(str(p.args), p.returncode))
-                mlog.debug('Program stdout:\n')
-                mlog.debug(stdout)
-                mlog.debug('Program stderr:\n')
-                mlog.debug(stderr)
+            sane = python.sanity()
 
-            if isinstance(info, dict) and 'version' in info and 
self._check_version(name_or_path, info['version']):
-                python.info = info
+            if sane:
                 return python
             else:
                 if required:
-                    raise mesonlib.MesonException(f'{python} is not a valid 
python or it is missing setuptools')
+                    raise mesonlib.MesonException(f'{python} is not a valid 
python or it is missing distutils')
                 return NonExistingExternalProgram()
 
         raise mesonlib.MesonBugException('Unreachable code was reached 
(PythonModule.find_installation).')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/modules/qt.py 
new/meson-0.59.2/mesonbuild/modules/qt.py
--- old/meson-0.59.1/mesonbuild/modules/qt.py   2021-08-18 13:22:33.000000000 
+0200
+++ new/meson-0.59.2/mesonbuild/modules/qt.py   2021-09-28 19:04:57.000000000 
+0200
@@ -103,10 +103,12 @@
     def __init__(self, interpreter: 'Interpreter', qt_version: int = 5):
         ExtensionModule.__init__(self, interpreter)
         self.qt_version = qt_version
-        self.moc: ExternalProgram = NonExistingExternalProgram('moc')
-        self.uic: ExternalProgram = NonExistingExternalProgram('uic')
-        self.rcc: ExternalProgram = NonExistingExternalProgram('rcc')
-        self.lrelease: ExternalProgram = NonExistingExternalProgram('lrelease')
+        self.tools: T.Dict[str, ExternalProgram] = {
+            'moc': NonExistingExternalProgram('moc'),
+            'uic': NonExistingExternalProgram('uic'),
+            'rcc': NonExistingExternalProgram('rcc'),
+            'lrelease': NonExistingExternalProgram('lrelease'),
+        }
         self.methods.update({
             'has_tools': self.has_tools,
             'preprocess': self.preprocess,
@@ -120,13 +122,10 @@
         """Detect Qt (4 or 5) moc, uic, rcc in the specified bindir or in 
PATH"""
         # It is important that this list does not change order as the order of
         # the returned ExternalPrograms will change as well
-        bins = ['moc', 'uic', 'rcc', 'lrelease']
-        found = {b: NonExistingExternalProgram(name=f'{b}-qt{qt_dep.qtver}')
-                 for b in bins}
         wanted = f'== {qt_dep.version}'
 
         def gen_bins() -> T.Generator[T.Tuple[str, str], None, None]:
-            for b in bins:
+            for b in self.tools:
                 if qt_dep.bindir:
                     yield os.path.join(qt_dep.bindir, b), b
                 # prefer the <tool>-qt<version> of the tool to the plain one, 
as we
@@ -135,7 +134,7 @@
                 yield b, b
 
         for b, name in gen_bins():
-            if found[name].found():
+            if self.tools[name].found():
                 continue
 
             if name == 'lrelease':
@@ -158,7 +157,7 @@
                                    version_func=get_version,
                                    wanted=wanted)
             if p.found():
-                setattr(self, name, p)
+                self.tools[name] = p
 
     def _detect_tools(self, state: 'ModuleState', method: str, required: bool 
= True) -> None:
         if self._tools_detected:
@@ -178,10 +177,10 @@
                     mlog.bold('https://bugreports.qt.io/browse/QTBUG-45460'), 
fatal=False)
         else:
             suffix = f'-qt{self.qt_version}'
-            self.moc = NonExistingExternalProgram(name='moc' + suffix)
-            self.uic = NonExistingExternalProgram(name='uic' + suffix)
-            self.rcc = NonExistingExternalProgram(name='rcc' + suffix)
-            self.lrelease = NonExistingExternalProgram(name='lrelease' + 
suffix)
+            self.tools['moc'] = NonExistingExternalProgram(name='moc' + suffix)
+            self.tools['uic'] = NonExistingExternalProgram(name='uic' + suffix)
+            self.tools['rcc'] = NonExistingExternalProgram(name='rcc' + suffix)
+            self.tools['lrelease'] = 
NonExistingExternalProgram(name='lrelease' + suffix)
 
     @staticmethod
     def _qrc_nodes(state: 'ModuleState', rcc_file: 'FileOrString') -> 
T.Tuple[str, T.List[str]]:
@@ -255,7 +254,7 @@
             mlog.log('qt.has_tools skipped: feature', mlog.bold(feature), 
'disabled')
             return False
         self._detect_tools(state, method, required=False)
-        for tool in (self.moc, self.uic, self.rcc, self.lrelease):
+        for tool in self.tools.values():
             if not tool.found():
                 if required:
                     raise MesonException('Qt tools not found')
@@ -282,7 +281,7 @@
     def _compile_resources_impl(self, state: 'ModuleState', kwargs: 
'ResourceCompilerKwArgs') -> T.List[build.CustomTarget]:
         # Avoid the FeatureNew when dispatching from preprocess
         self._detect_tools(state, kwargs['method'])
-        if not self.rcc.found():
+        if not self.tools['rcc'].found():
             err_msg = ("{0} sources specified and couldn't find {1}, "
                        "please check your qt{2} installation")
             raise MesonException(err_msg.format('RCC', 
f'rcc-qt{self.qt_version}', self.qt_version))
@@ -307,7 +306,7 @@
             rcc_kwargs: T.Dict[str, T.Any] = {  # TODO: if CustomTarget had 
typing information we could use that here...
                 'input': sources,
                 'output': name + '.cpp',
-                'command': self.rcc.get_command() + ['-name', name, '-o', 
'@OUTPUT@'] + extra_args + ['@INPUT@'] + DEPFILE_ARGS,
+                'command': self.tools['rcc'].get_command() + ['-name', name, 
'-o', '@OUTPUT@'] + extra_args + ['@INPUT@'] + DEPFILE_ARGS,
                 'depend_files': qrc_deps,
                 'depfile': f'{name}.d',
             }
@@ -324,7 +323,7 @@
                 rcc_kwargs = {
                     'input': rcc_file,
                     'output': f'{name}.cpp',
-                    'command': self.rcc.get_command() + ['-name', 
'@BASENAME@', '-o', '@OUTPUT@'] + extra_args + ['@INPUT@'] + DEPFILE_ARGS,
+                    'command': self.tools['rcc'].get_command() + ['-name', 
'@BASENAME@', '-o', '@OUTPUT@'] + extra_args + ['@INPUT@'] + DEPFILE_ARGS,
                     'depend_files': qrc_deps,
                     'depfile': f'{name}.d',
                 }
@@ -349,14 +348,14 @@
     def _compile_ui_impl(self, state: 'ModuleState', kwargs: 
'UICompilerKwArgs') -> build.GeneratedList:
         # Avoid the FeatureNew when dispatching from preprocess
         self._detect_tools(state, kwargs['method'])
-        if not self.uic.found():
+        if not self.tools['uic'].found():
             err_msg = ("{0} sources specified and couldn't find {1}, "
                        "please check your qt{2} installation")
             raise MesonException(err_msg.format('UIC', 
f'uic-qt{self.qt_version}', self.qt_version))
 
         # TODO: This generator isn't added to the generator list in the 
Interpreter
         gen = build.Generator(
-            self.uic,
+            self.tools['uic'],
             kwargs['extra_args'] + ['-o', '@OUTPUT@', '@INPUT@'],
             ['ui_@BASENAME@.h'],
             name=f'Qt{self.qt_version} ui')
@@ -380,7 +379,7 @@
     def _compile_moc_impl(self, state: 'ModuleState', kwargs: 
'MocCompilerKwArgs') -> T.List[build.GeneratedList]:
         # Avoid the FeatureNew when dispatching from preprocess
         self._detect_tools(state, kwargs['method'])
-        if not self.moc.found():
+        if not self.tools['moc'].found():
             err_msg = ("{0} sources specified and couldn't find {1}, "
                        "please check your qt{2} installation")
             raise MesonException(err_msg.format('MOC', 
f'uic-qt{self.qt_version}', self.qt_version))
@@ -398,12 +397,12 @@
         arguments = kwargs['extra_args'] + inc + compile_args + ['@INPUT@', 
'-o', '@OUTPUT@']
         if kwargs['headers']:
             moc_gen = build.Generator(
-                self.moc, arguments, ['moc_@BASENAME@.cpp'],
+                self.tools['moc'], arguments, ['moc_@BASENAME@.cpp'],
                 name=f'Qt{self.qt_version} moc header')
             output.append(moc_gen.process_files(kwargs['headers'], state))
         if kwargs['sources']:
             moc_gen = build.Generator(
-                self.moc, arguments, ['@BASENAME@.moc'],
+                self.tools['moc'], arguments, ['@BASENAME@.moc'],
                 name=f'Qt{self.qt_version} moc source')
             output.append(moc_gen.process_files(kwargs['sources'], state))
 
@@ -497,19 +496,19 @@
                     ts_files.append(c.rstrip('.qm') + '.ts')
                 else:
                     raise MesonException(f'qt.compile_translations: qresource 
can only contain qm files, found {c}')
-            results = self.preprocess(state, [], {'qresources': qresource, 
'rcc_extra_arguments': kwargs['rcc_extra_arguments']})
+            results = self.preprocess(state, [], {'qresources': 
qresource_file, 'rcc_extra_arguments': kwargs['rcc_extra_arguments']})
         self._detect_tools(state, kwargs['method'])
         translations: T.List[build.CustomTarget] = []
         for ts in ts_files:
-            if not self.lrelease.found():
+            if not self.tools['lrelease'].found():
                 raise MesonException('qt.compile_translations: ' +
-                                     self.lrelease.name + ' not found')
+                                     self.tools['lrelease'].name + ' not 
found')
             if qresource:
                 outdir = 
os.path.dirname(os.path.normpath(os.path.join(state.subdir, ts)))
                 ts = os.path.basename(ts)
             else:
                 outdir = state.subdir
-            cmd = [self.lrelease, '@INPUT@', '-qm', '@OUTPUT@']
+            cmd = [self.tools['lrelease'], '@INPUT@', '-qm', '@OUTPUT@']
             lrelease_kwargs = {'output': '@BASENAME@.qm',
                                'input': ts,
                                'install': kwargs.get('install', False),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/mtest.py 
new/meson-0.59.2/mesonbuild/mtest.py
--- old/meson-0.59.1/mesonbuild/mtest.py        2021-07-20 10:56:20.000000000 
+0200
+++ new/meson-0.59.2/mesonbuild/mtest.py        2021-09-28 19:04:57.000000000 
+0200
@@ -990,7 +990,14 @@
         if self.test.workdir:
             filename = os.path.join(self.test.workdir, filename)
 
-        self.junit = et.parse(filename)
+        try:
+            self.junit = et.parse(filename)
+        except FileNotFoundError:
+            # This can happen if the test fails to run or complete for some
+            # reason, like the rpath for libgtest isn't properly set. ExitCode
+            # will handle the failure, don't generate a stacktrace.
+            pass
+
         super().complete(returncode, res, stdo, stde)
 
 TestRun.PROTOCOL_TO_CLASS[TestProtocol.GTEST] = TestRunGTest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/programs.py 
new/meson-0.59.2/mesonbuild/programs.py
--- old/meson-0.59.1/mesonbuild/programs.py     2021-08-18 13:22:15.000000000 
+0200
+++ new/meson-0.59.2/mesonbuild/programs.py     2021-09-28 19:04:57.000000000 
+0200
@@ -295,6 +295,9 @@
         commands = self._search_dir(name, search_dir)
         if commands:
             return commands
+        # If there is a directory component, do not look in PATH
+        if os.path.dirname(name) and not os.path.isabs(name):
+            return [None]
         # Do a standard search in PATH
         path = os.environ.get('PATH', None)
         if mesonlib.is_windows() and path:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/mesonbuild/wrap/wraptool.py 
new/meson-0.59.2/mesonbuild/wrap/wraptool.py
--- old/meson-0.59.1/mesonbuild/wrap/wraptool.py        2021-08-18 
13:22:15.000000000 +0200
+++ new/meson-0.59.2/mesonbuild/wrap/wraptool.py        2021-09-28 
19:04:57.000000000 +0200
@@ -98,24 +98,24 @@
         f.write(url.read())
     print(f'Installed {name} version {version} revision {revision}')
 
-def parse_patch_url(patch_url: str) -> T.Tuple[str, int]:
+def parse_patch_url(patch_url: str) -> T.Tuple[str, str]:
     u = urlparse(patch_url)
     if u.netloc != 'wrapdb.mesonbuild.com':
         raise WrapException(f'URL {patch_url} does not seems to be a wrapdb 
patch')
     arr = u.path.strip('/').split('/')
     if arr[0] == 'v1':
         # e.g. https://wrapdb.mesonbuild.com/v1/projects/zlib/1.2.11/5/get_zip
-        return arr[-3], int(arr[-2])
+        return arr[-3], arr[-2]
     elif arr[0] == 'v2':
         # e.g. https://wrapdb.mesonbuild.com/v2/zlib_1.2.11-5/get_patch
         tag = arr[-2]
         name, version = tag.rsplit('_', 1)
         version, revision = version.rsplit('-', 1)
-        return version, int(revision)
+        return version, revision
     else:
         raise WrapException(f'Invalid wrapdb URL {patch_url}')
 
-def get_current_version(wrapfile: str) -> T.Tuple[str, int, str, str, str]:
+def get_current_version(wrapfile: str) -> T.Tuple[str, str, str, str, str]:
     cp = configparser.ConfigParser(interpolation=None)
     cp.read(wrapfile)
     wrap_data = cp['wrap-file']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/run_project_tests.py 
new/meson-0.59.2/run_project_tests.py
--- old/meson-0.59.1/run_project_tests.py       2021-08-18 13:22:33.000000000 
+0200
+++ new/meson-0.59.2/run_project_tests.py       2021-09-28 19:04:57.000000000 
+0200
@@ -52,6 +52,7 @@
 from mesonbuild.mlog import blue, bold, cyan, green, red, yellow, normal_green
 from mesonbuild.coredata import backendlist, version as meson_version
 from mesonbuild.mesonmain import setup_vsenv
+from mesonbuild.modules.python import PythonExternalProgram
 from run_tests import get_fake_options, run_configure, get_meson_script
 from run_tests import get_backend_commands, get_backend_args_for_dir, Backend
 from run_tests import ensure_backend_detects_changes
@@ -122,6 +123,9 @@
     def fail(self, msg: str) -> None:
         self.msg = msg
 
+python = PythonExternalProgram(sys.executable)
+python.sanity()
+
 class InstalledFile:
     def __init__(self, raw: T.Dict[str, str]):
         self.path = raw['file']
@@ -143,6 +147,8 @@
                 (env.machines.host.is_windows() and compiler in {'pgi', 'dmd', 
'ldc'})):
             canonical_compiler = 'msvc'
 
+        python_suffix = python.info['suffix']
+
         has_pdb = False
         if self.language in {'c', 'cpp'}:
             has_pdb = canonical_compiler == 'msvc'
@@ -161,6 +167,15 @@
             return None
 
         # Handle the different types
+        if self.typ in {'py_implib', 'python_lib', 'python_file'}:
+            val = p.as_posix()
+            val = val.replace('@PYTHON_PLATLIB@', python.platlib)
+            val = val.replace('@PYTHON_PURELIB@', python.purelib)
+            p = Path(val)
+            if self.typ == 'python_file':
+                return p
+            if self.typ == 'python_lib':
+                return p.with_suffix(python_suffix)
         if self.typ in ['file', 'dir']:
             return p
         elif self.typ == 'shared_lib':
@@ -195,13 +210,15 @@
             if self.version:
                 p = p.with_name('{}-{}'.format(p.name, self.version[0]))
             return p.with_suffix('.pdb') if has_pdb else None
-        elif self.typ == 'implib' or self.typ == 'implibempty':
+        elif self.typ in {'implib', 'implibempty', 'py_implib'}:
             if env.machines.host.is_windows() and canonical_compiler == 'msvc':
                 # only MSVC doesn't generate empty implibs
                 if self.typ == 'implibempty' and compiler == 'msvc':
                     return None
                 return p.parent / (re.sub(r'^lib', '', p.name) + '.lib')
             elif env.machines.host.is_windows() or 
env.machines.host.is_cygwin():
+                if self.typ == 'py_implib':
+                    p = p.with_suffix(python_suffix)
                 return p.with_suffix('.dll.a')
             else:
                 return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.59.1/run_unittests.py 
new/meson-0.59.2/run_unittests.py
--- old/meson-0.59.1/run_unittests.py   2021-08-18 13:22:33.000000000 +0200
+++ new/meson-0.59.2/run_unittests.py   2021-09-28 19:04:57.000000000 +0200
@@ -1708,6 +1708,100 @@
         self.assertEqual(k.default, 'foo')
         self.assertEqual(v.default, 'bar')
 
+    def test_detect_cpu_family(self) -> None:
+        """Test the various cpu familes that we detect and normalize.
+
+        This is particularly useful as both documentation, and to keep testing
+        platforms that are less common.
+        """
+
+        @contextmanager
+        def mock_trial(value: str) -> T.Iterable[None]:
+            """Mock all of the ways we could get the trial at once."""
+            mocked = mock.Mock(return_value=value)
+
+            with mock.patch('mesonbuild.environment.detect_windows_arch', 
mocked), \
+                    mock.patch('mesonbuild.environment.platform.processor', 
mocked), \
+                    mock.patch('mesonbuild.environment.platform.machine', 
mocked):
+                yield
+
+        cases = [
+            ('x86', 'x86'),
+            ('i386', 'x86'),
+            ('bepc', 'x86'),  # Haiku
+            ('earm', 'arm'),  # NetBSD
+            ('arm', 'arm'),
+            ('ppc64', 'ppc64'),
+            ('powerpc64', 'ppc64'),
+            ('powerpc', 'ppc'),
+            ('ppc', 'ppc'),
+            ('macppc', 'ppc'),
+            ('power macintosh', 'ppc'),
+            ('mips64el', 'mips64'),
+            ('mips64', 'mips64'),
+            ('mips', 'mips'),
+            ('mipsel', 'mips'),
+            ('ip30', 'mips64'),
+            ('ip35', 'mips64'),
+            ('parisc64', 'parisc'),
+            ('sun4u', 'sparc64'),
+            ('sun4v', 'sparc64'),
+            ('amd64', 'x86_64'),
+            ('x64', 'x86_64'),
+            ('i86pc', 'x86_64'),  # Solaris
+            ('aarch64', 'aarch64'),
+            ('aarch64_be', 'aarch64'),
+        ]
+
+        with mock.patch('mesonbuild.environment.any_compiler_has_define', 
mock.Mock(return_value=False)):
+            for test, expected in cases:
+                with self.subTest(test, has_define=False), mock_trial(test):
+                    actual = mesonbuild.environment.detect_cpu_family({})
+                    self.assertEqual(actual, expected)
+
+        with mock.patch('mesonbuild.environment.any_compiler_has_define', 
mock.Mock(return_value=True)):
+            for test, expected in [('x86_64', 'x86'), ('aarch64', 'arm'), 
('ppc', 'ppc64')]:
+                with self.subTest(test, has_define=True), mock_trial(test):
+                    actual = mesonbuild.environment.detect_cpu_family({})
+                    self.assertEqual(actual, expected)
+
+    def test_detect_cpu(self) -> None:
+
+        @contextmanager
+        def mock_trial(value: str) -> T.Iterable[None]:
+            """Mock all of the ways we could get the trial at once."""
+            mocked = mock.Mock(return_value=value)
+
+            with mock.patch('mesonbuild.environment.detect_windows_arch', 
mocked), \
+                    mock.patch('mesonbuild.environment.platform.processor', 
mocked), \
+                    mock.patch('mesonbuild.environment.platform.machine', 
mocked):
+                yield
+
+        cases = [
+            ('amd64', 'x86_64'),
+            ('x64', 'x86_64'),
+            ('i86pc', 'x86_64'),
+            ('earm', 'arm'),
+            ('mips64el', 'mips64'),
+            ('mips64', 'mips64'),
+            ('mips', 'mips'),
+            ('mipsel', 'mips'),
+            ('aarch64', 'aarch64'),
+            ('aarch64_be', 'aarch64'),
+        ]
+
+        with mock.patch('mesonbuild.environment.any_compiler_has_define', 
mock.Mock(return_value=False)):
+            for test, expected in cases:
+                with self.subTest(test, has_define=False), mock_trial(test):
+                    actual = mesonbuild.environment.detect_cpu({})
+                    self.assertEqual(actual, expected)
+
+        with mock.patch('mesonbuild.environment.any_compiler_has_define', 
mock.Mock(return_value=True)):
+            for test, expected in [('x86_64', 'i686'), ('aarch64', 'arm'), 
('ppc', 'ppc64')]:
+                with self.subTest(test, has_define=True), mock_trial(test):
+                    actual = mesonbuild.environment.detect_cpu({})
+                    self.assertEqual(actual, expected)
+
 
 @unittest.skipIf(is_tarball(), 'Skipping because this is a tarball release')
 class DataTests(unittest.TestCase):
@@ -5334,6 +5428,7 @@
                 missing prog   : NO
                 existing prog  : ''' + sys.executable + '''
                 missing dep    : NO
+                external dep   : YES 1.2.3
                 internal dep   : YES
 
               Plugins
@@ -5351,9 +5446,13 @@
         if sys.version_info < (3, 7, 0):
             # Dictionary order is not stable in Python <3.7, so sort the lines
             # while comparing
-            self.assertEqual(sorted(expected_lines), sorted(out_lines))
-        else:
-            self.assertEqual(expected_lines, out_lines)
+            expected_lines = sorted(expected_lines)
+            out_lines = sorted(out_lines)
+        for e, o in zip(expected_lines, out_lines):
+            if e.startswith('    external dep'):
+                self.assertRegex(o, r'^    external dep   : (YES [0-9.]*|NO)$')
+            else:
+                self.assertEqual(o, e)
 
     def test_meson_compile(self):
         """Test the meson compile command."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/common/153 wrap file should 
not failed/subprojects/bar-1.0/bar.c" "new/meson-0.59.2/test cases/common/153 
wrap file should not failed/subprojects/bar-1.0/bar.c"
--- "old/meson-0.59.1/test cases/common/153 wrap file should not 
failed/subprojects/bar-1.0/bar.c"      1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/common/153 wrap file should not 
failed/subprojects/bar-1.0/bar.c"      2020-03-21 11:05:46.000000000 +0100
@@ -0,0 +1,3 @@
+int bar_dummy_func(void) {
+    return 42;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/common/153 wrap file should 
not failed/subprojects/bar-1.0/meson.build" "new/meson-0.59.2/test 
cases/common/153 wrap file should not failed/subprojects/bar-1.0/meson.build"
--- "old/meson-0.59.1/test cases/common/153 wrap file should not 
failed/subprojects/bar-1.0/meson.build"        1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.59.2/test cases/common/153 wrap file should not 
failed/subprojects/bar-1.0/meson.build"        2020-04-25 15:59:16.000000000 
+0200
@@ -0,0 +1,2 @@
+project('static lib bar', 'c')
+libbar = static_library('bar', 'bar.c')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/common/153 wrap file should 
not failed/subprojects/foo-1.0/foo.c" "new/meson-0.59.2/test cases/common/153 
wrap file should not failed/subprojects/foo-1.0/foo.c"
--- "old/meson-0.59.1/test cases/common/153 wrap file should not 
failed/subprojects/foo-1.0/foo.c"      1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/common/153 wrap file should not 
failed/subprojects/foo-1.0/foo.c"      2020-03-21 11:23:04.000000000 +0100
@@ -0,0 +1,3 @@
+int dummy_func(void) {
+    return 42;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/common/153 wrap file should 
not failed/subprojects/foo-1.0/meson.build" "new/meson-0.59.2/test 
cases/common/153 wrap file should not failed/subprojects/foo-1.0/meson.build"
--- "old/meson-0.59.1/test cases/common/153 wrap file should not 
failed/subprojects/foo-1.0/meson.build"        1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.59.2/test cases/common/153 wrap file should not 
failed/subprojects/foo-1.0/meson.build"        2020-04-25 15:52:29.000000000 
+0200
@@ -0,0 +1,2 @@
+project('static lib', 'c')
+libfoo = static_library('foo', 'foo.c')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/common/153 wrap file should 
not failed/subprojects/foo-1.0-patchdir/foo.c" "new/meson-0.59.2/test 
cases/common/153 wrap file should not failed/subprojects/foo-1.0-patchdir/foo.c"
--- "old/meson-0.59.1/test cases/common/153 wrap file should not 
failed/subprojects/foo-1.0-patchdir/foo.c"     1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.59.2/test cases/common/153 wrap file should not 
failed/subprojects/foo-1.0-patchdir/foo.c"     2020-03-21 11:23:04.000000000 
+0100
@@ -0,0 +1,3 @@
+int dummy_func(void) {
+    return 42;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/common/153 wrap file should 
not failed/subprojects/foo-1.0-patchdir/meson.build" "new/meson-0.59.2/test 
cases/common/153 wrap file should not 
failed/subprojects/foo-1.0-patchdir/meson.build"
--- "old/meson-0.59.1/test cases/common/153 wrap file should not 
failed/subprojects/foo-1.0-patchdir/meson.build"       1970-01-01 
01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/common/153 wrap file should not 
failed/subprojects/foo-1.0-patchdir/meson.build"       2021-04-27 
08:50:21.000000000 +0200
@@ -0,0 +1,2 @@
+project('static lib patchdir', 'c')
+libfoo = static_library('foo', 'foo.c')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/common/219 include_type 
dependency/meson.build" "new/meson-0.59.2/test cases/common/219 include_type 
dependency/meson.build"
--- "old/meson-0.59.1/test cases/common/219 include_type 
dependency/meson.build"        2021-04-27 08:50:21.000000000 +0200
+++ "new/meson-0.59.2/test cases/common/219 include_type 
dependency/meson.build"        2021-09-28 19:04:57.000000000 +0200
@@ -36,6 +36,9 @@
 fallback = dependency('sdffgagf_does_not_exist', include_type: 'system', 
fallback: ['subDep', 'subDep_dep'])
 assert(fallback.include_type() == 'system', 'include_type works with 
dependency fallback')
 
+fallback_empty = dependency('', include_type: 'system', fallback: ['subDep', 
'subDep_dep'])
+assert(fallback_empty.include_type() == 'system', 'include_type works with 
empty name dependency fallback')
+
 # Check that PCH works with `include_type : 'system'` See 
https://github.com/mesonbuild/meson/issues/7167
 main_exe = executable('main_exe', 'main.cpp', cpp_pch: 'pch/test.hpp', 
dependencies: boost_dep)
 test('main_test', main_exe)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/common/98 subproject 
subdir/meson.build" "new/meson-0.59.2/test cases/common/98 subproject 
subdir/meson.build"
--- "old/meson-0.59.1/test cases/common/98 subproject subdir/meson.build"       
2021-04-27 08:50:21.000000000 +0200
+++ "new/meson-0.59.2/test cases/common/98 subproject subdir/meson.build"       
2021-09-28 19:04:57.000000000 +0200
@@ -27,7 +27,7 @@
 assert(not d.found(), 'Dependency should be not-found')
 
 # Verify that implicit fallback works because subprojects/sub_implicit 
directory exists
-d = dependency('sub_implicit')
+d = dependency('sub_implicit', default_options: 'opt=overriden')
 assert(d.found(), 'Should implicitly fallback')
 
 # Verify that implicit fallback works because sub_implicit.wrap has
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/common/98 subproject 
subdir/subprojects/sub_implicit/meson.build" "new/meson-0.59.2/test 
cases/common/98 subproject subdir/subprojects/sub_implicit/meson.build"
--- "old/meson-0.59.1/test cases/common/98 subproject 
subdir/subprojects/sub_implicit/meson.build"      2021-04-27 08:50:21.000000000 
+0200
+++ "new/meson-0.59.2/test cases/common/98 subproject 
subdir/subprojects/sub_implicit/meson.build"      2021-09-28 19:04:57.000000000 
+0200
@@ -9,3 +9,5 @@
 
 # This one is not overridden but the wrap file tells the variable name to use.
 glib_dep = dep
+
+assert(get_option('opt') == 'overriden')
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/common/98 subproject 
subdir/subprojects/sub_implicit/meson_options.txt" "new/meson-0.59.2/test 
cases/common/98 subproject subdir/subprojects/sub_implicit/meson_options.txt"
--- "old/meson-0.59.1/test cases/common/98 subproject 
subdir/subprojects/sub_implicit/meson_options.txt"        1970-01-01 
01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/common/98 subproject 
subdir/subprojects/sub_implicit/meson_options.txt"        2021-09-28 
19:04:57.000000000 +0200
@@ -0,0 +1 @@
+option('opt', type: 'string', value: 'default')
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/failing/114 allow_fallback 
with fallback/meson.build" "new/meson-0.59.2/test cases/failing/114 
allow_fallback with fallback/meson.build"
--- "old/meson-0.59.1/test cases/failing/114 allow_fallback with 
fallback/meson.build"  1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/failing/114 allow_fallback with 
fallback/meson.build"  2021-09-28 19:04:57.000000000 +0200
@@ -0,0 +1,3 @@
+project('fallback and allow_fallback')
+
+dependency('foo', fallback: 'foo', allow_fallback: false)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/failing/114 allow_fallback 
with fallback/test.json" "new/meson-0.59.2/test cases/failing/114 
allow_fallback with fallback/test.json"
--- "old/meson-0.59.1/test cases/failing/114 allow_fallback with 
fallback/test.json"    1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/failing/114 allow_fallback with 
fallback/test.json"    2021-09-28 19:04:57.000000000 +0200
@@ -0,0 +1,8 @@
+{
+    "stdout": [
+        {
+            "line": "test cases/failing/114 allow_fallback with 
fallback/meson.build:3:0: ERROR: \"fallback\" and \"allow_fallback\" arguments 
are mutually exclusive"
+        }
+    ]
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/frameworks/4 qt/main.cpp" 
"new/meson-0.59.2/test cases/frameworks/4 qt/main.cpp"
--- "old/meson-0.59.1/test cases/frameworks/4 qt/main.cpp"      2020-08-15 
18:27:05.000000000 +0200
+++ "new/meson-0.59.2/test cases/frameworks/4 qt/main.cpp"      2021-09-28 
19:04:57.000000000 +0200
@@ -1,4 +1,6 @@
 #include <QApplication>
+#include <QTranslator>
+#include <QDebug>
 #include "mainWindow.h"
 
 #if QT_VERSION > 0x050000
@@ -16,6 +18,13 @@
   Q_INIT_RESOURCE(stuff2);
   #endif
   QApplication app(argc, argv);
+
+  auto *translator = new QTranslator;
+  if (translator->load(QLocale(), QT "embedded", "_", ":/lang"))
+      qApp->installTranslator(translator);
+
+  qDebug() << QObject::tr("Translate me!");
+
   MainWindow *win = new MainWindow();
   QImage qi(":/thing.png");
   if(qi.width() != 640) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/frameworks/4 
qt/meson.build" "new/meson-0.59.2/test cases/frameworks/4 qt/meson.build"
--- "old/meson-0.59.1/test cases/frameworks/4 qt/meson.build"   2021-08-18 
13:22:33.000000000 +0200
+++ "new/meson-0.59.2/test cases/frameworks/4 qt/meson.build"   2021-09-28 
19:04:57.000000000 +0200
@@ -81,10 +81,16 @@
     # qt4-rcc and qt5-rcc take different arguments, for example qt4: 
['-compress', '3']; qt5: '--compress=3'
     qtmodule.preprocess(qt + 'testrccarg', qresources : files(['stuff.qrc', 
'stuff2.qrc']), rcc_extra_arguments : '--compress=3', method : 
get_option('method'))
 
+    translations_cpp = qtmodule.compile_translations(qresource: qt+'_lang.qrc')
+    # unity builds suck and definitely cannot handle two qrc embeds in one 
compilation unit
+    unityproof_translations = static_library('unityproof_translations', 
translations_cpp)
+
+    extra_cpp_args += '-DQT="@0@"'.format(qt)
     qexe = executable(qt + 'app',
       sources : ['main.cpp', 'mainWindow.cpp', # Sources that don't need 
preprocessing.
       prep, prep_rcc],
       dependencies : qtdep,
+      link_with: unityproof_translations,
       cpp_args: extra_cpp_args,
       gui_app : true)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/frameworks/4 
qt/qt4_lang.qrc" "new/meson-0.59.2/test cases/frameworks/4 qt/qt4_lang.qrc"
--- "old/meson-0.59.1/test cases/frameworks/4 qt/qt4_lang.qrc"  1970-01-01 
01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/frameworks/4 qt/qt4_lang.qrc"  2021-09-28 
19:04:57.000000000 +0200
@@ -0,0 +1,6 @@
+<RCC>
+    <qresource prefix="/lang">
+        <file>qt4embedded_fr.qm</file>
+    </qresource>
+</RCC>
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/frameworks/4 
qt/qt4embedded_fr.ts" "new/meson-0.59.2/test cases/frameworks/4 
qt/qt4embedded_fr.ts"
--- "old/meson-0.59.1/test cases/frameworks/4 qt/qt4embedded_fr.ts"     
1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/frameworks/4 qt/qt4embedded_fr.ts"     
2021-09-28 19:04:57.000000000 +0200
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr_FR">
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="q5core.cpp" line="23"/>
+        <source>Translate me!</source>
+        <translation>Traduisez moi!</translation>
+    </message>
+</context>
+</TS>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/frameworks/4 
qt/qt5_lang.qrc" "new/meson-0.59.2/test cases/frameworks/4 qt/qt5_lang.qrc"
--- "old/meson-0.59.1/test cases/frameworks/4 qt/qt5_lang.qrc"  1970-01-01 
01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/frameworks/4 qt/qt5_lang.qrc"  2021-09-28 
19:04:57.000000000 +0200
@@ -0,0 +1,6 @@
+<RCC>
+    <qresource prefix="/lang">
+        <file>qt5embedded_fr.qm</file>
+    </qresource>
+</RCC>
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/frameworks/4 
qt/qt5embedded_fr.ts" "new/meson-0.59.2/test cases/frameworks/4 
qt/qt5embedded_fr.ts"
--- "old/meson-0.59.1/test cases/frameworks/4 qt/qt5embedded_fr.ts"     
1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/frameworks/4 qt/qt5embedded_fr.ts"     
2021-09-28 19:04:57.000000000 +0200
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="fr_FR">
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="q5core.cpp" line="23"/>
+        <source>Translate me!</source>
+        <translation>Traduisez moi!</translation>
+    </message>
+</context>
+</TS>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/python/2 
extmodule/blaster.py" "new/meson-0.59.2/test cases/python/2 
extmodule/blaster.py"
--- "old/meson-0.59.1/test cases/python/2 extmodule/blaster.py" 2021-04-27 
08:49:45.000000000 +0200
+++ "new/meson-0.59.2/test cases/python/2 extmodule/blaster.py" 1970-01-01 
01:00:00.000000000 +0100
@@ -1,11 +0,0 @@
-#!/usr/bin/env python3
-
-import tachyon
-
-result = tachyon.phaserize('shoot')
-
-if not isinstance(result, int):
-    raise SystemExit('Returned result not an integer.')
-
-if result != 1:
-    raise SystemExit(f'Returned result {result} is not 1.')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/python/2 
extmodule/blaster.py.in" "new/meson-0.59.2/test cases/python/2 
extmodule/blaster.py.in"
--- "old/meson-0.59.1/test cases/python/2 extmodule/blaster.py.in"      
1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/python/2 extmodule/blaster.py.in"      
2021-09-28 19:04:57.000000000 +0200
@@ -0,0 +1,11 @@
+#!/usr/bin/env python3
+
+import @tachyon_module@ as tachyon
+
+result = tachyon.phaserize('shoot')
+
+if not isinstance(result, int):
+    raise SystemExit('Returned result not an integer.')
+
+if result != 1:
+    raise SystemExit(f'Returned result {result} is not 1.')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/python/2 
extmodule/ext/meson.build" "new/meson-0.59.2/test cases/python/2 
extmodule/ext/meson.build"
--- "old/meson-0.59.1/test cases/python/2 extmodule/ext/meson.build"    
2020-08-15 18:27:05.000000000 +0200
+++ "new/meson-0.59.2/test cases/python/2 extmodule/ext/meson.build"    
2021-09-28 19:04:57.000000000 +0200
@@ -1,6 +1,10 @@
 pylib = py.extension_module('tachyon',
   'tachyon_module.c',
   dependencies : py_dep,
+  c_args: '-DMESON_MODULENAME="tachyon"',
+  install: true,
 )
 
+subdir('nested')
+subdir('wrongdir')
 pypathdir = meson.current_build_dir()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/python/2 
extmodule/ext/nested/meson.build" "new/meson-0.59.2/test cases/python/2 
extmodule/ext/nested/meson.build"
--- "old/meson-0.59.1/test cases/python/2 extmodule/ext/nested/meson.build"     
1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/python/2 extmodule/ext/nested/meson.build"     
2021-09-28 19:04:57.000000000 +0200
@@ -0,0 +1,16 @@
+py.extension_module('tachyon',
+  '../tachyon_module.c',
+  dependencies : py_dep,
+  c_args: '-DMESON_MODULENAME="nested.tachyon"',
+  install: true,
+  subdir: 'nested'
+)
+py.install_sources(
+  configure_file(
+    input: '../../blaster.py.in',
+    output: 'blaster.py',
+    configuration: {'tachyon_module': 'nested.tachyon'}
+  ),
+  pure: false,
+  subdir: 'nested',
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/python/2 
extmodule/ext/tachyon_module.c" "new/meson-0.59.2/test cases/python/2 
extmodule/ext/tachyon_module.c"
--- "old/meson-0.59.1/test cases/python/2 extmodule/ext/tachyon_module.c"       
2020-08-15 18:27:05.000000000 +0200
+++ "new/meson-0.59.2/test cases/python/2 extmodule/ext/tachyon_module.c"       
2021-09-28 19:04:57.000000000 +0200
@@ -38,7 +38,7 @@
 
 static struct PyModuleDef tachyonmodule = {
    PyModuleDef_HEAD_INIT,
-   "tachyon",
+   MESON_MODULENAME,
    NULL,
    -1,
    TachyonMethods
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/python/2 
extmodule/ext/wrongdir/meson.build" "new/meson-0.59.2/test cases/python/2 
extmodule/ext/wrongdir/meson.build"
--- "old/meson-0.59.1/test cases/python/2 extmodule/ext/wrongdir/meson.build"   
1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/python/2 extmodule/ext/wrongdir/meson.build"   
2021-09-28 19:04:57.000000000 +0200
@@ -0,0 +1,7 @@
+py.extension_module('tachyon',
+  '../tachyon_module.c',
+  dependencies : py_dep,
+  c_args: '-DMESON_MODULENAME="tachyon"',
+  install: true,
+  install_dir: get_option('libdir')
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/python/2 
extmodule/meson.build" "new/meson-0.59.2/test cases/python/2 
extmodule/meson.build"
--- "old/meson-0.59.1/test cases/python/2 extmodule/meson.build"        
2021-04-01 23:12:21.000000000 +0200
+++ "new/meson-0.59.2/test cases/python/2 extmodule/meson.build"        
2021-09-28 19:04:57.000000000 +0200
@@ -18,11 +18,19 @@
 
 subdir('ext')
 
+blaster = configure_file(
+  input: 'blaster.py.in',
+  output: 'blaster.py',
+  configuration: {'tachyon_module': 'tachyon'}
+)
+
 test('extmod',
   py,
-  args : files('blaster.py'),
+  args : blaster,
   env : ['PYTHONPATH=' + pypathdir])
 
+py.install_sources(blaster, pure: false)
+py.install_sources(blaster, subdir: 'pure')
 
 py3_pkg_dep = dependency('python3', method: 'pkg-config', required : false)
 if py3_pkg_dep.found()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/python/2 
extmodule/test.json" "new/meson-0.59.2/test cases/python/2 extmodule/test.json"
--- "old/meson-0.59.1/test cases/python/2 extmodule/test.json"  1970-01-01 
01:00:00.000000000 +0100
+++ "new/meson-0.59.2/test cases/python/2 extmodule/test.json"  2021-09-28 
19:04:57.000000000 +0200
@@ -0,0 +1,13 @@
+{
+  "installed": [
+    { "type": "python_file", "file": "usr/@PYTHON_PLATLIB@/blaster.py" },
+    { "type": "python_lib",  "file": "usr/@PYTHON_PLATLIB@/tachyon" },
+    { "type": "py_implib",   "file": "usr/@PYTHON_PLATLIB@/tachyon" },
+    { "type": "python_file", "file": "usr/@PYTHON_PURELIB@/pure/blaster.py" },
+    { "type": "python_file", "file": "usr/@PYTHON_PLATLIB@/nested/blaster.py" 
},
+    { "type": "python_lib",  "file": "usr/@PYTHON_PLATLIB@/nested/tachyon" },
+    { "type": "py_implib",   "file": "usr/@PYTHON_PLATLIB@/nested/tachyon" },
+    { "type": "python_lib",  "file": "usr/lib/tachyon" },
+    { "type": "py_implib",   "file": "usr/lib/tachyon" }
+  ]
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/unit/72 
summary/meson.build" "new/meson-0.59.2/test cases/unit/72 summary/meson.build"
--- "old/meson-0.59.1/test cases/unit/72 summary/meson.build"   2021-04-27 
08:50:21.000000000 +0200
+++ "new/meson-0.59.2/test cases/unit/72 summary/meson.build"   2021-09-28 
19:04:57.000000000 +0200
@@ -13,6 +13,7 @@
 summary({'missing prog': find_program('xyzzy', required: false),
          'existing prog': import('python').find_installation(),
          'missing dep': dependency('', required: false),
+         'external dep': dependency('zlib', required: false),
          'internal dep': declare_dependency(),
         }, section: 'Stuff')
 summary('A number', 1, section: 'Configuration')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/unit/79 user options for 
subproject/subprojects/sub/meson.build" "new/meson-0.59.2/test cases/unit/79 
user options for subproject/subprojects/sub/meson.build"
--- "old/meson-0.59.1/test cases/unit/79 user options for 
subproject/subprojects/sub/meson.build"       1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.59.2/test cases/unit/79 user options for 
subproject/subprojects/sub/meson.build"       2021-04-27 08:50:21.000000000 
+0200
@@ -0,0 +1,45 @@
+project('options', 'c')
+
+if get_option('testoption') != 'optval'
+  error('Incorrect value to test option')
+endif
+
+if get_option('other_one') != false
+  error('Incorrect value to boolean option.')
+endif
+
+if get_option('combo_opt') != 'combo'
+  error('Incorrect value to combo option.')
+endif
+
+if get_option('array_opt') != ['one', 'two']
+  message(get_option('array_opt'))
+  error('Incorrect value for array option')
+endif
+
+# If the default changes, update test cases/unit/13 reconfigure
+if get_option('b_lto') != false
+  error('Incorrect value in base option.')
+endif
+
+if get_option('includedir') != 'include'
+  error('Incorrect value in builtin option.')
+endif
+
+if get_option('integer_opt') != 3
+  error('Incorrect value in integer option.')
+endif
+
+if get_option('neg_int_opt') != -3
+  error('Incorrect value in negative integer option.')
+endif
+
+if get_option('CaseSenSiTivE') != 'Some CAPS'
+  error('Incorrect value in mixed caps option.')
+endif
+
+if get_option('CASESENSITIVE') != 'ALL CAPS'
+  error('Incorrect value in all caps option.')
+endif
+
+assert(get_option('wrap_mode') == 'default', 'Wrap mode option is broken.')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.59.1/test cases/unit/79 user options for 
subproject/subprojects/sub/meson_options.txt" "new/meson-0.59.2/test 
cases/unit/79 user options for subproject/subprojects/sub/meson_options.txt"
--- "old/meson-0.59.1/test cases/unit/79 user options for 
subproject/subprojects/sub/meson_options.txt" 1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.59.2/test cases/unit/79 user options for 
subproject/subprojects/sub/meson_options.txt" 2021-04-27 08:50:21.000000000 
+0200
@@ -0,0 +1,9 @@
+option('testoption', type : 'string', value : 'optval', description : 'An 
option ' + 'to do something')
+option('other_one', type : 'boolean', value : not (not (not (not false))))
+option('combo_opt', type : 'co' + 'mbo', choices : ['one', 'two', 'combo'], 
value : 'combo')
+option('array_opt', type : 'array', choices : ['one', 'two', 'three'], value : 
['one', 'two'])
+option('free_array_opt', type : 'array')
+option('integer_opt', type : 'integer', min : 0, max : -(-5), value : 3)
+option('neg' + '_' + 'int' + '_' + 'opt', type : 'integer', min : -5, max : 5, 
value : -3)
+option('CaseSenSiTivE', type : 'string', value: 'Some CAPS', description : 'An 
option with mixed capitaliziation')
+option('CASESENSITIVE', type : 'string', value: 'ALL CAPS', description : 'An 
option with all caps')

++++++ meson-rust-1.55.patch ++++++
Index: meson-0.59.2/test cases/rust/5 polyglot static/meson.build
===================================================================
--- meson-0.59.2.orig/test cases/rust/5 polyglot static/meson.build
+++ meson-0.59.2/test cases/rust/5 polyglot static/meson.build
@@ -2,6 +2,7 @@ project('static rust and c polyglot exec
 
 deps = [
   meson.get_compiler('c').find_library('dl', required: false),
+  meson.get_compiler('c').find_library('m', required: false),
   dependency('threads'),
 ]
 

Reply via email to