[gnome-desktop/wip/fmuellner/meson: 1/4] build: Support the meson build system



commit 318fdee5f389af56cf262b0adbea7dc0504878e5
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu Aug 2 03:15:24 2018 +0200

    build: Support the meson build system
    
    Yay, one more module off the list!
    
    https://gitlab.gnome.org/GNOME/gnome-desktop/merge_requests/7

 config.h.meson                            |  23 +++++
 desktop-docs/fdl/meson.build              |   1 +
 desktop-docs/gpl/meson.build              |   1 +
 desktop-docs/lgpl/meson.build             |   1 +
 docs/reference/gnome-desktop3/meson.build |  16 ++++
 libgnome-desktop/meson.build              | 141 ++++++++++++++++++++++++++++++
 meson.build                               | 135 ++++++++++++++++++++++++++++
 meson_options.txt                         |  30 +++++++
 po/meson.build                            |   1 +
 tests/meson.build                         |  45 ++++++++++
 tests/meta.test.in                        |   4 +
 11 files changed, 398 insertions(+)
---
diff --git a/config.h.meson b/config.h.meson
new file mode 100644
index 00000000..2c72485a
--- /dev/null
+++ b/config.h.meson
@@ -0,0 +1,23 @@
+/* The gettext translation domain */
+#mesondefine GETTEXT_PACKAGE
+
+/* Path to library install prefix */
+#mesondefine INSTALL_PREFIX
+
+/* Define if using seccomp */
+#mesondefine ENABLE_SECCOMP
+
+/* Define to 1 if Bubblewrap support is available */
+#mesondefine HAVE_BWRAP
+
+/* we have the timerfd_create(2) system call */
+#mesondefine HAVE_TIMERFD
+#
+/* Define to 1 if you have the `openat' function. */
+#mesondefine HAVE_OPENAT
+
+/* define if udev is available */
+#mesondefine HAVE_UDEV
+
+/* Define to include GNU extensions */
+#mesondefine _GNU_SOURCE
diff --git a/desktop-docs/fdl/meson.build b/desktop-docs/fdl/meson.build
new file mode 100644
index 00000000..478a8d55
--- /dev/null
+++ b/desktop-docs/fdl/meson.build
@@ -0,0 +1 @@
+gnome.yelp('fdl', sources: 'index.docbook')
diff --git a/desktop-docs/gpl/meson.build b/desktop-docs/gpl/meson.build
new file mode 100644
index 00000000..4d545e9a
--- /dev/null
+++ b/desktop-docs/gpl/meson.build
@@ -0,0 +1 @@
+gnome.yelp('gpl', sources: 'index.docbook')
diff --git a/desktop-docs/lgpl/meson.build b/desktop-docs/lgpl/meson.build
new file mode 100644
index 00000000..59db6e58
--- /dev/null
+++ b/desktop-docs/lgpl/meson.build
@@ -0,0 +1 @@
+gnome.yelp('lgpl', sources: 'index.docbook')
diff --git a/docs/reference/gnome-desktop3/meson.build b/docs/reference/gnome-desktop3/meson.build
new file mode 100644
index 00000000..cd89ae7c
--- /dev/null
+++ b/docs/reference/gnome-desktop3/meson.build
@@ -0,0 +1,16 @@
+ignored_headers = [
+  'gnome-rr-private.h',
+  'libgsystem',
+  'meta-dbus-idle-monitor.h',
+  'meta-dbus-xrandr.h',
+  'meta-xrandr-shared.h'
+]
+
+gnome.gtkdoc('gnome-desktop3',
+  main_sgml: 'gnome-desktop3-docs.sgml',
+  ignore_headers: ignored_headers,
+  scan_args: '--deprecated-guards="GNOME_DISABLE_DEPRECATED"',
+  mkdb_args: ['--sgml-mode', '--output-format=xml'],
+  src_dir: join_paths(meson.source_root(), 'libgnome-desktop'),
+  install: true
+)
diff --git a/libgnome-desktop/meson.build b/libgnome-desktop/meson.build
new file mode 100644
index 00000000..4bc7bdb8
--- /dev/null
+++ b/libgnome-desktop/meson.build
@@ -0,0 +1,141 @@
+libargs = [
+  '-DG_LOG_DOMAIN="GnomeDesktop"',
+  '-DGDK_DISABLE_DEPRECATION_WARNINGS',
+  '-DGTK_DISABLE_DEPRECATION_WARNINGS',
+  '-DGNOMELOCALEDIR="@0@"'.format(localedir),
+  '-DLIBLOCALEDIR="@0@"'.format(liblocaledir),
+  '-DISO_CODES_PREFIX="@0@"'.format(iso_codes_prefix),
+  '-DXKB_BASE="@0@"'.format(xkb_base)
+]
+
+introspection_sources = [
+  'gnome-desktop-thumbnail.c',
+  'gnome-bg.c',
+  'gnome-bg-slide-show.c',
+  'gnome-bg-crossfade.c',
+  'gnome-rr.c',
+  'gnome-rr-config.c',
+  'gnome-rr-output-info.c',
+  'gnome-pnp-ids.c',
+  'gnome-wall-clock.c',
+  'gnome-xkb-info.c',
+  'gnome-idle-monitor.c',
+  'gnome-languages.c'
+]
+
+dbus_xrandr_built_sources = gnome.gdbus_codegen('meta-dbus-xrandr',
+  'xrandr.xml',
+  namespace: 'MetaDBus',
+  interface_prefix: 'org.gnome.Mutter'
+)
+
+dbus_idle_built_sources = gnome.gdbus_codegen('meta-dbus-idle-monitor',
+  'idle-monitor.xml',
+  namespace: 'MetaDBus',
+  interface_prefix: 'org.gnome.Mutter',
+  object_manager: true
+)
+
+libgnome_desktop_sources = [
+  introspection_sources,
+  dbus_xrandr_built_sources,
+  dbus_idle_built_sources,
+  'gnome-datetime-source.h',
+  'gnome-datetime-source.c',
+  'gnome-rr-private.h',
+  'default-input-sources.h',
+  'meta-xrandr-shared.h',
+  'gnome-desktop-thumbnail-script.c',
+  'gnome-desktop-thumbnail-script.h'
+]
+
+libgnome_desktop_headers = [
+  'gnome-bg.h',
+  'gnome-bg-crossfade.h',
+  'gnome-bg-slide-show.h',
+  'gnome-desktop-thumbnail.h',
+  'gnome-rr.h',
+  'gnome-rr-config.h',
+  'gnome-pnp-ids.h',
+  'gnome-wall-clock.h',
+  'gnome-xkb-info.h',
+  'gnome-idle-monitor.h',
+  'gnome-languages.h'
+]
+
+install_headers(libgnome_desktop_headers,
+  subdir: 'gnome-desktop-3.0/libgnome-desktop'
+)
+
+gnome_desktop_deps = [
+  config_h,
+  gdk_pixbuf_dep,
+  gtk_dep,
+  glib_dep,
+  gio_dep,
+  gio_unix_dep,
+  schemas_dep,
+  xkb_config_dep,
+  iso_codes_dep,
+  udev_dep,
+  seccomp_dep
+]
+
+libgnome_desktop = library('gnome-desktop-3',
+  libgnome_desktop_sources,
+  dependencies: [gnome_desktop_deps, m_dep, rt_dep, x_dep],
+  soversion: soversion,
+  c_args: libargs,
+  install: true
+)
+
+libgnome_desktop_dep = declare_dependency(
+  dependencies: gnome_desktop_deps,
+  link_with: libgnome_desktop
+)
+
+gnome.generate_gir(libgnome_desktop,
+  sources: introspection_sources + libgnome_desktop_headers,
+  export_packages: 'gnome-desktop-3.0',
+  namespace: 'GnomeDesktop',
+  nsversion: '3.0',
+  includes: ['GObject-2.0', 'Gtk-3.0', 'GDesktopEnums-3.0'],
+  extra_args: '-DGNOME_DESKTOP_USE_UNSTABLE_API',
+  identifier_prefix: 'Gnome',
+  symbol_prefix: 'gnome',
+  install: true
+)
+
+desktop_pc = pkg.generate(
+  libraries: libgnome_desktop,
+  requires: ['gtk+-3.0', 'gsettings-desktop-schemas'],
+  version: meson.project_version(),
+  name: 'gnome-desktop-3.0',
+  filebase: 'gnome-desktop-3.0',
+  description: 'Utility library for loading .desktop files',
+  subdirs: 'gnome-desktop-3.0'
+)
+
+if get_option('debug_tools')
+  executable('gnome-rr-debug',
+    sources: 'gnome-rr-debug.c',
+    dependencies: libgnome_desktop_dep,
+    install_dir: libexecdir,
+    install: true
+  )
+endif
+
+test_programs = [
+  'test-xkb-info',
+  'test-pnp-ids',
+  'test-wall-clock',
+  'test-desktop-thumbnail',
+  'test-idle-monitor',
+  'test-languages'
+]
+
+foreach program : test_programs
+  executable(program, program + '.c',
+    dependencies: libgnome_desktop_dep
+  )
+endforeach
diff --git a/meson.build b/meson.build
new file mode 100644
index 00000000..2f949f47
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,135 @@
+project('gnome-desktop', 'c',
+  meson_version: '>= 0.47.0',
+  version: '3.29.90.1',
+  license: ['GPL2+', 'LGPL2+']
+)
+
+# Before making a release, the soversion string should be modified.
+# The string is of the form C.A.R.
+# - If interfaces have been changed or added, but binary compatibility has
+#   been preserved, change to C+1.A+1.0
+# - If binary compatibility has been broken (eg removed or changed interfaces)
+#   change to C+1.0.0
+# - If the interface is the same as the previous version, change to C.A.R+1
+
+soversion = '17.0.2'
+
+gdk_pixbuf_req = '>= 2.36.5'
+gtk_req = '>= 3.3.6'
+glib_req = '>= 2.53.0'
+xrandr_req = '>= 1.3'
+schemas_req = '>= 3.27.0'
+xext_req = '>= 1.1'
+
+gnome = import('gnome')
+i18n = import('i18n')
+pkg = import('pkgconfig')
+
+prefix = get_option('prefix')
+
+datadir = join_paths(prefix, get_option('datadir'))
+libexecdir = join_paths(prefix, get_option('libexecdir'))
+
+liblocaledir = join_paths(get_option('prefix'), 'lib', 'locale')
+localedir = join_paths(datadir, 'locale')
+test_metadir = join_paths(datadir, 'installed-tests', meson.project_name())
+test_execdir = join_paths(libexecdir, 'installed-tests', meson.project_name())
+versiondir = join_paths(datadir, 'gnome')
+
+gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0', version: gdk_pixbuf_req)
+gtk_dep = dependency('gtk+-3.0', version: gtk_req)
+glib_dep = dependency('glib-2.0', version: glib_req)
+gio_dep = dependency('gio-2.0', version: glib_req)
+gio_unix_dep = dependency('gio-unix-2.0', version: glib_req)
+schemas_dep = dependency('gsettings-desktop-schemas', version: schemas_req)
+xkb_config_dep = dependency('xkeyboard-config')
+iso_codes_dep = dependency('iso-codes')
+x_dep = dependency('x11')
+
+udev_dep = dependency('libudev', required: get_option('udev'))
+
+# Check for bubblewrap compatible platform
+host_os = host_machine.system()
+host_cpu = host_machine.cpu()
+supported_os = ['linux']
+unsupported_cpus = ['alpha', 'ia64', 'm68k', 'sh4', 'sparc64']
+if supported_os.contains(host_os) and not unsupported_cpus.contains(host_cpu)
+  seccomp_dep = dependency('libseccomp')
+else
+  seccomp_dep = dependency('', required: false)
+endif
+
+xkb_base = xkb_config_dep.get_pkgconfig_variable('xkb_base')
+iso_codes_prefix = iso_codes_dep.get_pkgconfig_variable('prefix')
+
+cc = meson.get_compiler('c')
+
+m_dep = cc.find_library('m', required: false)
+rt_dep = cc.find_library('rt', required: false)
+
+if not cc.has_function('clock_gettime', dependencies: rt_dep)
+  rt_dep = dependency('', required: false)
+endif
+
+conf = configuration_data()
+
+conf.set_quoted('GETTEXT_PACKAGE', '@0@-3.0'.format(meson.project_name()))
+conf.set_quoted('INSTALL_PREFIX', prefix)
+
+conf.set10('ENABLE_SECCOMP', seccomp_dep.found())
+conf.set10('HAVE_BWRAP', seccomp_dep.found())
+conf.set10('_GNU_SOURCE', seccomp_dep.found())
+
+conf.set10('HAVE_UDEV', udev_dep.found())
+
+conf.set10('HAVE_TIMERFD', cc.has_function('timerfd_create'))
+conf.set10('HAVE_OPENAT', cc.has_function('openat'))
+
+config_h = declare_dependency(
+  sources: configure_file(
+    configuration: conf,
+    input: 'config.h.meson',
+    output: 'config.h'
+  ),
+  include_directories: include_directories('.')
+)
+
+version_array = meson.project_version().split('.')
+version_conf = configuration_data()
+
+version_conf.set('GNOME_PLATFORM', version_array[0])
+version_conf.set('GNOME_MINOR', version_array[1])
+version_conf.set('GNOME_MICRO', version_array[2])
+version_conf.set('GNOME_DISTRIBUTOR', get_option('gnome_distributor'))
+
+if get_option('date_in_gnome_version')
+  date = run_command(['date', '+%Y-%m-%d'])
+  version_conf.set('GNOME_DATE', date.stdout().strip())
+  version_conf.set('GNOME_DATE_COMMENT_START', '')
+  version_conf.set('GNOME_DATE_COMMENT_END', '')
+else
+  version_conf.set('GNOME_DATE', '')
+  version_conf.set('GNOME_DATE_COMMENT_START', '<!--')
+  version_conf.set('GNOME_DATE_COMMENT_END', '-->')
+endif
+
+version_xml = configure_file(
+  configuration: version_conf,
+  input: 'gnome-version.xml.in',
+  output: 'gnome-version.xml'
+)
+install_data(version_xml, install_dir: versiondir)
+
+subdir('libgnome-desktop')
+subdir('po')
+subdir('tests')
+
+if get_option('desktop_docs')
+  subdir('desktop-docs/fdl')
+  subdir('desktop-docs/gpl')
+  subdir('desktop-docs/lgpl')
+endif
+
+if get_option('gtk_doc')
+  subdir('docs/reference/gnome-desktop3')
+endif
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 00000000..b01005c4
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,30 @@
+option('gnome_distributor',
+  type: 'string', value: 'GNOME.Org',
+  description: 'Specify name of GNOME distributor'
+)
+
+option('date_in_gnome_version',
+  type: 'boolean', value: true,
+  description: 'Include the buid date in gnome-version.xml'
+)
+
+option('desktop_docs',
+  type: 'boolean', value: true,
+  description: 'Build desktop-wide help documents'
+)
+
+option('debug_tools',
+  type: 'boolean', value: true, description: 'Build debug tools'
+)
+
+option('udev',
+  type: 'feature', description: 'Udev support'
+)
+
+option('gtk_doc',
+  type: 'boolean', value: false, description: 'Build API reference'
+)
+
+option('installed_tests',
+  type: 'boolean', value: false, description: 'Enable installed tests'
+)
diff --git a/po/meson.build b/po/meson.build
new file mode 100644
index 00000000..d1fa7c6f
--- /dev/null
+++ b/po/meson.build
@@ -0,0 +1 @@
+i18n.gettext('gnome-desktop-3.0', preset: 'glib')
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 00000000..b8ceaa6d
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,45 @@
+test_args = [
+  '-DG_LOG_DOMAIN="GnomeDesktop"',
+  '-DGDK_DISABLE_DEPRECATED_WARNINGS',
+  '-DGTK_DISABLE_DEPRECATED_WARNINGS',
+  '-DINSTALLED_TEST_DIR="@0@"'.format(test_execdir)
+]
+
+test_programs = [
+  'wall-clock',
+ 'wallclock-reftest'
+]
+
+test_metas = []
+
+foreach program: test_programs
+  exe = executable(program, program + '.c',
+    dependencies: libgnome_desktop_dep,
+    c_args: test_args,
+    install_dir: test_execdir,
+    install: get_option('installed_tests')
+  )
+
+  if get_option('installed_tests')
+    meta_data = configuration_data()
+    meta_data.set('TEST_EXEC', join_paths(test_execdir, program))
+
+    test_metas += configure_file(
+      configuration: meta_data,
+      input: 'meta.test.in',
+      output: program + '.test',
+    )
+  endif
+endforeach
+
+if get_option('installed_tests')
+  test_data = files(
+    'C.ref.ui',
+    'C.ui',
+    'en_US.utf-8.ref.ui',
+    'en_US.utf-8.ui',
+    'he_IL.utf8.ref.ui',
+    'he_IL.utf8.ui'
+  )
+  install_data(test_data + test_metas, install_dir: test_metadir)
+endif
diff --git a/tests/meta.test.in b/tests/meta.test.in
new file mode 100644
index 00000000..ae2b2991
--- /dev/null
+++ b/tests/meta.test.in
@@ -0,0 +1,4 @@
+[Test]
+Type=session
+Exec=@TEST_EXEC@ --tap
+Output=TAP


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]