--- a/gjs/gplugin-gjs-core.cc Mon Feb 17 00:51:58 2020 -0600
+++ b/gjs/gplugin-gjs-core.cc Wed Aug 11 03:59:38 2021 -0500
@@ -22,46 +22,57 @@
#include "gplugin-gjs-plugin.h"
extern "C" G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error) {
- const gchar * const authors[] = {
+gplugin_query(G_GNUC_UNUSED GError **error) + const gchar *const authors[] = { "Gary Kramlich <grim@reaperworld.com>",
return gplugin_plugin_info_new(
GPLUGIN_NATIVE_PLUGIN_ABI_VERSION,
- "name", "Gjs JavaScript Plugin Loader",
- "version", GPLUGIN_VERSION,
- "summary", "A plugin that can load Gjs JavaScript plugins",
- "description", "This plugin allows the loading of plugins written in "
- "website", GPLUGIN_WEBSITE,
+ "Gjs JavaScript Plugin Loader", + "A plugin that can load Gjs JavaScript plugins", + "This plugin allows the loading of plugins written in " extern "C" G_MODULE_EXPORT gboolean
-gplugin_load(GPluginNativePlugin *plugin,
- G_GNUC_UNUSED GError **error)
+gplugin_load(GPluginNativePlugin *plugin, G_GNUC_UNUSED GError **error) + GPluginManager *manager = gplugin_manager_get_default(); gplugin_gjs_loader_register(plugin);
gplugin_gjs_plugin_register(plugin);
- gplugin_manager_register_loader(gplugin_gjs_loader_get_type());
+ return gplugin_manager_register_loader( + gplugin_gjs_loader_get_type(), extern "C" G_MODULE_EXPORT gboolean
-gplugin_unload(G_GNUC_UNUSED GPluginNativePlugin *plugin,
- G_GNUC_UNUSED GError **error)
+ G_GNUC_UNUSED GPluginNativePlugin *plugin, + G_GNUC_UNUSED GError **error)
--- a/gjs/gplugin-gjs-loader.cc Mon Feb 17 00:51:58 2020 -0600
+++ b/gjs/gplugin-gjs-loader.cc Wed Aug 11 03:59:38 2021 -0500
@@ -20,123 +20,35 @@
struct _GPluginGjsLoader {
- GjsContext *global_ctx;
/******************************************************************************
- *****************************************************************************/
-_gplugin_gjs_loader_eval_file(GjsContext *ctx,
- if(!gjs_context_eval_file(ctx, filename, &exit_code, error)) {
-/******************************************************************************
* GPluginLoaderInterface API
*****************************************************************************/
-gplugin_gjs_loader_class_supported_extensions(G_GNUC_UNUSED GPluginLoaderClass *klass) {
- return g_slist_append(NULL, (gpointer)"js");
+gplugin_gjs_loader_supported_extensions(G_GNUC_UNUSED GPluginLoader *loader) + return g_slist_append(NULL, (gpointer) "js"); -gplugin_gjs_loader_query(GPluginLoader *loader,
+gplugin_gjs_loader_query(
- GPluginPluginInfo *info = NULL;
- GjsContext *ctx = NULL;
- JSContext *jsctx = NULL;
- JSObject *jsobj = NULL;
- ctx = gjs_context_new();
- g_message("ctx: %p", ctx);
- if(!_gplugin_gjs_loader_eval_file(ctx, filename, error)) {
- g_object_unref(G_OBJECT(ctx));
- jsctx = (JSContext*)gjs_context_get_native_context(ctx);
- /* now call the query function */
- JS::RootedValue rval(cx);
- JS::AutoValueArray<0> argv(cx);
- if(!JS_CallFunctionName(cx, NULL, "gplugin_query", argv, &rval)) {
- *error = g_error_new(GPLUGIN_DOMAIN, 0,
- "Failed to call the query function");
- g_object_unref(G_OBJECT(context));
- /* now grab the plugin info */
- if(!JS_ValueToObject(cx, rval, &jsobj)) {
- *error = g_error_new(GPLUGIN_DOMAIN, 0,
- "Query function did not return a GObject");
- g_object_unref(G_OBJECT(context));
- gobj = gjs_g_object_from_object(cx, jsobj);
- if(!GPLUGIN_IS_PLUGIN_INFO(gobj)) {
- *error = g_error_new(GPLUGIN_DOMAIN, 0,
- "Query function did not return a "
- "GPluginPluginInfo object");
- g_object_unref(G_OBJECT(context));
- info = GPLUGIN_PLUGIN_INFO(gobj);
- return (GPluginPlugin *)g_object_new(GPLUGIN_TYPE_GJS_PLUGIN,
+ g_set_error(error, GPLUGIN_DOMAIN, 0, "not implemented"); -gplugin_gjs_loader_load_unload(G_GNUC_UNUSED GPluginLoader *loader,
- G_GNUC_UNUSED GError **error)
+gplugin_gjs_loader_load( g_set_error_literal(error, GPLUGIN_DOMAIN, 0, "unimplemented");
@@ -144,71 +56,51 @@
-gplugin_gjs_loader_load(GPluginLoader *loader, GPluginPlugin *plugin,
+gplugin_gjs_loader_unload( - return gplugin_gjs_loader_load_unload(loader, plugin, TRUE, error);
+ g_set_error_literal(error, GPLUGIN_DOMAIN, 0, "unimplemented");
-gplugin_gjs_loader_unload(GPluginLoader *loader, GPluginPlugin *plugin,
- return gplugin_gjs_loader_load_unload(loader, plugin, FALSE, error);
/******************************************************************************
*****************************************************************************/
-G_DEFINE_DYNAMIC_TYPE(GPluginGjsLoader, gplugin_gjs_loader, GPLUGIN_TYPE_LOADER);
-gplugin_gjs_loader_init(GPluginGjsLoader *loader) {
- const gchar *appname = g_get_prgname();
- loader->global_ctx = (GjsContext *)g_object_new(GJS_TYPE_CONTEXT,
- "program-name", appname,
- gjs_context_make_current(loader->global_ctx);
+gplugin_gjs_loader_init(GPluginGjsLoader *loader) -gplugin_gjs_loader_finalize(GObject *obj) {
- GPluginGjsLoader *loader = GPLUGIN_GJS_LOADER(obj);
- g_clear_object(&loader->global_ctx);
- G_OBJECT_CLASS(gplugin_gjs_loader_parent_class)->finalize(obj);
-gplugin_gjs_loader_class_init(G_GNUC_UNUSED GPluginGjsLoaderClass *klass) {
- GObjectClass *obj_class = G_OBJECT_CLASS(klass);
+gplugin_gjs_loader_class_init(G_GNUC_UNUSED GPluginGjsLoaderClass *klass) GPluginLoaderClass *loader_class = GPLUGIN_LOADER_CLASS(klass);
- obj_class->finalize = gplugin_gjs_loader_finalize;
loader_class->supported_extensions =
- gplugin_gjs_loader_class_supported_extensions;
+ gplugin_gjs_loader_supported_extensions; loader_class->query = gplugin_gjs_loader_query;
loader_class->load = gplugin_gjs_loader_load;
loader_class->unload = gplugin_gjs_loader_unload;
-gplugin_gjs_loader_class_finalize(G_GNUC_UNUSED GPluginGjsLoaderClass *klass) {
+gplugin_gjs_loader_class_finalize(G_GNUC_UNUSED GPluginGjsLoaderClass *klass) /******************************************************************************
*****************************************************************************/
-gplugin_gjs_loader_register(GPluginNativePlugin *plugin) {
+gplugin_gjs_loader_register(GPluginNativePlugin *plugin) gplugin_gjs_loader_register_type(G_TYPE_MODULE(plugin));
--- a/gjs/gplugin-gjs-loader.h Mon Feb 17 00:51:58 2020 -0600
+++ b/gjs/gplugin-gjs-loader.h Wed Aug 11 03:59:38 2021 -0500
@@ -22,7 +22,12 @@
#include <gplugin-native.h>
#define GPLUGIN_TYPE_GJS_LOADER (gplugin_gjs_loader_get_type())
-G_DECLARE_FINAL_TYPE(GPluginGjsLoader, gplugin_gjs_loader, GPLUGIN_GJS, LOADER, GPluginLoader)
@@ -31,4 +36,3 @@
#endif /* GPLUGIN_GJS_LOADER_H */
--- a/gjs/gplugin-gjs-plugin.cc Mon Feb 17 00:51:58 2020 -0600
+++ b/gjs/gplugin-gjs-plugin.cc Wed Aug 11 03:59:38 2021 -0500
@@ -17,143 +17,48 @@
#include "gplugin-gjs-plugin.h"
-#define GPLUGIN_GJS_PLUGIN_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE((obj), GPLUGIN_TYPE_GJS_PLUGIN, GPluginGjsPluginPrivate))
-/******************************************************************************
- *****************************************************************************/
-} GPluginGjsPluginPrivate;
-/******************************************************************************
- *****************************************************************************/
+struct _GPluginGjsPlugin { -static GParamSpec *properties[N_PROPERTIES] = {NULL, };
-static void gplugin_gjs_plugin_iface_init(GPluginPluginInterface *iface);
-G_DEFINE_DYNAMIC_TYPE_EXTENDED(
- G_ADD_PRIVATE_DYNAMIC(GPluginGjsPlugin)
- G_IMPLEMENT_INTERFACE(GPLUGIN_TYPE_PLUGIN, gplugin_gjs_plugin_iface_init)
/******************************************************************************
* GPluginPlugin Implementation
*****************************************************************************/
-gplugin_gjs_plugin_iface_init(G_GNUC_UNUSED GPluginPluginInterface *iface) {
+gplugin_gjs_plugin_iface_init(G_GNUC_UNUSED GPluginPluginInterface *iface) /******************************************************************************
*****************************************************************************/
-gplugin_gjs_plugin_set_context(GPluginGjsPlugin *plugin, GjsContext *context) {
- GPluginGjsPluginPrivate *priv = GPLUGIN_GJS_PLUGIN_GET_PRIVATE(plugin);
- g_object_unref(G_OBJECT(priv->context));
- if(GJS_IS_CONTEXT(context)) {
- priv->context = (GjsContext*)g_object_ref(G_OBJECT(context));
+G_DEFINE_DYNAMIC_TYPE_EXTENDED( + G_IMPLEMENT_INTERFACE(GPLUGIN_TYPE_PLUGIN, gplugin_gjs_plugin_iface_init)); -gplugin_gjs_plugin_get_property(GObject *obj, guint param_id, GValue *value,
+gplugin_gjs_plugin_init(G_GNUC_UNUSED GPluginGjsPlugin *plugin) - GPluginGjsPlugin *plugin = GPLUGIN_GJS_PLUGIN(obj);
- g_value_set_object(value, gplugin_gjs_plugin_get_context(plugin));
- G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-gplugin_gjs_plugin_set_property(GObject *obj, guint param_id,
- const GValue *value, GParamSpec *pspec)
+gplugin_gjs_plugin_class_init(GPluginGjsPluginClass *klass) - GPluginGjsPlugin *plugin = GPLUGIN_GJS_PLUGIN(obj);
- gplugin_gjs_plugin_set_context(plugin, (GjsContext*)g_value_get_object(value));
- G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-gplugin_gjs_plugin_init(G_GNUC_UNUSED GPluginGjsPlugin *plugin) {
-gplugin_gjs_plugin_finalize(GObject *obj) {
- GPluginGjsPluginPrivate *priv = GPLUGIN_GJS_PLUGIN_GET_PRIVATE(obj);
- g_clear_object(&priv->context);
- G_OBJECT_CLASS(gplugin_gjs_plugin_parent_class)->finalize(obj);
-gplugin_gjs_plugin_class_init(GPluginGjsPluginClass *klass) {
- GObjectClass *obj_class = G_OBJECT_CLASS(klass);
- obj_class->get_property = gplugin_gjs_plugin_get_property;
- obj_class->set_property = gplugin_gjs_plugin_set_property;
- obj_class->finalize = gplugin_gjs_plugin_finalize;
- properties[PROP_CONTEXT] = g_param_spec_object(
- "The Gjs Context for this plugin",
- (GParamFlags)(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)
- g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
-gplugin_gjs_plugin_class_finalize(G_GNUC_UNUSED GPluginGjsPluginClass *klass) {
+gplugin_gjs_plugin_class_finalize(G_GNUC_UNUSED GPluginGjsPluginClass *klass) /******************************************************************************
*****************************************************************************/
-gplugin_gjs_plugin_register(GPluginNativePlugin *plugin) {
+gplugin_gjs_plugin_register(GPluginNativePlugin *plugin) gplugin_gjs_plugin_register_type(G_TYPE_MODULE(plugin));
-gplugin_gjs_plugin_get_context(const GPluginGjsPlugin *plugin) {
- GPluginGjsPluginPrivate *priv = NULL;
- g_return_val_if_fail(GPLUGIN_IS_GJS_PLUGIN(plugin), NULL);
- priv = GPLUGIN_GJS_PLUGIN_GET_PRIVATE(plugin);
--- a/gjs/gplugin-gjs-plugin.h Mon Feb 17 00:51:58 2020 -0600
+++ b/gjs/gplugin-gjs-plugin.h Wed Aug 11 03:59:38 2021 -0500
@@ -18,37 +18,21 @@
#ifndef GPLUGIN_GJS_PLUGIN_H
#define GPLUGIN_GJS_PLUGIN_H
-#define GPLUGIN_TYPE_GJS_PLUGIN (gplugin_gjs_plugin_get_type())
-#define GPLUGIN_GJS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GPLUGIN_TYPE_GJS_PLUGIN, GPluginGjsPlugin))
-#define GPLUGIN_GJS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((obj), GPLUGIN_TYPE_GJS_PLUGIN, GPluginGjsPluginClass))
-#define GPLUGIN_IS_GJS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GPLUGIN_TYPE_GJS_PLUGIN))
-#define GPLUGIN_IS_GJS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((obj), GPLUGIN_TYPE_GJS_PLUGIN))
-#define GPLUGIN_GJS_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GPLUGIN_TYPE_GJS_PLUGIN, GPluginGjsPluginClass))
-typedef struct _GPluginGjsPlugin GPluginGjsPlugin;
-typedef struct _GPluginGjsPluginClass GPluginGjsPluginClass;
#include <gplugin-native.h>
-struct _GPluginGjsPlugin {
-struct _GPluginGjsPluginClass {
+#define GPLUGIN_TYPE_GJS_PLUGIN (gplugin_gjs_plugin_get_type()) void gplugin_gjs_plugin_register(GPluginNativePlugin *plugin);
-GType gplugin_gjs_plugin_get_type(void);
-GjsContext *gplugin_gjs_plugin_get_context(const GPluginGjsPlugin *plugin);
#endif /* GPLUGIN_GJS_PLUGIN_H */
--- a/gjs/meson.build Mon Feb 17 00:51:58 2020 -0600
+++ b/gjs/meson.build Wed Aug 11 03:59:38 2021 -0500
@@ -1,5 +1,7 @@
+summary('gjs', get_option('gjs'), section : 'Loader Support', bool_yn : true) - if not get_option('gobject-introspection')
+ if not get_option('introspection') error('gnome-javascript plugin requires GObject Introspection.')
@@ -17,13 +19,7 @@
GJS = dependency('gjs-1.0', version: '>=1.32.0')
# tell meson we need cpp since we have gjs
-# '-DPREFIX="@0@"'.format(get_option('prefix')),
-# '-DLIBDIR="@0@"'.format(get_option('libdir')),
- '-DGPLUGIN_WEBSITE="http://bitbucket.org/gplugin/main"',
+ add_languages('cpp', native : false) shared_library('gplugin-gjs',
@@ -31,8 +27,7 @@
dependencies : [GIO, GJS, gplugin_dep],
- install_dir : join_paths(get_option('libdir'), 'gplugin'),
+ install_dir : get_option('libdir') / 'gplugin', --- a/gjs/tests/meson.build Mon Feb 17 00:51:58 2020 -0600
+++ b/gjs/tests/meson.build Wed Aug 11 03:59:38 2021 -0500
@@ -3,7 +3,7 @@
e = executable('test-gjs-loader', 'test-gjs-loader.c',
include_directories : include_directories('.'),
- '-DGJS_LOADER_DIR="@0@/gjs"'.format(meson.build_root()),
+ '-DGJS_LOADER_DIR="@0@/gjs"'.format(meson.project_build_root()), '-DGJS_PLUGIN_DIR="@0@/plugins"'.format(meson.current_source_dir()),
link_with : gplugin_loader_tests,
--- a/gjs/tests/test-gjs-loader.c Mon Feb 17 00:51:58 2020 -0600
+++ b/gjs/tests/test-gjs-loader.c Wed Aug 11 03:59:38 2021 -0500
@@ -21,11 +21,11 @@
#include <gplugin/gplugin-loader-tests.h>
-main(gint argc, gchar **argv) {
+main(gint argc, gchar **argv) g_test_init(&argc, &argv, NULL);
gplugin_loader_tests_main(GJS_LOADER_DIR, GJS_PLUGIN_DIR, "gjs");
--- a/meson.build Mon Feb 17 00:51:58 2020 -0600
+++ b/meson.build Wed Aug 11 03:59:38 2021 -0500
@@ -1,7 +1,7 @@
###############################################################################
###############################################################################
+project('gplugin', 'c', 'cpp', license : 'LGPL-2.0-or-later',
meson_version : '>=0.56.0',
@@ -67,6 +67,13 @@
+ '-DPREFIX="@0@"'.format(get_option('prefix')), + '-DLIBDIR="@0@"'.format(get_option('libdir')), + '-DGPLUGIN_WEBSITE="https://keep.imfreedom.org/gplugin/gplugin"', if compiler.has_argument('-Wformat')
add_project_arguments('-Wformat', language : 'c')
if compiler.has_multi_arguments(['-Wformat', '-Werror=format-security'])