[gnome-builder] plugins: switch to using dynamic shared libraries for plugins



commit dc9c073286b386e8989b8000ea04339314e308ee
Author: Christian Hergert <christian hergert me>
Date:   Sat Jun 20 01:38:24 2015 -0700

    plugins: switch to using dynamic shared libraries for plugins
    
    We might change back to embedded if/when it lands in libpeas, but this
    lets us move forward now and start merging back into master.
    
    We should also start cleaning up the plugin code, which can probably be
    simplified now that I have a hang of how this is getting put together.

 Makefile.am                                        |    6 +-
 plugins/command-bar/Makefile.am                    |    6 +-
 .../{gb-command-bar.plugin => command-bar.plugin}  |    2 +
 plugins/command-bar/gb-command-bar.c               |   25 ++++--
 plugins/command-bar/gb-command-bar.gresource.xml   |    1 -
 plugins/devhelp/Makefile.am                        |    5 +-
 .../devhelp/{gb-devhelp.plugin => devhelp.plugin}  |    2 +
 plugins/devhelp/gb-devhelp-panel.c                 |   27 +++++-
 plugins/devhelp/gb-devhelp-plugin.c                |   22 ++++--
 .../gb-devhelp-private.h}                          |   21 +++--
 plugins/devhelp/gb-devhelp-search-provider.c       |   23 ++++-
 plugins/devhelp/gb-devhelp.gresource.xml           |    1 -
 plugins/device-manager/Makefile.am                 |    7 +-
 ...device-manager.plugin => device-manager.plugin} |    4 +-
 plugins/device-manager/gb-device-manager-panel.c   |   25 +++++-
 .../device-manager/gb-device-manager.gresource.xml |    1 -
 plugins/file-search/Makefile.am                    |   26 ++----
 .../{gb-file-search.plugin => file-search.plugin}  |    2 +
 plugins/file-search/gb-file-search-provider.c      |   25 +++++-
 plugins/file-search/gb-file-search.gresource.xml   |    6 --
 plugins/symbol-tree/Makefile.am                    |    5 +-
 plugins/symbol-tree/symbol-tree.c                  |   29 +++++--
 plugins/symbol-tree/symbol-tree.gresource.xml      |    1 -
 plugins/symbol-tree/symbol-tree.plugin             |    2 +
 plugins/sysmon/Makefile.am                         |    4 +-
 plugins/sysmon/gb-sysmon-addin.c                   |   26 ++++--
 plugins/sysmon/gb-sysmon-panel.c                   |    2 +
 plugins/sysmon/gb-sysmon.gresource.xml             |    1 -
 plugins/sysmon/{gb-sysmon.plugin => sysmon.plugin} |    2 +
 plugins/terminal/Makefile.am                       |   10 ++-
 plugins/terminal/gb-terminal-application-addin.c   |   20 ++++-
 plugins/terminal/gb-terminal-plugin.c              |   23 ++++--
 .../gb-terminal-private.h}                         |   21 +++--
 plugins/terminal/gb-terminal-workbench-addin.c     |   20 ++++-
 plugins/terminal/gb-terminal.gresource.xml         |    1 -
 .../{gb-terminal.plugin => terminal.plugin}        |    2 +
 src/Makefile.am                                    |   25 +-----
 src/gb-plugins.c                                   |   87 --------------------
 src/gb-plugins.h                                   |   56 -------------
 src/main.c                                         |   49 ++++++++++-
 40 files changed, 342 insertions(+), 281 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index 582f8e8..e1af8f8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = . build contrib data libide plugins src po tools tests doc
+SUBDIRS = . build contrib data libide src plugins po tools tests doc
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = $(top_builddir)/data/libide-1.0.pc
@@ -71,22 +71,26 @@ dist-hook:
 .PHONY: AUTHORS
 
 run:
+       GB_IN_TREE_PLUGINS=1 \
        GI_TYPELIB_PATH=libide \
        GOBJECT_DEBUG=instance-count \
        $(LIBTOOL) --mode=execute gdb -ex run --args src/gnome-builder -vvvv -s
 
 strace:
+       GB_IN_TREE_PLUGINS=1 \
        GI_TYPELIB_PATH=libide \
        GOBJECT_DEBUG=instance-count \
        $(LIBTOOL) --mode=execute strace -T src/gnome-builder -vvvv -s
 
 debug:
+       GB_IN_TREE_PLUGINS=1 \
        GI_TYPELIB_PATH=libide \
        G_DEBUG=fatal-criticals \
        GOBJECT_DEBUG=instance-count \
        $(LIBTOOL) --mode=execute gdb -ex run --args src/gnome-builder -vvvv -s
 
 valgrind:
+       GB_IN_TREE_PLUGINS=1 \
        GI_TYPELIB_PATH=libide \
        G_DEBUG=fatal-criticals \
        G_SLICE=always-malloc \
diff --git a/plugins/command-bar/Makefile.am b/plugins/command-bar/Makefile.am
index 62c45e5..9f2fb1c 100644
--- a/plugins/command-bar/Makefile.am
+++ b/plugins/command-bar/Makefile.am
@@ -3,7 +3,9 @@ BUILT_SOURCES =
 CLEANFILES =
 EXTRA_DIST =
 
-noinst_LTLIBRARIES = libcommand-bar.la
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libcommand-bar.la
+plugin_DATA = command-bar.plugin
 
 libcommand_bar_la_SOURCES = \
        gb-command-bar-resources.c \
@@ -52,6 +54,8 @@ libcommand_bar_la_LIBADD = \
 
 libcommand_bar_la_LDFLAGS = \
        $(OPTIMIZE_LDFLAGS) \
+       -avoid-version \
+       -module \
        $(NULL)
 
 glib_resources_c = gb-command-bar-resources.c
diff --git a/plugins/command-bar/gb-command-bar.plugin b/plugins/command-bar/command-bar.plugin
similarity index 89%
rename from plugins/command-bar/gb-command-bar.plugin
rename to plugins/command-bar/command-bar.plugin
index 3d2f0ba..68dfc79 100644
--- a/plugins/command-bar/gb-command-bar.plugin
+++ b/plugins/command-bar/command-bar.plugin
@@ -4,3 +4,5 @@ Name=Command Bar
 Description=Provides a command bar at the bottom of the workbench window.
 Authors=Christian Hergert <christian hergert me>
 Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
diff --git a/plugins/command-bar/gb-command-bar.c b/plugins/command-bar/gb-command-bar.c
index 653c948..03e82b9 100644
--- a/plugins/command-bar/gb-command-bar.c
+++ b/plugins/command-bar/gb-command-bar.c
@@ -18,6 +18,7 @@
 
 #include <glib/gi18n.h>
 #include <ide.h>
