blob: 2634c458293990ed81cffd4802dd73c4c7243626 [file] [log] [blame]
William A. Kennington IIIa2d67e22020-02-19 12:17:39 -08001gtest = dependency('gtest', main: true, disabler: true, required: false)
2gmock = dependency('gmock', disabler: true, required: false)
3if not gtest.found() or not gmock.found()
William A. Kennington IIIb5d1c582021-04-16 13:41:39 -07004 gtest_opts = import('cmake').subproject_options()
5 gtest_opts.add_cmake_defines({'CMAKE_CXX_FLAGS': '-Wno-pedantic'})
William A. Kennington III83af3fa2021-01-31 15:22:54 -08006 gtest_proj = import('cmake').subproject(
7 'googletest',
William A. Kennington IIIb5d1c582021-04-16 13:41:39 -07008 options: gtest_opts,
William A. Kennington III83af3fa2021-01-31 15:22:54 -08009 required: false)
William A. Kennington IIIa2d67e22020-02-19 12:17:39 -080010 if gtest_proj.found()
11 gtest = declare_dependency(
12 dependencies: [
13 dependency('threads'),
14 gtest_proj.dependency('gtest'),
15 gtest_proj.dependency('gtest_main'),
16 ])
17 gmock = gtest_proj.dependency('gmock')
18 else
19 assert(not build_tests.enabled(), 'Googletest is required')
20 endif
21endif
William A. Kennington III15982f62019-01-31 14:43:41 -080022
William A. Kennington III245495e2020-02-13 13:07:30 -080023gtests = [
William A. Kennington III458aeae2021-06-14 15:07:16 -070024 'cancel',
William A. Kennington III9a70f4e2021-05-01 17:16:57 -070025 'exception',
William A. Kennington IIIe847ef82018-11-02 17:29:15 -070026 'handle/copyable',
William A. Kennington III7a5e2322018-11-02 17:28:35 -070027 'handle/managed',
William A. Kennington IIIbff0b0f2018-11-16 19:56:10 -080028 'util/cexec',
William A. Kennington III4ef36e72019-06-27 12:48:59 -070029 'util/string',
William A. Kennington III15982f62019-01-31 14:43:41 -080030]
31
William A. Kennington III5a528022021-04-28 12:52:43 -070032if has_dl
33 gtests += [
34 'dl',
35 ]
36elif build_tests.enabled()
37 error('Not testing libdl feature')
38else
39 warning('Not testing libdl feature')
40endif
41
William A. Kennington IIIeac9d472020-08-03 13:57:14 -070042if has_fd
43 gtests += [
44 'fd/dupable',
45 'fd/managed',
46 'fd/intf',
47 'fd/impl',
William A. Kennington III891e6a32022-05-17 16:35:03 -070048 'fd/mmap',
William A. Kennington IIIeac9d472020-08-03 13:57:14 -070049 'fd/mock',
50 'fd/ops',
51 ]
William A. Kennington III45754242021-04-28 12:48:31 -070052elif build_tests.enabled()
53 error('Not testing file descriptor feature')
William A. Kennington IIIeac9d472020-08-03 13:57:14 -070054else
55 warning('Not testing file descriptor feature')
56endif
57
William A. Kennington III5c20da22021-06-18 16:44:55 -070058if has_io_uring
59 gtests += [
60 'io_uring',
61 ]
62elif build_tests.enabled()
63 error('Not testing io_uring feature')
64else
65 warning('Not testing io_uring feature')
66endif
67
William A. Kennington III83af3fa2021-01-31 15:22:54 -080068if gtest.found() and gmock.found()
69 foreach t : gtests
70 test(t, executable(t.underscorify(), t + '.cpp',
71 build_by_default: false,
72 implicit_include_directories: false,
William A. Kennington III3acf92b2021-04-16 13:33:50 -070073 dependencies: [stdplus_dep, gtest, gmock]))
William A. Kennington III83af3fa2021-01-31 15:22:54 -080074 endforeach
75endif
William A. Kennington III245495e2020-02-13 13:07:30 -080076
William A. Kennington III01db6622021-01-31 15:24:13 -080077# Switch to `catch2-with-main.pc` when 2.x supports it
78catch2 = dependency('catch2-with-main', required: false)
79if not catch2.found()
80 catch2 = dependency('catch2', required: false)
81 if catch2.found()
82 catch2_main = meson.get_compiler('cpp').find_library(
83 'Catch2WithMain', required: false)
84 if catch2_main.found()
85 catch2 = declare_dependency(
86 dependencies: [
87 catch2,
88 catch2_main,
89 ])
90 else
91 catch2 = declare_dependency(
92 link_with: static_library(
93 'catch2', 'catch2_main.cpp',
94 implicit_include_directories: false,
95 build_by_default: false,
96 dependencies: catch2),
97 dependencies: catch2)
98 endif
99 endif
100endif
101if not catch2.found()
William A. Kennington IIIb5d1c582021-04-16 13:41:39 -0700102 catch2_opts = import('cmake').subproject_options()
103 catch2_opts.add_cmake_defines({
104 'BUILD_TESTING': 'OFF',
105 'CMAKE_CXX_FLAGS': '-Wno-non-virtual-dtor',
106 })
William A. Kennington III245495e2020-02-13 13:07:30 -0800107 catch2_proj = import('cmake').subproject(
108 'Catch2',
William A. Kennington IIIb5d1c582021-04-16 13:41:39 -0700109 options: catch2_opts,
William A. Kennington III245495e2020-02-13 13:07:30 -0800110 required: false)
111 if catch2_proj.found()
William A. Kennington III01db6622021-01-31 15:24:13 -0800112 catch2 = declare_dependency(
113 dependencies: [
114 catch2_proj.dependency('Catch2'),
115 catch2_proj.dependency('Catch2WithMain'),
116 ])
William A. Kennington III245495e2020-02-13 13:07:30 -0800117 else
118 assert(not build_tests.enabled(), 'Catch2 is required')
119 endif
120endif
121
122catch2_tests = [
William A. Kennington III770c5562020-02-13 13:07:42 -0800123 'signal',
William A. Kennington IIIe0990382019-10-18 02:10:25 -0700124 'raw',
William A. Kennington III245495e2020-02-13 13:07:30 -0800125]
126
William A. Kennington III01db6622021-01-31 15:24:13 -0800127if catch2.found()
William A. Kennington III245495e2020-02-13 13:07:30 -0800128 foreach t : catch2_tests
129 test(t, executable(t.underscorify(), t + '.cpp',
William A. Kennington III31422352020-02-19 13:21:56 -0800130 build_by_default: false,
William A. Kennington III245495e2020-02-13 13:07:30 -0800131 implicit_include_directories: false,
William A. Kennington III3acf92b2021-04-16 13:33:50 -0700132 dependencies: [stdplus_dep, catch2]))
William A. Kennington III245495e2020-02-13 13:07:30 -0800133 endforeach
134endif