--- /dev/null
+From b637542e490b98b94ddc2dce6919970703f46932 Mon Sep 17 00:00:00 2001
+From: Ximin Luo <infinity0@pwned.gg>
+Date: Sun, 23 Mar 2014 03:07:41 +0000
+Subject: [PATCH] add some more conditional compilation stuff to make things
+ work for firefox 27+
+
+---
+ GnomeKeyring.cpp | 8 ++++++++
+ Makefile | 4 +++-
+ config.sh | 30 +++++++++++++++++++++---------
+ xpcom_abi.cpp | 4 ++++
+ 4 files changed, 36 insertions(+), 10 deletions(-)
+
+diff --git a/GnomeKeyring.cpp b/GnomeKeyring.cpp
+index ac089ed..92711c8 100644
+--- a/GnomeKeyring.cpp
++++ b/GnomeKeyring.cpp
+@@ -37,6 +37,10 @@
+ *
+ * ***** END LICENSE BLOCK ***** */
+
++#if HAVE_MOZ_BUG_956507
++#include "mozilla/Char16.h"
++#endif
++
+ #include "GnomeKeyring.h"
+ #include "nsMemory.h"
+ #include "nsILoginInfo.h"
+@@ -614,8 +618,12 @@ NS_IMETHODIMP GnomeKeyring::Init()
+ return ret;
+ }
+
++#if HAVE_NSILMS_INITWITHFILE_2
+ NS_IMETHODIMP GnomeKeyring::InitWithFile(nsIFile *aInputFile,
+ nsIFile *aOutputFile)
++#else
++NS_IMETHODIMP GnomeKeyring::InitWithFile(nsIFile *aInputFile)
++#endif
+ {
+ // TODO
+ return Init();
+diff --git a/Makefile b/Makefile
+index cecfce7..5c52024 100644
+--- a/Makefile
++++ b/Makefile
+@@ -62,6 +62,8 @@ else
+ endif
+
+ SHELL_EXPORT := $(foreach v,CXX XUL_CFLAGS XUL_LDFLAGS XPCOM_ABI_FLAGS GNOME_CFLAGS GNOME_LDFLAGS CXXFLAGS LDFLAGS,$(v)="$($(v))")
++CXX_MACRO_EXPORT := $(foreach v,HAVE_NSILMS_GETISLOGGEDIN HAVE_NSILMS_INITWITHFILE_2 HAVE_MOZ_BUG_956507 HAVE_MOZGLUE,-D$(v)="$($(v))")
++
+ config.vars: config.sh GnomeKeyring.h xpcom_abi.cpp Makefile
+ $(SHELL_EXPORT) sh $^ > $@
+
+@@ -97,7 +99,7 @@ xpi/chrome/skin/hicolor/seahorse.svg: seahorse.svg
+ cp -a $< $@
+
+ $(TARGET): GnomeKeyring.cpp GnomeKeyring.h
+- $(CXX) $< -o $@ -shared -DHAVE_NSILMS_GETISLOGGEDIN=$(HAVE_NSILMS_GETISLOGGEDIN) \
++ $(CXX) $< -o $@ -shared $(CXX_MACRO_EXPORT) \
+ $(XUL_CFLAGS) $(XUL_LDFLAGS) $(GNOME_CFLAGS) $(GNOME_LDFLAGS) $(CXXFLAGS) $(LDFLAGS)
+ chmod +x $@
+
+diff --git a/config.sh b/config.sh
+index bf50a68..4b32da2 100755
+--- a/config.sh
++++ b/config.sh
+@@ -13,8 +13,20 @@ XUL_VERSION=$(echo '#include "mozilla-config.h"'|
+ XUL_VER_MIN=$(echo $XUL_VERSION | sed -r -e 's/([^.]+\.[^.]+).*/\1/g')
+ XUL_VER_MAX=$(echo $XUL_VERSION | sed -rn -e 's/([^.]+).*/\1.*/gp')
+
+-HAVE_NSILMS_GETISLOGGEDIN=$({ echo '#include "'"$SRC_GNOME_KEYRING_H"'"'; echo 'NS_IMETHODIMP GnomeKeyring::GetIsLoggedIn(bool *aIsLoggedIn) { return NS_OK; }'; } |
+- $CXX $XUL_CFLAGS $GNOME_CFLAGS $CXXFLAGS -x c++ -w -c -o /dev/null - && echo 1 || echo 0)
++HAVE_NSILMS_GETISLOGGEDIN=$({ cat <<EOF; } | $CXX $XUL_CFLAGS $GNOME_CFLAGS $CXXFLAGS -x c++ -w -c -o /dev/null - 2>/dev/null && echo 1 || echo 0)
++#include "$SRC_GNOME_KEYRING_H"
++NS_IMETHODIMP GnomeKeyring::GetIsLoggedIn(bool *aIsLoggedIn) { return NS_OK; }
++EOF
++
++HAVE_NSILMS_INITWITHFILE_2=$({ cat <<EOF; } | $CXX $XUL_CFLAGS $GNOME_CFLAGS $CXXFLAGS -x c++ -w -c -o /dev/null - 2>/dev/null && echo 1 || echo 0)
++#include "$SRC_GNOME_KEYRING_H"
++NS_IMETHODIMP GnomeKeyring::InitWithFile(nsIFile *aInputFile, nsIFile *aOutputFile) { return NS_OK; }
++EOF
++
++HAVE_MOZ_BUG_956507=$({ cat <<EOF; } | $CXX $XUL_CFLAGS $GNOME_CFLAGS $CXXFLAGS -x c++ -w -c -o /dev/null - 2>/dev/null && echo 0 || echo 1)
++#include <nspr/prtypes.h>
++#include "mozilla/Char16.h"
++EOF
+
+ HAVE_MOZGLUE=$($CXX $XUL_CFLAGS $XUL_LDFLAGS $XPCOM_ABI_FLAGS $CXXFLAGS $LDFLAGS -lmozglue -shared -o /dev/null && echo 1 || echo 0)
+
+@@ -22,13 +34,13 @@ if [ $HAVE_MOZGLUE = 1 ]; then
+ XPCOM_ABI_FLAGS="$XPCOM_ABI_FLAGS -Wl,-whole-archive -lmozglue -Wl,-no-whole-archive"
+ fi
+ DST_XPCOM_ABI="$(dirname $0)/xpcom_abi"
+-$CXX $SRC_XPCOM_ABI_CPP -o "$DST_XPCOM_ABI" $XUL_CFLAGS $XUL_LDFLAGS $XPCOM_ABI_FLAGS $CXXFLAGS $LDFLAGS
++$CXX $SRC_XPCOM_ABI_CPP -DHAVE_MOZ_BUG_956507="$HAVE_MOZ_BUG_956507" -o "$DST_XPCOM_ABI" \
++ $XUL_CFLAGS $XUL_LDFLAGS $XPCOM_ABI_FLAGS $CXXFLAGS $LDFLAGS
+ PLATFORM="$("$DST_XPCOM_ABI")"
+
+-echo export XUL_VERSION="$XUL_VERSION"
+-echo export XUL_VER_MIN="$XUL_VER_MIN"
+-echo export XUL_VER_MAX="$XUL_VER_MAX"
+-echo export HAVE_NSILMS_GETISLOGGEDIN="$HAVE_NSILMS_GETISLOGGEDIN"
+-echo export HAVE_MOZGLUE="$HAVE_MOZGLUE"
+-echo export PLATFORM="$PLATFORM"
++for var in XUL_VERSION XUL_VER_MIN XUL_VER_MAX PLATFORM \
++ HAVE_NSILMS_GETISLOGGEDIN HAVE_NSILMS_INITWITHFILE_2 HAVE_MOZ_BUG_956507 HAVE_MOZGLUE; do
++ eval val=\$$var
++ echo export $var=$val
++done;
+ echo export HAVE_CONFIG_VARS=1
+diff --git a/xpcom_abi.cpp b/xpcom_abi.cpp
+index c6d0202..bf8d91b 100644
+--- a/xpcom_abi.cpp
++++ b/xpcom_abi.cpp
+@@ -1,6 +1,10 @@
+ #include <stdio.h>
+ #include <stdint.h>
+
++#if HAVE_MOZ_BUG_956507
++#include "mozilla/Char16.h"
++#endif
++
+ #include "nsIXULRuntime.h"
+ #include "nsServiceManagerUtils.h"
+ #include "nsStringAPI.h"
+--
+1.8.5.5
+