diff --git a/meson.build b/meson.build index e925d598..336eaa36 100644 --- a/meson.build +++ b/meson.build @@ -1,12 +1,12 @@ project('spdlog', ['cpp'], - license : 'MIT', - version : run_command(find_program('scripts/extract_version.py')).stdout().strip(), - default_options : [ + license : 'MIT', + version : run_command(find_program('scripts/extract_version.py')).stdout().strip(), + default_options : [ 'warning_level=3', 'cpp_std=c++11', 'buildtype=release', 'b_colorout=always', - ], + ], ) # ------------------------ @@ -20,17 +20,57 @@ dep_list += dependency('threads') # Check for FMT if get_option('external_fmt') - if not meson.version().version_compare('>=0.49.0') + if not meson.version().version_compare('>=0.49.0') warning('Finding fmt can fail with meson versions before 0.49.0') - endif - dep_list += dependency('fmt') - compile_args += '-DSPDLOG_FMT_EXTERNAL' + endif + dep_list += dependency('fmt') + compile_args += '-DSPDLOG_FMT_EXTERNAL' endif if get_option('no_exceptions') compile_args += '-DSPDLOG_NO_EXCEPTIONS' endif +if get_option('wchar_support') + if build_machine.system() != 'windows' + error('wchar_support only supported under windows') + endif + compile_args += '-DSPDLOG_WCHAR_TO_UTF8_SUPPORT' +endif + +if get_option('wchar_filenames') + if build_machine.system() != 'windows' + error('wchar_support only supported under windows') + endif + compile_args += '-DSPDLOG_WCHAR_FILENAMES' +endif + +if get_option('clock_coarse') + if build_machine.system() != 'linux' + error('clock_coarse only supported under linux') + endif + compile_args += '-DSPDLOG_CLOCK_COARSE' +endif + +if get_option('prevent_child_fd') + compile_args += '-DSPDLOG_PREVENT_CHILD_FD' +endif + +if get_option('no_thread_id') + compile_args += '-DSPDLOG_NO_THREAD_ID' +endif + +if get_option('no_tls') + compile_args += '-DSPDLOG_NO_TLS' +endif + +if get_option('no_atomic_levels') + compile_args += '-DSPDLOG_NO_ATOMIC_LEVELS' +endif + +compile_args_compiled = compile_args + ['-DSPDLOG_COMPILED_LIB'] +compile_args_ho = compile_args + # ------------------------------------ # --- Compiled library version --- # ------------------------------------ @@ -50,40 +90,40 @@ if not get_option('external_fmt') endif if get_option('library_type') == 'static' - spdlog = static_library( + spdlog = static_library( 'spdlog', spdlog_srcs, - cpp_args : [compile_args] + ['-DSPDLOG_COMPILED_LIB'], + cpp_args : compile_args_compiled, include_directories : spdlog_inc, dependencies : dep_list, install : not meson.is_subproject() ) else - spdlog = shared_library('spdlog', + spdlog = shared_library('spdlog', spdlog_srcs, - cpp_args : [compile_args] + ['-DSPDLOG_COMPILED_LIB'], + cpp_args : compile_args_compiled, include_directories : spdlog_inc, dependencies : dep_list, install : not meson.is_subproject(), - ) + ) endif 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(), + link_with : spdlog, + include_directories : spdlog_inc, + compile_args : compile_args_compiled, + 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(), + include_directories : spdlog_inc, + compile_args : compile_args_ho, + dependencies : dep_list, + version : meson.project_version(), ) # ------------------------ @@ -92,15 +132,15 @@ spdlog_headeronly_dep = declare_dependency( # Do not install when spdlog is used as a subproject if not meson.is_subproject() - install_subdir('include/spdlog', install_dir: get_option('includedir')) + install_subdir('include/spdlog', install_dir: get_option('includedir')) - pkg = import('pkgconfig') - pkg.generate(spdlog, + pkg = import('pkgconfig') + pkg.generate(spdlog, name : 'spdlog', description : 'Fast C++ logging library', url : 'https://github.com/gabime/spdlog', - extra_cflags : ['-DSPDLOG_COMPILED_LIB'] - ) + extra_cflags : compile_args_compiled + ) endif # ------------------------------------- @@ -108,15 +148,15 @@ endif # ------------------------------------- if get_option('enable_tests') - subdir('tests') + subdir('tests') endif if get_option('enable_examples') - subdir('example') + subdir('example') endif if get_option('enable_benchmarks') - subdir('bench') + subdir('bench') endif # ------------------- @@ -124,7 +164,6 @@ endif # ------------------- summary_str = '''spdlog build summary: - - using external fmt: @0@ - building tests: @1@ - building examples: @2@ diff --git a/meson_options.txt b/meson_options.txt index 57374b0e..01060ab1 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -3,4 +3,12 @@ option('enable_examples', type: 'boolean', value: true, description: 'Build ex option('enable_benchmarks', type: 'boolean', value: false, description: 'Build benchmarks') option('enable_tests', type: 'boolean', value: true, description: 'Build tests') option('library_type', type: 'combo', choices: ['static', 'shared'], value: 'static', description: 'Library build type') -option('no_exceptions', type: 'boolean', value: false, description: 'Disabled exceptions - abort() instead any error') +option('no_exceptions', type: 'boolean', value: false, description: 'Disabled exceptions - abort() instead any error') + +option('wchar_support', type: 'boolean', value: false, description:'(Windows only) Support wchar api') +option('wchar_filenames', type: 'boolean', value: false, description: '(Windows only) Support wchar filenames') +option('clock_coarse', type: 'boolean', value: false, description: '(Linux only) Use the much faster (but much less accurate) CLOCK_REALTIME_COARSE instead of the regular clock') +option('prevent_child_fd', type: 'boolean', value: false, description: 'Prevent from child processes to inherit log file descriptors') +option('no_thread_id', type: 'boolean', value: false, description: 'prevent spdlog from querying the thread id on each log call if thread id is not needed') +option('no_tls', type: 'boolean', value: false, description: 'prevent spdlog from using thread local storage') +option('no_atomic_levels', type: 'boolean', value: false, description: 'prevent spdlog from using of std::atomic log levels (use only if your code never modifies log levels concurrently')