[rygel] Port build system to meson



commit 86bfaaddc3288f301565093278c58c5d595049ec
Author: Jens Georg <mail jensge org>
Date:   Wed Nov 28 19:39:06 2018 +0000

    Port build system to meson

 data/meson.build                                |  63 ++++++++
 data/presets/meson.build                        |  12 ++
 data/xml/meson.build                            | 132 ++++++++++++++++
 data/xml/process-xml.py                         |   8 +
 doc/man/meson.build                             |  44 ++++++
 doc/meson.build                                 |   2 +
 doc/reference/librygel-core/meson.build         |  57 +++++++
 doc/reference/librygel-db/meson.build           |  65 ++++++++
 doc/reference/librygel-renderer-gst/meson.build |  68 ++++++++
 doc/reference/librygel-renderer/meson.build     |  62 ++++++++
 doc/reference/librygel-server/meson.build       |  63 ++++++++
 doc/reference/meson.build                       |   5 +
 examples/meson.build                            |  30 ++++
 examples/renderer-plugins/C/example-player.c    |  12 +-
 examples/renderer-plugins/C/meson.build         |  15 ++
 examples/renderer-plugins/meson.build           |   2 +
 examples/renderer-plugins/vala/meson.build      |  12 ++
 examples/server-plugins/C/meson.build           |  14 ++
 examples/server-plugins/meson.build             |   2 +
 examples/server-plugins/vala/meson.build        |  12 ++
 meson.build                                     | 202 ++++++++++++++++++++++++
 meson_options.txt                               |   9 ++
 po/meson.build                                  |   1 +
 src/librygel-core/meson.build                   |  84 ++++++++++
 src/librygel-db/collate.c                       |   4 +-
 src/librygel-db/meson.build                     |  22 +++
 src/librygel-renderer-gst/meson.build           |  45 ++++++
 src/librygel-renderer/meson.build               |  55 +++++++
 src/librygel-ruih/meson.build                   |  27 ++++
 src/librygel-server/meson.build                 | 134 ++++++++++++++++
 src/media-engines/gstreamer/meson.build         |  29 ++++
 src/media-engines/meson.build                   |   3 +
 src/media-engines/simple/meson.build            |  14 ++
 src/meson.build                                 |  11 ++
 src/plugins/external/meson.build                |  24 +++
 src/plugins/gst-launch/meson.build              |  17 ++
 src/plugins/lms/meson.build                     |  30 ++++
 src/plugins/media-export/meson.build            |  65 ++++++++
 src/plugins/meson.build                         |   3 +
 src/plugins/mpris/meson.build                   |  18 +++
 src/plugins/playbin/meson.build                 |  11 ++
 src/plugins/ruih/meson.build                    |  13 ++
 src/plugins/tracker/meson.build                 |  49 ++++++
 src/rygel/meson.build                           |  11 ++
 src/ui/meson.build                              |  12 ++
 tests/meson.build                               |  67 ++++++++
 46 files changed, 1632 insertions(+), 8 deletions(-)
