blob: ec981a51622c14a55dc3436bd718002e0ef099a5 [file] [log] [blame]
William A. Kennington III97e39472019-04-03 13:22:32 -07001stdplus_headers = include_directories('.')
2
William A. Kennington IIIe0990382019-10-18 02:10:25 -07003fmt_dep = dependency('fmt', required: false)
William A. Kennington IIIe0990382019-10-18 02:10:25 -07004if not fmt_dep.found()
William A. Kennington IIIb5d1c582021-04-16 13:41:39 -07005 fmt_opts = import('cmake').subproject_options()
6 fmt_opts.add_cmake_defines({
7 'CMAKE_POSITION_INDEPENDENT_CODE': 'ON',
8 'MASTER_PROJECT': 'OFF',
9 })
William A. Kennington IIIe0990382019-10-18 02:10:25 -070010 fmt_proj = import('cmake').subproject(
11 'fmt',
William A. Kennington IIIb5d1c582021-04-16 13:41:39 -070012 options: fmt_opts,
William A. Kennington IIIe0990382019-10-18 02:10:25 -070013 required: false)
14 assert(fmt_proj.found(), 'fmtlib is required')
15 fmt_dep = fmt_proj.dependency('fmt')
16endif
17
18# span-lite might not have a pkg-config. It is header only so just make
19# sure we can access the needed symbols from the header.
William A. Kennington IIIf65edcb2021-01-30 15:45:35 -080020span_dep = dependency('span-lite', required: false)
William A. Kennington IIIe0990382019-10-18 02:10:25 -070021has_span = meson.get_compiler('cpp').has_header_symbol(
William A. Kennington IIIf65edcb2021-01-30 15:45:35 -080022 'nonstd/span.hpp',
William A. Kennington IIIaf0e0e82021-05-15 00:57:23 -070023 'nonstd::span<int>',
William A. Kennington IIIe0990382019-10-18 02:10:25 -070024 dependencies: span_dep,
25 required: false)
26if not has_span
William A. Kennington IIIf65edcb2021-01-30 15:45:35 -080027 span_lite_proj = import('cmake').subproject(
28 'span-lite',
William A. Kennington IIIe0990382019-10-18 02:10:25 -070029 required: false)
William A. Kennington IIIf65edcb2021-01-30 15:45:35 -080030 if span_lite_proj.found()
31 span_dep = span_lite_proj.dependency('span-lite')
32 has_span = true
William A. Kennington IIIe0990382019-10-18 02:10:25 -070033 endif
34endif
35
36stdplus_deps = [
37 fmt_dep,
38 span_dep,
39]
40
William A. Kennington III45754242021-04-28 12:48:31 -070041stdplus_srcs = [
42 'stdplus/exception.cpp',
43 'stdplus/signal.cpp',
44]
45
William A. Kennington III5a528022021-04-28 12:52:43 -070046has_dl = false
47if not get_option('dl').disabled()
48 dl_dep = meson.get_compiler('cpp').find_library('dl', required: false)
49 has_dl = meson.get_compiler('cpp').links('
50 #include <dlfcn.h>
51 int main() { dlopen("", 0); }
52 ', dependencies: dl_dep)
53endif
54if has_dl
55 stdplus_deps += [
56 dl_dep,
57 ]
58
59 stdplus_srcs += [
60 'stdplus/dl.cpp',
61 ]
62
63 install_headers(
64 'stdplus/dl.hpp',
65 subdir: 'stdplus')
66elif get_option('dl').enabled()
67 error('libdl support required')
68endif
69
William A. Kennington IIIeac9d472020-08-03 13:57:14 -070070has_fd = false
71if not get_option('fd').disabled() and has_span
72 has_fd = true
73
William A. Kennington III45754242021-04-28 12:48:31 -070074 stdplus_srcs += [
William A. Kennington IIIeac9d472020-08-03 13:57:14 -070075 'stdplus/fd/create.cpp',
76 'stdplus/fd/dupable.cpp',
77 'stdplus/fd/impl.cpp',
78 'stdplus/fd/managed.cpp',
79 'stdplus/fd/ops.cpp',
80 ]
81
82 install_headers(
83 'stdplus/fd/create.hpp',
84 'stdplus/fd/dupable.hpp',
85 'stdplus/fd/gmock.hpp',
86 'stdplus/fd/impl.hpp',
87 'stdplus/fd/intf.hpp',
88 'stdplus/fd/managed.hpp',
89 'stdplus/fd/ops.hpp',
90 subdir: 'stdplus/fd')
91elif get_option('fd').enabled()
92 error('File descriptor support required')
93endif
94
William A. Kennington III5c20da22021-06-18 16:44:55 -070095io_uring_dep = dependency('liburing', required: get_option('io_uring'))
96has_io_uring = false
97if not get_option('io_uring').disabled() and has_fd and io_uring_dep.found()
98 has_io_uring = true
99
100 stdplus_deps += [
101 io_uring_dep,
102 ]
103
104 stdplus_srcs += [
105 'stdplus/io_uring.cpp',
106 ]
107
108 install_headers(
109 'stdplus/io_uring.hpp',
110 subdir: 'stdplus')
111elif get_option('io_uring').enabled()
112 error('File descriptor support required')
113endif
114
William A. Kennington III97e39472019-04-03 13:22:32 -0700115stdplus_lib = library(
William A. Kennington III15982f62019-01-31 14:43:41 -0800116 'stdplus',
William A. Kennington III45754242021-04-28 12:48:31 -0700117 stdplus_srcs,
William A. Kennington III97e39472019-04-03 13:22:32 -0700118 include_directories: stdplus_headers,
William A. Kennington III15982f62019-01-31 14:43:41 -0800119 implicit_include_directories: false,
William A. Kennington IIIe0990382019-10-18 02:10:25 -0700120 dependencies: stdplus_deps,
William A. Kennington III1937ef62019-03-28 03:24:57 -0700121 version: meson.project_version(),
William A. Kennington III15982f62019-01-31 14:43:41 -0800122 install: true)
123
William A. Kennington III3acf92b2021-04-16 13:33:50 -0700124stdplus_dep = declare_dependency(
William A. Kennington IIIe0990382019-10-18 02:10:25 -0700125 dependencies: stdplus_deps,
William A. Kennington III97e39472019-04-03 13:22:32 -0700126 include_directories: stdplus_headers,
127 link_with: stdplus_lib)
128
William A. Kennington IIIb01c5572020-06-03 19:40:49 -0700129stdplus_reqs = []
130foreach dep : stdplus_deps
131 if dep.type_name() == 'pkgconfig'
William A. Kennington III285fbcb2021-01-24 18:16:20 -0800132 stdplus_reqs += dep
William A. Kennington IIIb01c5572020-06-03 19:40:49 -0700133 endif
134endforeach
135
William A. Kennington III15982f62019-01-31 14:43:41 -0800136import('pkgconfig').generate(
William A. Kennington III285fbcb2021-01-24 18:16:20 -0800137 stdplus_lib,
William A. Kennington III15982f62019-01-31 14:43:41 -0800138 description: 'C++ helper utilities',
139 version: meson.project_version(),
William A. Kennington IIIb01c5572020-06-03 19:40:49 -0700140 requires: stdplus_reqs)
William A. Kennington III15982f62019-01-31 14:43:41 -0800141
142install_headers(
William A. Kennington III458aeae2021-06-14 15:07:16 -0700143 'stdplus/cancel.hpp',
William A. Kennington III2f210732020-08-02 16:12:36 -0700144 'stdplus/exception.hpp',
William A. Kennington IIIeac9d472020-08-03 13:57:14 -0700145 'stdplus/flags.hpp',
William A. Kennington IIIe0990382019-10-18 02:10:25 -0700146 'stdplus/raw.hpp',
William A. Kennington III15982f62019-01-31 14:43:41 -0800147 'stdplus/signal.hpp',
William A. Kennington IIIda284aa2020-06-03 19:41:10 -0700148 'stdplus/types.hpp',
William A. Kennington III15982f62019-01-31 14:43:41 -0800149 subdir: 'stdplus')
William A. Kennington III7a5e2322018-11-02 17:28:35 -0700150
151install_headers(
William A. Kennington IIIe847ef82018-11-02 17:29:15 -0700152 'stdplus/handle/copyable.hpp',
William A. Kennington III7a5e2322018-11-02 17:28:35 -0700153 'stdplus/handle/managed.hpp',
154 subdir: 'stdplus/handle')
William A. Kennington IIIbff0b0f2018-11-16 19:56:10 -0800155
156install_headers(
157 'stdplus/util/cexec.hpp',
William A. Kennington III4ef36e72019-06-27 12:48:59 -0700158 'stdplus/util/string.hpp',
William A. Kennington IIIbff0b0f2018-11-16 19:56:10 -0800159 subdir: 'stdplus/util')