summary refs log tree commit diff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2018-07-13 00:25:45 +0200
committerMarius Bakke <mbakke@fastmail.com>2018-07-13 00:25:45 +0200
commit49b6dc2b4e02269850dacc71d9e7ec93139ec5b5 (patch)
tree75c62cc7620a7602a37067dd01268393aec32698 /gnu/packages/patches
parent7519dc95c7628ceeb5ed616604e8c432723a0a50 (diff)
parent2776b5d5bf3514717cf224de34c0bf2d894f1cee (diff)
downloadguix-49b6dc2b4e02269850dacc71d9e7ec93139ec5b5.tar.gz
Merge branch 'staging'
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/alsa-lib-add-environment-variable.patch110
-rw-r--r--gnu/packages/patches/jamvm-arm.patch1313
-rw-r--r--gnu/packages/patches/mesa-wayland-egl-symbols-check-mips.patch15
-rw-r--r--gnu/packages/patches/meson-for-build-rpath.patch7
-rw-r--r--gnu/packages/patches/openblas-fix-tests-i686.patch35
-rw-r--r--gnu/packages/patches/xf86-video-savage-xorg-compat.patch33
-rw-r--r--gnu/packages/patches/xf86-video-sis-xorg-compat.patch18
-rw-r--r--gnu/packages/patches/zathura-pdf-mupdf-link-to-jpeg-libraries.patch55
-rw-r--r--gnu/packages/patches/zathura-plugindir-environment-variable.patch11
9 files changed, 1461 insertions, 136 deletions
diff --git a/gnu/packages/patches/alsa-lib-add-environment-variable.patch b/gnu/packages/patches/alsa-lib-add-environment-variable.patch
deleted file mode 100644
index a468a7fc4f..0000000000
--- a/gnu/packages/patches/alsa-lib-add-environment-variable.patch
+++ /dev/null
@@ -1,110 +0,0 @@
-From 1822fb453128a1b5de93b4c590cd272d6488a077 Mon Sep 17 00:00:00 2001
-From: Julien Lepiller <julien@lepiller.eu>
-Date: Fri, 25 May 2018 19:26:58 +0200
-Subject: [PATCH] Add support for a ALSA_PLUGIN_DIR environment variable.
-
-If it is not set, default to previous behavior.
----
- src/control/control.c |  6 +++++-
- src/dlmisc.c          |  9 +++++++--
- src/pcm/pcm.c         |  9 +++++++--
- src/pcm/pcm_rate.c    | 13 +++++++++----
- 4 files changed, 28 insertions(+), 9 deletions(-)
-
-diff --git a/src/control/control.c b/src/control/control.c
-index 11f7815..9dba7dd 100644
---- a/src/control/control.c
-+++ b/src/control/control.c
-@@ -1331,7 +1331,11 @@ static int snd_ctl_open_conf(snd_ctl_t **ctlp, const char *name,
- 			build_in++;
- 		}
- 		if (*build_in == NULL) {
--			buf1 = malloc(strlen(str) + sizeof(ALSA_PLUGIN_DIR) + 32);
-+			char* plugdir = ALSA_PLUGIN_DIR;
-+			char* envplugdir = getenv("ALSA_PLUGIN_DIR");
-+			if(envplugdir != NULL)
-+				plugdir = envplugdir;
-+			buf1 = malloc(strlen(str) + strlen(plugdir) + 32);
- 			if (buf1 == NULL) {
- 				err = -ENOMEM;
- 				goto _err;
-diff --git a/src/dlmisc.c b/src/dlmisc.c
-index 3757d33..92aa864 100644
---- a/src/dlmisc.c
-+++ b/src/dlmisc.c
-@@ -82,9 +82,14 @@ void *snd_dlopen(const char *name, int mode, char *errbuf, size_t errbuflen)
- 	char *filename = NULL;
- 
- 	if (name && name[0] != '/') {
--		filename = alloca(sizeof(ALSA_PLUGIN_DIR) + 1 + strlen(name) + 1);
-+		char* plugdir = ALSA_PLUGIN_DIR;
-+		char* envplugdir = getenv("ALSA_PLUGIN_DIR");
-+		if(envplugdir != NULL)
-+			plugdir = envplugdir;
-+
-+		filename = malloc(strlen(plugdir) + 1 + strlen(name) + 1);
- 		if (filename) {
--			strcpy(filename, ALSA_PLUGIN_DIR);
-+			strcpy(filename, plugdir);
- 			strcat(filename, "/");
- 			strcat(filename, name);
- 			handle = dlopen(filename, mode);
-diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c
-index 11aec80..590e8b6 100644
---- a/src/pcm/pcm.c
-+++ b/src/pcm/pcm.c
-@@ -2496,13 +2496,18 @@ static int snd_pcm_open_conf(snd_pcm_t **pcmp, const char *name,
- 			build_in++;
- 		}
- 		if (*build_in == NULL) {
--			buf1 = malloc(strlen(str) + sizeof(ALSA_PLUGIN_DIR) + 32);
-+			char* plugdir = ALSA_PLUGIN_DIR;
-+			char* envplugdir = getenv("ALSA_PLUGIN_DIR");
-+			if(envplugdir != NULL)
-+				plugdir = envplugdir;
-+			buf1 = malloc(strlen(str) + strlen(plugdir) + 32);
-+
- 			if (buf1 == NULL) {
- 				err = -ENOMEM;
- 				goto _err;
- 			}
- 			lib = buf1;
--			sprintf(buf1, "%s/libasound_module_pcm_%s.so", ALSA_PLUGIN_DIR, str);
-+			sprintf(buf1, "%s/libasound_module_pcm_%s.so", plugdir, str);
- 		}
- 	}
- #ifndef PIC
-diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c
-index 4e0c7ca..8694a38 100644
---- a/src/pcm/pcm_rate.c
-+++ b/src/pcm/pcm_rate.c
-@@ -1260,7 +1260,8 @@ static const char *const default_rate_plugins[] = {
- 
- static int rate_open_func(snd_pcm_rate_t *rate, const char *type, const snd_config_t *converter_conf, int verbose)
- {
--	char open_name[64], open_conf_name[64], lib_name[128], *lib = NULL;
-+	char open_name[64], open_conf_name[64], *lib = NULL;
-+	char *buf1;
- 	snd_pcm_rate_open_func_t open_func;
- 	snd_pcm_rate_open_conf_func_t open_conf_func;
- 	int err;
-@@ -1268,9 +1269,13 @@ static int rate_open_func(snd_pcm_rate_t *rate, const char *type, const snd_conf
- 	snprintf(open_name, sizeof(open_name), "_snd_pcm_rate_%s_open", type);
- 	snprintf(open_conf_name, sizeof(open_conf_name), "_snd_pcm_rate_%s_open_conf", type);
- 	if (!is_builtin_plugin(type)) {
--		snprintf(lib_name, sizeof(lib_name),
--				 "%s/libasound_module_rate_%s.so", ALSA_PLUGIN_DIR, type);
--		lib = lib_name;
-+		char* plugdir = ALSA_PLUGIN_DIR;
-+		char* envplugdir = getenv("ALSA_PLUGIN_DIR");
-+		if(envplugdir != NULL)
-+			plugdir = envplugdir;
-+		buf1 = malloc(strlen(type) + strlen(plugdir) + 32);
-+		sprintf(buf1, "%s/libasound_module_rate_%s.so", plugdir, type);
-+		lib = buf1;
- 	}
- 
- 	rate->rate_min = SND_PCM_PLUGIN_RATE_MIN;
--- 
-2.17.0
-
diff --git a/gnu/packages/patches/jamvm-arm.patch b/gnu/packages/patches/jamvm-arm.patch
new file mode 100644
index 0000000000..9e998e18db
--- /dev/null
+++ b/gnu/packages/patches/jamvm-arm.patch
@@ -0,0 +1,1313 @@
+From 67faeb7d58e0d25a50d36788ed49ed383b92e090 Mon Sep 17 00:00:00 2001
+From: Efraim Flashner <efraim@flashner.co.il>
+Date: Mon, 26 Mar 2018 11:08:17 +0300
+Subject: [PATCH] add ARMv7 support
+
+---
+ src/arch/arm.h                           |  75 +++++-
+ src/os/linux/arm/Makefile.am             |   9 +-
+ src/os/linux/arm/Makefile.in             | 166 ++++++++----
+ src/os/linux/arm/callNative.S            |  12 +-
+ src/os/linux/arm/callNativeEABI.S        |   8 +-
+ src/os/linux/arm/callNativeEABIHard.S    | 315 +++++++++++++++++++++++
+ src/os/linux/arm/callNativeEABIHardARM.S | 266 +++++++++++++++++++
+ src/os/linux/arm/dll_md.c                |  61 ++++-
+ 8 files changed, 843 insertions(+), 69 deletions(-)
+ create mode 100644 src/os/linux/arm/callNativeEABIHard.S
+ create mode 100644 src/os/linux/arm/callNativeEABIHardARM.S
+
+diff --git a/src/arch/arm.h b/src/arch/arm.h
+index ccf68c4..d2c0318 100644
+--- a/src/arch/arm.h
++++ b/src/arch/arm.h
+@@ -1,6 +1,6 @@
+ /*
+- * Copyright (C) 2003, 2004, 2005, 2006, 2007
+- * Robert Lougher <rob@lougher.org.uk>.
++ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
++ * 2014 Robert Lougher <rob@jamvm.org.uk>.
+  *
+  * This file is part of JamVM.
+  *
+@@ -21,10 +21,16 @@
+ 
+ #define OS_ARCH "arm"
+ 
+-/* Override default min and max heap sizes.  ARM machines are
+-   usually embedded, and the standard defaults are too large. */
+-#define DEFAULT_MAX_HEAP 16*MB
++/* Override minimum min heap size.  The initial heap size is a ratio
++   of the physical memory, but it must be at least the minimum min
++   size.  The normal setting is too large for ARM machines as they
++   are usually embedded. */
++#define MIN_MIN_HEAP 1*MB
++
++/* Likewise, override the default min/max heap sizes used when the
++   size of physical memory is not available */
+ #define DEFAULT_MIN_HEAP 1*MB
++#define DEFAULT_MAX_HEAP 64*MB
+ 
+ #ifdef DIRECT
+ #define HANDLER_TABLE_T static const void
+@@ -51,6 +57,36 @@
+ /* Needed for i386 -- empty here */
+ #define FPU_HACK
+ 
++#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_7A__)
++#define COMPARE_AND_SWAP_32(addr, old_val, new_val)       \
++({                                                        \
++    int result, read_val;                                 \
++    __asm__ __volatile__ ("                               \
++        1:      mov %0, #0;                               \
++                ldrex %1, [%2];                           \
++                cmp %3, %1;                               \
++                bne 2f;                                   \
++                strex %0, %4, [%2];                       \
++                cmp %0, #1;                               \
++                beq 1b;                                   \
++                mov %0, #1;                               \
++        2:"                                               \
++    : "=&r" (result), "=&r" (read_val)                    \
++    : "r" (addr), "r" (old_val), "r" (new_val)            \
++    : "cc", "memory");                                    \
++    result;                                               \
++})
++
++#define COMPARE_AND_SWAP(addr, old_val, new_val)          \
++        COMPARE_AND_SWAP_32(addr, old_val, new_val)
++
++#define LOCKWORD_READ(addr) *addr
++#define LOCKWORD_WRITE(addr, value) *addr = value
++#define LOCKWORD_COMPARE_AND_SWAP(addr, old_val, new_val) \
++        COMPARE_AND_SWAP(addr, old_val, new_val)
++
++#else
++
+ #define LOCKWORD_COMPARE_AND_SWAP(addr, old_val, new_val) \
+ ({                                                        \
+     int result, read_val;                                 \
+@@ -94,7 +130,7 @@ do {                                                      \
+     : "r" (addr), "r" (new_val)                           \
+     : "cc", "memory");                                    \
+ } while(0)
+-
++#endif
+ 
+ #ifdef __ARM_EABI__
+ #define FLUSH_CACHE(addr, length)                         \
+@@ -124,8 +160,33 @@ do {                                                      \
+ }
+ #endif
+ 
++#define GEN_REL_JMP(target_addr, patch_addr, patch_size)  \
++({                                                        \
++    int patched = FALSE;                                  \
++                                                          \
++    if(patch_size >= 4) {                                 \
++        /* Guard against the pointer difference being     \
++           larger than the signed range */                \
++        long long offset = (uintptr_t)(target_addr) -     \
++                           (uintptr_t)(patch_addr) - 8;   \
++                                                          \
++        if(offset >= -1<<25 && offset < 1<<25) {          \
++            *(int*)(patch_addr) = offset>>2 & 0x00ffffff  \
++                                            | 0xea000000; \
++            patched = TRUE;                               \
++        }                                                 \
++    }                                                     \
++    patched;                                              \
++})
++
++#ifdef __ARM_ARCH_7A__
++#define MBARRIER() __asm__ __volatile__ ("dmb" ::: "memory")
++#define UNLOCK_MBARRIER() __asm__ __volatile__ ("dmb" ::: "memory")
++#define JMM_LOCK_MBARRIER() __asm__ __volatile__ ("dmb" ::: "memory")
++#define JMM_UNLOCK_MBARRIER() __asm__ __volatile__ ("dmb" ::: "memory")
++#else
+ #define MBARRIER() __asm__ __volatile__ ("" ::: "memory")
+ #define UNLOCK_MBARRIER() __asm__ __volatile__ ("" ::: "memory")
+ #define JMM_LOCK_MBARRIER() __asm__ __volatile__ ("" ::: "memory")
+ #define JMM_UNLOCK_MBARRIER() __asm__ __volatile__ ("" ::: "memory")
+-
++#endif
+diff --git a/src/os/linux/arm/Makefile.am b/src/os/linux/arm/Makefile.am
+index d18ea5a..74e7786 100644
+--- a/src/os/linux/arm/Makefile.am
++++ b/src/os/linux/arm/Makefile.am
+@@ -1,6 +1,6 @@
+ ##
+-## Copyright (C) 2003, 2004, 2005, 2006, 2007
+-## Robert Lougher <rob@lougher.org.uk>.
++## Copyright (C) 2003, 2004, 2005, 2006, 2007, 2010, 2011, 2012
++## Robert Lougher <rob@jamvm.org.uk>.
+ ##
+ ## This file is part of JamVM.
+ ##
+@@ -19,10 +19,11 @@
+ ## Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ ##
+ 
+-EXTRA_DIST = callNativeOABI.S callNativeEABI.S
++EXTRA_DIST = callNativeOABI.S callNativeEABI.S callNativeEABIHard.S \
++             callNativeEABIHardARM.S
+ 
+ noinst_LTLIBRARIES = libnative.la
+ libnative_la_SOURCES = init.c dll_md.c callNative.S
+ 
+-AM_CPPFLAGS = -I$(top_builddir)/src
++AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src
+ AM_CCASFLAGS = -I$(top_builddir)/src
+diff --git a/src/os/linux/arm/Makefile.in b/src/os/linux/arm/Makefile.in
+index 63b21ad..6d44ea9 100644
+--- a/src/os/linux/arm/Makefile.in
++++ b/src/os/linux/arm/Makefile.in
+@@ -1,8 +1,9 @@
+-# Makefile.in generated by automake 1.10 from Makefile.am.
++# Makefile.in generated by automake 1.11.6 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
++# Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -15,9 +16,27 @@
+ @SET_MAKE@
+ 
+ VPATH = @srcdir@
++am__make_dryrun = \
++  { \
++    am__dry=no; \
++    case $$MAKEFLAGS in \
++      *\\[\ \	]*) \
++        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
++          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
++      *) \
++        for am__flg in $$MAKEFLAGS; do \
++          case $$am__flg in \
++            *=*|--*) ;; \
++            *n*) am__dry=yes; break;; \
++          esac; \
++        done;; \
++    esac; \
++    test $$am__dry = yes; \
++  }
+ pkgdatadir = $(datadir)/@PACKAGE@
+-pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ install_sh_DATA = $(install_sh) -c -m 644
+ install_sh_PROGRAM = $(install_sh) -c
+@@ -42,13 +61,15 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ CONFIG_HEADER = $(top_builddir)/src/config.h
+ CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
+ LTLIBRARIES = $(noinst_LTLIBRARIES)
+ libnative_la_LIBADD =
+ am_libnative_la_OBJECTS = init.lo dll_md.lo callNative.lo
+ libnative_la_OBJECTS = $(am_libnative_la_OBJECTS)
+-DEFAULT_INCLUDES = -I. -I$(top_builddir)/src@am__isrc@
++DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
++am__mv = mv -f
+ CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)
+ LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+@@ -65,6 +86,11 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ 	$(LDFLAGS) -o $@
+ SOURCES = $(libnative_la_SOURCES)
+ DIST_SOURCES = $(libnative_la_SOURCES)
++am__can_run_installinfo = \
++  case $$AM_UPDATE_INFO_DIR in \
++    n|no|NO) false;; \
++    *) (install-info --version) >/dev/null 2>&1;; \
++  esac
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+@@ -84,21 +110,18 @@ CCDEPMODE = @CCDEPMODE@
+ CFLAGS = @CFLAGS@
+ CPP = @CPP@
+ CPPFLAGS = @CPPFLAGS@
+-CXX = @CXX@
+-CXXCPP = @CXXCPP@
+-CXXDEPMODE = @CXXDEPMODE@
+-CXXFLAGS = @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DEFS = @DEFS@
+ DEPDIR = @DEPDIR@
+-ECHO = @ECHO@
++DLLTOOL = @DLLTOOL@
++DSYMUTIL = @DSYMUTIL@
++DUMPBIN = @DUMPBIN@
+ ECHO_C = @ECHO_C@
+ ECHO_N = @ECHO_N@
+ ECHO_T = @ECHO_T@
+ EGREP = @EGREP@
+ EXEEXT = @EXEEXT@
+-F77 = @F77@
+-FFLAGS = @FFLAGS@
++FGREP = @FGREP@
+ GREP = @GREP@
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+@@ -106,21 +129,30 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ JAVAC = @JAVAC@
++LD = @LD@
+ LDFLAGS = @LDFLAGS@
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
++LIPO = @LIPO@
+ LN_S = @LN_S@
+ LTLIBOBJS = @LTLIBOBJS@
+ MAINT = @MAINT@
+ MAKEINFO = @MAKEINFO@
++MANIFEST_TOOL = @MANIFEST_TOOL@
+ MKDIR_P = @MKDIR_P@
++NM = @NM@
++NMEDIT = @NMEDIT@
++OBJDUMP = @OBJDUMP@
+ OBJEXT = @OBJEXT@
++OTOOL = @OTOOL@
++OTOOL64 = @OTOOL64@
+ PACKAGE = @PACKAGE@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ RANLIB = @RANLIB@
+@@ -133,9 +165,9 @@ abs_builddir = @abs_builddir@
+ abs_srcdir = @abs_srcdir@
+ abs_top_builddir = @abs_top_builddir@
+ abs_top_srcdir = @abs_top_srcdir@
++ac_ct_AR = @ac_ct_AR@
+ ac_ct_CC = @ac_ct_CC@
+-ac_ct_CXX = @ac_ct_CXX@
+-ac_ct_F77 = @ac_ct_F77@
++ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
+@@ -149,6 +181,7 @@ build_cpu = @build_cpu@
+ build_os = @build_os@
+ build_vendor = @build_vendor@
+ builddir = @builddir@
++classlib = @classlib@
+ datadir = @datadir@
+ datarootdir = @datarootdir@
+ docdir = @docdir@
+@@ -181,15 +214,18 @@ sharedstatedir = @sharedstatedir@
+ srcdir = @srcdir@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
++top_build_prefix = @top_build_prefix@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ use_zip_no = @use_zip_no@
+ use_zip_yes = @use_zip_yes@
+ with_classpath_install_dir = @with_classpath_install_dir@
+-EXTRA_DIST = callNativeOABI.S callNativeEABI.S
++EXTRA_DIST = callNativeOABI.S callNativeEABI.S callNativeEABIHard.S \
++             callNativeEABIHardARM.S
++
+ noinst_LTLIBRARIES = libnative.la
+ libnative_la_SOURCES = init.c dll_md.c callNative.S
+-AM_CPPFLAGS = -I$(top_builddir)/src
++AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src
+ AM_CCASFLAGS = -I$(top_builddir)/src
+ all: all-am
+ 
+@@ -199,14 +235,14 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+-		&& exit 0; \
++	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
++	        && { if test -f $@; then exit 0; else break; fi; }; \
+ 	      exit 1;; \
+ 	  esac; \
+ 	done; \
+-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/os/linux/arm/Makefile'; \
+-	cd $(top_srcdir) && \
+-	  $(AUTOMAKE) --gnu  src/os/linux/arm/Makefile
++	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/os/linux/arm/Makefile'; \
++	$(am__cd) $(top_srcdir) && \
++	  $(AUTOMAKE) --gnu src/os/linux/arm/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ 	@case '$?' in \
+@@ -224,6 +260,7 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
+ 
+ clean-noinstLTLIBRARIES:
+ 	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+@@ -233,7 +270,7 @@ clean-noinstLTLIBRARIES:
+ 	  echo "rm -f \"$${dir}/so_locations\""; \
+ 	  rm -f "$${dir}/so_locations"; \
+ 	done
+-libnative.la: $(libnative_la_OBJECTS) $(libnative_la_DEPENDENCIES) 
++libnative.la: $(libnative_la_OBJECTS) $(libnative_la_DEPENDENCIES) $(EXTRA_libnative_la_DEPENDENCIES) 
+ 	$(LINK)  $(libnative_la_OBJECTS) $(libnative_la_LIBADD) $(LIBS)
+ 
+ mostlyclean-compile:
+@@ -248,42 +285,42 @@ distclean-compile:
+ 
+ .S.o:
+ @am__fastdepCCAS_TRUE@	$(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCCAS_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCCAS_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCCAS_FALSE@	$(CPPASCOMPILE) -c -o $@ $<
+ 
+ .S.obj:
+ @am__fastdepCCAS_TRUE@	$(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+-@am__fastdepCCAS_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCCAS_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCCAS_FALSE@	$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ 
+ .S.lo:
+ @am__fastdepCCAS_TRUE@	$(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCCAS_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++@am__fastdepCCAS_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCCAS_FALSE@	$(LTCPPASCOMPILE) -c -o $@ $<
+ 
+ .c.o:
+ @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@	$(COMPILE) -c $<
+ 
+ .c.obj:
+ @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+ 
+ .c.lo:
+ @am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+@@ -299,45 +336,49 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+-	  $(AWK) '    { files[$$0] = 1; } \
+-	       END { for (i in files) print i; }'`; \
++	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+ 	mkid -fID $$unique
+ tags: TAGS
+ 
+ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+ 		$(TAGS_FILES) $(LISP)
+-	tags=; \
++	set x; \
+ 	here=`pwd`; \
+ 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+-	  $(AWK) '    { files[$$0] = 1; } \
+-	       END { for (i in files) print i; }'`; \
+-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
++	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++	      END { if (nonempty) { for (i in files) print i; }; }'`; \
++	shift; \
++	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ 	  test -n "$$unique" || unique=$$empty_fix; \
+-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+-	    $$tags $$unique; \
++	  if test $$# -gt 0; then \
++	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++	      "$$@" $$unique; \
++	  else \
++	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++	      $$unique; \
++	  fi; \
+ 	fi
+ ctags: CTAGS
+ CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+ 		$(TAGS_FILES) $(LISP)
+-	tags=; \
+-	here=`pwd`; \
+ 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+-	  $(AWK) '    { files[$$0] = 1; } \
+-	       END { for (i in files) print i; }'`; \
+-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
++	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++	      END { if (nonempty) { for (i in files) print i; }; }'`; \
++	test -z "$(CTAGS_ARGS)$$unique" \
+ 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+-	     $$tags $$unique
++	     $$unique
+ 
+ GTAGS:
+ 	here=`$(am__cd) $(top_builddir) && pwd` \
+-	  && cd $(top_srcdir) \
+-	  && gtags -i $(GTAGS_ARGS) $$here
++	  && $(am__cd) $(top_srcdir) \
++	  && gtags -i $(GTAGS_ARGS) "$$here"
+ 
+ distclean-tags:
+ 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+@@ -358,13 +399,17 @@ distdir: $(DISTFILES)
+ 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ 	  if test -d $$d/$$file; then \
+ 	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++	    if test -d "$(distdir)/$$file"; then \
++	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++	    fi; \
+ 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
++	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ 	    fi; \
+-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
++	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ 	  else \
+-	    test -f $(distdir)/$$file \
+-	    || cp -p $$d/$$file $(distdir)/$$file \
++	    test -f "$(distdir)/$$file" \
++	    || cp -p $$d/$$file "$(distdir)/$$file" \
+ 	    || exit 1; \
+ 	  fi; \
+ 	done
+@@ -382,16 +427,22 @@ install-am: all-am
+ 
+ installcheck: installcheck-am
+ install-strip:
+-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+-	  `test -z '$(STRIP)' || \
+-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++	if test -z '$(STRIP)'; then \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	      install; \
++	else \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
++	fi
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ 
+ maintainer-clean-generic:
+ 	@echo "This command is intended for maintainers to use"
+@@ -413,6 +464,8 @@ dvi-am:
+ 
+ html: html-am
+ 
++html-am:
++
+ info: info-am
+ 
+ info-am:
+@@ -421,18 +474,28 @@ install-data-am:
+ 
+ install-dvi: install-dvi-am
+ 
++install-dvi-am:
++
+ install-exec-am:
+ 
+ install-html: install-html-am
+ 
++install-html-am:
++
+ install-info: install-info-am
+ 
++install-info-am:
++
+ install-man:
+ 
+ install-pdf: install-pdf-am
+ 
++install-pdf-am:
++
+ install-ps: install-ps-am
+ 
++install-ps-am:
++
+ installcheck-am:
+ 
+ maintainer-clean: maintainer-clean-am
+@@ -470,6 +533,7 @@ uninstall-am:
+ 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ 	pdf pdf-am ps ps-am tags uninstall uninstall-am
+ 
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
+diff --git a/src/os/linux/arm/callNative.S b/src/os/linux/arm/callNative.S
+index 39ab6d3..245afd1 100644
+--- a/src/os/linux/arm/callNative.S
++++ b/src/os/linux/arm/callNative.S
+@@ -1,6 +1,6 @@
+ /*
+- * Copyright (C) 2003, 2004, 2005, 2006, 2007
+- * Robert Lougher <rob@lougher.org.uk>.
++ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2011, 2012
++ * Robert Lougher <rob@jamvm.org.uk>.
+  *
+  * This file is part of JamVM.
+  *
+@@ -23,7 +23,15 @@
+ 
+ #ifndef USE_FFI
+ #ifdef __ARM_EABI__
++#ifdef __ARM_PCS_VFP
++#ifdef __ARM_ARCH_7A__
++#include "callNativeEABIHard.S"
++#else
++#include "callNativeEABIHardARM.S"
++#endif
++#else
+ #include "callNativeEABI.S"
++#endif
+ #else
+ #include "callNativeOABI.S"
+ #endif
+diff --git a/src/os/linux/arm/callNativeEABI.S b/src/os/linux/arm/callNativeEABI.S
+index 5effa57..3a7539e 100644
+--- a/src/os/linux/arm/callNativeEABI.S
++++ b/src/os/linux/arm/callNativeEABI.S
+@@ -1,6 +1,6 @@
+ /*
+- * Copyright (C) 2003, 2004, 2005, 2006, 2007
+- * Robert Lougher <rob@lougher.org.uk>.
++ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2011
++ * Robert Lougher <rob@jamvm.org.uk>.
+  *
+  * This file is part of JamVM.
+  *
+@@ -95,8 +95,12 @@ done:
+         ldmfd   sp!, {r2, r3}
+ 
+         /* Call the function */
++#if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__)
+         mov     lr, pc
+         bx      ip
++#else
++        blx     ip
++#endif
+ 
+         subs    r4, r4, #8              /* Pop argument area */
+                                         /* (minus 8 for r2/r3) */
+diff --git a/src/os/linux/arm/callNativeEABIHard.S b/src/os/linux/arm/callNativeEABIHard.S
+new file mode 100644
+index 0000000..5d5785b
+--- /dev/null
++++ b/src/os/linux/arm/callNativeEABIHard.S
+@@ -0,0 +1,315 @@
++/*
++ * Copyright (C) 2011, 2012 Robert Lougher <rob@jamvm.org.uk>.
++ *
++ * This file is part of JamVM.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ */
++
++        .text
++        .syntax unified
++        .arch armv7-a
++        .thumb
++        .align  2
++        .global callJNIMethod
++        .type   callJNIMethod,function
++
++/*
++ * Arguments passed in:
++ *
++ * r0 JNIEnv
++ * r1 class or NULL
++ * r2 sig
++ * r3 extra arg
++ * sp + 0 ostack
++ * sp + 4 function pntr
++ * sp + 8 args count
++ */
++
++/* Register usage :
++ *
++ * r11 function pntr
++ * lr ostack pntr
++ * ip args pntr
++ * r8 sig pntr
++ * r10 extra stack
++ * r6 fp backfill 
++ * r4 fp reg
++ * r7 int reg
++ * r5 scratch
++ * r3, r2 outgoing int args
++ * r1 outgoing class or this pntr
++ * r0 outgoing JNIEnv (as passed in)
++ *
++ * s0 - s16 (d0 - d7) outgoing float args
++ */
++
++callJNIMethod:
++        stmfd   sp!, {r4, r5, r6, r7, r8, r10, r11, lr}
++        ldr     lr, [sp, #32]           /* get ostack pntr */
++        ldr     r11, [sp, #36]          /* get function pntr */
++
++        cmp     r1, #0                  /* is method non-static? */
++        it      eq
++        ldreq   r1, [lr], #4            /* yes, load r1 with "this" */
++
++        mov     r10, r3
++        subs    sp, sp, r3              /* allocate room for stacked */
++        add     r8, r2, #1              /* init sig pntr -- skipping '(' */
++
++        mov     ip, sp                  /* init loop pntr */
++
++        mov     r7, #2
++        mov     r4, #16
++        mov     r6, #0
++
++scan_sig:
++        ldrb    r5, [r8], #1
++
++        cmp     r5, #41                 /* ')' */
++        beq     done
++
++        cmp     r5, #70                 /* 'F' */
++        beq     float
++
++        cmp     r5, #68                 /* 'D' */
++        beq     double
++
++        cmp     r5, #74                 /* 'J' */
++        beq     long
++
++skip_brackets:
++        cmp     r5, #91                 /* '[' */
++        itt     eq
++        ldrbeq  r5, [r8], #1
++        beq     skip_brackets
++
++        cmp     r5, #76                 /* 'L' */
++        bne     int
++
++skip_ref:
++        ldrb    r5, [r8], #1
++        cmp     r5, #59                 /* ';' */
++        bne     skip_ref
++
++int:
++        cbz     r7, stack_int
++
++        subs    r7, r7, #1
++        ite     ne
++        ldrne   r2, [lr], #4
++        ldreq   r3, [lr], #4
++
++        b       scan_sig
++
++float:
++        cbz     r6, no_backfill
++
++        sub     r5, r6, #1
++        mov     r6, #0
++        b       load_float
++
++no_backfill:
++        cbz     r4, stack_int
++        
++        sub     r4, r4, #1
++        mov     r5, r4
++
++load_float:
++        add     lr, lr, #4
++        tbb     [pc, r5]
++
++float_table:
++        .byte (s15-float_table)/2
++        .byte (s14-float_table)/2
++        .byte (s13-float_table)/2
++        .byte (s12-float_table)/2
++        .byte (s11-float_table)/2
++        .byte (s10-float_table)/2
++        .byte (s9-float_table)/2
++        .byte (s8-float_table)/2
++        .byte (s7-float_table)/2
++        .byte (s6-float_table)/2
++        .byte (s5-float_table)/2
++        .byte (s4-float_table)/2
++        .byte (s3-float_table)/2
++        .byte (s2-float_table)/2
++        .byte (s1-float_table)/2
++        .byte (s0-float_table)/2
++
++stack_int:
++        ldr     r5, [lr], #4
++        str     r5, [ip], #4
++        b       scan_sig
++
++s0:
++        vldr    s0, [lr, #-4]
++        b       scan_sig
++s1:
++        vldr    s1, [lr, #-4]
++        b       scan_sig
++s2:
++        vldr    s2, [lr, #-4]
++        b       scan_sig
++s3:
++        vldr    s3, [lr, #-4]
++        b       scan_sig
++s4:
++        vldr    s4, [lr, #-4]
++        b       scan_sig
++s5:
++        vldr    s5, [lr, #-4]
++        b       scan_sig
++s6:
++        vldr    s6, [lr, #-4]
++        b       scan_sig
++s7:
++        vldr    s7, [lr, #-4]
++        b       scan_sig
++s8:
++        vldr    s8, [lr, #-4]
++        b       scan_sig
++s9:
++        vldr    s9, [lr, #-4]
++        b       scan_sig
++s10:
++        vldr    s10, [lr, #-4]
++        b       scan_sig
++s11:
++        vldr    s11, [lr, #-4]
++        b       scan_sig
++s12:
++        vldr    s12, [lr, #-4]
++        b       scan_sig
++s13:
++        vldr    s13, [lr, #-4]
++        b       scan_sig
++s14:
++        vldr    s14, [lr, #-4]
++        b       scan_sig
++s15:
++        vldr    s15, [lr, #-4]
++        b       scan_sig
++
++long:
++        cmp     r7, #2
++        mov     r7, #0
++        bne     stack_long
++
++        ldmia   lr!, {r2, r3}
++        b       scan_sig
++
++double:
++        lsrs    r5, r4, #1
++        it      cs
++        movcs   r6, r4
++
++        lsls    r4, r5, #1
++        beq     stack_double
++
++        sub     r4, r4, #2
++        add     lr, lr, #8
++        tbb     [pc, r5]
++
++double_table:
++        .byte 0
++        .byte (d7-double_table)/2
++        .byte (d6-double_table)/2
++        .byte (d5-double_table)/2
++        .byte (d4-double_table)/2
++        .byte (d3-double_table)/2
++        .byte (d2-double_table)/2
++        .byte (d1-double_table)/2
++        .byte (d0-double_table)/2
++        .align 2
++d0:
++        vldr    d0, [lr, #-8]
++        b       scan_sig
++d1:
++        vldr    d1, [lr, #-8]
++        b       scan_sig
++d2:
++        vldr    d2, [lr, #-8]
++        b       scan_sig
++d3:
++        vldr    d3, [lr, #-8]
++        b       scan_sig
++d4:
++        vldr    d4, [lr, #-8]
++        b       scan_sig
++d5:
++        vldr    d5, [lr, #-8]
++        b       scan_sig
++d6:
++        vldr    d6, [lr, #-8]
++        b       scan_sig
++d7:
++        vldr    d7, [lr, #-8]
++        b       scan_sig
++
++stack_double:
++        mov     r6, #0
++
++stack_long:
++        /* Ensure address is 8 byte aligned */
++        add     ip, ip, #7
++        bic     ip, ip, #7
++        
++        ldr     r5, [lr], #4
++        str     r5, [ip], #4
++        ldr     r5, [lr], #4
++        str     r5, [ip], #4
++        b       scan_sig
++
++done:
++        /* Call the function */
++        blx     r11
++
++        add     sp, sp, r10             /* Pop argument area */
++
++        ldr     r4, [sp, #32]           /* Reload ostack for */
++                                        /* address of return value */
++
++        ldrb    r5, [r8]                /* Return type */
++
++        cmp     r5, #86                 /* 'V' */
++        beq     return
++
++        cmp     r5, #68                 /* 'D' */
++        beq     return_double
++
++        cmp     r5, #70                 /* 'F' */
++        beq     return_float
++
++        str     r0, [r4], #4            /* Low word */
++
++        cmp     r5, #74                 /* 'J' */
++        it      eq
++        streq   r1, [r4], #4            /* High word */
++
++return:
++        mov     r0, r4                  /* return ostack */
++        ldmfd   sp!, {r4, r5, r6, r7, r8, r10, r11, lr}
++        bx      lr
++
++return_float:
++        vstr    s0, [r4]
++        add     r4, r4, #4
++        b       return
++
++return_double:
++        vstr    d0, [r4]
++        add     r4, r4, #8
++        b       return
+diff --git a/src/os/linux/arm/callNativeEABIHardARM.S b/src/os/linux/arm/callNativeEABIHardARM.S
+new file mode 100644
+index 0000000..3a31acd
+--- /dev/null
++++ b/src/os/linux/arm/callNativeEABIHardARM.S
+@@ -0,0 +1,266 @@
++/*
++ * Copyright (C) 2011, 2012 Robert Lougher <rob@jamvm.org.uk>.
++ *
++ * This file is part of JamVM.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ */
++
++        .text
++        .align  2
++        .global callJNIMethod
++        .type   callJNIMethod,function
++
++/*
++ * Arguments passed in:
++ *
++ * r0 JNIEnv
++ * r1 class or NULL
++ * r2 sig
++ * r3 extra arg
++ * sp + 0 ostack
++ * sp + 4 function pntr
++ * sp + 8 args count
++ */
++
++/* Register usage :
++ *
++ * lr ostack pntr
++ * ip scratch
++ * r11 function pntr
++ * r10 fp backfill 
++ * r8 fp reg
++ * r7 int reg
++ * r6 args pntr
++ * r5 sig pntr
++ * r4 extra stack
++ * r3, r2 outgoing int args
++ * r1 outgoing class or this pntr
++ * r0 outgoing JNIEnv (as passed in)
++ *
++ * s0 - s16 (d0 - d7) outgoing float args
++ */
++
++callJNIMethod:
++        stmfd   sp!, {r4, r5, r6, r7, r8, r10, r11, lr}
++        ldr     lr, [sp, #32]           /* get ostack pntr */
++        ldr     r11, [sp, #36]          /* get function pntr */
++
++        cmp     r1, #0                  /* is method non-static? */
++        ldreq   r1, [lr], #4            /* yes, load r1 with "this" */
++
++        mov     r4, r3
++        sub     sp, sp, r4              /* allocate room for stacked */
++        add     r5, r2, #1              /* init sig pntr -- skipping '(' */
++
++        mov     r6, sp                  /* init loop pntr */
++
++        mov     r7, #2
++        mov     r8, #16
++        mov     r10, #0
++
++scan_sig:
++        ldrb    ip, [r5], #1
++
++        cmp     ip, #41                 /* ')' */
++        beq     done
++
++        cmp     ip, #70                 /* 'F' */
++        beq     float
++
++        cmp     ip, #68                 /* 'D' */
++        beq     double
++
++        cmp     ip, #74                 /* 'J' */
++        beq     long
++
++skip_brackets:
++        cmp     ip, #91                 /* '[' */
++        ldreqb  ip, [r5], #1
++        beq     skip_brackets
++
++        cmp     ip, #76                 /* 'L' */
++        bne     int
++
++skip_ref:
++        ldrb    ip, [r5], #1
++        cmp     ip, #59                 /* ';' */
++        bne     skip_ref
++
++int:
++        cmp     r7, #0
++        beq     stack_int
++
++        subs    r7, r7, #1
++
++        ldrne   r2, [lr], #4
++        ldreq   r3, [lr], #4
++
++        b       scan_sig
++
++stack_int:
++        ldr     ip, [lr], #4
++        str     ip, [r6], #4
++        b       scan_sig
++
++float:
++        cmp     r10, #0
++        beq     no_backfill
++
++        sub     ip, r10, #1
++        mov     r10, #0
++        b       load_float
++
++no_backfill:
++        cmp     r8, #0
++        beq     stack_int
++        
++        sub     r8, r8, #1
++        mov     ip, r8
++
++load_float:
++        add     lr, lr, #4
++        add     pc, pc, ip, lsl #3
++        nop
++
++        flds    s15, [lr, #-4]
++        b       scan_sig
++        flds    s14, [lr, #-4]
++        b       scan_sig
++        flds    s13, [lr, #-4]
++        b       scan_sig
++        flds    s12, [lr, #-4]
++        b       scan_sig
++        flds    s11, [lr, #-4]
++        b       scan_sig
++        flds    s10, [lr, #-4]
++        b       scan_sig
++        flds    s9, [lr, #-4]
++        b       scan_sig
++        flds    s8, [lr, #-4]
++        b       scan_sig
++        flds    s7, [lr, #-4]
++        b       scan_sig
++        flds    s6, [lr, #-4]
++        b       scan_sig
++        flds    s5, [lr, #-4]
++        b       scan_sig
++        flds    s4, [lr, #-4]
++        b       scan_sig
++        flds    s3, [lr, #-4]
++        b       scan_sig
++        flds    s2, [lr, #-4]
++        b       scan_sig
++        flds    s1, [lr, #-4]
++        b       scan_sig
++        flds    s0, [lr, #-4]
++        b       scan_sig
++
++long:
++        cmp     r7, #2
++        mov     r7, #0
++        bne     stack_long
++
++        ldr     r2, [lr], #4
++        ldr     r3, [lr], #4
++        b       scan_sig
++
++double:
++        lsrs    ip, r8, #1
++        movcs   r10, r8
++
++        lsls    r8, ip, #1
++        beq     stack_double
++
++        sub     r8, r8, #2
++        add     lr, lr, #8
++        add     pc, pc, ip, lsl #3
++        nop
++        nop
++        nop
++
++        fldd    d7, [lr, #-8]
++        b       scan_sig
++        fldd    d6, [lr, #-8]
++        b       scan_sig
++        fldd    d5, [lr, #-8]
++        b       scan_sig
++        fldd    d4, [lr, #-8]
++        b       scan_sig
++        fldd    d3, [lr, #-8]
++        b       scan_sig
++        fldd    d2, [lr, #-8]
++        b       scan_sig
++        fldd    d1, [lr, #-8]
++        b       scan_sig
++        fldd    d0, [lr, #-8]
++        b       scan_sig
++
++stack_double:
++        mov     r10, #0
++
++stack_long:
++        /* Ensure address is 8 byte aligned */
++        add     r6, r6, #7
++        bic     r6, r6, #7
++        
++        ldr     ip, [lr], #4
++        str     ip, [r6], #4
++        ldr     ip, [lr], #4
++        str     ip, [r6], #4
++        b       scan_sig
++
++done:
++        /* Call the function */
++#if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__)
++        mov     lr, pc
++        bx      r11
++#else
++        blx     r11
++#endif
++
++        add     sp, sp, r4              /* Pop argument area */
++        ldr     r4, [sp, #32]           /* Reload ostack for */
++                                        /* address of return value */
++        ldrb    ip, [r5]                /* Return type */
++
++        cmp     ip, #86                 /* 'V' */
++        beq     return
++
++        cmp     ip, #68                 /* 'D' */
++        beq     return_double
++
++        cmp     ip, #70                 /* 'F' */
++        beq     return_float
++
++        str     r0, [r4], #4            /* Low word */
++
++        cmp     ip, #74                 /* 'J' */
++        streq   r1, [r4], #4            /* High word */
++
++return:
++        mov     r0, r4                  /* return ostack */
++        ldmfd   sp!, {r4, r5, r6, r7, r8, r10, r11, lr}
++        bx      lr
++
++return_float:
++        add     r4, r4, #4
++        fsts    s0, [r4, #-4]
++        b       return
++
++return_double:
++        add     r4, r4, #8
++        fstd    d0, [r4, #-8]
++        b       return
+diff --git a/src/os/linux/arm/dll_md.c b/src/os/linux/arm/dll_md.c
+index f5df90e..39bdf7c 100644
+--- a/src/os/linux/arm/dll_md.c
++++ b/src/os/linux/arm/dll_md.c
+@@ -1,6 +1,6 @@
+ /*
+- * Copyright (C) 2003, 2004, 2005, 2006, 2007
+- * Robert Lougher <rob@lougher.org.uk>.
++ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2011
++ * Robert Lougher <rob@jamvm.org.uk>.
+  *
+  * This file is part of JamVM.
+  *
+@@ -31,6 +31,61 @@
+  * out stack requirements and then to push arguments.  To
+  * save the first scan at call time, the signature is pre-
+  * scanned and stack requirement stored in the extra argument. */
++
++#ifdef __ARM_PCS_VFP
++int nativeExtraArg(MethodBlock *mb) {
++    char *sig = mb->type;
++    int fp_backfill = 0;
++    int stack_args = 0;
++    int int_args = 2;
++    int fp_args = 16;
++
++    while(*++sig != ')')
++        switch(*sig) {
++            case 'J':
++                if(int_args < 2)
++                    stack_args = (stack_args + 15) & ~7;
++                int_args = 0;
++                break;
++
++            case 'D':
++                fp_backfill |= fp_args & 1;
++                fp_args &= ~1;
++
++                if(fp_args == 0) {
++                    stack_args = (stack_args + 15) & ~7;
++                    fp_backfill = 0;
++                } else
++                    fp_args -= 2;
++                break;
++
++            case 'F':
++                if(fp_backfill)
++                    fp_backfill = 0;
++                else {
++                    if(fp_args == 0) 
++                        stack_args += 4;
++                    else
++                        fp_args--;
++                }
++                break;
++
++            default:
++                if(int_args == 0)
++                    stack_args += 4;
++                else
++                    int_args--;
++
++                if(*sig == '[')
++                    while(*++sig == '[');
++                if(*sig == 'L')
++                    while(*++sig != ';');
++                break;
++        }
++
++    return (stack_args + 7) & ~7;
++}
++#else
+ int nativeExtraArg(MethodBlock *mb) {
+     char *sig = mb->type;
+     int args = 0;
+@@ -57,7 +112,7 @@ int nativeExtraArg(MethodBlock *mb) {
+        native method, so minimum stack requirement is 8 bytes. */
+     return args < 8 ? 8 : args;
+ }
+-
++#endif
+ #else
+ 
+ /* Under OABI, arguments can be copied onto the stack "as is"
+-- 
+2.17.1
+
diff --git a/gnu/packages/patches/mesa-wayland-egl-symbols-check-mips.patch b/gnu/packages/patches/mesa-wayland-egl-symbols-check-mips.patch
deleted file mode 100644
index aa2278697e..0000000000
--- a/gnu/packages/patches/mesa-wayland-egl-symbols-check-mips.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Fix 'wayland-egl-symbols-check' on mips64el-linux, where an additional symbol
-(_ftext) is present in libwayland-egl.so.
-
-Patch by Mark H Weaver <mhw@netris.org>
-
---- mesa-12.0.1/src/egl/wayland/wayland-egl/wayland-egl-symbols-check.orig	2016-01-18 02:39:25.000000000 -0500
-+++ mesa-12.0.1/src/egl/wayland/wayland-egl/wayland-egl-symbols-check	2016-10-24 16:25:07.110721426 -0400
-@@ -7,6 +7,7 @@
- wl_egl_window_destroy
- wl_egl_window_get_attached_size
- _fini
-+_ftext
- _init
- EOF
- done)
diff --git a/gnu/packages/patches/meson-for-build-rpath.patch b/gnu/packages/patches/meson-for-build-rpath.patch
index 4e20c9aed3..2151d53565 100644
--- a/gnu/packages/patches/meson-for-build-rpath.patch
+++ b/gnu/packages/patches/meson-for-build-rpath.patch
@@ -6,14 +6,13 @@ Patch by Peter Mikkelsen <petermikkelsen10@gmail.com>
 
 --- meson-0.42.0/mesonbuild/scripts/meson_install.py.orig	2017-09-09 01:49:39.147374148 +0200
 +++ meson-0.42.0/mesonbuild/scripts/meson_install.py	2017-09-09 01:51:01.209134717 +0200
-@@ -345,15 +345,6 @@
+@@ -391,14 +391,6 @@
                      print("Symlink creation does not work on this platform. "
                            "Skipping all symlinking.")
                      printed_symlink_error = True
--        if is_elf_platform() and os.path.isfile(outname):
+-        if os.path.isfile(outname):
 -            try:
--                e = depfixer.Elf(outname, False)
--                e.fix_rpath(install_rpath)
+-                depfixer.fix_rpath(outname, install_rpath, False)
 -            except SystemExit as e:
 -                if isinstance(e.code, int) and e.code == 0:
 -                    pass
diff --git a/gnu/packages/patches/openblas-fix-tests-i686.patch b/gnu/packages/patches/openblas-fix-tests-i686.patch
new file mode 100644
index 0000000000..3325546ea3
--- /dev/null
+++ b/gnu/packages/patches/openblas-fix-tests-i686.patch
@@ -0,0 +1,35 @@
+Fix a test failure on some i686 systems:
+
+https://github.com/xianyi/OpenBLAS/issues/1575
+
+This patch is a squashed version of these commits:
+
+https://github.com/xianyi/OpenBLAS/pull/1583
+
+diff --git a/kernel/x86/KERNEL.NEHALEM b/kernel/x86/KERNEL.NEHALEM
+index 835520ef..65b03ae5 100644
+--- a/kernel/x86/KERNEL.NEHALEM
++++ b/kernel/x86/KERNEL.NEHALEM
+@@ -1,3 +1 @@
+ include $(KERNELDIR)/KERNEL.PENRYN
+-SSWAPKERNEL  = ../arm/swap.c
+-DSWAPKERNEL  = ../arm/swap.c
+diff --git a/kernel/x86/swap.S b/kernel/x86/swap.S
+index 54b00b33..e30c2789 100644
+--- a/kernel/x86/swap.S
++++ b/kernel/x86/swap.S
+@@ -138,6 +138,14 @@
+ /* INCX != 1 or INCY != 1 */
+ 
+ .L14:
++	cmpl	$0, %ebx
++	jne	.L141
++	cmpl	$0, %ecx
++	jne	.L141
++/* INCX == 0 and INCY == 0 */
++	jmp	.L27
++
++.L141:
+ 	movl	%edx, %eax
+ 	sarl	$2,   %eax
+ 	jle	.L28
diff --git a/gnu/packages/patches/xf86-video-savage-xorg-compat.patch b/gnu/packages/patches/xf86-video-savage-xorg-compat.patch
new file mode 100644
index 0000000000..9524032676
--- /dev/null
+++ b/gnu/packages/patches/xf86-video-savage-xorg-compat.patch
@@ -0,0 +1,33 @@
+Fix build against xorg-server >= 1.20.
+
+Patch taken from upstream:
+https://cgit.freedesktop.org/xorg/driver/xf86-video-savage/commit/?id=0ece556daa8a88771b669d8104396abd9166d2d0
+
+diff --git a/src/savage_driver.c b/src/savage_driver.c
+index 58a294d..3cda923 100644
+--- a/src/savage_driver.c
++++ b/src/savage_driver.c
+@@ -2034,8 +2034,6 @@ static Bool SavagePreInit(ScrnInfoPtr pScrn, int flags)
+     xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Detected current MCLK value of %1.3f MHz\n",
+ 	       mclk / 1000.0);
+ 
+-    pScrn->maxHValue = 2048 << 3;	/* 11 bits of h_total 8-pixel units */
+-    pScrn->maxVValue = 2048;		/* 11 bits of v_total */
+     pScrn->virtualX = pScrn->display->virtualX;
+     pScrn->virtualY = pScrn->display->virtualY;
+ 
+@@ -3637,6 +3635,14 @@ static ModeStatus SavageValidMode(SCRN_ARG_TYPE arg, DisplayModePtr pMode,
+        (pMode->VDisplay > psav->PanelY)))
+ 	    return MODE_PANEL;
+ 
++    /* 11 bits of h_total 8-pixel units */
++    if (pMode->HTotal > (2048 << 3))
++	return MODE_BAD_HVALUE;
++
++    /* 11 bits of v_total */
++    if (pMode->VTotal > 2048)
++	return MODE_BAD_VVALUE;
++
+     if (psav->UseBIOS) {
+ 	refresh = SavageGetRefresh(pMode);
+         return (SavageMatchBiosMode(pScrn,pMode->HDisplay,
diff --git a/gnu/packages/patches/xf86-video-sis-xorg-compat.patch b/gnu/packages/patches/xf86-video-sis-xorg-compat.patch
new file mode 100644
index 0000000000..ebe9715d13
--- /dev/null
+++ b/gnu/packages/patches/xf86-video-sis-xorg-compat.patch
@@ -0,0 +1,18 @@
+Remove use of interface no longer provided by xorg-server.
+
+Patch taken from upstream:
+https://cgit.freedesktop.org/xorg/driver/xf86-video-sis/commit/?id=4b1356a2b7fd06e9a05d134caa4033681c939737
+
+diff --git a/src/sis_driver.c b/src/sis_driver.c
+index 8f06164..513f68b 100644
+--- a/src/sis_driver.c
++++ b/src/sis_driver.c
+@@ -2738,7 +2738,7 @@ SiSPrintModes(ScrnInfoPtr pScrn)
+     float hsync, refresh = 0.0;
+     char *desc, *desc2, *prefix, *uprefix, *output;
+ 
+-    xf86DrvMsg(pScrn->scrnIndex, pScrn->virtualFrom, "Virtual size is %dx%d "
++    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Virtual size is %dx%d "
+ 	       "(pitch %d)\n", pScrn->virtualX, pScrn->virtualY,
+ 	       pScrn->displayWidth);
+ 
diff --git a/gnu/packages/patches/zathura-pdf-mupdf-link-to-jpeg-libraries.patch b/gnu/packages/patches/zathura-pdf-mupdf-link-to-jpeg-libraries.patch
new file mode 100644
index 0000000000..63e058bbef
--- /dev/null
+++ b/gnu/packages/patches/zathura-pdf-mupdf-link-to-jpeg-libraries.patch
@@ -0,0 +1,55 @@
+From: Tobias Geerinckx-Rice <me@tobias.gr>
+Date: Mon, 18 Jun 2018 02:37:41 +0200
+Subject: zathura-pdf-mupdf: Link to JPEG libraries.
+
+As of version 0.3.3, zathura-pdf-mupdf no longer links to some required
+JPEG libraries, leading to such errors as:
+
+  $ zathura foo.pdf
+  error: Could not load plugin '/gnu/store/...-profile/lib/zathura/libpdf-mupdf.so' (/gnu/store/...-profile/lib/zathura/libpdf-mupdf.so: undefined symbol: jpeg_resync_to_restart).
+
+The patch below, copied verbatim from Arch[0], fixes that.
+Its description happens to match our reality, too.
+
+[0]: https://git.archlinux.org/svntogit/community.git/tree/trunk?h=packages/zathura-pdf-mupdf
+---
+From 3fb0ff750373d45d4f5172ce1d41b74183cd07e8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Johannes=20L=C3=B6thberg?= <johannes@kyriasis.com>
+Date: Sat, 24 Mar 2018 14:31:18 +0100
+Subject: [PATCH] Explicitly link against jbig2dec, openjp2, and jpeg
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Normally these are statically linked into libmupdfthird, but we delete
+those to make mupdf use the system libraries.  Previously
+zathura-pdf-mupdf explicitly linked against them, but this is
+technically incorrect since they are supposed to be in libmupdfthird so
+that was removed.  This commit essentially reverts that in the new build
+system.
+
+Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
+---
+ meson.build | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 3b0d7b7..ae2fc9c 100644
+--- a/meson.build
++++ b/meson.build
+@@ -22,7 +22,11 @@ cairo = dependency('cairo')
+ mupdf = cc.find_library('mupdf')
+ mupdfthird = cc.find_library('mupdfthird')
+ 
+-build_dependencies = [zathura, girara, glib, cairo, mupdf, mupdfthird]
++jbig2dec = cc.find_library('jbig2dec')
++openjp2 = cc.find_library('openjp2')
++jpeg = cc.find_library('jpeg')
++
++build_dependencies = [zathura, girara, glib, cairo, mupdf, mupdfthird, jbig2dec, openjp2, jpeg]
+ 
+ # defines
+ defines = [
+-- 
+2.16.3
+
diff --git a/gnu/packages/patches/zathura-plugindir-environment-variable.patch b/gnu/packages/patches/zathura-plugindir-environment-variable.patch
index 2e3ea527d0..a8ffff965a 100644
--- a/gnu/packages/patches/zathura-plugindir-environment-variable.patch
+++ b/gnu/packages/patches/zathura-plugindir-environment-variable.patch
@@ -8,15 +8,15 @@ different file formats) called ZATHURA_PLUGIN_PATH. Command line option
 -p still takes precedence.
 
 Patch by Paul van der Walt <paul@denknerd.org>
+Adjusted for Zathura 0.3.9 by Tobias Geerinckx-Rice <me@tobias.gr>
 ---
  zathura/zathura.c | 7 +++++++
  1 file changed, 7 insertions(+)
 
 diff --git a/zathura/zathura.c b/zathura/zathura.c
-index 589dd28..375ec54 100644
 --- a/zathura/zathura.c
 +++ b/zathura/zathura.c
-@@ -413,6 +413,13 @@ zathura_set_plugin_dir(zathura_t* zathura, const char* dir)
+@@ -597,6 +597,13 @@ zathura_set_plugin_dir(zathura_t* zathura, const char* dir)
    g_return_if_fail(zathura != NULL);
    g_return_if_fail(zathura->plugins.manager != NULL);
  
@@ -28,8 +28,5 @@ index 589dd28..375ec54 100644
 +    dir = g_getenv("ZATHURA_PLUGIN_PATH");
 +
    if (dir != NULL) {
-     girara_list_t* paths = girara_split_path_array(dir);
-     GIRARA_LIST_FOREACH(paths, char*, iter, path)
--- 
-2.3.1
-
+     set_plugin_dir(zathura, dir);
+ #ifdef ZATHURA_PLUGINDIR