Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package meson for openSUSE:Factory checked 
in at 2022-06-26 11:58:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/meson (Old)
 and      /work/SRC/openSUSE:Factory/.meson.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "meson"

Sun Jun 26 11:58:38 2022 rev:84 rq:984920 version:0.62.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/meson/meson.changes      2022-05-06 
18:58:08.765278290 +0200
+++ /work/SRC/openSUSE:Factory/.meson.new.1548/meson.changes    2022-06-26 
11:58:40.084301534 +0200
@@ -1,0 +2,14 @@
+Fri Jun 24 12:53:02 UTC 2022 - Dominique Leuenberger <dims...@opensuse.org>
+
+- Update to version 0.62.2:
+  + qt module: fix broken install_dir kwarg.
+  + qt module: fix missing sanity check for install_dir + install.
+  + dependencies: tighten type checking and fix cmake API
+    violation.
+  + cmake: Fix CMake LLVM dependency error.
+  + Limit parallelism to hopefully work on machines with 160 cores.
+  + Fix --allow-shlib-undefined for LLVM versions > 9.
+  + i18n: fix bug where disabling gettext() broke merge_file().
+  + Fix sandbox violation when using subproject as a symlink.
+
+-------------------------------------------------------------------

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

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

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

Other differences:
------------------
++++++ meson.spec ++++++
--- /var/tmp/diff_new_pack.38K7m0/_old  2022-06-26 11:58:40.848302646 +0200
+++ /var/tmp/diff_new_pack.38K7m0/_new  2022-06-26 11:58:40.852302653 +0200
@@ -29,7 +29,7 @@
 %define _name   mesonbuild
 %{!?vim_data_dir:%global vim_data_dir %{_datadir}/vim}
 Name:           meson%{name_ext}
-Version:        0.62.1
+Version:        0.62.2
 Release:        0
 Summary:        Python-based build system
 License:        Apache-2.0

++++++ meson-0.62.1.tar.gz -> meson-0.62.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/PKG-INFO new/meson-0.62.2/PKG-INFO
--- old/meson-0.62.1/PKG-INFO   2022-04-23 11:55:33.385993700 +0200
+++ new/meson-0.62.2/PKG-INFO   2022-06-02 18:29:58.675823200 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: meson
-Version: 0.62.1
+Version: 0.62.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.62.1/man/meson.1 new/meson-0.62.2/man/meson.1
--- old/meson-0.62.1/man/meson.1        2022-04-23 11:53:34.000000000 +0200
+++ new/meson-0.62.2/man/meson.1        2022-06-02 18:17:06.000000000 +0200
@@ -1,4 +1,4 @@
-.TH MESON "1" "April 2022" "meson 0.62.1" "User Commands"
+.TH MESON "1" "May 2022" "meson 0.62.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.62.1/meson.egg-info/PKG-INFO 
new/meson-0.62.2/meson.egg-info/PKG-INFO
--- old/meson-0.62.1/meson.egg-info/PKG-INFO    2022-04-23 11:55:25.000000000 
+0200
+++ new/meson-0.62.2/meson.egg-info/PKG-INFO    2022-06-02 18:29:51.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: meson
-Version: 0.62.1
+Version: 0.62.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.62.1/meson.egg-info/SOURCES.txt 
new/meson-0.62.2/meson.egg-info/SOURCES.txt
--- old/meson-0.62.1/meson.egg-info/SOURCES.txt 2022-04-23 11:55:25.000000000 
+0200
+++ new/meson-0.62.2/meson.egg-info/SOURCES.txt 2022-06-02 18:29:51.000000000 
+0200
@@ -489,6 +489,7 @@
 test cases/cmake/8 custom command/subprojects/cmMod/cpyTest/cpyTest3.hpp
 test cases/cmake/8 custom command/subprojects/cmMod/cpyTest/cpyTest4.hpp
 test cases/cmake/8 custom command/subprojects/cmMod/cpyTest/cpyTest5.hpp
+test cases/cmake/8 custom command/subprojects/cmMod/mycpy/.gitkeep
 test cases/cmake/9 disabled subproject/meson.build
 test cases/common/1 trivial/meson.build
 test cases/common/1 trivial/trivial.c
@@ -1363,6 +1364,11 @@
 test cases/common/250 system include dir/main.cpp
 test cases/common/250 system include dir/meson.build
 test cases/common/250 system include dir/lib/lib.hpp
+test cases/common/251 subproject dependency variables/meson.build
+test cases/common/251 subproject dependency variables/test.json
+test cases/common/251 subproject dependency 
variables/subprojects/subfiles/meson.build
+test cases/common/251 subproject dependency 
variables/subprojects/subfiles/subdir/foo.c
+test cases/common/251 subproject dependency 
variables/subprojects/subfiles/subdir2/foo.c
 test cases/common/26 find program/meson.build
 test cases/common/26 find program/print-version-with-prefix.py
 test cases/common/26 find program/print-version.py
@@ -2020,6 +2026,17 @@
 test cases/failing/122 structured_sources conflicts/main.rs
 test cases/failing/122 structured_sources conflicts/meson.build
 test cases/failing/122 structured_sources conflicts/test.json
+test cases/failing/123 subproject sandbox violation/meson.build
+test cases/failing/123 subproject sandbox violation/meson_options.txt
+test cases/failing/123 subproject sandbox violation/test.json
+test cases/failing/123 subproject sandbox 
violation/subprojects/subproj1/file.txt
+test cases/failing/123 subproject sandbox 
violation/subprojects/subproj1/meson.build
+test cases/failing/123 subproject sandbox 
violation/subprojects/subproj1/nested/meson.build
+test cases/failing/123 subproject sandbox 
violation/subprojects/subproj2/file.txt
+test cases/failing/123 subproject sandbox 
violation/subprojects/subproj2/meson.build
+test cases/failing/123 subproject sandbox 
violation/subprojects/subproj2/nested/meson.build
+test cases/failing/123 subproject sandbox 
violation/subprojects/subproj3/file.txt
+test cases/failing/123 subproject sandbox 
violation/subprojects/subproj3/meson.build
 test cases/failing/13 array arithmetic/meson.build
 test cases/failing/13 array arithmetic/test.json
 test cases/failing/14 invalid option name/meson.build
@@ -3152,6 +3169,10 @@
 test cases/unit/103 python without pkgconfig/meson.build
 test cases/unit/104 strip/lib.c
 test cases/unit/104 strip/meson.build
+test cases/unit/106 subproject symlink/main.c
+test cases/unit/106 subproject symlink/meson.build
+test cases/unit/106 subproject symlink/symlinked_subproject/meson.build
+test cases/unit/106 subproject symlink/symlinked_subproject/src.c
 test cases/unit/11 cross prog/meson.build
 test cases/unit/11 cross prog/some_cross_tool.py
 test cases/unit/11 cross prog/sometool.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/ast/printer.py 
new/meson-0.62.2/mesonbuild/ast/printer.py
--- old/meson-0.62.1/mesonbuild/ast/printer.py  2021-08-18 13:22:25.000000000 
+0200
+++ new/meson-0.62.2/mesonbuild/ast/printer.py  2022-06-02 18:17:06.000000000 
+0200
@@ -29,13 +29,14 @@
 }
 
 class AstPrinter(AstVisitor):
-    def __init__(self, indent: int = 2, arg_newline_cutoff: int = 5):
+    def __init__(self, indent: int = 2, arg_newline_cutoff: int = 5, 
update_ast_line_nos: bool = False):
         self.result = ''
         self.indent = indent
         self.arg_newline_cutoff = arg_newline_cutoff
         self.ci = ''
         self.is_newline = True
         self.last_level = 0
+        self.curr_line = 1 if update_ast_line_nos else None
 
     def post_process(self) -> None:
         self.result = re.sub(r'\s+\n', '\n', self.result)
@@ -55,37 +56,48 @@
     def newline(self) -> None:
         self.result += '\n'
         self.is_newline = True
