1 # Copyright (c) 2018-2020 Emil Dotchevski and Reverge Studios, Inc.
3 # Distributed under the Boost Software License, Version 1.0. (See accompanying
4 # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 project('leaf', 'cpp', default_options : ['cpp_std=c++17', 'b_pch=false'], license : 'boost')
8 option_leaf_hpp = get_option('leaf_hpp')
9 option_boost = get_option('leaf_boost_examples')
10 option_lua = get_option('leaf_lua_examples')
11 option_diagnostics = get_option('leaf_diagnostics')
12 option_suppress_warnings = get_option('leaf_suppress_warnings')
13 option_exceptions = (get_option('cpp_eh')!='none')
14 option_enable_unit_tests = get_option('leaf_enable_unit_tests')
15 option_enable_examples = get_option('leaf_enable_examples')
16 option_enable_benchmarks = get_option('leaf_enable_benchmarks')
18 if not option_enable_examples
20 error('The option leaf_boost_examples requires leaf_enable_examples. Aborting.')
23 error('The option leaf_lua_examples requires leaf_enable_examples. Aborting.')
27 compiler = meson.get_compiler('cpp')
28 compiler_id = compiler.get_id()
29 if not meson.is_subproject()
30 if compiler_id=='clang'
31 if get_option('buildtype')!='debug'
33 '-Wno-unused-variable',
37 '-fdiagnostics-absolute-paths',
39 '-Wno-non-virtual-dtor',
40 '-Wno-delete-non-abstract-non-virtual-dtor',
42 elif compiler_id=='gcc'
43 if get_option('buildtype')!='debug'
45 '-Wno-unused-variable',
50 '-Wno-non-virtual-dtor',
51 '-Wno-misleading-indentation',
53 elif host_machine.system()=='emscripten'
56 '-s', 'USE_PTHREADS=1',
57 '-s', 'EXIT_RUNTIME=1',
58 '-s', 'PROXY_TO_PTHREAD=1',
59 '-s', 'DISABLE_EXCEPTION_CATCHING=0',
61 add_global_link_arguments(
64 '-s', 'USE_PTHREADS=1',
65 '-s', 'EXIT_RUNTIME=1',
66 '-s', 'PROXY_TO_PTHREAD=1',
67 '-s', 'DISABLE_EXCEPTION_CATCHING=0',
68 '-s', 'INITIAL_MEMORY=268435456',
74 prog_python = import('python').find_installation('python3')
80 files('gen/generate_single_header.py'),
81 '-i', files('include/boost/leaf/detail/all.hpp'),
82 '-p', join_paths(meson.source_root(),'include'),
83 '-o', join_paths(meson.source_root(),'include/boost/leaf.hpp'),
87 build_always_stale: true,
88 build_by_default: true)
92 if option_boost # Requires that LEAF resides under boost_root/libs/leaf.
93 dep_boost = declare_dependency(include_directories: '../..')
98 dep_lua = subproject('lua').get_variable('all')
101 defines = [ '-DBOOST_LEAF_DIAGNOSTICS=' + option_diagnostics.to_string() ]
103 if not option_suppress_warnings
104 defines += '-DBOOST_LEAF_ENABLE_WARNINGS'
107 dep_thread = dependency('threads')
109 includes = [ include_directories('include') ]
111 leaf = declare_dependency( include_directories: includes, compile_args: defines )
113 #################################
115 if option_enable_unit_tests
118 'accumulate_basic_test',
119 'accumulate_nested_error_exception_test',
120 'accumulate_nested_error_result_test',
121 'accumulate_nested_new_error_exception_test',
122 'accumulate_nested_new_error_result_test',
123 'accumulate_nested_success_exception_test',
124 'accumulate_nested_success_result_test',
125 'BOOST_LEAF_AUTO_test',
126 'BOOST_LEAF_ASSIGN_test',
127 'capture_exception_async_test',
128 'capture_exception_result_async_test',
129 'capture_exception_state_test',
130 'capture_exception_unload_test',
131 'capture_result_async_test',
132 'capture_result_state_test',
133 'context_activator_test',
134 'context_deduction_test',
135 'capture_result_unload_test',
136 'ctx_handle_all_test',
137 'ctx_handle_some_test',
138 'ctx_remote_handle_all_test',
139 'ctx_remote_handle_some_test',
141 'defer_nested_error_exception_test',
142 'defer_nested_error_result_test',
143 'defer_nested_new_error_exception_test',
144 'defer_nested_new_error_result_test',
145 'defer_nested_success_exception_test',
146 'defer_nested_success_result_test',
147 'diagnostic_info_test',
151 'exception_to_result_test',
152 'function_traits_test',
153 'handle_all_other_result_test',
156 'handle_some_other_result_test',
161 'multiple_errors_test',
163 'preload_basic_test',
164 'preload_exception_test',
165 'preload_nested_error_exception_test',
166 'preload_nested_error_result_test',
167 'preload_nested_new_error_exception_test',
168 'preload_nested_new_error_result_test',
169 'preload_nested_success_exception_test',
170 'preload_nested_success_result_test',
172 'result_bad_result_test',
176 'try_catch_error_id_test',
177 'try_catch_system_error_test',
179 'try_exception_and_result_test',
184 '_hpp_exception_test',
185 '_hpp_handle_errors_test',
187 '_hpp_on_error_test',
191 if option_boost and option_exceptions
193 'boost_exception_test'
198 test(t, executable(t, 'test/'+t+'.cpp', dependencies: [leaf, dep_thread, dep_boost]) )
203 #################################
205 if option_enable_examples
207 print_file_examples = [
209 'print_file_result_error_tags',
212 print_file_examples += [
214 'print_file_eh_error_tags'
218 print_file_examples += [
219 'print_file_outcome_result'
223 foreach e : print_file_examples
224 executable(e, 'examples/print_file/'+e+'.cpp', dependencies: [leaf, dep_thread, dep_boost] )
229 #################################
231 if option_enable_examples
241 'capture_in_exception',
242 'exception_to_result'
251 # 'asio_beast_leaf_rpc' #FIXME
257 'lua_callback_result'
262 executable(e, 'examples/'+e+'.cpp', dependencies: [leaf, dep_thread, dep_boost, dep_lua] )
267 #################################
269 if option_enable_benchmarks
272 error('The option leaf_enable_benchmarks requires the built-in option cpp_eh set to none. Aborting.')
274 dep_tl_expected = subproject('tl_expected').get_variable('headers')
275 executable('deep_stack_tl', 'benchmark/deep_stack_other.cpp', override_options: ['cpp_std=c++17'], cpp_args: '-DBENCHMARK_WHAT=0', dependencies: [dep_tl_expected] )
276 executable('deep_stack_leaf', 'benchmark/deep_stack_leaf.cpp', dependencies: [leaf], override_options: ['cpp_std=c++17'], cpp_args: '-DBOOST_LEAF_DIAGNOSTICS=0')
278 executable('deep_stack_result', 'benchmark/deep_stack_other.cpp', dependencies: [dep_boost], override_options: ['cpp_std=c++17'], cpp_args: '-DBENCHMARK_WHAT=1' )
279 executable('deep_stack_outcome', 'benchmark/deep_stack_other.cpp', dependencies: [dep_boost], override_options: ['cpp_std=c++17'], cpp_args: '-DBENCHMARK_WHAT=2' )