From: Brendan Kerrigan <kerrig...@ainfosec.com> Currently this hacks up gjs a little bit and relies on a specific SRCREV to sidestep the need for mozjs60 support (use mozjs52 instead).
Signed-off-by: Brendan Kerrigan <kerrig...@ainfosec.com> --- .../gnome3/gjs/0001-fix-override-allow.patch | 75 +++++++++++++++++++ meta-gnome/recipes-gnome/gnome3/gjs_git.bb | 30 ++++++++ 2 files changed, 105 insertions(+) create mode 100644 meta-gnome/recipes-gnome/gnome3/gjs/0001-fix-override-allow.patch create mode 100644 meta-gnome/recipes-gnome/gnome3/gjs_git.bb diff --git a/meta-gnome/recipes-gnome/gnome3/gjs/0001-fix-override-allow.patch b/meta-gnome/recipes-gnome/gnome3/gjs/0001-fix-override-allow.patch new file mode 100644 index 000000000..fc152db1d --- /dev/null +++ b/meta-gnome/recipes-gnome/gnome3/gjs/0001-fix-override-allow.patch @@ -0,0 +1,75 @@ +gjs: Fix broken override GInterface properties + + [gjs Ticket #186] -- https://gitlab.gnome.org/GNOME/gjs/issues/186 + + Overriding introspected GObjectInterface properties + + Signed-off-by: Philip Chimento <philip.chime...@gmail.com> + + The patch was imported from the gjs git server + (git://gitlab.gnome.org/GNOME/gjs) with a commit id of + 322ffab6b0b24ab0ce36079642021d969b081730. + + Upstream-status: Backport + + This recipe can move to tracking a more appropriate revision + once a recipe for building mozjs60 is created, and then this + patch can be dropped. + + Signed-off-by: Brendan Kerrigan <kerrig...@ainfosec.com> +diff --git a/gi/object.cpp b/gi/object.cpp +index 2b2265da..70032736 100644 +--- a/gi/object.cpp ++++ b/gi/object.cpp +@@ -717,7 +717,11 @@ bool ObjectPrototype::lazy_define_gobject_property(JSContext* cx, + JS::RootedValue private_id(cx, JS::StringValue(JSID_TO_STRING(id))); + if (!gjs_define_property_dynamic( + cx, obj, name, "gobject_prop", &ObjectBase::prop_getter, +- &ObjectBase::prop_setter, private_id, GJS_MODULE_PROP_FLAGS)) ++ &ObjectBase::prop_setter, private_id, ++ // Make property configurable so that interface properties can be ++ // overridden by GObject.ParamSpec.override in the class that ++ // implements them ++ GJS_MODULE_PROP_FLAGS & ~JSPROP_PERMANENT)) + return false; + + *resolved = true; +diff --git a/installed-tests/js/testGObjectInterface.js b/installed-tests/js/testGObjectInterface.js +index 9eab9746..daefb683 100644 +--- a/installed-tests/js/testGObjectInterface.js ++++ b/installed-tests/js/testGObjectInterface.js +@@ -84,6 +84,22 @@ const ImplementationOfTwoInterfaces = GObject.registerClass({ + } + }); + ++const ImplementationOfIntrospectedInterface = GObject.registerClass({ ++ Implements: [Gio.Action], ++ Properties: { ++ 'enabled': GObject.ParamSpec.override('enabled', Gio.Action), ++ 'name': GObject.ParamSpec.override('name', Gio.Action), ++ 'state': GObject.ParamSpec.override('state', Gio.Action), ++ 'state-type': GObject.ParamSpec.override('state-type', Gio.Action), ++ 'parameter-type': GObject.ParamSpec.override('parameter-type', ++ Gio.Action) ++ } ++}, class ImplementationOfIntrospectedInterface extends GObject.Object { ++ get name() { ++ return 'inaction'; ++ } ++}); ++ + describe('GObject interface', function () { + it('cannot be instantiated', function () { + expect(() => new AGObjectInterface()).toThrow(); +@@ -247,6 +263,11 @@ describe('GObject interface', function () { + 253, 'testGObjectMustOverrideInterfaceProperties'); + }); + ++ it('can have introspected properties overriden', function() { ++ let obj = new ImplementationOfIntrospectedInterface(); ++ expect(obj.name).toEqual('inaction'); ++ }); ++ + it('can be implemented by a class as well as its parent class', function () { + const SubObject = GObject.registerClass( + class SubObject extends GObjectImplementingGObjectInterface {}); diff --git a/meta-gnome/recipes-gnome/gnome3/gjs_git.bb b/meta-gnome/recipes-gnome/gnome3/gjs_git.bb new file mode 100644 index 000000000..db62f507f --- /dev/null +++ b/meta-gnome/recipes-gnome/gnome3/gjs_git.bb @@ -0,0 +1,30 @@ +DESCRIPTION = "GNOME JavaScript engine" +LICENSE = "MIT|LGPLv2+" +DEPENDS = " \ + glib-2.0 \ + gsettings-desktop-schemas \ + mozjs \ + cairo \ + " + +LIC_FILES_CHKSUM = "file://COPYING;md5=beb29cf17fabe736f0639b09ee6e76fa" + +SRC_URI = "git://gitlab.gnome.org/GNOME/gjs.git;protocol=http;branch=master \ + file://0001-fix-override-allow.patch \ + " + +# Last pre-mozjs60 merge commit. Once mozjs is upreved from 52->60, +# we can select a more sane version. +SRCREV="f2a8ca3dcfee06e03ae344932537951bc4d7739c" +S = "${WORKDIR}/git" + +inherit autotools pkgconfig gobject-introspection +EXTRA_OECONF += " --without-dbus-tests " + +FILES_${PN} += "${datadir}" + +do_configure_prepend() { + export GI_DATADIR="${RECIPE_SYSROOT_NATIVE}${datadir}/gobject-introspection-1.0" + sed -i 's#mozjs-17#mozjs-52#g' ${S}/configure.ac +} + -- 2.17.1 -- _______________________________________________ Openembedded-devel mailing list Openembedded-devel@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-devel