summaryrefslogtreecommitdiffstats
path: root/meson.build
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--meson.build285
1 files changed, 285 insertions, 0 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..80eabe5
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,285 @@
+project(
+ 'gnome-settings-daemon', 'c',
+ version: '3.38.2',
+ license: [ 'GPL2+', 'LGPLv2+' ],
+ meson_version: '>= 0.47.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)
+
+glib_min_version = '2.56'
+
+glib_version_def = 'GLIB_VERSION_@0@_@1@'.format(
+ glib_min_version.split('.')[0], glib_min_version.split('.')[1])
+
+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')
+
+gsd_buildtype = get_option('buildtype')
+
+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']
+compiler_flags = []
+
+if gsd_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',
+ '-DGLIB_VERSION_MIN_REQUIRED=' + glib_version_def,
+ '-DGLIB_VERSION_MAX_ALLOWED=' + glib_version_def,
+ ]
+
+ compiler_flags = cc.get_supported_arguments(test_cflags)
+elif gsd_buildtype.contains('release')
+ common_flags += ['-DG_DISABLE_CAST_CHECKS']
+endif
+
+# Workaround for meson's bug
+# https://github.com/mesonbuild/meson/pull/1896
+if get_option('b_ndebug') == true
+ common_flags += ['-DG_DISABLE_ASSERT']
+endif
+
+add_project_arguments(common_flags + compiler_flags, language: 'c')
+
+glib_dep = dependency('glib-2.0', version: '>=' + glib_min_version)
+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.34.2')
+gsettings_desktop_dep = dependency('gsettings-desktop-schemas', version: '>= 3.35.91')
+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.114')
+upower_glib_dep = dependency('upower-glib', version: '>= 0.99.8')
+x11_dep = dependency('x11')
+
+enable_systemd = get_option('systemd')
+if enable_systemd
+ systemd_dep = dependency('systemd', version: '>= 243', required: false)
+ assert(systemd_dep.found(), 'Systemd support explicitly required, but systemd not found')
+
+ systemd_userunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir',
+ define_variable: ['prefix', gsd_prefix])
+endif
+
+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
+ gudev_dep = dependency('gudev-1.0')
+endif
+config_h.set10('HAVE_GUDEV', enable_gudev)
+if host_is_linux
+ assert(enable_gudev, 'GUdev is not optional on Linux platforms')
+endif
+
+has_timerfd_create = cc.has_function('timerfd_create')
+config_h.set10('HAVE_TIMERFD', has_timerfd_create)
+
+# Check for wayland dependencies
+enable_wayland = get_option('wayland')
+if enable_wayland
+ assert(enable_gudev, 'GUDev support is required for wayland support.')
+ wayland_client_dep = dependency('wayland-client')
+ wayland_gdk_dep = dependency('gdk-wayland-3.0')
+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
+
+enable_usb_protection = get_option('usb-protection')
+
+# 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')
+ assert(enable_gudev, 'GUdev is required for rfkill support')
+
+ udev_dir = get_option('udev_dir')
+ if udev_dir == ''
+ udev_dir = dependency('udev').get_pkgconfig_variable('udevdir')
+ endif
+endif
+
+# wwan
+enable_wwan = get_option('wwan')
+if enable_wwan
+ gcr_base_dep = dependency('gcr-base-3', version: '>= 3.7.5')
+ mm_glib_dep = dependency('mm-glib', version: '>= 1.0')
+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.set10('HAVE_NETWORK_MANAGER', enable_network_manager)
+
+# colord
+enable_colord = get_option('colord')
+if enable_colord
+ colord_dep = dependency('colord', version: '>= 1.3.5')
+endif
+
+gnome = import('gnome')
+i18n = import('i18n')
+pkg = import('pkgconfig')
+
+po_dir = join_paths(meson.source_root(), 'po')
+
+top_inc = include_directories('.')
+
+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 += ' USB Protection support: ' + enable_usb_protection.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_systemd
+ output += ' Systemd user unit dir: ' + systemd_userunitdir + '\n'
+endif
+if enable_rfkill
+ output += ' udev dir: ' + udev_dir + '\n'
+endif
+message(output)