summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wendler <polynomial-c@gentoo.org>2010-10-28 15:06:59 +0000
committerLars Wendler <polynomial-c@gentoo.org>2010-10-28 15:06:59 +0000
commitcda09b2141bca035ef061ece4da152cd2314d3ef (patch)
tree5e36e09098916543ba21521c657aa4b95bb573f3 /net-libs
parentworkaround broken repoman check (diff)
downloadhistorical-cda09b2141bca035ef061ece4da152cd2314d3ef.tar.gz
historical-cda09b2141bca035ef061ece4da152cd2314d3ef.tar.bz2
historical-cda09b2141bca035ef061ece4da152cd2314d3ef.zip
Readded latest stable sparc version which I foolishly removed from the tree.
Package-Manager: portage-2.2.0_alpha2/cvs/Linux x86_64 RepoMan-Options: --force
Diffstat (limited to 'net-libs')
-rw-r--r--net-libs/xulrunner/ChangeLog7
-rw-r--r--net-libs/xulrunner/Manifest6
-rw-r--r--net-libs/xulrunner/files/1009-armv4t-nanojit-v2.patch320
-rw-r--r--net-libs/xulrunner/xulrunner-1.9.2.8.ebuild240
4 files changed, 571 insertions, 2 deletions
diff --git a/net-libs/xulrunner/ChangeLog b/net-libs/xulrunner/ChangeLog
index 69bb54a182a5..547a8092c0ac 100644
--- a/net-libs/xulrunner/ChangeLog
+++ b/net-libs/xulrunner/ChangeLog
@@ -1,6 +1,11 @@
# ChangeLog for net-libs/xulrunner
# Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/net-libs/xulrunner/ChangeLog,v 1.370 2010/10/28 13:53:46 polynomial-c Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-libs/xulrunner/ChangeLog,v 1.371 2010/10/28 15:06:59 polynomial-c Exp $
+
+ 28 Oct 2010; Lars Wendler <polynomial-c@gentoo.org>
+ +files/1009-armv4t-nanojit-v2.patch, +xulrunner-1.9.2.8.ebuild:
+ Readded latest stable sparc version which I foolishly removed from the
+ tree.
*xulrunner-1.9.2.12 (28 Oct 2010)
diff --git a/net-libs/xulrunner/Manifest b/net-libs/xulrunner/Manifest
index 8a304cad107d..4694464b8ec5 100644
--- a/net-libs/xulrunner/Manifest
+++ b/net-libs/xulrunner/Manifest
@@ -1,3 +1,4 @@
+AUX 1009-armv4t-nanojit-v2.patch 12251 RMD160 9e9d862879d4897067605879245c1a6d50cf32fe SHA1 dcfe3da40dc822f2769e244571b721b59e59f322 SHA256 68c4df9c5313b93e8c5d7c7e8ed8375a88e9afa28c05e3965180058ba06cf05b
AUX bug-606109.patch 1243 RMD160 ec262eed0480d8a13c914c4781329e3ea1c23b0f SHA1 0c0cc40ee0a663422b107cc3ae5d1412b8c45ac7 SHA256 266d9c7218cc04c3badadc54f8f31b1238326b9c3052aed057ffce40c69541dc
AUX fix_crash_in_windowwatcher.patch 1102 RMD160 d539f5d8d82b389a8b2969a294821fd2d1184dd4 SHA1 0c2a8a36cdff57ba45166c76def0950cce297470 SHA256 5dd5145c1f3c0de1267384f0d68aa48c7cf50ba080d5074144f5b706af85d737
AUX xulrunner-1.9.2-gtk+-2.21.patch 663 RMD160 20e2465da0e6c884527fd7cfebd3bdb2f8f015a9 SHA1 f2b9c26ed255bde672ccc8cb7ae4ae014f52d6f5 SHA256 79c11dc4304d748f3c2d6e451aa6d44dd1bb450d1db671e7fa4a83420c6f2c05
@@ -7,11 +8,14 @@ AUX xulrunner-1.9_beta5-prefix.patch 1824 RMD160 e784c2fe11620a39699aea341d2e363
AUX xulrunner-default-prefs.js 677 RMD160 73ec130da332c1d6517a6f838d5fab0cc134289a SHA1 b9efc3ef5e95ad3081f6b68d771e32e848b4b9ac SHA256 53493080276f221f1619153c114caf268206a6fa107972b33a4eb7f1c1cf6fe8
DIST firefox-3.6.11.source.tar.bz2 51423291 RMD160 25f327d3cc32fa14792325b4f120cf308a37e659 SHA1 d5443a07243a771fb4c69c08cd6a0f5320a888c4 SHA256 16de496afb41400c8a6f5929cfc8d2c967afe30e99251d1752bc794453d28db4
DIST firefox-3.6.12.source.tar.bz2 51423668 RMD160 196e32a4cd9c6725e115aabcf320d7d8df5bca6e SHA1 1cc3885687dd5ad21167d9d45f76eb1458f46bdd SHA256 dd478c653070f451b76befc798cfa1d6b61745d8badf831a3bae453c32e68c2d
+DIST firefox-3.6.8.source.tar.bz2 51238976 RMD160 14e245c643d41a1da25fe4dbc15d6ae466a19e5b SHA1 4936e543f6c7492c5954cbd5b30ddda6b20e3797 SHA256 fc609cc6a0ddaa2a9ebd8511ec39ae4a404e1107a12e07b233e2afca51d9a10e
DIST firefox-3.6.9.source.tar.bz2 51240588 RMD160 530b1d64cc02ba0433c3a39d1c97c569dad090ef SHA1 2429154c8d50bb5eeef80233b56fb26dcf727ea3 SHA256 9f7f09e2d064a5835d719ccb59a70d2d32a1860f67cb9cc88c4b693668580503
+DIST xulrunner-1.9.2-patches-0.6.tar.bz2 16308 RMD160 6066ea0b01f8b6c9eae1a0692ad9a07f04ab7327 SHA1 ebba861e23ef36256dc29d7d04820222be8e4241 SHA256 6a9d709f9ee15d6c139a35f8a6826cd7b473188290bd5e81e56297d8f36e2235
DIST xulrunner-1.9.2-patches-0.7.tar.bz2 16366 RMD160 2bfa5f56d58d5bb4508512190cf07454814fb0b5 SHA1 2c6e2cfb0c50a5595795561126de26941dbed576 SHA256 3e25e9b8d5fe9109f03889bca9240f92acd502fd68efe0e7eda304f5487b6bf0
EBUILD xulrunner-1.9.2.11.ebuild 7975 RMD160 91b239d8c77e3a858920df34ce1661d51f1f94e2 SHA1 e55e5de045705b84e2f7fc9340f5210ff86551c2 SHA256 fde53108d3ce8801782a7631a475f143b1d87bc200ab4e4ff5fb1c0ab0b10502
EBUILD xulrunner-1.9.2.12.ebuild 8035 RMD160 2e78b451d99bfb775ac649fe9c2cb4c2edcce73c SHA1 8a2fbf652d1e0f81e6fdc5dc510e26c067912785 SHA256 faa8ed64629d689563447d76b798ccb2ec3f61e0a7412b84a251dc96eef465af
+EBUILD xulrunner-1.9.2.8.ebuild 7748 RMD160 bc4d612d5416475f504776fc4d3f4a93bfbdc051 SHA1 2297747ed5f3813788ec675b4a2619ce2fb9458e SHA256 503bba36ddbb5c2b8d6165a4ed00a0075261d117a69064c8f520f627ef0238e9
EBUILD xulrunner-1.9.2.9-r1.ebuild 7937 RMD160 5786094ed4fa2429e5fc68286ff367f988a7c410 SHA1 52ccf08ede04abc9aa4004eb7f32ec5abf88e9f6 SHA256 56a6c6ebad31089c6fdc91b46882fdb70d8993f4dc31e222fa0a3a6ca3fdfeff
EBUILD xulrunner-1.9.2.9.ebuild 7870 RMD160 18f03150a797b81d51ebd2b0907f4ea3ad7420ef SHA1 fd6458a9c64e39ee43aeb3763211f26528f65c74 SHA256 62d9c1f226a1f1356f41bbef25871141ad40f427d30e201f0579e2ce728ce331
-MISC ChangeLog 51308 RMD160 043d2755f8cdab616a47542b02e08d180885860b SHA1 128b10b08fdb2bba415c0d9fc872c5760f70b201 SHA256 4301fc5ae9c44ac89c22a96d3998e25152699239cfe1cd44bae1250719982a19
+MISC ChangeLog 51510 RMD160 7a74a2d32f1b4beed87825ef5f8c8f79f7faddd2 SHA1 fd4c26c9cfbe773be76c60f28d30aa6dd77d91d9 SHA256 8ec306b1c65e3f8f3e545b98ae736034533ebd3562c6ae933195f154d5d599e9
MISC metadata.xml 534 RMD160 6f9915565c51559c0e4726fed4e43cffce894306 SHA1 7ababd8846ab59b3ea43ac0153750584aa792055 SHA256 60f561d9e9846e96bfa0d6a9161058986c65dba93879073e7138477b6ce61978
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 000000000000..2d57c95067a9
--- /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/xulrunner-1.9.2.8.ebuild b/net-libs/xulrunner/xulrunner-1.9.2.8.ebuild
new file mode 100644
index 000000000000..871bd055481c
--- /dev/null
+++ b/net-libs/xulrunner/xulrunner-1.9.2.8.ebuild
@@ -0,0 +1,240 @@
+# 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.8.ebuild,v 1.12 2010/10/28 15:06:59 polynomial-c 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
+
+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.6"
+
+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 debug +ipc libnotify system-sqlite wifi"
+
+RDEPEND="java? ( >=virtual/jre-1.4 )
+ >=sys-devel/binutils-2.16.1
+ >=dev-libs/nss-3.12.6
+ >=dev-libs/nspr-4.8
+ 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
+ wifi? ( net-wireless/wireless-tools )
+ libnotify? ( >=x11-libs/libnotify-0.4 )"
+
+DEPEND="java? ( >=virtual/jdk-1.4 )
+ ${RDEPEND}
+ =dev-lang/python-2*[threads]
+ dev-util/pkgconfig"
+
+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_EXCLUDE="1009-armv4t-nanojit.patch" \
+ EPATCH_SUFFIX="patch" \
+ EPATCH_FORCE="yes" \
+ epatch "${WORKDIR}"
+
+ epatch "${FILESDIR}"/1009-armv4t-nanojit-v2.patch
+
+ 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_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
+
+ # 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"
+
+ 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 ."
+}