---
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 00000000..f686c1ce
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,63 @@
+install_data('rygel.conf', install_dir : rygel_sysconfdir)
+install_data(join_paths('icons', '128x128', 'rygel.png'), install_dir : join_paths(rygel_icondir, '128x128', 
'apps'))
+install_data(join_paths('icons', '120x120', 'rygel.png'), install_dir : rygel_bigicondir)
+install_data(join_paths('icons', '120x120', 'rygel.jpg'), install_dir : rygel_bigicondir)
+install_data(join_paths('icons', '48x48', 'rygel.png'), install_dir : rygel_smallicondir)
+install_data(join_paths('icons', '48x48', 'rygel.jpg'), install_dir : rygel_smallicondir)
+install_data(join_paths('icons', '32x32', 'rygel.png'), install_dir : join_paths(rygel_icondir, '32x32', 
'apps'))
+install_data(join_paths('icons', '48x48', 'rygel.png'), install_dir : join_paths(rygel_icondir, '48x48', 
'apps'))
+install_data(join_paths('icons', 'scalable', 'rygel.svg'), install_dir : join_paths(rygel_icondir, 
'scalable', 'apps'))
+install_data(join_paths('icons', 'scalable', 'rygel-full.svg'), install_dir : join_paths(rygel_icondir, 
'scalable', 'apps'))
+
+install_data('rygel-preferences.ui', install_dir : join_paths(rygel_datadir, 'rygel'))
+
+data_conf = configuration_data()
+data_conf.set('bindir', join_paths(get_option('prefix'), get_option('bindir')))
+data_conf.set('VERSION', meson.project_version())
+
+configure_file(input: 'org.gnome.Rygel1.service.in',
+               output: 'org.gnome.Rygel1.service',
+               configuration: data_conf,
+               install_dir : join_paths(rygel_datadir, 'dbus-1', 'services'))
+
+systemd = dependency('systemd', required : false)
+systemd_user_unit_dir = join_paths(get_option('prefix'), 'lib/systemd/user/')
+if systemd.found()
+    systemd_user_unit_dir = systemd.get_pkgconfig_variable('systemduserunitdir')
+endif
+
+if not (get_option('systemd-user-units-dir') == 'off')
+    if not (get_option('systemd-user-units-dir') == 'auto')
+        systemd_user_unit_dir = get_option('systemd-user-units-dir')
+    endif
+
+    configure_file(input: 'rygel.service.in',
+                   output: 'rygel.service',
+                   configuration: data_conf,
+                   install_dir : systemd_user_unit_dir)
+endif
+
+rygel_desktop_preferences_in = configure_file(input: 'rygel-preferences.desktop.in.in',
+               output : 'rygel-preferences.desktop.in',
+               configuration : data_conf)
+
+rygel_desktop_in = configure_file(input: 'rygel.desktop.in.in',
+               output : 'rygel.desktop.in',
+               configuration : data_conf)
+
+i18n.merge_file(input: rygel_desktop_in,
+                output: 'rygel.desktop',
+                po_dir : join_paths('..','po'),
+                type: 'desktop',
+                install : true,
+                install_dir: join_paths(get_option('datadir'), 'applications'))
+
+i18n.merge_file(input: rygel_desktop_preferences_in,
+                output: 'rygel-preferences.desktop',
+                po_dir : join_paths('..','po'),
+                type: 'desktop',
+                install : true,
+                install_dir: join_paths(get_option('datadir'), 'applications'))
+
+subdir('presets')
+subdir('xml')
diff --git a/data/presets/meson.build b/data/presets/meson.build
new file mode 100644
index 00000000..d2088d9d
--- /dev/null
+++ b/data/presets/meson.build
@@ -0,0 +1,12 @@
+install_data(
+    ['avenc_aac.prs',
+     'avenc_mp2.prs',
+     'avenc_mpeg2video.prs',
+     'avenc_wmav1.prs',
+     'avenc_wmv1.prs',
+     'GstFaac.prs',
+     'GstLameMP3Enc.prs',
+     'GstMP4Mux.prs',
+     'GstTwoLame.prs',
+     'GstX264Enc.prs'],
+    install_dir : rygel_presetdir)
diff --git a/data/xml/meson.build b/data/xml/meson.build
new file mode 100644
index 00000000..85c0d740
--- /dev/null
+++ b/data/xml/meson.build
@@ -0,0 +1,132 @@
+xml_processor = find_program('process-xml.py')
+xml_dir = join_paths(rygel_datadir, 'rygel', 'xml')
+
+server_xml = configure_file(input: 'MediaServer3.xml.in.in',
+               output: 'MediaServer3.xml.in',
+               configuration: plugin_config)
+
+renderer_xml = configure_file(input: 'MediaRenderer2.xml.in.in',
+               output: 'MediaRenderer2.xml.in',
+               configuration: plugin_config)
+
+ruih_xml = configure_file(input: 'RuihServer2.xml.in.in',
+               output: 'RuihServer2.xml.in',
+               configuration: plugin_config)
+
+
+# Fixme: How to install this...
+#xml_files = xml_processor.process(['EnergyManagement.xml.in',
+#                       'ContentDirectory.xml.in',
+#                       'ContentDirectory-NoTrack.xml.in',
+#                       'ConnectionManager.xml.in',
+#                       'RemoteUIServerService.xml.in',
+#                       'AVTransport2.xml.in',
+#                       'RenderingControl2.xml.in',
+#                       'UIList.xml.in',
+#                       'BasicManagement2.xml.in',
+#                       'X_MS_MediaReceiverRegistrar1.xml.in'],
+#                       install: true,
+#                       install_dir : xml_dir)
+
+custom_target('EnergyManagement.xml',
+              input: 'EnergyManagement.xml.in',
+              output: 'EnergyManagement.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
+
+custom_target('MediaServer3.xml',
+              input: server_xml,
+              output: 'MediaServer3.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
+
+custom_target('MediaRenderer2.xml',
+              input: renderer_xml,
+              output: 'MediaRenderer2.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
+
+custom_target('ContentDirectory.xml',
+              input: 'ContentDirectory.xml.in',
+              output: 'ContentDirectory.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
+
+custom_target('RuihServer2.xml',
+              input: ruih_xml,
+              output: 'RuihServer2.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
+
+custom_target('ContentDirectory-NoTrack.xml',
+              input: 'ContentDirectory-NoTrack.xml.in',
+              output: 'ContentDirectory-NoTrack.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
+
+custom_target('ConnectionManager.xml',
+              input: 'ConnectionManager.xml.in',
+              output: 'ConnectionManager.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
+
+custom_target('RemoteUIServerService.xml',
+              input: 'RemoteUIServerService.xml.in',
+              output: 'RemoteUIServerService.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
+custom_target('AVTransport2.xml',
+              input: 'AVTransport2.xml.in',
+              output: 'AVTransport2.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
+
+custom_target('RenderingControl2.xml',
+              input: 'RenderingControl2.xml.in',
+              output: 'RenderingControl2.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
+
+custom_target('UIList.xml',
+              input: 'UIList.xml.in',
+              output: 'UIList.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
+
+custom_target('BasicManagement2.xml',
+              input: 'BasicManagement2.xml.in',
+              output: 'BasicManagement2.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
+
+custom_target('X_MS_MediaReceiverRegistrar1.xml',
+              input: 'X_MS_MediaReceiverRegistrar1.xml.in',
+              output: 'X_MS_MediaReceiverRegistrar1.xml',
+              capture: true,
+              command : [xml_processor, '@INPUT@'],
+              install: true,
+              install_dir : xml_dir)
diff --git a/data/xml/process-xml.py b/data/xml/process-xml.py
new file mode 100755
index 00000000..8d53e048
--- /dev/null
+++ b/data/xml/process-xml.py
@@ -0,0 +1,8 @@
+#!/usr/bin/env python3
+
+import sys
+import re
+
+with open(sys.argv[1], 'r') as f:
+    for data in f:
+        print(data.strip(), end='')
diff --git a/doc/man/meson.build b/doc/man/meson.build
new file mode 100644
index 00000000..c905df2f
--- /dev/null
+++ b/doc/man/meson.build
@@ -0,0 +1,44 @@
+xsltproc = find_program('xsltproc', required: false)
+
+if xsltproc.found()
+  xlstproc_flags = [
+    '--nonet',
+    '--stringparam', 'man.output.quietly', '1',
+    '--stringparam', 'funcsynopsis.style', 'ansi',
+    '--stringparam', 'man.th.extra1.suppress', '1',
+    '--stringparam', 'man.authors.section.enabled', '1',
+    '--stringparam', 'man.copyright.section.enabled', '1',
+  ]
+
+  xsltproc_args = [
+    xsltproc,
+    xlstproc_flags,
+    '-o', '@OUTPUT@',
+    'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
+    '@INPUT@',
+  ]
+
+  man_input_files = [
+    'rygel.xml',
+    'rygel.conf.xml'
+  ]
+
+  man_output_files = [
+    'rygel.1',
+    'rygel.conf.5'
+  ]
+
+  custom_target('man 1 pages',
+                input: 'rygel.xml',
+                output: 'rygel.1',
+                command: xsltproc_args,
+                install: true,
+                install_dir: join_paths(get_option('mandir'), 'man1'))
+
+  custom_target('man 5 pages',
+                input: 'rygel.conf.xml',
+                output: 'rygel.conf.5',
+                command: xsltproc_args,
+                install: true,
+                install_dir: join_paths(get_option('mandir'), 'man5'))
+endif
diff --git a/doc/meson.build b/doc/meson.build
new file mode 100644
index 00000000..41c733e5
--- /dev/null
+++ b/doc/meson.build
@@ -0,0 +1,2 @@
+subdir('man')
+subdir('reference')
diff --git a/doc/reference/librygel-core/meson.build b/doc/reference/librygel-core/meson.build
new file mode 100644
index 00000000..12f961a9
--- /dev/null
+++ b/doc/reference/librygel-core/meson.build
@@ -0,0 +1,57 @@
+if valadoc.found()
+core_doc_common_args = [
+        '--package-name', 'librygel-core',
+        '--package-version', '2.6',
+        '-b', join_paths(meson.source_root(), 'src', 'librygel-core'),
+        '--target-glib=2.32',
+        '--pkg', 'rygel-build-config',
+        '--force',
+        '--directory', '@OUTPUT@',
+        '--pkg', 'gio-2.0',
+        '--pkg', 'gee-0.8',
+        '--pkg', 'gupnp-1.0',
+        '--pkg', 'gmodule-2.0',
+        '--pkg', 'posix'
+ ]
+
+custom_target('valadoc-core',
+    input: core_sources,
+    output: 'valadoc',
+    depends : core_lib,
+    build_by_default : get_option('api-docs'),
+    command :
+    [
+        valadoc,
+        core_doc_common_args,
+        '-o', 'valadoc',
+        core_sources
+    ]
+)
+
+if gtkdoc.found()
+custom_target('gtkdoc-core',
+    input: core_sources,
+    output: 'gtkdoc',
+    depends : core_lib,
+    build_by_default : get_option('api-docs'),
+    command :
+    [
+        valadoc,
+        '--doclet', 'gtkdoc',
+        '-o', 'gtkdoc',
+        core_doc_common_args,
+        '-X', join_paths(meson.build_root(), 'src/librygel-core/rygel-core.h'),
+        '-X', '-l',
+        '-X', join_paths(meson.build_root(), 'src/librygel-core/librygel-core-2.6.so'),
+        '-b', join_paths(meson.source_root(), 'src', 'librygel-core'),
+        core_sources
+    ]
+)
+
+if get_option('api-docs')
+    install_subdir('gtkdoc/html',
+                   install_dir : join_paths(get_option('datadir'), 'gtk-doc/html/librygel-core'),
+                   strip_directory : true)
+endif
+endif
+endif
diff --git a/doc/reference/librygel-db/meson.build b/doc/reference/librygel-db/meson.build
new file mode 100644
index 00000000..c2b5d882
--- /dev/null
+++ b/doc/reference/librygel-db/meson.build
@@ -0,0 +1,65 @@
+if valadoc.found()
+db_doc_common_args = [
+        '--package-name', 'librygel-db',
+        '--package-version', '2.6',
+        '-b', join_paths(meson.source_root(), 'src', 'librygel-db'),
+        '--vapidir', join_paths(meson.source_root(), 'vapi'),
+        '--vapidir', join_paths(meson.source_root(), 'src/librygel-core'),
+        '--vapidir', join_paths(meson.build_root(), 'src/librygel-core'),
+        '--target-glib=2.32',
+        '--pkg', 'rygel-build-config',
+        '--force',
+        '--directory', '@OUTPUT@',
+        '--pkg', 'gio-2.0',
+        '--pkg', 'gee-0.8',
+        '--pkg', 'gupnp-1.0',
+        '--pkg', 'gmodule-2.0',
+        '--pkg', 'posix',
+        '--pkg', 'sqlite3',
+        '--pkg', 'gupnp-av-1.0',
+        '--pkg', 'rygel-core-2.6',
+]
+
+custom_target('valadoc-db',
+    input: db_sources,
+    output: 'valadoc',
+    depends: db_lib,
+    build_by_default : get_option('api-docs'),
+    command :
+    [
+        valadoc,
+        db_doc_common_args,
+        '-o', 'valadoc',
+        db_sources
+    ]
+)
+
+if gtkdoc.found()
+custom_target('gtkdoc-db',
+    input: db_sources,
+    output: 'gtkdoc',
+    depends : db_lib,
+    build_by_default : get_option('api-docs'),
+    command :
+    [
+        valadoc,
+        db_doc_common_args,
+        '--doclet', 'gtkdoc',
+        '-o', 'gtkdoc',
+        '-X', join_paths(meson.build_root(), 'src/librygel-db/rygel-db.h'),
+        '-X', '-l',
+        '-X', join_paths(meson.build_root(), 'src/librygel-db/librygel-db-2.6.so'),
+        '-X', '-l',
+        '-X', join_paths(meson.build_root(), 'src/librygel-core/librygel-core-2.6.so'),
+        db_sources
+    ]
+)
+
+if get_option('api-docs')
+    install_subdir('gtkdoc/html',
+                   install_dir : join_paths(get_option('datadir'), 'gtk-doc/html/librygel-db'),
+                   strip_directory : true)
+endif
+
+endif
+endif
diff --git a/doc/reference/librygel-renderer-gst/meson.build b/doc/reference/librygel-renderer-gst/meson.build
new file mode 100644
index 00000000..44c513ed
--- /dev/null
+++ b/doc/reference/librygel-renderer-gst/meson.build
@@ -0,0 +1,68 @@
+if valadoc.found()
+renderer_gst_doc_common_args = [
+        '--package-name', 'librygel-renderer-gst',
+        '--package-version', '2.6',
+        '-b', join_paths(meson.source_root(), 'src', 'librygel-renderer-gst'),
+        '--vapidir', join_paths(meson.source_root(), 'vapi'),
+        '--vapidir', join_paths(meson.source_root(), 'src/librygel-core'),
+        '--vapidir', join_paths(meson.build_root(), 'src/librygel-core'),
+        '--vapidir', join_paths(meson.build_root(), 'src', 'librygel-renderer'),
+        '--target-glib=2.32',
+        '--pkg', 'rygel-build-config',
+        '--force',
+        '--directory', '@OUTPUT@',
+        '--pkg', 'gio-2.0',
+        '--pkg', 'gee-0.8',
+        '--pkg', 'gupnp-1.0',
+        '--pkg', 'gmodule-2.0',
+        '--pkg', 'posix',
+        '--pkg', 'gupnp-av-1.0',
+        '--pkg', 'rygel-core-2.6',
+        '--pkg', 'rygel-renderer-2.6',
+        '--pkg', 'gstreamer-1.0',
+        '--pkg', 'gstreamer-audio-1.0'
+]
+
+custom_target('valadoc-renderer-gst',
+    input: renderer_gst_sources,
+    output: 'valadoc',
+    depends : renderer_gst_lib,
+    build_by_default : get_option('api-docs'),
+    command :
+    [
+        valadoc,
+        renderer_gst_doc_common_args,
+        '-o', 'valadoc',
+        renderer_gst_sources
+    ]
+)
+
+if gtkdoc.found()
+custom_target('gtkdoc-renderer-gst',
+    input: renderer_gst_sources,
+    output: 'gtkdoc',
+    depends : renderer_gst_lib,
+    build_by_default : get_option('api-docs'),
+    command :
+    [
+        valadoc,
+        renderer_gst_doc_common_args,
+        '--doclet', 'gtkdoc',
+        '-o', 'gtkdoc',
+        '-X', join_paths(meson.build_root(), 'src/librygel-renderer/rygel-renderer.h'),
+        '-X', '-l',
+        '-X', join_paths(meson.build_root(), 'src/librygel-renderer/librygel-renderer-2.6.so'),
+        '-X', '-l',
+        '-X', join_paths(meson.build_root(), 'src/librygel-core/librygel-core-2.6.so'),
+        '-X', '-l',
+        '-X', join_paths(meson.build_root(), 'src/librygel-renderer-gst/librygel-renderer-gst-2.6.so'),
+        renderer_gst_sources
+    ]
+)
+if get_option('api-docs')
+    install_subdir('gtkdoc/html',
+                   install_dir : join_paths(get_option('datadir'), 'gtk-doc/html/librygel-renderer-gst'),
+                   strip_directory : true)
+endif
+endif
+endif
diff --git a/doc/reference/librygel-renderer/meson.build b/doc/reference/librygel-renderer/meson.build
new file mode 100644
index 00000000..66c43d78
--- /dev/null
+++ b/doc/reference/librygel-renderer/meson.build
@@ -0,0 +1,62 @@
+if valadoc.found()
+renderer_doc_common_args = [
+        '--package-name', 'librygel-renderer',
+        '--package-version', '2.6',
+        '-b', join_paths(meson.source_root(), 'src', 'librygel-renderer'),
+        '--vapidir', join_paths(meson.source_root(), 'vapi'),
+        '--vapidir', join_paths(meson.source_root(), 'src/librygel-core'),
+        '--vapidir', join_paths(meson.build_root(), 'src/librygel-core'),
+        '--target-glib=2.32',
+        '--pkg', 'rygel-build-config',
+        '--force',
+        '--directory', '@OUTPUT@',
+        '--pkg', 'gio-2.0',
+        '--pkg', 'gee-0.8',
+        '--pkg', 'gupnp-1.0',
+        '--pkg', 'gmodule-2.0',
+        '--pkg', 'posix',
+        '--pkg', 'gupnp-av-1.0',
+        '--pkg', 'rygel-core-2.6'
+]
+
+custom_target('valadoc-renderer',
+    input: renderer_sources,
+    output: 'valadoc',
+    depends: renderer_lib,
+    build_by_default : get_option('api-docs'),
+    command :
+    [
+        valadoc,
+        renderer_doc_common_args,
+        '-o', 'valadoc',
+        renderer_sources
+    ]
+)
+
+if gtkdoc.found()
+custom_target('gtkdoc-renderer',
+    input: renderer_sources,
+    output: 'gtkdoc',
+    depends : renderer_lib,
+    build_by_default : get_option('api-docs'),
+    command :
+    [
+        valadoc,
+        renderer_doc_common_args,
+        '--doclet', 'gtkdoc',
+        '-o', 'gtkdoc',
+        '-X', join_paths(meson.build_root(), 'src/librygel-renderer/rygel-renderer.h'),
+        '-X', '-l',
+        '-X', join_paths(meson.build_root(), 'src/librygel-renderer/librygel-renderer-2.6.so'),
+        '-X', '-l',
+        '-X', join_paths(meson.build_root(), 'src/librygel-core/librygel-core-2.6.so'),
+        renderer_sources
+    ]
+)
+if get_option('api-docs')
+    install_subdir('gtkdoc/html',
+                   install_dir : join_paths(get_option('datadir'), 'gtk-doc/html/librygel-renderer'),
+                   strip_directory : true)
+endif
+endif
+endif
diff --git a/doc/reference/librygel-server/meson.build b/doc/reference/librygel-server/meson.build
new file mode 100644
index 00000000..6803d41b
--- /dev/null
+++ b/doc/reference/librygel-server/meson.build
@@ -0,0 +1,63 @@
+if valadoc.found()
+server_doc_common_args = [
+        '--package-name', 'librygel-server',
+        '--package-version', '2.6',
+        '-b', join_paths(meson.source_root(), 'src', 'librygel-server'),
+        '--vapidir', join_paths(meson.source_root(), 'vapi'),
+        '--vapidir', join_paths(meson.source_root(), 'src/librygel-core'),
+        '--vapidir', join_paths(meson.build_root(), 'src/librygel-core'),
+        '--target-glib=2.32',
+        '--pkg', 'rygel-build-config',
+        '--force',
+        '--directory', '@OUTPUT@',
+        '--pkg', 'gio-2.0',
+        '--pkg', 'gee-0.8',
+        '--pkg', 'gupnp-1.0',
+        '--pkg', 'gmodule-2.0',
+        '--pkg', 'posix',
+        '--pkg', 'gupnp-av-1.0',
+        '--pkg', 'rygel-core-2.6',
+        '--pkg', 'libmediaart-2.0'
+]
+
+custom_target('valadoc-server',
+    input: server_sources,
+    output: 'valadoc',
+    depends : server_lib,
+    build_by_default : get_option('api-docs'),
+    command :
+    [
+        valadoc,
+        server_doc_common_args,
+        '-o', 'valadoc',
+        server_sources
+    ]
+)
+
+if gtkdoc.found()
+custom_target('gtkdoc-server',
+    input: server_sources,
+    output: 'gtkdoc',
+    depends : server_lib,
+    build_by_default : get_option('api-docs'),
+    command :
+    [
+        valadoc,
+        server_doc_common_args,
+        '--doclet', 'gtkdoc',
+        '-o', 'gtkdoc',
+        '-X', join_paths(meson.build_root(), 'src/librygel-server/rygel-server.h'),
+        '-X', '-l',
+        '-X', join_paths(meson.build_root(), 'src/librygel-server/librygel-server-2.6.so'),
+        '-X', '-l',
+        '-X', join_paths(meson.build_root(), 'src/librygel-core/librygel-core-2.6.so'),
+        server_sources
+    ]
+)
+if get_option('api-docs')
+    install_subdir('gtkdoc/html',
+                   install_dir : join_paths(get_option('datadir'), 'gtk-doc/html/librygel-server'),
+                   strip_directory : true)
+endif
+endif
+endif
diff --git a/doc/reference/meson.build b/doc/reference/meson.build
new file mode 100644
index 00000000..443762f2
--- /dev/null
+++ b/doc/reference/meson.build
@@ -0,0 +1,5 @@
+subdir('librygel-core')
+subdir('librygel-db')
+subdir('librygel-renderer')
+subdir('librygel-renderer-gst')
+subdir('librygel-server')
\ No newline at end of file
diff --git a/examples/meson.build b/examples/meson.build
new file mode 100644
index 00000000..34cc1ae8
--- /dev/null
+++ b/examples/meson.build
@@ -0,0 +1,30 @@
+subdir('renderer-plugins')
+subdir('server-plugins')
+
+executable('standalone-server',
+           'standalone-server.c',
+           dependencies : [gio, rygel_core, rygel_server],
+           link_with : [core_lib, server_lib])
+
+executable('standalone-ruih',
+           'standalone-ruih.c',
+           dependencies : [gio, rygel_core, rygel_ruih],
+           link_with: [core_lib, ruih_lib])
+
+executable('standalone-renderer-gst',
+           'standalone-renderer-gst.c',
+           dependencies : [gstreamer,
+                           gstreamer_video,
+                           rygel_core,
+                           rygel_renderer,
+                           rygel_renderer_gst],
+           link_with: [core_lib, renderer_lib, renderer_gst_lib])
+
+executable('fullscreen-renderer',
+           'fullscreen-renderer.c',
+           dependencies : [gstreamer_video,
+                           gtk,
+                           rygel_core,
+                           rygel_renderer,
+                           rygel_renderer_gst],
+           link_with: [core_lib, renderer_lib, renderer_gst_lib])
diff --git a/examples/renderer-plugins/C/example-player.c b/examples/renderer-plugins/C/example-player.c
index c802e3cc..b4304577 100644
--- a/examples/renderer-plugins/C/example-player.c
+++ b/examples/renderer-plugins/C/example-player.c
@@ -130,10 +130,6 @@ static void
 rygel_example_player_finalize (GObject *obj);
 
 
-G_DEFINE_TYPE_WITH_CODE (RygelExamplePlayer, rygel_example_player, G_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (RYGEL_TYPE_MEDIA_PLAYER,
-                                                rygel_example_player_rygel_media_player_interface_init))
-
 struct _RygelExamplePlayerPrivate {
   gchar *_playback_state;
   gchar *_uri;
@@ -146,6 +142,12 @@ struct _RygelExamplePlayerPrivate {
   gchar *playback_speed;
   gchar *user_agent;
 };
+typedef struct _RygelExamplePlayerPrivate RygelExamplePlayerPrivate;
+
+G_DEFINE_TYPE_WITH_CODE (RygelExamplePlayer, rygel_example_player, G_TYPE_OBJECT,
+                         G_ADD_PRIVATE(RygelExamplePlayer)
+                         G_IMPLEMENT_INTERFACE (RYGEL_TYPE_MEDIA_PLAYER,
+                                                rygel_example_player_rygel_media_player_interface_init))
 
 static const gchar* RYGEL_EXAMPLE_PLAYER_PROTOCOLS[] = {"http-get", NULL};
 static const gchar* RYGEL_EXAMPLE_PLAYER_MIME_TYPES[] = {"image/jpeg", "image/png", NULL};
@@ -190,8 +192,6 @@ static void
 rygel_example_player_class_init (RygelExamplePlayerClass *klass) {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-  g_type_class_add_private (gobject_class, sizeof (RygelExamplePlayerPrivate));
-
   gobject_class->get_property = _rygel_example_player_get_property;
   gobject_class->set_property = _rygel_example_player_set_property;
   gobject_class->finalize = rygel_example_player_finalize;
diff --git a/examples/renderer-plugins/C/meson.build b/examples/renderer-plugins/C/meson.build
new file mode 100644
index 00000000..c0a0c49f
--- /dev/null
+++ b/examples/renderer-plugins/C/meson.build
@@ -0,0 +1,15 @@
+shared_module('rygel-example-renderer-plugin-c',
+              ['example-renderer-plugin.h',
+               'example-renderer-plugin.c',
+               'example-player.h',
+               'example-player.c'],
+              c_args : '-DG_LOG_DOMAIN="ExampleRendererPluginC"',
+              dependencies: [rygel_core, rygel_renderer],
+              link_with : [core_lib, renderer_lib],
+              install : true,
+              install_dir : rygel_plugindir)
+
+configure_file(input : 'example-renderer-c.plugin.in',
+               output : 'example-renderer-c.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_plugindir)
diff --git a/examples/renderer-plugins/meson.build b/examples/renderer-plugins/meson.build
new file mode 100644
index 00000000..9684ef9d
--- /dev/null
+++ b/examples/renderer-plugins/meson.build
@@ -0,0 +1,2 @@
+subdir('C')
+subdir('vala')
diff --git a/examples/renderer-plugins/vala/meson.build b/examples/renderer-plugins/vala/meson.build
new file mode 100644
index 00000000..8d3c2a8a
--- /dev/null
+++ b/examples/renderer-plugins/vala/meson.build
@@ -0,0 +1,12 @@
+shared_module('rygel-example-renderer-plugin-vala',
+              ['example-renderer-plugin-vala.vala',
+               'example-player-vala.vala'],
+              c_args : '-DG_LOG_DOMAIN="ExampleRendererPluginVala"',
+              dependencies : common_deps + [gupnp_av, rygel_core, rygel_renderer],
+              install : true,
+              install_dir : rygel_plugindir)
+
+configure_file(input : 'example-renderer-vala.plugin.in',
+               output : 'example-renderer-vala.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_plugindir)
diff --git a/examples/server-plugins/C/meson.build b/examples/server-plugins/C/meson.build
new file mode 100644
index 00000000..34c3d826
--- /dev/null
+++ b/examples/server-plugins/C/meson.build
@@ -0,0 +1,14 @@
+shared_module('rygel-example-server-plugin-c',
+              ['example-server-plugin.h',
+               'example-server-plugin.c',
+               'example-root-container.h',
+               'example-root-container.c'],
+              c_args : '-DG_LOG_DOMAIN="ExampleServerPluginC"',
+              dependencies: [rygel_core, rygel_server],
+              install : true,
+              install_dir : rygel_plugindir)
+
+configure_file(input : 'example-server-c.plugin.in',
+               output : 'example-server-c.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_plugindir)
diff --git a/examples/server-plugins/meson.build b/examples/server-plugins/meson.build
new file mode 100644
index 00000000..9684ef9d
--- /dev/null
+++ b/examples/server-plugins/meson.build
@@ -0,0 +1,2 @@
+subdir('C')
+subdir('vala')
diff --git a/examples/server-plugins/vala/meson.build b/examples/server-plugins/vala/meson.build
new file mode 100644
index 00000000..607792aa
--- /dev/null
+++ b/examples/server-plugins/vala/meson.build
@@ -0,0 +1,12 @@
+shared_module('rygel-example-server-plugin-vala',
+              ['example-server-plugin-vala.vala',
+               'example-root-container-vala.vala'],
+              c_args : '-DG_LOG_DOMAIN="ExampleServerPluginVala"',
+              dependencies : common_deps + [gupnp_av, rygel_core, rygel_server],
+              install : true,
+              install_dir : rygel_plugindir)
+
+configure_file(input : 'example-server-vala.plugin.in',
+               output : 'example-server-vala.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_plugindir)
diff --git a/meson.build b/meson.build
new file mode 100644
index 00000000..cab6efd6
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,202 @@
+project('rygel', 'vala', 'c', version : '0.37.0')
+vala = meson.get_compiler('vala')
+
+# Check for the required vala version
+vala_version_required = '>= 0.40'
+vala_version_found = vala.version()
+
+if not vala_version_found.version_compare(vala_version_required)
+    error('Found Vala version @0@, need @1@'.format(vala_version_found, vala_version_required))
+endif
+
+i18n = import('i18n')
+
+rygel_libdir = join_paths(get_option('prefix'), get_option('libdir'))
+rygel_includedir = join_paths(get_option('includedir'), 'rygel-2.6')
+rygel_vapidir = join_paths(get_option('prefix'), get_option('datadir'), 'vala/vapi')
+
+if not get_option('uninstalled')
+    rygel_datadir = join_paths(get_option('prefix'), get_option('datadir'))
+    rygel_libexecdir = join_paths(get_option('prefix'), get_option('libexecdir'),
+    'rygel')
+    rygel_sysconfdir = join_paths(get_option('prefix'), get_option('sysconfdir'))
+    rygel_plugindir = join_paths(rygel_libdir, 'rygel-2.6', 'plugins')
+    rygel_enginedir = join_paths(rygel_libdir, 'rygel-2.6', 'engines')
+    rygel_presetdir = join_paths(rygel_datadir, 'rygel', 'presets')
+    rygel_icondir = join_paths(rygel_datadir, 'icons', 'hicolor')
+    rygel_bigicondir = join_paths(rygel_datadir, 'rygel', 'icons', '120x120')
+    rygel_smallicondir = join_paths(rygel_datadir, 'rygel', 'icons', '48x48')
+    rygel_includedir = join_paths(get_option('includedir'), 'rygel-2.6')
+    rygel_vapidir = join_paths(rygel_datadir, 'vala', 'vapi')
+else
+    rygel_datadir = join_paths(meson.current_build_dir(), 'data')
+    rygel_libexecdir = join_paths(meson.current_build_dir(), 'src/plugins/media-export')
+    rygel_sysconfdir = join_paths(meson.current_source_dir(), 'data')
+    rygel_plugindir = join_paths(meson.current_build_dir(), 'src', 'plugins')
+    rygel_enginedir = join_paths(meson.current_build_dir(), 'src', 'media-engines')
+    rygel_presetdir = join_paths(meson.current_source_dir(), 'data', 'presets')
+    rygel_icondir = join_paths(meson.current_source_dir(), 'data', 'icons', 'hicolor')
+    rygel_bigicondir = join_paths(meson.current_source_dir(), 'data', 'icons', '120x120')
+    rygel_smallicondir = join_paths(meson.current_source_dir(), 'data', 'icons', '48x48')
+endif
+
+plugin_config = configuration_data()
+plugin_config.set('VERSION', meson.project_version())
+plugin_config.set('PACKAGE_URL', 'http://www.rygel-project.org')
+
+conf = configuration_data()
+conf.set_quoted('GETTEXT_PACKAGE', 'rygel')
+conf.set_quoted('PACKAGE_NAME', 'Rygel')
+conf.set_quoted('PACKAGE_STRING', 'Rygel @0@'.format(meson.project_version()))
+conf.set_quoted('PACKAGE_VERSION', meson.project_version())
+conf.set_quoted('PACKAGE_URL', 'http://www.rygel-project.org')
+conf.set_quoted('ENGINE_DIR', rygel_enginedir)
+conf.set_quoted('PRESET_DIR', rygel_presetdir)
+conf.set_quoted('DATA_DIR', rygel_datadir)
+conf.set_quoted('PLUGIN_DIR', rygel_plugindir)
+conf.set_quoted('BIG_ICON_DIR', rygel_bigicondir)
+conf.set_quoted('SMALL_ICON_DIR', rygel_smallicondir)
+conf.set_quoted('SYS_CONFIG_DIR', rygel_sysconfdir)
+conf.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir')))
+conf.set_quoted('MX_EXTRACT_PATH', join_paths(rygel_libexecdir, 'mx-extract'))
+conf.set_quoted('DESKTOP_DIR', join_paths(rygel_datadir, 'applications'))
+conf.set_quoted('VERSION', meson.project_version())
+config_include = include_directories('.')
+
+add_global_arguments(['-include','config.h'], language : 'c')
+
+valadoc = find_program('valadoc', required : false)
+gtkdoc = dependency('gtk-doc', required : false)
+
+gupnp = dependency('gupnp-1.0', version : '>= 1.0')
+gee = dependency('gee-0.8', version: '>= 0.8.0')
+gssdp = dependency('gssdp-1.0', version : '>= 1.0')
+glib = dependency('glib-2.0', version : '>= 2.26')
+gio = dependency('gio-2.0', version : '>= 2.26')
+gio_unix = dependency('gio-unix-2.0', version : '>= 2.26')
+gmodule = dependency('gmodule-2.0')
+libxml = dependency('libxml-2.0', version: '>= 2.7')
+gupnp_av = dependency('gupnp-av-1.0', version: '>= 0.12.8')
+gupnp_dlna = dependency('gupnp-dlna-2.0', version: '>= 0.9.4')
+soup = dependency('libsoup-2.4', version : '>= 2.44.0')
+mediaart = dependency('libmediaart-2.0', version : '>= 0.7.0')
+sqlite = dependency('sqlite3', version : '>= 3.5')
+
+if get_option('gstreamer')
+    gstreamer = dependency('gstreamer-1.0', version : '>= 1.0')
+    gstreamer_pbu = dependency('gstreamer-pbutils-1.0', version : '>= 1.0')
+    gstreamer_base = dependency('gstreamer-base-1.0', version : '>= 1.0')
+    gstreamer_audio = dependency('gstreamer-audio-1.0', version : '>= 1.0')
+    gstreamer_video = dependency('gstreamer-video-1.0', version : '>= 1.0')
+    gstreamer_tag = dependency('gstreamer-tag-1.0', version : '>= 1.0')
+    gupnp_dlna_gst = dependency('gupnp-dlna-gst-2.0', version: '>= 0.9.4')
+else
+    gstreamer = disabler()
+    gstreamer_pbu = disabler()
+    gstreamer_base = disabler()
+    gstreamer_audio = disabler()
+    gstreamer_video = disabler()
+    gstreamer_tag = disabler()
+    gupnp_dlna_gst = disabler()
+endif
+
+gdk_pixbuf = dependency('gdk-pixbuf-2.0')
+
+if get_option('gtk')
+    gtk = dependency('gtk+-3.0', version : '>= 3.0')
+else
+    gtk = disabler()
+endif
+
+posix = vala.find_library('posix')
+
+sed = find_program('sed')
+g_ir_compiler = find_program('g-ir-compiler')
+gir_dir = join_paths(get_option('datadir'), 'gir-1.0')
+typelib_dir = join_paths(get_option('libdir'), 'girepository-1.0')
+pkgconfig_dir = join_paths(get_option('libdir'), 'pkgconfig')
+
+cc = meson.get_compiler('c')
+math = cc.find_library('m', required: false)
+unistring = cc.find_library('unistring', required: false)
+u8_strcoll_available = cc.has_function('u8_strcoll', dependencies: unistring)
+conf.set10('HAVE_UNISTRING', u8_strcoll_available)
+
+common_deps = [gupnp, gee]
+
+core_deps = common_deps + [gssdp, gio, gmodule, libxml, posix, math]
+renderer_deps = common_deps + [gupnp_av, soup]
+renderer_gst_deps = common_deps + [gstreamer, gstreamer_audio]
+server_deps = common_deps + [gssdp, gupnp_av, soup, mediaart, gmodule, libxml]
+db_deps = common_deps + [gupnp_av, gio, sqlite, unistring]
+media_engine_gst_dep = [gee, gupnp_av, libxml, gio, gstreamer, gstreamer_pbu,
+                        gstreamer_base, gupnp_dlna]
+ruih_deps = common_deps
+rygel_deps = common_deps
+
+external_plugin_deps = [gio]
+gst_launch_plugin_deps = [gstreamer]
+lms_deps = [sqlite]
+mx_export_deps = common_deps + [gio, gio_unix, gstreamer, gstreamer_pbu,
+                                gupnp_dlna, gupnp_av, mediaart, gdk_pixbuf,
+                                posix, gupnp_dlna_gst, gstreamer_tag, libxml,
+                                soup]
+mx_plugin_deps = common_deps + [gstreamer, gstreamer_pbu, gio_unix, gupnp_dlna]
+ui_deps = common_deps + [gtk]
+
+configure_file(output: 'config.h', configuration: conf)
+
+pc_conf = configuration_data()
+pc_conf.set('prefix', get_option('prefix'))
+pc_conf.set('exec_prefix', '${prefix}')
+pc_conf.set('libdir', join_paths(get_option('prefix'), get_option('libdir')))
+pc_conf.set('includedir', join_paths('${prefix}', get_option('includedir')))
+pc_conf.set('VERSION', '"@0@"'.format(meson.project_version()))
+pc_conf.set('RYGEL_PLUGIN_DIR', rygel_plugindir)
+pc_conf.set('RYGEL_MEDIA_ENGINE_DIR', rygel_enginedir)
+pc_conf.set('RYGEL_PLUGIN_LINKER_FLAGS', '')
+pc_conf.set('RYGEL_ENGINE_LINKER_FLAGS', '')
+
+configure_file(output: 'rygel-core-2.6.pc',
+               input: 'rygel-core-2.6.pc.in',
+               configuration: pc_conf,
+               install: true,
+               install_dir : pkgconfig_dir)
+
+configure_file(output: 'rygel-server-2.6.pc',
+               input: 'rygel-server-2.6.pc.in',
+               configuration: pc_conf,
+               install: true,
+               install_dir : pkgconfig_dir)
+
+configure_file(output: 'rygel-renderer-2.6.pc',
+               input: 'rygel-renderer-2.6.pc.in',
+               configuration: pc_conf,
+               install: true,
+               install_dir : pkgconfig_dir)
+
+configure_file(output: 'rygel-renderer-gst-2.6.pc',
+               input: 'rygel-renderer-gst-2.6.pc.in',
+               configuration: pc_conf,
+               install: true,
+               install_dir : pkgconfig_dir)
+
+configure_file(output: 'rygel-ruih-2.0.pc',
+               input: 'rygel-ruih-2.0.pc.in',
+               configuration: pc_conf,
+               install: true,
+               install_dir : pkgconfig_dir)
+
+subdir('src')
+subdir('po')
+subdir('data')
+subdir('doc')
+
+if get_option('examples')
+    subdir('examples')
+endif
+
+
+if get_option('tests')
+    subdir('tests')
+endif
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 00000000..f09cac58
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,9 @@
+option('uninstalled', type: 'boolean', value: 'false', description: 'Run Rygel from build directory only')
+option('api-docs', type: 'boolean', value: 'false', description: 'Build the API documentation')
+option('systemd-user-units-dir', type : 'string', value : 'auto', description : 'Where to install the 
systemd user unit (use special values "auto" or "none", or pass a path')
+option('plugins', type : 'array', choices : ['external', 'gst-launch', 'lms', 'media-export', 'mpris', 
'playbin', 'ruih', 'tracker'])
+option('engines', type : 'array', choices : ['simple', 'gstreamer'])
+option('examples', type : 'boolean', value : 'true')
+option('tests', type : 'boolean', value : 'true')
+option('gstreamer', type : 'boolean', value : 'true')
+option('gtk', type : 'boolean', value : 'true')
diff --git a/po/meson.build b/po/meson.build
new file mode 100644
index 00000000..55001cf4
--- /dev/null
+++ b/po/meson.build
@@ -0,0 +1 @@
+i18n.gettext('rygel', preset: 'glib')
diff --git a/src/librygel-core/meson.build b/src/librygel-core/meson.build
new file mode 100644
index 00000000..048ac35d
--- /dev/null
+++ b/src/librygel-core/meson.build
@@ -0,0 +1,84 @@
+core_sources = files(
+    'rygel-connection-manager.vala',
+    'rygel-basic-management.vala',
+    'rygel-basic-management-test.vala',
+    'rygel-basic-management-test-ping.vala',
+    'rygel-basic-management-test-nslookup.vala',
+    'rygel-basic-management-test-traceroute.vala',
+    'rygel-description-file.vala',
+    'rygel-dlna-profile.vala',
+    'rygel-energy-management.vala',
+    'rygel-root-device.vala',
+    'rygel-root-device-factory.vala',
+    'rygel-dbus-interface.vala',
+    'rygel-log-handler.vala',
+    'rygel-meta-config.vala',
+    'rygel-plugin-loader.vala',
+    'rygel-recursive-module-loader.vala',
+    'rygel-plugin.vala',
+    'rygel-resource-info.vala',
+    'rygel-media-device.vala',
+    'rygel-configuration.vala',
+    'rygel-base-configuration.vala',
+    'rygel-cmdline-config.vala',
+    'rygel-environment-config.vala',
+    'rygel-user-config.vala',
+    'rygel-state-machine.vala',
+    'rygel-v1-hacks.vala',
+    'rygel-icon-info.vala',
+    'rygel-xml-utils.vala',
+    'rygel-plugin-information.vala',
+    'rygel-energy-management-helper.c',
+    'rygel-build-config.vapi')
+
+build_config = declare_dependency(include_directories : config_include,
+                                  sources : 'rygel-build-config.vapi')
+
+
+# Rygel GIR generation is a tad special. We need to hammer in custom namespaces
+# since the libraries used to be in one binary. So
+# Step one: Build the library, generate the GIR from vala but do not install it
+core_lib = library('rygel-core-2.6', core_sources,
+        dependencies : core_deps,
+        include_directories: [config_include, include_directories('.')],
+        version: '2.0.4',
+        c_args : ['-DG_LOG_DOMAIN="RygelCore"'],
+        vala_gir : 'Rygel-2.6.gir',
+        vala_header : 'rygel-core.h',
+        install: true,
+        install_dir : [true, rygel_includedir, true, false])
+install_data('rygel-core-2.6.deps', install_dir : rygel_vapidir)
+
+# Step two: Do the namespace magic with sed
+# We cannot use input: here since the generated ninja build file does not seem
+# to know that Rygel-2.6.gir is a result of building rygel-core-2.6 target
+# The custom_target call depends on the core_lib to make sure it is build before
+# and the name of the generated GIR is passed directly to sed as part of the
+# commandline
+core_gir = custom_target('RygelCore-2.6.gir',
+              command: [sed, '-e', 's,Rygel[.],RygelCore.,g',
+                        '-e', 's,namespace name="Rygel",namespace name="RygelCore",g',
+                        join_paths(meson.current_build_dir(), 'Rygel-2.6.gir')],
+              depends: core_lib,
+              output: 'RygelCore-2.6.gir',
+              capture: true,
+              install: true,
+              install_dir: gir_dir)
+
+# Step three: Compile the typelib. The dependency issue is similar to step two,
+# so we depend on the custom_target from that step and pass the input through
+# commandline.
+custom_target('RygelCore-2.6.typelib',
+               command: [g_ir_compiler, '--output', '@OUTPUT@', join_paths(meson.current_build_dir(), 
'RygelCore-2.6.gir')],
+               output: 'RygelCore-2.6.typelib',
+               depends: core_gir,
+               install: true,
+               install_dir: typelib_dir)
+
+# need to add to get the current build dir as include dir
+rygel_core = declare_dependency(include_directories: include_directories('.'),
+                                dependencies: core_deps,
+                                link_with: core_lib)
+
+# necessary to be able to pass it to g-ir-compiler in other libs
+core_girdir = meson.current_build_dir()
diff --git a/src/librygel-db/collate.c b/src/librygel-db/collate.c
index a029e515..210ba4d7 100644
--- a/src/librygel-db/collate.c
+++ b/src/librygel-db/collate.c
@@ -22,7 +22,7 @@
 
 #include <glib.h>
 
-#ifdef HAVE_UNISTRING
+#if HAVE_UNISTRING
 #   include <unistr.h>
 #endif
 
@@ -36,7 +36,7 @@ gint rygel_database_utf8_collate_str (const char *a, gsize alen,
     a_str = g_strndup (a, alen);
     b_str = g_strndup (b, blen);
 
-#ifdef HAVE_UNISTRING
+#if HAVE_UNISTRING
     result = u8_strcoll ((const uint8_t *) a_str, (const uint8_t *) b_str);
 #else
     return g_utf8_collate (a_str, b_str);
diff --git a/src/librygel-db/meson.build b/src/librygel-db/meson.build
new file mode 100644
index 00000000..ec7eaf3e
--- /dev/null
+++ b/src/librygel-db/meson.build
@@ -0,0 +1,22 @@
+db_sources = files(
+    'database-cursor.vala',
+    'database.vala',
+    'sql-function.vala',
+    'sql-operator.vala',
+    'collate.c'
+)
+
+db_lib = library('rygel-db-2.6', db_sources,
+        dependencies : db_deps + [rygel_core],
+        include_directories: [config_include, include_directories('.')],
+        version: '2.0.4',
+        c_args : ['-DG_LOG_DOMAIN="RygelDb"'],
+        vala_header : 'rygel-db.h',
+        install: true,
+        install_dir : [true, rygel_includedir, true])
+install_data('rygel-db-2.6.deps', install_dir : rygel_vapidir)
+
+# need to add to get the current build dir as include dir
+rygel_db = declare_dependency(include_directories: include_directories('.'),
+                                dependencies: db_deps,
+                                link_with: db_lib)
diff --git a/src/librygel-renderer-gst/meson.build b/src/librygel-renderer-gst/meson.build
new file mode 100644
index 00000000..aa564119
--- /dev/null
+++ b/src/librygel-renderer-gst/meson.build
@@ -0,0 +1,45 @@
+renderer_gst_sources = files(
+    'rygel-playbin-player.vala',
+    'rygel-playbin-renderer.vala',
+)
+
+renderer_gst_lib = library('rygel-renderer-gst-2.6', renderer_gst_sources,
+        dependencies : renderer_gst_deps + [build_config, rygel_core, rygel_renderer],
+        version: '2.0.4',
+        c_args : ['-DG_LOG_DOMAIN="RygelRendererGst"'],
+        vala_gir : 'Rygel-2.6.gir',
+        vala_header : 'rygel-renderer-gst.h',
+        install: true,
+        install_dir : [true, rygel_includedir, true, false])
+install_data('rygel-renderer-gst-2.6.deps', install_dir : rygel_vapidir)
+
+# For details on the GIR/typelib generating process, see
+# librygel-core/meson.build
+renderer_gst_gir = custom_target('RygelRendererGst-2.6.gir',
+              command: [sed, '-e', 's,Rygel[.],RygelRendererGst.,g',
+                             '-e', 's,RygelRendererGst[.]MediaRenderer,RygelRenderer.MediaRenderer,g',
+                             '-e', 's,RygelRendererGst[.]MediaPlayer,RygelRenderer.MediaPlayer,g',
+                             '-e', 's,namespace name="Rygel",namespace name="RygelRendererGst",g',
+                             '-e', 's,RygelRendererGst[.]Plugin,RygelCore.Plugin,g',
+                             '-e', 's,<package name="rygel-renderer-gst-2.6"/>,<include name="RygelCore" 
version="2.6"/><include name="RygelRenderer" version="2.6"/><package name="rygel-renderer-gst-2.6"/>,',
+                        join_paths(meson.current_build_dir(), 'Rygel-2.6.gir')],
+              output: 'RygelRendererGst-2.6.gir',
+              depends: renderer_gst_lib,
+              capture: true,
+              install: true,
+              install_dir: gir_dir)
+
+custom_target('RygelRendererGst-2.6.typelib',
+               command: [g_ir_compiler,
+                        '--output', '@OUTPUT@',
+                        '--includedir', core_girdir,
+                        '--includedir', renderer_girdir,
+                        join_paths(meson.current_build_dir(), 'RygelRendererGst-2.6.gir')],
+               output: 'RygelRendererGst-2.6.typelib',
+               depends: [renderer_gst_lib, renderer_lib, renderer_gst_gir],
+               install: true,
+               install_dir: typelib_dir)
+
+rygel_renderer_gst = declare_dependency(include_directories : include_directories('.'),
+                                        dependencies : renderer_gst_deps,
+                                        link_with: renderer_gst_lib)
diff --git a/src/librygel-renderer/meson.build b/src/librygel-renderer/meson.build
new file mode 100644
index 00000000..b14eef66
--- /dev/null
+++ b/src/librygel-renderer/meson.build
@@ -0,0 +1,55 @@
+renderer_sources = files(
+    'rygel-media-renderer-plugin.vala',
+    'rygel-media-player.vala',
+    'rygel-media-renderer.vala',
+    'rygel-player-controller.vala',
+    'rygel-av-transport.vala',
+    'rygel-default-player-controller.vala',
+    'rygel-rendering-control.vala',
+    'rygel-sink-connection-manager.vala',
+    'rygel-time-utils.vala',
+    'rygel-changelog.vala',
+    'rygel-volume.vala'
+)
+
+renderer_lib = library('rygel-renderer-2.6', renderer_sources,
+        dependencies : renderer_deps + [build_config, rygel_core],
+        version: '2.0.4',
+        c_args : ['-DG_LOG_DOMAIN="RygelRenderer"'],
+        vala_gir : 'Rygel-2.6.gir',
+        vala_header : 'rygel-renderer.h',
+        install: true,
+        install_dir : [true, rygel_includedir, true, false])
+install_data('rygel-renderer-2.6.deps', install_dir : rygel_vapidir)
+
+# For details on the GIR / typelib generation process, see
+# librygel-core/meson.build
+renderer_gir = custom_target('RygelRenderer-2.6.gir',
+              command: [sed, '-e', 's,Rygel[.],RygelRenderer.,g',
+                                          '-e', 's,namespace name="Rygel",namespace name="RygelRenderer",g',
+                                          '-e', 's,RygelRenderer[.]Plugin,RygelCore.Plugin,g',
+                                          '-e', 's,RygelRenderer[.]MediaDevice,RygelCore.MediaDevice,g',
+                                          '-e', 's|<package name="rygel-renderer-2.6"/>|<include 
name="RygelCore" version="2.6"/><package name="rygel-renderer-2.6"/>|',
+                        join_paths(meson.current_build_dir(), 'Rygel-2.6.gir')],
+              output: 'RygelRenderer-2.6.gir',
+              depends: renderer_lib,
+              capture: true,
+              install: true,
+              install_dir: gir_dir)
+
+custom_target('RygelRenderer-2.6.typelib',
+               command: [g_ir_compiler,
+                        '--output', '@OUTPUT@',
+                        '--includedir', core_girdir,
+                        join_paths(meson.current_build_dir(), 'RygelRenderer-2.6.gir')],
+               output: 'RygelRenderer-2.6.typelib',
+               depends: renderer_gir,
+               install: true,
+               install_dir: typelib_dir)
+
+
+rygel_renderer = declare_dependency(include_directories : include_directories('.'),
+                                    dependencies : renderer_deps,
+                                    link_with: renderer_lib)
+
+renderer_girdir = meson.current_build_dir()
diff --git a/src/librygel-ruih/meson.build b/src/librygel-ruih/meson.build
new file mode 100644
index 00000000..ff50be9f
--- /dev/null
+++ b/src/librygel-ruih/meson.build
@@ -0,0 +1,27 @@
+ruih_sources = [
+    'rygel-ruih-filter-entry.vala',
+    'rygel-ruih-icon-elem.vala',
+    'rygel-ruih-protocol-elem.vala',
+    'rygel-ruih-server-plugin.vala',
+    'rygel-ruih-server.vala',
+    'rygel-ruih-service.vala',
+    'rygel-ruih-service-error.vala',
+    'rygel-ruih-servicemanager.vala',
+    'rygel-ruih-ui-elem.vala',
+    'rygel-ruih-ui-listing.vala',
+    'rygel-ruih-wildcard-filter-entry.vala'
+]
+
+ruih_lib = library('rygel-ruih-2.0', ruih_sources,
+        dependencies : ruih_deps + [build_config, rygel_core],
+        version: '1.0.0',
+        c_args : ['-DG_LOG_DOMAIN="RygelRuih"'],
+        vala_header : 'rygel-ruih.h',
+        install: true,
+        install_dir : [true, rygel_includedir, true])
+install_data('rygel-ruih-2.0.deps', install_dir : rygel_vapidir)
+
+# need to add to get the current build dir as include dir
+rygel_ruih = declare_dependency(include_directories: include_directories('.'),
+                                  dependencies : ruih_deps,
+                                  link_with: ruih_lib)
diff --git a/src/librygel-server/meson.build b/src/librygel-server/meson.build
new file mode 100644
index 00000000..35910283
--- /dev/null
+++ b/src/librygel-server/meson.build
@@ -0,0 +1,134 @@
+server_sources = files(
+    'rygel-audio-item.vala',
+    'rygel-image-item.vala',
+    'rygel-logical-expression.vala',
+    'rygel-media-art-store.vala',
+    'rygel-media-objects.vala',
+    'rygel-music-item.vala',
+    'rygel-photo-item.vala',
+    'rygel-relational-expression.vala',
+    'rygel-simple-container.vala',
+    'rygel-subtitle.vala',
+    'rygel-thumbnail.vala',
+    'rygel-video-item.vala',
+    'rygel-media-container.vala',
+    'rygel-media-item.vala',
+    'rygel-media-file-item.vala',
+    'rygel-media-object.vala',
+    'rygel-media-resource.vala',
+    'rygel-media-server-plugin.vala',
+    'rygel-search-expression.vala',
+    'rygel-searchable-container.vala',
+    'rygel-trackable-container.vala',
+    'rygel-trackable-item.vala',
+    'rygel-visual-item.vala',
+    'rygel-writable-container.vala',
+    'rygel-media-server.vala',
+    'rygel-media-engine.vala',
+    'rygel-http-seek.vala',
+    'rygel-data-source.vala',
+    'rygel-updatable-object.vala',
+    'rygel-playlist-item.vala',
+    'rygel-browse.vala',
+    'rygel-client-hacks.vala',
+    'rygel-content-directory.vala',
+    'rygel-dbus-thumbnailer.vala',
+    'rygel-engine-loader.vala',
+    'rygel-http-byte-seek-request.vala',
+    'rygel-http-byte-seek-response.vala',
+    'rygel-free-desktop-interfaces.vala',
+    'rygel-http-get-handler.vala',
+    'rygel-http-get.vala',
+    'rygel-http-thumbnail-handler.vala',
+    'rygel-http-subtitle-handler.vala',
+    'rygel-http-item-uri.vala',
+    'rygel-http-post.vala',
+    'rygel-http-request.vala',
+    'rygel-http-response.vala',
+    'rygel-http-response-element.vala',
+    'rygel-http-server.vala',
+    'rygel-http-time-seek-request.vala',
+    'rygel-http-time-seek-response.vala',
+    'rygel-http-resource-handler.vala',
+    'rygel-import-resource.vala',
+    'rygel-object-creator.vala',
+    'rygel-reference-creator.vala',
+    'rygel-item-destroyer.vala',
+    'rygel-item-updater.vala',
+    'rygel-object-removal-queue.vala',
+    'rygel-last-change-entry.vala',
+    'rygel-last-change-obj-add.vala',
+    'rygel-last-change-obj-del.vala',
+    'rygel-last-change-obj-mod.vala',
+    'rygel-last-change-st-done.vala',
+    'rygel-last-change.vala',
+    'rygel-lg-tv-hacks.vala',
+    'rygel-m3u-playlist.vala',
+    'rygel-media-query-action.vala',
+    'rygel-media-receiver-registrar.vala',
+    'rygel-panasonic-hacks.vala',
+    'rygel-samsung-tv-hacks.vala',
+    'rygel-seek-hacks.vala',
+    'rygel-search-criteria-parser.vala',
+    'rygel-search.vala',
+    'rygel-serializer.vala',
+    'rygel-source-connection-manager.vala',
+    'rygel-subtitle-manager.vala',
+    'rygel-thumbnailer.vala',
+    'rygel-wmp-hacks.vala',
+    'rygel-xbmc-hacks.vala',
+    'rygel-xbmc4xbox-hacks.vala',
+    'rygel-xbox-hacks.vala',
+    'rygel-phillips-hacks.vala',
+    'rygel-data-sink.vala',
+    'rygel-playspeed.vala',
+    'rygel-playspeed-request.vala',
+    'rygel-playspeed-response.vala',
+    'rygel-dtcp-cleartext-request.vala',
+    'rygel-dtcp-cleartext-response.vala',
+    'rygel-dlna-available-seek-request.vala',
+    'rygel-dlna-available-seek-response.vala')
+
+server_lib = library('rygel-server-2.6', server_sources,
+        dependencies : server_deps + [build_config, rygel_core],
+        version: '2.0.4',
+        c_args : ['-DG_LOG_DOMAIN="RygelServer"'],
+        vala_gir : 'Rygel-2.6.gir',
+        vala_header : 'rygel-server.h',
+        install: true,
+        install_dir : [true, rygel_includedir, true, false])
+install_data('rygel-server-2.6.deps', install_dir : rygel_vapidir)
+
+
+# For details on the GIR/typelib generation process, see
+# librygel-core/meson.build
+server_gir = custom_target('RygelServer-2.6.gir',
+              command: [sed, '-e', 's,Rygel[.],RygelServer.,g',
+                                          '-e', 's,namespace name="Rygel",namespace name="RygelServer",g',
+                                          '-e', 's,RygelServer[.]Plugin,RygelCore.Plugin,g',
+                                          '-e', 's,RygelServer[.]MediaDevice,RygelCore.MediaDevice,g',
+                                          '-e', 's|<package name="rygel-server-2.6"/>|<include 
name="RygelCore" version="2.6"/><package name="rygel-server-2.6"/>|',
+                        join_paths(meson.current_build_dir(), 'Rygel-2.6.gir')],
+              output: 'RygelServer-2.6.gir',
+              capture: true,
+              depends: server_lib,
+              install: true,
+              install_dir: join_paths(get_option('datadir'),'gir-1.0'))
+
+custom_target('RygelServer-2.6.typelib',
+               command: [g_ir_compiler,
+                        '--output', '@OUTPUT@',
+                        '--includedir', core_girdir,
+                        join_paths(meson.current_build_dir(), 'RygelServer-2.6.gir')],
+               output: 'RygelServer-2.6.typelib',
+               depends: server_gir,
+               install: true,
+               install_dir: typelib_dir)
+
+# need to add to get the current build dir as include dir
+rygel_server = declare_dependency(include_directories: include_directories('.'),
+                                  dependencies : server_deps,
+                                  link_with: server_lib)
+
+# necessary to be able to pass it to g-ir-compiler in other libs
+server_girdir = meson.current_build_dir()
\ No newline at end of file
diff --git a/src/media-engines/gstreamer/meson.build b/src/media-engines/gstreamer/meson.build
new file mode 100644
index 00000000..04cb2077
--- /dev/null
+++ b/src/media-engines/gstreamer/meson.build
@@ -0,0 +1,29 @@
+configure_file(input : 'media-engine-gst.plugin.in',
+               output : 'media-engine-gst.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_enginedir)
+
+media_engine_gst_sources = [
+    'rygel-aac-transcoder.vala',
+    'rygel-audio-transcoder.vala',
+    'rygel-avc-transcoder.vala',
+    'rygel-gst-data-source.vala',
+    'rygel-gst-media-engine.vala',
+    'rygel-gst-sink.vala',
+    'rygel-gst-transcoder.vala',
+    'rygel-gst-utils.vala',
+    'rygel-jpeg-transcoder.vala',
+    'rygel-l16-transcoder.vala',
+    'rygel-mp2ts-transcoder.vala',
+    'rygel-mp3-transcoder.vala',
+    'rygel-video-transcoder.vala',
+    'rygel-wmv-transcoder.vala'
+    ]
+
+
+shared_module('rygel-media-engine-gst',
+              media_engine_gst_sources,
+              dependencies: media_engine_gst_dep + [build_config, rygel_core, rygel_server],
+              c_args : ['-DG_LOG_DOMAIN="MediaEngine-GStreamer"'],
+              install: true,
+              install_dir : rygel_enginedir)
diff --git a/src/media-engines/meson.build b/src/media-engines/meson.build
new file mode 100644
index 00000000..12e49176
--- /dev/null
+++ b/src/media-engines/meson.build
@@ -0,0 +1,3 @@
+foreach engine : get_option('engines')
+    subdir(engine)
+endforeach
diff --git a/src/media-engines/simple/meson.build b/src/media-engines/simple/meson.build
new file mode 100644
index 00000000..b89fd87f
--- /dev/null
+++ b/src/media-engines/simple/meson.build
@@ -0,0 +1,14 @@
+configure_file(input : 'media-engine-simple.plugin.in',
+               output : 'media-engine-simple.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_enginedir)
+
+media_engine_simple_sources = ['rygel-simple-media-engine.vala',
+                               'rygel-simple-data-source.vala']
+
+shared_module('rygel-media-engine-simple',
+              media_engine_simple_sources,
+              c_args : ['-DG_LOG_DOMAIN="MediaEngine-Simple"'],
+              dependencies: [build_config, rygel_core, rygel_server, posix],
+              install: true,
+              install_dir : rygel_enginedir)
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 00000000..990929a6
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,11 @@
+subdir('librygel-core')
+subdir('librygel-db')
+subdir('librygel-renderer')
+subdir('librygel-renderer-gst')
+subdir('librygel-ruih')
+subdir('librygel-server')
+subdir('media-engines')
+subdir('rygel')
+subdir('ui')
+
+subdir('plugins')
diff --git a/src/plugins/external/meson.build b/src/plugins/external/meson.build
new file mode 100644
index 00000000..7a0e5583
--- /dev/null
+++ b/src/plugins/external/meson.build
@@ -0,0 +1,24 @@
+configure_file(input : 'external.plugin.in',
+               output : 'external.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_plugindir)
+
+rygel_external_sources = [
+    'rygel-external-container.vala',
+    'rygel-external-dummy-container.vala',
+    'rygel-external-item-factory.vala',
+    'rygel-external-album-art-factory.vala',
+    'rygel-external-thumbnail-factory.vala',
+    'rygel-external-plugin.vala',
+    'rygel-external-interfaces.vala',
+    'rygel-external-plugin-factory.vala',
+    'rygel-external-icon-factory.vala',
+    'rygel-external-variant-util.vala',
+    'rygel-free-desktop-interfaces.vala']
+
+shared_module('rygel-external',
+              rygel_external_sources,
+              dependencies : external_plugin_deps + [build_config, rygel_core, rygel_server],
+              c_args : ['-DG_LOG_DOMAIN="External"'],
+              install: true,
+              install_dir: rygel_plugindir)
diff --git a/src/plugins/gst-launch/meson.build b/src/plugins/gst-launch/meson.build
new file mode 100644
index 00000000..41d42a20
--- /dev/null
+++ b/src/plugins/gst-launch/meson.build
@@ -0,0 +1,17 @@
+configure_file(input : 'gst-launch.plugin.in',
+               output : 'gst-launch.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_plugindir)
+
+gst_launch_sources = [
+    'rygel-gst-launch-plugin.vala',
+    'rygel-gst-launch-root-container.vala',
+    'rygel-gst-launch-audio-item.vala',
+    'rygel-gst-launch-video-item.vala']
+
+shared_module('rygel-gst-launch',
+              gst_launch_sources,
+              dependencies: gst_launch_plugin_deps + [build_config, rygel_core, rygel_server],
+              c_args : ['-DG_LOG_DOMAIN="GstLaunch"'],
+              install : true,
+              install_dir : rygel_plugindir)
diff --git a/src/plugins/lms/meson.build b/src/plugins/lms/meson.build
new file mode 100644
index 00000000..b2cce615
--- /dev/null
+++ b/src/plugins/lms/meson.build
@@ -0,0 +1,30 @@
+configure_file(input : 'lms.plugin.in',
+               output : 'lms.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_plugindir)
+
+lms_sources = [
+    'rygel-lms-plugin.vala',
+    'rygel-lms-plugin-factory.vala',
+    'rygel-lms-root-container.vala',
+    'rygel-lms-music-root.vala',
+    'rygel-lms-image-root.vala',
+    'rygel-lms-category-container.vala',
+    'rygel-lms-all-music.vala',
+    'rygel-lms-album.vala',
+    'rygel-lms-albums.vala',
+    'rygel-lms-artist.vala',
+    'rygel-lms-artists.vala',
+    'rygel-lms-all-videos.vala',
+    'rygel-lms-database.vala',
+    'rygel-lms-all-images.vala',
+    'rygel-lms-image-years.vala',
+    'rygel-lms-image-year.vala',
+    'rygel-lms-dbus-interfaces.vala']
+
+shared_module('rygel-lms',
+              lms_sources,
+              dependencies : lms_deps + [build_config, rygel_core, rygel_server, rygel_db],
+              c_args : ['-DG_LOG_DOMAIN="LMS"'],
+              install : true,
+              install_dir : rygel_plugindir)
diff --git a/src/plugins/media-export/meson.build b/src/plugins/media-export/meson.build
new file mode 100644
index 00000000..f036e490
--- /dev/null
+++ b/src/plugins/media-export/meson.build
@@ -0,0 +1,65 @@
+configure_file(input : 'media-export.plugin.in',
+               output : 'media-export.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_plugindir)
+
+constants = static_library('mx-constants',
+                           'constants.vala',
+                           dependencies : glib,
+                           vala_vapi: 'mx-constants.vapi',
+                           install : false)
+
+mx_extract_sources = [
+    'rygel-media-export-extract.vala',
+    'rygel-media-export-dvd-parser.vala',
+    'rygel-media-export-playlist-extractor.vala',
+    'rygel-media-export-image-extractor.vala',
+    'rygel-media-export-extractor.vala',
+    'rygel-media-export-generic-extractor.vala']
+
+mx_extract = executable('mx-extract',
+                        mx_extract_sources,
+                        dependencies : mx_export_deps,
+                        c_args : ['-DG_LOG_DOMAIN="MxExtract"'],
+                        link_with: constants,
+                        install: true,
+                        install_dir: rygel_libexecdir)
+
+mx_sources = [
+    'rygel-media-export-plugin.vala',
+    'rygel-media-export-db-container.vala',
+    'rygel-media-export-sql-factory.vala',
+    'rygel-media-export-media-cache.vala',
+    'rygel-media-export-media-cache-upgrader.vala',
+    'rygel-media-export-metadata-extractor.vala',
+    'rygel-media-export-null-container.vala',
+    'rygel-media-export-dummy-container.vala',
+    'rygel-media-export-root-container.vala',
+    'rygel-media-export-query-container.vala',
+    'rygel-media-export-query-container-factory.vala',
+    'rygel-media-export-node-query-container.vala',
+    'rygel-media-export-leaf-query-container.vala',
+    'rygel-media-export-recursive-file-monitor.vala',
+    'rygel-media-export-harvester.vala',
+    'rygel-media-export-harvesting-task.vala',
+    'rygel-media-export-item-factory.vala',
+    'rygel-media-export-object-factory.vala',
+    'rygel-media-export-writable-db-container.vala',
+    'rygel-media-export-playlist-root-container.vala',
+    'rygel-media-export-playlist-container.vala',
+    'rygel-media-export-music-item.vala',
+    'rygel-media-export-video-item.vala',
+    'rygel-media-export-photo-item.vala',
+    'rygel-media-export-playlist-item.vala',
+    'rygel-media-export-trackable-db-container.vala',
+    'rygel-media-export-updatable-object.vala',
+    'rygel-media-export-dvd-container.vala',
+    'rygel-media-export-dvd-track.vala']
+
+shared_module('rygel-media-export',
+              mx_sources,
+              dependencies : mx_plugin_deps + [rygel_core, rygel_server, rygel_db],
+              c_args : ['-DG_LOG_DOMAIN="MediaExport"'],
+              link_with : constants,
+              install: true,
+              install_dir : rygel_plugindir)
diff --git a/src/plugins/meson.build b/src/plugins/meson.build
new file mode 100644
index 00000000..48516265
--- /dev/null
+++ b/src/plugins/meson.build
@@ -0,0 +1,3 @@
+foreach plugin : get_option('plugins')
+    subdir(plugin)
+endforeach
diff --git a/src/plugins/mpris/meson.build b/src/plugins/mpris/meson.build
new file mode 100644
index 00000000..1bdc6e6b
--- /dev/null
+++ b/src/plugins/mpris/meson.build
@@ -0,0 +1,18 @@
+configure_file(input : 'mpris.plugin.in',
+               output : 'mpris.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_plugindir)
+
+rygel_mpris_sources = [
+    'rygel-mpris-player.vala',
+    'rygel-mpris-plugin.vala',
+    'rygel-mpris-plugin-factory.vala',
+    'rygel-mpris-interfaces.vala',
+    'rygel-free-desktop-interfaces.vala']
+
+shared_module('rygel-mpris',
+              rygel_mpris_sources,
+              dependencies : [build_config, rygel_core, rygel_renderer],
+              c_args : ['-DG_LOG_DOMAIN="MPRIS"'],
+              install: true,
+              install_dir: rygel_plugindir)
diff --git a/src/plugins/playbin/meson.build b/src/plugins/playbin/meson.build
new file mode 100644
index 00000000..4ac96071
--- /dev/null
+++ b/src/plugins/playbin/meson.build
@@ -0,0 +1,11 @@
+configure_file(input : 'playbin.plugin.in',
+               output : 'playbin.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_plugindir)
+
+shared_module('rygel-playbin',
+              ['rygel-playbin-module.vala', 'rygel-playbin-plugin.vala'],
+              dependencies: [build_config, rygel_core, rygel_renderer, rygel_renderer_gst],
+              c_args : ['-DG_LOG_DOMAIN="Playbin"'],
+              install : true,
+              install_dir : rygel_plugindir)
diff --git a/src/plugins/ruih/meson.build b/src/plugins/ruih/meson.build
new file mode 100644
index 00000000..e81be3c0
--- /dev/null
+++ b/src/plugins/ruih/meson.build
@@ -0,0 +1,13 @@
+configure_file(input : 'ruih.plugin.in',
+               output : 'ruih.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_plugindir)
+
+shared_module('rygel-ruih',
+              ['rygel-ruih-module.vala', 'rygel-ruih-plugin.vala'],
+              dependencies: [build_config, rygel_core, rygel_ruih],
+              # Needed to avoid conflict with librarie's header
+              vala_header : 'rygel-ruih-plugin.h',
+              c_args : ['-DG_LOG_DOMAIN="RUIH"'],
+              install : true,
+              install_dir : rygel_plugindir)
diff --git a/src/plugins/tracker/meson.build b/src/plugins/tracker/meson.build
new file mode 100644
index 00000000..1d925dda
--- /dev/null
+++ b/src/plugins/tracker/meson.build
@@ -0,0 +1,49 @@
+configure_file(input : 'tracker.plugin.in',
+               output : 'tracker.plugin',
+               configuration : plugin_config,
+               install_dir : rygel_plugindir)
+
+rygel_tracker_sources = [
+    'rygel-tracker-root-container.vala',
+    'rygel-tracker-category-container.vala',
+    'rygel-tracker-music.vala',
+    'rygel-tracker-videos.vala',
+    'rygel-tracker-pictures.vala',
+    'rygel-tracker-metadata-values.vala',
+    'rygel-tracker-metadata-container.vala',
+    'rygel-tracker-metadata-multivalues.vala',
+    'rygel-tracker-tags.vala',
+    'rygel-tracker-years.vala',
+    'rygel-tracker-titles.vala',
+    'rygel-tracker-albums.vala',
+    'rygel-tracker-artists.vala',
+    'rygel-tracker-genre.vala',
+    'rygel-tracker-new.vala',
+    'rygel-tracker-search-container.vala',
+    'rygel-tracker-category-all-container.vala',
+    'rygel-tracker-upnp-property-map.vala',
+    'rygel-tracker-query.vala',
+    'rygel-tracker-selection-query.vala',
+    'rygel-tracker-deletion-query.vala',
+    'rygel-tracker-insertion-query.vala',
+    'rygel-tracker-cleanup-query.vala',
+    'rygel-tracker-query-triplet.vala',
+    'rygel-tracker-query-triplets.vala',
+    'rygel-tracker-item-factory.vala',
+    'rygel-tracker-video-item-factory.vala',
+    'rygel-tracker-music-item-factory.vala',
+    'rygel-tracker-picture-item-factory.vala',
+    'rygel-tracker-plugin.vala',
+    'rygel-tracker-plugin-factory.vala',
+    'rygel-tracker-interfaces.vala']
+
+shared_module('rygel-tracker',
+              rygel_tracker_sources,
+              dependencies : [
+                  common_deps,
+                  dependency('tracker-sparql-2.0'),
+                  build_config, rygel_core, rygel_server
+              ],
+              c_args : ['-DG_LOG_DOMAIN="RygelTracker"'],
+              install : true,
+              install_dir : rygel_plugindir)
diff --git a/src/rygel/meson.build b/src/rygel/meson.build
new file mode 100644
index 00000000..a4b55079
--- /dev/null
+++ b/src/rygel/meson.build
@@ -0,0 +1,11 @@
+rygel_sources = [
+        'rygel-acl.vala',
+        'rygel-dbus-service.vala',
+        'rygel-main.vala'
+        ]
+executable('rygel',
+           rygel_sources,
+           c_args : ['-DG_LOG_DOMAIN="Rygel"'],
+           dependencies : rygel_deps + [build_config, rygel_core, rygel_server],
+           install: true
+           )
diff --git a/src/ui/meson.build b/src/ui/meson.build
new file mode 100644
index 00000000..8f1004f9
--- /dev/null
+++ b/src/ui/meson.build
@@ -0,0 +1,12 @@
+rygel_preferences_sources = [
+    'rygel-preferences-dialog.vala',
+    'rygel-preferences-section.vala',
+    'rygel-media-pref-section.vala',
+    'rygel-writable-user-config.vala',
+    'rygel-network-pref-section.vala']
+
+executable('rygel-preferences',
+           rygel_preferences_sources,
+           c_args : ['-DG_LOG_DOMAIN="RygelPreferences"'],
+           dependencies : ui_deps + [build_config, rygel_core],
+           install: true)
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 00000000..a1e3a71a
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,67 @@
+test_deps = common_deps
+
+searchable_container_test = executable(
+    'rygel-searchable-container-test',
+    files('searchable-container/rygel-searchable-container.vala',
+          'searchable-container/test.vala'),
+    dependencies : [test_deps, gupnp_av, gio]
+)
+
+object_creator_test = executable(
+    'rygel-object-creator-test',
+    files('object-creator/test.vala',
+          'object-creator/rygel-object-creator.vala',
+          'object-creator/rygel-dlna-profile.vala',
+          'object-creator/rygel-serializer.vala',
+          'object-creator/rygel-m3u-playlist.vala',
+          'object-creator/rygel-state-machine.vala',
+          'object-creator/rygel-search-expression.vala',
+          'object-creator/rygel-relational-expression.vala',
+          'object-creator/rygel-logical-expression.vala',
+          'object-creator/rygel-search-criteria-parser.vala'),
+    dependencies : [test_deps, gio, gupnp_av, soup, libxml]
+)
+
+user_config_test = executable(
+    'rygel-user-config-test',
+    files('rygel-configuration.vala',
+          'rygel-user-config.vala',
+          'rygel-user-config-test.vala'),
+    vala_args : ['--pkg', 'rygel-build-config', '--vapidir', join_paths(meson.source_root(), 
'src/librygel-core')],
+    include_directories : config_include,
+    dependencies : [test_deps, gio]
+)
+
+regression_test = executable(
+    'rygel-regression-test',
+    files('rygel-regression.vala'),
+    dependencies : [test_deps, gio, rygel_core, rygel_server]
+)
+
+database_test = executable(
+    'rygel-database-test.vala',
+    files('rygel-database-test.vala'),
+    dependencies : [rygel_db]
+)
+
+environment_test = executable(
+    'rygel-environment-test',
+    files('rygel-environment-test.vala'),
+    dependencies : [gstreamer]
+)
+
+playbin_renderer_test = executable(
+    'rygel-playbin-renderer-test',
+    files('rygel-playbin-renderer-test.vala'),
+    dependencies : [gstreamer, rygel_core, rygel_renderer, rygel_renderer_gst]
+)
+
+test('rygel-searchable-container-test', searchable_container_test)
+test('rygel-object-creator-test', object_creator_test)
+test('rygel-regression-test', regression_test)
+test('rygel-database-test', database_test)
+test('rygel-environment-test', environment_test)
+test('rygel-playbin-renderer-test', playbin_renderer_test)
+
+# Up the timeout, the test itself is waiting 10s per round for changes, doing 4 rounds
+test('rygel-user-config-test', user_config_test, timeout : 50)


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