mirror of
https://github.com/boostorg/leaf.git
synced 2026-01-19 04:22:08 +00:00
281 lines
11 KiB
Meson
281 lines
11 KiB
Meson
# Copyright 2018-2025 Emil Dotchevski and Reverge Studios, Inc.
|
|
|
|
# Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
project('leaf', 'cpp', default_options : ['cpp_std=c++17', 'b_pch=false'], license : 'boost')
|
|
|
|
option_single_header = get_option('leaf_single_header')
|
|
option_boost_available = get_option('leaf_boost_available')
|
|
option_diagnostics = get_option('leaf_diagnostics')
|
|
option_capture = get_option('leaf_capture')
|
|
option_exceptions = (get_option('cpp_eh')!='none')
|
|
option_enable_unit_tests = get_option('leaf_enable_unit_tests')
|
|
option_enable_examples = get_option('leaf_enable_examples')
|
|
option_embedded = get_option('leaf_embedded')
|
|
|
|
if target_machine.system() == 'windows'
|
|
add_global_arguments('-D_CRT_SECURE_NO_WARNINGS', language: 'cpp')
|
|
endif
|
|
|
|
compiler = meson.get_compiler('cpp')
|
|
compiler_id = compiler.get_id()
|
|
if not meson.is_subproject()
|
|
if option_boost_available
|
|
add_global_arguments(
|
|
'-DBOOST_LEAF_BOOST_AVAILABLE',
|
|
language:'cpp' )
|
|
endif
|
|
if compiler_id=='msvc'
|
|
add_global_arguments(
|
|
'/FC',
|
|
language:'cpp' )
|
|
elif compiler_id=='clang'
|
|
if get_option('buildtype')!='debug'
|
|
add_global_arguments(
|
|
'-Wno-unused-variable',
|
|
language:'cpp' )
|
|
endif
|
|
add_global_arguments(
|
|
'-fdiagnostics-absolute-paths',
|
|
'-Wno-dangling-else',
|
|
'-Wno-non-virtual-dtor',
|
|
'-Wno-delete-non-abstract-non-virtual-dtor',
|
|
# '-Wshadow-all',
|
|
# '-Wsign-conversion',
|
|
# '-Wextra',
|
|
# '-Werror',
|
|
language:'cpp' )
|
|
elif compiler_id=='gcc'
|
|
if get_option('buildtype')!='debug'
|
|
add_global_arguments(
|
|
'-Wno-unused-variable',
|
|
language:'cpp' )
|
|
endif
|
|
add_global_arguments(
|
|
'-Wno-dangling-else',
|
|
'-Wno-non-virtual-dtor',
|
|
'-Wno-misleading-indentation',
|
|
language:'cpp' )
|
|
elif host_machine.system()=='emscripten'
|
|
add_global_arguments(
|
|
'-s', 'WASM=1',
|
|
'-s', 'USE_PTHREADS=1',
|
|
'-s', 'EXIT_RUNTIME=1',
|
|
'-s', 'PROXY_TO_PTHREAD=1',
|
|
'-s', 'DISABLE_EXCEPTION_CATCHING=0',
|
|
language:'cpp' )
|
|
add_global_link_arguments(
|
|
'-s', 'EXPORT_ALL=1',
|
|
'-s', 'WASM=1',
|
|
'-s', 'USE_PTHREADS=1',
|
|
'-s', 'EXIT_RUNTIME=1',
|
|
'-s', 'PROXY_TO_PTHREAD=1',
|
|
'-s', 'DISABLE_EXCEPTION_CATCHING=0',
|
|
'-s', 'INITIAL_MEMORY=268435456',
|
|
language:'cpp' )
|
|
endif
|
|
endif
|
|
|
|
dep_boost = [ ]
|
|
if option_boost_available # Requires that LEAF resides under boost_root/libs/leaf.
|
|
dep_boost = declare_dependency(include_directories: '../..')
|
|
endif
|
|
|
|
dep_lua = [ ]
|
|
if option_enable_examples
|
|
dep_lua = subproject('lua').get_variable('all')
|
|
endif
|
|
|
|
defines = [
|
|
'-DBOOST_LEAF_CFG_DIAGNOSTICS=' + option_diagnostics.to_string(),
|
|
'-DBOOST_LEAF_CFG_CAPTURE=' + option_capture.to_string()
|
|
]
|
|
|
|
if option_embedded
|
|
defines += '-DBOOST_LEAF_EMBEDDED'
|
|
endif
|
|
|
|
dep_thread = dependency('threads')
|
|
|
|
leaf = declare_dependency( include_directories: 'include', compile_args: defines )
|
|
|
|
#################################
|
|
|
|
if option_enable_unit_tests
|
|
|
|
tests = [
|
|
'BOOST_LEAF_ASSIGN_test',
|
|
'BOOST_LEAF_AUTO_test',
|
|
'BOOST_LEAF_CHECK_test',
|
|
'capture_exception_async_test',
|
|
'capture_exception_result_async_test',
|
|
'capture_exception_result_unload_test',
|
|
'capture_exception_state_test',
|
|
'capture_exception_unload_test',
|
|
'capture_result_async_test',
|
|
'capture_result_state_test',
|
|
'capture_result_unload_test',
|
|
'context_activator_test',
|
|
'context_deduction_test',
|
|
'ctx_handle_all_test',
|
|
'ctx_handle_some_test',
|
|
'ctx_remote_handle_all_test',
|
|
'ctx_remote_handle_some_test',
|
|
'diagnostics_test1',
|
|
'diagnostics_test2',
|
|
'diagnostics_test3',
|
|
'diagnostics_test4',
|
|
'diagnostics_test5',
|
|
'diagnostics_test6',
|
|
'e_errno_test',
|
|
'error_code_test',
|
|
'error_id_test',
|
|
'exception_test',
|
|
'exception_to_result_test',
|
|
'function_traits_test',
|
|
'github_issue53_test',
|
|
'github_issue53x_test',
|
|
'handle_all_other_result_test',
|
|
'handle_all_test',
|
|
'handle_basic_test',
|
|
'handle_some_other_result_test',
|
|
'handle_some_test',
|
|
'json_encoder_nlohmann_test',
|
|
'match_member_test',
|
|
'match_test',
|
|
'match_value_test',
|
|
'multiple_errors_test',
|
|
'on_error_accumulate_basic_test',
|
|
'on_error_accumulate_nested_error_exception_test',
|
|
'on_error_accumulate_nested_error_result_test',
|
|
'on_error_accumulate_nested_new_error_exception_test',
|
|
'on_error_accumulate_nested_new_error_result_test',
|
|
'on_error_accumulate_nested_success_exception_test',
|
|
'on_error_accumulate_nested_success_result_test',
|
|
'on_error_alloc_fail_test',
|
|
'on_error_defer_basic_test',
|
|
'on_error_defer_nested_error_exception_test',
|
|
'on_error_defer_nested_error_result_test',
|
|
'on_error_defer_nested_new_error_exception_test',
|
|
'on_error_defer_nested_new_error_result_test',
|
|
'on_error_defer_nested_success_exception_test',
|
|
'on_error_defer_nested_success_result_test',
|
|
'on_error_dynamic_reserve_test1',
|
|
'on_error_dynamic_reserve_test2',
|
|
'on_error_dynamic_reserve_test3',
|
|
'on_error_preload_basic_test',
|
|
'on_error_preload_exception_test',
|
|
'on_error_preload_nested_error_exception_test',
|
|
'on_error_preload_nested_error_result_test',
|
|
'on_error_preload_nested_new_error_exception_test',
|
|
'on_error_preload_nested_new_error_result_test',
|
|
'on_error_preload_nested_success_exception_test',
|
|
'on_error_preload_nested_success_result_test',
|
|
'optional_test',
|
|
'type_name_test',
|
|
'print_test',
|
|
'result_bad_result_test',
|
|
'result_implicit_conversion_test',
|
|
'result_load_test',
|
|
'result_print_test',
|
|
'result_ref_test',
|
|
'result_state_test',
|
|
'tls_array_alloc_test1',
|
|
'tls_array_alloc_test2',
|
|
'tls_array_alloc_test3',
|
|
'tls_array_test',
|
|
'to_variant_test',
|
|
'try_capture_all_test',
|
|
'try_catch_error_id_test',
|
|
'try_catch_system_error_test',
|
|
'try_catch_test',
|
|
'try_exception_and_result_test',
|
|
]
|
|
if option_boost_available and option_exceptions
|
|
tests += [
|
|
'boost_exception_test'
|
|
]
|
|
endif
|
|
|
|
dep_test_single_header = []
|
|
if option_single_header
|
|
dep_test_single_header = declare_dependency(compile_args: ['-DBOOST_LEAF_TEST_SINGLE_HEADER'])
|
|
endif
|
|
|
|
foreach t : tests
|
|
test(t, executable(t, 'test/'+t+'.cpp', dependencies: [leaf, dep_thread, dep_boost, dep_test_single_header]) )
|
|
endforeach
|
|
|
|
if target_machine.system() == 'windows'
|
|
dep_e_LastError = declare_dependency(compile_args: ['-DBOOST_LEAF_CFG_WIN32=1'])
|
|
test('e_LastError_test', executable('e_LastError_test', 'test/e_LastError_test.cpp', dependencies: [leaf, dep_thread, dep_boost, dep_test_single_header, dep_e_LastError]) )
|
|
endif
|
|
|
|
header_tests = [
|
|
'_hpp_common_test',
|
|
'_hpp_config_test',
|
|
'_hpp_context_test',
|
|
'_hpp_diagnostics_test',
|
|
'_hpp_error_test',
|
|
'_hpp_exception_test',
|
|
'_hpp_handle_errors_test',
|
|
'_hpp_leaf_test',
|
|
'_hpp_on_error_test',
|
|
'_hpp_pred_test',
|
|
'_hpp_result_test',
|
|
'_hpp_serialization_json_encoder_nlohmann_test',
|
|
'_hpp_to_variant_test',
|
|
]
|
|
foreach t : header_tests
|
|
test(t, executable(t, 'test/'+t+'.cpp', dependencies: [leaf, dep_thread, dep_boost]) )
|
|
endforeach
|
|
|
|
# Shared library test
|
|
dep_so_dll = []
|
|
if target_machine.system() == 'windows'
|
|
dep_so_dll = declare_dependency(compile_args: ['-DBOOST_LEAF_CFG_WIN32=2'])
|
|
endif
|
|
so_dll_test_lib1 = shared_library('so_dll_test_lib1', 'test/so_dll_lib1.cpp', dependencies: [leaf, dep_so_dll], gnu_symbol_visibility: 'hidden')
|
|
so_dll_test_lib2 = shared_library('so_dll_test_lib2', 'test/so_dll_lib2.cpp', dependencies: [leaf, dep_so_dll], gnu_symbol_visibility: 'hidden')
|
|
test('so_dll_test', executable('so_dll_test', 'test/so_dll_test.cpp', dependencies: [leaf, dep_so_dll], link_with: [so_dll_test_lib1, so_dll_test_lib2]))
|
|
|
|
# Test that the DLL test works when linked statically as well.
|
|
# This is to verify that we don't get multiply defined symbol link errors when tls_win32.hpp is included in multiple compilation units..
|
|
dep_so_dll_static = declare_dependency(compile_args: ['-DBOOST_LEAF_SO_DLL_TEST_STATIC'])
|
|
so_dll_static_lib1 = static_library('so_dll_static_lib1', 'test/so_dll_lib1.cpp', dependencies: [leaf, dep_so_dll, dep_so_dll_static])
|
|
so_dll_static_lib2 = static_library('so_dll_static_lib2', 'test/so_dll_lib2.cpp', dependencies: [leaf, dep_so_dll, dep_so_dll_static])
|
|
test('so_dll_static_test', executable('so_dll_static_test', 'test/so_dll_test.cpp', dependencies: [leaf, dep_so_dll, dep_so_dll_static], link_with: [so_dll_static_lib1, so_dll_static_lib2]))
|
|
|
|
endif
|
|
|
|
#################################
|
|
|
|
if option_enable_examples
|
|
|
|
executable('print_file_leaf_result', 'example/print_file/print_file_leaf_result.cpp', dependencies: [leaf] )
|
|
if option_exceptions
|
|
executable('print_file_exceptions', 'example/print_file/print_file_exceptions.cpp', dependencies: [leaf] )
|
|
endif
|
|
if option_boost_available
|
|
executable('print_file_system_result', 'example/print_file/print_file_system_result.cpp', dependencies: [leaf, dep_boost] )
|
|
endif
|
|
|
|
executable('error_log', 'example/error_log.cpp', dependencies: [leaf] )
|
|
executable('error_trace', 'example/error_trace.cpp', dependencies: [leaf] )
|
|
executable('print_half', 'example/print_half.cpp', dependencies: [leaf] )
|
|
executable('try_capture_all_result', 'example/try_capture_all_result.cpp', dependencies: [leaf] )
|
|
if option_exceptions
|
|
executable('try_capture_all_exceptions', 'example/try_capture_all_exceptions.cpp', dependencies: [leaf] )
|
|
executable('exception_to_result', 'example/exception_to_result.cpp', dependencies: [leaf] )
|
|
endif
|
|
|
|
if option_enable_examples
|
|
if option_exceptions
|
|
executable('lua_callback_exceptions', 'example/lua_callback_exceptions.cpp', dependencies: [leaf, dep_lua] )
|
|
endif
|
|
executable('lua_callback_result', 'example/lua_callback_result.cpp', dependencies: [leaf, dep_lua] )
|
|
endif
|
|
|
|
endif
|