+        if self.curr_line is not None:
+            self.curr_line += 1
 
     def visit_BooleanNode(self, node: mparser.BooleanNode) -> None:
         self.append('true' if node.value else 'false', node)
+        node.lineno = self.curr_line or node.lineno
 
     def visit_IdNode(self, node: mparser.IdNode) -> None:
         assert isinstance(node.value, str)
         self.append(node.value, node)
+        node.lineno = self.curr_line or node.lineno
 
     def visit_NumberNode(self, node: mparser.NumberNode) -> None:
         self.append(str(node.value), node)
+        node.lineno = self.curr_line or node.lineno
 
     def visit_StringNode(self, node: mparser.StringNode) -> None:
         assert isinstance(node.value, str)
         self.append("'" + node.value + "'", node)
+        node.lineno = self.curr_line or node.lineno
 
     def visit_FormatStringNode(self, node: mparser.FormatStringNode) -> None:
         assert isinstance(node.value, str)
         self.append("f'" + node.value + "'", node)
+        node.lineno = self.curr_line or node.lineno
 
     def visit_ContinueNode(self, node: mparser.ContinueNode) -> None:
         self.append('continue', node)
+        node.lineno = self.curr_line or node.lineno
 
     def visit_BreakNode(self, node: mparser.BreakNode) -> None:
         self.append('break', node)
