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()