Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package meson for openSUSE:Factory checked in at 2025-04-04 17:29:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/meson (Old) and /work/SRC/openSUSE:Factory/.meson.new.1907 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "meson" Fri Apr 4 17:29:19 2025 rev:124 rq:1266528 version:1.7.1 Changes: -------- --- /work/SRC/openSUSE:Factory/meson/meson.changes 2025-03-25 22:17:02.498124310 +0100 +++ /work/SRC/openSUSE:Factory/.meson.new.1907/meson.changes 2025-04-04 17:29:37.997321501 +0200 @@ -1,0 +2,11 @@ +Wed Apr 2 06:43:44 UTC 2025 - Dominique Leuenberger <dims...@opensuse.org> + +- Update to version 1.7.1: + + When subproject() fails because downloading is disabled, say + what failed. + + tests: work around broken PyPy globbing by removing inert code. + + get_llvm_tool_names: add llvm 20. + + linkers: revert a binutils bug workaround, sort of. +- Drop 14337.patch: fixed upstream. + +------------------------------------------------------------------- Old: ---- 14337.patch meson-1.7.0.tar.gz meson-1.7.0.tar.gz.asc New: ---- meson-1.7.1.tar.gz meson-1.7.1.tar.gz.asc BETA DEBUG BEGIN: Old: + linkers: revert a binutils bug workaround, sort of. - Drop 14337.patch: fixed upstream. BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ meson.spec ++++++ --- /var/tmp/diff_new_pack.VkbAKQ/_old 2025-04-04 17:29:40.397420459 +0200 +++ /var/tmp/diff_new_pack.VkbAKQ/_new 2025-04-04 17:29:40.421421449 +0200 @@ -35,7 +35,7 @@ %{!?vim_data_dir:%global vim_data_dir %{_datadir}/vim} %bcond_without mono Name: meson%{name_ext} -Version: 1.7.0 +Version: 1.7.1 Release: 0 Summary: Python-based build system License: Apache-2.0 @@ -50,8 +50,6 @@ Patch1: extend-test-timeout-on-qemu-builds.patch # PATCH-FEATURE-UPSTREAM -- based on https://github.com/mesonbuild/meson/pull/14001/commits Patch2: 14001.patch -# PATCH-FIX-UPSTREAM -- Support llvm 20 -Patch3: https://patch-diff.githubusercontent.com/raw/mesonbuild/meson/pull/14337.patch BuildRequires: %{python_module base >= 3.7} BuildRequires: %{python_module setuptools} ++++++ meson-1.7.0.tar.gz -> meson-1.7.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/PKG-INFO new/meson-1.7.1/PKG-INFO --- old/meson-1.7.0/PKG-INFO 2025-01-26 19:47:43.464328800 +0100 +++ new/meson-1.7.1/PKG-INFO 2025-04-01 22:14:25.026201000 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 2.1 +Metadata-Version: 2.2 Name: meson -Version: 1.7.0 +Version: 1.7.1 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-1.7.0/man/meson.1 new/meson-1.7.1/man/meson.1 --- old/meson-1.7.0/man/meson.1 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/man/meson.1 2025-04-01 22:14:23.000000000 +0200 @@ -1,4 +1,4 @@ -.TH MESON "1" "January 2025" "meson 1.7.0" "User Commands" +.TH MESON "1" "January 2025" "meson 1.7.1" "User Commands" .SH NAME meson - a high productivity build system .SH DESCRIPTION @@ -40,19 +40,6 @@ autodetect changes in your source tree and regenerate all files needed to build the project. -The setup command is the default operation. If no actual command is -specified, Meson will assume you meant to do a setup. That means -that you can set up a build directory without the setup command -like this: - -.B meson [ -.I options -.B ] [ -.I build directory -.B ] [ -.I source directory -.B ] - .SS "options:" .TP \fB\-\-version\fR @@ -655,6 +642,13 @@ \fB-o OUTPUT, --output OUTPUT\fR output file (implies having exactly one input) +.SH When no command is specified + +If you run Meson without a subcommand, it will assume you meant +\fBmeson setup\fR. However, this syntax is deprecated, and Meson +will print a warning message if it is used. You should always use +\fBmeson setup\fR explicitly, instead of relying on the default. + .SH EXIT STATUS .TP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/meson.egg-info/PKG-INFO new/meson-1.7.1/meson.egg-info/PKG-INFO --- old/meson-1.7.0/meson.egg-info/PKG-INFO 2025-01-26 19:47:42.000000000 +0100 +++ new/meson-1.7.1/meson.egg-info/PKG-INFO 2025-04-01 22:14:23.000000000 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 2.1 +Metadata-Version: 2.2 Name: meson -Version: 1.7.0 +Version: 1.7.1 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-1.7.0/meson.egg-info/SOURCES.txt new/meson-1.7.1/meson.egg-info/SOURCES.txt --- old/meson-1.7.0/meson.egg-info/SOURCES.txt 2025-01-26 19:47:42.000000000 +0100 +++ new/meson-1.7.1/meson.egg-info/SOURCES.txt 2025-04-01 22:14:23.000000000 +0200 @@ -2019,6 +2019,7 @@ test cases/csharp/4 external dep/test.json test cases/cuda/1 simple/meson.build test cases/cuda/1 simple/prog.cu +test cases/cuda/1 simple/test.json test cases/cuda/10 cuda dependency/meson.build test cases/cuda/10 cuda dependency/c/meson.build test cases/cuda/10 cuda dependency/c/prog.c diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/backend/backends.py new/meson-1.7.1/mesonbuild/backend/backends.py --- old/meson-1.7.0/mesonbuild/backend/backends.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/backend/backends.py 2025-04-01 22:14:23.000000000 +0200 @@ -2002,24 +2002,31 @@ library_paths = set() host_machine = self.environment.machines[MachineChoice.HOST] for t in self.build.get_targets().values(): - in_default_dir = t.should_install() and not t.get_install_dir()[2] - if t.for_machine != MachineChoice.HOST or not in_default_dir: + if t.for_machine is not MachineChoice.HOST or not t.should_install(): continue + + if (host_machine.is_windows() or host_machine.is_cygwin()) and isinstance(t, (build.Executable, build.SharedModule)): + # On windows we cannot rely on rpath to run executables from build + # directory. We have to add in PATH the location of every DLL needed. + library_paths.update(self.determine_windows_extra_paths(t, [])) + + if t.get_install_dir()[2]: + # Do not update paths for target installed in non default location + continue + tdir = os.path.join(self.environment.get_build_dir(), self.get_target_dir(t)) if isinstance(t, build.Executable): # Add binaries that are going to be installed in bindir into PATH # so they get used by default instead of searching on system when # in developer environment. extra_paths.add(tdir) - if host_machine.is_windows() or host_machine.is_cygwin(): - # On windows we cannot rely on rpath to run executables from build - # directory. We have to add in PATH the location of every DLL needed. - library_paths.update(self.determine_windows_extra_paths(t, [])) + elif isinstance(t, build.SharedLibrary): # Add libraries that are going to be installed in libdir into # LD_LIBRARY_PATH. This allows running system applications using # that library. library_paths.add(tdir) + return self.environment.get_env_for_paths(library_paths, extra_paths) def compiler_to_generator_args(self, target: build.BuildTarget, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/backend/ninjabackend.py new/meson-1.7.1/mesonbuild/backend/ninjabackend.py --- old/meson-1.7.0/mesonbuild/backend/ninjabackend.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/backend/ninjabackend.py 2025-04-01 22:14:23.000000000 +0200 @@ -4,7 +4,7 @@ from __future__ import annotations -from collections import OrderedDict +from collections import defaultdict, OrderedDict from dataclasses import dataclass from enum import Enum, unique from functools import lru_cache @@ -503,6 +503,7 @@ self.ninja_filename = 'build.ninja' self.fortran_deps: T.Dict[str, T.Dict[str, File]] = {} self.all_outputs: T.Set[str] = set() + self.all_pch: T.Dict[str, T.Set[str]] = defaultdict(set) self.all_structured_sources: T.Set[str] = set() self.introspection_data = {} self.created_llvm_ir_rule = PerMachine(False, False) @@ -3287,6 +3288,7 @@ elem.add_item('ARGS', commands) elem.add_item('DEPFILE', dep) self.add_build(elem) + self.all_pch[compiler.id].update(objs + [dst]) return pch_objects def get_target_shsym_filename(self, target): @@ -3734,7 +3736,7 @@ elem.add_item('pool', 'console') self.add_build(elem) - def generate_clangtool(self, name: str, extra_arg: T.Optional[str] = None) -> None: + def generate_clangtool(self, name: str, extra_arg: T.Optional[str] = None, need_pch: bool = False) -> None: target_name = 'clang-' + name extra_args = [] if extra_arg: @@ -3748,12 +3750,17 @@ return if target_name in self.all_outputs: return + if need_pch and not set(self.all_pch.keys()) <= {'clang'}: + return + cmd = self.environment.get_build_command() + \ ['--internal', 'clang' + name, self.environment.source_dir, self.environment.build_dir] + \ extra_args elem = self.create_phony_target(target_name, 'CUSTOM_COMMAND', 'PHONY') elem.add_item('COMMAND', cmd) elem.add_item('pool', 'console') + if need_pch: + elem.add_dep(list(self.all_pch['clang'])) self.add_build(elem) def generate_clangformat(self) -> None: @@ -3765,10 +3772,10 @@ def generate_clangtidy(self) -> None: if not environment.detect_clangtidy(): return - self.generate_clangtool('tidy') + self.generate_clangtool('tidy', need_pch=True) if not environment.detect_clangapply(): return - self.generate_clangtool('tidy', 'fix') + self.generate_clangtool('tidy', 'fix', need_pch=True) def generate_tags(self, tool: str, target_name: str) -> None: import shutil diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/backend/vs2010backend.py new/meson-1.7.1/mesonbuild/backend/vs2010backend.py --- old/meson-1.7.0/mesonbuild/backend/vs2010backend.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/backend/vs2010backend.py 2025-04-01 22:14:23.000000000 +0200 @@ -1463,7 +1463,7 @@ if self.environment.is_source(src): target_private_dir = self.relpath(self.get_target_private_dir(t), self.get_target_dir(t)) - rel_obj = self.object_filename_from_source(t, src, target_private_dir) + rel_obj = self.object_filename_from_source(t, compiler, src, target_private_dir) extra_link_args.append(rel_obj) extra_link_args.extend(self.flatten_object_list(t)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/compilers/detect.py new/meson-1.7.1/mesonbuild/compilers/detect.py --- old/meson-1.7.0/mesonbuild/compilers/detect.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/compilers/detect.py 2025-04-01 22:14:23.000000000 +0200 @@ -673,6 +673,8 @@ if key in env.options: # To fix LDFLAGS issue val = env.options[key] + if isinstance(val, str): + val = [val] assert isinstance(val, list) env.coredata.set_options({key: cls.to_host_flags_base(val, Phase.LINKER)}) linker = CudaLinker(compiler, for_machine, CudaCompiler.LINKER_PREFIX, [], version=CudaLinker.parse_version()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/compilers/mixins/clike.py new/meson-1.7.1/mesonbuild/compilers/mixins/clike.py --- old/meson-1.7.0/mesonbuild/compilers/mixins/clike.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/compilers/mixins/clike.py 2025-04-01 22:14:23.000000000 +0200 @@ -1285,10 +1285,16 @@ # some compilers, e.g. GCC, don't warn for unsupported warning-disable # flags, so when we are testing a flag like "-Wno-forgotten-towel", also # check the equivalent enable flag too "-Wforgotten-towel". - # Make an exception for -Wno-attributes=x as -Wattributes=x is invalid - # for GCC at least. - if arg.startswith('-Wno-') and not arg.startswith('-Wno-attributes='): - new_args.append('-W' + arg[5:]) + if arg.startswith('-Wno-'): + # Make an exception for -Wno-attributes=x as -Wattributes=x is invalid + # for GCC at least. Also, the opposite of -Wno-vla-larger-than is + # -Wvla-larger-than=N + if arg.startswith('-Wno-attributes='): + pass + elif arg == '-Wno-vla-larger-than': + new_args.append('-Wvla-larger-than=1000') + else: + new_args.append('-W' + arg[5:]) if arg.startswith('-Wl,'): mlog.warning(f'{arg} looks like a linker argument, ' 'but has_argument and other similar methods only ' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/coredata.py new/meson-1.7.1/mesonbuild/coredata.py --- old/meson-1.7.0/mesonbuild/coredata.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/coredata.py 2025-04-01 22:14:23.000000000 +0200 @@ -74,7 +74,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 = '1.7.0' +version = '1.7.1' # The next stable version when we are in dev. This is used to allow projects to # require meson version >=1.2.0 when using 1.1.99. FeatureNew won't warn when diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/dependencies/cmake.py new/meson-1.7.1/mesonbuild/dependencies/cmake.py --- old/meson-1.7.0/mesonbuild/dependencies/cmake.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/dependencies/cmake.py 2025-04-01 22:14:23.000000000 +0200 @@ -414,7 +414,16 @@ # Whether the package is found or not is always stored in PACKAGE_FOUND self.is_found = self.traceparser.var_to_bool('PACKAGE_FOUND') if not self.is_found: - return + not_found_message = self.traceparser.get_cmake_var('PACKAGE_NOT_FOUND_MESSAGE') + if len(not_found_message) > 0: + mlog.warning( + 'CMake reported that the package {} was not found with the following reason:\n' + '{}'.format(name, not_found_message[0])) + else: + mlog.warning( + 'CMake reported that the package {} was not found, ' + 'even though Meson\'s preliminary check succeeded.'.format(name)) + raise self._gen_exception('PACKAGE_FOUND is false') # Try to detect the version vers_raw = self.traceparser.get_cmake_var('PACKAGE_VERSION') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/dependencies/data/CMakeLists.txt new/meson-1.7.1/mesonbuild/dependencies/data/CMakeLists.txt --- old/meson-1.7.0/mesonbuild/dependencies/data/CMakeLists.txt 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/dependencies/data/CMakeLists.txt 2025-04-01 22:14:23.000000000 +0200 @@ -100,3 +100,9 @@ set(PACKAGE_DEFINITIONS "${${definitions}}") set(PACKAGE_LIBRARIES "${${libs}}") endif() + +if(${_packageName}_NOT_FOUND_MESSAGE) + set(PACKAGE_NOT_FOUND_MESSAGE "${${_packageName}_NOT_FOUND_MESSAGE}") +elseif(${PACKAGE_NAME}_NOT_FOUND_MESSAGE) + set(PACKAGE_NOT_FOUND_MESSAGE "${${PACKAGE_NAME}_NOT_FOUND_MESSAGE}") +endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/dependencies/dev.py new/meson-1.7.1/mesonbuild/dependencies/dev.py --- old/meson-1.7.0/mesonbuild/dependencies/dev.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/dependencies/dev.py 2025-04-01 22:14:23.000000000 +0200 @@ -56,7 +56,9 @@ def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T.Any]) -> None: super().__init__(name, environment, kwargs, language='cpp') self.main = kwargs.get('main', False) - self.src_dirs = ['/usr/src/gtest/src', '/usr/src/googletest/googletest/src'] + + sysroot = environment.properties[self.for_machine].get_sys_root() or '' + self.src_dirs = [sysroot + '/usr/src/gtest/src', sysroot + '/usr/src/googletest/googletest/src'] if not self._add_sub_dependency(threads_factory(environment, self.for_machine, {})): self.is_found = False return diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/envconfig.py new/meson-1.7.1/mesonbuild/envconfig.py --- old/meson-1.7.0/mesonbuild/envconfig.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/envconfig.py 2025-04-01 22:14:23.000000000 +0200 @@ -272,7 +272,7 @@ @classmethod def from_literal(cls, literal: T.Dict[str, str]) -> 'MachineInfo': minimum_literal = {'cpu', 'cpu_family', 'endian', 'system'} - if set(literal) < minimum_literal: + if minimum_literal - set(literal): raise EnvironmentException( f'Machine info is currently {literal}\n' + 'but is missing {}.'.format(minimum_literal - set(literal))) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/environment.py new/meson-1.7.1/mesonbuild/environment.py --- old/meson-1.7.0/mesonbuild/environment.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/environment.py 2025-04-01 22:14:23.000000000 +0200 @@ -197,6 +197,8 @@ # unless it becomes a stable release. suffixes = [ '', # base (no suffix) + '-20.1', '20.1', + '-20', '20', '-19.1', '19.1', '-19', '19', '-18.1', '18.1', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/interpreter/interpreter.py new/meson-1.7.1/mesonbuild/interpreter/interpreter.py --- old/meson-1.7.0/mesonbuild/interpreter/interpreter.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/interpreter/interpreter.py 2025-04-01 22:14:23.000000000 +0200 @@ -4,7 +4,7 @@ from __future__ import annotations -import hashlib +import hashlib, io, sys from .. import mparser from .. import environment @@ -906,10 +906,16 @@ try: subdir, method = r.resolve(subp_name, force_method) except wrap.WrapException as e: + if force_method is not None: + prefix = force_method.title() + ' subproject' + else: + prefix = 'Subproject' + msg = [prefix, mlog.bold(subp_name), 'is buildable:', mlog.red('NO')] if not required: mlog.log(e) - mlog.log('Subproject ', mlog.bold(subp_name), 'is buildable:', mlog.red('NO'), '(disabling)') + mlog.log(*msg, '(disabling)') return self.disabled_subproject(subp_name, exception=e) + mlog.error(*msg) raise e os.makedirs(os.path.join(self.build.environment.get_build_dir(), subdir), exist_ok=True) @@ -1463,10 +1469,18 @@ class ExpectErrorObject(ContextManagerObject): def __init__(self, msg: str, how: str, subproject: str) -> None: super().__init__(subproject) + self.old_stdout = sys.stdout + sys.stdout = self.new_stdout = io.StringIO() self.msg = msg self.how = how def __exit__(self, exc_type, exc_val, exc_tb): + sys.stdout = self.old_stdout + for l in self.new_stdout.getvalue().splitlines(): + if 'ERROR:' in l: + print(l.replace('ERROR', 'ERROR (msbuild proof)')) + else: + print(l) if exc_val is None: raise InterpreterException('Expecting an error but code block succeeded') if isinstance(exc_val, mesonlib.MesonException): @@ -3179,6 +3193,8 @@ results: T.List['SourceOutputs'] = [] for s in sources: if isinstance(s, str): + if s.endswith(' '): + raise MesonException(f'{s!r} ends with a space. This is probably an error.') if not strict and s.startswith(self.environment.get_build_dir()): results.append(s) mlog.warning(f'Source item {s!r} cannot be converted to File object, because it is a generated file. ' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/linkers/linkers.py new/meson-1.7.1/mesonbuild/linkers/linkers.py --- old/meson-1.7.0/mesonbuild/linkers/linkers.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/linkers/linkers.py 2025-04-01 22:14:23.000000000 +0200 @@ -737,11 +737,16 @@ return (args, rpath_dirs_to_remove) # Rpaths to use while linking must be absolute. These are not - # written to the binary. Needed only with GNU ld: + # written to the binary. Needed only with GNU ld, and only for + # versions before 2.28: + # https://sourceware.org/bugzilla/show_bug.cgi?id=20535 # https://sourceware.org/bugzilla/show_bug.cgi?id=16936 # Not needed on Windows or other platforms that don't use RPATH # https://github.com/mesonbuild/meson/issues/1897 # + # In 2.28 and on, $ORIGIN tokens inside of -rpath are respected, + # so we do not need to duplicate it in -rpath-link. + # # In addition, this linker option tends to be quite long and some # compilers have trouble dealing with it. That's why we will include # one option per folder, like this: @@ -751,8 +756,9 @@ # ...instead of just one single looooong option, like this: # # -Wl,-rpath-link,/path/to/folder1:/path/to/folder2:... - for p in rpath_paths: - args.extend(self._apply_prefix('-rpath-link,' + os.path.join(build_dir, p))) + if self.id in {'ld.bfd', 'ld.gold'} and mesonlib.version_compare(self.version, '<2.28'): + for p in rpath_paths: + args.extend(self._apply_prefix('-rpath-link,' + os.path.join(build_dir, p))) return (args, rpath_dirs_to_remove) @@ -789,7 +795,7 @@ return self._apply_prefix('-undefined,dynamic_lookup') def get_std_shared_module_args(self, options: 'KeyedOptionDictType') -> T.List[str]: - return ['-bundle'] + self._apply_prefix('-undefined,dynamic_lookup') + return ['-dynamiclib'] + self._apply_prefix('-undefined,dynamic_lookup') def get_pie_args(self) -> T.List[str]: return [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/mesonmain.py new/meson-1.7.1/mesonbuild/mesonmain.py --- old/meson-1.7.0/mesonbuild/mesonmain.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/mesonmain.py 2025-04-01 22:14:23.000000000 +0200 @@ -285,7 +285,7 @@ def main() -> int: # Always resolve the command path so Ninja can find it for regen, tests, etc. - if 'meson.exe' in sys.executable: + if getattr(sys, 'frozen', False): assert os.path.isabs(sys.executable) launcher = sys.executable else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/minstall.py new/meson-1.7.1/mesonbuild/minstall.py --- old/meson-1.7.0/mesonbuild/minstall.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/minstall.py 2025-04-01 22:14:23.000000000 +0200 @@ -139,7 +139,6 @@ lf.write('\n') lf.flush() - def set_chown(path: str, user: T.Union[str, int, None] = None, group: T.Union[str, int, None] = None, dir_fd: T.Optional[int] = None, follow_symlinks: bool = True) -> None: @@ -150,10 +149,23 @@ # Not nice, but better than actually rewriting shutil.chown until # this python bug is fixed: https://bugs.python.org/issue18108 + # This is running into a problem where this may not match any of signatures + # of `shtil.chown`, which (simplified) are: + # chown(path: int | AnyPath, user: int | str, group: None = None) + # chown(path: int | AnyPath, user: None, group: int | str) + # We cannot through easy coercion of the type system force it to say: + # - user is non null and group is null + # - user is null and group is non null + # - user is non null and group is non null + # + # This is checked by the only (current) caller, but let's be sure that the + # call we're making to `shutil.chown` is actually valid. + assert user is not None or group is not None, 'ensure that calls to chown are valid' + if sys.version_info >= (3, 13): # pylint: disable=unexpected-keyword-arg # cannot handle sys.version_info, https://github.com/pylint-dev/pylint/issues/9622 - shutil.chown(path, user, group, dir_fd=dir_fd, follow_symlinks=follow_symlinks) + shutil.chown(path, user, group, dir_fd=dir_fd, follow_symlinks=follow_symlinks) # type: ignore[call-overload] else: real_os_chown = os.chown diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/options.py new/meson-1.7.1/mesonbuild/options.py --- old/meson-1.7.0/mesonbuild/options.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/options.py 2025-04-01 22:14:23.000000000 +0200 @@ -512,7 +512,7 @@ f'However, the deprecated {std} std currently falls back to {newstd}.\n' + 'This will be an error in meson 2.0.\n' + 'If the project supports both GNU and MSVC compilers, a value such as\n' + - '"c_std=gnu11,c11" specifies that GNU is preferred but it can safely fallback to plain c11.') + '"c_std=gnu11,c11" specifies that GNU is preferred but it can safely fallback to plain c11.', once=True) return newstd raise MesonException(f'None of values {candidates} are supported by the {self.lang.upper()} compiler. ' + f'Possible values for option "{self.name}" are {self.choices}') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/mesonbuild/utils/universal.py new/meson-1.7.1/mesonbuild/utils/universal.py --- old/meson-1.7.0/mesonbuild/utils/universal.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/mesonbuild/utils/universal.py 2025-04-01 22:14:23.000000000 +0200 @@ -398,7 +398,7 @@ @staticmethod @lru_cache(maxsize=None) - def from_source_file(source_root: str, subdir: str, fname: str) -> 'File': + def from_source_file(source_root: str, subdir: str, fname: str) -> File: if not os.path.isfile(os.path.join(source_root, subdir, fname)): raise MesonException(f'File {fname} does not exist.') return File(False, subdir, fname) @@ -1915,7 +1915,7 @@ os.chmod(d, os.stat(d).st_mode | stat.S_IWRITE | stat.S_IREAD) for fname in files: fpath = os.path.join(d, fname) - if os.path.isfile(fpath): + if not os.path.islink(fpath) and os.path.isfile(fpath): os.chmod(fpath, os.stat(fpath).st_mode | stat.S_IWRITE | stat.S_IREAD) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.7.0/test cases/common/104 has arg/meson.build" "new/meson-1.7.1/test cases/common/104 has arg/meson.build" --- "old/meson-1.7.0/test cases/common/104 has arg/meson.build" 2025-01-26 19:47:41.000000000 +0100 +++ "new/meson-1.7.1/test cases/common/104 has arg/meson.build" 2025-04-01 22:14:23.000000000 +0200 @@ -56,6 +56,9 @@ # Handle special -Wno-attributes=foo where -Wattributes=foo is invalid # i.e. our usual -Wno-foo -Wfoo hack doesn't work for -Wattributes=foo. assert(cpp.has_argument('-Wno-attributes=meson::i_do_not_exist')) + # Likewise, the positive counterpart to -Wno-vla-larger-than is + # -Wvla-larger-than=N + assert(cpp.has_argument('-Wno-vla-larger-than')) endif if cc.get_id() == 'clang' and cc.version().version_compare('<=4.0.0') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.7.0/test cases/cuda/1 simple/test.json" "new/meson-1.7.1/test cases/cuda/1 simple/test.json" --- "old/meson-1.7.0/test cases/cuda/1 simple/test.json" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-1.7.1/test cases/cuda/1 simple/test.json" 2025-04-01 22:14:23.000000000 +0200 @@ -0,0 +1,7 @@ +{ + "matrix": { + "options": { + "cuda_link_args": [{ "val": "-ldl" }] + } + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.7.0/test cases/frameworks/34 gir static lib/test.json" "new/meson-1.7.1/test cases/frameworks/34 gir static lib/test.json" --- "old/meson-1.7.0/test cases/frameworks/34 gir static lib/test.json" 2025-01-26 19:47:41.000000000 +0100 +++ "new/meson-1.7.1/test cases/frameworks/34 gir static lib/test.json" 2025-04-01 22:14:23.000000000 +0200 @@ -5,5 +5,5 @@ {"type": "file", "platform": "cygwin", "file": "usr/lib/libgirlib.dll.a"}, {"type": "file", "file": "usr/share/gir-1.0/Meson-1.0.gir"} ], - "expect_skip_on_jobname": ["azure", "bionic", "cygwin", "macos", "msys2"] + "expect_skip_on_jobname": ["azure", "bionic", "macos", "msys2"] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.7.0/test cases/python/4 custom target depends extmodule/blaster.py" "new/meson-1.7.1/test cases/python/4 custom target depends extmodule/blaster.py" --- "old/meson-1.7.0/test cases/python/4 custom target depends extmodule/blaster.py" 2025-01-26 19:47:41.000000000 +0100 +++ "new/meson-1.7.1/test cases/python/4 custom target depends extmodule/blaster.py" 2025-04-01 22:14:23.000000000 +0200 @@ -7,8 +7,7 @@ from pathlib import Path filedir = Path(os.path.dirname(__file__)).resolve() -if list(filedir.glob('ext/*tachyon*')): - sys.path.insert(0, (filedir / 'ext').as_posix()) +sys.path.insert(0, (filedir / 'ext').as_posix()) if hasattr(os, 'add_dll_directory'): os.add_dll_directory(filedir / 'ext' / 'lib') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.7.0/test cases/vala/11 generated vapi/meson.build" "new/meson-1.7.1/test cases/vala/11 generated vapi/meson.build" --- "old/meson-1.7.0/test cases/vala/11 generated vapi/meson.build" 2025-01-26 19:47:41.000000000 +0100 +++ "new/meson-1.7.1/test cases/vala/11 generated vapi/meson.build" 2025-04-01 22:14:23.000000000 +0200 @@ -1,5 +1,9 @@ project('vapi-test', ['c', 'vala']) +if host_machine.system() == 'cygwin' + error('MESON_SKIP_TEST Does not work with the Vala currently packaged in cygwin') +endif + gnome = import('gnome') subdir('libfoo') subdir('libbar') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.7.0/test cases/vala/11 generated vapi/test.json" "new/meson-1.7.1/test cases/vala/11 generated vapi/test.json" --- "old/meson-1.7.0/test cases/vala/11 generated vapi/test.json" 2025-01-26 19:47:41.000000000 +0100 +++ "new/meson-1.7.1/test cases/vala/11 generated vapi/test.json" 2025-04-01 22:14:23.000000000 +0200 @@ -9,5 +9,6 @@ {"type": "file", "file": "usr/share/vala/vapi/foo-1.0.deps"}, {"type": "file", "file": "usr/share/vala/vapi/bar-1.0.vapi"}, {"type": "file", "file": "usr/share/vala/vapi/bar-1.0.deps"} - ] + ], + "expect_skip_on_jobname": ["cygwin"] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/unittests/baseplatformtests.py new/meson-1.7.1/unittests/baseplatformtests.py --- old/meson-1.7.0/unittests/baseplatformtests.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/unittests/baseplatformtests.py 2025-04-01 22:14:23.000000000 +0200 @@ -117,18 +117,6 @@ newdir = os.path.realpath(newdir) self.change_builddir(newdir) - def new_builddir_in_tempdir(self): - # Can't keep the builddir inside the source tree for the umask tests: - # https://github.com/mesonbuild/meson/pull/5546#issuecomment-509666523 - # And we can't do this for all tests because it causes the path to be - # a short-path which breaks other tests: - # https://github.com/mesonbuild/meson/pull/9497 - newdir = tempfile.mkdtemp() - # In case the directory is inside a symlinked directory, find the real - # path otherwise we might not find the srcdir from inside the builddir. - newdir = os.path.realpath(newdir) - self.change_builddir(newdir) - def _open_meson_log(self) -> io.TextIOWrapper: log = os.path.join(self.logdir, 'meson-log.txt') return open(log, encoding='utf-8') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.7.0/unittests/linuxliketests.py new/meson-1.7.1/unittests/linuxliketests.py --- old/meson-1.7.0/unittests/linuxliketests.py 2025-01-26 19:47:41.000000000 +0100 +++ new/meson-1.7.1/unittests/linuxliketests.py 2025-04-01 22:14:23.000000000 +0200 @@ -590,8 +590,6 @@ Test that files installed by these tests have the correct permissions. Can't be an ordinary test because our installed_files.txt is very basic. ''' - if is_cygwin(): - self.new_builddir_in_tempdir() # Test file modes testdir = os.path.join(self.common_test_dir, '12 data') self.init(testdir) @@ -644,8 +642,6 @@ ''' Test that files are installed with correct permissions using install_mode. ''' - if is_cygwin(): - self.new_builddir_in_tempdir() testdir = os.path.join(self.common_test_dir, '190 install_mode') self.init(testdir) self.build() @@ -684,8 +680,6 @@ install umask of 022, regardless of the umask at time the worktree was checked out or the build was executed. ''' - if is_cygwin(): - self.new_builddir_in_tempdir() # Copy source tree to a temporary directory and change permissions # there to simulate a checkout with umask 002. orig_testdir = os.path.join(self.unit_test_dir, '26 install umask')