+        node.lineno = self.curr_line or node.lineno
 
     def visit_ArrayNode(self, node: mparser.ArrayNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         self.append('[', node)
         node.args.accept(self)
         self.append(']', node)
 
     def visit_DictNode(self, node: mparser.DictNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         self.append('{', node)
         node.args.accept(self)
         self.append('}', node)
@@ -93,58 +105,70 @@
     def visit_OrNode(self, node: mparser.OrNode) -> None:
         node.left.accept(self)
         self.append_padded('or', node)
+        node.lineno = self.curr_line or node.lineno
         node.right.accept(self)
 
     def visit_AndNode(self, node: mparser.AndNode) -> None:
         node.left.accept(self)
         self.append_padded('and', node)
+        node.lineno = self.curr_line or node.lineno
         node.right.accept(self)
 
     def visit_ComparisonNode(self, node: mparser.ComparisonNode) -> None:
         node.left.accept(self)
         self.append_padded(node.ctype, node)
+        node.lineno = self.curr_line or node.lineno
         node.right.accept(self)
 
     def visit_ArithmeticNode(self, node: mparser.ArithmeticNode) -> None:
         node.left.accept(self)
         self.append_padded(arithmic_map[node.operation], node)
+        node.lineno = self.curr_line or node.lineno
         node.right.accept(self)
 
     def visit_NotNode(self, node: mparser.NotNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         self.append_padded('not', node)
         node.value.accept(self)
 
     def visit_CodeBlockNode(self, node: mparser.CodeBlockNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         for i in node.lines:
             i.accept(self)
             self.newline()
 
     def visit_IndexNode(self, node: mparser.IndexNode) -> None:
         node.iobject.accept(self)
+        node.lineno = self.curr_line or node.lineno
         self.append('[', node)
         node.index.accept(self)
         self.append(']', node)
 
     def visit_MethodNode(self, node: mparser.MethodNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         node.source_object.accept(self)
         self.append('.' + node.name + '(', node)
         node.args.accept(self)
         self.append(')', node)
 
     def visit_FunctionNode(self, node: mparser.FunctionNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         self.append(node.func_name + '(', node)
         node.args.accept(self)
         self.append(')', node)
 
     def visit_AssignmentNode(self, node: mparser.AssignmentNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         self.append(node.var_name + ' = ', node)
         node.value.accept(self)
 
     def visit_PlusAssignmentNode(self, node: mparser.PlusAssignmentNode) -> 
None:
+        node.lineno = self.curr_line or node.lineno
         self.append(node.var_name + ' += ', node)
         node.value.accept(self)
 
     def visit_ForeachClauseNode(self, node: mparser.ForeachClauseNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         varnames = [x for x in node.varnames]
         self.append_padded('foreach', node)
         self.append_padded(', '.join(varnames), node)
@@ -155,6 +179,7 @@
         self.append('endforeach', node)
 
     def visit_IfClauseNode(self, node: mparser.IfClauseNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         prefix = ''
         for i in node.ifs:
             self.append_padded(prefix + 'if', node)
@@ -166,15 +191,18 @@
         self.append('endif', node)
 
     def visit_UMinusNode(self, node: mparser.UMinusNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         self.append_padded('-', node)
         node.value.accept(self)
 
     def visit_IfNode(self, node: mparser.IfNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         node.condition.accept(self)
         self.newline()
         node.block.accept(self)
 
     def visit_TernaryNode(self, node: mparser.TernaryNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         node.condition.accept(self)
         self.append_padded('?', node)
         node.trueblock.accept(self)
@@ -182,6 +210,7 @@
         node.falseblock.accept(self)
 
     def visit_ArgumentNode(self, node: mparser.ArgumentNode) -> None:
+        node.lineno = self.curr_line or node.lineno
         break_args = (len(node.arguments) + len(node.kwargs)) > 
self.arg_newline_cutoff
         for i in node.arguments + list(node.kwargs.values()):
             if not isinstance(i, (mparser.ElementaryNode, mparser.IndexNode)):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/build.py 
new/meson-0.62.2/mesonbuild/build.py
--- old/meson-0.62.1/mesonbuild/build.py        2022-04-23 11:53:34.000000000 
+0200
+++ new/meson-0.62.2/mesonbuild/build.py        2022-06-02 18:17:06.000000000 
+0200
@@ -1275,7 +1275,7 @@
         if self.gnu_symbol_visibility != '':
             permitted = ['default', 'internal', 'hidden', 'protected', 
'inlineshidden']
             if self.gnu_symbol_visibility not in permitted:
-                raise InvalidArguments('GNU symbol visibility arg {} not one 
of: {}'.format(self.symbol_visibility, ', '.join(permitted)))
+                raise InvalidArguments('GNU symbol visibility arg {} not one 
of: {}'.format(self.gnu_symbol_visibility, ', '.join(permitted)))
 
     def validate_win_subsystem(self, value: str) -> str:
         value = value.lower()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/cmake/interpreter.py 
new/meson-0.62.2/mesonbuild/cmake/interpreter.py
--- old/meson-0.62.1/mesonbuild/cmake/interpreter.py    2022-04-20 
17:32:31.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/cmake/interpreter.py    2022-06-02 
18:17:06.000000000 +0200
@@ -714,7 +714,7 @@
             # targets, etc. This reduces the chance of misdetecting input files
             # as outputs from other targets.
             # See https://github.com/mesonbuild/meson/issues/6632
-            if not raw.is_absolute() and (self.current_src_dir / raw).exists():
+            if not raw.is_absolute() and (self.current_src_dir / 
raw).is_file():
                 self.inputs += [(self.current_src_dir / 
raw).relative_to(root_src_dir).as_posix()]
             elif raw.is_absolute() and raw.exists() and rel_to_root is not 
None:
                 self.inputs += [rel_to_root.as_posix()]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/compilers/mixins/ti.py 
new/meson-0.62.2/mesonbuild/compilers/mixins/ti.py
--- old/meson-0.62.1/mesonbuild/compilers/mixins/ti.py  2022-04-20 
17:32:16.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/compilers/mixins/ti.py  2022-06-02 
18:17:06.000000000 +0200
@@ -44,7 +44,7 @@
     '1': ['-O1'],
     '2': ['-O2'],
     '3': ['-O3'],
-    's': ['-04']
+    's': ['-O4']
 }  # type: T.Dict[str, T.List[str]]
 
 ti_debug_args = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/meson-0.62.1/mesonbuild/compilers/mixins/visualstudio.py 
new/meson-0.62.2/mesonbuild/compilers/mixins/visualstudio.py
--- old/meson-0.62.1/mesonbuild/compilers/mixins/visualstudio.py        
2022-04-23 11:53:34.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/compilers/mixins/visualstudio.py        
2022-06-02 18:17:06.000000000 +0200
@@ -130,6 +130,10 @@
             self.machine = target
         if mesonlib.version_compare(self.version, '>=19.28.29910'): # VS 
16.9.0 includes cl 19.28.29910
             self.base_options.add(mesonlib.OptionKey('b_sanitize'))
+        # Exclude /utf-8 in self.always_args in VS2013 and earlier
+        if not isinstance(self, ClangClCompiler):
+            if mesonlib.version_compare(self.version, '<19.00'):
+                self.always_args.remove('/utf-8')
         assert self.linker is not None
         self.linker.machine = self.machine
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/coredata.py 
new/meson-0.62.2/mesonbuild/coredata.py
--- old/meson-0.62.1/mesonbuild/coredata.py     2022-04-23 11:53:34.000000000 
+0200
+++ new/meson-0.62.2/mesonbuild/coredata.py     2022-06-02 18:17:06.000000000 
+0200
@@ -51,7 +51,7 @@
 #
 # Pip requires that RCs are named like this: '0.1.0.rc1'
 # But the corresponding Git tag needs to be '0.1.0rc1'
-version = '0.62.1'
+version = '0.62.2'
 
 backendlist = ['ninja', 'vs', 'vs2010', 'vs2012', 'vs2013', 'vs2015', 
'vs2017', 'vs2019', 'vs2022', 'xcode']
 
@@ -1205,7 +1205,7 @@
     (OptionKey('backend'),         BuiltinOption(UserComboOption, 'Backend to 
use', 'ninja', choices=backendlist)),
     (OptionKey('buildtype'),       BuiltinOption(UserComboOption, 'Build type 
to use', 'debug',
                                                  choices=['plain', 'debug', 
'debugoptimized', 'release', 'minsize', 'custom'])),
-    (OptionKey('debug'),           BuiltinOption(UserBooleanOption, 'Debug', 
True)),
+    (OptionKey('debug'),           BuiltinOption(UserBooleanOption, 'Enable 
debug symbols and other information', True)),
     (OptionKey('default_library'), BuiltinOption(UserComboOption, 'Default 
library type', 'shared', choices=['shared', 'static', 'both'],
                                                  yielding=False)),
     (OptionKey('errorlogs'),       BuiltinOption(UserBooleanOption, "Whether 
to print the logs from failing tests", True)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/dependencies/base.py 
new/meson-0.62.2/mesonbuild/dependencies/base.py
--- old/meson-0.62.1/mesonbuild/dependencies/base.py    2022-04-20 
17:32:16.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/dependencies/base.py    2022-06-02 
18:17:06.000000000 +0200
@@ -216,7 +216,7 @@
     def get_variable(self, *, cmake: T.Optional[str] = None, pkgconfig: 
T.Optional[str] = None,
                      configtool: T.Optional[str] = None, internal: 
T.Optional[str] = None,
                      default_value: T.Optional[str] = None,
-                     pkgconfig_define: T.Optional[T.List[str]] = None) -> 
T.Union[str, T.List[str]]:
+                     pkgconfig_define: T.Optional[T.List[str]] = None) -> str:
         if default_value is not None:
             return default_value
         raise DependencyException(f'No default provided for dependency 
{self!r}, which is not pkg-config, cmake, or config-tool based.')
@@ -232,7 +232,7 @@
                  libraries: T.List[T.Union['BuildTarget', 'CustomTarget']],
                  whole_libraries: T.List[T.Union['BuildTarget', 
'CustomTarget']],
                  sources: T.Sequence[T.Union['FileOrString', 'CustomTarget', 
StructuredSources]],
-                 ext_deps: T.List[Dependency], variables: T.Dict[str, T.Any],
+                 ext_deps: T.List[Dependency], variables: T.Dict[str, str],
                  d_module_versions: T.List[str], d_import_dirs: 
T.List['IncludeDirs']):
         super().__init__(DependencyTypeName('internal'), {})
         self.version = version
@@ -301,16 +301,10 @@
     def get_variable(self, *, cmake: T.Optional[str] = None, pkgconfig: 
T.Optional[str] = None,
                      configtool: T.Optional[str] = None, internal: 
T.Optional[str] = None,
                      default_value: T.Optional[str] = None,
-                     pkgconfig_define: T.Optional[T.List[str]] = None) -> 
T.Union[str, T.List[str]]:
+                     pkgconfig_define: T.Optional[T.List[str]] = None) -> str:
         val = self.variables.get(internal, default_value)
         if val is not None:
-            # TODO: Try removing this assert by better typing self.variables
-            if isinstance(val, str):
-                return val
-            if isinstance(val, list):
-                for i in val:
-                    assert isinstance(i, str)
-                return val
+            return val
         raise DependencyException(f'Could not get an internal variable and no 
default provided for {self!r}')
 
     def generate_link_whole_dependency(self) -> Dependency:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/dependencies/cmake.py 
new/meson-0.62.2/mesonbuild/dependencies/cmake.py
--- old/meson-0.62.1/mesonbuild/dependencies/cmake.py   2022-04-20 
17:32:31.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/dependencies/cmake.py   2022-06-02 
18:17:06.000000000 +0200
@@ -627,17 +627,23 @@
     def get_variable(self, *, cmake: T.Optional[str] = None, pkgconfig: 
T.Optional[str] = None,
                      configtool: T.Optional[str] = None, internal: 
T.Optional[str] = None,
                      default_value: T.Optional[str] = None,
-                     pkgconfig_define: T.Optional[T.List[str]] = None) -> 
T.Union[str, T.List[str]]:
+                     pkgconfig_define: T.Optional[T.List[str]] = None) -> str:
         if cmake and self.traceparser is not None:
             try:
                 v = self.traceparser.vars[cmake]
             except KeyError:
                 pass
             else:
-                if len(v) == 1:
-                    return v[0]
-                elif v:
-                    return v
+                # CMake does NOT have a list datatype. We have no idea whether
+                # anything is a string or a string-separated-by-; Internally,
+                # we treat them as the latter and represent everything as a
+                # list, because it is convenient when we are mostly handling
+                # imported targets, which have various properties that are
+                # actually lists.
+                #
+                # As a result we need to convert them back to strings when 
grabbing
+                # raw variables the user requested.
+                return ';'.join(v)
         if default_value is not None:
             return default_value
         raise DependencyException(f'Could not get cmake variable and no 
default provided for {self!r}')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/dependencies/configtool.py 
new/meson-0.62.2/mesonbuild/dependencies/configtool.py
--- old/meson-0.62.1/mesonbuild/dependencies/configtool.py      2021-11-02 
20:58:07.000000000 +0100
+++ new/meson-0.62.2/mesonbuild/dependencies/configtool.py      2022-06-02 
18:17:06.000000000 +0200
@@ -155,7 +155,7 @@
     def get_variable(self, *, cmake: T.Optional[str] = None, pkgconfig: 
T.Optional[str] = None,
                      configtool: T.Optional[str] = None, internal: 
T.Optional[str] = None,
                      default_value: T.Optional[str] = None,
-                     pkgconfig_define: T.Optional[T.List[str]] = None) -> 
T.Union[str, T.List[str]]:
+                     pkgconfig_define: T.Optional[T.List[str]] = None) -> str:
         if configtool:
             # In the not required case '' (empty string) will be returned if 
the
             # variable is not found. Since '' is a valid value to return we
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/dependencies/dev.py 
new/meson-0.62.2/mesonbuild/dependencies/dev.py
--- old/meson-0.62.1/mesonbuild/dependencies/dev.py     2022-04-23 
11:53:34.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/dependencies/dev.py     2022-06-02 
18:17:06.000000000 +0200
@@ -30,7 +30,7 @@
 from ..compilers import AppleClangCCompiler, AppleClangCPPCompiler, 
detect_compiler_for
 from ..environment import get_llvm_tool_names
 from ..mesonlib import version_compare, stringlistify, extract_as_list, 
MachineChoice
-from .base import DependencyException, DependencyMethods, 
strip_system_libdirs, SystemDependency
+from .base import DependencyException, DependencyMethods, 
strip_system_libdirs, SystemDependency, ExternalDependency, DependencyTypeName
 from .cmake import CMakeDependency
 from .configtool import ConfigToolDependency
 from .factory import DependencyFactory
@@ -410,7 +410,14 @@
         else:
             compilers = env.coredata.compilers.host
         if not compilers or not all(x in compilers for x in ('c', 'cpp')):
-            self.is_found = False
+            # Initialize basic variables
+            ExternalDependency.__init__(self, DependencyTypeName('cmake'), 
env, kwargs)
+
+            # Initialize CMake specific variables
+            self.found_modules: T.List[str] = []
+            self.name = name
+
+            # Warn and return
             mlog.warning('The LLVM dependency was not found via CMake since 
both a C and C++ compiler are required.')
             return
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/dependencies/pkgconfig.py 
new/meson-0.62.2/mesonbuild/dependencies/pkgconfig.py
--- old/meson-0.62.1/mesonbuild/dependencies/pkgconfig.py       2022-04-20 
17:32:16.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/dependencies/pkgconfig.py       2022-06-02 
18:17:06.000000000 +0200
@@ -478,7 +478,7 @@
     def get_variable(self, *, cmake: T.Optional[str] = None, pkgconfig: 
T.Optional[str] = None,
                      configtool: T.Optional[str] = None, internal: 
T.Optional[str] = None,
                      default_value: T.Optional[str] = None,
-                     pkgconfig_define: T.Optional[T.List[str]] = None) -> 
T.Union[str, T.List[str]]:
+                     pkgconfig_define: T.Optional[T.List[str]] = None) -> str:
         if pkgconfig:
             try:
                 return self.get_pkgconfig_variable(pkgconfig, pkgconfig_define 
or [], default_value)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/interpreter/interpreter.py 
new/meson-0.62.2/mesonbuild/interpreter/interpreter.py
--- old/meson-0.62.1/mesonbuild/interpreter/interpreter.py      2022-04-23 
11:53:34.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/interpreter/interpreter.py      2022-06-02 
18:17:06.000000000 +0200
@@ -416,6 +416,7 @@
             bool: P_OBJ.BooleanHolder,
             str: P_OBJ.StringHolder,
             P_OBJ.MesonVersionString: P_OBJ.MesonVersionStringHolder,
+            P_OBJ.DependencyVariableString: 
P_OBJ.DependencyVariableStringHolder,
 
             # Meson types
             mesonlib.File: OBJ.FileHolder,
@@ -665,6 +666,18 @@
         d_module_versions = extract_as_list(kwargs, 'd_module_versions')
         d_import_dirs = self.extract_incdirs(kwargs, 'd_import_dirs')
         final_deps = []
+        srcdir = Path(self.environment.source_dir)
+        # convert variables which refer to an -uninstalled.pc style datadir
+        for k, v in variables.items():
+            try:
+                p = Path(v)
+            except ValueError:
+                continue
+            else:
+                if not self.is_subproject() and srcdir / self.subproject_dir 
in p.parents:
+                    continue
+                if p.is_absolute() and p.is_dir() and srcdir / 
self.root_subdir in p.resolve().parents:
+                    variables[k] = P_OBJ.DependencyVariableString(v)
         for d in deps:
             if not isinstance(d, (dependencies.Dependency, 
dependencies.ExternalLibrary, dependencies.InternalDependency)):
                 raise InterpreterException('Dependencies must be external 
deps')
@@ -743,7 +756,12 @@
                           'configuration')
         expanded_args: T.List[str] = []
         if isinstance(cmd, build.Executable):
-            progname = node.args.arguments[0].value
+            for name, exe in self.build.find_overrides.items():
+                if cmd == exe:
+                    progname = name
+                    break
+            else:
+                raise MesonBugException('cmd was a built executable but not 
found in overrides table')
             raise InterpreterException(overridden_msg.format(progname, 
cmd.description()))
         if isinstance(cmd, ExternalProgram):
             if not cmd.found():
@@ -971,7 +989,7 @@
 
                 # Debug print the generated meson file
                 from ..ast import AstIndentationGenerator, AstPrinter
-                printer = AstPrinter()
+                printer = AstPrinter(update_ast_line_nos=True)
                 ast.accept(AstIndentationGenerator())
                 ast.accept(printer)
                 printer.post_process()
@@ -2694,7 +2712,13 @@
     @typed_pos_args('join_paths', varargs=str, min_varargs=1)
     @noKwargs
     def func_join_paths(self, node: mparser.BaseNode, args: 
T.Tuple[T.List[str]], kwargs: 'TYPE_kwargs') -> str:
-        return os.path.join(*args[0]).replace('\\', '/')
+        parts = args[0]
+        other = os.path.join('', *parts[1:]).replace('\\', '/')
+        ret = os.path.join(*parts).replace('\\', '/')
+        if isinstance(parts[0], P_OBJ.DependencyVariableString) and '..' not 
in other:
+            return P_OBJ.DependencyVariableString(ret)
+        else:
+            return ret
 
     def run(self) -> None:
         super().run()
@@ -2737,7 +2761,27 @@
     # declare_dependency).
     def validate_within_subproject(self, subdir, fname):
         srcdir = Path(self.environment.source_dir)
-        norm = Path(srcdir, subdir, fname).resolve()
+        builddir = Path(self.environment.build_dir)
+        if isinstance(fname, P_OBJ.DependencyVariableString):
+            def validate_installable_file(fpath: Path) -> bool:
+                installablefiles: T.Set[Path] = set()
+                for d in self.build.data:
+                    for s in d.sources:
+                        installablefiles.add(Path(s.absolute_path(srcdir, 
builddir)))
+                installabledirs = [str(Path(srcdir, s.source_subdir)) for s in 
self.build.install_dirs]
+                if fpath in installablefiles:
+                    return True
+                for d in installabledirs:
+                    if str(fpath).startswith(d):
+                        return True
+                return False
+
+            norm = Path(fname)
+            # variables built from a dep.get_variable are allowed to refer to
+            # subproject files, as long as they are scheduled to be installed.
+            if validate_installable_file(norm):
+                return
+        norm = Path(os.path.abspath(Path(srcdir, subdir, fname)))
         if os.path.isdir(norm):
             inputtype = 'directory'
         else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/meson-0.62.1/mesonbuild/interpreter/interpreterobjects.py 
new/meson-0.62.2/mesonbuild/interpreter/interpreterobjects.py
--- old/meson-0.62.1/mesonbuild/interpreter/interpreterobjects.py       
2022-04-23 11:53:34.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/interpreter/interpreterobjects.py       
2022-06-02 18:17:06.000000000 +0200
@@ -88,7 +88,8 @@
         super().__init__(option, interpreter)
         if option and option.is_auto():
             # TODO: we need to case here because options is not a TypedDict
-            self.held_object = T.cast('coredata.UserFeatureOption', 
self.env.coredata.options[OptionKey('auto_features')])
+            auto = T.cast('coredata.UserFeatureOption', 
self.env.coredata.options[OptionKey('auto_features')])
+            self.held_object = copy.copy(auto)
             self.held_object.name = option.name
         self.methods.update({'enabled': self.enabled_method,
                              'disabled': self.disabled_method,
@@ -479,7 +480,7 @@
         KwargInfo('default_value', (str, NoneType)),
         KwargInfo('pkgconfig_define', ContainerTypeInfo(list, str, 
pairs=True), default=[], listify=True),
     )
-    def variable_method(self, args: T.Tuple[T.Optional[str]], kwargs: 
'kwargs.DependencyGetVariable') -> T.Union[str, T.List[str]]:
+    def variable_method(self, args: T.Tuple[T.Optional[str]], kwargs: 
'kwargs.DependencyGetVariable') -> str:
         default_varname = args[0]
         if default_varname is not None:
             FeatureNew('Positional argument to dependency.get_variable()', 
'0.58.0').use(self.subproject, self.current_node)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/interpreter/kwargs.py 
new/meson-0.62.2/mesonbuild/interpreter/kwargs.py
--- old/meson-0.62.1/mesonbuild/interpreter/kwargs.py   2022-04-20 
17:32:16.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/interpreter/kwargs.py   2022-06-02 
18:17:06.000000000 +0200
@@ -183,7 +183,7 @@
     input: T.List[T.Union[str, build.BuildTarget, build.CustomTarget, 
build.CustomTargetIndex,
                           build.ExtractedObjects, build.GeneratedList, 
ExternalProgram, File]]
     install: bool
-    install_dir: T.List[T.Union[str, bool]]
+    install_dir: T.List[T.Union[str, T.Literal[False]]]
     install_mode: FileMode
     install_tag: T.List[T.Optional[str]]
     output: T.List[str]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/meson-0.62.1/mesonbuild/interpreter/primitives/__init__.py 
new/meson-0.62.2/mesonbuild/interpreter/primitives/__init__.py
--- old/meson-0.62.1/mesonbuild/interpreter/primitives/__init__.py      
2022-04-21 16:30:19.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/interpreter/primitives/__init__.py      
2022-06-02 18:17:06.000000000 +0200
@@ -10,6 +10,8 @@
     'StringHolder',
     'MesonVersionString',
     'MesonVersionStringHolder',
+    'DependencyVariableString',
+    'DependencyVariableStringHolder',
 ]
 
 from .array import ArrayHolder
@@ -17,4 +19,8 @@
 from .dict import DictHolder
 from .integer import IntegerHolder
 from .range import RangeHolder
-from .string import StringHolder, MesonVersionString, MesonVersionStringHolder
+from .string import (
+    StringHolder,
+    MesonVersionString, MesonVersionStringHolder,
+    DependencyVariableString, DependencyVariableStringHolder
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/meson-0.62.1/mesonbuild/interpreter/primitives/string.py 
new/meson-0.62.2/mesonbuild/interpreter/primitives/string.py
--- old/meson-0.62.1/mesonbuild/interpreter/primitives/string.py        
2022-04-20 17:32:16.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/interpreter/primitives/string.py        
2022-06-02 18:17:06.000000000 +0200
@@ -179,3 +179,18 @@
     def version_compare_method(self, args: T.Tuple[str], kwargs: TYPE_kwargs) 
-> bool:
         self.interpreter.tmp_meson_version = args[0]
         return version_compare(self.held_object, args[0])
+
+# These special subclasses of string exist to cover the case where a dependency
+# exports a string variable interchangeable with a system dependency. This
+# matters because a dependency can only have string-type get_variable() return
+# values. If at any time dependencies start supporting additional variable
+# types, this class could be deprecated.
+class DependencyVariableString(str):
+    pass
+
+class DependencyVariableStringHolder(StringHolder):
+    def op_div(self, other: str) -> T.Union[str, DependencyVariableString]:
+        ret = super().op_div(other)
+        if '..' in other:
+            return ret
+        return DependencyVariableString(ret)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/interpreter/type_checking.py 
new/meson-0.62.2/mesonbuild/interpreter/type_checking.py
--- old/meson-0.62.1/mesonbuild/interpreter/type_checking.py    2022-04-20 
17:32:16.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/interpreter/type_checking.py    2022-06-02 
18:17:06.000000000 +0200
@@ -297,11 +297,12 @@
 
 INSTALL_KW = KwargInfo('install', bool, default=False)
 
-CT_INSTALL_DIR_KW: KwargInfo[T.List[T.Union[str, bool]]] = KwargInfo(
+CT_INSTALL_DIR_KW: KwargInfo[T.List[T.Union[str, Literal[False]]]] = KwargInfo(
     'install_dir',
     ContainerTypeInfo(list, (str, bool)),
     listify=True,
     default=[],
+    validator=lambda x: 'must be `false` if boolean' if True in x else None,
 )
 
 CT_BUILD_BY_DEFAULT: KwargInfo[T.Optional[bool]] = 
KwargInfo('build_by_default', (bool, type(None)), since='0.40.0')
@@ -336,4 +337,4 @@
 ENV_METHOD_KW = KwargInfo('method', str, default='set', since='0.62.0',
     validator=in_set_validator({'set', 'prepend', 'append'}))
 
-ENV_SEPARATOR_KW = KwargInfo('separator', str, default=os.pathsep, 
since='0.62.0')
+ENV_SEPARATOR_KW = KwargInfo('separator', str, default=os.pathsep)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/linkers/linkers.py 
new/meson-0.62.2/mesonbuild/linkers/linkers.py
--- old/meson-0.62.1/mesonbuild/linkers/linkers.py      2022-04-20 
17:32:16.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/linkers/linkers.py      2022-06-02 
18:17:06.000000000 +0200
@@ -823,7 +823,8 @@
 
         # Some targets don't seem to support this argument (windows, wasm, ...)
         _, _, e = mesonlib.Popen_safe(self.exelist + 
self._apply_prefix('--allow-shlib-undefined'))
-        self.has_allow_shlib_undefined = 'unknown argument: 
--allow-shlib-undefined' not in e
+        # Versions < 9 do not have a quoted argument
+        self.has_allow_shlib_undefined = ('unknown argument: 
--allow-shlib-undefined' not in e) and ("unknown argument: 
'--allow-shlib-undefined'" not in e)
 
     def get_allow_undefined_args(self) -> T.List[str]:
         if self.has_allow_shlib_undefined:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/mdevenv.py 
new/meson-0.62.2/mesonbuild/mdevenv.py
--- old/meson-0.62.1/mesonbuild/mdevenv.py      2022-04-20 17:32:16.000000000 
+0200
+++ new/meson-0.62.2/mesonbuild/mdevenv.py      2022-06-02 18:17:06.000000000 
+0200
@@ -165,3 +165,5 @@
                                cwd=options.wd)
     except subprocess.CalledProcessError as e:
         return e.returncode
+    except FileNotFoundError:
+        raise MesonException(f'Command not found: {args[0]}')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/modules/i18n.py 
new/meson-0.62.2/mesonbuild/modules/i18n.py
--- old/meson-0.62.1/mesonbuild/modules/i18n.py 2022-04-23 11:53:34.000000000 
+0200
+++ new/meson-0.62.2/mesonbuild/modules/i18n.py 2022-06-02 18:17:06.000000000 
+0200
@@ -141,10 +141,6 @@
         }
 
     @staticmethod
-    def nogettext_warning(location: BaseNode) -> None:
-        mlog.warning('Gettext not found, all translation targets will be 
ignored.', once=True, location=location)
-
-    @staticmethod
     def _get_data_dirs(state: 'ModuleState', dirs: T.Iterable[str]) -> 
T.List[str]:
         """Returns source directories of relative paths"""
         src_dir = path.join(state.environment.get_source_dir(), state.subdir)
@@ -166,7 +162,7 @@
         KwargInfo('type', str, default='xml', 
validator=in_set_validator({'xml', 'desktop'})),
     )
     def merge_file(self, state: 'ModuleState', args: T.List['TYPE_var'], 
kwargs: 'MergeFile') -> ModuleReturnValue:
-        if self.tools['msgfmt'] is None:
+        if self.tools['msgfmt'] is None or not self.tools['msgfmt'].found():
             self.tools['msgfmt'] = state.find_program('msgfmt', 
for_machine=mesonlib.MachineChoice.BUILD)
         podir = path.join(state.build_to_src, state.subdir, kwargs['po_dir'])
 
@@ -222,13 +218,18 @@
         ),
     )
     def gettext(self, state: 'ModuleState', args: T.Tuple[str], kwargs: 
'Gettext') -> ModuleReturnValue:
-        for tool in ['msgfmt', 'msginit', 'msgmerge', 'xgettext']:
+        for tool, strict in [('msgfmt', True), ('msginit', False), 
('msgmerge', False), ('xgettext', False)]:
             if self.tools[tool] is None:
                 self.tools[tool] = state.find_program(tool, required=False, 
for_machine=mesonlib.MachineChoice.BUILD)
             # still not found?
             if not self.tools[tool].found():
-                self.nogettext_warning(state.current_node)
-                return ModuleReturnValue(None, [])
+                if strict:
+                    mlog.warning('Gettext not found, all translation (po) 
targets will be ignored.',
+                                 once=True, location=state.current_node)
+                    return ModuleReturnValue(None, [])
+                else:
+                    mlog.warning(f'{tool!r} not found, maintainer targets will 
not work',
+                                 once=True, fatal=False, 
location=state.current_node)
         packagename = args[0]
         pkg_arg = f'--pkgname={packagename}'
 
@@ -254,7 +255,8 @@
             potargs.append(datadirs)
         if extra_arg:
             potargs.append(extra_arg)
-        potargs.append('--xgettext=' + self.tools['xgettext'].get_path())
+        if self.tools['xgettext'].found():
+            potargs.append('--xgettext=' + self.tools['xgettext'].get_path())
         pottarget = build.RunTarget(packagename + '-pot', potargs, [], 
state.subdir, state.subproject)
         targets.append(pottarget)
 
@@ -295,7 +297,8 @@
         if extra_arg:
             updatepoargs.append(extra_arg)
         for tool in ['msginit', 'msgmerge']:
-            updatepoargs.append(f'--{tool}=' + self.tools[tool].get_path())
+            if self.tools[tool].found():
+                updatepoargs.append(f'--{tool}=' + self.tools[tool].get_path())
         updatepotarget = build.RunTarget(packagename + '-update-po', 
updatepoargs, [], state.subdir, state.subproject)
         targets.append(updatepotarget)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/modules/qt.py 
new/meson-0.62.2/mesonbuild/modules/qt.py
--- old/meson-0.62.1/mesonbuild/modules/qt.py   2022-04-23 11:53:34.000000000 
+0200
+++ new/meson-0.62.2/mesonbuild/modules/qt.py   2022-06-02 18:17:06.000000000 
+0200
@@ -541,7 +541,8 @@
         if any(isinstance(s, (build.CustomTarget, build.CustomTargetIndex, 
build.GeneratedList)) for s in ts_files):
             FeatureNew.single_use('qt.compile_translations: custom_target or 
generator for "ts_files" keyword argument',
                                   '0.60.0', state.subproject, 
location=state.current_node)
-        install_dir = kwargs['install_dir']
+        if kwargs['install'] and not kwargs['install_dir']:
+            raise MesonException('qt.compile_translations: "install_dir" 
keyword argument must be set when "install" is true.')
         qresource = kwargs['qresource']
         if qresource:
             if ts_files:
@@ -587,7 +588,7 @@
                 [ts],
                 ['@BASENAME@.qm'],
                 install=kwargs['install'],
-                install_dir=install_dir,
+                install_dir=[kwargs['install_dir']],
                 install_tag=['i18n'],
                 build_by_default=kwargs['build_by_default'],
             )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/mtest.py 
new/meson-0.62.2/mesonbuild/mtest.py
--- old/meson-0.62.1/mesonbuild/mtest.py        2022-04-20 17:32:16.000000000 
+0200
+++ new/meson-0.62.2/mesonbuild/mtest.py        2022-06-02 18:17:06.000000000 
+0200
@@ -1806,7 +1806,7 @@
     def get_wrapper(options: argparse.Namespace) -> T.List[str]:
         wrap = []  # type: T.List[str]
         if options.gdb:
-            wrap = [options.gdb_path, '--quiet', '--nh']
+            wrap = [options.gdb_path, '--quiet']
             if options.repeat > 1:
                 wrap += ['-ex', 'run', '-ex', 'quit']
             # Signal the end of arguments to gdb
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/mesonbuild/scripts/env2mfile.py 
new/meson-0.62.2/mesonbuild/scripts/env2mfile.py
--- old/meson-0.62.1/mesonbuild/scripts/env2mfile.py    2022-04-20 
17:32:16.000000000 +0200
+++ new/meson-0.62.2/mesonbuild/scripts/env2mfile.py    2022-06-02 
18:17:06.000000000 +0200
@@ -197,7 +197,7 @@
     host_endian = data['DEB_HOST_ARCH_ENDIAN']
 
     compilerstems = [('c', 'gcc'),
-                     ('cpp', 'h++'),
+                     ('cpp', 'g++'),
                      ('objc', 'gobjc'),
                      ('objcpp', 'gobjc++')]
     infos = MachineInfo()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/run_project_tests.py 
new/meson-0.62.2/run_project_tests.py
--- old/meson-0.62.1/run_project_tests.py       2022-04-23 11:53:34.000000000 
+0200
+++ new/meson-0.62.2/run_project_tests.py       2022-06-02 18:17:06.000000000 
+0200
@@ -1198,7 +1198,7 @@
     print(f'\nRunning tests with {num_workers} workers')
 
     # Pack the global state
-    state = (compile_commands, clean_commands, test_commands, 
install_commands, uninstall_commands, backend, backend_flags, host_c_compiler)
+    state = GlobalState(compile_commands, clean_commands, test_commands, 
install_commands, uninstall_commands, backend, backend_flags, host_c_compiler)
     executor = ProcessPoolExecutor(max_workers=num_workers)
 
     futures: T.List[RunFutureUnion] = []
@@ -1541,10 +1541,15 @@
         # This fails in some CI environments for unknown reasons.
         num_workers = multiprocessing.cpu_count()
     except Exception as e:
-        print('Could not determine number of CPUs due to the following 
reason:' + str(e))
+        print('Could not determine number of CPUs due to the following 
reason:', str(e))
         print('Defaulting to using only two processes')
         num_workers = 2
 
+    if num_workers > 64:
+        # Too much parallelism seems to trigger a potential Python bug:
+        # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1004107
+        num_workers = 64
+
     parser = argparse.ArgumentParser(description="Run the test suite of 
Meson.")
     parser.add_argument('extra_args', nargs='*',
                         help='arguments that are passed directly to Meson 
(remember to have -- before these).')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/cmake/8 custom 
command/subprojects/cmMod/CMakeLists.txt" "new/meson-0.62.2/test cases/cmake/8 
custom command/subprojects/cmMod/CMakeLists.txt"
--- "old/meson-0.62.1/test cases/cmake/8 custom 
command/subprojects/cmMod/CMakeLists.txt"       2021-04-01 23:12:21.000000000 
+0200
+++ "new/meson-0.62.2/test cases/cmake/8 custom 
command/subprojects/cmMod/CMakeLists.txt"       2022-06-02 18:17:06.000000000 
+0200
@@ -157,3 +157,7 @@
 
 add_dependencies(cmModLib args_test_cmd tgtCpyTest4)
 add_dependencies(args_test_cmd macro_name_cmd;gen;mycpy)
+
+# Reproduce https://github.com/mesonbuild/meson/issues/10244
+add_custom_target(mycpy.all)
+add_dependencies(mycpy.all mycpy)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/cmake/8 custom 
command/subprojects/cmMod/mycpy/.gitkeep" "new/meson-0.62.2/test cases/cmake/8 
custom command/subprojects/cmMod/mycpy/.gitkeep"
--- "old/meson-0.62.1/test cases/cmake/8 custom 
command/subprojects/cmMod/mycpy/.gitkeep"       1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.62.2/test cases/cmake/8 custom 
command/subprojects/cmMod/mycpy/.gitkeep"       2022-06-02 18:17:06.000000000 
+0200
@@ -0,0 +1 @@
+# Required to reproduce https://github.com/mesonbuild/meson/issues/10244
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/common/251 subproject 
dependency variables/meson.build" "new/meson-0.62.2/test cases/common/251 
subproject dependency variables/meson.build"
--- "old/meson-0.62.1/test cases/common/251 subproject dependency 
variables/meson.build"        1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.62.2/test cases/common/251 subproject dependency 
variables/meson.build"        2022-06-02 18:17:06.000000000 +0200
@@ -0,0 +1,13 @@
+project('subproject dependency variables', 'c')
+
+subfiles_dep = subproject('subfiles').get_variable('files_dep')
+
+executable(
+    'foo',
+    join_paths(subfiles_dep.get_variable('pkgdatadir'), 'foo.c')
+)
+
+executable(
+    'foo2',
+    subfiles_dep.get_variable('pkgdatadir2') / 'foo.c'
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/common/251 subproject 
dependency variables/subprojects/subfiles/meson.build" "new/meson-0.62.2/test 
cases/common/251 subproject dependency 
variables/subprojects/subfiles/meson.build"
--- "old/meson-0.62.1/test cases/common/251 subproject dependency 
variables/subprojects/subfiles/meson.build"   1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.62.2/test cases/common/251 subproject dependency 
variables/subprojects/subfiles/meson.build"   2022-06-02 18:17:06.000000000 
+0200
@@ -0,0 +1,26 @@
+project('dependency variable resource')
+
+files_dep = declare_dependency(
+    variables: [
+      'pkgdatadir=@0@/subdir'.format(meson.current_source_dir()),
+      'pkgdatadir2=@0@/subdir2'.format(meson.current_source_dir()),
+    ]
+)
+
+install_data('subdir/foo.c', install_dir: get_option('datadir') / 'subdir')
+install_subdir('subdir2', install_dir: get_option('datadir'))
+
+import('pkgconfig').generate(
+    name: 'depvar_resource',
+    description: 'Get a resource file from pkgconfig or a subproject',
+    version: '0.1',
+    variables: [
+      'pkgdatadir=${datadir}/subdir',
+      'pkgdatadir2=${datadir}/subdir2',
+    ],
+    uninstalled_variables: [
+      'pkgdatadir=@0@/subdir'.format(meson.current_source_dir()),
+      'pkgdatadir2=@0@/subdir2'.format(meson.current_source_dir()),
+    ],
+    dataonly: true,
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/common/251 subproject 
dependency variables/subprojects/subfiles/subdir/foo.c" "new/meson-0.62.2/test 
cases/common/251 subproject dependency 
variables/subprojects/subfiles/subdir/foo.c"
--- "old/meson-0.62.1/test cases/common/251 subproject dependency 
variables/subprojects/subfiles/subdir/foo.c"  1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.62.2/test cases/common/251 subproject dependency 
variables/subprojects/subfiles/subdir/foo.c"  2022-06-02 18:17:06.000000000 
+0200
@@ -0,0 +1 @@
+int main(void) { return 0; }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/common/251 subproject 
dependency variables/subprojects/subfiles/subdir2/foo.c" "new/meson-0.62.2/test 
cases/common/251 subproject dependency 
variables/subprojects/subfiles/subdir2/foo.c"
--- "old/meson-0.62.1/test cases/common/251 subproject dependency 
variables/subprojects/subfiles/subdir2/foo.c" 1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.62.2/test cases/common/251 subproject dependency 
variables/subprojects/subfiles/subdir2/foo.c" 2022-06-02 18:17:06.000000000 
+0200
@@ -0,0 +1 @@
+int main(void) { return 0; }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/common/251 subproject 
dependency variables/test.json" "new/meson-0.62.2/test cases/common/251 
subproject dependency variables/test.json"
--- "old/meson-0.62.1/test cases/common/251 subproject dependency 
variables/test.json"  1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.62.2/test cases/common/251 subproject dependency 
variables/test.json"  2022-06-02 18:17:06.000000000 +0200
@@ -0,0 +1,7 @@
+{
+  "installed": [
+    { "type": "file",  "file": "usr/share/pkgconfig/depvar_resource.pc" },
+    { "type": "file",  "file": "usr/share/subdir/foo.c" },
+    { "type": "file",  "file": "usr/share/subdir2/foo.c" }
+  ]
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/failing/123 subproject 
sandbox violation/meson.build" "new/meson-0.62.2/test cases/failing/123 
subproject sandbox violation/meson.build"
--- "old/meson-0.62.1/test cases/failing/123 subproject sandbox 
violation/meson.build"  1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.62.2/test cases/failing/123 subproject sandbox 
violation/meson.build"  2022-06-02 18:17:06.000000000 +0200
@@ -0,0 +1,34 @@
+project('subproject-sandbox-violation')
+
+sub1_d = subproject('subproj1').get_variable('d')
+sub1_mustfail = sub1_d.get_variable('dir') / '..' / 'file.txt'
+
+sub2_d = subproject('subproj2').get_variable('d')
+sub2_mustfail = sub2_d.get_variable('dir') / 'file.txt'
+
+main_d = declare_dependency(
+    variables: [
+        'dir=@0@'.format(meson.current_source_dir()),
+    ]
+)
+main_mustfail = main_d.get_variable('dir') / 'subprojects/subproj3/file.txt'
+
+if get_option('failmode') == 'parent-dir'
+    mustfail = sub1_mustfail
+elif get_option('failmode') == 'not-installed'
+    mustfail = sub2_mustfail
+elif get_option('failmode') == 'root-subdir'
+    mustfail = main_mustfail
+endif
+
+custom_target(
+    'mustfail',
+    input: mustfail,
+    output: 'file.txt',
+    command: [
+        'python3', '-c',
+        'import os; shutil.copy(sys.argv[1], sys.argv[2])',
+        '@INPUT@',
+        '@OUTPUT@'
+    ],
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/failing/123 subproject 
sandbox violation/meson_options.txt" "new/meson-0.62.2/test cases/failing/123 
subproject sandbox violation/meson_options.txt"
--- "old/meson-0.62.1/test cases/failing/123 subproject sandbox 
violation/meson_options.txt"    1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.62.2/test cases/failing/123 subproject sandbox 
violation/meson_options.txt"    2022-06-02 18:17:06.000000000 +0200
@@ -0,0 +1 @@
+option('failmode', type: 'combo', choices: ['parent-dir', 'not-installed', 
'root-subdir'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/failing/123 subproject 
sandbox violation/subprojects/subproj1/meson.build" "new/meson-0.62.2/test 
cases/failing/123 subproject sandbox violation/subprojects/subproj1/meson.build"
--- "old/meson-0.62.1/test cases/failing/123 subproject sandbox 
violation/subprojects/subproj1/meson.build"     1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.62.2/test cases/failing/123 subproject sandbox 
violation/subprojects/subproj1/meson.build"     2022-06-02 18:17:06.000000000 
+0200
@@ -0,0 +1,4 @@
+project('subproj1')
+
+install_data('file.txt')
+subdir('nested')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/failing/123 subproject 
sandbox violation/subprojects/subproj1/nested/meson.build" 
"new/meson-0.62.2/test cases/failing/123 subproject sandbox 
violation/subprojects/subproj1/nested/meson.build"
--- "old/meson-0.62.1/test cases/failing/123 subproject sandbox 
violation/subprojects/subproj1/nested/meson.build"      1970-01-01 
01:00:00.000000000 +0100
+++ "new/meson-0.62.2/test cases/failing/123 subproject sandbox 
violation/subprojects/subproj1/nested/meson.build"      2022-06-02 
18:17:06.000000000 +0200
@@ -0,0 +1,5 @@
+d = declare_dependency(
+    variables: [
+        'dir=@0@'.format(meson.current_source_dir()),
+    ]
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/failing/123 subproject 
sandbox violation/subprojects/subproj2/meson.build" "new/meson-0.62.2/test 
cases/failing/123 subproject sandbox violation/subprojects/subproj2/meson.build"
--- "old/meson-0.62.1/test cases/failing/123 subproject sandbox 
violation/subprojects/subproj2/meson.build"     1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.62.2/test cases/failing/123 subproject sandbox 
violation/subprojects/subproj2/meson.build"     2022-06-02 18:17:06.000000000 
+0200
@@ -0,0 +1,7 @@
+project('subproj1')
+
+d = declare_dependency(
+    variables: [
+        'dir=@0@'.format(meson.current_source_dir()),
+    ]
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/failing/123 subproject 
sandbox violation/subprojects/subproj3/meson.build" "new/meson-0.62.2/test 
cases/failing/123 subproject sandbox violation/subprojects/subproj3/meson.build"
--- "old/meson-0.62.1/test cases/failing/123 subproject sandbox 
violation/subprojects/subproj3/meson.build"     1970-01-01 01:00:00.000000000 
+0100
+++ "new/meson-0.62.2/test cases/failing/123 subproject sandbox 
violation/subprojects/subproj3/meson.build"     2022-06-02 18:17:06.000000000 
+0200
@@ -0,0 +1,3 @@
+project('subproj2')
+
+install_data('file.txt')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/failing/123 subproject 
sandbox violation/test.json" "new/meson-0.62.2/test cases/failing/123 
subproject sandbox violation/test.json"
--- "old/meson-0.62.1/test cases/failing/123 subproject sandbox 
violation/test.json"    1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.62.2/test cases/failing/123 subproject sandbox 
violation/test.json"    2022-06-02 18:17:06.000000000 +0200
@@ -0,0 +1,16 @@
+{
+  "matrix": {
+    "options": {
+      "failmode": [
+        { "val": "not-installed" },
+        { "val": "parent-dir" },
+        { "val": "root-subdir" }
+      ]
+    }
+  },
+  "stdout": [
+    {
+      "line": "test cases/failing/123 subproject sandbox 
violation/meson.build:24:0: ERROR: Sandbox violation: Tried to grab file 
file.txt from a nested subproject."
+    }
+  ]
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/unit/106 subproject 
symlink/main.c" "new/meson-0.62.2/test cases/unit/106 subproject symlink/main.c"
--- "old/meson-0.62.1/test cases/unit/106 subproject symlink/main.c"    
1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.62.2/test cases/unit/106 subproject symlink/main.c"    
2022-06-02 18:17:06.000000000 +0200
@@ -0,0 +1,6 @@
+extern int foo(void);
+
+int main(void)
+{
+    return foo();
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/unit/106 subproject 
symlink/meson.build" "new/meson-0.62.2/test cases/unit/106 subproject 
symlink/meson.build"
--- "old/meson-0.62.1/test cases/unit/106 subproject symlink/meson.build"       
1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.62.2/test cases/unit/106 subproject symlink/meson.build"       
2022-06-02 18:17:06.000000000 +0200
@@ -0,0 +1,8 @@
+project('foo', 'c')
+
+symlinked_subproject = subproject('symlinked_subproject')
+
+executable('foo',
+    sources : 'main.c',
+    dependencies : symlinked_subproject.get_variable('dep')
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/unit/106 subproject 
symlink/symlinked_subproject/meson.build" "new/meson-0.62.2/test cases/unit/106 
subproject symlink/symlinked_subproject/meson.build"
--- "old/meson-0.62.1/test cases/unit/106 subproject 
symlink/symlinked_subproject/meson.build"  1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.62.2/test cases/unit/106 subproject 
symlink/symlinked_subproject/meson.build"  2022-06-02 18:17:06.000000000 +0200
@@ -0,0 +1,3 @@
+project('symlinked_subproject', 'c', version : '1.0.0')
+
+dep = declare_dependency(sources : 'src.c')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/unit/106 subproject 
symlink/symlinked_subproject/src.c" "new/meson-0.62.2/test cases/unit/106 
subproject symlink/symlinked_subproject/src.c"
--- "old/meson-0.62.1/test cases/unit/106 subproject 
symlink/symlinked_subproject/src.c"        1970-01-01 01:00:00.000000000 +0100
+++ "new/meson-0.62.2/test cases/unit/106 subproject 
symlink/symlinked_subproject/src.c"        2022-06-02 18:17:06.000000000 +0200
@@ -0,0 +1,4 @@
+int foo(void)
+{
+    return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' "old/meson-0.62.1/test cases/unit/64 cmake 
parser/meson.build" "new/meson-0.62.2/test cases/unit/64 cmake 
parser/meson.build"
--- "old/meson-0.62.1/test cases/unit/64 cmake parser/meson.build"      
2022-04-23 11:53:34.000000000 +0200
+++ "new/meson-0.62.2/test cases/unit/64 cmake parser/meson.build"      
2022-06-02 18:17:06.000000000 +0200
@@ -12,8 +12,8 @@
 assert(dep.get_variable(cmake : 'VAR_THAT_IS_UNSET', default_value : 
'sentinal') == 'sentinal', 'set() to unset is incorrect')
 assert(dep.get_variable(cmake : 'CACHED_STRING_NS') == 'foo', 'set(CACHED) 
without spaces is incorrect')
 assert(dep.get_variable(cmake : 'CACHED_STRING_WS') == 'foo bar', 'set(CACHED 
STRING) with spaces is incorrect')
-assert(dep.get_variable(cmake : 'CACHED_STRING_ARRAY_NS') == ['foo', 'bar'], 
'set(CACHED STRING) without spaces is incorrect')
-assert(dep.get_variable(cmake : 'CACHED_STRING_ARRAY_WS') == ['foo', 'foo 
bar', 'bar'], 'set(CACHED STRING[]) with spaces is incorrect')
+assert(dep.get_variable(cmake : 'CACHED_STRING_ARRAY_NS') == 'foo;bar', 
'set(CACHED STRING) without spaces is incorrect')
+assert(dep.get_variable(cmake : 'CACHED_STRING_ARRAY_WS') == 'foo;foo 
bar;bar', 'set(CACHED STRING[]) with spaces is incorrect')
 
 # We don't support this, so it should be unset.
-assert(dep.get_variable(cmake : 'ENV{var}', default_value : 'sentinal') == 
'sentinal', 'set(ENV) should be ignored')
\ No newline at end of file
+assert(dep.get_variable(cmake : 'ENV{var}', default_value : 'sentinal') == 
'sentinal', 'set(ENV) should be ignored')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/meson-0.62.1/unittests/allplatformstests.py 
new/meson-0.62.2/unittests/allplatformstests.py
--- old/meson-0.62.1/unittests/allplatformstests.py     2022-04-23 
11:53:34.000000000 +0200
+++ new/meson-0.62.2/unittests/allplatformstests.py     2022-06-02 
18:17:06.000000000 +0200
@@ -4202,3 +4202,16 @@
         if self.backend is Backend.ninja:
             self.assertIn('Generating file.txt with a custom command', out)
             self.assertIn('Generating subdir/file.txt with a custom command', 
out)
+
+    def test_symlinked_subproject(self):
+        testdir = os.path.join(self.unit_test_dir, '106 subproject symlink')
+        subproject_dir = os.path.join(testdir, 'subprojects')
+        subproject = os.path.join(testdir, 'symlinked_subproject')
+        symlinked_subproject = os.path.join(testdir, 'subprojects', 
'symlinked_subproject')
+        if not os.path.exists(subproject_dir):
+            os.mkdir(subproject_dir)
+        os.symlink(subproject, symlinked_subproject)
+        self.addCleanup(os.remove, symlinked_subproject)
+
+        self.init(testdir)
+        self.build()

Reply via email to