From a44221db06792ce127529b4e8c79c15e33d973a5 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Fri, 15 Dec 2017 16:16:49 -0800 Subject: tests: Add freebsd to get define test. --- test cases/common/140 get define/meson.build | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test cases/common/140 get define/meson.build b/test cases/common/140 get define/meson.build index e23b7de..e854742 100644 --- a/test cases/common/140 get define/meson.build +++ b/test cases/common/140 get define/meson.build @@ -19,6 +19,13 @@ foreach lang : ['c', 'cpp'] elif host_system == 'haiku' d = cc.get_define('__HAIKU__') assert(d == '1', '__HAIKU__ value is @0@ instead of 1'.format(d)) + elif host_system == 'freebsd' + # the __FreeBSD__ define will be equal to the major version of the release + # (ex, in FreeBSD 11.x, __FreeBSD__ == 11). To make the test robust when + # being run on various versions of FreeBSD, just test that the define is + # set. + d = cc.get_define('__FreeBSD__') + assert(d != '', '__FreeBSD__ value is unset') else error('Please report a bug and help us improve support for this platform') endif -- cgit v1.1 From 4d8552ef553324dece38bf5299c98f2da7027cd9 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Fri, 15 Dec 2017 16:18:11 -0800 Subject: docs: Add freebsd to the reference table --- docs/markdown/Reference-tables.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/markdown/Reference-tables.md b/docs/markdown/Reference-tables.md index 8e048dc..783d9b6 100644 --- a/docs/markdown/Reference-tables.md +++ b/docs/markdown/Reference-tables.md @@ -57,6 +57,7 @@ These are provided by the `.system()` method call. | windows | Any version of Windows | | cygwin | The Cygwin environment for Windows | | haiku | | +| freebsd | FreeBSD and it's derivatives | Any string not listed above is not guaranteed to remain stable in future releases. -- cgit v1.1 From b72be62929ec761b7311805349865d121b3099a3 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Mon, 18 Dec 2017 16:24:14 -0800 Subject: tests: Add Dragonfly BSD which uses __DragonFly__ --- test cases/common/140 get define/meson.build | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test cases/common/140 get define/meson.build b/test cases/common/140 get define/meson.build index e854742..a7c1bf6 100644 --- a/test cases/common/140 get define/meson.build +++ b/test cases/common/140 get define/meson.build @@ -26,6 +26,9 @@ foreach lang : ['c', 'cpp'] # set. d = cc.get_define('__FreeBSD__') assert(d != '', '__FreeBSD__ value is unset') + elif host_system == 'dragonfly' + d = cc.get_define('__DragonFly__') + assert(d == '1', '__DragonFly__ value is @0@ instead of 1'.format(d)) else error('Please report a bug and help us improve support for this platform') endif -- cgit v1.1 From 1723a91af36e181f97e79f6a17540fcd9b348141 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Mon, 18 Dec 2017 16:25:40 -0800 Subject: docs: Add dragonfly BSD to OS reference table --- docs/markdown/Reference-tables.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/markdown/Reference-tables.md b/docs/markdown/Reference-tables.md index 783d9b6..47b9b7e 100644 --- a/docs/markdown/Reference-tables.md +++ b/docs/markdown/Reference-tables.md @@ -58,6 +58,7 @@ These are provided by the `.system()` method call. | cygwin | The Cygwin environment for Windows | | haiku | | | freebsd | FreeBSD and it's derivatives | +| dragonfly | DragonFly BSD | Any string not listed above is not guaranteed to remain stable in future releases. -- cgit v1.1 From 087421f9223e28b44242854185b0082cea0f2bb5 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 19 Dec 2017 11:35:34 -0800 Subject: tests: Add define tests for netbsd --- test cases/common/140 get define/meson.build | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test cases/common/140 get define/meson.build b/test cases/common/140 get define/meson.build index a7c1bf6..58cec31 100644 --- a/test cases/common/140 get define/meson.build +++ b/test cases/common/140 get define/meson.build @@ -29,6 +29,9 @@ foreach lang : ['c', 'cpp'] elif host_system == 'dragonfly' d = cc.get_define('__DragonFly__') assert(d == '1', '__DragonFly__ value is @0@ instead of 1'.format(d)) + elif host_system == 'netbsd' + d = cc.get_define('__NetBSD__') + assert(d == '1', '__NetBSD__ value is @0@ instead of 1'.format(d)) else error('Please report a bug and help us improve support for this platform') endif -- cgit v1.1 From 3b8e65911c3ec8dd03cc1efd1250efa5aaf98f5e Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 19 Dec 2017 11:39:30 -0800 Subject: docs: Add netbsd to the reference table --- docs/markdown/Reference-tables.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/markdown/Reference-tables.md b/docs/markdown/Reference-tables.md index 47b9b7e..ee3b8c2 100644 --- a/docs/markdown/Reference-tables.md +++ b/docs/markdown/Reference-tables.md @@ -59,6 +59,7 @@ These are provided by the `.system()` method call. | haiku | | | freebsd | FreeBSD and it's derivatives | | dragonfly | DragonFly BSD | +| netbsd | | Any string not listed above is not guaranteed to remain stable in future releases. -- cgit v1.1 From 10a560a411728f747c8394599ef95c9c8caa2086 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 19 Dec 2017 15:42:01 -0800 Subject: compilers: fix unittest "16 prebuilt shared" on dragonfly bsd --- mesonbuild/compilers/compilers.py | 5 ++++- mesonbuild/mesonlib.py | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index b14074b..52dbb56 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -855,7 +855,10 @@ class Compiler: paths = padding else: paths = paths + ':' + padding - args = ['-Wl,-rpath,' + paths] + args = [] + if mesonlib.is_dragonflybsd(): + args.append('-Wl,-z,origin') + args.append('-Wl,-rpath,' + paths) if get_compiler_is_linuxlike(self): # Rpaths to use while linking must be absolute. These are not # written to the binary. Needed only with GNU ld: diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index 3b32996..8793dff 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -285,6 +285,9 @@ def is_cygwin(): def is_debianlike(): return os.path.isfile('/etc/debian_version') +def is_dragonflybsd(): + return platform.system().lower() == 'dragonfly' + def for_windows(is_cross, env): """ Host machine is windows? -- cgit v1.1 From 4620bdd8b4ca6a5619ff2e963f661a8784b89a05 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 19 Dec 2017 15:52:21 -0800 Subject: tests: fix rpath_uses_ORIGIN on dragonflybsd Which always seems to prepend /usr/lib/gcc50 (or whatever version) to the rpath, and $ORIGIN after that. --- mesonbuild/compilers/compilers.py | 5 +++++ run_unittests.py | 22 ++++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index 52dbb56..2602d14 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -857,6 +857,11 @@ class Compiler: paths = paths + ':' + padding args = [] if mesonlib.is_dragonflybsd(): + # This argument instructs the compiler to record the value of + # ORIGIN in the .dynamic section of the elf. On Linux this is done + # by default, but is not on dragonfly for some reason. Without this + # $ORIGIN in the runtime path will be undefined and any binaries + # linked against local libraries will fail to resolve them. args.append('-Wl,-z,origin') args.append('-Wl,-rpath,' + paths) if get_compiler_is_linuxlike(self): diff --git a/run_unittests.py b/run_unittests.py index 08ad632..f61544f 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -34,8 +34,10 @@ import mesonbuild.environment import mesonbuild.mesonlib import mesonbuild.coredata from mesonbuild.interpreter import ObjectHolder -from mesonbuild.mesonlib import is_linux, is_windows, is_osx, is_cygwin, windows_proof_rmtree -from mesonbuild.mesonlib import python_command, meson_command, version_compare +from mesonbuild.mesonlib import ( + is_linux, is_windows, is_osx, is_cygwin, is_dragonflybsd, + windows_proof_rmtree, python_command, meson_command, version_compare, +) from mesonbuild.environment import Environment, detect_ninja from mesonbuild.mesonlib import MesonException, EnvironmentException from mesonbuild.dependencies import PkgConfigDependency, ExternalProgram @@ -1386,12 +1388,24 @@ int main(int argc, char **argv) { for each in ('prog', 'subdir/liblib1.so', ): rpath = get_rpath(os.path.join(self.builddir, each)) self.assertTrue(rpath) - for path in rpath.split(':'): + if is_dragonflybsd(): + # DragonflyBSD will prepend /usr/lib/gccVERSION to the rpath, + # so ignore that. + self.assertTrue(rpath.startswith('/usr/lib/gcc')) + rpaths = rpath.split(':')[1:] + else: + rpaths = rpath.split(':') + for path in rpaths: self.assertTrue(path.startswith('$ORIGIN'), msg=(each, path)) # These two don't link to anything else, so they do not need an rpath entry. for each in ('subdir/subdir2/liblib2.so', 'subdir/subdir3/liblib3.so'): rpath = get_rpath(os.path.join(self.builddir, each)) - self.assertTrue(rpath is None) + if is_dragonflybsd(): + # The rpath should be equal to /usr/lib/gccVERSION + self.assertTrue(rpath.startswith('/usr/lib/gcc')) + self.assertEqual(len(rpath.split(':')), 1) + else: + self.assertTrue(rpath is None) def test_dash_d_dedup(self): testdir = os.path.join(self.unit_test_dir, '10 d dedup') -- cgit v1.1 From ae4bd83493378dfb4f7635f36d4edd1fbeb22a66 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 19 Dec 2017 19:45:56 -0800 Subject: tests: Fix 135 generated assembly on DragonFly BSD Which uses a modern version of GCC and Clang, which supports gas. Tested with x86_64, but I assume that x86 and arm have the same problem. --- test cases/common/135 generated assembly/square-arm.S.in | 4 ++-- test cases/common/135 generated assembly/square-x86.S.in | 4 ++-- test cases/common/135 generated assembly/square-x86_64.S.in | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test cases/common/135 generated assembly/square-arm.S.in b/test cases/common/135 generated assembly/square-arm.S.in index 168c980..f9ba2b9 100644 --- a/test cases/common/135 generated assembly/square-arm.S.in +++ b/test cases/common/135 generated assembly/square-arm.S.in @@ -2,8 +2,8 @@ .text .globl SYMBOL_NAME(square_unsigned) -/* Only supported on Linux with GAS */ -# ifdef __linux__ +/* Only supported with GAS */ +# if defined(__linux__) || defined(__DragonFly__) .type square_unsigned,%function #endif diff --git a/test cases/common/135 generated assembly/square-x86.S.in b/test cases/common/135 generated assembly/square-x86.S.in index 19dd9f5..42a0325 100644 --- a/test cases/common/135 generated assembly/square-x86.S.in +++ b/test cases/common/135 generated assembly/square-x86.S.in @@ -21,8 +21,8 @@ END .text .globl SYMBOL_NAME(square_unsigned) -/* Only supported on Linux with GAS */ -# ifdef __linux__ +/* Only supported with GAS */ +# if defined(__linux__) || defined(__DragonFLy__) .type square_unsigned,@function # endif diff --git a/test cases/common/135 generated assembly/square-x86_64.S.in b/test cases/common/135 generated assembly/square-x86_64.S.in index 0834f16..26574ba 100644 --- a/test cases/common/135 generated assembly/square-x86_64.S.in +++ b/test cases/common/135 generated assembly/square-x86_64.S.in @@ -18,8 +18,8 @@ END .text .globl SYMBOL_NAME(square_unsigned) -/* Only supported on Linux with GAS */ -# ifdef __linux__ +/* Only supported with GAS */ +# if defined(__linux__) || defined(__DragonFly__) .type square_unsigned,@function # endif -- cgit v1.1 From 97d2a9d84c8d42af9e80de10f8a619c0f11f9d2f Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 19 Dec 2017 20:05:24 -0800 Subject: tests: skip objc nsstring test if gnustep is not installed --- test cases/objc/2 nsstring/meson.build | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test cases/objc/2 nsstring/meson.build b/test cases/objc/2 nsstring/meson.build index a877d74..7f2483f 100644 --- a/test cases/objc/2 nsstring/meson.build +++ b/test cases/objc/2 nsstring/meson.build @@ -5,7 +5,10 @@ if host_machine.system() == 'darwin' elif host_machine.system() == 'cygwin' error('MESON_SKIP_TEST GNUstep is not packaged for Cygwin.') else - dep = dependency('gnustep') + dep = dependency('gnustep', required : false) + if not dep.found() + error('MESON_SKIP_TEST: GNUstep is not installed') + endif if host_machine.system() == 'linux' and meson.get_compiler('objc').get_id() == 'clang' error('MESON_SKIP_TEST: GNUstep is broken on Linux with Clang') endif -- cgit v1.1 From 87742fd9f016873fcd9d91ef8bc4c3b1be925224 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 19 Dec 2017 20:57:05 -0800 Subject: run_project_tests: correctly search for objcpp compiler Instead of looking for an objc compiler. Fixes objc++ tests on DragonFlyBSD (which has an objc but not an objc++ compiler) Really though, the objc and objc++ tests need to be untangled so that the objc tests can run even if an objc++ compiler is unavilable. --- run_project_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run_project_tests.py b/run_project_tests.py index 0bf5f31..810f00e 100755 --- a/run_project_tests.py +++ b/run_project_tests.py @@ -453,7 +453,7 @@ def have_objc_compiler(): return False try: objc_comp.sanity_check(env.get_scratch_dir(), env) - objcpp_comp = env.detect_objc_compiler(False) + objcpp_comp = env.detect_objcpp_compiler(False) except: return False if not objcpp_comp: -- cgit v1.1 From 0ec7dd5ac53b0a6955ecce65c011a5d06631bd94 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 19 Dec 2017 21:10:52 -0800 Subject: tests: Split objc and objc++ tests This allows platforms that can compile one or the other (but not both) to run the tests that they can. --- run_project_tests.py | 15 ++++++++++++--- test cases/objc/3 objc args/meson.build | 4 ++++ test cases/objc/3 objc args/prog.m | 11 +++++++++++ test cases/objc/3 objc++/meson.build | 4 ---- test cases/objc/3 objc++/prog.mm | 9 --------- test cases/objc/4 objc args/meson.build | 4 ---- test cases/objc/4 objc args/prog.m | 11 ----------- test cases/objc/5 objc++ args/meson.build | 4 ---- test cases/objc/5 objc++ args/prog.mm | 16 ---------------- test cases/objcpp/1 simple/meson.build | 4 ++++ test cases/objcpp/1 simple/prog.mm | 9 +++++++++ test cases/objcpp/2 objc++ args/meson.build | 4 ++++ test cases/objcpp/2 objc++ args/prog.mm | 16 ++++++++++++++++ 13 files changed, 60 insertions(+), 51 deletions(-) create mode 100644 test cases/objc/3 objc args/meson.build create mode 100644 test cases/objc/3 objc args/prog.m delete mode 100644 test cases/objc/3 objc++/meson.build delete mode 100644 test cases/objc/3 objc++/prog.mm delete mode 100644 test cases/objc/4 objc args/meson.build delete mode 100644 test cases/objc/4 objc args/prog.m delete mode 100644 test cases/objc/5 objc++ args/meson.build delete mode 100644 test cases/objc/5 objc++ args/prog.mm create mode 100644 test cases/objcpp/1 simple/meson.build create mode 100644 test cases/objcpp/1 simple/prog.mm create mode 100644 test cases/objcpp/2 objc++ args/meson.build create mode 100644 test cases/objcpp/2 objc++ args/prog.mm diff --git a/run_project_tests.py b/run_project_tests.py index 810f00e..68d2de5 100755 --- a/run_project_tests.py +++ b/run_project_tests.py @@ -447,20 +447,28 @@ def have_objc_compiler(): env = environment.Environment(None, build_dir, None, get_fake_options('/'), []) try: objc_comp = env.detect_objc_compiler(False) - except: + except mesonlib.MesonException: return False if not objc_comp: return False try: objc_comp.sanity_check(env.get_scratch_dir(), env) + except mesonlib.MesonException: + return False + return True + +def have_objcpp_compiler(): + with AutoDeletedDir(tempfile.mkdtemp(prefix='b ', dir='.')) as build_dir: + env = environment.Environment(None, build_dir, None, get_fake_options('/'), []) + try: objcpp_comp = env.detect_objcpp_compiler(False) - except: + except mesonlib.MesonException: return False if not objcpp_comp: return False try: objcpp_comp.sanity_check(env.get_scratch_dir(), env) - except: + except mesonlib.MesonException: return False return True @@ -487,6 +495,7 @@ def detect_tests_to_run(): ('rust', 'rust', backend is not Backend.ninja or not shutil.which('rustc')), ('d', 'd', backend is not Backend.ninja or not have_d_compiler()), ('objective c', 'objc', backend not in (Backend.ninja, Backend.xcode) or mesonlib.is_windows() or not have_objc_compiler()), + ('objective c++', 'objcpp', backend not in (Backend.ninja, Backend.xcode) or mesonlib.is_windows() or not have_objcpp_compiler()), ('fortran', 'fortran', backend is not Backend.ninja or not shutil.which('gfortran')), ('swift', 'swift', backend not in (Backend.ninja, Backend.xcode) or not shutil.which('swiftc')), ('python3', 'python3', backend is not Backend.ninja), diff --git a/test cases/objc/3 objc args/meson.build b/test cases/objc/3 objc args/meson.build new file mode 100644 index 0000000..8887d96 --- /dev/null +++ b/test cases/objc/3 objc args/meson.build @@ -0,0 +1,4 @@ +project('objective c args', 'objc') + +exe = executable('prog', 'prog.m', objc_args : ['-DMESON_TEST']) +test('objective c args', exe) diff --git a/test cases/objc/3 objc args/prog.m b/test cases/objc/3 objc args/prog.m new file mode 100644 index 0000000..bfd686a --- /dev/null +++ b/test cases/objc/3 objc args/prog.m @@ -0,0 +1,11 @@ +#import + +int main(int argc, char **argv) +{ +#ifdef MESON_TEST + int x = 3; +#endif + + printf("x = %d\n", x); + return 0; +} diff --git a/test cases/objc/3 objc++/meson.build b/test cases/objc/3 objc++/meson.build deleted file mode 100644 index 7d91884..0000000 --- a/test cases/objc/3 objc++/meson.build +++ /dev/null @@ -1,4 +0,0 @@ -project('Objective C++', 'objcpp') - -exe = executable('objcppprog', 'prog.mm') -test('objcpp', exe) diff --git a/test cases/objc/3 objc++/prog.mm b/test cases/objc/3 objc++/prog.mm deleted file mode 100644 index 927e810..0000000 --- a/test cases/objc/3 objc++/prog.mm +++ /dev/null @@ -1,9 +0,0 @@ -#import - -class MyClass { -}; - -int main(int argc, char **argv) { - return 0; -} - diff --git a/test cases/objc/4 objc args/meson.build b/test cases/objc/4 objc args/meson.build deleted file mode 100644 index 8887d96..0000000 --- a/test cases/objc/4 objc args/meson.build +++ /dev/null @@ -1,4 +0,0 @@ -project('objective c args', 'objc') - -exe = executable('prog', 'prog.m', objc_args : ['-DMESON_TEST']) -test('objective c args', exe) diff --git a/test cases/objc/4 objc args/prog.m b/test cases/objc/4 objc args/prog.m deleted file mode 100644 index bfd686a..0000000 --- a/test cases/objc/4 objc args/prog.m +++ /dev/null @@ -1,11 +0,0 @@ -#import - -int main(int argc, char **argv) -{ -#ifdef MESON_TEST - int x = 3; -#endif - - printf("x = %d\n", x); - return 0; -} diff --git a/test cases/objc/5 objc++ args/meson.build b/test cases/objc/5 objc++ args/meson.build deleted file mode 100644 index e0e34b0..0000000 --- a/test cases/objc/5 objc++ args/meson.build +++ /dev/null @@ -1,4 +0,0 @@ -project('objective c++ args', 'objcpp') - -exe = executable('prog', 'prog.mm', objcpp_args : ['-DMESON_OBJCPP_TEST']) -test('objective c++ args', exe) diff --git a/test cases/objc/5 objc++ args/prog.mm b/test cases/objc/5 objc++ args/prog.mm deleted file mode 100644 index 3decaf2..0000000 --- a/test cases/objc/5 objc++ args/prog.mm +++ /dev/null @@ -1,16 +0,0 @@ -#import - -class TestClass -{ -}; - -int main(int argc, char **argv) -{ -#ifdef MESON_OBJCPP_TEST -int x = 1; -#endif - - printf("x = %x\n", x); - - return 0; -} diff --git a/test cases/objcpp/1 simple/meson.build b/test cases/objcpp/1 simple/meson.build new file mode 100644 index 0000000..7d91884 --- /dev/null +++ b/test cases/objcpp/1 simple/meson.build @@ -0,0 +1,4 @@ +project('Objective C++', 'objcpp') + +exe = executable('objcppprog', 'prog.mm') +test('objcpp', exe) diff --git a/test cases/objcpp/1 simple/prog.mm b/test cases/objcpp/1 simple/prog.mm new file mode 100644 index 0000000..927e810 --- /dev/null +++ b/test cases/objcpp/1 simple/prog.mm @@ -0,0 +1,9 @@ +#import + +class MyClass { +}; + +int main(int argc, char **argv) { + return 0; +} + diff --git a/test cases/objcpp/2 objc++ args/meson.build b/test cases/objcpp/2 objc++ args/meson.build new file mode 100644 index 0000000..e0e34b0 --- /dev/null +++ b/test cases/objcpp/2 objc++ args/meson.build @@ -0,0 +1,4 @@ +project('objective c++ args', 'objcpp') + +exe = executable('prog', 'prog.mm', objcpp_args : ['-DMESON_OBJCPP_TEST']) +test('objective c++ args', exe) diff --git a/test cases/objcpp/2 objc++ args/prog.mm b/test cases/objcpp/2 objc++ args/prog.mm new file mode 100644 index 0000000..3decaf2 --- /dev/null +++ b/test cases/objcpp/2 objc++ args/prog.mm @@ -0,0 +1,16 @@ +#import + +class TestClass +{ +}; + +int main(int argc, char **argv) +{ +#ifdef MESON_OBJCPP_TEST +int x = 1; +#endif + + printf("x = %x\n", x); + + return 0; +} -- cgit v1.1 From cece4472f67b8c4f512d1aeec5ae6e78e6916bb6 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Wed, 20 Dec 2017 15:21:58 -0800 Subject: tests: skip gtest test if gtest not installed --- test cases/frameworks/2 gtest/meson.build | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test cases/frameworks/2 gtest/meson.build b/test cases/frameworks/2 gtest/meson.build index 419f451..e5418e9 100644 --- a/test cases/frameworks/2 gtest/meson.build +++ b/test cases/frameworks/2 gtest/meson.build @@ -1,6 +1,9 @@ project('gtest', 'cpp') -gtest = dependency('gtest', main : true) +gtest = dependency('gtest', main : true, required : false) +if not gtest.found() + error('MESON_SKIP_TEST: gtest not installed.') +endif gtest_nomain = dependency('gtest', main : false) e = executable('testprog', 'test.cc', dependencies : gtest) -- cgit v1.1 From f5458edff6f4c898371a721c4909f13ee05cbcdf Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Wed, 20 Dec 2017 15:22:14 -0800 Subject: tests: skip gmock test if gtest or gmock not installed --- test cases/frameworks/3 gmock/meson.build | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/test cases/frameworks/3 gmock/meson.build b/test cases/frameworks/3 gmock/meson.build index 341f9d7..516547f 100644 --- a/test cases/frameworks/3 gmock/meson.build +++ b/test cases/frameworks/3 gmock/meson.build @@ -3,8 +3,14 @@ project('gmock test', 'cpp') # Using gmock without gtest is a pain so just # don't support that then. -gtest = dependency('gtest', main : true) -gmock = dependency('gmock') +gtest = dependency('gtest', main : true, required : false) +if not gtest.found() + error('MESON_SKIP_TEST: gtest not installed.') +endif +gmock = dependency('gmock', required : false) +if not gmock.found() + error('MESON_SKIP_TEST: gmock not installed.') +endif e = executable('gmocktest', 'gmocktest.cc', dependencies : [gtest, gmock]) test('gmock test', e) -- cgit v1.1 From c61da9f4a99dfb85012640eb5f66e9b2fedd1573 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Wed, 20 Dec 2017 16:20:33 -0800 Subject: tests: skip vulkan test if vulkan not found --- test cases/frameworks/18 vulkan/meson.build | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test cases/frameworks/18 vulkan/meson.build b/test cases/frameworks/18 vulkan/meson.build index 54f1d47..e98854e 100644 --- a/test cases/frameworks/18 vulkan/meson.build +++ b/test cases/frameworks/18 vulkan/meson.build @@ -1,6 +1,9 @@ project('vulkan test', 'c') -vulkan_dep = dependency('vulkan') +vulkan_dep = dependency('vulkan', required : false) +if not vulkan_dep.found() + error('MESON_SKIP_TEST: vulkan not found.') +endif e = executable('vulkanprog', 'vulkanprog.c', dependencies : vulkan_dep) -- cgit v1.1 From ddb244f2ba5dc4dbdf0f685f05d505a6f0bffa40 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Wed, 20 Dec 2017 16:21:46 -0800 Subject: tests: skip mpi test if mpi not installed --- test cases/frameworks/17 mpi/meson.build | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test cases/frameworks/17 mpi/meson.build b/test cases/frameworks/17 mpi/meson.build index 17acd71..01ad61d 100644 --- a/test cases/frameworks/17 mpi/meson.build +++ b/test cases/frameworks/17 mpi/meson.build @@ -6,7 +6,10 @@ if build_machine.system() == 'windows' and cc.get_id() != 'msvc' error('MESON_SKIP_TEST: MPI not available on Windows without MSVC.') endif -mpic = dependency('mpi', language : 'c') +mpic = dependency('mpi', language : 'c', required : false) +if not mpic.found() + error('MESON_SKIP_TEST: MPI not found, skipping.') +endif exec = executable('exec', 'main.c', dependencies : [mpic]) -- cgit v1.1 From 19a274c0512e0807fe8d7ac12becaf3a904f0dcd Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Wed, 20 Dec 2017 16:34:45 -0800 Subject: tests: don't try to build llvm test if dep is unfound dragonfly BSD doesn't ship dynamic modules for LLVM so static linking is required. --- test cases/frameworks/15 llvm/meson.build | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/test cases/frameworks/15 llvm/meson.build b/test cases/frameworks/15 llvm/meson.build index 5211006..549adce 100644 --- a/test cases/frameworks/15 llvm/meson.build +++ b/test cases/frameworks/15 llvm/meson.build @@ -20,17 +20,19 @@ foreach static : [true, false] 'llvm', modules : ['bitwriter', 'asmprinter', 'executionengine', 'target', 'mcjit', 'nativecodegen'], - required : true, + required : false, static : static, ) - name = static ? 'static' : 'dynamic' - executable( - 'sum-@0@'.format(name), - 'sum.c', - dependencies : [ - llvm_dep, dep_tinfo, - dependency('zlib'), - meson.get_compiler('c').find_library('dl', required : false), - ] - ) + if llvm_dep.found() + name = static ? 'static' : 'dynamic' + executable( + 'sum-@0@'.format(name), + 'sum.c', + dependencies : [ + llvm_dep, dep_tinfo, + dependency('zlib'), + meson.get_compiler('c').find_library('dl', required : false), + ] + ) + endif endforeach -- cgit v1.1 From 3a0f8ab0cf56d4036251be3f8d593b3f93c07c47 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Thu, 21 Dec 2017 09:01:10 -0800 Subject: dependencies/dev: remove unused imports flake8 complains about them, and I prefer to have a clean error log in vim. --- mesonbuild/dependencies/dev.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py index 91414d5..e039bd6 100644 --- a/mesonbuild/dependencies/dev.py +++ b/mesonbuild/dependencies/dev.py @@ -17,11 +17,10 @@ import os import re -import shutil from .. import mlog from .. import mesonlib -from ..mesonlib import version_compare, Popen_safe, stringlistify, extract_as_list +from ..mesonlib import version_compare, stringlistify, extract_as_list from .base import ( DependencyException, ExternalDependency, PkgConfigDependency, strip_system_libdirs, ConfigToolDependency, -- cgit v1.1 From 448ba5b6f300dcaae018e7bb03017f488a0a92a3 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Thu, 21 Dec 2017 09:40:49 -0800 Subject: LLVM: work around bug in dragonfly bsd llvm-config for shared libs Of course there are OS specific bugs for llvm-config as well, so work around those too. --- mesonbuild/dependencies/dev.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py index e039bd6..2be9be4 100644 --- a/mesonbuild/dependencies/dev.py +++ b/mesonbuild/dependencies/dev.py @@ -173,6 +173,16 @@ class LLVMDependency(ConfigToolDependency): def _set_new_link_args(self): """How to set linker args for LLVM versions >= 3.9""" + if (mesonlib.is_dragonflybsd() and not self.static and + version_compare(self.version, '>= 4.0')): + # llvm-config on DragonFly BSD for versions 4.0, 5.0, and 6.0 have + # an error when generating arguments for shared mode linking, even + # though libLLVM.so is installed, because for some reason the tool + # expects to find a .so for each static library. This works around + # that. + self.link_args = self.get_config_value(['--ldflags'], 'link_args') + self.link_args.append('-lLLVM') + return link_args = ['--link-static', '--system-libs'] if self.static else ['--link-shared'] self.link_args = self.get_config_value( ['--libs', '--ldflags'] + link_args + list(self.required_modules), -- cgit v1.1 From 4cea88c2bb9be96e9cd099828cdd6ff755d6d57a Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Thu, 21 Dec 2017 11:44:24 -0800 Subject: tests: use GAS style assembly for FreeBSD as well --- test cases/common/135 generated assembly/square-arm.S.in | 2 +- test cases/common/135 generated assembly/square-x86.S.in | 2 +- test cases/common/135 generated assembly/square-x86_64.S.in | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test cases/common/135 generated assembly/square-arm.S.in b/test cases/common/135 generated assembly/square-arm.S.in index f9ba2b9..82e3ad8 100644 --- a/test cases/common/135 generated assembly/square-arm.S.in +++ b/test cases/common/135 generated assembly/square-arm.S.in @@ -3,7 +3,7 @@ .text .globl SYMBOL_NAME(square_unsigned) /* Only supported with GAS */ -# if defined(__linux__) || defined(__DragonFly__) +# if defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) .type square_unsigned,%function #endif diff --git a/test cases/common/135 generated assembly/square-x86.S.in b/test cases/common/135 generated assembly/square-x86.S.in index 42a0325..bca251a 100644 --- a/test cases/common/135 generated assembly/square-x86.S.in +++ b/test cases/common/135 generated assembly/square-x86.S.in @@ -22,7 +22,7 @@ END .text .globl SYMBOL_NAME(square_unsigned) /* Only supported with GAS */ -# if defined(__linux__) || defined(__DragonFLy__) +# if defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) .type square_unsigned,@function # endif diff --git a/test cases/common/135 generated assembly/square-x86_64.S.in b/test cases/common/135 generated assembly/square-x86_64.S.in index 26574ba..09fa635 100644 --- a/test cases/common/135 generated assembly/square-x86_64.S.in +++ b/test cases/common/135 generated assembly/square-x86_64.S.in @@ -19,7 +19,7 @@ END .text .globl SYMBOL_NAME(square_unsigned) /* Only supported with GAS */ -# if defined(__linux__) || defined(__DragonFly__) +# if defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) .type square_unsigned,@function # endif -- cgit v1.1 From 660dee1e10b5293c38d372b7a8ddfce49cc14936 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Thu, 21 Dec 2017 13:33:57 -0800 Subject: LLVM: use DragonFly BSD workaround on FreeBSD as well --- mesonbuild/dependencies/dev.py | 14 +++++++------- mesonbuild/mesonlib.py | 3 +++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py index 2be9be4..4a163ea 100644 --- a/mesonbuild/dependencies/dev.py +++ b/mesonbuild/dependencies/dev.py @@ -173,13 +173,13 @@ class LLVMDependency(ConfigToolDependency): def _set_new_link_args(self): """How to set linker args for LLVM versions >= 3.9""" - if (mesonlib.is_dragonflybsd() and not self.static and - version_compare(self.version, '>= 4.0')): - # llvm-config on DragonFly BSD for versions 4.0, 5.0, and 6.0 have - # an error when generating arguments for shared mode linking, even - # though libLLVM.so is installed, because for some reason the tool - # expects to find a .so for each static library. This works around - # that. + if ((mesonlib.is_dragonflybsd() or mesonlib.is_freebsd()) and not + self.static and version_compare(self.version, '>= 4.0')): + # llvm-config on DragonFly BSD and FreeBSD for versions 4.0, 5.0, + # and 6.0 have an error when generating arguments for shared mode + # linking, even though libLLVM.so is installed, because for some + # reason the tool expects to find a .so for each static library. + # This works around that. self.link_args = self.get_config_value(['--ldflags'], 'link_args') self.link_args.append('-lLLVM') return diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index 8793dff..b7d2992 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -288,6 +288,9 @@ def is_debianlike(): def is_dragonflybsd(): return platform.system().lower() == 'dragonfly' +def is_freebsd(): + return platform.system().lower() == 'freebsd' + def for_windows(is_cross, env): """ Host machine is windows? -- cgit v1.1 From a9210c57e1bbd95716a46760dad3198d067b5cb0 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Thu, 21 Dec 2017 16:30:52 -0800 Subject: LLVM: work around FreeBSD specific static linking problems Because FreeBSD's llvm-config adds -l/usr/lib/libexecinfo.so when asked for system-libs, which is bogus. We'll remove the leading -l from any argument that also ends with .so. --- mesonbuild/dependencies/dev.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py index 4a163ea..25316df 100644 --- a/mesonbuild/dependencies/dev.py +++ b/mesonbuild/dependencies/dev.py @@ -170,6 +170,24 @@ class LLVMDependency(ConfigToolDependency): else: self._set_old_link_args() self.link_args = strip_system_libdirs(environment, self.link_args) + self.link_args = self.__fix_bogus_link_args(self.link_args) + + @staticmethod + def __fix_bogus_link_args(args): + """This function attempts to fix bogus link arguments that llvm-config + generates. + + Currently it works around the following: + - FreeBSD: when statically linking -l/usr/lib/libexecinfo.so will + be generated, strip the -l in cases like this. + """ + new_args = [] + for arg in args: + if arg.startswith('-l') and arg.endswith('.so'): + new_args.append(arg.lstrip('-l')) + else: + new_args.append(arg) + return new_args def _set_new_link_args(self): """How to set linker args for LLVM versions >= 3.9""" -- cgit v1.1 From 997b66d3ed011fbe4694017057503f8c459bf62e Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Fri, 22 Dec 2017 18:14:52 -0800 Subject: tests: fix "135 generated assembly" test on NetBSD Which has GCC and uses GAS. --- test cases/common/135 generated assembly/square-arm.S.in | 2 +- test cases/common/135 generated assembly/square-x86.S.in | 2 +- test cases/common/135 generated assembly/square-x86_64.S.in | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test cases/common/135 generated assembly/square-arm.S.in b/test cases/common/135 generated assembly/square-arm.S.in index 82e3ad8..d2fb7ac 100644 --- a/test cases/common/135 generated assembly/square-arm.S.in +++ b/test cases/common/135 generated assembly/square-arm.S.in @@ -3,7 +3,7 @@ .text .globl SYMBOL_NAME(square_unsigned) /* Only supported with GAS */ -# if defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) +# if defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) .type square_unsigned,%function #endif diff --git a/test cases/common/135 generated assembly/square-x86.S.in b/test cases/common/135 generated assembly/square-x86.S.in index bca251a..ee77b81 100644 --- a/test cases/common/135 generated assembly/square-x86.S.in +++ b/test cases/common/135 generated assembly/square-x86.S.in @@ -22,7 +22,7 @@ END .text .globl SYMBOL_NAME(square_unsigned) /* Only supported with GAS */ -# if defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) +# if defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) .type square_unsigned,@function # endif diff --git a/test cases/common/135 generated assembly/square-x86_64.S.in b/test cases/common/135 generated assembly/square-x86_64.S.in index 09fa635..856af13 100644 --- a/test cases/common/135 generated assembly/square-x86_64.S.in +++ b/test cases/common/135 generated assembly/square-x86_64.S.in @@ -19,7 +19,7 @@ END .text .globl SYMBOL_NAME(square_unsigned) /* Only supported with GAS */ -# if defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) +# if defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) .type square_unsigned,@function # endif -- cgit v1.1 From 62fc6e7412ec340b230e604437eb67861553bb91 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Fri, 22 Dec 2017 18:25:07 -0800 Subject: tests: fix "140 get define" on NetBSD NetBSD's zlib is older (1.2.3), and doesn't have ZLIB_VER_MAJOR. --- test cases/common/140 get define/meson.build | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/test cases/common/140 get define/meson.build b/test cases/common/140 get define/meson.build index 58cec31..fd87177 100644 --- a/test cases/common/140 get define/meson.build +++ b/test cases/common/140 get define/meson.build @@ -41,8 +41,16 @@ foreach lang : ['c', 'cpp'] # found in the compiler's default search path, GCC inserts an extra comment # between the delimiter and the define which causes a parsing error. # https://github.com/mesonbuild/meson/issues/1726 - ver = cc.get_define('ZLIB_VER_MAJOR', prefix : '#include ') - assert(ver == '1', 'ZLIB_VER_MAJOR value is "@0@" instead of "1"'.format(ver)) + if host_machine.system() == 'netbsd' + # NetBSD's zlib doesn't is version 1.2.3 and doesn't have a + # ZLIB_VER_MAJOR, but it does have a ZLIB_VERSION (which is a string), so + # check the first non-quote character of that. + ver = cc.get_define('ZLIB_VERSION', prefix : '#include ')[1] + assert(ver == '1', 'ZLIB_VERSION (major) value is "@0@" instead of "1"'.format(ver)) + else + ver = cc.get_define('ZLIB_VER_MAJOR', prefix : '#include ') + assert(ver == '1', 'ZLIB_VER_MAJOR value is "@0@" instead of "1"'.format(ver)) + endif endif # Check that an undefined value is empty. -- cgit v1.1