diff --git a/.gitignore b/.gitignore index fafa874a..f3444852 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,9 @@ build/* # Codelite .codelite +# KDevelop +*.kdev4 + # .orig files *.orig diff --git a/bench/meson.build b/bench/meson.build new file mode 100644 index 00000000..e185e689 --- /dev/null +++ b/bench/meson.build @@ -0,0 +1,13 @@ +benchmark = dependency('benchmark') + +bench_matrix = [ + ['bench', [spdlog_dep], []], + ['async_bench', [spdlog_dep], []], + ['formatter-bench', [spdlog_dep, benchmark], ['all']], + ['latency', [spdlog_dep, benchmark], []], +] + +foreach i : bench_matrix + bench_exe = executable(i[0], i[0] + '.cpp', dependencies: i[1]) + benchmark('bench_' + i[0], bench_exe, args: i[2]) +endforeach diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..552d0cda --- /dev/null +++ b/meson.build @@ -0,0 +1,105 @@ +project('spdlog', ['cpp'], + license : 'MIT', + version : '1.3.1', + default_options : ['warning_level=3', 'cpp_std=c++11', 'default_library=static'], +) + +# ------------------------ +# --- Dependencies --- +# ------------------------ + +dep_list = [] +compile_args = [] + +# Threads +dep_list += dependency('threads') + +# Check for FMT +if get_option('extrenal_fmt') + if not meson.version().version_compare('>=0.49.0') + warning('Finding fmt can fail wit meson versions before 0.49.0') + endif + dep_list += dependency('fmt') + compile_args += '-DSPDLOG_FMT_EXTERNAL' +endif + +# ------------------------------------ +# --- Compiled library version --- +# ------------------------------------ + +spdlog_inc = include_directories('./include') + +spdlog = library('spdlog', ['src/spdlog.cpp'], + cpp_args : [compile_args] + ['-DSPDLOG_COMPILED_LIB'], + include_directories : spdlog_inc, + dependencies : dep_list, + install : true, +) + +spdlog_dep = declare_dependency( + link_with : spdlog, + include_directories : spdlog_inc, + compile_args : compile_args + ['-DSPDLOG_COMPILED_LIB'], + dependencies : dep_list, + version : meson.project_version(), +) + +# ---------------------------------- +# --- Header only dependency --- +# ---------------------------------- + +spdlog_headeronly_dep = declare_dependency( + include_directories : spdlog_inc, + compile_args : compile_args, + dependencies : dep_list, + version : meson.project_version(), +) + +# ------------------------ +# --- Installation --- +# ------------------------ + +install_subdir('include/spdlog', install_dir: get_option('includedir')) + +pkg = import('pkgconfig') +pkg.generate(spdlog, + name : 'spdlog', + description : 'Fast C++ logging library', + url : 'https://github.com/gabime/spdlog', + extra_cflags : ['-DSPDLOG_COMPILED_LIB'] +) + +# ------------------------------------- +# --- Conditionally add subdirs --- +# ------------------------------------- + +if get_option('enable_tests') + subdir('tests') +endif + +if get_option('enable_examples') + subdir('example') +endif + +if get_option('enable_benchmarks') + subdir('bench') +endif + +# ------------------- +# --- Summary --- +# ------------------- + +summary_str = '''spdlog build summary: + + - using extrenal fmt: @0@ + - building tests: @1@ + - building examples: @2@ + - building benchmarks: @3@ +'''.format( + get_option('extrenal_fmt'), + get_option('enable_tests'), + get_option('enable_examples'), + get_option('enable_benchmarks') +) + +message(summary_str) diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 00000000..7dafbf51 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,4 @@ +option('extrenal_fmt', type: 'boolean', value: false) +option('enable_examples', type: 'boolean', value: false) +option('enable_benchmarks', type: 'boolean', value: false) +option('enable_tests', type: 'boolean', value: false) diff --git a/tests/meson.build b/tests/meson.build new file mode 100644 index 00000000..9cb7eef4 --- /dev/null +++ b/tests/meson.build @@ -0,0 +1,43 @@ +test_sources = files([ + 'main.cpp', + 'test_async.cpp', + 'test_dup_filter.cpp', + 'test_errors.cpp', + 'test_file_helper.cpp', + 'test_file_logging.cpp', + 'test_fmt_helper.cpp', + 'test_macros.cpp', + 'test_misc.cpp', + 'test_mpmc_q.cpp', + 'test_pattern_formatter.cpp', + 'test_registry.cpp', + 'test_stdout_api.cpp', + 'utils.cpp', +]) + +global_test_deps = [] + +# ----------------------------------------------------- +# --- Add the systemd test if libsystemd is found --- +# ----------------------------------------------------- + +systemd_dep = dependency('libsystemd', required: false) + +if systemd_dep.found() + test_sources += files(['test_systemd.cpp']) + global_test_deps += systemd_dep +endif + +# -------------------------------------- +# --- Build the test executables --- +# -------------------------------------- + +test_matrix = [ + ['spdlog-utest', spdlog_dep], + ['spdlog-utest-ho', spdlog_headeronly_dep], +] + +foreach i : test_matrix + test_exe = executable(i[0], test_sources, dependencies: global_test_deps + [i[1]]) + test('test_' + i[0], test_exe) +endforeach