* [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 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
* [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
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