+#include <libpeas/peas.h>
 
 #include "gb-command.h"
 #include "gb-command-bar-resources.h"
@@ -32,7 +33,6 @@
 #include "gb-widget.h"
 #include "gb-workbench.h"
 #include "gb-workbench-addin.h"
-#include "gb-plugins.h"
 
 struct _GbCommandBar
 {
@@ -62,8 +62,9 @@ struct _GbCommandBar
 
 static void workbench_addin_init (GbWorkbenchAddinInterface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GbCommandBar, gb_command_bar, GTK_TYPE_BIN,
-                         G_IMPLEMENT_INTERFACE (GB_TYPE_WORKBENCH_ADDIN, workbench_addin_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GbCommandBar, gb_command_bar, GTK_TYPE_BIN, 0,
+                                G_IMPLEMENT_INTERFACE_DYNAMIC (GB_TYPE_WORKBENCH_ADDIN,
+                                                               workbench_addin_init))
 
 #define HISTORY_LENGTH 30
 
@@ -735,6 +736,11 @@ gb_command_bar_class_init (GbCommandBarClass *klass)
 }
 
 static void
+gb_command_bar_class_finalize (GbCommandBarClass *klass)
+{
+}
+
+static void
 gb_command_bar_init (GbCommandBar *self)
 {
   self->history = g_queue_new ();
@@ -757,7 +763,12 @@ workbench_addin_init (GbWorkbenchAddinInterface *iface)
   iface->unload = gb_command_bar_unload;
 }
 
-GB_DEFINE_EMBEDDED_PLUGIN (gb_command_bar,
-                           gb_command_bar_get_resource (),
-                           "resource:///org/gnome/builder/plugins/command-bar/gb-command-bar.plugin",
-                           GB_DEFINE_PLUGIN_TYPE (GB_TYPE_WORKBENCH_ADDIN, GB_TYPE_COMMAND_BAR))
+G_MODULE_EXPORT void
+peas_register_types (PeasObjectModule *module)
+{
+  gb_command_bar_register_type (G_TYPE_MODULE (module));
+
+  peas_object_module_register_extension_type (module,
+                                              GB_TYPE_WORKBENCH_ADDIN,
+                                              GB_TYPE_COMMAND_BAR);
+}
diff --git a/plugins/command-bar/gb-command-bar.gresource.xml 
b/plugins/command-bar/gb-command-bar.gresource.xml
index 1e9f9cc..6197d47 100644
--- a/plugins/command-bar/gb-command-bar.gresource.xml
+++ b/plugins/command-bar/gb-command-bar.gresource.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <gresources>
   <gresource prefix="/org/gnome/builder/plugins/command-bar">
-    <file>gb-command-bar.plugin</file>
     <file>gb-command-bar.ui</file>
   </gresource>
 </gresources>
diff --git a/plugins/devhelp/Makefile.am b/plugins/devhelp/Makefile.am
index 18e72da..d64e62f 100644
--- a/plugins/devhelp/Makefile.am
+++ b/plugins/devhelp/Makefile.am
@@ -3,7 +3,9 @@ BUILT_SOURCES =
 CLEANFILES =
 EXTRA_DIST =
 
-noinst_LTLIBRARIES = libdevhelp.la
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libdevhelp.la
+plugin_DATA = devhelp.plugin
 
 libdevhelp_la_SOURCES = \
        gb-devhelp-document.c \
@@ -39,6 +41,7 @@ libdevhelp_la_LIBADD = \
        $(NULL)
 
 libdevhelp_la_LDFLAGS = \
+       $(OPTIMIZE_LDFLAGS) \
        -avoid-version \
        -module \
        $(NULL)
diff --git a/plugins/devhelp/gb-devhelp.plugin b/plugins/devhelp/devhelp.plugin
similarity index 87%
rename from plugins/devhelp/gb-devhelp.plugin
rename to plugins/devhelp/devhelp.plugin
index aedd2af..60a2bd1 100644
--- a/plugins/devhelp/gb-devhelp.plugin
+++ b/plugins/devhelp/devhelp.plugin
@@ -4,3 +4,5 @@ Name=Devhelp
 Description=Provides devhelp documentation
 Authors=Christian Hergert <christian hergert me>
 Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
diff --git a/plugins/devhelp/gb-devhelp-panel.c b/plugins/devhelp/gb-devhelp-panel.c
index 52c3c7c..461b769 100644
--- a/plugins/devhelp/gb-devhelp-panel.c
+++ b/plugins/devhelp/gb-devhelp-panel.c
@@ -18,13 +18,13 @@
 
 #include <glib/gi18n.h>
 #include <devhelp/devhelp.h>
+#include <libpeas/peas.h>
 
 #include "gb-devhelp-document.h"
 #include "gb-devhelp-panel.h"
 #include "gb-devhelp-resources.h"
 #include "gb-devhelp-view.h"
 #include "gb-document.h"
-#include "gb-plugins.h"
 #include "gb-view.h"
 #include "gb-view-grid.h"
 #include "gb-workbench-addin.h"
@@ -44,9 +44,9 @@ struct _GbDevhelpPanel
 
 static void workbench_addin_iface_init (GbWorkbenchAddinInterface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GbDevhelpPanel, gb_devhelp_panel, GTK_TYPE_BIN,
-                         G_IMPLEMENT_INTERFACE (GB_TYPE_WORKBENCH_ADDIN,
-                                                workbench_addin_iface_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GbDevhelpPanel, gb_devhelp_panel, GTK_TYPE_BIN, 0,
+                                G_IMPLEMENT_INTERFACE_DYNAMIC (GB_TYPE_WORKBENCH_ADDIN,
+                                                               workbench_addin_iface_init))
 
 enum {
   PROP_0,
@@ -86,6 +86,7 @@ gb_devhelp_panel_load (GbWorkbenchAddin *addin)
   const gchar * const accels[] = { "<ctrl><shift>f", NULL };
   GSimpleAction *action;
   GApplication *app;
+  GtkWidget *parent;
 
   g_assert (GB_IS_DEVHELP_PANEL (self));
 
@@ -94,6 +95,11 @@ gb_devhelp_panel_load (GbWorkbenchAddin *addin)
   gb_workspace_pane_add_page (GB_WORKSPACE_PANE (pane), GTK_WIDGET (self),
                               _("Documentation"), "help-contents-symbolic");
 
+  parent = gtk_widget_get_parent (GTK_WIDGET (self));
+  gtk_container_child_set (GTK_CONTAINER (parent), GTK_WIDGET (self),
+                           "position", 0,
+                           NULL);
+
   action = g_simple_action_new ("focus-devhelp-search", NULL);
   g_signal_connect_object (action,
                            "activate",
@@ -109,6 +115,8 @@ gb_devhelp_panel_load (GbWorkbenchAddin *addin)
                                          accels);
 
   gtk_widget_show (GTK_WIDGET (self));
+
+  gtk_stack_set_visible_child (GTK_STACK (parent), GTK_WIDGET (self));
 }
 
 static void
@@ -241,6 +249,11 @@ gb_devhelp_panel_class_init (GbDevhelpPanelClass *klass)
 }
 
 static void
+gb_devhelp_panel_class_finalize (GbDevhelpPanelClass *klass)
+{
+}
+
+static void
 gb_devhelp_panel_init (GbDevhelpPanel *self)
 {
   self->book_manager = dh_book_manager_new ();
@@ -266,3 +279,9 @@ workbench_addin_iface_init (GbWorkbenchAddinInterface *iface)
   iface->load = gb_devhelp_panel_load;
   iface->unload = gb_devhelp_panel_unload;
 }
+
+void
+_gb_devhelp_panel_register_type (GTypeModule *module)
+{
+  gb_devhelp_panel_register_type (module);
+}
diff --git a/plugins/devhelp/gb-devhelp-plugin.c b/plugins/devhelp/gb-devhelp-plugin.c
index 28a1b23..39334a7 100644
--- a/plugins/devhelp/gb-devhelp-plugin.c
+++ b/plugins/devhelp/gb-devhelp-plugin.c
@@ -17,15 +17,23 @@
  */
 
 #include <ide.h>
+#include <libpeas/peas.h>
 
 #include "gb-devhelp-panel.h"
-#include "gb-devhelp-resources.h"
+#include "gb-devhelp-private.h"
 #include "gb-devhelp-search-provider.h"
-#include "gb-plugins.h"
 #include "gb-workbench-addin.h"
 
-GB_DEFINE_EMBEDDED_PLUGIN (gb_devhelp,
-                           gb_devhelp_get_resource (),
-                           "resource:///org/gnome/builder/plugins/devhelp/gb-devhelp.plugin",
-                           GB_DEFINE_PLUGIN_TYPE (GB_TYPE_WORKBENCH_ADDIN, GB_TYPE_DEVHELP_PANEL)
-                           GB_DEFINE_PLUGIN_TYPE (IDE_TYPE_SEARCH_PROVIDER, GB_TYPE_DEVHELP_SEARCH_PROVIDER))
+void
+peas_register_types (PeasObjectModule *module)
+{
+  _gb_devhelp_panel_register_type (G_TYPE_MODULE (module));
+  _gb_devhelp_search_provider_register_type (G_TYPE_MODULE (module));
+
+  peas_object_module_register_extension_type (module,
+                                              GB_TYPE_WORKBENCH_ADDIN,
+                                              GB_TYPE_DEVHELP_PANEL);
+  peas_object_module_register_extension_type (module,
+                                              IDE_TYPE_SEARCH_PROVIDER,
+                                              GB_TYPE_DEVHELP_SEARCH_PROVIDER);
+}
diff --git a/plugins/file-search/gb-file-search-plugin.c b/plugins/devhelp/gb-devhelp-private.h
similarity index 61%
rename from plugins/file-search/gb-file-search-plugin.c
rename to plugins/devhelp/gb-devhelp-private.h
index a818e49..6339db1 100644
--- a/plugins/file-search/gb-file-search-plugin.c
+++ b/plugins/devhelp/gb-devhelp-private.h
@@ -1,4 +1,4 @@
-/* gb-file-search-plugin.c
+/* gb-devhelp-private.h
  *
  * Copyright (C) 2015 Christian Hergert <christian hergert me>
  *
@@ -16,13 +16,16 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <ide.h>
+#ifndef GB_DEVHELP_PRIVATE_H
+#define GB_DEVHELP_PRIVATE_H
 
-#include "gb-plugins.h"
-#include "gb-file-search-provider.h"
-#include "gb-file-search-resources.h"
+#include <glib-object.h>
 
-GB_DEFINE_EMBEDDED_PLUGIN (gb_file_search,
-                           gb_file_search_get_resource (),
-                           "resource:///org/gnome/builder/plugins/file-search/gb-file-search.plugin",
-                           GB_DEFINE_PLUGIN_TYPE (IDE_TYPE_SEARCH_PROVIDER, GB_TYPE_FILE_SEARCH_PROVIDER))
+G_BEGIN_DECLS
+
+void _gb_devhelp_panel_register_type           (GTypeModule *module);
+void _gb_devhelp_search_provider_register_type (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* GB_DEVHELP_PRIVATE_H */
diff --git a/plugins/devhelp/gb-devhelp-search-provider.c b/plugins/devhelp/gb-devhelp-search-provider.c
index 9aace77..1fb3c2b 100644
--- a/plugins/devhelp/gb-devhelp-search-provider.c
+++ b/plugins/devhelp/gb-devhelp-search-provider.c
@@ -19,9 +19,10 @@
 #define G_LOG_DOMAIN "devhelp-search"
 
 #include <ctype.h>
-#include <glib/gi18n.h>
 #include <devhelp/devhelp.h>
+#include <glib/gi18n.h>
 #include <ide.h>
+#include <libpeas/peas.h>
 
 #include "gb-devhelp-document.h"
 #include "gb-devhelp-panel.h"
@@ -43,9 +44,12 @@ struct _GbDevhelpSearchProvider
 
 static void search_provider_iface_init (IdeSearchProviderInterface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GbDevhelpSearchProvider, gb_devhelp_search_provider, IDE_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (IDE_TYPE_SEARCH_PROVIDER,
-                                                search_provider_iface_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GbDevhelpSearchProvider,
+                                gb_devhelp_search_provider,
+                                IDE_TYPE_OBJECT,
+                                0,
+                                G_IMPLEMENT_INTERFACE_DYNAMIC (IDE_TYPE_SEARCH_PROVIDER,
+                                                               search_provider_iface_init))
 
 static void
 gb_devhelp_search_provider_populate (IdeSearchProvider *provider,
@@ -210,6 +214,11 @@ gb_devhelp_search_provider_class_init (GbDevhelpSearchProviderClass *klass)
 }
 
 static void
+gb_devhelp_search_provider_class_finalize (GbDevhelpSearchProviderClass *klass)
+{
+}
+
+static void
 gb_devhelp_search_provider_init (GbDevhelpSearchProvider *self)
 {
   self->book_manager = dh_book_manager_new ();
@@ -225,3 +234,9 @@ search_provider_iface_init (IdeSearchProviderInterface *iface)
   iface->activate = gb_devhelp_search_provider_activate;
   iface->get_priority = gb_devhelp_search_provider_get_priority;
 }
+
+void
+_gb_devhelp_search_provider_register_type (GTypeModule *module)
+{
+  gb_devhelp_search_provider_register_type (module);
+}
diff --git a/plugins/devhelp/gb-devhelp.gresource.xml b/plugins/devhelp/gb-devhelp.gresource.xml
index 2657450..8a90838 100644
--- a/plugins/devhelp/gb-devhelp.gresource.xml
+++ b/plugins/devhelp/gb-devhelp.gresource.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <gresources>
   <gresource prefix="/org/gnome/builder/plugins/devhelp">
-    <file>gb-devhelp.plugin</file>
     <file>gb-devhelp-view.ui</file>
   </gresource>
 </gresources>
diff --git a/plugins/device-manager/Makefile.am b/plugins/device-manager/Makefile.am
index 19262e8..1982da4 100644
--- a/plugins/device-manager/Makefile.am
+++ b/plugins/device-manager/Makefile.am
@@ -3,12 +3,13 @@ BUILT_SOURCES =
 CLEANFILES =
 EXTRA_DIST =
 
-noinst_LTLIBRARIES = libdevice-manager.la
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libdevice-manager.la
+plugin_DATA = device-manager.plugin
 
 libdevice_manager_la_SOURCES = \
        gb-device-manager-panel.c \
        gb-device-manager-panel.h \
-       gb-device-manager-plugin.c \
        gb-device-manager-tree-builder.c \
        gb-device-manager-tree-builder.h \
        $(NULL)
@@ -36,10 +37,12 @@ nodist_libdevice_manager_la_SOURCES = \
        gb-device-manager-resources.c \
        gb-device-manager-resources.h
 
+
 glib_resources_c = gb-device-manager-resources.c
 glib_resources_h = gb-device-manager-resources.h
 glib_resources_xml = gb-device-manager.gresource.xml
 glib_resources_namespace = gb_device_manager
 include $(top_srcdir)/build/autotools/Makefile.am.gresources
 
+
 -include $(top_srcdir)/git.mk
diff --git a/plugins/device-manager/gb-device-manager.plugin b/plugins/device-manager/device-manager.plugin
similarity index 77%
rename from plugins/device-manager/gb-device-manager.plugin
rename to plugins/device-manager/device-manager.plugin
index bf371af..6c94e2f 100644
--- a/plugins/device-manager/gb-device-manager.plugin
+++ b/plugins/device-manager/device-manager.plugin
@@ -1,6 +1,8 @@
 [Plugin]
-Module=gb-device-manager
+Module=device-manager
 Name=Device Manager
 Description=Manage connected devices
 Authors=Christian Hergert <christian hergert me>
 Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
diff --git a/plugins/device-manager/gb-device-manager-panel.c 
b/plugins/device-manager/gb-device-manager-panel.c
index 85fe5ca..54866bb 100644
--- a/plugins/device-manager/gb-device-manager-panel.c
+++ b/plugins/device-manager/gb-device-manager-panel.c
@@ -17,6 +17,7 @@
  */
 
 #include <glib/gi18n.h>
+#include <libpeas/peas.h>
 
 #include "gb-device-manager-panel.h"
 #include "gb-device-manager-tree-builder.h"
@@ -33,9 +34,12 @@ struct _GbDeviceManagerPanel
 
 static void workbench_addin_iface_init (GbWorkbenchAddinInterface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GbDeviceManagerPanel, gb_device_manager_panel, GTK_TYPE_BOX,
-                         G_IMPLEMENT_INTERFACE (GB_TYPE_WORKBENCH_ADDIN,
-                                                workbench_addin_iface_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GbDeviceManagerPanel,
+                                gb_device_manager_panel,
+                                GTK_TYPE_BOX,
+                                0,
+                                G_IMPLEMENT_INTERFACE_DYNAMIC (GB_TYPE_WORKBENCH_ADDIN,
+                                                               workbench_addin_iface_init))
 
 enum {
   PROP_0,
@@ -138,6 +142,11 @@ gb_device_manager_panel_class_init (GbDeviceManagerPanelClass *klass)
 }
 
 static void
+gb_device_manager_panel_class_finalize (GbDeviceManagerPanelClass *klass)
+{
+}
+
+static void
 gb_device_manager_panel_init (GbDeviceManagerPanel *self)
 {
   gtk_widget_init_template (GTK_WIDGET (self));
@@ -149,3 +158,13 @@ workbench_addin_iface_init (GbWorkbenchAddinInterface *iface)
   iface->load = gb_device_manager_panel_load;
   iface->unload = gb_device_manager_panel_unload;
 }
+
+void
+peas_register_types (PeasObjectModule *module)
+{
+  gb_device_manager_panel_register_type (G_TYPE_MODULE (module));
+
+  peas_object_module_register_extension_type (module,
+                                              GB_TYPE_WORKBENCH_ADDIN,
+                                              GB_TYPE_DEVICE_MANAGER_PANEL);
+}
diff --git a/plugins/device-manager/gb-device-manager.gresource.xml 
b/plugins/device-manager/gb-device-manager.gresource.xml
index 0151dfa..b6ca761 100644
--- a/plugins/device-manager/gb-device-manager.gresource.xml
+++ b/plugins/device-manager/gb-device-manager.gresource.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <gresources>
   <gresource prefix="/org/gnome/builder/plugins/device-manager">
-    <file>gb-device-manager.plugin</file>
     <file>gb-device-manager-panel.ui</file>
   </gresource>
 </gresources>
diff --git a/plugins/file-search/Makefile.am b/plugins/file-search/Makefile.am
index 986e8df..8c241ec 100644
--- a/plugins/file-search/Makefile.am
+++ b/plugins/file-search/Makefile.am
@@ -1,12 +1,8 @@
-DISTCLEANFILES =
-BUILT_SOURCES =
-CLEANFILES =
-EXTRA_DIST =
-
-noinst_LTLIBRARIES = libfile-search.la
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libfile-search.la
+plugin_DATA = file-search.plugin
 
 libfile_search_la_SOURCES = \
-       gb-file-search-plugin.c \
        gb-file-search-provider.c \
        gb-file-search-provider.h \
        gb-file-search-result.c \
@@ -15,11 +11,6 @@ libfile_search_la_SOURCES = \
        gb-file-search-index.h \
        $(NULL)
 
-nodist_libfile_search_la_SOURCES = \
-       gb-file-search-resources.c \
-       gb-file-search-resources.h \
-       $(NULL)
-
 libfile_search_la_CFLAGS = \
        $(BUILDER_CFLAGS) \
        -I$(top_srcdir)/libide \
@@ -34,12 +25,9 @@ libfile_search_la_LIBADD = \
        $(top_builddir)/contrib/search/libsearch.la \
        $(NULL)
 
-libfile_search_la_LDFLAGS = -module
-
-glib_resources_c = gb-file-search-resources.c
-glib_resources_h = gb-file-search-resources.h
-glib_resources_xml = gb-file-search.gresource.xml
-glib_resources_namespace = gb_file_search
-include $(top_srcdir)/build/autotools/Makefile.am.gresources
+libfile_search_la_LDFLAGS = \
+       -module \
+       -avoid-version \
+       $(NULL)
 
 -include $(top_srcdir)/git.mk
diff --git a/plugins/file-search/gb-file-search.plugin b/plugins/file-search/file-search.plugin
similarity index 88%
rename from plugins/file-search/gb-file-search.plugin
rename to plugins/file-search/file-search.plugin
index 9df0b1b..156866e 100644
--- a/plugins/file-search/gb-file-search.plugin
+++ b/plugins/file-search/file-search.plugin
@@ -4,3 +4,5 @@ Name=File Search
 Description=Search for files in the global search bar.
 Authors=Christian Hergert <christian hergert me>
 Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
diff --git a/plugins/file-search/gb-file-search-provider.c b/plugins/file-search/gb-file-search-provider.c
index db8c0b4..60f04da 100644
--- a/plugins/file-search/gb-file-search-provider.c
+++ b/plugins/file-search/gb-file-search-provider.c
@@ -17,6 +17,7 @@
  */
 
 #include <glib/gi18n.h>
+#include <libpeas/peas.h>
 
 #include "gb-file-search-provider.h"
 #include "gb-file-search-index.h"
@@ -31,9 +32,12 @@ struct _GbFileSearchProvider
 
 static void search_provider_iface_init (IdeSearchProviderInterface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GbFileSearchProvider, gb_file_search_provider, IDE_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (IDE_TYPE_SEARCH_PROVIDER,
-                                                search_provider_iface_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GbFileSearchProvider,
+                                gb_file_search_provider,
+                                IDE_TYPE_OBJECT,
+                                0,
+                                G_IMPLEMENT_INTERFACE (IDE_TYPE_SEARCH_PROVIDER,
+                                                       search_provider_iface_init))
 
 static const gchar *
 gb_file_search_provider_get_verb (IdeSearchProvider *provider)
@@ -175,6 +179,11 @@ gb_file_search_provider_class_init (GbFileSearchProviderClass *klass)
 }
 
 static void
+gb_file_search_provider_class_finalize (GbFileSearchProviderClass *klass)
+{
+}
+
+static void
 gb_file_search_provider_init (GbFileSearchProvider *self)
 {
 }
@@ -188,3 +197,13 @@ search_provider_iface_init (IdeSearchProviderInterface *iface)
   iface->activate = gb_file_search_provider_activate;
   iface->get_priority = gb_file_search_provider_get_priority;
 }
+
+void
+peas_register_types (PeasObjectModule *module)
+{
+  gb_file_search_provider_register_type (G_TYPE_MODULE (module));
+
+  peas_object_module_register_extension_type (module,
+                                              IDE_TYPE_SEARCH_PROVIDER,
+                                              GB_TYPE_FILE_SEARCH_PROVIDER);
+}
diff --git a/plugins/symbol-tree/Makefile.am b/plugins/symbol-tree/Makefile.am
index 55c8217..826d6dc 100644
--- a/plugins/symbol-tree/Makefile.am
+++ b/plugins/symbol-tree/Makefile.am
@@ -3,7 +3,9 @@ BUILT_SOURCES =
 CLEANFILES =
 EXTRA_DIST =
 
-noinst_LTLIBRARIES = libsymbol-tree.la
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libsymbol-tree.la
+plugin_DATA = symbol-tree.plugin
 
 libsymbol_tree_la_SOURCES = \
        symbol-tree-builder.c \
@@ -34,6 +36,7 @@ libsymbol_tree_la_LIBADD = \
        $(NULL)
 
 libsymbol_tree_la_LDFLAGS = \
+       $(OPTIMIZE_LDFLAGS) \
        -avoid-version \
        -module \
        $(NULL)
diff --git a/plugins/symbol-tree/symbol-tree.c b/plugins/symbol-tree/symbol-tree.c
index 3f0c0cb..866a720 100644
--- a/plugins/symbol-tree/symbol-tree.c
+++ b/plugins/symbol-tree/symbol-tree.c
@@ -23,7 +23,6 @@
 #include "egg-task-cache.h"
 
 #include "gb-editor-view.h"
-#include "gb-plugins.h"
 #include "gb-tree.h"
 #include "gb-workspace.h"
 
@@ -52,8 +51,9 @@ static GParamSpec *gParamSpecs [LAST_PROP];
 
 static void workbench_addin_init (GbWorkbenchAddinInterface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (SymbolTree, symbol_tree, GTK_TYPE_BOX,
-                         G_IMPLEMENT_INTERFACE (GB_TYPE_WORKBENCH_ADDIN, workbench_addin_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (SymbolTree, symbol_tree, GTK_TYPE_BOX, 0,
+                                G_IMPLEMENT_INTERFACE_DYNAMIC (GB_TYPE_WORKBENCH_ADDIN,
+                                                               workbench_addin_init))
 
 static void
 get_cached_symbol_tree_cb (GObject      *object,
@@ -212,6 +212,11 @@ symbol_tree_load (GbWorkbenchAddin *addin)
                               GTK_WIDGET (self),
                               _("Symbol Tree"),
                               "lang-function-symbolic");
+
+  gtk_container_child_set (GTK_CONTAINER (gtk_widget_get_parent (GTK_WIDGET (self))),
+                           GTK_WIDGET (self),
+                           "position", 1,
+                           NULL);
 }
 
 static void
@@ -339,6 +344,11 @@ symbol_tree_class_init (SymbolTreeClass *klass)
 }
 
 static void
+symbol_tree_class_finalize (SymbolTreeClass *klass)
+{
+}
+
+static void
 symbol_tree_init (SymbolTree *self)
 {
   GbTreeNode *root;
@@ -370,7 +380,12 @@ symbol_tree_init (SymbolTree *self)
                            G_CONNECT_SWAPPED);
 }
 
-GB_DEFINE_EMBEDDED_PLUGIN (symbol_tree,
-                           symbol_tree_get_resource (),
-                           "resource:///org/gnome/builder/plugins/symbol-tree/symbol-tree.plugin",
-                           GB_DEFINE_PLUGIN_TYPE (GB_TYPE_WORKBENCH_ADDIN, SYMBOL_TYPE_TREE))
+void
+peas_register_types (PeasObjectModule *module)
+{
+  symbol_tree_register_type (G_TYPE_MODULE (module));
+
+  peas_object_module_register_extension_type (module,
+                                              GB_TYPE_WORKBENCH_ADDIN,
+                                              SYMBOL_TYPE_TREE);
+}
diff --git a/plugins/symbol-tree/symbol-tree.gresource.xml b/plugins/symbol-tree/symbol-tree.gresource.xml
index a848fe0..4b10ecf 100644
--- a/plugins/symbol-tree/symbol-tree.gresource.xml
+++ b/plugins/symbol-tree/symbol-tree.gresource.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <gresources>
   <gresource prefix="/org/gnome/builder/plugins/symbol-tree">
-    <file>symbol-tree.plugin</file>
     <file>symbol-tree.ui</file>
   </gresource>
 </gresources>
diff --git a/plugins/symbol-tree/symbol-tree.plugin b/plugins/symbol-tree/symbol-tree.plugin
index 036ed04..bdf932f 100644
--- a/plugins/symbol-tree/symbol-tree.plugin
+++ b/plugins/symbol-tree/symbol-tree.plugin
@@ -4,3 +4,5 @@ Name=Symbol Tree
 Description=Provides a Symbol Tree for the currently focused document.
 Authors=Christian Hergert <christian hergert me>
 Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
diff --git a/plugins/sysmon/Makefile.am b/plugins/sysmon/Makefile.am
index 387cb68..2529b05 100644
--- a/plugins/sysmon/Makefile.am
+++ b/plugins/sysmon/Makefile.am
@@ -3,7 +3,9 @@ BUILT_SOURCES =
 CLEANFILES =
 EXTRA_DIST =
 
-noinst_LTLIBRARIES = libsysmon.la
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libsysmon.la
+plugin_DATA = sysmon.plugin
 
 libsysmon_la_SOURCES = \
        gb-sysmon-panel.c \
diff --git a/plugins/sysmon/gb-sysmon-addin.c b/plugins/sysmon/gb-sysmon-addin.c
index 7808b59..60f7d30 100644
--- a/plugins/sysmon/gb-sysmon-addin.c
+++ b/plugins/sysmon/gb-sysmon-addin.c
@@ -17,8 +17,8 @@
  */
 
 #include <glib/gi18n.h>
+#include <libpeas/peas.h>
 
-#include "gb-plugins.h"
 #include "gb-sysmon-addin.h"
 #include "gb-sysmon-panel.h"
 #include "gb-sysmon-resources.h"
@@ -35,9 +35,9 @@ struct _GbSysmonAddin
 
 static void workbench_addin_iface_init (GbWorkbenchAddinInterface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GbSysmonAddin, gb_sysmon_addin, G_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (GB_TYPE_WORKBENCH_ADDIN,
-                                                workbench_addin_iface_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GbSysmonAddin, gb_sysmon_addin, G_TYPE_OBJECT, 0,
+                                G_IMPLEMENT_INTERFACE_DYNAMIC (GB_TYPE_WORKBENCH_ADDIN,
+                                                               workbench_addin_iface_init))
 
 enum {
   PROP_0,
@@ -131,11 +131,21 @@ gb_sysmon_addin_class_init (GbSysmonAddinClass *klass)
 }
 
 static void
+gb_sysmon_addin_class_finalize (GbSysmonAddinClass *klass)
+{
+}
+
+static void
 gb_sysmon_addin_init (GbSysmonAddin *self)
 {
 }
 
-GB_DEFINE_EMBEDDED_PLUGIN (gb_sysmon,
-                           gb_sysmon_get_resource (),
-                           "resource:///org/gnome/builder/plugins/sysmon/gb-sysmon.plugin",
-                           GB_DEFINE_PLUGIN_TYPE (GB_TYPE_WORKBENCH_ADDIN, GB_TYPE_SYSMON_ADDIN))
+void
+peas_register_types (PeasObjectModule *module)
+{
+  gb_sysmon_addin_register_type (G_TYPE_MODULE (module));
+
+  peas_object_module_register_extension_type (module,
+                                              GB_TYPE_WORKBENCH_ADDIN,
+                                              GB_TYPE_SYSMON_ADDIN);
+}
diff --git a/plugins/sysmon/gb-sysmon-panel.c b/plugins/sysmon/gb-sysmon-panel.c
index c12f32a..dd25afe 100644
--- a/plugins/sysmon/gb-sysmon-panel.c
+++ b/plugins/sysmon/gb-sysmon-panel.c
@@ -45,6 +45,8 @@ gb_sysmon_panel_class_init (GbSysmonPanelClass *klass)
 
   gtk_widget_class_set_template_from_resource (widget_class, 
"/org/gnome/builder/plugins/sysmon/gb-sysmon-panel.ui");
   gtk_widget_class_bind_template_child (widget_class, GbSysmonPanel, cpu_graph);
+
+  g_type_ensure (RG_TYPE_CPU_GRAPH);
 }
 
 static void
diff --git a/plugins/sysmon/gb-sysmon.gresource.xml b/plugins/sysmon/gb-sysmon.gresource.xml
index 737066b..704c724 100644
--- a/plugins/sysmon/gb-sysmon.gresource.xml
+++ b/plugins/sysmon/gb-sysmon.gresource.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <gresources>
   <gresource prefix="/org/gnome/builder/plugins/sysmon">
-    <file>gb-sysmon.plugin</file>
     <file>gb-sysmon-panel.ui</file>
   </gresource>
 </gresources>
diff --git a/plugins/sysmon/gb-sysmon.plugin b/plugins/sysmon/sysmon.plugin
similarity index 87%
rename from plugins/sysmon/gb-sysmon.plugin
rename to plugins/sysmon/sysmon.plugin
index 8056d3b..f51d2cb 100644
--- a/plugins/sysmon/gb-sysmon.plugin
+++ b/plugins/sysmon/sysmon.plugin
@@ -4,3 +4,5 @@ Name=System Monitor
 Description=Basic system information
 Authors=Christian Hergert <christian hergert me>
 Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
diff --git a/plugins/terminal/Makefile.am b/plugins/terminal/Makefile.am
index ac791d3..9cc4fab 100644
--- a/plugins/terminal/Makefile.am
+++ b/plugins/terminal/Makefile.am
@@ -3,12 +3,15 @@ BUILT_SOURCES =
 CLEANFILES =
 EXTRA_DIST =
 
-noinst_LTLIBRARIES = libterminal.la
+plugindir = $(libdir)/gnome-builder/plugins
+plugin_LTLIBRARIES = libterminal.la
+plugin_DATA = terminal.plugin
 
 libterminal_la_SOURCES = \
        gb-terminal-application-addin.c \
        gb-terminal-application-addin.h \
        gb-terminal-plugin.c \
+       gb-terminal-private.h \
        gb-terminal-view.c \
        gb-terminal-view.h \
        gb-terminal-workbench-addin.c \
@@ -37,7 +40,10 @@ libterminal_la_LIBADD = \
        $(BUILDER_LIBS) \
        $(NULL)
 
-libterminal_la_LDFLAGS = -module
+libterminal_la_LDFLAGS = \
+       -avoid-version \
+       -module \
+       $(NULL)
 
 glib_resources_c = gb-terminal-resources.c
 glib_resources_h = gb-terminal-resources.h
diff --git a/plugins/terminal/gb-terminal-application-addin.c 
b/plugins/terminal/gb-terminal-application-addin.c
index 33053e0..d86ac04 100644
--- a/plugins/terminal/gb-terminal-application-addin.c
+++ b/plugins/terminal/gb-terminal-application-addin.c
@@ -25,9 +25,12 @@ struct _GbTerminalApplicationAddin
 
 static void application_addin_iface_init (GbApplicationAddinInterface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GbTerminalApplicationAddin, gb_terminal_application_addin, G_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (GB_TYPE_APPLICATION_ADDIN,
-                                                application_addin_iface_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GbTerminalApplicationAddin,
+                                gb_terminal_application_addin,
+                                G_TYPE_OBJECT,
+                                0,
+                                G_IMPLEMENT_INTERFACE (GB_TYPE_APPLICATION_ADDIN,
+                                                       application_addin_iface_init))
 
 static void
 gb_terminal_application_addin_load (GbApplicationAddin *addin,
@@ -58,6 +61,11 @@ gb_terminal_application_addin_class_init (GbTerminalApplicationAddinClass *klass
 }
 
 static void
+gb_terminal_application_addin_class_finalize (GbTerminalApplicationAddinClass *klass)
+{
+}
+
+static void
 gb_terminal_application_addin_init (GbTerminalApplicationAddin *self)
 {
 }
@@ -68,3 +76,9 @@ application_addin_iface_init (GbApplicationAddinInterface *iface)
   iface->load = gb_terminal_application_addin_load;
   iface->unload = gb_terminal_application_addin_unload;
 }
+
+void
+_gb_terminal_application_addin_register_type (GTypeModule *module)
+{
+  gb_terminal_application_addin_register_type (module);
+}
diff --git a/plugins/terminal/gb-terminal-plugin.c b/plugins/terminal/gb-terminal-plugin.c
index 564a6b2..2eeb437 100644
--- a/plugins/terminal/gb-terminal-plugin.c
+++ b/plugins/terminal/gb-terminal-plugin.c
@@ -16,14 +16,25 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <libpeas/peas.h>
+
 #include "gb-application-addin.h"
-#include "gb-plugins.h"
 #include "gb-terminal-application-addin.h"
+#include "gb-terminal-private.h"
 #include "gb-terminal-resources.h"
 #include "gb-terminal-workbench-addin.h"
+#include "gb-workbench-addin.h"
+
+void
+peas_register_types (PeasObjectModule *module)
+{
+  _gb_terminal_application_addin_register_type (G_TYPE_MODULE (module));
+  _gb_terminal_workbench_addin_register_type (G_TYPE_MODULE (module));
 
-GB_DEFINE_EMBEDDED_PLUGIN (gb_terminal,
-                           gb_terminal_get_resource (),
-                           "resource:///org/gnome/builder/plugins/terminal/gb-terminal.plugin",
-                           GB_DEFINE_PLUGIN_TYPE (GB_TYPE_APPLICATION_ADDIN, 
GB_TYPE_TERMINAL_APPLICATION_ADDIN)
-                           GB_DEFINE_PLUGIN_TYPE (GB_TYPE_WORKBENCH_ADDIN, GB_TYPE_TERMINAL_WORKBENCH_ADDIN))
+  peas_object_module_register_extension_type (module,
+                                              GB_TYPE_APPLICATION_ADDIN,
+                                              GB_TYPE_TERMINAL_APPLICATION_ADDIN);
+  peas_object_module_register_extension_type (module,
+                                              GB_TYPE_WORKBENCH_ADDIN,
+                                              GB_TYPE_TERMINAL_WORKBENCH_ADDIN);
+}
diff --git a/plugins/device-manager/gb-device-manager-plugin.c b/plugins/terminal/gb-terminal-private.h
similarity index 61%
rename from plugins/device-manager/gb-device-manager-plugin.c
rename to plugins/terminal/gb-terminal-private.h
index 69addb7..3d38ae2 100644
--- a/plugins/device-manager/gb-device-manager-plugin.c
+++ b/plugins/terminal/gb-terminal-private.h
@@ -1,4 +1,4 @@
-/* gb-device-manager-plugin.c
+/* gb-terminal-private.h
  *
  * Copyright (C) 2015 Christian Hergert <christian hergert me>
  *
@@ -16,11 +16,16 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "gb-plugins.h"
-#include "gb-device-manager-panel.h"
-#include "gb-device-manager-resources.h"
+#ifndef GB_TERMINAL_PRIVATE_H
+#define GB_TERMINAL_PRIVATE_H
 
-GB_DEFINE_EMBEDDED_PLUGIN (gb_device_manager,
-                           gb_device_manager_get_resource (),
-                           "resource:///org/gnome/builder/plugins/device-manager/gb-device-manager.plugin",
-                           GB_DEFINE_PLUGIN_TYPE (GB_TYPE_WORKBENCH_ADDIN, GB_TYPE_DEVICE_MANAGER_PANEL))
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+void _gb_terminal_application_addin_register_type (GTypeModule *module);
+void _gb_terminal_workbench_addin_register_type   (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* GB_TERMINAL_PRIVATE_H */
diff --git a/plugins/terminal/gb-terminal-workbench-addin.c b/plugins/terminal/gb-terminal-workbench-addin.c
index 391619e..ca91c76 100644
--- a/plugins/terminal/gb-terminal-workbench-addin.c
+++ b/plugins/terminal/gb-terminal-workbench-addin.c
@@ -33,9 +33,12 @@ struct _GbTerminalWorkbenchAddin
 
 static void workbench_addin_iface_init (GbWorkbenchAddinInterface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GbTerminalWorkbenchAddin, gb_terminal_workbench_addin, G_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (GB_TYPE_WORKBENCH_ADDIN,
-                                                workbench_addin_iface_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GbTerminalWorkbenchAddin,
+                                gb_terminal_workbench_addin,
+                                G_TYPE_OBJECT,
+                                0,
+                                G_IMPLEMENT_INTERFACE (GB_TYPE_WORKBENCH_ADDIN,
+                                                       workbench_addin_iface_init))
 
 enum {
   PROP_0,
@@ -168,6 +171,11 @@ gb_terminal_workbench_addin_class_init (GbTerminalWorkbenchAddinClass *klass)
 }
 
 static void
+gb_terminal_workbench_addin_class_finalize (GbTerminalWorkbenchAddinClass *klass)
+{
+}
+
+static void
 gb_terminal_workbench_addin_init (GbTerminalWorkbenchAddin *self)
 {
 }
@@ -178,3 +186,9 @@ workbench_addin_iface_init (GbWorkbenchAddinInterface *iface)
   iface->load = gb_terminal_workbench_addin_load;
   iface->unload = gb_terminal_workbench_addin_unload;
 }
+
+void
+_gb_terminal_workbench_addin_register_type (GTypeModule *module)
+{
+  gb_terminal_workbench_addin_register_type (module);
+}
diff --git a/plugins/terminal/gb-terminal.gresource.xml b/plugins/terminal/gb-terminal.gresource.xml
index 28b0ab9..17d816c 100644
--- a/plugins/terminal/gb-terminal.gresource.xml
+++ b/plugins/terminal/gb-terminal.gresource.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <gresources>
   <gresource prefix="/org/gnome/builder/plugins/terminal">
-    <file>gb-terminal.plugin</file>
     <file>gb-terminal-view.ui</file>
   </gresource>
 </gresources>
diff --git a/plugins/terminal/gb-terminal.plugin b/plugins/terminal/terminal.plugin
similarity index 87%
rename from plugins/terminal/gb-terminal.plugin
rename to plugins/terminal/terminal.plugin
index e846153..f99920e 100644
--- a/plugins/terminal/gb-terminal.plugin
+++ b/plugins/terminal/terminal.plugin
@@ -4,3 +4,5 @@ Name=Terminal
 Description=A terminal for Builder
 Authors=Christian Hergert <christian hergert me>
 Copyright=Copyright © 2015 Christian Hergert
+Builtin=true
+Hidden=true
diff --git a/src/Makefile.am b/src/Makefile.am
index 62f8db5..444d63b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -179,6 +179,7 @@ libgnome_builder_la_LIBADD = \
 libgnome_builder_la_CFLAGS = \
        -DPACKAGE_DATADIR="\"${datadir}\"" \
        -DPACKAGE_LOCALE_DIR=\""${datadir}/locale"\" \
+       -DPACKAGE_LIBDIR=\""${libdir}"\" \
        $(BUILDER_CFLAGS) \
        $(DEBUG_CFLAGS) \
        $(OPTIMIZE_CFLAGS) \
@@ -203,7 +204,6 @@ libgnome_builder_la_CFLAGS = \
        -I$(srcdir)/views \
        -I$(srcdir)/workbench \
        -I$(srcdir)/workspace \
-       -I$(top_builddir)/plugins/devhelp \
        -I$(top_builddir)/data/icons/hicolor \
        -I$(top_builddir)/libide \
        -I$(top_srcdir)/libide \
@@ -214,35 +214,15 @@ libgnome_builder_la_CFLAGS = \
        -I$(top_srcdir)/contrib/rg \
        $(NULL)
 
-define_plugin = -Wl,--whole-archive,$(top_builddir)/plugins/$1/.libs/lib$1.a,--no-whole-archive
-
-gnome_builder_PLUGINS = \
-       devhelp \
-       command-bar \
-       device-manager \
-       file-search \
-       symbol-tree \
-       sysmon \
-       terminal \
-       $(NULL)
-
-gnome_builder_SOURCES = \
-       gb-plugins.c \
-       gb-plugins.h \
-       main.c
 
+gnome_builder_SOURCES = main.c
 gnome_builder_CFLAGS = $(libgnome_builder_la_CFLAGS)
-
 gnome_builder_LDADD = \
        $(top_builddir)/libide/libide-1.0.la \
-       $(foreach plugin,$(gnome_builder_PLUGINS),$(top_builddir)/plugins/$(plugin)/lib$(plugin).la) \
        libgnome-builder.la \
        $(NULL)
-
-
 gnome_builder_LDFLAGS = \
        -export-dynamic \
-       $(foreach plugin,$(gnome_builder_PLUGINS),$(call define_plugin,$(plugin))) \
        $(NULL)
 
 
@@ -252,4 +232,5 @@ glib_resources_xml = resources/gnome-builder.gresource.xml
 glib_resources_namespace = gb
 include $(top_srcdir)/build/autotools/Makefile.am.gresources
 
+
 -include $(top_srcdir)/git.mk
diff --git a/src/main.c b/src/main.c
index bbf6155..4c3476b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -26,11 +26,55 @@
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 #include <ide.h>
+#include <libpeas/peas.h>
 #include <locale.h>
 
 #include "gb-application.h"
 #include "gb-icons-resources.h"
-#include "gb-plugins.h"
+
+static void
+load_plugins (void)
+{
+  PeasEngine *engine;
+  const GList *list;
+
+  engine = peas_engine_get_default ();
+
+  if (g_getenv ("GB_IN_TREE_PLUGINS") != NULL)
+    {
+      GDir *dir;
+
+      if ((dir = g_dir_open ("plugins", 0, NULL)))
+        {
+          const gchar *name;
+
+          while ((name = g_dir_read_name (dir)))
+            {
+              gchar *path;
+
+              path = g_build_filename ("plugins", name, NULL);
+              peas_engine_prepend_search_path (engine, path, path);
+              g_free (path);
+            }
+
+          g_dir_close (dir);
+        }
+    }
+  else
+    {
+      peas_engine_prepend_search_path (engine,
+                                       PACKAGE_LIBDIR"/gnome-builder/plugins",
+                                       PACKAGE_DATADIR"/gnome-builder/plugins");
+    }
+
+  list = peas_engine_get_plugin_list (engine);
+
+  for (; list; list = list->next)
+    {
+      if (peas_plugin_info_is_builtin (list->data))
+        peas_engine_load_plugin (engine, list->data);
+    }
+}
 
 int
 main (int   argc,
@@ -58,13 +102,12 @@ main (int   argc,
              gtk_get_micro_version ());
 
   g_resources_register (gb_icons_get_resource ());
-  gb_plugins_load ();
+  load_plugins ();
 
   app = g_object_new (GB_TYPE_APPLICATION,
                       "application-id", "org.gnome.Builder",
                       "flags", G_APPLICATION_HANDLES_OPEN,
                       NULL);
-  g_application_set_default (app);
   ret = g_application_run (app, argc, argv);
   g_clear_object (&app);
 



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