[gnome-software] trivial: Fix up the meson support that had bitrotted somewhat



commit a47a784fc12c226d102cb98ff208165eeaf103c4
Author: Richard Hughes <richard hughsie com>
Date:   Wed Apr 5 09:58:19 2017 +0100

    trivial: Fix up the meson support that had bitrotted somewhat

 lib/meson.build                            |  114 ++++++
 meson.build                                |   13 +-
 plugins/core/meson.build                   |  155 +++++++
 plugins/dpkg/meson.build                   |   36 ++
 plugins/dummy/gs-self-test.c               |   55 ---
 plugins/dummy/meson.build                  |   36 ++
 plugins/epiphany/meson.build               |   47 +++
 plugins/external-appstream/meson.build     |   25 ++
 plugins/fedora-distro-upgrades/meson.build |   14 +
 plugins/fedora-tagger-usage/meson.build    |   15 +
 plugins/flatpak/gs-self-test.c             |    1 -
 plugins/flatpak/meson.build                |   54 +++
 plugins/flatpak/tests/meson.build          |    6 +
 plugins/fwupd/meson.build                  |   46 +++
 plugins/limba/meson.build                  |   16 +
 plugins/meson.build                        |  602 ++--------------------------
 plugins/modalias/meson.build               |   37 ++
 plugins/odrs/meson.build                   |   24 ++
 plugins/ostree/meson.build                 |   28 ++
 plugins/packagekit/meson.build             |  175 ++++++++
 plugins/repos/meson.build                  |   36 ++
 plugins/shell-extensions/meson.build       |   35 ++
 plugins/snap/meson.build                   |   27 ++
 plugins/steam/meson.build                  |   24 ++
 plugins/ubuntu-reviews/meson.build         |   14 +
 plugins/ubuntuone/meson.build              |   14 +
 src/meson.build                            |  112 +-----
 27 files changed, 1018 insertions(+), 743 deletions(-)
---
diff --git a/lib/meson.build b/lib/meson.build
new file mode 100644
index 0000000..49133ea
--- /dev/null
+++ b/lib/meson.build
@@ -0,0 +1,114 @@
+cargs = ['-DG_LOG_DOMAIN="Gs"']
+cargs += ['-DLOCALPLUGINDIR=""']
+
+configure_file(
+  input : 'gnome-software.pc.in',
+  output : 'gnome-software.pc',
+  install: true,
+  install_dir: join_paths(get_option('libdir'), 'pkgconfig'),
+  configuration : conf
+)
+
+install_headers([
+    'gnome-software.h',
+    'gs-app.h',
+    'gs-app-list.h',
+    'gs-auth.h',
+    'gs-category.h',
+    'gs-os-release.h',
+    'gs-plugin.h',
+    'gs-plugin-event.h',
+    'gs-plugin-types.h',
+    'gs-plugin-vfuncs.h',
+    'gs-utils.h'
+  ],
+  subdir : 'gnome-software'
+)
+
+libgnomesoftware = static_library(
+  'libgnomesoftware',
+  sources : [
+    'gs-app.c',
+    'gs-app-list.c',
+    'gs-auth.c',
+    'gs-category.c',
+    'gs-debug.c',
+    'gs-os-release.c',
+    'gs-plugin.c',
+    'gs-plugin-event.c',
+    'gs-plugin-loader.c',
+    'gs-plugin-loader-sync.c',
+    'gs-test.c',
+    'gs-utils.c',
+  ],
+  include_directories : [
+    include_directories('..'),
+  ],
+  dependencies : [
+    appstream_glib,
+    gio_unix,
+    gmodule,
+    gtk,
+    json_glib,
+    libm,
+    libsecret,
+    libsoup,
+    valgrind,
+  ],
+  c_args : cargs,
+)
+
+executable(
+  'gnome-software-cmd',
+  sources : [
+    'gs-cmd.c',
+  ],
+  include_directories : [
+    include_directories('..'),
+  ],
+  dependencies : [
+    appstream_glib,
+    gio_unix,
+    gmodule,
+    gtk,
+    json_glib,
+    libm,
+    libsecret,
+    libsoup,
+    valgrind,
+  ],
+  link_with : [
+    libgnomesoftware
+  ],
+  c_args : cargs,
+  install : true,
+  install_dir : 'libexec'
+)
+
+if get_option('enable-tests')
+  cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), '..', 'data') + '"']
+  e = executable(
+    'gs-self-test',
+    sources : [
+      'gs-self-test.c'
+    ],
+    include_directories : [
+      include_directories('..'),
+    ],
+    dependencies : [
+      appstream_glib,
+      gio_unix,
+      gmodule,
+      gtk,
+      json_glib,
+      libm,
+      libsecret,
+      libsoup
+    ],
+    link_with : [
+      libgnomesoftware
+    ],
+    c_args : cargs
+  )
+  test('gs-self-test-lib', e)
+endif
diff --git a/meson.build b/meson.build
index 40b2eb0..b95d0b2 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
 project('gnome-software', 'c',
-  version : '3.23.92',
+  version : '3.25.1',
   default_options : ['warning_level=1'],
   meson_version : '>=0.37.0'
 )
@@ -97,6 +97,7 @@ libm = cc.find_library('libm', required: false)
 libsecret = dependency('libsecret-1')
 libsoup = dependency('libsoup-2.4', version : '>= 2.51.92')
 sqlite3 = dependency('sqlite3')
+valgrind = dependency('valgrind')
 
 if get_option('enable-gnome-desktop')
   gnome_desktop = dependency('gnome-desktop-3.0', version : '>= 3.17.92')
@@ -153,10 +154,6 @@ gnome = import('gnome')
 i18n = import('i18n')
 
 conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
