diff options
Diffstat (limited to 'meson.build')
-rw-r--r-- | meson.build | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..727c085 --- /dev/null +++ b/meson.build @@ -0,0 +1,224 @@ +# Copyright 2022 Collabora Ltd. +# SPDX-License-Identifier: MIT + +project( + 'dbus-python', + 'c', + default_options: [ + 'warning_level=2', + ], + meson_version: '>=0.56', + version: '1.2.19', +) + +pc_mod = import('pkgconfig') +py_mod = import('python') + +project_include_directories = include_directories('include') + +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 += [ + # Intentionally disabled: missing field initializers being implicitly + # default-initialized is a feature, not a bug + '-Wno-missing-field-initializers', + + # Unfortunately the Python headers trigger various warnings + '-Wno-declaration-after-statement', + '-Wno-inline', + '-Wno-redundant-decls', + '-Wno-switch-default', + '-Wno-write-strings', + + # General warnings for both C and C++, excluding those that are part + # of -Wall or -Wextra + '-Wcast-align', + '-Wdouble-promotion', + '-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', + '-Wshadow', + '-Wswitch-enum', + '-Wundef', + '-Wunused-but-set-variable', + ] + + compile_warnings_c += [ + # Extra warnings just for C + '-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') + +conf_data = configuration_data() +conf_data.set_quoted('PACKAGE_VERSION', meson.project_version()) +configure_file( + output : '_dbus-python-config.h', + configuration: conf_data, +) +add_project_arguments(['-include', '_dbus-python-config.h'], language: 'c') + +# Bring dbus-gmain into our namespace +redefine_dgmain_name = '_dbus_py_glib_ ## name' + +add_project_arguments( + '-DDBUS_GMAIN_FUNCTION_NAME(name)=' + redefine_dgmain_name, + language: 'c', +) + +dbus_gmain = subproject( + 'dbus-gmain', + default_options: [ + 'redefine_function_name=' + redefine_dgmain_name, + 'tests=false', + ], +) +dbus_gmain_dep = dbus_gmain.get_variable('dbus_gmain_dep') + +if get_option('python') == '' + # This uses the same Python that was used to run Meson + py = py_mod.find_installation() +else + py = py_mod.find_installation(get_option('python')) +endif + +dbus_dep = dependency('dbus-1', version: '>=1.8') + +python_sources = files( + 'dbus/bus.py', + 'dbus/connection.py', + 'dbus/_compat.py', + 'dbus/_dbus.py', + 'dbus/decorators.py', + 'dbus/exceptions.py', + 'dbus/_expat_introspect_parser.py', + 'dbus/gi_service.py', + 'dbus/glib.py', + 'dbus/__init__.py', + 'dbus/lowlevel.py', + 'dbus/proxies.py', + 'dbus/server.py', + 'dbus/service.py', + 'dbus/types.py', +) +mainloop_sources = files( + 'dbus/mainloop/__init__.py', + 'dbus/mainloop/glib.py', +) + +py.install_sources( + python_sources, + subdir: 'dbus', + pure: false, +) +py.install_sources( + mainloop_sources, + subdir: 'dbus/mainloop', + pure: false, +) + +dbus_bindings = py.extension_module( + '_dbus_bindings', + sources: [ + 'dbus_bindings/abstract.c', + 'dbus_bindings/bus.c', + 'dbus_bindings/bytes.c', + 'dbus_bindings/conn.c', + 'dbus_bindings/conn-methods.c', + 'dbus_bindings/containers.c', + 'dbus_bindings/debug.c', + 'dbus_bindings/exceptions.c', + 'dbus_bindings/float.c', + 'dbus_bindings/generic.c', + 'dbus_bindings/int.c', + 'dbus_bindings/unixfd.c', + 'dbus_bindings/libdbusconn.c', + 'dbus_bindings/mainloop.c', + 'dbus_bindings/message-append.c', + 'dbus_bindings/message.c', + 'dbus_bindings/message-get-args.c', + 'dbus_bindings/module.c', + 'dbus_bindings/pending-call.c', + 'dbus_bindings/server.c', + 'dbus_bindings/signature.c', + 'dbus_bindings/string.c', + 'dbus_bindings/validation.c', + ], + dependencies: [ + dbus_dep, + py.dependency(), + ], + include_directories: project_include_directories, + install: true, + # Workaround for https://github.com/mesonbuild/meson/issues/6331 + # TODO: Remove this when we depend on Meson 0.60 + subdir: '', +) + +dbus_glib_bindings = py.extension_module( + '_dbus_glib_bindings', + sources: [ + 'dbus_glib_bindings/module.c', + ], + dependencies: [ + dbus_dep, + dbus_gmain_dep, + py.dependency(), + ], + include_directories: project_include_directories, + install: true, + # Workaround for https://github.com/mesonbuild/meson/issues/6331 + # TODO: Remove this when we depend on Meson 0.60 + subdir: '', +) + +install_headers( + 'include/dbus/dbus-python.h', + subdir: 'dbus-1.0/dbus', +) + +pc_mod.generate( + description: 'Python bindings for D-Bus', + filebase: 'dbus-python', + name: 'dbus-python', + requires: ['dbus-1 >= 1.8'], + subdirs: ['dbus-1.0'], + variables: { + 'exec_prefix': '${prefix}', + 'datarootdir': '${prefix}' / get_option('datadir'), + }, +) + +if get_option('doc') + subdir('doc') +endif + +if get_option('tests') + subdir('test') +endif |