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

Reply via email to