-conf.set_quoted('TESTDATADIR', join_paths(meson.current_source_dir(), 'data'))
-conf.set_quoted('LOCALPLUGINDIR',
-                join_paths(meson.current_build_dir(),
-                           'src', 'plugins'))
 conf.set_quoted('LOCALEDIR',
                 join_paths(get_option('prefix'),
                            get_option('localedir')))
@@ -172,15 +169,19 @@ conf.set_quoted('SYSCONFDIR',
 conf.set_quoted('LOCALSTATEDIR',
                 join_paths(get_option('prefix'),
                            get_option('localstatedir')))
+conf.set_quoted('LIBEXECDIR',
+                join_paths(get_option('prefix'),
+                           get_option('libexecdir')))
 configure_file(
   output : 'config.h',
   configuration : conf
 )
-top_build_incdir = include_directories(meson.current_build_dir())
 
 add_project_arguments('-DI_KNOW_THE_GNOME_SOFTWARE_API_IS_SUBJECT_TO_CHANGE',
                       language : 'c')
 
+subdir('lib')
+subdir('plugins')
 subdir('src')
 subdir('po')
 subdir('data')
diff --git a/plugins/core/meson.build b/plugins/core/meson.build
new file mode 100644
index 0000000..b04ed3d
--- /dev/null
+++ b/plugins/core/meson.build
@@ -0,0 +1,155 @@
+cargs = ['-DG_LOG_DOMAIN="GsPlugin"']
+
+shared_module(
+  'gs_plugin_generic-updates',
+  sources : 'gs-plugin-generic-updates.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+shared_module(
+  'gs_plugin_key-colors',
+  sources : 'gs-plugin-key-colors.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+
+shared_module(
+  'gs_plugin_provenance',
+  sources : 'gs-plugin-provenance.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+shared_module(
+  'gs_plugin_provenance-license',
+  sources : 'gs-plugin-provenance-license.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+
+shared_module(
+  'gs_plugin_icons',
+  sources : 'gs-plugin-icons.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+shared_module(
+  'gs_plugin_appstream',
+  sources : [
+    'gs-appstream.c',
+    'gs-plugin-appstream.c'
+  ],
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+shared_module(
+  'gs_plugin_desktop-categories',
+  sources : [
+    'gs-plugin-desktop-categories.c',
+    'gs-desktop-common.c',
+  ],
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+shared_module(
+  'gs_plugin_desktop-menu-path',
+  sources : [
+    'gs-plugin-desktop-menu-path.c',
+    'gs-desktop-common.c',
+  ],
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+shared_module(
+  'gs_plugin_hardcoded-blacklist',
+  sources : 'gs-plugin-hardcoded-blacklist.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+shared_module(
+  'gs_plugin_hardcoded-popular',
+  sources : 'gs-plugin-hardcoded-popular.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+shared_module(
+  'gs_plugin_hardcoded-featured',
+  sources : 'gs-plugin-hardcoded-featured.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
diff --git a/plugins/dpkg/meson.build b/plugins/dpkg/meson.build
new file mode 100644
index 0000000..548bac1
--- /dev/null
+++ b/plugins/dpkg/meson.build
@@ -0,0 +1,36 @@
+cargs = ['-DG_LOG_DOMAIN="GsPlugin"']
+
+shared_module(
+  'gs_plugin_dpkg',
+  sources : 'gs-plugin-dpkg.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+if get_option('enable-tests')
+  cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+  cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), 'tests') + '"']
+  e = executable('gs-self-test-dpkg',
+    sources : [
+      'gs-self-test.c'
+    ],
+    include_directories : [
+      include_directories('../..'),
+      include_directories('../../lib'),
+    ],
+    dependencies : [
+      plugin_libs,
+    ],
+    link_with : [
+      libgnomesoftware
+    ],
+    c_args : cargs,
+  )
+  test('gs-self-test-dpkg', e)
+endif
diff --git a/plugins/dummy/gs-self-test.c b/plugins/dummy/gs-self-test.c
index 184508d..0e3cceb 100644
--- a/plugins/dummy/gs-self-test.c
+++ b/plugins/dummy/gs-self-test.c
@@ -391,61 +391,6 @@ gs_plugins_dummy_url_to_app_func (GsPluginLoader *plugin_loader)
 }
 
 static void
-gs_plugin_loader_modalias_func (GsPluginLoader *plugin_loader)
-{
-       GsApp *app;
-       g_autofree gchar *menu_path = NULL;
-       g_autoptr(GError) error = NULL;
-       g_autoptr(GsAppList) list = NULL;
-
-       /* get search result based on addon keyword */
-       list = gs_plugin_loader_search (plugin_loader,
-                                       "colorhug2",
-                                       GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
-                                       GS_PLUGIN_FAILURE_FLAGS_FATAL_ANY,
-                                       NULL,
-                                       &error);
-       gs_test_flush_main_context ();
-       g_assert_no_error (error);
-       g_assert (list != NULL);
-
-       /* make sure there is one entry, the parent app */
-       g_assert_cmpint (gs_app_list_length (list), ==, 1);
-       app = gs_app_list_index (list, 0);
-       g_assert_cmpstr (gs_app_get_id (app), ==, "com.hughski.ColorHug2.driver");
-       g_assert_cmpint (gs_app_get_kind (app), ==, AS_APP_KIND_DRIVER);
-       g_assert (gs_app_has_category (app, "Addons"));
-       g_assert (gs_app_has_category (app, "Drivers"));
-}
-
-static void
-gs_plugin_loader_webapps_func (GsPluginLoader *plugin_loader)
-{
-       gboolean ret;
-       g_autoptr(GError) error = NULL;
-       g_autoptr(GsApp) app = NULL;
-
-       /* no epiphany, abort */
-       if (!gs_plugin_loader_get_enabled (plugin_loader, "epiphany"))
-               return;
-
-       /* a webapp with a local icon */
-       app = gs_app_new ("arachne.desktop");
-       gs_app_set_kind (app, AS_APP_KIND_WEB_APP);
-       ret = gs_plugin_loader_app_refine (plugin_loader, app,
-                                          GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON,
-                                          GS_PLUGIN_FAILURE_FLAGS_FATAL_ANY,
-                                          NULL,
-                                          &error);
-       gs_test_flush_main_context ();
-       g_assert_no_error (error);
-       g_assert (ret);
-
-       g_assert_cmpint (gs_app_get_state (app), ==, AS_APP_STATE_AVAILABLE);
-       g_assert (gs_app_get_pixbuf (app) != NULL);
-}
-
-static void
 gs_plugins_dummy_plugin_cache_func (GsPluginLoader *plugin_loader)
 {
        GsApp *app1;
diff --git a/plugins/dummy/meson.build b/plugins/dummy/meson.build
new file mode 100644
index 0000000..2bc0abc
--- /dev/null
+++ b/plugins/dummy/meson.build
@@ -0,0 +1,36 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginDummy"']
+cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+cargs += ['-DLOCALPLUGINDIR_CORE="' + meson.current_build_dir() + '/../core"']
+
+shared_module(
+  'gs_plugin_dummy',
+  sources : 'gs-plugin-dummy.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [appstream_glib, gtk, libsoup]
+)
+
+if get_option('enable-tests')
+  e = executable('gs-self-test-dummy',
+    sources : [
+      'gs-self-test.c'
+    ],
+    include_directories : [
+      include_directories('../..'),
+      include_directories('../../lib'),
+    ],
+    dependencies : [
+      plugin_libs,
+    ],
+    link_with : [
+      libgnomesoftware
+    ],
+    c_args : cargs,
+  )
+  test('gs-self-test-dummy', e)
+endif
diff --git a/plugins/epiphany/meson.build b/plugins/epiphany/meson.build
new file mode 100644
index 0000000..72868f0
--- /dev/null
+++ b/plugins/epiphany/meson.build
@@ -0,0 +1,47 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginEpiphany"']
+cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+cargs += ['-DLOCALPLUGINDIR_CORE="' + meson.current_build_dir() + '/../core"']
+
+shared_module(
+  'gs_plugin_epiphany',
+  sources : 'gs-plugin-epiphany.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+metainfo = 'org.gnome.Software.Plugin.Epiphany.metainfo.xml'
+
+i18n.merge_file(
+  input: metainfo + '.in',
+  output: metainfo,
+  type: 'xml',
+  po_dir: join_paths(meson.source_root(), 'po'),
+  install: true,
+  install_dir: join_paths(get_option('datadir'), 'appdata')
+)
+
+if get_option('enable-tests')
+  cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), '..', '..', 'data') + '"']
+  e = executable('gs-self-test-epiphany',
+    sources : [
+      'gs-self-test.c'
+    ],
+    include_directories : [
+      include_directories('../..'),
+      include_directories('../../lib'),
+    ],
+    dependencies : [
+      plugin_libs,
+    ],
+    link_with : [
+      libgnomesoftware
+    ],
+    c_args : cargs,
+  )
+  test('gs-self-test-epiphany', e)
+endif
diff --git a/plugins/external-appstream/meson.build b/plugins/external-appstream/meson.build
new file mode 100644
index 0000000..183e2d9
--- /dev/null
+++ b/plugins/external-appstream/meson.build
@@ -0,0 +1,25 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginExternalAppstream"']
+
+executable(
+  'gnome-software-install-appstream',
+  sources : 'gs-install-appstream.c',
+  include_directories : [
+    include_directories('@0@/..'.format(meson.current_build_dir())),
+  ],
+  dependencies : [appstream_glib],
+  c_args : cargs,
+  install : true,
+  install_dir : 'libexec'
+)
+
+shared_module(
+  'gs_plugin_external-appstream',
+sources : 'gs-plugin-external-appstream.c',
+  include_directories : [
+    include_directories('../..'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [gio_unix, appstream_glib, libsoup]
+)
diff --git a/plugins/fedora-distro-upgrades/meson.build b/plugins/fedora-distro-upgrades/meson.build
new file mode 100644
index 0000000..44e8cfd
--- /dev/null
+++ b/plugins/fedora-distro-upgrades/meson.build
@@ -0,0 +1,14 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginFedoraDistroUpgrades"']
+
+shared_module(
+  'gs_plugin_fedora-distro-upgrades',
+  sources : 'gs-plugin-fedora-distro-upgrades.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
diff --git a/plugins/fedora-tagger-usage/meson.build b/plugins/fedora-tagger-usage/meson.build
new file mode 100644
index 0000000..a5eac74
--- /dev/null
+++ b/plugins/fedora-tagger-usage/meson.build
@@ -0,0 +1,15 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginFedoraTaggerUsage"']
+
+
+shared_module(
+  'gs_plugin_fedora-tagger-usage',
+  sources : 'gs-plugin-fedora-tagger-usage.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
diff --git a/plugins/flatpak/gs-self-test.c b/plugins/flatpak/gs-self-test.c
index 2e0528a..1bb9ba1 100644
--- a/plugins/flatpak/gs-self-test.c
+++ b/plugins/flatpak/gs-self-test.c
@@ -541,7 +541,6 @@ static void
 update_app_action_finish_sync (GObject *source, GAsyncResult *res, gpointer user_data)
 {
        GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
-       GMainLoop *loop = (GMainLoop *) user_data;
        gboolean ret;
        g_autoptr(GError) error = NULL;
        ret = gs_plugin_loader_app_action_finish (plugin_loader, res, &error);
diff --git a/plugins/flatpak/meson.build b/plugins/flatpak/meson.build
new file mode 100644
index 0000000..5a45c80
--- /dev/null
+++ b/plugins/flatpak/meson.build
@@ -0,0 +1,54 @@
+subdir('tests')
+
+cargs = ['-DG_LOG_DOMAIN="GsPluginFlatpak"']
+
+shared_module(
+  'gs_plugin_flatpak',
+  sources : [
+    'gs-appstream.c',
+    'gs-flatpak.c',
+    'gs-flatpak-symlinks.c',
+    'gs-plugin-flatpak.c'
+  ],
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, flatpak ]
+)
+metainfo = 'org.gnome.Software.Plugin.Flatpak.metainfo.xml'
+
+i18n.merge_file(
+  input: metainfo + '.in',
+  output: metainfo,
+  type: 'xml',
+  po_dir: join_paths(meson.source_root(), 'po'),
+  install: true,
+  install_dir: join_paths(get_option('datadir'), 'appdata')
+)
+
+if get_option('enable-tests')
+  cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+  cargs += ['-DLOCALPLUGINDIR_CORE="' + meson.current_build_dir() + '/../core"']
+  cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), 'tests') + '"']
+  e = executable('gs-self-test-flatpak',
+    sources : [
+      'gs-self-test.c'
+    ],
+    include_directories : [
+      include_directories('../..'),
+      include_directories('../../lib'),
+    ],
+    dependencies : [
+      plugin_libs,
+    ],
+    link_with : [
+      libgnomesoftware
+    ],
+    c_args : cargs,
+  )
+  test('gs-self-test-flatpak', e)
+endif
diff --git a/plugins/flatpak/tests/meson.build b/plugins/flatpak/tests/meson.build
new file mode 100644
index 0000000..cef0268
--- /dev/null
+++ b/plugins/flatpak/tests/meson.build
@@ -0,0 +1,6 @@
+custom_target(
+  'flatpak-self-test-data',
+  command : join_paths(meson.current_source_dir(), 'build.py'),
+  output : 'done',
+  build_by_default : true,
+)
diff --git a/plugins/fwupd/meson.build b/plugins/fwupd/meson.build
new file mode 100644
index 0000000..7e41471
--- /dev/null
+++ b/plugins/fwupd/meson.build
@@ -0,0 +1,46 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginFwupd"']
+cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+
+shared_module(
+  'gs_plugin_fwupd',
+  sources : 'gs-plugin-fwupd.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, fwupd ]
+)
+metainfo = 'org.gnome.Software.Plugin.Fwupd.metainfo.xml'
+
+i18n.merge_file(
+  input: metainfo + '.in',
+  output: metainfo,
+  type: 'xml',
+  po_dir: join_paths(meson.source_root(), 'po'),
+  install: true,
+  install_dir: join_paths(get_option('datadir'), 'appdata')
+)
+
+if get_option('enable-tests')
+  cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), 'tests') + '"']
+  e = executable('gs-self-test-fwupd',
+    sources : [
+      'gs-self-test.c'
+    ],
+    include_directories : [
+      include_directories('../..'),
+      include_directories('../../lib'),
+    ],
+    dependencies : [
+      plugin_libs,
+    ],
+    link_with : [
+      libgnomesoftware
+    ],
+    c_args : cargs,
+  )
+  test('gs-self-test-fwupd', e)
+endif
diff --git a/plugins/limba/meson.build b/plugins/limba/meson.build
new file mode 100644
index 0000000..55ccd44
--- /dev/null
+++ b/plugins/limba/meson.build
@@ -0,0 +1,16 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginLimba"']
+
+if get_option('enable-limba')
+shared_module(
+  'gs_plugin_limba',
+  sources : 'gs-plugin-limba.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+  )
+endif
diff --git a/plugins/meson.build b/plugins/meson.build
index 24a0ad4..8be4f3f 100644
--- a/plugins/meson.build
+++ b/plugins/meson.build
@@ -1,597 +1,51 @@
-cargs = ['-DG_LOG_DOMAIN="GsPlugin"']
-
 plugin_dir = join_paths(get_option('libdir'), 'gs-plugins-11')
-
 plugin_libs = [
   appstream_glib,
   gtk,
   json_glib,
   libsoup
 ]
-metainfos = []
-
-shared_module('gs_plugin_dummy',
-  sources : 'gs-plugin-dummy.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : [appstream_glib, gtk, libsoup]
-)
-
-shared_module('gs_plugin_dpkg',
-  sources : 'gs-plugin-dpkg.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
 
-shared_module('gs_plugin_generic-updates',
-  sources : 'gs-plugin-generic-updates.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
+subdir('core')
+subdir('dpkg')
+subdir('dummy')
+subdir('epiphany')
+subdir('fedora-distro-upgrades')
+subdir('fedora-tagger-usage')
+subdir('ubuntuone')
 
-if get_option('enable-external-appstream')
-  executable(
-    'gnome-software-install-appstream',
-    sources : 'gs-install-appstream.c',
-    include_directories : [
-      include_directories('@0@/..'.format(meson.current_build_dir())),
-    ],
-    dependencies : [appstream_glib],
-    c_args : cargs,
-    install : true,
-    install_dir : 'libexec'
-  )
-  shared_module('gs_plugin_external-appstream',
-  sources : 'gs-plugin-external-appstream.c',
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [gio_unix, appstream_glib, libsoup]
-  )
+if get_option('enable-flatpak')
+  subdir('flatpak')
 endif
-
-shared_module('gs_plugin_key-colors',
-  sources : 'gs-plugin-key-colors.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
-if get_option('enable-shell-extensions')
-  shared_module('gs_plugin_shell-extensions',
-  sources : 'gs-plugin-shell-extensions.c',
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : plugin_libs
-  )
+if get_option('enable-firmware')
+  subdir('fwupd')
 endif
-
-shared_module('gs_plugin_fedora-distro-upgrades',
-  sources : 'gs-plugin-fedora-distro-upgrades.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
+subdir('limba')
 if get_option('enable-gudev')
-  shared_module('gs_plugin_modalias',
-  sources : 'gs-plugin-modalias.c',
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, gudev ]
-  )
+  subdir('modalias')
 endif
-
-shared_module('gs_plugin_provenance',
-  sources : 'gs-plugin-provenance.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
-shared_module('gs_plugin_provenance-license',
-  sources : 'gs-plugin-provenance-license.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
-shared_module('gs_plugin_fedora-tagger-usage',
-  sources : 'gs-plugin-fedora-tagger-usage.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
-shared_module('gs_plugin_epiphany',
-  sources : 'gs-plugin-epiphany.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-metainfos += 'org.gnome.Software.Plugin.Epiphany.metainfo.xml'
-
-shared_module('gs_plugin_icons',
-  sources : 'gs-plugin-icons.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
-shared_module('gs_plugin_appstream',
-  sources : [
-    'gs-appstream.c',
-    'gs-plugin-appstream.c'
-  ],
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
-if get_option('enable-limba')
-shared_module('gs_plugin_limba',
-  sources : 'gs-plugin-limba.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-  )
-endif
-
-if get_option('enable-flatpak')
-  shared_module('gs_plugin_flatpak',
-    sources : [
-      'gs-appstream.c',
-      'gs-flatpak.c',
-      'gs-flatpak-symlinks.c',
-      'gs-plugin-flatpak.c'
-    ],
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, flatpak ]
-  )
-  metainfos += 'org.gnome.Software.Plugin.Flatpak.metainfo.xml'
+if get_option('enable-odrs')
+  subdir('odrs')
 endif
-
 if get_option('enable-ostree')
-  shared_module('gs_plugin_ostree',
-    sources : 'gs-plugin-ostree.c',
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, ostree ]
-  )
+  subdir('ostree')
 endif
-
-if get_option('enable-odrs')
-  shared_module('gs_plugin_odrs',
-    sources : 'gs-plugin-odrs.c',
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : plugin_libs
-  )
-  metainfos += 'org.gnome.Software.Plugin.Odrs.metainfo.xml'
+if get_option('enable-packagekit')
+  subdir('packagekit')
 endif
-
-if get_option('enable-rpm')
-  shared_module('gs_plugin_rpm',
-    sources : 'gs-plugin-rpm.c',
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, rpm ]
-  )
+subdir('repos')
+if get_option('enable-shell-extensions')
+  subdir('shell-extensions')
+endif
+if get_option('enable-snap')
+  subdir('snap')
 endif
-
 if get_option('enable-steam')
-  shared_module('gs_plugin_steam',
-    sources : 'gs-plugin-steam.c',
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : plugin_libs
-  )
-  metainfos += 'org.gnome.Software.Plugin.Steam.metainfo.xml'
+  subdir('steam')
 endif
-
-shared_module('gs_plugin_repos',
-  sources : 'gs-plugin-repos.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
-shared_module('gs_plugin_desktop-categories',
-  sources : [
-    'gs-plugin-desktop-categories.c',
-    'gs-desktop-common.c',
-  ],
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
-shared_module('gs_plugin_desktop-menu-path',
-  sources : [
-    'gs-plugin-desktop-menu-path.c',
-    'gs-desktop-common.c',
-  ],
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
-shared_module('gs_plugin_hardcoded-blacklist',
-  sources : 'gs-plugin-hardcoded-blacklist.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
-shared_module('gs_plugin_hardcoded-popular',
-  sources : 'gs-plugin-hardcoded-popular.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
-shared_module('gs_plugin_hardcoded-featured',
-  sources : 'gs-plugin-hardcoded-featured.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
 if get_option('enable-ubuntu-reviews')
-  shared_module('gs_plugin_ubuntu-reviews',
-    sources : 'gs-plugin-ubuntu-reviews.c',
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, oauth ]
-  )
-endif
-
-if get_option('enable-firmware')
-  shared_module('gs_plugin_fwupd',
-    sources : 'gs-plugin-fwupd.c',
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, fwupd ]
-  )
-  metainfos += 'org.gnome.Software.Plugin.Fwupd.metainfo.xml'
-endif
-
-if get_option('enable-packagekit')
-  shared_module('gs_plugin_systemd-updates',
-    sources : [
-      'gs-plugin-systemd-updates.c',
-      'packagekit-common.c',
-    ],
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, packagekit ]
-  )
-
-  shared_module('gs_plugin_packagekit',
-    sources : [
-      'gs-plugin-packagekit.c',
-      'packagekit-common.c',
-    ],
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, packagekit ]
-  )
-
-  shared_module('gs_plugin_packagekit-refine',
-    sources : [
-      'gs-plugin-packagekit-refine.c',
-      'gs-markdown.c',
-      'packagekit-common.c',
-    ],
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, packagekit ]
-  )
-
-  shared_module('gs_plugin_packagekit-refresh',
-    sources : [
-      'gs-plugin-packagekit-refresh.c',
-      'packagekit-common.c',
-    ],
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, packagekit ]
-  )
-
-  shared_module('gs_plugin_packagekit-local',
-    sources : [
-      'gs-plugin-packagekit-local.c',
-      'packagekit-common.c',
-    ],
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, packagekit ]
-  )
-
-  shared_module('gs_plugin_packagekit-history',
-  sources : 'gs-plugin-packagekit-history.c',
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, packagekit ]
-  )
-
-  shared_module('gs_plugin_packagekit-upgrade',
-    sources : [
-      'gs-plugin-packagekit-upgrade.c',
-      'packagekit-common.c',
-    ],
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, packagekit ]
-  )
-
-  shared_module('gs_plugin_packagekit-offline',
-  sources : 'gs-plugin-packagekit-offline.c',
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, packagekit ]
-  )
-
-  shared_module('gs_plugin_packagekit-origin',
-    sources : [
-      'gs-plugin-packagekit-origin.c',
-      'packagekit-common.c',
-    ],
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, packagekit ]
-  )
-
-  shared_module('gs_plugin_packagekit-proxy',
-  sources : 'gs-plugin-packagekit-proxy.c',
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, packagekit ])
+  subdir('ubuntu-reviews')
 endif
-
-if get_option('enable-snap')
-  shared_module('gs_plugin_snap',
-    sources : [
-      'gs-plugin-snap.c',
-      'gs-snapd.c'
-    ],
-    include_directories : [
-      include_directories('..'),
-      include_directories('../..'),
-    ],
-    install : true,
-    install_dir: plugin_dir,
-    c_args : cargs,
-    dependencies : [ plugin_libs, snap ]
-  )
-  metainfos += 'org.gnome.Software.Plugin.Snap.metainfo.xml'
-endif
-
-shared_module('gs_plugin_ubuntuone',
-  sources : 'gs-plugin-ubuntuone.c',
-  include_directories : [
-    include_directories('..'),
-    include_directories('../..'),
-  ],
-  install : true,
-  install_dir: plugin_dir,
-  c_args : cargs,
-  dependencies : plugin_libs
-)
-
-foreach metainfo: metainfos
-  i18n.merge_file(
-    input: metainfo + '.in',
-    output: metainfo,
-    type: 'xml',
-    po_dir: join_paths(meson.source_root(), 'po'),
-    install: true,
-    install_dir: join_paths(get_option('datadir'), 'appdata')
-  )
-endforeach
-
-if get_option('enable-tests')
-  e = executable('gs-self-test2',
-    sources : [
-      'gs-markdown.c',
-      'gs-self-test.c'
-    ],
-    include_directories : [
-      include_directories('../..'),
-    ],
-    dependencies : [gtk, gio_unix, libm, appstream_glib ]
-  )
-  test('gs-self-test', e)
+if get_option('enable-external-appstream')
+  subdir('external-appstream')
 endif
diff --git a/plugins/modalias/meson.build b/plugins/modalias/meson.build
new file mode 100644
index 0000000..50a6687
--- /dev/null
+++ b/plugins/modalias/meson.build
@@ -0,0 +1,37 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginModalias"']
+cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+cargs += ['-DLOCALPLUGINDIR_CORE="' + meson.current_build_dir() + '/../core"']
+cargs += ['-DLOCALPLUGINDIR_DUMMY="' + meson.current_build_dir() + '/../dummy"']
+
+shared_module(
+  'gs_plugin_modalias',
+sources : 'gs-plugin-modalias.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, gudev ]
+)
+
+if get_option('enable-tests')
+  e = executable('gs-self-test-modalias',
+    sources : [
+      'gs-self-test.c'
+    ],
+    include_directories : [
+      include_directories('../..'),
+      include_directories('../../lib'),
+    ],
+    dependencies : [
+      plugin_libs,
+    ],
+    link_with : [
+      libgnomesoftware
+    ],
+    c_args : cargs,
+  )
+  test('gs-self-test-modalias', e)
+endif
diff --git a/plugins/odrs/meson.build b/plugins/odrs/meson.build
new file mode 100644
index 0000000..1043681
--- /dev/null
+++ b/plugins/odrs/meson.build
@@ -0,0 +1,24 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginOdrs"']
+
+shared_module(
+  'gs_plugin_odrs',
+  sources : 'gs-plugin-odrs.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+metainfo = 'org.gnome.Software.Plugin.Odrs.metainfo.xml'
+
+i18n.merge_file(
+  input: metainfo + '.in',
+  output: metainfo,
+  type: 'xml',
+  po_dir: join_paths(meson.source_root(), 'po'),
+  install: true,
+  install_dir: join_paths(get_option('datadir'), 'appdata')
+)
diff --git a/plugins/ostree/meson.build b/plugins/ostree/meson.build
new file mode 100644
index 0000000..04c0805
--- /dev/null
+++ b/plugins/ostree/meson.build
@@ -0,0 +1,28 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginOstree"']
+
+shared_module(
+  'gs_plugin_ostree',
+  sources : 'gs-plugin-ostree.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, ostree ]
+)
+
+shared_module(
+  'gs_plugin_rpm',
+  sources : 'gs-plugin-rpm.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, rpm ]
+)
+
diff --git a/plugins/packagekit/meson.build b/plugins/packagekit/meson.build
new file mode 100644
index 0000000..9bc4237
--- /dev/null
+++ b/plugins/packagekit/meson.build
@@ -0,0 +1,175 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginPackageKit"']
+cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+
+shared_module(
+  'gs_plugin_systemd-updates',
+  sources : [
+    'gs-plugin-systemd-updates.c',
+    'packagekit-common.c',
+  ],
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, packagekit ]
+)
+
+shared_module(
+  'gs_plugin_packagekit',
+  sources : [
+    'gs-plugin-packagekit.c',
+    'packagekit-common.c',
+  ],
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, packagekit ]
+)
+
+shared_module(
+  'gs_plugin_packagekit-refine',
+  sources : [
+    'gs-plugin-packagekit-refine.c',
+    'gs-markdown.c',
+    'packagekit-common.c',
+  ],
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, packagekit ]
+)
+
+shared_module(
+  'gs_plugin_packagekit-refresh',
+  sources : [
+    'gs-plugin-packagekit-refresh.c',
+    'packagekit-common.c',
+  ],
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, packagekit ]
+)
+
+shared_module(
+  'gs_plugin_packagekit-local',
+  sources : [
+    'gs-plugin-packagekit-local.c',
+    'packagekit-common.c',
+  ],
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, packagekit ]
+)
+
+shared_module(
+  'gs_plugin_packagekit-history',
+sources : 'gs-plugin-packagekit-history.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, packagekit ]
+)
+
+shared_module(
+  'gs_plugin_packagekit-upgrade',
+  sources : [
+    'gs-plugin-packagekit-upgrade.c',
+    'packagekit-common.c',
+  ],
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, packagekit ]
+)
+
+shared_module(
+  'gs_plugin_packagekit-offline',
+sources : 'gs-plugin-packagekit-offline.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, packagekit ]
+)
+
+shared_module(
+  'gs_plugin_packagekit-origin',
+  sources : [
+    'gs-plugin-packagekit-origin.c',
+    'packagekit-common.c',
+  ],
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, packagekit ]
+)
+
+shared_module(
+  'gs_plugin_packagekit-proxy',
+sources : 'gs-plugin-packagekit-proxy.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, packagekit ])
+
+if get_option('enable-tests')
+  cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), 'tests') + '"']
+  e = executable('gs-self-test-packagekit',
+    sources : [
+      'gs-markdown.c',
+      'gs-self-test.c'
+    ],
+    include_directories : [
+      include_directories('../..'),
+      include_directories('../../lib'),
+    ],
+    dependencies : [
+      plugin_libs,
+    ],
+    link_with : [
+      libgnomesoftware
+    ],
+    c_args : cargs,
+  )
+  test('gs-self-test-packagekit', e)
+endif
diff --git a/plugins/repos/meson.build b/plugins/repos/meson.build
new file mode 100644
index 0000000..d35e27b
--- /dev/null
+++ b/plugins/repos/meson.build
@@ -0,0 +1,36 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginRepos"']
+cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+
+shared_module(
+  'gs_plugin_repos',
+  sources : 'gs-plugin-repos.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+if get_option('enable-tests')
+  cargs += ['-DTESTDATADIR="' + join_paths(meson.current_source_dir(), 'tests') + '"']
+  e = executable('gs-self-test-repos',
+    sources : [
+      'gs-self-test.c'
+    ],
+    include_directories : [
+      include_directories('../..'),
+      include_directories('../../lib'),
+    ],
+    dependencies : [
+      plugin_libs,
+    ],
+    link_with : [
+      libgnomesoftware
+    ],
+    c_args : cargs,
+  )
+  test('gs-self-test-repos', e)
+endif
diff --git a/plugins/shell-extensions/meson.build b/plugins/shell-extensions/meson.build
new file mode 100644
index 0000000..f2849e4
--- /dev/null
+++ b/plugins/shell-extensions/meson.build
@@ -0,0 +1,35 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginShellExtensions"']
+cargs += ['-DLOCALPLUGINDIR="' + meson.current_build_dir() + '"']
+
+shared_module(
+  'gs_plugin_shell-extensions',
+sources : 'gs-plugin-shell-extensions.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+
+if get_option('enable-tests')
+  e = executable('gs-self-test-shell-extensions',
+    sources : [
+      'gs-self-test.c'
+    ],
+    include_directories : [
+      include_directories('../..'),
+      include_directories('../../lib'),
+    ],
+    dependencies : [
+      plugin_libs,
+    ],
+    link_with : [
+      libgnomesoftware
+    ],
+    c_args : cargs,
+  )
+  test('gs-self-test-shell-extensions', e)
+endif
diff --git a/plugins/snap/meson.build b/plugins/snap/meson.build
new file mode 100644
index 0000000..beeeb6d
--- /dev/null
+++ b/plugins/snap/meson.build
@@ -0,0 +1,27 @@
+cargs = ['-DG_LOG_DOMAIN="GsPlugin"']
+
+shared_module(
+  'gs_plugin_snap',
+  sources : [
+    'gs-plugin-snap.c',
+    'gs-snapd.c'
+  ],
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, snap ]
+)
+metainfo = 'org.gnome.Software.Plugin.Snap.metainfo.xml'
+
+i18n.merge_file(
+  input: metainfo + '.in',
+  output: metainfo,
+  type: 'xml',
+  po_dir: join_paths(meson.source_root(), 'po'),
+  install: true,
+  install_dir: join_paths(get_option('datadir'), 'appdata')
+)
diff --git a/plugins/steam/meson.build b/plugins/steam/meson.build
new file mode 100644
index 0000000..f606870
--- /dev/null
+++ b/plugins/steam/meson.build
@@ -0,0 +1,24 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginSteam"']
+
+shared_module(
+  'gs_plugin_steam',
+  sources : 'gs-plugin-steam.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
+metainfo = 'org.gnome.Software.Plugin.Steam.metainfo.xml'
+
+i18n.merge_file(
+  input: metainfo + '.in',
+  output: metainfo,
+  type: 'xml',
+  po_dir: join_paths(meson.source_root(), 'po'),
+  install: true,
+  install_dir: join_paths(get_option('datadir'), 'appdata')
+)
diff --git a/plugins/ubuntu-reviews/meson.build b/plugins/ubuntu-reviews/meson.build
new file mode 100644
index 0000000..6dcff59
--- /dev/null
+++ b/plugins/ubuntu-reviews/meson.build
@@ -0,0 +1,14 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginUbuntuReviews"']
+
+shared_module(
+  'gs_plugin_ubuntu-reviews',
+  sources : 'gs-plugin-ubuntu-reviews.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : [ plugin_libs, oauth ]
+)
diff --git a/plugins/ubuntuone/meson.build b/plugins/ubuntuone/meson.build
new file mode 100644
index 0000000..b84ebe6
--- /dev/null
+++ b/plugins/ubuntuone/meson.build
@@ -0,0 +1,14 @@
+cargs = ['-DG_LOG_DOMAIN="GsPluginUbuntuOne"']
+
+shared_module(
+  'gs_plugin_ubuntuone',
+  sources : 'gs-plugin-ubuntuone.c',
+  include_directories : [
+    include_directories('../..'),
+    include_directories('../../lib'),
+  ],
+  install : true,
+  install_dir: plugin_dir,
+  c_args : cargs,
+  dependencies : plugin_libs
+)
diff --git a/src/meson.build b/src/meson.build
index 9502124..81017b1 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,6 +1,5 @@
-subdir('plugins')
-
 cargs = ['-DG_LOG_DOMAIN="Gs"']
+cargs += ['-DLOCALPLUGINDIR=""']
 
 resources_src = gnome.compile_resources(
   'gs-resources',
@@ -18,20 +17,15 @@ gdbus_src = gnome.gdbus_codegen(
 
 gnome_software_sources = [
   'gs-app-addon-row.c',
-  'gs-app.c',
   'gs-app-folder-dialog.c',
   'gs-application.c',
-  'gs-app-list.c',
   'gs-app-row.c',
   'gs-app-tile.c',
-  'gs-auth.c',
   'gs-auth-dialog.c',
-  'gs-category.c',
   'gs-category-page.c',
   'gs-category-tile.c',
   'gs-common.c',
   'gs-content-rating.c',
-  'gs-debug.c',
   'gs-details-page.c',
   'gs-extras-page.c',
   'gs-feature-tile.c',
@@ -46,13 +40,8 @@ gnome_software_sources = [
   'gs-loading-page.c',
   'gs-main.c',
   'gs-moderate-page.c',
-  'gs-os-release.c',
   'gs-overview-page.c',
   'gs-page.c',
-  'gs-plugin.c',
-  'gs-plugin-event.c',
-  'gs-plugin-loader.c',
-  'gs-plugin-loader-sync.c',
   'gs-popular-tile.c',
   'gs-progress-button.c',
   'gs-removal-dialog.c',
@@ -73,7 +62,6 @@ gnome_software_sources = [
   'gs-update-monitor.c',
   'gs-updates-page.c',
   'gs-upgrade-banner.c',
-  'gs-utils.c',
   'gs-vendor.c'
 ]
 
@@ -114,97 +102,15 @@ executable(
   sources : gnome_software_sources,
   include_directories : [
     include_directories('..'),
+    include_directories('../lib'),
   ],
   dependencies : gnome_software_dependencies,
-  c_args : cargs,
-  install : true,
-  install_dir : 'bin'
-)
-
-executable(
-  'gnome-software-cmd',
-  sources : [
-    'gs-app.c',
-    'gs-app-list.c',
-    'gs-auth.c',
-    'gs-cmd.c',
-    'gs-common.c',
-    'gs-debug.c',
-    'gs-utils.c',
-    'gs-os-release.c',
-    'gs-plugin-event.c',
-    'gs-plugin-loader.c',
-    'gs-plugin-loader-sync.c',
-    'gs-category.c',
-    'gs-plugin.c'
-  ],
-  include_directories : [
-    include_directories('..'),
-  ],
-  dependencies : [
-    appstream_glib,
-    gio_unix,
-    gmodule,
-    gtk,
-    json_glib,
-    libm,
-    libsecret,
-    libsoup
+  link_with : [
+    libgnomesoftware
   ],
   c_args : cargs,
   install : true,
-  install_dir : 'libexec'
-)
-
-if get_option('enable-tests')
-  e = executable(
-    'gs-self-test',
-    sources : [
-      'gs-app.c',
-      'gs-app-list.c',
-      'gs-auth.c',
-      'gs-category.c',
-      'gs-common.c',
-      'gs-os-release.c',
-      'gs-plugin-event.c',
-      'gs-plugin-loader-sync.c',
-      'gs-plugin-loader.c',
-      'gs-plugin.c',
-      'gs-utils.c',
-      'gs-self-test.c'
-    ],
-    include_directories : [
-      include_directories('..'),
-    ],
-    dependencies : [
-      appstream_glib,
-      gio_unix,
-      gmodule,
-      gtk,
-      json_glib,
-      libm,
-      libsecret,
-      libsoup
-    ],
-    c_args : cargs
-  )
-  test('gs-self-test', e)
-endif
-
-install_headers([
-    'gnome-software.h',
-    'gs-app.h',
-    'gs-app-list.h',
-    'gs-auth.h',
-    'gs-category.h',
-    'gs-os-release.h',
-    'gs-plugin.h',
-    'gs-plugin-event.h',
-    'gs-plugin-types.h',
-    'gs-plugin-vfuncs.h',
-    'gs-utils.h'
-  ],
-  subdir : 'gnome-software'
+  install_dir : 'bin'
 )
 
 # replace @VERSION@
@@ -278,11 +184,3 @@ if get_option('enable-packagekit')
     configuration : conf
   )
 endif
-
-configure_file(
-  input : 'gnome-software.pc.in',
-  output : 'gnome-software.pc',
-  install: true,
-  install_dir: join_paths(get_option('libdir'), 'pkgconfig'),
-  configuration : conf
-)


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