* [Buildroot] [PATCH v4 0/3] Add libgtk3 and bump webkit to version 2.4.3
@ 2014-08-01 1:33 Hadrien Boutteville
2014-08-01 1:33 ` [Buildroot] [PATCH v4 1/3] libgtk3: new package Hadrien Boutteville
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Hadrien Boutteville @ 2014-08-01 1:33 UTC (permalink / raw)
To: buildroot
Hello all,
This series mainly does two things: add libgtk3 and bump webkit.
- 1: add libgtk3
- 2: bump webkit
- 3: bump Midori to test WebKit 2.4.3
For now, only X11 support is done and tested for both libgtk3 and
webkit. Wayland support will be done later.
Tests:
* All is compiled-tested (with GTK+2 and GTK+3 for WebKit and Midori).
* Running tests were done for libgtk3 (with gtk3-demo) and Midori GTK+2
with WebKit GTK+2 and webkit1 (on Qemu and BeagleBone Black).
For testing you will need GCC 4.8 because WebKit needs at least version
4.8 (see commit message) and X.org needs a version lesser than 4.9 (see
this issue:
http://lists.busybox.net/pipermail/buildroot/2014-June/098679.html).
There is still a weird problem with WebKit: parallel make with Make
3.81 results in a make hang on:
CXXLD libWebCoreSVG.la
This is reproducible.
Does anyone has already encountered this?
You can find a defconfig for Qemu here:
http://bpaste.net/show/fR3jDhQPmtUHPYpGoiUn/
Changes v1 -> v2:
- libgtk3: remove atk-bridge support, so we no longer need
at-spi2-core and at-spi2-atk.
- libgtk3: change the way we check for introspection to fix autoreconf
error.
- libgtk3: remove unnecessary extra definitions
Changes v2 -> v3:
- midori: fix the need of librsvg for the host
Changes v3 -> v4:
- libgtk3: fix typo and formatting and improve .mk
Best regards,
Hadrien
---
Hadrien Boutteville (3):
libgtk3: new package
webkit: bump to version 2.4.3
midori: bump to version 0.5.8
package/Config.in | 1 +
package/libgtk3/Config.in | 46 +
package/libgtk3/libgtk3-0001-no-gtk-doc.patch | 25 +
.../libgtk3-0002-fix-introspection-check.patch | 28 +
.../libgtk3/libgtk3-0003-disable-atk-bridge.patch | 45 +
package/libgtk3/libgtk3.mk | 136 ++
package/midori/Config.in | 15 +-
package/midori/blocked.png | Bin 0 -> 522 bytes
package/midori/disabled.png | Bin 0 -> 510 bytes
package/midori/enabled.png | Bin 0 -> 639 bytes
package/midori/logo-shade.png | Bin 0 -> 23862 bytes
.../midori-0001-remove-libnotify-dependency.patch | 27 +
.../midori-0002-do-not-use-rsvg-convert.patch | 39 +
package/midori/midori.mk | 66 +-
package/webkit/Config.in | 16 +-
...ebkit-0001-build-fix-for-32-bit-autotools.patch | 34 -
.../webkit-0002-build-fix-for-gtklauncher.patch | 51 -
.../webkit/webkit-0003-detect-harfbuzz-icu.patch | 28 -
package/webkit/webkit-0004-disable-docrebase.patch | 27 -
package/webkit/webkit-0005-disable-tests.patch | 80 --
package/webkit/webkit-0006-execinfo_h.patch | 20 -
package/webkit/webkit-0007-mips-dfg.patch | 1490 --------------------
package/webkit/webkit-0008-support-bison-3.0.patch | 22 -
package/webkit/webkit.mk | 67 +-
24 files changed, 433 insertions(+), 1830 deletions(-)
create mode 100644 package/libgtk3/Config.in
create mode 100644 package/libgtk3/libgtk3-0001-no-gtk-doc.patch
create mode 100644 package/libgtk3/libgtk3-0002-fix-introspection-check.patch
create mode 100644 package/libgtk3/libgtk3-0003-disable-atk-bridge.patch
create mode 100644 package/libgtk3/libgtk3.mk
create mode 100644 package/midori/blocked.png
create mode 100644 package/midori/disabled.png
create mode 100644 package/midori/enabled.png
create mode 100644 package/midori/logo-shade.png
create mode 100644 package/midori/midori-0001-remove-libnotify-dependency.patch
create mode 100644 package/midori/midori-0002-do-not-use-rsvg-convert.patch
delete mode 100644 package/webkit/webkit-0001-build-fix-for-32-bit-autotools.patch
delete mode 100644 package/webkit/webkit-0002-build-fix-for-gtklauncher.patch
delete mode 100644 package/webkit/webkit-0003-detect-harfbuzz-icu.patch
delete mode 100644 package/webkit/webkit-0004-disable-docrebase.patch
delete mode 100644 package/webkit/webkit-0005-disable-tests.patch
delete mode 100644 package/webkit/webkit-0006-execinfo_h.patch
delete mode 100644 package/webkit/webkit-0007-mips-dfg.patch
delete mode 100644 package/webkit/webkit-0008-support-bison-3.0.patch
--
2.0.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH v4 1/3] libgtk3: new package
2014-08-01 1:33 [Buildroot] [PATCH v4 0/3] Add libgtk3 and bump webkit to version 2.4.3 Hadrien Boutteville
@ 2014-08-01 1:33 ` Hadrien Boutteville
2014-08-03 9:35 ` Thomas Petazzoni
2014-08-01 1:33 ` [Buildroot] [PATCH v4 2/3] webkit: bump to version 2.4.3 Hadrien Boutteville
2014-08-01 1:33 ` [Buildroot] [PATCH v4 3/3] midori: bump to version 0.5.8 Hadrien Boutteville
2 siblings, 1 reply; 7+ messages in thread
From: Hadrien Boutteville @ 2014-08-01 1:33 UTC (permalink / raw)
To: buildroot
Signed-off-by: Hadrien Boutteville <hadrien.boutteville@gmail.com>
Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
Changes v1 -> v2:
- add a patch to remove atk-bridge support, so we no longer need
at-spi2-core and at-spi2-atk.
- change the way we check for introspection to fix autoreconf error
(Eric)
- remove unnecessary extra definitions
Changes v3 -> v4:
- fix typo and formatting (Thomas)
- add missing description + SoB in no-gtk-doc patch (Thomas)
---
package/Config.in | 1 +
package/libgtk3/Config.in | 46 +++++++
package/libgtk3/libgtk3-0001-no-gtk-doc.patch | 25 ++++
.../libgtk3-0002-fix-introspection-check.patch | 28 +++++
.../libgtk3/libgtk3-0003-disable-atk-bridge.patch | 45 +++++++
package/libgtk3/libgtk3.mk | 136 +++++++++++++++++++++
6 files changed, 281 insertions(+)
create mode 100644 package/libgtk3/Config.in
create mode 100644 package/libgtk3/libgtk3-0001-no-gtk-doc.patch
create mode 100644 package/libgtk3/libgtk3-0002-fix-introspection-check.patch
create mode 100644 package/libgtk3/libgtk3-0003-disable-atk-bridge.patch
create mode 100644 package/libgtk3/libgtk3.mk
diff --git a/package/Config.in b/package/Config.in
index 8e1c391..853851f 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -610,6 +610,7 @@ menu "Graphics"
source "package/libgeotiff/Config.in"
source "package/libglade/Config.in"
source "package/libgtk2/Config.in"
+ source "package/libgtk3/Config.in"
source "package/libpng/Config.in"
source "package/libqrencode/Config.in"
source "package/libraw/Config.in"
diff --git a/package/libgtk3/Config.in b/package/libgtk3/Config.in
new file mode 100644
index 0000000..47b1ac1
--- /dev/null
+++ b/package/libgtk3/Config.in
@@ -0,0 +1,46 @@
+config BR2_PACKAGE_LIBGTK3
+ bool "libgtk3"
+ select BR2_PACKAGE_ATK
+ select BR2_PACKAGE_CAIRO
+ select BR2_PACKAGE_CAIRO_PS
+ select BR2_PACKAGE_CAIRO_PDF
+ select BR2_PACKAGE_CAIRO_SVG
+ select BR2_PACKAGE_LIBGLIB2
+ select BR2_PACKAGE_PANGO
+ select BR2_PACKAGE_GDK_PIXBUF
+ select BR2_PACKAGE_FONTCONFIG
+ select BR2_PACKAGE_XLIB_LIBX11
+ select BR2_PACKAGE_XLIB_LIBXEXT
+ select BR2_PACKAGE_XLIB_LIBXRENDER
+ select BR2_PACKAGE_XLIB_LIBXI # required for building X11 backend
+ depends on BR2_PACKAGE_XORG7
+ depends on BR2_USE_WCHAR # glib2
+ depends on BR2_TOOLCHAIN_HAS_THREADS # glib2
+ depends on BR2_USE_MMU # glib2
+ depends on BR2_INSTALL_LIBSTDCPP # pango
+ help
+ The GTK+ version 3 graphical user interface library
+
+ http://www.gtk.org/
+
+if BR2_PACKAGE_LIBGTK3
+
+config BR2_PACKAGE_LIBGTK3_DEMO
+ bool "Install libgtk3 demo program"
+ help
+ The GTK+ source base contains demo programs. This
+ option allows to install this program to the target.
+
+config BR2_PACKAGE_LIBGTK3_TESTS
+ bool "Install libgtk3 tests"
+ help
+ The GTK+ source base contains tests. This option
+ allows to install them to the target.
+
+endif
+
+comment "libgtk3 needs a toolchain w/ wchar, threads, C++"
+ depends on BR2_USE_MMU
+ depends on BR2_PACKAGE_XORG7
+ depends on !BR2_USE_WCHAR || !BR2_INSTALL_LIBSTDCPP || \
+ !BR2_TOOLCHAIN_HAS_THREADS
diff --git a/package/libgtk3/libgtk3-0001-no-gtk-doc.patch b/package/libgtk3/libgtk3-0001-no-gtk-doc.patch
new file mode 100644
index 0000000..926a263
--- /dev/null
+++ b/package/libgtk3/libgtk3-0001-no-gtk-doc.patch
@@ -0,0 +1,25 @@
+Same patch as for systemd in commit
+7144f2f04b705538a893e538a6b851f536f433b6:
+
+Fix deactivation of gtk-doc
+
+The tarball contains the Makefile for building documentation with gtk-doc,
+Unfortunately the AM_CONDITIONAL variable is not the correct one, which
+results in an error when running autoreconf.
+
+This patch fixes this issue.
+
+Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
+Signed-off-by: Hadrien Boutteville <hadrien.boutteville@gmail.com>
+
+--- a/gtk-doc.make
++++ b/gtk-doc.make
+@@ -267,7 +267,7 @@
+ #
+ # Require gtk-doc when making dist
+ #
+-if HAVE_GTK_DOC
++if ENABLE_GTK_DOC
+ dist-check-gtkdoc: docs
+ else
+ dist-check-gtkdoc:
diff --git a/package/libgtk3/libgtk3-0002-fix-introspection-check.patch b/package/libgtk3/libgtk3-0002-fix-introspection-check.patch
new file mode 100644
index 0000000..5b56b3a
--- /dev/null
+++ b/package/libgtk3/libgtk3-0002-fix-introspection-check.patch
@@ -0,0 +1,28 @@
+Fix HAVE_INTROSPECTION does not appear in AM_CONDITIONAL
+
+During autoreconf GOBJECT_INTROSPECTION_CHECK could not be resolve because we
+don't have introspection which provides its custom m4 macro. Reconfigure fails
+with:
+
+gdk/Makefile.am:196: error: HAVE_INTROSPECTION does not appear in AM_CONDITIONAL
+gtk/Makefile.am:1347: error: HAVE_INTROSPECTION does not appear in AM_CONDITIONAL
+
+We avoid to add a copy of introspection.m4 in the m4 directory of libgtk3 by
+adding a check, as performed in Systemd.
+
+Signed-off-by: Hadrien Boutteville <hadrien.boutteville@gmail.com>
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -1621,7 +1621,10 @@
+ # GObject introspection
+ ##################################################
+
+-GOBJECT_INTROSPECTION_CHECK(introspection_required_version)
++m4_ifdef([GOBJECT_INTROSPECTION_CHECK],
++ [GOBJECT_INTROSPECTION_CHECK(introspection_required_version)],
++ [AM_CONDITIONAL([HAVE_INTROSPECTION], [false])
++ enable_introspection=no])
+
+ ##################################################
+ # colord module
diff --git a/package/libgtk3/libgtk3-0003-disable-atk-bridge.patch b/package/libgtk3/libgtk3-0003-disable-atk-bridge.patch
new file mode 100644
index 0000000..30ff92d
--- /dev/null
+++ b/package/libgtk3/libgtk3-0003-disable-atk-bridge.patch
@@ -0,0 +1,45 @@
+Remove atk-bridge support.
+
+atk-bridge doesn't seem useful for now in Buildroot and requires to
+add two new packages just for it: at-spi2-core and at-spi2-atk.
+
+Signed-off-by: Hadrien Boutteville <hadrien.boutteville@gmail.com>
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -1349,11 +1349,7 @@
+ # Check for Accessibility Toolkit flags
+ ########################################
+
+-if test x$enable_x11_backend = xyes; then
+- ATK_PACKAGES="atk atk-bridge-2.0"
+-else
+- ATK_PACKAGES="atk"
+-fi
++ATK_PACKAGES="atk"
+
+ PKG_CHECK_MODULES(ATK, $ATK_PACKAGES)
+
+--- a/gtk/a11y/gtkaccessibility.c
++++ b/gtk/a11y/gtkaccessibility.c
+@@ -37,10 +37,6 @@
+ #include <gtk/gtkcombobox.h>
+ #include <gtk/gtkaccessible.h>
+
+-#ifdef GDK_WINDOWING_X11
+-#include <atk-bridge.h>
+-#endif
+-
+ static gboolean gail_focus_watcher (GSignalInvocationHint *ihint,
+ guint n_param_values,
+ const GValue *param_values,
+@@ -987,9 +983,5 @@
+ _gtk_accessibility_override_atk_util ();
+ do_window_event_initialization ();
+
+-#ifdef GDK_WINDOWING_X11
+- atk_bridge_adaptor_init (NULL, NULL);
+-#endif
+-
+ atk_misc_instance = g_object_new (GTK_TYPE_MISC_IMPL, NULL);
+ }
diff --git a/package/libgtk3/libgtk3.mk b/package/libgtk3/libgtk3.mk
new file mode 100644
index 0000000..62aacd5
--- /dev/null
+++ b/package/libgtk3/libgtk3.mk
@@ -0,0 +1,136 @@
+################################################################################
+#
+# libgtk3
+#
+################################################################################
+
+LIBGTK3_VERSION_MAJOR = 3.12
+LIBGTK3_VERSION = $(LIBGTK3_VERSION_MAJOR).2
+LIBGTK3_SOURCE = gtk+-$(LIBGTK3_VERSION).tar.xz
+LIBGTK3_SITE = http://ftp.gnome.org/pub/gnome/sources/gtk+/$(LIBGTK3_VERSION_MAJOR)
+LIBGTK3_LICENSE = LGPLv2+
+LIBGTK3_LICENSE_FILES = COPYING
+LIBGTK3_INSTALL_STAGING = YES
+LIBGTK3_AUTORECONF = YES
+
+LIBGTK3_CONF_ENV = \
+ ac_cv_path_GTK_UPDATE_ICON_CACHE=$(HOST_DIR)/usr/bin/gtk-update-icon-cache \
+ ac_cv_path_GDK_PIXBUF_CSOURCE=$(HOST_DIR)/usr/bin/gdk-pixbuf-csource
+
+LIBGTK3_CONF_OPT = --disable-glibtest \
+ --enable-explicit-deps=no \
+ --enable-gtk2-dependency \
+ --disable-debug \
+ --disable-introspection
+
+LIBGTK3_DEPENDENCIES = host-pkgconf host-libgtk3 libglib2 cairo pango atk \
+ gdk-pixbuf
+
+# Xorg dependencies
+LIBGTK3_CONF_OPT += --with-x \
+ --enable-x11-backend \
+ --x-includes=$(STAGING_DIR)/usr/include/X11 \
+ --x-libraries=$(STAGING_DIR)/usr/lib
+LIBGTK3_DEPENDENCIES += fontconfig xlib_libX11 xlib_libXext xlib_libXrender \
+ xlib_libXi
+
+ifeq ($(BR2_PACKAGE_XLIB_LIBXINERAMA),y)
+LIBGTK3_CONF_OPT += --enable-xinerama
+LIBGTK3_DEPENDENCIES += xlib_libXinerama
+else
+LIBGTK3_CONF_OPT += --disable-xinerama
+endif
+
+ifeq ($(BR2_PACKAGE_XLIB_LIBXRANDR),y)
+LIBGTK3_CONF_OPT += --enable-xrandr
+LIBGTK3_DEPENDENCIES += xlib_libXrandr
+else
+LIBGTK3_CONF_OPT += --disable-xrandr
+endif
+
+ifeq ($(BR2_PACKAGE_XLIB_LIBXCURSOR),y)
+LIBGTK3_DEPENDENCIES += xlib_libXcursor
+endif
+
+ifeq ($(BR2_PACKAGE_XLIB_LIBXFIXES),y)
+LIBGTK3_CONF_OPT += --enable-xfixes
+LIBGTK3_DEPENDENCIES += xlib_libXfixes
+else
+LIBGTK3_CONF_OPT += --disable-xfixes
+endif
+
+ifeq ($(BR2_PACKAGE_XLIB_LIBXCOMPOSITE),y)
+LIBGTK3_CONF_OPT += --enable-xcomposite
+LIBGTK3_DEPENDENCIES += xlib_libXcomposite
+else
+LIBGTK3_CONF_OPT += --disable-xcomposite
+endif
+
+ifeq ($(BR2_PACKAGE_XLIB_LIBXDAMAGE),y)
+LIBGTK3_CONF_OPT += --enable-xdamage
+LIBGTK3_DEPENDENCIES += xlib_libXdamage
+else
+LIBGTK3_CONF_OPT += --disable-xdamage
+endif
+
+ifeq ($(BR2_PACKAGE_XLIB_LIBXKBFILE),y)
+LIBGTK3_CONF_OPT += --enable-xkb
+LIBGTK3_DEPENDENCIES += xlib_libxkbfile
+else
+LIBGTK3_CONF_OPT += --disable-xkb
+endif
+
+ifeq ($(BR2_PACKAGE_CUPS),y)
+LIBGTK3_CONF_OPT += --enable-cups
+LIBGTK3_DEPENDENCIES += cups
+else
+LIBGTK3_CONF_OPT += --disable-cups
+endif
+
+ifeq ($(BR2_PACKAGE_LIBGTK3_DEMO),)
+define LIBGTK3_POST_INSTALL_TWEAKS
+ rm -rf $(TARGET_DIR)/usr/bin/gtk3-demo \
+ $(TARGET_DIR)/usr/bin/gtk3-demo-application
+endef
+
+LIBGTK3_POST_INSTALL_TARGET_HOOKS += LIBGTK3_POST_INSTALL_TWEAKS
+endif
+
+ifeq ($(BR2_PACKAGE_LIBGTK3_TESTS),y)
+LIBGTK3_CONF_OPT += --enable-installed-tests
+else
+LIBGTK3_CONF_OPT += --disable-installed-tests
+endif
+
+# We do not build a full version of libgtk3 for the host, because that
+# requires compiling Cairo, Pango, ATK and X.org for the host.
+# Therefore, we hack the build to only build gdk-pixbuf-from-source and
+# gtk-update-icon-cache, which are the host tools needed to build Gtk
+# for the target.
+
+HOST_LIBGTK3_DEPENDENCIES = host-libglib2 host-libpng host-gdk-pixbuf
+
+HOST_LIBGTK3_CFLAGS = \
+ $(shell $(HOST_CONFIGURE_OPTS) $(PKG_CONFIG_HOST_BINARY) \
+ --cflags --libs gdk-pixbuf-2.0)
+
+define HOST_LIBGTK3_CONFIGURE_CMDS
+ echo "#define GETTEXT_PACKAGE \"gtk30\"" >> $(@D)/gtk/config.h
+ echo "#define HAVE_UNISTD_H 1" >> $(@D)/gtk/config.h
+ echo "#define HAVE_FTW_H 1" >> $(@D)/gtk/config.h
+endef
+
+define HOST_LIBGTK3_BUILD_CMDS
+ $(HOSTCC) $(HOST_CFLAGS) $(HOST_LDFLAGS) \
+ $(@D)/gtk/updateiconcache.c \
+ $(HOST_LIBGTK3_CFLAGS) \
+ -o $(@D)/gtk/gtk-update-icon-cache
+endef
+
+define HOST_LIBGTK3_INSTALL_CMDS
+ $(INSTALL) -D -m 0755 $(@D)/gtk/gtk-update-icon-cache \
+ $(HOST_DIR)/usr/bin/gtk-update-icon-cache
+endef
+
+$(eval $(autotools-package))
+$(eval $(host-autotools-package))
--
2.0.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH v4 2/3] webkit: bump to version 2.4.3
2014-08-01 1:33 [Buildroot] [PATCH v4 0/3] Add libgtk3 and bump webkit to version 2.4.3 Hadrien Boutteville
2014-08-01 1:33 ` [Buildroot] [PATCH v4 1/3] libgtk3: new package Hadrien Boutteville
@ 2014-08-01 1:33 ` Hadrien Boutteville
2014-08-01 1:33 ` [Buildroot] [PATCH v4 3/3] midori: bump to version 0.5.8 Hadrien Boutteville
2 siblings, 0 replies; 7+ messages in thread
From: Hadrien Boutteville @ 2014-08-01 1:33 UTC (permalink / raw)
To: buildroot
WebKit needs at least GCC in version 4.8 to build:
https://bugs.webkit.org/show_bug.cgi?id=127103
The package can't depends on a specific GCC version with external
toolchains so add a comment in the help menu.
Remove all patches because they are applied upstream in this version.
Signed-off-by: Hadrien Boutteville <hadrien.boutteville@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
There is still a weird problem with WebKit: parallel make with Make
3.81 results in a make hang on:
CXXLD libWebCoreSVG.la
This is reproducible.
---
package/webkit/Config.in | 16 +-
...ebkit-0001-build-fix-for-32-bit-autotools.patch | 34 -
.../webkit-0002-build-fix-for-gtklauncher.patch | 51 -
.../webkit/webkit-0003-detect-harfbuzz-icu.patch | 28 -
package/webkit/webkit-0004-disable-docrebase.patch | 27 -
package/webkit/webkit-0005-disable-tests.patch | 80 --
package/webkit/webkit-0006-execinfo_h.patch | 20 -
package/webkit/webkit-0007-mips-dfg.patch | 1490 --------------------
package/webkit/webkit-0008-support-bison-3.0.patch | 22 -
package/webkit/webkit.mk | 67 +-
10 files changed, 38 insertions(+), 1797 deletions(-)
delete mode 100644 package/webkit/webkit-0001-build-fix-for-32-bit-autotools.patch
delete mode 100644 package/webkit/webkit-0002-build-fix-for-gtklauncher.patch
delete mode 100644 package/webkit/webkit-0003-detect-harfbuzz-icu.patch
delete mode 100644 package/webkit/webkit-0004-disable-docrebase.patch
delete mode 100644 package/webkit/webkit-0005-disable-tests.patch
delete mode 100644 package/webkit/webkit-0006-execinfo_h.patch
delete mode 100644 package/webkit/webkit-0007-mips-dfg.patch
delete mode 100644 package/webkit/webkit-0008-support-bison-3.0.patch
diff --git a/package/webkit/Config.in b/package/webkit/Config.in
index c86eb94..3df760e 100644
--- a/package/webkit/Config.in
+++ b/package/webkit/Config.in
@@ -14,7 +14,7 @@ config BR2_PACKAGE_WEBKIT
depends on BR2_INSTALL_LIBSTDCPP
depends on BR2_USE_WCHAR # enchant -> libglib2
depends on BR2_TOOLCHAIN_HAS_THREADS # enchant -> libglib2; icu
- depends on BR2_PACKAGE_LIBGTK2
+ depends on BR2_PACKAGE_LIBGTK2 || BR2_PACKAGE_LIBGTK3
depends on BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS
depends on !BR2_BINFMT_FLAT # icu
select BR2_PACKAGE_CAIRO_PNG
@@ -31,8 +31,10 @@ config BR2_PACKAGE_WEBKIT
select BR2_PACKAGE_SQLITE
select BR2_PACKAGE_WEBP
select BR2_PACKAGE_XLIB_LIBXT if BR2_PACKAGE_XORG7
- select BR2_PACKAGE_XLIB_LIBXCOMPOSITE if BR2_PACKAGE_HAS_LIBGL
- select BR2_PACKAGE_XLIB_LIBXDAMAGE if BR2_PACKAGE_HAS_LIBGL
+ select BR2_PACKAGE_XLIB_LIBXCOMPOSITE if BR2_PACKAGE_HAS_LIBGL || \
+ (BR2_PACKAGE_HAS_LIBGLES && BR2_PACKAGE_HAS_LIBEGL)
+ select BR2_PACKAGE_XLIB_LIBXDAMAGE if BR2_PACKAGE_HAS_LIBGL || \
+ (BR2_PACKAGE_HAS_LIBGLES && BR2_PACKAGE_HAS_LIBEGL)
help
WebKit is an open source, standards compliant web browser engine.
@@ -41,7 +43,9 @@ config BR2_PACKAGE_WEBKIT
http://webkit.org/
-comment "webkit needs libgtk2 and a toolchain w/ C++, wchar, threads"
+ WebKit needs at least GCC 4.8 to build.
+
+comment "webkit needs libgtk2 or libgtk3 and a toolchain w/ C++, wchar, threads"
depends on BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS
- depends on !BR2_PACKAGE_LIBGTK2 || !BR2_INSTALL_LIBSTDCPP || \
- !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS
+ depends on !(BR2_PACKAGE_LIBGTK2 || BR2_PACKAGE_LIBGTK3) || \
+ !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS
diff --git a/package/webkit/webkit-0001-build-fix-for-32-bit-autotools.patch b/package/webkit/webkit-0001-build-fix-for-32-bit-autotools.patch
deleted file mode 100644
index d7765ea..0000000
--- a/package/webkit/webkit-0001-build-fix-for-32-bit-autotools.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Add missing symbol for WebCore::TextIterator::getLocationAndLengthFromRange
-
-Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
-
-From f5bb58f9096061f00c948e668335811d364ba360 Mon Sep 17 00:00:00 2001
-From: "kov at webkit.org" <kov@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
-Date: Thu, 7 Feb 2013 13:48:46 +0000
-Subject: [PATCH] Unreviewed build fix after r141196 for 32 bits autotools.
-
-* Source/autotools/symbols.filter: restore 32 bits version of the
-WebCore::TextIterator::getLocationAndLengthFromRange(WebCore::Node*,
-WebCore::Range const*, unsigned int&, unsigned int&) symbol.
-
-git-svn-id: http://svn.webkit.org/repository/webkit/trunk at 142105 268f45cc-cd09-0410-ab3c-d52691b4dbfc
----
- ChangeLog | 8 ++++++++
- Source/autotools/symbols.filter | 1 +
- 2 files changed, 9 insertions(+)
-
-diff --git a/Source/autotools/symbols.filter b/Source/autotools/symbols.filter
-index 9d730b3..2edefaf 100644
---- a/Source/autotools/symbols.filter
-+++ b/Source/autotools/symbols.filter
-@@ -57,6 +57,7 @@ _ZN7WebCore11HistoryItem16setDocumentStateERKN3WTF6VectorINS1_6StringELj0EEE;
- _ZN7WebCore11HistoryItem16setDocumentStateERKN3WTF6VectorINS1_6StringELm0EEE;
- _ZN7WebCore11MemoryCache14resourceForURLERKNS_4KURLE;
- _ZN7WebCore12TextIterator26rangeFromLocationAndLengthEPNS_13ContainerNodeEiib;
-+_ZN7WebCore12TextIterator29getLocationAndLengthFromRangeEPNS_4NodeEPKNS_5RangeERjS6_;
- _ZN7WebCore12TextIterator29getLocationAndLengthFromRangeEPNS_4NodeEPKNS_5RangeERmS6_;
- _ZN7WebCore12PrintContext20pageNumberForElementEPNS_7ElementERKNS_9FloatSizeE;
- _ZN7WebCore13createWrapperEPN3JSC9ExecStateEPNS_17JSDOMGlobalObjectEPNS_4NodeE;
---
-1.8.3.2
-
diff --git a/package/webkit/webkit-0002-build-fix-for-gtklauncher.patch b/package/webkit/webkit-0002-build-fix-for-gtklauncher.patch
deleted file mode 100644
index 9a840b6..0000000
--- a/package/webkit/webkit-0002-build-fix-for-gtklauncher.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-Make gstreamer support conditional
-
-Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
-
-From f1055f61bce46eccf8dc0aa017113a08d3d71944 Mon Sep 17 00:00:00 2001
-From: "commit-queue at webkit.org"
- <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
-Date: Fri, 15 Mar 2013 07:13:51 +0000
-Subject: [PATCH] Build fix for Tools/GtkLauncher/Programs_GtkLauncher-main.o
- if gstreamer is not installed https://bugs.webkit.org/show_bug.cgi?id=112394
-
-Patch by Tobias Mueller <tobiasmue@gnome.org> on 2013-03-15
-Reviewed by Philippe Normand.
-
-* GtkLauncher/main.c:
-(main): Guard using the gstreamer function with #ifdef WTF_USE_GSTREAMER
-
-git-svn-id: http://svn.webkit.org/repository/webkit/trunk at 145881 268f45cc-cd09-0410-ab3c-d52691b4dbfc
----
- Tools/ChangeLog | 10 ++++++++++
- Tools/GtkLauncher/main.c | 5 ++++-
- 2 files changed, 14 insertions(+), 1 deletion(-)
-
-diff --git a/Tools/GtkLauncher/main.c b/Tools/GtkLauncher/main.c
-index 32baf4a..84c8833 100644
---- a/Tools/GtkLauncher/main.c
-+++ b/Tools/GtkLauncher/main.c
-@@ -28,7 +28,9 @@
- #include "autotoolsconfig.h"
- #include "LauncherInspectorWindow.h"
- #include <errno.h>
-+#ifdef WTF_USE_GSTREAMER
- #include <gst/gst.h>
-+#endif
- #include <gtk/gtk.h>
- #include <stdlib.h>
- #include <string.h>
-@@ -489,8 +491,9 @@ int main(int argc, char* argv[])
- GOptionContext *context = g_option_context_new(0);
- g_option_context_add_main_entries(context, commandLineOptions, 0);
- g_option_context_add_group(context, gtk_get_option_group(TRUE));
-+#ifdef WTF_USE_GSTREAMER
- g_option_context_add_group(context, gst_init_get_option_group());
--
-+#endif
- webkitSettings = webkit_web_settings_new();
- g_object_set(webkitSettings, "enable-developer-extras", TRUE, NULL);
- if (!addWebSettingsGroupToContext(context, webkitSettings)) {
---
-1.8.3.2
-
diff --git a/package/webkit/webkit-0003-detect-harfbuzz-icu.patch b/package/webkit/webkit-0003-detect-harfbuzz-icu.patch
deleted file mode 100644
index dc93c67..0000000
--- a/package/webkit/webkit-0003-detect-harfbuzz-icu.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-harfbuzz-icu detections based on the following upstream commits
-
-- 5f3ae29ffb29c499c1825578ba7f3ffcbf1aa8b9
-- ad2a23ec44b692bde43a13b658990770caa8dfc5
-- 22b4786377142424bfb6562ff029997acd0846d1
-
-Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
-
-Index: webkit-1.11.5/configure.ac
-===================================================================
---- webkit-1.11.5.orig/configure.ac
-+++ webkit-1.11.5/configure.ac
-@@ -938,6 +938,15 @@ PKG_CHECK_MODULES([FREETYPE],
- freetype2 >= $FREETYPE2_REQUIRED_VERSION
- harfbuzz])
- fi
-+# HarfBuzz 0.9.18 splits harbuzz-icu into a separate library.
-+# Since we support earlier HarfBuzz versions we keep this conditional for now.
-+m4_define([harfbuzz_required_version], [0.9.7])
-+if $PKG_CONFIG --atleast-version 0.9.18 harfbuzz; then
-+ PKG_CHECK_MODULES([HARFBUZZ_ICU], [harfbuzz-icu >= $harfbuzz_required_version])
-+ FREETYPE_CFLAGS+=" $HARFBUZZ_ICU_CFLAGS"
-+ FREETYPE_LIBS+=" $HARFBUZZ_ICU_LIBS"
-+fi
-+
- AC_SUBST([FREETYPE_CFLAGS])
- AC_SUBST([FREETYPE_LIBS])
-
diff --git a/package/webkit/webkit-0004-disable-docrebase.patch b/package/webkit/webkit-0004-disable-docrebase.patch
deleted file mode 100644
index 2692d61..0000000
--- a/package/webkit/webkit-0004-disable-docrebase.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-This patch prevents documentation from being rebased or installed. This
-prevents an error when gtk-doc --rebase is called.
-
-Signed-off-by: Spenser Gilliland <spenser@gillilanding.com>
-Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
-
-Index: webkit-1.11.5/Tools/GNUmakefile.am
-===================================================================
---- webkit-1.11.5.orig/Tools/GNUmakefile.am
-+++ webkit-1.11.5/Tools/GNUmakefile.am
-@@ -308,6 +308,8 @@ EXTRA_DIST += \
- Tools/Scripts/webkit-build-directory \
- Tools/Scripts/webkitdirs.pm
-
-+if ENABLE_GTK_DOC
-+
- docs: docs-build.stamp
- .PHONY : docs
- DISTCLEANFILES += docs-build.stamp
-@@ -412,7 +414,6 @@ if ENABLE_WEBKIT2
- rm -rf $${installdir}
- endif
-
--if ENABLE_GTK_DOC
- all: docs-build.stamp
- endif
-
diff --git a/package/webkit/webkit-0005-disable-tests.patch b/package/webkit/webkit-0005-disable-tests.patch
deleted file mode 100644
index 6fa6daa..0000000
--- a/package/webkit/webkit-0005-disable-tests.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-This prevents the Webkit test suites from being built.
-
-Signed-off-by: Spenser Gilliland <spenser@gillilanding.com>
-----
-Index: webkit-1.9.6/GNUmakefile.am
-===================================================================
---- webkit-1.9.6.orig/GNUmakefile.am 2012-08-06 03:17:24.000000000 -0500
-+++ webkit-1.9.6/GNUmakefile.am 2013-05-28 10:08:53.645129501 -0500
-@@ -282,11 +282,14 @@
- include Tools/DumpRenderTree/gtk/GNUmakefile.ImageDiff.am
-
- include Source/WebKit2/GNUmakefile.am
--include Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am
- include Tools/MiniBrowser/gtk/GNUmakefile.am
-+
-+if ENABLE_TESTS
-+include Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am
- include Tools/WebKitTestRunner/GNUmakefile.am
- include Source/ThirdParty/gtest/GNUmakefile.am
- include Tools/TestWebKitAPI/GNUmakefile.am
-+endif # ENABLE_TESTS
- # [GTK] Refactor the translations now that we have webkit2
- # https://bugs.webkit.org/show_bug.cgi?id=55153
-
-Index: webkit-1.9.6/Source/WebKit/gtk/GNUmakefile.am
-===================================================================
---- webkit-1.9.6.orig/Source/WebKit/gtk/GNUmakefile.am 2012-07-19 05:02:29.000000000 -0500
-+++ webkit-1.9.6/Source/WebKit/gtk/GNUmakefile.am 2013-05-28 10:09:49.277130516 -0500
-@@ -413,6 +413,7 @@
- dist_resources_DATA = \
- $(shell ls $(srcdir)/Source/WebKit/gtk/resources/*.html)
-
-+if ENABLE_TESTS
- # Build unit tests
- webkit_tests_cflags = \
- -fno-strict-aliasing \
-@@ -613,6 +614,8 @@
- Programs_unittests_testcopyandpaste_LDADD = $(webkit_tests_ldadd)
- Programs_unittests_testcopyandpaste_LDFLAGS = $(webkit_tests_ldflags)
-
-+endif # ENABLE_TESTS
-+
- # Project-wide clean rules
- # Files that will be cleaned
- CLEANFILES += \
-Index: webkit-1.9.6/configure.ac
-===================================================================
---- webkit-1.9.6.orig/configure.ac 2012-08-06 08:45:10.000000000 -0500
-+++ webkit-1.9.6/configure.ac 2013-05-28 10:07:55.817128445 -0500
-@@ -516,6 +516,14 @@
- AC_SUBST(CAIRO_CFLAGS)
- AC_SUBST(CAIRO_LIBS)
-
-+# check wheter to build tests
-+AC_MSG_CHECKING([wheter to build tests])
-+AC_ARG_ENABLE(tests,
-+ AC_HELP_STRING([--enable-tests],
-+ [turn on tests [default=no]]),
-+ [],[enable_debug="no"])
-+AC_MSG_RESULT([$enable_tests])
-+
- # check whether to build with debugging enabled
- AC_MSG_CHECKING([whether to do a debug build])
- AC_ARG_ENABLE(debug,
-@@ -1423,6 +1431,7 @@
- AM_CONDITIONAL([USE_FARSTREAM], [test "$have_farstream" = "yes"])
-
- # WebKit feature conditionals
-+AM_CONDITIONAL([ENABLE_TESTS],[test "$enable_tests" = "yes"])
- AM_CONDITIONAL([ENABLE_DEBUG],[test "$enable_debug_features" = "yes"])
- AM_CONDITIONAL([ENABLE_UNSTABLE_FEATURES],[test "$enable_unstable_features" = "yes"])
- AM_CONDITIONAL([ENABLE_WEBGL],[test "$enable_webgl" = "yes"])
-@@ -1534,6 +1543,7 @@
- WebKit was configured with the following options:
-
- Build configuration:
-+ Enable tests (slow) : $enable_tests
- Enable debugging (slow) : $enable_debug
- Compile with debug symbols (slow) : $enable_debug_symbols
- Enable debug features (slow) : $enable_debug_features
diff --git a/package/webkit/webkit-0006-execinfo_h.patch b/package/webkit/webkit-0006-execinfo_h.patch
deleted file mode 100644
index f5508a1..0000000
--- a/package/webkit/webkit-0006-execinfo_h.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Fixes uclibc build as uclibc does not include backtrace functionality
-
-Signed-of-by: Spenser Gilliland <spenser@gillilanding.com>
-Signed-of-by: Markos Chandras <markos.chandras@imgtec.com>
-
-Index: webkit-1.11.5/Source/WTF/wtf/Assertions.cpp
-===================================================================
---- webkit-1.11.5.orig/Source/WTF/wtf/Assertions.cpp
-+++ webkit-1.11.5/Source/WTF/wtf/Assertions.cpp
-@@ -61,8 +61,10 @@
- #if (OS(DARWIN) || (OS(LINUX) && !defined(__UCLIBC__))) && !OS(ANDROID)
- #include <cxxabi.h>
- #include <dlfcn.h>
-+#if !defined(__UCLIBC__)
- #include <execinfo.h>
- #endif
-+#endif
-
- #if OS(ANDROID)
- #include "android/log.h"
diff --git a/package/webkit/webkit-0007-mips-dfg.patch b/package/webkit/webkit-0007-mips-dfg.patch
deleted file mode 100644
index 3925951..0000000
--- a/package/webkit/webkit-0007-mips-dfg.patch
+++ /dev/null
@@ -1,1490 +0,0 @@
-Upstream patch for DFG implementation for MIPS
-
-Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
-
-From c921d19863ccf66bdd0ffa5d38eaf05efab6b136 Mon Sep 17 00:00:00 2001
-From: "commit-queue at webkit.org"
- <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
-Date: Mon, 18 Feb 2013 19:25:23 +0000
-Subject: [PATCH] MIPS DFG implementation.
- https://bugs.webkit.org/show_bug.cgi?id=101328
-
-Patch by Balazs Kilvady <kilvadyb@homejinni.com> on 2013-02-18
-Reviewed by Oliver Hunt.
-
-DFG implementation for MIPS.
-
-Source/JavaScriptCore:
-
-* assembler/MIPSAssembler.h:
-(JSC::MIPSAssembler::MIPSAssembler):
-(JSC::MIPSAssembler::sllv):
-(JSC::MIPSAssembler::movd):
-(MIPSAssembler):
-(JSC::MIPSAssembler::negd):
-(JSC::MIPSAssembler::labelForWatchpoint):
-(JSC::MIPSAssembler::label):
-(JSC::MIPSAssembler::vmov):
-(JSC::MIPSAssembler::linkDirectJump):
-(JSC::MIPSAssembler::maxJumpReplacementSize):
-(JSC::MIPSAssembler::revertJumpToMove):
-(JSC::MIPSAssembler::replaceWithJump):
-* assembler/MacroAssembler.h:
-(MacroAssembler):
-(JSC::MacroAssembler::poke):
-* assembler/MacroAssemblerMIPS.h:
-(JSC::MacroAssemblerMIPS::add32):
-(MacroAssemblerMIPS):
-(JSC::MacroAssemblerMIPS::and32):
-(JSC::MacroAssemblerMIPS::lshift32):
-(JSC::MacroAssemblerMIPS::mul32):
-(JSC::MacroAssemblerMIPS::or32):
-(JSC::MacroAssemblerMIPS::rshift32):
-(JSC::MacroAssemblerMIPS::urshift32):
-(JSC::MacroAssemblerMIPS::sub32):
-(JSC::MacroAssemblerMIPS::xor32):
-(JSC::MacroAssemblerMIPS::store32):
-(JSC::MacroAssemblerMIPS::jump):
-(JSC::MacroAssemblerMIPS::branchAdd32):
-(JSC::MacroAssemblerMIPS::branchMul32):
-(JSC::MacroAssemblerMIPS::branchSub32):
-(JSC::MacroAssemblerMIPS::branchNeg32):
-(JSC::MacroAssemblerMIPS::call):
-(JSC::MacroAssemblerMIPS::loadDouble):
-(JSC::MacroAssemblerMIPS::moveDouble):
-(JSC::MacroAssemblerMIPS::swapDouble):
-(JSC::MacroAssemblerMIPS::subDouble):
-(JSC::MacroAssemblerMIPS::mulDouble):
-(JSC::MacroAssemblerMIPS::divDouble):
-(JSC::MacroAssemblerMIPS::negateDouble):
-(JSC::MacroAssemblerMIPS::branchEqual):
-(JSC::MacroAssemblerMIPS::branchNotEqual):
-(JSC::MacroAssemblerMIPS::branchTruncateDoubleToInt32):
-(JSC::MacroAssemblerMIPS::branchTruncateDoubleToUint32):
-(JSC::MacroAssemblerMIPS::truncateDoubleToInt32):
-(JSC::MacroAssemblerMIPS::truncateDoubleToUint32):
-(JSC::MacroAssemblerMIPS::branchDoubleNonZero):
-(JSC::MacroAssemblerMIPS::branchDoubleZeroOrNaN):
-(JSC::MacroAssemblerMIPS::invert):
-(JSC::MacroAssemblerMIPS::replaceWithJump):
-(JSC::MacroAssemblerMIPS::maxJumpReplacementSize):
-* dfg/DFGAssemblyHelpers.h:
-(AssemblyHelpers):
-(JSC::DFG::AssemblyHelpers::preserveReturnAddressAfterCall):
-(JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn):
-(JSC::DFG::AssemblyHelpers::debugCall):
-* dfg/DFGCCallHelpers.h:
-(CCallHelpers):
-(JSC::DFG::CCallHelpers::setupArguments):
-(JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
-* dfg/DFGFPRInfo.h:
-(DFG):
-(FPRInfo):
-(JSC::DFG::FPRInfo::toRegister):
-(JSC::DFG::FPRInfo::toIndex):
-(JSC::DFG::FPRInfo::debugName):
-* dfg/DFGGPRInfo.h:
-(DFG):
-(GPRInfo):
-(JSC::DFG::GPRInfo::toRegister):
-(JSC::DFG::GPRInfo::toIndex):
-(JSC::DFG::GPRInfo::debugName):
-* dfg/DFGSpeculativeJIT.h:
-(SpeculativeJIT):
-* jit/JSInterfaceJIT.h:
-(JSInterfaceJIT):
-* runtime/JSGlobalData.h:
-(JSC::ScratchBuffer::allocationSize):
-(ScratchBuffer):
-
-Source/WTF:
-
-* wtf/Platform.h:
-
-git-svn-id: http://svn.webkit.org/repository/webkit/trunk at 143247 268f45cc-cd09-0410-ab3c-d52691b4dbfc
----
- Source/JavaScriptCore/ChangeLog | 90 ++++
- Source/JavaScriptCore/assembler/MIPSAssembler.h | 109 ++++-
- Source/JavaScriptCore/assembler/MacroAssembler.h | 7 +
- .../JavaScriptCore/assembler/MacroAssemblerMIPS.h | 480 +++++++++++++++++++--
- Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h | 19 +-
- Source/JavaScriptCore/dfg/DFGCCallHelpers.h | 92 ++--
- Source/JavaScriptCore/dfg/DFGFPRInfo.h | 68 +++
- Source/JavaScriptCore/dfg/DFGGPRInfo.h | 67 +++
- Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h | 4 +-
- Source/JavaScriptCore/jit/JSInterfaceJIT.h | 4 +
- Source/JavaScriptCore/runtime/JSGlobalData.h | 6 +-
- Source/WTF/ChangeLog | 11 +
- Source/WTF/wtf/Platform.h | 4 +
- 13 files changed, 888 insertions(+), 73 deletions(-)
-
-diff --git a/Source/JavaScriptCore/assembler/MIPSAssembler.h b/Source/JavaScriptCore/assembler/MIPSAssembler.h
-index 026f87e..7f553bb 100644
---- a/Source/JavaScriptCore/assembler/MIPSAssembler.h
-+++ b/Source/JavaScriptCore/assembler/MIPSAssembler.h
-@@ -152,6 +152,8 @@ public:
- typedef SegmentedVector<AssemblerLabel, 64> Jumps;
-
- MIPSAssembler()
-+ : m_indexOfLastWatchpoint(INT_MIN)
-+ , m_indexOfTailOfLastWatchpoint(INT_MIN)
- {
- }
-
-@@ -325,7 +327,7 @@ public:
- emitInst(0x00000000 | (rd << OP_SH_RD) | (rt << OP_SH_RT) | ((shamt & 0x1f) << OP_SH_SHAMT));
- }
-
-- void sllv(RegisterID rd, RegisterID rt, int rs)
-+ void sllv(RegisterID rd, RegisterID rt, RegisterID rs)
- {
- emitInst(0x00000004 | (rd << OP_SH_RD) | (rt << OP_SH_RT) | (rs << OP_SH_RS));
- }
-@@ -527,6 +529,16 @@ public:
- emitInst(0x46200004 | (fd << OP_SH_FD) | (fs << OP_SH_FS));
- }
-
-+ void movd(FPRegisterID fd, FPRegisterID fs)
-+ {
-+ emitInst(0x46200006 | (fd << OP_SH_FD) | (fs << OP_SH_FS));
-+ }
-+
-+ void negd(FPRegisterID fd, FPRegisterID fs)
-+ {
-+ emitInst(0x46200007 | (fd << OP_SH_FD) | (fs << OP_SH_FS));
-+ }
-+
- void truncwd(FPRegisterID fd, FPRegisterID fs)
- {
- emitInst(0x4620000d | (fd << OP_SH_FD) | (fs << OP_SH_FS));
-@@ -619,9 +631,24 @@ public:
- return m_buffer.label();
- }
-
-+ AssemblerLabel labelForWatchpoint()
-+ {
-+ AssemblerLabel result = m_buffer.label();
-+ if (static_cast<int>(result.m_offset) != m_indexOfLastWatchpoint)
-+ result = label();
-+ m_indexOfLastWatchpoint = result.m_offset;
-+ m_indexOfTailOfLastWatchpoint = result.m_offset + maxJumpReplacementSize();
-+ return result;
-+ }
-+
- AssemblerLabel label()
- {
-- return m_buffer.label();
-+ AssemblerLabel result = m_buffer.label();
-+ while (UNLIKELY(static_cast<int>(result.m_offset) < m_indexOfTailOfLastWatchpoint)) {
-+ nop();
-+ result = m_buffer.label();
-+ }
-+ return result;
- }
-
- AssemblerLabel align(int alignment)
-@@ -664,14 +691,24 @@ public:
- // Assembly helpers for moving data between fp and registers.
- void vmov(RegisterID rd1, RegisterID rd2, FPRegisterID rn)
- {
-+#if WTF_MIPS_ISA_REV(2) && WTF_MIPS_FP64
-+ mfc1(rd1, rn);
-+ mfhc1(rd2, rn);
-+#else
- mfc1(rd1, rn);
- mfc1(rd2, FPRegisterID(rn + 1));
-+#endif
- }
-
- void vmov(FPRegisterID rd, RegisterID rn1, RegisterID rn2)
- {
-+#if WTF_MIPS_ISA_REV(2) && WTF_MIPS_FP64
-+ mtc1(rn1, rd);
-+ mthc1(rn2, rd);
-+#else
- mtc1(rn1, rd);
- mtc1(rn2, FPRegisterID(rd + 1));
-+#endif
- }
-
- static unsigned getCallReturnOffset(AssemblerLabel call)
-@@ -688,6 +725,35 @@ public:
- // writable region of memory; to modify the code in an execute-only execuable
- // pool the 'repatch' and 'relink' methods should be used.
-
-+ static size_t linkDirectJump(void* code, void* to)
-+ {
-+ MIPSWord* insn = reinterpret_cast<MIPSWord*>(reinterpret_cast<intptr_t>(code));
-+ size_t ops = 0;
-+ int32_t slotAddr = reinterpret_cast<int>(insn) + 4;
-+ int32_t toAddr = reinterpret_cast<int>(to);
-+
-+ if ((slotAddr & 0xf0000000) != (toAddr & 0xf0000000)) {
-+ // lui
-+ *insn = 0x3c000000 | (MIPSRegisters::t9 << OP_SH_RT) | ((toAddr >> 16) & 0xffff);
-+ ++insn;
-+ // ori
-+ *insn = 0x34000000 | (MIPSRegisters::t9 << OP_SH_RT) | (MIPSRegisters::t9 << OP_SH_RS) | (toAddr & 0xffff);
-+ ++insn;
-+ // jr
-+ *insn = 0x00000008 | (MIPSRegisters::t9 << OP_SH_RS);
-+ ++insn;
-+ ops = 4 * sizeof(MIPSWord);
-+ } else {
-+ // j
-+ *insn = 0x08000000 | ((toAddr & 0x0fffffff) >> 2);
-+ ++insn;
-+ ops = 2 * sizeof(MIPSWord);
-+ }
-+ // nop
-+ *insn = 0x00000000;
-+ return ops;
-+ }
-+
- void linkJump(AssemblerLabel from, AssemblerLabel to)
- {
- ASSERT(to.isSet());
-@@ -825,29 +891,36 @@ public:
- #endif
- }
-
-- static void revertJumpToMove(void* instructionStart, RegisterID rt, int imm)
-+ static ptrdiff_t maxJumpReplacementSize()
- {
-- MIPSWord* insn = static_cast<MIPSWord*>(instructionStart) + 1;
-- ASSERT((*insn & 0xfc000000) == 0x34000000);
-- *insn = (*insn & 0xfc1f0000) | (imm & 0xffff);
-- cacheFlush(insn, sizeof(MIPSWord));
-+ return sizeof(MIPSWord) * 4;
- }
-
-- static void replaceWithJump(void* instructionStart, void* to)
-+ static void revertJumpToMove(void* instructionStart, RegisterID rt, int imm)
- {
-- MIPSWord* instruction = reinterpret_cast<MIPSWord*>(instructionStart);
-- intptr_t jumpTo = reinterpret_cast<intptr_t>(to);
-+ MIPSWord* insn = static_cast<MIPSWord*>(instructionStart);
-+ size_t codeSize = 2 * sizeof(MIPSWord);
-
- // lui
-- instruction[0] = 0x3c000000 | (MIPSRegisters::t9 << OP_SH_RT) | ((jumpTo >> 16) & 0xffff);
-+ *insn = 0x3c000000 | (rt << OP_SH_RT) | ((imm >> 16) & 0xffff);
-+ ++insn;
- // ori
-- instruction[1] = 0x34000000 | (MIPSRegisters::t9 << OP_SH_RT) | (MIPSRegisters::t9 << OP_SH_RS) | (jumpTo & 0xffff);
-- // jr
-- instruction[2] = 0x00000008 | (MIPSRegisters::t9 << OP_SH_RS);
-- // nop
-- instruction[3] = 0x0;
-+ *insn = 0x34000000 | (rt << OP_SH_RS) | (rt << OP_SH_RT) | (imm & 0xffff);
-+ ++insn;
-+ // if jr $t9
-+ if (*insn == 0x03200008) {
-+ *insn = 0x00000000;
-+ codeSize += sizeof(MIPSWord);
-+ }
-+ cacheFlush(insn, codeSize);
-+ }
-
-- cacheFlush(instruction, sizeof(MIPSWord) * 4);
-+ static void replaceWithJump(void* instructionStart, void* to)
-+ {
-+ ASSERT(!(bitwise_cast<uintptr_t>(instructionStart) & 3));
-+ ASSERT(!(bitwise_cast<uintptr_t>(to) & 3));
-+ size_t ops = linkDirectJump(instructionStart, to);
-+ cacheFlush(instructionStart, ops);
- }
-
- static void replaceWithLoad(void* instructionStart)
-@@ -1023,6 +1096,8 @@ private:
-
- AssemblerBuffer m_buffer;
- Jumps m_jumps;
-+ int m_indexOfLastWatchpoint;
-+ int m_indexOfTailOfLastWatchpoint;
- };
-
- } // namespace JSC
-diff --git a/Source/JavaScriptCore/assembler/MacroAssembler.h b/Source/JavaScriptCore/assembler/MacroAssembler.h
-index 60a93db..1f0c3de 100644
---- a/Source/JavaScriptCore/assembler/MacroAssembler.h
-+++ b/Source/JavaScriptCore/assembler/MacroAssembler.h
-@@ -200,6 +200,13 @@ public:
- }
- #endif
-
-+#if CPU(MIPS)
-+ void poke(FPRegisterID src, int index = 0)
-+ {
-+ ASSERT(!(index & 1));
-+ storeDouble(src, addressForPoke(index));
-+ }
-+#endif
-
- // Backwards banches, these are currently all implemented using existing forwards branch mechanisms.
- void branchPtr(RelationalCondition cond, RegisterID op1, TrustedImmPtr imm, Label target)
-diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h b/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h
-index 43ad434..4f14960 100644
---- a/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h
-+++ b/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h
-@@ -114,6 +114,11 @@ public:
- m_assembler.addu(dest, dest, src);
- }
-
-+ void add32(RegisterID op1, RegisterID op2, RegisterID dest)
-+ {
-+ m_assembler.addu(dest, op1, op2);
-+ }
-+
- void add32(TrustedImm32 imm, RegisterID dest)
- {
- add32(imm, dest, dest);
-@@ -267,6 +272,11 @@ public:
- m_assembler.andInsn(dest, dest, src);
- }
-
-+ void and32(RegisterID op1, RegisterID op2, RegisterID dest)
-+ {
-+ m_assembler.andInsn(dest, op1, op2);
-+ }
-+
- void and32(TrustedImm32 imm, RegisterID dest)
- {
- if (!imm.m_value && !m_fixedWidth)
-@@ -283,9 +293,16 @@ public:
- }
- }
-
-- void lshift32(TrustedImm32 imm, RegisterID dest)
-+ void and32(TrustedImm32 imm, RegisterID src, RegisterID dest)
- {
-- m_assembler.sll(dest, dest, imm.m_value);
-+ if (!imm.m_value && !m_fixedWidth)
-+ move(MIPSRegisters::zero, dest);
-+ else if (imm.m_value > 0 && imm.m_value < 65535 && !m_fixedWidth)
-+ m_assembler.andi(dest, src, imm.m_value);
-+ else {
-+ move(imm, immTempRegister);
-+ m_assembler.andInsn(dest, src, immTempRegister);
-+ }
- }
-
- void lshift32(RegisterID shiftAmount, RegisterID dest)
-@@ -293,11 +310,33 @@ public:
- m_assembler.sllv(dest, dest, shiftAmount);
- }
-
-+ void lshift32(RegisterID src, RegisterID shiftAmount, RegisterID dest)
-+ {
-+ m_assembler.sllv(dest, src, shiftAmount);
-+ }
-+
-+ void lshift32(TrustedImm32 imm, RegisterID dest)
-+ {
-+ move(imm, immTempRegister);
-+ m_assembler.sllv(dest, dest, immTempRegister);
-+ }
-+
-+ void lshift32(RegisterID src, TrustedImm32 imm, RegisterID dest)
-+ {
-+ move(imm, immTempRegister);
-+ m_assembler.sllv(dest, src, immTempRegister);
-+ }
-+
- void mul32(RegisterID src, RegisterID dest)
- {
- m_assembler.mul(dest, dest, src);
- }
-
-+ void mul32(RegisterID op1, RegisterID op2, RegisterID dest)
-+ {
-+ m_assembler.mul(dest, op1, op2);
-+ }
-+
- void mul32(TrustedImm32 imm, RegisterID src, RegisterID dest)
- {
- if (!imm.m_value && !m_fixedWidth)
-@@ -348,6 +387,24 @@ public:
- m_assembler.orInsn(dest, dest, dataTempRegister);
- }
-
-+ void or32(TrustedImm32 imm, RegisterID src, RegisterID dest)
-+ {
-+ if (!imm.m_value && !m_fixedWidth)
-+ return;
-+
-+ if (imm.m_value > 0 && imm.m_value < 65535 && !m_fixedWidth) {
-+ m_assembler.ori(dest, src, imm.m_value);
-+ return;
-+ }
-+
-+ /*
-+ li dataTemp, imm
-+ or dest, src, dataTemp
-+ */
-+ move(imm, dataTempRegister);
-+ m_assembler.orInsn(dest, src, dataTempRegister);
-+ }
-+
- void or32(RegisterID src, AbsoluteAddress dest)
- {
- load32(dest.m_ptr, dataTempRegister);
-@@ -360,6 +417,11 @@ public:
- m_assembler.srav(dest, dest, shiftAmount);
- }
-
-+ void rshift32(RegisterID src, RegisterID shiftAmount, RegisterID dest)
-+ {
-+ m_assembler.srav(dest, src, shiftAmount);
-+ }
-+
- void rshift32(TrustedImm32 imm, RegisterID dest)
- {
- m_assembler.sra(dest, dest, imm.m_value);
-@@ -375,16 +437,31 @@ public:
- m_assembler.srlv(dest, dest, shiftAmount);
- }
-
-+ void urshift32(RegisterID src, RegisterID shiftAmount, RegisterID dest)
-+ {
-+ m_assembler.srlv(dest, src, shiftAmount);
-+ }
-+
- void urshift32(TrustedImm32 imm, RegisterID dest)
- {
- m_assembler.srl(dest, dest, imm.m_value);
- }
-
-+ void urshift32(RegisterID src, TrustedImm32 imm, RegisterID dest)
-+ {
-+ m_assembler.srl(dest, src, imm.m_value);
-+ }
-+
- void sub32(RegisterID src, RegisterID dest)
- {
- m_assembler.subu(dest, dest, src);
- }
-
-+ void sub32(RegisterID op1, RegisterID op2, RegisterID dest)
-+ {
-+ m_assembler.subu(dest, op1, op2);
-+ }
-+
- void sub32(TrustedImm32 imm, RegisterID dest)
- {
- if (imm.m_value >= -32767 && imm.m_value <= 32768
-@@ -495,6 +572,11 @@ public:
- m_assembler.xorInsn(dest, dest, src);
- }
-
-+ void xor32(RegisterID op1, RegisterID op2, RegisterID dest)
-+ {
-+ m_assembler.xorInsn(dest, op1, op2);
-+ }
-+
- void xor32(TrustedImm32 imm, RegisterID dest)
- {
- if (imm.m_value == -1) {
-@@ -510,6 +592,21 @@ public:
- m_assembler.xorInsn(dest, dest, immTempRegister);
- }
-
-+ void xor32(TrustedImm32 imm, RegisterID src, RegisterID dest)
-+ {
-+ if (imm.m_value == -1) {
-+ m_assembler.nor(dest, src, MIPSRegisters::zero);
-+ return;
-+ }
-+
-+ /*
-+ li immTemp, imm
-+ xor dest, dest, immTemp
-+ */
-+ move(imm, immTempRegister);
-+ m_assembler.xorInsn(dest, src, immTempRegister);
-+ }
-+
- void sqrtDouble(FPRegisterID src, FPRegisterID dst)
- {
- m_assembler.sqrtd(dst, src);
-@@ -989,6 +1086,44 @@ public:
- }
- }
-
-+ void store32(TrustedImm32 imm, BaseIndex address)
-+ {
-+ if (address.offset >= -32768 && address.offset <= 32767 && !m_fixedWidth) {
-+ /*
-+ sll addrTemp, address.index, address.scale
-+ addu addrTemp, addrTemp, address.base
-+ sw src, address.offset(addrTemp)
-+ */
-+ m_assembler.sll(addrTempRegister, address.index, address.scale);
-+ m_assembler.addu(addrTempRegister, addrTempRegister, address.base);
-+ if (!imm.m_value)
-+ m_assembler.sw(MIPSRegisters::zero, addrTempRegister, address.offset);
-+ else {
-+ move(imm, immTempRegister);
-+ m_assembler.sw(immTempRegister, addrTempRegister, address.offset);
-+ }
-+ } else {
-+ /*
-+ sll addrTemp, address.index, address.scale
-+ addu addrTemp, addrTemp, address.base
-+ lui immTemp, (address.offset + 0x8000) >> 16
-+ addu addrTemp, addrTemp, immTemp
-+ sw src, (address.offset & 0xffff)(at)
-+ */
-+ m_assembler.sll(addrTempRegister, address.index, address.scale);
-+ m_assembler.addu(addrTempRegister, addrTempRegister, address.base);
-+ m_assembler.lui(immTempRegister, (address.offset + 0x8000) >> 16);
-+ m_assembler.addu(addrTempRegister, addrTempRegister, immTempRegister);
-+ if (!imm.m_value && !m_fixedWidth)
-+ m_assembler.sw(MIPSRegisters::zero, addrTempRegister, address.offset);
-+ else {
-+ move(imm, immTempRegister);
-+ m_assembler.sw(immTempRegister, addrTempRegister, address.offset);
-+ }
-+ }
-+ }
-+
-+
- void store32(RegisterID src, const void* address)
- {
- /*
-@@ -1336,6 +1471,15 @@ public:
- m_fixedWidth = false;
- }
-
-+ void jump(AbsoluteAddress address)
-+ {
-+ m_fixedWidth = true;
-+ load32(address.m_ptr, MIPSRegisters::t9);
-+ m_assembler.jr(MIPSRegisters::t9);
-+ m_assembler.nop();
-+ m_fixedWidth = false;
-+ }
-+
- void moveDoubleToInts(FPRegisterID src, RegisterID dest1, RegisterID dest2)
- {
- m_assembler.vmov(dest1, dest2, src);
-@@ -1404,6 +1548,53 @@ public:
- return Jump();
- }
-
-+ Jump branchAdd32(ResultCondition cond, RegisterID op1, RegisterID op2, RegisterID dest)
-+ {
-+ ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero));
-+ if (cond == Overflow) {
-+ /*
-+ move dataTemp, op1
-+ xor cmpTemp, dataTemp, op2
-+ bltz cmpTemp, No_overflow # diff sign bit -> no overflow
-+ addu dest, dataTemp, op2
-+ xor cmpTemp, dest, dataTemp
-+ bgez cmpTemp, No_overflow # same sign big -> no overflow
-+ nop
-+ b Overflow
-+ nop
-+ nop
-+ nop
-+ nop
-+ nop
-+ No_overflow:
-+ */
-+ move(op1, dataTempRegister);
-+ m_assembler.xorInsn(cmpTempRegister, dataTempRegister, op2);
-+ m_assembler.bltz(cmpTempRegister, 10);
-+ m_assembler.addu(dest, dataTempRegister, op2);
-+ m_assembler.xorInsn(cmpTempRegister, dest, dataTempRegister);
-+ m_assembler.bgez(cmpTempRegister, 7);
-+ m_assembler.nop();
-+ return jump();
-+ }
-+ if (cond == Signed) {
-+ add32(op1, op2, dest);
-+ // Check if dest is negative.
-+ m_assembler.slt(cmpTempRegister, dest, MIPSRegisters::zero);
-+ return branchNotEqual(cmpTempRegister, MIPSRegisters::zero);
-+ }
-+ if (cond == Zero) {
-+ add32(op1, op2, dest);
-+ return branchEqual(dest, MIPSRegisters::zero);
-+ }
-+ if (cond == NonZero) {
-+ add32(op1, op2, dest);
-+ return branchNotEqual(dest, MIPSRegisters::zero);
-+ }
-+ ASSERT(0);
-+ return Jump();
-+ }
-+
- Jump branchAdd32(ResultCondition cond, TrustedImm32 imm, RegisterID dest)
- {
- move(imm, immTempRegister);
-@@ -1417,6 +1608,111 @@ public:
- return branchAdd32(cond, immTempRegister, dest);
- }
-
-+ Jump branchAdd32(ResultCondition cond, TrustedImm32 imm, AbsoluteAddress dest)
-+ {
-+ ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero));
-+ if (cond == Overflow) {
-+ /*
-+ move dataTemp, dest
-+ xori cmpTemp, dataTemp, imm
-+ bltz cmpTemp, No_overflow # diff sign bit -> no overflow
-+ addiu dataTemp, dataTemp, imm
-+ move dest, dataTemp
-+ xori cmpTemp, dataTemp, imm
-+ bgez cmpTemp, No_overflow # same sign big -> no overflow
-+ nop
-+ b Overflow
-+ nop
-+ nop
-+ nop
-+ nop
-+ nop
-+ No_overflow:
-+ */
-+ if (imm.m_value >= -32768 && imm.m_value <= 32767 && !m_fixedWidth) {
-+ load32(dest.m_ptr, dataTempRegister);
-+ m_assembler.xori(cmpTempRegister, dataTempRegister, imm.m_value);
-+ m_assembler.bltz(cmpTempRegister, 10);
-+ m_assembler.addiu(dataTempRegister, dataTempRegister, imm.m_value);
-+ store32(dataTempRegister, dest.m_ptr);
-+ m_assembler.xori(cmpTempRegister, dataTempRegister, imm.m_value);
-+ m_assembler.bgez(cmpTempRegister, 7);
-+ m_assembler.nop();
-+ } else {
-+ load32(dest.m_ptr, dataTempRegister);
-+ move(imm, immTempRegister);
-+ m_assembler.xorInsn(cmpTempRegister, dataTempRegister, immTempRegister);
-+ m_assembler.bltz(cmpTempRegister, 10);
-+ m_assembler.addiu(dataTempRegister, dataTempRegister, immTempRegister);
-+ store32(dataTempRegister, dest.m_ptr);
-+ m_assembler.xori(cmpTempRegister, dataTempRegister, immTempRegister);
-+ m_assembler.bgez(cmpTempRegister, 7);
-+ m_assembler.nop();
-+ }
-+ return jump();
-+ }
-+ move(imm, immTempRegister);
-+ load32(dest.m_ptr, dataTempRegister);
-+ add32(immTempRegister, dataTempRegister);
-+ store32(dataTempRegister, dest.m_ptr);
-+ if (cond == Signed) {
-+ // Check if dest is negative.
-+ m_assembler.slt(cmpTempRegister, dataTempRegister, MIPSRegisters::zero);
-+ return branchNotEqual(cmpTempRegister, MIPSRegisters::zero);
-+ }
-+ if (cond == Zero)
-+ return branchEqual(dataTempRegister, MIPSRegisters::zero);
-+ if (cond == NonZero)
-+ return branchNotEqual(dataTempRegister, MIPSRegisters::zero);
-+ ASSERT(0);
-+ return Jump();
-+ }
-+
-+ Jump branchMul32(ResultCondition cond, RegisterID src1, RegisterID src2, RegisterID dest)
-+ {
-+ ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero));
-+ if (cond == Overflow) {
-+ /*
-+ mult src, dest
-+ mfhi dataTemp
-+ mflo dest
-+ sra addrTemp, dest, 31
-+ beq dataTemp, addrTemp, No_overflow # all sign bits (bit 63 to bit 31) are the same -> no overflow
-+ nop
-+ b Overflow
-+ nop
-+ nop
-+ nop
-+ nop
-+ nop
-+ No_overflow:
-+ */
-+ m_assembler.mult(src1, src2);
-+ m_assembler.mfhi(dataTempRegister);
-+ m_assembler.mflo(dest);
-+ m_assembler.sra(addrTempRegister, dest, 31);
-+ m_assembler.beq(dataTempRegister, addrTempRegister, 7);
-+ m_assembler.nop();
-+ return jump();
-+ }
-+ if (cond == Signed) {
-+ mul32(src1, src2, dest);
-+ // Check if dest is negative.
-+ m_assembler.slt(cmpTempRegister, dest, MIPSRegisters::zero);
-+ return branchNotEqual(cmpTempRegister, MIPSRegisters::zero);
-+ }
-+ if (cond == Zero) {
-+ mul32(src1, src2, dest);
-+ return branchEqual(dest, MIPSRegisters::zero);
-+ }
-+ if (cond == NonZero) {
-+ mul32(src1, src2, dest);
-+ return branchNotEqual(dest, MIPSRegisters::zero);
-+ }
-+ ASSERT(0);
-+ return Jump();
-+ }
-+
- Jump branchMul32(ResultCondition cond, RegisterID src, RegisterID dest)
- {
- ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero));
-@@ -1465,8 +1761,7 @@ public:
- Jump branchMul32(ResultCondition cond, TrustedImm32 imm, RegisterID src, RegisterID dest)
- {
- move(imm, immTempRegister);
-- move(src, dest);
-- return branchMul32(cond, immTempRegister, dest);
-+ return branchMul32(cond, immTempRegister, src, dest);
- }
-
- Jump branchSub32(ResultCondition cond, RegisterID src, RegisterID dest)
-@@ -1525,8 +1820,60 @@ public:
- Jump branchSub32(ResultCondition cond, RegisterID src, TrustedImm32 imm, RegisterID dest)
- {
- move(imm, immTempRegister);
-- move(src, dest);
-- return branchSub32(cond, immTempRegister, dest);
-+ return branchSub32(cond, src, immTempRegister, dest);
-+ }
-+
-+ Jump branchSub32(ResultCondition cond, RegisterID op1, RegisterID op2, RegisterID dest)
-+ {
-+ ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero));
-+ if (cond == Overflow) {
-+ /*
-+ move dataTemp, op1
-+ xor cmpTemp, dataTemp, op2
-+ bgez cmpTemp, No_overflow # same sign bit -> no overflow
-+ subu dest, dataTemp, op2
-+ xor cmpTemp, dest, dataTemp
-+ bgez cmpTemp, No_overflow # same sign bit -> no overflow
-+ nop
-+ b Overflow
-+ nop
-+ nop
-+ nop
-+ nop
-+ nop
-+ No_overflow:
-+ */
-+ move(op1, dataTempRegister);
-+ m_assembler.xorInsn(cmpTempRegister, dataTempRegister, op2);
-+ m_assembler.bgez(cmpTempRegister, 10);
-+ m_assembler.subu(dest, dataTempRegister, op2);
-+ m_assembler.xorInsn(cmpTempRegister, dest, dataTempRegister);
-+ m_assembler.bgez(cmpTempRegister, 7);
-+ m_assembler.nop();
-+ return jump();
-+ }
-+ if (cond == Signed) {
-+ sub32(op1, op2, dest);
-+ // Check if dest is negative.
-+ m_assembler.slt(cmpTempRegister, dest, MIPSRegisters::zero);
-+ return branchNotEqual(cmpTempRegister, MIPSRegisters::zero);
-+ }
-+ if (cond == Zero) {
-+ sub32(op1, op2, dest);
-+ return branchEqual(dest, MIPSRegisters::zero);
-+ }
-+ if (cond == NonZero) {
-+ sub32(op1, op2, dest);
-+ return branchNotEqual(dest, MIPSRegisters::zero);
-+ }
-+ ASSERT(0);
-+ return Jump();
-+ }
-+
-+ Jump branchNeg32(ResultCondition cond, RegisterID srcDest)
-+ {
-+ m_assembler.li(dataTempRegister, -1);
-+ return branchMul32(cond, dataTempRegister, srcDest);
- }
-
- Jump branchOr32(ResultCondition cond, RegisterID src, RegisterID dest)
-@@ -1578,7 +1925,8 @@ public:
-
- Call call(RegisterID target)
- {
-- m_assembler.jalr(target);
-+ move(target, MIPSRegisters::t9);
-+ m_assembler.jalr(MIPSRegisters::t9);
- m_assembler.nop();
- return Call(m_assembler.label(), Call::None);
- }
-@@ -1822,7 +2170,7 @@ public:
- lui immTemp, (address.offset + 0x8000) >> 16
- addu addrTemp, addrTemp, immTemp
- lwc1 dest, (address.offset & 0xffff)(at)
-- lwc1 dest+4, (address.offset & 0xffff + 4)(at)
-+ lwc1 dest+1, (address.offset & 0xffff + 4)(at)
- */
- m_assembler.sll(addrTempRegister, address.index, address.scale);
- m_assembler.addu(addrTempRegister, addrTempRegister, address.base);
-@@ -2009,6 +2357,19 @@ public:
- #endif
- }
-
-+ void moveDouble(FPRegisterID src, FPRegisterID dest)
-+ {
-+ if (src != dest || m_fixedWidth)
-+ m_assembler.movd(dest, src);
-+ }
-+
-+ void swapDouble(FPRegisterID fr1, FPRegisterID fr2)
-+ {
-+ moveDouble(fr1, fpTempRegister);
-+ moveDouble(fr2, fr1);
-+ moveDouble(fpTempRegister, fr2);
-+ }
-+
- void addDouble(FPRegisterID src, FPRegisterID dest)
- {
- m_assembler.addd(dest, dest, src);
-@@ -2036,6 +2397,11 @@ public:
- m_assembler.subd(dest, dest, src);
- }
-
-+ void subDouble(FPRegisterID op1, FPRegisterID op2, FPRegisterID dest)
-+ {
-+ m_assembler.subd(dest, op1, op2);
-+ }
-+
- void subDouble(Address src, FPRegisterID dest)
- {
- loadDouble(src, fpTempRegister);
-@@ -2053,11 +2419,32 @@ public:
- m_assembler.muld(dest, dest, fpTempRegister);
- }
-
-+ void mulDouble(FPRegisterID op1, FPRegisterID op2, FPRegisterID dest)
-+ {
-+ m_assembler.muld(dest, op1, op2);
-+ }
-+
- void divDouble(FPRegisterID src, FPRegisterID dest)
- {
- m_assembler.divd(dest, dest, src);
- }
-
-+ void divDouble(FPRegisterID op1, FPRegisterID op2, FPRegisterID dest)
-+ {
-+ m_assembler.divd(dest, op1, op2);
-+ }
-+
-+ void divDouble(Address src, FPRegisterID dest)
-+ {
-+ loadDouble(src, fpTempRegister);
-+ m_assembler.divd(dest, dest, fpTempRegister);
-+ }
-+
-+ void negateDouble(FPRegisterID src, FPRegisterID dest)
-+ {
-+ m_assembler.negd(dest, src);
-+ }
-+
- void convertInt32ToDouble(RegisterID src, FPRegisterID dest)
- {
- m_assembler.mtc1(src, fpTempRegister);
-@@ -2117,6 +2504,8 @@ public:
-
- Jump branchEqual(RegisterID rs, RegisterID rt)
- {
-+ m_assembler.nop();
-+ m_assembler.nop();
- m_assembler.appendJump();
- m_assembler.beq(rs, rt, 0);
- m_assembler.nop();
-@@ -2126,6 +2515,8 @@ public:
-
- Jump branchNotEqual(RegisterID rs, RegisterID rt)
- {
-+ m_assembler.nop();
-+ m_assembler.nop();
- m_assembler.appendJump();
- m_assembler.bne(rs, rt, 0);
- m_assembler.nop();
-@@ -2192,11 +2583,33 @@ public:
- // If the result is not representable as a 32 bit value, branch.
- // May also branch for some values that are representable in 32 bits
- // (specifically, in this case, INT_MAX 0x7fffffff).
-- Jump branchTruncateDoubleToInt32(FPRegisterID src, RegisterID dest)
-+ enum BranchTruncateType { BranchIfTruncateFailed, BranchIfTruncateSuccessful };
-+ Jump branchTruncateDoubleToInt32(FPRegisterID src, RegisterID dest, BranchTruncateType branchType = BranchIfTruncateFailed)
-+ {
-+ m_assembler.truncwd(fpTempRegister, src);
-+ m_assembler.mfc1(dest, fpTempRegister);
-+ return branch32(branchType == BranchIfTruncateFailed ? Equal : NotEqual, dest, TrustedImm32(0x7fffffff));
-+ }
-+
-+ Jump branchTruncateDoubleToUint32(FPRegisterID src, RegisterID dest, BranchTruncateType branchType = BranchIfTruncateFailed)
-+ {
-+ m_assembler.truncwd(fpTempRegister, src);
-+ m_assembler.mfc1(dest, fpTempRegister);
-+ return branch32(branchType == BranchIfTruncateFailed ? Equal : NotEqual, dest, TrustedImm32(0));
-+ }
-+
-+ // Result is undefined if the value is outside of the integer range.
-+ void truncateDoubleToInt32(FPRegisterID src, RegisterID dest)
-+ {
-+ m_assembler.truncwd(fpTempRegister, src);
-+ m_assembler.mfc1(dest, fpTempRegister);
-+ }
-+
-+ // Result is undefined if src > 2^31
-+ void truncateDoubleToUint32(FPRegisterID src, RegisterID dest)
- {
- m_assembler.truncwd(fpTempRegister, src);
- m_assembler.mfc1(dest, fpTempRegister);
-- return branch32(Equal, dest, TrustedImm32(0x7fffffff));
- }
-
- // Convert 'src' to an integer, and places the resulting 'dest'.
-@@ -2218,28 +2631,43 @@ public:
-
- Jump branchDoubleNonZero(FPRegisterID reg, FPRegisterID scratch)
- {
--#if WTF_MIPS_ISA_REV(2) && WTF_MIPS_FP64
-- m_assembler.mtc1(MIPSRegisters::zero, scratch);
-- m_assembler.mthc1(MIPSRegisters::zero, scratch);
--#else
-- m_assembler.mtc1(MIPSRegisters::zero, scratch);
-- m_assembler.mtc1(MIPSRegisters::zero, FPRegisterID(scratch + 1));
--#endif
-+ m_assembler.vmov(scratch, MIPSRegisters::zero, MIPSRegisters::zero);
- return branchDouble(DoubleNotEqual, reg, scratch);
- }
-
- Jump branchDoubleZeroOrNaN(FPRegisterID reg, FPRegisterID scratch)
- {
--#if WTF_MIPS_ISA_REV(2) && WTF_MIPS_FP64
-- m_assembler.mtc1(MIPSRegisters::zero, scratch);
-- m_assembler.mthc1(MIPSRegisters::zero, scratch);
--#else
-- m_assembler.mtc1(MIPSRegisters::zero, scratch);
-- m_assembler.mtc1(MIPSRegisters::zero, FPRegisterID(scratch + 1));
--#endif
-+ m_assembler.vmov(scratch, MIPSRegisters::zero, MIPSRegisters::zero);
- return branchDouble(DoubleEqualOrUnordered, reg, scratch);
- }
-
-+ // Invert a relational condition, e.g. == becomes !=, < becomes >=, etc.
-+ static RelationalCondition invert(RelationalCondition cond)
-+ {
-+ RelationalCondition r;
-+ if (cond == Equal)
-+ r = NotEqual;
-+ else if (cond == NotEqual)
-+ r = Equal;
-+ else if (cond == Above)
-+ r = BelowOrEqual;
-+ else if (cond == AboveOrEqual)
-+ r = Below;
-+ else if (cond == Below)
-+ r = AboveOrEqual;
-+ else if (cond == BelowOrEqual)
-+ r = Above;
-+ else if (cond == GreaterThan)
-+ r = LessThanOrEqual;
-+ else if (cond == GreaterThanOrEqual)
-+ r = LessThan;
-+ else if (cond == LessThan)
-+ r = GreaterThanOrEqual;
-+ else if (cond == LessThanOrEqual)
-+ r = GreaterThan;
-+ return r;
-+ }
-+
- void nop()
- {
- m_assembler.nop();
-@@ -2252,12 +2680,12 @@ public:
-
- static void replaceWithJump(CodeLocationLabel instructionStart, CodeLocationLabel destination)
- {
-- RELEASE_ASSERT_NOT_REACHED();
-+ MIPSAssembler::replaceWithJump(instructionStart.dataLocation(), destination.dataLocation());
- }
-
- static ptrdiff_t maxJumpReplacementSize()
- {
-- RELEASE_ASSERT_NOT_REACHED();
-+ MIPSAssembler::maxJumpReplacementSize();
- return 0;
- }
-
-diff --git a/Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h b/Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h
-index fa0f5e0..573d8dc 100644
---- a/Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h
-+++ b/Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h
-@@ -93,6 +93,23 @@ public:
- }
- #endif
-
-+#if CPU(MIPS)
-+ ALWAYS_INLINE void preserveReturnAddressAfterCall(RegisterID reg)
-+ {
-+ move(returnAddressRegister, reg);
-+ }
-+
-+ ALWAYS_INLINE void restoreReturnAddressBeforeReturn(RegisterID reg)
-+ {
-+ move(reg, returnAddressRegister);
-+ }
-+
-+ ALWAYS_INLINE void restoreReturnAddressBeforeReturn(Address address)
-+ {
-+ loadPtr(address, returnAddressRegister);
-+ }
-+#endif
-+
- void emitGetFromCallFrameHeaderPtr(JSStack::CallFrameHeaderEntry entry, GPRReg to)
- {
- loadPtr(Address(GPRInfo::callFrameRegister, entry * sizeof(Register)), to);
-@@ -193,7 +210,7 @@ public:
- move(TrustedImmPtr(scratchBuffer->activeLengthPtr()), GPRInfo::regT0);
- storePtr(TrustedImmPtr(scratchSize), GPRInfo::regT0);
-
--#if CPU(X86_64) || CPU(ARM)
-+#if CPU(X86_64) || CPU(ARM) || CPU(MIPS)
- move(TrustedImmPtr(buffer), GPRInfo::argumentGPR2);
- move(TrustedImmPtr(argument), GPRInfo::argumentGPR1);
- move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
-diff --git a/Source/JavaScriptCore/dfg/DFGCCallHelpers.h b/Source/JavaScriptCore/dfg/DFGCCallHelpers.h
-index 8adde05..3d99f6f 100644
---- a/Source/JavaScriptCore/dfg/DFGCCallHelpers.h
-+++ b/Source/JavaScriptCore/dfg/DFGCCallHelpers.h
-@@ -576,6 +576,39 @@ public:
- poke(GPRInfo::nonArgGPR0);
- }
- #endif // CPU(ARM_HARDFP)
-+#elif CPU(MIPS)
-+ ALWAYS_INLINE void setupArguments(FPRReg arg1)
-+ {
-+ moveDouble(arg1, FPRInfo::argumentFPR0);
-+ }
-+
-+ ALWAYS_INLINE void setupArguments(FPRReg arg1, FPRReg arg2)
-+ {
-+ if (arg2 != FPRInfo::argumentFPR0) {
-+ moveDouble(arg1, FPRInfo::argumentFPR0);
-+ moveDouble(arg2, FPRInfo::argumentFPR1);
-+ } else if (arg1 != FPRInfo::argumentFPR1) {
-+ moveDouble(arg2, FPRInfo::argumentFPR1);
-+ moveDouble(arg1, FPRInfo::argumentFPR0);
-+ } else {
-+ // Swap arg1, arg2.
-+ swapDouble(FPRInfo::argumentFPR0, FPRInfo::argumentFPR1);
-+ }
-+ }
-+
-+ ALWAYS_INLINE void setupArgumentsWithExecState(FPRReg arg1, GPRReg arg2)
-+ {
-+ assembler().vmov(GPRInfo::argumentGPR2, GPRInfo::argumentGPR3, arg1);
-+ move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
-+ poke(arg2, 4);
-+ }
-+
-+ ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, FPRReg arg3)
-+ {
-+ setupStubArguments(arg1, arg2);
-+ move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
-+ poke(arg3, 4);
-+ }
- #else
- #error "DFG JIT not supported on this platform."
- #endif
-@@ -803,119 +836,126 @@ public:
- // These methods are suitable for any calling convention that provides for
- // exactly 4 argument registers, e.g. ARMv7.
- #if NUMBER_OF_ARGUMENT_REGISTERS == 4
-+
-+#if CPU(MIPS)
-+#define POKE_ARGUMENT_OFFSET 4
-+#else
-+#define POKE_ARGUMENT_OFFSET 0
-+#endif
-+
- ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, GPRReg arg3, GPRReg arg4)
- {
-- poke(arg4);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, GPRReg arg3, TrustedImm32 arg4)
- {
-- poke(arg4);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, TrustedImmPtr arg2, TrustedImm32 arg3, GPRReg arg4)
- {
-- poke(arg4);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, TrustedImmPtr arg2, TrustedImm32 arg3, GPRReg arg4, GPRReg arg5)
- {
-- poke(arg5, 1);
-- poke(arg4);
-+ poke(arg5, POKE_ARGUMENT_OFFSET + 1);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, TrustedImm32 arg3, TrustedImm32 arg4)
- {
-- poke(arg4);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, TrustedImm32 arg2, GPRReg arg3, GPRReg arg4)
- {
-- poke(arg4);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, GPRReg arg3, TrustedImmPtr arg4)
- {
-- poke(arg4);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, GPRReg arg3, GPRReg arg4, GPRReg arg5)
- {
-- poke(arg5, 1);
-- poke(arg4);
-+ poke(arg5, POKE_ARGUMENT_OFFSET + 1);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, GPRReg arg2, GPRReg arg3, GPRReg arg4)
- {
-- poke(arg4);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, GPRReg arg2, GPRReg arg3, TrustedImmPtr arg4)
- {
-- poke(arg4);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, GPRReg arg2, TrustedImm32 arg3, TrustedImmPtr arg4)
- {
-- poke(arg4);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, GPRReg arg2, TrustedImm32 arg3, GPRReg arg4)
- {
-- poke(arg4);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, TrustedImm32 arg3, GPRReg arg4, GPRReg arg5)
- {
-- poke(arg5, 1);
-- poke(arg4);
-+ poke(arg5, POKE_ARGUMENT_OFFSET + 1);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, TrustedImm32 arg3, GPRReg arg4, TrustedImm32 arg5)
- {
-- poke(arg5, 1);
-- poke(arg4);
-+ poke(arg5, POKE_ARGUMENT_OFFSET + 1);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, GPRReg arg2, GPRReg arg3, GPRReg arg4, TrustedImmPtr arg5)
- {
-- poke(arg5, 1);
-- poke(arg4);
-+ poke(arg5, POKE_ARGUMENT_OFFSET + 1);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, GPRReg arg2, GPRReg arg3, TrustedImm32 arg4, TrustedImm32 arg5)
- {
-- poke(arg5, 1);
-- poke(arg4);
-+ poke(arg5, POKE_ARGUMENT_OFFSET + 1);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, TrustedImm32 arg2, TrustedImm32 arg3, GPRReg arg4, GPRReg arg5)
- {
-- poke(arg5, 1);
-- poke(arg4);
-+ poke(arg5, POKE_ARGUMENT_OFFSET + 1);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
- ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, GPRReg arg2, GPRReg arg3, GPRReg arg4, GPRReg arg5)
- {
-- poke(arg5, 1);
-- poke(arg4);
-+ poke(arg5, POKE_ARGUMENT_OFFSET + 1);
-+ poke(arg4, POKE_ARGUMENT_OFFSET);
- setupArgumentsWithExecState(arg1, arg2, arg3);
- }
-
-diff --git a/Source/JavaScriptCore/dfg/DFGFPRInfo.h b/Source/JavaScriptCore/dfg/DFGFPRInfo.h
-index 17aaa7d..e18ec06 100644
---- a/Source/JavaScriptCore/dfg/DFGFPRInfo.h
-+++ b/Source/JavaScriptCore/dfg/DFGFPRInfo.h
-@@ -164,6 +164,74 @@ public:
-
- #endif
-
-+#if CPU(MIPS)
-+
-+class FPRInfo {
-+public:
-+ typedef FPRReg RegisterType;
-+ static const unsigned numberOfRegisters = 6;
-+
-+ // Temporary registers.
-+ static const FPRReg fpRegT0 = MIPSRegisters::f0;
-+ static const FPRReg fpRegT1 = MIPSRegisters::f4;
-+ static const FPRReg fpRegT2 = MIPSRegisters::f6;
-+ static const FPRReg fpRegT3 = MIPSRegisters::f8;
-+ static const FPRReg fpRegT4 = MIPSRegisters::f10;
-+ static const FPRReg fpRegT5 = MIPSRegisters::f18;
-+
-+ static const FPRReg returnValueFPR = MIPSRegisters::f0;
-+
-+ static const FPRReg argumentFPR0 = MIPSRegisters::f12;
-+ static const FPRReg argumentFPR1 = MIPSRegisters::f14;
-+
-+ static FPRReg toRegister(unsigned index)
-+ {
-+ static const FPRReg registerForIndex[numberOfRegisters] = {
-+ fpRegT0, fpRegT1, fpRegT2, fpRegT3, fpRegT4, fpRegT5 };
-+
-+ ASSERT(index < numberOfRegisters);
-+ return registerForIndex[index];
-+ }
-+
-+ static unsigned toIndex(FPRReg reg)
-+ {
-+ ASSERT(reg != InvalidFPRReg);
-+ ASSERT(reg < 20);
-+ static const unsigned indexForRegister[20] = {
-+ 0, InvalidIndex, InvalidIndex, InvalidIndex,
-+ 1, InvalidIndex, 2, InvalidIndex,
-+ 3, InvalidIndex, 4, InvalidIndex,
-+ InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex,
-+ InvalidIndex, InvalidIndex, 5, InvalidIndex,
-+ };
-+ unsigned result = indexForRegister[reg];
-+ ASSERT(result != InvalidIndex);
-+ return result;
-+ }
-+
-+ static const char* debugName(FPRReg reg)
-+ {
-+ ASSERT(reg != InvalidFPRReg);
-+ ASSERT(reg < 32);
-+ static const char* nameForRegister[32] = {
-+ "f0", "f1", "f2", "f3",
-+ "f4", "f5", "f6", "f7",
-+ "f8", "f9", "f10", "f11",
-+ "f12", "f13", "f14", "f15"
-+ "f16", "f17", "f18", "f19"
-+ "f20", "f21", "f22", "f23"
-+ "f24", "f25", "f26", "f27"
-+ "f28", "f29", "f30", "f31"
-+ };
-+ return nameForRegister[reg];
-+ }
-+private:
-+
-+ static const unsigned InvalidIndex = 0xffffffff;
-+};
-+
-+#endif
-+
- typedef RegisterBank<FPRInfo>::iterator fpr_iterator;
-
- } } // namespace JSC::DFG
-diff --git a/Source/JavaScriptCore/dfg/DFGGPRInfo.h b/Source/JavaScriptCore/dfg/DFGGPRInfo.h
-index 3d07556..aa634cd 100644
---- a/Source/JavaScriptCore/dfg/DFGGPRInfo.h
-+++ b/Source/JavaScriptCore/dfg/DFGGPRInfo.h
-@@ -461,6 +461,73 @@ private:
-
- #endif
-
-+#if CPU(MIPS)
-+#define NUMBER_OF_ARGUMENT_REGISTERS 4
-+
-+class GPRInfo {
-+public:
-+ typedef GPRReg RegisterType;
-+ static const unsigned numberOfRegisters = 6;
-+
-+ // Temporary registers.
-+ static const GPRReg regT0 = MIPSRegisters::v0;
-+ static const GPRReg regT1 = MIPSRegisters::v1;
-+ static const GPRReg regT2 = MIPSRegisters::t4;
-+ static const GPRReg regT3 = MIPSRegisters::t5;
-+ static const GPRReg regT4 = MIPSRegisters::t6;
-+ static const GPRReg regT5 = MIPSRegisters::t7;
-+ // These registers match the baseline JIT.
-+ static const GPRReg cachedResultRegister = regT0;
-+ static const GPRReg cachedResultRegister2 = regT1;
-+ static const GPRReg callFrameRegister = MIPSRegisters::s0;
-+ // These constants provide the names for the general purpose argument & return value registers.
-+ static const GPRReg argumentGPR0 = MIPSRegisters::a0;
-+ static const GPRReg argumentGPR1 = MIPSRegisters::a1;
-+ static const GPRReg argumentGPR2 = MIPSRegisters::a2;
-+ static const GPRReg argumentGPR3 = MIPSRegisters::a3;
-+ static const GPRReg nonArgGPR0 = regT2;
-+ static const GPRReg nonArgGPR1 = regT3;
-+ static const GPRReg nonArgGPR2 = regT4;
-+ static const GPRReg returnValueGPR = regT0;
-+ static const GPRReg returnValueGPR2 = regT1;
-+ static const GPRReg nonPreservedNonReturnGPR = regT5;
-+
-+ static GPRReg toRegister(unsigned index)
-+ {
-+ ASSERT(index < numberOfRegisters);
-+ static const GPRReg registerForIndex[numberOfRegisters] = { regT0, regT1, regT2, regT3, regT4, regT5 };
-+ return registerForIndex[index];
-+ }
-+
-+ static unsigned toIndex(GPRReg reg)
-+ {
-+ ASSERT(reg != InvalidGPRReg);
-+ ASSERT(reg < 16);
-+ static const unsigned indexForRegister[16] = { InvalidIndex, InvalidIndex, 0, 1, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, 2, 3, 4, 5 };
-+ unsigned result = indexForRegister[reg];
-+ ASSERT(result != InvalidIndex);
-+ return result;
-+ }
-+
-+ static const char* debugName(GPRReg reg)
-+ {
-+ ASSERT(reg != InvalidGPRReg);
-+ ASSERT(reg < 16);
-+ static const char* nameForRegister[16] = {
-+ "zero", "at", "v0", "v1",
-+ "a0", "a1", "a2", "a3",
-+ "t0", "t1", "t2", "t3",
-+ "t4", "t5", "t6", "t7"
-+ };
-+ return nameForRegister[reg];
-+ }
-+private:
-+
-+ static const unsigned InvalidIndex = 0xffffffff;
-+};
-+
-+#endif
-+
- typedef RegisterBank<GPRInfo>::iterator gpr_iterator;
-
- } } // namespace JSC::DFG
-diff --git a/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h b/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
-index ea33f38..247274b 100644
---- a/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
-+++ b/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
-@@ -1241,7 +1241,7 @@ public:
-
- // EncodedJSValue in JSVALUE32_64 is a 64-bit integer. When being compiled in ARM EABI, it must be aligned even-numbered register (r0, r2 or [sp]).
- // To avoid assemblies from using wrong registers, let's occupy r1 or r3 with a dummy argument when necessary.
--#if COMPILER_SUPPORTS(EABI) && CPU(ARM)
-+#if (COMPILER_SUPPORTS(EABI) && CPU(ARM)) || CPU(MIPS)
- #define EABI_32BIT_DUMMY_ARG TrustedImm32(0),
- #else
- #define EABI_32BIT_DUMMY_ARG
-@@ -1691,7 +1691,7 @@ public:
- }
- #endif
-
--#if !defined(NDEBUG) && !CPU(ARM)
-+#if !defined(NDEBUG) && !CPU(ARM) && !CPU(MIPS)
- void prepareForExternalCall()
- {
- // We're about to call out to a "native" helper function. The helper
-diff --git a/Source/JavaScriptCore/jit/JSInterfaceJIT.h b/Source/JavaScriptCore/jit/JSInterfaceJIT.h
-index 7fdeaf0..48ad6b2 100644
---- a/Source/JavaScriptCore/jit/JSInterfaceJIT.h
-+++ b/Source/JavaScriptCore/jit/JSInterfaceJIT.h
-@@ -125,6 +125,10 @@ namespace JSC {
- static const RegisterID cachedResultRegister = MIPSRegisters::v0;
- static const RegisterID firstArgumentRegister = MIPSRegisters::a0;
-
-+#if ENABLE(VALUE_PROFILER)
-+ static const RegisterID bucketCounterRegister = MIPSRegisters::s3;
-+#endif
-+
- // regT0 must be v0 for returning a 32-bit value.
- static const RegisterID regT0 = MIPSRegisters::v0;
-
-diff --git a/Source/JavaScriptCore/runtime/JSGlobalData.h b/Source/JavaScriptCore/runtime/JSGlobalData.h
-index 5d47ab9..c02f336 100644
---- a/Source/JavaScriptCore/runtime/JSGlobalData.h
-+++ b/Source/JavaScriptCore/runtime/JSGlobalData.h
-@@ -141,14 +141,18 @@ namespace JSC {
- return result;
- }
-
-- static size_t allocationSize(size_t bufferSize) { return sizeof(size_t) + bufferSize; }
-+ static size_t allocationSize(size_t bufferSize) { return sizeof(ScratchBuffer) + bufferSize; }
- void setActiveLength(size_t activeLength) { m_activeLength = activeLength; }
- size_t activeLength() const { return m_activeLength; };
- size_t* activeLengthPtr() { return &m_activeLength; };
- void* dataBuffer() { return m_buffer; }
-
- size_t m_activeLength;
-+#if CPU(MIPS) && (defined WTF_MIPS_ARCH_REV && WTF_MIPS_ARCH_REV == 2)
-+ void* m_buffer[0] __attribute__((aligned(8)));
-+#else
- void* m_buffer[0];
-+#endif
- };
- #if COMPILER(MSVC)
- #pragma warning(pop)
-diff --git a/Source/WTF/wtf/Platform.h b/Source/WTF/wtf/Platform.h
-index 1698247..2d90359 100644
---- a/Source/WTF/wtf/Platform.h
-+++ b/Source/WTF/wtf/Platform.h
-@@ -818,6 +818,10 @@
- #if CPU(ARM_TRADITIONAL)
- #define ENABLE_DFG_JIT 1
- #endif
-+/* Enable the DFG JIT on MIPS. */
-+#if CPU(MIPS)
-+#define ENABLE_DFG_JIT 1
-+#endif
- #endif
-
- /* If the jit is not available, enable the LLInt C Loop: */
---
-1.8.3.2
-
diff --git a/package/webkit/webkit-0008-support-bison-3.0.patch b/package/webkit/webkit-0008-support-bison-3.0.patch
deleted file mode 100644
index c081b20..0000000
--- a/package/webkit/webkit-0008-support-bison-3.0.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-ANGLE doesn't build with bison 3.0
-
-Author: allan.jensen at digia.com
-?https://bugs.webkit.org/show_bug.cgi?id=119798
-Reviewed by Antti Koivisto.
-Make glslang.y compatible with bison 3.0, by using %lex-param
-to set YYLEX_PARAM and getting rid of useless YYID macro.
-
-From upstream: http://trac.webkit.org/changeset/154109
-[Arnout: adapted to our older webkit version]
-Signed-off-by: Arnout Vandecaeppelle (Essensium/Mind) <arnout@mind.be>
----
-Index: trunk/Source/ThirdParty/ANGLE/src/compiler/glslang.y
-===================================================================
---- trunk/Source/ThirdParty/ANGLE/src/compiler/glslang.y (revision 154108)
-+++ trunk/Source/ThirdParty/ANGLE/src/compiler/glslang.y (revision 154109)
-@@ -48,4 +48,5 @@
- %pure-parser
- %parse-param {TParseContext* context}
-+%lex-param {YYLEX_PARAM}
-
- %union {
diff --git a/package/webkit/webkit.mk b/package/webkit/webkit.mk
index 6b04ccd..c4b794c 100644
--- a/package/webkit/webkit.mk
+++ b/package/webkit/webkit.mk
@@ -4,69 +4,58 @@
#
################################################################################
-WEBKIT_VERSION = 1.11.5
+WEBKIT_VERSION = 2.4.3
WEBKIT_SITE = http://www.webkitgtk.org/releases
WEBKIT_SOURCE = webkitgtk-$(WEBKIT_VERSION).tar.xz
WEBKIT_INSTALL_STAGING = YES
-WEBKIT_DEPENDENCIES = host-ruby host-flex host-bison host-gperf enchant harfbuzz \
- icu jpeg libcurl libgail libsecret libsoup libxml2 libxslt libgtk2 sqlite webp
+WEBKIT_DEPENDENCIES = host-ruby host-flex host-bison host-gperf enchant \
+ harfbuzz icu jpeg libcurl libgail libsecret libsoup libxml2 libxslt \
+ sqlite webp
WEBKIT_DEPENDENCIES += \
$(if $(BR_PACKAGE_XLIB_LIBXCOMPOSITE),xlib_libXcomposite) \
$(if $(BR_PACKAGE_XLIB_LIBXDAMAGE),xlib_libXdamage)
-# webkit-disable-tests.patch changes configure.ac therefore autoreconf required
-WEBKIT_AUTORECONF = YES
-WEBKIT_AUTORECONF_OPT = -I $(@D)/Source/autotools
-
-# parallel make install deadlocks with make 3.81
-WEBKIT_INSTALL_STAGING_OPT = -j1 DESTDIR=$(STAGING_DIR) install
-WEBKIT_INSTALL_TARGET_OPT = -j1 DESTDIR=$(TARGET_DIR) install
-
-# Does not build and it's disabled by default
-# in newer releases
-define DISABLE_INDEXED_DATABASE
- $(SED) '/ENABLE_INDEXED_DATABASE/s:1:0:' \
- $(@D)/Source/WebCore/GNUmakefile.features.am
-endef
-
-WEBKIT_PRE_CONFIGURE_HOOKS += DISABLE_INDEXED_DATABASE
-
-# Give explicit path to icu-config, and silence gazillions of warnings
-# with recent gcc versions.
+# Give explicit path to icu-config and prevent ar to make thin archives, fixing
+# error: `x' cannot be used on thin archives
WEBKIT_CONF_ENV = ac_cv_path_icu_config=$(STAGING_DIR)/usr/bin/icu-config \
- CFLAGS="$(TARGET_CFLAGS) -Wno-cast-align -Wno-sign-compare" \
- CXXFLAGS="$(TARGET_CXXFLAGS) -Wno-cast-align -Wno-sign-compare" \
AR_FLAGS="cru"
WEBKIT_CONF_OPT += \
- --with-gtk=2.0 \
--disable-geolocation \
- --disable-webkit2 \
--disable-glibtest \
--disable-video \
- --disable-gtk-doc-html \
- --disable-tests
+ --disable-web-audio \
+ --disable-gtk-doc-html
-# Xorg Dependencies
-WEBKIT_CONF_OPT += --with-target=x11
+# X.org dependencies only
+WEBKIT_CONF_OPT += --enable-x11-target
WEBKIT_DEPENDENCIES += xlib_libXt
-ifeq ($(BR2_PACKAGE_HAS_LIBEGL)$(BR2_PACKAGE_HAS_LIBGLES),yy)
-WEBKIT_CONF_OPT += --enable-gles2
-WEBKIT_DEPENDENCIES += libegl libgles
+ifeq ($(BR2_PACKAGE_LIBGTK3),y)
+WEBKIT_CONF_OPT += \
+ --with-gtk=3.0 \
+ --enable-webkit2
+WEBKIT_DEPENDENCIES += libgtk3
else
-WEBKIT_CONF_OPT += --disable-gles2
+WEBKIT_CONF_OPT += \
+ --with-gtk=2.0 \
+ --disable-webkit2
+WEBKIT_DEPENDENCIES += libgtk2
endif
-# gles/egl support is prefered over opengl by webkit configure
ifeq ($(BR2_PACKAGE_HAS_LIBGL),y)
-WEBKIT_CONF_OPT += --with-acceleration-backend=opengl
+WEBKIT_CONF_OPT += --enable-glx
WEBKIT_DEPENDENCIES += libgl
+else ifeq ($(BR2_PACKAGE_HAS_LIBEGL)$(BR2_PACKAGE_HAS_LIBGLES),yy)
+WEBKIT_CONF_OPT += --enable-gles2
+WEBKIT_DEPENDENCIES += libegl libgles
else
-# OpenGL/glx is auto-detected due to the presence of gl.h/glx.h, which is not
-# enough, so disable glx and the use of the OpenGL acceleration backend here
-WEBKIT_CONF_OPT += --disable-glx --with-acceleration-backend=none
+WEBKIT_CONF_OPT += \
+ --disable-glx \
+ --disable-gles2 \
+ --disable-webgl \
+ --disable-accelerated-compositing
endif
$(eval $(autotools-package))
--
2.0.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH v4 3/3] midori: bump to version 0.5.8
2014-08-01 1:33 [Buildroot] [PATCH v4 0/3] Add libgtk3 and bump webkit to version 2.4.3 Hadrien Boutteville
2014-08-01 1:33 ` [Buildroot] [PATCH v4 1/3] libgtk3: new package Hadrien Boutteville
2014-08-01 1:33 ` [Buildroot] [PATCH v4 2/3] webkit: bump to version 2.4.3 Hadrien Boutteville
@ 2014-08-01 1:33 ` Hadrien Boutteville
2 siblings, 0 replies; 7+ messages in thread
From: Hadrien Boutteville @ 2014-08-01 1:33 UTC (permalink / raw)
To: buildroot
Signed-off-by: Hadrien Boutteville <hadrien.boutteville@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
Changes v1 -> v2:
- fix typo
Changes v2 -> v3:
- fix the need of librsvg for the host
---
package/midori/Config.in | 15 +++--
package/midori/blocked.png | Bin 0 -> 522 bytes
package/midori/disabled.png | Bin 0 -> 510 bytes
package/midori/enabled.png | Bin 0 -> 639 bytes
package/midori/logo-shade.png | Bin 0 -> 23862 bytes
.../midori-0001-remove-libnotify-dependency.patch | 27 +++++++++
.../midori-0002-do-not-use-rsvg-convert.patch | 39 ++++++++++++
package/midori/midori.mk | 66 ++++++++++++---------
8 files changed, 114 insertions(+), 33 deletions(-)
create mode 100644 package/midori/blocked.png
create mode 100644 package/midori/disabled.png
create mode 100644 package/midori/enabled.png
create mode 100644 package/midori/logo-shade.png
create mode 100644 package/midori/midori-0001-remove-libnotify-dependency.patch
create mode 100644 package/midori/midori-0002-do-not-use-rsvg-convert.patch
diff --git a/package/midori/Config.in b/package/midori/Config.in
index c3b5a1b..821b306 100644
--- a/package/midori/Config.in
+++ b/package/midori/Config.in
@@ -1,20 +1,23 @@
config BR2_PACKAGE_MIDORI
bool "midori"
select BR2_PACKAGE_WEBKIT
- select BR2_PACKAGE_LIBSEXY
+ select BR2_PACKAGE_LIBSOUP
+ select BR2_PACKAGE_LIBSOUP_GNOME
+ select BR2_PACKAGE_SQLITE
+ select BR2_PACKAGE_LIBXML2
select BR2_PACKAGE_GETTEXT if BR2_NEEDS_GETTEXT_IF_LOCALE
- select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE
- depends on BR2_PACKAGE_LIBGTK2
+ depends on BR2_PACKAGE_LIBGTK2 || BR2_PACKAGE_LIBGTK3
depends on BR2_INSTALL_LIBSTDCPP # webkit
depends on BR2_TOOLCHAIN_HAS_THREADS # webkit -> enchant -> libglib2
- depends on BR2_USE_WCHAR # webkit
+ depends on BR2_USE_WCHAR # webkit, libsoup -> libglib2
depends on BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS
help
Midori is a lightweight web browser based on WebKit
http://software.twotoasts.de/?page=midori
-comment "midori needs libgtk2 and a toolchain w/ C++, wchar, threads"
+comment "midori needs libgtk2 or libgtk3 and a toolchain w/ C++, wchar, threads"
depends on BR2_PACKAGE_WEBKIT_ARCH_SUPPORTS
depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \
- !BR2_TOOLCHAIN_HAS_THREADS || !BR2_PACKAGE_LIBGTK2
+ !BR2_TOOLCHAIN_HAS_THREADS || \
+ !(BR2_PACKAGE_LIBGTK2 || BR2_PACKAGE_LIBGTK3)
diff --git a/package/midori/blocked.png b/package/midori/blocked.png
new file mode 100644
index 0000000000000000000000000000000000000000..c21a154260de039ff862b3a88120f39e14c870f8
GIT binary patch
literal 522
zcmV+l0`>igP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60
z0RN!9r;`8x0l!H^K~y-6rP4WQR8bVh@!y%52$HyfiV{J~pkNUT!MI=wv3AKwCXgbH
z+G!&QA}Cl0LIf at Bf{_rM;D$CL;#LGfQbtTGVuGL;h#)VMYcVg$WU=x#m-Ei|{qH;X
zyWt-z-LpwaJ7_W%Wj|Ka#R_B97MaU9i#7S@Ke(&O^(gzk0+3!S`KC?Mg$r1ZX}lFS
zO4`waU+9;N*lr>^&DH@!K44!CofYm#u0 at ZZ3*$6-EIHJ0_-OR#DCNa2BwSSRAi8~7
zGFQnt$-%rDK^Jz{Tk{gK=y7w|eXKQWP;v^Ha3(4S(vWQ4TgbIDD5XKo4dx9pPjmB(
za55?eQdJ9zxhDsNPbetqfHY`_%zGS_Oe#1M70*EC074jV{DT+uWA&x`_9`019*is6
zAKgAK&ZRHkUoOU2wN2(T*5Nmrg*TED^GW1sb>bDKg|?`eDnOJ?3RiPrGe(pgTV~#g
z;aqbiDyAAoV8Sgt$*VRsn-|Q(T7~D>iiaw0&-a!*<y6%o^A7F8S94A)O6H896=P}+
zM{hlW6@UduJ^SO!T94H9Hkwxj<dCAwC7f4(q5YcNh_c#h`u|#g0S#l0Q*|oAdH?_b
M07*qoM6N<$f?P`ECjbBd
literal 0
HcmV?d00001
diff --git a/package/midori/disabled.png b/package/midori/disabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..a1c8d45c27e4dcfb267e5587969d99cf46509bba
GIT binary patch
literal 510
zcmV<a0RjGrP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60
z0RN!9r;`8x0kcU&K~y-6t<pJYRACea;P1T|M?&HPBFGe41{D<(9OAfO3bA&Hc7mz2
zw6Spk1J*Vcc7lz_h(WAG#0?CQmw_OOXrYA&32r1LQIn8o@%{{NCfa$s`*Y6u&%NhH
z{!znhh}jJb)T?~|8!l>nsIzg2OE`;Cc>ax>G1t2IvO?e~#dbO)`XbI_Ev8eRN354Q
z>A+OP^@!RO?|WH{AYmAlAi9`xV>JUi`LR4sfk7Nt{yAl657lDmw`OlHEOEEOr at YMq
z=deGtHJQ_G4M4(NlFivvuV_oCC8P=SBb*8Ng at hT119le0QQC8&>q<Pp3Cu<u@8;H6
zwu?gGGz8uvo~IhfoADBdF%fg9n}_g=ePQ|I4S|$Lq3KWP!Vq>~yujWrlHBt8Lwt`L
zF}`L~%sZ^XoNSb5C5|m85uEkn38ok6>|rv73KO^*1lv(-<4B%dXAABG%#|J{n>L;j
zCk%#-kJc&Y$mN7L3F!#;(%c0%o$?qRKY1a$yw548QqnlfzKr at R4(<vGtPseF+{V!s
zhxbdI&XXG{<ZC-KALzqne8bm>iyt}JO8zhP2jyUZXwB?JD*ylh07*qoM6N<$f|r2i
AJOBUy
literal 0
HcmV?d00001
diff --git a/package/midori/enabled.png b/package/midori/enabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..c46668af8f76b126f6ddd223e3e9cd4dd72424ee
GIT binary patch
literal 639
zcmV-_0)YLAP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60
z0RN!9r;`8x0yIfPK~y-6rIJrb6mb;CKW}zs9Cb~hBG{n3NkN6)DiJ$W6evh7LXd|g
z|J9`~oucgEElMb%jZE+ou@$acMs+bIx`e0Npi>Zq5fmC*J2N}`Iy5`1W~Y9aAH3iD
ze12aZPx!~_xxvP=?X&{eMsYE7if`-n$=bq^J8U)s>w>5Z0d`n+L2vq|Kl&ua*S`dv
zBbW^dyG4{F!Z~0Au%gNf5orQ#1>(Rm!ZiuVEH8QQ=SC<Q01XNIrNA46OF$i}V?oJl
z&JB9qGXri%%=4N-7Jx>S5jA+*xYeEqFvA!-09E9?VH)?csb3$fV+OW84B8%M&Y&b!
z*%=AK+s_TSSE|9}RchV1Jp~*Gd=VYY_WP6Fw`{+{8sR7kfO%+&`Up<b=*F#V2p6O*
z$FlwYWOAH15Cbh#33vw>j$5-2petRw%@unA<RHQlW$nxkxj6vOs@V^SLOv3R>Qewz
zQ(bARO(b{)>;m#e$=EwH<iD;YQ#AD_v^<Xle#x2uR)Ag+nFkVz&IKi}eR{a~p#pcO
zodZA;SQe~_NHBY*umo~B+>3gIjML;Feteqm75M0FXFC$y1w>RX&h!_)RL_96&+eGO
zbeOZn{ZY3m`gx)*VFl$!AX@|;WCz^qmA6%^oE#_an)W<GEAR=U+$&{NF)}~`SS&hT
z$Fn{P>k1-?WlsS;s~(hx#ageg8U~217362}cApIH2gR6=um|L)3ZqVwcQ$tdcWwWF
ZpWn~W&Evb)r0M_w002ovPDHLkV1lr|6ubZc
literal 0
HcmV?d00001
diff --git a/package/midori/logo-shade.png b/package/midori/logo-shade.png
new file mode 100644
index 0000000000000000000000000000000000000000..f23bec1ff5609c0138e8592d5558de0975fc5f51
GIT binary patch
literal 23862
zcmXtg2Rxix_x0#q^xlIAqqnF*29Y2UM)YosE_#$`(OZb#OOOnrj2Z-q5*dPsZj=b3
z6D=X+J9FRvckkTtyY8IlJm>7Q_gZVOBmSYjHWfJ=IRpZs(zy$J1cBhmfWNFriNSxN
z*jp_J{~)%zuMLCz!~I#(RrL}A;eqJD)QtiQcDkMx at SB?MUn<e2nL9cfBWkghUHjX<
z@<~C?h_^<M5z{mH*=t|<A|u6<#D$jeKPSGf<-_NTA{A~FiX<Od6Q*o3w9L)?E_0oL
zYIyPDy=U{|J=)O=Z8*~;HnX81?$b%g?cys+-=d_rFG+v<(S;kfG^B))!amDAc%CwB
z*dCU7UD*7+e?$jafy&QjcAhXW*BS88knY)dc}WQAeAOSAK|stQ8CM-`O)-*k|GLGA
zc?k7*XpB;C6b16V7(vKaqux0d1$MC<J;zYOny{aPc#-%KJxoIm-bD6piIvXglGiQF
zziu82LPP~z6PX8QsPAvP7lI*VsN!K|1U>o?^SGb=Ne#>dCKNr}-<@UkCbD*C(HjZ5
z{U0>wNeKhgV9?Ba?t*0_d6n+DjBk||G&{1giTHKWt*DkK5KI&ldOS!wYK~hxt*xz|
zHc9Tq$&Ys-^_)Fr!q#&kbPXm at 4@7DG7-6KK?Z2zbulKEfrJpoHmu`<bE|8UE#-T!=
zuCWk##l*4L4<GPFM+?%(@Q_^NI)18LRBV^j6<8ElOR)Urv^jT~Et~*$+`RwntmDDX
zQn$7Ag%)^I^+IX$jPnUUVJiU-$ZvAmP<LP7<L<NF`Kn(WFw#7=hfb8#)c%;pPKuuU
zkcDf at nh?IpE@838qy|s?-wFIW|Hh}Mvzvp}a6?hufkAV1J?xTp`O32KXNYV<o9i%w
z4<Ns9m}Yg)O;5|O|A>e#AtRK931|MQMx7f%xO$QTck#!pu+`qrDPYF}12eb#?HcGk
z3jcewCN-Dx%-Yc(D=nDhaNG<r#5+?QbJGLwH?vOqmGjvi_I6Dl8E!yE2jd>DF`3;k
zsR6D&UF>5xp>8^VQ%g&vWK4WK*)8}xb=ZS@>BkDiqi2&OT!A)U)1vZlPgv%AV<cRL
z+QLBkAjfz!&xQZ)vDlLmN0G*U#C@VQK5ZPe1s?KgX=xSQ>L(2se}g)2kBEraD7eLQ
zO=FA at pG2qP5v|_DceI!TWzW_<>nMI5 at GYMYjMTB?U%%oHuo%JnGesVI9e&qzkYeqq
z62|{64+*<1C6)eNwAqUe7im<d`%B`xbIseDjnFfCgWHJjHWBx%?%cnR;rz}>9?gRZ
z2x^Gdz{?i59;mpV{Q|SLQ}m0;e#Zx*I=!?MHn-PXfO`|0G$Y~WyAw^ZaY%?7hnjZ9
z7g3DVhZPCFG}5`bxv{A!V$GY~QIf@@s~@5%+I%<Zj3!&~P8et}o6Cg$eTR+Yu#>9O
zlTzLa`Ryf?jZrajmQR<AnVK?&@zFll;01pt#9vS9_Ek(qJB at xnKiT$=x@3h|+a-lo
zc6a~N_NO)?dk*%2;>EoRV-!jevdjy)glJ^m^3>_M7Z##gTyf?k#aeJXjO%foRdi+U
zB7QqfD~o-x2vcI1w1kA$_?HObcp8}qh&1D$j~_qY)`ZpJA9PDhY%jvs&27e!3~6@>
zxvnjpVm3FOaidJXwM09nNe-kq=bb*$G<a`R?NPx6_CpV|Q@N)KsRMCO*Fz^iI>>TI
zh(SY!O;d(VHYqH(_vUoE<S8d4?9cDj)Uf$`0f}aJNb^eG1nx8pGKnNKUhBa~zDzsr
z@Dm%DDe%g)xT}-Sq2RArIIuZU_2g(>Pe~&S at 4!@VLbcgxwCH7ug-IrDq#!boE*^G`
zwkt;R)CF>zf;o8k;__KjYwLBk<g%_VPOCa})#o+uTfwI_Se99S+EA<XR}YTQ&WZzm
zouiUzWYq6S-MTeXEA-hl4#^$<k1V@|d8jez^wi(i*SDmr3+v1DRrpT`*T$E^k87Ch
zUD8=n`<<838Y^|&K|gu5TS&gKf%m4mBbB>DbfCp|?%2lg%_)hOgSx!Bnqqf%*C&`4
zTV?|NKAbDv@;oU{AMf|X`1p9;&U~x*{tn|56Zo><Na>x}th?#QihMzw_B#TQ0<uRV
zA2*Il(P*D9nLkEgX6h3%7M+2#8>7YAr4N@?h7I`6y=2%fr!V%qi!XRio`bi*KKXsH
z@=);QQ(5~Rs+>2pJ|Qy?cxcofKW0``QlgEA2`jWvwR&JbyfLhjP*E8Pj$4Htm(C_!
zmA#xc-UgxfjVM+19GSSZ|8FU&VcHhak=C4GNWfzM^XE at BC#M^Vii*o;9a(>&n4dp|
z^a~ZE!LeSvqddZL5rypt2*V6Nf29SEK}n^8 at 6WNzbp9^do^8D2TTk6|(rJ>lHlUK#
z at IU%#m^H7hZ#OME{FBdUnDIg+=;Ht0LAPbC(L at TqR(SO0+h at Cm-Y&*J0c6rZ|j
z8jQ`(#=m_l26kd$BC{+VnHO`kF}nKq&rv7)U>)svEP3>YrG0G2v_D0%mKu1v;N6Nx
zwJ6jTez-hA;7yKB`TKlR6BAKjGY1pQcfBsp{R$NQ$Y-I`du6m>3FY!Hk43Bw6PhNb
zjYq*67$wifYh6OPh!5`FVqrcC>iW64sU8p at 4-T*e#g=OxLWgH?V8H8pADOPcw_jzE
zO;YG<6X-J+8=G(?`>{{B5ekfiCsEFG+wnhbA-C7QJ#jSE0$cE|qXTUE3Q9l==3|~R
zTu}8;X!+Y4!?vIk;Zb7&D(T(Ye<ekV)<y)p$jF2=T|sLZ5xZ_uo}E5P0UZtS{h**A
z3+4v83jD|Djd$QnxD5y?s;)edgmg0}_7|-@^+EFz>MaYuF+w$)K(F}hcWj4s|Flrq
zQ-Xt=$Se*fk-eM3=pm`1lDs;YYVYftv9bFA9Nr?8;8Xs>_iwedNb`CasW}y!^t09i
z=*II`9{Tiw^aC|(B28oxMVZ8FHkc67s%JS)Fy&S{gVO{RvuNu<TW-qP?+~<lE?v2a
zQgXhL2T6#-UhWe&!GQ<lHVH`!@1GFW<KttS!|(k_clYMdWCRbN1KRX8ioAQta|oY<
zm9 at 9QelSo_m=Q0e63pDT+=HWz5FCn@r^n;k<^TueLpmv_-N>`~$*@?gNoSyB**LPl
zg_AK+^VNhiL!u_AGG;E9hC&QpzkcXgbOmK at eEX*Z+fNu=9sSj5dO#0m)W*ujX7+{U
z!Vls}H0E&@*lR=6)zt;YdeZ;h4))waELK-AN~1K~M&g$I$FER%kA<GY)xoEcSIqH0
zRSpCHhEK|qGvOA94&8NTtq<GBuV<IT-qSQ#he25=6 at AhKL7DpGAoXd@n}?4O9}hRB
z&*=!XDTk6jC0Lu5pmQi~D9j+^+O+-Bl^Jd%hKsZPY_7oNh-t`gm0K at rYhq+8o!O*v
zDH~^@3H`Z(3<+gC4CJPJ(BQStj0MV1z4vZ0-O`2a)9h6!fjIl=jYD6-!58_EzhdDh
z{weT;<df4=KDzi@J`sYS5NI%)fVSrq@%KeVMYB>e!NEKJX~0#z!$f;&1!cO3MeIKB
zy)T@(WduKQhgf}PF~?i(mepfV8eFyR4z8t<>5UxTs|{i4 at g(@!>;vsyN(H6QZYW)V
z(K&?_f<k>Eo5iwscUg&lSgBu2-o&jK*v1+;3w{7lmjmn at avT}m{ORKR9^m~}40ojH
z{QKZf$koap_9Is`pTR>}aMmBe;Y-!1tvdYWw=ZpyN<p>+dxG?AEfkl~e6vu-u-wgV
znng<<4V|uEJ9^4-`xys#N_~*dZN9SBfz?B9^U!k0U4A-Hrx-JqRxdEB#ryc-w}mdF
z0aAm6_xAQCgDg}mc}h_)$@qrh$NuiFpS#T`>;mVqbzD{!)7z_m@}7%*xLG44e3BY&
zySTbu1ftJwtU4l*NN)R``x5V&tMF>#`|YOjY)fTT-Wa)n)WQupAcibl*;HWfU3aZ{
z4#fbNk`;B8SGjV$Inm~|5;=MQqO{W46AQ|;q4APX4sY7sPFiV?cdVi0_`gLV`%y#k
zq--x>d<|SZByf1Bs9T1WufM<DY@;KiNVu$hawZP_5JzRzxq5rkjo$v(Iazc?4_TaF
zTKZ>7d%STYSNDBvoGQ8N;_APFni8^X^iWP=`tdV}Cqb2~X+mnPNdx{${dGNQ-<z4{
zP=;k|Qq!#Qsi^_Sn^x`KL^t#c>c6RH#TD_F$;*B|K6H_kkvUc!m?=K$e4MrB7#bRy
z{XBY#pF=sY9<zP&{#wsGo);0o2_{WQTH_iMgET%9ktvgSHJ<Q?LJqUS06p9aI(|Lb
z6Gq!pES&JG6p{b-hs=<}uhICQp`H7W;U|ue_fW#x-lu;L2g}<n_Ed6aorW@-GaOm(
zXF+>^tzj&SV~pk!GW4rNGqvxgKli#dJQ-~t62dX6a#k?uKQoBed6Oyevga2Wkq-_r
z2Oad10Bqvf`t-GXcwDJ0H1--dwIh0VX?V at Mn<~6I0dBwmwS32b$r43#7_}y#P<N{)
zz-h=b-wRacYHDtNLZ#deu$O+3vh!L2;j*W6?r^Z??Xciik8WzhC&T#5ti6}LwjsPo
zs=>7D+REkS<=tr`h^1>KFE?1M>X^Z}AHP=Iw_M7~z^viQs0wFib8{x<5)Nk^OyNW;
zD()%T?}%PrUjDQF^E^@sl%p$9(%=I#BFR%y1NF8ai3^kh-qtXVu+T?NA^BepJx)qa
z4o#9AXx1FsII>;)oN3bN5Wju-TRNBW>!!^9Z#l3kEiH0l7|BBY)m*2dhP?j2*C3vo
z`}^G<xF_5SJg_l=PkKrWSRtCSBx6SM<?YAIG~1r6YMH8EFPjXfX^OD{0nKi|vkGHa
zecC;}-JifHQt!L@=y7ySMy+nugmR(9#zCNR9E{ImI%su(s`KCjh4FJ4lI64Wi;LSg
zKTGaN1Aruo`K1mKmopR5p=<HLCV;98kw{o-;ZO~^#ZOq9lDn&YDmnaZ#YC+4 at K1<I
zvkN1WxYZ8o1tU2TNYnRcKYJ5KslWZw40{gB&nnn?<Hb{ZkO3qB_#6h?d*=0Xtkf@^
zpA*0SE3&psXy$$B1*aZmQq7 at -*t95NEwzHza(HWb`Kl%C7!TrZyd;j1$`ZFu0g$YN
z?K)=T$VUUgJir0~_v0)$9Ikw};M3-}ot1eMDp#oguafky(jC6E8A=<Po=4@)6!EM!
zP-I at EADMc!G)Pj_aX-c5khPO%pBs~Kc at C`5TaO2y5$K$vqV-M27M@1vb-H-3cu&EX
zy%P^^y9-!l*(P<B1K`aqTC7{ogG0>a&U3AJzAUvTL0vNq_9Pmm!5dpFSado+cm^|g
zMks^}uYTTT{58MM&)wbr&zT~YBHd#$RGYqRxw-?!Av+!+s@!Kkj?&U-ag#TedR--;
z6STXB?I>;uk?M`)r;Bf^bpFRI=)x1K%I&|mU at GV8&X0tB6C|u1VCCSTyqDg at -QyW~
zJ$?cpo at UqScg8f^SugOUIi;9_9_6oqCBOCTZ`)=LCvB*qL5B6__BQ*fV(Bth`p}Q<
zxStq_hW at t|6+}t_d*8Yq=zU`)jxL#$h=+Y&gQybOL{FZ at e6+2x?&flL&${DQ`4G+s
zo&pY53&CZ;M;ylg?s6LjyA^sa^QHK<=c%Z0`0coUJ8mXZ-3^eVyR~4S)rR=il|
zTRr8Ext^Cy-W+mh%#OPv?{TetKMg{EBu^F;<OYhza`tI@4<1~9Idn_Rq31zm*-_g7
z$gY1jid!4GeJFdx2kaUKp~bonvr0=#uR(qrO1qYi3$=JIdAMZ9(ljZq_CyeP%dmx#
z(1y~4SI9A?^V@>$G-<FSnr7m;4%pzgZyA%9DOoQZS;vtX+vi7rl#8COvnHjc=7(aQ
zK<bkE?QVeK>v>41IbO`q&;KLt`G}Yb2netThrjZE4467C$Z(plV^%L+BX4Q_^%hNI
z4Fd+i(8MI~S4{+Ny{XcDAabKD3bII(I;dA&tX4d0J7JA?KrX$V4K<BSW|ud+cglig
zhy9?BG<F2sg@jf`1Lpa>|NG2c{>YQ<X&;g=Cu1`1U-*0sKS6?XhZ`Csl`oGc5cgp+
z12Y%kkK4lE9luB_#eU~OC|R*I`0tw4nAj>n-PW&OkEy{xtbn{iGhW4NPodXzGZCEl
zxn|b}<T&48M;{$6NGp|9RhG<BHVCErw>Z|tFoEm2PQxDdp9uonKu9NMJ>VC*FO_Ri
zj at k;dX_=3v-JYub2*RiRivVG*R&Js6Z+Y0UqR75|lI`Z#3X`s&=2gb43aV8Q5h>Z$
z8P{n at y#hMByw}K6IF%5_zIF8D)!z?)pS9@=nt-}@$U_ at Sp!N+ZYENn2;->!K!L_qL
zNrcIgAdJ6)d8?pM&$t9z!iR6LP};2yB)_HnIRegMUf%b;kY0lQB3%eh4#4Ga<6-^#
z>BmPM0sE?7{J;UBq at uc14zIIA+>IA&gxZ5i|J?bpg>WQFrD-CURBAi3haF2m`#$sQ
zd_cjg>+Sl<2eFtC)zmj{Ztht*bRL{a5QO_|e8JW6$|<_>07lKHaBJ)0KY9iDcfc7j
zkN at duTQ)YoePVZUx|=c#z<-2f<rxn>lbHYu8(WYXd{P|W#C<K4laq6%-ZpCWNc28l
z7}`|*M#FVP)q~=JcAt%5v426O4}Vt#Dtm-EbwVIOm&(=MyHR#q2CYg%Y6B={%3^nr
zu>!5L#+ZeJT;?SyLJ*oOSNHeXZ8^7@<+gaM&G3KNg9KLX?c&t4v$Jk(2dTo<acypQ
zRxYk9y71{7Q|@?JedvY1wtbh at 8PvXphj2t7CML#TYT!Mk4SM#h&6Fd5$U#C@7Ty3x
z0>VO5Q<KRvZrYV-W-AG-aK7Z}`>U&~R1?*-5@=LZ6gHhd^kv+$f#LI_A}+VZ&e=n*
zU_q`An!HGAY1gc7f*$Lh4{dD#P5t+?u52KaynOkRG4<t0?Bij`^6$e{M1K;CeK!uh
zNWP^fW8zP{TZ2dn&5x7IGhLdWPo!d(Ym at RdBQ=YD3M7EJmqR~pe{g7)Ie7UfN!E4h
zmP;mFT3@c%M&gqw0$>-3Z3GH->;>>E{&YMch1C4uPCo3LJK}O{vbw=#Qh55UHmMnr
z4nN%!h&8dz7KQ}zY$spd(?8 at quo;V?i%<*ikXh}Erw1WamRn&8sY at JOUHYz=W}^-g
zG`p<cg|cqbRT at 7TE-(XHH_eMF=pzN~kp8@Ua>~kom0-ubkjnWUF#s at Jr{DU0!{MKt
zoSfIFVABu!<2$oxr;!BHlsGH#zF|`^;6CKH5ac6I4k%_V?(B2(^OoIWwx#X5d}%*(
z{3NYCPE`P+0Mpabj<uDyo1mcu$FerX(TA#dbWjw*EN0P at EA2E4)uSJG1?Ptcyz!aD
zyy)sn$f7NxYiWP*ba%eJ)~lL at jE$B|ebq5A at OOV+Whf_8p13~%loOSDDJ{KX4CG*j
zUNvFemJFIJ`fh-FQ{8w_B!l)fn`kOt0w6V at O`pFl7UWX7ftkm6lpuo0qj3@RJ47|R
zZs$f0X(_4tDsQgtRZ*og_w%8wnS?SM+}HywaioTZhIgx6orKc(b#Ul`_3hVAU3y)7
zmKiW^n7L}ajXL6nlnVLF=p{fQKUC`FTX2T9(R^6*&6z!XQp{7<njiYW)l~%GiO-gt
z-84XDp{J*3#0EPP+9!1=toHR0S_Q5UNz1!|MP*JMjLuPjfyE;@kj=^YL<qrwv3Gvk
z7B?{x8l-tq9E!fkczzx0>t&XRr3nyQAd at Pc@?YoE)z>%fVzB20EWQo(p{lCt at SEX-
zT-ps~`yIaq6WzXH4!*Rz%1ODoj4?yd0hXy+^H at g=)bE`)LxW)tFJk-26;=2ftxJ$o
zz<altRV?V0KJ5AZJ5bNmQNYaHyxs05nD~R+mrc1fZfS9gG>QFOYwy&0Ifse={iEyY
z7^%s2WW_}kpx~Itm8tb(8~~90q(YzEsysK3)!=o*zRT>$IreaoG?wEAd%vddniu0#
z^mHJj8SvORz{ob*ReKA;aNYRJywcmC{O@(_s}8yd#FK*cvd~jWPREC3Fh?54Twa{r
zzovZ9LxR_NO;A2d+_aI9UCzyGxF5=t$imHCmrJ>h{nR*IIIav}`<n<s*zq8sw`hwS
zv<vFOnPz~F$>X_6p;Z~kSKeRj`M4QJS30w>v)?Iw7{0XM>Nd&#^hP?r9+|p%xREd;
zK<3s&^@GDfrdbUDZUUv?Q-dqO+aOt^?mecI&PazS_pVG-J;=uv|9N~E7}C8)Pr7Fd
z-dz?*G}j@91VRO098jnPAdM&(2s0(7P~=rQPiTzo@#X5CqEP4V12g{8+gPa~EC=%j
z;fhy|NcmGB0-{w$-V0!U1w)I~yhzYWrq2M3pcIU`!tcQWTf_+4pj2+Z9j(2+eE=z4
z>NGD at CK1#I_v>Yz1QMB_<F(3X-uYGAM>jT`q%_cgoPeRqEh-u~8olj_*i1EohlWC#
zs`acp^jQF?qP})5EF$hS*Hm1GPR?WD=g${gKqmkb4pye(8vXb)pcI9wAG-&@SvJ9M
za^2&*B;oLCW7`v#`&39j+^_&`*bn+pm}a#PtOG2JUSq9tH01)=sJS7vT0d7b>oR~(
zN;Y|D$aq%Z*B|A9fdM84 at uC4Tt+SLep${4a;oxMp68v_}kr)!t`LI5c&nYqlP~+<A
zDv%sfI7anY>@AL@<4JLZiB&#`vPYz!5)zC90QBR`wo+E>19Fu>+=!2lZ>&2qL27vj
zgJf}^pKhPzKt1P^Ly$6;+k6Yv`0JH#Vunx#^Vg1%y*$cX6I7b(|0laAWjVu+*FnW{
z`S)_!3Xz}qKA`0&@lBwqwl)bkxLe5T9Uw{%4e4NIm6`I!gZXt_tg?MhF=2#)i4;-2
zJOG*P&Gf{YjoK|H53a7D<ns#(WRxnL!<4!H#ejf-4C^wogX*OWF+7y&`Lldm0-ZeK
z;9k0B&#v-Yh3kP2`5cak0mwxGSwtd2W!U;d&#)Vx3~RDl#WSNM2N=x_;EXt;oLhBR
z4wx7Bk9W85h)GD~K?M2b6j<|Oq~tsocLLGR4-cRG at LrE`YhU($#FvItRaXM!DbUSr
zX9@2(*L2?@)fWzzR8_U2r(&t4p(Jka`->}JK}}sem|yID&jnRMC4H7DdFq_AFhoa5
z{A4NgOrhl^Q5)K3N{^B&X%n12`DvC8a5N0yCkBvfIi}s-YxinQ(F18d%;ZFX>A|~1
zTi_rOd&_!a-$hqHu45C;7c84TJ2{zr7SuWb=pvx3-1rAv;0fQgI(POWP30x)$13q&
zUUsrY!1%^XQCl?Og<7tx_5foL1O*3kDzxVEIM;qybzveW;!p|t=EX_dCBl_@8{=a+
zf-5y(Dk2ao#HotN<F|dFPI4w^Z)Q5SMMNO=@$~qRKrr+%9`<Lc&EzMWZ*li=`?UY#
zhr@^mRGtsuI7iu3?%N(FF&eOcY^j6&8G?zpNVlmB%Y9Q-%YG;Y0TcjN0g;a|YGZjH
zHE;`>jY5$@&RA>V3`79zYxC1Jgf0fnelVieNpB14Uut_oFkNRYZ|48*q0rxM3+Aa;
z!-%z|_}r&;l`WNkBZ6=o8DB38m*yf#t(ZAxnp<ABX@z3QAoEF6L0wimGYwJI<X0X5
z$j{7}jQ9^p+>u~u>Xd8;5<A!}Eetv2*^~XnuC;10qJRU?WzYtgVgs*pZYLOsunkX-
z5ZYA<@C#n-H>SCo94dktyQZoAGkYBLa(I@|&!?rWy)E|pHa9r1Tf6$js_s8sqy|*K
z0{lX-=;|s5BH&6}Ec=37mwMGU$rf~tOx}mImrol|D49`GK9?*}C)#Zo<Z{h+d`c?V
z2gE@;+{kVhuYF&96V)hv;h1gX?fup3vx5CjyM@?|tr1;-0f9mkD|zZ9p|C#*&?Nw_
zDZ36gSF~alw=OGCsPRAA;lvD0gIvKimIfINpk4uz3;5sWT{fj`jBQ9r=U)Ht>Y)i!
z0N;o4a_!`+U7~>*cF>!1efz619w*1AJ4pQ*O=`%_4Sf(Ctc0t!nSJ9QYh#<>>e8qu
z_DQluB~;YZ#Ezy{#JX{&LJS`OaOa>!2W at 895*NXGKph<+jKAFwe70BBE{2M~1%@02
z&Ad^G+<wA^{5~03*|oU?m+EO3J}#_ at nA87Si~AA=GVIi`KwqQQE<$)b+sp)_oyp#A
zrE^}c&IU7h82uiFD}D-x!gp3q&dck7+1Pm7w*#=$_N2W0W8l3U?8~9V2_{eylI=@J
zjP=5()P|9@FFn>l>BVL_LJ1!P{R6B7;qiBgsRQq`4^BS-Io}$QblEg}2B0l2k{S?X
z0>aJ7Lqyp=3=m<Z^BJPJIM6~gg^0_Wv6DwX&&gCbV8Aq>?Hb|$W?>U$2lVe>?8OJR
z0<dPrpc6sZ)087>-a>h{6xO|JXAEVMl#+Us)-|BtQ9wn1=f2>}V*CR{xnJo+Qt_bi
zM7Km%T3a`_8ZkC0vxq8(HPGtQk`Ke{=?JWQla|YAahVEZkiXz69*qTK-YV)RM6gNe
z19$>`<Jdefe%ApGuMJaY2W&z-Jb<N^f;cLLAHoJ7=GSRdzODv`TfFlfLe4VVHO!EK
zwR;#78*5Eaq|WmHy#P9};_G}9FN2j773)Eu53WBR9^4I_)wtzeI at G94{;i=zfG*w|
za$sBT_pF;+$$zIl^m@j*ifmpEo^)~AB>N5!CA1!lBtbD{>uy|V)8DDcyi at 9&ofo|<
zAHk1s2zwBnV;r2L5I-T=WFhvrJ5mnlhf)yh=jxPWAap^jw~$mAA0^fi8e{eNz}qt?
zWnJn47F9|%4F#!#1n(~aWa9Gmg0EzCm&&LuMeT2&+h;y6)i}w)IbSv&n30G4)T&qE
zx@L7;#yq?D1qNf`<gD$eOhOz6b!DAhU^|~q2=S&H!%xav#A?+4>z3w^JfrNHxA`he
zfM82}YuPb1zUU}`8o#;fQIJ$BIiPi)N at M%p7~;%Hm0Yb=CmV_Z+ET}^7(qpjX?X%G
zL~MJqkEv?(8YShza#y7mfVz8M5NPZ0q0pQj-Ik{~tlN5V(?G=Ur9L?u?TFs;8+LUi
z?;mkaAt8UQ<B%1LiUTa5z$5{cZhph<TaGE&K#rq227v}MpENIHO6=Emvot9@>Z5-^
z2uuvz^y8i%9nzo at hS%F2F-+R?_SvtaN7jy3Hh+|TT%a<QkCc;>JG}|H)Y_h^v)=zS
z;SS=-)*c}Mnz(Bw1C!N{lPxl%2nYyb`kj;S at ukI8Ol)>XMVqkNQ;HbZcy*S$#RF1%
zczBq%1zGi))e0pu<4X&a506crs<mjRyPqxA9Qq!>ff#0Khy|yX$HLedfBaAB&S}HZ
zVSml5`w-8_XcJQ&njRcnC;Lm#yb208<BA|(xfSwc)%y!V<~E|~ZAZs^T7)2A{C=`_
zU#N}mo8Cji{MsZG70+{O6Hz$6oNolbyal-*Iv*Sy+~9##)Xta4dhIW*b-l&}*>7hs
zEy7cFUO)D~K0r5l)HbxAYsc<8$-D#*YB7j^K*vnZ3h`TdA9^B5yod(|WaB$G7n!{3
zNpkFTo)82r!8UJ8z&8OBV$AL9i<-Rn0-G3XXGbH5c5#dt)ID>EFM(Zz8Uz>Ve|fQb
za{0CML%PZb3~XRn^D{ra3F-r at 2P%^035V)@K}x!E*3bsGSt(q>W~`?CJ#?o%>*AM!
zC=#+BWAd%0q`9dnBr>jLyEe^{6_iRemiYCzf`;6BVWa at FR%{{w(y=XKC~Ba0iH{=C
zVMI2~nP*SCtlZ|Bh8mph0t{VEbyY0t$JX&XWN#wx+_~d<y{whBcD~Uuako?um@YQ^
zk|Ys-cqJqyOSeDJ7?h<|6<?#Kew)s}Ne{7dKIsB&yaB*>IQ9k2%cd-cJD!-08Nq8U
z)d6~1eCs at S<9{1$X<2!8Dt7nHnW1R@h6fKuYI+!=!mo2Kt~6~_t$hBoTr@&$Sp~94
z((|ah2nhK=jsjhBY+>S^Q2+b>W at E}+58U4s09fEBM^<9KJ3BreF<C8Y`uFVN+*c#<
z2eLO-X7%l5pr-K2{a;oOM5UBSj;J7496eGZ`;JMre}1h2?Kji4LF#`{D!ap^fT>AW
z&@i7V4~4RZ)T?{yIR~P!_<bNk-xcLMlW<KBs*N>1P(JK)-lITCf}D0H_;M%}Z^q%I
z3-}J$<vn~W=DJ}jgjXl^!oP?kvx;u7HX{f{K_4VK&Z??aE6WiOsL4}9PjBzWo8(TI
z-lIRP-=qs?yTihEGfI8Zfg!>r?-Y1MtVk&O8+wu^J3t<TnzsyRx`f#X!lV=wOwrAb
zh$n&BJ)F%jSzcs3%uX8EGREJ5rSaAi$a^68Qqs4Wjgw1Vx*k#IWvxr~;x2y>P&Mj6
z_X at AxVzd!RYc=MrUozJd0fz6iwX3x9npx{q{rAtvatt_V0AsC#_?p{8tvXo%5pMK*
z`&Dmz=YTY?_u8BHWna;+9=(Y}q4tRmJop+H@&p*jZ7<JH0HGGMz*54Vzj^Z}CWusN
z$9u7Xxo#_R{Uqog3$c%kxtSSInLLmqFCG=@qd&5&ddE}B$xXu@6f^HNgBRWg97_y>
zxp`O90LO`rPfy>iTj5K;o$Bj at -RTdiT?|8^*i>{~2Q@$u>xlcQ666ZX45z%viEMR+
z2f<|I8Odv*gvFO%Rp|SHJOV_ at E<^a_62#`|60JQYu6+uGKUZ1Dp5aSH1%=rc!3mZ#
z0uR~$!)p&Gn#83Bd^24DK59vHx^d&iwp7<HacAWEVc@Zc*o5Kx>RyoUrA)KJNP5g!
z?JX>C1Esa$*=5kY-koIRD-%$&c0BN#?Lgi7YXEUQnfk9qCUsvx?F<;k*njB^Qq+}z
z&T^NW4Ev)uMy|C~^jutA&l<ogB9gken9eM+kj~D%ICWsYQKmQun%<m{KVK9sj7x at b
z1c4okd0!Xhl|c76jj)YkajxQ_(DSskG;eVX3Z+U|vPBSW_$C9`lByw{<`YdMfkX at 2
zCtpsceWdk?hx<O~^(T7y*egCHQfCJg5&t)oaw`Prb2cJWRtfo&u7|d@wA9-vPaxse
zcNmG>y}Z0~`E|O%X!8*0h6<o{I59d))O_76Gb~<f*oJMT31bR4r)%lWgkM##S4uK=
zpo7ygkCgZ3_(0u>&z-Er3#@8(0$IQqFb<HY&{@B!LrcIvSIA#-#2nh^>_xgGD<)ff
z5WpeJ+$LZ7WG)er*onwWl*<XU=}s&)_5p1FtNH5DAGd6zgH-Ojx=Mcvy$Ll~7FH;A
zFzU+}eJs-g?6_iOW#tN(IXb4akj8z)kWSD!>82y5?@0n$Ic~!n?4qlq8w8Bt?puYz
z)D(H=m-}J=QUpWyh)LEZ+2?<&h8G5H17zx4trUSmwS``^c**(!|HyKqhR4$T<f@{e
z&&XMsaO*^Xv4(xzDI~Y`PbCLV at qa&soVFy|Xq9A(n#X|t%R943$zniSLF8A8ac^yH
zH8N=9Dz4S#&rB1jzjjQQ9g|su$zRcdoVPimrj336)tP|X@gj&1u1bJWg(e;*AtzVa
z3ME~};PNcV!CeU!<u=!8u?gpO0ut&^?(XjS44UoSJz{zj=PdT`X1zp!+y%9M&jDWZ
z?ck?-GKOQ;*9LOdUWG>p1doQ#B#`3ZiSWS8vo2X6+5w1;_AA0ouiJU}p%6nGwi*bT
z%NI-k-mlz=l01C`5!b7lm;l`qZP>Al{SGvIKB+;5b_ntzsiD5oxhtumKZk66iG;^Q
z at x3AI00=%uOjc=C)u4ZeKU$_E_^G at xHxJAxKT;6$YY^|}so^X*>a{j*s>O9fPb{0`
zILAHR-TQ%x?X^D4iuNSK4}2kcYO^W6p2+(^c@&x?>Feib3p&bg_gXvI`92&U%Y5Bz
zI$&DwrN1qmbLzXf*X?6D21+UyUr^>^9 at u|#Q$702J))y}*Z#L=&E&bd#K0!z_cNiO
zA9QAbbpv#)nw41>#o8^Xf#yfm{O{|{8uC0cOiLrvf9xFK?&2}?>zKyf8idM;VI7f-
z-W}EA*38NICTIFMQs5TzIr#h=D65v1mY~Zci4#M`W4iJ~RK+#8h;NA^lNvsoA;Bp7
z&()_#f$}>Ol(6otKwG}dlZ~0BlNn%Xahr_<2n#qN8ijL}23X3*g>a at CEY`BYZ7l?Z
zBx>cGzt=5Zh|yOKAaAHZt{!^o0V)H!we6$47JAQsuL6j5?&eYe0RcB!|Io`DR2%+^
z5&ub-a7IbBzM;U^0og~Rkfu#hlkR6-wcOu8sx+KFo&oNwAKnVucDlef0<c66a6kbK
z__=wjhr(%>!~hL>^w{EJ3Q{KFF8`wj=$Zy8 at 9H3`gq3m7Nh<eqTLI9~&G9--Jx9tk
z6Wtt(K!up0vU%yNxQiT9W=rN{Oa8(rpPHO(3;O*)JdcsoA7JUU5(nKtFkj$*zzsh)
zXVwrTsS-yDb_Rg1 at 4TNQC}ff4b%FgNd$WYw2_+y;Za_XSMgx&@*X+tnXT?Pkh<0jn
z`F_guLYQ9#_eqCCtfMt-_a5lbFlgq|OVv%AAF91)jU%0PV*(@c9Xb#c#imD;VC@U>
z#7O6WA?+Nm)53EEC<ZG>f7(WQJ;XMEuopSH;RDxQPc-g&*!T$qRogU2PqdDGCanxG
zgc|LisPWi{(1H^I!>f(TK+Wnkk+_h{=;dR~5?FG5Ohog<nG&_$UaFAc_1NNg&K$|I
zK#=RyTT54w*GdWsLzh;)AAn6097c0vpDxgVD$o>sKK!&mpA>2oMSM#LiEGLwpSs3q
z at R}>(gXarb_{M{y58Qr_Uoo4A8VE7G(67>r9C9oWn*}YjUeo#%Y!~Rrc=GXK`Q~uF
zHE!#PrkMR!E4?^U(A`IRde+6)l;vm0sU(s(ta<fnbhM2vDe)oEU0+m7S}W1$3FF*>
zA3t7s5m{(W$Rs5tmDJYOzQzBIxXD27GjhAX%SeI6KE)gf`(Z_?2cMiKFfrWo10r(G
z&5K6fieLB<7r?Xz8hFn?t|WNw_(wgO)f9Y5J7tpTRq8<Stb3`DW$x<oLIAQqVLpMy
zCQlh(36}HGJ~WLZ#Yuc?-oRcWYsy`zJybF5Acd$TCbJkIQpYI&UXCiK=&~^%;|e+G
zou(US>XHTe&JWdRa`}u8ri2a7cfj_KIH|=WJ<jfmWz&l}QuSU(66aqsCl%w#RsMiL
zXeIf+CKvko`8_drs*tpf+$u#01N9L=cr%|V{Wst2e0>>k2AP?eoVe6U9_3u0D4L1c
z#*N01%BO(IJ(e2S6FGZ_oynb{eW>)~=qdOJB}A(6K)RQ#5B0vIP-PE=hAk7@<hKZl
zo`+i*h|;!S2giJAJh%&urth_Ru|0!A$xTA0f=W%GU)*n<1u7r>2?0I?@JSh%0|^Ag
zZ-Ys}MIBB3c^^1VCs{A~H!a$y+lbsjtHVh~FZiM72*`nf*KjSo6~%A2Dn`}?7&IfG
z7 at vPY%}VEwkn~TTan6%Fi;XKmZE=S61uU@~WVo at wWoX9Rz3ZOf<mUZv!64^zmOhNz
zo&mHZ!}%L8(2l{s`O+{AuY9QVwWLTEAx*!_Z%h!_wV1~!Vtl~C27&RZ@gQje>F~A0
zoJt=GvENw*IcmmJt!l~i%}1eY(HiQ?D at 2jRz0s5#-+Fp_lD);vn3{kkiHEjJ(=)m7
zRPBQzJt-Rrv&)#+&n~3tn1kt+0K`$=F$=->>*2jY3c|>N9#pjP9IEn;X#oAQkHS*v
z*>_wjn>hRLn-oQCGEtOg3SG>iWOHL<WBQPJ43}>D*!;Zf+6y1B6%GA5JV>5<(${Nj
z${bcZ7q_!Oi?!0V@Z|W|YgC6}DpzgHq>bh_LAZ2~cpg&|kSy^Ih`VGvhak3vWQ57F
z6s-E68bkE={ctE^iyhLG5v;;M{^Z&m&7B8eavzh~nnG0fbsvStJu}@u5xAd~qw<Xt
z2d8EkNZDwZp-n@vTtP^fXT;6_=*b6`i(KzIOyjU6inm5OqD1luZw#0Xo*<FlL{n%`
z-5HpcWhV+{H(IGS7XGQxP2r>ImP}2QM-06LFA~-V`J2ATX0<&G)4Ib$^NqK2uTq^V
zFO&k1fU9diDb)@yE-fYs;_e<RfmLMyIK7nQodA2dLiW+)W2+y{U;3WAM3g*vqBEAl
zE;`28bX_|o5YlPv32X+b;|hD~CQkV3_Ny@^k^}l|oOd3N0S)jB@)LR%WNyy>IMKbl
zXazr_<e6<!J1=r}kUMO_iZU5kjk~6qMa>+1{}O?^4n|+0mF{^s_64|<md411MgGfF
zc%7XK+n^c;1h8}d<BGfM=0iuy#=-^a$;fMmk7HOuUqVr~WL44<w{R$3e9!htp28p}
z*u6AL8u0&F1x%<hQ_|yyr<Aa^=Yz_LNC~@E*43gmHq(}|qHMc<i-LU4O|sU*|K%W-
z5a<3*)*m4=6V42x4R0)DyHiR7B!k at 5CH2yWG_!gUB@s7A?3)wPK&=?&zB3`?uC}lD
z0n0#2NU`!L#;2^VZa*(~HRI)1%OKD1j56bbcX^O*fkY!E8JLU?GAIuceTdG^2#y-v
zxZ~<tJ-a$u>YOJu4d%%K)_W`d6U!<y2%~0Jwb`4!%IxEKq>}Wcd655pb{AH8PcEE@
z5bSmKR#$0l?Z{5UzFJ#8Zq>hL-RMcdka2=2ZykeafMewrc;h{*dvw!xZ!!KVM^PD|
z#I8D_P-f4pMN5Rp|98GEpT?8^mtjgwpb3T7 at bN4#Ug`WgA(2`4Diq;xOLLDWz}b+O
zVCA`23B?>-T!K%GH61N)@#yvZkp%zmk(Dvi8qzdPuE6qE8GE{T=sGF0D**W{Y+OD#
z`ri!%z#k+<7m_4FEdn1POzZ0Dk)4^1WgL*Q(QXP7)wJdJbct1YT$)~Yx&;I);PZc+
z=|iSz0MO?P&|+6mxM^XaKEb0ycb0J at 3VTP~L}8ILQVS+7*7`znz_FB;Hle?4?F^m{
zy5~Tw986&*B?RvWVlVnNSswo4@7Zq|@8#b(&!LS|0$LRs+ZR6IT#Jcs{kChGn<ot<
zMOF?2+bn$}N*0%si&-a2bkdJIGgn8*=Im2drl<?4HkD`fN?KN(K!>Y3y3O?76WNH8
z at fAiH0*YjiJLf(ht`q8Itu;=uLiV^3wPr|wYgfExPL9B<nm<v9DB<!NTI=LU9UQFX
z@Z8HDV3{v#txv;!C80ekNfP)5jDA?)tIICyks|XDMn)F}YpyphugMeEG9~J>+P9!{
zjlr>GRLWL+=)BW6N_pJ-NCT3Sy~bZwyT+uG-skA}&CXw%gW6|bJ|EzU|6o{Fiou-Y
z!@3RuLVT5l&t7zCjuh@!nHkMvH4J%Qs-_5QD=PXMn}N^h$#+74z+}z>xKc at QtyOL9
z*v-|u>HLIxV=oRU at 8c&C>810lW*;s0Mp;5WQ<H%enoKV_+`FUVvp&pe2S^-Iap<Y(
zee=RVE>e7TmE}i6F~U0O6=h~N#y|l{_4u3A>QJ6VhYy%SmgX903Ev9XTZpWCgGvBR
zn>^L5oC+Q!3^a0{nXsE6t1iyZp`IyOkZ{QsEl=81&@?q0`5PD2Te4Pl7g)xQMz^Pr
zO=r<J7xdJxe{d}X*5z_wsEwSX6HqrtwF=RYny7l!w&gcM&6ynZCJuJcqik2~!-DsK
zywmPhr?yP!(LdUgwnB&?N{-9g6#afv={2LeE3i|$(G>$fJ3x)^T$Q=50mq%&R$y7}
zixPt;&an_1?J)>gI|tKsu8 at cB;H?}bxq#ieKatsQT4JEyeO_+Dy3#;fA8hrC=xd^+
zGcOd%Md2ga-&bzsH6 at 2k(Nh}3pSCJ};P59qGm;<u0KkBOYaD*VK>4LF)~tPWu6{S2
zkPr1{rdo~LYMWA`X{^zz?u=pd2^CSYlZN8MQ1zpW%dFc6(oSDk%nWhRA4mq9_T<|;
z`YiUiLmAWsJ`{U1Ld^xAfq{C>TQ*aa`7hz(Z&n**Dd+z7_Nw<`#>d!ev5m8Cv&qRP
z!boF!yiMQpq9Ak!2(FnX=a-xIE_s6QroTLzbEhLEq--se99TXK1Rv1AD|KcAW+#9W
z at 4o#;)5&BemoFQ1_euXKL~RIxPPsvd5=E#Mk9sfc{~RxW_m=uULsG-BKpxBJBm;19
zgHyQ|B%qTH(02lGhTm}eAX+Qdd3_sVV`ujPIh5K?O{r#^Bsv+qb!dW|WRj`A(Dwv1
z7l1viEWi|5W-sUsCOY!d`EeO9%T=oQ>u at X(+`z>N+e>3wC8B06M#8+x%NN@{5PrQ0
zU)QlMJzVUqagTx9E`HW$z((28vLjJL1ZJz}t_jc;?jA#*n`#9yURk2fN&Qh5n+XyS
z;U6ty;4YhQ;u|nPjhPd$NlS#-;RGq~pgAE?>?fe8!paTyGTxg43xu2F9O2)#%oYAJ
zY0%J-J=VeS(x!P_;-%6(#z>{{4>dxHRf3JrPJk5+cz*5=4kOU;fR1WS=U?!O^AUL2
zcKx!|4nN`X+%M^YHmsgaWxes^u|Tm-vq&aVLg=3pV0V|RF|h&!YHb at i<q!_VFnSif
z5lRs8s4W3+7ki;3caKzJAjOL_kSQKG9=?j|&`n1_zCTtoV3g!f2y|T&u`eSVM|!66
z@GZifmi%^_&I(O@)g5KEBuY{^92A3|B+RVUp5|hcn=IkT_KDfMMbLo;y~gdgrf98J
zvY|*B*By`}GcTSsB*vA)nUo^sRNpEcJ$ExlLOwH1{#q28q>-tfng#d5e63Tp%Cl<G
z8l?{>>@OBRY#hP;Xp(YJaD{uCqn#{m1x_{kPv5bVsm&^-4TkcRp^SXYpD4wBs#jS3
zTJdfYO7S(RL3+SslHjO}-D?d%*M(w$Wtt2o684{P26EAbH&*I(^^JbsC4&xr`V{w8
zfRU7NY;w|ZlMPVT&vNR3Ou$=T<h3u>eQh%dBjyWAzgR}!5<^bbf2nzw4|Z}aG!(e*
zvx+rFkcBrB9??r{N0-2<nOB`&@DH_=-1IUTLq#wK7*5Dos@o^!dMucfnYJp-`pE+S
zFt|*>pxMwojW%_?5>Cb(q8E1OTZ_M|{)WDb9ALjw&9A&yS;W0GHHB!W<jEhAvt%Z%
zn|2j(_60pwrSCalYQVQ-{&6_W9kycvDll87n=;ySNp+r8mQ2lb5*2GxJ$da9$c^vn
z0s^uN*B at sgeC40sh`^H;{j#tB8Pv;_&8p&cZ|;0av<1};=^UU at dv})Nf3r$lN2Z{R
zWuY=6fKX+GCQBlo<{LJcxG7TfrubD(2Yk_WU&dzSsgo}ZrgS)e8zJrq^WhHRI-%tk
z0r&f|RDZb1RkLrC1Lr+aBWtbnV(&!H at S<r~Y|*62tNJg(QIkt^SQY`oxSu2oB*og6
z=16@rr=DTs8`U!A55$y$ZvYR_6L1#@D{HJRNUmN@>A#@IC)GIi7Ff78_|M4J4W^m$
zCa*p9^))*4Lq|Qh_rtrrQiQeMu+r9{@XzHl%(YBJaETFx(uJcQ!#Bn69{AFc#{M^C
zQ=8#Ku*jD{wP{?FdX5lzB}#Q`#n#2;bN!X)BnqA-HHBjsZbqa^OnC->lj7cg3_a+0
z0m-<8|5|`%(#cdy<N34~>`g4V%(L^kC~o)cpZSD!gG*o2p=!iY>X?(Tk<&kqDXJ?B
z0_^#Cy>c#=14>1Z%6mo?gd;BDUthcHn48b4oKvKaZsfl`O`28&w&<9tS<t!@T~g8*
z6OO_@^C1Rj0d#4SYUzi|oe4)?kF>x8(6f=_jZmMZ8F0mMsw>;f%nX{1d5xOO2;D$M
z6#g~^`ghPl2*_=rDg9K>OGfOP;SbTKB%M>>B2dhcezc!)2Y~F=qlE^1DRCS=@)4}+
zA{X~JZkp6&l$c(=II;NhmBAAY2K4PkE>;}_S>3nR6olHWB0-)wuc7FUKY^TZCg^i?
zyA>|)t<oCIO8?3^&ZGg*Pn75;96l*J^TQd9)t$MCl5u&}?l44$!E;*iFs4=lcuFf$
zj#uX^{lX0s2uLSWf<Lg2zWZB0tsZ<(HSrEFr22v`UvDhXb4ypSeB1kOdf((-!?yg)
zUXOrez#7X*M#D}{P88mG>e(e_W<FdD_4a7xY~1o-YrkRK`b#F?uSWz4)T at cmuIlQ<
z?U@hQ8cM6W>8wG=A0AQz=?f&{Q83s$1$Ys6-8 at s?L?l9Bxz^dtupdCkg;~Ap0qEA&
z>0gqvdamzC?lsr5-<D3JVQKM;BzgfvM<Na7_0a1SX6VbDz~E0n0NQ-E7opbk%UD{?
z#3{2crNkM)sxbd9V97Pzqt8$W3PwRtIR%^j@K@$(x5xq4LRNQ;jZGzzxZkD~^&Lt!
z4i0^vUb5OHDOlx-;kDJYmP`T8hnTe+qnD|+wm_dOey1W|>U?T=hU04{s)Dq#Sb_?(
zgDK7|i7nSb7M}$yAw&m0`L1y+Fs1g)v;Mqa*8Fdh_E=?QrSI*dheCam&DXOrvRHq#
zi>>@K#2Bj?X3cx4(JxZ!E>KveAsJY at 9(wc($Jyo}8NhKw(6|v^mfTGEaH7K2tgvzO
z718q!)0;c*@_~k^_3rRvSMb?Z{z1WA&|43~Q!^DwZoOVzxJwsg!YBiW`xS2)LutzG
zW!V7RODj2)`AV2qcU5OL<0qf|J`D2K#Hq(EN_)U$)+0?z^UYel;ft!+$s4f-!<d8v
zxtDcfZmh6h;WF70oy)jtwq$a|ZMkgcCMdi&hquWtG)&w0g&#Rk0axRh-35@)vT
zH~U#7rp;po3^Hjn5(wPU#}leS&kbxG&5|>(c`KCv!OK2BKY!L2icfGa(*GX7dGnj#
zE0^`jHNqnJv${-d_DLdE&PKYkv$I2fD!B7zxxE7%TUuOLdyfp)3<+Nayw&wM3SLa3
z$m|!FcLjXU5J`&@xsn5LU6IeS!XUM^<SVdEa^wGwsikLm_$Ze7n2Gg-P9zq4&50Lv
z6FI{0apfrstKJ}Ww1&l?C<D3PiNqTwMlbn6a6Ov(NwMlH|56BqV*>Yk0eT4OAh=7e
zL=XLM+^j2^t#vew1CJcxM=G0c0maO6B_4O*gKuHvvyI>LWvoT_Gwjdaqm$5!)An=6
zEDL>b9<Yxy^{d*S4f_Xdi$8}`jQkw(SPRq`JC<aNvGwz~L$>1aF11XkWpz=@=Q`vs
zxA_f;-i12Ti6-uBa~RCxiHuSq+h at +YJW}<E!B6QMj7<oP*kgi@saa4U(>k7tfV*mo
zVn03B^KUp3QAx-qxTx<ud+7h<5n;YS3g~B{7>bLE#4hr{{*kML<Y9Cz-KB>GeW at ht
z!br6I?+epm$L9r049i8)qDHxIh(dv{61ILUPxDnxPd?4q{N4vcT?*0wG~G;YEBSDs
znAV7L{7>ul2R0E3>YxE}1Co(B3!vJb&X&Kcxl06sPL)gD=iSKD|K95VHZDG&88~ml
z<`m;~_6|f?>>ai50qky>t#PgB3ps_sE{hqu=Q>jBjCfy#2PzYA7^vLx5>IPS(0- at b
zt*{3_05HW+ZO?{yy()?_fPiG35j1>API<zSt%Vr64;ntq9RoORaeOD7gEsWbln&G@
zw&V>8rF1>@@fc*IMyASH at bOoua%82vAk8wpjNSxHqel~T=`2NpuKqqP7g$Q at w>$5c
z<orRcJ`e0GM`O+cGLn+LyZC^y&R5p5f4@$+YZWL}5JW`@<m7-d^<^$_9k4|?M_16k
z^0dZoiq*@LG8w`FZOw_JG>`h(%g$01_N<y^(vU2B-Ku~|X3;B(Mkb&kzeXwSs&m})
zS2Qq(tDE0w_@ojbMw`hf(_<v-W!h=w*>CTxPi7|F|9zo;ERZI0or^1V(D*10SSA1S
zxLv%?FO+5aUZnKcAcH@=F<=7#5qDErAi9}zpxjGkqh23UmP)$3|0IIsd$!KyZ|?-!
z53=Xa#DLv5tig|tdXKj0{rmSf`Gh+(fp{V<s__}DXDwj_+(4R6M#MOLo_@s@uPCg1
zeErFa_Y{{uR*znZK-DU~5HA3|jK#1_z>Sq6iH99J1D&W%LR}~*M%a}9X<b(b=6&~4
zp#;$YpOBD+*Sbzd@W}*0f_qRQWFs_;Q*E}e5@^H=nk_xUsg<?0$=ieWCxY_l-=CLY
z$x@>c4myX3R!!nL&K)zSZ1L at sUqrN_PrzMZYaX}yW$ZlowG7efPCDgb8MFyyUXy~R
zT|>!cIuz<1^kAkSqrKbG7+dH~DFGq%v9F}kxp+f0LhpD_20QW!ynZw1D()KKZ3`}W
z*ywH(A994|j?YJzbwAJNm`!DWG!7g}oMX9JSy%#7E(qmrUQnon{664?IAOZL4Nt0o
znS5{wy<?HsoHXw#xYRe(h82vHG?v|_9HVUlPDNLUYVFxNxbQIhEFp{7DJRtBz$7}z
zR8HjO3YO*kk?XhgXhAQgjzUkt8#j{kZs`NVm*XD&t?<2a!>l!Ne4&d(U~*`YF6tSk
zU#NL~_^oHtakhrCo{?$p154<$k%RV00#MD2IcA<~pLzn7Wy;)KDQ>TDYI-_=q6e=_
z7I=kx`eZ at 1$aoFtlhy+PbW}!kMT3OaQkXQq;TE3KR4xjI at FzB^FtS&TN!5qL|KY36
zYI`Xb`txTI50h#I2X}bnS;OHNd>11U$EjU6V)a#8?&}n~glE;M*!NC2m!XU9lg{q$
zZnxY0_iTlbz%(-|IpAB>T%Z~{*MQnfzj$*)!#IpbD-toK at seN1gq?ziu=cbepAvUL
zU~e0C{O8{OyalOYFBKeq8&cwSAe at a^0T=mGEE)d0SiRyEsE*e#_u<n`3M!hzl4uFK
zr;9J12L|54rSgT5@o|IlH=Yv-Wg%G?gw%Fh)9tw5S^#<fwsjq7xiNZIHGr~$+wuE1
zJL>aTyo6(jWn$- at 8C#(;hX-E79YYWh#MH+pCx^+=J}eUfz?a1xuFp)ZH-Wp$JLnn<
zC_iYV?a#n%CN+)%mEYZ_7Kt3_AZbo}a)0c3G=h5|rxroeZt+DIQ{TO=8u2lQ33rMN
zlN!3m%%v3-T`C3Y99itawQNn`<po-yqq;O(Ae3<T#)1Cn*E^(UCxD~3K(U}<wz){3
z)Ue;T`UIQ%KC|y at w+szw2x<6RyFvvYVqifBwiga?Uzsi*d~W4!HqqU2^;KW(6$(at
zOD^a5(AApCxve`Pa|iI0ro4tPki^IqaDjr-e&^cp6b&uT<Nw&){D at L~DzO|~^_`d&
z0ck7gyzr1bFRpYJ{33+ech;T@ZU3)@GY^OIecSk0E3#)BWf$4XPGoB$5?^IxElY;%
zk|k+Kl3mv9L?T<Zi6L8r>`V5>l4Lhh4HDjKe#h(ZhrgaN&;302eO=f2IZxZ~4A!wa
z`Lo~EpU|5%+4~Y_4jcq8zOKat1R#O`4ZObbNiN_<n%nccUmEjg=J)!+s&)25KGij@
zWM{;#fkL|Ss_kB^ZFGEbu?KCgs?`6+I^b9%`l!SXz05Eyyv|n=UnZaJ|FUyo2$%X$
z^qIo;(>AwtL-PiZvW=I;Bzm at I@8`6L)bT!Hy7YSxT%8`=W#pYP&9srdwM&~VM3Ktl
zh9<F7$j&Lbb2Ai2&ndm!WQe+xK|q?{^ql?;bn=}LEjJ_reBr&7WyZc2(zTolsNONx
zJo36ch}`q`Wdm3IT6IQh>V@<$M!~<(j99gsz7WhAI1&%e4{*`fqf}iWW@@H55DW?{
z1~GH&@{P(!k5-@jP6@(C_w`=X3fgWU`;x9}R=bGniK&^!N1|Nz8l7AXZ);=2$%Cc(
z8~GTTOSN)|pHmNIBqE0^C|qXJWf})e(dcUhGQU_tFfpLvtvyjyP;hVxWFE@#%4u<M
zJrW1k*?>zr35f{9eu4-I$UulFcF_2fZI%AUyh?bT+RBA{hS>3$YcUWxiS$Kwn2D5D
zi~j%N8KrE8X<zu+hL}0gvNcYQVj){h(P{YQ?{VeEG<^*840D_{ItQ5qhz**ka=NbQ
z`Z#o-n!QD)ne6_(#L~!q76mAY%kIoh)AP#8?oCIZVh)BmzHCdTt?=|A#~vPCwh#=X
zd5W8(;sE#$Yx-93hlkiUl#POyJoBlz&Sp&%QK?!nqwkxp#$T5H>`RuFSaZXd?((a*
zFJ}|mh&yXo-VYq<l06JO?;a#T?1ANuy?Tz)`qgWwoT6vhjseQpLih$uY(q!K*iw)z
z<W0bT`?ILmTFSnN6t?-!xNr_&?T;n%r%D3CL{Hm%@$TujS=D(Tmem4}FE4N4=2w+`
z;=y)TSJz9|tk;xv+soiR;-lR<yIjMQZUhM@;4A$fA%Tn85c%D^4b925F}-}cbRI9j
zr`j6rbB#3|3oF)~Ayq)`X&c{Utq0#7En6C|zLYq?DN656ArJ?2jSs&zJ?7EaZDrb8
z;5(YAsEB*%scc135R_f*eRwR!S!L_2>u+^Sh!HA*+nvSFb#khoI!DF3V_87)+s^*c
z%$S~dXh~}XghB-BCcL&rWLIuCfg|<bZl^{^qLF$8Jkg%x7o<>Pr-mOBx?%OCo?EcV
zUol2qnxcdru))ASAYiK3FgxzjRtwdS1sQbvAE!0&u*UUN{gXo+cC0=seDj7J)BwB}
z+wMG5P&iO+c7Q~ip2--BGi)DnHX20O7D%D+X*{ON-an#;h%3d##R~YodjjG&a1(H*
z(rm4LzALMR%Ap!`UpzpCR#sNxW#ew-cLE*&!3%<1Cy|&*eV9*c!gO21LL$WUVs@+i
zO8wJYgCMK_!v>j0O~sPop-xBBFLLC1=n57Fdc7&_8a!NFa|6pJsgWtR;I2EG2Id27
zfP4Hb2O4uV;Oh}|C)E4sVoXvN@#pdKPb<DkQp9!MB<Wh}pG=iv2l?`a at Y`29IB48f
z<Wh~qPJs*r)*#q{J?X}^lhOmmZp1Y@L%p$qLLlTe8vCKVsSnReF4}EMfJ`GE1TQZV
z`PZ^zLKN}ONHn&jxY%LMSwKI6LTKkLwf#x*acZtDl~*kOG8c!#&Hw1zwtNJ6B!eR(
z_Iq^&cxKZd8uEfLn#bWLeHC<dbb5tn4vWT+%1C2e<R^c%!v!-*QZ?$gI6|Xn%tta5
zJ>Ip+JZ=$M`>fu0_>&=N%DoIN1j9~e)e=1vrnK6TiBJ9C`S*q<G{v_=&cI8=67>lS
zwlS{YdFMM!h#nc4{4vy@<L`2>2(noB^po#tQy3x3mKIujmu0;O*y6d>Yq;&3n}d!H
z>!b1khSP@$izs*0r at tb4^*Q0{6fG6Q15)m at V;j;<{DxnhaMbTW#sI(j`>J=2)#jUS
z|LH6o=i$yD7?lK3w$Lz3)`Elz3OdSvZ)8g2tOJ*uY21Gf;AJf%pZbT>azAlKRCOkw
zUBph&r7U>eepmadR9^LF!_ at Sj#EFj^HMI7<gWC!{;L~GJJq~Fu&KkZ_H<U>Gu*^E<
zDf<-U2&#&sy5Uz14LoGP^LMsgWtRhCR6Hvy%ZjE94mx<Tx}RTZsIT_~?}wK)8_PV5
zzZjCyih`%;RK8Jw(_L-vdt!YKc&z1k<BrZxi<YqZj9l`tv6<rvwnwNxhSUyxNr?+P
zi`$sIn-Gf|bw!%Y7!|+lekVt*JE6+TE>|ql{fucNfDCoi(BWwrCsmowOiXZvhfDB|
z6`3#IhX-4kqhHx~J$2|Qf1y}6QTcwAxG_+}IncVjMHu!SntKkeEW~N>0)oV1p2GQW
z^lHMXVfl at H1jos4fDzz0C!4KP%FA##cDz-&z-oa%0hkkrRhit5fs!4%A{ZB!FDOOj
z!mz8Yw9>rX3LgT+3_&5fQWtvQlT at xa18cf;ZZdpejHsWr5scrpM>y=~-+_=KppYw)
z&VuI+geTQ4>uX!Soe0b~r+`0BP_fQ&z))xYPXNA9Z<Gp}ga=ZuSpX^`TM{jN!2|m*
zLP)e!P~qjNB4Kzl;}Bxg;n&gVa(o_4BN-~wz%$}$nGVy2`gdy)S=`7<(mT{Wmz<j-
z;^ZsXy9L?6u*Rpkw)8EH8~nvB_*bG)0i2W-r-L!kDx?QxXHo5L1vHct)_&&zEOKsj
z|593g8+hI!r!SS#jpUM1PIPX%(rmpaHnXBz9+yiIoF^7^EVnc$wP&&SEA!5r3Cmqv
z<$|xTpWj-OyPs(ZVN3-VmL~=viJw6)IJgWmm2GPz>E~+CsMs<L{th7*yiqbF?nVVL
z0smOl96DZJn5CRN9r9ymp9eDomyfl;AjlP+-0W;lyPeGC(GpJNf_nvc8FQ%rQ|yAk
zvECZ7relSQthd-yy=p)OB$SiOI@4<c9cGu!THV7Z!R~)@=>bgDA*(G;)pr=Fc^nxG
zwI1Y}PzAX3XQ_6gJLc}bFGe!QOG%WKlw8~K;q}9+!!7nXXn`s(wmz+;_g@%9Gw?{=
zRJi`A2MPzC;>QupHRj>VaTG}mT;N@^s`GrZHi2z!F0a1tYeC||(LoeZaar+E!21x;
zx)#O_QU06wrCzl_4OZAKmL?)xs0Ey=+aXR4O3o2WZ|GS!L;B%Bs^ux!IBs!)>x&OP
z{j-n_mN4}kCRkLT5k~6-VR-g*)8%LS0MP2I`#Jm4VK45q#zO{vYByeRBOli^|1>P$
zXE0VIIqz8~od^ob<b74})#vSBG%A}VBz2#0Ca{wH)yNC7IPbepa<i(xJJBg{Y|ah3
zkbi_@&Rhaczn0h58alWhp*;FvDxY>vh5p9hq0#)J$;q60|DSf&waze1i$8c*@VD7X
z-nrpK-bhk;8Bo&6M2*DHbC5-#l-RO&U?z#VM`w9SfO<pvKK|<+#9*1I^22RmzsD&f
z&k~bA_8*$O8!u__4i5MHvx=U%X1Nszd0+~O6jJzhck{U7;%|`WA>(btNZQ#^GBN$-
zzPfe`O+nfusA{2zqn3#SOMQ3ay9Ily7Sg0 at --b@Fd=JBRaB06{hCr{9A7Lq9d#(z9
zD at J2MoRg!f^60Aihv_go at Vh?v3X3&n7v_k1d_q&-qYt1bw@=vBp at W(Q4lo9<cEnUo
zmX?+Mw+K`x1Tw&VXLo5?`RNZ4bzvYdjkB>k9vzYT&%Y_#k6f6YB~EovPt#CkpRg&E
zm%Nr?l9p6%X~FAya at 6c5dOz{)+LRk%3^Pm`L_apGJ$9quMv8MrP2q;Eb<H`#l#lfn
zeW#cc*_5B<MKnDxJ6)xVKv9KG(5kxk;)s_XAx2(bUw7G`vT8fHy0fv=6aS+5 at SvZV
zNleQ$NuU(y-(vz89g9zp)#j|3Zs8K at -!rO6(rgq0GKvQ8{MypGd(qe3%S(pHO5Xt%
ze57nSK5*~;ZKA1m{d_}tIV0qN6cb}rmWoPCLkaHB3GU}3sy6|KJbU(RRk?li!PMFx
z(y2@Q47v1EXF!NtidfcsqmUpx4~G=ZsByu&t)5nk^l&;PDPv=To9<cUruW(7l#(3u
zt7~hvwbRCEbn*^UWUEa}7z2-K=rE=_dA;-8X-0cjSIM=Df~yeGa^!GAdzgChR*ac8
z<&$9Zl*OB<8mW=`urS)MkBE&lM~#3w`Ky)R^S;`z0+{QzH0_zwr+fWtT%Dai0wBE2
zaNZ;Qc!ID%vc6V=F!PWjwn%x2nVN$3DMbi>sRg4vGRDry>8f7P&xe8m75Vu>wK5oo
zXlW;N^3!bupN5ddq*z*7&fmw=9X^8VAY+`TJ`7^27qgslGBPe- at LwvX=vU#z?#@@K
zguP4$f^mM{RwN5S4=>uo$$Bgymrtd7?oWVj#B$-}n01}!tGOoBTw)Jp)Tg{j-)!yJ
ziAnb}4(9zm$89c=p<8+R*Qj0&iuKzbcC^bOZ^C0^W5>DdJsd4}T95I4S3BG^G(n?V
z-D_Q(<$0G*kB*Mg>;Vfg`1Nb1SKpT}U+U9WUx&g!VRNDAd#YY^Wh3ye&8NKXF<1|t
zvXf22QrpOmq??F8Bma{MT9H?0d)Z6SXE{NkbS_|GU|`^u*!zWZu_yuIwm?;md8h|o
zx95?3$%;cX*9AbyXVFXGrF!8-4;;0Onp)}Vi&ObS;pyo}_~<0732||8o7!owacjS~
zDbz|_C(S+709;pita3vfgTY*omCft2NeVw)|FuU-=9lctqqksG+wKx_qzF8w+41Xz
zSY&Y&vf|4y%(kD_*VpGY%)jxw3t#by-k_3_l4CE+*+e}EpVP+)1*+WN+jf8)Aj7v6
ze6c7&joWKkh{-|BnEAr)!67HN{jusYIb;l^$mkj~@Fsp1Mj3~SMbhAVWIJqR(`*zo
zY-Q8*ZzOnvJGJ!Sd9+NOl{6FuN$3(Y0SF6%a@a~bZ3ehOBk6$>>+$7~6j4y4gQ&M$
zL3!Y}fx at P!q(maXVC5Vz5`^u*i>>`!Px+5aD4=PdzWVOKDkmogn*#bnQ&kl!oVw;`
zJbSWGf=_HNr1tdxmeOL*HY at Sf#NSYl2}R}?6cltW-gl$*40_{(3WZr;N_(WLl!;Eh
zmqRVu+&luP=)fN`8GS`XMZrT(k`FcR3C6c{bzL=7N_%TUS6y8VE{6&;$@KaIbQB~@
zQa^3A3cxU(2-&)1-K(xO`-)wYpZNl8Y_u$otv?48jzpAM)|O}Fk8FTb7VO!QyJsg>
z9(>Dww0SNnrP4J#FC4yoX67Tfg&%GcudQ8jB;9+UCGkROHgM!_?Q|Ssw>aUCX$d=M
z#p55Uon@}>`#x*4MbC7q=-S&00oGtn$HOuYdfDz)8<Y3X@k9zW;;%jIo%X?Q4(maa
zT+j^xPd#97sZA>7q^2NeH^6eo3ym<sw-FK&x>9-kTV~tJ19JF+!>`LS8X9CHmX(K>
zJtCX57pNO~%5*Y+Y0zYDYrgFU<cn$$+-s>?s3ynQSYTV{;NXzI$62NbWfD30A*p{(
zjXIY%_*<wDivULy=!kTDLH~a0WB-eSDuEor$$9>EFYe9`C1N&U1My#E)8(7o&9k$8
zTsPH>b(yK_2<~-+O@%be2Hy=NU`5IO@&`KrBaZVzZly#pRdl6eykptxPj;;xF+B4R
zE-DNy^Tz1NsHmikhe`;p%5a at D0(bbI+FF;B)`OAcc(-i9JPpKuuFf8c8ADT3Aio;7
zcj@cOrnQ43Q<};l1hfF)Ny}Up{$Y>cF>a=q`>ezWJKNft at tr$yz#b%QhFvjkUtgDm
zq>Eot%(w4G9~6VURSUs>0p2B)uvDzr<{(u_&_d)4EPBIA`OQA|n;f%bVNw6PEM#C{
z@I7HUo0WPV49-jM<tCsO<xO<h;|~sr9v;3N;o{-~`?4+00_`V{#~xh#IKS0>Q*(ce
zTQ4EoV$*QQI9%H4%4@*vF|uj5skUOQG+Zjp=6oCGJ(at^iRq(Kv$8&c{ouY&Ru*Cq
zsAt&#y&RYnaz&s>(tJxqHEr=@%1ad%WfhaI61*NOh9^X{YwPO5%_PI%cWwNgJr;YL
zfloC){B{gV at H}y{TDReiKk^D^4eQ*_evWzePMWtv*^m?J@?|O{508Re$_55y+zu21
z<gp|Vg#Ix$Pf>**cB2d!>Q>CudD)-0UtdCG;t#b%UQf5UJ5rO=U3qaCa8jLl+PW3e
zxqvTPjT&dEhZJJ_&R9IfzliXuUyq;nVV<_l2e-|ejc!vz{wCeC3#zJ7cs%|?(*)`_
zV{qXw+;c{1N(|f<iY>w5>w6zAOI+yaXC3+l8?GPD{+u7IgaE1??BzSM9VDs>&TZ+a
zPgSzEMHAk9PYNC$gR%h(uklx3GgIlDXlWvmNC(a)`15`)YFa3bry&X4F+bIVZ_(1y
z9=;Mi7}eseLFYoUGDnL#Vt_(ycPd7PHtG|cA(SPfV0RZ!?Zc$@{mA^~0WT4FuN-Wy
zsquDx{HU$o`FYwa*84DeeC;3yd46BMhf_v_dds>f$x(v!a&+YZz((OS^{=JtbISyY
zjXN`nTFi{vw$mo+sRnP at bz^>e%T-Cf`yR>~5jq at DX{CqoN1yt13-)Fc;|>E!KX<iQ
z5nC7C6bdB~!IN_yRg!$G>+5QbQ>~@w2U;Tt-8f#tXO*B6EemFrM{I(5&EEY%Lo+kC
zKb-r>4OQM<2Q}UuO8+F8F`C@1A**hDH`kg-UQk5duKT(6z{cv7CN+nF?br<(#B7+N
zFZ-S#m4Aje77$Oya^DL|BhVD&2<tIX`UlI9L=e*yMWgx`7;HjiNMJmV%U1TXLk+|v
z!=595H7F?PI<!~n_UkIA%nU5-eo%anKK_x|UGUrHVe0P##8(6|qKLai2XWo(udywn
z*yC>(WiYp3eFs;Dee`wKA+g}xfhGFni`XnnI0oC8S%ArEP+oe32xPl<N4_kcdXRqZ
zd<g$(5U(N$Cwv}!(c!F-g$_7_IE5<#&Q;95m&)dt>4207ZEjrn49w7o?{T;*rso*X
zWLXZ<lo_0$rW~!3tfiQ^f>NbeZ!gmo!o5I5vkh at 0juta>AdFe)uO{OesXY2ABt#0h
zrU<Xlo7I2zW{HQcNJWzU=hz&n?3QfGw)V;rtNnU{WKUuUe`Z|g0ufyNmV}3a7cXA<
acC_=hL|V7tcPs><BlNBqqRO>xLjDg+r#rF$
literal 0
HcmV?d00001
diff --git a/package/midori/midori-0001-remove-libnotify-dependency.patch b/package/midori/midori-0001-remove-libnotify-dependency.patch
new file mode 100644
index 0000000..edd1e17
--- /dev/null
+++ b/package/midori/midori-0001-remove-libnotify-dependency.patch
@@ -0,0 +1,27 @@
+Remove the libnotify dependency.
+
+For now there is no libnotify package in Buildroot and this feature does not
+seem necessary.
+
+Signed-off-by: Hadrien Boutteville <hadrien.boutteville@gmail.com>
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -143,16 +143,7 @@
+ endif ()
+ endif ()
+
+-if (WIN32)
+- add_definitions("-DLIBNOTIFY_VERSION=\"No\"")
+-else ()
+- pkg_check_modules(NOTIFY REQUIRED libnotify)
+- add_definitions("-DLIBNOTIFY_VERSION=\"${NOTIFY_VERSION}\"")
+- add_definitions("-DHAVE_LIBNOTIFY")
+- set(OPTS_INCLUDE_DIRS "${OPTS_INCLUDE_DIRS};${NOTIFY_INCLUDE_DIRS}")
+- set(OPTS_LIBRARIES "${OPTS_LIBRARIES};${NOTIFY_LIBRARIES}")
+- set(PKGS ${PKGS} libnotify)
+-endif ()
++add_definitions("-DLIBNOTIFY_VERSION=\"No\"")
+
+ option(USE_GTK3 "Use GTK+3" OFF)
+ option(HALF_BRO_INCOM_WEBKIT2 "Serve as a guniea pig" OFF)
diff --git a/package/midori/midori-0002-do-not-use-rsvg-convert.patch b/package/midori/midori-0002-do-not-use-rsvg-convert.patch
new file mode 100644
index 0000000..8cbb5ea
--- /dev/null
+++ b/package/midori/midori-0002-do-not-use-rsvg-convert.patch
@@ -0,0 +1,39 @@
+Fix the need of librsvg for the host.
+
+Midori install script uses rsvg-convert to convert some SVG images to PNG. So,
+we need to build librsvg for the host but this requires to build some heavy
+other packages like Cairo and Pango for the host. Therefore, we hack the build
+to remove the use of rsvg-convert and we copy prerendered PNGs to the target.
+
+Signed-off-by: Hadrien Boutteville <hadrien.boutteville@gmail.com>
+
+--- a/data/CMakeLists.txt
++++ b/data/CMakeLists.txt
+@@ -1,10 +1,5 @@
+ # Copyright (C) 2013 Christian Dywan <christian@twotoasts.de>
+
+-include(FindConvert)
+-if (NOT CONVERT_FOUND)
+- message(FATAL_ERROR "rsvg-convert not found")
+-endif ()
+-
+ include(FindIntltool)
+ if (NOT INTLTOOL_MERGE_FOUND)
+ message(FATAL_ERROR "intltool-merge not found")
+@@ -28,16 +23,6 @@
+ string(REPLACE ".appdata.xml.in" "" DESKTOP_ID ${FILE})
+ INTLTOOL_MERGE_APPDATA (${DESKTOP_ID} po)
+ endif ()
+- elseif (${FILE} MATCHES "\\.svg$")
+- string(REPLACE ".svg" "" IMG_ID ${FILE})
+- string (FIND ${FILE} "/" IS_DIR)
+- if (IS_DIR GREATER -1)
+- string(REPLACE "/" ";" DIR_LIST ${FILE})
+- LIST(GET DIR_LIST 0 S_DIR)
+- SVG2PNG (${IMG_ID} "${CMAKE_INSTALL_DATADIR}/midori/res/${S_DIR}")
+- else ()
+- SVG2PNG (${IMG_ID} "${CMAKE_INSTALL_DATADIR}/midori/res/")
+- endif()
+ # These are being handled in add_executable for the "midori" binary
+ elseif (${FILE} MATCHES "\\.ico$")
+ elseif (${FILE} MATCHES "\\.rc$")
diff --git a/package/midori/midori.mk b/package/midori/midori.mk
index d55f5f1..66df56a 100644
--- a/package/midori/midori.mk
+++ b/package/midori/midori.mk
@@ -4,45 +4,57 @@
#
################################################################################
-MIDORI_VERSION_MAJOR = 0.4
-MIDORI_VERSION = $(MIDORI_VERSION_MAJOR).6
-MIDORI_SOURCE = midori-$(MIDORI_VERSION).tar.bz2
-MIDORI_SITE = http://archive.xfce.org/src/apps/midori/$(MIDORI_VERSION_MAJOR)/
+MIDORI_VERSION = 0.5.8
+MIDORI_SOURCE = midori_$(MIDORI_VERSION)_all_.tar.bz2
+MIDORI_SITE = http://midori-browser.org/downloads/
MIDORI_LICENSE = LGPLv2.1+
MIDORI_LICENSE_FILES = COPYING
MIDORI_DEPENDENCIES = \
host-intltool \
host-pkgconf \
host-vala \
- host-python \
- libgtk2 \
- libsexy \
+ libsoup \
+ sqlite \
+ libxml2 \
webkit \
- $(if $(BR2_NEEDS_GETTEXT_IF_LOCALE),gettext) \
- $(if $(BR2_PACKAGE_LIBICONV),libiconv)
+ $(if $(BR2_NEEDS_GETTEXT_IF_LOCALE),gettext)
-ifneq ($(BR2_PACKAGE_XORG7),y)
-define MIDORI_WITHOUT_X11
- $(SED) "s/check_pkg ('x11')/#check_pkg ('x11')/" $(@D)/wscript
-endef
+MIDORI_CONF_OPT = -DUSE_ZEITGEIST=OFF
+
+ifeq ($(BR2_PACKAGE_LIBGTK3),y)
+# The actual WebKit logic in Buildroot enable webkit2 when WebKit uses GTK+3
+MIDORI_CONF_OPT += \
+ -DUSE_GTK3=ON \
+ -DHALF_BRO_INCOM_WEBKIT2=ON
+MIDORI_DEPENDENCIES += libgtk3
+else
+MIDORI_DEPENDENCIES += libgtk2
endif
-define MIDORI_CONFIGURE_CMDS
- $(MIDORI_WITHOUT_X11)
- (cd $(@D); \
- $(TARGET_CONFIGURE_OPTS) \
- $(HOST_DIR)/usr/bin/python2 ./waf configure \
- --prefix=/usr \
- --disable-libnotify \
- )
+define MIDORI_EXTRACT_CMDS
+ $(call suitable-extractor,$(MIDORI_SOURCE)) $(DL_DIR)/$(MIDORI_SOURCE) \
+ | $(TAR) $(TAR_STRIP_COMPONENTS)=0 -C $(@D) $(TAR_OPTIONS) -
endef
-define MIDORI_BUILD_CMDS
- (cd $(@D); $(HOST_DIR)/usr/bin/python2 ./waf build -j $(PARALLEL_JOBS))
+# Midori install script uses rsvg-convert to convert some SVG images to PNG. So,
+# we need to build librsvg for the host but this requires to build some heavy
+# other packages like Cairo and Pango for the host. Therefore, we hack the build
+# to remove the use of rsvg-convert and we copy prerendered PNGs to the target.
+define MIDORI_INSTALL_PNG
+ $(RM) $(TARGET_DIR)/usr/share/midori/res/logo-shade.svg
+ $(INSTALL) -D -m 0644 package/midori/logo-shade.png \
+ $(TARGET_DIR)/usr/share/midori/res/logo-shade.png
+ $(RM) $(TARGET_DIR)/usr/share/midori/res/adblock/blocked.svg
+ $(INSTALL) -D -m 0644 package/midori/blocked.png \
+ $(TARGET_DIR)/usr/share/midori/res/adblock/blocked.png
+ $(RM) $(TARGET_DIR)/usr/share/midori/res/adblock/enabled.svg
+ $(INSTALL) -D -m 0644 package/midori/enabled.png \
+ $(TARGET_DIR)/usr/share/midori/res/adblock/enabled.png
+ $(RM) $(TARGET_DIR)/usr/share/midori/res/adblock/disabled.svg
+ $(INSTALL) -D -m 0644 package/midori/disabled.png \
+ $(TARGET_DIR)/usr/share/midori/res/adblock/disabled.png
endef
-define MIDORI_INSTALL_TARGET_CMDS
- (cd $(@D); $(HOST_DIR)/usr/bin/python2 ./waf --destdir=$(TARGET_DIR) install)
-endef
+MIDORI_POST_INSTALL_TARGET_HOOKS += MIDORI_INSTALL_PNG
-$(eval $(generic-package))
+$(eval $(cmake-package))
--
2.0.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH v4 1/3] libgtk3: new package
2014-08-01 1:33 ` [Buildroot] [PATCH v4 1/3] libgtk3: new package Hadrien Boutteville
@ 2014-08-03 9:35 ` Thomas Petazzoni
2014-08-03 10:15 ` Thomas Petazzoni
0 siblings, 1 reply; 7+ messages in thread
From: Thomas Petazzoni @ 2014-08-03 9:35 UTC (permalink / raw)
To: buildroot
Hadrien,
On Fri, 1 Aug 2014 03:33:46 +0200, Hadrien Boutteville wrote:
> Signed-off-by: Hadrien Boutteville <hadrien.boutteville@gmail.com>
> Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
Thanks. Unfortunately, it still does not build here:
Making all in gtk
CCLD extract-strings
GEN stamp-gtktypebuiltins.h
GEN stamp-gtkprivatetypebuiltins.h
GEN stamp-gtkmarshalers.h
GEN stamp-icons
GEN gtkdbusgenerated.c
GEN gtkdbusgenerated.h
/usr/bin/ld: skipping incompatible /home/test/outputs/gtk3/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libintl.so when searching for -lintl
/usr/bin/ld: skipping incompatible /home/test/outputs/gtk3/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libintl.a when searching for -lintl
/usr/bin/ld: cannot find -lintl
collect2: ld returned 1 exit status
make[4]: *** [extract-strings] Error 1
make[4]: *** Waiting for unfinished jobs....
/home/test/outputs/gtk3/host/usr/bin/glib-mkenums: gtktextview.h:59: Failed to parse ` /*< private >*/ '
/home/test/outputs/gtk3/host/usr/bin/glib-mkenums: gtktextview.h:61: Failed to parse ` /*< public >*/ '
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [/home/test/outputs/gtk3/build/libgtk3-3.12.2/.stamp_built] Error 2
make: *** [_all] Error 2
With the following configuration:
BR2_arm=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-full-2014.05-rc1.tar.bz2"
BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_14=y
BR2_TOOLCHAIN_EXTERNAL_LARGEFILE=y
BR2_TOOLCHAIN_EXTERNAL_INET_IPV6=y
BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
BR2_TOOLCHAIN_EXTERNAL_INET_RPC=y
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_PACKAGE_XORG7=y
BR2_PACKAGE_LIBGTK3=y
BR2_PACKAGE_LIBGTK3_DEMO=y
BR2_PACKAGE_LIBGTK3_TESTS=y
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH v4 1/3] libgtk3: new package
2014-08-03 9:35 ` Thomas Petazzoni
@ 2014-08-03 10:15 ` Thomas Petazzoni
2014-08-03 22:22 ` Eric Le Bihan
0 siblings, 1 reply; 7+ messages in thread
From: Thomas Petazzoni @ 2014-08-03 10:15 UTC (permalink / raw)
To: buildroot
Hello,
On Sun, 3 Aug 2014 11:35:35 +0200, Thomas Petazzoni wrote:
> Making all in gtk
> CCLD extract-strings
> GEN stamp-gtktypebuiltins.h
> GEN stamp-gtkprivatetypebuiltins.h
> GEN stamp-gtkmarshalers.h
> GEN stamp-icons
> GEN gtkdbusgenerated.c
> GEN gtkdbusgenerated.h
> /usr/bin/ld: skipping incompatible /home/test/outputs/gtk3/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libintl.so when searching for -lintl
> /usr/bin/ld: skipping incompatible /home/test/outputs/gtk3/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libintl.a when searching for -lintl
> /usr/bin/ld: cannot find -lintl
> collect2: ld returned 1 exit status
> make[4]: *** [extract-strings] Error 1
> make[4]: *** Waiting for unfinished jobs....
> /home/test/outputs/gtk3/host/usr/bin/glib-mkenums: gtktextview.h:59: Failed to parse ` /*< private >*/ '
> /home/test/outputs/gtk3/host/usr/bin/glib-mkenums: gtktextview.h:61: Failed to parse ` /*< public >*/ '
> make[3]: *** [all-recursive] Error 1
> make[2]: *** [all] Error 2
> make[1]: *** [/home/test/outputs/gtk3/build/libgtk3-3.12.2/.stamp_built] Error 2
> make: *** [_all] Error 2
I've done a little bit more investigation. The problem comes from the
fact that the extract-strings program is built for the host, but using
target cflags/ldflags. The gtk3 configure.ac script has provisions to
specify a PKG_CONFIG_FOR_BUILD, but in the case of Buildroot, our
PKG_CONFIG_FOR_BUILD is just $(HOST_DIR)/usr/bin/pkg-config, but with
several environment variables to adjust its behavior (because by
default, $(HOST_DIR)/usr/bin/pkg-config is cross and returns values for
target libraries).
So, I tried something like:
LIBGTK3_CONF_ENV += \
ac_cv_path_PKG_CONFIG_FOR_BUILD='$(HOST_CONFIGURE_OPTS) $(HOST_PKG_CONFIG_BINARY)'
but it didn't work as the autoconf code does not expect the command to
have multiple, space-separated, tokens.
I've already tried to override GLIB_CFLAGS_FOR_BUILD and
GLIB_LIBS_FOR_BUILD with no luck.
So, right now, I am wondering if we should provide a
$(HOST_DIR)/usr/bin/host-pkg-config that has built-in all the necessary
environment variables to return values appropriate for host libraries.
Any other suggestion?
Best regards,
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH v4 1/3] libgtk3: new package
2014-08-03 10:15 ` Thomas Petazzoni
@ 2014-08-03 22:22 ` Eric Le Bihan
0 siblings, 0 replies; 7+ messages in thread
From: Eric Le Bihan @ 2014-08-03 22:22 UTC (permalink / raw)
To: buildroot
Hi All!
On Sun, Aug 03, 2014 at 12:15:47PM +0200, Thomas Petazzoni wrote:
> Hello,
>
> On Sun, 3 Aug 2014 11:35:35 +0200, Thomas Petazzoni wrote:
>
> > Making all in gtk
> > CCLD extract-strings
> > GEN stamp-gtktypebuiltins.h
> > GEN stamp-gtkprivatetypebuiltins.h
> > GEN stamp-gtkmarshalers.h
> > GEN stamp-icons
> > GEN gtkdbusgenerated.c
> > GEN gtkdbusgenerated.h
> > /usr/bin/ld: skipping incompatible /home/test/outputs/gtk3/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libintl.so when searching for -lintl
> > /usr/bin/ld: skipping incompatible /home/test/outputs/gtk3/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libintl.a when searching for -lintl
> > /usr/bin/ld: cannot find -lintl
> > collect2: ld returned 1 exit status
> > make[4]: *** [extract-strings] Error 1
> > make[4]: *** Waiting for unfinished jobs....
> > /home/test/outputs/gtk3/host/usr/bin/glib-mkenums: gtktextview.h:59: Failed to parse ` /*< private >*/ '
> > /home/test/outputs/gtk3/host/usr/bin/glib-mkenums: gtktextview.h:61: Failed to parse ` /*< public >*/ '
> > make[3]: *** [all-recursive] Error 1
> > make[2]: *** [all] Error 2
> > make[1]: *** [/home/test/outputs/gtk3/build/libgtk3-3.12.2/.stamp_built] Error 2
> > make: *** [_all] Error 2
>
> I've done a little bit more investigation. The problem comes from the
> fact that the extract-strings program is built for the host, but using
> target cflags/ldflags. The gtk3 configure.ac script has provisions to
> specify a PKG_CONFIG_FOR_BUILD, but in the case of Buildroot, our
> PKG_CONFIG_FOR_BUILD is just $(HOST_DIR)/usr/bin/pkg-config, but with
> several environment variables to adjust its behavior (because by
> default, $(HOST_DIR)/usr/bin/pkg-config is cross and returns values for
> target libraries).
>
> So, I tried something like:
>
> LIBGTK3_CONF_ENV += \
> ac_cv_path_PKG_CONFIG_FOR_BUILD='$(HOST_CONFIGURE_OPTS) $(HOST_PKG_CONFIG_BINARY)'
>
> but it didn't work as the autoconf code does not expect the command to
> have multiple, space-separated, tokens.
>
> I've already tried to override GLIB_CFLAGS_FOR_BUILD and
> GLIB_LIBS_FOR_BUILD with no luck.
>
> So, right now, I am wondering if we should provide a
> $(HOST_DIR)/usr/bin/host-pkg-config that has built-in all the necessary
> environment variables to return values appropriate for host libraries.
>
That's the solution I had chosen in my version [1]:
+HOST_LIBGTK3_DEPENDENCIES = host-libglib2 host-libpng host-gdk-pixbuf
+HOST_LIBGTK3_CFLAGS = $(shell $(HOST_DIR)/usr/bin/pkg-config-native \
+ --cflags --libs gdk-pixbuf-2.0)
+
+define HOST_LIBGTK3_INSTALL_PKG_CONFIG_NATIVE
+ $(RM) -f $(HOST_DIR)/usr/bin/pkg-config-native
+ echo -e '#!/bin/sh\n' \
+
'PKG_CONFIG_LIBDIR=$(HOST_DIR)/usr/lib/pkgconfig:$(HOST_DIR)/usr/share/pkgconfig
' \
+ '$(HOST_DIR)/usr/bin/pkgconf $$@' >> $(HOST_DIR)/usr/bin/pkg-config-native
+ chmod +x $(HOST_DIR)/usr/bin/pkg-config-native
+endef
+
+HOST_LIBGTK3_PRE_CONFIGURE_HOOKS += HOST_LIBGTK3_INSTALL_PKG_CONFIG_NATIVE
This hook could easily be moved to package/pkgconf/pkgconf.mk and added to
HOST_PKGCONF_POST_INSTALL_HOOKS. If "host-pkg-config" is preferred over
"pkg-config-native", I can provide a patch using this name.
Best regards,
ELB
[1] https://github.com/elebihan/buildroot/commit/54a0ad6a18481e2db24c6f8f1d0b130b2a830b18
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-08-03 22:22 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-01 1:33 [Buildroot] [PATCH v4 0/3] Add libgtk3 and bump webkit to version 2.4.3 Hadrien Boutteville
2014-08-01 1:33 ` [Buildroot] [PATCH v4 1/3] libgtk3: new package Hadrien Boutteville
2014-08-03 9:35 ` Thomas Petazzoni
2014-08-03 10:15 ` Thomas Petazzoni
2014-08-03 22:22 ` Eric Le Bihan
2014-08-01 1:33 ` [Buildroot] [PATCH v4 2/3] webkit: bump to version 2.4.3 Hadrien Boutteville
2014-08-01 1:33 ` [Buildroot] [PATCH v4 3/3] midori: bump to version 0.5.8 Hadrien Boutteville
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox