[cheese/inigomartinez/cheese-meson] build: Port to meson build system



commit 306f19603a817c95292eaad0fe053f9e3f217c2d
Author: Iñigo Martínez <inigomartinez gmail com>
Date:   Thu Dec 13 18:09:28 2018 +0100

    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.

 data/meson.build                  |  72 +++++++++++++
 docs/reference/meson.build        |  65 ++++++++++++
 help/LINGUAS                      |  19 ++++
 help/meson.build                  |  29 ++++++
 libcheese/cheese-enums.c.template |  42 ++++++++
 libcheese/cheese-enums.h.template |  25 +++++
 libcheese/cheese-gtk.map          |  32 ++++++
 libcheese/meson.build             | 164 ++++++++++++++++++++++++++++++
 meson.build                       | 208 ++++++++++++++++++++++++++++++++++++++
 meson_options.txt                 |   5 +
 meson_post_install.py             |  15 +++
 po/meson.build                    |   1 +
 src/meson.build                   |  38 +++++++
 tests/meson.build                 |  48 +++++++++
 14 files changed, 763 insertions(+)
---
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 00000000..051341f2
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,72 @@
+resource_data = files(
+  'cheese-viewport.json',
+  'cheese-main-window.ui',
+  'cheese-prefs.ui',
+  'headerbar.ui',
+  'menus.ui',
+  'pixmaps/cheese-1.svg',
+  'pixmaps/cheese-2.svg',
+  'pixmaps/cheese-3.svg',
+  'pixmaps/thumbnail-frame.png',
+)
+
+resource_sources = gnome.compile_resources(
+  'cheese-resource',
+  cheese_namespace + '.gresource.xml',
+  c_name: cheese_name,
+  dependencies: resource_data,
+  export: true,
+  install_header: true,
+  install_dir: cheese_includedir / cheese_name,
+)
+
+desktop = cheese_namespace + '.desktop'
+
+desktop_in = configure_file(
+  input: desktop + '.in.in',
+  output: '@BASENAME@',
+  configuration: {'PACKAGE_VERSION': cheese_version},
+)
+
+custom_target(
+  desktop,
+  input: desktop_in,
+  output: '@BASENAME@',
+  command: intltool_desktop_cmd,
+  install: true,
+  install_dir: cheese_datadir / 'applications',
+)
+
+appdata = cheese_namespace + '.appdata.xml'
+
+custom_target(
+  appdata,
+  input: appdata + '.in',
+  output: '@BASENAME@',
+  command: intltool_xml_cmd,
+  install: true,
+  install_dir: cheese_datadir / 'metainfo',
+)
+
+configure_file(
+  input: cheese_namespace + '.service.in',
+  output: '@BASENAME@',
+  configuration: {'bindir': cheese_prefix / cheese_bindir},
+  install: true,
+  install_dir: dbus_session_bus_services_dir,
+)
+
+install_data(
+  cheese_namespace + '.gschema.xml',
+  install_dir: gio_schemasdir,
+)
+
+install_data(
+  'icons/scalable/' + cheese_namespace + '.svg',
+  install_dir: cheese_datadir / 'icons/hicolor/scalable/apps',
+)
+
+install_data(
+  'icons/symbolic/' + cheese_namespace + '-symbolic.svg',
+  install_dir: cheese_datadir / 'icons/hicolor/symbolic/apps',
+)
diff --git a/docs/reference/meson.build b/docs/reference/meson.build
new file mode 100644
index 00000000..5df94fec
--- /dev/null
+++ b/docs/reference/meson.build
@@ -0,0 +1,65 @@
+cheese_xml = files('cheese.xml')
+
+if enable_gtk_doc
+  private_headers = [
+    'cheese-enums.h',
+    'cheese-widget-private.h',
+    'totem-aspect-frame.h',
+    'um-crop-area.h',
+  ]
+
+  glib_prefix = glib_dep.get_pkgconfig_variable('prefix')
+  gtk_prefix = gtk_dep.get_pkgconfig_variable('prefix')
+
+  fixxref_args = [
+    '--html-dir=' + (cheese_prefix / gnome.gtkdoc_html_dir(cheese_name)),
+    '--extra-dir=' + (glib_prefix / gnome.gtkdoc_html_dir('glib')),
+    '--extra-dir=' + (glib_prefix / gnome.gtkdoc_html_dir('gio')),
+    '--extra-dir=' + (gtk_prefix / gnome.gtkdoc_html_dir('gdk')),
+    '--extra-dir=' + (gtk_prefix / gnome.gtkdoc_html_dir('gdk-pixbuf')),
+    '--extra-dir=' + (gtk_prefix / gnome.gtkdoc_html_dir('gtk')),
+  ]
+
+  version_xml = configure_file(
+    input: 'version.xml.in',
+    output: '@BASENAME@',
+    configuration: {'PACKAGE_VERSION': cheese_version},
+  )
+
+  gnome.gtkdoc(
+    cheese_name,
+    main_xml: cheese_name + '-docs.xml',
+    src_dir: libcheese_inc,
+    ignore_headers: private_headers,
+    include_directories: top_inc,
+    dependencies: libcheese_gtk_dep,
+    namespace: cheese_name,
+    scan_args: '--rebuild-types',
+    fixxref_args: fixxref_args,
+    html_assets: 'images/cheese_architecture.png',
+    content_files: cheese_xml + [version_xml],
+    install: true,
+  )
+endif
+
+if enable_man
+  xsltproc_cmd = [
+    find_program('xsltproc'),
+    '--output', '@OUTPUT@',
+    '--nonet',
+    '--path', meson.current_build_dir(),
+    'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
+    '@INPUT@',
+  ]
+
+  output = cheese_name + '.1'
+
+  custom_target(
+    output,
+    input: cheese_xml,
+    output: output,
+    command: xsltproc_cmd,
+    install: true,
+    install_dir: cheese_mandir / 'man1',
+  )
+endif
diff --git a/help/LINGUAS b/help/LINGUAS
new file mode 100644
index 00000000..96057e68
--- /dev/null
+++ b/help/LINGUAS
@@ -0,0 +1,19 @@
+# please keep this list sorted alphabetically
+ca
+cs
+de
+el
+es
+fi
+fr
+gl
+hu
+id
+ko
+nl
+pl
+pt_BR
+ru
+sl
+sv
+zh_CN
diff --git a/help/meson.build b/help/meson.build
new file mode 100644
index 00000000..d9909733
--- /dev/null
+++ b/help/meson.build
@@ -0,0 +1,29 @@
+sources = [
+  'burst-mode.page',
+  'effects-apply.page',
+  'index.page',
+  'introduction.page',
+  'legal.xml',
+  'photo-delete.page',
+  'photo-save.page',
+  'photo-take.page',
+  'photo-view.page',
+  'pref-countdown.page',
+  'pref-flash.page',
+  'pref-fullscreen.page',
+  'pref-image-properties.page',
+  'pref-resolution.page',
+  'video-record.page',
+]
+
+media = [
+  'figures/cheese.png',
+  'figures/effects.png',
+  'figures/image-properties.png',
+]
+
+gnome.yelp(
+  cheese_name,
+  sources: sources,
+  media: media,
+)
diff --git a/libcheese/cheese-enums.c.template b/libcheese/cheese-enums.c.template
new file mode 100644
index 00000000..011816f1
--- /dev/null
+++ b/libcheese/cheese-enums.c.template
@@ -0,0 +1,42 @@
+/*** BEGIN file-header ***/
+#include "cheese-enums.h"
+
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+/* enumerations from "@filename@" */
+#include "@filename@"
+/*** END file-production ***/
+
+
+/*** BEGIN value-header ***/
+GType
+@enum_name@_get_type (void)
+{
+  static GType type = 0;
+
+  if (!type)
+  {
+    static const G@Type@Value _@enum_name@_values[] = {
+/*** END value-header ***/
+
+/*** BEGIN value-production ***/
+      { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
+/*** END value-production ***/
+
+/*** BEGIN value-tail ***/
+      { 0, NULL, NULL }
+    };
+
+    type = g_@type@_register_static ("@EnumName@", _@enum_name@_values);
+  }
+
+  return type;
+}
+
+
+/*** END value-tail ***/
+
+/*** BEGIN file-tail ***/
+
+/*** END file-tail ***/
diff --git a/libcheese/cheese-enums.h.template b/libcheese/cheese-enums.h.template
new file mode 100644
index 00000000..bcac735a
--- /dev/null
+++ b/libcheese/cheese-enums.h.template
@@ -0,0 +1,25 @@
+/*** BEGIN file-header ***/
+
+#ifndef CHEESE_ENUMS_H_
+#define CHEESE_ENUMS_H_
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name@_get_type (void) G_GNUC_CONST;
+#define CHEESE_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+G_END_DECLS
+
+#endif /* CHEESE_ENUMS_H_ */
+/*** END file-tail ***/
diff --git a/libcheese/cheese-gtk.map b/libcheese/cheese-gtk.map
new file mode 100644
index 00000000..6ac18051
--- /dev/null
+++ b/libcheese/cheese-gtk.map
@@ -0,0 +1,32 @@
+{
+global:
+  cheese_avatar_chooser_get_picture;
+  cheese_avatar_chooser_get_type;
+  cheese_avatar_chooser_new;
+  cheese_avatar_widget_get_picture;
+  cheese_avatar_widget_get_type;
+  cheese_avatar_widget_new;
+  cheese_camera_cat;
+  cheese_camera_device_cat;
+  cheese_camera_device_get_type;
+  cheese_camera_device_monitor_coldplug;
+  cheese_camera_device_monitor_get_type;
+  cheese_camera_device_monitor_new;
+  cheese_camera_device_monitor_new_async;
+  cheese_camera_device_monitor_new_finish;
+  cheese_camera_get_type;
+  cheese_flash_fire;
+  cheese_flash_get_type;
+  cheese_flash_new;
+  cheese_gtk_init;
+  cheese_video_format_get_type;
+  cheese_widget_get_camera;
+  cheese_widget_get_error;
+  cheese_widget_get_type;
+  cheese_widget_get_video_area;
+  cheese_widget_new;
+  cheese_widget_state_get_type;
+  um_crop_area_get_type;
+local:
+  *;
+};
diff --git a/libcheese/meson.build b/libcheese/meson.build
new file mode 100644
index 00000000..a326329a
--- /dev/null
+++ b/libcheese/meson.build
@@ -0,0 +1,164 @@
+libcheese_inc = include_directories('.')
+
+enum_headers = files('cheese-widget.h')
+
+gir_headers = files(
+  'cheese-camera-device.h',
+  'cheese-camera-device-monitor.h',
+  'cheese-camera.h',
+  'cheese-effect.h',
+)
+
+private_gir_headers = files('cheese-fileutil.h')
+
+headers = enum_headers + gir_headers + files(
+  'cheese-avatar-chooser.h',
+  'cheese-avatar-widget.h',
+  'cheese-gtk.h',
+  'cheese.h',
+)
+
+install_headers(
+  headers,
+  subdir: cheese_name,
+)
+
+sources = files(
+  'cheese.c',
+  'cheese-camera.c',
+  'cheese-camera-device.c',
+  'cheese-camera-device-monitor.c',
+  'cheese-effect.c',
+  'cheese-fileutil.c',
+)
+
+deps = [
+  clutter_dep,
+  gdk_pixbuf_dep,
+  gio_dep,
+  glib_dep,
+  gstreamer_dep,
+]
+
+private_deps = [
+  clutter_gst_dep,
+  gstreamer_pbutils_dep,
+  gstreamer_plugins_bad_dep,
+  x11_dep,
+]
+
+libcheese = shared_library(
+  cheese_name,
+  version: libcheese_version,
+  sources: sources,
+  include_directories: top_inc,
+  dependencies: deps + private_deps,
+  c_args: '-DG_LOG_DOMAIN="@0@"'.format(cheese_name),
+  install: true,
+)
+
+libcheese_dep = declare_dependency(
+  include_directories: libcheese_inc,
+  dependencies: deps,
+  link_with: libcheese,
+)
+
+pkg.generate(
+  libcheese,
+  version: cheese_version,
+  name: cheese_name,
+  description: 'Cheese webcam utilities',
+  filebase: cheese_name,
+  subdirs: cheese_name,
+  requires: deps,
+  requires_private: private_deps,
+  variables: 'exec_prefix=${prefix}',
+)
+
+# GObject Introspection
+if enable_gir
+  incs = [
+    'Clutter-1.0',
+    'GdkPixbuf-2.0',
+    'Gst-1.0',
+  ]
+
+  libcheese_gir = gnome.generate_gir(
+    libcheese,
+    # FIXME: why include private headers if they are not installed?
+    # FIXME: WidgetState enums are missing. However, they actually belong to libcheese_gtk.
+    sources: sources + gir_headers + private_gir_headers,
+    includes: incs,
+    namespace: meson.project_name(),
+    nsversion: cheese_api_version,
+    export_packages: cheese_name,
+    install: true,
+  )
+endif
+
+um_crop_area_source = files('um-crop-area.c')
+
+sources = um_crop_area_source + files(
+  'cheese-avatar-chooser.c',
+  'cheese-avatar-widget.c',
+  'cheese-flash.c',
+  'cheese-gtk.c',
+  'cheese-widget.c',
+  'totem-aspect-frame.c',
+)
+
+enum_types = 'cheese-enums'
+
+enum_sources = gnome.mkenums(
+  enum_types,
+  sources: enum_headers,
+  c_template: enum_types + '.c.template',
+  h_template: enum_types + '.h.template',
+)
+
+deps = [
+  clutter_gtk_dep,
+  gtk_dep,
+]
+
+private_deps = [
+  clutter_gst_dep,
+  libcanberra_gtk3_dep,
+  m_dep,
+  x11_dep,
+]
+
+symbol_map = meson.current_source_dir() / 'cheese-gtk.map'
+ldflags = cc.get_supported_link_arguments('-Wl,--version-script,@0@'.format(symbol_map))
+
+libcheese_gtk_name = cheese_name + '-gtk'
+
+libcheese_gtk = shared_library(
+  libcheese_gtk_name,
+  version: libcheese_gtk_version,
+  sources: sources + enum_sources,
+  include_directories: top_inc,
+  dependencies: deps + private_deps + [libcheese_dep],
+  c_args: '-DG_LOG_DOMAIN="@0@"'.format(libcheese_gtk_name),
+  link_args: ldflags,
+  link_depends: symbol_map,
+  install: true,
+)
+
+libcheese_gtk_dep = declare_dependency(
+  sources: enum_sources[1],
+  dependencies: deps + [libcheese_dep],
+  link_with: libcheese_gtk,
+)
+
+pkg.generate(
+  libcheese_gtk,
+  version: cheese_version,
+  name: libcheese_gtk_name,
+  description: 'Cheese webcam widgets',
+  filebase: libcheese_gtk_name,
+  subdirs: cheese_name,
+  requires: deps,
+  #requires_private: private_deps,
+  variables: 'exec_prefix=${prefix}',
+)
diff --git a/meson.build b/meson.build
new file mode 100644
index 00000000..0265a019
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,208 @@
+project(
+  'Cheese', ['c', 'vala'],
+  version: '3.32.0',
+  license: 'GPL2',
+  default_options: 'buildtype=debugoptimized',
+  meson_version: '>= 0.50.0',
+)
+
+cheese_name = meson.project_name().to_lower()
+
+cheese_version = meson.project_version()
+version_array = cheese_version.split('.')
+cheese_major_version = version_array[0].to_int()
+cheese_minor_version = version_array[1].to_int()
+
+cheese_api_version = cheese_major_version.to_string() + '.0'
+
+cheese_prefix = get_option('prefix')
+cheese_bindir = get_option('bindir')
+cheese_datadir = get_option('datadir')
+cheese_includedir = get_option('includedir')
+cheese_localedir = get_option('localedir')
+cheese_mandir = get_option('mandir')
+
+cheese_namespace = 'org.gnome.' + meson.project_name()
+
+#*******************************************************************************
+# Libraries
+#*******************************************************************************
+# Before making a release, the CHEESE_LT_VERSION string should be modified.
+# The string is of the form C:R:A.
+# - If interfaces have been changed or added, but binary compatibility has
+#   been preserved, change to C+1:0:A+1
+# - 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:R+1:A
+current = 8
+revision = 12
+age = 0
+libcheese_version = '@0@.@1@.@2@'.format(current - age, age, revision)
+
+current = 26
+revision = 2
+age = 1
+libcheese_gtk_version = '@0@.@1@.@2@'.format(current - age, age, revision)
+
+gnome = import('gnome')
+i18n = import('i18n')
+pkg = import('pkgconfig')
+
+source_root = meson.current_source_dir()
+
+po_dir = source_root / 'po'
+vapi_dir = source_root / 'src/vapi'
+
+intltool_merge = find_program('intltool-merge')
+intltool_cache = 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('.')
+
+cc = meson.get_compiler('c')
+valac = meson.get_compiler('vala')
+
+config_h = configuration_data()
+
+# defines
+set_defines = [
+  # package
+  ['PACKAGE_LOCALEDIR', cheese_prefix / cheese_localedir],
+  ['PACKAGE_NAME', meson.project_name()],
+  ['PACKAGE_STRING', '@0@ @1@'.format(meson.project_name(), cheese_version)],
+  ['PACKAGE_TARNAME', meson.project_name()],
+  ['PACKAGE_URL', 'https://wiki.gnome.org/Apps/Cheese'],
+  ['PACKAGE_VERSION', cheese_version],
+  # i18n
+  ['GETTEXT_PACKAGE', cheese_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 += cc.get_supported_arguments([
+    '-Wnested-externs',
+    '-Wstrict-prototypes',
+    '-Werror=format=2',
+    '-Werror=implicit-function-declaration',
+    '-Werror=init-self',
+    '-Werror=missing-include-dirs',
+    '-Werror=missing-prototypes',
+    '-Werror=pointer-arith',
+    '-Werror=return-type',
+  ])
+endif
+
+add_project_arguments(common_flags, language: 'c')
+
+#*******************************************************************************
+# Check required libraries
+#*******************************************************************************
+clutter_dep = dependency('clutter-1.0', version: '>= 1.13.2')
+clutter_gst_dep = dependency('clutter-gst-3.0', version: '>= 3.0.0')
+clutter_gtk_dep = dependency('clutter-gtk-1.0')
+gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0')
+gio_dep = dependency('gio-2.0')
+glib_dep = dependency('glib-2.0', version: '>= 2.38.0')
+gnome_desktop_dep = dependency('gnome-desktop-3.0')
+gstreamer_dep = dependency('gstreamer-1.0')
+gstreamer_pbutils_dep = dependency('gstreamer-pbutils-1.0')
+gstreamer_plugins_bad_dep = dependency('gstreamer-plugins-bad-1.0', version: '>= 1.4')
+gtk_dep = dependency('gtk+-3.0', version: '>= 3.13.4')
+libcanberra_dep = dependency('libcanberra')
+libcanberra_gtk_dep = dependency('libcanberra-gtk')
+libcanberra_gtk3_dep = dependency('libcanberra-gtk3', version: '>= 0.26')
+
+m_dep = cc.find_library('m')
+
+cheese_common_dep = valac.find_library('cheese-common', dirs: vapi_dir)
+cheese_thumbview_dep = valac.find_library('cheese-thumbview', dirs: vapi_dir)
+config_dep = valac.find_library('config', dirs: vapi_dir)
+eogthumbnav_dep = valac.find_library('eogthumbnav', dirs: vapi_dir)
+posix_dep = valac.find_library('posix')
+
+x11_dep = dependency('x11')
+have_xtest = false
+if cc.has_header('X11/extensions/XTest.h', dependencies: x11_dep)
+  xtst_dep = dependency('xtst', required: false)
+  have_xtest = xtst_dep.found() and cc.has_function('XTestFakeKeyEvent', dependencies: xtst_dep)
+endif
+
+dbus_session_bus_services_dir = dependency('dbus-1').get_pkgconfig_variable(
+  'session_bus_services_dir',
+  define_variable: ['datadir', cheese_prefix / cheese_datadir],
+)
+
+gio_schemasdir = gio_dep.get_pkgconfig_variable(
+  'schemasdir',
+  define_variable: ['datadir', cheese_prefix / cheese_datadir],
+  default: cheese_prefix / cheese_datadir / 'glib-2.0/schemas',
+)
+
+gnome_video_effects_dep = dependency(
+  'gnome-video-effects',
+  required: false,
+  not_found_message: 'The gnome-video-effects package is required at runtime for effects',
+)
+
+# Recommend some runtime GStreamer plugins.
+gst_inspect = find_program('gst-inspect-1.0', required: false)
+if gst_inspect.found()
+  foreach plugin: ['camerabin', 'vp8enc', 'webmmux']
+    if run_command(gst_inspect, plugin).returncode() != 0
+      warning(plugin + ' was not found. It needs to be installed before Cheese is run')
+    endif
+  endforeach
+else
+  warning('unable to check for runtime GStreamer plugin dependencies')
+endif
+
+# Check for GLib testing utilities.
+# FIXME: meson has its own test framework
+'''
+gtester = find_program('gtester', required: false)
+enable_cheese_tests = gtester.found()
+if not enable_cheese_tests
+  warning('testing disabled as the required utilities were not found')
+endif
+'''
+
+# introspection support
+enable_gir = get_option('introspection')
+if enable_gir
+  dependency('gobject-introspection-1.0', version: '>= 0.6.7')
+endif
+
+subdir('data')
+subdir('libcheese')
+subdir('src')
+
+if get_option('tests')
+  subdir('tests')
+endif
+
+subdir('po')
+subdir('help')
+
+enable_gtk_doc = get_option('gtk_doc')
+enable_man = get_option('man')
+if enable_gtk_doc or enable_man
+  subdir('docs/reference')
+endif
+
+configure_file(
+  output: 'config.h',
+  configuration: config_h,
+)
+
+meson.add_install_script(
+  'meson_post_install.py',
+  cheese_datadir,
+  gio_schemasdir,
+)
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 00000000..ddfd1876
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,5 @@
+option('tests', type: 'boolean', value: false, description: 'Build tests')
+option('introspection', type: 'boolean', value: true, description: 'Enable introspection for this build')
+
+option('gtk_doc', type: 'boolean', value: true, description: 'use gtk-doc to build documentation')
+option('man', type: 'boolean', value: true, description: 'build manual pages')
diff --git a/meson_post_install.py b/meson_post_install.py
new file mode 100644
index 00000000..24242df0
--- /dev/null
+++ b/meson_post_install.py
@@ -0,0 +1,15 @@
+#!/usr/bin/env python3
+
+import os
+import subprocess
+import sys
+
+if not os.environ.get('DESTDIR'):
+    prefix = os.environ['MESON_INSTALL_PREFIX']
+
+    icondir = os.path.join(prefix, sys.argv[1], 'icons', 'hicolor')
+    print('Updating icon cache...')
+    subprocess.call(['gtk-update-icon-cache', '-f', '-t', icondir])
+
+    print('Compiling gsettings schemas...')
+    subprocess.call(['glib-compile-schemas', sys.argv[2]])
diff --git a/po/meson.build b/po/meson.build
new file mode 100644
index 00000000..522040ef
--- /dev/null
+++ b/po/meson.build
@@ -0,0 +1 @@
+i18n.gettext(cheese_name, preset: 'glib')
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 00000000..b1800127
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,38 @@
+sources = files(
+  'cheese-application.vala',
+  'cheese-countdown.vala',
+  'cheese-effects-manager.vala',
+  'cheese-main.vala',
+  'cheese-preferences.vala',
+  'cheese-window.vala',
+  'thumbview/cheese-thumbnail.c',
+  'thumbview/cheese-thumb-view.c',
+  'thumbview/eog-thumb-nav.c',
+)
+
+deps = [
+  cheese_common_dep,
+  cheese_thumbview_dep,
+  config_dep,
+  gnome_desktop_dep,
+  eogthumbnav_dep,
+  libcanberra_dep,
+  libcanberra_gtk_dep,
+  libcheese_gtk_dep,
+  posix_dep,
+]
+
+cflags = [
+  '-DPACKAGE_LOCALEDIR="@0@"'.format(cheese_prefix / cheese_localedir),
+  '-DGNOME_DESKTOP_USE_UNSTABLE_API=1',
+  '-DGETTEXT_PACKAGE="@0@"'.format(cheese_name),
+]
+
+executable(
+  cheese_name,
+  sources: sources + resource_sources,
+  include_directories: top_inc,
+  dependencies: deps,
+  c_args: cflags,
+  install: true,
+)
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 00000000..d7167471
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,48 @@
+cheese_tests = [
+  'cheese-test-camera',
+  'cheese-test-chooser',
+  'cheese-test-flash',
+  'cheese-test-monitor',
+  'cheese-test-widget',
+]
+
+foreach cheese_test: cheese_tests
+  executable(
+    cheese_test,
+    sources: cheese_test + '.c',
+    include_directories: top_inc,
+    dependencies: libcheese_gtk_dep,
+  )
+endforeach
+
+random_number = cheese_minor_version + meson.version().split('.').get(1).to_int()
+
+test_env = environment()
+test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
+test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
+test_env.set('G_DEBUG', 'gc-friendly')
+test_env.set('MALLOC_CHECK_', '2')
+test_env.set('MALLOC_PERTURB_', '@0@'.format(random_number % 256))
+
+unit_tests = [
+  ['test-libcheese', {'sources': 'test-libcheese.c', 'dependencies': libcheese_dep}],
+  ['test-libcheese-gtk', {'sources': ['test-libcheese-gtk.c'] + um_crop_area_source, 'dependencies': 
libcheese_gtk_dep}],
+]
+
+if have_xtest
+  unit_tests += [['test-webcam-button', {'sources': 'test-webcam-button.c', 'dependencies': [x11_dep, 
xtst_dep]}]]
+endif
+
+foreach unit_test: unit_tests
+  exe = executable(
+    unit_test[0],
+    include_directories: top_inc,
+    kwargs: unit_test[1],
+  )
+
+  test(
+    unit_test[0],
+    exe,
+    env: test_env,
+  )
+endforeach


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