summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Solano Gómez <gentoo@sattvik.com>2010-09-16 21:12:27 -0500
committerDaniel Solano Gómez <gentoo@sattvik.com>2010-09-16 21:12:27 -0500
commit52b63f8ead5f5106238801628bb3b223e806adc3 (patch)
tree356454827f228d92d1ea53660414640d011cb317
parentAdd icecat 3.6.9 that does not depend on net-print/cups[gnutls]. (diff)
downloadsattvik-52b63f8ead5f5106238801628bb3b223e806adc3.tar.gz
sattvik-52b63f8ead5f5106238801628bb3b223e806adc3.tar.bz2
sattvik-52b63f8ead5f5106238801628bb3b223e806adc3.zip
Add net-libs/xulrunner-1.9.2.9 without cups[gnutls].
-rw-r--r--net-libs/xulrunner/Manifest21
-rw-r--r--net-libs/xulrunner/files/000_flex-configure-LANG.patch41
-rw-r--r--net-libs/xulrunner/files/066-fix-includedir-mozilla-js.patch24
-rw-r--r--net-libs/xulrunner/files/1000_fix_alignment.patch33
-rw-r--r--net-libs/xulrunner/files/1002_fix-system-hunspell-dict-detections.patch112
-rw-r--r--net-libs/xulrunner/files/1009-armv4t-nanojit-v2.patch320
-rw-r--r--net-libs/xulrunner/files/301-xulrunner-xpctools.diff25
-rw-r--r--net-libs/xulrunner/files/801-enable-x86_64-tracemonkey.patch25
-rw-r--r--net-libs/xulrunner/files/fix_crash_in_windowwatcher.patch28
-rw-r--r--net-libs/xulrunner/files/xulrunner-1.9-no_sunstudio.patch14
-rw-r--r--net-libs/xulrunner/files/xulrunner-1.9-solaris64.patch493
-rw-r--r--net-libs/xulrunner/files/xulrunner-1.9.1.5-solaris-undef-regs.patch19
-rw-r--r--net-libs/xulrunner/files/xulrunner-1.9.2-arm-fixes.patch35
-rw-r--r--net-libs/xulrunner/files/xulrunner-1.9.2-fix-pkgconfig-file.patch9
-rw-r--r--net-libs/xulrunner/files/xulrunner-1.9.2-noalsa-fixup.patch26
-rw-r--r--net-libs/xulrunner/files/xulrunner-1.9.2-solaris-madvise.patch13
-rw-r--r--net-libs/xulrunner/files/xulrunner-1.9_beta5-prefix.patch59
-rw-r--r--net-libs/xulrunner/files/xulrunner-default-prefs.js14
-rw-r--r--net-libs/xulrunner/metadata.xml12
-rw-r--r--net-libs/xulrunner/xulrunner-1.9.2.9.ebuild246
20 files changed, 1569 insertions, 0 deletions
diff --git a/net-libs/xulrunner/Manifest b/net-libs/xulrunner/Manifest
new file mode 100644
index 0000000..b7d1589
--- /dev/null
+++ b/net-libs/xulrunner/Manifest
@@ -0,0 +1,21 @@
+AUX 000_flex-configure-LANG.patch 1761 RMD160 638ae47607f582d6d264f7b6f4c3626ff60dbcb6 SHA1 db6d868d034b46b63ad292ab2e1c9b889fbeef75 SHA256 88719f2b3ab2be74a4d27173f7464f6fbc8e7697b84e3c32d19cf6e16170e532
+AUX 066-fix-includedir-mozilla-js.patch 747 RMD160 39c4430f77e42f5f5ad5f8038c036fccac1a7bb0 SHA1 9a1a09ee9bdca8ab9aeec6408baf207da9abe88a SHA256 069f6b1a43662e417e7f0194ceb039941c209409f8fb788914f862595cdf52f4
+AUX 1000_fix_alignment.patch 796 RMD160 d6098c483a90d47ead8cc7c643bf51270465b4cd SHA1 d2e861a0892550659a152d6a4ae9a1d31996c800 SHA256 49675bf2771b3e1bc50069f3a07f96062c771e8281d8e5abc2219dd08a23d377
+AUX 1002_fix-system-hunspell-dict-detections.patch 3394 RMD160 5db17109743eeff4550dd23c7780afb5eead6505 SHA1 3855eec6b3fc23652bb113ce4215555e7375566e SHA256 335e6f51c5e22ef8735c5a4c99b21b903f6d5dd32d6e766761c39a421ee651f3
+AUX 1009-armv4t-nanojit-v2.patch 12251 RMD160 9e9d862879d4897067605879245c1a6d50cf32fe SHA1 dcfe3da40dc822f2769e244571b721b59e59f322 SHA256 68c4df9c5313b93e8c5d7c7e8ed8375a88e9afa28c05e3965180058ba06cf05b
+AUX 301-xulrunner-xpctools.diff 550 RMD160 12d370d5473de5c54233a70533cd35e37305ef86 SHA1 e3812ce6a4446b0b9d496a9dd4760d03bf0de449 SHA256 6bf510f7df5a41f47501cbdbcffc46d0c04865e3597dc6a575cd4a9cfae1def4
+AUX 801-enable-x86_64-tracemonkey.patch 501 RMD160 e8341671a9ab7f05cf58735a2b862ded55d82829 SHA1 d0c194c79993c3c47a8c46726d3f024e044766a0 SHA256 20f558efbf4ed1960b390c353c7eeb94108fcdb8aaf33f1fea6caf44468aeb7c
+AUX fix_crash_in_windowwatcher.patch 1102 RMD160 d539f5d8d82b389a8b2969a294821fd2d1184dd4 SHA1 0c2a8a36cdff57ba45166c76def0950cce297470 SHA256 5dd5145c1f3c0de1267384f0d68aa48c7cf50ba080d5074144f5b706af85d737
+AUX xulrunner-1.9-no_sunstudio.patch 416 RMD160 fbd1be7182ff8a7aead935cf2f2ce5432aa5f5b8 SHA1 b50c3c30485ef140a0aeeb6de3875761cd906bcb SHA256 2dce8f5a07c623701ce5ae8c2517bd8776adff6c3a371d4762570e806ccf0a34
+AUX xulrunner-1.9-solaris64.patch 18082 RMD160 8d1b3e2b8a6eb191b0d775f0e96391a321d6e981 SHA1 b984870ff665613ece1af103220f7a7a2d4296cb SHA256 d6c8a8f5835aa3075f1da70aa7524dc81d4a081d9b78503ec929d22e5c742f05
+AUX xulrunner-1.9.1.5-solaris-undef-regs.patch 433 RMD160 11f805b661ce8ded829b00ae5e3b134a32420ac4 SHA1 d90ef838e52c3f3d7d21e91bb2451614a9ebefbc SHA256 730150845b311b394dc0c398afb72ef74c7d220dbc6013872d922610189ab0f8
+AUX xulrunner-1.9.2-arm-fixes.patch 587 RMD160 495e8037785a1867fad0c088a4c834df6f02291c SHA1 5f08ef1f65771c2891a067c7baac8a4ef8466deb SHA256 a1b0aef546deecafe64c9ce70b08e7252a3eaf8d84a381a62b5edfaf1f735817
+AUX xulrunner-1.9.2-fix-pkgconfig-file.patch 397 RMD160 f1724e2476d21751e59845826dfc76dadd9db048 SHA1 0f70bfb689cba2fc609b6642408c41b0032422bc SHA256 74590a970f96a767c353e5530e40048c3c1ea0f652029eb35e782029c0b45d6e
+AUX xulrunner-1.9.2-noalsa-fixup.patch 1031 RMD160 6eae45ee3e29fa47a7b31688cfcbfb594fcdd79b SHA1 845d4962708281bbd0cba45db82335739a50897b SHA256 1c4e017b6a8d81267a9d4b29b10cc4cfe69b090f8f8903a663f25b5e300eddd5
+AUX xulrunner-1.9.2-solaris-madvise.patch 339 RMD160 50228123c1e85a5bbbe9b53d669f219916addac4 SHA1 363f9a62cd28bc4c0a326b73041c0b9f76909079 SHA256 8380ccd3153e9f31a1c6dcd45cc3ca8a772b2f7663d2839e92831c0198d3f90c
+AUX xulrunner-1.9_beta5-prefix.patch 1824 RMD160 e784c2fe11620a39699aea341d2e363ca4ce9e1e SHA1 6992f18c0ea289a28bcf2ea23f00bec88a791af0 SHA256 0d3c6f761dfce8d86be4af75c994100152e889065ad3aa78d5ff7cdfad0a86ad
+AUX xulrunner-default-prefs.js 677 RMD160 73ec130da332c1d6517a6f838d5fab0cc134289a SHA1 b9efc3ef5e95ad3081f6b68d771e32e848b4b9ac SHA256 53493080276f221f1619153c114caf268206a6fa107972b33a4eb7f1c1cf6fe8
+DIST firefox-3.6.9.source.tar.bz2 51240588 RMD160 530b1d64cc02ba0433c3a39d1c97c569dad090ef SHA1 2429154c8d50bb5eeef80233b56fb26dcf727ea3 SHA256 9f7f09e2d064a5835d719ccb59a70d2d32a1860f67cb9cc88c4b693668580503
+DIST xulrunner-1.9.2-patches-0.7.tar.bz2 16366 RMD160 2bfa5f56d58d5bb4508512190cf07454814fb0b5 SHA1 2c6e2cfb0c50a5595795561126de26941dbed576 SHA256 3e25e9b8d5fe9109f03889bca9240f92acd502fd68efe0e7eda304f5487b6bf0
+EBUILD xulrunner-1.9.2.9.ebuild 7934 RMD160 93945468f9a5a668f2e19faa0f6b84504e45bc36 SHA1 c6475a85ab7be90f6428fdfcaba8a5b6bd9b0658 SHA256 fc7a2a57a2d40464e206595f6907d06bb7afdf85a8ca05675800b24b386f624c
+MISC metadata.xml 534 RMD160 6f9915565c51559c0e4726fed4e43cffce894306 SHA1 7ababd8846ab59b3ea43ac0153750584aa792055 SHA256 60f561d9e9846e96bfa0d6a9161058986c65dba93879073e7138477b6ce61978
diff --git a/net-libs/xulrunner/files/000_flex-configure-LANG.patch b/net-libs/xulrunner/files/000_flex-configure-LANG.patch
new file mode 100644
index 0000000..6d32a85
--- /dev/null
+++ b/net-libs/xulrunner/files/000_flex-configure-LANG.patch
@@ -0,0 +1,41 @@
+The LANG vars aren't reset early enough so when sed tries to use [a-zA-Z] in
+option parsing, it may break.
+
+http://bugs.gentoo.org/103483
+
+--- configure~ 2009-07-31 20:07:25.087663220 -0500
++++ configure 2009-07-31 20:07:37.987684452 -0500
+@@ -468,6 +468,16 @@
+ infodir='${prefix}/info'
+ mandir='${prefix}/man'
+
++# NLS nuisances.
++# Only set these to C if already set. These must not be set unconditionally
++# because not all systems understand e.g. LANG=C (notably SCO).
++# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
++# Non-C LC_CTYPE values break the ctype check.
++if test "${LANG+set}" = set; then LANG=C; export LANG; fi
++if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
++if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
++if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
++
+ # Initialize some other variables.
+ subdirs=
+ MFLAGS= MAKEFLAGS=
+@@ -856,16 +866,6 @@
+ esac
+ done
+
+-# NLS nuisances.
+-# Only set these to C if already set. These must not be set unconditionally
+-# because not all systems understand e.g. LANG=C (notably SCO).
+-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+-# Non-C LC_CTYPE values break the ctype check.
+-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+-
+ # confdefs.h avoids OS command line length limits that DEFS can exceed.
+ rm -rf conftest* confdefs.h
+ # AIX cpp loses on an empty file, so make sure it contains at least a newline.
diff --git a/net-libs/xulrunner/files/066-fix-includedir-mozilla-js.patch b/net-libs/xulrunner/files/066-fix-includedir-mozilla-js.patch
new file mode 100644
index 0000000..4900427
--- /dev/null
+++ b/net-libs/xulrunner/files/066-fix-includedir-mozilla-js.patch
@@ -0,0 +1,24 @@
+mozjs stuff is actually in /unstable not in /stable
+
+Causes bugs like http://bugs.gentoo.org/275318
+
+Upstream bug: https://bugzilla.mozilla.org/show_bug.cgi?id=500645
+
+Will likely be fixed in 1.9.2
+
+---
+--- xulrunner/installer/mozilla-js.pc.in 2009-06-26 08:37:34.458635913 -0500
++++ xulrunner/installer/mozilla-js.pc.in 2009-06-26 08:38:13.623656097 -0500
+@@ -1,10 +1,11 @@
+ prefix=%prefix%
+ sdkdir=%sdkdir%
+ includedir=%includedir%
++includetypes=unstable
+
+ Name: JavaScript
+ Description: The Mozilla JavaScript Library
+ Version: %MOZILLA_VERSION%
+ Requires: %NSPR_NAME% >= %NSPR_VERSION%
+ Libs: -L${sdkdir}/lib -lmozjs
+-Cflags: -I${includedir}/stable -DXP_UNIX -DJS_THREADSAFE
++Cflags: -I${includedir}/${includetypes} -DXP_UNIX -DJS_THREADSAFE
diff --git a/net-libs/xulrunner/files/1000_fix_alignment.patch b/net-libs/xulrunner/files/1000_fix_alignment.patch
new file mode 100644
index 0000000..2ef47c3
--- /dev/null
+++ b/net-libs/xulrunner/files/1000_fix_alignment.patch
@@ -0,0 +1,33 @@
+From: David Mandelin <dmandelin@mozilla.com>
+
+diff --git a/memory/jemalloc/jemalloc.c b/memory/jemalloc/jemalloc.c
+--- a/memory/jemalloc/jemalloc.c
++++ b/memory/jemalloc/jemalloc.c
+@@ -5792,24 +5792,24 @@ __attribute__((noinline))
+ #else
+ inline
+ #endif
+ void *
+ memalign(size_t alignment, size_t size)
+ {
+ void *ret;
+
+- assert(((alignment - 1) & alignment) == 0 && alignment >=
+- sizeof(void *));
++ assert(((alignment - 1) & alignment) == 0);
+
+ if (malloc_init()) {
+ ret = NULL;
+ goto RETURN;
+ }
+
++ alignment = alignment < sizeof(void*) ? sizeof(void*) : alignment;
+ ret = ipalloc(alignment, size);
+
+ RETURN:
+ #ifdef MALLOC_XMALLOC
+ if (opt_xmalloc && ret == NULL) {
+ _malloc_message(_getprogname(),
+ ": (malloc) Error in memalign(): out of memory\n", "", "");
+ abort();
+
diff --git a/net-libs/xulrunner/files/1002_fix-system-hunspell-dict-detections.patch b/net-libs/xulrunner/files/1002_fix-system-hunspell-dict-detections.patch
new file mode 100644
index 0000000..0e2986e
--- /dev/null
+++ b/net-libs/xulrunner/files/1002_fix-system-hunspell-dict-detections.patch
@@ -0,0 +1,112 @@
+diff -r e06632956519 extensions/spellcheck/Makefile.in
+--- a/extensions/spellcheck/Makefile.in Sun Apr 04 07:02:14 2010 +0300
++++ b/extensions/spellcheck/Makefile.in Tue Apr 06 23:07:03 2010 -0500
+@@ -42,13 +42,19 @@
+ include $(DEPTH)/config/autoconf.mk
+
+ MODULE = spellchecker
++ifndef MOZ_NATIVE_HUNSPELL
+ DIRS = idl locales
++else
++DIRS = idl
++endif
+
+ ifeq (camino,$(MOZ_BUILD_APP))
+ DIRS += osxspell
+ else
++ifndef MOZ_NATIVE_HUNSPELL
+ DIRS += hunspell
+ endif
++endif
+
+ DIRS += src
+
+diff -r e06632956519 extensions/spellcheck/hunspell/src/mozHunspell.cpp
+--- a/extensions/spellcheck/hunspell/src/mozHunspell.cpp Sun Apr 04 07:02:14 2010 +0300
++++ b/extensions/spellcheck/hunspell/src/mozHunspell.cpp Tue Apr 06 23:07:03 2010 -0500
+@@ -63,6 +63,9 @@
+ #include "nsISimpleEnumerator.h"
+ #include "nsIDirectoryEnumerator.h"
+ #include "nsIFile.h"
++#ifdef MOZ_NATIVE_HUNSPELL
++#include "nsILocalFile.h"
++#endif
+ #include "nsDirectoryServiceUtils.h"
+ #include "nsDirectoryServiceDefs.h"
+ #include "mozISpellI18NManager.h"
+@@ -307,7 +310,16 @@
+ return;
+
+ nsCOMPtr<nsIFile> dictDir;
+- rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY,
++ #ifdef MOZ_NATIVE_HUNSPELL
++ nsCOMPtr<nsILocalFile> localFile;
++ rv = NS_NewNativeLocalFile(nsDependentCString("/usr/share/myspell"),PR_TRUE, getter_AddRefs(localFile));
++ if (localFile && NS_SUCCEEDED(rv)) {
++ localFile->QueryInterface(NS_GET_IID(nsIFile), getter_AddRefs(dictDir));
++ LoadDictionariesFromDir(dictDir);
++ }
++ else {
++ #endif
++ rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY,
+ NS_GET_IID(nsIFile), getter_AddRefs(dictDir));
+ if (NS_SUCCEEDED(rv)) {
+ LoadDictionariesFromDir(dictDir);
+@@ -332,6 +344,9 @@
+ LoadDictionariesFromDir(appDir);
+ }
+ }
++#ifdef MOZ_NATIVE_HUNSPELL
++ }
++#endif
+
+ nsCOMPtr<nsISimpleEnumerator> dictDirs;
+ rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY_LIST,
+diff -r e06632956519 extensions/spellcheck/src/Makefile.in
+--- a/extensions/spellcheck/src/Makefile.in Sun Apr 04 07:02:14 2010 +0300
++++ b/extensions/spellcheck/src/Makefile.in Tue Apr 06 23:07:03 2010 -0500
+@@ -63,9 +63,15 @@
+ txtsvc \
+ uconv \
+ unicharutil \
++ xulapp \
+ $(NULL)
+
+-CPPSRCS = \
++ifdef MOZ_NATIVE_HUNSPELL
++CPPSRCS += mozHunspell.cpp \
++ mozHunspellDirProvider.cpp
++endif
++
++CPPSRCS += \
+ mozSpellCheckerFactory.cpp \
+ mozSpellChecker.cpp \
+ mozPersonalDictionary.cpp \
+@@ -80,8 +86,15 @@
+ SHARED_LIBRARY_LIBS += ../osxspell/src/$(LIB_PREFIX)osxspell_s.$(LIB_SUFFIX)
+ LOCAL_INCLUDES += -I$(srcdir)/../osxspell/src
+ else
++ifndef MOZ_NATIVE_HUNSPELL
+ SHARED_LIBRARY_LIBS += ../hunspell/src/$(LIB_PREFIX)hunspell_s.$(LIB_SUFFIX)
+ LOCAL_INCLUDES += -I$(srcdir)/../hunspell/src
++else
++LOCAL_INCLUDES += $(MOZ_HUNSPELL_CFLAGS) \
++ -I$(srcdir)/../hunspell/src \
++ -DMOZ_NATIVE_HUNSPELL \
++ $(NULL)
++endif
+ endif
+
+ EXTRA_DSO_LDOPTS = \
+@@ -96,3 +109,11 @@
+ LOCAL_INCLUDES += \
+ -I$(topsrcdir)/xpcom/io \
+ $(NULL)
++
++ifdef MOZ_NATIVE_HUNSPELL
++export:: $(srcdir)/../hunspell/src/mozHunspell.cpp $(srcdir)/../hunspell/src/mozHunspellDirProvider.cpp
++ $(INSTALL) $(srcdir)/../hunspell/src/mozHunspell.* $(srcdir)/../hunspell/src/mozHunspellDirProvider.* .
++GARBAGE += mozHunspell.$(OBJ_SUFFIX) mozHunspell.cpp mozHunspellDirProvider.$(OBJ_SUFFIX) mozHunspellDirProvider.cpp
++clean::
++ rm -f mozHunspell.* mozHunspellDirProvider.*
++endif
diff --git a/net-libs/xulrunner/files/1009-armv4t-nanojit-v2.patch b/net-libs/xulrunner/files/1009-armv4t-nanojit-v2.patch
new file mode 100644
index 0000000..2d57c95
--- /dev/null
+++ b/net-libs/xulrunner/files/1009-armv4t-nanojit-v2.patch
@@ -0,0 +1,320 @@
+From: Mike Hommey <glandium@debian.org>
+Date: Fri, 30 Apr 2010 14:32:41 +0200
+Subject: Add nanojit support for ARMv4T
+
+Thanks Albin Tonnerre for the initial patch.
+https://bugzilla.mozilla.org/show_bug.cgi?id=552624
+---
+ js/src/nanojit/NativeARM.cpp | 105 ++++++++++++++++++++++------------------
+ js/src/nanojit/avmplus.h | 2 +
+ js/src/nanojit/njcpudetect.h | 111 ++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 170 insertions(+), 48 deletions(-)
+ create mode 100644 js/src/nanojit/njcpudetect.h
+
+diff --git a/js/src/nanojit/NativeARM.cpp b/js/src/nanojit/NativeARM.cpp
+index 9387191..a50898c 100644
+--- a/js/src/nanojit/NativeARM.cpp
++++ b/js/src/nanojit/NativeARM.cpp
+@@ -61,6 +61,8 @@ extern "C" void __clear_cache(void *BEG, void *END);
+
+ #ifdef FEATURE_NANOJIT
+
++#define ARM_ARCH_AT_LEAST(wanted) ((NJ_COMPILER_ARM_ARCH >= wanted) || (ARM_ARCH >= wanted))
++
+ namespace nanojit
+ {
+
+@@ -114,49 +116,50 @@ Assembler::CountLeadingZeroes(uint32_t data)
+ {
+ uint32_t leading_zeroes;
+
+- // We can't do CLZ on anything earlier than ARMv5. Architectures as early
+- // as that aren't supported, but assert that we aren't running on one
+- // anyway.
+- // If ARMv4 support is required in the future for some reason, we can do a
+- // run-time check on config.arch and fall back to the C routine, but for
+- // now we can avoid the cost of the check as we don't intend to support
+- // ARMv4 anyway.
+- NanoAssert(ARM_ARCH >= 5);
+-
+ #if defined(__ARMCC__)
+ // ARMCC can do this with an intrinsic.
+ leading_zeroes = __clz(data);
+
+-// current Android GCC compiler incorrectly refuses to compile 'clz' for armv5
+-// (even though this is a legal instruction there). Since we currently only compile for ARMv5
+-// for emulation, we don't care too much (but we DO care for ARMv6+ since those are "real"
+-// devices).
+-#elif defined(__GNUC__) && !(defined(ANDROID) && __ARM_ARCH__ <= 5)
++ if (0) // We don't need the fallback
++#elif defined(__GNUC__)
+ // GCC can use inline assembler to insert a CLZ instruction.
+- __asm (
+- " clz %0, %1 \n"
+- : "=r" (leading_zeroes)
+- : "r" (data)
+- );
++ // Targetting armv5t allows a toolchain with armv4t default target to
++ // still build with clz. On Android gcc compiler, clz is not supported
++ // with a target smaller than armv7.
++ if (ARM_ARCH_AT_LEAST(5))
++ __asm (
++#if defined(ANDROID) && NJ_COMPILER_ARM_ARCH <= 5
++ ".arch armv7\n"
++#elif (NJ_COMPILER_ARM_ARCH < 5)
++ ".arch armv5t\n"
++#endif
++ " clz %0, %1 \n"
++ : "=r" (leading_zeroes)
++ : "r" (data)
++ );
++ else
+ #elif defined(WINCE)
+ // WinCE can do this with an intrinsic.
+ leading_zeroes = _CountLeadingZeros(data);
+-#else
+- // Other platforms must fall back to a C routine. This won't be as
+- // efficient as the CLZ instruction, but it is functional.
+- uint32_t try_shift;
+-
+- leading_zeroes = 0;
+-
+- // This loop does a bisection search rather than the obvious rotation loop.
+- // This should be faster, though it will still be no match for CLZ.
+- for (try_shift = 16; try_shift != 0; try_shift /= 2) {
+- uint32_t shift = leading_zeroes + try_shift;
+- if (((data << shift) >> shift) == data) {
+- leading_zeroes = shift;
++
++ if (0) // We don't need the fallback
++#endif
++ {
++ // Other platforms must fall back to a C routine. This won't be as
++ // efficient as the CLZ instruction, but it is functional.
++ uint32_t try_shift;
++
++ leading_zeroes = 0;
++
++ // This loop does a bisection search rather than the obvious rotation loop.
++ // This should be faster, though it will still be no match for CLZ.
++ for (try_shift = 16; try_shift != 0; try_shift /= 2) {
++ uint32_t shift = leading_zeroes + try_shift;
++ if (((data << shift) >> shift) == data) {
++ leading_zeroes = shift;
++ }
+ }
+ }
+-#endif
+
+ // Assert that the operation worked!
+ NanoAssert(((0xffffffff >> leading_zeroes) & data) == data);
+@@ -555,13 +558,18 @@ NIns*
+ Assembler::genEpilogue()
+ {
+ // On ARMv5+, loading directly to PC correctly handles interworking.
+- // Note that we don't support anything older than ARMv5.
+- NanoAssert(ARM_ARCH >= 5);
+-
+- RegisterMask savingMask = rmask(FP) | rmask(PC);
++ // On ARMv4T, interworking is not handled properly, therefore, we pop
++ // lr into ip and use bx ip to avoid that.
++ if (ARM_ARCH_AT_LEAST(5)) {
++ RegisterMask savingMask = rmask(FP) | rmask(PC);
+
+- POP_mask(savingMask); // regs
++ POP_mask(savingMask); // regs
++ } else {
++ RegisterMask savingMask = rmask(FP) | rmask(IP);
+
++ BX(IP);
++ POP_mask(savingMask); // regs
++ }
+ return _nIns;
+ }
+
+@@ -1502,7 +1510,7 @@ Assembler::BranchWithLink(NIns* addr)
+
+ // ARMv5 and above can use BLX <imm> for branches within ±32MB of the
+ // PC and BLX Rm for long branches.
+- if (isS24(offs>>2)) {
++ if (isS24(offs>>2) && (ARM_ARCH_AT_LEAST(5))) {
+ // the value we need to stick in the instruction; masked,
+ // because it will be sign-extended back to 32 bits.
+ intptr_t offs2 = (offs>>2) & 0xffffff;
+@@ -1519,7 +1527,6 @@ Assembler::BranchWithLink(NIns* addr)
+ // We need to emit an ARMv5+ instruction, so assert that we have a
+ // suitable processor. Note that we don't support ARMv4(T), but
+ // this serves as a useful sanity check.
+- NanoAssert(ARM_ARCH >= 5);
+
+ // The (pre-shifted) value of the "H" bit in the BLX encoding.
+ uint32_t H = (offs & 0x2) << 23;
+@@ -1543,11 +1550,6 @@ Assembler::BranchWithLink(NIns* addr)
+ inline void
+ Assembler::BLX(Register addr, bool chk /* = true */)
+ {
+- // We need to emit an ARMv5+ instruction, so assert that we have a suitable
+- // processor. Note that we don't support ARMv4(T), but this serves as a
+- // useful sanity check.
+- NanoAssert(ARM_ARCH >= 5);
+-
+ NanoAssert(IsGpReg(addr));
+ // There is a bug in the WinCE device emulator which stops "BLX LR" from
+ // working as expected. Assert that we never do that!
+@@ -1558,8 +1560,15 @@ Assembler::BLX(Register addr, bool chk /* = true */)
+ }
+
+ // BLX IP
+- *(--_nIns) = (NIns)( (COND_AL) | (0x12<<20) | (0xFFF<<8) | (0x3<<4) | (addr) );
+- asm_output("blx ip");
++ if (ARM_ARCH_AT_LEAST(5)) {
++ *(--_nIns) = (NIns)( (COND_AL) | (0x12<<20) | (0xFFF<<8) | (0x3<<4) | (addr) );
++ asm_output("blx %s", gpn(addr));
++ } else {
++ *(--_nIns) = (NIns)( (COND_AL) | (0x12fff1 << 4) | (addr) );
++ asm_output("bx %s", gpn(addr));
++ *(--_nIns) = (NIns)( (COND_AL) | (0x1A0 << 16) | (0xE << 12) | 0xF );
++ asm_output("mov lr, pc");
++ }
+ }
+
+ // Emit the code required to load a memory address into a register as follows:
+@@ -2177,7 +2186,7 @@ Assembler::asm_arith(LInsp ins)
+ // common for (rr == ra) and is thus likely to be the most
+ // efficient case; if ra is no longer used after this LIR
+ // instruction, it is re-used for the result register (rr).
+- if ((ARM_ARCH > 5) || (rr != rb)) {
++ if ((ARM_ARCH_AT_LEAST(6)) || (rr != rb)) {
+ // Newer cores place no restrictions on the registers used in a
+ // MUL instruction (compared to other arithmetic instructions).
+ MUL(rr, rb, ra);
+diff --git a/js/src/nanojit/avmplus.h b/js/src/nanojit/avmplus.h
+index ffc0873..e86f22e 100644
+--- a/js/src/nanojit/avmplus.h
++++ b/js/src/nanojit/avmplus.h
+@@ -50,6 +50,8 @@
+ #include "jstypes.h"
+ #include "jsstdint.h"
+
++#include "njcpudetect.h"
++
+ #ifdef AVMPLUS_ARM
+ #define ARM_ARCH config.arch
+ #define ARM_VFP config.vfp
+diff --git a/js/src/nanojit/njcpudetect.h b/js/src/nanojit/njcpudetect.h
+new file mode 100644
+index 0000000..79ea90b
+--- /dev/null
++++ b/js/src/nanojit/njcpudetect.h
+@@ -0,0 +1,111 @@
++/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
++/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
++/* ***** BEGIN LICENSE BLOCK *****
++ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
++ *
++ * The contents of this file are subject to the Mozilla Public License Version
++ * 1.1 (the "License"); you may not use this file except in compliance with
++ * the License. You may obtain a copy of the License at
++ * http://www.mozilla.org/MPL/
++ *
++ * Software distributed under the License is distributed on an "AS IS" basis,
++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
++ * for the specific language governing rights and limitations under the
++ * License.
++ *
++ * The Original Code is [Open Source Virtual Machine].
++ *
++ * The Initial Developer of the Original Code is
++ * Adobe System Incorporated.
++ * Portions created by the Initial Developer are Copyright (C) 2004-2007
++ * the Initial Developer. All Rights Reserved.
++ *
++ * Contributor(s):
++ * Adobe AS3 Team
++ *
++ * Alternatively, the contents of this file may be used under the terms of
++ * either the GNU General Public License Version 2 or later (the "GPL"), or
++ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
++ * in which case the provisions of the GPL or the LGPL are applicable instead
++ * of those above. If you wish to allow use of your version of this file only
++ * under the terms of either the GPL or the LGPL, and not to allow others to
++ * use your version of this file under the terms of the MPL, indicate your
++ * decision by deleting the provisions above and replace them with the notice
++ * and other provisions required by the GPL or the LGPL. If you do not delete
++ * the provisions above, a recipient may use your version of this file under
++ * the terms of any one of the MPL, the GPL or the LGPL.
++ *
++ * ***** END LICENSE BLOCK ***** */
++
++#ifndef __njcpudetect__
++#define __njcpudetect__
++
++/***
++ * Note: this file should not include *any* other files, nor should it wrap
++ * itself in ifdef FEATURE_NANOJIT, nor should it do anything other than
++ * define preprocessor symbols.
++ */
++
++/***
++ * NJ_COMPILER_ARM_ARCH attempts to specify the minimum ARM architecture
++ * that the C++ compiler has specified. Note that although Config::arm_arch
++ * is initialized to this value by default, there is no requirement that they
++ * be in sync.
++ *
++ * Note, this is done via #define so that downstream preprocessor usage can
++ * examine it, but please don't attempt to redefine it.
++ *
++ * Note, this is deliberately not encased in "ifdef NANOJIT_ARM", as this file
++ * may be included before that is defined. On non-ARM platforms we will hit the
++ * "Unable to determine" case.
++ */
++
++// GCC and RealView usually define __ARM_ARCH__
++#if defined(__ARM_ARCH__)
++
++ #define NJ_COMPILER_ARM_ARCH __ARM_ARCH__
++
++// ok, try well-known GCC flags ( see http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html )
++#elif defined(__ARM_ARCH_7__) || \
++ defined(__ARM_ARCH_7A__) || \
++ defined(__ARM_ARCH_7M__) || \
++ defined(__ARM_ARCH_7R__) || \
++ defined(_ARM_ARCH_7)
++
++ #define NJ_COMPILER_ARM_ARCH 7
++
++#elif defined(__ARM_ARCH_6__) || \
++ defined(__ARM_ARCH_6J__) || \
++ defined(__ARM_ARCH_6T2__) || \
++ defined(__ARM_ARCH_6Z__) || \
++ defined(__ARM_ARCH_6ZK__) || \
++ defined(__ARM_ARCH_6M__) || \
++ defined(_ARM_ARCH_6)
++
++ #define NJ_COMPILER_ARM_ARCH 6
++
++#elif defined(__ARM_ARCH_5__) || \
++ defined(__ARM_ARCH_5T__) || \
++ defined(__ARM_ARCH_5E__) || \
++ defined(__ARM_ARCH_5TE__)
++
++ #define NJ_COMPILER_ARM_ARCH 5
++
++#elif defined(__ARM_ARCH_4__) || \
++ defined(__ARM_ARCH_4T__)
++
++ #define NJ_COMPILER_ARM_ARCH 4
++
++// Visual C has its own mojo
++#elif defined(_MSC_VER) && defined(_M_ARM)
++
++ #define NJ_COMPILER_ARM_ARCH _M_ARM
++
++#else
++
++ // non-numeric value
++ #define NJ_COMPILER_ARM_ARCH "Unable to determine valid NJ_COMPILER_ARM_ARCH (nanojit only supports ARMv5 or later)"
++
++#endif
++
++#endif // __njcpudetect__
diff --git a/net-libs/xulrunner/files/301-xulrunner-xpctools.diff b/net-libs/xulrunner/files/301-xulrunner-xpctools.diff
new file mode 100644
index 0000000..2ff82a5
--- /dev/null
+++ b/net-libs/xulrunner/files/301-xulrunner-xpctools.diff
@@ -0,0 +1,25 @@
+--- js/src/xpconnect/src/Makefile.in~ 2009-09-20 13:13:15.508713367 -0500
++++ js/src/xpconnect/src/Makefile.in 2009-09-20 13:14:30.994713367 -0500
+@@ -77,6 +77,10 @@
+ widget \
+ $(NULL)
+
++ifdef MOZ_XPCTOOLS
++DEFINES += -DXPC_TOOLS_SUPPORT
++REQUIRES += xpctools
++endif
+
+ CPPSRCS = \
+ nsScriptError.cpp \
+@@ -174,11 +178,6 @@
+
+ endif # ENABLE_JIT
+
+-ifdef MOZ_XPCTOOLS
+-DEFINES += -DXPC_TOOLS_SUPPORT
+-REQUIRES += xpctools
+-endif
+-
+ ifdef XPC_IDISPATCH_SUPPORT
+ DEFINES += -DXPC_IDISPATCH_SUPPORT
+ ifdef XPC_COMOBJECT
diff --git a/net-libs/xulrunner/files/801-enable-x86_64-tracemonkey.patch b/net-libs/xulrunner/files/801-enable-x86_64-tracemonkey.patch
new file mode 100644
index 0000000..b72ad76
--- /dev/null
+++ b/net-libs/xulrunner/files/801-enable-x86_64-tracemonkey.patch
@@ -0,0 +1,25 @@
+--- js/src/configure.in.old 2009-11-08 19:50:54.299642792 -0500
++++ js/src/configure.in 2009-11-08 19:57:49.235621814 -0500
+@@ -2465,6 +2465,10 @@
+ ENABLE_JIT=1
+ NANOJIT_ARCH=i386
+ ;;
++x86_64*-*)
++ ENABLE_JIT=1
++ NANOJIT_ARCH=X64
++ ;;
+ arm*-*)
+ ENABLE_JIT=1
+ NANOJIT_ARCH=ARM
+@@ -2488,7 +2492,10 @@
+ i?86-*)
+ AC_DEFINE(AVMPLUS_IA32)
+ ;;
+-
++x86_64*-*)
++ AC_DEFINE(AVMPLUS_AMD64)
++ AC_DEFINE(AVMPLUS_64BIT)
++ ;;
+ arm*-*)
+ AC_DEFINE(AVMPLUS_ARM)
+ ;;
diff --git a/net-libs/xulrunner/files/fix_crash_in_windowwatcher.patch b/net-libs/xulrunner/files/fix_crash_in_windowwatcher.patch
new file mode 100644
index 0000000..774e43a
--- /dev/null
+++ b/net-libs/xulrunner/files/fix_crash_in_windowwatcher.patch
@@ -0,0 +1,28 @@
+# HG changeset patch
+# Parent e981d93d6534b48a75655ad886d494bd3bbe3ff2
+# User Blake Kaplan <mrbkap@gmail.com>
+Bug 594699 - Null check this to return to pre-bug 532730 behavior in pathological cases.
+
+diff --git a/embedding/components/windowwatcher/src/nsWindowWatcher.cpp b/embedding/components/windowwatcher/src/nsWindowWatcher.cpp
+--- a/embedding/components/windowwatcher/src/nsWindowWatcher.cpp
++++ b/embedding/components/windowwatcher/src/nsWindowWatcher.cpp
+@@ -517,17 +517,17 @@ nsWindowWatcher::OpenWindowJSInternal(ns
+ nsCOMPtr<nsIDocShellTreeItem> newDocShellItem; // from the new window
+ JSContextAutoPopper callerContextGuard;
+
+ NS_ENSURE_ARG_POINTER(_retval);
+ *_retval = 0;
+
+ nsCOMPtr<nsIContentUtils> utils =
+ do_GetService("@mozilla.org/content/contentutils;1");
+- if (!utils->IsSafeToRunScript()) {
++ if (utils && !utils->IsSafeToRunScript()) {
+ return NS_ERROR_FAILURE;
+ }
+
+ GetWindowTreeOwner(aParent, getter_AddRefs(parentTreeOwner));
+
+ if (aUrl) {
+ rv = URIfromURL(aUrl, aParent, getter_AddRefs(uriToLoad));
+ if (NS_FAILED(rv))
+
diff --git a/net-libs/xulrunner/files/xulrunner-1.9-no_sunstudio.patch b/net-libs/xulrunner/files/xulrunner-1.9-no_sunstudio.patch
new file mode 100644
index 0000000..7bfb5f1
--- /dev/null
+++ b/net-libs/xulrunner/files/xulrunner-1.9-no_sunstudio.patch
@@ -0,0 +1,14 @@
+http://bugs.gentoo.org/show_bug.cgi?id=228717
+
+diff -ur a/toolkit/library/Makefile.in b/toolkit/library/Makefile.in
+--- a/toolkit/library/Makefile.in 2008-05-08 11:20:45.000000000 +0200
++++ b/toolkit/library/Makefile.in 2008-06-21 12:18:33.373338400 +0200
+@@ -227,7 +227,7 @@
+ endif
+
+ ifeq ($(OS_ARCH),SunOS)
+-EXTRA_DSO_LDOPTS += -lelf -ldemangle -lCstd
++EXTRA_DSO_LDOPTS += -lelf
+ endif
+
+ ifeq ($(OS_ARCH),WINNT)
diff --git a/net-libs/xulrunner/files/xulrunner-1.9-solaris64.patch b/net-libs/xulrunner/files/xulrunner-1.9-solaris64.patch
new file mode 100644
index 0000000..0f2c5ac
--- /dev/null
+++ b/net-libs/xulrunner/files/xulrunner-1.9-solaris64.patch
@@ -0,0 +1,493 @@
+Don't use -G, it results in a relocation error against _DYNAMIC on
+amd64, use -shared instead per the manpage, and as it works as well.
+
+Add assemblyish files for x86_64 solaris
+
+--- configure.in
++++ configure.in
+@@ -2481,7 +2481,7 @@
+ AC_LANG_RESTORE
+ else
+ ASFLAGS="$ASFLAGS -fPIC"
+- DSO_LDOPTS='-G'
++ DSO_LDOPTS='-shared'
+ _WARNINGS_CFLAGS=''
+ _WARNINGS_CXXFLAGS=''
+ if test "$OS_RELEASE" = "5.3"; then
+--- js/src/configure.in
++++ js/src/configure.in
+@@ -2339,7 +2339,7 @@
+ AC_LANG_RESTORE
+ else
+ ASFLAGS="$ASFLAGS -fPIC"
+- DSO_LDOPTS='-G'
++ DSO_LDOPTS='-shared'
+ _WARNINGS_CFLAGS=''
+ _WARNINGS_CXXFLAGS=''
+ if test "$OS_RELEASE" = "5.3"; then
+--- xpcom/reflect/xptcall/src/md/unix/Makefile.in
++++ xpcom/reflect/xptcall/src/md/unix/Makefile.in
+@@ -130,7 +130,11 @@
+ #
+ ifeq ($(OS_ARCH),SunOS)
+ ifeq (86,$(findstring 86,$(OS_TEST)))
++ifdef HAVE_64BIT_OS
++CPPSRCS := xptcinvoke_x86_64_solaris.cpp xptcstubs_x86_64_solaris.cpp
++else
+ CPPSRCS := xptcinvoke_x86_solaris.cpp xptcstubs_x86_solaris.cpp
++endif
+ # 28817: if Solaris Intel OS, and native compiler, always build optimised.
+ ifndef GNU_CC
+ ASFILES := xptcinvoke_asm_x86_solaris_SUNW.s xptcstubs_asm_x86_solaris_SUNW.s
+--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_solaris.cpp
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_solaris.cpp
+@@ -0,0 +1,210 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
++ *
++ * ***** BEGIN LICENSE BLOCK *****
++ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
++ *
++ * The contents of this file are subject to the Mozilla Public License Version
++ * 1.1 (the "License"); you may not use this file except in compliance with
++ * the License. You may obtain a copy of the License at
++ * http://www.mozilla.org/MPL/
++ *
++ * Software distributed under the License is distributed on an "AS IS" basis,
++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
++ * for the specific language governing rights and limitations under the
++ * License.
++ *
++ * The Original Code is mozilla.org Code.
++ *
++ * The Initial Developer of the Original Code is
++ * Netscape Communications Corporation.
++ * Portions created by the Initial Developer are Copyright (C) 1999
++ * the Initial Developer. All Rights Reserved.
++ *
++ * Contributor(s):
++ *
++ * Alternatively, the contents of this file may be used under the terms of
++ * either of the GNU General Public License Version 2 or later (the "GPL"),
++ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
++ * in which case the provisions of the GPL or the LGPL are applicable instead
++ * of those above. If you wish to allow use of your version of this file only
++ * under the terms of either the GPL or the LGPL, and not to allow others to
++ * use your version of this file under the terms of the MPL, indicate your
++ * decision by deleting the provisions above and replace them with the notice
++ * and other provisions required by the GPL or the LGPL. If you do not delete
++ * the provisions above, a recipient may use your version of this file under
++ * the terms of any one of the MPL, the GPL or the LGPL.
++ *
++ * ***** END LICENSE BLOCK ***** */
++
++// Platform specific code to invoke XPCOM methods on native objects
++
++#include "xptcprivate.h"
++
++// 6 integral parameters are passed in registers
++const PRUint32 GPR_COUNT = 6;
++
++// 8 floating point parameters are passed in SSE registers
++const PRUint32 FPR_COUNT = 8;
++
++// Remember that these 'words' are 64-bit long
++static inline void
++invoke_count_words(PRUint32 paramCount, nsXPTCVariant * s,
++ PRUint32 & nr_gpr, PRUint32 & nr_fpr, PRUint32 & nr_stack)
++{
++ nr_gpr = 1; // skip one GP register for 'that'
++ nr_fpr = 0;
++ nr_stack = 0;
++
++ /* Compute number of eightbytes of class MEMORY. */
++ for (uint32 i = 0; i < paramCount; i++, s++) {
++ if (!s->IsPtrData()
++ && (s->type == nsXPTType::T_FLOAT || s->type == nsXPTType::T_DOUBLE)) {
++ if (nr_fpr < FPR_COUNT)
++ nr_fpr++;
++ else
++ nr_stack++;
++ }
++ else {
++ if (nr_gpr < GPR_COUNT)
++ nr_gpr++;
++ else
++ nr_stack++;
++ }
++ }
++}
++
++static void
++invoke_copy_to_stack(PRUint64 * d, PRUint32 paramCount, nsXPTCVariant * s,
++ PRUint64 * gpregs, double * fpregs)
++{
++ PRUint32 nr_gpr = 1; // skip one GP register for 'that'
++ PRUint32 nr_fpr = 0;
++ PRUint64 value;
++
++ for (uint32 i = 0; i < paramCount; i++, s++) {
++ if (s->IsPtrData())
++ value = (PRUint64) s->ptr;
++ else {
++ switch (s->type) {
++ case nsXPTType::T_FLOAT: break;
++ case nsXPTType::T_DOUBLE: break;
++ case nsXPTType::T_I8: value = s->val.i8; break;
++ case nsXPTType::T_I16: value = s->val.i16; break;
++ case nsXPTType::T_I32: value = s->val.i32; break;
++ case nsXPTType::T_I64: value = s->val.i64; break;
++ case nsXPTType::T_U8: value = s->val.u8; break;
++ case nsXPTType::T_U16: value = s->val.u16; break;
++ case nsXPTType::T_U32: value = s->val.u32; break;
++ case nsXPTType::T_U64: value = s->val.u64; break;
++ case nsXPTType::T_BOOL: value = s->val.b; break;
++ case nsXPTType::T_CHAR: value = s->val.c; break;
++ case nsXPTType::T_WCHAR: value = s->val.wc; break;
++ default: value = (PRUint64) s->val.p; break;
++ }
++ }
++
++ if (!s->IsPtrData() && s->type == nsXPTType::T_DOUBLE) {
++ if (nr_fpr < FPR_COUNT)
++ fpregs[nr_fpr++] = s->val.d;
++ else {
++ *((double *)d) = s->val.d;
++ d++;
++ }
++ }
++ else if (!s->IsPtrData() && s->type == nsXPTType::T_FLOAT) {
++ if (nr_fpr < FPR_COUNT)
++ // The value in %xmm register is already prepared to
++ // be retrieved as a float. Therefore, we pass the
++ // value verbatim, as a double without conversion.
++ fpregs[nr_fpr++] = s->val.d;
++ else {
++ *((float *)d) = s->val.f;
++ d++;
++ }
++ }
++ else {
++ if (nr_gpr < GPR_COUNT)
++ gpregs[nr_gpr++] = value;
++ else
++ *d++ = value;
++ }
++ }
++}
++
++EXPORT_XPCOM_API(nsresult)
++NS_InvokeByIndex_P(nsISupports * that, PRUint32 methodIndex,
++ PRUint32 paramCount, nsXPTCVariant * params)
++{
++ PRUint32 nr_gpr, nr_fpr, nr_stack;
++ invoke_count_words(paramCount, params, nr_gpr, nr_fpr, nr_stack);
++
++ // Stack, if used, must be 16-bytes aligned
++ if (nr_stack)
++ nr_stack = (nr_stack + 1) & ~1;
++
++ // Load parameters to stack, if necessary
++ PRUint64 *stack = (PRUint64 *) __builtin_alloca(nr_stack * 8);
++ PRUint64 gpregs[GPR_COUNT];
++ double fpregs[FPR_COUNT];
++ invoke_copy_to_stack(stack, paramCount, params, gpregs, fpregs);
++
++ // Load FPR registers from fpregs[]
++ register double d0 asm("xmm0");
++ register double d1 asm("xmm1");
++ register double d2 asm("xmm2");
++ register double d3 asm("xmm3");
++ register double d4 asm("xmm4");
++ register double d5 asm("xmm5");
++ register double d6 asm("xmm6");
++ register double d7 asm("xmm7");
++
++ switch (nr_fpr) {
++#define ARG_FPR(N) \
++ case N+1: d##N = fpregs[N];
++ ARG_FPR(7);
++ ARG_FPR(6);
++ ARG_FPR(5);
++ ARG_FPR(4);
++ ARG_FPR(3);
++ ARG_FPR(2);
++ ARG_FPR(1);
++ ARG_FPR(0);
++ case 0:;
++#undef ARG_FPR
++ }
++
++ // Load GPR registers from gpregs[]
++ register PRUint64 a0 asm("rdi");
++ register PRUint64 a1 asm("rsi");
++ register PRUint64 a2 asm("rdx");
++ register PRUint64 a3 asm("rcx");
++ register PRUint64 a4 asm("r8");
++ register PRUint64 a5 asm("r9");
++
++ switch (nr_gpr) {
++#define ARG_GPR(N) \
++ case N+1: a##N = gpregs[N];
++ ARG_GPR(5);
++ ARG_GPR(4);
++ ARG_GPR(3);
++ ARG_GPR(2);
++ ARG_GPR(1);
++ case 1: a0 = (PRUint64) that;
++ case 0:;
++#undef ARG_GPR
++ }
++
++ // Ensure that assignments to SSE registers won't be optimized away
++ asm("" ::
++ "x" (d0), "x" (d1), "x" (d2), "x" (d3),
++ "x" (d4), "x" (d5), "x" (d6), "x" (d7));
++
++ // Get pointer to method
++ PRUint64 methodAddress = *((PRUint64 *)that);
++ methodAddress += 8 * methodIndex;
++ methodAddress = *((PRUint64 *)methodAddress);
++
++ typedef PRUint32 (*Method)(PRUint64, PRUint64, PRUint64, PRUint64, PRUint64, PRUint64);
++ PRUint32 result = ((Method)methodAddress)(a0, a1, a2, a3, a4, a5);
++ return result;
++}
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_solaris.cpp
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_solaris.cpp
+@@ -0,0 +1,236 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
++ *
++ * ***** BEGIN LICENSE BLOCK *****
++ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
++ *
++ * The contents of this file are subject to the Mozilla Public License Version
++ * 1.1 (the "License"); you may not use this file except in compliance with
++ * the License. You may obtain a copy of the License at
++ * http://www.mozilla.org/MPL/
++ *
++ * Software distributed under the License is distributed on an "AS IS" basis,
++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
++ * for the specific language governing rights and limitations under the
++ * License.
++ *
++ * The Original Code is mozilla.org Code.
++ *
++ * The Initial Developer of the Original Code is
++ * Netscape Communications Corporation.
++ * Portions created by the Initial Developer are Copyright (C) 1999
++ * the Initial Developer. All Rights Reserved.
++ *
++ * Contributor(s):
++ *
++ * Alternatively, the contents of this file may be used under the terms of
++ * either of the GNU General Public License Version 2 or later (the "GPL"),
++ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
++ * in which case the provisions of the GPL or the LGPL are applicable instead
++ * of those above. If you wish to allow use of your version of this file only
++ * under the terms of either the GPL or the LGPL, and not to allow others to
++ * use your version of this file under the terms of the MPL, indicate your
++ * decision by deleting the provisions above and replace them with the notice
++ * and other provisions required by the GPL or the LGPL. If you do not delete
++ * the provisions above, a recipient may use your version of this file under
++ * the terms of any one of the MPL, the GPL or the LGPL.
++ *
++ * ***** END LICENSE BLOCK ***** */
++
++// Implement shared vtbl methods.
++
++#include "xptcprivate.h"
++#include "xptiprivate.h"
++
++
++const PRUint32 PARAM_BUFFER_COUNT = 16;
++const PRUint32 GPR_COUNT = 6;
++const PRUint32 FPR_COUNT = 8;
++
++// PrepareAndDispatch() is called by SharedStub() and calls the actual method.
++//
++// - 'args[]' contains the arguments passed on stack
++// - 'gpregs[]' contains the arguments passed in integer registers
++// - 'fpregs[]' contains the arguments passed in floating point registers
++//
++// The parameters are mapped into an array of type 'nsXPTCMiniVariant'
++// and then the method gets called.
++
++extern "C" nsresult
++PrepareAndDispatch(nsXPTCStubBase * self, PRUint32 methodIndex,
++ PRUint64 * args, PRUint64 * gpregs, double *fpregs)
++{
++ nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
++ nsXPTCMiniVariant* dispatchParams = NULL;
++ const nsXPTMethodInfo* info;
++ PRUint32 paramCount;
++ PRUint32 i;
++ nsresult result = NS_ERROR_FAILURE;
++
++ NS_ASSERTION(self,"no self");
++
++ self->mEntry->GetMethodInfo(PRUint16(methodIndex), &info);
++ NS_ASSERTION(info,"no method info");
++ if (!info)
++ return NS_ERROR_UNEXPECTED;
++
++ paramCount = info->GetParamCount();
++
++ // setup variant array pointer
++ if (paramCount > PARAM_BUFFER_COUNT)
++ dispatchParams = new nsXPTCMiniVariant[paramCount];
++ else
++ dispatchParams = paramBuffer;
++
++ NS_ASSERTION(dispatchParams,"no place for params");
++ if (!dispatchParams)
++ return NS_ERROR_OUT_OF_MEMORY;
++
++ PRUint64* ap = args;
++ PRUint32 nr_gpr = 1; // skip one GPR register for 'that'
++ PRUint32 nr_fpr = 0;
++ PRUint64 value;
++
++ for (i = 0; i < paramCount; i++) {
++ const nsXPTParamInfo& param = info->GetParam(i);
++ const nsXPTType& type = param.GetType();
++ nsXPTCMiniVariant* dp = &dispatchParams[i];
++
++ if (!param.IsOut() && type == nsXPTType::T_DOUBLE) {
++ if (nr_fpr < FPR_COUNT)
++ dp->val.d = fpregs[nr_fpr++];
++ else
++ dp->val.d = *(double*) ap++;
++ continue;
++ }
++ else if (!param.IsOut() && type == nsXPTType::T_FLOAT) {
++ if (nr_fpr < FPR_COUNT)
++ // The value in %xmm register is already prepared to
++ // be retrieved as a float. Therefore, we pass the
++ // value verbatim, as a double without conversion.
++ dp->val.d = *(double*) ap++;
++ else
++ dp->val.f = *(float*) ap++;
++ continue;
++ }
++ else {
++ if (nr_gpr < GPR_COUNT)
++ value = gpregs[nr_gpr++];
++ else
++ value = *ap++;
++ }
++
++ if (param.IsOut() || !type.IsArithmetic()) {
++ dp->val.p = (void*) value;
++ continue;
++ }
++
++ switch (type) {
++ case nsXPTType::T_I8: dp->val.i8 = (PRInt8) value; break;
++ case nsXPTType::T_I16: dp->val.i16 = (PRInt16) value; break;
++ case nsXPTType::T_I32: dp->val.i32 = (PRInt32) value; break;
++ case nsXPTType::T_I64: dp->val.i64 = (PRInt64) value; break;
++ case nsXPTType::T_U8: dp->val.u8 = (PRUint8) value; break;
++ case nsXPTType::T_U16: dp->val.u16 = (PRUint16) value; break;
++ case nsXPTType::T_U32: dp->val.u32 = (PRUint32) value; break;
++ case nsXPTType::T_U64: dp->val.u64 = (PRUint64) value; break;
++ case nsXPTType::T_BOOL: dp->val.b = (PRBool) value; break;
++ case nsXPTType::T_CHAR: dp->val.c = (char) value; break;
++ case nsXPTType::T_WCHAR: dp->val.wc = (wchar_t) value; break;
++
++ default:
++ NS_ASSERTION(0, "bad type");
++ break;
++ }
++ }
++
++ result = self->mOuter->CallMethod((PRUint16) methodIndex, info, dispatchParams);
++
++ if (dispatchParams != paramBuffer)
++ delete [] dispatchParams;
++
++ return result;
++}
++
++#ifdef __GNUC__ /* Gnu Compiler. */
++#define STUB_ENTRY(n) \
++asm(".section \".text\"\n\t" \
++ ".align 2\n\t" \
++ ".if " #n " < 10\n\t" \
++ ".globl _ZN14nsXPTCStubBase5Stub" #n "Ev\n\t" \
++ ".hidden _ZN14nsXPTCStubBase5Stub" #n "Ev\n\t" \
++ ".type _ZN14nsXPTCStubBase5Stub" #n "Ev,@function\n" \
++ "_ZN14nsXPTCStubBase5Stub" #n "Ev:\n\t" \
++ ".elseif " #n " < 100\n\t" \
++ ".globl _ZN14nsXPTCStubBase6Stub" #n "Ev\n\t" \
++ ".hidden _ZN14nsXPTCStubBase6Stub" #n "Ev\n\t" \
++ ".type _ZN14nsXPTCStubBase6Stub" #n "Ev,@function\n" \
++ "_ZN14nsXPTCStubBase6Stub" #n "Ev:\n\t" \
++ ".elseif " #n " < 1000\n\t" \
++ ".globl _ZN14nsXPTCStubBase7Stub" #n "Ev\n\t" \
++ ".hidden _ZN14nsXPTCStubBase7Stub" #n "Ev\n\t" \
++ ".type _ZN14nsXPTCStubBase7Stub" #n "Ev,@function\n" \
++ "_ZN14nsXPTCStubBase7Stub" #n "Ev:\n\t" \
++ ".else\n\t" \
++ ".err \"stub number " #n " >= 1000 not yet supported\"\n\t" \
++ ".endif\n\t" \
++ "movl $" #n ", %eax\n\t" \
++ "jmp SharedStub\n\t" \
++ ".if " #n " < 10\n\t" \
++ ".size _ZN14nsXPTCStubBase5Stub" #n "Ev,.-_ZN14nsXPTCStubBase5Stub" #n "Ev\n\t" \
++ ".elseif " #n " < 100\n\t" \
++ ".size _ZN14nsXPTCStubBase6Stub" #n "Ev,.-_ZN14nsXPTCStubBase6Stub" #n "Ev\n\t" \
++ ".else\n\t" \
++ ".size _ZN14nsXPTCStubBase7Stub" #n "Ev,.-_ZN14nsXPTCStubBase7Stub" #n "Ev\n\t" \
++ ".endif");
++
++// static nsresult SharedStub(PRUint32 methodIndex)
++asm(".section \".text\"\n\t"
++ ".align 2\n\t"
++ ".type SharedStub,@function\n\t"
++ "SharedStub:\n\t"
++ // make room for gpregs (48), fpregs (64)
++ "pushq %rbp\n\t"
++ "movq %rsp,%rbp\n\t"
++ "subq $112,%rsp\n\t"
++ // save GP registers
++ "movq %rdi,-112(%rbp)\n\t"
++ "movq %rsi,-104(%rbp)\n\t"
++ "movq %rdx, -96(%rbp)\n\t"
++ "movq %rcx, -88(%rbp)\n\t"
++ "movq %r8 , -80(%rbp)\n\t"
++ "movq %r9 , -72(%rbp)\n\t"
++ "leaq -112(%rbp),%rcx\n\t"
++ // save FP registers
++ "movsd %xmm0,-64(%rbp)\n\t"
++ "movsd %xmm1,-56(%rbp)\n\t"
++ "movsd %xmm2,-48(%rbp)\n\t"
++ "movsd %xmm3,-40(%rbp)\n\t"
++ "movsd %xmm4,-32(%rbp)\n\t"
++ "movsd %xmm5,-24(%rbp)\n\t"
++ "movsd %xmm6,-16(%rbp)\n\t"
++ "movsd %xmm7, -8(%rbp)\n\t"
++ "leaq -64(%rbp),%r8\n\t"
++ // rdi has the 'self' pointer already
++ "movl %eax,%esi\n\t"
++ "leaq 16(%rbp),%rdx\n\t"
++ "call PrepareAndDispatch@plt\n\t"
++ "leave\n\t"
++ "ret\n\t"
++ ".size SharedStub,.-SharedStub");
++
++#elif defined(__SUNPRO_CC) /* Sun Workshop Compiler. */
++
++#define STUB_ENTRY(n)
++
++#else
++#error "can't find a compiler to use"
++#endif /* __GNUC__ */
++
++#define SENTINEL_ENTRY(n) \
++nsresult nsXPTCStubBase::Sentinel##n() \
++{ \
++ NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \
++ return NS_ERROR_NOT_IMPLEMENTED; \
++}
++
++#include "xptcstubsdef.inc"
diff --git a/net-libs/xulrunner/files/xulrunner-1.9.1.5-solaris-undef-regs.patch b/net-libs/xulrunner/files/xulrunner-1.9.1.5-solaris-undef-regs.patch
new file mode 100644
index 0000000..2ed620e
--- /dev/null
+++ b/net-libs/xulrunner/files/xulrunner-1.9.1.5-solaris-undef-regs.patch
@@ -0,0 +1,19 @@
+http://marc.info/?l=opensolaris-desktop-discuss&m=124625949400704&w=2
+
+--- firefox/js/src/nanojit/Nativei386.h.orig 2008-12-19 16:11:09.743712966 +0800
++++ firefox/js/src/nanojit/Nativei386.h 2008-12-19 16:12:32.156744648 +0800
+@@ -40,6 +40,14 @@
+ #ifndef __nanojit_Nativei386__
+ #define __nanojit_Nativei386__
+
++#undef EAX
++#undef EBX
++#undef ECX
++#undef EDX
++#undef ESP
++#undef EBP
++#undef ESI
++#undef EDI
+
+ namespace nanojit
+ {
diff --git a/net-libs/xulrunner/files/xulrunner-1.9.2-arm-fixes.patch b/net-libs/xulrunner/files/xulrunner-1.9.2-arm-fixes.patch
new file mode 100644
index 0000000..a726209
--- /dev/null
+++ b/net-libs/xulrunner/files/xulrunner-1.9.2-arm-fixes.patch
@@ -0,0 +1,35 @@
+Fix arm OS detection
+
+https://bugs.gentoo.org/327783
+https://bugzilla.mozilla.org/show_bug.cgi?id=577319
+---
+--- configure.in
++++ configure.in
+@@ -1424,9 +1424,11 @@
+ CPU_ARCH="$OS_TEST"
+ ;;
+
+-arm)
++arm*)
+ if test "$OS_TARGET" = "WINCE"; then
+ CPU_ARCH="$OS_TEST"
++ else
++ CPU_ARCH="arm"
+ fi
+ ;;
+ esac
+--- js/src/configure.in
++++ js/src/configure.in
+@@ -1162,9 +1162,11 @@
+ CPU_ARCH="$OS_TEST"
+ ;;
+
+-arm)
++arm*)
+ if test "$OS_TARGET" = "WINCE"; then
+ CPU_ARCH="$OS_TEST"
++ else
++ CPU_ARCH="arm"
+ fi
+ ;;
+ esac
diff --git a/net-libs/xulrunner/files/xulrunner-1.9.2-fix-pkgconfig-file.patch b/net-libs/xulrunner/files/xulrunner-1.9.2-fix-pkgconfig-file.patch
new file mode 100644
index 0000000..540f9d0
--- /dev/null
+++ b/net-libs/xulrunner/files/xulrunner-1.9.2-fix-pkgconfig-file.patch
@@ -0,0 +1,9 @@
+--- mozilla-1.9.2/xulrunner/installer/mozilla-plugin.pc.in-orig 2010-01-18 22:07:22.609207920 -0600
++++ mozilla-1.9.2/xulrunner/installer/mozilla-plugin.pc.in 2010-01-18 22:07:31.665185152 -0600
+@@ -5,5 +5,5 @@
+ Name: Mozilla Plug-In API
+ Description: Mozilla Plug-In API
+ Version: %MOZILLA_VERSION%
+-Cflags: -I${includedir}/stable -DXP_UNIX %ojidef%
++Cflags: -I${includedir} -DXP_UNIX %ojidef%
+
diff --git a/net-libs/xulrunner/files/xulrunner-1.9.2-noalsa-fixup.patch b/net-libs/xulrunner/files/xulrunner-1.9.2-noalsa-fixup.patch
new file mode 100644
index 0000000..1fc7b6f
--- /dev/null
+++ b/net-libs/xulrunner/files/xulrunner-1.9.2-noalsa-fixup.patch
@@ -0,0 +1,26 @@
+diff -urN mozilla-1.9.2-orig/content/base/src/nsDocument.cpp mozilla-1.9.2/content/base/src/nsDocument.cpp
+--- mozilla-1.9.2-orig/content/base/src/nsDocument.cpp 2010-01-28 22:16:08.683135912 -0600
++++ mozilla-1.9.2/content/base/src/nsDocument.cpp 2010-01-28 22:17:57.605126833 -0600
+@@ -169,7 +169,9 @@
+ #include "nsIPropertyBag2.h"
+ #include "nsIDOMPageTransitionEvent.h"
+ #include "nsFrameLoader.h"
++#ifdef MOZ_MEDIA
+ #include "nsHTMLMediaElement.h"
++#endif
+
+ #include "mozAutoDocUpdate.h"
+
+diff -urN mozilla-1.9.2-orig/content/base/src/nsNodeUtils.cpp mozilla-1.9.2/content/base/src/nsNodeUtils.cpp
+--- mozilla-1.9.2-orig/content/base/src/nsNodeUtils.cpp 2010-01-28 22:16:08.686138846 -0600
++++ mozilla-1.9.2/content/base/src/nsNodeUtils.cpp 2010-01-28 22:17:14.618150370 -0600
+@@ -55,7 +55,9 @@
+ #endif
+ #include "nsBindingManager.h"
+ #include "nsGenericHTMLElement.h"
++#ifdef MOZ_MEDIA
+ #include "nsHTMLMediaElement.h"
++#endif
+
+ // This macro expects the ownerDocument of content_ to be in scope as
+ // |nsIDocument* doc|
diff --git a/net-libs/xulrunner/files/xulrunner-1.9.2-solaris-madvise.patch b/net-libs/xulrunner/files/xulrunner-1.9.2-solaris-madvise.patch
new file mode 100644
index 0000000..fd3b345
--- /dev/null
+++ b/net-libs/xulrunner/files/xulrunner-1.9.2-solaris-madvise.patch
@@ -0,0 +1,13 @@
+--- layout/base/nsPresArena.cpp
++++ layout/base/nsPresArena.cpp
+@@ -73,6 +73,10 @@
+ #else
+ # include <unistd.h>
+ # include <sys/mman.h>
++# ifdef SOLARIS
++/* madvise is not declared for C++ */
++extern "C" int madvise(void *addr, size_t len, int behav);
++# endif
+ # ifndef MAP_ANON
+ # ifdef MAP_ANONYMOUS
+ # define MAP_ANON MAP_ANONYMOUS
diff --git a/net-libs/xulrunner/files/xulrunner-1.9_beta5-prefix.patch b/net-libs/xulrunner/files/xulrunner-1.9_beta5-prefix.patch
new file mode 100644
index 0000000..a06a92b
--- /dev/null
+++ b/net-libs/xulrunner/files/xulrunner-1.9_beta5-prefix.patch
@@ -0,0 +1,59 @@
+* gre conf location is a bit hardcoded unfortunately :(
+
+--- extensions/java/xpcom/interfaces/org/mozilla/xpcom/Mozilla.java
++++ extensions/java/xpcom/interfaces/org/mozilla/xpcom/Mozilla.java
+@@ -470,8 +470,8 @@
+
+ final String greUserConfFile = ".gre.config";
+ final String greUserConfDir = ".gre.d";
+- final String greConfPath = "/etc/gre.conf";
+- final String greConfDir = "/etc/gre.d";
++ final String greConfPath = "@GENTOO_PORTAGE_EPREFIX@/etc/gre.conf";
++ final String greConfDir = "@GENTOO_PORTAGE_EPREFIX@/etc/gre.d";
+
+ env = System.getProperty("user.home");
+ if (env != null) {
+--- xpcom/build/nsXPCOMPrivate.h
++++ xpcom/build/nsXPCOMPrivate.h
+@@ -245,8 +245,8 @@
+ #endif
+
+ #define GRE_CONF_NAME ".gre.config"
+-#define GRE_CONF_PATH "/etc/gre.conf"
+-#define GRE_CONF_DIR "/etc/gre.d"
++#define GRE_CONF_PATH "@GENTOO_PORTAGE_EPREFIX@/etc/gre.conf"
++#define GRE_CONF_DIR "@GENTOO_PORTAGE_EPREFIX@/etc/gre.d"
+ #define GRE_USER_CONF_DIR ".gre.d"
+ #endif
+
+--- xulrunner/installer/Makefile.in
++++ xulrunner/installer/Makefile.in
+@@ -73,7 +73,7 @@
+
+ ifndef SKIP_GRE_REGISTRATION
+ # to register xulrunner per-user, override this with $HOME/.gre.d
+-regdir = /etc/gre.d
++regdir = @sysconfdir@/gre.d
+
+ install:: $(MOZILLA_VERSION).system.conf
+ $(NSINSTALL) -D $(DESTDIR)$(regdir)
+--- xulrunner/app/nsRegisterGREUnix.cpp
++++ xulrunner/app/nsRegisterGREUnix.cpp
+@@ -130,7 +130,7 @@
+
+ nsresult rv;
+
+- char root[MAXPATHLEN] = "/etc/gre.d";
++ char root[MAXPATHLEN] = "@GENTOO_PORTAGE_EPREFIX@/etc/gre.d";
+
+ if (!aRegisterGlobally) {
+ char *home = PR_GetEnv("HOME");
+@@ -222,7 +222,7 @@
+ {
+ nsresult rv;
+
+- char root[MAXPATHLEN] = "/etc/gre.d";
++ char root[MAXPATHLEN] = "@GENTOO_PORTAGE_EPREFIX@/etc/gre.d";
+
+ if (!aRegisterGlobally) {
+ char *home = PR_GetEnv("HOME");
diff --git a/net-libs/xulrunner/files/xulrunner-default-prefs.js b/net-libs/xulrunner/files/xulrunner-default-prefs.js
new file mode 100644
index 0000000..4546d3f
--- /dev/null
+++ b/net-libs/xulrunner/files/xulrunner-default-prefs.js
@@ -0,0 +1,14 @@
+pref("app.update.enabled", false);
+pref("app.update.autoInstallEnabled", false);
+pref("browser.display.use_system_colors", true);
+pref("browser.link.open_external", 3);
+pref("general.smoothScroll", true);
+pref("general.autoScroll", false);
+pref("browser.tabs.tabMinWidth", 15);
+pref("browser.backspace_action", 0);
+pref("browser.urlbar.hideGoButton", true);
+pref("accessibility.typeaheadfind", true);
+pref("browser.shell.checkDefaultBrowser", false);
+pref("browser.EULA.override", true);
+pref("general.useragent.vendor", "Gentoo");
+pref("intl.locale.matchOS", true);
diff --git a/net-libs/xulrunner/metadata.xml b/net-libs/xulrunner/metadata.xml
new file mode 100644
index 0000000..7691e8c
--- /dev/null
+++ b/net-libs/xulrunner/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <herd>mozilla</herd>
+ <use>
+ <flag name="custom-optimization">Fine-tune custom compiler optimizations</flag>
+ <flag name="ipc">Use inter-process communication between tabs and plugins.
+ Allows for greater stability in case of plugin crashes</flag>
+ <flag name="system-sqlite">Use the system-wide <pkg>dev-db/sqlite</pkg>
+ installation with secure-delete enabled</flag>
+ </use>
+</pkgmetadata>
diff --git a/net-libs/xulrunner/xulrunner-1.9.2.9.ebuild b/net-libs/xulrunner/xulrunner-1.9.2.9.ebuild
new file mode 100644
index 0000000..1f46b49
--- /dev/null
+++ b/net-libs/xulrunner/xulrunner-1.9.2.9.ebuild
@@ -0,0 +1,246 @@
+# Copyright 1999-2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-libs/xulrunner/xulrunner-1.9.2.9.ebuild,v 1.8 2010/09/14 21:20:06 jer Exp $
+
+EAPI="3"
+WANT_AUTOCONF="2.1"
+
+inherit flag-o-matic toolchain-funcs eutils mozconfig-3 makeedit multilib java-pkg-opt-2 autotools python prefix pax-utils
+
+MY_PV="${PV/_rc/rc}" # Handle beta
+MY_PV="${MY_PV/1.9.2/3.6}"
+MAJ_PV="1.9.2" # from mozilla-* branch name
+PATCH="${PN}-1.9.2-patches-0.7"
+
+DESCRIPTION="Mozilla runtime package that can be used to bootstrap XUL+XPCOM applications"
+HOMEPAGE="http://developer.mozilla.org/en/docs/XULRunner"
+SRC_URI="http://releases.mozilla.org/pub/mozilla.org/firefox/releases/${MY_PV}/source/firefox-${MY_PV}.source.tar.bz2
+ http://dev.gentoo.org/~anarchy/mozilla/patchsets/${PATCH}.tar.bz2"
+
+KEYWORDS="alpha amd64 arm hppa ia64 ppc ppc64 ~sparc x86 ~amd64-linux ~x86-linux ~sparc-solaris ~x64-solaris ~x86-solaris"
+SLOT="1.9"
+LICENSE="|| ( MPL-1.1 GPL-2 LGPL-2.1 )"
+IUSE="+alsa +cups debug +ipc libnotify system-sqlite wifi"
+
+RDEPEND="
+ >=sys-devel/binutils-2.16.1
+ >=dev-libs/nss-3.12.7
+ >=dev-libs/nspr-4.8.6
+ system-sqlite? ( >=dev-db/sqlite-3.6.22-r2[fts3,secure-delete] )
+ alsa? ( media-libs/alsa-lib )
+ >=app-text/hunspell-1.2
+ >=x11-libs/cairo-1.8.8[X]
+ x11-libs/pango[X]
+ x11-libs/libXt
+ x11-libs/pixman
+ >=dev-libs/libevent-1.4.7
+ wifi? ( net-wireless/wireless-tools )
+ libnotify? ( >=x11-libs/libnotify-0.4 )
+ cups? ( net-print/cups )"
+
+DEPEND="java? ( >=virtual/jdk-1.4 )
+ ${RDEPEND}
+ =dev-lang/python-2*[threads]
+ dev-util/pkgconfig"
+
+# virtual/jre should not be in DEPEND. bug 325981
+RDEPEND="java? ( >=virtual/jre-1.4 ) ${RDEPEND}"
+
+S="${WORKDIR}/mozilla-${MAJ_PV}"
+
+pkg_setup() {
+ # Ensure we always build with C locale.
+ export LANG="C"
+ export LC_ALL="C"
+ export LC_MESSAGES="C"
+ export LC_CTYPE="C"
+
+ java-pkg-opt-2_pkg_setup
+
+ python_set_active_version 2
+}
+
+src_prepare() {
+ # Apply our patches
+ EPATCH_SUFFIX="patch" \
+ EPATCH_FORCE="yes" \
+ epatch "${WORKDIR}"
+
+ eprefixify \
+ extensions/java/xpcom/interfaces/org/mozilla/xpcom/Mozilla.java \
+ xpcom/build/nsXPCOMPrivate.h \
+ xulrunner/installer/Makefile.in \
+ xulrunner/app/nsRegisterGREUnix.cpp
+
+ # fix double symbols due to double -ljemalloc
+ sed -i -e '/^LIBS += $(JEMALLOC_LIBS)/s/^/#/' \
+ xulrunner/stub/Makefile.in || die
+
+ # Allow user to apply additional patches without modifing ebuild
+ epatch_user
+
+ # Same as in config/autoconf.mk.in
+ MOZLIBDIR="/usr/$(get_libdir)/${PN}-${MAJ_PV}"
+ SDKDIR="/usr/$(get_libdir)/${PN}-devel-${MAJ_PV}/sdk"
+
+ # Gentoo install dirs
+ sed -i -e "s:@PV@:${MAJ_PV}:" "${S}"/config/autoconf.mk.in \
+ || die "${MAJ_PV} sed failed!"
+
+ # Enable gnomebreakpad
+ if use debug ; then
+ sed -i -e "s:GNOME_DISABLE_CRASH_DIALOG=1:GNOME_DISABLE_CRASH_DIALOG=0:g" \
+ "${S}"/build/unix/run-mozilla.sh || die "sed failed!"
+ fi
+
+ eautoreconf
+
+ cd js/src
+ eautoreconf
+}
+
+src_configure() {
+ ####################################
+ #
+ # mozconfig, CFLAGS and CXXFLAGS setup
+ #
+ ####################################
+
+ mozconfig_init
+ mozconfig_config
+
+ MEXTENSIONS="default"
+
+ MOZLIBDIR="/usr/$(get_libdir)/${PN}-${MAJ_PV}"
+
+ # It doesn't compile on alpha without this LDFLAGS
+ use alpha && append-ldflags "-Wl,--no-relax"
+
+ mozconfig_annotate '' --with-default-mozilla-five-home="${MOZLIBDIR}"
+ mozconfig_annotate '' --enable-extensions="${MEXTENSIONS}"
+ mozconfig_annotate '' --enable-application=xulrunner
+ mozconfig_annotate '' --disable-mailnews
+ mozconfig_annotate 'broken' --disable-crashreporter
+ mozconfig_annotate '' --enable-image-encoder=all
+ mozconfig_annotate '' --enable-canvas
+ mozconfig_annotate 'gtk' --enable-default-toolkit=cairo-gtk2
+ # Bug 60668: Galeon doesn't build without oji enabled, so enable it
+ # regardless of java setting.
+ mozconfig_annotate '' --enable-oji --enable-mathml
+ mozconfig_annotate 'places' --enable-storage --enable-places
+ mozconfig_annotate '' --enable-safe-browsing
+
+ # Build mozdevelop permately
+ mozconfig_annotate '' --enable-jsd --enable-xpctools
+
+ # System-wide install specs
+ mozconfig_annotate '' --disable-installer
+ mozconfig_annotate '' --disable-updater
+ mozconfig_annotate '' --disable-strip
+ mozconfig_annotate '' --disable-install-strip
+
+ # Use system libraries
+ mozconfig_annotate '' --enable-system-cairo
+ mozconfig_annotate '' --enable-system-hunspell
+ mozconfig_annotate '' --with-system-nspr --with-nspr-prefix="${EPREFIX}"/usr
+ mozconfig_annotate '' --with-system-nss --with-nss-prefix="${EPREFIX}"/usr
+ mozconfig_annotate '' --x-includes="${EPREFIX}"/usr/include --x-libraries="${EPREFIX}"/usr/$(get_libdir)
+ mozconfig_annotate '' --with-system-bz2
+ mozconfig_annotate '' --with-system-libevent="${EPREFIX}"/usr
+
+ mozconfig_use_enable ipc # +ipc, upstream default
+ mozconfig_use_enable libnotify
+ mozconfig_use_enable java javaxpcom
+ mozconfig_use_enable wifi necko-wifi
+ mozconfig_use_enable alsa ogg
+ mozconfig_use_enable alsa wave
+ mozconfig_use_enable system-sqlite
+ mozconfig_use_enable cups printing
+
+ # Debug
+ if use debug ; then
+ mozconfig_annotate 'debug' --disable-optimize
+ mozconfig_annotate 'debug' --enable-debug=-ggdb
+ mozconfig_annotate 'debug' --enable-debug-modules=all
+ mozconfig_annotate 'debug' --enable-debugger-info-modules
+ fi
+
+ # Finalize and report settings
+ mozconfig_final
+
+ if [[ $(gcc-major-version) -lt 4 ]]; then
+ append-flags -fno-stack-protector
+ fi
+
+ ####################################
+ #
+ # Configure and build
+ #
+ ####################################
+
+ # Disable no-print-directory
+ MAKEOPTS=${MAKEOPTS/--no-print-directory/}
+
+ # Ensure that are plugins dir is enabled as default
+ sed -i -e "s:/usr/lib/mozilla/plugins:/usr/$(get_libdir)/nsbrowser/plugins:" \
+ "${S}"/xpcom/io/nsAppFileLocationProvider.cpp || die "sed failed to replace plugin path!"
+
+ # hack added to workaround bug 299905 on hosts with libc that doesn't
+ # support tls, (probably will only hit this condition with Gentoo Prefix)
+ tc-has-tls -l || export ac_cv_thread_keyword=no
+
+ CC="$(tc-getCC)" CXX="$(tc-getCXX)" LD="$(tc-getLD)" PYTHON="$(PYTHON)" econf
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die "emake install failed"
+
+ rm "${ED}"/usr/bin/xulrunner
+
+ MOZLIBDIR="/usr/$(get_libdir)/${PN}-${MAJ_PV}"
+ SDKDIR="/usr/$(get_libdir)/${PN}-devel-${MAJ_PV}/sdk"
+
+ if has_multilib_profile; then
+ local config
+ for config in "${ED}"/etc/gre.d/*.system.conf ; do
+ mv "${config}" "${config%.conf}.${CHOST}.conf"
+ done
+ fi
+
+ dodir /usr/bin
+ dosym "${MOZLIBDIR}/xulrunner" "/usr/bin/xulrunner-${MAJ_PV}" || die
+
+ # env.d file for ld search path
+ dodir /etc/env.d
+ echo "LDPATH=${EPREFIX}/${MOZLIBDIR}" > "${ED}"/etc/env.d/08xulrunner || die "env.d failed"
+
+ # Add our defaults to xulrunner and out of firefox
+ cp "${FILESDIR}"/xulrunner-default-prefs.js \
+ "${ED}/${MOZLIBDIR}/defaults/pref/all-gentoo.js" || \
+ die "failed to cp xulrunner-default-prefs.js"
+
+ pax-mark m "${D}"/${MOZLIBDIR}/plugin-container
+
+ if use java ; then
+ java-pkg_regjar "${ED}/${MOZLIBDIR}/javaxpcom.jar"
+ java-pkg_regso "${ED}/${MOZLIBDIR}/libjavaxpcomglue.so"
+ java-pkg_regjar "${ED}/${SDKDIR}/lib/MozillaGlue.jar"
+ java-pkg_regjar "${ED}/${SDKDIR}/lib/MozillaInterfaces.jar"
+ fi
+}
+
+pkg_postinst() {
+ ewarn "If firefox fails to start with \"failed to load xpcom\", run revdep-rebuild"
+ ewarn "If that does not fix the problem, rebuild dev-libs/nss"
+ ewarn "Try dev-util/lafilefixer if you get build failures related to .la files"
+
+ einfo
+ einfo "All prefs can be overridden by the user. The preferences are to make"
+ einfo "use of xulrunner out of the box on an average system without the user"
+ einfo "having to go through and enable the basics."
+
+ einfo
+ ewarn "Any package that requires xulrunner:1.9 slot could and most likely will"
+ ewarn "have issues. These issues should be reported to maintainer, and mozilla herd"
+ ewarn "should be cc'd on the bug report. Thank you anarchy@gentoo.org ."
+}