summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIñigo Martínez <inigomartinez@gmail.com>2018-02-01 08:35:23 +0100
committerBastien Nocera <hadess@hadess.net>2018-02-05 17:42:49 +0100
commitf180fc7cd655d29d6fdae7e71e2cb6bc8672e823 (patch)
treec7552bdd1780262b13f4458cbbff1302b6016c0a
parent8351ff4d451da2004efc36a205e369b3207ecfe6 (diff)
downloadgnome-settings-daemon-f180fc7cd655d29d6fdae7e71e2cb6bc8672e823.tar.gz
build: Port to meson build system
meson is a build system focused on speed an ease of use, which helps speeding up the software development. This patch adds meson support along autotools. https://bugzilla.gnome.org/show_bug.cgi?id=793087
-rw-r--r--data/meson.build66
-rw-r--r--gnome-settings-daemon/meson.build41
-rw-r--r--meson.build247
-rw-r--r--meson_options.txt10
-rw-r--r--meson_post_install.py11
-rw-r--r--plugins/a11y-settings/meson.build29
-rw-r--r--plugins/clipboard/meson.build31
-rw-r--r--plugins/color/meson.build63
-rw-r--r--plugins/common/meson.build89
-rw-r--r--plugins/datetime/meson.build49
-rw-r--r--plugins/dummy/meson.build47
-rw-r--r--plugins/housekeeping/meson.build49
-rw-r--r--plugins/keyboard/meson.build30
-rw-r--r--plugins/media-keys/meson.build66
-rw-r--r--plugins/meson.build48
-rw-r--r--plugins/mouse/meson.build53
-rw-r--r--plugins/power/meson.build154
-rw-r--r--plugins/print-notifications/meson.build44
-rw-r--r--plugins/rfkill/meson.build32
-rw-r--r--plugins/screensaver-proxy/meson.build26
-rw-r--r--plugins/sharing/meson.build33
-rw-r--r--plugins/smartcard/meson.build58
-rw-r--r--plugins/sound/meson.build29
-rw-r--r--plugins/wacom/meson.build74
-rw-r--r--plugins/xsettings/meson.build57
-rw-r--r--po/meson.build1
-rw-r--r--tests/meson.build11
27 files changed, 1448 insertions, 0 deletions
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 00000000..fcba7bb3
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,66 @@
+data_inc = include_directories('.')
+
+schemas = [
+ 'org.gnome.settings-daemon.peripherals.gschema.xml',
+ 'org.gnome.settings-daemon.peripherals.wacom.gschema.xml',
+ 'org.gnome.settings-daemon.plugins.gschema.xml',
+ 'org.gnome.settings-daemon.plugins.color.gschema.xml',
+ 'org.gnome.settings-daemon.plugins.housekeeping.gschema.xml',
+ 'org.gnome.settings-daemon.plugins.media-keys.gschema.xml',
+ 'org.gnome.settings-daemon.plugins.power.gschema.xml',
+ 'org.gnome.settings-daemon.plugins.sharing.gschema.xml',
+ 'org.gnome.settings-daemon.plugins.xsettings.gschema.xml'
+]
+
+schema_conf = configuration_data()
+schema_conf.set('GETTEXT_PACKAGE', meson.project_name())
+
+foreach schema: schemas
+ schema_in = configure_file(
+ input: schema + '.in.in',
+ output: schema + '.in',
+ configuration: schema_conf
+ )
+
+ custom_target(
+ schema,
+ input: schema_in,
+ output: schema,
+ command: [intltool_merge, '-x', '-u', '--no-translations', '@INPUT@', '@OUTPUT@'],
+ install: true,
+ install_dir: gsd_schemadir
+ )
+endforeach
+
+enums_header = files('gsd-enums.h')
+
+gnome.mkenums(
+ 'org.gnome.settings-daemon.enums.xml',
+ sources: enums_header,
+ comments: '<!-- @comment@ -->',
+ fhead: '<schemalist>',
+ vhead: ' <@type@ id="org.gnome.settings-daemon.@EnumName@">',
+ vprod: ' <value nick="@valuenick@" value="@valuenum@"/>',
+ vtail: ' </@type@>',
+ ftail: '</schemalist>',
+ install_header: true,
+ install_dir: gsd_schemadir
+)
+
+install_data(
+ enums_header,
+ install_dir: join_paths(gsd_pkgincludedir, meson.project_name())
+)
+
+install_data(
+ 'gnome-settings-daemon.convert',
+ install_dir: join_paths(gsd_datadir, 'GConf', 'gsettings')
+)
+
+pkg.generate(
+ version: gsd_version,
+ name: meson.project_name(),
+ description: meson.project_name() + ' specific enumerations',
+ filebase: meson.project_name(),
+ subdirs: gsd_api_name
+)
diff --git a/gnome-settings-daemon/meson.build b/gnome-settings-daemon/meson.build
new file mode 100644
index 00000000..7039fa53
--- /dev/null
+++ b/gnome-settings-daemon/meson.build
@@ -0,0 +1,41 @@
+sources = files(
+ 'gnome-settings-bus.c',
+ 'gnome-settings-profile.c'
+)
+
+dbus_ifaces = [
+ ['SessionManager', 'gsd-session-manager-glue'],
+ ['ScreenSaver', 'gsd-screen-saver-glue'],
+ ['Shell', 'gsd-shell-glue']
+]
+
+foreach iface: dbus_ifaces
+ name = 'org.gnome.' + iface[0]
+ sources += gnome.gdbus_codegen(
+ iface[1],
+ name + '.xml',
+ interface_prefix: name + '.',
+ namespace: 'Gsd',
+ annotations: [name, 'org.gtk.GDBus.C.Name', iface[0]]
+ )
+endforeach
+
+deps = [gio_unix_dep]
+
+if enable_wayland
+ deps += wayland_client_dep
+endif
+
+libgsd = shared_library(
+ 'gsd',
+ sources: sources,
+ include_directories: top_inc,
+ dependencies: deps,
+ install: true,
+ install_dir: gsd_pkglibdir
+)
+
+libgsd_dep = declare_dependency(
+ include_directories: include_directories('.'),
+ link_with: libgsd
+)
diff --git a/meson.build b/meson.build
new file mode 100644
index 00000000..51334920
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,247 @@
+project(
+ 'gnome-settings-daemon', 'c',
+ version: '3.27.3',
+ license: [ 'GPL2+', 'LGPLv2+' ],
+ meson_version: '>= 0.44.0'
+)
+
+gsd_version = meson.project_version()
+version_array = gsd_version.split('.')
+gsd_major_version = version_array[0].to_int()
+
+gsd_api_version_minor = 0
+gsd_api_version = '@0@.@1@'.format(gsd_major_version, gsd_api_version_minor)
+gsd_api_name = '@0@-@1@'.format(meson.project_name(), gsd_api_version)
+
+gsd_prefix = get_option('prefix')
+gsd_bindir = join_paths(gsd_prefix, get_option('bindir'))
+gsd_datadir = join_paths(gsd_prefix, get_option('datadir'))
+gsd_includedir = join_paths(gsd_prefix, get_option('includedir'))
+gsd_libdir = join_paths(gsd_prefix, get_option('libdir'))
+gsd_libexecdir = join_paths(gsd_prefix, get_option('libexecdir'))
+gsd_localedir = join_paths(gsd_prefix, get_option('localedir'))
+gsd_sysconfdir = join_paths(gsd_prefix, get_option('sysconfdir'))
+
+gsd_pkgdatadir = join_paths(gsd_datadir, meson.project_name())
+gsd_pkgincludedir = join_paths(gsd_includedir, gsd_api_name)
+gsd_pkglibdir = join_paths(gsd_libdir, gsd_api_name)
+
+gsd_schemadir = join_paths(gsd_datadir, 'glib-2.0', 'schemas')
+
+gsd_xdg_autostart = join_paths(gsd_sysconfdir, 'xdg', 'autostart')
+
+host_is_darwin = host_machine.system().contains('darwin')
+host_is_linux = host_machine.system().contains('linux')
+host_is_linux_not_s390 = host_is_linux and not host_machine.cpu().contains('s390')
+
+cc = meson.get_compiler('c')
+
+config_h = configuration_data()
+
+# defines
+set_defines = [
+ ['PACKAGE_NAME', meson.project_name()],
+ ['PACKAGE_VERSION', gsd_version],
+ # i18n
+ ['GETTEXT_PACKAGE', meson.project_name()]
+]
+
+foreach define: set_defines
+ config_h.set_quoted(define[0], define[1])
+endforeach
+
+# compiler flags
+common_flags = ['-DHAVE_CONFIG_H']
+
+if get_option('buildtype').contains('debug')
+ common_flags += ['-DG_ENABLE_DEBUG']
+
+ test_cflags = [
+ '-Wcast-align',
+ '-Wmissing-declarations',
+ '-Wmissing-prototypes',
+ '-Wnested-externs',
+ '-Wno-strict-aliasing',
+ '-Wno-sign-compare',
+ '-Wpointer-arith'
+ ]
+
+ compiler_flags = cc.get_supported_arguments(test_cflags)
+else
+ common_flags += ['-DG_DISABLE_CHECKS']
+endif
+
+# Workaround for meson's bug
+# https://github.com/mesonbuild/meson/pull/1896
+if get_option('b_ndebug') == false
+ common_flags += ['-DG_DISABLE_ASSERT']
+endif
+
+add_project_arguments(common_flags + compiler_flags, language: 'c')
+
+colord_dep = dependency('colord', version: '>= 1.0.2')
+geocode_glib_dep = dependency('geocode-glib-1.0', version: '>= 3.10.0')
+gio_dep = dependency('gio-2.0', version: '>= 2.53.0')
+gio_unix_dep = dependency('gio-unix-2.0')
+gnome_desktop_dep = dependency('gnome-desktop-3.0', version: '>= 3.11.1')
+gsettings_desktop_dep = dependency('gsettings-desktop-schemas', version: '>= 3.23.3')
+gtk_dep = dependency('gtk+-3.0', version: '>= 3.15.3')
+gtk_x11_dep = dependency('gtk+-x11-3.0')
+gweather_dep = dependency('gweather-3.0', version: '>= 3.9.5')
+lcms_dep = dependency('lcms2', version: '>= 2.2')
+libcanberra_gtk_dep = dependency('libcanberra-gtk3')
+libgeoclue_dep = dependency('libgeoclue-2.0', version: '>= 2.3.1')
+libnotify_dep = dependency('libnotify', version: '>= 0.7.3')
+libpulse_mainloop_glib_dep = dependency('libpulse-mainloop-glib', version: '>= 2.0')
+pango_dep = dependency('pango', version: '>= 1.20.0')
+polkit_gobject_dep = dependency('polkit-gobject-1', version: '>= 0.103')
+upower_glib_dep = dependency('upower-glib', version: '>= 0.99.0')
+x11_dep = dependency('x11')
+xtst_dep = dependency('xtst')
+
+m_dep = cc.find_library('m')
+
+# ALSA integration (default enabled)
+enable_alsa = get_option('alsa')
+assert(enable_alsa or not host_is_linux, 'ALSA is not optional on Linux platforms')
+
+libgvc = subproject(
+ 'gvc',
+ default_options: [
+ 'static=true',
+ 'alsa=' + enable_alsa.to_string()
+ ]
+)
+libgvc_dep = libgvc.get_variable('libgvc_dep')
+
+# GUdev integration (default enabled)
+enable_gudev = get_option('gudev')
+if enable_gudev
+ assert(enable_gudev, 'GUdev is not optional on Linux platforms')
+ gudev_dep = dependency('gudev-1.0')
+endif
+config_h.set('HAVE_GUDEV', enable_gudev)
+
+# Check for libwayland-client
+enable_wayland = get_option('wayland')
+if enable_wayland
+ assert(enable_gudev, 'GUDev support is required for wayland support.')
+ wayland_client_dep = dependency('wayland-client')
+endif
+config_h.set10('HAVE_WAYLAND', enable_wayland)
+
+# wacom (disabled for s390/s390x and non Linux platforms)
+enable_wacom = host_is_linux_not_s390
+if enable_wacom
+ assert(enable_gudev, 'GUDev support is required for wacom support.')
+ libwacom_dep = dependency('libwacom', version: '>= 0.7')
+endif
+config_h.set10('HAVE_WACOM', enable_wacom)
+
+# smartcard section
+enable_smartcard = get_option('smartcard')
+if enable_smartcard
+ nss_dep = dependency('nss', version: '>= 3.11.2')
+
+ system_nssdb_dir = get_option('nssdb_dir')
+ if system_nssdb_dir == ''
+ system_nssdb_dir = join_paths(gsd_sysconfdir, 'pki', 'nssdb')
+ endif
+endif
+
+# CUPS
+enable_cups = get_option('cups')
+if enable_cups
+ cups_dep = dependency('cups', version : '>= 1.4', required: false)
+ assert(cups_dep.found(), 'CUPS 1.4 or newer not found')
+
+ # FIXME: 1.6 cflags generate a lot of errors
+ '''
+ cups_cflags = []
+ if cups_dep.version().version_compare('>= 1.6')
+ cups_cflags += '-D_PPD_DEPRECATED=""'
+ endif
+
+ cups_dep = declare_dependency(
+ dependencies: cups_dep,
+ compile_args: cups_cflags
+ )
+ '''
+endif
+
+# Rfkill
+enable_rfkill = get_option('rfkill')
+assert(enable_rfkill or not host_is_linux, 'rfkill is not optional on Linux platforms')
+if enable_rfkill
+ assert(cc.has_header('linux/rfkill.h'), 'rfkill support requested but RFKill headers not found')
+
+ udev_dir = get_option('udev_dir')
+ if udev_dir == ''
+ udev_dir = dependency('udev').get_pkgconfig_variable('udevdir')
+ endif
+endif
+
+# Sharing plugin
+enable_network_manager = get_option('network_manager')
+assert(enable_network_manager or not host_is_linux, 'NetworkManager support is not optional on Linux platforms')
+if enable_network_manager
+ # network manager
+ libnm_dep = dependency('libnm', version: '>= 1.0')
+endif
+config_h.set('HAVE_NETWORK_MANAGER', enable_network_manager)
+
+gnome = import('gnome')
+i18n = import('i18n')
+pkg = import('pkgconfig')
+
+po_dir = join_paths(meson.source_root(), 'po')
+
+intltool_merge = find_program('intltool-merge')
+intltool_cache = join_paths(po_dir, '.intltool-merge-cache')
+intltool_desktop_cmd = [intltool_merge, '-d', '-u', '-c', intltool_cache, po_dir, '@INPUT@', '@OUTPUT@']
+intltool_xml_cmd = [intltool_merge, '-x', '-u', '-c', intltool_cache, po_dir, '@INPUT@', '@OUTPUT@']
+
+top_inc = include_directories('.')
+
+subdir('tests')
+subdir('gnome-settings-daemon')
+subdir('data')
+subdir('plugins')
+subdir('po')
+
+configure_file(
+ output: 'config.h',
+ configuration: config_h
+)
+
+meson.add_install_script(
+ 'meson_post_install.py',
+ gsd_datadir
+)
+
+output = '\n ' + meson.project_name() + ' ' + meson.project_version() +'\n'
+output += ' =============================\n\n'
+output += ' prefix: ' + gsd_prefix + '\n'
+output += ' exec_prefix: ' + gsd_prefix + '\n'
+output += ' libdir: ' + gsd_libdir + '\n'
+output += ' libexecdir: ' + gsd_libexecdir + '\n'
+output += ' bindir: ' + gsd_bindir + '\n'
+output += ' sysconfdir: ' + gsd_sysconfdir + '\n'
+output += ' datadir: ' + gsd_datadir + '\n\n'
+output += ' source code location: ' + meson.source_root() + '\n'
+output += ' compiler: ' + cc.get_id() + '\n'
+output += ' cflags: ' + ' '.join(compiler_flags) + '\n\n'
+output += ' ALSA support: ' + enable_alsa.to_string() + '\n'
+output += ' NetworkManager support: ' + enable_network_manager.to_string() + '\n'
+output += ' Smartcard support: ' + enable_smartcard.to_string() + '\n'
+output += ' Cups support: ' + enable_cups.to_string() + '\n'
+output += ' Wayland support: ' + enable_wayland.to_string() + '\n'
+output += ' Wacom support: ' + enable_wacom.to_string() + '\n'
+output += ' RFKill support: ' + enable_rfkill.to_string() + '\n'
+if enable_smartcard
+ output += ' System nssdb: ' + system_nssdb_dir + '\n'
+endif
+if enable_rfkill
+ output += ' udev dir: ' + udev_dir + '\n'
+endif
+message(output)
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 00000000..50bd1749
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,10 @@
+option('nssdb_dir', type: 'string', value: '', description: 'Absolute path to the system NSS database directory')
+option('udev_dir', type: 'string', value: '', description: 'Absolute path of the udev base directory')
+
+option('alsa', type: 'boolean', value: true, description: 'build with ALSA support (not optional on Linux platforms)')
+option('gudev', type: 'boolean', value: true, description: 'build with gudev device support (not optional on Linux platforms)')
+option('cups', type: 'boolean', value: true, description: 'build with CUPS support')
+option('network_manager', type: 'boolean', value: true, description: 'build with NetworkManager support (not optional on Linux platforms)')
+option('rfkill', type: 'boolean', value: true, description: 'build with rfkill support (not optional on Linux platforms)')
+option('smartcard', type: 'boolean', value: true, description: 'build with smartcard support')
+option('wayland', type: 'boolean', value: true, description: 'build with Wayland support')
diff --git a/meson_post_install.py b/meson_post_install.py
new file mode 100644
index 00000000..6058e73a
--- /dev/null
+++ b/meson_post_install.py
@@ -0,0 +1,11 @@
+#!/usr/bin/env python3
+
+import os
+import subprocess
+import sys
+
+if not os.environ.get('DESTDIR'):
+ schemadir = os.path.join(sys.argv[1], 'glib-2.0', 'schemas')
+
+ print('Compiling gsettings schemas...')
+ subprocess.call(['glib-compile-schemas', schemadir])
diff --git a/plugins/a11y-settings/meson.build b/plugins/a11y-settings/meson.build
new file mode 100644
index 00000000..f088466e
--- /dev/null
+++ b/plugins/a11y-settings/meson.build
@@ -0,0 +1,29 @@
+desktop = 'org.gnome.SettingsDaemon.A11ySettings.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+sources = files(
+ 'gsd-a11y-settings-manager.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [
+ gio_dep,
+ gsettings_desktop_dep
+]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/clipboard/meson.build b/plugins/clipboard/meson.build
new file mode 100644
index 00000000..df25cc7a
--- /dev/null
+++ b/plugins/clipboard/meson.build
@@ -0,0 +1,31 @@
+desktop = 'org.gnome.SettingsDaemon.Clipboard.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+sources = files(
+ 'gsd-clipboard-manager.c',
+ 'list.c',
+ 'main.c',
+ 'xutils.c'
+)
+
+deps = plugins_deps + [
+ gtk_x11_dep,
+ x11_dep
+]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/color/meson.build b/plugins/color/meson.build
new file mode 100644
index 00000000..f026c0a6
--- /dev/null
+++ b/plugins/color/meson.build
@@ -0,0 +1,63 @@
+desktop = 'org.gnome.SettingsDaemon.Color.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+sources = files(
+ 'gcm-edid.c',
+ 'gnome-datetime-source.c',
+ 'gsd-color-calibrate.c',
+ 'gsd-color-manager.c',
+ 'gsd-color-profiles.c',
+ 'gsd-color-state.c',
+ 'gsd-night-light.c',
+ 'gsd-night-light-common.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [
+ colord_dep,
+ gnome_desktop_dep,
+ lcms_dep,
+ libcanberra_gtk_dep,
+ libgeoclue_dep,
+ libnotify_dep,
+ m_dep,
+]
+
+cflags += ['-DBINDIR="@0@"'.format(gsd_bindir)]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
+
+sources = files(
+ 'gcm-edid.c',
+ 'gcm-self-test.c',
+ 'gnome-datetime-source.c',
+ 'gsd-night-light.c',
+ 'gsd-night-light-common.c'
+)
+
+test_unit = 'gcm-self-test'
+
+exe = executable(
+ test_unit,
+ sources,
+ include_directories: top_inc,
+ dependencies: deps,
+ c_args: '-DTESTDATADIR="@0@"'.format(join_paths(meson.current_source_dir(), 'test-data'))
+)
+
+test(test_unit, exe)
diff --git a/plugins/common/meson.build b/plugins/common/meson.build
new file mode 100644
index 00000000..2a0f4b28
--- /dev/null
+++ b/plugins/common/meson.build
@@ -0,0 +1,89 @@
+common_inc = include_directories('.')
+
+sources = files(
+ 'gsd-device-manager.c',
+ 'gsd-device-manager-x11.c',
+ 'gsd-device-mapper.c',
+ 'gsd-input-helper.c',
+ 'gsd-settings-migrate.c',
+ 'gsd-shell-helper.c'
+)
+
+enums_header = 'gsd-device-manager.h'
+
+enums = 'gsd-common-enums'
+
+sources += gnome.mkenums(
+ enums + '.h',
+ sources: enums_header,
+ fhead: '#ifndef GSD_COMMON_ENUMS_H\n#define GSD_COMMON_ENUMS_H\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n',
+ fprod: '/* enumerations from "@filename@" */\n',
+ vhead: 'GType @enum_name@_get_type (void) G_GNUC_CONST;\n#define GSD_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n',
+ ftail: 'G_END_DECLS\n\n#endif /* !GSD_COMMON_ENUMS_H */'
+)
+
+sources += gnome.mkenums(
+ enums + '.c',
+ sources: enums_header,
+ fhead: '#include "gsd-device-manager.h"\n#include "gsd-common-enums.h"\n',
+ fprod: '\n/* enumerations from "@filename@" */',
+ vhead: 'GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {',
+ vprod: ' { @VALUENAME@, "@VALUENAME@", "@valuenick@" },',
+ vtail: ' { 0, NULL, NULL }\n };\n etype = g_@type@_register_static ("@EnumName@", values);\n }\n return etype;\n}\n'
+)
+
+resource_data = files('gtk.css')
+
+sources += gnome.compile_resources(
+ 'gsd-resources',
+ 'gsd.gresources.xml',
+ c_name: 'gsd',
+ dependencies: resource_data
+)
+
+deps = plugins_deps + [
+ gnome_desktop_dep,
+ gtk_x11_dep,
+ x11_dep,
+ dependency('kbproto'),
+ dependency('xi')
+]
+
+ldflags = []
+if host_is_darwin
+ ldflags += ['-Wl,-bundle_loader,@0@'.format(join_paths(), meson.build_root(), meson.project_name(), meson.project_name())]
+endif
+
+if enable_gudev
+ sources += files('gsd-device-manager-udev.c')
+
+ deps += gudev_dep
+endif
+
+if enable_wacom
+ deps += libwacom_dep
+endif
+
+libcommon = shared_module(
+ plugin_name,
+ sources: sources,
+ include_directories: [top_inc, data_inc],
+ dependencies: deps,
+ c_args: cflags,
+ link_args: ldflags
+)
+
+libcommon_dep = declare_dependency(
+ include_directories: common_inc,
+ link_with: libcommon
+)
+
+executable(
+ 'gsd-test-input-helper',
+ 'test-input-helper.c',
+ include_directories: top_inc,
+ dependencies: gtk_dep,
+ link_with: libcommon,
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/datetime/meson.build b/plugins/datetime/meson.build
new file mode 100644
index 00000000..a21d48f4
--- /dev/null
+++ b/plugins/datetime/meson.build
@@ -0,0 +1,49 @@
+desktop = 'org.gnome.SettingsDaemon.Datetime.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+install_data(
+ 'backward',
+ install_dir: join_paths(gsd_pkgdatadir, 'datetime')
+)
+
+sources = files(
+ 'gsd-datetime-manager.c',
+ 'gsd-timezone-monitor.c',
+ 'main.c',
+ 'tz.c',
+ 'weather-tz.c'
+)
+
+sources += gnome.gdbus_codegen(
+ 'timedated',
+ 'timedated1-interface.xml',
+ interface_prefix: 'org.freedesktop.'
+)
+
+deps = plugins_deps + [
+ geocode_glib_dep,
+ gweather_dep,
+ libgeoclue_dep,
+ libnotify_dep,
+ m_dep,
+ polkit_gobject_dep
+]
+
+cflags += ['-DGNOMECC_DATA_DIR="@0@"'.format(gsd_pkgdatadir)]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/dummy/meson.build b/plugins/dummy/meson.build
new file mode 100644
index 00000000..a4e76187
--- /dev/null
+++ b/plugins/dummy/meson.build
@@ -0,0 +1,47 @@
+desktops = []
+if not enable_smartcard
+ desktops += ['org.gnome.SettingsDaemon.Smartcard']
+endif
+
+if not enable_cups
+ desktops += ['org.gnome.SettingsDaemon.PrintNotifications']
+endif
+
+if not enable_rfkill
+ desktops += ['org.gnome.SettingsDaemon.Rfkill']
+endif
+
+if not enable_wacom
+ desktops += ['org.gnome.SettingsDaemon.Wacom']
+endif
+
+foreach desktop: desktops
+ dummy_conf = configuration_data()
+ dummy_conf.set('libexecdir', gsd_libexecdir)
+ dummy_conf.set('pluginname', desktop)
+
+ configure_file(
+ input: 'org.gnome.SettingsDaemon.Dummy.desktop.in',
+ output: desktop + '.desktop',
+ configuration: dummy_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+ )
+endforeach
+
+sources = files(
+ 'gsd-dummy-manager.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [gio_dep]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/housekeeping/meson.build b/plugins/housekeeping/meson.build
new file mode 100644
index 00000000..bc743705
--- /dev/null
+++ b/plugins/housekeeping/meson.build
@@ -0,0 +1,49 @@
+desktop = 'org.gnome.SettingsDaemon.Housekeeping.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+common_files = files(
+ 'gsd-disk-space.c',
+ 'gsd-disk-space-helper.c'
+)
+
+sources = common_files + files(
+ 'gsd-housekeeping-manager.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [
+ gtk_dep,
+ libnotify_dep
+]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
+
+programs = [
+ 'gsd-disk-space-test',
+ 'gsd-empty-trash-test',
+ 'gsd-purge-temp-test'
+]
+
+foreach program: programs
+ executable(
+ program,
+ common_files + [program + '.c'],
+ include_directories: top_inc,
+ dependencies: deps
+ )
+endforeach
diff --git a/plugins/keyboard/meson.build b/plugins/keyboard/meson.build
new file mode 100644
index 00000000..413424a5
--- /dev/null
+++ b/plugins/keyboard/meson.build
@@ -0,0 +1,30 @@
+desktop = 'org.gnome.SettingsDaemon.Keyboard.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+sources = files(
+ 'gsd-keyboard-manager.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [
+ gtk_dep,
+ libcommon_dep,
+ x11_dep
+]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, data_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/media-keys/meson.build b/plugins/media-keys/meson.build
new file mode 100644
index 00000000..18696e96
--- /dev/null
+++ b/plugins/media-keys/meson.build
@@ -0,0 +1,66 @@
+desktop = 'org.gnome.SettingsDaemon.MediaKeys.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+sources = files(
+ 'bus-watch-namespace.c',
+ 'gsd-media-keys-manager.c',
+ 'gsd-screenshot-utils.c',
+ 'main.c',
+ 'mpris-controller.c'
+)
+
+marshal = 'gsd-marshal'
+
+sources += gnome.genmarshal(
+ marshal,
+ sources: marshal + '.list',
+ prefix: marshal.underscorify(),
+ internal: true
+)
+
+sources += gnome.gdbus_codegen(
+ 'shell-key-grabber',
+ 'org.gnome.ShellKeyGrabber.xml',
+ interface_prefix: 'org.gnome.',
+ namespace: 'Shell'
+)
+
+deps = plugins_deps + [
+ gsettings_desktop_dep,
+ libcanberra_gtk_dep,
+ libcommon_dep,
+ libgvc_dep,
+ libpulse_mainloop_glib_dep,
+ m_dep,
+ upower_glib_dep
+]
+
+if enable_gudev
+ deps += gudev_dep
+endif
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, data_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
+
+program = 'audio-selection-test'
+
+executable(
+ program,
+ program + '.c',
+ include_directories: top_inc,
+ dependencies: deps
+)
diff --git a/plugins/meson.build b/plugins/meson.build
new file mode 100644
index 00000000..6babd8ec
--- /dev/null
+++ b/plugins/meson.build
@@ -0,0 +1,48 @@
+enabled_plugins = [
+ 'a11y-settings',
+ 'clipboard',
+ 'color',
+ 'datetime',
+ 'dummy',
+ 'power',
+ 'housekeeping',
+ 'keyboard',
+ 'media-keys',
+ 'mouse',
+ 'screensaver-proxy',
+ 'sharing',
+ 'sound',
+ 'xsettings'
+]
+
+if enable_smartcard
+ enabled_plugins += ['smartcard']
+endif
+
+if enable_wacom
+ enabled_plugins += ['wacom']
+endif
+
+if enable_cups
+ enabled_plugins += ['print-notifications']
+endif
+
+if enable_rfkill
+ enabled_plugins += ['rfkill']
+endif
+
+plugins_conf = configuration_data()
+plugins_conf.set('libexecdir', gsd_libexecdir)
+
+plugins_deps = [libgsd_dep]
+
+plugins_cflags = ['-DGNOME_SETTINGS_LOCALEDIR="@0@"'.format(gsd_localedir)]
+
+foreach plugin_name: ['common'] + enabled_plugins
+ cflags = [
+ '-DG_LOG_DOMAIN="@0@-plugin"'.format(plugin_name),
+ '-DPLUGIN_NAME="@0@"'.format(plugin_name),
+ ] + plugins_cflags
+
+ subdir(plugin_name)
+endforeach
diff --git a/plugins/mouse/meson.build b/plugins/mouse/meson.build
new file mode 100644
index 00000000..a01d2758
--- /dev/null
+++ b/plugins/mouse/meson.build
@@ -0,0 +1,53 @@
+desktop = 'org.gnome.SettingsDaemon.Mouse.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+sources = files(
+ 'gsd-mouse-manager.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [
+ gio_dep,
+ gsettings_desktop_dep,
+ libcommon_dep,
+ m_dep
+]
+
+cflags += ['-DLIBEXECDIR="@0@"'.format(gsd_libexecdir)]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, data_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
+
+sources = files(
+ 'gsd-locate-pointer.c',
+ 'gsd-timeline.c'
+)
+
+deps = [
+ gtk_dep,
+ m_dep,
+ x11_dep
+]
+
+executable(
+ 'gsd-locate-pointer',
+ sources,
+ include_directories: top_inc,
+ dependencies: deps,
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/power/meson.build b/plugins/power/meson.build
new file mode 100644
index 00000000..652ce40c
--- /dev/null
+++ b/plugins/power/meson.build
@@ -0,0 +1,154 @@
+desktop = 'org.gnome.SettingsDaemon.Power.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+sources = files(
+ 'gpm-common.c',
+ 'gsd-backlight-linux.c',
+ 'gsd-power-manager.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [
+ libcanberra_gtk_dep,
+ libcommon_dep,
+ libnotify_dep,
+ gnome_desktop_dep,
+ m_dep,
+ upower_glib_dep,
+ x11_dep,
+ xtst_dep,
+ dependency('xext')
+]
+
+if enable_gudev
+ deps += gudev_dep
+endif
+
+cflags += ['-DLIBEXECDIR="@0@"'.format(gsd_libexecdir)]
+
+gsd_power = executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, data_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
+
+sources = files('gsd-power-enums-update.c')
+
+enums_headers = files(
+ 'gsm-inhibitor-flag.h',
+ 'gsm-presence-flag.h'
+)
+
+enums = 'gsd-power-enums'
+
+sources += gnome.mkenums(
+ enums + '.h',
+ sources: enums_headers,
+ fhead: '#ifndef GSD_POWER_ENUMS_H\n#define GSD_POWER_ENUMS_H\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n',
+ fprod: '/* enumerations from "@filename@" */\n',
+ vhead: 'GType @enum_name@_get_type (void) G_GNUC_CONST;\n#define GSD_POWER_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n',
+ ftail: 'G_END_DECLS\n\n#endif /* !GSD_POWER_ENUMS_H */'
+)
+
+sources += gnome.mkenums(
+ enums + '.c',
+ sources: enums_headers,
+ fhead: '#include "gsm-inhibitor-flag.h"\n#include "gsm-presence-flag.h"\n#include "gsd-power-enums.h"',
+ fprod: '\n/* enumerations from "@filename@" */',
+ vhead: 'GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {',
+ vprod: ' { @VALUENAME@, "@VALUENAME@", "@valuenick@" },',
+ vtail: ' { 0, NULL, NULL }\n };\n etype = g_@type@_register_static ("@EnumName@", values);\n }\n return etype;\n}\n'
+)
+
+gsd_power_enums_update = executable(
+ 'gsd-power-enums-update',
+ sources,
+ include_directories: top_inc,
+ dependencies: deps,
+ c_args: cflags
+)
+
+if enable_gudev
+ policy = 'org.gnome.settings-daemon.plugins.power.policy'
+
+ policy_in = configure_file(
+ input: policy + '.in.in',
+ output: policy + '.in',
+ configuration: plugins_conf
+ )
+
+ custom_target(
+ policy,
+ input: policy_in,
+ output: policy,
+ command: intltool_xml_cmd,
+ install: true,
+ install_dir: join_paths(gsd_datadir, 'polkit-1', 'actions')
+ )
+
+ sources = files(
+ 'gsd-backlight-helper.c',
+ 'gsd-backlight-linux.c'
+ )
+
+ deps = [
+ gudev_dep,
+ m_dep
+ ]
+
+ executable(
+ 'gsd-backlight-helper',
+ sources,
+ include_directories: top_inc,
+ dependencies: deps,
+ install: true,
+ install_dir: gsd_libexecdir
+ )
+endif
+
+output = 'gsdpowerconstants.py'
+
+gsdpowerconstants_py = custom_target(
+ output,
+ input: 'gsd-power-constants.h',
+ output: output,
+ build_by_default: true,
+ command: [join_paths(meson.current_source_dir(), 'gsd-power-constants-update.pl'), '@INPUT@', '@OUTPUT@']
+)
+
+output = 'gsdpowerenums.py'
+
+gsdpowerenums_py = custom_target(
+ output,
+ output: output,
+ capture: true,
+ build_by_default: true,
+ command: [gsd_power_enums_update]
+)
+
+test_py = find_program('test.py')
+
+envs = [
+ 'BUILDDIR=' + meson.current_build_dir(),
+ 'TOP_BUILDDIR=' + meson.build_root()
+]
+
+test(
+ 'test-power',
+ test_py,
+# args: 'PowerPluginTest.test_sleep_inactive_blank',
+ env: envs,
+ timeout: 300
+)
+
diff --git a/plugins/print-notifications/meson.build b/plugins/print-notifications/meson.build
new file mode 100644
index 00000000..241f305b
--- /dev/null
+++ b/plugins/print-notifications/meson.build
@@ -0,0 +1,44 @@
+desktop = 'org.gnome.SettingsDaemon.PrintNotifications.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+sources = files(
+ 'gsd-print-notifications-manager.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [
+ cups_dep,
+ gtk_dep,
+ libnotify_dep
+]
+
+cflags += ['-DLIBEXECDIR="@0@"'.format(gsd_libexecdir)]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
+
+program = 'gsd-printer'
+
+executable(
+ program,
+ program + '.c',
+ include_directories: top_inc,
+ dependencies: deps,
+ c_args: '-DGNOME_SETTINGS_LOCALEDIR="@0@"'.format(gsd_localedir),
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/rfkill/meson.build b/plugins/rfkill/meson.build
new file mode 100644
index 00000000..8a4d094d
--- /dev/null
+++ b/plugins/rfkill/meson.build
@@ -0,0 +1,32 @@
+desktop = 'org.gnome.SettingsDaemon.Rfkill.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+install_data(
+ '61-gnome-settings-daemon-rfkill.rules',
+ install_dir: join_paths(udev_dir, 'rules.d')
+)
+
+sources = files(
+ 'gsd-rfkill-manager.c',
+ 'rfkill-glib.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [gio_unix_dep]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/screensaver-proxy/meson.build b/plugins/screensaver-proxy/meson.build
new file mode 100644
index 00000000..dda0fed4
--- /dev/null
+++ b/plugins/screensaver-proxy/meson.build
@@ -0,0 +1,26 @@
+desktop = 'org.gnome.SettingsDaemon.ScreensaverProxy.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+sources = files(
+ 'gsd-screensaver-proxy-manager.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [gio_dep]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/sharing/meson.build b/plugins/sharing/meson.build
new file mode 100644
index 00000000..5ab82652
--- /dev/null
+++ b/plugins/sharing/meson.build
@@ -0,0 +1,33 @@
+desktop = 'org.gnome.SettingsDaemon.Sharing.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+sources = files(
+ 'gsd-sharing-manager.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [
+ gio_unix_dep,
+ libnotify_dep
+]
+
+if enable_network_manager
+ deps += libnm_dep
+endif
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/smartcard/meson.build b/plugins/smartcard/meson.build
new file mode 100644
index 00000000..da256e25
--- /dev/null
+++ b/plugins/smartcard/meson.build
@@ -0,0 +1,58 @@
+desktop = 'org.gnome.SettingsDaemon.Smartcard.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+sources = files(
+ 'gsd-smartcard-manager.c',
+ 'gsd-smartcard-service.c',
+ 'gsd-smartcard-utils.c',
+ 'main.c'
+)
+
+enum_headers = files(
+ 'gsd-smartcard-manager.h',
+ 'gsd-smartcard-utils.h'
+)
+
+enum_types = 'gsd-smartcard-enum-types'
+
+sources += gnome.mkenums(
+ enum_types,
+ sources: enum_headers,
+ c_template: enum_types + '.c.in',
+ h_template: enum_types + '.h.in'
+)
+
+gdbus = 'org.gnome.SettingsDaemon.Smartcard'
+
+sources += gnome.gdbus_codegen(
+ gdbus,
+ gdbus + '.xml',
+ interface_prefix: gdbus + '.',
+ namespace: 'GsdSmartcardService',
+ object_manager: true
+)
+
+deps = plugins_deps + [
+ gio_unix_dep,
+ libnotify_dep,
+ nss_dep
+]
+
+cflags += ['-DGSD_SMARTCARD_MANAGER_NSS_DB="@0@"'.format(system_nssdb_dir)]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/sound/meson.build b/plugins/sound/meson.build
new file mode 100644
index 00000000..acba4371
--- /dev/null
+++ b/plugins/sound/meson.build
@@ -0,0 +1,29 @@
+desktop = 'org.gnome.SettingsDaemon.Sound.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+sources = files(
+ 'gsd-sound-manager.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [
+ gio_dep,
+ libpulse_mainloop_glib_dep
+]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
diff --git a/plugins/wacom/meson.build b/plugins/wacom/meson.build
new file mode 100644
index 00000000..064b5764
--- /dev/null
+++ b/plugins/wacom/meson.build
@@ -0,0 +1,74 @@
+desktop = 'org.gnome.SettingsDaemon.Wacom.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+policy = 'org.gnome.settings-daemon.plugins.wacom.policy'
+
+policy_in = configure_file(
+ input: policy + '.in.in',
+ output: policy + '.in',
+ configuration: plugins_conf
+)
+
+custom_target(
+ policy,
+ input: policy_in,
+ output: policy,
+ command: intltool_xml_cmd,
+ install: true,
+ install_dir: join_paths(gsd_datadir, 'polkit-1', 'actions')
+)
+
+sources = files(
+ 'gsd-wacom-manager.c',
+ 'gsd-wacom-oled.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [
+ gtk_dep,
+ libcommon_dep,
+ m_dep,
+ pango_dep
+]
+
+cflags += ['-DLIBEXECDIR="@0@"'.format(gsd_libexecdir)]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, data_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
+
+if enable_gudev
+ deps = [
+ gudev_dep,
+ m_dep
+ ]
+
+ programs = [
+ 'gsd-wacom-led-helper',
+ 'gsd-wacom-oled-helper',
+ ]
+
+ foreach program: programs
+ executable(
+ program,
+ program + '.c',
+ include_directories: top_inc,
+ dependencies: deps,
+ install: true,
+ install_dir: gsd_libexecdir
+ )
+ endforeach
+endif
diff --git a/plugins/xsettings/meson.build b/plugins/xsettings/meson.build
new file mode 100644
index 00000000..6cfb8f7a
--- /dev/null
+++ b/plugins/xsettings/meson.build
@@ -0,0 +1,57 @@
+desktop = 'org.gnome.SettingsDaemon.XSettings.desktop'
+
+configure_file(
+ input: desktop + '.in',
+ output: desktop,
+ configuration: plugins_conf,
+ install: true,
+ install_dir: gsd_xdg_autostart
+)
+
+gsd_xsettings_gtk = files('gsd-xsettings-gtk.c')
+
+fc_monitor = files('fc-monitor.c')
+
+wm_button_layout_translation = files('wm-button-layout-translation.c')
+
+sources = gsd_xsettings_gtk + fc_monitor + wm_button_layout_translation + files(
+ 'gsd-remote-display-manager.c',
+ 'gsd-xsettings-manager.c',
+ 'xsettings-common.c',
+ 'xsettings-manager.c',
+ 'main.c'
+)
+
+deps = plugins_deps + [
+ gtk_dep,
+ x11_dep,
+ dependency('fontconfig')
+]
+
+cflags += ['-DGTK_MODULES_DIRECTORY="@0@"'.format(join_paths(gsd_pkglibdir, 'gtk-modules'))]
+
+executable(
+ 'gsd-' + plugin_name,
+ sources,
+ include_directories: [top_inc, common_inc, data_inc],
+ dependencies: deps,
+ c_args: cflags,
+ install: true,
+ install_dir: gsd_libexecdir
+)
+
+programs = [
+ ['test-gtk-modules', gsd_xsettings_gtk + ['test-gtk-modules.c'], cflags],
+ ['test-fontconfig-monitor', fc_monitor, cflags + ['-DFONTCONFIG_MONITOR_TEST']],
+ ['test-wm-button-layout-translations', wm_button_layout_translation + ['test-wm-button-layout-translations.c'], []]
+]
+
+foreach program: programs
+ executable(
+ program[0],
+ program[1],
+ include_directories: top_inc,
+ dependencies: deps,
+ c_args: program[2]
+ )
+endforeach
diff --git a/po/meson.build b/po/meson.build
new file mode 100644
index 00000000..e9b77d79
--- /dev/null
+++ b/po/meson.build
@@ -0,0 +1 @@
+i18n.gettext(meson.project_name(), preset: 'glib')
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 00000000..1c29c48e
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,11 @@
+deps = [
+ x11_dep,
+ xtst_dep
+]
+
+exe = executable(
+ 'shiftkey',
+ 'shiftkey.c',
+ include_directories: top_inc,
+ dependencies: deps
+)