diff -Nru meson-0.47.1/data/syntax-highlighting/vim/syntax/meson.vim meson-0.47.2/data/syntax-highlighting/vim/syntax/meson.vim --- meson-0.47.1/data/syntax-highlighting/vim/syntax/meson.vim 2018-07-02 17:41:43.000000000 +0000 +++ meson-0.47.2/data/syntax-highlighting/vim/syntax/meson.vim 2018-08-25 08:05:50.000000000 +0000 @@ -69,6 +69,7 @@ \ add_project_arguments \ add_project_link_arguments \ add_test_setup + \ assert \ benchmark \ both_libraries \ build_machine @@ -102,6 +103,7 @@ \ library \ meson \ message + \ option \ project \ run_command \ run_target @@ -110,6 +112,7 @@ \ shared_module \ static_library \ subdir + \ subdir_done \ subproject \ target_machine \ test diff -Nru meson-0.47.1/debian/changelog meson-0.47.2/debian/changelog --- meson-0.47.1/debian/changelog 2018-08-24 12:57:48.000000000 +0000 +++ meson-0.47.2/debian/changelog 2018-09-05 11:04:41.000000000 +0000 @@ -1,32 +1,28 @@ -meson (0.47.1-1ubuntu4) cosmic; urgency=medium +meson (0.47.2-1ubuntu2) cosmic; urgency=medium - * Revert symlink copy behaviour - copy resolvable symlinks as real - files. Unbreaks systemd build. + * Add proposed fix-dbus-test.patch to fix build test - -- Dimitri John Ledkov Fri, 24 Aug 2018 13:57:48 +0100 + -- Jeremy Bicha Wed, 05 Sep 2018 07:04:41 -0400 -meson (0.47.1-1ubuntu3) cosmic; urgency=medium +meson (0.47.2-1ubuntu1) cosmic; urgency=medium - * debian/patches/install_subdir-Also-copy-dangling-symlinks.patch, - debian/patches/0001-minstall-never-try-to-set-chmod-on-symlinks.patch, - debian/patches/0002-minstall-never-follow-symlinks-when-setting-ownershi.patch, - debian/patches/0003-minstall-use-follow_symlinks-to-check-executable.patch: - - Fix symlink copy when using install_subdir (LP: #1787286) + * Sync with Debian. + * Cherry-pick patch to not use quadmath with Fortran. (Closes: #907324) - -- Marco Trevisan (TreviƱo) Mon, 20 Aug 2018 16:54:15 +0200 + -- Jeremy Bicha Sun, 02 Sep 2018 12:05:01 -0400 -meson (0.47.1-1ubuntu2) cosmic; urgency=medium +meson (0.47.2-1) unstable; urgency=medium - * quadmath is available on ppc64le, but not use by gfortran on - ppc64le. Not sure how to detect this properly. + * New upstream release. - -- Dimitri John Ledkov Tue, 17 Jul 2018 17:26:51 +0100 + -- Jussi Pakkanen Sat, 25 Aug 2018 11:15:05 +0300 -meson (0.47.1-1ubuntu1) cosmic; urgency=medium +meson (0.47.1-2) unstable; urgency=medium - * Fix autopgtest, quadmath is not available on all architectures. + * Fix debcrossgen install properly. Closes: #903279. + * Re-enable Valgrind tests. - -- Dimitri John Ledkov Tue, 17 Jul 2018 09:40:30 +0100 + -- Jussi Pakkanen Fri, 3 Aug 2018 22:56:19 +0300 meson (0.47.1-1) unstable; urgency=medium diff -Nru meson-0.47.1/debian/control meson-0.47.2/debian/control --- meson-0.47.1/debian/control 2018-07-17 13:03:41.000000000 +0000 +++ meson-0.47.2/debian/control 2018-09-05 11:04:41.000000000 +0000 @@ -57,8 +57,7 @@ libgtk-3-dev , # Not available on older releases and only needed for tests g++-arm-linux-gnueabihf [!armhf] | bash-doc , -# Disabled temporarily due to #903434. -# valgrind [amd64 i386] , + valgrind [amd64 i386] , llvm-dev , libsdl2-dev , # OpenMPI packages do not install currently (2018/04/23) diff -Nru meson-0.47.1/debian/meson/usr/share/meson/debcrossgen meson-0.47.2/debian/meson/usr/share/meson/debcrossgen --- meson-0.47.1/debian/meson/usr/share/meson/debcrossgen 2018-08-20 14:54:15.000000000 +0000 +++ meson-0.47.2/debian/meson/usr/share/meson/debcrossgen 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2017 Jussi Pakkanen - -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at - -# http://www.apache.org/licenses/LICENSE-2.0 - -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import sys, os, subprocess - -import argparse - -parser = argparse.ArgumentParser(description='''Generate cross compilation definition file for the Meson build system. - -If you do not specify the --arch argument, Meson assumes that running -plain 'dpkg-architecture' will return correct information for the -host system. -''' -) - -parser.add_argument('--arch', default=None, - help='The dpkg architecture to generate.') -parser.add_argument('--gccsuffix', default="", - help='A particular gcc version suffix if necessary.') -parser.add_argument('-o', required=True, dest='outfile', - help='The output file.') - -def locate_path(program): - if os.path.isabs(program): - return program - for d in os.get_exec_path(): - f = os.path.join(d, program) - if os.access(f, os.X_OK): - return f - raise ValueError("%s not found on $PATH" % program) - -def run(options): - if options.arch is None: - cmd = ['dpkg-architecture'] - else: - cmd = ['dpkg-architecture', '-a' + options.arch] - output = subprocess.check_output(cmd, universal_newlines=True) - data = {} - for line in output.split('\n'): - line = line.strip() - if line == '': - continue - k, v = line.split('=', 1) - data[k] = v - host_arch = data['DEB_HOST_GNU_TYPE'] - host_os = data['DEB_HOST_ARCH_OS'] - host_cpu_family = data['DEB_HOST_GNU_CPU'] - host_cpu = data['DEB_HOST_ARCH'] # Not really correct, should be arm7hlf etc but it is not exposed. - host_endian = data['DEB_HOST_ARCH_ENDIAN'] - with open(options.outfile, "w") as ofile: - ofile.write('[binaries]\n') - c = "%s-gcc%s" % (host_arch, options.gccsuffix) - ofile.write("c = '%s'\n" % locate_path(c)) - cpp = "%s-g++%s" % (host_arch, options.gccsuffix) - ofile.write("cpp = '%s'\n" % locate_path(cpp)) - ofile.write("ar = '%s'\n" % locate_path("%s-ar" % host_arch)) - ofile.write("strip = '%s'\n" % locate_path("%s-strip" % host_arch)) - ofile.write("objcopy = '%s'\n" % locate_path("%s-objcopy" % host_arch)) - ofile.write("ld= '%s'\n" % locate_path("%s-ld" % host_arch)) - try: - ofile.write("pkgconfig = '%s'\n" % locate_path("%s-pkg-config" % host_arch)) - except ValueError: - pass # pkg-config is optional - ofile.write('\n[properties]\n') - ofile.write('\n[host_machine]\n') - ofile.write("system = '%s'\n" % host_os) - ofile.write("cpu_family = '%s'\n" % host_cpu_family) - ofile.write("cpu = '%s'\n" % host_cpu) - ofile.write("endian = '%s'\n" % host_endian) - -if __name__ == '__main__': - options = parser.parse_args() - run(options) - print('Remember to add the proper --libdir arg to Meson invocation.') diff -Nru meson-0.47.1/debian/patches/0001-minstall-never-try-to-set-chmod-on-symlinks.patch meson-0.47.2/debian/patches/0001-minstall-never-try-to-set-chmod-on-symlinks.patch --- meson-0.47.1/debian/patches/0001-minstall-never-try-to-set-chmod-on-symlinks.patch 2018-08-20 14:53:54.000000000 +0000 +++ meson-0.47.2/debian/patches/0001-minstall-never-try-to-set-chmod-on-symlinks.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -From 2d010727ed6657cb53d5043032417e0a9035e117 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= -Date: Thu, 16 Aug 2018 04:12:29 +0200 -Subject: [PATCH 1/3] minstall: never try to set chmod on symlinks - -It's only supported by few platforms when the linked file exists, while it -would cause an error otherwise. - -In any case just implement this via an helper set_chmod function that will -handle the case where follow_symlinks is not supported by the platform -and will just not set any mod for the link itself (as it would otherwise -apply to the linked file). - -Fixes #3914 - -Origin: https://github.com/mesonbuild/meson/commit/2d010727ed6657cb53d5043032417 -Bug-meson: https://github.com/mesonbuild/meson/issues/3914 -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/meson/+bug/1787286 -Applied-Upstream: yes, 0.47.2 ---- - mesonbuild/minstall.py | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - -Index: meson-0.47.1/mesonbuild/minstall.py -=================================================================== ---- meson-0.47.1.orig/mesonbuild/minstall.py -+++ meson-0.47.1/mesonbuild/minstall.py -@@ -74,13 +74,20 @@ def append_to_log(lf, line): - lf.write('\n') - lf.flush() - -+def set_chmod(path, mode, dir_fd=None, follow_symlinks=True): -+ try: -+ os.chmod(path, mode, dir_fd=dir_fd, follow_symlinks=follow_symlinks) -+ except (NotImplementedError, OSError, SystemError) as e: -+ if not os.path.islink(path): -+ os.chmod(path, mode, dir_fd=dir_fd) -+ - def sanitize_permissions(path, umask): - if umask is None: - return - new_perms = 0o777 if is_executable(path) else 0o666 - new_perms &= ~umask - try: -- os.chmod(path, new_perms) -+ set_chmod(path, new_perms, follow_symlinks=False) - except PermissionError as e: - msg = '{!r}: Unable to set permissions {!r}: {}, ignoring...' - print(msg.format(path, new_perms, e.strerror)) -@@ -111,7 +118,7 @@ def set_mode(path, mode, default_umask): - # NOTE: On Windows you can set read/write perms; the rest are ignored - if mode.perms_s is not None: - try: -- os.chmod(path, mode.perms) -+ set_chmod(path, mode.perms, follow_symlinks=False) - except PermissionError as e: - msg = '{!r}: Unable to set permissions {!r}: {}, ignoring...' - print(msg.format(path, mode.perms_s, e.strerror)) diff -Nru meson-0.47.1/debian/patches/0002-minstall-never-follow-symlinks-when-setting-ownershi.patch meson-0.47.2/debian/patches/0002-minstall-never-follow-symlinks-when-setting-ownershi.patch --- meson-0.47.1/debian/patches/0002-minstall-never-follow-symlinks-when-setting-ownershi.patch 2018-08-20 14:53:28.000000000 +0000 +++ meson-0.47.2/debian/patches/0002-minstall-never-follow-symlinks-when-setting-ownershi.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -From 5de2a7910aafb39940789f5dbed244c230624917 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= -Date: Thu, 16 Aug 2018 04:19:16 +0200 -Subject: [PATCH 2/3] minstall: never follow symlinks when setting ownership - -Since we're supposed to call this for each installed path, we only should go -through what we've installed and not what this point to, as it might be -outside our scope or not existent. - -To do this, since shutil.chown doesn't expose the follow_symlink that os.chown -has, we can temporarily replace os.chown with a lambda that acutually passes -all the values as we want them, and then restore it to the built-in functions. -Not the nicest way, but fixes the issue without having to reimplement what -shutil does. - -Fixes #3914 - -Origin: https://github.com/mesonbuild/meson/commit/5de2a7910aafb39940789f5dbed24 -Bug-meson: https://github.com/mesonbuild/meson/issues/3914 -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/meson/+bug/1787286 -Applied-Upstream: yes, 0.47.2 ---- - mesonbuild/minstall.py | 20 +++++++++++++++++++- - 1 file changed, 19 insertions(+), 1 deletion(-) - -Index: meson-0.47.1/mesonbuild/minstall.py -=================================================================== ---- meson-0.47.1.orig/mesonbuild/minstall.py -+++ meson-0.47.1/mesonbuild/minstall.py -@@ -74,6 +74,24 @@ def append_to_log(lf, line): - lf.write('\n') - lf.flush() - -+def set_chown(path, user=None, group=None, dir_fd=None, follow_symlinks=True): -+ # shutil.chown will call os.chown without passing all the parameters -+ # and particularly follow_symlinks, thus we replace it temporary -+ # with a lambda with all the parameters so that follow_symlinks will -+ # be actually passed properly. -+ # Not nice, but better than actually rewriting shutil.chown until -+ # this python bug is fixed: https://bugs.python.org/issue18108 -+ real_os_chown = os.chown -+ try: -+ os.chown = lambda p, u, g: real_os_chown(p, u, g, -+ dir_fd=dir_fd, -+ follow_symlinks=follow_symlinks) -+ shutil.chown(path, user, group) -+ except: -+ raise -+ finally: -+ os.chown = real_os_chown -+ - def set_chmod(path, mode, dir_fd=None, follow_symlinks=True): - try: - os.chmod(path, mode, dir_fd=dir_fd, follow_symlinks=follow_symlinks) -@@ -100,7 +118,7 @@ def set_mode(path, mode, default_umask): - # No chown() on Windows, and must set one of owner/group - if not is_windows() and (mode.owner or mode.group) is not None: - try: -- shutil.chown(path, mode.owner, mode.group) -+ set_chown(path, mode.owner, mode.group, follow_symlinks=False) - except PermissionError as e: - msg = '{!r}: Unable to set owner {!r} and group {!r}: {}, ignoring...' - print(msg.format(path, mode.owner, mode.group, e.strerror)) diff -Nru meson-0.47.1/debian/patches/0003-minstall-use-follow_symlinks-to-check-executable.patch meson-0.47.2/debian/patches/0003-minstall-use-follow_symlinks-to-check-executable.patch --- meson-0.47.1/debian/patches/0003-minstall-use-follow_symlinks-to-check-executable.patch 2018-08-20 14:53:39.000000000 +0000 +++ meson-0.47.2/debian/patches/0003-minstall-use-follow_symlinks-to-check-executable.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -From abf65c92af298683fa9ffa5e360ce6c836a1d2fa Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= -Date: Fri, 17 Aug 2018 04:02:23 +0200 -Subject: [PATCH 3/3] minstall: use follow_symlinks to check executable - -This could happen when setting an default install mode but with broken -symlinks. - -Fixes #3914 - -Origin: https://github.com/mesonbuild/meson/commit/abf65c92af298683fa9ffa5e360ce -Bug-meson: https://github.com/mesonbuild/meson/issues/3914 -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/meson/+bug/1787286 -Applied-Upstream: yes, 0.47.2 ---- - mesonbuild/minstall.py | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -Index: meson-0.47.1/mesonbuild/minstall.py -=================================================================== ---- meson-0.47.1.orig/mesonbuild/minstall.py -+++ meson-0.47.1/mesonbuild/minstall.py -@@ -64,9 +64,9 @@ class DirMaker: - for d in self.dirs: - append_to_log(self.lf, d) - --def is_executable(path): -+def is_executable(path, follow_symlinks=False): - '''Checks whether any of the "x" bits are set in the source file mode.''' -- return bool(os.stat(path).st_mode & 0o111) -+ return bool(os.stat(path, follow_symlinks=follow_symlinks).st_mode & 0o111) - - def append_to_log(lf, line): - lf.write(line) -@@ -102,7 +102,7 @@ def set_chmod(path, mode, dir_fd=None, f - def sanitize_permissions(path, umask): - if umask is None: - return -- new_perms = 0o777 if is_executable(path) else 0o666 -+ new_perms = 0o777 if is_executable(path, follow_symlinks=False) else 0o666 - new_perms &= ~umask - try: - set_chmod(path, new_perms, follow_symlinks=False) diff -Nru meson-0.47.1/debian/patches/f34f0717e00756ea786ac62b3126d3425fcd6649.patch meson-0.47.2/debian/patches/f34f0717e00756ea786ac62b3126d3425fcd6649.patch --- meson-0.47.1/debian/patches/f34f0717e00756ea786ac62b3126d3425fcd6649.patch 2018-08-24 12:57:48.000000000 +0000 +++ meson-0.47.2/debian/patches/f34f0717e00756ea786ac62b3126d3425fcd6649.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -From f34f0717e00756ea786ac62b3126d3425fcd6649 Mon Sep 17 00:00:00 2001 -From: Jussi Pakkanen -Date: Thu, 23 Aug 2018 21:55:52 +0300 -Subject: [PATCH] Revert symlink copy behaviour. Closes #4069. - ---- - mesonbuild/minstall.py | 14 +++++++++++++- - 1 file changed, 13 insertions(+), 1 deletion(-) - ---- a/mesonbuild/minstall.py -+++ b/mesonbuild/minstall.py -@@ -22,6 +22,10 @@ - from .mtest import rebuild_all - from __main__ import __file__ as main_file - -+symlink_warning = '''Warning: trying to copy a symlink that points to a file. This will copy the file, -+but this will be changed in a future version of Meson to copy the symlink as is. Please update your -+build definitions so that it will not break when the change happens.''' -+ - selinux_updates = [] - - def buildparser(): -@@ -237,7 +241,15 @@ - os.remove(to_file) - print('Installing %s to %s' % (from_file, outdir)) - if os.path.islink(from_file): -- shutil.copy(from_file, outdir, follow_symlinks=False) -+ if not os.path.exists(from_file): -+ # Dangling symlink. Replicate as is. -+ shutil.copy(from_file, outdir, follow_symlinks=False) -+ else: -+ # Remove this entire branch when changing the behaviour to duplicate -+ # symlinks rather than copying what they point to. -+ print(symlink_warning) -+ shutil.copyfile(from_file, to_file) -+ shutil.copystat(from_file, to_file) - else: - shutil.copyfile(from_file, to_file) - shutil.copystat(from_file, to_file) diff -Nru meson-0.47.1/debian/patches/fix-gdbus-test.patch meson-0.47.2/debian/patches/fix-gdbus-test.patch --- meson-0.47.1/debian/patches/fix-gdbus-test.patch 1970-01-01 00:00:00.000000000 +0000 +++ meson-0.47.2/debian/patches/fix-gdbus-test.patch 2018-09-05 11:04:41.000000000 +0000 @@ -0,0 +1,17 @@ +From: "Jan Alexander Steffens (heftig)" +Subject: Fix gdbus test + +https://github.com/mesonbuild/meson/issues/4083 +diff --git i/run_unittests.py w/run_unittests.py +index 28264606..7c267e17 100755 +--- i/run_unittests.py ++++ w/run_unittests.py +@@ -3441,7 +3441,7 @@ class LinuxlikeTests(BasePlatformTests): + break + self.assertIsInstance(docbook_target, dict) + ifile = self.introspect(['--target-files', 'generated-gdbus-docbook@cus'])[0] +- self.assertEqual(t['filename'], 'gdbus/generated-gdbus-doc-' + ifile) ++ self.assertEqual(t['filename'], 'gdbus/generated-gdbus-doc-' + os.path.basename(ifile)) + + def test_build_rpath(self): + if is_cygwin(): diff -Nru meson-0.47.1/debian/patches/install_subdir-Also-copy-dangling-symlinks.patch meson-0.47.2/debian/patches/install_subdir-Also-copy-dangling-symlinks.patch --- meson-0.47.1/debian/patches/install_subdir-Also-copy-dangling-symlinks.patch 2018-08-15 21:45:19.000000000 +0000 +++ meson-0.47.2/debian/patches/install_subdir-Also-copy-dangling-symlinks.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ -From d03cf0459838d0b786e5f8cc9cc2dd443dda4585 Mon Sep 17 00:00:00 2001 -From: Nirbheek Chauhan -Date: Sun, 12 Aug 2018 01:29:00 +0530 -Subject: [PATCH] install_subdir: Also copy dangling symlinks - -Fixes https://github.com/mesonbuild/meson/issues/3914 - -Origin: https://github.com/mesonbuild/meson/commit/d03cf0459838d0b786e5f -Bug-meson: https://github.com/mesonbuild/meson/issues/3914 -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/meson/+bug/1787286 -Applied-Upstream: yes - ---- - mesonbuild/minstall.py | 20 +++++++++++++------- - run_unittests.py | 26 ++++++++++++++++++++++++++ - 2 files changed, 39 insertions(+), 7 deletions(-) - -Index: meson-0.47.1/mesonbuild/minstall.py -=================================================================== ---- meson-0.47.1.orig/mesonbuild/minstall.py -+++ meson-0.47.1/mesonbuild/minstall.py -@@ -186,12 +186,16 @@ class Installer: - def should_preserve_existing_file(self, from_file, to_file): - if not self.options.only_changed: - return False -+ # Always replace danging symlinks -+ if os.path.islink(from_file) and not os.path.isfile(from_file): -+ return False - from_time = os.stat(from_file).st_mtime - to_time = os.stat(to_file).st_mtime - return from_time <= to_time - - def do_copyfile(self, from_file, to_file): -- if not os.path.isfile(from_file): -+ outdir = os.path.split(to_file)[0] -+ if not os.path.isfile(from_file) and not os.path.islink(from_file): - raise RuntimeError('Tried to install something that isn\'t a file:' - '{!r}'.format(from_file)) - # copyfile fails if the target file already exists, so remove it to -@@ -205,11 +209,13 @@ class Installer: - append_to_log(self.lf, '# Preserving old file %s\n' % to_file) - print('Preserving existing file %s.' % to_file) - return False -- os.unlink(to_file) -- outdir = os.path.split(to_file)[0] -+ os.remove(to_file) - print('Installing %s to %s' % (from_file, outdir)) -- shutil.copyfile(from_file, to_file) -- shutil.copystat(from_file, to_file) -+ if os.path.islink(from_file): -+ shutil.copy(from_file, outdir, follow_symlinks=False) -+ else: -+ shutil.copyfile(from_file, to_file) -+ shutil.copystat(from_file, to_file) - selinux_updates.append(to_file) - append_to_log(self.lf, to_file) - return True -@@ -272,7 +278,7 @@ class Installer: - if os.path.isdir(abs_dst): - print('Tried to copy file %s but a directory of that name already exists.' % abs_dst) - if os.path.exists(abs_dst): -- os.unlink(abs_dst) -+ os.remove(abs_dst) - parent_dir = os.path.dirname(abs_dst) - if not os.path.isdir(parent_dir): - os.mkdir(parent_dir) -@@ -426,7 +432,7 @@ class Installer: - try: - symlinkfilename = os.path.join(outdir, alias) - try: -- os.unlink(symlinkfilename) -+ os.remove(symlinkfilename) - except FileNotFoundError: - pass - os.symlink(to, symlinkfilename) -Index: meson-0.47.1/run_unittests.py -=================================================================== ---- meson-0.47.1.orig/run_unittests.py -+++ meson-0.47.1/run_unittests.py -@@ -3777,6 +3777,32 @@ class RewriterTests(unittest.TestCase): - self.assertEqual(top, self.read_contents('meson.build')) - self.assertEqual(s2, self.read_contents('sub2/meson.build')) - -+ def test_install_subdir_symlinks(self): -+ ''' -+ Test that installation of broken symlinks works fine. -+ https://github.com/mesonbuild/meson/issues/3914 -+ ''' -+ testdir = os.path.join(self.common_test_dir, '66 install subdir') -+ subdir = os.path.join(testdir, 'sub/sub1') -+ curdir = os.getcwd() -+ os.chdir(subdir) -+ # Can't distribute broken symlinks in the source tree because it breaks -+ # the creation of zipapps. Create it dynamically and run the test by -+ # hand. -+ src = '../../nonexistent.txt' -+ os.symlink(src, 'test.txt') -+ try: -+ self.init(testdir) -+ self.build() -+ self.install() -+ link = os.path.join(self.installdir, 'usr', 'share', 'sub1', 'test.txt') -+ self.assertTrue(os.path.islink(link), msg=link) -+ self.assertEqual(src, os.readlink(link)) -+ self.assertFalse(os.path.isfile(link), msg=link) -+ finally: -+ os.remove(os.path.join(subdir, 'test.txt')) -+ os.chdir(curdir) -+ - - def unset_envs(): - # For unit tests we must fully control all command lines diff -Nru meson-0.47.1/debian/patches/quadmath-dynamic.patch meson-0.47.2/debian/patches/quadmath-dynamic.patch --- meson-0.47.1/debian/patches/quadmath-dynamic.patch 2018-07-17 16:26:41.000000000 +0000 +++ meson-0.47.2/debian/patches/quadmath-dynamic.patch 2018-09-05 11:04:41.000000000 +0000 @@ -1,29 +1,24 @@ -Description: quadmath is not available on all architectures. -Author: Dimitri John Ledkov -Bug-Upstream: https://github.com/mesonbuild/meson/issues/3896 +From 3d86a24b5537db3e04795d9c3e94f57def28cf5d Mon Sep 17 00:00:00 2001 +From: Jussi Pakkanen +Date: Fri, 31 Aug 2018 00:27:00 +0300 +Subject: [PATCH] Remove unnecessary -lquadmath from FORTRAN flags. +Closes: https://bugs.debian.org/907324 +--- + mesonbuild/compilers/fortran.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -Index: meson-0.47.1/mesonbuild/compilers/fortran.py -=================================================================== ---- meson-0.47.1.orig/mesonbuild/compilers/fortran.py -+++ meson-0.47.1/mesonbuild/compilers/fortran.py -@@ -20,6 +20,7 @@ from .compilers import ( - ElbrusCompiler, - IntelCompiler, - ) -+import platform - - class FortranCompiler(Compiler): - library_dirs_cache = CCompiler.library_dirs_cache -@@ -226,7 +227,10 @@ class GnuFortranCompiler(GnuCompiler, Fo +diff --git a/mesonbuild/compilers/fortran.py b/mesonbuild/compilers/fortran.py +index 1ee1fcb56e..3c7c2f95f3 100644 +--- a/mesonbuild/compilers/fortran.py ++++ b/mesonbuild/compilers/fortran.py +@@ -275,7 +275,7 @@ def get_module_outdir_args(self, path): return ['-J' + path] def language_stdlib_only_link_flags(self): - return ['-lgfortran', '-lm', '-lquadmath'] -+ if platform.machine().lower() in ['x86_64', 'i686']: -+ return ['-lgfortran', '-lm', '-lquadmath'] -+ else: -+ return ['-lgfortran', '-lm'] ++ return ['-lgfortran', '-lm'] class ElbrusFortranCompiler(GnuFortranCompiler, ElbrusCompiler): + diff -Nru meson-0.47.1/debian/patches/series meson-0.47.2/debian/patches/series --- meson-0.47.1/debian/patches/series 2018-08-24 12:56:09.000000000 +0000 +++ meson-0.47.2/debian/patches/series 2018-09-05 11:04:41.000000000 +0000 @@ -1,7 +1,3 @@ 1-disable-openmpi.patch quadmath-dynamic.patch -install_subdir-Also-copy-dangling-symlinks.patch -0001-minstall-never-try-to-set-chmod-on-symlinks.patch -0002-minstall-never-follow-symlinks-when-setting-ownershi.patch -0003-minstall-use-follow_symlinks-to-check-executable.patch -f34f0717e00756ea786ac62b3126d3425fcd6649.patch +fix-gdbus-test.patch diff -Nru meson-0.47.1/debian/rules meson-0.47.2/debian/rules --- meson-0.47.1/debian/rules 2018-07-10 21:05:14.000000000 +0000 +++ meson-0.47.2/debian/rules 2018-09-05 11:04:41.000000000 +0000 @@ -22,6 +22,19 @@ override_dh_clean: dh_clean rm -f meson-test-run.txt meson-test-run.xml + rm -rf __pycache__ + rm -rf mesonbuild/__pycache__ + rm -rf mesonbuild/*/__pycache__ + +override_dh_install: # Helper script to autogenerate cross files. + dh_install mkdir -p $$(pwd)/debian/meson/usr/share/meson cp debian/debcrossgen $$(pwd)/debian/meson/usr/share/meson + rm -rf $$(pwd)/debian/meson/usr/lib/python*/dist-packages/mesonbuild/__pycache__ + rm -rf $$(pwd)/debian/meson/usr/lib/python*/dist-packages/mesonbuild/*/__pycache__ +# For some reason Debian helpers install the files in the wrong directory, +# i.e. /usr/lib/python3.6 instead of /usr/lib/python3. I don't know why +# or how to fix it, since we just call to the default tools with default +# parameters. Fix manually. + mv $$(pwd)/debian/meson/usr/lib/python3.* $$(pwd)/debian/meson/usr/lib/python3 diff -Nru meson-0.47.1/__main__.py meson-0.47.2/__main__.py --- meson-0.47.1/__main__.py 2016-10-17 18:14:45.000000000 +0000 +++ meson-0.47.2/__main__.py 2018-08-25 08:05:50.000000000 +0000 @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -import meson +from mesonbuild import mesonmain import sys -sys.exit(meson.main()) +sys.exit(mesonmain.main()) diff -Nru meson-0.47.1/man/meson.1 meson-0.47.2/man/meson.1 --- meson-0.47.1/man/meson.1 2018-07-10 21:02:45.000000000 +0000 +++ meson-0.47.2/man/meson.1 2018-08-25 08:06:47.000000000 +0000 @@ -1,4 +1,4 @@ -.TH MESON "1" "July 2018" "meson 0.47.1" "User Commands" +.TH MESON "1" "August 2018" "meson 0.47.2" "User Commands" .SH NAME meson - a high productivity build system .SH DESCRIPTION diff -Nru meson-0.47.1/man/mesonconf.1 meson-0.47.2/man/mesonconf.1 --- meson-0.47.1/man/mesonconf.1 2018-07-10 21:02:49.000000000 +0000 +++ meson-0.47.2/man/mesonconf.1 2018-08-25 08:06:54.000000000 +0000 @@ -1,4 +1,4 @@ -.TH MESONCONF "1" "July 2018" "mesonconf 0.47.1" "User Commands" +.TH MESONCONF "1" "August 2018" "mesonconf 0.47.2" "User Commands" .SH NAME mesonconf - a tool to configure Meson builds .SH DESCRIPTION diff -Nru meson-0.47.1/man/mesonintrospect.1 meson-0.47.2/man/mesonintrospect.1 --- meson-0.47.1/man/mesonintrospect.1 2018-07-10 21:02:55.000000000 +0000 +++ meson-0.47.2/man/mesonintrospect.1 2018-08-25 08:07:04.000000000 +0000 @@ -1,4 +1,4 @@ -.TH MESONINTROSPECT "1" "July 2018" "mesonintrospect 0.47.1" "User Commands" +.TH MESONINTROSPECT "1" "August 2018" "mesonintrospect 0.47.2" "User Commands" .SH NAME mesonintrospect - a tool to extract information about a Meson build .SH DESCRIPTION diff -Nru meson-0.47.1/man/mesontest.1 meson-0.47.2/man/mesontest.1 --- meson-0.47.1/man/mesontest.1 2018-07-10 21:02:32.000000000 +0000 +++ meson-0.47.2/man/mesontest.1 2018-08-25 08:07:25.000000000 +0000 @@ -1,4 +1,4 @@ -.TH MESON "1" "July 2018" "meson 0.47.1" "User Commands" +.TH MESON "1" "August 2018" "meson 0.47.2" "User Commands" .SH NAME mesontest - test tool for the Meson build system .SH DESCRIPTION diff -Nru meson-0.47.1/man/wraptool.1 meson-0.47.2/man/wraptool.1 --- meson-0.47.1/man/wraptool.1 2018-07-10 21:02:24.000000000 +0000 +++ meson-0.47.2/man/wraptool.1 2018-08-25 08:06:20.000000000 +0000 @@ -1,4 +1,4 @@ -.TH WRAPTOOL "1" "July 2018" "meson 0.47.1" "User Commands" +.TH WRAPTOOL "1" "August 2018" "meson 0.47.2" "User Commands" .SH NAME wraptool - source dependency downloader .SH DESCRIPTION diff -Nru meson-0.47.1/MANIFEST.in meson-0.47.2/MANIFEST.in --- meson-0.47.1/MANIFEST.in 1970-01-01 00:00:00.000000000 +0000 +++ meson-0.47.2/MANIFEST.in 2018-08-25 08:05:43.000000000 +0000 @@ -0,0 +1,20 @@ +graft test?cases +graft manual?tests +graft cross +graft data +graft graphics +graft man +graft syntax-highlighting +graft tools +include authors.txt +include contributing.txt +include COPYING +include README.md +include run_cross_test.py +include run_tests.py +include run_unittests.py +include run_meson_command_tests.py +include run_project_tests.py +include mesonrewriter.py +include ghwt.py +include __main__.py diff -Nru meson-0.47.1/mesonbuild/backend/backends.py meson-0.47.2/mesonbuild/backend/backends.py --- meson-0.47.1/mesonbuild/backend/backends.py 2018-06-22 11:50:56.000000000 +0000 +++ meson-0.47.2/mesonbuild/backend/backends.py 2018-08-25 08:05:50.000000000 +0000 @@ -342,9 +342,9 @@ return l, stdlib_args @staticmethod - def _libdir_is_system(libdir, compilers): + def _libdir_is_system(libdir, compilers, env): for cc in compilers.values(): - if libdir in cc.get_library_dirs(): + if libdir in cc.get_library_dirs(env): return True return False @@ -359,7 +359,7 @@ # The only link argument is an absolute path to a library file. libpath = la[0] libdir = os.path.dirname(libpath) - if exclude_system and self._libdir_is_system(libdir, target.compilers): + if exclude_system and self._libdir_is_system(libdir, target.compilers, self.environment): # No point in adding system paths. continue # Windows doesn't support rpaths, but we use this function to @@ -376,7 +376,7 @@ def determine_rpath_dirs(self, target): link_deps = target.get_all_link_deps() - result = set() + result = OrderedSet() for ld in link_deps: if ld is target: continue @@ -597,8 +597,8 @@ # Get program and library dirs from all target compilers if isinstance(target, build.BuildTarget): for cc in target.compilers.values(): - paths.update(cc.get_program_dirs()) - paths.update(cc.get_library_dirs()) + paths.update(cc.get_program_dirs(self.environment)) + paths.update(cc.get_library_dirs(self.environment)) return list(paths) def determine_windows_extra_paths(self, target, extra_bdeps, is_cross=False): diff -Nru meson-0.47.1/mesonbuild/backend/ninjabackend.py meson-0.47.2/mesonbuild/backend/ninjabackend.py --- meson-0.47.1/mesonbuild/backend/ninjabackend.py 2018-07-09 21:47:04.000000000 +0000 +++ meson-0.47.2/mesonbuild/backend/ninjabackend.py 2018-08-25 08:05:50.000000000 +0000 @@ -73,8 +73,8 @@ self.infilenames = [infilenames] else: self.infilenames = infilenames - self.deps = set() - self.orderdeps = set() + self.deps = OrderedSet() + self.orderdeps = OrderedSet() self.elems = [] self.all_outputs = all_outputs @@ -2526,7 +2526,7 @@ guessed_dependencies = [] # TODO The get_library_naming requirement currently excludes link targets that use d or fortran as their main linker if hasattr(linker, 'get_library_naming'): - search_dirs = list(search_dirs) + linker.get_library_dirs() + search_dirs = list(search_dirs) + linker.get_library_dirs(self.environment) static_patterns = linker.get_library_naming(self.environment, 'static', strict=True) shared_patterns = linker.get_library_naming(self.environment, 'shared', strict=True) for libname in libs: @@ -2610,25 +2610,32 @@ dependencies = target.get_dependencies() internal = self.build_target_link_arguments(linker, dependencies) commands += internal - # For 'automagic' deps: Boost and GTest. Also dependency('threads'). - # pkg-config puts the thread flags itself via `Cflags:` - for d in target.external_deps: - if d.need_threads(): - commands += linker.thread_link_flags(self.environment) - elif d.need_openmp(): - commands += linker.openmp_flags() # Only non-static built targets need link args and link dependencies if not isinstance(target, build.StaticLibrary): + # For 'automagic' deps: Boost and GTest. Also dependency('threads'). + # pkg-config puts the thread flags itself via `Cflags:` + need_threads = False + need_openmp = False + commands += target.link_args # External deps must be last because target link libraries may depend on them. for dep in target.get_external_deps(): # Extend without reordering or de-dup to preserve `-L -l` sets # https://github.com/mesonbuild/meson/issues/1718 commands.extend_direct(dep.get_link_args()) + need_threads |= dep.need_threads() + need_openmp |= dep.need_openmp() for d in target.get_dependencies(): if isinstance(d, build.StaticLibrary): for dep in d.get_external_deps(): + need_threads |= dep.need_threads() + need_openmp |= dep.need_openmp() commands.extend_direct(dep.get_link_args()) + if need_openmp: + commands += linker.openmp_flags() + if need_threads: + commands += linker.thread_link_flags(self.environment) + # Add link args for c_* or cpp_* build options. Currently this only # adds c_winlibs and cpp_winlibs when building for Windows. This needs # to be after all internal and external libraries so that unresolved diff -Nru meson-0.47.1/mesonbuild/backend/vs2010backend.py meson-0.47.2/mesonbuild/backend/vs2010backend.py --- meson-0.47.1/mesonbuild/backend/vs2010backend.py 2018-06-18 21:29:57.000000000 +0000 +++ meson-0.47.2/mesonbuild/backend/vs2010backend.py 2018-08-25 08:05:50.000000000 +0000 @@ -105,7 +105,7 @@ exe = generator.get_exe() infilelist = genlist.get_inputs() outfilelist = genlist.get_outputs() - source_dir = os.path.join(self.build_to_src, genlist.subdir) + source_dir = os.path.join(down, self.build_to_src, genlist.subdir) exe_arr = self.exe_object_to_cmd_array(exe) idgroup = ET.SubElement(parent_node, 'ItemGroup') for i in range(len(infilelist)): diff -Nru meson-0.47.1/mesonbuild/build.py meson-0.47.2/mesonbuild/build.py --- meson-0.47.1/mesonbuild/build.py 2018-07-09 21:47:04.000000000 +0000 +++ meson-0.47.2/mesonbuild/build.py 2018-08-25 08:05:50.000000000 +0000 @@ -1741,7 +1741,7 @@ if i.strip() == '': raise InvalidArguments('Output must not consist only of whitespace.') if has_path_sep(i): - raise InvalidArguments('Output must not contain a path segment.') + raise InvalidArguments('Output {!r} must not contain a path segment.'.format(i)) if '@INPUT@' in i or '@INPUT0@' in i: m = 'Output cannot contain @INPUT@ or @INPUT0@, did you ' \ 'mean @PLAINNAME@ or @BASENAME@?' diff -Nru meson-0.47.1/mesonbuild/compilers/compilers.py meson-0.47.2/mesonbuild/compilers/compilers.py --- meson-0.47.1/mesonbuild/compilers/compilers.py 2018-07-10 20:59:44.000000000 +0000 +++ meson-0.47.2/mesonbuild/compilers/compilers.py 2018-08-25 08:05:50.000000000 +0000 @@ -554,27 +554,32 @@ return True return False - def to_native(self): + def to_native(self, copy=False): # Check if we need to add --start/end-group for circular dependencies # between static libraries, and for recursively searching for symbols # needed by static libraries that are provided by object files or # shared libraries. + if copy: + new = self.copy() + else: + new = self if get_compiler_uses_gnuld(self.compiler): global soregex group_start = -1 - for each in self: + group_end = -1 + for i, each in enumerate(new): if not each.startswith('-l') and not each.endswith('.a') and \ not soregex.match(each): continue - i = self.index(each) + group_end = i if group_start < 0: # First occurrence of a library group_start = i if group_start >= 0: # Last occurrence of a library - self.insert(i + 1, '-Wl,--end-group') - self.insert(group_start, '-Wl,--start-group') - return self.compiler.unix_args_to_native(self) + new.insert(group_end + 1, '-Wl,--end-group') + new.insert(group_start, '-Wl,--start-group') + return self.compiler.unix_args_to_native(new) def append_direct(self, arg): ''' @@ -661,6 +666,9 @@ # Libraries to ignore in find_library() since they are provided by the # compiler or the C library. Currently only used for MSVC. ignore_libs = () + # Libraries that are internal compiler implementations, and must not be + # manually searched. + internal_libs = () # Cache for the result of compiler checks which can be cached compiler_check_cache = {} @@ -807,11 +815,11 @@ self.language + '_args': coredata.UserArrayOption( self.language + '_args', description + ' compiler', - compile_args, shlex_split=True, user_input=True), + compile_args, shlex_split=True, user_input=True, allow_dups=True), self.language + '_link_args': coredata.UserArrayOption( self.language + '_link_args', description + ' linker', - link_args, shlex_split=True, user_input=True), + link_args, shlex_split=True, user_input=True, allow_dups=True), }) return opts @@ -857,7 +865,7 @@ def find_library(self, *args, **kwargs): raise EnvironmentException('Language {} does not support library finding.'.format(self.get_display_language())) - def get_library_dirs(self): + def get_library_dirs(self, *args, **kwargs): return [] def has_multi_arguments(self, args, env): @@ -944,7 +952,9 @@ mlog.debug('Working directory: ', tmpdirname) mlog.debug('Command line: ', ' '.join(commands), '\n') mlog.debug('Code:\n', code) - p, p.stdo, p.stde = Popen_safe(commands, cwd=tmpdirname) + os_env = os.environ.copy() + os_env['LC_ALL'] = 'C' + p, p.stdo, p.stde = Popen_safe(commands, cwd=tmpdirname, env=os_env) mlog.debug('Compiler stdout:\n', p.stdo) mlog.debug('Compiler stderr:\n', p.stde) p.commands = commands @@ -1288,10 +1298,12 @@ 'b_ndebug', 'b_staticpic', 'b_lundef', 'b_asneeded'] - def get_library_dirs(self): - env = os.environ.copy() - env['LC_ALL'] = 'C' - stdo = Popen_safe(self.exelist + ['--print-search-dirs'], env=env)[1] + # FIXME: use _build_wrapper to call this so that linker flags from the env + # get applied + def get_library_dirs(self, env): + os_env = os.environ.copy() + os_env['LC_ALL'] = 'C' + stdo = Popen_safe(self.exelist + ['--print-search-dirs'], env=os_env)[1] paths = [] for line in stdo.split('\n'): if line.startswith('libraries:'): @@ -1301,10 +1313,10 @@ break return paths - def get_program_dirs(self): - env = os.environ.copy() - env['LC_ALL'] = 'C' - stdo = Popen_safe(self.exelist + ['--print-search-dirs'], env=env)[1] + def get_program_dirs(self, env): + os_env = os.environ.copy() + os_env['LC_ALL'] = 'C' + stdo = Popen_safe(self.exelist + ['--print-search-dirs'], env=os_env)[1] paths = [] for line in stdo.split('\n'): if line.startswith('programs:'): diff -Nru meson-0.47.1/mesonbuild/compilers/cpp.py meson-0.47.2/mesonbuild/compilers/cpp.py --- meson-0.47.1/mesonbuild/compilers/cpp.py 2018-06-22 11:50:56.000000000 +0000 +++ meson-0.47.2/mesonbuild/compilers/cpp.py 2018-08-25 08:05:50.000000000 +0000 @@ -111,7 +111,7 @@ def get_options(self): opts = CPPCompiler.get_options(self) opts.update({'cpp_std': coredata.UserComboOption('cpp_std', 'C++ language standard to use', - ['none', 'c++98', 'c++03', 'c++11', 'c++14', 'c++17' + ['none', 'c++98', 'c++03', 'c++11', 'c++14', 'c++17', 'gnu++98', 'gnu++03', 'gnu++11', 'gnu++14', 'gnu++17'], 'none')}) return opts diff -Nru meson-0.47.1/mesonbuild/compilers/c.py meson-0.47.2/mesonbuild/compilers/c.py --- meson-0.47.1/mesonbuild/compilers/c.py 2018-07-10 20:59:44.000000000 +0000 +++ meson-0.47.2/mesonbuild/compilers/c.py 2018-08-25 08:05:50.000000000 +0000 @@ -16,6 +16,9 @@ import glob import os.path import subprocess +import functools +import itertools +from pathlib import Path from .. import mlog from .. import coredata @@ -46,11 +49,15 @@ RunResult, ) +gnu_compiler_internal_libs = ('m', 'c', 'pthread', 'dl', 'rt') + class CCompiler(Compiler): + # TODO: Replace this manual cache with functools.lru_cache library_dirs_cache = {} program_dirs_cache = {} find_library_cache = {} + internal_libs = gnu_compiler_internal_libs def __init__(self, exelist, version, is_cross, exe_wrapper=None, **kwargs): # If a child ObjC or CPP class has already set it, don't set it ourselves @@ -140,6 +147,30 @@ ''' return self.get_no_optimization_args() + def get_allow_undefined_link_args(self): + ''' + Get args for allowing undefined symbols when linking to a shared library + ''' + if self.id == 'clang': + if self.clang_type == compilers.CLANG_OSX: + # Apple ld + return ['-Wl,-undefined,dynamic_lookup'] + else: + # GNU ld and LLVM lld + return ['-Wl,--allow-shlib-undefined'] + elif self.id == 'gcc': + if self.gcc_type == compilers.GCC_OSX: + # Apple ld + return ['-Wl,-undefined,dynamic_lookup'] + else: + # GNU ld and LLVM lld + return ['-Wl,--allow-shlib-undefined'] + elif self.id == 'msvc': + # link.exe + return ['/FORCE:UNRESOLVED'] + # FIXME: implement other linkers + return [] + def get_output_args(self, target): return ['-o', target] @@ -168,42 +199,47 @@ def get_std_shared_lib_link_args(self): return ['-shared'] - def get_library_dirs_real(self): - env = os.environ.copy() - env['LC_ALL'] = 'C' - stdo = Popen_safe(self.exelist + ['--print-search-dirs'], env=env)[1] + @functools.lru_cache() + def _get_search_dirs(self, env): + extra_args = ['--print-search-dirs'] + stdo = None + with self._build_wrapper('', env, extra_args, None, 'compile', True) as p: + stdo = p.stdo + return stdo + + @staticmethod + def _split_fetch_real_dirs(pathstr, sep=':'): paths = [] - for line in stdo.split('\n'): - if line.startswith('libraries:'): - libstr = line.split('=', 1)[1] - paths = [os.path.realpath(p) for p in libstr.split(':')] + for p in pathstr.split(sep): + p = Path(p) + if p.exists(): + paths.append(p.resolve().as_posix()) return paths - def get_library_dirs(self): - key = tuple(self.exelist) + def get_compiler_dirs(self, env, name): + ''' + Get dirs from the compiler, either `libraries:` or `programs:` + ''' + stdo = self._get_search_dirs(env) + for line in stdo.split('\n'): + if line.startswith(name + ':'): + return CCompiler._split_fetch_real_dirs(line.split('=', 1)[1]) + return [] + + def get_library_dirs(self, env): + key = (tuple(self.exelist), env) if key not in self.library_dirs_cache: - self.library_dirs_cache[key] = self.get_library_dirs_real() + self.library_dirs_cache[key] = self.get_compiler_dirs(env, 'libraries') return self.library_dirs_cache[key][:] - def get_program_dirs_real(self): - env = os.environ.copy() - env['LC_ALL'] = 'C' - stdo = Popen_safe(self.exelist + ['--print-search-dirs'], env=env)[1] - paths = [] - for line in stdo.split('\n'): - if line.startswith('programs:'): - libstr = line.split('=', 1)[1] - paths = [os.path.realpath(p) for p in libstr.split(':')] - return paths - - def get_program_dirs(self): + def get_program_dirs(self, env): ''' Programs used by the compiler. Also where toolchain DLLs such as libstdc++-6.dll are found with MinGW. ''' - key = tuple(self.exelist) + key = (tuple(self.exelist), env) if key not in self.program_dirs_cache: - self.program_dirs_cache[key] = self.get_program_dirs_real() + self.program_dirs_cache[key] = self.get_compiler_dirs(env, 'programs') return self.program_dirs_cache[key][:] def get_pic_args(self): @@ -883,13 +919,13 @@ @classmethod def _get_trials_from_pattern(cls, pattern, directory, libname): - f = os.path.join(directory, pattern.format(libname)) + f = Path(directory) / pattern.format(libname) # Globbing for OpenBSD if '*' in pattern: # NOTE: globbing matches directories and broken symlinks # so we have to do an isfile test on it later - return cls._sort_shlibs_openbsd(glob.glob(f)) - return [f] + return cls._sort_shlibs_openbsd(glob.glob(str(f))) + return [f.as_posix()] @staticmethod def _get_file_from_list(files): @@ -902,42 +938,30 @@ # First try if we can just add the library as -l. # Gcc + co seem to prefer builtin lib dirs to -L dirs. # Only try to find std libs if no extra dirs specified. - if not extra_dirs: + if not extra_dirs or libname in self.internal_libs: args = ['-l' + libname] - if self.links(code, env, extra_args=args): + largs = self.linker_to_compiler_args(self.get_allow_undefined_link_args()) + if self.links(code, env, extra_args=(args + largs)): return args + # Don't do a manual search for internal libs + if libname in self.internal_libs: + return None # Not found or we want to use a specific libtype? Try to find the # library file itself. patterns = self.get_library_naming(env, libtype) - for d in extra_dirs: + # Search in the specified dirs, and then in the system libraries + for d in itertools.chain(extra_dirs, self.get_library_dirs(env)): for p in patterns: trial = self._get_trials_from_pattern(p, d, libname) if not trial: continue + # We just check whether the library exists. We can't do a link + # check because the library might have unresolved symbols that + # require other libraries. trial = self._get_file_from_list(trial) if not trial: continue return [trial] - # Search in the system libraries too - for d in self.get_library_dirs(): - for p in patterns: - trial = self._get_trials_from_pattern(p, d, libname) - if not trial: - continue - trial = self._get_file_from_list(trial) - if not trial: - continue - # When searching the system paths used by the compiler, we - # need to check linking with link-whole, as static libs - # (.a) need to be checked to ensure they are the right - # architecture, e.g. 32bit or 64-bit. - # Just a normal test link won't work as the .a file doesn't - # seem to be checked by linker if there are no unresolved - # symbols from the main C file. - extra_link_args = self.get_link_whole_for([trial]) - extra_link_args = self.linker_to_compiler_args(extra_link_args) - if self.links(code, env, extra_args=extra_link_args): - return [trial] return None def find_library_impl(self, libname, env, extra_dirs, code, libtype): @@ -1185,7 +1209,8 @@ class VisualStudioCCompiler(CCompiler): std_warn_args = ['/W3'] std_opt_args = ['/O2'] - ignore_libs = ('m', 'c', 'pthread') + ignore_libs = gnu_compiler_internal_libs + internal_libs = () def __init__(self, exelist, version, is_cross, exe_wrap, is_64): CCompiler.__init__(self, exelist, version, is_cross, exe_wrap) diff -Nru meson-0.47.1/mesonbuild/compilers/fortran.py meson-0.47.2/mesonbuild/compilers/fortran.py --- meson-0.47.1/mesonbuild/compilers/fortran.py 2018-07-09 21:47:04.000000000 +0000 +++ meson-0.47.2/mesonbuild/compilers/fortran.py 2018-08-25 08:05:50.000000000 +0000 @@ -94,6 +94,9 @@ def get_compiler_check_args(self): return CCompiler.get_compiler_check_args(self) + def get_allow_undefined_link_args(self): + return CCompiler.get_allow_undefined_link_args(self) + def get_output_args(self, target): return CCompiler.get_output_args(self, target) @@ -127,11 +130,14 @@ def get_std_shared_lib_link_args(self): return CCompiler.get_std_shared_lib_link_args(self) - def get_library_dirs_real(self): - return CCompiler.get_library_dirs_real(self) + def _get_search_dirs(self, *args, **kwargs): + return CCompiler._get_search_dirs(self, *args, **kwargs) + + def get_compiler_dirs(self, *args, **kwargs): + return CCompiler.get_compiler_dirs(self, *args, **kwargs) - def get_library_dirs(self): - return CCompiler.get_library_dirs(self) + def get_library_dirs(self, *args, **kwargs): + return CCompiler.get_library_dirs(self, *args, **kwargs) def get_pic_args(self): return CCompiler.get_pic_args(self) diff -Nru meson-0.47.1/mesonbuild/coredata.py meson-0.47.2/mesonbuild/coredata.py --- meson-0.47.1/mesonbuild/coredata.py 2018-07-10 21:02:40.000000000 +0000 +++ meson-0.47.2/mesonbuild/coredata.py 2018-08-25 08:06:39.000000000 +0000 @@ -22,7 +22,7 @@ import ast import argparse -version = '0.47.1' +version = '0.47.2' backendlist = ['ninja', 'vs', 'vs2010', 'vs2015', 'vs2017', 'xcode'] default_yielding = False @@ -138,9 +138,10 @@ return value class UserArrayOption(UserOption): - def __init__(self, name, description, value, shlex_split=False, user_input=False, **kwargs): + def __init__(self, name, description, value, shlex_split=False, user_input=False, allow_dups=False, **kwargs): super().__init__(name, description, kwargs.get('choices', []), yielding=kwargs.get('yielding', None)) self.shlex_split = shlex_split + self.allow_dups = allow_dups self.value = self.validate_value(value, user_input=user_input) def validate_value(self, value, user_input=True): @@ -166,7 +167,7 @@ else: raise MesonException('"{0}" should be a string array, but it is not'.format(str(newvalue))) - if len(set(newvalue)) != len(newvalue): + if not self.allow_dups and len(set(newvalue)) != len(newvalue): msg = 'Duplicated values in array option "%s" is deprecated. ' \ 'This will become a hard error in the future.' % (self.name) mlog.deprecation(msg) diff -Nru meson-0.47.1/mesonbuild/dependencies/base.py meson-0.47.2/mesonbuild/dependencies/base.py --- meson-0.47.1/mesonbuild/dependencies/base.py 2018-07-09 21:45:33.000000000 +0000 +++ meson-0.47.2/mesonbuild/dependencies/base.py 2018-08-25 08:05:50.000000000 +0000 @@ -584,49 +584,60 @@ (self.name, out)) self.compile_args = self._convert_mingw_paths(shlex.split(out)) - def _set_libs(self): - env = None - libcmd = [self.name, '--libs'] - if self.static: - libcmd.append('--static') - # Force pkg-config to output -L fields even if they are system - # paths so we can do manual searching with cc.find_library() later. - env = os.environ.copy() - env['PKG_CONFIG_ALLOW_SYSTEM_LIBS'] = '1' - ret, out = self._call_pkgbin(libcmd, env=env) - if ret != 0: - raise DependencyException('Could not generate libs for %s:\n\n%s' % - (self.name, out)) - # Also get the 'raw' output without -Lfoo system paths for usage when - # a library can't be found, and also in gnome.generate_gir - # + gnome.gtkdoc which need -L -l arguments. - ret, out_raw = self._call_pkgbin(libcmd) - if ret != 0: - raise DependencyException('Could not generate libs for %s:\n\n%s' % - (self.name, out_raw)) - link_args = [] - raw_link_args = [] + def _search_libs(self, out, out_raw): + ''' + @out: PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 pkg-config --libs + @out_raw: pkg-config --libs + + We always look for the file ourselves instead of depending on the + compiler to find it with -lfoo or foo.lib (if possible) because: + 1. We want to be able to select static or shared + 2. We need the full path of the library to calculate RPATH values + 3. De-dup of libraries is easier when we have absolute paths + + Libraries that are provided by the toolchain or are not found by + find_library() will be added with -L -l pairs. + ''' # Library paths should be safe to de-dup - libpaths = OrderedSet() - raw_libpaths = OrderedSet() + # + # First, figure out what library paths to use. Originally, we were + # doing this as part of the loop, but due to differences in the order + # of -L values between pkg-config and pkgconf, we need to do that as + # a separate step. See: + # https://github.com/mesonbuild/meson/issues/3951 + # https://github.com/mesonbuild/meson/issues/4023 + # + # Separate system and prefix paths, and ensure that prefix paths are + # always searched first. + prefix_libpaths = OrderedSet() + # We also store this raw_link_args on the object later + raw_link_args = self._convert_mingw_paths(shlex.split(out_raw)) + for arg in raw_link_args: + if arg.startswith('-L') and not arg.startswith(('-L-l', '-L-L')): + prefix_libpaths.add(arg[2:]) + system_libpaths = OrderedSet() + full_args = self._convert_mingw_paths(shlex.split(out)) + for arg in full_args: + if arg.startswith(('-L-l', '-L-L')): + # These are D language arguments, not library paths + continue + if arg.startswith('-L') and arg[2:] not in prefix_libpaths: + system_libpaths.add(arg[2:]) + # Use this re-ordered path list for library resolution + libpaths = list(prefix_libpaths) + list(system_libpaths) # Track -lfoo libraries to avoid duplicate work libs_found = OrderedSet() # Track not-found libraries to know whether to add library paths libs_notfound = [] libtype = 'static' if self.static else 'default' - # We always look for the file ourselves instead of depending on the - # compiler to find it with -lfoo or foo.lib (if possible) because: - # 1. We want to be able to select static or shared - # 2. We need the full path of the library to calculate RPATH values - # - # Libraries that are provided by the toolchain or are not found by - # find_library() will be added with -L -l pairs. - for lib in self._convert_mingw_paths(shlex.split(out)): + # Generate link arguments for this library + link_args = [] + for lib in full_args: if lib.startswith(('-L-l', '-L-L')): # These are D language arguments, add them as-is pass elif lib.startswith('-L'): - libpaths.add(lib[2:]) + # We already handled library paths above continue elif lib.startswith('-l'): # Don't resolve the same -lfoo argument again @@ -634,18 +645,22 @@ continue if self.clib_compiler: args = self.clib_compiler.find_library(lib[2:], self.env, - list(libpaths), libtype) + libpaths, libtype) # If the project only uses a non-clib language such as D, Rust, # C#, Python, etc, all we can do is limp along by adding the # arguments as-is and then adding the libpaths at the end. else: args = None - if args: + if args is not None: libs_found.add(lib) # Replace -l arg with full path to library if available - # else, library is provided by the compiler and can't be resolved - if not args[0].startswith('-l'): - lib = args[0] + # else, library is either to be ignored, or is provided by + # the compiler, can't be resolved, and should be used as-is + if args: + if not args[0].startswith('-l'): + lib = args[0] + else: + continue else: # Library wasn't found, maybe we're looking in the wrong # places or the library will be provided with LDFLAGS or @@ -674,19 +689,34 @@ if lib in link_args: continue link_args.append(lib) - # Also store the raw link arguments, and store raw_libpaths - for lib in self._convert_mingw_paths(shlex.split(out_raw)): - if lib.startswith('-L') and not lib.startswith(('-L-l', '-L-L')): - raw_libpaths.add(lib[2:]) - raw_link_args.append(lib) - # Set everything - self.link_args = link_args - self.raw_link_args = raw_link_args # Add all -Lbar args if we have -lfoo args in link_args if libs_notfound: # Order of -L flags doesn't matter with ld, but it might with other # linkers such as MSVC, so prepend them. - self.link_args = ['-L' + lp for lp in raw_libpaths] + self.link_args + link_args = ['-L' + lp for lp in prefix_libpaths] + link_args + return link_args, raw_link_args + + def _set_libs(self): + env = None + libcmd = [self.name, '--libs'] + if self.static: + libcmd.append('--static') + # Force pkg-config to output -L fields even if they are system + # paths so we can do manual searching with cc.find_library() later. + env = os.environ.copy() + env['PKG_CONFIG_ALLOW_SYSTEM_LIBS'] = '1' + ret, out = self._call_pkgbin(libcmd, env=env) + if ret != 0: + raise DependencyException('Could not generate libs for %s:\n\n%s' % + (self.name, out)) + # Also get the 'raw' output without -Lfoo system paths for adding -L + # args with -lfoo when a library can't be found, and also in + # gnome.generate_gir + gnome.gtkdoc which need -L -l arguments. + ret, out_raw = self._call_pkgbin(libcmd) + if ret != 0: + raise DependencyException('Could not generate libs for %s:\n\n%s' % + (self.name, out_raw)) + self.link_args, self.raw_link_args = self._search_libs(out, out_raw) def get_pkgconfig_variable(self, variable_name, kwargs): options = ['--variable=' + variable_name, self.name] @@ -1036,7 +1066,7 @@ class ExtraFrameworkDependency(ExternalDependency): def __init__(self, name, required, path, env, lang, kwargs): super().__init__('extraframeworks', env, lang, kwargs) - self.name = None + self.name = name self.required = required self.detect(name, path) if self.found(): diff -Nru meson-0.47.1/mesonbuild/dependencies/boost.py meson-0.47.2/mesonbuild/dependencies/boost.py --- meson-0.47.1/mesonbuild/dependencies/boost.py 2018-07-02 17:41:43.000000000 +0000 +++ meson-0.47.2/mesonbuild/dependencies/boost.py 2018-08-25 08:05:50.000000000 +0000 @@ -63,6 +63,7 @@ # Win / Cygwin: libboost_.dll.a (location = /usr/lib) # libboost_.a # cygboost__1_64.dll (location = /usr/bin) +# Win / VS: boost_-vc-mt[-gd]--1_67.dll (location = C:/local/boost_1_67_0) # Mac / homebrew: libboost_.dylib + libboost_-mt.dylib (location = /usr/local/lib) # Mac / macports: libboost_.dylib + libboost_-mt.dylib (location = /opt/local/lib) # @@ -269,7 +270,6 @@ def detect_lib_modules(self): self.lib_modules = {} - # 1. Try to find modules using compiler.find_library( ) if self.find_libraries_with_abi_tags(self.abi_tags()): pass @@ -328,8 +328,22 @@ def debug_tag(self): return '-gd' if self.is_debug else '' + def arch_tag(self): + # currently only applies to windows msvc installed binaries + if self.env.detect_cpp_compiler(self.want_cross).get_id() != 'msvc': + return '' + # pre-compiled binaries only added arch tag for versions > 1.64 + if float(self.version) < 1.65: + return '' + arch = detect_cpu_family(self.env.coredata.compilers) + if arch == 'x86': + return '-x32' + elif arch == 'x86_64': + return '-x64' + return '' + def versioned_abi_tag(self): - return self.compiler_tag() + self.threading_tag() + self.debug_tag() + self.version_tag() + return self.compiler_tag() + self.threading_tag() + self.debug_tag() + self.arch_tag() + self.version_tag() # FIXME - how to handle different distributions, e.g. for Mac? Currently we handle homebrew and macports, but not fink. def abi_tags(self): @@ -439,7 +453,7 @@ if self.libdir: libdirs = [self.libdir] elif self.boost_root is None: - libdirs = mesonlib.get_library_dirs() + libdirs = mesonlib.get_library_dirs(self.env) else: libdirs = [os.path.join(self.boost_root, 'lib')] for libdir in libdirs: diff -Nru meson-0.47.1/mesonbuild/environment.py meson-0.47.2/mesonbuild/environment.py --- meson-0.47.1/mesonbuild/environment.py 2018-07-09 21:47:04.000000000 +0000 +++ meson-0.47.2/mesonbuild/environment.py 2018-08-25 08:05:50.000000000 +0000 @@ -84,7 +84,10 @@ 'parisc', 'ppc', 'ppc64', - 'ppc64le', + 'riscv32', + 'riscv64', + 's390x', + 'sparc', 'sparc64', 'x86', 'x86_64' @@ -218,7 +221,8 @@ return 'mips' if trial == 'mips64el': return 'mips64' - + if trial.startswith('ppc64'): + return 'ppc64' if trial in ('amd64', 'x64'): trial = 'x86_64' if trial == 'x86_64': @@ -470,6 +474,8 @@ C, C++, ObjC, ObjC++, Fortran, CS so consolidate it here. ''' if self.is_cross_build() and want_cross: + if lang not in self.cross_info.config['binaries']: + raise EnvironmentException('{!r} compiler binary not defined in cross file'.format(lang)) compilers = mesonlib.stringlistify(self.cross_info.config['binaries'][lang]) # Ensure ccache exists and remove it if it doesn't if compilers[0] == 'ccache': diff -Nru meson-0.47.1/mesonbuild/interpreterbase.py meson-0.47.2/mesonbuild/interpreterbase.py --- meson-0.47.1/mesonbuild/interpreterbase.py 2018-07-09 21:47:04.000000000 +0000 +++ meson-0.47.2/mesonbuild/interpreterbase.py 2018-08-25 08:05:50.000000000 +0000 @@ -172,6 +172,9 @@ @staticmethod def get_target_version(subproject): + # Don't do any checks if project() has not been parsed yet + if subproject not in mesonlib.project_meson_versions: + return '' return mesonlib.project_meson_versions[subproject] def use(self, subproject): @@ -225,7 +228,7 @@ @staticmethod def get_warning_str_prefix(tv): - return 'Project specifies a minimum meson_version \'{}\' which conflicts with:'.format(tv) + return 'Project specifies a minimum meson_version \'{}\' but uses features which were added in newer versions:'.format(tv) def log_usage_warning(self, tv): mlog.warning('Project targetting \'{}\' but tried to use feature introduced ' diff -Nru meson-0.47.1/mesonbuild/interpreter.py meson-0.47.2/mesonbuild/interpreter.py --- meson-0.47.1/mesonbuild/interpreter.py 2018-07-09 21:47:04.000000000 +0000 +++ meson-0.47.2/mesonbuild/interpreter.py 2018-08-25 08:05:50.000000000 +0000 @@ -92,12 +92,13 @@ def auto_method(self, args, kwargs): return self.held_object.is_auto() -def extract_required_kwarg(kwargs): +def extract_required_kwarg(kwargs, subproject): val = kwargs.get('required', True) disabled = False required = False feature = None if isinstance(val, FeatureOptionHolder): + FeatureNew('User option "feature"', '0.47.0').use(subproject) option = val.held_object feature = val.name if option.is_disabled(): @@ -398,7 +399,7 @@ def version_method(self, args, kwargs): return self.held_object.get_version() - @permittedKwargs({'define_variable'}) + @permittedKwargs({'define_variable', 'default'}) def pkgconfig_method(self, args, kwargs): args = listify(args) if len(args) != 1: @@ -1412,7 +1413,7 @@ if not isinstance(libname, str): raise InterpreterException('Library name not a string.') - disabled, required, feature = extract_required_kwarg(kwargs) + disabled, required, feature = extract_required_kwarg(kwargs, self.subproject) if disabled: mlog.log('Library', mlog.bold(libname), 'skipped: feature', mlog.bold(feature), 'disabled') lib = dependencies.ExternalLibrary(libname, None, @@ -1836,7 +1837,7 @@ class Interpreter(InterpreterBase): def __init__(self, build, backend=None, subproject='', subdir='', subproject_dir='subprojects', - modules = None, default_project_options=None): + modules = None, default_project_options=None, mock=False): super().__init__(build.environment.get_source_dir(), subdir) self.an_unpicklable_object = mesonlib.an_unpicklable_object self.build = build @@ -1853,8 +1854,9 @@ self.subproject_directory_name = subdir.split(os.path.sep)[-1] self.subproject_dir = subproject_dir self.option_file = os.path.join(self.source_root, self.subdir, 'meson_options.txt') - self.load_root_meson_file() - self.sanity_check_ast() + if not mock: + self.load_root_meson_file() + self.sanity_check_ast() self.builtin.update({'meson': MesonMain(build, self)}) self.generators = [] self.visited_subdirs = {} @@ -1871,7 +1873,8 @@ 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)] - self.parse_project() + if not mock: + self.parse_project() self.builtin['build_machine'] = BuildMachine(self.coredata.compilers) if not self.build.environment.is_cross_build(): self.builtin['host_machine'] = self.builtin['build_machine'] @@ -2265,7 +2268,7 @@ return self.subprojects[dirname] def get_option_internal(self, optname): - undecorated_optname = optname + raw_optname = optname try: return self.coredata.base_options[optname] except KeyError: @@ -2282,9 +2285,20 @@ optname = self.subproject + ':' + optname try: opt = self.coredata.user_options[optname] - if opt.yielding and ':' in optname: - # If option not present in superproject, keep the original. - opt = self.coredata.user_options.get(undecorated_optname, opt) + if opt.yielding and ':' in optname and raw_optname in self.coredata.user_options: + popt = self.coredata.user_options[raw_optname] + if type(opt) is type(popt): + opt = popt + else: + # Get class name, then option type as a string + opt_type = opt.__class__.__name__[4:][:-6].lower() + popt_type = popt.__class__.__name__[4:][:-6].lower() + # This is not a hard error to avoid dependency hell, the workaround + # when this happens is to simply set the subproject's option directly. + mlog.warning('Option {0!r} of type {1!r} in subproject {2!r} cannot yield ' + 'to parent option of type {3!r}, ignoring parent value. ' + 'Use -D{2}:{0}=value to set the value for this option manually' + '.'.format(raw_optname, opt_type, self.subproject, popt_type)) return opt except KeyError: pass @@ -2458,7 +2472,7 @@ @permittedKwargs(permitted_kwargs['add_languages']) @stringArgs def func_add_languages(self, node, args, kwargs): - disabled, required, feature = extract_required_kwarg(kwargs) + disabled, required, feature = extract_required_kwarg(kwargs, self.subproject) if disabled: for lang in sorted(args, key=compilers.sort_clink): mlog.log('Compiler for language', mlog.bold(lang), 'skipped: feature', mlog.bold(feature), 'disabled') @@ -2719,7 +2733,7 @@ if not args: raise InterpreterException('No program name specified.') - disabled, required, feature = extract_required_kwarg(kwargs) + disabled, required, feature = extract_required_kwarg(kwargs, self.subproject) if disabled: mlog.log('Program', mlog.bold(' '.join(args)), 'skipped: feature', mlog.bold(feature), 'disabled') return ExternalProgramHolder(dependencies.NonExistingExternalProgram()) @@ -2802,6 +2816,12 @@ if not dep: return False found = dep.version_method([], {}) + # Don't do a version check if the dependency is not found and not required + if found == 'none' and not required: + subproj_path = os.path.join(self.subproject_dir, dirname) + mlog.log('Dependency', mlog.bold(name), 'from subproject', + mlog.bold(subproj_path), 'found:', mlog.red('NO'), '(cached)') + return dep if self.check_subproject_version(wanted, found): subproj_path = os.path.join(self.subproject_dir, dirname) mlog.log('Dependency', mlog.bold(name), 'from subproject', @@ -2834,7 +2854,7 @@ name = args[0] display_name = name if name else '(anonymous)' - disabled, required, feature = extract_required_kwarg(kwargs) + disabled, required, feature = extract_required_kwarg(kwargs, self.subproject) if disabled: mlog.log('Dependency', mlog.bold(display_name), 'skipped: feature', mlog.bold(feature), 'disabled') return DependencyHolder(NotFoundDependency(self.environment), self.subproject) @@ -3078,7 +3098,7 @@ regex_selector] + vcs_cmd kwargs.setdefault('build_by_default', True) kwargs.setdefault('build_always_stale', True) - return self.func_custom_target(node, [kwargs['output']], kwargs) + return self._func_custom_target_impl(node, [kwargs['output']], kwargs) @FeatureNew('subdir_done', '0.46.0') @stringArgs @@ -3098,6 +3118,10 @@ raise InterpreterException('custom_target: Only one positional argument is allowed, and it must be a string name') if 'depfile' in kwargs and ('@BASENAME@' in kwargs['depfile'] or '@PLAINNAME@' in kwargs['depfile']): FeatureNew('substitutions in custom_target depfile', '0.47.0').use(self.subproject) + return self._func_custom_target_impl(node, args, kwargs) + + def _func_custom_target_impl(self, node, args, kwargs): + 'Implementation-only, without FeatureNew checks, for internal use' name = args[0] kwargs['install_mode'] = self._get_kwarg_install_mode(kwargs) tg = CustomTargetHolder(build.CustomTarget(name, self.subdir, self.subproject, kwargs), self) diff -Nru meson-0.47.1/mesonbuild/mesonlib.py meson-0.47.2/mesonbuild/mesonlib.py --- meson-0.47.1/mesonbuild/mesonlib.py 2018-07-09 21:47:04.000000000 +0000 +++ meson-0.47.2/mesonbuild/mesonlib.py 2018-08-25 08:05:50.000000000 +0000 @@ -247,7 +247,7 @@ for comp in compilers: if comp.can_compile(src): return comp - raise RuntimeError('No specified compiler can handle file {!s}'.format(src)) + raise MesonException('No specified compiler can handle file {!s}'.format(src)) def classify_unity_sources(compilers, sources): compsrclist = {} @@ -1094,6 +1094,9 @@ '", "'.join(repr(e) for e in self.__container.keys())) return 'OrderedSet()' + def __reversed__(self): + return reversed(self.__container) + def add(self, value): self.__container[value] = None diff -Nru meson-0.47.1/mesonbuild/minstall.py meson-0.47.2/mesonbuild/minstall.py --- meson-0.47.1/mesonbuild/minstall.py 2018-07-09 21:47:04.000000000 +0000 +++ meson-0.47.2/mesonbuild/minstall.py 2018-08-25 08:05:50.000000000 +0000 @@ -20,7 +20,16 @@ from .scripts import destdir_join from .mesonlib import is_windows, Popen_safe from .mtest import rebuild_all -from __main__ import __file__ as main_file +try: + from __main__ import __file__ as main_file +except ImportError: + # Happens when running as meson.exe which is native Windows. + # This is only used for pkexec which is not, so this is fine. + main_file = None + +symlink_warning = '''Warning: trying to copy a symlink that points to a file. This will copy the file, +but this will be changed in a future version of Meson to copy the symlink as is. Please update your +build definitions so that it will not break when the change happens.''' selinux_updates = [] @@ -64,9 +73,9 @@ for d in self.dirs: append_to_log(self.lf, d) -def is_executable(path): +def is_executable(path, follow_symlinks=False): '''Checks whether any of the "x" bits are set in the source file mode.''' - return bool(os.stat(path).st_mode & 0o111) + return bool(os.stat(path, follow_symlinks=follow_symlinks).st_mode & 0o111) def append_to_log(lf, line): lf.write(line) @@ -74,13 +83,38 @@ lf.write('\n') lf.flush() +def set_chown(path, user=None, group=None, dir_fd=None, follow_symlinks=True): + # shutil.chown will call os.chown without passing all the parameters + # and particularly follow_symlinks, thus we replace it temporary + # with a lambda with all the parameters so that follow_symlinks will + # be actually passed properly. + # Not nice, but better than actually rewriting shutil.chown until + # this python bug is fixed: https://bugs.python.org/issue18108 + real_os_chown = os.chown + try: + os.chown = lambda p, u, g: real_os_chown(p, u, g, + dir_fd=dir_fd, + follow_symlinks=follow_symlinks) + shutil.chown(path, user, group) + except: + raise + finally: + os.chown = real_os_chown + +def set_chmod(path, mode, dir_fd=None, follow_symlinks=True): + try: + os.chmod(path, mode, dir_fd=dir_fd, follow_symlinks=follow_symlinks) + except (NotImplementedError, OSError, SystemError) as e: + if not os.path.islink(path): + os.chmod(path, mode, dir_fd=dir_fd) + def sanitize_permissions(path, umask): if umask is None: return - new_perms = 0o777 if is_executable(path) else 0o666 + new_perms = 0o777 if is_executable(path, follow_symlinks=False) else 0o666 new_perms &= ~umask try: - os.chmod(path, new_perms) + set_chmod(path, new_perms, follow_symlinks=False) except PermissionError as e: msg = '{!r}: Unable to set permissions {!r}: {}, ignoring...' print(msg.format(path, new_perms, e.strerror)) @@ -93,7 +127,7 @@ # No chown() on Windows, and must set one of owner/group if not is_windows() and (mode.owner or mode.group) is not None: try: - shutil.chown(path, mode.owner, mode.group) + set_chown(path, mode.owner, mode.group, follow_symlinks=False) except PermissionError as e: msg = '{!r}: Unable to set owner {!r} and group {!r}: {}, ignoring...' print(msg.format(path, mode.owner, mode.group, e.strerror)) @@ -111,7 +145,7 @@ # NOTE: On Windows you can set read/write perms; the rest are ignored if mode.perms_s is not None: try: - os.chmod(path, mode.perms) + set_chmod(path, mode.perms, follow_symlinks=False) except PermissionError as e: msg = '{!r}: Unable to set permissions {!r}: {}, ignoring...' print(msg.format(path, mode.perms_s, e.strerror)) @@ -186,12 +220,16 @@ def should_preserve_existing_file(self, from_file, to_file): if not self.options.only_changed: return False + # Always replace danging symlinks + if os.path.islink(from_file) and not os.path.isfile(from_file): + return False from_time = os.stat(from_file).st_mtime to_time = os.stat(to_file).st_mtime return from_time <= to_time def do_copyfile(self, from_file, to_file): - if not os.path.isfile(from_file): + outdir = os.path.split(to_file)[0] + if not os.path.isfile(from_file) and not os.path.islink(from_file): raise RuntimeError('Tried to install something that isn\'t a file:' '{!r}'.format(from_file)) # copyfile fails if the target file already exists, so remove it to @@ -205,11 +243,21 @@ append_to_log(self.lf, '# Preserving old file %s\n' % to_file) print('Preserving existing file %s.' % to_file) return False - os.unlink(to_file) - outdir = os.path.split(to_file)[0] + os.remove(to_file) print('Installing %s to %s' % (from_file, outdir)) - shutil.copyfile(from_file, to_file) - shutil.copystat(from_file, to_file) + if os.path.islink(from_file): + if not os.path.exists(from_file): + # Dangling symlink. Replicate as is. + shutil.copy(from_file, outdir, follow_symlinks=False) + else: + # Remove this entire branch when changing the behaviour to duplicate + # symlinks rather than copying what they point to. + print(symlink_warning) + shutil.copyfile(from_file, to_file) + shutil.copystat(from_file, to_file) + else: + shutil.copyfile(from_file, to_file) + shutil.copystat(from_file, to_file) selinux_updates.append(to_file) append_to_log(self.lf, to_file) return True @@ -272,7 +320,7 @@ if os.path.isdir(abs_dst): print('Tried to copy file %s but a directory of that name already exists.' % abs_dst) if os.path.exists(abs_dst): - os.unlink(abs_dst) + os.remove(abs_dst) parent_dir = os.path.dirname(abs_dst) if not os.path.isdir(parent_dir): os.mkdir(parent_dir) @@ -426,7 +474,7 @@ try: symlinkfilename = os.path.join(outdir, alias) try: - os.unlink(symlinkfilename) + os.remove(symlinkfilename) except FileNotFoundError: pass os.symlink(to, symlinkfilename) diff -Nru meson-0.47.1/mesonbuild/modules/gnome.py meson-0.47.2/mesonbuild/modules/gnome.py --- meson-0.47.1/mesonbuild/modules/gnome.py 2018-07-09 21:47:04.000000000 +0000 +++ meson-0.47.2/mesonbuild/modules/gnome.py 2018-08-25 08:05:50.000000000 +0000 @@ -511,7 +511,7 @@ sanitize = state.environment.coredata.base_options['b_sanitize'].value cflags += compilers.sanitizer_compile_args(sanitize) if 'address' in sanitize.split(','): - external_ldflags += ['-lasan'] + internal_ldflags += ['-lasan'] # This must be first in ldflags # FIXME: Linking directly to libasan is not recommended but g-ir-scanner # does not understand -f LDFLAGS. https://bugzilla.gnome.org/show_bug.cgi?id=783892 # ldflags += compilers.sanitizer_link_args(sanitize) @@ -1018,7 +1018,7 @@ output = namebase + '-docbook' outputs = [] for f in xml_files: - outputs.append('{}-{}'.format(docbook, f)) + outputs.append('{}-{}'.format(docbook, os.path.basename(str(f)))) if mesonlib.version_compare(glib_version, '>= 2.56.2'): custom_kwargs = {'input': xml_files, diff -Nru meson-0.47.1/mesonbuild/modules/python.py meson-0.47.2/mesonbuild/modules/python.py --- meson-0.47.1/mesonbuild/modules/python.py 2018-07-02 17:41:43.000000000 +0000 +++ meson-0.47.2/mesonbuild/modules/python.py 2018-08-25 08:05:50.000000000 +0000 @@ -470,11 +470,14 @@ mlog.log("Using meson's python {}".format(mesonlib.python_command)) python = ExternalProgram('python3', mesonlib.python_command, silent=True) else: - if mesonlib.is_windows(): + python = ExternalProgram(name_or_path, silent = True) + + if not python.found() and mesonlib.is_windows(): pythonpath = self._get_win_pythonpath(name_or_path) if pythonpath is not None: name_or_path = pythonpath - python = ExternalProgram(name_or_path, silent = True) + python = ExternalProgram(name_or_path, silent = True) + # Last ditch effort, python2 or python3 can be named python # on various platforms, let's not give up just yet, if an executable # named python is available and has a compatible version, let's use diff -Nru meson-0.47.1/mesonbuild/mparser.py meson-0.47.2/mesonbuild/mparser.py --- meson-0.47.1/mesonbuild/mparser.py 2018-06-02 21:50:11.000000000 +0000 +++ meson-0.47.2/mesonbuild/mparser.py 2018-08-25 08:05:50.000000000 +0000 @@ -14,6 +14,7 @@ import re import codecs +import types from .mesonlib import MesonException from . import mlog @@ -90,6 +91,7 @@ self.code = code self.keywords = {'true', 'false', 'if', 'else', 'elif', 'endif', 'and', 'or', 'not', 'foreach', 'endforeach'} + self.future_keywords = {'continue', 'break', 'in', 'return'} self.token_specification = [ # Need to be sorted longest to shortest. ('ignore', re.compile(r'[ \t]')), @@ -196,6 +198,9 @@ if match_text in self.keywords: tid = match_text else: + if match_text in self.future_keywords: + mlog.warning("Identifier '{}' will become a reserved keyword in a future release. Please rename it.".format(match_text), + location=types.SimpleNamespace(subdir=subdir, lineno=lineno)) value = match_text yield Token(tid, subdir, curline_start, curline, col, bytespan, value) break diff -Nru meson-0.47.1/mesonbuild/mtest.py meson-0.47.2/mesonbuild/mtest.py --- meson-0.47.1/mesonbuild/mtest.py 2018-06-18 21:29:57.000000000 +0000 +++ meson-0.47.2/mesonbuild/mtest.py 2018-08-25 08:05:50.000000000 +0000 @@ -20,7 +20,7 @@ from mesonbuild import build from mesonbuild import environment from mesonbuild.dependencies import ExternalProgram -from mesonbuild import mesonlib +from mesonbuild.mesonlib import MesonException from mesonbuild import mlog import time, datetime, multiprocessing, json @@ -130,8 +130,11 @@ signame = 'SIGinvalid' return '(exit status %d or signal %d %s)' % (retcode, signum, signame) +def env_tuple_to_str(env): + return ''.join(["%s='%s' " % (k, v) for k, v in env]) -class TestException(mesonlib.MesonException): + +class TestException(MesonException): pass @@ -162,7 +165,8 @@ if self.cmd is None: res += 'NONE\n' else: - res += '%s%s\n' % (''.join(["%s='%s' " % (k, v) for k, v in self.env.items()]), ' ' .join(self.cmd)) + test_only_env = set(self.env.items()) - set(os.environ.items()) + res += '{}{}\n'.format(env_tuple_to_str(test_only_env), ' '.join(self.cmd)) if self.stdo: res += '--- stdout ---\n' res += self.stdo @@ -608,6 +612,8 @@ self.logfile.write('Log of Meson test suite run on %s\n\n' % datetime.datetime.now().isoformat()) + inherit_env = env_tuple_to_str(os.environ.items()) + self.logfile.write('Inherited environment: {}\n\n'.format(inherit_env)) @staticmethod def get_wrapper(options): diff -Nru meson-0.47.1/mesonbuild/optinterpreter.py meson-0.47.2/mesonbuild/optinterpreter.py --- meson-0.47.1/mesonbuild/optinterpreter.py 2018-07-02 17:41:43.000000000 +0000 +++ meson-0.47.2/mesonbuild/optinterpreter.py 2018-08-25 08:05:50.000000000 +0000 @@ -121,7 +121,7 @@ def FeatureParser(name, description, kwargs): return coredata.UserFeatureOption(name, description, - kwargs.get('value', 'enabled'), + kwargs.get('value', 'auto'), yielding=kwargs.get('yield', coredata.default_yielding)) option_types = {'string': StringParser, diff -Nru meson-0.47.1/mesonbuild/scripts/gtkdochelper.py meson-0.47.2/mesonbuild/scripts/gtkdochelper.py --- meson-0.47.1/mesonbuild/scripts/gtkdochelper.py 2018-06-27 19:54:19.000000000 +0000 +++ meson-0.47.2/mesonbuild/scripts/gtkdochelper.py 2018-08-25 08:05:50.000000000 +0000 @@ -17,7 +17,7 @@ import shlex import shutil import argparse -from ..mesonlib import MesonException, Popen_safe +from ..mesonlib import MesonException, Popen_safe, is_windows from . import destdir_join parser = argparse.ArgumentParser() @@ -46,10 +46,20 @@ parser.add_argument('--mode', dest='mode', default='') parser.add_argument('--installdir', dest='install_dir') -def gtkdoc_run_check(cmd, cwd, library_path=None): +def gtkdoc_run_check(cmd, cwd, library_paths=None): + if library_paths is None: + library_paths = [] + env = dict(os.environ) - if library_path: - env['LD_LIBRARY_PATH'] = library_path + if is_windows(): + if 'PATH' in env: + library_paths.extend(env['PATH'].split(os.pathsep)) + env['PATH'] = os.pathsep.join(library_paths) + else: + if 'LD_LIBRARY_PATH' in env: + library_paths.extend(env['LD_LIBRARY_PATH'].split(os.pathsep)) + env['LD_LIBRARY_PATH'] = os.pathsep.join(library_paths) + # Put stderr into stdout since we want to print it out anyway. # This preserves the order of messages. p, out = Popen_safe(cmd, cwd=cwd, env=env, stderr=subprocess.STDOUT)[0:2] @@ -135,11 +145,8 @@ for ldflag in shlex.split(ldflags): if ldflag.startswith('-Wl,-rpath,'): library_paths.append(ldflag[11:]) - if 'LD_LIBRARY_PATH' in os.environ: - library_paths.append(os.environ['LD_LIBRARY_PATH']) - library_path = ':'.join(library_paths) - gtkdoc_run_check(scanobjs_cmd, build_root, library_path) + gtkdoc_run_check(scanobjs_cmd, build_root, library_paths) # Make docbook files if mode == 'auto': diff -Nru meson-0.47.1/meson.egg-info/dependency_links.txt meson-0.47.2/meson.egg-info/dependency_links.txt --- meson-0.47.1/meson.egg-info/dependency_links.txt 1970-01-01 00:00:00.000000000 +0000 +++ meson-0.47.2/meson.egg-info/dependency_links.txt 2018-08-25 08:14:31.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru meson-0.47.1/meson.egg-info/PKG-INFO meson-0.47.2/meson.egg-info/PKG-INFO --- meson-0.47.1/meson.egg-info/PKG-INFO 1970-01-01 00:00:00.000000000 +0000 +++ meson-0.47.2/meson.egg-info/PKG-INFO 2018-08-25 08:14:31.000000000 +0000 @@ -0,0 +1,25 @@ +Metadata-Version: 1.2 +Name: meson +Version: 0.47.2 +Summary: A high performance build system +Home-page: http://mesonbuild.com +Author: Jussi Pakkanen +Author-email: jpakkane@gmail.com +License: Apache License, Version 2.0 +Description: Meson is a cross-platform build system designed to be both as + fast and as user friendly as possible. It supports many languages and compilers, including + GCC, Clang and Visual Studio. Its build definitions are written in a simple non-turing + complete DSL. +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Console +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Apache Software License +Classifier: Natural Language :: English +Classifier: Operating System :: MacOS :: MacOS X +Classifier: Operating System :: Microsoft :: Windows +Classifier: Operating System :: POSIX :: BSD +Classifier: Operating System :: POSIX :: Linux +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Topic :: Software Development :: Build Tools +Requires-Python: >=3.5 diff -Nru meson-0.47.1/meson.egg-info/SOURCES.txt meson-0.47.2/meson.egg-info/SOURCES.txt --- meson-0.47.1/meson.egg-info/SOURCES.txt 1970-01-01 00:00:00.000000000 +0000 +++ meson-0.47.2/meson.egg-info/SOURCES.txt 2018-08-25 08:14:31.000000000 +0000 @@ -0,0 +1,2150 @@ +COPYING +MANIFEST.in +README.md +__main__.py +ghwt.py +meson.py +mesonconf.py +mesonintrospect.py +mesonrewriter.py +mesontest.py +run_cross_test.py +run_meson_command_tests.py +run_project_tests.py +run_tests.py +run_unittests.py +setup.cfg +setup.py +wraptool.py +cross/armcc.txt +cross/armclang.txt +cross/iphone.txt +cross/linux-mingw-w64-32bit.txt +cross/linux-mingw-w64-64bit.txt +cross/ownstdlib.txt +cross/ubuntu-armhf.txt +cross/ubuntu-faketarget.txt +data/com.mesonbuild.install.policy +data/macros.meson +data/shell-completions/zsh/_meson +data/syntax-highlighting/emacs/meson.el +data/syntax-highlighting/vim/README +data/syntax-highlighting/vim/ftdetect/meson.vim +data/syntax-highlighting/vim/indent/meson.vim +data/syntax-highlighting/vim/syntax/meson.vim +graphics/meson_logo.svg +graphics/meson_logo_big.png +graphics/wrap_logo.svg +man/meson.1 +man/mesonconf.1 +man/mesonintrospect.1 +man/mesontest.1 +man/wraptool.1 +manual tests/1 wrap/main.c +manual tests/1 wrap/meson.build +manual tests/1 wrap/subprojects/sqlite.wrap +manual tests/10 svn wrap/meson.build +manual tests/10 svn wrap/prog.c +manual tests/10 svn wrap/subprojects/samplesubproject.wrap +manual tests/2 multiwrap/meson.build +manual tests/2 multiwrap/prog.c +manual tests/2 multiwrap/subprojects/libpng.wrap +manual tests/2 multiwrap/subprojects/lua.wrap +manual tests/2 multiwrap/subprojects/zlib.wrap +manual tests/3 git wrap/meson.build +manual tests/3 git wrap/prog.c +manual tests/3 git wrap/subprojects/samplesubproject.wrap +manual tests/4 standalone binaries/Info.plist +manual tests/4 standalone binaries/build_linux_package.sh +manual tests/4 standalone binaries/build_osx_package.sh +manual tests/4 standalone binaries/build_windows_package.py +manual tests/4 standalone binaries/linux_bundler.sh +manual tests/4 standalone binaries/meson.build +manual tests/4 standalone binaries/myapp.cpp +manual tests/4 standalone binaries/myapp.icns +manual tests/4 standalone binaries/myapp.iss +manual tests/4 standalone binaries/myapp.sh +manual tests/4 standalone binaries/osx_bundler.sh +manual tests/4 standalone binaries/readme.txt +manual tests/4 standalone binaries/template.dmg.gz +manual tests/5 rpm/lib.c +manual tests/5 rpm/lib.h +manual tests/5 rpm/main.c +manual tests/5 rpm/meson.build +manual tests/6 hg wrap/meson.build +manual tests/6 hg wrap/prog.c +manual tests/6 hg wrap/subprojects/samplesubproject.wrap +manual tests/7 vala composite widgets/meson.build +manual tests/7 vala composite widgets/my-resources.xml +manual tests/7 vala composite widgets/mywidget.ui +manual tests/7 vala composite widgets/mywidget.vala +manual tests/8 timeout/meson.build +manual tests/8 timeout/sleepprog.c +manual tests/9 nostdlib/meson.build +manual tests/9 nostdlib/prog.c +manual tests/9 nostdlib/subprojects/mylibc/libc.c +manual tests/9 nostdlib/subprojects/mylibc/meson.build +manual tests/9 nostdlib/subprojects/mylibc/stdio.h +manual tests/9 nostdlib/subprojects/mylibc/stubstart.s +meson.egg-info/PKG-INFO +meson.egg-info/SOURCES.txt +meson.egg-info/dependency_links.txt +meson.egg-info/top_level.txt +mesonbuild/__init__.py +mesonbuild/astinterpreter.py +mesonbuild/build.py +mesonbuild/coredata.py +mesonbuild/environment.py +mesonbuild/interpreter.py +mesonbuild/interpreterbase.py +mesonbuild/linkers.py +mesonbuild/mconf.py +mesonbuild/mesonlib.py +mesonbuild/mesonmain.py +mesonbuild/minit.py +mesonbuild/minstall.py +mesonbuild/mintro.py +mesonbuild/mlog.py +mesonbuild/mparser.py +mesonbuild/mtest.py +mesonbuild/optinterpreter.py +mesonbuild/rewriter.py +mesonbuild/backend/__init__.py +mesonbuild/backend/backends.py +mesonbuild/backend/ninjabackend.py +mesonbuild/backend/vs2010backend.py +mesonbuild/backend/vs2015backend.py +mesonbuild/backend/vs2017backend.py +mesonbuild/backend/xcodebackend.py +mesonbuild/compilers/__init__.py +mesonbuild/compilers/c.py +mesonbuild/compilers/compilers.py +mesonbuild/compilers/cpp.py +mesonbuild/compilers/cs.py +mesonbuild/compilers/d.py +mesonbuild/compilers/fortran.py +mesonbuild/compilers/java.py +mesonbuild/compilers/objc.py +mesonbuild/compilers/objcpp.py +mesonbuild/compilers/rust.py +mesonbuild/compilers/swift.py +mesonbuild/compilers/vala.py +mesonbuild/dependencies/__init__.py +mesonbuild/dependencies/base.py +mesonbuild/dependencies/boost.py +mesonbuild/dependencies/dev.py +mesonbuild/dependencies/misc.py +mesonbuild/dependencies/platform.py +mesonbuild/dependencies/ui.py +mesonbuild/modules/__init__.py +mesonbuild/modules/gnome.py +mesonbuild/modules/i18n.py +mesonbuild/modules/modtest.py +mesonbuild/modules/pkgconfig.py +mesonbuild/modules/python.py +mesonbuild/modules/python3.py +mesonbuild/modules/qt.py +mesonbuild/modules/qt4.py +mesonbuild/modules/qt5.py +mesonbuild/modules/rpm.py +mesonbuild/modules/unstable_icestorm.py +mesonbuild/modules/unstable_simd.py +mesonbuild/modules/windows.py +mesonbuild/scripts/__init__.py +mesonbuild/scripts/cleantrees.py +mesonbuild/scripts/commandrunner.py +mesonbuild/scripts/coverage.py +mesonbuild/scripts/delwithsuffix.py +mesonbuild/scripts/depfixer.py +mesonbuild/scripts/dirchanger.py +mesonbuild/scripts/dist.py +mesonbuild/scripts/gettext.py +mesonbuild/scripts/gtkdochelper.py +mesonbuild/scripts/meson_exe.py +mesonbuild/scripts/msgfmthelper.py +mesonbuild/scripts/regen_checker.py +mesonbuild/scripts/scanbuild.py +mesonbuild/scripts/symbolextractor.py +mesonbuild/scripts/uninstall.py +mesonbuild/scripts/vcstagger.py +mesonbuild/scripts/yelphelper.py +mesonbuild/wrap/__init__.py +mesonbuild/wrap/wrap.py +mesonbuild/wrap/wraptool.py +test cases/common/1 trivial/meson.build +test cases/common/1 trivial/trivial.c +test cases/common/10 man install/bar.2 +test cases/common/10 man install/baz.1.in +test cases/common/10 man install/foo.1 +test cases/common/10 man install/installed_files.txt +test cases/common/10 man install/meson.build +test cases/common/10 man install/vanishing/meson.build +test cases/common/10 man install/vanishing/vanishing.1 +test cases/common/10 man install/vanishing/vanishing.2 +test cases/common/100 test workdir/meson.build +test cases/common/100 test workdir/opener.c +test cases/common/101 suites/exe1.c +test cases/common/101 suites/exe2.c +test cases/common/101 suites/meson.build +test cases/common/101 suites/subprojects/sub/meson.build +test cases/common/101 suites/subprojects/sub/sub1.c +test cases/common/101 suites/subprojects/sub/sub2.c +test cases/common/102 threads/meson.build +test cases/common/102 threads/threadprog.c +test cases/common/102 threads/threadprog.cpp +test cases/common/103 manygen/depuser.c +test cases/common/103 manygen/meson.build +test cases/common/103 manygen/subdir/funcinfo.def +test cases/common/103 manygen/subdir/manygen.py +test cases/common/103 manygen/subdir/meson.build +test cases/common/104 stringdef/meson.build +test cases/common/104 stringdef/stringdef.c +test cases/common/105 find program path/meson.build +test cases/common/105 find program path/program.py +test cases/common/106 subproject subdir/meson.build +test cases/common/106 subproject subdir/prog.c +test cases/common/106 subproject subdir/subprojects/sub/meson.build +test cases/common/106 subproject subdir/subprojects/sub/lib/meson.build +test cases/common/106 subproject subdir/subprojects/sub/lib/sub.c +test cases/common/106 subproject subdir/subprojects/sub/lib/sub.h +test cases/common/107 postconf/meson.build +test cases/common/107 postconf/postconf.py +test cases/common/107 postconf/prog.c +test cases/common/107 postconf/raw.dat +test cases/common/108 postconf with args/meson.build +test cases/common/108 postconf with args/postconf.py +test cases/common/108 postconf with args/prog.c +test cases/common/108 postconf with args/raw.dat +test cases/common/109 testframework options/meson.build +test cases/common/109 testframework options/meson_options.txt +test cases/common/109 testframework options/test_args.txt +test cases/common/11 subdir/meson.build +test cases/common/11 subdir/subdir/meson.build +test cases/common/11 subdir/subdir/prog.c +test cases/common/110 extract same name/lib.c +test cases/common/110 extract same name/main.c +test cases/common/110 extract same name/meson.build +test cases/common/110 extract same name/src/lib.c +test cases/common/111 has header symbol/meson.build +test cases/common/112 has arg/meson.build +test cases/common/113 generatorcustom/catter.py +test cases/common/113 generatorcustom/gen.py +test cases/common/113 generatorcustom/main.c +test cases/common/113 generatorcustom/meson.build +test cases/common/113 generatorcustom/res1.txt +test cases/common/113 generatorcustom/res2.txt +test cases/common/114 multiple dir configure file/meson.build +test cases/common/114 multiple dir configure file/subdir/foo.txt +test cases/common/114 multiple dir configure file/subdir/meson.build +test cases/common/114 multiple dir configure file/subdir/someinput.in +test cases/common/115 spaces backslash/comparer-end-notstring.c +test cases/common/115 spaces backslash/comparer-end.c +test cases/common/115 spaces backslash/comparer.c +test cases/common/115 spaces backslash/meson.build +test cases/common/115 spaces backslash/asm output/meson.build +test cases/common/115 spaces backslash/include/comparer.h +test cases/common/116 ternary/meson.build +test cases/common/117 custom target capture/data_source.txt +test cases/common/117 custom target capture/installed_files.txt +test cases/common/117 custom target capture/meson.build +test cases/common/117 custom target capture/my_compiler.py +test cases/common/118 allgenerate/converter.py +test cases/common/118 allgenerate/foobar.cpp.in +test cases/common/118 allgenerate/meson.build +test cases/common/119 pathjoin/meson.build +test cases/common/12 data/datafile.dat +test cases/common/12 data/etcfile.dat +test cases/common/12 data/fileobject_datafile.dat +test cases/common/12 data/installed_files.txt +test cases/common/12 data/meson.build +test cases/common/12 data/runscript.sh +test cases/common/12 data/somefile.txt +test cases/common/12 data/to_be_renamed_1.txt +test cases/common/12 data/to_be_renamed_3.txt +test cases/common/12 data/to_be_renamed_4.txt +test cases/common/12 data/vanishing/meson.build +test cases/common/12 data/vanishing/to_be_renamed_2.txt +test cases/common/12 data/vanishing/vanishing.dat +test cases/common/12 data/vanishing/vanishing2.dat +test cases/common/120 subdir subproject/meson.build +test cases/common/120 subdir subproject/prog/meson.build +test cases/common/120 subdir subproject/prog/prog.c +test cases/common/120 subdir subproject/subprojects/sub/meson.build +test cases/common/120 subdir subproject/subprojects/sub/sub.c +test cases/common/120 subdir subproject/subprojects/sub/sub.h +test cases/common/121 interpreter copy mutable var on assignment/meson.build +test cases/common/122 skip/meson.build +test cases/common/123 subproject project arguments/exe.c +test cases/common/123 subproject project arguments/exe.cpp +test cases/common/123 subproject project arguments/meson.build +test cases/common/123 subproject project arguments/subprojects/subexe/meson.build +test cases/common/123 subproject project arguments/subprojects/subexe/subexe.c +test cases/common/124 test skip/meson.build +test cases/common/124 test skip/test_skip.c +test cases/common/125 shared module/meson.build +test cases/common/125 shared module/module.c +test cases/common/125 shared module/prog.c +test cases/common/125 shared module/runtime.c +test cases/common/126 llvm ir and assembly/main.c +test cases/common/126 llvm ir and assembly/main.cpp +test cases/common/126 llvm ir and assembly/meson.build +test cases/common/126 llvm ir and assembly/square-arm.S +test cases/common/126 llvm ir and assembly/square-x86.S +test cases/common/126 llvm ir and assembly/square-x86_64.S +test cases/common/126 llvm ir and assembly/square.ll +test cases/common/126 llvm ir and assembly/symbol-underscore.h +test cases/common/127 cpp and asm/meson.build +test cases/common/127 cpp and asm/retval-arm.S +test cases/common/127 cpp and asm/retval-x86.S +test cases/common/127 cpp and asm/retval-x86_64.S +test cases/common/127 cpp and asm/symbol-underscore.h +test cases/common/127 cpp and asm/trivial.cc +test cases/common/128 extract all shared library/extractor.h +test cases/common/128 extract all shared library/four.c +test cases/common/128 extract all shared library/func1234.def +test cases/common/128 extract all shared library/meson.build +test cases/common/128 extract all shared library/one.c +test cases/common/128 extract all shared library/prog.c +test cases/common/128 extract all shared library/three.c +test cases/common/128 extract all shared library/two.c +test cases/common/129 object only target/installed_files.txt +test cases/common/129 object only target/meson.build +test cases/common/129 object only target/obj_generator.py +test cases/common/129 object only target/prog.c +test cases/common/129 object only target/source.c +test cases/common/129 object only target/source2.c +test cases/common/129 object only target/source2.def +test cases/common/129 object only target/source3.c +test cases/common/13 pch/meson.build +test cases/common/13 pch/prog.c +test cases/common/13 pch/pch/prog.h +test cases/common/13 pch/pch/prog_pch.c +test cases/common/130 no buildincdir/meson.build +test cases/common/130 no buildincdir/prog.c +test cases/common/130 no buildincdir/include/header.h +test cases/common/131 custom target directory install/docgen.py +test cases/common/131 custom target directory install/installed_files.txt +test cases/common/131 custom target directory install/meson.build +test cases/common/132 dependency file generation/main .c +test cases/common/132 dependency file generation/meson.build +test cases/common/133 configure file in generator/meson.build +test cases/common/133 configure file in generator/inc/confdata.in +test cases/common/133 configure file in generator/inc/meson.build +test cases/common/133 configure file in generator/src/gen.py +test cases/common/133 configure file in generator/src/main.c +test cases/common/133 configure file in generator/src/meson.build +test cases/common/133 configure file in generator/src/source +test cases/common/134 generated llvm ir/copyfile.py +test cases/common/134 generated llvm ir/main.c +test cases/common/134 generated llvm ir/meson.build +test cases/common/134 generated llvm ir/square.ll.in +test cases/common/135 generated assembly/copyfile.py +test cases/common/135 generated assembly/main.c +test cases/common/135 generated assembly/meson.build +test cases/common/135 generated assembly/square-arm.S.in +test cases/common/135 generated assembly/square-x86.S.in +test cases/common/135 generated assembly/square-x86_64.S.in +test cases/common/135 generated assembly/symbol-underscore.h +test cases/common/136 build by default targets in tests/main.c +test cases/common/136 build by default targets in tests/meson.build +test cases/common/136 build by default targets in tests/write_file.py +test cases/common/137 build by default/checkexists.py +test cases/common/137 build by default/foo.c +test cases/common/137 build by default/meson.build +test cases/common/137 build by default/mygen.py +test cases/common/137 build by default/source.txt +test cases/common/138 include order/meson.build +test cases/common/138 include order/ordertest.c +test cases/common/138 include order/ctsub/copyfile.py +test cases/common/138 include order/ctsub/emptyfile.c +test cases/common/138 include order/ctsub/main.h +test cases/common/138 include order/ctsub/meson.build +test cases/common/138 include order/inc1/hdr.h +test cases/common/138 include order/inc2/hdr.h +test cases/common/138 include order/sub1/main.h +test cases/common/138 include order/sub1/meson.build +test cases/common/138 include order/sub1/some.c +test cases/common/138 include order/sub1/some.h +test cases/common/138 include order/sub2/main.h +test cases/common/138 include order/sub2/meson.build +test cases/common/138 include order/sub3/main.h +test cases/common/138 include order/sub3/meson.build +test cases/common/138 include order/sub4/main.c +test cases/common/138 include order/sub4/main.h +test cases/common/138 include order/sub4/meson.build +test cases/common/139 override options/four.c +test cases/common/139 override options/meson.build +test cases/common/139 override options/one.c +test cases/common/139 override options/three.c +test cases/common/139 override options/two.c +test cases/common/14 cpp pch/meson.build +test cases/common/14 cpp pch/prog.cc +test cases/common/14 cpp pch/pch/prog.hh +test cases/common/14 cpp pch/pch/prog_pch.cc +test cases/common/140 get define/concat.h +test cases/common/140 get define/meson.build +test cases/common/140 get define/meson_options.txt +test cases/common/141 c cpp and asm/main.c +test cases/common/141 c cpp and asm/main.cpp +test cases/common/141 c cpp and asm/meson.build +test cases/common/141 c cpp and asm/retval-arm.S +test cases/common/141 c cpp and asm/retval-x86.S +test cases/common/141 c cpp and asm/retval-x86_64.S +test cases/common/141 c cpp and asm/somelib.c +test cases/common/141 c cpp and asm/symbol-underscore.h +test cases/common/142 compute int/config.h.in +test cases/common/142 compute int/foobar.h +test cases/common/142 compute int/meson.build +test cases/common/142 compute int/prog.c.in +test cases/common/143 custom target object output/meson.build +test cases/common/143 custom target object output/obj_generator.py +test cases/common/143 custom target object output/objdir/meson.build +test cases/common/143 custom target object output/objdir/source.c +test cases/common/143 custom target object output/progdir/meson.build +test cases/common/143 custom target object output/progdir/prog.c +test cases/common/144 empty build file/meson.build +test cases/common/144 empty build file/subdir/meson.build +test cases/common/145 whole archive/func1.c +test cases/common/145 whole archive/func2.c +test cases/common/145 whole archive/meson.build +test cases/common/145 whole archive/mylib.h +test cases/common/145 whole archive/prog.c +test cases/common/145 whole archive/exe/meson.build +test cases/common/145 whole archive/exe2/meson.build +test cases/common/145 whole archive/exe3/meson.build +test cases/common/145 whole archive/exe4/meson.build +test cases/common/145 whole archive/sh_func2_dep_func1/meson.build +test cases/common/145 whole archive/sh_func2_linked_func1/meson.build +test cases/common/145 whole archive/sh_func2_transdep_func1/meson.build +test cases/common/145 whole archive/sh_only_link_whole/meson.build +test cases/common/145 whole archive/st_func1/meson.build +test cases/common/145 whole archive/st_func2/meson.build +test cases/common/146 C and CPP link/dummy.c +test cases/common/146 C and CPP link/foo.c +test cases/common/146 C and CPP link/foo.cpp +test cases/common/146 C and CPP link/foo.h +test cases/common/146 C and CPP link/foo.hpp +test cases/common/146 C and CPP link/foobar.c +test cases/common/146 C and CPP link/foobar.h +test cases/common/146 C and CPP link/meson.build +test cases/common/146 C and CPP link/sub.c +test cases/common/146 C and CPP link/sub.h +test cases/common/147 mesonintrospect from scripts/check_env.py +test cases/common/147 mesonintrospect from scripts/meson.build +test cases/common/148 custom target multiple outputs/generator.py +test cases/common/148 custom target multiple outputs/installed_files.txt +test cases/common/148 custom target multiple outputs/meson.build +test cases/common/149 special characters/check_quoting.py +test cases/common/149 special characters/installed_files.txt +test cases/common/149 special characters/meson.build +test cases/common/15 mixed pch/func.c +test cases/common/15 mixed pch/main.cc +test cases/common/15 mixed pch/meson.build +test cases/common/15 mixed pch/pch/func.h +test cases/common/15 mixed pch/pch/func_pch.c +test cases/common/15 mixed pch/pch/main.h +test cases/common/15 mixed pch/pch/main_pch.cc +test cases/common/150 nested links/meson.build +test cases/common/150 nested links/xephyr.c +test cases/common/151 list of file sources/foo +test cases/common/151 list of file sources/gen.py +test cases/common/151 list of file sources/meson.build +test cases/common/152 link depends custom target/foo.c +test cases/common/152 link depends custom target/make_file.py +test cases/common/152 link depends custom target/meson.build +test cases/common/153 recursive linking/lib.h +test cases/common/153 recursive linking/main.c +test cases/common/153 recursive linking/meson.build +test cases/common/153 recursive linking/3rdorderdeps/lib.c.in +test cases/common/153 recursive linking/3rdorderdeps/main.c.in +test cases/common/153 recursive linking/3rdorderdeps/meson.build +test cases/common/153 recursive linking/circular/lib1.c +test cases/common/153 recursive linking/circular/lib2.c +test cases/common/153 recursive linking/circular/lib3.c +test cases/common/153 recursive linking/circular/main.c +test cases/common/153 recursive linking/circular/meson.build +test cases/common/153 recursive linking/circular/prop1.c +test cases/common/153 recursive linking/circular/prop2.c +test cases/common/153 recursive linking/circular/prop3.c +test cases/common/153 recursive linking/edge-cases/libsto.c +test cases/common/153 recursive linking/edge-cases/meson.build +test cases/common/153 recursive linking/edge-cases/shstmain.c +test cases/common/153 recursive linking/edge-cases/stobuilt.c +test cases/common/153 recursive linking/edge-cases/stomain.c +test cases/common/153 recursive linking/shnodep/lib.c +test cases/common/153 recursive linking/shnodep/meson.build +test cases/common/153 recursive linking/shshdep/lib.c +test cases/common/153 recursive linking/shshdep/meson.build +test cases/common/153 recursive linking/shstdep/lib.c +test cases/common/153 recursive linking/shstdep/meson.build +test cases/common/153 recursive linking/stnodep/lib.c +test cases/common/153 recursive linking/stnodep/meson.build +test cases/common/153 recursive linking/stshdep/lib.c +test cases/common/153 recursive linking/stshdep/meson.build +test cases/common/153 recursive linking/ststdep/lib.c +test cases/common/153 recursive linking/ststdep/meson.build +test cases/common/154 library at root/lib.c +test cases/common/154 library at root/meson.build +test cases/common/154 library at root/main/main.c +test cases/common/154 library at root/main/meson.build +test cases/common/155 simd/fallback.c +test cases/common/155 simd/meson.build +test cases/common/155 simd/simd_avx.c +test cases/common/155 simd/simd_avx2.c +test cases/common/155 simd/simd_mmx.c +test cases/common/155 simd/simd_neon.c +test cases/common/155 simd/simd_sse.c +test cases/common/155 simd/simd_sse2.c +test cases/common/155 simd/simd_sse3.c +test cases/common/155 simd/simd_sse41.c +test cases/common/155 simd/simd_sse42.c +test cases/common/155 simd/simd_ssse3.c +test cases/common/155 simd/simdchecker.c +test cases/common/155 simd/simdfuncs.h +test cases/common/155 simd/include/simdheader.h +test cases/common/156 shared module resolving symbol in executable/meson.build +test cases/common/156 shared module resolving symbol in executable/module.c +test cases/common/156 shared module resolving symbol in executable/prog.c +test cases/common/158 dotinclude/dotproc.c +test cases/common/158 dotinclude/meson.build +test cases/common/158 dotinclude/stdio.h +test cases/common/159 reserved targets/meson.build +test cases/common/159 reserved targets/test.c +test cases/common/159 reserved targets/all/meson.build +test cases/common/159 reserved targets/benchmark/meson.build +test cases/common/159 reserved targets/clean/meson.build +test cases/common/159 reserved targets/clean-ctlist/meson.build +test cases/common/159 reserved targets/clean-gcda/meson.build +test cases/common/159 reserved targets/clean-gcno/meson.build +test cases/common/159 reserved targets/coverage/meson.build +test cases/common/159 reserved targets/coverage-html/meson.build +test cases/common/159 reserved targets/coverage-text/meson.build +test cases/common/159 reserved targets/coverage-xml/meson.build +test cases/common/159 reserved targets/dist/meson.build +test cases/common/159 reserved targets/distcheck/meson.build +test cases/common/159 reserved targets/install/meson.build +test cases/common/159 reserved targets/phony/meson.build +test cases/common/159 reserved targets/reconfigure/meson.build +test cases/common/159 reserved targets/runtarget/meson.build +test cases/common/159 reserved targets/scan-build/meson.build +test cases/common/159 reserved targets/test/meson.build +test cases/common/159 reserved targets/uninstall/meson.build +test cases/common/16 configure file/basename.py +test cases/common/16 configure file/check_file.py +test cases/common/16 configure file/config.h +test cases/common/16 configure file/config.h.in +test cases/common/16 configure file/config4a.h.in +test cases/common/16 configure file/config4b.h.in +test cases/common/16 configure file/config5.h.in +test cases/common/16 configure file/config6.h.in +test cases/common/16 configure file/config7.h.in +test cases/common/16 configure file/config8.h.in +test cases/common/16 configure file/dummy.dat +test cases/common/16 configure file/dumpprog.c +test cases/common/16 configure file/file_contains.py +test cases/common/16 configure file/generator-without-input-file.py +test cases/common/16 configure file/generator.py +test cases/common/16 configure file/installed_files.txt +test cases/common/16 configure file/invalid-utf8.bin.in +test cases/common/16 configure file/meson.build +test cases/common/16 configure file/nosubst-nocopy1.txt.in +test cases/common/16 configure file/nosubst-nocopy2.txt.in +test cases/common/16 configure file/prog.c +test cases/common/16 configure file/prog2.c +test cases/common/16 configure file/prog4.c +test cases/common/16 configure file/prog5.c +test cases/common/16 configure file/prog6.c +test cases/common/16 configure file/prog7.c +test cases/common/16 configure file/test.py.in +test cases/common/16 configure file/touch.py +test cases/common/16 configure file/subdir/meson.build +test cases/common/160 duplicate source names/meson.build +test cases/common/160 duplicate source names/dir1/file.c +test cases/common/160 duplicate source names/dir1/meson.build +test cases/common/160 duplicate source names/dir2/file.c +test cases/common/160 duplicate source names/dir2/meson.build +test cases/common/160 duplicate source names/dir2/dir1/file.c +test cases/common/160 duplicate source names/dir3/file.c +test cases/common/160 duplicate source names/dir3/meson.build +test cases/common/160 duplicate source names/dir3/dir1/file.c +test cases/common/161 index customtarget/check_args.py +test cases/common/161 index customtarget/gen_sources.py +test cases/common/161 index customtarget/lib.c +test cases/common/161 index customtarget/meson.build +test cases/common/161 index customtarget/subdir/foo.c +test cases/common/161 index customtarget/subdir/meson.build +test cases/common/162 wrap file should not failed/meson.build +test cases/common/162 wrap file should not failed/src/meson.build +test cases/common/162 wrap file should not failed/src/subprojects/prog.c +test cases/common/162 wrap file should not failed/src/subprojects/foo/prog2.c +test cases/common/162 wrap file should not failed/subprojects/zlib.wrap +test cases/common/162 wrap file should not failed/subprojects/packagecache/zlib-1.2.8-8-wrap.zip +test cases/common/162 wrap file should not failed/subprojects/packagecache/zlib-1.2.8.tar.gz +test cases/common/162 wrap file should not failed/subprojects/zlib-1.2.8/foo.c +test cases/common/162 wrap file should not failed/subprojects/zlib-1.2.8/meson.build +test cases/common/163 includedir subproj/meson.build +test cases/common/163 includedir subproj/prog.c +test cases/common/163 includedir subproj/subprojects/inctest/meson.build +test cases/common/163 includedir subproj/subprojects/inctest/include/incfile.h +test cases/common/164 subproject dir name collision/a.c +test cases/common/164 subproject dir name collision/meson.build +test cases/common/164 subproject dir name collision/custom_subproject_dir/B/b.c +test cases/common/164 subproject dir name collision/custom_subproject_dir/B/meson.build +test cases/common/164 subproject dir name collision/custom_subproject_dir/C/c.c +test cases/common/164 subproject dir name collision/custom_subproject_dir/C/meson.build +test cases/common/164 subproject dir name collision/other_subdir/meson.build +test cases/common/164 subproject dir name collision/other_subdir/custom_subproject_dir/other.c +test cases/common/165 config tool variable/meson.build +test cases/common/166 custom target subdir depend files/copyfile.py +test cases/common/166 custom target subdir depend files/meson.build +test cases/common/166 custom target subdir depend files/subdir/dep.dat +test cases/common/166 custom target subdir depend files/subdir/foo.c.in +test cases/common/166 custom target subdir depend files/subdir/meson.build +test cases/common/167 external program shebang parsing/input.txt +test cases/common/167 external program shebang parsing/main.c +test cases/common/167 external program shebang parsing/meson.build +test cases/common/167 external program shebang parsing/script.int.in +test cases/common/168 disabler/meson.build +test cases/common/169 array option/meson.build +test cases/common/169 array option/meson_options.txt +test cases/common/17 if/meson.build +test cases/common/17 if/prog.c +test cases/common/170 custom target template substitution/checkcopy.py +test cases/common/170 custom target template substitution/foo.c.in +test cases/common/170 custom target template substitution/meson.build +test cases/common/171 not-found dependency/meson.build +test cases/common/171 not-found dependency/testlib.c +test cases/common/171 not-found dependency/sub/meson.build +test cases/common/171 not-found dependency/subprojects/trivial/meson.build +test cases/common/171 not-found dependency/subprojects/trivial/trivial.c +test cases/common/172 subdir if_found/meson.build +test cases/common/172 subdir if_found/subdir/meson.build +test cases/common/173 default options prefix dependent defaults/meson.build +test cases/common/174 dependency factory/meson.build +test cases/common/175 get project license/bar.c +test cases/common/175 get project license/meson.build +test cases/common/176 yield/meson.build +test cases/common/176 yield/meson_options.txt +test cases/common/176 yield/subprojects/sub/meson.build +test cases/common/176 yield/subprojects/sub/meson_options.txt +test cases/common/177 subproject nested subproject dirs/meson.build +test cases/common/177 subproject nested subproject dirs/prog.c +test cases/common/177 subproject nested subproject dirs/contrib/subprojects/alpha/a.c +test cases/common/177 subproject nested subproject dirs/contrib/subprojects/alpha/meson.build +test cases/common/177 subproject nested subproject dirs/contrib/subprojects/alpha/var/subprojects/wrap_files_might_be_here +test cases/common/177 subproject nested subproject dirs/contrib/subprojects/beta/b.c +test cases/common/177 subproject nested subproject dirs/contrib/subprojects/beta/meson.build +test cases/common/178 preserve gendir/base.inp +test cases/common/178 preserve gendir/genprog.py +test cases/common/178 preserve gendir/meson.build +test cases/common/178 preserve gendir/testprog.c +test cases/common/178 preserve gendir/com/mesonbuild/subbie.inp +test cases/common/179 source in dep/bar.cpp +test cases/common/179 source in dep/foo.c +test cases/common/179 source in dep/meson.build +test cases/common/179 source in dep/generated/funname +test cases/common/179 source in dep/generated/genheader.py +test cases/common/179 source in dep/generated/main.c +test cases/common/179 source in dep/generated/meson.build +test cases/common/18 else/meson.build +test cases/common/18 else/prog.c +test cases/common/180 generator link whole/export.h +test cases/common/180 generator link whole/generator.py +test cases/common/180 generator link whole/main.c +test cases/common/180 generator link whole/meson.build +test cases/common/180 generator link whole/meson_test_function.tmpl +test cases/common/180 generator link whole/pull_meson_test_function.c +test cases/common/181 initial c_args/meson.build +test cases/common/181 initial c_args/test_args.txt +test cases/common/182 identical target name in subproject flat layout/foo.c +test cases/common/182 identical target name in subproject flat layout/main.c +test cases/common/182 identical target name in subproject flat layout/meson.build +test cases/common/182 identical target name in subproject flat layout/subprojects/subproj/foo.c +test cases/common/182 identical target name in subproject flat layout/subprojects/subproj/meson.build +test cases/common/184 as-needed/config.h +test cases/common/184 as-needed/libA.cpp +test cases/common/184 as-needed/libA.h +test cases/common/184 as-needed/libB.cpp +test cases/common/184 as-needed/main.cpp +test cases/common/184 as-needed/meson.build +test cases/common/185 ndebug if-release enabled/main.c +test cases/common/185 ndebug if-release enabled/meson.build +test cases/common/186 ndebug if-release disabled/main.c +test cases/common/186 ndebug if-release disabled/meson.build +test cases/common/187 subproject version/meson.build +test cases/common/187 subproject version/subprojects/a/meson.build +test cases/common/188 subdir_done/meson.build +test cases/common/189 bothlibraries/libfile.c +test cases/common/189 bothlibraries/main.c +test cases/common/189 bothlibraries/meson.build +test cases/common/189 bothlibraries/mylib.h +test cases/common/19 comparison/meson.build +test cases/common/19 comparison/prog.c +test cases/common/190 escape and unicode/file.c.in +test cases/common/190 escape and unicode/file.py +test cases/common/190 escape and unicode/find.py +test cases/common/190 escape and unicode/fun.c +test cases/common/190 escape and unicode/main.c +test cases/common/190 escape and unicode/meson.build +test cases/common/191 has link arg/meson.build +test cases/common/192 same target name flat layout/foo.c +test cases/common/192 same target name flat layout/main.c +test cases/common/192 same target name flat layout/meson.build +test cases/common/192 same target name flat layout/subdir/foo.c +test cases/common/192 same target name flat layout/subdir/meson.build +test cases/common/193 find override/meson.build +test cases/common/193 find override/otherdir/main.c +test cases/common/193 find override/otherdir/main2.c +test cases/common/193 find override/otherdir/meson.build +test cases/common/193 find override/otherdir/source.desc +test cases/common/193 find override/otherdir/source2.desc +test cases/common/193 find override/subdir/converter.py +test cases/common/193 find override/subdir/gencodegen.py.in +test cases/common/193 find override/subdir/meson.build +test cases/common/194 partial dependency/meson.build +test cases/common/194 partial dependency/declare_dependency/main.c +test cases/common/194 partial dependency/declare_dependency/meson.build +test cases/common/194 partial dependency/declare_dependency/other.c +test cases/common/194 partial dependency/declare_dependency/headers/foo.c +test cases/common/194 partial dependency/declare_dependency/headers/foo.h +test cases/common/195 openmp/main.c +test cases/common/195 openmp/main.cpp +test cases/common/195 openmp/main.f90 +test cases/common/195 openmp/meson.build +test cases/common/196 same target name/file.c +test cases/common/196 same target name/meson.build +test cases/common/196 same target name/sub/file2.c +test cases/common/196 same target name/sub/meson.build +test cases/common/197 test depends/gen.py +test cases/common/197 test depends/main.c +test cases/common/197 test depends/meson.build +test cases/common/197 test depends/test.py +test cases/common/198 args flattening/meson.build +test cases/common/199 dict/meson.build +test cases/common/199 dict/prog.c +test cases/common/2 cpp/meson.build +test cases/common/2 cpp/something.txt +test cases/common/2 cpp/trivial.cc +test cases/common/20 array/func.c +test cases/common/20 array/meson.build +test cases/common/20 array/prog.c +test cases/common/200 check header/meson.build +test cases/common/200 check header/ouagadougou.h +test cases/common/201 install_mode/config.h.in +test cases/common/201 install_mode/data_source.txt +test cases/common/201 install_mode/foo.1 +test cases/common/201 install_mode/installed_files.txt +test cases/common/201 install_mode/meson.build +test cases/common/201 install_mode/rootdir.h +test cases/common/201 install_mode/runscript.sh +test cases/common/201 install_mode/stat.c +test cases/common/201 install_mode/trivial.c +test cases/common/201 install_mode/sub1/second.dat +test cases/common/201 install_mode/sub2/stub +test cases/common/202 subproject array version/meson.build +test cases/common/202 subproject array version/subprojects/foo/meson.build +test cases/common/203 feature option/meson.build +test cases/common/203 feature option/meson_options.txt +test cases/common/204 feature option disabled/meson.build +test cases/common/204 feature option disabled/meson_options.txt +test cases/common/205 generator in subdir/meson.build +test cases/common/205 generator in subdir/com/mesonbuild/genprog.py +test cases/common/205 generator in subdir/com/mesonbuild/meson.build +test cases/common/205 generator in subdir/com/mesonbuild/subbie.inp +test cases/common/205 generator in subdir/com/mesonbuild/testprog.c +test cases/common/205 static threads/lib1.c +test cases/common/205 static threads/lib2.c +test cases/common/205 static threads/meson.build +test cases/common/205 static threads/prog.c +test cases/common/206 dep order/lib1.c +test cases/common/206 dep order/lib2.c +test cases/common/206 dep order/meson.build +test cases/common/206 dep order/myexe.c +test cases/common/21 includedir/meson.build +test cases/common/21 includedir/include/func.h +test cases/common/21 includedir/src/func.c +test cases/common/21 includedir/src/meson.build +test cases/common/21 includedir/src/prog.c +test cases/common/22 header in file list/header.h +test cases/common/22 header in file list/meson.build +test cases/common/22 header in file list/prog.c +test cases/common/23 global arg/meson.build +test cases/common/23 global arg/prog.c +test cases/common/23 global arg/prog.cc +test cases/common/24 target arg/func.c +test cases/common/24 target arg/func2.c +test cases/common/24 target arg/meson.build +test cases/common/24 target arg/prog.cc +test cases/common/24 target arg/prog2.cc +test cases/common/25 object extraction/lib.c +test cases/common/25 object extraction/lib2.c +test cases/common/25 object extraction/main.c +test cases/common/25 object extraction/meson.build +test cases/common/25 object extraction/src/lib.c +test cases/common/26 endian/meson.build +test cases/common/26 endian/prog.c +test cases/common/27 library versions/installed_files.txt +test cases/common/27 library versions/lib.c +test cases/common/27 library versions/meson.build +test cases/common/27 library versions/subdir/meson.build +test cases/common/28 config subdir/meson.build +test cases/common/28 config subdir/include/config.h.in +test cases/common/28 config subdir/include/meson.build +test cases/common/28 config subdir/src/meson.build +test cases/common/28 config subdir/src/prog.c +test cases/common/29 pipeline/input_src.dat +test cases/common/29 pipeline/meson.build +test cases/common/29 pipeline/prog.c +test cases/common/29 pipeline/srcgen.c +test cases/common/3 static/libfile.c +test cases/common/3 static/libfile2.c +test cases/common/3 static/meson.build +test cases/common/3 static/meson_options.txt +test cases/common/30 pipeline/meson.build +test cases/common/30 pipeline/src/input_src.dat +test cases/common/30 pipeline/src/meson.build +test cases/common/30 pipeline/src/prog.c +test cases/common/30 pipeline/src/srcgen.c +test cases/common/31 find program/meson.build +test cases/common/31 find program/source.in +test cases/common/32 multiline string/meson.build +test cases/common/33 try compile/invalid.c +test cases/common/33 try compile/meson.build +test cases/common/33 try compile/valid.c +test cases/common/34 compiler id/meson.build +test cases/common/35 sizeof/config.h.in +test cases/common/35 sizeof/meson.build +test cases/common/35 sizeof/prog.c.in +test cases/common/36 define10/config.h.in +test cases/common/36 define10/meson.build +test cases/common/36 define10/prog.c +test cases/common/37 has header/meson.build +test cases/common/37 has header/ouagadougou.h +test cases/common/38 run program/get-version.py +test cases/common/38 run program/meson.build +test cases/common/38 run program/scripts/hello.bat +test cases/common/38 run program/scripts/hello.sh +test cases/common/39 tryrun/error.c +test cases/common/39 tryrun/meson.build +test cases/common/39 tryrun/no_compile.c +test cases/common/39 tryrun/ok.c +test cases/common/4 shared/libfile.c +test cases/common/4 shared/meson.build +test cases/common/40 logic ops/meson.build +test cases/common/41 elif/meson.build +test cases/common/42 string operations/meson.build +test cases/common/43 has function/meson.build +test cases/common/44 has member/meson.build +test cases/common/45 alignment/meson.build +test cases/common/46 library chain/installed_files.txt +test cases/common/46 library chain/main.c +test cases/common/46 library chain/meson.build +test cases/common/46 library chain/subdir/lib1.c +test cases/common/46 library chain/subdir/meson.build +test cases/common/46 library chain/subdir/subdir2/lib2.c +test cases/common/46 library chain/subdir/subdir2/meson.build +test cases/common/46 library chain/subdir/subdir3/lib3.c +test cases/common/46 library chain/subdir/subdir3/meson.build +test cases/common/47 options/meson.build +test cases/common/47 options/meson_options.txt +test cases/common/48 test args/cmd_args.c +test cases/common/48 test args/copyfile.py +test cases/common/48 test args/env2vars.c +test cases/common/48 test args/envvars.c +test cases/common/48 test args/meson.build +test cases/common/48 test args/tester.c +test cases/common/48 test args/tester.py +test cases/common/48 test args/testfile.txt +test cases/common/49 subproject/installed_files.txt +test cases/common/49 subproject/meson.build +test cases/common/49 subproject/user.c +test cases/common/49 subproject/subprojects/sublib/meson.build +test cases/common/49 subproject/subprojects/sublib/simpletest.c +test cases/common/49 subproject/subprojects/sublib/sublib.c +test cases/common/49 subproject/subprojects/sublib/include/subdefs.h +test cases/common/5 linkstatic/libfile.c +test cases/common/5 linkstatic/libfile2.c +test cases/common/5 linkstatic/libfile3.c +test cases/common/5 linkstatic/libfile4.c +test cases/common/5 linkstatic/main.c +test cases/common/5 linkstatic/meson.build +test cases/common/50 subproject options/meson.build +test cases/common/50 subproject options/meson_options.txt +test cases/common/50 subproject options/subprojects/subproject/meson.build +test cases/common/50 subproject options/subprojects/subproject/meson_options.txt +test cases/common/51 pkgconfig-gen/installed_files.txt +test cases/common/51 pkgconfig-gen/meson.build +test cases/common/51 pkgconfig-gen/simple.c +test cases/common/51 pkgconfig-gen/simple.h +test cases/common/51 pkgconfig-gen/dependencies/exposed.c +test cases/common/51 pkgconfig-gen/dependencies/internal.c +test cases/common/51 pkgconfig-gen/dependencies/meson.build +test cases/common/52 custom install dirs/datafile.cat +test cases/common/52 custom install dirs/installed_files.txt +test cases/common/52 custom install dirs/meson.build +test cases/common/52 custom install dirs/prog.1 +test cases/common/52 custom install dirs/prog.c +test cases/common/52 custom install dirs/sample.h +test cases/common/52 custom install dirs/subdir/datafile.dog +test cases/common/53 subproject subproject/meson.build +test cases/common/53 subproject subproject/prog.c +test cases/common/53 subproject subproject/subprojects/a/a.c +test cases/common/53 subproject subproject/subprojects/a/meson.build +test cases/common/53 subproject subproject/subprojects/b/b.c +test cases/common/53 subproject subproject/subprojects/b/meson.build +test cases/common/54 same file name/meson.build +test cases/common/54 same file name/prog.c +test cases/common/54 same file name/d1/file.c +test cases/common/54 same file name/d2/file.c +test cases/common/55 file grabber/a.c +test cases/common/55 file grabber/b.c +test cases/common/55 file grabber/c.c +test cases/common/55 file grabber/grabber.bat +test cases/common/55 file grabber/grabber.sh +test cases/common/55 file grabber/grabber2.bat +test cases/common/55 file grabber/meson.build +test cases/common/55 file grabber/prog.c +test cases/common/55 file grabber/subdir/meson.build +test cases/common/55 file grabber/subdir/suba.c +test cases/common/55 file grabber/subdir/subb.c +test cases/common/55 file grabber/subdir/subc.c +test cases/common/55 file grabber/subdir/subprog.c +test cases/common/56 custom target/data_source.txt +test cases/common/56 custom target/installed_files.txt +test cases/common/56 custom target/meson.build +test cases/common/56 custom target/my_compiler.py +test cases/common/56 custom target/depfile/dep.py +test cases/common/56 custom target/depfile/meson.build +test cases/common/57 custom target chain/data_source.txt +test cases/common/57 custom target chain/installed_files.txt +test cases/common/57 custom target chain/meson.build +test cases/common/57 custom target chain/my_compiler.py +test cases/common/57 custom target chain/my_compiler2.py +test cases/common/57 custom target chain/usetarget/meson.build +test cases/common/57 custom target chain/usetarget/myexe.c +test cases/common/57 custom target chain/usetarget/subcomp.py +test cases/common/58 run target/check_exists.py +test cases/common/58 run target/configure.in +test cases/common/58 run target/converter.py +test cases/common/58 run target/fakeburner.py +test cases/common/58 run target/helloprinter.c +test cases/common/58 run target/meson.build +test cases/common/58 run target/scripts/script.sh +test cases/common/59 object generator/meson.build +test cases/common/59 object generator/obj_generator.py +test cases/common/59 object generator/prog.c +test cases/common/59 object generator/source.c +test cases/common/59 object generator/source2.c +test cases/common/59 object generator/source3.c +test cases/common/6 linkshared/cpplib.cpp +test cases/common/6 linkshared/cppmain.cpp +test cases/common/6 linkshared/installed_files.txt +test cases/common/6 linkshared/libfile.c +test cases/common/6 linkshared/main.c +test cases/common/6 linkshared/meson.build +test cases/common/60 install script/installed_files.txt +test cases/common/60 install script/meson.build +test cases/common/60 install script/myinstall.py +test cases/common/60 install script/no-installed-files +test cases/common/60 install script/prog.c +test cases/common/60 install script/src/meson.build +test cases/common/60 install script/src/myinstall.py +test cases/common/61 custom target source output/generator.py +test cases/common/61 custom target source output/main.c +test cases/common/61 custom target source output/meson.build +test cases/common/62 exe static shared/meson.build +test cases/common/62 exe static shared/prog.c +test cases/common/62 exe static shared/shlib2.c +test cases/common/62 exe static shared/stat.c +test cases/common/62 exe static shared/stat2.c +test cases/common/62 exe static shared/subdir/exports.h +test cases/common/62 exe static shared/subdir/meson.build +test cases/common/62 exe static shared/subdir/shlib.c +test cases/common/63 array methods/meson.build +test cases/common/64 custom header generator/input.def +test cases/common/64 custom header generator/makeheader.py +test cases/common/64 custom header generator/meson.build +test cases/common/64 custom header generator/prog.c +test cases/common/64 custom header generator/somefile.txt +test cases/common/65 multiple generators/data2.dat +test cases/common/65 multiple generators/main.cpp +test cases/common/65 multiple generators/meson.build +test cases/common/65 multiple generators/mygen.py +test cases/common/65 multiple generators/subdir/data.dat +test cases/common/65 multiple generators/subdir/meson.build +test cases/common/66 install subdir/installed_files.txt +test cases/common/66 install subdir/meson.build +test cases/common/66 install subdir/nested_elided/sub/eighth.dat +test cases/common/66 install subdir/nested_elided/sub/dircheck/nineth.dat +test cases/common/66 install subdir/sub/sub1/third.dat +test cases/common/66 install subdir/sub1/second.dat +test cases/common/66 install subdir/sub2/excluded-three.dat +test cases/common/66 install subdir/sub2/one.dat +test cases/common/66 install subdir/sub2/dircheck/excluded-three.dat +test cases/common/66 install subdir/sub2/excluded/two.dat +test cases/common/66 install subdir/sub_elided/fourth.dat +test cases/common/66 install subdir/sub_elided/dircheck/fifth.dat +test cases/common/66 install subdir/subdir/meson.build +test cases/common/66 install subdir/subdir/sub1/data1.dat +test cases/common/66 install subdir/subdir/sub1/sub2/data2.dat +test cases/common/66 install subdir/subdir/sub_elided/sixth.dat +test cases/common/66 install subdir/subdir/sub_elided/dircheck/seventh.dat +test cases/common/67 foreach/installed_files.txt +test cases/common/67 foreach/meson.build +test cases/common/67 foreach/prog1.c +test cases/common/67 foreach/prog2.c +test cases/common/67 foreach/prog3.c +test cases/common/68 number arithmetic/meson.build +test cases/common/69 string arithmetic/meson.build +test cases/common/7 mixed/func.c +test cases/common/7 mixed/main.cc +test cases/common/7 mixed/meson.build +test cases/common/70 array arithmetic/meson.build +test cases/common/71 arithmetic bidmas/meson.build +test cases/common/72 build always/main.c +test cases/common/72 build always/meson.build +test cases/common/72 build always/version.c.in +test cases/common/72 build always/version.h +test cases/common/72 build always/version_gen.py +test cases/common/73 vcstag/meson.build +test cases/common/73 vcstag/tagprog.c +test cases/common/73 vcstag/vcstag.c.in +test cases/common/74 modules/meson.build +test cases/common/75 should fail/failing.c +test cases/common/75 should fail/meson.build +test cases/common/76 configure file in custom target/meson.build +test cases/common/76 configure file in custom target/inc/confdata.in +test cases/common/76 configure file in custom target/inc/meson.build +test cases/common/76 configure file in custom target/src/meson.build +test cases/common/76 configure file in custom target/src/mycompiler.py +test cases/common/77 external test program/meson.build +test cases/common/77 external test program/mytest.py +test cases/common/78 ctarget dependency/gen1.py +test cases/common/78 ctarget dependency/gen2.py +test cases/common/78 ctarget dependency/input.dat +test cases/common/78 ctarget dependency/meson.build +test cases/common/79 shared subproject/a.c +test cases/common/79 shared subproject/meson.build +test cases/common/79 shared subproject/subprojects/B/b.c +test cases/common/79 shared subproject/subprojects/B/meson.build +test cases/common/79 shared subproject/subprojects/C/c.c +test cases/common/79 shared subproject/subprojects/C/meson.build +test cases/common/8 install/installed_files.txt +test cases/common/8 install/meson.build +test cases/common/8 install/prog.c +test cases/common/8 install/stat.c +test cases/common/80 shared subproject 2/a.c +test cases/common/80 shared subproject 2/meson.build +test cases/common/80 shared subproject 2/subprojects/B/b.c +test cases/common/80 shared subproject 2/subprojects/B/meson.build +test cases/common/80 shared subproject 2/subprojects/C/c.c +test cases/common/80 shared subproject 2/subprojects/C/meson.build +test cases/common/81 file object/lib.c +test cases/common/81 file object/meson.build +test cases/common/81 file object/prog.c +test cases/common/81 file object/subdir1/lib.c +test cases/common/81 file object/subdir1/meson.build +test cases/common/81 file object/subdir1/prog.c +test cases/common/81 file object/subdir2/lib.c +test cases/common/81 file object/subdir2/meson.build +test cases/common/81 file object/subdir2/prog.c +test cases/common/82 custom subproject dir/a.c +test cases/common/82 custom subproject dir/meson.build +test cases/common/82 custom subproject dir/custom_subproject_dir/B/b.c +test cases/common/82 custom subproject dir/custom_subproject_dir/B/meson.build +test cases/common/82 custom subproject dir/custom_subproject_dir/C/c.c +test cases/common/82 custom subproject dir/custom_subproject_dir/C/meson.build +test cases/common/83 has type/meson.build +test cases/common/84 extract from nested subdir/meson.build +test cases/common/84 extract from nested subdir/src/meson.build +test cases/common/84 extract from nested subdir/src/first/lib_first.c +test cases/common/84 extract from nested subdir/src/first/meson.build +test cases/common/84 extract from nested subdir/tst/meson.build +test cases/common/84 extract from nested subdir/tst/first/exe_first.c +test cases/common/84 extract from nested subdir/tst/first/meson.build +test cases/common/85 internal dependency/meson.build +test cases/common/85 internal dependency/proj1/meson.build +test cases/common/85 internal dependency/proj1/proj1f1.c +test cases/common/85 internal dependency/proj1/proj1f2.c +test cases/common/85 internal dependency/proj1/proj1f3.c +test cases/common/85 internal dependency/proj1/include/proj1.h +test cases/common/85 internal dependency/src/main.c +test cases/common/85 internal dependency/src/meson.build +test cases/common/86 same basename/exe1.c +test cases/common/86 same basename/exe2.c +test cases/common/86 same basename/lib.c +test cases/common/86 same basename/meson.build +test cases/common/86 same basename/sharedsub/meson.build +test cases/common/86 same basename/staticsub/meson.build +test cases/common/87 declare dep/main.c +test cases/common/87 declare dep/meson.build +test cases/common/87 declare dep/entity/entity.h +test cases/common/87 declare dep/entity/entity1.c +test cases/common/87 declare dep/entity/entity2.c +test cases/common/87 declare dep/entity/meson.build +test cases/common/88 extract all/extractor.h +test cases/common/88 extract all/four.c +test cases/common/88 extract all/meson.build +test cases/common/88 extract all/one.c +test cases/common/88 extract all/prog.c +test cases/common/88 extract all/three.c +test cases/common/88 extract all/two.c +test cases/common/89 add language/meson.build +test cases/common/89 add language/prog.c +test cases/common/89 add language/prog.cc +test cases/common/9 header install/installed_files.txt +test cases/common/9 header install/meson.build +test cases/common/9 header install/rootdir.h +test cases/common/9 header install/subdir.h +test cases/common/9 header install/sub/fileheader.h +test cases/common/9 header install/sub/meson.build +test cases/common/9 header install/vanishing_subdir/meson.build +test cases/common/9 header install/vanishing_subdir/vanished.h +test cases/common/90 identical target name in subproject/bar.c +test cases/common/90 identical target name in subproject/meson.build +test cases/common/90 identical target name in subproject/subprojects/foo/bar.c +test cases/common/90 identical target name in subproject/subprojects/foo/meson.build +test cases/common/91 plusassign/meson.build +test cases/common/92 skip subdir/meson.build +test cases/common/92 skip subdir/subdir1/meson.build +test cases/common/92 skip subdir/subdir1/subdir2/meson.build +test cases/common/93 private include/meson.build +test cases/common/93 private include/stlib/compiler.py +test cases/common/93 private include/stlib/foo1.def +test cases/common/93 private include/stlib/foo2.def +test cases/common/93 private include/stlib/meson.build +test cases/common/93 private include/user/libuser.c +test cases/common/93 private include/user/meson.build +test cases/common/94 default options/meson.build +test cases/common/95 dep fallback/gensrc.py +test cases/common/95 dep fallback/meson.build +test cases/common/95 dep fallback/tester.c +test cases/common/95 dep fallback/subprojects/boblib/bob.c +test cases/common/95 dep fallback/subprojects/boblib/bob.h +test cases/common/95 dep fallback/subprojects/boblib/genbob.py +test cases/common/95 dep fallback/subprojects/boblib/meson.build +test cases/common/95 dep fallback/subprojects/dummylib/meson.build +test cases/common/96 default library/ef.cpp +test cases/common/96 default library/ef.h +test cases/common/96 default library/eftest.cpp +test cases/common/96 default library/meson.build +test cases/common/97 selfbuilt custom/data.dat +test cases/common/97 selfbuilt custom/mainprog.cpp +test cases/common/97 selfbuilt custom/meson.build +test cases/common/97 selfbuilt custom/tool.cpp +test cases/common/98 gen extra/meson.build +test cases/common/98 gen extra/name.dat +test cases/common/98 gen extra/name.l +test cases/common/98 gen extra/plain.c +test cases/common/98 gen extra/srcgen.py +test cases/common/98 gen extra/srcgen2.py +test cases/common/98 gen extra/srcgen3.py +test cases/common/98 gen extra/upper.c +test cases/common/99 benchmark/delayer.c +test cases/common/99 benchmark/meson.build +test cases/csharp/1 basic/installed_files.txt +test cases/csharp/1 basic/meson.build +test cases/csharp/1 basic/prog.cs +test cases/csharp/1 basic/text.cs +test cases/csharp/2 library/helper.cs +test cases/csharp/2 library/installed_files.txt +test cases/csharp/2 library/meson.build +test cases/csharp/2 library/prog.cs +test cases/csharp/3 resource/TestRes.resx +test cases/csharp/3 resource/meson.build +test cases/csharp/3 resource/resprog.cs +test cases/csharp/4 external dep/hello.txt +test cases/csharp/4 external dep/meson.build +test cases/csharp/4 external dep/prog.cs +test cases/d/1 simple/app.d +test cases/d/1 simple/installed_files.txt +test cases/d/1 simple/meson.build +test cases/d/1 simple/utils.d +test cases/d/10 d cpp/cppmain.cpp +test cases/d/10 d cpp/dmain.d +test cases/d/10 d cpp/libfile.cpp +test cases/d/10 d cpp/libfile.d +test cases/d/10 d cpp/meson.build +test cases/d/2 static library/app.d +test cases/d/2 static library/installed_files.txt +test cases/d/2 static library/libstuff.d +test cases/d/2 static library/meson.build +test cases/d/3 shared library/app.d +test cases/d/3 shared library/installed_files.txt +test cases/d/3 shared library/libstuff.d +test cases/d/3 shared library/meson.build +test cases/d/4 library versions/installed_files.txt +test cases/d/4 library versions/lib.d +test cases/d/4 library versions/meson.build +test cases/d/5 mixed/app.d +test cases/d/5 mixed/installed_files.txt +test cases/d/5 mixed/libstuff.c +test cases/d/5 mixed/meson.build +test cases/d/6 unittest/app.d +test cases/d/6 unittest/installed_files.txt +test cases/d/6 unittest/meson.build +test cases/d/6 unittest/second_unit.d +test cases/d/7 multilib/app.d +test cases/d/7 multilib/installed_files.txt +test cases/d/7 multilib/meson.build +test cases/d/7 multilib/say1.d +test cases/d/7 multilib/say2.d +test cases/d/8 has multi arguments/meson.build +test cases/d/9 features/app.d +test cases/d/9 features/extra.d +test cases/d/9 features/meson.build +test cases/d/9 features/data/food.txt +test cases/d/9 features/data/people.txt +test cases/failing build/1 vala c werror/meson.build +test cases/failing build/1 vala c werror/prog.vala +test cases/failing build/1 vala c werror/unused-var.c +test cases/failing test/1 trivial/main.c +test cases/failing test/1 trivial/meson.build +test cases/failing test/2 signal/main.c +test cases/failing test/2 signal/meson.build +test cases/failing test/3 ambiguous/main.c +test cases/failing test/3 ambiguous/meson.build +test cases/failing test/3 ambiguous/test_runner.sh +test cases/failing/1 project not first/meson.build +test cases/failing/1 project not first/prog.c +test cases/failing/10 out of bounds/meson.build +test cases/failing/11 object arithmetic/meson.build +test cases/failing/12 string arithmetic/meson.build +test cases/failing/13 array arithmetic/meson.build +test cases/failing/14 invalid option name/meson.build +test cases/failing/14 invalid option name/meson_options.txt +test cases/failing/15 kwarg before arg/meson.build +test cases/failing/15 kwarg before arg/prog.c +test cases/failing/16 extract from subproject/main.c +test cases/failing/16 extract from subproject/meson.build +test cases/failing/16 extract from subproject/subprojects/sub_project/meson.build +test cases/failing/16 extract from subproject/subprojects/sub_project/sub_lib.c +test cases/failing/17 same target/file.c +test cases/failing/17 same target/meson.build +test cases/failing/18 wrong plusassign/meson.build +test cases/failing/19 target clash/clash.c +test cases/failing/19 target clash/meson.build +test cases/failing/2 missing file/meson.build +test cases/failing/20 version/meson.build +test cases/failing/21 subver/meson.build +test cases/failing/21 subver/subprojects/foo/meson.build +test cases/failing/22 assert/meson.build +test cases/failing/23 rel testdir/meson.build +test cases/failing/23 rel testdir/simple.c +test cases/failing/25 int conversion/meson.build +test cases/failing/26 badlang/meson.build +test cases/failing/27 output subdir/foo.in +test cases/failing/27 output subdir/meson.build +test cases/failing/27 output subdir/subdir/dummy.txt +test cases/failing/28 noprog use/meson.build +test cases/failing/29 no crossprop/meson.build +test cases/failing/3 missing subdir/meson.build +test cases/failing/30 nested ternary/meson.build +test cases/failing/31 invalid man extension/meson.build +test cases/failing/32 no man extension/meson.build +test cases/failing/33 exe static shared/meson.build +test cases/failing/33 exe static shared/prog.c +test cases/failing/33 exe static shared/shlib2.c +test cases/failing/33 exe static shared/stat.c +test cases/failing/34 non-root subproject/meson.build +test cases/failing/34 non-root subproject/some/meson.build +test cases/failing/35 dependency not-required then required/meson.build +test cases/failing/36 project argument after target/exe.c +test cases/failing/36 project argument after target/meson.build +test cases/failing/37 pkgconfig dependency impossible conditions/meson.build +test cases/failing/38 has function external dependency/meson.build +test cases/failing/38 has function external dependency/mylib.c +test cases/failing/39 libdir must be inside prefix/meson.build +test cases/failing/4 missing meson.build/meson.build +test cases/failing/4 missing meson.build/subdir/dummy.txt +test cases/failing/40 prefix absolute/meson.build +test cases/failing/41 kwarg assign/dummy.c +test cases/failing/41 kwarg assign/meson.build +test cases/failing/41 kwarg assign/prog.c +test cases/failing/42 custom target plainname many inputs/1.txt +test cases/failing/42 custom target plainname many inputs/2.txt +test cases/failing/42 custom target plainname many inputs/catfiles.py +test cases/failing/42 custom target plainname many inputs/meson.build +test cases/failing/43 custom target outputs not matching install_dirs/generator.py +test cases/failing/43 custom target outputs not matching install_dirs/installed_files.txt +test cases/failing/43 custom target outputs not matching install_dirs/meson.build +test cases/failing/44 project name colon/meson.build +test cases/failing/45 abs subdir/meson.build +test cases/failing/45 abs subdir/bob/meson.build +test cases/failing/46 abspath to srcdir/meson.build +test cases/failing/47 pkgconfig variables reserved/meson.build +test cases/failing/47 pkgconfig variables reserved/simple.c +test cases/failing/47 pkgconfig variables reserved/simple.h +test cases/failing/48 pkgconfig variables zero length/meson.build +test cases/failing/48 pkgconfig variables zero length/simple.c +test cases/failing/48 pkgconfig variables zero length/simple.h +test cases/failing/49 pkgconfig variables zero length value/meson.build +test cases/failing/49 pkgconfig variables zero length value/simple.c +test cases/failing/49 pkgconfig variables zero length value/simple.h +test cases/failing/5 misplaced option/meson.build +test cases/failing/50 pkgconfig variables not key value/meson.build +test cases/failing/50 pkgconfig variables not key value/simple.c +test cases/failing/50 pkgconfig variables not key value/simple.h +test cases/failing/51 executable comparison/meson.build +test cases/failing/51 executable comparison/prog.c +test cases/failing/52 inconsistent comparison/meson.build +test cases/failing/53 slashname/meson.build +test cases/failing/53 slashname/sub/meson.build +test cases/failing/53 slashname/sub/prog.c +test cases/failing/54 reserved meson prefix/meson.build +test cases/failing/54 reserved meson prefix/meson-foo/meson.build +test cases/failing/55 wrong shared crate type/foo.rs +test cases/failing/55 wrong shared crate type/meson.build +test cases/failing/56 wrong static crate type/foo.rs +test cases/failing/56 wrong static crate type/meson.build +test cases/failing/57 or on new line/meson.build +test cases/failing/57 or on new line/meson_options.txt +test cases/failing/58 kwarg in module/meson.build +test cases/failing/59 link with executable/meson.build +test cases/failing/59 link with executable/module.c +test cases/failing/59 link with executable/prog.c +test cases/failing/6 missing incdir/meson.build +test cases/failing/60 assign custom target index/meson.build +test cases/failing/61 getoption prefix/meson.build +test cases/failing/61 getoption prefix/subprojects/abc/meson.build +test cases/failing/61 getoption prefix/subprojects/abc/meson_options.txt +test cases/failing/62 bad option argument/meson.build +test cases/failing/62 bad option argument/meson_options.txt +test cases/failing/63 subproj filegrab/meson.build +test cases/failing/63 subproj filegrab/prog.c +test cases/failing/63 subproj filegrab/subprojects/a/meson.build +test cases/failing/64 grab subproj/meson.build +test cases/failing/64 grab subproj/subprojects/foo/meson.build +test cases/failing/64 grab subproj/subprojects/foo/sub.c +test cases/failing/65 grab sibling/meson.build +test cases/failing/65 grab sibling/subprojects/a/meson.build +test cases/failing/65 grab sibling/subprojects/b/meson.build +test cases/failing/65 grab sibling/subprojects/b/sneaky.c +test cases/failing/66 string as link target/meson.build +test cases/failing/66 string as link target/prog.c +test cases/failing/67 dependency not-found and required/meson.build +test cases/failing/68 subproj different versions/main.c +test cases/failing/68 subproj different versions/meson.build +test cases/failing/68 subproj different versions/subprojects/a/a.c +test cases/failing/68 subproj different versions/subprojects/a/a.h +test cases/failing/68 subproj different versions/subprojects/a/meson.build +test cases/failing/68 subproj different versions/subprojects/b/b.c +test cases/failing/68 subproj different versions/subprojects/b/b.h +test cases/failing/68 subproj different versions/subprojects/b/meson.build +test cases/failing/68 subproj different versions/subprojects/c/c.h +test cases/failing/68 subproj different versions/subprojects/c/meson.build +test cases/failing/69 wrong boost module/meson.build +test cases/failing/7 go to subproject/meson.build +test cases/failing/7 go to subproject/subprojects/meson.build +test cases/failing/70 install_data rename bad size/file1.txt +test cases/failing/70 install_data rename bad size/file2.txt +test cases/failing/70 install_data rename bad size/meson.build +test cases/failing/71 skip only subdir/meson.build +test cases/failing/71 skip only subdir/subdir/meson.build +test cases/failing/72 invalid escape char/meson.build +test cases/failing/73 dual override/meson.build +test cases/failing/73 dual override/overrides.py +test cases/failing/74 override used/meson.build +test cases/failing/74 override used/other.py +test cases/failing/74 override used/something.py +test cases/failing/75 run_command unclean exit/meson.build +test cases/failing/75 run_command unclean exit/returncode.py +test cases/failing/76 int literal leading zero/meson.build +test cases/failing/77 configuration immutable/input +test cases/failing/77 configuration immutable/meson.build +test cases/failing/78 link with shared module on osx/meson.build +test cases/failing/78 link with shared module on osx/module.c +test cases/failing/78 link with shared module on osx/prog.c +test cases/failing/79 non ascii in ascii encoded configure file/config9.h.in +test cases/failing/79 non ascii in ascii encoded configure file/meson.build +test cases/failing/8 recursive/meson.build +test cases/failing/8 recursive/subprojects/a/meson.build +test cases/failing/8 recursive/subprojects/b/meson.build +test cases/failing/80 subproj dependency not-found and required/meson.build +test cases/failing/81 unfound run/meson.build +test cases/failing/9 missing extra file/meson.build +test cases/failing/9 missing extra file/prog.c +test cases/fortran/1 basic/meson.build +test cases/fortran/1 basic/simple.f90 +test cases/fortran/10 find library/gzip.f90 +test cases/fortran/10 find library/main.f90 +test cases/fortran/10 find library/meson.build +test cases/fortran/2 modules/meson.build +test cases/fortran/2 modules/prog.f90 +test cases/fortran/2 modules/stuff.f90 +test cases/fortran/3 module procedure/meson.build +test cases/fortran/3 module procedure/prog.f90 +test cases/fortran/4 self dependency/meson.build +test cases/fortran/4 self dependency/selfdep.f90 +test cases/fortran/5 static/main.f90 +test cases/fortran/5 static/meson.build +test cases/fortran/5 static/static_hello.f90 +test cases/fortran/6 dynamic/dynamic.f90 +test cases/fortran/6 dynamic/main.f90 +test cases/fortran/6 dynamic/meson.build +test cases/fortran/7 generated/meson.build +test cases/fortran/7 generated/mod1.fpp +test cases/fortran/7 generated/mod2.fpp +test cases/fortran/7 generated/prog.f90 +test cases/fortran/8 module names/meson.build +test cases/fortran/8 module names/mod1.f90 +test cases/fortran/8 module names/mod2.f90 +test cases/fortran/8 module names/test.f90 +test cases/fortran/9 cpp/fortran.f +test cases/fortran/9 cpp/main.cpp +test cases/fortran/9 cpp/meson.build +test cases/fpga/1 simple/meson.build +test cases/fpga/1 simple/spin.pcf +test cases/fpga/1 simple/spin.v +test cases/frameworks/1 boost/extralib.cpp +test cases/frameworks/1 boost/linkexe.cc +test cases/frameworks/1 boost/meson.build +test cases/frameworks/1 boost/nomod.cpp +test cases/frameworks/1 boost/unit_test.cpp +test cases/frameworks/1 boost/partial_dep/foo.cpp +test cases/frameworks/1 boost/partial_dep/foo.hpp +test cases/frameworks/1 boost/partial_dep/main.cpp +test cases/frameworks/1 boost/partial_dep/meson.build +test cases/frameworks/10 gtk-doc/installed_files.txt +test cases/frameworks/10 gtk-doc/meson.build +test cases/frameworks/10 gtk-doc/doc/foobar-docs.sgml +test cases/frameworks/10 gtk-doc/doc/meson.build +test cases/frameworks/10 gtk-doc/doc/version.xml.in +test cases/frameworks/10 gtk-doc/include/foo-version.h.in +test cases/frameworks/10 gtk-doc/include/foo.h +test cases/frameworks/10 gtk-doc/include/generate-enums-docbook.py +test cases/frameworks/10 gtk-doc/include/meson.build +test cases/frameworks/11 gir subproject/installed_files.txt +test cases/frameworks/11 gir subproject/meson.build +test cases/frameworks/11 gir subproject/gir/meson-subsample.c +test cases/frameworks/11 gir subproject/gir/meson-subsample.h +test cases/frameworks/11 gir subproject/gir/meson.build +test cases/frameworks/11 gir subproject/gir/prog.c +test cases/frameworks/11 gir subproject/gir/prog.py +test cases/frameworks/11 gir subproject/subprojects/mesongir/meson-sample.c +test cases/frameworks/11 gir subproject/subprojects/mesongir/meson-sample.h +test cases/frameworks/11 gir subproject/subprojects/mesongir/meson.build +test cases/frameworks/12 multiple gir/installed_files.txt +test cases/frameworks/12 multiple gir/meson.build +test cases/frameworks/12 multiple gir/gir/meson-subsample.c +test cases/frameworks/12 multiple gir/gir/meson-subsample.h +test cases/frameworks/12 multiple gir/gir/meson.build +test cases/frameworks/12 multiple gir/gir/prog.c +test cases/frameworks/12 multiple gir/mesongir/meson-sample.c +test cases/frameworks/12 multiple gir/mesongir/meson-sample.h.in +test cases/frameworks/12 multiple gir/mesongir/meson.build +test cases/frameworks/13 yelp/installed_files.txt +test cases/frameworks/13 yelp/meson.build +test cases/frameworks/13 yelp/help/LINGUAS +test cases/frameworks/13 yelp/help/meson.build +test cases/frameworks/13 yelp/help/C/index.page +test cases/frameworks/13 yelp/help/C/media/test.txt +test cases/frameworks/13 yelp/help/de/de.po +test cases/frameworks/13 yelp/help/es/es.po +test cases/frameworks/13 yelp/help/es/media/test.txt +test cases/frameworks/14 doxygen/installed_files.txt +test cases/frameworks/14 doxygen/meson.build +test cases/frameworks/14 doxygen/doc/Doxyfile.in +test cases/frameworks/14 doxygen/doc/meson.build +test cases/frameworks/14 doxygen/include/comedian.h +test cases/frameworks/14 doxygen/include/spede.h +test cases/frameworks/14 doxygen/src/spede.cpp +test cases/frameworks/15 llvm/meson.build +test cases/frameworks/15 llvm/sum.c +test cases/frameworks/16 sdl2/meson.build +test cases/frameworks/16 sdl2/sdl2prog.c +test cases/frameworks/17 mpi/is_broken_ubuntu.py +test cases/frameworks/17 mpi/main.c +test cases/frameworks/17 mpi/main.cpp +test cases/frameworks/17 mpi/main.f90 +test cases/frameworks/17 mpi/meson.build +test cases/frameworks/18 vulkan/meson.build +test cases/frameworks/18 vulkan/vulkanprog.c +test cases/frameworks/19 pcap/meson.build +test cases/frameworks/19 pcap/pcap_prog.c +test cases/frameworks/2 gtest/meson.build +test cases/frameworks/2 gtest/test.cc +test cases/frameworks/2 gtest/test_nomain.cc +test cases/frameworks/20 cups/cups_prog.c +test cases/frameworks/20 cups/meson.build +test cases/frameworks/21 libwmf/libwmf_prog.c +test cases/frameworks/21 libwmf/meson.build +test cases/frameworks/22 gir link order/meson-sample.c +test cases/frameworks/22 gir link order/meson-sample.h +test cases/frameworks/22 gir link order/meson.build +test cases/frameworks/22 gir link order/fake-gthread/fake-gthread.c +test cases/frameworks/22 gir link order/fake-gthread/fake-gthread.h +test cases/frameworks/22 gir link order/fake-gthread/meson.build +test cases/frameworks/22 gir link order/get-prgname/get-prgname.c +test cases/frameworks/22 gir link order/get-prgname/get-prgname.h +test cases/frameworks/22 gir link order/get-prgname/meson.build +test cases/frameworks/3 gmock/gmocktest.cc +test cases/frameworks/3 gmock/meson.build +test cases/frameworks/4 qt/main.cpp +test cases/frameworks/4 qt/mainWindow.cpp +test cases/frameworks/4 qt/mainWindow.h +test cases/frameworks/4 qt/mainWindow.ui +test cases/frameworks/4 qt/manualinclude.cpp +test cases/frameworks/4 qt/manualinclude.h +test cases/frameworks/4 qt/meson.build +test cases/frameworks/4 qt/meson_options.txt +test cases/frameworks/4 qt/q5core.cpp +test cases/frameworks/4 qt/qt4core_fr.ts +test cases/frameworks/4 qt/qt5core_fr.ts +test cases/frameworks/4 qt/stuff.qrc +test cases/frameworks/4 qt/stuff2.qrc +test cases/frameworks/4 qt/thing.png +test cases/frameworks/4 qt/thing2.png +test cases/frameworks/4 qt/plugin/plugin.cpp +test cases/frameworks/4 qt/plugin/plugin.h +test cases/frameworks/4 qt/plugin/plugin.json +test cases/frameworks/4 qt/pluginInterface/plugin_if.h +test cases/frameworks/4 qt/subfolder/generator.py +test cases/frameworks/4 qt/subfolder/main.cpp +test cases/frameworks/4 qt/subfolder/meson.build +test cases/frameworks/4 qt/subfolder/resources/stuff3.qrc +test cases/frameworks/4 qt/subfolder/resources/stuff4.qrc.in +test cases/frameworks/4 qt/subfolder/resources/thing.png +test cases/frameworks/5 protocol buffers/defs.proto +test cases/frameworks/5 protocol buffers/main.cpp +test cases/frameworks/5 protocol buffers/meson.build +test cases/frameworks/5 protocol buffers/asubdir/defs.proto +test cases/frameworks/5 protocol buffers/asubdir/main.cpp +test cases/frameworks/5 protocol buffers/asubdir/meson.build +test cases/frameworks/5 protocol buffers/sidedir/meson.build +test cases/frameworks/5 protocol buffers/sidedir/sideprog.cpp +test cases/frameworks/5 protocol buffers/withpath/meson.build +test cases/frameworks/5 protocol buffers/withpath/pathprog.cpp +test cases/frameworks/5 protocol buffers/withpath/com/mesonbuild/simple.proto +test cases/frameworks/5 protocol buffers/withpath/com/mesonbuild/subsite/complex.proto +test cases/frameworks/6 gettext/installed_files.txt +test cases/frameworks/6 gettext/meson.build +test cases/frameworks/6 gettext/data/meson.build +test cases/frameworks/6 gettext/data/test.desktop.in +test cases/frameworks/6 gettext/po/LINGUAS +test cases/frameworks/6 gettext/po/POTFILES +test cases/frameworks/6 gettext/po/de.po +test cases/frameworks/6 gettext/po/fi.po +test cases/frameworks/6 gettext/po/intltest.pot +test cases/frameworks/6 gettext/po/meson.build +test cases/frameworks/6 gettext/src/intlmain.c +test cases/frameworks/6 gettext/src/meson.build +test cases/frameworks/7 gnome/installed_files.txt +test cases/frameworks/7 gnome/meson.build +test cases/frameworks/7 gnome/gdbus/gdbusprog.c +test cases/frameworks/7 gnome/gdbus/meson.build +test cases/frameworks/7 gnome/gdbus/data/com.example.Sample.xml +test cases/frameworks/7 gnome/genmarshal/main.c +test cases/frameworks/7 gnome/genmarshal/marshaller.list +test cases/frameworks/7 gnome/genmarshal/meson.build +test cases/frameworks/7 gnome/gir/meson-sample.c +test cases/frameworks/7 gnome/gir/meson-sample.h +test cases/frameworks/7 gnome/gir/meson.build +test cases/frameworks/7 gnome/gir/prog.c +test cases/frameworks/7 gnome/gir/prog.py +test cases/frameworks/7 gnome/gir/dep1/dep1.c +test cases/frameworks/7 gnome/gir/dep1/dep1.h +test cases/frameworks/7 gnome/gir/dep1/meson.build +test cases/frameworks/7 gnome/gir/dep1/dep2/dep2.c +test cases/frameworks/7 gnome/gir/dep1/dep2/dep2.h +test cases/frameworks/7 gnome/gir/dep1/dep2/meson.build +test cases/frameworks/7 gnome/mkenums/enums.c.in +test cases/frameworks/7 gnome/mkenums/enums.h.in +test cases/frameworks/7 gnome/mkenums/enums2.c.in +test cases/frameworks/7 gnome/mkenums/enums2.h.in +test cases/frameworks/7 gnome/mkenums/main.c +test cases/frameworks/7 gnome/mkenums/main4.c +test cases/frameworks/7 gnome/mkenums/main5.c +test cases/frameworks/7 gnome/mkenums/meson-decls.h +test cases/frameworks/7 gnome/mkenums/meson-sample.h +test cases/frameworks/7 gnome/mkenums/meson.build +test cases/frameworks/7 gnome/resources/copyfile.py +test cases/frameworks/7 gnome/resources/generated-main.c +test cases/frameworks/7 gnome/resources/generated.gresource.xml +test cases/frameworks/7 gnome/resources/meson.build +test cases/frameworks/7 gnome/resources/myresource.gresource.xml +test cases/frameworks/7 gnome/resources/resources.py +test cases/frameworks/7 gnome/resources/simple-main.c +test cases/frameworks/7 gnome/resources/simple.gresource.xml +test cases/frameworks/7 gnome/resources-data/meson.build +test cases/frameworks/7 gnome/resources-data/res1.txt +test cases/frameworks/7 gnome/resources-data/res3.txt.in +test cases/frameworks/7 gnome/resources-data/subdir/meson.build +test cases/frameworks/7 gnome/resources-data/subdir/res2.txt +test cases/frameworks/7 gnome/resources-data/subdir/res4.txt.in +test cases/frameworks/7 gnome/schemas/com.github.meson.gschema.xml +test cases/frameworks/7 gnome/schemas/meson.build +test cases/frameworks/7 gnome/schemas/schemaprog.c +test cases/frameworks/8 flex/lexer.l +test cases/frameworks/8 flex/meson.build +test cases/frameworks/8 flex/parser.y +test cases/frameworks/8 flex/prog.c +test cases/frameworks/8 flex/test.txt +test cases/frameworks/9 wxwidgets/mainwin.h +test cases/frameworks/9 wxwidgets/meson.build +test cases/frameworks/9 wxwidgets/wxprog.cpp +test cases/frameworks/9 wxwidgets/wxstc.cpp +test cases/java/1 basic/installed_files.txt +test cases/java/1 basic/meson.build +test cases/java/1 basic/com/mesonbuild/Simple.java +test cases/java/2 subdir/meson.build +test cases/java/2 subdir/sub/meson.build +test cases/java/2 subdir/sub/com/mesonbuild/Simple.java +test cases/java/2 subdir/sub/com/mesonbuild/TextPrinter.java +test cases/java/3 args/meson.build +test cases/java/3 args/com/mesonbuild/Simple.java +test cases/java/4 inner class/meson.build +test cases/java/4 inner class/com/mesonbuild/Simple.java +test cases/java/5 includedirs/meson.build +test cases/java/5 includedirs/com/mesonbuild/Simple.java +test cases/java/5 includedirs/com/mesonbuild/TextPrinter.java +test cases/java/6 codegen/meson.build +test cases/java/6 codegen/com/mesonbuild/Config.java.in +test cases/java/6 codegen/com/mesonbuild/Simple.java +test cases/java/6 codegen/com/mesonbuild/TextPrinter.java +test cases/java/6 codegen/com/mesonbuild/meson.build +test cases/linuxlike/1 pkg-config/meson.build +test cases/linuxlike/1 pkg-config/prog-checkver.c +test cases/linuxlike/1 pkg-config/prog.c +test cases/linuxlike/1 pkg-config/incdir/myinc.h +test cases/linuxlike/10 large file support/meson.build +test cases/linuxlike/11 runpath rpath ldlibrarypath/lib.c +test cases/linuxlike/11 runpath rpath ldlibrarypath/main.c +test cases/linuxlike/11 runpath rpath ldlibrarypath/meson.build +test cases/linuxlike/11 runpath rpath ldlibrarypath/lib1/meson.build +test cases/linuxlike/11 runpath rpath ldlibrarypath/lib2/meson.build +test cases/linuxlike/12 subprojects in subprojects/main.c +test cases/linuxlike/12 subprojects in subprojects/meson.build +test cases/linuxlike/12 subprojects in subprojects/subprojects/a/a.c +test cases/linuxlike/12 subprojects in subprojects/subprojects/a/a.h +test cases/linuxlike/12 subprojects in subprojects/subprojects/a/meson.build +test cases/linuxlike/12 subprojects in subprojects/subprojects/b/b.c +test cases/linuxlike/12 subprojects in subprojects/subprojects/b/b.h +test cases/linuxlike/12 subprojects in subprojects/subprojects/b/meson.build +test cases/linuxlike/12 subprojects in subprojects/subprojects/c/c.h +test cases/linuxlike/12 subprojects in subprojects/subprojects/c/meson.build +test cases/linuxlike/2 external library/meson.build +test cases/linuxlike/2 external library/prog.c +test cases/linuxlike/3 linker script/bob.c +test cases/linuxlike/3 linker script/bob.h +test cases/linuxlike/3 linker script/bob.map +test cases/linuxlike/3 linker script/bob.map.in +test cases/linuxlike/3 linker script/copy.py +test cases/linuxlike/3 linker script/meson.build +test cases/linuxlike/3 linker script/prog.c +test cases/linuxlike/3 linker script/sub/foo.map +test cases/linuxlike/3 linker script/sub/meson.build +test cases/linuxlike/4 extdep static lib/lib.c +test cases/linuxlike/4 extdep static lib/meson.build +test cases/linuxlike/4 extdep static lib/prog.c +test cases/linuxlike/5 dependency versions/meson.build +test cases/linuxlike/5 dependency versions/subprojects/somelib/lib.c +test cases/linuxlike/5 dependency versions/subprojects/somelib/meson.build +test cases/linuxlike/5 dependency versions/subprojects/somelibnover/lib.c +test cases/linuxlike/5 dependency versions/subprojects/somelibnover/meson.build +test cases/linuxlike/5 dependency versions/subprojects/somelibver/lib.c +test cases/linuxlike/5 dependency versions/subprojects/somelibver/meson.build +test cases/linuxlike/6 subdir include order/meson.build +test cases/linuxlike/6 subdir include order/prog.c +test cases/linuxlike/6 subdir include order/subdir/glib.h +test cases/linuxlike/7 library versions/exe.orig.c +test cases/linuxlike/7 library versions/installed_files.txt +test cases/linuxlike/7 library versions/lib.c +test cases/linuxlike/7 library versions/meson.build +test cases/linuxlike/8 subproject library install/installed_files.txt +test cases/linuxlike/8 subproject library install/meson.build +test cases/linuxlike/8 subproject library install/subprojects/sublib/meson.build +test cases/linuxlike/8 subproject library install/subprojects/sublib/sublib.c +test cases/linuxlike/8 subproject library install/subprojects/sublib/include/subdefs.h +test cases/linuxlike/9 compiler checks with dependencies/meson.build +test cases/nasm/1 configure file/hello.asm +test cases/nasm/1 configure file/meson.build +test cases/objc/1 simple/meson.build +test cases/objc/1 simple/prog.m +test cases/objc/2 nsstring/meson.build +test cases/objc/2 nsstring/stringprog.m +test cases/objc/3 objc args/meson.build +test cases/objc/3 objc args/prog.m +test cases/objc/6 c++ project objc subproject/master.cpp +test cases/objc/6 c++ project objc subproject/meson.build +test cases/objc/6 c++ project objc subproject/subprojects/foo/foo.m +test cases/objc/6 c++ project objc subproject/subprojects/foo/meson.build +test cases/objcpp/1 simple/meson.build +test cases/objcpp/1 simple/prog.mm +test cases/objcpp/2 objc++ args/meson.build +test cases/objcpp/2 objc++ args/prog.mm +test cases/osx/1 basic/main.c +test cases/osx/1 basic/meson.build +test cases/osx/2 library versions/CMakeLists.txt +test cases/osx/2 library versions/exe.orig.c +test cases/osx/2 library versions/installed_files.txt +test cases/osx/2 library versions/lib.c +test cases/osx/2 library versions/meson.build +test cases/osx/3 has function xcode8/meson.build +test cases/osx/4 framework/meson.build +test cases/osx/4 framework/prog.c +test cases/osx/4 framework/stat.c +test cases/osx/4 framework/xcode-frameworks.png +test cases/python3/1 basic/meson.build +test cases/python3/1 basic/prog.py +test cases/python3/1 basic/gluon/__init__.py +test cases/python3/1 basic/gluon/gluonator.py +test cases/python3/1 basic/subdir/meson.build +test cases/python3/1 basic/subdir/subprog.py +test cases/python3/2 extmodule/blaster.py +test cases/python3/2 extmodule/meson.build +test cases/python3/2 extmodule/ext/meson.build +test cases/python3/2 extmodule/ext/tachyon_module.c +test cases/python3/3 cython/cytest.py +test cases/python3/3 cython/meson.build +test cases/python3/3 cython/libdir/cstorer.pxd +test cases/python3/3 cython/libdir/meson.build +test cases/python3/3 cython/libdir/storer.c +test cases/python3/3 cython/libdir/storer.h +test cases/python3/3 cython/libdir/storer.pyx +test cases/python3/4 custom target depends extmodule/blaster.py +test cases/python3/4 custom target depends extmodule/meson.build +test cases/python3/4 custom target depends extmodule/ext/meson.build +test cases/python3/4 custom target depends extmodule/ext/tachyon_module.c +test cases/python3/4 custom target depends extmodule/ext/lib/meson-tachyonlib.c +test cases/python3/4 custom target depends extmodule/ext/lib/meson-tachyonlib.h +test cases/python3/4 custom target depends extmodule/ext/lib/meson.build +test cases/rewrite/1 basic/added.txt +test cases/rewrite/1 basic/meson.build +test cases/rewrite/1 basic/removed.txt +test cases/rewrite/2 subdirs/meson.build +test cases/rewrite/2 subdirs/sub1/after.txt +test cases/rewrite/2 subdirs/sub1/meson.build +test cases/rewrite/2 subdirs/sub2/meson.build +test cases/rust/1 basic/installed_files.txt +test cases/rust/1 basic/meson.build +test cases/rust/1 basic/prog.rs +test cases/rust/1 basic/subdir/meson.build +test cases/rust/1 basic/subdir/prog.rs +test cases/rust/2 sharedlib/installed_files.txt +test cases/rust/2 sharedlib/meson.build +test cases/rust/2 sharedlib/prog.rs +test cases/rust/2 sharedlib/stuff.rs +test cases/rust/3 staticlib/installed_files.txt +test cases/rust/3 staticlib/meson.build +test cases/rust/3 staticlib/prog.rs +test cases/rust/3 staticlib/stuff.rs +test cases/rust/4 polyglot/installed_files.txt +test cases/rust/4 polyglot/meson.build +test cases/rust/4 polyglot/prog.c +test cases/rust/4 polyglot/stuff.rs +test cases/rust/5 polyglot static/installed_files.txt +test cases/rust/5 polyglot static/meson.build +test cases/rust/5 polyglot static/prog.c +test cases/rust/5 polyglot static/stuff.rs +test cases/rust/6 named staticlib/installed_files.txt +test cases/rust/6 named staticlib/meson.build +test cases/rust/6 named staticlib/prog.rs +test cases/rust/6 named staticlib/stuff.rs +test cases/rust/7 private crate collision/installed_files.txt +test cases/rust/7 private crate collision/meson.build +test cases/rust/7 private crate collision/prog.rs +test cases/rust/7 private crate collision/rand.rs +test cases/rust/8 many files/foo.rs +test cases/rust/8 many files/main.rs +test cases/rust/8 many files/meson.build +test cases/swift/1 exe/meson.build +test cases/swift/1 exe/prog.swift +test cases/swift/2 multifile/libfile.swift +test cases/swift/2 multifile/main.swift +test cases/swift/2 multifile/meson.build +test cases/swift/3 library/meson.build +test cases/swift/3 library/exe/main.swift +test cases/swift/3 library/exe/meson.build +test cases/swift/3 library/lib/datasource.swift +test cases/swift/3 library/lib/meson.build +test cases/swift/3 library/lib/othersource.swift +test cases/swift/4 generate/meson.build +test cases/swift/4 generate/gen/main.swift +test cases/swift/4 generate/gen/meson.build +test cases/swift/4 generate/user/main.swift +test cases/swift/4 generate/user/meson.build +test cases/swift/5 mixed/main.swift +test cases/swift/5 mixed/meson.build +test cases/swift/5 mixed/mylib.c +test cases/swift/5 mixed/mylib.h +test cases/swift/6 modulemap/main.swift +test cases/swift/6 modulemap/meson.build +test cases/swift/6 modulemap/module.modulemap +test cases/swift/6 modulemap/mylib.c +test cases/swift/6 modulemap/mylib.h +test cases/swift/7 modulemap subdir/main.swift +test cases/swift/7 modulemap subdir/meson.build +test cases/swift/7 modulemap subdir/mylib/meson.build +test cases/swift/7 modulemap subdir/mylib/module.modulemap +test cases/swift/7 modulemap subdir/mylib/mylib.c +test cases/swift/7 modulemap subdir/mylib/mylib.h +test cases/unit/1 soname/CMakeLists.txt +test cases/unit/1 soname/meson.build +test cases/unit/1 soname/versioned.c +test cases/unit/10 d dedup/meson.build +test cases/unit/10 d dedup/prog.c +test cases/unit/11 build_rpath/meson.build +test cases/unit/11 build_rpath/prog.c +test cases/unit/11 build_rpath/prog.cc +test cases/unit/11 build_rpath/sub/meson.build +test cases/unit/11 build_rpath/sub/stuff.c +test cases/unit/12 cross prog/meson.build +test cases/unit/12 cross prog/some_cross_tool.py +test cases/unit/12 cross prog/sometool.py +test cases/unit/13 promote/meson.build +test cases/unit/13 promote/subprojects/s1/meson.build +test cases/unit/13 promote/subprojects/s1/s1.c +test cases/unit/13 promote/subprojects/s1/subprojects/s3/meson.build +test cases/unit/13 promote/subprojects/s1/subprojects/s3/s3.c +test cases/unit/13 promote/subprojects/s1/subprojects/scommon/meson.build +test cases/unit/13 promote/subprojects/s1/subprojects/scommon/scommon_broken.c +test cases/unit/13 promote/subprojects/s2/meson.build +test cases/unit/13 promote/subprojects/s2/s2.c +test cases/unit/13 promote/subprojects/s2/subprojects/athing.wrap +test cases/unit/13 promote/subprojects/s2/subprojects/scommon/meson.build +test cases/unit/13 promote/subprojects/s2/subprojects/scommon/scommon_ok.c +test cases/unit/13 reconfigure/meson.build +test cases/unit/13 testsetup selection/main.c +test cases/unit/13 testsetup selection/meson.build +test cases/unit/13 testsetup selection/subprojects/bar/bar.c +test cases/unit/13 testsetup selection/subprojects/bar/meson.build +test cases/unit/13 testsetup selection/subprojects/foo/foo.c +test cases/unit/13 testsetup selection/subprojects/foo/meson.build +test cases/unit/14 prebuilt object/main.c +test cases/unit/14 prebuilt object/meson.build +test cases/unit/14 prebuilt object/source.c +test cases/unit/15 prebuilt static/main.c +test cases/unit/15 prebuilt static/meson.build +test cases/unit/15 prebuilt static/libdir/best.c +test cases/unit/15 prebuilt static/libdir/best.h +test cases/unit/15 prebuilt static/libdir/meson.build +test cases/unit/16 prebuilt shared/alexandria.c +test cases/unit/16 prebuilt shared/alexandria.h +test cases/unit/16 prebuilt shared/another_visitor.c +test cases/unit/16 prebuilt shared/meson.build +test cases/unit/16 prebuilt shared/patron.c +test cases/unit/17 pkgconfig static/foo.c +test cases/unit/17 pkgconfig static/foo.pc.in +test cases/unit/17 pkgconfig static/main.c +test cases/unit/17 pkgconfig static/meson.build +test cases/unit/17 pkgconfig static/include/foo.h +test cases/unit/18 array option/meson.build +test cases/unit/18 array option/meson_options.txt +test cases/unit/2 testsetups/buggy.c +test cases/unit/2 testsetups/envcheck.py +test cases/unit/2 testsetups/impl.c +test cases/unit/2 testsetups/impl.h +test cases/unit/2 testsetups/meson.build +test cases/unit/20 subproj dep variables/meson.build +test cases/unit/20 subproj dep variables/subprojects/failingsubproj/meson.build +test cases/unit/20 subproj dep variables/subprojects/somesubproj/meson.build +test cases/unit/21 exit status/meson.build +test cases/unit/21 warning location/a.c +test cases/unit/21 warning location/b.c +test cases/unit/21 warning location/conf.in +test cases/unit/21 warning location/main.c +test cases/unit/21 warning location/meson.build +test cases/unit/21 warning location/sub/c.c +test cases/unit/21 warning location/sub/d.c +test cases/unit/21 warning location/sub/meson.build +test cases/unit/21 warning location/sub/sub.c +test cases/unit/22 unfound pkgconfig/meson.build +test cases/unit/22 unfound pkgconfig/some.c +test cases/unit/23 compiler run_command/meson.build +test cases/unit/23 non-permitted kwargs/meson.build +test cases/unit/24 install umask/datafile.cat +test cases/unit/24 install umask/meson.build +test cases/unit/24 install umask/myinstall.py +test cases/unit/24 install umask/prog.1 +test cases/unit/24 install umask/prog.c +test cases/unit/24 install umask/sample.h +test cases/unit/24 install umask/subdir/datafile.dog +test cases/unit/24 install umask/subdir/sayhello +test cases/unit/24 pkgconfig usage/dependee/meson.build +test cases/unit/24 pkgconfig usage/dependee/pkguser.c +test cases/unit/24 pkgconfig usage/dependency/meson.build +test cases/unit/24 pkgconfig usage/dependency/pkgdep.c +test cases/unit/24 pkgconfig usage/dependency/pkgdep.h +test cases/unit/24 pkgconfig usage/dependency/privatelib.c +test cases/unit/25 ndebug if-release/main.c +test cases/unit/25 ndebug if-release/meson.build +test cases/unit/26 guessed linker dependencies/exe/app.c +test cases/unit/26 guessed linker dependencies/exe/meson.build +test cases/unit/26 guessed linker dependencies/lib/lib.c +test cases/unit/26 guessed linker dependencies/lib/meson.build +test cases/unit/26 guessed linker dependencies/lib/meson_options.txt +test cases/unit/26 shared_mod linking/libfile.c +test cases/unit/26 shared_mod linking/main.c +test cases/unit/26 shared_mod linking/meson.build +test cases/unit/27 forcefallback/meson.build +test cases/unit/27 forcefallback/test_not_zlib.c +test cases/unit/27 forcefallback/subprojects/notzlib/meson.build +test cases/unit/27 forcefallback/subprojects/notzlib/notzlib.c +test cases/unit/27 forcefallback/subprojects/notzlib/notzlib.h +test cases/unit/28 pkgconfig use libraries/app/app.c +test cases/unit/28 pkgconfig use libraries/app/meson.build +test cases/unit/28 pkgconfig use libraries/lib/liba.c +test cases/unit/28 pkgconfig use libraries/lib/libb.c +test cases/unit/28 pkgconfig use libraries/lib/meson.build +test cases/unit/29 cross file overrides always args/meson.build +test cases/unit/29 cross file overrides always args/test.c +test cases/unit/29 cross file overrides always args/ubuntu-armhf-overrides.txt +test cases/unit/3 subproject defaults/meson.build +test cases/unit/3 subproject defaults/meson_options.txt +test cases/unit/3 subproject defaults/subprojects/foob/meson.build +test cases/unit/3 subproject defaults/subprojects/foob/meson_options.txt +test cases/unit/30 command line/meson.build +test cases/unit/30 command line/meson_options.txt +test cases/unit/30 command line/subprojects/subp/meson.build +test cases/unit/30 command line/subprojects/subp/meson_options.txt +test cases/unit/30 mixed command line args/meson.build +test cases/unit/30 mixed command line args/meson_options.txt +test cases/unit/31 pkgconfig format/meson.build +test cases/unit/31 pkgconfig format/somelib.c +test cases/unit/31 pkgconfig format/someret.c +test cases/unit/32 python extmodule/blaster.py +test cases/unit/32 python extmodule/meson.build +test cases/unit/32 python extmodule/meson_options.txt +test cases/unit/32 python extmodule/ext/meson.build +test cases/unit/32 python extmodule/ext/tachyon_module.c +test cases/unit/33 external, internal library rpath/built library/bar.c +test cases/unit/33 external, internal library rpath/built library/meson.build +test cases/unit/33 external, internal library rpath/built library/meson_options.txt +test cases/unit/33 external, internal library rpath/built library/prog.c +test cases/unit/33 external, internal library rpath/external library/bar.c +test cases/unit/33 external, internal library rpath/external library/faa.c +test cases/unit/33 external, internal library rpath/external library/foo.c +test cases/unit/33 external, internal library rpath/external library/meson.build +test cases/unit/34 featurenew subprojects/meson.build +test cases/unit/34 featurenew subprojects/subprojects/bar/meson.build +test cases/unit/34 featurenew subprojects/subprojects/foo/meson.build +test cases/unit/35 rpath order/meson.build +test cases/unit/35 rpath order/myexe.c +test cases/unit/35 rpath order/subprojects/sub1/lib.c +test cases/unit/35 rpath order/subprojects/sub1/meson.build +test cases/unit/35 rpath order/subprojects/sub2/lib.c +test cases/unit/35 rpath order/subprojects/sub2/meson.build +test cases/unit/4 suite selection/failing_test.c +test cases/unit/4 suite selection/meson.build +test cases/unit/4 suite selection/successful_test.c +test cases/unit/4 suite selection/subprojects/subprjfail/failing_test.c +test cases/unit/4 suite selection/subprojects/subprjfail/meson.build +test cases/unit/4 suite selection/subprojects/subprjmix/failing_test.c +test cases/unit/4 suite selection/subprojects/subprjmix/meson.build +test cases/unit/4 suite selection/subprojects/subprjmix/successful_test.c +test cases/unit/4 suite selection/subprojects/subprjsucc/meson.build +test cases/unit/4 suite selection/subprojects/subprjsucc/successful_test.c +test cases/unit/5 compiler detection/compiler wrapper.py +test cases/unit/5 compiler detection/meson.build +test cases/unit/5 compiler detection/trivial.c +test cases/unit/5 compiler detection/trivial.cc +test cases/unit/5 compiler detection/trivial.m +test cases/unit/5 compiler detection/trivial.mm +test cases/unit/6 std override/meson.build +test cases/unit/6 std override/prog03.cpp +test cases/unit/6 std override/prog11.cpp +test cases/unit/6 std override/progp.cpp +test cases/unit/7 run installed/meson.build +test cases/unit/7 run installed/prog.c +test cases/unit/7 run installed/foo/foo.c +test cases/unit/7 run installed/foo/meson.build +test cases/unit/9 -L -l order/first.pc +test cases/unit/9 -L -l order/meson.build +test cases/unit/9 -L -l order/prog.c +test cases/unit/9 -L -l order/second.pc +test cases/vala/1 basic/meson.build +test cases/vala/1 basic/prog.vala +test cases/vala/10 mixed sources/meson.build +test cases/vala/10 mixed sources/c/foo.c +test cases/vala/10 mixed sources/c/meson.build +test cases/vala/10 mixed sources/c/writec.py +test cases/vala/10 mixed sources/vala/bar.vala +test cases/vala/11 generated vapi/installed_files.txt +test cases/vala/11 generated vapi/main.vala +test cases/vala/11 generated vapi/meson.build +test cases/vala/11 generated vapi/libbar/bar.c +test cases/vala/11 generated vapi/libbar/bar.h +test cases/vala/11 generated vapi/libbar/meson.build +test cases/vala/11 generated vapi/libfoo/foo.c +test cases/vala/11 generated vapi/libfoo/foo.h +test cases/vala/11 generated vapi/libfoo/meson.build +test cases/vala/12 custom output/bar.vala +test cases/vala/12 custom output/foo.vala +test cases/vala/12 custom output/meson.build +test cases/vala/13 find library/meson.build +test cases/vala/13 find library/test.vala +test cases/vala/14 target glib version and gresources/meson.build +test cases/vala/14 target glib version and gresources/test.vala +test cases/vala/14 target glib version and gresources/gres/meson.build +test cases/vala/14 target glib version and gresources/gres/test-resources.xml +test cases/vala/14 target glib version and gresources/gres/test.ui +test cases/vala/15 static vapi in source tree/meson.build +test cases/vala/15 static vapi in source tree/test.vala +test cases/vala/15 static vapi in source tree/vapi/config.vapi +test cases/vala/16 mixed dependence/app.vala +test cases/vala/16 mixed dependence/meson.build +test cases/vala/16 mixed dependence/mixer-glue.c +test cases/vala/16 mixed dependence/mixer.vala +test cases/vala/17 plain consumer/app.c +test cases/vala/17 plain consumer/badger.vala +test cases/vala/17 plain consumer/meson.build +test cases/vala/18 vapi consumed twice/app.vala +test cases/vala/18 vapi consumed twice/beer.vala +test cases/vala/18 vapi consumed twice/meson.build +test cases/vala/18 vapi consumed twice/person.vala +test cases/vala/19 genie/meson.build +test cases/vala/19 genie/prog.gs +test cases/vala/2 multiple files/class1.vala +test cases/vala/2 multiple files/class2.vala +test cases/vala/2 multiple files/main.vala +test cases/vala/2 multiple files/meson.build +test cases/vala/20 genie multiple mixed sources/c_test_one.c +test cases/vala/20 genie multiple mixed sources/c_test_two.c +test cases/vala/20 genie multiple mixed sources/init.gs +test cases/vala/20 genie multiple mixed sources/meson.build +test cases/vala/20 genie multiple mixed sources/test_one.gs +test cases/vala/20 genie multiple mixed sources/test_two.gs +test cases/vala/20 genie multiple mixed sources/vala_test_one.vala +test cases/vala/20 genie multiple mixed sources/vala_test_two.vala +test cases/vala/21 type module/foo.vala +test cases/vala/21 type module/meson.build +test cases/vala/21 type module/plugin-bar.vala +test cases/vala/21 type module/plugin-module.vala +test cases/vala/21 type module/plugin.vala +test cases/vala/22 same target in directories/Test.vala +test cases/vala/22 same target in directories/meson.build +test cases/vala/22 same target in directories/prog.vala +test cases/vala/22 same target in directories/Subdir/Test.vala +test cases/vala/22 same target in directories/Subdir/Subdir2/Test.vala +test cases/vala/22 same target in directories/Subdir2/Test.vala +test cases/vala/23 thread flags/meson.build +test cases/vala/23 thread flags/prog.vala +test cases/vala/24 export dynamic shared module/app.vala +test cases/vala/24 export dynamic shared module/meson.build +test cases/vala/24 export dynamic shared module/module.vala +test cases/vala/25 extract_all_objects/meson.build +test cases/vala/25 extract_all_objects/prog.vala +test cases/vala/26 vala and asm/meson.build +test cases/vala/26 vala and asm/prog.vala +test cases/vala/26 vala and asm/retval-arm.S +test cases/vala/26 vala and asm/retval-x86.S +test cases/vala/26 vala and asm/retval-x86_64.S +test cases/vala/26 vala and asm/symbol-underscore.h +test cases/vala/3 dep/gioprog.vala +test cases/vala/3 dep/meson.build +test cases/vala/4 config/config.vapi +test cases/vala/4 config/meson-something-else.vapi +test cases/vala/4 config/meson.build +test cases/vala/4 config/prog.vala +test cases/vala/5 target glib/GLib.Thread.vala +test cases/vala/5 target glib/meson.build +test cases/vala/5 target glib/retcode.c +test cases/vala/6 static library/installed_files.txt +test cases/vala/6 static library/meson.build +test cases/vala/6 static library/mylib.vala +test cases/vala/6 static library/prog.vala +test cases/vala/7 shared library/installed_files.txt +test cases/vala/7 shared library/meson.build +test cases/vala/7 shared library/lib/meson.build +test cases/vala/7 shared library/lib/mylib.vala +test cases/vala/7 shared library/prog/meson.build +test cases/vala/7 shared library/prog/prog.vala +test cases/vala/8 generated sources/installed_files.txt +test cases/vala/8 generated sources/meson.build +test cases/vala/8 generated sources/dependency-generated/enum-types.c.template +test cases/vala/8 generated sources/dependency-generated/enum-types.h.template +test cases/vala/8 generated sources/dependency-generated/enums.h +test cases/vala/8 generated sources/dependency-generated/lib.vala +test cases/vala/8 generated sources/dependency-generated/main.vala +test cases/vala/8 generated sources/dependency-generated/meson.build +test cases/vala/8 generated sources/dependency-generated/null.c +test cases/vala/8 generated sources/onlygen/maingen.in +test cases/vala/8 generated sources/onlygen/meson.build +test cases/vala/8 generated sources/src/config.vala.in +test cases/vala/8 generated sources/src/copy_file.py +test cases/vala/8 generated sources/src/meson.build +test cases/vala/8 generated sources/src/returncode.in +test cases/vala/8 generated sources/src/test.vala +test cases/vala/8 generated sources/src/write_wrapper.py +test cases/vala/8 generated sources/tools/meson.build +test cases/vala/9 gir/foo.vala +test cases/vala/9 gir/installed_files.txt +test cases/vala/9 gir/meson.build +test cases/windows/1 basic/installed_files.txt +test cases/windows/1 basic/meson.build +test cases/windows/1 basic/prog.c +test cases/windows/10 vs module defs generated/meson.build +test cases/windows/10 vs module defs generated/prog.c +test cases/windows/10 vs module defs generated/subdir/meson.build +test cases/windows/10 vs module defs generated/subdir/somedll.c +test cases/windows/10 vs module defs generated/subdir/somedll.def.in +test cases/windows/11 vs module defs generated custom target/meson.build +test cases/windows/11 vs module defs generated custom target/prog.c +test cases/windows/11 vs module defs generated custom target/subdir/make_def.py +test cases/windows/11 vs module defs generated custom target/subdir/meson.build +test cases/windows/11 vs module defs generated custom target/subdir/somedll.c +test cases/windows/12 exe implib/installed_files.txt +test cases/windows/12 exe implib/meson.build +test cases/windows/12 exe implib/prog.c +test cases/windows/13 resources with custom targets/meson.build +test cases/windows/13 resources with custom targets/prog.c +test cases/windows/13 resources with custom targets/res/gen-res.py +test cases/windows/13 resources with custom targets/res/meson.build +test cases/windows/13 resources with custom targets/res/myres.rc.in +test cases/windows/13 resources with custom targets/res/myres_static.rc +test cases/windows/13 resources with custom targets/res/resource.h +test cases/windows/13 resources with custom targets/res/sample.ico +test cases/windows/14 test argument extra paths/meson.build +test cases/windows/14 test argument extra paths/exe/main.c +test cases/windows/14 test argument extra paths/exe/meson.build +test cases/windows/14 test argument extra paths/lib/foo.c +test cases/windows/14 test argument extra paths/lib/foo.h +test cases/windows/14 test argument extra paths/lib/meson.build +test cases/windows/14 test argument extra paths/test/meson.build +test cases/windows/14 test argument extra paths/test/test_run_exe.py +test cases/windows/15 resources with custom target depend_files/meson.build +test cases/windows/15 resources with custom target depend_files/prog.c +test cases/windows/15 resources with custom target depend_files/ico/gen-ico.py +test cases/windows/15 resources with custom target depend_files/ico/meson.build +test cases/windows/15 resources with custom target depend_files/ico/sample.ico.in +test cases/windows/15 resources with custom target depend_files/res/meson.build +test cases/windows/15 resources with custom target depend_files/res/myres.rc +test cases/windows/16 resource scripts with duplicate filenames/meson.build +test cases/windows/16 resource scripts with duplicate filenames/rsrc.rc +test cases/windows/16 resource scripts with duplicate filenames/verify.c +test cases/windows/16 resource scripts with duplicate filenames/a/meson.build +test cases/windows/16 resource scripts with duplicate filenames/a/rsrc.rc +test cases/windows/16 resource scripts with duplicate filenames/b/meson.build +test cases/windows/16 resource scripts with duplicate filenames/b/rsrc.rc +test cases/windows/16 resource scripts with duplicate filenames/c/meson.build +test cases/windows/16 resource scripts with duplicate filenames/c/rsrc.rc +test cases/windows/2 winmain/meson.build +test cases/windows/2 winmain/prog.c +test cases/windows/3 cpp/meson.build +test cases/windows/3 cpp/prog.cpp +test cases/windows/4 winmaincpp/meson.build +test cases/windows/4 winmaincpp/prog.cpp +test cases/windows/5 resources/meson.build +test cases/windows/5 resources/prog.c +test cases/windows/5 resources/inc/meson.build +test cases/windows/5 resources/inc/resource/resource.h +test cases/windows/5 resources/res/meson.build +test cases/windows/5 resources/res/myres.rc +test cases/windows/5 resources/res/sample.ico +test cases/windows/6 vs module defs/meson.build +test cases/windows/6 vs module defs/prog.c +test cases/windows/6 vs module defs/subdir/meson.build +test cases/windows/6 vs module defs/subdir/somedll.c +test cases/windows/6 vs module defs/subdir/somedll.def +test cases/windows/8 dll versioning/copyfile.py +test cases/windows/8 dll versioning/exe.orig.c +test cases/windows/8 dll versioning/installed_files.txt +test cases/windows/8 dll versioning/lib.c +test cases/windows/8 dll versioning/meson.build +test cases/windows/9 find program/meson.build +test cases/windows/9 find program/test-script +test cases/windows/9 find program/test-script-ext.py +tools/ac_converter.py +tools/boost_names.py +tools/cmake2meson.py \ No newline at end of file diff -Nru meson-0.47.1/meson.egg-info/top_level.txt meson-0.47.2/meson.egg-info/top_level.txt --- meson-0.47.1/meson.egg-info/top_level.txt 1970-01-01 00:00:00.000000000 +0000 +++ meson-0.47.2/meson.egg-info/top_level.txt 2018-08-25 08:14:31.000000000 +0000 @@ -0,0 +1 @@ +mesonbuild diff -Nru meson-0.47.1/PKG-INFO meson-0.47.2/PKG-INFO --- meson-0.47.1/PKG-INFO 2018-07-10 21:04:57.000000000 +0000 +++ meson-0.47.2/PKG-INFO 2018-08-25 08:14:36.000000000 +0000 @@ -1,6 +1,6 @@ -Metadata-Version: 1.1 +Metadata-Version: 1.2 Name: meson -Version: 0.47.1 +Version: 0.47.2 Summary: A high performance build system Home-page: http://mesonbuild.com Author: Jussi Pakkanen @@ -22,3 +22,4 @@ Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python :: 3 :: Only Classifier: Topic :: Software Development :: Build Tools +Requires-Python: >=3.5 diff -Nru meson-0.47.1/run_meson_command_tests.py meson-0.47.2/run_meson_command_tests.py --- meson-0.47.1/run_meson_command_tests.py 2018-06-02 21:50:11.000000000 +0000 +++ meson-0.47.2/run_meson_command_tests.py 2018-08-25 08:05:50.000000000 +0000 @@ -18,6 +18,7 @@ import tempfile import unittest import subprocess +import zipapp from pathlib import Path from mesonbuild.mesonlib import windows_proof_rmtree, python_command, is_windows @@ -171,7 +172,7 @@ builddir = str(self.tmpdir / 'build4') (bindir / 'meson').rename(bindir / 'meson.real') wrapper = (bindir / 'meson') - with open(wrapper, 'w') as f: + with open(str(wrapper), 'w') as f: f.write('#!/bin/sh\n\nmeson.real "$@"') wrapper.chmod(0o755) meson_setup = [str(wrapper), 'setup'] @@ -182,5 +183,13 @@ def test_meson_exe_windows(self): raise unittest.SkipTest('NOT IMPLEMENTED') + def test_meson_zipapp(self): + if is_windows(): + raise unittest.SkipTest('NOT IMPLEMENTED') + source = Path(__file__).resolve().parent.as_posix() + target = self.tmpdir / 'meson.pyz' + zipapp.create_archive(source=source, target=target, interpreter=python_command[0], main=None) + self._run([target.as_posix(), '--help']) + if __name__ == '__main__': unittest.main(buffer=True) diff -Nru meson-0.47.1/run_tests.py meson-0.47.2/run_tests.py --- meson-0.47.1/run_tests.py 2018-06-18 21:29:57.000000000 +0000 +++ meson-0.47.2/run_tests.py 2018-08-25 08:05:50.000000000 +0000 @@ -30,7 +30,32 @@ from mesonbuild import mesonlib from mesonbuild import mesonmain from mesonbuild import mlog -from mesonbuild.environment import detect_ninja +from mesonbuild.environment import Environment, detect_ninja + + +# Fake classes and objects for mocking +class FakeBuild: + def __init__(self, env): + self.environment = env + +class FakeCompilerOptions: + def __init__(self): + self.value = [] + +def get_fake_options(prefix): + import argparse + opts = argparse.Namespace() + opts.cross_file = None + opts.wrap_mode = None + opts.prefix = prefix + opts.cmd_line_options = {} + return opts + +def get_fake_env(sdir, bdir, prefix): + env = Environment(sdir, bdir, get_fake_options(prefix)) + env.coredata.compiler_options['c_args'] = FakeCompilerOptions() + return env + Backend = Enum('Backend', 'ninja vs xcode') @@ -147,15 +172,6 @@ if backend is Backend.ninja: time.sleep(1) -def get_fake_options(prefix): - import argparse - opts = argparse.Namespace() - opts.cross_file = None - opts.wrap_mode = None - opts.prefix = prefix - opts.cmd_line_options = {} - return opts - def should_run_linux_cross_tests(): return shutil.which('arm-linux-gnueabihf-gcc') and not platform.machine().lower().startswith('arm') diff -Nru meson-0.47.1/run_unittests.py meson-0.47.2/run_unittests.py --- meson-0.47.1/run_unittests.py 2018-07-10 20:59:44.000000000 +0000 +++ meson-0.47.2/run_unittests.py 2018-08-25 08:05:50.000000000 +0000 @@ -39,15 +39,16 @@ windows_proof_rmtree, python_command, version_compare, grab_leading_numbers, BuildDirLock ) -from mesonbuild.environment import Environment, detect_ninja +from mesonbuild.environment import detect_ninja from mesonbuild.mesonlib import MesonException, EnvironmentException from mesonbuild.dependencies import PkgConfigDependency, ExternalProgram import mesonbuild.modules.pkgconfig -from run_tests import exe_suffix, get_fake_options, get_meson_script +from run_tests import exe_suffix, get_fake_env, get_meson_script from run_tests import get_builddir_target_args, get_backend_commands, Backend from run_tests import ensure_backend_detects_changes, run_configure_inprocess from run_tests import should_run_linux_cross_tests +from run_tests import FakeCompilerOptions def get_dynamic_section_entry(fname, entry): @@ -162,19 +163,19 @@ def test_compiler_args_class(self): cargsfunc = mesonbuild.compilers.CompilerArgs - c = mesonbuild.compilers.CCompiler([], 'fake', False) + cc = mesonbuild.compilers.CCompiler([], 'fake', False) # Test that bad initialization fails self.assertRaises(TypeError, cargsfunc, []) self.assertRaises(TypeError, cargsfunc, [], []) - self.assertRaises(TypeError, cargsfunc, c, [], []) + self.assertRaises(TypeError, cargsfunc, cc, [], []) # Test that empty initialization works - a = cargsfunc(c) + a = cargsfunc(cc) self.assertEqual(a, []) # Test that list initialization works - a = cargsfunc(['-I.', '-I..'], c) + a = cargsfunc(['-I.', '-I..'], cc) self.assertEqual(a, ['-I.', '-I..']) # Test that there is no de-dup on initialization - self.assertEqual(cargsfunc(['-I.', '-I.'], c), ['-I.', '-I.']) + self.assertEqual(cargsfunc(['-I.', '-I.'], cc), ['-I.', '-I.']) ## Test that appending works a.append('-I..') @@ -220,7 +221,7 @@ self.assertEqual(a, ['-Ibar', '-Ifoo', '-Ibaz', '-I..', '-I.', '-Ldir', '-Lbah', '-Werror', '-O3', '-O2', '-Wall']) ## Test that adding libraries works - l = cargsfunc(c, ['-Lfoodir', '-lfoo']) + l = cargsfunc(cc, ['-Lfoodir', '-lfoo']) self.assertEqual(l, ['-Lfoodir', '-lfoo']) # Adding a library and a libpath appends both correctly l += ['-Lbardir', '-lbar'] @@ -230,7 +231,7 @@ self.assertEqual(l, ['-Lbardir', '-Lfoodir', '-lfoo', '-lbar']) ## Test that 'direct' append and extend works - l = cargsfunc(c, ['-Lfoodir', '-lfoo']) + l = cargsfunc(cc, ['-Lfoodir', '-lfoo']) self.assertEqual(l, ['-Lfoodir', '-lfoo']) # Direct-adding a library and a libpath appends both correctly l.extend_direct(['-Lbardir', '-lbar']) @@ -245,6 +246,29 @@ l.append_direct('/libbaz.a') self.assertEqual(l, ['-Lfoodir', '-lfoo', '-Lbardir', '-lbar', '-lbar', '/libbaz.a']) + def test_compiler_args_class_gnuld(self): + cargsfunc = mesonbuild.compilers.CompilerArgs + ## Test --start/end-group + gcc = mesonbuild.compilers.GnuCCompiler([], 'fake', 0, False) + ## Test that 'direct' append and extend works + l = cargsfunc(gcc, ['-Lfoodir', '-lfoo']) + self.assertEqual(l.to_native(copy=True), ['-Lfoodir', '-Wl,--start-group', '-lfoo', '-Wl,--end-group']) + # Direct-adding a library and a libpath appends both correctly + l.extend_direct(['-Lbardir', '-lbar']) + self.assertEqual(l.to_native(copy=True), ['-Lfoodir', '-Wl,--start-group', '-lfoo', '-Lbardir', '-lbar', '-Wl,--end-group']) + # Direct-adding the same library again still adds it + l.append_direct('-lbar') + self.assertEqual(l.to_native(copy=True), ['-Lfoodir', '-Wl,--start-group', '-lfoo', '-Lbardir', '-lbar', '-lbar', '-Wl,--end-group']) + # Direct-adding with absolute path deduplicates + l.append_direct('/libbaz.a') + self.assertEqual(l.to_native(copy=True), ['-Lfoodir', '-Wl,--start-group', '-lfoo', '-Lbardir', '-lbar', '-lbar', '/libbaz.a', '-Wl,--end-group']) + # Adding libbaz again does nothing + l.append_direct('/libbaz.a') + self.assertEqual(l.to_native(copy=True), ['-Lfoodir', '-Wl,--start-group', '-lfoo', '-Lbardir', '-lbar', '-lbar', '/libbaz.a', '-Wl,--end-group']) + # Adding a non-library argument doesn't include it in the group + l += ['-Lfoo', '-Wl,--export-dynamic'] + self.assertEqual(l.to_native(copy=True), ['-Lfoo', '-Lfoodir', '-Wl,--start-group', '-lfoo', '-Lbardir', '-lbar', '-lbar', '/libbaz.a', '-Wl,--end-group', '-Wl,--export-dynamic']) + def test_string_templates_substitution(self): dictfunc = mesonbuild.mesonlib.get_filenames_templates_dict substfunc = mesonbuild.mesonlib.substitute_values @@ -566,7 +590,7 @@ 'windows-mingw': {'shared': ['lib{}.dll.a', 'lib{}.lib', 'lib{}.dll', '{}.dll.a', '{}.lib', '{}.dll'], 'static': msvc_static}} - env = Environment('', '', get_fake_options('')) + env = get_fake_env('', '', '') cc = env.detect_c_compiler(False) if is_osx(): self._test_all_naming(cc, env, patterns, 'darwin') @@ -601,6 +625,70 @@ 'mesonbuild.compilers.c.for_windows', true): self._test_all_naming(cc, env, patterns, 'windows-msvc') + def test_pkgconfig_parse_libs(self): + ''' + Unit test for parsing of pkg-config output to search for libraries + + https://github.com/mesonbuild/meson/issues/3951 + ''' + with tempfile.TemporaryDirectory() as tmpdir: + pkgbin = ExternalProgram('pkg-config', command=['pkg-config'], silent=True) + env = get_fake_env('', '', '') + compiler = env.detect_c_compiler(False) + env.coredata.compilers = {'c': compiler} + env.coredata.compiler_options['c_link_args'] = FakeCompilerOptions() + p1 = Path(tmpdir) / '1' + p2 = Path(tmpdir) / '2' + p1.mkdir() + p2.mkdir() + # libfoo.a is in one prefix + (p1 / 'libfoo.a').open('w').close() + # libbar.a is in both prefixes + (p1 / 'libbar.a').open('w').close() + (p2 / 'libbar.a').open('w').close() + # Ensure that we never statically link to these + (p1 / 'libpthread.a').open('w').close() + (p1 / 'libm.a').open('w').close() + (p1 / 'libc.a').open('w').close() + (p1 / 'libdl.a').open('w').close() + (p1 / 'librt.a').open('w').close() + + def fake_call_pkgbin(self, args, env=None): + if '--libs' not in args: + return 0, '' + if args[0] == 'foo': + return 0, '-L{} -lfoo -L{} -lbar'.format(p2.as_posix(), p1.as_posix()) + if args[0] == 'bar': + return 0, '-L{} -lbar'.format(p2.as_posix()) + if args[0] == 'internal': + return 0, '-L{} -lpthread -lm -lc -lrt -ldl'.format(p1.as_posix()) + + old_call = PkgConfigDependency._call_pkgbin + old_check = PkgConfigDependency.check_pkgconfig + PkgConfigDependency._call_pkgbin = fake_call_pkgbin + PkgConfigDependency.check_pkgconfig = lambda x: pkgbin + # Test begins + kwargs = {'required': True, 'silent': True} + foo_dep = PkgConfigDependency('foo', env, kwargs) + self.assertEqual(foo_dep.get_link_args(), + [(p1 / 'libfoo.a').as_posix(), (p2 / 'libbar.a').as_posix()]) + bar_dep = PkgConfigDependency('bar', env, kwargs) + self.assertEqual(bar_dep.get_link_args(), [(p2 / 'libbar.a').as_posix()]) + internal_dep = PkgConfigDependency('internal', env, kwargs) + if compiler.get_id() == 'msvc': + self.assertEqual(internal_dep.get_link_args(), []) + else: + link_args = internal_dep.get_link_args() + for link_arg in link_args: + for lib in ('pthread', 'm', 'c', 'dl', 'rt'): + self.assertNotIn('lib{}.a'.format(lib), link_arg, msg=link_args) + # Test ends + PkgConfigDependency._call_pkgbin = old_call + PkgConfigDependency.check_pkgconfig = old_check + # Reset dependency class to ensure that in-process configure doesn't mess up + PkgConfigDependency.pkgbin_cache = {} + PkgConfigDependency.class_pkgbin = None + class BasePlatformTests(unittest.TestCase): def setUp(self): @@ -1025,7 +1113,7 @@ https://github.com/mesonbuild/meson/issues/1355 ''' testdir = os.path.join(self.common_test_dir, '3 static') - env = Environment(testdir, self.builddir, get_fake_options(self.prefix)) + env = get_fake_env(testdir, self.builddir, self.prefix) cc = env.detect_c_compiler(False) static_linker = env.detect_static_linker(cc) if is_windows(): @@ -1312,7 +1400,7 @@ if not is_windows(): langs += [('objc', 'OBJC'), ('objcpp', 'OBJCXX')] testdir = os.path.join(self.unit_test_dir, '5 compiler detection') - env = Environment(testdir, self.builddir, get_fake_options(self.prefix)) + env = get_fake_env(testdir, self.builddir, self.prefix) for lang, evar in langs: # Detect with evar and do sanity checks on that if evar in os.environ: @@ -1414,7 +1502,7 @@ def test_always_prefer_c_compiler_for_asm(self): testdir = os.path.join(self.common_test_dir, '141 c cpp and asm') # Skip if building with MSVC - env = Environment(testdir, self.builddir, get_fake_options(self.prefix)) + env = get_fake_env(testdir, self.builddir, self.prefix) if env.detect_c_compiler(False).get_id() == 'msvc': raise unittest.SkipTest('MSVC can\'t compile assembly') self.init(testdir) @@ -1672,7 +1760,7 @@ self.assertPathExists(os.path.join(testdir, i)) def detect_prebuild_env(self): - env = Environment('', self.builddir, get_fake_options(self.prefix)) + env = get_fake_env('', self.builddir, self.prefix) cc = env.detect_c_compiler(False) stlinker = env.detect_static_linker(cc) if mesonbuild.mesonlib.is_windows(): @@ -1838,7 +1926,7 @@ '--libdir=' + libdir]) # Find foo dependency os.environ['PKG_CONFIG_LIBDIR'] = self.privatedir - env = Environment(testdir, self.builddir, get_fake_options(self.prefix)) + env = get_fake_env(testdir, self.builddir, self.prefix) kwargs = {'required': True, 'silent': True} foo_dep = PkgConfigDependency('libfoo', env, kwargs) # Ensure link_args are properly quoted @@ -2128,7 +2216,7 @@ testdirbase = os.path.join(self.unit_test_dir, '26 guessed linker dependencies') testdirlib = os.path.join(testdirbase, 'lib') extra_args = None - env = Environment(testdirlib, self.builddir, get_fake_options(self.prefix)) + env = get_fake_env(testdirlib, self.builddir, self.prefix) if env.detect_c_compiler(False).get_id() != 'msvc': # static libraries are not linkable with -l with msvc because meson installs them # as .a files which unix_args_to_native will not know as it expects libraries to use @@ -2348,7 +2436,7 @@ with open('docs/markdown/Builtin-options.md') as f: md = f.read() self.assertIsNotNone(md) - env = Environment('.', self.builddir, get_fake_options(self.prefix)) + env = get_fake_env('', '', '') # FIXME: Support other compilers cc = env.detect_c_compiler(False) cpp = env.detect_cpp_compiler(False) @@ -2430,6 +2518,7 @@ and slows down testing. ''' dnf = "[Dd]ependency.*not found" + nopkg = '[Pp]kg-config not found' def setUp(self): super().setUp() @@ -2511,7 +2600,11 @@ if shutil.which('sdl2-config'): raise unittest.SkipTest('sdl2-config found') self.assertMesonRaises("dependency('sdl2', method : 'sdlconfig')", self.dnf) - self.assertMesonRaises("dependency('sdl2', method : 'pkg-config')", self.dnf) + if shutil.which('pkg-config'): + errmsg = self.dnf + else: + errmsg = self.nopkg + self.assertMesonRaises("dependency('sdl2', method : 'pkg-config')", errmsg) def test_gnustep_notfound_dependency(self): # Want to test failure, so skip if available @@ -2572,7 +2665,7 @@ ''' Test that when we can't detect objc or objcpp, we fail gracefully. ''' - env = Environment('', self.builddir, get_fake_options(self.prefix)) + env = get_fake_env('', self.builddir, self.prefix) try: env.detect_objc_compiler(False) env.detect_objcpp_compiler(False) @@ -2647,6 +2740,16 @@ ".*WARNING.*Project targetting.*but.*", meson_version='>= 0.41.0') + def test_vcs_tag_featurenew_build_always_stale(self): + 'https://github.com/mesonbuild/meson/issues/3904' + vcs_tag = '''version_data = configuration_data() + version_data.set('PROJVER', '@VCS_TAG@') + vf = configure_file(output : 'version.h.in', configuration: version_data) + f = vcs_tag(input : vf, output : 'version.h') + ''' + msg = '.*WARNING:.*feature.*build_always_stale.*custom_target.*' + self.assertMesonDoesNotOutput(vcs_tag, msg, meson_version='>=0.43') + class WindowsTests(BasePlatformTests): ''' @@ -2699,7 +2802,7 @@ ExternalLibraryHolder from build files. ''' testdir = os.path.join(self.platform_test_dir, '1 basic') - env = Environment(testdir, self.builddir, get_fake_options(self.prefix)) + env = get_fake_env(testdir, self.builddir, self.prefix) cc = env.detect_c_compiler(False) if cc.id != 'msvc': raise unittest.SkipTest('Not using MSVC') @@ -2712,7 +2815,7 @@ testdir = os.path.join(self.platform_test_dir, '5 resources') # resource compiler depfile generation is not yet implemented for msvc - env = Environment(testdir, self.builddir, get_fake_options(self.prefix)) + env = get_fake_env(testdir, self.builddir, self.prefix) depfile_works = env.detect_c_compiler(False).get_id() != 'msvc' self.init(testdir) @@ -2801,7 +2904,7 @@ ''' testdir = os.path.join(self.common_test_dir, '51 pkgconfig-gen') self.init(testdir) - env = Environment(testdir, self.builddir, get_fake_options(self.prefix)) + env = get_fake_env(testdir, self.builddir, self.prefix) kwargs = {'required': True, 'silent': True} os.environ['PKG_CONFIG_LIBDIR'] = self.privatedir foo_dep = PkgConfigDependency('libfoo', env, kwargs) @@ -3051,7 +3154,7 @@ an ordinary test because it requires passing options to meson. ''' testdir = os.path.join(self.common_test_dir, '1 trivial') - env = Environment(testdir, self.builddir, get_fake_options(self.prefix)) + env = get_fake_env(testdir, self.builddir, self.prefix) cc = env.detect_c_compiler(False) self._test_stds_impl(testdir, cc, 'c') @@ -3061,7 +3164,7 @@ be an ordinary test because it requires passing options to meson. ''' testdir = os.path.join(self.common_test_dir, '2 cpp') - env = Environment(testdir, self.builddir, get_fake_options(self.prefix)) + env = get_fake_env(testdir, self.builddir, self.prefix) cpp = env.detect_cpp_compiler(False) self._test_stds_impl(testdir, cpp, 'cpp') @@ -3281,6 +3384,7 @@ for v in installed.values(): self.assertTrue('prog' in v or 'foo' in v) + @skipIfNoPkgconfig def test_order_of_l_arguments(self): testdir = os.path.join(self.unit_test_dir, '9 -L -l order') os.environ['PKG_CONFIG_PATH'] = testdir @@ -3563,6 +3667,38 @@ self.build() self.run_tests() + def test_deterministic_dep_order(self): + ''' + Test that the dependencies are always listed in a deterministic order. + ''' + testdir = os.path.join(self.common_test_dir, '206 dep order') + self.init(testdir) + with open(os.path.join(self.builddir, 'build.ninja')) as bfile: + for line in bfile: + if 'build myexe:' in line or 'build myexe.exe:' in line: + self.assertIn('liblib1.a liblib2.a', line) + return + raise RuntimeError('Could not find the build rule') + + def test_deterministic_rpath_order(self): + ''' + Test that the rpaths are always listed in a deterministic order. + ''' + if is_cygwin(): + raise unittest.SkipTest('rpath are not used on Cygwin') + testdir = os.path.join(self.unit_test_dir, '35 rpath order') + self.init(testdir) + if is_osx(): + rpathre = re.compile('-rpath,.*/subprojects/sub1.*-rpath,.*/subprojects/sub2') + else: + rpathre = re.compile('-rpath,\$\$ORIGIN/subprojects/sub1:\$\$ORIGIN/subprojects/sub2') + with open(os.path.join(self.builddir, 'build.ninja')) as bfile: + for line in bfile: + if '-rpath' in line: + self.assertRegex(line, rpathre) + return + raise RuntimeError('Could not find the rpath') + @skipIfNoPkgconfig def test_usage_external_library(self): ''' @@ -3573,8 +3709,6 @@ The system library is found with cc.find_library() and pkg-config deps. ''' - if not is_osx(): - raise unittest.SkipTest('workflow currently only works on macOS') oldprefix = self.prefix # Install external library so we can find it testdir = os.path.join(self.unit_test_dir, '33 external, internal library rpath', 'external library') @@ -3597,6 +3731,9 @@ self.build() # test uninstalled self.run_tests() + if not is_osx(): + # Rest of the workflow only works on macOS + return # test running after installation self.install(use_destdir=False) prog = os.path.join(self.installdir, 'bin', 'prog') @@ -3617,6 +3754,42 @@ # Ensure that the otool output does not contain self.installdir self.assertNotRegex(out, self.installdir + '.*dylib ') + def install_subdir_invalid_symlinks(self, testdir, subdir_path): + ''' + Test that installation of broken symlinks works fine. + https://github.com/mesonbuild/meson/issues/3914 + ''' + testdir = os.path.join(self.common_test_dir, testdir) + subdir = os.path.join(testdir, subdir_path) + curdir = os.getcwd() + os.chdir(subdir) + # Can't distribute broken symlinks in the source tree because it breaks + # the creation of zipapps. Create it dynamically and run the test by + # hand. + src = '../../nonexistent.txt' + os.symlink(src, 'invalid-symlink.txt') + try: + self.init(testdir) + self.build() + self.install() + install_path = subdir_path.split(os.path.sep)[-1] + link = os.path.join(self.installdir, 'usr', 'share', install_path, 'invalid-symlink.txt') + self.assertTrue(os.path.islink(link), msg=link) + self.assertEqual(src, os.readlink(link)) + self.assertFalse(os.path.isfile(link), msg=link) + finally: + os.remove(os.path.join(subdir, 'invalid-symlink.txt')) + os.chdir(curdir) + + def test_install_subdir_symlinks(self): + self.install_subdir_invalid_symlinks('66 install subdir', os.path.join('sub', 'sub1')) + + def test_install_subdir_symlinks_with_default_umask(self): + self.install_subdir_invalid_symlinks('201 install_mode', 'sub2') + + def test_install_subdir_symlinks_with_default_umask_and_mode(self): + self.install_subdir_invalid_symlinks('201 install_mode', 'sub1') + class LinuxArmCrossCompileTests(BasePlatformTests): ''' diff -Nru meson-0.47.1/setup.cfg meson-0.47.2/setup.cfg --- meson-0.47.1/setup.cfg 2018-07-02 17:41:43.000000000 +0000 +++ meson-0.47.2/setup.cfg 2018-08-25 08:14:36.000000000 +0000 @@ -1,29 +1,21 @@ [flake8] -ignore = - # E241: multiple spaces after ':' - E241, - # E251: unexpected spaces around keyword / parameter equals - E251, - # E261: at least two spaces before inline comment - E261, - # E265: block comment should start with '# ' - E265, - # E501: line too long - E501, - # E302: expected 2 blank lines, found 1 - E302, - # E305: expected 2 blank lines after class or function definition, found 1 - E305, - # E401: multiple imports on one line - E401, - # E266: too many leading '#' for block comment - E266, - # E402: module level import not at top of file - E402, - # E731: do not assign a lambda expression, use a def (too many false positives) - E731 - # E741: ambiguous variable name 'l' - E741 - # E722: do not use bare except' - E722 +ignore = + E241, + E251, + E261, + E265, + E501, + E302, + E305, + E401, + E266, + E402, + E731 + E741 + E722 max-line-length = 120 + +[egg_info] +tag_build = +tag_date = 0 + diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/170 custom target template substitution/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/170 custom target template substitution/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/170 custom target template substitution/meson.build" 2018-07-09 21:33:27.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/170 custom target template substitution/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -4,12 +4,12 @@ config = configuration_data() -in = configure_file(configuration : config, output : 'x@IN') +config_file = configure_file(configuration : config, output : 'x@IN') # Check that substitution does not find @FOO@ and then misses @INPUT0@. # Check the resulting x@INPUT1@ is not replaced. foo = custom_target('runcheck', - input : [in, 'foo.c.in'], + input : [config_file, 'foo.c.in'], output : 'foo.c', command : [check, '-D@FOO@INPUT0@PUT1@', '@INPUT1@', '@OUTPUT@'] ) diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/176 yield/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/176 yield/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/176 yield/meson.build" 2018-07-09 21:33:31.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/176 yield/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -3,4 +3,5 @@ subproject('sub') assert(get_option('unshared_option') == 'one', 'Unshared option has wrong value in superproject.') -assert(get_option('shared_option') == 'two', 'Unshared option has wrong value in superproject..') +assert(get_option('shared_option') == 'two', 'Shared option has wrong value in superproject..') +assert(get_option('wrongtype_option') == 'three', 'Wrongtype option has wrong value in superproject..') diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/176 yield/meson_options.txt" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/176 yield/meson_options.txt" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/176 yield/meson_options.txt" 2018-02-21 19:11:51.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/176 yield/meson_options.txt" 2018-08-25 08:05:50.000000000 +0000 @@ -1,2 +1,3 @@ option('unshared_option', type : 'string', value : 'one') option('shared_option', type : 'string', value : 'two') +option('wrongtype_option', type : 'string', value : 'three') diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/176 yield/subprojects/sub/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/176 yield/subprojects/sub/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/176 yield/subprojects/sub/meson.build" 2018-02-21 19:11:51.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/176 yield/subprojects/sub/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -2,3 +2,4 @@ assert(get_option('unshared_option') == 'three', 'Unshared option has wrong value in subproject.') assert(get_option('shared_option') == 'two', 'Shared option has wrong value in subproject.') +assert(get_option('wrongtype_option') == true, 'Wrongtype option has wrong value in subproject.') diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/176 yield/subprojects/sub/meson_options.txt" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/176 yield/subprojects/sub/meson_options.txt" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/176 yield/subprojects/sub/meson_options.txt" 2018-02-21 19:11:51.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/176 yield/subprojects/sub/meson_options.txt" 2018-08-25 08:05:50.000000000 +0000 @@ -1,2 +1,3 @@ option('unshared_option', type : 'string', value : 'three', yield : false) option('shared_option', type : 'string', value : 'four', yield : true) +option('wrongtype_option', type : 'boolean', value : true, yield : true) diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/200 check header/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/200 check header/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/200 check header/meson.build" 2018-07-09 21:33:58.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/200 check header/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -33,8 +33,8 @@ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80005 # https://github.com/mesonbuild/meson/issues/1458 if host_system == 'linux' - assert(comp.check_header('linux/if.h', prefix : fallback), - 'Could not find ') + assert(comp.check_header('linux/socket.h', prefix : fallback), + 'Could not find ') if comp.has_header('intrin.h', prefix : fallback) assert(not comp.check_header('intrin.h'), 'intrin.h should not be usable on linux') diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/201 install_mode/installed_files.txt" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/201 install_mode/installed_files.txt" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/201 install_mode/installed_files.txt" 2018-06-02 21:50:11.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/201 install_mode/installed_files.txt" 2018-08-25 08:05:50.000000000 +0000 @@ -5,4 +5,5 @@ usr/libtest/libstat.a usr/share/man/man1/foo.1.gz usr/share/sub1/second.dat +usr/share/sub2/stub usr/subdir/data.dat diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/201 install_mode/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/201 install_mode/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/201 install_mode/meson.build" 2018-07-09 21:33:57.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/201 install_mode/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -11,6 +11,9 @@ install_dir : 'share', install_mode : ['rwxr-x--t', 'root']) +install_subdir('sub2', + install_dir : 'share') + # test install_mode in configure_file conf = configuration_data() conf.set('var', 'mystring') diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 generator in subdir/com/mesonbuild/genprog.py" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 generator in subdir/com/mesonbuild/genprog.py" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 generator in subdir/com/mesonbuild/genprog.py" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 generator in subdir/com/mesonbuild/genprog.py" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 + +import os, sys, argparse + +h_templ = '''#pragma once + +int %s(); +''' + +c_templ = '''#include"%s.h" + +int %s() { + return 0; +} +''' + +parser = argparse.ArgumentParser() +parser.add_argument('--searchdir', required=True) +parser.add_argument('--outdir', required=True) +parser.add_argument('ifiles', nargs='+') + +options = parser.parse_args() + +searchdir = options.searchdir +outdir = options.outdir +ifiles = options.ifiles + +rel_ofiles = [] + +for ifile in ifiles: + if not ifile.startswith(options.searchdir): + sys.exit('Input file %s does not start with search dir %s.' % (ifile, searchdir)) + rel_ofile = ifile[len(searchdir):] + if rel_ofile[0] == '/' or rel_ofile[0] == '\\': + rel_ofile = rel_ofile[1:] + rel_ofiles.append(os.path.splitext(rel_ofile)[0]) + +ofile_bases = [os.path.join(outdir, i) for i in rel_ofiles] + +for i, ifile_name in enumerate(ifiles): + proto_name = open(ifile_name).readline().strip() + h_out = ofile_bases[i] + '.h' + c_out = ofile_bases[i] + '.c' + os.makedirs(os.path.split(ofile_bases[i])[0], exist_ok=True) + open(h_out, 'w').write(h_templ % (proto_name)) + open(c_out, 'w').write(c_templ % (proto_name, proto_name)) diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 generator in subdir/com/mesonbuild/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 generator in subdir/com/mesonbuild/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 generator in subdir/com/mesonbuild/meson.build" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 generator in subdir/com/mesonbuild/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,10 @@ +gprog = find_program('genprog.py') + +gen = generator(gprog, \ + output : ['@BASENAME@.c', '@BASENAME@.h'], + arguments : ['--searchdir=@CURRENT_SOURCE_DIR@', '--outdir=@BUILD_DIR@', '@INPUT@']) + +generated = gen.process('subbie.inp') + +e = executable('testprog', 'testprog.c', generated) +test('testprog', e) diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 generator in subdir/com/mesonbuild/subbie.inp" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 generator in subdir/com/mesonbuild/subbie.inp" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 generator in subdir/com/mesonbuild/subbie.inp" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 generator in subdir/com/mesonbuild/subbie.inp" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1 @@ +subbie diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 generator in subdir/com/mesonbuild/testprog.c" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 generator in subdir/com/mesonbuild/testprog.c" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 generator in subdir/com/mesonbuild/testprog.c" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 generator in subdir/com/mesonbuild/testprog.c" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,5 @@ +#include"subbie.h" + +int main(int argc, char **argv) { + return subbie(); +} diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 generator in subdir/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 generator in subdir/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 generator in subdir/meson.build" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 generator in subdir/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,3 @@ +project('generator in subdir', 'c') + +subdir('com/mesonbuild') diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 static threads/lib1.c" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 static threads/lib1.c" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 static threads/lib1.c" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 static threads/lib1.c" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,13 @@ +#if defined _WIN32 +#include +#else +#include +#endif + +void *f(void) { +#if defined _WIN32 + return CreateThread; +#else + return pthread_create; +#endif +} diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 static threads/lib2.c" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 static threads/lib2.c" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 static threads/lib2.c" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 static threads/lib2.c" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,5 @@ +extern void *f(void); + +void *g(void) { + return f(); +} diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 static threads/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 static threads/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 static threads/meson.build" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 static threads/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,13 @@ +project('threads', 'c') + +thread_dep = dependency('threads') + + +lib1 = static_library('lib1', 'lib1.c', + dependencies : thread_dep) + +lib2 = static_library('lib2', 'lib2.c', + link_with : lib1) + +executable('prog', 'prog.c', + link_with : lib2) diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 static threads/prog.c" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 static threads/prog.c" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/205 static threads/prog.c" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/205 static threads/prog.c" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,6 @@ +extern void *g(void); + +int main(void) { + g(); + return 0; +} diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/206 dep order/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/206 dep order/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/206 dep order/meson.build" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/206 dep order/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,8 @@ +project('myexe', 'c') + +lib1 = static_library('lib1', 'lib1.c') +lib2 = static_library('lib2', 'lib2.c') + +executable('myexe', + 'myexe.c', + link_with: [lib1, lib2]) diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/206 dep order/myexe.c" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/206 dep order/myexe.c" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/206 dep order/myexe.c" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/206 dep order/myexe.c" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,3 @@ +int main(int ac, char** av) { + return 0; +} diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/38 run program/get-version.py" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/38 run program/get-version.py" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/38 run program/get-version.py" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/38 run program/get-version.py" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,3 @@ +#!/usr/bin/env python3 + +print('1.2') diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/38 run program/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/38 run program/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/common/38 run program/meson.build" 2018-07-09 21:31:08.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/common/38 run program/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -1,4 +1,4 @@ -project('run command', 'c') +project('run command', version : run_command('get-version.py', check : true).stdout().strip()) if build_machine.system() == 'windows' c = run_command('cmd', '/c', 'echo', 'hello') diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/d/10 d cpp/libfile.d" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/d/10 d cpp/libfile.d" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/d/10 d cpp/libfile.d" 2018-05-19 15:37:35.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/d/10 d cpp/libfile.d" 2018-08-25 08:05:50.000000000 +0000 @@ -1,5 +1,5 @@ -import std.stdio; +import core.stdc.stdio; extern (C++) void print_hello(int i) { - writefln("Hello. Here is a number printed with D: %d", i); + printf("Hello. Here is a number printed with D: %d\n", i); } diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/frameworks/7 gnome/gdbus/com.example.Sample.xml" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/frameworks/7 gnome/gdbus/com.example.Sample.xml" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/frameworks/7 gnome/gdbus/com.example.Sample.xml" 2016-01-23 18:52:39.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/frameworks/7 gnome/gdbus/com.example.Sample.xml" 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ - - - - - - - - - diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/frameworks/7 gnome/gdbus/data/com.example.Sample.xml" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/frameworks/7 gnome/gdbus/data/com.example.Sample.xml" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/frameworks/7 gnome/gdbus/data/com.example.Sample.xml" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/frameworks/7 gnome/gdbus/data/com.example.Sample.xml" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,10 @@ + + + + + + + + + diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/frameworks/7 gnome/gdbus/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/frameworks/7 gnome/gdbus/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/frameworks/7 gnome/gdbus/meson.build" 2018-06-22 11:50:56.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/frameworks/7 gnome/gdbus/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -1,4 +1,5 @@ -gdbus_src = gnome.gdbus_codegen('generated-gdbus-no-docbook', 'com.example.Sample.xml', +gdbus_src = gnome.gdbus_codegen('generated-gdbus-no-docbook', + 'data/com.example.Sample.xml', interface_prefix : 'com.example.', namespace : 'Sample', annotations : [ @@ -10,7 +11,7 @@ assert(gdbus_src[1].full_path().endswith('.h'), 'expected 1 c header file') gdbus_src = gnome.gdbus_codegen('generated-gdbus', - sources : 'com.example.Sample.xml', + sources : files('data/com.example.Sample.xml'), interface_prefix : 'com.example.', namespace : 'Sample', annotations : [ Binary files /tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/python3/1 basic/gluon/__pycache__/gluonator.cpython-35.pyc and /tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/python3/1 basic/gluon/__pycache__/gluonator.cpython-35.pyc differ Binary files /tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/python3/1 basic/gluon/__pycache__/gluonator.cpython-36.pyc and /tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/python3/1 basic/gluon/__pycache__/gluonator.cpython-36.pyc differ Binary files /tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/python3/1 basic/gluon/__pycache__/__init__.cpython-35.pyc and /tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/python3/1 basic/gluon/__pycache__/__init__.cpython-35.pyc differ Binary files /tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/python3/1 basic/gluon/__pycache__/__init__.cpython-36.pyc and /tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/python3/1 basic/gluon/__pycache__/__init__.cpython-36.pyc differ diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/33 external, internal library rpath/built library/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/33 external, internal library rpath/built library/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/33 external, internal library rpath/built library/meson.build" 2018-06-18 21:29:57.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/33 external, internal library rpath/built library/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -1,12 +1,21 @@ project('built library', 'c') cc = meson.get_compiler('c') + +if host_machine.system() != 'cygwin' + # bar_in_system has undefined symbols, but still must be found + bar_system_dep = cc.find_library('bar_in_system') +endif + foo_system_dep = cc.find_library('foo_in_system') + faa_pkg_dep = dependency('faa_pkg') l = shared_library('bar_built', 'bar.c', install: true, dependencies : [foo_system_dep, faa_pkg_dep]) -e = executable('prog', 'prog.c', link_with: l, install: true) -test('testprog', e) +if host_machine.system() == 'darwin' + e = executable('prog', 'prog.c', link_with: l, install: true) + test('testprog', e) +endif diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/33 external, internal library rpath/external library/bar.c" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/33 external, internal library rpath/external library/bar.c" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/33 external, internal library rpath/external library/bar.c" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/33 external, internal library rpath/external library/bar.c" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,6 @@ +int some_undefined_func (void); + +int bar_system_value (void) +{ + return some_undefined_func (); +} diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/33 external, internal library rpath/external library/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/33 external, internal library rpath/external library/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/33 external, internal library rpath/external library/meson.build" 2018-07-02 17:41:43.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/33 external, internal library rpath/external library/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -1,9 +1,22 @@ -project('system library', 'c') +project('system library', 'c', default_options : ['b_lundef=false']) shared_library('foo_in_system', 'foo.c', install : true) l = shared_library('faa_pkg', 'faa.c', install: true) +if host_machine.system() == 'darwin' + frameworks = ['-framework', 'CoreFoundation', '-framework', 'CoreMedia'] + allow_undef_args = ['-Wl,-undefined,dynamic_lookup'] +else + frameworks = [] + allow_undef_args = [] +endif + pkg = import('pkgconfig') pkg.generate(name: 'faa_pkg', - libraries: [l, '-framework', 'CoreFoundation', '-framework', 'CoreMedia'], + libraries: [l] + frameworks, description: 'FAA, a pkg-config test library') + +# cygwin DLLs can't have undefined symbols +if host_machine.system() != 'cygwin' + shared_library('bar_in_system', 'bar.c', install : true, link_args : allow_undef_args) +endif diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/35 rpath order/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/35 rpath order/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/35 rpath order/meson.build" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/35 rpath order/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,11 @@ +project('myexe', 'c') + +sub1 = subproject('sub1') +sub1_dep = sub1.get_variable('sub1_dep') + +sub2 = subproject('sub2') +sub2_dep = sub2.get_variable('sub2_dep') + +executable('myexe', + 'myexe.c', + dependencies: [sub1_dep, sub2_dep]) diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/35 rpath order/myexe.c" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/35 rpath order/myexe.c" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/35 rpath order/myexe.c" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/35 rpath order/myexe.c" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,3 @@ +int main(void) { + return 0; +} diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/35 rpath order/subprojects/sub1/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/35 rpath order/subprojects/sub1/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/35 rpath order/subprojects/sub1/meson.build" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/35 rpath order/subprojects/sub1/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,5 @@ +project('sub1', 'c') + +sub1_lib = library('sub1', 'lib.c') + +sub1_dep = declare_dependency(link_with : sub1_lib) diff -Nru "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/35 rpath order/subprojects/sub2/meson.build" "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/35 rpath order/subprojects/sub2/meson.build" --- "/tmp/tmpTazQqI/bnx_b8A0hq/meson-0.47.1/test cases/unit/35 rpath order/subprojects/sub2/meson.build" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpTazQqI/nGCE2cuGeB/meson-0.47.2/test cases/unit/35 rpath order/subprojects/sub2/meson.build" 2018-08-25 08:05:50.000000000 +0000 @@ -0,0 +1,5 @@ +project('sub2', 'c') + +sub2_lib = library('sub2', 'lib.c') + +sub2_dep = declare_dependency(link_with : sub2_lib)