blob: dca95ced86a8b1ea7c989cd584ab4729ef62e3e2 [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()
5 fmt_proj = import('cmake').subproject(
6 'fmt',
7 cmake_options: [
8 '-DCMAKE_POSITION_INDEPENDENT_CODE=ON',
9 '-DMASTER_PROJECT=OFF'
10 ],
11 required: false)
12 assert(fmt_proj.found(), 'fmtlib is required')
13 fmt_dep = fmt_proj.dependency('fmt')
14endif
15
16# span-lite might not have a pkg-config. It is header only so just make
17# sure we can access the needed symbols from the header.
William A. Kennington IIIf65edcb2021-01-30 15:45:35 -080018span_dep = dependency('span-lite', required: false)
William A. Kennington IIIe0990382019-10-18 02:10:25 -070019has_span = meson.get_compiler('cpp').has_header_symbol(
William A. Kennington IIIf65edcb2021-01-30 15:45:35 -080020 'nonstd/span.hpp',
21 'nonstd::dynamic_extent',
William A. Kennington IIIe0990382019-10-18 02:10:25 -070022 dependencies: span_dep,
23 required: false)
24if not has_span
William A. Kennington IIIf65edcb2021-01-30 15:45:35 -080025 span_lite_proj = import('cmake').subproject(
26 'span-lite',
William A. Kennington IIIe0990382019-10-18 02:10:25 -070027 required: false)
William A. Kennington IIIf65edcb2021-01-30 15:45:35 -080028 if span_lite_proj.found()
29 span_dep = span_lite_proj.dependency('span-lite')
30 has_span = true
William A. Kennington IIIe0990382019-10-18 02:10:25 -070031 endif
32endif
33
34stdplus_deps = [
35 fmt_dep,
36 span_dep,
37]
38
William A. Kennington IIIeac9d472020-08-03 13:57:14 -070039has_fd = false
40if not get_option('fd').disabled() and has_span
41 has_fd = true
42
43 fd_srcs = [
44 'stdplus/fd/create.cpp',
45 'stdplus/fd/dupable.cpp',
46 'stdplus/fd/impl.cpp',
47 'stdplus/fd/managed.cpp',
48 'stdplus/fd/ops.cpp',
49 ]
50
51 install_headers(
52 'stdplus/fd/create.hpp',
53 'stdplus/fd/dupable.hpp',
54 'stdplus/fd/gmock.hpp',
55 'stdplus/fd/impl.hpp',
56 'stdplus/fd/intf.hpp',
57 'stdplus/fd/managed.hpp',
58 'stdplus/fd/ops.hpp',
59 subdir: 'stdplus/fd')
60elif get_option('fd').enabled()
61 error('File descriptor support required')
62endif
63
William A. Kennington III97e39472019-04-03 13:22:32 -070064stdplus_lib = library(
William A. Kennington III15982f62019-01-31 14:43:41 -080065 'stdplus',
William A. Kennington III2f210732020-08-02 16:12:36 -070066 'stdplus/exception.cpp',
67 'stdplus/signal.cpp',
William A. Kennington IIIeac9d472020-08-03 13:57:14 -070068 fd_srcs,
William A. Kennington III97e39472019-04-03 13:22:32 -070069 include_directories: stdplus_headers,
William A. Kennington III15982f62019-01-31 14:43:41 -080070 implicit_include_directories: false,
William A. Kennington IIIe0990382019-10-18 02:10:25 -070071 dependencies: stdplus_deps,
William A. Kennington III1937ef62019-03-28 03:24:57 -070072 version: meson.project_version(),
William A. Kennington III15982f62019-01-31 14:43:41 -080073 install: true)
74
William A. Kennington III97e39472019-04-03 13:22:32 -070075stdplus = declare_dependency(
William A. Kennington IIIe0990382019-10-18 02:10:25 -070076 dependencies: stdplus_deps,
William A. Kennington III97e39472019-04-03 13:22:32 -070077 include_directories: stdplus_headers,
78 link_with: stdplus_lib)
79
William A. Kennington IIIb01c5572020-06-03 19:40:49 -070080stdplus_reqs = []
81foreach dep : stdplus_deps
82 if dep.type_name() == 'pkgconfig'
William A. Kennington III285fbcb2021-01-24 18:16:20 -080083 stdplus_reqs += dep
William A. Kennington IIIb01c5572020-06-03 19:40:49 -070084 endif
85endforeach
86
William A. Kennington III15982f62019-01-31 14:43:41 -080087import('pkgconfig').generate(
William A. Kennington III285fbcb2021-01-24 18:16:20 -080088 stdplus_lib,
William A. Kennington III15982f62019-01-31 14:43:41 -080089 description: 'C++ helper utilities',
90 version: meson.project_version(),
William A. Kennington IIIb01c5572020-06-03 19:40:49 -070091 requires: stdplus_reqs)
William A. Kennington III15982f62019-01-31 14:43:41 -080092
93install_headers(
William A. Kennington III2f210732020-08-02 16:12:36 -070094 'stdplus/exception.hpp',
William A. Kennington IIIeac9d472020-08-03 13:57:14 -070095 'stdplus/flags.hpp',
William A. Kennington IIIe0990382019-10-18 02:10:25 -070096 'stdplus/raw.hpp',
William A. Kennington III15982f62019-01-31 14:43:41 -080097 'stdplus/signal.hpp',
William A. Kennington IIIda284aa2020-06-03 19:41:10 -070098 'stdplus/types.hpp',
William A. Kennington III15982f62019-01-31 14:43:41 -080099 subdir: 'stdplus')
William A. Kennington III7a5e2322018-11-02 17:28:35 -0700100
101install_headers(
William A. Kennington IIIe847ef82018-11-02 17:29:15 -0700102 'stdplus/handle/copyable.hpp',
William A. Kennington III7a5e2322018-11-02 17:28:35 -0700103 'stdplus/handle/managed.hpp',
104 subdir: 'stdplus/handle')
William A. Kennington IIIbff0b0f2018-11-16 19:56:10 -0800105
106install_headers(
107 'stdplus/util/cexec.hpp',
William A. Kennington III4ef36e72019-06-27 12:48:59 -0700108 'stdplus/util/string.hpp',
William A. Kennington IIIbff0b0f2018-11-16 19:56:10 -0800109 subdir: 'stdplus/util')