summaryrefslogtreecommitdiff
path: root/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build144
1 files changed, 144 insertions, 0 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..4b96061
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,144 @@
+# Copyright 2022 Collabora Ltd.
+# SPDX-License-Identifier: MIT
+
+project(
+ 'dbus-gmain',
+ 'c',
+ default_options: [
+ 'warning_level=2',
+ ],
+ meson_version: '>=0.56',
+)
+
+cc = meson.get_compiler('c')
+compile_warnings = []
+compile_warnings_c = []
+
+if cc.get_id() != 'msvc'
+ # -fno-common makes the linker more strict: on some systems the linker
+ # is *always* this strict, so we want to behave like that everywhere.
+ # We treat this like a warning, since that's basically how we're using it.
+ compile_warnings += ['-fno-common']
+
+ compile_warnings += [
+ # These warnings are intentionally disabled:
+ # - missing field initializers being implicitly 0 is a feature,
+ # not a bug
+ # - -Wunused-parameter is annoying when writing callbacks that follow
+ # a fixed signature but do not necessarily need all of its parameters
+ '-Wno-missing-field-initializers',
+ '-Wno-unused-parameter',
+
+ # General warnings for both C and C++, excluding those that are part
+ # of -Wall or -Wextra
+ '-Wcast-align',
+ '-Wdouble-promotion',
+ '-Wduplicated-branches',
+ '-Wduplicated-cond',
+ '-Wfloat-equal',
+ '-Wformat-nonliteral',
+ '-Wformat-security',
+ '-Wformat=2',
+ '-Winit-self',
+ '-Wlogical-op',
+ '-Wmissing-declarations',
+ '-Wmissing-format-attribute',
+ '-Wmissing-include-dirs',
+ '-Wmissing-noreturn',
+ '-Wnull-dereference',
+ '-Wpacked',
+ '-Wpointer-arith',
+ '-Wredundant-decls',
+ '-Wshadow',
+ '-Wswitch-default',
+ '-Wswitch-enum',
+ '-Wundef',
+ '-Wunused-but-set-variable',
+ '-Wwrite-strings',
+ ]
+
+ compile_warnings_c += [
+ # Extra warnings just for C
+ '-Wdeclaration-after-statement',
+ '-Wjump-misses-init',
+ '-Wmissing-prototypes',
+ '-Wnested-externs',
+ '-Wold-style-definition',
+ '-Wpointer-sign',
+ '-Wstrict-prototypes',
+ ]
+endif
+
+compile_warnings_c = cc.get_supported_arguments(
+ compile_warnings + compile_warnings_c,
+)
+add_project_arguments(compile_warnings_c, language: 'c')
+
+if get_option('redefine_function_declaration') != ''
+ if not get_option('redefine_function_declaration').contains('name')
+ error('redefine_function_declaration option needs to contain "name"')
+ endif
+
+ if not get_option('redefine_function_declaration').contains('ret')
+ error('redefine_function_declaration option needs to contain "ret"')
+ endif
+
+ if not get_option('redefine_function_declaration').contains('__VA_ARGS__')
+ error('redefine_function_declaration option needs to contain "__VA_ARGS__"')
+ endif
+
+ add_project_arguments(
+ '-DDBUS_GMAIN_FUNCTION(ret, name, ...)=@0@'.format(
+ get_option('redefine_function_declaration'),
+ ),
+ language: 'c',
+ )
+endif
+
+if get_option('redefine_function_name') != ''
+ if not get_option('redefine_function_name').contains('name')
+ error('redefine_function_name option needs to contain "name"')
+ endif
+
+ add_project_arguments(
+ '-DDBUS_GMAIN_FUNCTION_NAME(name)=@0@'.format(
+ get_option('redefine_function_name'),
+ ),
+ language: 'c',
+ )
+endif
+
+dbus_dep = dependency('dbus-1', version: '>=1.8')
+glib_dep = dependency('glib-2.0', version: '>=2.40')
+gthread_dep = dependency(
+ 'gthread-2.0',
+ version: '>=2.40',
+ required: get_option('tests'),
+)
+
+libdbus_gmain = static_library(
+ 'dbus-gmain',
+ 'dbus-gmain.c',
+ dependencies: [
+ dbus_dep,
+ glib_dep,
+ ],
+)
+
+dbus_gmain_dep = declare_dependency(
+ dependencies: [
+ dbus_dep,
+ glib_dep,
+ ],
+ include_directories: include_directories('.'),
+ link_with: libdbus_gmain,
+)
+
+dbus_run_session = find_program(
+ 'dbus-run-session',
+ required: get_option('tests'),
+)
+
+if get_option('tests')
+ subdir('tests')
+endif