project('smolbote', 'cpp', version: '0.1.0', default_options: ['cpp_std=c++17', 'strip=true', 'warning_level=3'], license: 'GPL3', meson_version: '>=0.51.2' ) kconfig = import('unstable-kconfig') cdata = configuration_data(kconfig.load(host_machine.system() + '/.config')) config_h = configure_file(output: 'config.h', configuration: cdata) version_h = vcs_tag( command: [find_program('git').path(), 'describe', '--long', '--abbrev=40'], #fallback: defaults to meson.project_version(), input: 'include/version.h.in', output: 'version.h' ) autogen_config = declare_dependency( include_directories: include_directories('.'), sources: [config_h] ) # add -DQT_NO_DEBUG to non-debug builds if not get_option('debug') add_project_arguments('-DQT_NO_DEBUG', language: 'cpp') endif cxx = meson.get_compiler('cpp') # add some specific flags add_project_arguments(cxx.get_supported_arguments([ '-ffunction-sections', # Place each function into its own section # Leads to better ASLR but larger executables '-fstack-protector-all', # Emit code to check for buffer overflows on all functions '-fstack-clash-protection', # Emit code to check for stack clash attacks '-mspeculative-load-hardening', # Spectre v1 mitigation '-Wimplicit-fallthrough', ]), language: 'cpp') mod_qt5 = import('qt5') dep_qt5 = dependency('qt5', modules: ['Core', 'Network', 'Widgets', 'WebEngineWidgets', 'Concurrent']) dep_boost = dependency('boost', modules: ['program_options']) dep_spdlog = dependency('spdlog', fallback: ['spdlog', 'spdlog_dep'], version: '>=1.3.1') optional_deps = [] if get_option('Breakpad').enabled() optional_deps += declare_dependency(compile_args: '-DBREAKPAD', dependencies: [dependency('breakpad-client'), dependency('threads')] ) endif if get_option('Plasma').enabled() optional_deps += declare_dependency(compile_args: '-DPLASMA', dependencies: [ dependency('KF5WindowSystem', method: 'cmake'), dependency('KF5Wallet', method: 'cmake')] ) endif dep_gtest = dependency('gtest', required: get_option('testing')) # Generate config header include = include_directories('include') interfaces_moc = mod_qt5.preprocess( moc_headers: 'include/profileinterface.h', dependencies: dep_qt5 ) subdir('lib/about') subdir('lib/addressbar') subdir('lib/bookmarks') subdir('lib/configuration') subdir('lib/downloads') subdir('lib/pluginloader') subdir('lib/urlfilter') subdir('lib/webprofile') subdir('3rd-party/SingleApplication') subdir('src') subdir('lang') subdir('doc') subdir('plugins/ConfigurationEditor') subdir('plugins/ProfileEditor')