From ed99bef45841c407683cd7d353f0e2d364977261 Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Tue, 4 Oct 2016 22:27:18 -0700 Subject: [PATCH] extensionUtils: Remove ShellJS library You can define a new importer object by importing a subdirectory in GJS. This is undocumented, but it is likely to at least hold until the whole thing moves to ES6 modules, after which we'll be able to do this purely in JS with Reflect.Loader. Since this was the only thing the ShellJS library did, we can remove it altogether. This allows us to discontinue use of the gjs-internals-1.0 embedder API. https://bugzilla.gnome.org/show_bug.cgi?id=772386 --- js/misc/extensionUtils.js | 13 +++--- src/Makefile.am | 32 ++----------- src/gnome-shell-extension-prefs.c | 17 ------- src/main.c | 15 ------ src/shell-js.cpp | 78 ------------------------------- src/shell-js.h | 16 ------- 6 files changed, 10 insertions(+), 161 deletions(-) delete mode 100644 src/shell-js.cpp delete mode 100644 src/shell-js.h diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js index aff91acc7..65d02c29a 100644 --- a/js/misc/extensionUtils.js +++ b/js/misc/extensionUtils.js @@ -6,9 +6,7 @@ const Lang = imports.lang; const Signals = imports.signals; -const GLib = imports.gi.GLib; const Gio = imports.gi.Gio; -const ShellJS = imports.gi.ShellJS; const Config = imports.misc.config; const FileUtils = imports.misc.fileUtils; @@ -151,12 +149,13 @@ function createExtensionObject(uuid, dir, type) { return extension; } -var _extension = null; - function installImporter(extension) { - _extension = extension; - ShellJS.add_extension_importer('imports.misc.extensionUtils._extension', 'imports', extension.path); - _extension = null; + let oldSearchPath = imports.searchPath.slice(); // make a copy + imports.searchPath = [extension.path]; + // importing a "subdir" creates a new importer object that doesn't affect + // the global one + extension.imports = imports['.']; + imports.searchPath = oldSearchPath; } const ExtensionFinder = new Lang.Class({ diff --git a/src/Makefile.am b/src/Makefile.am index e9aacfe0c..506bf912c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -78,7 +78,7 @@ gnome_shell_cflags = \ -DGNOME_SHELL_PKGLIBDIR=\"$(pkglibdir)\" privlibdir = $(pkglibdir) -privlib_LTLIBRARIES = libgnome-shell-js.la libgnome-shell-menu.la libgnome-shell.la +privlib_LTLIBRARIES = libgnome-shell-menu.la libgnome-shell.la noinst_LTLIBRARIES += libgnome-shell-base.la shell_built_sources = \ @@ -200,7 +200,7 @@ gnome_shell_CPPFLAGS = \ # Here, and after, we repeat mutter and bluetooth libraries just for the rpath # The dependency is already pulled in by libtool -gnome_shell_LDADD = libgnome-shell.la libgnome-shell-js.la $(GNOME_SHELL_LIBS) $(MUTTER_LIBS) +gnome_shell_LDADD = libgnome-shell.la $(GNOME_SHELL_LIBS) $(MUTTER_LIBS) gnome_shell_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR) gnome_shell_DEPENDENCIES = libgnome-shell.la @@ -212,7 +212,7 @@ nodist_gnome_shell_extension_prefs_SOURCES = \ $(top_builddir)/js/js-resources.h \ $(NULL) gnome_shell_extension_prefs_CPPFLAGS = $(gnome_shell_cflags) -gnome_shell_extension_prefs_LDADD = libgnome-shell-js.la $(GNOME_SHELL_LIBS) +gnome_shell_extension_prefs_LDADD = $(GNOME_SHELL_LIBS) gnome_shell_extension_prefs_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR) if HAVE_NETWORKMANAGER @@ -226,30 +226,13 @@ nodist_gnome_shell_portal_helper_SOURCES = \ $(top_builddir)/js/js-resources.h \ $(NULL) gnome_shell_portal_helper_CPPFLAGS = $(gnome_shell_cflags) -gnome_shell_portal_helper_LDADD = libgnome-shell-js.la $(GNOME_SHELL_LIBS) +gnome_shell_portal_helper_LDADD = $(GNOME_SHELL_LIBS) gnome_shell_portal_helper_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR) endif ######################################## -libgnome_shell_js_la_SOURCES = \ - shell-js.h \ - shell-js.cpp \ - $(NULL) - -libgnome_shell_js_la_LIBADD = \ - $(GNOME_SHELL_JS_LIBS) \ - $(NULL) - -libgnome_shell_js_la_LDFLAGS = \ - -avoid-version - -libgnome_shell_js_la_CPPFLAGS = \ - $(GNOME_SHELL_JS_CFLAGS) - -######################################## - shell_recorder_sources = \ shell-recorder.c \ shell-recorder.h @@ -366,13 +349,6 @@ Shell_0_1_gir_SCANNERFLAGS = \ INTROSPECTION_GIRS += Shell-0.1.gir CLEANFILES += Shell-0.1.gir -ShellJS-0.1.gir: libgnome-shell-js.la -ShellJS_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir) -ShellJS_0_1_gir_LIBS = libgnome-shell-js.la -ShellJS_0_1_gir_FILES = $(libgnome_shell_js_la_SOURCES) -INTROSPECTION_GIRS += ShellJS-0.1.gir -CLEANFILES += ShellJS-0.1.gir - St-1.0.gir: libst-1.0.la St_1_0_gir_INCLUDES = Clutter-1.0 Gtk-3.0 St_1_0_gir_CFLAGS = $(st_cflags) -DST_COMPILATION diff --git a/src/gnome-shell-extension-prefs.c b/src/gnome-shell-extension-prefs.c index 973f3c120..967e6156f 100644 --- a/src/gnome-shell-extension-prefs.c +++ b/src/gnome-shell-extension-prefs.c @@ -6,8 +6,6 @@ #include #include -#include "shell-js.h" - int main (int argc, char *argv[]) { @@ -51,18 +49,3 @@ main (int argc, char *argv[]) return 0; } - - -/* HACK: - Add a dummy function that calls into libgnome-shell-js.so to ensure it's - linked to /usr/bin/gnome-shell-extension-prefs even when linking with - --as-needed. This function is never actually called. - https://bugzilla.gnome.org/show_bug.cgi?id=670477 -*/ -void _shell_link_to_shell_js (void); - -void -_shell_link_to_shell_js (void) -{ - shell_js_add_extension_importer (NULL, NULL, NULL, NULL); -} diff --git a/src/main.c b/src/main.c index e8ac998cb..25d2778d0 100644 --- a/src/main.c +++ b/src/main.c @@ -25,7 +25,6 @@ #include "shell-global.h" #include "shell-global-private.h" -#include "shell-js.h" #include "shell-perf-log.h" #include "st.h" @@ -480,17 +479,3 @@ main (int argc, char **argv) return ecode; } - -/* HACK: - Add a dummy function that calls into libgnome-shell-js.so to ensure it's - linked to /usr/bin/gnome-shell even when linking with --as-needed. - This function is never actually called. - https://bugzilla.gnome.org/show_bug.cgi?id=670477 -*/ -void _shell_link_to_shell_js (void); - -void -_shell_link_to_shell_js (void) -{ - shell_js_add_extension_importer (NULL, NULL, NULL, NULL); -} diff --git a/src/shell-js.cpp b/src/shell-js.cpp deleted file mode 100644 index 67345cb6a..000000000 --- a/src/shell-js.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ - -#include "config.h" - -#include "shell-js.h" - -#include -#include -#include - -/** - * shell_js_add_extension_importer: - * @target_object_script: JavaScript code evaluating to a target object - * @target_property: Name of property to use for importer - * @directory: Source directory: - * @error: A #GError - * - * This function sets a property named @target_property on the object - * resulting from the evaluation of @target_object_script code, which - * acts as a GJS importer for directory @directory. - * - * Returns: %TRUE on success - */ -gboolean -shell_js_add_extension_importer (const char *target_object_script, - const char *target_property, - const char *directory, - GError **error) -{ - JS::Value target_object; - GList *contexts; - JSContext *context; - char *search_path[2] = { 0, 0 }; - gboolean ret = FALSE; - - /* Take the first GjsContext from all of them -- - * we should only ever have one context, so this - * should be alright. */ - contexts = gjs_context_get_all (); - context = (JSContext*) gjs_context_get_native_context ((GjsContext*)contexts->data); - g_list_free_full (contexts, g_object_unref); - - JS_BeginRequest (context); - - /* This is a bit of a hack; ideally we'd be able to pass our target - * object directly into this function, but introspection doesn't - * support that at the moment. Instead evaluate a string to get it. */ - if (!JS_EvaluateScript(context, - gjs_get_global_object (context), - target_object_script, - strlen (target_object_script), - "", - 0, - &target_object)) - { - gjs_log_exception(context); - g_set_error(error, - G_IO_ERROR, - G_IO_ERROR_FAILED, - "Unable to import %s", target_object_script); - goto out; - } - - if (!target_object.isObject ()) - { - g_error ("shell_js_add_extension_importer: invalid target object"); - goto out; - } - - search_path[0] = (char*)directory; - gjs_define_importer (context, &target_object.toObject (), target_property, - (const char **)search_path, FALSE); - ret = TRUE; - - out: - JS_EndRequest (context); - return ret; -} diff --git a/src/shell-js.h b/src/shell-js.h deleted file mode 100644 index c00d3134b..000000000 --- a/src/shell-js.h +++ /dev/null @@ -1,16 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ -#ifndef __SHELL_JS_H__ -#define __SHELL_JS_H__ - -#include - -G_BEGIN_DECLS - -gboolean shell_js_add_extension_importer (const char *target_object_script, - const char *target_property, - const char *directory, - GError **error); - -G_END_DECLS - -#endif /* __SHELL_JS_H__ */