aboutsummaryrefslogtreecommitdiff
path: root/meson.build
blob: adee6c2e8f1ffc4a0b50e933c1a1ee068d54d92d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
project('smolbote', ['cpp'],
    version: '0.1.0',
    default_options: ['cpp_std=c++2a', 'warning_level=3'],
    license: 'GPL3',
    meson_version: '>=0.52.0'
)

kconfig = import('unstable-kconfig')
kconf = kconfig.load(host_machine.system() + '/.config')

cdata = configuration_data(kconf)

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'
)

# add -DQT_NO_DEBUG to non-debug builds
if not get_option('debug')
    add_project_arguments('-DQT_NO_DEBUG', language: 'cpp')
endif

sourceset = import('sourceset')

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, 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
  '-fconcepts',

  '-mspeculative-load-hardening', # Spectre v1 mitigation

  '-Wconsumed',   # (clang) use-after-move warnings
  '-Wdate-time',  # Warn when using __TIME__ and __DATE__ macros
  '-Wimplicit-fallthrough',
  '-Wold-style-cast'
]), language: 'cpp')

if get_option('buildtype') == 'release'
  add_project_arguments(cxx.get_supported_arguments([
    '-flto=4',
  ]), language: 'cpp')
endif

mod_qt5 = import('qt5')
dep_qt5 = dependency('qt5',
  modules: [ 'Core', 'Network', 'Widgets', 'Svg', 'WebEngineWidgets', 'Concurrent', 'Test' ],
  include_type: 'system'
)

dep_spdlog = dependency('spdlog', fallback: ['spdlog', 'spdlog_dep'], version: '>=1.3.1')

optional_deps = []
poi_cpp_args = []

dep_breakpad = dependency('breakpad-client', include_type: 'system', required: get_option('crashhandler'))
dep_threads = dependency('threads', include_type: 'system', required: get_option('crashhandler'))
if dep_breakpad.found()
  poi_cpp_args += '-DHAVE_BREAKPAD'
endif

dep_gtest = dependency('gtest', required: false, disabler: true)
dep_catch = dependency('catch2', required: true, fallback: ['catch2', 'catch2_dep'] )
dep_SingleApplication = dependency('singleapplication', fallback: [ 'singleapplication', 'SingleApplication_dep' ])
dep_args = dependency('args.hxx', fallback: [ 'args', 'args_dep' ])

# Generate config header

poi_sourceset = sourceset.source_set()

subdir('include')           # plugin interaces

subdir('lib/bookmarks')
subdir('lib/configuration')
subdir('lib/downloads')
subdir('lib/pluginloader')
subdir('lib/urlfilter')
subdir('lib/session_formats')

subdir('src')
subdir('lang')
subdir('doc')
subdir('tools')

#subdir('plugins/ConfigurationEditor')
#subdir('plugins/ProfileEditor')

subdir('test/firefox-bookmarks-json-parser')

ssconfig = poi_sourceset.apply(cdata)

poi_exe = executable(get_option('poi'),
  cpp_args: ['-DQAPPLICATION_CLASS=QApplication', poi_cpp_args],
  sources: [ssconfig.sources()],
  include_directories: [ plugininterfaces_include, include_directories('src') ],
  dependencies: [ dep_qt5, dep_spdlog, dep_SingleApplication, dep_args, optional_deps, dep_bookmarks, dep_configuration, dep_downloads, dep_pluginloader, dep_urlfilter, ssconfig.dependencies(), lib_session_formats ],
  install: true,
)

test('poi-bookmarks: xbel', poi_exe, args: [ 'bookmarks', '-x', files('test/bookmarks.xbel'), '--export=stdout' ])

subdir(host_machine.system())

# cppcheck target
cppcheck = find_program('cppcheck', required: false)
if cppcheck.found()
run_target('cppcheck',
  command: [cppcheck, '--enable=all', '--project=' + meson.build_root() / 'compile_commands.json']
)
endif