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-06-12 15:47:27 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/meson (Old) and /work/SRC/openSUSE:Factory/.meson.new.19631 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "meson" Thu Jun 12 15:47:27 2025 rev:127 rq:1284488 version:1.8.2 Changes: -------- --- /work/SRC/openSUSE:Factory/meson/meson.changes 2025-05-30 17:23:56.147800617 +0200 +++ /work/SRC/openSUSE:Factory/.meson.new.19631/meson.changes 2025-06-12 15:47:28.450768006 +0200 @@ -1,0 +2,13 @@ +Tue Jun 10 06:56:52 UTC 2025 - Dominique Leuenberger <dims...@opensuse.org> + +- Update to version 1.8.2: + + Unbreak "Fix setuptools 49 test". + + cargo: set edition for build machine as well. + + Vala: Fix GResource source directories. + + Vala: Add test for generated UI in subdirectories. + + cmake: Fix target_link_libraries against project targets. + + vala: Pass --shared-library to valac when generating a .gir + file. + + tests: don't skip frameworks/17 mpi for auto/pkgconfig. + +------------------------------------------------------------------- Old: ---- meson-1.8.1.tar.gz meson-1.8.1.tar.gz.asc New: ---- meson-1.8.2.tar.gz meson-1.8.2.tar.gz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ meson.spec ++++++ --- /var/tmp/diff_new_pack.Lx3Ckg/_old 2025-06-12 15:47:29.126796107 +0200 +++ /var/tmp/diff_new_pack.Lx3Ckg/_new 2025-06-12 15:47:29.130796274 +0200 @@ -35,7 +35,7 @@ %{!?vim_data_dir:%global vim_data_dir %{_datadir}/vim} %bcond_without mono Name: meson%{name_ext} -Version: 1.8.1 +Version: 1.8.2 Release: 0 Summary: Python-based build system License: Apache-2.0 ++++++ meson-1.8.1.tar.gz -> meson-1.8.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/PKG-INFO new/meson-1.8.2/PKG-INFO --- old/meson-1.8.1/PKG-INFO 2025-05-23 23:51:07.713378400 +0200 +++ new/meson-1.8.2/PKG-INFO 2025-06-09 21:45:18.857252100 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: meson -Version: 1.8.1 +Version: 1.8.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-1.8.1/man/meson.1 new/meson-1.8.2/man/meson.1 --- old/meson-1.8.1/man/meson.1 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/man/meson.1 2025-06-09 21:45:16.000000000 +0200 @@ -1,4 +1,4 @@ -.TH MESON "1" "May 2025" "meson 1.8.1" "User Commands" +.TH MESON "1" "June 2025" "meson 1.8.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-1.8.1/meson.egg-info/PKG-INFO new/meson-1.8.2/meson.egg-info/PKG-INFO --- old/meson-1.8.1/meson.egg-info/PKG-INFO 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/meson.egg-info/PKG-INFO 2025-06-09 21:45:17.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: meson -Version: 1.8.1 +Version: 1.8.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-1.8.1/meson.egg-info/SOURCES.txt new/meson-1.8.2/meson.egg-info/SOURCES.txt --- old/meson-1.8.1/meson.egg-info/SOURCES.txt 2025-05-23 23:51:06.000000000 +0200 +++ new/meson-1.8.2/meson.egg-info/SOURCES.txt 2025-06-09 21:45:17.000000000 +0200 @@ -4405,6 +4405,11 @@ test cases/vala/3 dep/gioprog.vala test cases/vala/3 dep/meson.build test cases/vala/30 dependencies for compiler.links/meson.build +test cases/vala/31 generated ui file subdirectory/meson.build +test cases/vala/31 generated ui file subdirectory/test.vala +test cases/vala/31 generated ui file subdirectory/subdir/TestBox.ui.in +test cases/vala/31 generated ui file subdirectory/subdir/meson.build +test cases/vala/31 generated ui file subdirectory/subdir/test.gresource.xml test cases/vala/4 config/config.vapi test cases/vala/4 config/meson-something-else.vapi test cases/vala/4 config/meson.build @@ -4574,6 +4579,9 @@ test cases/windows/24 diasdk copy dll/config.h.in test cases/windows/24 diasdk copy dll/dia_from_dll.cpp test cases/windows/24 diasdk copy dll/meson.build +test cases/windows/25 embed manifest/DPIAware.manifest +test cases/windows/25 embed manifest/meson.build +test cases/windows/25 embed manifest/prog.c test cases/windows/3 cpp/meson.build test cases/windows/3 cpp/prog.cpp test cases/windows/4 winmaincpp/meson.build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/backend/ninjabackend.py new/meson-1.8.2/mesonbuild/backend/ninjabackend.py --- old/meson-1.8.1/mesonbuild/backend/ninjabackend.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/backend/ninjabackend.py 2025-06-09 21:45:16.000000000 +0200 @@ -500,11 +500,6 @@ # - https://github.com/mesonbuild/meson/pull/9453 # - https://github.com/mesonbuild/meson/issues/9479#issuecomment-953485040 self.allow_thin_archives = PerMachine[bool](True, True) - if self.environment: - for for_machine in MachineChoice: - if 'cuda' in self.environment.coredata.compilers[for_machine]: - mlog.debug('cuda enabled globally, disabling thin archives for {}, since nvcc/nvlink cannot handle thin archives natively'.format(for_machine)) - self.allow_thin_archives[for_machine] = False def create_phony_target(self, dummy_outfile: str, rulename: str, phony_infilename: str) -> NinjaBuildElement: ''' @@ -595,6 +590,12 @@ # We don't yet have a use case where we'd expect to make use of this, # so no harm in catching and reporting something unexpected. raise MesonBugException('We do not expect the ninja backend to be given a valid \'vslite_ctx\'') + if self.environment: + for for_machine in MachineChoice: + if 'cuda' in self.environment.coredata.compilers[for_machine]: + mlog.debug('cuda enabled globally, disabling thin archives for {}, since nvcc/nvlink cannot handle thin archives natively'.format(for_machine)) + self.allow_thin_archives[for_machine] = False + ninja = environment.detect_ninja_command_and_version(log=True) if self.environment.coredata.optstore.get_value_for(OptionKey('vsenv')): builddir = Path(self.environment.get_build_dir()) @@ -1765,6 +1766,9 @@ girname = os.path.join(self.get_target_dir(target), target.vala_gir) args += ['--gir', os.path.join('..', target.vala_gir)] valac_outputs.append(girname) + shared_target = target.get('shared') + if isinstance(shared_target, build.SharedLibrary): + args += ['--shared-library', self.get_target_filename_for_linking(shared_target)] # Install GIR to default location if requested by user if len(target.install_dir) > 3 and target.install_dir[3] is True: target.install_dir[3] = os.path.join(self.environment.get_datadir(), 'gir-1.0') @@ -1775,7 +1779,7 @@ gres_xml, = self.get_custom_target_sources(gensrc) args += ['--gresources=' + gres_xml] for source_dir in gensrc.source_dirs: - gres_dirs += [os.path.join(self.get_target_dir(gensrc), source_dir)] + gres_dirs += [source_dir] # Ensure that resources are built before vala sources # This is required since vala code using [GtkTemplate] effectively depends on .ui files # GResourceHeaderTarget is not suitable due to lacking depfile @@ -3127,9 +3131,9 @@ # If TASKING compiler family is used and MIL linking is enabled for the target, # then compilation rule name is a special one to output MIL files # instead of object files for .c files - key = OptionKey('b_lto') if compiler.get_id() == 'tasking': - if ((isinstance(target, build.StaticLibrary) and target.prelink) or target.get_option(key)) and src.rsplit('.', 1)[1] in compilers.lang_suffixes['c']: + target_lto = self.get_target_option(target, OptionKey('b_lto', machine=target.for_machine, subproject=target.subproject)) + if ((isinstance(target, build.StaticLibrary) and target.prelink) or target_lto) and src.rsplit('.', 1)[1] in compilers.lang_suffixes['c']: compiler_name = self.get_compiler_rule_name('tasking_mil_compile', compiler.for_machine) else: compiler_name = self.compiler_to_rule_name(compiler) @@ -3688,7 +3692,7 @@ elem = NinjaBuildElement(self.all_outputs, outname, linker_rule, obj_list, implicit_outs=implicit_outs) elem.add_dep(dep_targets + custom_target_libraries) if linker.get_id() == 'tasking': - if len([x for x in dep_targets + custom_target_libraries if x.endswith('.ma')]) > 0 and not target.get_option(OptionKey('b_lto')): + if len([x for x in dep_targets + custom_target_libraries if x.endswith('.ma')]) > 0 and not self.get_target_option(target, OptionKey('b_lto', target.subproject, target.for_machine)): raise MesonException(f'Tried to link the target named \'{target.name}\' with a MIL archive without LTO enabled! This causes the compiler to ignore the archive.') # Compiler args must be included in TI C28x linker commands. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/backend/vs2010backend.py new/meson-1.8.2/mesonbuild/backend/vs2010backend.py --- old/meson-1.8.1/mesonbuild/backend/vs2010backend.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/backend/vs2010backend.py 2025-06-09 21:45:16.000000000 +0200 @@ -147,6 +147,9 @@ self.handled_target_deps = {} self.gen_lite = gen_lite # Synonymous with generating the simpler makefile-style multi-config projects that invoke 'meson compile' builds, avoiding native MSBuild complications + def detect_toolset(self) -> None: + pass + def get_target_private_dir(self, target): return os.path.join(self.get_target_dir(target), target.get_id()) @@ -227,6 +230,7 @@ # Check for (currently) unexpected capture arg use cases - if capture: raise MesonBugException('We do not expect any vs backend to generate with \'capture = True\'') + self.detect_toolset() host_machine = self.environment.machines.host.cpu_family if host_machine in {'64', 'x86_64'}: # amd64 or x86_64 @@ -692,9 +696,8 @@ if target_ext: ET.SubElement(direlem, 'TargetExt').text = target_ext - ET.SubElement(direlem, 'EmbedManifest').text = 'false' - if not gen_manifest: - ET.SubElement(direlem, 'GenerateManifest').text = 'false' + ET.SubElement(direlem, 'EmbedManifest').text = 'true' if gen_manifest == 'embed' else 'false' + ET.SubElement(direlem, 'GenerateManifest').text = 'true' if gen_manifest else 'false' return (root, type_config) @@ -1493,8 +1496,9 @@ additional_links.append(self.relpath(lib, self.get_target_dir(target))) if len(extra_link_args) > 0: - extra_link_args.append('%(AdditionalOptions)') - ET.SubElement(link, "AdditionalOptions").text = ' '.join(extra_link_args) + args = [self.escape_additional_option(arg) for arg in extra_link_args] + args.append('%(AdditionalOptions)') + ET.SubElement(link, "AdditionalOptions").text = ' '.join(args) if len(additional_libpaths) > 0: additional_libpaths.insert(0, '%(AdditionalLibraryDirectories)') ET.SubElement(link, 'AdditionalLibraryDirectories').text = ';'.join(additional_libpaths) @@ -2096,6 +2100,7 @@ pass # Returns if a target generates a manifest or not. + # Returns 'embed' if the generated manifest is embedded. def get_gen_manifest(self, target): if not isinstance(target, build.BuildTarget): return True @@ -2113,6 +2118,8 @@ arg = arg.upper() if arg == '/MANIFEST:NO': return False + if arg.startswith('/MANIFEST:EMBED'): + return 'embed' if arg == '/MANIFEST' or arg.startswith('/MANIFEST:'): break return True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/backend/vs2012backend.py new/meson-1.8.2/mesonbuild/backend/vs2012backend.py --- old/meson-1.8.1/mesonbuild/backend/vs2012backend.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/backend/vs2012backend.py 2025-06-09 21:45:16.000000000 +0200 @@ -21,6 +21,8 @@ self.vs_version = '2012' self.sln_file_version = '12.00' self.sln_version_comment = '2012' + + def detect_toolset(self) -> None: if self.environment is not None: # TODO: we assume host == build comps = self.environment.coredata.compilers.host diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/backend/vs2013backend.py new/meson-1.8.2/mesonbuild/backend/vs2013backend.py --- old/meson-1.8.1/mesonbuild/backend/vs2013backend.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/backend/vs2013backend.py 2025-06-09 21:45:16.000000000 +0200 @@ -20,6 +20,8 @@ self.vs_version = '2013' self.sln_file_version = '12.00' self.sln_version_comment = '2013' + + def detect_toolset(self) -> None: if self.environment is not None: # TODO: we assume host == build comps = self.environment.coredata.compilers.host diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/backend/vs2015backend.py new/meson-1.8.2/mesonbuild/backend/vs2015backend.py --- old/meson-1.8.1/mesonbuild/backend/vs2015backend.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/backend/vs2015backend.py 2025-06-09 21:45:16.000000000 +0200 @@ -21,6 +21,8 @@ self.vs_version = '2015' self.sln_file_version = '12.00' self.sln_version_comment = '14' + + def detect_toolset(self) -> None: if self.environment is not None: # TODO: we assume host == build comps = self.environment.coredata.compilers.host diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/backend/vs2017backend.py new/meson-1.8.2/mesonbuild/backend/vs2017backend.py --- old/meson-1.8.1/mesonbuild/backend/vs2017backend.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/backend/vs2017backend.py 2025-06-09 21:45:16.000000000 +0200 @@ -24,6 +24,8 @@ self.vs_version = '2017' self.sln_file_version = '12.00' self.sln_version_comment = '15' + + def detect_toolset(self) -> None: # We assume that host == build if self.environment is not None: comps = self.environment.coredata.compilers.host diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/backend/vs2019backend.py new/meson-1.8.2/mesonbuild/backend/vs2019backend.py --- old/meson-1.8.1/mesonbuild/backend/vs2019backend.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/backend/vs2019backend.py 2025-06-09 21:45:16.000000000 +0200 @@ -22,6 +22,8 @@ super().__init__(build, interpreter) self.sln_file_version = '12.00' self.sln_version_comment = 'Version 16' + + def detect_toolset(self) -> None: if self.environment is not None: comps = self.environment.coredata.compilers.host if comps and all(c.id == 'clang-cl' for c in comps.values()): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/backend/vs2022backend.py new/meson-1.8.2/mesonbuild/backend/vs2022backend.py --- old/meson-1.8.1/mesonbuild/backend/vs2022backend.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/backend/vs2022backend.py 2025-06-09 21:45:16.000000000 +0200 @@ -22,6 +22,8 @@ super().__init__(build, interpreter, gen_lite=gen_lite) self.sln_file_version = '12.00' self.sln_version_comment = 'Version 17' + + def detect_toolset(self) -> None: if self.environment is not None: comps = self.environment.coredata.compilers.host if comps and all(c.id == 'clang-cl' for c in comps.values()): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/build.py new/meson-1.8.2/mesonbuild/build.py --- old/meson-1.8.1/mesonbuild/build.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/build.py 2025-06-09 21:45:16.000000000 +0200 @@ -2199,10 +2199,16 @@ elif self.rust_crate_type == 'staticlib': self.suffix = 'a' else: - if 'c' in self.compilers and self.compilers['c'].get_id() == 'tasking': - self.suffix = 'ma' if self.options.get_value('b_lto') and not self.prelink else 'a' - else: - self.suffix = 'a' + self.suffix = 'a' + if 'c' in self.compilers and self.compilers['c'].get_id() == 'tasking' and not self.prelink: + key = OptionKey('b_lto', self.subproject, self.for_machine) + try: + v = self.environment.coredata.get_option_for_target(self, key) + except KeyError: + v = self.environment.coredata.optstore.get_value_for(key) + assert isinstance(v, bool), 'for mypy' + if v: + self.suffix = 'ma' self.filename = self.prefix + self.name + '.' + self.suffix self.outputs[0] = self.filename diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/cargo/interpreter.py new/meson-1.8.2/mesonbuild/cargo/interpreter.py --- old/meson-1.8.1/mesonbuild/cargo/interpreter.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/cargo/interpreter.py 2025-06-09 21:45:16.000000000 +0200 @@ -608,6 +608,7 @@ """ default_options: T.List[mparser.BaseNode] = [] default_options.append(build.string(f'rust_std={pkg.manifest.package.edition}')) + default_options.append(build.string(f'build.rust_std={pkg.manifest.package.edition}')) if pkg.downloaded: default_options.append(build.string('warning_level=0')) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/cmake/interpreter.py new/meson-1.8.2/mesonbuild/cmake/interpreter.py --- old/meson-1.8.1/mesonbuild/cmake/interpreter.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/cmake/interpreter.py 2025-06-09 21:45:16.000000000 +0200 @@ -223,6 +223,7 @@ self.install = target.install self.install_dir: T.Optional[Path] = None self.link_libraries = target.link_libraries + self.link_targets: T.List[str] = [] self.link_flags = target.link_flags + target.link_lang_flags self.public_link_flags: T.List[str] = [] self.depends_raw: T.List[str] = [] @@ -363,6 +364,8 @@ self.public_link_flags += rtgt.public_link_flags self.public_compile_opts += rtgt.public_compile_opts self.link_libraries += rtgt.libraries + self.depends_raw += rtgt.target_dependencies + self.link_targets += rtgt.target_dependencies elif self.type.upper() not in ['EXECUTABLE', 'OBJECT_LIBRARY']: mlog.warning('CMake: Target', mlog.bold(self.cmake_name), 'not found in CMake trace. This can lead to build errors') @@ -957,17 +960,27 @@ object_libs += [tgt] self.languages += [x for x in tgt.languages if x not in self.languages] - # Second pass: Detect object library dependencies + # Second pass: Populate link_with project internal targets + for tgt in self.targets: + for i in tgt.link_targets: + # Handle target-based link libraries + link_with = self.output_target_map.target(i) + if not link_with or isinstance(link_with, ConverterCustomTarget): + # Generated file etc. + continue + tgt.link_with.append(link_with) + + # Third pass: Detect object library dependencies for tgt in self.targets: tgt.process_object_libs(object_libs, self._object_lib_workaround) - # Third pass: Reassign dependencies to avoid some loops + # Fourth pass: Reassign dependencies to avoid some loops for tgt in self.targets: tgt.process_inter_target_dependencies() for ctgt in self.custom_targets: ctgt.process_inter_target_dependencies() - # Fourth pass: Remove rassigned dependencies + # Fifth pass: Remove reassigned dependencies for tgt in self.targets: tgt.cleanup_dependencies() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/cmake/tracetargets.py new/meson-1.8.2/mesonbuild/cmake/tracetargets.py --- old/meson-1.8.1/mesonbuild/cmake/tracetargets.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/cmake/tracetargets.py 2025-06-09 21:45:16.000000000 +0200 @@ -45,6 +45,7 @@ self.public_link_flags: T.List[str] = [] self.public_compile_opts: T.List[str] = [] self.libraries: T.List[str] = [] + self.target_dependencies: T.List[str] = [] def resolve_cmake_trace_targets(target_name: str, trace: 'CMakeTraceParser', @@ -144,9 +145,13 @@ targets += [x for x in tgt.properties['IMPORTED_LOCATION'] if x] if 'LINK_LIBRARIES' in tgt.properties: - targets += [x for x in tgt.properties['LINK_LIBRARIES'] if x] + link_libraries = [x for x in tgt.properties['LINK_LIBRARIES'] if x] + targets += link_libraries + res.target_dependencies += link_libraries if 'INTERFACE_LINK_LIBRARIES' in tgt.properties: - targets += [x for x in tgt.properties['INTERFACE_LINK_LIBRARIES'] if x] + link_libraries = [x for x in tgt.properties['INTERFACE_LINK_LIBRARIES'] if x] + targets += link_libraries + res.target_dependencies += link_libraries if f'IMPORTED_LINK_DEPENDENT_LIBRARIES_{cfg}' in tgt.properties: targets += [x for x in tgt.properties[f'IMPORTED_LINK_DEPENDENT_LIBRARIES_{cfg}'] if x] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/compilers/fortran.py new/meson-1.8.2/mesonbuild/compilers/fortran.py --- old/meson-1.8.1/mesonbuild/compilers/fortran.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/compilers/fortran.py 2025-06-09 21:45:16.000000000 +0200 @@ -643,7 +643,11 @@ # https://github.com/llvm/llvm-project/commit/8d5386669ed63548daf1bee415596582d6d78d7d; # it seems flang 18 doesn't work if something accidentally includes a program unit, see # https://github.com/llvm/llvm-project/issues/92496 - return search_dirs + ['-lFortranRuntime', '-lFortranDecimal'] + # Only link FortranRuntime and FortranDecimal for flang < 19, see + # https://github.com/scipy/scipy/issues/21562#issuecomment-2942938509 + if version_compare(self.version, '<19'): + search_dirs += ['-lFortranRuntime', '-lFortranDecimal'] + return search_dirs class Open64FortranCompiler(FortranCompiler): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/mesonbuild/coredata.py new/meson-1.8.2/mesonbuild/coredata.py --- old/meson-1.8.1/mesonbuild/coredata.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/mesonbuild/coredata.py 2025-06-09 21:45:16.000000000 +0200 @@ -72,7 +72,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.8.1' +version = '1.8.2' # 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.8.1/run_meson_command_tests.py new/meson-1.8.2/run_meson_command_tests.py --- old/meson-1.8.1/run_meson_command_tests.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/run_meson_command_tests.py 2025-06-09 21:45:16.000000000 +0200 @@ -143,7 +143,7 @@ os.environ['PATH'] = str(bindir) + os.pathsep + os.environ['PATH'] self._run(python_command + ['setup.py', 'install', '--prefix', str(prefix)]) # Fix importlib-metadata by appending all dirs in pylibdir - PYTHONPATHS = [pylibdir] + [x for x in pylibdir.iterdir()] + PYTHONPATHS = [pylibdir] + [x for x in pylibdir.iterdir() if x.name.endswith('.egg')] PYTHONPATHS = [os.path.join(str(x), '') for x in PYTHONPATHS] os.environ['PYTHONPATH'] = os.pathsep.join(PYTHONPATHS) # Check that all the files were installed correctly diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.8.1/test cases/frameworks/15 llvm/test.json" "new/meson-1.8.2/test cases/frameworks/15 llvm/test.json" --- "old/meson-1.8.1/test cases/frameworks/15 llvm/test.json" 2025-05-23 23:51:05.000000000 +0200 +++ "new/meson-1.8.2/test cases/frameworks/15 llvm/test.json" 2025-06-09 21:45:16.000000000 +0200 @@ -2,9 +2,9 @@ "matrix": { "options": { "method": [ - { "val": "config-tool", "expect_skip_on_jobname": ["msys2-gcc"] }, - { "val": "cmake", "expect_skip_on_jobname": ["msys2-gcc"] }, - { "val": "combination", "expect_skip_on_jobname": ["msys2-gcc"] } + { "val": "config-tool" }, + { "val": "cmake" }, + { "val": "combination" } ], "link-static": [ { "val": true, "expect_skip_on_jobname": ["arch", "opensuse", "linux-gentoo-gcc"] }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.8.1/test cases/frameworks/17 mpi/test.json" "new/meson-1.8.2/test cases/frameworks/17 mpi/test.json" --- "old/meson-1.8.1/test cases/frameworks/17 mpi/test.json" 2025-05-23 23:51:05.000000000 +0200 +++ "new/meson-1.8.2/test cases/frameworks/17 mpi/test.json" 2025-06-09 21:45:16.000000000 +0200 @@ -2,10 +2,8 @@ "matrix": { "options": { "method": [ - { "val": "auto", - "expect_skip_on_jobname": ["ubuntu"] }, - { "val": "pkg-config", - "expect_skip_on_jobname": ["ubuntu"] }, + { "val": "auto" }, + { "val": "pkg-config" }, { "val": "config-tool", "expect_skip_on_jobname": ["fedora"] }, { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.8.1/test cases/vala/31 generated ui file subdirectory/meson.build" "new/meson-1.8.2/test cases/vala/31 generated ui file subdirectory/meson.build" --- "old/meson-1.8.1/test cases/vala/31 generated ui file subdirectory/meson.build" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-1.8.2/test cases/vala/31 generated ui file subdirectory/meson.build" 2025-06-09 21:45:16.000000000 +0200 @@ -0,0 +1,22 @@ +project('demo', 'c', 'vala') + +gnome = import('gnome', required: false) + +if not gnome.found() + error('MESON_SKIP_TEST: gnome module not supported') +endif + +deps = [ + dependency('glib-2.0', version : '>=2.50'), + dependency('gobject-2.0'), + dependency('gtk+-3.0'), +] + +subdir('subdir') + +executable( + 'demo', + 'test.vala', + resources, + dependencies: deps, +) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.8.1/test cases/vala/31 generated ui file subdirectory/subdir/TestBox.ui.in" "new/meson-1.8.2/test cases/vala/31 generated ui file subdirectory/subdir/TestBox.ui.in" --- "old/meson-1.8.1/test cases/vala/31 generated ui file subdirectory/subdir/TestBox.ui.in" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-1.8.2/test cases/vala/31 generated ui file subdirectory/subdir/TestBox.ui.in" 2025-06-09 21:45:16.000000000 +0200 @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <requires lib="gtk" version="3.0"/> + <template class="TestBox" parent="GtkBox"> + </template> +</interface> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.8.1/test cases/vala/31 generated ui file subdirectory/subdir/meson.build" "new/meson-1.8.2/test cases/vala/31 generated ui file subdirectory/subdir/meson.build" --- "old/meson-1.8.1/test cases/vala/31 generated ui file subdirectory/subdir/meson.build" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-1.8.2/test cases/vala/31 generated ui file subdirectory/subdir/meson.build" 2025-06-09 21:45:16.000000000 +0200 @@ -0,0 +1,13 @@ +ui_tgt = custom_target( + input: 'TestBox.ui.in', + output: 'TestBox.ui', + command: [find_program('cat')], + feed: true, + capture: true, +) + +resources = gnome.compile_resources('test-resources', + 'test.gresource.xml', + c_name: 'test_res', + dependencies: ui_tgt, +) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.8.1/test cases/vala/31 generated ui file subdirectory/subdir/test.gresource.xml" "new/meson-1.8.2/test cases/vala/31 generated ui file subdirectory/subdir/test.gresource.xml" --- "old/meson-1.8.1/test cases/vala/31 generated ui file subdirectory/subdir/test.gresource.xml" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-1.8.2/test cases/vala/31 generated ui file subdirectory/subdir/test.gresource.xml" 2025-06-09 21:45:16.000000000 +0200 @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<gresources> + <gresource prefix="/com/mesonbuild/test"> + <file>TestBox.ui</file> + </gresource> +</gresources> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.8.1/test cases/vala/31 generated ui file subdirectory/test.vala" "new/meson-1.8.2/test cases/vala/31 generated ui file subdirectory/test.vala" --- "old/meson-1.8.1/test cases/vala/31 generated ui file subdirectory/test.vala" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-1.8.2/test cases/vala/31 generated ui file subdirectory/test.vala" 2025-06-09 21:45:16.000000000 +0200 @@ -0,0 +1,7 @@ +[GtkTemplate (ui = "/com/mesonbuild/test/TestBox.ui")] +class TestBox: Gtk.Box { +} + +int main() { + return 0; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.8.1/test cases/windows/25 embed manifest/DPIAware.manifest" "new/meson-1.8.2/test cases/windows/25 embed manifest/DPIAware.manifest" --- "old/meson-1.8.1/test cases/windows/25 embed manifest/DPIAware.manifest" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-1.8.2/test cases/windows/25 embed manifest/DPIAware.manifest" 2025-06-09 21:45:16.000000000 +0200 @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> + <asmv3:application> + <asmv3:windowsSettings> + <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> + <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness> + </asmv3:windowsSettings> + </asmv3:application> +</assembly> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.8.1/test cases/windows/25 embed manifest/meson.build" "new/meson-1.8.2/test cases/windows/25 embed manifest/meson.build" --- "old/meson-1.8.1/test cases/windows/25 embed manifest/meson.build" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-1.8.2/test cases/windows/25 embed manifest/meson.build" 2025-06-09 21:45:16.000000000 +0200 @@ -0,0 +1,11 @@ +project('can-manifests-be-embedded', 'c') + +cc = meson.get_compiler('c') + +if cc.get_linker_id() not in ['link', 'lld-link', 'xilink'] # cc.get_linker_argument_syntax() != 'link' + error('MESON_SKIP_TEST: test is only relevant for the Microsoft linker') +endif + +# Ensure that the manifest can be embedded +executable('prog', 'prog.c', + link_args: ['/MANIFEST:EMBED', '/MANIFESTINPUT:' + meson.project_source_root() / 'DPIAware.manifest']) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-1.8.1/test cases/windows/25 embed manifest/prog.c" "new/meson-1.8.2/test cases/windows/25 embed manifest/prog.c" --- "old/meson-1.8.1/test cases/windows/25 embed manifest/prog.c" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-1.8.2/test cases/windows/25 embed manifest/prog.c" 2025-06-09 21:45:16.000000000 +0200 @@ -0,0 +1,3 @@ +int main(int argc, char *argv[]) { + return 0; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-1.8.1/unittests/allplatformstests.py new/meson-1.8.2/unittests/allplatformstests.py --- old/meson-1.8.1/unittests/allplatformstests.py 2025-05-23 23:51:05.000000000 +0200 +++ new/meson-1.8.2/unittests/allplatformstests.py 2025-06-09 21:45:16.000000000 +0200 @@ -1099,110 +1099,144 @@ for lang, evar in langs: # Detect with evar and do sanity checks on that if evar in os.environ: - ecc = compiler_from_language(env, lang, MachineChoice.HOST) - self.assertTrue(ecc.version) - elinker = detect_static_linker(env, ecc) - # Pop it so we don't use it for the next detection - evalue = os.environ.pop(evar) - # Very rough/strict heuristics. Would never work for actual - # compiler detection, but should be ok for the tests. - ebase = os.path.basename(evalue) - if ebase.startswith('g') or ebase.endswith(('-gcc', '-g++')): - self.assertIsInstance(ecc, gnu) - self.assertIsInstance(elinker, ar) - elif 'clang-cl' in ebase: - self.assertIsInstance(ecc, clangcl) - self.assertIsInstance(elinker, lib) - elif 'clang' in ebase: - self.assertIsInstance(ecc, clang) - self.assertIsInstance(elinker, ar) - elif ebase.startswith('ic'): - self.assertIsInstance(ecc, intel) - self.assertIsInstance(elinker, ar) - elif ebase.startswith('cl'): - self.assertIsInstance(ecc, msvc) - self.assertIsInstance(elinker, lib) - else: - raise AssertionError(f'Unknown compiler {evalue!r}') - # Check that we actually used the evalue correctly as the compiler - self.assertEqual(ecc.get_exelist(), split_args(evalue)) + with self.subTest(lang=lang, evar=evar): + try: + ecc = compiler_from_language(env, lang, MachineChoice.HOST) + except EnvironmentException: + # always raise in ci, we expect to have a valid ObjC and ObjC++ compiler of some kind + if is_ci(): + self.fail(f'Could not find a compiler for {lang}') + if sys.version_info < (3, 11): + continue + self.skipTest(f'No valid compiler for {lang}.') + finally: + # Pop it so we don't use it for the next detection + evalue = os.environ.pop(evar) + assert ecc is not None, "Something went really wrong" + self.assertTrue(ecc.version) + elinker = detect_static_linker(env, ecc) + # Very rough/strict heuristics. Would never work for actual + # compiler detection, but should be ok for the tests. + ebase = os.path.basename(evalue) + if ebase.startswith('g') or ebase.endswith(('-gcc', '-g++')): + self.assertIsInstance(ecc, gnu) + self.assertIsInstance(elinker, ar) + elif 'clang-cl' in ebase: + self.assertIsInstance(ecc, clangcl) + self.assertIsInstance(elinker, lib) + elif 'clang' in ebase: + self.assertIsInstance(ecc, clang) + self.assertIsInstance(elinker, ar) + elif ebase.startswith('ic'): + self.assertIsInstance(ecc, intel) + self.assertIsInstance(elinker, ar) + elif ebase.startswith('cl'): + self.assertIsInstance(ecc, msvc) + self.assertIsInstance(elinker, lib) + else: + self.fail(f'Unknown compiler {evalue!r}') + # Check that we actually used the evalue correctly as the compiler + self.assertEqual(ecc.get_exelist(), split_args(evalue)) + # Do auto-detection of compiler based on platform, PATH, etc. - cc = compiler_from_language(env, lang, MachineChoice.HOST) - self.assertTrue(cc.version) - linker = detect_static_linker(env, cc) - # Check compiler type - if isinstance(cc, gnu): - self.assertIsInstance(linker, ar) - if is_osx(): - self.assertIsInstance(cc.linker, linkers.AppleDynamicLinker) - elif is_sunos(): - self.assertIsInstance(cc.linker, (linkers.SolarisDynamicLinker, linkers.GnuLikeDynamicLinkerMixin)) - else: - self.assertIsInstance(cc.linker, linkers.GnuLikeDynamicLinkerMixin) - if isinstance(cc, clangcl): - self.assertIsInstance(linker, lib) - self.assertIsInstance(cc.linker, linkers.ClangClDynamicLinker) - if isinstance(cc, clang): - self.assertIsInstance(linker, ar) - if is_osx(): - self.assertIsInstance(cc.linker, linkers.AppleDynamicLinker) - elif is_windows(): - # This is clang, not clang-cl. This can be either an - # ld-like linker of link.exe-like linker (usually the - # former for msys2, the latter otherwise) - self.assertIsInstance(cc.linker, (linkers.MSVCDynamicLinker, linkers.GnuLikeDynamicLinkerMixin)) - elif is_sunos(): - self.assertIsInstance(cc.linker, (linkers.SolarisDynamicLinker, linkers.GnuLikeDynamicLinkerMixin)) - else: - self.assertIsInstance(cc.linker, linkers.GnuLikeDynamicLinkerMixin) - if isinstance(cc, intel): - self.assertIsInstance(linker, ar) - if is_osx(): - self.assertIsInstance(cc.linker, linkers.AppleDynamicLinker) - elif is_windows(): - self.assertIsInstance(cc.linker, linkers.XilinkDynamicLinker) - else: - self.assertIsInstance(cc.linker, linkers.GnuDynamicLinker) - if isinstance(cc, msvc): - self.assertTrue(is_windows()) - self.assertIsInstance(linker, lib) - self.assertEqual(cc.id, 'msvc') - self.assertTrue(hasattr(cc, 'is_64')) - self.assertIsInstance(cc.linker, linkers.MSVCDynamicLinker) - # If we're on Windows CI, we know what the compiler will be - if 'arch' in os.environ: - if os.environ['arch'] == 'x64': - self.assertTrue(cc.is_64) + with self.subTest(lang=lang): + try: + cc = compiler_from_language(env, lang, MachineChoice.HOST) + except EnvironmentException: + # always raise in ci, we expect to have a valid ObjC and ObjC++ compiler of some kind + if is_ci(): + self.fail(f'Could not find a compiler for {lang}') + if sys.version_info < (3, 11): + continue + self.skipTest(f'No valid compiler for {lang}.') + assert cc is not None, "Something went really wrong" + self.assertTrue(cc.version) + linker = detect_static_linker(env, cc) + # Check compiler type + if isinstance(cc, gnu): + self.assertIsInstance(linker, ar) + if is_osx(): + self.assertIsInstance(cc.linker, linkers.AppleDynamicLinker) + elif is_sunos(): + self.assertIsInstance(cc.linker, (linkers.SolarisDynamicLinker, linkers.GnuLikeDynamicLinkerMixin)) + else: + self.assertIsInstance(cc.linker, linkers.GnuLikeDynamicLinkerMixin) + if isinstance(cc, clangcl): + self.assertIsInstance(linker, lib) + self.assertIsInstance(cc.linker, linkers.ClangClDynamicLinker) + if isinstance(cc, clang): + self.assertIsInstance(linker, ar) + if is_osx(): + self.assertIsInstance(cc.linker, linkers.AppleDynamicLinker) + elif is_windows(): + # This is clang, not clang-cl. This can be either an + # ld-like linker of link.exe-like linker (usually the + # former for msys2, the latter otherwise) + self.assertIsInstance(cc.linker, (linkers.MSVCDynamicLinker, linkers.GnuLikeDynamicLinkerMixin)) + elif is_sunos(): + self.assertIsInstance(cc.linker, (linkers.SolarisDynamicLinker, linkers.GnuLikeDynamicLinkerMixin)) else: - self.assertFalse(cc.is_64) + self.assertIsInstance(cc.linker, linkers.GnuLikeDynamicLinkerMixin) + if isinstance(cc, intel): + self.assertIsInstance(linker, ar) + if is_osx(): + self.assertIsInstance(cc.linker, linkers.AppleDynamicLinker) + elif is_windows(): + self.assertIsInstance(cc.linker, linkers.XilinkDynamicLinker) + else: + self.assertIsInstance(cc.linker, linkers.GnuDynamicLinker) + if isinstance(cc, msvc): + self.assertTrue(is_windows()) + self.assertIsInstance(linker, lib) + self.assertEqual(cc.id, 'msvc') + self.assertTrue(hasattr(cc, 'is_64')) + self.assertIsInstance(cc.linker, linkers.MSVCDynamicLinker) + # If we're on Windows CI, we know what the compiler will be + if 'arch' in os.environ: + if os.environ['arch'] == 'x64': + self.assertTrue(cc.is_64) + else: + self.assertFalse(cc.is_64) + # Set evar ourselves to a wrapper script that just calls the same # exelist + some argument. This is meant to test that setting # something like `ccache gcc -pipe` or `distcc ccache gcc` works. - wrapper = os.path.join(testdir, 'compiler wrapper.py') - wrappercc = python_command + [wrapper] + cc.get_exelist() + ['-DSOME_ARG'] - os.environ[evar] = ' '.join(quote_arg(w) for w in wrappercc) - - # Check static linker too - wrapperlinker = python_command + [wrapper] + linker.get_exelist() + linker.get_always_args() - os.environ['AR'] = ' '.join(quote_arg(w) for w in wrapperlinker) - - # Need a new env to re-run environment loading - env = get_fake_env(testdir, self.builddir, self.prefix) - - wcc = compiler_from_language(env, lang, MachineChoice.HOST) - wlinker = detect_static_linker(env, wcc) - # Pop it so we don't use it for the next detection - os.environ.pop('AR') - # Must be the same type since it's a wrapper around the same exelist - self.assertIs(type(cc), type(wcc)) - self.assertIs(type(linker), type(wlinker)) - # Ensure that the exelist is correct - self.assertEqual(wcc.get_exelist(), wrappercc) - self.assertEqual(wlinker.get_exelist(), wrapperlinker) - # Ensure that the version detection worked correctly - self.assertEqual(cc.version, wcc.version) - if hasattr(cc, 'is_64'): - self.assertEqual(cc.is_64, wcc.is_64) + with self.subTest('wrapper script', lang=lang): + wrapper = os.path.join(testdir, 'compiler wrapper.py') + wrappercc = python_command + [wrapper] + cc.get_exelist() + ['-DSOME_ARG'] + os.environ[evar] = ' '.join(quote_arg(w) for w in wrappercc) + + # Check static linker too + wrapperlinker = python_command + [wrapper] + linker.get_exelist() + linker.get_always_args() + os.environ['AR'] = ' '.join(quote_arg(w) for w in wrapperlinker) + + # Need a new env to re-run environment loading + env = get_fake_env(testdir, self.builddir, self.prefix) + + try: + wcc = compiler_from_language(env, lang, MachineChoice.HOST) + except EnvironmentException: + # always raise in ci, we expect to have a valid ObjC and ObjC++ compiler of some kind + if is_ci(): + self.fail(f'Could not find a compiler for {lang}') + if sys.version_info < (3, 11): + continue + self.skipTest(f'No valid compiler for {lang}.') + wlinker = detect_static_linker(env, wcc) + del os.environ['AR'] + + # Must be the same type since it's a wrapper around the same exelist + self.assertIs(type(cc), type(wcc)) + self.assertIs(type(linker), type(wlinker)) + + # Ensure that the exelist is correct + self.assertEqual(wcc.get_exelist(), wrappercc) + self.assertEqual(wlinker.get_exelist(), wrapperlinker) + + # Ensure that the version detection worked correctly + self.assertEqual(cc.version, wcc.version) + if hasattr(cc, 'is_64'): + self.assertEqual(cc.is_64, wcc.is_64) def test_always_prefer_c_compiler_for_asm(self): testdir = os.path.join(self.common_test_dir, '133 c cpp and asm')