blob: 5fa47148b699ffdd10a51f494cc71300f74fe031 [file] [log] [blame]
William A. Kennington IIIe0990382019-10-18 02:10:25 -07001fmt_dep = dependency('fmt', required: false)
William A. Kennington IIIe0990382019-10-18 02:10:25 -07002if not fmt_dep.found()
Patrick Williams6d592582025-02-01 08:37:30 -05003 fmt_opts = import('cmake').subproject_options()
4 fmt_opts.add_cmake_defines(
5 {'CMAKE_POSITION_INDEPENDENT_CODE': 'ON', 'MASTER_PROJECT': 'OFF'},
6 )
7 fmt_proj = import('cmake').subproject(
8 'fmt',
9 options: fmt_opts,
10 required: false,
11 )
12 assert(fmt_proj.found(), 'fmtlib is required')
13 fmt_dep = fmt_proj.dependency('fmt')
William A. Kennington IIIe0990382019-10-18 02:10:25 -070014endif
15
William A. Kennington III08d84432022-09-21 10:57:58 -070016# Function2 might not have a pkg-config. It is header only so just make
17# sure we can access the needed symbols from the header.
18function2_dep = dependency('function2', required: false)
19has_function2 = meson.get_compiler('cpp').has_header_symbol(
20 'function2/function2.hpp',
21 'fu2::unique_function',
22 dependencies: function2_dep,
Patrick Williams6d592582025-02-01 08:37:30 -050023 required: false,
William A. Kennington III08d84432022-09-21 10:57:58 -070024)
25if not has_function2
26 function2_opts = import('cmake').subproject_options()
27 function2_opts.add_cmake_defines({'BUILD_TESTING': 'OFF'})
28 function2_proj = import('cmake').subproject(
29 'function2',
30 options: function2_opts,
Patrick Williams6d592582025-02-01 08:37:30 -050031 required: false,
William A. Kennington III08d84432022-09-21 10:57:58 -070032 )
33 assert(function2_proj.found(), 'function2 is required')
34 if function2_proj.found()
35 function2_dep = function2_proj.dependency('function2')
36 endif
37endif
38
Patrick Williams6d592582025-02-01 08:37:30 -050039stdplus_deps = [fmt_dep, function2_dep]
William A. Kennington IIIe0990382019-10-18 02:10:25 -070040
William A. Kennington III45754242021-04-28 12:48:31 -070041stdplus_srcs = [
Patrick Williams6d592582025-02-01 08:37:30 -050042 'cancel.cpp',
43 'debug/lifetime.cpp',
44 'exception.cpp',
45 'flags.cpp',
46 'function_view.cpp',
47 'handle/copyable.cpp',
48 'handle/managed.cpp',
49 'hash.cpp',
50 'hash/array.cpp',
51 'hash/tuple.cpp',
52 'net/addr/ether.cpp',
53 'net/addr/ip.cpp',
54 'net/addr/sock.cpp',
55 'net/addr/subnet.cpp',
56 'numeric/endian.cpp',
57 'numeric/str.cpp',
58 'pinned.cpp',
59 'print.cpp',
60 'raw.cpp',
61 'signal.cpp',
62 'str/buf.cpp',
63 'str/cat.cpp',
64 'str/cexpr.cpp',
65 'str/conv.cpp',
66 'str/maps.cpp',
67 'util/cexec.cpp',
68 'variant.cpp',
69 'zstring.cpp',
70 'zstring_view.cpp',
William A. Kennington III45754242021-04-28 12:48:31 -070071]
72
William A. Kennington III7613a5e2022-07-13 16:25:00 -070073if has_fd
Patrick Williams6d592582025-02-01 08:37:30 -050074 stdplus_srcs += [
75 'fd/atomic.cpp',
76 'fd/create.cpp',
77 'fd/dupable.cpp',
78 'fd/fmt.cpp',
79 'fd/impl.cpp',
80 'fd/line.cpp',
81 'fd/managed.cpp',
82 'fd/mmap.cpp',
83 'fd/ops.cpp',
84 ]
William A. Kennington IIIeac9d472020-08-03 13:57:14 -070085endif
86
William A. Kennington III97e39472019-04-03 13:22:32 -070087stdplus_lib = library(
Patrick Williams6d592582025-02-01 08:37:30 -050088 'stdplus',
89 stdplus_srcs,
90 include_directories: stdplus_headers,
91 implicit_include_directories: false,
92 dependencies: stdplus_deps,
93 version: meson.project_version(),
94 build_by_default: not meson.is_subproject(),
95 install: true,
96)
William A. Kennington III15982f62019-01-31 14:43:41 -080097
William A. Kennington III3acf92b2021-04-16 13:33:50 -070098stdplus_dep = declare_dependency(
Patrick Williams6d592582025-02-01 08:37:30 -050099 dependencies: stdplus_deps,
100 include_directories: stdplus_headers,
101 link_with: stdplus_lib,
102)
William A. Kennington III97e39472019-04-03 13:22:32 -0700103
William A. Kennington IIIb01c5572020-06-03 19:40:49 -0700104stdplus_reqs = []
105foreach dep : stdplus_deps
Patrick Williams6d592582025-02-01 08:37:30 -0500106 if dep.type_name() == 'pkgconfig'
107 stdplus_reqs += dep
108 endif
William A. Kennington IIIb01c5572020-06-03 19:40:49 -0700109endforeach
110
William A. Kennington III15982f62019-01-31 14:43:41 -0800111import('pkgconfig').generate(
Patrick Williams6d592582025-02-01 08:37:30 -0500112 stdplus_lib,
William A. Kennington IIId7acddd2022-07-13 16:41:11 -0700113 description: 'C++ helper utilities',
114 version: meson.project_version(),
Patrick Williams6d592582025-02-01 08:37:30 -0500115 requires: stdplus_reqs,
116)
117
118if has_dl
119 stdplus_dl_deps = [stdplus_dep, dl_dep]
120
121 stdplus_dl_pre = declare_dependency(
122 include_directories: stdplus_dl_headers,
123 dependencies: stdplus_dl_deps,
124 )
125
126 stdplus_dl_lib = library(
127 'stdplus-dl',
128 'dl.cpp',
129 dependencies: stdplus_dl_pre,
130 implicit_include_directories: false,
131 version: meson.project_version(),
132 build_by_default: not meson.is_subproject(),
133 install: true,
134 )
135
136 stdplus_dl_dep = declare_dependency(
137 dependencies: stdplus_dl_pre,
138 link_with: stdplus_dl_lib,
139 )
140
141 stdplus_dl_reqs = []
142 foreach dep : stdplus_dl_deps
143 if dep.type_name() == 'pkgconfig'
144 stdplus_dl_reqs += dep
145 endif
146 endforeach
147
148 import('pkgconfig').generate(
149 stdplus_dl_lib,
150 description: 'C++ helper utilities',
151 version: meson.project_version(),
152 requires: stdplus_dl_reqs,
153 )
William A. Kennington IIId7acddd2022-07-13 16:41:11 -0700154endif
155
156if has_fd
Patrick Williams6d592582025-02-01 08:37:30 -0500157 stdplus_fd_dep = stdplus_dep
William A. Kennington IIId7acddd2022-07-13 16:41:11 -0700158
Patrick Williams6d592582025-02-01 08:37:30 -0500159 import('pkgconfig').generate(
160 stdplus_lib,
161 name: 'stdplus-fd',
162 description: 'C++ helper utilities',
163 version: meson.project_version(),
164 requires: stdplus_reqs,
165 )
William A. Kennington IIId7acddd2022-07-13 16:41:11 -0700166endif
167
168if has_io_uring
Patrick Williams6d592582025-02-01 08:37:30 -0500169 stdplus_io_uring_deps = [stdplus_dep, stdplus_fd_dep, io_uring_dep]
William A. Kennington IIIee53ad32022-07-14 16:14:31 -0700170
Patrick Williams6d592582025-02-01 08:37:30 -0500171 stdplus_io_uring_pre = declare_dependency(
172 include_directories: stdplus_io_uring_headers,
173 dependencies: stdplus_io_uring_deps,
174 )
William A. Kennington IIIee53ad32022-07-14 16:14:31 -0700175
Patrick Williams6d592582025-02-01 08:37:30 -0500176 stdplus_io_uring_lib = library(
177 'stdplus-io_uring',
178 'io_uring.cpp',
179 dependencies: stdplus_io_uring_pre,
180 implicit_include_directories: false,
181 version: meson.project_version(),
182 build_by_default: not meson.is_subproject(),
183 install: true,
184 )
William A. Kennington IIIee53ad32022-07-14 16:14:31 -0700185
Patrick Williams6d592582025-02-01 08:37:30 -0500186 stdplus_io_uring_dep = declare_dependency(
187 dependencies: stdplus_io_uring_pre,
188 link_with: stdplus_io_uring_lib,
189 )
William A. Kennington IIIee53ad32022-07-14 16:14:31 -0700190
Patrick Williams6d592582025-02-01 08:37:30 -0500191 stdplus_io_uring_reqs = []
192 foreach dep : stdplus_io_uring_deps
193 if dep.type_name() == 'pkgconfig'
194 stdplus_io_uring_reqs += dep
195 endif
196 endforeach
William A. Kennington IIId7acddd2022-07-13 16:41:11 -0700197
Patrick Williams6d592582025-02-01 08:37:30 -0500198 import('pkgconfig').generate(
199 stdplus_io_uring_lib,
200 description: 'C++ helper utilities',
201 version: meson.project_version(),
202 requires: stdplus_io_uring_reqs,
203 )
William A. Kennington IIId7acddd2022-07-13 16:41:11 -0700204endif
William A. Kennington III953de362022-07-13 17:32:55 -0700205
206if has_gtest
Patrick Williams6d592582025-02-01 08:37:30 -0500207 stdplus_gtest_deps = [fmt_dep, gtest_dep]
William A. Kennington III953de362022-07-13 17:32:55 -0700208
Patrick Williams6d592582025-02-01 08:37:30 -0500209 stdplus_gtest_pre = declare_dependency(
210 include_directories: stdplus_gtest_headers,
211 dependencies: stdplus_gtest_deps,
212 )
William A. Kennington III953de362022-07-13 17:32:55 -0700213
Patrick Williams6d592582025-02-01 08:37:30 -0500214 stdplus_gtest_lib = library(
215 'stdplus-gtest',
216 'gtest/tmp.cpp',
217 dependencies: stdplus_gtest_pre,
218 implicit_include_directories: false,
219 version: meson.project_version(),
220 build_by_default: not meson.is_subproject(),
221 install: true,
222 )
William A. Kennington III953de362022-07-13 17:32:55 -0700223
Patrick Williams6d592582025-02-01 08:37:30 -0500224 stdplus_gtest_dep = declare_dependency(
225 dependencies: stdplus_gtest_pre,
226 link_with: stdplus_gtest_lib,
227 )
William A. Kennington III953de362022-07-13 17:32:55 -0700228
Patrick Williams6d592582025-02-01 08:37:30 -0500229 stdplus_gtest_reqs = []
230 foreach dep : stdplus_gtest_deps
231 if dep.type_name() == 'pkgconfig'
232 stdplus_gtest_reqs += dep
233 endif
234 endforeach
William A. Kennington III953de362022-07-13 17:32:55 -0700235
Patrick Williams6d592582025-02-01 08:37:30 -0500236 import('pkgconfig').generate(
237 stdplus_gtest_lib,
238 description: 'C++ helper utilities',
239 version: meson.project_version(),
240 requires: stdplus_gtest_reqs,
241 )
William A. Kennington III2030ea52022-07-19 17:06:39 -0700242
Patrick Williams6d592582025-02-01 08:37:30 -0500243 install_data(
244 'run_with_tmp',
245 install_mode: 'rwxr-xr-x',
246 install_dir: get_option('bindir'),
247 )
William A. Kennington III2030ea52022-07-19 17:06:39 -0700248
Patrick Williams6d592582025-02-01 08:37:30 -0500249 meson.override_find_program('run_with_tmp', files('run_with_tmp'))
William A. Kennington III953de362022-07-13 17:32:55 -0700250endif
William A. Kennington III2030ea52022-07-19 17:06:39 -0700251
252run_with_tmp = find_program('run_with_tmp', native: true)