Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package meson for openSUSE:Factory checked in at 2021-01-22 21:48:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/meson (Old) and /work/SRC/openSUSE:Factory/.meson.new.28504 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "meson" Fri Jan 22 21:48:59 2021 rev:67 rq:863732 version:0.56.2 Changes: -------- --- /work/SRC/openSUSE:Factory/meson/meson.changes 2020-11-17 21:25:04.397365181 +0100 +++ /work/SRC/openSUSE:Factory/.meson.new.28504/meson.changes 2021-01-22 21:49:01.185567906 +0100 @@ -1,0 +2,23 @@ +Sat Jan 16 13:05:47 UTC 2021 - Bj??rn Lie <bjorn....@gmail.com> + +- Update to version 0.56.2: + + This release fixes a Python 3.5 compat issue. + +------------------------------------------------------------------- +Thu Jan 7 13:00:11 UTC 2021 - Bj??rn Lie <bjorn....@gmail.com> + +- Drop meson-suse-ify-macros.patch: No longer needed. + +------------------------------------------------------------------- +Wed Jan 6 11:32:14 UTC 2021 - Dominique Leuenberger <dims...@opensuse.org> + +- Update to version 0.56.1: + + pkgconfig: Make external deps of static library public. + + interpreter: store correct files for project regeneration. + + environment: Properly pass linker to rustc. + + Add aarch64 assembly test. +- Drop 7930.patch: fixed upstream. +- Add new keyid C24E631BABB1FE70 to the keyring (counter signed by + the old key id): the old key was about to expire. + +------------------------------------------------------------------- Old: ---- 7930.patch meson-0.56.0.tar.gz meson-0.56.0.tar.gz.asc meson-suse-ify-macros.patch New: ---- meson-0.56.2.tar.gz meson-0.56.2.tar.gz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ meson.spec ++++++ --- /var/tmp/diff_new_pack.pyVfKp/_old 2021-01-22 21:49:01.813568797 +0100 +++ /var/tmp/diff_new_pack.pyVfKp/_new 2021-01-22 21:49:01.817568802 +0100 @@ -1,7 +1,7 @@ # # spec file for package meson # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -28,7 +28,7 @@ %{!?vim_data_dir:%global vim_data_dir %{_datadir}/vim} %bcond_with setuptools Name: meson%{name_ext} -Version: 0.56.0 +Version: 0.56.2 Release: 0 Summary: Python-based build system License: Apache-2.0 @@ -37,14 +37,10 @@ Source: https://github.com/%{_name}/meson/releases/download/%{version}/meson-%{version}.tar.gz Source1: https://github.com/%{_name}/meson/releases/download/%{version}/meson-%{version}.tar.gz.asc Source2: meson.keyring -# PATCH-FIX-OPENSUSE meson-suse-ify-macros.patch dims...@opensuse.org -- Make the macros non-RedHat specific: so far there are no separate {C,CXX,F}FLAGS. -Patch0: meson-suse-ify-macros.patch # PATCH-FIX-OPENSUSE meson-test-installed-bin.patch dims...@opensuse.org -- We want the test suite to run against /usr/bin/meson coming from our meson package. Patch1: meson-test-installed-bin.patch # PATCH-FEATURE-OPENSUSE meson-distutils.patch tchva...@suse.com -- build and install using distutils instead of full setuptools Patch2: meson-distutils.patch -# PATCH-FIX-UPSTREAM 7930.patch -- pkgconfig: Make external deps of static library public -Patch3: https://patch-diff.githubusercontent.com/raw/mesonbuild/meson/pull/7930.patch BuildRequires: fdupes BuildRequires: python-rpm-macros BuildRequires: python3-base @@ -159,12 +155,10 @@ %prep %setup -q -n meson-%{version} -%patch0 -p1 %patch1 -p1 %if !%{with setuptools} %patch2 -p1 %endif -%patch3 -p1 # We do not have gmock available at this moment - can't run the test suite for it rm -r "test cases/frameworks/3 gmock" \ ++++++ meson-0.56.0.tar.gz -> meson-0.56.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/PKG-INFO new/meson-0.56.2/PKG-INFO --- old/meson-0.56.0/PKG-INFO 2020-10-30 09:26:05.839237700 +0100 +++ new/meson-0.56.2/PKG-INFO 2021-01-10 13:49:51.051664400 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: meson -Version: 0.56.0 +Version: 0.56.2 Summary: A high performance build system Home-page: https://mesonbuild.com Author: Jussi Pakkanen diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/README.md new/meson-0.56.2/README.md --- old/meson-0.56.0/README.md 2020-08-15 18:27:05.000000000 +0200 +++ new/meson-0.56.2/README.md 2021-01-09 11:14:21.000000000 +0100 @@ -7,7 +7,6 @@ #### Status [](https://pypi.python.org/pypi/meson) -[](https://travis-ci.org/mesonbuild/meson) [](https://dev.azure.com/jussi0947/jussi/_build/latest?definitionId=1) [](https://codecov.io/gh/mesonbuild/meson/branch/master) [](https://lgtm.com/projects/g/mesonbuild/meson/context:python) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/cross/linux-mingw-w64-32bit.txt new/meson-0.56.2/cross/linux-mingw-w64-32bit.txt --- old/meson-0.56.0/cross/linux-mingw-w64-32bit.txt 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/cross/linux-mingw-w64-32bit.txt 2021-01-06 00:18:35.000000000 +0100 @@ -1,12 +1,14 @@ [binaries] c = '/usr/bin/i686-w64-mingw32-gcc' cpp = '/usr/bin/i686-w64-mingw32-g++' +objc = '/usr/bin/i686-w64-mingw32-gcc' ar = '/usr/bin/i686-w64-mingw32-ar' strip = '/usr/bin/i686-w64-mingw32-strip' pkgconfig = '/usr/bin/i686-w64-mingw32-pkg-config' windres = '/usr/bin/i686-w64-mingw32-windres' exe_wrapper = 'wine' ld = '/usr/bin/i686-w64-mingw32-ld' +cmake = '/usr/bin/cmake' [properties] # Directory that contains 'bin', 'lib', etc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/cross/linux-mingw-w64-64bit.txt new/meson-0.56.2/cross/linux-mingw-w64-64bit.txt --- old/meson-0.56.0/cross/linux-mingw-w64-64bit.txt 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/cross/linux-mingw-w64-64bit.txt 2021-01-06 00:18:35.000000000 +0100 @@ -1,11 +1,13 @@ [binaries] c = '/usr/bin/x86_64-w64-mingw32-gcc' cpp = '/usr/bin/x86_64-w64-mingw32-g++' +objc = '/usr/bin/x86_64-w64-mingw32-gcc' ar = '/usr/bin/x86_64-w64-mingw32-ar' strip = '/usr/bin/x86_64-w64-mingw32-strip' pkgconfig = '/usr/bin/x86_64-w64-mingw32-pkg-config' windres = '/usr/bin/x86_64-w64-mingw32-windres' exe_wrapper = 'wine64' +cmake = '/usr/bin/cmake' [properties] # Directory that contains 'bin', 'lib', etc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/man/meson.1 new/meson-0.56.2/man/meson.1 --- old/meson-0.56.0/man/meson.1 2020-10-18 23:33:00.000000000 +0200 +++ new/meson-0.56.2/man/meson.1 2021-01-09 23:56:47.000000000 +0100 @@ -1,4 +1,4 @@ -.TH MESON "1" "October 2020" "meson 0.56.0" "User Commands" +.TH MESON "1" "January 2021" "meson 0.56.2" "User Commands" .SH NAME meson - a high productivity build system .SH DESCRIPTION diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/meson.egg-info/PKG-INFO new/meson-0.56.2/meson.egg-info/PKG-INFO --- old/meson-0.56.0/meson.egg-info/PKG-INFO 2020-10-30 09:25:47.000000000 +0100 +++ new/meson-0.56.2/meson.egg-info/PKG-INFO 2021-01-10 13:49:44.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: meson -Version: 0.56.0 +Version: 0.56.2 Summary: A high performance build system Home-page: https://mesonbuild.com Author: Jussi Pakkanen diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/meson.egg-info/SOURCES.txt new/meson-0.56.2/meson.egg-info/SOURCES.txt --- old/meson-0.56.0/meson.egg-info/SOURCES.txt 2020-10-30 09:25:48.000000000 +0100 +++ new/meson-0.56.2/meson.egg-info/SOURCES.txt 2021-01-10 13:49:44.000000000 +0100 @@ -363,6 +363,12 @@ test cases/cmake/23 cmake toolchain/meson.build test cases/cmake/23 cmake toolchain/nativefile.ini.in test cases/cmake/23 cmake toolchain/subprojects/cmMod/CMakeLists.txt +test cases/cmake/24 mixing languages/main.c +test cases/cmake/24 mixing languages/meson.build +test cases/cmake/24 mixing languages/subprojects/cmTest/CMakeLists.txt +test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.c +test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.h +test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.m test cases/cmake/3 advanced no dep/main.cpp test cases/cmake/3 advanced no dep/meson.build test cases/cmake/3 advanced no dep/test.json @@ -3093,6 +3099,10 @@ test cases/unit/84 change option choices/meson.build test cases/unit/84 change option choices/meson_options.1.txt test cases/unit/84 change option choices/meson_options.2.txt +test cases/unit/85 nested subproject regenerate depends/main.c +test cases/unit/85 nested subproject regenerate depends/meson.build +test cases/unit/85 nested subproject regenerate depends/subprojects/sub1/meson.build +test cases/unit/85 nested subproject regenerate depends/subprojects/sub2/CMakeLists.txt test cases/unit/9 d dedup/meson.build test cases/unit/9 d dedup/prog.c test cases/vala/1 basic/meson.build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/backend/ninjabackend.py new/meson-0.56.2/mesonbuild/backend/ninjabackend.py --- old/meson-0.56.0/mesonbuild/backend/ninjabackend.py 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/mesonbuild/backend/ninjabackend.py 2021-01-06 11:39:48.000000000 +0100 @@ -1489,7 +1489,7 @@ self.create_target_source_introspection(target, valac, args, all_files, []) return other_src[0], other_src[1], vala_c_src - def generate_rust_target(self, target): + def generate_rust_target(self, target: build.BuildTarget) -> None: rustc = target.compilers['rust'] # Rust compiler takes only the main file as input and # figures out what other files are needed via import @@ -1533,7 +1533,8 @@ depfile = os.path.join(target.subdir, target.name + '.d') args += ['--emit', 'dep-info={}'.format(depfile), '--emit', 'link'] args += target.get_extra_args('rust') - args += ['-o', os.path.join(target.subdir, target.get_filename())] + args += rustc.get_output_args(os.path.join(target.subdir, target.get_filename())) + args += self.environment.coredata.get_external_args(target.for_machine, rustc.language) orderdeps = [os.path.join(t.subdir, t.get_filename()) for t in target.link_targets] linkdirs = OrderedDict() for d in target.link_targets: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/build.py new/meson-0.56.2/mesonbuild/build.py --- old/meson-0.56.0/mesonbuild/build.py 2020-10-26 12:18:42.000000000 +0100 +++ new/meson-0.56.2/mesonbuild/build.py 2021-01-06 11:39:48.000000000 +0100 @@ -1359,11 +1359,12 @@ for link_target in self.link_targets: if isinstance(link_target, SharedModule): if self.environment.machines[self.for_machine].is_darwin(): - raise MesonException('''target links against shared modules. -This is not permitted on OSX''') + raise MesonException( + 'target links against shared modules. This is not permitted on OSX') else: - mlog.warning('''target links against shared modules. This is not -recommended as it is not supported on some platforms''') + mlog.warning('target links against shared modules. This ' + 'is not recommended as it is not supported on some ' + 'platforms') return class Generator: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/cmake/interpreter.py new/meson-0.56.2/mesonbuild/cmake/interpreter.py --- old/meson-0.56.0/mesonbuild/cmake/interpreter.py 2020-10-26 12:18:42.000000000 +0100 +++ new/meson-0.56.2/mesonbuild/cmake/interpreter.py 2021-01-09 11:14:21.000000000 +0100 @@ -231,7 +231,7 @@ if target.install_paths: self.install_dir = target.install_paths[0] - self.languages = [] # type: T.List[str] + self.languages = set() # type: T.Set[str] self.sources = [] # type: T.List[Path] self.generated = [] # type: T.List[Path] self.generated_ctgt = [] # type: T.List[CustomTargetReference] @@ -250,19 +250,40 @@ self.name = _sanitize_cmake_name(self.name) self.generated_raw = [] # type: T.List[Path] + for i in target.files: - # Determine the meson language + languages = set() # type: T.Set[str] + src_suffixes = set() # type: T.Set[str] + + # Insert suffixes + for j in i.sources: + if not j.suffix: + continue + src_suffixes.add(j.suffix[1:]) + + # Determine the meson language(s) + # Extract the default language from the explicit CMake field lang_cmake_to_meson = {val.lower(): key for key, val in language_map.items()} - lang = lang_cmake_to_meson.get(i.language.lower(), 'c') - if lang not in self.languages: - self.languages += [lang] - if lang not in self.compile_opts: - self.compile_opts[lang] = [] + languages.add(lang_cmake_to_meson.get(i.language.lower(), 'c')) + + # Determine missing languages from the source suffixes + for sfx in src_suffixes: + for key, val in lang_suffixes.items(): + if sfx in val: + languages.add(key) + break + + # Register the new languages and initialize the compile opts array + for lang in languages: + self.languages.add(lang) + if lang not in self.compile_opts: + self.compile_opts[lang] = [] # Add arguments, but avoid duplicates args = i.flags args += ['-D{}'.format(x) for x in i.defines] - self.compile_opts[lang] += [x for x in args if x not in self.compile_opts[lang]] + for lang in languages: + self.compile_opts[lang] += [x for x in args if x not in self.compile_opts[lang]] # Handle include directories self.includes += [x.path for x in i.includes if x.path not in self.includes and not x.isSystem] @@ -502,6 +523,20 @@ self.link_libraries = [x for x in self.link_libraries if x.lower() not in blacklist_link_libs] self.link_flags = [x for x in self.link_flags if check_flag(x)] + # Handle OSX frameworks + def handle_frameworks(flags: T.List[str]) -> T.List[str]: + res = [] # type: T.List[str] + for i in flags: + p = Path(i) + if not p.exists() or not p.name.endswith('.framework'): + res += [i] + continue + res += ['-framework', p.stem] + return res + + self.link_libraries = handle_frameworks(self.link_libraries) + self.link_flags = handle_frameworks(self.link_flags) + # Handle explicit CMake add_dependency() calls for i in self.depends_raw: dep_tgt = output_target_map.target(i) @@ -850,6 +885,7 @@ def configure(self, extra_cmake_options: T.List[str]) -> CMakeExecutor: # Find CMake + # TODO: Using MachineChoice.BUILD should always be correct here, but also evaluate the use of self.for_machine cmake_exe = CMakeExecutor(self.env, '>=3.7', MachineChoice.BUILD) if not cmake_exe.found(): raise CMakeException('Unable to find CMake') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/compilers/c.py new/meson-0.56.2/mesonbuild/compilers/c.py --- old/meson-0.56.0/mesonbuild/compilers/c.py 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/mesonbuild/compilers/c.py 2021-01-06 11:39:48.000000000 +0100 @@ -428,7 +428,11 @@ def get_options(self) -> 'OptionDictType': opts = super().get_options() - c_stds = ['none', 'c89', 'c99', 'c11'] + c_stds = ['none', 'c89', 'c99', 'c11', + # Need to have these to be compatible with projects + # that set c_std to e.g. gnu99. + # https://github.com/mesonbuild/meson/issues/7611 + 'gnu89', 'gnu90', 'gnu9x', 'gnu99', 'gnu1x', 'gnu11'] opts.update({ 'std': coredata.UserComboOption( 'C language standard to use', @@ -442,8 +446,8 @@ args = [] std = options['std'] # As of MVSC 16.7, /std:c11 is the only valid C standard option. - if std.value in {'c11'}: - args.append('/std:' + std.value) + if std.value in {'c11', 'gnu11'}: + args.append('/std:c11') return args @@ -458,6 +462,25 @@ full_version=full_version) ClangClCompiler.__init__(self, target) + def get_options(self) -> 'OptionDictType': + # Clang-cl can compile up to c99, but doesn't have a std-swtich for + # them. Unlike recent versions of MSVC it doesn't (as of 10.0.1) + # support c11 + opts = super().get_options() + c_stds = ['none', 'c89', 'c99', + # Need to have these to be compatible with projects + # that set c_std to e.g. gnu99. + # https://github.com/mesonbuild/meson/issues/7611 + 'gnu89', 'gnu90', 'gnu9x', 'gnu99'] + opts.update({ + 'std': coredata.UserComboOption( + 'C language standard to use', + c_stds, + 'none', + ), + }) + return opts + class IntelClCCompiler(IntelVisualStudioLikeCompiler, VisualStudioLikeCCompilerMixin, CCompiler): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/compilers/compilers.py new/meson-0.56.2/mesonbuild/compilers/compilers.py --- old/meson-0.56.0/mesonbuild/compilers/compilers.py 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/mesonbuild/compilers/compilers.py 2021-01-06 11:39:48.000000000 +0100 @@ -785,7 +785,7 @@ # On Windows antivirus programs and the like hold on to files so # they can't be deleted. There's not much to do in this case. Also, # catch OSError because the directory is then no longer empty. - yield None + return @contextlib.contextmanager def cached_compile(self, code: str, cdata: coredata.CoreData, *, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/compilers/mixins/emscripten.py new/meson-0.56.2/mesonbuild/compilers/mixins/emscripten.py --- old/meson-0.56.0/mesonbuild/compilers/mixins/emscripten.py 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/mesonbuild/compilers/mixins/emscripten.py 2021-01-06 11:39:48.000000000 +0100 @@ -50,7 +50,7 @@ def thread_link_flags(self, env: 'Environment') -> T.List[str]: args = ['-s', 'USE_PTHREADS=1'] - count = env.coredata.compiler_options[self.for_machine]['{}_thread_count'.format(self.language)].value # type: int + count = env.coredata.compiler_options[self.for_machine][self.language]['thread_count'].value # type: int if count: args.extend(['-s', 'PTHREAD_POOL_SIZE={}'.format(count)]) return args @@ -58,7 +58,7 @@ def get_options(self) -> 'coredata.OptionDictType': opts = super().get_options() opts.update({ - '{}_thread_count'.format(self.language): coredata.UserIntegerOption( + 'thread_count': coredata.UserIntegerOption( 'Number of threads to use in web assembly, set to 0 to disable', (0, None, 4), # Default was picked at random ), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/compilers/rust.py new/meson-0.56.2/mesonbuild/compilers/rust.py --- old/meson-0.56.0/mesonbuild/compilers/rust.py 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/mesonbuild/compilers/rust.py 2021-01-06 11:39:48.000000000 +0100 @@ -119,6 +119,10 @@ def get_output_args(self, outputname: str) -> T.List[str]: return ['-o', outputname] + @classmethod + def use_linker_args(cls, linker: str) -> T.List[str]: + return ['-C', 'linker={}'.format(linker)] + # Rust does not have a use_linker_args because it dispatches to a gcc-like # C compiler for dynamic linking, as such we invoke the C compiler's # use_linker_args method instead. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/coredata.py new/meson-0.56.2/mesonbuild/coredata.py --- old/meson-0.56.0/mesonbuild/coredata.py 2020-10-30 09:24:38.000000000 +0100 +++ new/meson-0.56.2/mesonbuild/coredata.py 2021-01-09 23:56:47.000000000 +0100 @@ -39,7 +39,7 @@ OptionDictType = T.Union[T.Dict[str, 'UserOption[T.Any]'], OptionOverrideProxy] CompilerCheckCacheKey = T.Tuple[T.Tuple[str, ...], str, str, T.Tuple[str, ...], str] -version = '0.56.0' +version = '0.56.2' backendlist = ['ninja', 'vs', 'vs2010', 'vs2015', 'vs2017', 'vs2019', 'xcode'] default_yielding = False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/dependencies/base.py new/meson-0.56.2/mesonbuild/dependencies/base.py --- old/meson-0.56.0/mesonbuild/dependencies/base.py 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/mesonbuild/dependencies/base.py 2021-01-06 11:39:48.000000000 +0100 @@ -1087,10 +1087,11 @@ # AttributeError exceptions in derived classes self.traceparser = None # type: CMakeTraceParser - self.cmakebin = CMakeExecutor(environment, CMakeDependency.class_cmake_version, MachineChoice.BUILD, silent=self.silent) + # TODO further evaluate always using MachineChoice.BUILD + self.cmakebin = CMakeExecutor(environment, CMakeDependency.class_cmake_version, self.for_machine, silent=self.silent) if not self.cmakebin.found(): self.cmakebin = None - msg = 'No CMake binary for machine {} not found. Giving up.'.format(MachineChoice.BUILD) + msg = 'No CMake binary for machine {} not found. Giving up.'.format(self.for_machine) if self.required: raise DependencyException(msg) mlog.debug(msg) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/environment.py new/meson-0.56.2/mesonbuild/environment.py --- old/meson-0.56.0/mesonbuild/environment.py 2020-10-30 09:17:30.000000000 +0100 +++ new/meson-0.56.2/mesonbuild/environment.py 2021-01-06 11:39:48.000000000 +0100 @@ -129,6 +129,9 @@ VisualStudioCPPCompiler, ) +if T.TYPE_CHECKING: + from .dependencies import ExternalProgram + build_filename = 'meson.build' CompilersDict = T.Dict[str, Compiler] @@ -869,7 +872,7 @@ defines[rest[0]] = rest[1] return defines - def _get_compilers(self, lang, for_machine): + def _get_compilers(self, lang: str, for_machine: MachineChoice) -> T.Tuple[T.List[T.List[str]], T.List[str], T.Optional['ExternalProgram']]: ''' The list of compilers is detected in the exact same way for C, C++, ObjC, ObjC++, Fortran, CS so consolidate it here. @@ -1062,9 +1065,17 @@ self.__failed_to_detect_linker(compiler, check_args, o, e) return linker - def _detect_c_or_cpp_compiler(self, lang: str, for_machine: MachineChoice) -> Compiler: + def _detect_c_or_cpp_compiler(self, lang: str, for_machine: MachineChoice, *, override_compiler: T.Optional[T.List[str]] = None) -> Compiler: + """Shared implementation for finding the C or C++ compiler to use. + + the override_compiler option is provided to allow compilers which use + the compiler (GCC or Clang usually) as their shared linker, to find + the linker they need. + """ popen_exceptions = {} compilers, ccache, exe_wrap = self._get_compilers(lang, for_machine) + if override_compiler is not None: + compilers = [override_compiler] is_cross = self.is_cross_build(for_machine) info = self.machines[for_machine] @@ -1619,9 +1630,9 @@ return comp_class(exelist, version, for_machine, info, is_cross) raise EnvironmentException('Unknown compiler "' + ' '.join(exelist) + '"') - def detect_rust_compiler(self, for_machine): - popen_exceptions = {} - compilers, ccache, exe_wrap = self._get_compilers('rust', for_machine) + def detect_rust_compiler(self, for_machine: MachineChoice) -> RustCompiler: + popen_exceptions = {} # type: T.Dict[str, Exception] + compilers, _, exe_wrap = self._get_compilers('rust', for_machine) is_cross = self.is_cross_build(for_machine) info = self.machines[for_machine] @@ -1634,7 +1645,7 @@ compiler = [compiler] arg = ['--version'] try: - p, out = Popen_safe(compiler + arg)[0:2] + out = Popen_safe(compiler + arg)[1] except OSError as e: popen_exceptions[' '.join(compiler + arg)] = e continue @@ -1651,17 +1662,30 @@ # the default use that, and second add the necessary arguments # to rust to use -fuse-ld + if any(a.startswith('linker=') for a in compiler): + mlog.warning( + 'Please do not put -C linker= in your compiler ' + 'command, set rust_ld=command in your cross file ' + 'or use the RUST_LD environment variable. meson ' + 'will override your seletion otherwise.') + if override is None: extra_args = {} always_args = [] if is_link_exe: - compiler.extend(['-C', 'linker={}'.format(cc.linker.exelist[0])]) + compiler.extend(RustCompiler.use_linker_args(cc.linker.exelist[0])) extra_args['direct'] = True extra_args['machine'] = cc.linker.machine - elif not ((info.is_darwin() and isinstance(cc, AppleClangCCompiler)) or - isinstance(cc, GnuCCompiler)): - c = cc.exelist[1] if cc.exelist[0].endswith('ccache') else cc.exelist[0] - compiler.extend(['-C', 'linker={}'.format(c)]) + else: + exelist = cc.linker.exelist.copy() + if 'ccache' in exelist[0]: + del exelist[0] + c = exelist.pop(0) + compiler.extend(RustCompiler.use_linker_args(c)) + + # Also ensure that we pass any extra arguments to the linker + for l in exelist: + compiler.extend(['-C', 'link-arg={}'.format(l)]) # This trickery with type() gets us the class of the linker # so we can initialize a new copy for the Rust Compiler @@ -1675,21 +1699,22 @@ elif 'link' in override[0]: linker = self._guess_win_linker( override, RustCompiler, for_machine, use_linker_prefix=False) + # rustc takes linker arguments without a prefix, and + # inserts the correct prefix itself. linker.direct = True + compiler.extend(RustCompiler.use_linker_args(linker.exelist[0])) else: - # We're creating a new type of "C" compiler, that has rust - # as it's language. This is gross, but I can't figure out - # another way to handle this, because rustc is actually - # invoking the c compiler as it's linker. - b = type('b', (type(cc), ), {}) - b.language = RustCompiler.language - linker = self._guess_nix_linker(cc.exelist, b, for_machine) + # On linux and macos rust will invoke the c compiler for + # linking, on windows it will use lld-link or link.exe. + # we will simply ask for the C compiler that coresponds to + # it, and use that. + cc = self._detect_c_or_cpp_compiler('c', for_machine, override_compiler=override) + linker = cc.linker # Of course, we're not going to use any of that, we just # need it to get the proper arguments to pass to rustc - c = cc.exelist[1] if cc.exelist[0].endswith('ccache') else cc.exelist[0] - compiler.extend(['-C', 'linker={}'.format(c)]) - compiler.extend(['-C', 'link-args={}'.format(' '.join(cc.use_linker_args(override[0])))]) + c = linker.exelist[1] if linker.exelist[0].endswith('ccache') else linker.exelist[0] + compiler.extend(RustCompiler.use_linker_args(c)) self.coredata.add_lang_args(RustCompiler.language, RustCompiler, for_machine, self) return RustCompiler( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/interpreter.py new/meson-0.56.2/mesonbuild/interpreter.py --- old/meson-0.56.0/mesonbuild/interpreter.py 2020-10-26 12:18:42.000000000 +0100 +++ new/meson-0.56.2/mesonbuild/interpreter.py 2021-01-06 11:39:48.000000000 +0100 @@ -2383,6 +2383,7 @@ default_project_options: T.Optional[T.Dict[str, str]] = None, mock: bool = False, ast: T.Optional[mparser.CodeBlockNode] = None, + is_translated: bool = False, ) -> None: super().__init__(build.environment.get_source_dir(), subdir, subproject) self.an_unpicklable_object = mesonlib.an_unpicklable_object @@ -2421,8 +2422,16 @@ self.default_project_options = {} self.project_default_options = {} self.build_func_dict() + # build_def_files needs to be defined before parse_project is called - self.build_def_files = [os.path.join(self.subdir, environment.build_filename)] + # + # For non-meson subprojects, we'll be using the ast. Even if it does + # exist we don't want to add a dependency on it, it's autogenerated + # from the actual build files, and is just for reference. + self.build_def_files = [] + build_filename = os.path.join(self.subdir, environment.build_filename) + if not is_translated: + self.build_def_files.append(build_filename) if not mock: self.parse_project() self._redetect_machines() @@ -2690,7 +2699,7 @@ varlist = mesonlib.stringlistify(variables) if list_new: FeatureNew.single_use('variables as list of strings', '0.56.0', self.subproject) - variables = {} + variables = collections.OrderedDict() for v in varlist: try: (key, value) = v.split('=', 1) @@ -2941,11 +2950,14 @@ return self.disabled_subproject(subp_name, exception=e) raise e - def _do_subproject_meson(self, subp_name, subdir, default_options, kwargs, ast=None, build_def_files=None): + def _do_subproject_meson(self, subp_name: str, subdir: str, default_options, kwargs, + ast: T.Optional[mparser.CodeBlockNode] = None, + build_def_files: T.Optional[T.List[str]] = None, + is_translated: bool = False) -> SubprojectHolder: with mlog.nested(): new_build = self.build.copy() subi = Interpreter(new_build, self.backend, subp_name, subdir, self.subproject_dir, - self.modules, default_options, ast=ast) + self.modules, default_options, ast=ast, is_translated=is_translated) subi.subprojects = self.subprojects subi.subproject_stack = self.subproject_stack + [subp_name] @@ -2971,8 +2983,8 @@ # Duplicates are possible when subproject uses files from project root if build_def_files: self.build_def_files = list(set(self.build_def_files + build_def_files)) - else: - self.build_def_files = list(set(self.build_def_files + subi.build_def_files)) + # We always need the subi.build_def_files, to propgate sub-sub-projects + self.build_def_files = list(set(self.build_def_files + subi.build_def_files)) self.build.merge(subi.build) self.build.subprojects[subp_name] = subi.project_version self.summary.update(subi.summary) @@ -3016,7 +3028,7 @@ mlog.cmd_ci_include(meson_filename) mlog.log() - result = self._do_subproject_meson(subp_name, subdir, default_options, kwargs, ast, cm_int.bs_files) + result = self._do_subproject_meson(subp_name, subdir, default_options, kwargs, ast, cm_int.bs_files, is_translated=True) result.cm_interpreter = cm_int mlog.log() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/linkers.py new/meson-0.56.2/mesonbuild/linkers.py --- old/meson-0.56.0/mesonbuild/linkers.py 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/mesonbuild/linkers.py 2021-01-06 11:39:48.000000000 +0100 @@ -1219,8 +1219,13 @@ return ([], set()) processed_rpaths = prepare_rpaths(rpath_paths, build_dir, from_dir) all_paths = mesonlib.OrderedSet([os.path.join('$ORIGIN', p) for p in processed_rpaths]) + rpath_dirs_to_remove = set() + for p in all_paths: + rpath_dirs_to_remove.add(p.encode('utf8')) if build_rpath != '': all_paths.add(build_rpath) + for p in build_rpath.split(':'): + rpath_dirs_to_remove.add(p.encode('utf8')) # In order to avoid relinking for RPATH removal, the binary needs to contain just # enough space in the ELF header to hold the final installation RPATH. @@ -1231,7 +1236,7 @@ paths = padding else: paths = paths + ':' + padding - return (self._apply_prefix('-rpath,{}'.format(paths)), set()) + return (self._apply_prefix('-rpath,{}'.format(paths)), rpath_dirs_to_remove) def get_soname_args(self, env: 'Environment', prefix: str, shlib_name: str, suffix: str, soversion: str, darwin_versions: T.Tuple[str, str], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/modules/pkgconfig.py new/meson-0.56.2/mesonbuild/modules/pkgconfig.py --- old/meson-0.56.0/mesonbuild/modules/pkgconfig.py 2020-10-26 12:18:42.000000000 +0100 +++ new/meson-0.56.2/mesonbuild/modules/pkgconfig.py 2021-01-06 11:39:48.000000000 +0100 @@ -131,7 +131,7 @@ if obj.found(): processed_libs += obj.get_link_args() processed_cflags += obj.get_compile_args() - self._add_lib_dependencies(obj.libraries, obj.whole_libraries, obj.ext_deps, public) + self._add_lib_dependencies(obj.libraries, obj.whole_libraries, obj.ext_deps, public, private_external_deps=True) elif isinstance(obj, dependencies.Dependency): if obj.found(): processed_libs += obj.get_link_args() @@ -160,7 +160,7 @@ return processed_libs, processed_reqs, processed_cflags - def _add_lib_dependencies(self, link_targets, link_whole_targets, external_deps, public): + def _add_lib_dependencies(self, link_targets, link_whole_targets, external_deps, public, private_external_deps=False): add_libs = self.add_pub_libs if public else self.add_priv_libs # Recursively add all linked libraries for t in link_targets: @@ -173,7 +173,10 @@ for t in link_whole_targets: self._add_link_whole(t, public) # And finally its external dependencies - self.add_priv_libs(external_deps) + if private_external_deps: + self.add_priv_libs(external_deps) + else: + add_libs(external_deps) def _add_link_whole(self, t, public): # Don't include static libraries that we link_whole. But we still need to diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/modules/qt.py new/meson-0.56.2/mesonbuild/modules/qt.py --- old/meson-0.56.0/mesonbuild/modules/qt.py 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/mesonbuild/modules/qt.py 2020-11-22 03:19:19.000000000 +0100 @@ -236,7 +236,7 @@ if c.endswith('.qm'): ts_files.append(c.rstrip('.qm')+'.ts') else: - raise MesonException('qt.compile_translations: qresource can only contain ts files, found {}'.format(c)) + raise MesonException('qt.compile_translations: qresource can only contain qm files, found {}'.format(c)) results = self.preprocess(state, [], {'qresources': qresource, 'rcc_extra_arguments': kwargs.get('rcc_extra_arguments', [])}) self._detect_tools(state.environment, kwargs.get('method', 'auto')) translations = [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/msubprojects.py new/meson-0.56.2/mesonbuild/msubprojects.py --- old/meson-0.56.0/mesonbuild/msubprojects.py 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/mesonbuild/msubprojects.py 2021-01-06 11:39:48.000000000 +0100 @@ -85,7 +85,7 @@ return True def git_checkout(repo_dir, revision, create=False): - cmd = ['checkout', revision, '--'] + cmd = ['checkout', '--ignore-other-worktrees', revision, '--'] if create: cmd.insert('-b', 1) try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/scripts/depfixer.py new/meson-0.56.2/mesonbuild/scripts/depfixer.py --- old/meson-0.56.0/mesonbuild/scripts/depfixer.py 2020-09-18 00:00:44.000000000 +0200 +++ new/meson-0.56.2/mesonbuild/scripts/depfixer.py 2020-12-28 22:59:09.000000000 +0100 @@ -313,7 +313,7 @@ # Only add each one once. new_rpaths = OrderedSet() # type: OrderedSet[bytes] if new_rpath: - new_rpaths.add(new_rpath) + new_rpaths.update(new_rpath.split(b':')) if old_rpath: # Filter out build-only rpath entries # added by get_link_dep_subdirs() or diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/mesonbuild/wrap/wrap.py new/meson-0.56.2/mesonbuild/wrap/wrap.py --- old/meson-0.56.0/mesonbuild/wrap/wrap.py 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/mesonbuild/wrap/wrap.py 2021-01-09 11:14:21.000000000 +0100 @@ -31,7 +31,8 @@ from .._pathlib import Path from . import WrapMode from .. import coredata -from ..mesonlib import verbose_git, quiet_git, GIT, ProgressBar, MesonException +from ..mesonlib import quiet_git, GIT, ProgressBar, MesonException +from .. import mesonlib if T.TYPE_CHECKING: import http.client @@ -186,6 +187,15 @@ return wrap.directory return packagename +def verbose_git(cmd: T.List[str], workingdir: str, check: bool = False) -> bool: + ''' + Wrapper to convert GitException to WrapException caught in interpreter. + ''' + try: + return mesonlib.verbose_git(cmd, workingdir, check=check) + except mesonlib.GitException as e: + raise WrapException(str(e)) + class Resolver: def __init__(self, source_dir: str, subdir: str, wrap_mode: WrapMode = WrapMode.default) -> None: self.source_dir = source_dir diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/meson-0.56.0/run_unittests.py new/meson-0.56.2/run_unittests.py --- old/meson-0.56.0/run_unittests.py 2020-10-18 23:29:13.000000000 +0200 +++ new/meson-0.56.2/run_unittests.py 2021-01-09 11:14:21.000000000 +0100 @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from mesonbuild.compilers.objc import AppleClangObjCCompiler import time import stat import subprocess @@ -124,15 +125,6 @@ return True return False -def is_pull(): - # Travis - if os.environ.get('TRAVIS_PULL_REQUEST', 'false') != 'false': - return True - # Azure - if 'SYSTEM_PULLREQUEST_ISFORK' in os.environ: - return True - return False - def _git_init(project_dir): subprocess.check_call(['git', 'init'], cwd=project_dir, stdout=subprocess.DEVNULL) subprocess.check_call(['git', 'config', @@ -1448,43 +1440,6 @@ res = re.search(r'syn keyword mesonBuiltin(\s+\\\s\w+)+', f.read(), re.MULTILINE) defined = set([a.strip() for a in res.group().split('\\')][1:]) self.assertEqual(defined, set(chain(interp.funcs.keys(), interp.builtin.keys()))) - - @unittest.skipIf(is_pull(), 'Skipping because this is a pull request') - def test_json_grammar_syntax_highlighting(self): - ''' - Ensure that syntax highlighting JSON grammar written by TingPing was - updated for new functions in the global namespace in build files. - https://github.com/TingPing/language-meson/ - ''' - env = get_fake_env() - interp = Interpreter(FakeBuild(env), mock=True) - url = 'https://raw.githubusercontent.com/TingPing/language-meson/master/grammars/meson.json' - try: - # Use a timeout to avoid blocking forever in case the network is - # slow or unavailable in a weird way - r = urllib.request.urlopen(url, timeout=URLOPEN_TIMEOUT) - except urllib.error.URLError as e: - # Skip test when network is not available, such as during packaging - # by a distro or Flatpak - if not isinstance(e, urllib.error.HTTPError): - raise unittest.SkipTest('Network unavailable') - # Don't fail the test if github is down, but do fail if 4xx - if e.code >= 500: - raise unittest.SkipTest('Server error ' + str(e.code)) - raise e - # On Python 3.5, we must decode bytes to string. Newer versions don't require that. - grammar = json.loads(r.read().decode('utf-8', 'surrogatepass')) - for each in grammar['patterns']: - if 'name' in each and each['name'] == 'support.function.builtin.meson': - # The string is of the form: (?x)\\b(func1|func2|...\n)\\b\\s*(?=\\() and - # we convert that to [func1, func2, ...] without using regex to parse regex - funcs = set(each['match'].split('\\b(')[1].split('\n')[0].split('|')) - if 'name' in each and each['name'] == 'support.variable.meson': - # \\b(builtin1|builtin2...)\\b - builtin = set(each['match'].split('\\b(')[1].split(')\\b')[0].split('|')) - self.assertEqual(builtin, set(interp.builtin.keys())) - self.assertEqual(funcs, set(interp.funcs.keys())) - def test_all_functions_defined_in_ast_interpreter(self): ''' Ensure that the all functions defined in the Interpreter are also defined @@ -2942,20 +2897,22 @@ # the source tree leads to all kinds of trouble. with tempfile.TemporaryDirectory() as project_dir: with open(os.path.join(project_dir, 'meson.build'), 'w') as ofile: - ofile.write('''project('disttest', 'c', version : '1.4.3') -e = executable('distexe', 'distexe.c') -test('dist test', e) -subproject('vcssub', required : false) -subproject('tarballsub', required : false) -''') + ofile.write(textwrap.dedent('''\ + project('disttest', 'c', version : '1.4.3') + e = executable('distexe', 'distexe.c') + test('dist test', e) + subproject('vcssub', required : false) + subproject('tarballsub', required : false) + ''')) with open(os.path.join(project_dir, 'distexe.c'), 'w') as ofile: - ofile.write('''#include<stdio.h> + ofile.write(textwrap.dedent('''\ + #include<stdio.h> -int main(int argc, char **argv) { - printf("I am a distribution test.\\n"); - return 0; -} -''') + int main(int argc, char **argv) { + printf("I am a distribution test.\\n"); + return 0; + } + ''')) xz_distfile = os.path.join(self.distdir, 'disttest-1.4.3.tar.xz') xz_checksumfile = xz_distfile + '.sha256sum' zip_distfile = os.path.join(self.distdir, 'disttest-1.4.3.zip') @@ -3614,8 +3571,8 @@ """ tdir = os.path.join(self.unit_test_dir, '30 shared_mod linking') out = self.init(tdir) - msg = ('''WARNING: target links against shared modules. This is not -recommended as it is not supported on some platforms''') + msg = ('WARNING: target links against shared modules. This is not ' + 'recommended as it is not supported on some platforms') self.assertIn(msg, out) def test_ndebug_if_release_disabled(self): @@ -5247,6 +5204,20 @@ wrap = PackageDefinition(redirect_wrap) self.assertEqual(wrap.get('url'), 'http://invalid') + @skip_if_no_cmake + def test_nested_cmake_rebuild(self) -> None: + # This checks a bug where if a non-meson project is used as a third + # level (or deeper) subproject it doesn't cause a rebuild if the build + # files for that project are changed + testdir = os.path.join(self.unit_test_dir, '85 nested subproject regenerate depends') + cmakefile = Path(testdir) / 'subprojects' / 'sub2' / 'CMakeLists.txt' + self.init(testdir) + self.build() + with cmakefile.open('a') as f: + os.utime(str(cmakefile)) + self.assertReconfiguredBuildIsNoop() + + class FailureTests(BasePlatformTests): ''' Tests that test failure conditions. Build files here should be dynamically @@ -7250,16 +7221,18 @@ testdir = os.path.join(self.unit_test_dir, '61 identity cross') nativefile = tempfile.NamedTemporaryFile(mode='w') - nativefile.write('''[binaries] -c = ['{0}'] -'''.format(os.path.join(testdir, 'build_wrapper.py'))) + nativefile.write(textwrap.dedent('''\ + [binaries] + c = ['{0}'] + '''.format(os.path.join(testdir, 'build_wrapper.py')))) nativefile.flush() self.meson_native_file = nativefile.name crossfile = tempfile.NamedTemporaryFile(mode='w') - crossfile.write('''[binaries] -c = ['{0}'] -'''.format(os.path.join(testdir, 'host_wrapper.py'))) + crossfile.write(textwrap.dedent('''\ + [binaries] + c = ['{0}'] + '''.format(os.path.join(testdir, 'host_wrapper.py')))) crossfile.flush() self.meson_cross_file = crossfile.name @@ -7272,9 +7245,10 @@ 'CC_FOR_BUILD': '"' + os.path.join(testdir, 'build_wrapper.py') + '"', } crossfile = tempfile.NamedTemporaryFile(mode='w') - crossfile.write('''[binaries] -c = ['{0}'] -'''.format(os.path.join(testdir, 'host_wrapper.py'))) + crossfile.write(textwrap.dedent('''\ + [binaries] + c = ['{0}'] + '''.format(os.path.join(testdir, 'host_wrapper.py')))) crossfile.flush() self.meson_cross_file = crossfile.name # TODO should someday be explicit about build platform only here @@ -7320,6 +7294,11 @@ with mock.patch.dict(os.environ, {envvar: name}): env = get_fake_env() comp = getattr(env, 'detect_{}_compiler'.format(lang))(MachineChoice.HOST) + if isinstance(comp, (mesonbuild.compilers.AppleClangCCompiler, + mesonbuild.compilers.AppleClangCPPCompiler, + mesonbuild.compilers.AppleClangObjCCompiler, + mesonbuild.compilers.AppleClangObjCPPCompiler)): + raise unittest.SkipTest('AppleClang is currently only supported with ld64') if lang != 'rust' and comp.use_linker_args('bfd') == []: raise unittest.SkipTest( 'Compiler {} does not support using alternative linkers'.format(comp.id)) @@ -7335,8 +7314,9 @@ self._check_ld('ld.lld', 'lld', 'c', 'ld.lld') @skip_if_not_language('rust') + @skipIfNoExecutable('ld.gold') # need an additional check here because _check_ld checks for gcc def test_ld_environment_variable_rust(self): - self._check_ld('ld.gold', 'gold', 'rust', 'ld.gold') + self._check_ld('gcc', 'gcc -fuse-ld=gold', 'rust', 'ld.gold') def test_ld_environment_variable_cpp(self): self._check_ld('ld.gold', 'gold', 'cpp', 'ld.gold') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/2 advanced/subprojects/cmMod/CMakeLists.txt" "new/meson-0.56.2/test cases/cmake/2 advanced/subprojects/cmMod/CMakeLists.txt" --- "old/meson-0.56.0/test cases/cmake/2 advanced/subprojects/cmMod/CMakeLists.txt" 2020-10-18 23:29:13.000000000 +0200 +++ "new/meson-0.56.2/test cases/cmake/2 advanced/subprojects/cmMod/CMakeLists.txt" 2021-01-04 11:54:09.000000000 +0100 @@ -23,6 +23,16 @@ target_link_libraries(cmModLibStatic ;ZLIB::ZLIB;) target_link_libraries(testEXE cmModLib) +if(APPLE) + find_library(COREFOUNDATION_FRAMEWORK "CoreFoundation") + if(NOT COREFOUNDATION_FRAMEWORK) + message(FATAL_ERROR "CoreFoundation framework not found") + endif() + + target_link_libraries(cmModLibStatic "${COREFOUNDATION_FRAMEWORK}") + target_compile_definitions(cmModLibStatic PUBLIC USE_FRAMEWORK) +endif() + target_compile_definitions(cmModLibStatic PUBLIC CMMODLIB_STATIC_DEFINE) install(TARGETS testEXE LIBRARY DESTINATION lib RUNTIME DESTINATION bin) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/2 advanced/subprojects/cmMod/lib/cmMod.cpp" "new/meson-0.56.2/test cases/cmake/2 advanced/subprojects/cmMod/lib/cmMod.cpp" --- "old/meson-0.56.0/test cases/cmake/2 advanced/subprojects/cmMod/lib/cmMod.cpp" 2020-08-15 18:27:05.000000000 +0200 +++ "new/meson-0.56.2/test cases/cmake/2 advanced/subprojects/cmMod/lib/cmMod.cpp" 2021-01-04 11:54:09.000000000 +0100 @@ -6,10 +6,19 @@ #error "Invalid value of CONFIG_OPT" #endif +#ifdef USE_FRAMEWORK +#include <CoreFoundation/CoreFoundation.h> +#endif + using namespace std; cmModClass::cmModClass(string foo) { str = foo + " World " + zlibVersion(); + +#ifdef USE_FRAMEWORK + CFStringRef ref = CFStringCreateWithCString(NULL, str.c_str(), kCFStringEncodingUTF8); + CFRelease(ref); +#endif } string cmModClass::getStr() const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/24 mixing languages/main.c" "new/meson-0.56.2/test cases/cmake/24 mixing languages/main.c" --- "old/meson-0.56.0/test cases/cmake/24 mixing languages/main.c" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-0.56.2/test cases/cmake/24 mixing languages/main.c" 2021-01-06 00:18:35.000000000 +0100 @@ -0,0 +1,5 @@ +#include <cmTest.h> + +int main(void) { + return doStuff(); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/24 mixing languages/meson.build" "new/meson-0.56.2/test cases/cmake/24 mixing languages/meson.build" --- "old/meson-0.56.0/test cases/cmake/24 mixing languages/meson.build" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-0.56.2/test cases/cmake/24 mixing languages/meson.build" 2021-01-06 00:18:35.000000000 +0100 @@ -0,0 +1,13 @@ +project('CMake mix', ['c', 'cpp']) + +if not add_languages('objc', required : false) + error('MESON_SKIP_TEST: No ObjC compiler') +endif + +cm = import('cmake') + +sub_pro = cm.subproject('cmTest') +sub_dep = sub_pro.dependency('cmTest', include_type: 'system') + +exe1 = executable('exe1', ['main.c'], dependencies: [sub_dep]) +test('test1', exe1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/24 mixing languages/subprojects/cmTest/CMakeLists.txt" "new/meson-0.56.2/test cases/cmake/24 mixing languages/subprojects/cmTest/CMakeLists.txt" --- "old/meson-0.56.0/test cases/cmake/24 mixing languages/subprojects/cmTest/CMakeLists.txt" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-0.56.2/test cases/cmake/24 mixing languages/subprojects/cmTest/CMakeLists.txt" 2021-01-06 00:18:35.000000000 +0100 @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.5) + +project(cmTest) + +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +add_library(cmTest STATIC cmTest.c cmTest.m) +target_compile_definitions(cmTest PUBLIC SOME_MAGIC_DEFINE=42) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.c" "new/meson-0.56.2/test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.c" --- "old/meson-0.56.0/test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.c" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-0.56.2/test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.c" 2021-01-06 00:18:35.000000000 +0100 @@ -0,0 +1,13 @@ +#include "cmTest.h" +#include <stdio.h> + +#if SOME_MAGIC_DEFINE != 42 +#error "SOME_MAGIC_DEFINE != 42" +#endif + +int foo(int x); + +int doStuff(void) { + printf("Hello World\n"); + return foo(42); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.h" "new/meson-0.56.2/test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.h" --- "old/meson-0.56.0/test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.h" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-0.56.2/test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.h" 2021-01-06 00:18:35.000000000 +0100 @@ -0,0 +1,3 @@ +#pragma once + +int doStuff(void); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.m" "new/meson-0.56.2/test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.m" --- "old/meson-0.56.0/test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.m" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-0.56.2/test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.m" 2021-01-06 00:18:35.000000000 +0100 @@ -0,0 +1,7 @@ +#if SOME_MAGIC_DEFINE != 42 +#error "SOME_MAGIC_DEFINE != 42" +#endif + +int foo(int x) { + return 42 - x; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/common/122 llvm ir and assembly/square-aarch64.S" "new/meson-0.56.2/test cases/common/122 llvm ir and assembly/square-aarch64.S" --- "old/meson-0.56.0/test cases/common/122 llvm ir and assembly/square-aarch64.S" 2020-09-18 00:00:51.000000000 +0200 +++ "new/meson-0.56.2/test cases/common/122 llvm ir and assembly/square-aarch64.S" 2021-01-06 11:39:48.000000000 +0100 @@ -15,6 +15,15 @@ #else -#error gas syntax assembly for this test needs to be written +.text +.globl SYMBOL_NAME(square_unsigned) +# ifdef __linux__ +.type square_unsigned, %function +#endif + +SYMBOL_NAME(square_unsigned): + mul x1, x0, x0 + mov x0, x1 + ret #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/common/29 multiline string/meson.build" "new/meson-0.56.2/test cases/common/29 multiline string/meson.build" --- "old/meson-0.56.0/test cases/common/29 multiline string/meson.build" 2020-08-15 18:27:05.000000000 +0200 +++ "new/meson-0.56.2/test cases/common/29 multiline string/meson.build" 2021-01-09 11:14:21.000000000 +0100 @@ -26,6 +26,8 @@ cc = meson.get_compiler('c') prog = ''' +#include <stdio.h> + int main(void) { int num = 1; printf("%d\n", num); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/failing/76 link with shared module on osx/test.json" "new/meson-0.56.2/test cases/failing/76 link with shared module on osx/test.json" --- "old/meson-0.56.0/test cases/failing/76 link with shared module on osx/test.json" 2020-08-15 18:27:05.000000000 +0200 +++ "new/meson-0.56.2/test cases/failing/76 link with shared module on osx/test.json" 2020-11-22 03:19:19.000000000 +0100 @@ -1,7 +1,7 @@ { "stdout": [ { - "line": "test cases/failing/76 link with shared module on osx/meson.build:8:0: ERROR: target links against shared modules." + "line": "test cases/failing/76 link with shared module on osx/meson.build:8:0: ERROR: target links against shared modules. This is not permitted on OSX" } ] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/frameworks/8 flex/lexer.l" "new/meson-0.56.2/test cases/frameworks/8 flex/lexer.l" --- "old/meson-0.56.0/test cases/frameworks/8 flex/lexer.l" 2020-08-15 18:27:05.000000000 +0200 +++ "new/meson-0.56.2/test cases/frameworks/8 flex/lexer.l" 2021-01-09 11:14:21.000000000 +0100 @@ -1,6 +1,9 @@ %{ #include <stdlib.h> #include "parser.tab.h" + +extern int yylex(void); +extern int yyerror(); %} %% diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/frameworks/8 flex/parser.y" "new/meson-0.56.2/test cases/frameworks/8 flex/parser.y" --- "old/meson-0.56.0/test cases/frameworks/8 flex/parser.y" 2020-08-15 18:27:05.000000000 +0200 +++ "new/meson-0.56.2/test cases/frameworks/8 flex/parser.y" 2021-01-09 11:14:21.000000000 +0100 @@ -1,3 +1,8 @@ +%{ +extern int yylex(void); +extern int yyerror(); +%} + %token BOOLEAN %% diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/rust/2 sharedlib/meson.build" "new/meson-0.56.2/test cases/rust/2 sharedlib/meson.build" --- "old/meson-0.56.0/test cases/rust/2 sharedlib/meson.build" 2020-08-15 18:27:05.000000000 +0200 +++ "new/meson-0.56.2/test cases/rust/2 sharedlib/meson.build" 2021-01-09 11:14:21.000000000 +0100 @@ -1,5 +1,9 @@ project('rust shared library', 'rust') +if host_machine.system() == 'darwin' + error('MESON_SKIP_TEST: doesnt work right on macos, please fix!') +endif + l = shared_library('stuff', 'stuff.rs', install : true) e = executable('prog', 'prog.rs', link_with : l, install : true) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/rust/4 polyglot/meson.build" "new/meson-0.56.2/test cases/rust/4 polyglot/meson.build" --- "old/meson-0.56.0/test cases/rust/4 polyglot/meson.build" 2020-08-15 18:27:05.000000000 +0200 +++ "new/meson-0.56.2/test cases/rust/4 polyglot/meson.build" 2021-01-09 11:14:21.000000000 +0100 @@ -1,5 +1,9 @@ project('rust and c polyglot executable', 'c', 'rust') +if host_machine.system() == 'darwin' + error('MESON_SKIP_TEST: doesnt work right on macos, please fix!') +endif + l = library('stuff', 'stuff.rs', rust_crate_type: 'cdylib', install : true) e = executable('prog', 'prog.c', link_with : l, install : true) test('polyglottest', e) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/unit/59 introspect buildoptions/meson.build" "new/meson-0.56.2/test cases/unit/59 introspect buildoptions/meson.build" --- "old/meson-0.56.0/test cases/unit/59 introspect buildoptions/meson.build" 2020-08-15 18:27:05.000000000 +0200 +++ "new/meson-0.56.2/test cases/unit/59 introspect buildoptions/meson.build" 2021-01-09 11:14:21.000000000 +0100 @@ -1,4 +1,4 @@ -project('introspect buildargs', ['c'], default_options: ['c_std=c11', 'cpp_std=c++14', 'buildtype=release']) +project('introspect buildargs', ['c'], default_options: ['c_std=c99', 'cpp_std=c++14', 'buildtype=release']) subA = subproject('projectA') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/unit/85 nested subproject regenerate depends/main.c" "new/meson-0.56.2/test cases/unit/85 nested subproject regenerate depends/main.c" --- "old/meson-0.56.0/test cases/unit/85 nested subproject regenerate depends/main.c" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-0.56.2/test cases/unit/85 nested subproject regenerate depends/main.c" 2021-01-06 11:39:48.000000000 +0100 @@ -0,0 +1,3 @@ +int main(void) { + return 0; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/unit/85 nested subproject regenerate depends/meson.build" "new/meson-0.56.2/test cases/unit/85 nested subproject regenerate depends/meson.build" --- "old/meson-0.56.0/test cases/unit/85 nested subproject regenerate depends/meson.build" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-0.56.2/test cases/unit/85 nested subproject regenerate depends/meson.build" 2021-01-06 11:39:48.000000000 +0100 @@ -0,0 +1,6 @@ +project('nested subproject regenerate depends', 'c') + +s = subproject('sub1') + +# This is needed to make msbuild noop check work correctly +executable('exe', 'main.c') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/unit/85 nested subproject regenerate depends/subprojects/sub1/meson.build" "new/meson-0.56.2/test cases/unit/85 nested subproject regenerate depends/subprojects/sub1/meson.build" --- "old/meson-0.56.0/test cases/unit/85 nested subproject regenerate depends/subprojects/sub1/meson.build" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-0.56.2/test cases/unit/85 nested subproject regenerate depends/subprojects/sub1/meson.build" 2021-01-06 11:39:48.000000000 +0100 @@ -0,0 +1,4 @@ +project('sub1') + +cmake = import('cmake') +cmake.subproject('sub2') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' "old/meson-0.56.0/test cases/unit/85 nested subproject regenerate depends/subprojects/sub2/CMakeLists.txt" "new/meson-0.56.2/test cases/unit/85 nested subproject regenerate depends/subprojects/sub2/CMakeLists.txt" --- "old/meson-0.56.0/test cases/unit/85 nested subproject regenerate depends/subprojects/sub2/CMakeLists.txt" 1970-01-01 01:00:00.000000000 +0100 +++ "new/meson-0.56.2/test cases/unit/85 nested subproject regenerate depends/subprojects/sub2/CMakeLists.txt" 2021-01-06 11:39:48.000000000 +0100 @@ -0,0 +1 @@ +project(sub2) ++++++ meson.keyring ++++++ --- /var/tmp/diff_new_pack.pyVfKp/_old 2021-01-22 21:49:02.745570118 +0100 +++ /var/tmp/diff_new_pack.pyVfKp/_new 2021-01-22 21:49:02.749570124 +0100 @@ -138,3 +138,55 @@ Yk4Wl26lcjaUkwNEwPvTEtq3fjwKoisLbg== =Smkh -----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +dxBkBtFt+g3obj4= +=AiRn +-----END PGP PUBLIC KEY BLOCK-----