aboutsummaryrefslogtreecommitdiffstats
path: root/community/firefox-esr
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2016-03-31 09:32:21 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2016-03-31 12:48:15 +0000
commit4c9e27a54c4f400e46645cb768b7743d2e29f9b1 (patch)
treeefafab3e4b167b8a11a8991d468c1655d25403c4 /community/firefox-esr
parenta94573fafecc06cfd799ff83b4b3da40e29d469d (diff)
downloadaports-4c9e27a54c4f400e46645cb768b7743d2e29f9b1.tar.bz2
aports-4c9e27a54c4f400e46645cb768b7743d2e29f9b1.tar.xz
community/firefox-esr: renamed from firefox
Diffstat (limited to 'community/firefox-esr')
-rw-r--r--community/firefox-esr/0002-Use-C99-math-isfinite.patch17
-rw-r--r--community/firefox-esr/0003-xulrunner-jemalloc-aslr.patch67
-rw-r--r--community/firefox-esr/APKBUILD223
-rw-r--r--community/firefox-esr/firefox-safe.desktop11
-rw-r--r--community/firefox-esr/firefox.desktop81
-rw-r--r--community/firefox-esr/fix-arm-atomics-grsec.patch342
-rw-r--r--community/firefox-esr/fix-fortify-inline.patch11
-rw-r--r--community/firefox-esr/fix-fortify-system-wrappers.patch13
-rw-r--r--community/firefox-esr/fix-ipc.patch55
-rw-r--r--community/firefox-esr/fix-linux-include.patch10
-rw-r--r--community/firefox-esr/fix-media.patch10
-rw-r--r--community/firefox-esr/fix-netwerk.patch37
-rw-r--r--community/firefox-esr/fix-toolkit.patch151
-rw-r--r--community/firefox-esr/fix-tools.patch49
-rw-r--r--community/firefox-esr/getchar.patch14
-rw-r--r--community/firefox-esr/mozconfig54
-rw-r--r--community/firefox-esr/mozilla-build-arm.patch11
-rw-r--r--community/firefox-esr/rhbz-966424.patch14
-rw-r--r--community/firefox-esr/stab.h71
-rw-r--r--community/firefox-esr/stat.patch25
-rw-r--r--community/firefox-esr/vendor.js3
21 files changed, 1269 insertions, 0 deletions
diff --git a/community/firefox-esr/0002-Use-C99-math-isfinite.patch b/community/firefox-esr/0002-Use-C99-math-isfinite.patch
new file mode 100644
index 0000000000..ba4f5cfb3d
--- /dev/null
+++ b/community/firefox-esr/0002-Use-C99-math-isfinite.patch
@@ -0,0 +1,17 @@
+--- ./xpcom/ds/nsMathUtils.h.orig
++++ ./xpcom/ds/nsMathUtils.h
+@@ -104,12 +104,12 @@
+ #ifdef WIN32
+ // NOTE: '!!' casts an int to bool without spamming MSVC warning C4800.
+ return !!_finite(aNum);
+-#elif defined(XP_DARWIN)
++#elif defined(XP_DARWIN) || defined(_GLIBCXX_CMATH)
+ // Darwin has deprecated |finite| and recommends |isfinite|. The former is
+ // not present in the iOS SDK.
+ return std::isfinite(aNum);
+ #else
+- return finite(aNum);
++ return isfinite(aNum);
+ #endif
+ }
+
diff --git a/community/firefox-esr/0003-xulrunner-jemalloc-aslr.patch b/community/firefox-esr/0003-xulrunner-jemalloc-aslr.patch
new file mode 100644
index 0000000000..7aa00009f0
--- /dev/null
+++ b/community/firefox-esr/0003-xulrunner-jemalloc-aslr.patch
@@ -0,0 +1,67 @@
+From 88bb9f90ec1e4b43fb78596c8ff7577c92592eb4 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Fri, 25 Nov 2011 08:36:52 +0000
+Subject: [PATCH 3/4] xulrunner: jemalloc aslr
+
+---
+ memory/jemalloc/jemalloc.c | 33 ++++++++++++++++++++++-----------
+ 1 files changed, 22 insertions(+), 11 deletions(-)
+
+diff --git a/memory/jemalloc/jemalloc.c b/memory/jemalloc/jemalloc.c
+index ad7c450..91de92c 100644
+--- a/memory/mozjemalloc/jemalloc.c
++++ b/memory/mozjemalloc/jemalloc.c
+@@ -410,7 +410,7 @@ void *_mmap(void *addr, size_t length, int prot, int flags,
+ static const bool __isthreaded = true;
+ #endif
+
+-#if defined(MOZ_MEMORY_SOLARIS) && defined(MAP_ALIGN) && !defined(JEMALLOC_NEVER_USES_MAP_ALIGN)
++#if defined(MOZ_MEMORY_SOLARIS) || defined(MOZ_MEMORY_LINUX) || defined(MOZ_MEMORY_BSD)
+ #define JEMALLOC_USES_MAP_ALIGN /* Required on Solaris 10. Might improve performance elsewhere. */
+ #endif
+
+@@ -2181,20 +2181,31 @@ pages_map_align(size_t size, int pfd, size_t alignment)
+ * We don't use MAP_FIXED here, because it can cause the *replacement*
+ * of existing mappings, and we only want to create new mappings.
+ */
+-#ifdef MALLOC_PAGEFILE
+- if (pfd != -1) {
+- ret = mmap((void *)alignment, size, PROT_READ | PROT_WRITE, MAP_PRIVATE |
+- MAP_NOSYNC | MAP_ALIGN, pfd, 0);
+- } else
+-#endif
+- {
+- ret = mmap((void *)alignment, size, PROT_READ | PROT_WRITE, MAP_PRIVATE |
+- MAP_NOSYNC | MAP_ALIGN | MAP_ANON, -1, 0);
+- }
++ ret = mmap(NULL, size + alignment, PROT_READ | PROT_WRITE, MAP_PRIVATE |
++ MAP_NOSYNC| MAP_ANON, -1, 0);
+ assert(ret != NULL);
+
+ if (ret == MAP_FAILED)
+ ret = NULL;
++ else {
++ uintptr_t aligned_ret;
++ size_t extra_size;
++
++ aligned_ret = (uintptr_t)ret + alignment - 1;
++ aligned_ret &= ~(alignment - 1);
++ extra_size = aligned_ret - (uintptr_t)ret;
++ munmap(ret, extra_size);
++ munmap(ret + extra_size + size, alignment - extra_size);
++ ret = (void *)aligned_ret;
++#ifdef MALLOC_PAGEFILE
++ if (pfd != -1) {
++ ret = mmap(ret, size, PROT_READ | PROT_WRITE, MAP_PRIVATE |
++ MAP_NOSYNC | MAP_FIXED, pfd, 0);
++ }
++ if (ret == MAP_FAILED)
++ ret = NULL;
++#endif
++ }
+ return (ret);
+ }
+ #endif
+--
+1.7.7.4
+
diff --git a/community/firefox-esr/APKBUILD b/community/firefox-esr/APKBUILD
new file mode 100644
index 0000000000..6725ce933e
--- /dev/null
+++ b/community/firefox-esr/APKBUILD
@@ -0,0 +1,223 @@
+# Contributor: William Pitcock <nenolod@dereferenced.org>
+# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
+pkgname=firefox-esr
+pkgver=38.7.0
+_pkgver=$pkgver
+_xulver=$pkgver
+pkgrel=0
+pkgdesc="Firefox web browser"
+url="https://www.mozilla.org/en-US/firefox/organizations/faq/"
+arch="all"
+license="GPL LGPL MPL"
+depends=""
+depends_dev="
+ alsa-lib-dev
+ bzip2-dev
+ dbus-glib-dev
+ gst-plugins-base1-dev
+ gstreamer1-dev
+ gtk+2.0-dev
+ hunspell-dev
+ icu-dev
+ libevent-dev
+ libidl-dev
+ libjpeg-turbo-dev
+ libnotify-dev
+ libogg-dev
+ libtheora-dev
+ libvorbis-dev
+ libvpx-dev
+ libxt-dev
+ libxcomposite-dev
+ mesa-dev
+ nspr-dev
+ nss-dev
+ sqlite-dev
+ startup-notification-dev
+ wireless-tools-dev
+ "
+makedepends="$depends_dev
+ autoconf
+ automake
+ bsd-compat-headers
+ libtool
+ paxmark
+ python
+ sed
+ yasm
+ zip
+ "
+
+install=""
+subpackages="$pkgname-dev"
+source="http://ftp.mozilla.org/pub/firefox/releases/${pkgver}esr/source/firefox-${pkgver}esr.source.tar.bz2
+ mozconfig
+ vendor.js
+
+ 0002-Use-C99-math-isfinite.patch
+ fix-arm-atomics-grsec.patch
+ fix-ipc.patch
+ fix-media.patch
+ fix-netwerk.patch
+ fix-toolkit.patch
+ fix-tools.patch
+ fix-linux-include.patch
+ mozilla-build-arm.patch
+ stab.h
+
+ rhbz-966424.patch
+ fix-fortify-inline.patch
+ fix-fortify-system-wrappers.patch
+
+ firefox.desktop
+ firefox-safe.desktop"
+
+_builddir="${srcdir}/mozilla-esr${pkgver%%.*}"
+_mozappdir=/usr/lib/firefox-$pkgver
+_mozappdirdev=/usr/lib/firefox-devel-$pkgver
+
+# help our shared-object scanner to find the libs
+ldpath="$_mozappdir"
+
+prepare() {
+ local i
+
+ cd "$_builddir" || return 1
+
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+ cp "$srcdir"/stab.h toolkit/crashreporter/google-breakpad/src/
+
+ cp "${srcdir}/mozconfig" .mozconfig
+}
+
+build() {
+ cd "$_builddir"
+
+ # mozilla's buildsystem is on drugs
+ export CFLAGS="$(echo $CFLAGS | sed -e 's/-Wall//' -e 's/-fexceptions/-fno-exceptions/g')"
+ export CXXFLAGS="$CFLAGS"
+ export SHELL=/bin/sh
+
+ # set rpath so linker finds the libs
+ export LDFLAGS="$LDFLAGS -Wl,-rpath,${_mozappdir}"
+
+ make -f client.mk build \
+ STRIP="/bin/true" \
+ || return 1
+}
+
+package() {
+ cd "$_builddir"
+
+ # only used for startupcache creation.
+ local paxflags="-msp"
+ paxmark "$paxflags" */dist/bin/xpcshell || return 1
+
+ make -j1 -f client.mk install \
+ DESTDIR="$pkgdir" \
+ MOZ_MAKE_FLAGS="$MAKEOPTS" \
+ || return 1
+
+ install -m755 -d ${pkgdir}/usr/share/applications
+ install -m755 -d ${pkgdir}/usr/share/pixmaps
+ install -m644 "$_builddir"/browser/branding/official/default48.png \
+ ${pkgdir}/usr/share/pixmaps/firefox.png || return 1
+ install -m644 ${srcdir}/firefox.desktop ${pkgdir}/usr/share/applications/firefox.desktop
+ install -m644 ${srcdir}/firefox-safe.desktop ${pkgdir}/usr/share/applications/firefox-safe.desktop
+
+ # firefox currently does not work with mprotect. disable it for now
+ local paxflags="-mp"
+ [ "$CARCH" = "x86" ] && paxflags="-msp"
+
+ paxmark "$paxflags" "$pkgdir"/$_mozappdir/firefox || return 1
+ paxmark "$paxflags" "$pkgdir"/$_mozappdir/plugin-container || return 1
+
+ # xulrunner stub launcher has changed to using a symlink overlay...
+ # go figure
+ ln -sf /usr/lib/xulrunner-${_xulver} ${pkgdir}/$_mozappdir/xulrunner
+
+ # launcher as symlink is broken from firefox-7.0
+ rm "$pkgdir"/usr/bin/firefox || return 1
+ libgl=$(scanelf -qF '#F%S' /usr/lib/libGL.so)
+ cat > "$pkgdir"/usr/bin/firefox << __EOF__
+#!/bin/sh
+
+exec $_mozappdir/firefox "\$@"
+__EOF__
+ chmod 755 "$pkgdir"/usr/bin/firefox
+
+ # install our vendor prefs
+ install -d "$pkgdir"/$_mozappdir/browser/defaults/preferences
+ cat "$srcdir"/vendor.js >> "$pkgdir"/$_mozappdir/browser/defaults/preferences/firefox-branding.js
+
+ # remove copied, huge, libraries
+ rm -f "$pkgdir"/${_mozappdirdev}/sdk/lib/libmozjs.so
+ rm -f "$pkgdir"/${_mozappdirdev}/sdk/lib/libmozalloc.so
+ rm -f "$pkgdir"/${_mozappdirdev}/sdk/lib/libxul.so
+}
+
+dev() {
+ mkdir -p "$subpkgdir"/${_mozappdirdev%/*}
+ mv "$pkgdir"/${_mozappdirdev} "$subpkgdir"/${_mozappdirdev%/*} \
+ || return 1
+ default_dev
+}
+
+md5sums="f0d5c2adcff266ea15c94db6b9d26a26 firefox-38.7.0esr.source.tar.bz2
+1f4c60e662ed93784431bd06c5141719 mozconfig
+1515663477ce427cbdc42f04d8d5ca4e vendor.js
+6ab77b80c8c7d6fd07ab53c54561f4df 0002-Use-C99-math-isfinite.patch
+b18bd948aae828e5c8f5f63e440c96d6 fix-arm-atomics-grsec.patch
+0c453c2e058ac568e0148c02b1c09abd fix-ipc.patch
+f8bc97333847f37597c0bac0dca64eb2 fix-media.patch
+170b8e7f8cab21f0965f226c291a57f9 fix-netwerk.patch
+296954be4c6d6bfcc24d0a46a2bd7d74 fix-toolkit.patch
+2279c55a85013fc1c0d01427768edd4d fix-tools.patch
+2f0b995b1313884b10e4a61c2ce2cd01 fix-linux-include.patch
+308ba5b54116a035fe68d0d5c3974857 mozilla-build-arm.patch
+4383d038b8d8411ea46f4a109197c19e stab.h
+15ebeeeb6823c185f4fed98e9bf1b786 rhbz-966424.patch
+f29e0036edc7b3a4158a82fa97bde500 fix-fortify-inline.patch
+9aba3811121f113fe547947591802d2b fix-fortify-system-wrappers.patch
+ba96924ece1d77453e462429037a2ce5 firefox.desktop
+6f38a5899034b7786cb1f75ad42032b8 firefox-safe.desktop"
+sha256sums="5312ad03ccff3ca233d207b6e8e433bddb893ab6acc5ca2dfc5b7c18bb0dc8c0 firefox-38.7.0esr.source.tar.bz2
+23c2b4535ce83c92ba978e15ce328c9f140def155d12523c00df30baf41b98dc mozconfig
+d72ca759792cc8c88efc664d30087a139fed7fc3d7d058e4cd9ab287bb80ea46 vendor.js
+080a55182b865471a86fa4b70a66ed9495f1e536f7fdc4060cb8c675b4749c6e 0002-Use-C99-math-isfinite.patch
+ff7cb3c9c4712e0517a6f11e3bf08e9b0d13dbe6384930bdc7f55b1ceed039b5 fix-arm-atomics-grsec.patch
+fa7d50f399b6fc1ec1c007cabadc5c0cb9e1daf92c7f6ad89f651b8ce268c765 fix-ipc.patch
+c1d0fbcf5e8610df9adc66ea956753e7d495e8ed2d1c1e06d183f4680c85db97 fix-media.patch
+4a2f8ff5e9b1359541eba8854098cee2caeb40ad9dbdc4b8fcf48b47ea8ca2d2 fix-netwerk.patch
+666883189dba3f4c7ba6b5bc85026c85bcb84477c2d5ba00d6414ddd0f744368 fix-toolkit.patch
+60ed0870119480994c6c455034c52dd21b8482b7617c3a0032e3b2abf4467e4d fix-tools.patch
+a3a6291888819e0f10e3ca05b2979093b32c723c4bf67b19ea1ab14555085236 fix-linux-include.patch
+6f5f5e4d2a17182b72b248e896450235ccdaf63252fdb89a8deb55da8adc9be3 mozilla-build-arm.patch
+960d82bbfdc88c95f5cb4f2e1c1bf23dae7519b3b7203914d7b3ddbff1ba4c28 stab.h
+a50d15a640f230a2c66e1eb2afd2bed4117605d0f1591dcfec1ca30f0bc2352f rhbz-966424.patch
+ecf808ef1bc2920f6f7a4786fafb46c74e8a2c3bc628f28f10d6e8e1a265e609 fix-fortify-inline.patch
+cd19195cb4c316ad9f7d377cd8581218c888863b1bc4d112c97f48a4425fb946 fix-fortify-system-wrappers.patch
+b571c4a49884a3c98806246c9cc3e60c73d5a8f4aeb7f96217db0be1d6210eda firefox.desktop
+4b6de45753856a890f4482055666e77f9b01bdfb7e0df08bafaa3a4d9937eed3 firefox-safe.desktop"
+sha512sums="edb8cdb06d82a58c3dca216402a4df0afb21bcaf97cbf3ebc3857249b281283f099267284f025fb724f47eff9c3b7569f6ae000003332c47264ca254f73e65ca firefox-38.7.0esr.source.tar.bz2
+e14b4a646230f7a752ef864b0e6a074fdac74d6c4abde2c31656eb10ac6f002a5c664d257bf3f4bd22544f10103e38d5fae49f84fcaae402b81940e72bcfe0e5 mozconfig
+93570f821e59af4d233fc4b1df85e1d145a5e041ad402fd72921987a5a2f5218538d7a13d59bbf0bda5e7df1d5281407674a3765625936340106d1185b15b5d8 vendor.js
+7e123144bc2b1efed149dfb41b255c447d43ea93a63ebe114d01945e6a6d69edc2f2a3c36980a93279106c1842355851b8b6c1d96679ee6be7b9b30513e0b1a8 0002-Use-C99-math-isfinite.patch
+4311464ae52b6d2e2b02c789c6d5fca9b3c211888a983aa609a62c2f2554516fea735ea90673387c69b38a30aa8453ed79faa44b5163df4293880d40df676b2d fix-arm-atomics-grsec.patch
+6419b3ec12c775c8bbce2c5737e68bb6c93f5b6c69af65b4fbbc525de3e2022def61943ab713c278aff9a6c27c1df1e19fb94940a755a94f6b40fd0492fae228 fix-ipc.patch
+f4d1b0814247cdfe1655a0f345def4f80bd66f37ae5b0edc2cd6b8358e39e9a1bcc0a4ed7d1c4074a1302fb027a2f8be549225c5f4f56caf2513c968ed05d666 fix-media.patch
+8a896ee4d1465a844351cec84217de1a28b9f27bfc1e34cc71368664b5b8804bd66bdcadc78c78ee365abd1d0cafed1e6c568045c93cb78ac94e2818f503d58c fix-netwerk.patch
+72459754016f254c58d56d9a8719897fa8da9cf969eaa498e1e755457942d3f0ac56e4abd3f6a66ef924c94aa034d0af18a1fb653926b2496f0c2615fdb24c5e fix-toolkit.patch
+426b57ce698de3eecd1b52f2998974c4e0b5922584b09b554d436c61fee039d1f86345e746fee067801ebbf50815c4d19b96266a2ed72a35ae5c3edbdb57bba1 fix-tools.patch
+2c3319fd625c5d183e310ce6a27ec35e91caafd2206b7b992a539924f9bdb001b0340f1f4451650d4d968134ad35ba1f955cacfff10cb58980f27c42c90d280d fix-linux-include.patch
+e61664bc93eadce5016a06a4d0684b34a05074f1815e88ef2613380d7b369c6fd305fb34f83b5eb18b9e3138273ea8ddcfdcb1084fdcaa922a1e5b30146a3b18 mozilla-build-arm.patch
+0b3f1e4b9fdc868e4738b5c81fd6c6128ce8885b260affcb9a65ff9d164d7232626ce1291aaea70132b3e3124f5e13fef4d39326b8e7173e362a823722a85127 stab.h
+06ededcd196af98b77991dcba3b710b0dfc061404adb4676fcc380be80410a2621f64d67257b0aefdf36f566e0ea1294b5405b7b4db43e83281a1c64d02da579 rhbz-966424.patch
+09bc32cf9ee81b9cc6bb58ddbc66e6cc5c344badff8de3435cde5848e5a451e0172153231db85c2385ff05b5d9c20760cb18e4138dfc99060a9e960de2befbd5 fix-fortify-inline.patch
+2a967e4619fd89a046bd40be7fdcef646fcb1eba5e47afc96aa1d59c25bcc8747cb07baee6c11f3b803db0981aced181534b806778e4d21e74958f5f4d74c784 fix-fortify-system-wrappers.patch
+f3b7c3e804ce04731012a46cb9e9a6b0769e3772aef9c0a4a8c7520b030fdf6cd703d5e9ff49275f14b7d738fe82a0a4fde3bc3219dff7225d5db0e274987454 firefox.desktop
+5dcb6288d0444a8a471d669bbaf61cdb1433663eff38b72ee5e980843f5fc07d0d60c91627a2c1159215d0ad77ae3f115dcc5fdfe87e64ca704b641aceaa44ed firefox-safe.desktop"
diff --git a/community/firefox-esr/firefox-safe.desktop b/community/firefox-esr/firefox-safe.desktop
new file mode 100644
index 0000000000..1538fc6748
--- /dev/null
+++ b/community/firefox-esr/firefox-safe.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Encoding=UTF-8
+Exec=firefox -safe-mode %u
+Icon=firefox
+Type=Application
+Terminal=false
+MultipleArgs=false
+Name=Firefox - Safe Mode
+GenericName=Web Browser - Safe Mode
+StartupNotify=false
+Categories=Network;WebBrowser;
diff --git a/community/firefox-esr/firefox.desktop b/community/firefox-esr/firefox.desktop
new file mode 100644
index 0000000000..d048ce46c3
--- /dev/null
+++ b/community/firefox-esr/firefox.desktop
@@ -0,0 +1,81 @@
+[Desktop Entry]
+Exec=firefox %u
+Icon=firefox
+Type=Application
+Terminal=false
+Name=Firefox
+Name[bn]=ফায়ারফক্স3
+Name[eo]=Fajrovulpo3
+Name[fi]=Firefox3
+Name[pa]=ਫਾਇਰਫੋਕਸ3
+Name[tg]=Рӯбоҳи оташин3
+GenericName=Web Browser
+GenericName[af]=Web Blaaier
+GenericName[ar]=متصفح ويب
+GenericName[az]=Veb Səyyahı
+GenericName[bg]=Браузър
+GenericName[bn]=ওয়েব ব্রাউজার
+GenericName[br]=Furcher ar Gwiad
+GenericName[bs]=WWW Preglednik
+GenericName[ca]=Fullejador web
+GenericName[cs]=WWW prohlížeč
+GenericName[cy]=Porydd Gwe
+GenericName[da]=Browser
+GenericName[de]=Web-Browser
+GenericName[el]=Περιηγητής Ιστού
+GenericName[eo]=TTT-legilo
+GenericName[es]=Navegador web
+GenericName[et]=Veebilehitseja
+GenericName[eu]=Web arakatzailea
+GenericName[fa]=مرورگر وب
+GenericName[fi]=WWW-selain
+GenericName[fo]=Alnótsfar
+GenericName[fr]=Navigateur web
+GenericName[gl]=Navegador Web
+GenericName[he]=דפדפן אינטרנט
+GenericName[hi]=वेब ब्राउज़र
+GenericName[hr]=Web preglednik
+GenericName[hu]=Webböngésző
+GenericName[is]=Vafri
+GenericName[it]=Browser Web
+GenericName[ja]=ウェブブラウザ
+GenericName[ko]=웹 브라우저
+GenericName[lo]=ເວັບບຣາວເຊີ
+GenericName[lt]=Žiniatinklio naršyklė
+GenericName[lv]=Web Pārlūks
+GenericName[mk]=Прелистувач на Интернет
+GenericName[mn]=Веб-Хөтөч
+GenericName[nb]=Nettleser
+GenericName[nds]=Nettkieker
+GenericName[nl]=Webbrowser
+GenericName[nn]=Nettlesar
+GenericName[nso]=Seinyakisi sa Web
+GenericName[pa]=ਵੈਬ ਝਲਕਾਰਾ
+GenericName[pl]=Przeglądarka WWW
+GenericName[pt]=Navegador Web
+GenericName[pt_BR]=Navegador Web
+GenericName[ro]=Navigator de web
+GenericName[ru]=Веб-браузер
+GenericName[se]=Fierpmádatlogan
+GenericName[sk]=Webový prehliadač
+GenericName[sl]=Spletni brskalnik
+GenericName[sr]=Веб претраживач
+GenericName[sr@Latn]=Veb pretraživač
+GenericName[ss]=Ibrawuza yeWeb
+GenericName[sv]=Webbläsare
+GenericName[ta]=வலை உலாவி
+GenericName[tg]=Тафсиргари вэб
+GenericName[th]=เว็บบราวเซอร์
+GenericName[tr]=Web Tarayıcı
+GenericName[uk]=Навігатор Тенет
+GenericName[uz]=Веб-браузер
+GenericName[ven]=Buronza ya Webu
+GenericName[vi]=Trình duyệt Web
+GenericName[wa]=Betchteu waibe
+GenericName[xh]=Umkhangeli zincwadi we Web
+GenericName[zh_CN]=网页浏览器
+GenericName[zh_TW]=網頁瀏覽器
+GenericName[zu]=Umcingi we-Web
+MimeType=text/html;
+StartupNotify=true
+Categories=Network;WebBrowser;
diff --git a/community/firefox-esr/fix-arm-atomics-grsec.patch b/community/firefox-esr/fix-arm-atomics-grsec.patch
new file mode 100644
index 0000000000..5524b2aa73
--- /dev/null
+++ b/community/firefox-esr/fix-arm-atomics-grsec.patch
@@ -0,0 +1,342 @@
+--- mozilla-release/ipc/chromium/src/base/atomicops_internals_arm_gcc.h.orig
++++ mozilla-release/ipc/chromium/src/base/atomicops_internals_arm_gcc.h
+@@ -1,8 +1,31 @@
+-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
++// Copyright 2010 the V8 project authors. All rights reserved.
++// Redistribution and use in source and binary forms, with or without
++// modification, are permitted provided that the following conditions are
++// met:
++//
++// * Redistributions of source code must retain the above copyright
++// notice, this list of conditions and the following disclaimer.
++// * Redistributions in binary form must reproduce the above
++// copyright notice, this list of conditions and the following
++// disclaimer in the documentation and/or other materials provided
++// with the distribution.
++// * Neither the name of Google Inc. nor the names of its
++// contributors may be used to endorse or promote products derived
++// from this software without specific prior written permission.
++//
++// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-// This file is an internal atomic implementation, use base/atomicops.h instead.
++// This file is an internal atomic implementation, use atomicops.h instead.
+ //
+ // LinuxKernelCmpxchg and Barrier_AtomicIncrement are from Google Gears.
+
+@@ -12,43 +35,194 @@
+ namespace base {
+ namespace subtle {
+
+-// 0xffff0fc0 is the hard coded address of a function provided by
+-// the kernel which implements an atomic compare-exchange. On older
+-// ARM architecture revisions (pre-v6) this may be implemented using
+-// a syscall. This address is stable, and in active use (hard coded)
+-// by at least glibc-2.7 and the Android C library.
+-typedef Atomic32 (*LinuxKernelCmpxchgFunc)(Atomic32 old_value,
+- Atomic32 new_value,
+- volatile Atomic32* ptr);
+-LinuxKernelCmpxchgFunc pLinuxKernelCmpxchg __attribute__((weak)) =
+- (LinuxKernelCmpxchgFunc) 0xffff0fc0;
++// Memory barriers on ARM are funky, but the kernel is here to help:
++//
++// * ARMv5 didn't support SMP, there is no memory barrier instruction at
++// all on this architecture, or when targeting its machine code.
++//
++// * Some ARMv6 CPUs support SMP. A full memory barrier can be produced by
++// writing a random value to a very specific coprocessor register.
++//
++// * On ARMv7, the "dmb" instruction is used to perform a full memory
++// barrier (though writing to the co-processor will still work).
++// However, on single core devices (e.g. Nexus One, or Nexus S),
++// this instruction will take up to 200 ns, which is huge, even though
++// it's completely un-needed on these devices.
++//
++// * There is no easy way to determine at runtime if the device is
++// single or multi-core. However, the kernel provides a useful helper
++// function at a fixed memory address (0xffff0fa0), which will always
++// perform a memory barrier in the most efficient way. I.e. on single
++// core devices, this is an empty function that exits immediately.
++// On multi-core devices, it implements a full memory barrier.
++//
++// * This source could be compiled to ARMv5 machine code that runs on a
++// multi-core ARMv6 or ARMv7 device. In this case, memory barriers
++// are needed for correct execution. Always call the kernel helper, even
++// when targeting ARMv5TE.
++//
+
+-typedef void (*LinuxKernelMemoryBarrierFunc)(void);
+-LinuxKernelMemoryBarrierFunc pLinuxKernelMemoryBarrier __attribute__((weak)) =
+- (LinuxKernelMemoryBarrierFunc) 0xffff0fa0;
++inline void MemoryBarrier() {
++#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \
++ defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__)
++ __asm__ __volatile__("dmb ish" ::: "memory");
++#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || \
++ defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || \
++ defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__)
++ __asm__ __volatile__("mcr p15,0,r0,c7,c10,5" ::: "memory");
++#elif defined(__linux__) || defined(__ANDROID__)
++ // Note: This is a function call, which is also an implicit compiler barrier.
++ typedef void (*KernelMemoryBarrierFunc)();
++ ((KernelMemoryBarrierFunc)0xffff0fa0)();
++#error MemoryBarrier() is not implemented on this platform.
++#endif
++}
+
++// An ARM toolchain would only define one of these depending on which
++// variant of the target architecture is being used. This tests against
++// any known ARMv6 or ARMv7 variant, where it is possible to directly
++// use ldrex/strex instructions to implement fast atomic operations.
++#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \
++ defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || \
++ defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || \
++ defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || \
++ defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__)
+
+ inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,
+ Atomic32 old_value,
+ Atomic32 new_value) {
+- Atomic32 prev_value = *ptr;
++ Atomic32 prev_value;
++ int reloop;
+ do {
+- if (!pLinuxKernelCmpxchg(old_value, new_value,
+- const_cast<Atomic32*>(ptr))) {
+- return old_value;
+- }
+- prev_value = *ptr;
+- } while (prev_value == old_value);
++ // The following is equivalent to:
++ //
++ // prev_value = LDREX(ptr)
++ // reloop = 0
++ // if (prev_value != old_value)
++ // reloop = STREX(ptr, new_value)
++ __asm__ __volatile__(" ldrex %0, [%3]\n"
++ " mov %1, #0\n"
++ " cmp %0, %4\n"
++#ifdef __thumb2__
++ " it eq\n"
++#endif
++ " strexeq %1, %5, [%3]\n"
++ : "=&r"(prev_value), "=&r"(reloop), "+m"(*ptr)
++ : "r"(ptr), "r"(old_value), "r"(new_value)
++ : "cc", "memory");
++ } while (reloop != 0);
+ return prev_value;
+ }
+
++inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,
++ Atomic32 old_value,
++ Atomic32 new_value) {
++ Atomic32 result = NoBarrier_CompareAndSwap(ptr, old_value, new_value);
++ MemoryBarrier();
++ return result;
++}
++
++inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,
++ Atomic32 old_value,
++ Atomic32 new_value) {
++ MemoryBarrier();
++ return NoBarrier_CompareAndSwap(ptr, old_value, new_value);
++}
++
++inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,
++ Atomic32 increment) {
++ Atomic32 value;
++ int reloop;
++ do {
++ // Equivalent to:
++ //
++ // value = LDREX(ptr)
++ // value += increment
++ // reloop = STREX(ptr, value)
++ //
++ __asm__ __volatile__(" ldrex %0, [%3]\n"
++ " add %0, %0, %4\n"
++ " strex %1, %0, [%3]\n"
++ : "=&r"(value), "=&r"(reloop), "+m"(*ptr)
++ : "r"(ptr), "r"(increment)
++ : "cc", "memory");
++ } while (reloop);
++ return value;
++}
++
++inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,
++ Atomic32 increment) {
++ // TODO(digit): Investigate if it's possible to implement this with
++ // a single MemoryBarrier() operation between the LDREX and STREX.
++ // See http://crbug.com/246514
++ MemoryBarrier();
++ Atomic32 result = NoBarrier_AtomicIncrement(ptr, increment);
++ MemoryBarrier();
++ return result;
++}
++
+ inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,
+ Atomic32 new_value) {
+ Atomic32 old_value;
++ int reloop;
+ do {
++ // old_value = LDREX(ptr)
++ // reloop = STREX(ptr, new_value)
++ __asm__ __volatile__(" ldrex %0, [%3]\n"
++ " strex %1, %4, [%3]\n"
++ : "=&r"(old_value), "=&r"(reloop), "+m"(*ptr)
++ : "r"(ptr), "r"(new_value)
++ : "cc", "memory");
++ } while (reloop != 0);
++ return old_value;
++}
++
++// This tests against any known ARMv5 variant.
++#elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || \
++ defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)
++
++// The kernel also provides a helper function to perform an atomic
++// compare-and-swap operation at the hard-wired address 0xffff0fc0.
++// On ARMv5, this is implemented by a special code path that the kernel
++// detects and treats specially when thread pre-emption happens.
++// On ARMv6 and higher, it uses LDREX/STREX instructions instead.
++//
++// Note that this always perform a full memory barrier, there is no
++// need to add calls MemoryBarrier() before or after it. It also
++// returns 0 on success, and 1 on exit.
++//
++// Available and reliable since Linux 2.6.24. Both Android and ChromeOS
++// use newer kernel revisions, so this should not be a concern.
++namespace {
++
++inline int LinuxKernelCmpxchg(Atomic32 old_value,
++ Atomic32 new_value,
++ volatile Atomic32* ptr) {
++ typedef int (*KernelCmpxchgFunc)(Atomic32, Atomic32, volatile Atomic32*);
++ return ((KernelCmpxchgFunc)0xffff0fc0)(old_value, new_value, ptr);
++}
++
++} // namespace
++
++inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,
++ Atomic32 old_value,
++ Atomic32 new_value) {
++ Atomic32 prev_value;
++ for (;;) {
++ prev_value = *ptr;
++ if (prev_value != old_value)
++ return prev_value;
++ if (!LinuxKernelCmpxchg(old_value, new_value, ptr))
++ return old_value;
++ }
++}
++
++inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,
++ Atomic32 new_value) {
++ Atomic32 old_value;
++ do {
+ old_value = *ptr;
+- } while (pLinuxKernelCmpxchg(old_value, new_value,
+- const_cast<Atomic32*>(ptr)));
++ } while (LinuxKernelCmpxchg(old_value, new_value, ptr));
+ return old_value;
+ }
+
+@@ -63,36 +237,57 @@
+ // Atomic exchange the old value with an incremented one.
+ Atomic32 old_value = *ptr;
+ Atomic32 new_value = old_value + increment;
+- if (pLinuxKernelCmpxchg(old_value, new_value,
+- const_cast<Atomic32*>(ptr)) == 0) {
++ if (!LinuxKernelCmpxchg(old_value, new_value, ptr)) {
+ // The exchange took place as expected.
+ return new_value;
+ }
+ // Otherwise, *ptr changed mid-loop and we need to retry.
+ }
+-
+ }
+
+ inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,
+ Atomic32 old_value,
+ Atomic32 new_value) {
+- return NoBarrier_CompareAndSwap(ptr, old_value, new_value);
++ Atomic32 prev_value;
++ for (;;) {
++ prev_value = *ptr;
++ if (prev_value != old_value) {
++ // Always ensure acquire semantics.
++ MemoryBarrier();
++ return prev_value;
++ }
++ if (!LinuxKernelCmpxchg(old_value, new_value, ptr))
++ return old_value;
++ }
+ }
+
+ inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,
+ Atomic32 old_value,
+ Atomic32 new_value) {
+- return NoBarrier_CompareAndSwap(ptr, old_value, new_value);
++ // This could be implemented as:
++ // MemoryBarrier();
++ // return NoBarrier_CompareAndSwap();
++ //
++ // But would use 3 barriers per succesful CAS. To save performance,
++ // use Acquire_CompareAndSwap(). Its implementation guarantees that:
++ // - A succesful swap uses only 2 barriers (in the kernel helper).
++ // - An early return due to (prev_value != old_value) performs
++ // a memory barrier with no store, which is equivalent to the
++ // generic implementation above.
++ return Acquire_CompareAndSwap(ptr, old_value, new_value);
+ }
+
++#else
++# error "Your CPU's ARM architecture is not supported yet"
++#endif
++
++// NOTE: Atomicity of the following load and store operations is only
++// guaranteed in case of 32-bit alignement of |ptr| values.
++
+ inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) {
+ *ptr = value;
+ }
+
+-inline void MemoryBarrier() {
+- pLinuxKernelMemoryBarrier();
+-}
+-
+ inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) {
+ *ptr = value;
+ MemoryBarrier();
+@@ -103,9 +298,7 @@
+ *ptr = value;
+ }
+
+-inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) {
+- return *ptr;
+-}
++inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { return *ptr; }
+
+ inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) {
+ Atomic32 value = *ptr;
+@@ -118,7 +311,6 @@
+ return *ptr;
+ }
+
+-} // namespace base::subtle
+-} // namespace base
++} } // namespace base::subtle
+
+ #endif // BASE_ATOMICOPS_INTERNALS_ARM_GCC_H_
diff --git a/community/firefox-esr/fix-fortify-inline.patch b/community/firefox-esr/fix-fortify-inline.patch
new file mode 100644
index 0000000000..2498c57fc7
--- /dev/null
+++ b/community/firefox-esr/fix-fortify-inline.patch
@@ -0,0 +1,11 @@
+--- a/media/webrtc/signaling/src/sdp/sipcc/sdp_os_defs.h
++++ b/media/webrtc/signaling/src/sdp/sipcc/sdp_os_defs.h
+@@ -27,8 +27,5 @@
+ typedef int16_t int16;
+ typedef unsigned short ushort;
+ typedef unsigned long ulong;
+-#ifndef __GNUC_STDC_INLINE__
+-#define inline
+-#endif
+
+ #endif /* _SDP_OS_DEFS_H_ */
diff --git a/community/firefox-esr/fix-fortify-system-wrappers.patch b/community/firefox-esr/fix-fortify-system-wrappers.patch
new file mode 100644
index 0000000000..c966f31f9d
--- /dev/null
+++ b/community/firefox-esr/fix-fortify-system-wrappers.patch
@@ -0,0 +1,13 @@
+The wrapper features.h gets pulled in by system headers causing thigns to
+break. We work around it by simply not wrap features.h
+
+--- ./config/system-headers.orig
++++ ./config/system-headers
+@@ -422,7 +422,6 @@
+ extras.h
+ fabdef.h
+ fcntl.h
+-features.h
+ fibdef.h
+ File.h
+ filehdr.h
diff --git a/community/firefox-esr/fix-ipc.patch b/community/firefox-esr/fix-ipc.patch
new file mode 100644
index 0000000000..8371957d4b
--- /dev/null
+++ b/community/firefox-esr/fix-ipc.patch
@@ -0,0 +1,55 @@
+--- mozilla-release.orig/ipc/chromium/src/base/file_util.h
++++ mozilla-release/ipc/chromium/src/base/file_util.h
+@@ -14,10 +14,15 @@
+ #include <windows.h>
+ #elif defined(ANDROID)
+ #include <sys/stat.h>
++#define NO_FTS
+ #elif defined(OS_POSIX)
+ #include <sys/types.h>
+-#include <fts.h>
+ #include <sys/stat.h>
++#ifdef __GLIBC__
++#include <fts.h>
++#else
++#define NO_FTS
++#endif
+ #endif
+
+ #include <stdio.h>
+--- mozilla-release.orig/ipc/chromium/src/base/file_util_posix.cc
++++ mozilla-release/ipc/chromium/src/base/file_util_posix.cc
+@@ -8,13 +8,13 @@
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <fnmatch.h>
+-#ifndef ANDROID
++#ifndef NO_FTS
+ #include <fts.h>
+ #endif
+ #include <libgen.h>
+ #include <stdio.h>
+ #include <string.h>
+-#include <sys/errno.h>
++#include <errno.h>
+ #include <sys/mman.h>
+ #define _DARWIN_USE_64_BIT_INODE // Use 64-bit inode data structures
+ #include <sys/stat.h>
+@@ -67,7 +67,7 @@
+ if (!recursive)
+ return (rmdir(path_str) == 0);
+
+-#ifdef ANDROID
++#ifdef NO_FTS
+ // XXX Need ftsless impl for bionic
+ return false;
+ #else
+@@ -140,7 +140,7 @@
+ return false;
+ }
+
+-#ifdef ANDROID
++#ifdef NO_FTS
+ // XXX Need ftsless impl for bionic
+ return false;
+ #else
diff --git a/community/firefox-esr/fix-linux-include.patch b/community/firefox-esr/fix-linux-include.patch
new file mode 100644
index 0000000000..d625557cf9
--- /dev/null
+++ b/community/firefox-esr/fix-linux-include.patch
@@ -0,0 +1,10 @@
+--- ./xpcom/io/nsLocalFileUnix.cpp.orig
++++ ./xpcom/io/nsLocalFileUnix.cpp
+@@ -28,6 +28,7 @@
+ #define USE_LINUX_QUOTACTL
+ #include <sys/mount.h>
+ #include <sys/quota.h>
++#include <linux/fs.h>
+ #endif
+
+ #include "xpcom-private.h"
diff --git a/community/firefox-esr/fix-media.patch b/community/firefox-esr/fix-media.patch
new file mode 100644
index 0000000000..af6045fe72
--- /dev/null
+++ b/community/firefox-esr/fix-media.patch
@@ -0,0 +1,10 @@
+--- mozilla-release/media.orig/mtransport/third_party/nICEr/src/stun/addrs.c
++++ mozilla-release/media/mtransport/third_party/nICEr/src/stun/addrs.c
+@@ -45,7 +45,6 @@
+ #include <sys/param.h>
+ #include <sys/socket.h>
+ #ifndef ANDROID
+-#include <sys/sysctl.h>
+ #include <sys/syslog.h>
+ #else
+ #include <syslog.h>
diff --git a/community/firefox-esr/fix-netwerk.patch b/community/firefox-esr/fix-netwerk.patch
new file mode 100644
index 0000000000..a31b286229
--- /dev/null
+++ b/community/firefox-esr/fix-netwerk.patch
@@ -0,0 +1,37 @@
+--- ./netwerk.orig/sctp/src/netinet/sctp_os_userspace.h
++++ ./netwerk/sctp/src/netinet/sctp_os_userspace.h
+@@ -400,11 +400,8 @@
+ };
+
+ #else /* !defined(Userspace_os_Windows) */
+-#include <sys/cdefs.h> /* needed? added from old __FreeBSD__ */
+ #include <sys/socket.h>
+-#if defined(__Userspace_os_DragonFly) || defined(__Userspace_os_FreeBSD) || defined(__Userspace_os_Linux) || defined(__Userspace_os_NetBSD) || defined(__Userspace_os_OpenBSD) || defined(ANDROID)
+ #include <pthread.h>
+-#endif
+ typedef pthread_mutex_t userland_mutex_t;
+ typedef pthread_cond_t userland_cond_t;
+ typedef pthread_t userland_thread_t;
+--- ./netwerk.orig/sctp/src/netinet/sctp_pcb.c
++++ ./netwerk/sctp/src/netinet/sctp_pcb.c
+@@ -30,6 +30,9 @@
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
++#define _BSD_SOURCE /* for IPPORT_RESERVED */
++#include <netdb.h>
++
+ #ifdef __FreeBSD__
+ #include <sys/cdefs.h>
+ __FBSDID("$FreeBSD: head/sys/netinet/sctp_pcb.c 258765 2013-11-30 12:51:19Z tuexen $");
+--- ./netwerk.orig/sctp/src/user_queue.h
++++ ./netwerk/sctp/src/user_queue.h
+@@ -31,7 +31,7 @@
+ #ifndef _USER_QUEUE_H_
+ #define _USER_QUEUE_H_
+
+-#if !defined (__Userspace_os_Windows)
++#if defined(__Userspace_os_FreeBSD)
+ #include <sys/cdefs.h>
+ #endif
+ /*
diff --git a/community/firefox-esr/fix-toolkit.patch b/community/firefox-esr/fix-toolkit.patch
new file mode 100644
index 0000000000..0303223652
--- /dev/null
+++ b/community/firefox-esr/fix-toolkit.patch
@@ -0,0 +1,151 @@
+diff -ru mozilla-release/toolkit.orig/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc mozilla-release/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc
+--- mozilla-release/toolkit.orig/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc 2014-03-15 05:19:36.000000000 +0000
++++ mozilla-release/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc 2014-04-17 10:24:33.793431933 +0000
+@@ -45,6 +45,7 @@
+ #include <sys/mman.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
++#include <libgen.h>
+
+ #include <iostream>
+ #include <set>
+diff -ru mozilla-release/toolkit.orig/crashreporter/google-breakpad/src/common/stabs_reader.cc mozilla-release/toolkit/crashreporter/google-breakpad/src/common/stabs_reader.cc
+--- mozilla-release/toolkit.orig/crashreporter/google-breakpad/src/common/stabs_reader.cc 2014-03-15 05:19:36.000000000 +0000
++++ mozilla-release/toolkit/crashreporter/google-breakpad/src/common/stabs_reader.cc 2014-04-17 10:24:33.793431933 +0000
+@@ -41,6 +41,10 @@
+
+ #include "common/using_std_string.h"
+
++#ifndef N_UNDF
++#define N_UNDF 0
++#endif
++
+ using std::vector;
+
+ namespace google_breakpad {
+diff -ru mozilla-release/toolkit.orig/crashreporter/google-breakpad/src/common/stabs_reader.h mozilla-release/toolkit/crashreporter/google-breakpad/src/common/stabs_reader.h
+--- mozilla-release/toolkit.orig/crashreporter/google-breakpad/src/common/stabs_reader.h 2014-03-15 05:19:36.000000000 +0000
++++ mozilla-release/toolkit/crashreporter/google-breakpad/src/common/stabs_reader.h 2014-04-17 10:24:33.793431933 +0000
+@@ -53,9 +53,10 @@
+ #include <config.h>
+ #endif
+
+-#ifdef HAVE_A_OUT_H
++#if 0
+ #include <a.out.h>
+ #endif
++
+ #ifdef HAVE_MACH_O_NLIST_H
+ #include <mach-o/nlist.h>
+ #endif
+diff -ru mozilla-release/toolkit.orig/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h mozilla-release/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h
+--- mozilla-release/toolkit.orig/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h 2014-03-15 05:19:37.000000000 +0000
++++ mozilla-release/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h 2014-04-17 10:24:33.793431933 +0000
+@@ -2813,7 +2813,7 @@
+ LSS_INLINE _syscall6(void*, mmap, void*, s,
+ size_t, l, int, p,
+ int, f, int, d,
+- __off64_t, o)
++ off_t, o)
+
+ LSS_INLINE _syscall4(int, newfstatat, int, d,
+ const char *, p,
+diff -ru mozilla-release/toolkit.orig/mozapps/update/common/updatedefines.h mozilla-release/toolkit/mozapps/update/common/updatedefines.h
+--- mozilla-release/toolkit.orig/mozapps/update/common/updatedefines.h 2014-03-15 05:19:37.000000000 +0000
++++ mozilla-release/toolkit/mozapps/update/common/updatedefines.h 2014-04-17 10:24:33.793431933 +0000
+@@ -105,7 +105,7 @@
+
+ #ifdef SOLARIS
+ # include <sys/stat.h>
+-#else
++#elif !defined(__linux__) || defined(__GLIBC__)
+ # include <fts.h>
+ #endif
+ # include <dirent.h>
+diff -ru mozilla-release/toolkit.orig/mozapps/update/updater/updater.cpp mozilla-release/toolkit/mozapps/update/updater/updater.cpp
+--- mozilla-release/toolkit.orig/mozapps/update/updater/updater.cpp 2014-03-15 05:19:37.000000000 +0000
++++ mozilla-release/toolkit/mozapps/update/updater/updater.cpp 2014-04-17 10:24:33.796765327 +0000
+@@ -3432,6 +3432,7 @@
+ int add_dir_entries(const NS_tchar *dirpath, ActionList *list)
+ {
+ int rv = OK;
++#if !defined(__linux__) || defined(__GLIBC__)
+ FTS *ftsdir;
+ FTSENT *ftsdirEntry;
+ NS_tchar searchpath[MAXPATHLEN];
+@@ -3534,6 +3535,7 @@
+ }
+
+ fts_close(ftsdir);
++#endif
+
+ return rv;
+ }
+diff -ru mozilla-release/toolkit.orig/xre/nsSigHandlers.cpp mozilla-release/toolkit/xre/nsSigHandlers.cpp
+--- mozilla-release/toolkit.orig/xre/nsSigHandlers.cpp 2014-03-15 05:19:38.000000000 +0000
++++ mozilla-release/toolkit/xre/nsSigHandlers.cpp 2014-04-17 10:24:33.796765327 +0000
+@@ -15,6 +15,7 @@
+ #include <signal.h>
+ #include <stdio.h>
+ #include <string.h>
++#include <sys/types.h>
+ #include "prthread.h"
+ #include "plstr.h"
+ #include "prenv.h"
+@@ -152,7 +153,7 @@
+ status->__invalid = status->__denorm = status->__zdiv = status->__ovrfl = status->__undfl =
+ status->__precis = status->__stkflt = status->__errsumm = 0;
+
+- __uint32_t *mxcsr = &uc->uc_mcontext->__fs.__fpu_mxcsr;
++ u_int32_t *mxcsr = &uc->uc_mcontext->__fs.__fpu_mxcsr;
+ *mxcsr |= SSE_EXCEPTION_MASK; /* disable all SSE exceptions */
+ *mxcsr &= ~SSE_STATUS_FLAGS; /* clear all pending SSE exceptions */
+ #endif
+@@ -172,13 +173,13 @@
+ *sw &= ~FPU_STATUS_FLAGS;
+ #endif
+ #if defined(__amd64__)
+- __uint16_t *cw = &uc->uc_mcontext.fpregs->cwd;
++ u_int16_t *cw = &uc->uc_mcontext.fpregs->cwd;
+ *cw |= FPU_EXCEPTION_MASK;
+
+- __uint16_t *sw = &uc->uc_mcontext.fpregs->swd;
++ u_int16_t *sw = &uc->uc_mcontext.fpregs->swd;
+ *sw &= ~FPU_STATUS_FLAGS;
+
+- __uint32_t *mxcsr = &uc->uc_mcontext.fpregs->mxcsr;
++ u_int32_t *mxcsr = &uc->uc_mcontext.fpregs->mxcsr;
+ *mxcsr |= SSE_EXCEPTION_MASK; /* disable all SSE exceptions */
+ *mxcsr &= ~SSE_STATUS_FLAGS; /* clear all pending SSE exceptions */
+ #endif
+@@ -187,24 +188,24 @@
+ ucontext_t *uc = (ucontext_t *)context;
+
+ #if defined(__i386)
+- uint32_t *cw = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.state[0];
++ u_int32_t *cw = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.state[0];
+ *cw |= FPU_EXCEPTION_MASK;
+
+- uint32_t *sw = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.state[1];
++ u_int32_t *sw = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.state[1];
+ *sw &= ~FPU_STATUS_FLAGS;
+
+ /* address of the instruction that caused the exception */
+- uint32_t *ip = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.state[3];
++ u_int32_t *ip = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.state[3];
+ uc->uc_mcontext.gregs[REG_PC] = *ip;
+ #endif
+ #if defined(__amd64__)
+- uint16_t *cw = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.cw;
++ u_int16_t *cw = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.cw;
+ *cw |= FPU_EXCEPTION_MASK;
+
+- uint16_t *sw = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.sw;
++ u_int16_t *sw = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.sw;
+ *sw &= ~FPU_STATUS_FLAGS;
+
+- uint32_t *mxcsr = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.mxcsr;
++ u_int32_t *mxcsr = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.mxcsr;
+ *mxcsr |= SSE_EXCEPTION_MASK; /* disable all SSE exceptions */
+ *mxcsr &= ~SSE_STATUS_FLAGS; /* clear all pending SSE exceptions */
+ #endif
diff --git a/community/firefox-esr/fix-tools.patch b/community/firefox-esr/fix-tools.patch
new file mode 100644
index 0000000000..b0a6d4fbcc
--- /dev/null
+++ b/community/firefox-esr/fix-tools.patch
@@ -0,0 +1,49 @@
+--- mozilla-release.orig/tools/profiler/local_debug_info_symbolizer.cc
++++ mozilla-release/tools/profiler/local_debug_info_symbolizer.cc
+@@ -3,6 +3,7 @@
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
++#include <sys/types.h>
+ #include "PlatformMacros.h"
+ #include "nsAutoPtr.h"
+
+--- mozilla-release.orig/tools/profiler/platform-linux.cc
++++ mozilla-release/tools/profiler/platform-linux.cc
+@@ -84,7 +84,7 @@
+
+ #define SIGNAL_SAVE_PROFILE SIGUSR2
+
+-#if defined(__GLIBC__)
++#if 1
+ // glibc doesn't implement gettid(2).
+ #include <sys/syscall.h>
+ pid_t gettid()
+--- mozilla-release.orig/tools/profiler/platform.h
++++ mozilla-release/tools/profiler/platform.h
+@@ -29,6 +29,8 @@
+ #ifndef TOOLS_PLATFORM_H_
+ #define TOOLS_PLATFORM_H_
+
++#include <sys/types.h>
++
+ #ifdef ANDROID
+ #include <android/log.h>
+ #else
+--- mozilla-release.orig/tools/profiler/LulElf.cpp
++++ mozilla-release/tools/profiler/LulElf.cpp
+@@ -579,10 +579,10 @@
+ // Return the non-directory portion of FILENAME: the portion after the
+ // last slash, or the whole filename if there are no slashes.
+ string BaseFileName(const string &filename) {
+- // Lots of copies! basename's behavior is less than ideal.
+- char *c_filename = strdup(filename.c_str());
+- string base = basename(c_filename);
+- free(c_filename);
++ // basename's behavior is less than ideal so avoid it
++ const char *c_filename = filename.c_str();
++ const char *p = strrchr(c_filename, '/');
++ string base = p ? p+1 : c_filename;
+ return base;
+ }
+
diff --git a/community/firefox-esr/getchar.patch b/community/firefox-esr/getchar.patch
new file mode 100644
index 0000000000..981206b971
--- /dev/null
+++ b/community/firefox-esr/getchar.patch
@@ -0,0 +1,14 @@
+--- ./media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp.orig
++++ ./media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp
+@@ -21,6 +21,11 @@
+ #include "constants.hpp"
+ #include <cstring>
+
++/* prevent the getchar macro from stdio to take preference over the local var */
++#if defined(__UCLIBC__)
++#undef getchar
++#endif
++
+ namespace boost {
+ namespace detail {
+ //This only works on unsigned data types
diff --git a/community/firefox-esr/mozconfig b/community/firefox-esr/mozconfig
new file mode 100644
index 0000000000..8fbbf3d6e6
--- /dev/null
+++ b/community/firefox-esr/mozconfig
@@ -0,0 +1,54 @@
+. $topsrcdir/browser/config/mozconfig
+
+ac_add_options --prefix=/usr
+ac_add_options --libdir=/usr/lib
+
+ac_add_options --with-pthreads
+ac_add_options --with-system-bz2
+ac_add_options --with-system-icu
+ac_add_options --with-system-jpeg
+ac_add_options --with-system-libevent
+ac_add_options --with-system-libvpx
+ac_add_options --with-system-nspr
+ac_add_options --with-system-nss
+ac_add_options --with-system-pixman
+ac_add_options --with-system-png
+ac_add_options --with-system-zlib
+
+ac_add_options --enable-system-hunspell
+ac_add_options --enable-system-sqlite
+ac_add_options --enable-system-cairo
+ac_add_options --enable-system-ffi
+
+# make the -dbg package more meaningful with symbols
+# ac_add_options --enable-debug-symbols=-g
+ac_add_options --disable-install-strip
+
+ac_add_options --enable-gstreamer=1.0
+ac_add_options --enable-official-branding
+ac_add_options --enable-optimize="$CFLAGS"
+ac_add_options --enable-startup-notification
+
+ac_add_options --disable-cpp-exceptions
+ac_add_options --disable-crashreporter
+ac_add_options --disable-elf-hack
+ac_add_options --disable-gnomevfs
+ac_add_options --disable-installer
+ac_add_options --disable-javaxpcom
+ac_add_options --disable-jemalloc
+ac_add_options --disable-mochitest
+ac_add_options --disable-pulseaudio
+ac_add_options --disable-static
+ac_add_options --disable-strip
+ac_add_options --disable-tests
+ac_add_options --disable-updater
+ac_add_options --disable-xprint
+
+export BUILD_OFFICIAL=1
+export MOZILLA_OFFICIAL=1
+export USE_SHORT_LIBNAME=1
+
+mk_add_options BUILD_OFFICIAL=1
+mk_add_options MOZILLA_OFFICIAL=1
+mk_add_options USE_SHORT_LIBNAME=1
+mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir
diff --git a/community/firefox-esr/mozilla-build-arm.patch b/community/firefox-esr/mozilla-build-arm.patch
new file mode 100644
index 0000000000..dcf2f6d8a4
--- /dev/null
+++ b/community/firefox-esr/mozilla-build-arm.patch
@@ -0,0 +1,11 @@
+--- ./gfx/ycbcr/moz.build.orig 2014-04-03 13:50:38.990296661 +0000
++++ ./gfx/ycbcr/moz.build 2014-04-03 13:52:26.878268547 +0000
+@@ -59,7 +59,7 @@
+ 'yuv_row_other.cpp',
+ ]
+
+-if CONFIG['CPU_ARCH'] == 'arm' and CONFIG['HAVE_ARM_NEON']:
++if CONFIG['HAVE_ARM_NEON']:
+ SOURCES += [
+ 'yuv_row_arm.s',
+ ]
diff --git a/community/firefox-esr/rhbz-966424.patch b/community/firefox-esr/rhbz-966424.patch
new file mode 100644
index 0000000000..2be9f931a6
--- /dev/null
+++ b/community/firefox-esr/rhbz-966424.patch
@@ -0,0 +1,14 @@
+diff -up firefox-33.0/mozilla-release/toolkit/modules/CertUtils.jsm.966424 firefox-33.0/mozilla-release/toolkit/modules/CertUtils.jsm
+--- mozilla-release/toolkit/modules/CertUtils.jsm.966424 2014-10-14 08:12:14.358697255 +0200
++++ mozilla-release/toolkit/modules/CertUtils.jsm 2014-10-14 08:17:59.962181908 +0200
+@@ -174,7 +174,9 @@ this.checkCert =
+ }
+
+ function isBuiltinToken(tokenName) {
+- return tokenName == "Builtin Object Token";
++ return tokenName == "Builtin Object Token" ||
++ tokenName == "Default Trust" ||
++ tokenName == "System Trust";
+ }
+
+ /**
diff --git a/community/firefox-esr/stab.h b/community/firefox-esr/stab.h
new file mode 100644
index 0000000000..6f70af3989
--- /dev/null
+++ b/community/firefox-esr/stab.h
@@ -0,0 +1,71 @@
+/* $OpenBSD: stab.h,v 1.3 2003/06/02 19:34:12 millert Exp $ */
+/* $NetBSD: stab.h,v 1.4 1994/10/26 00:56:25 cgd Exp $ */
+
+/*-
+ * Copyright (c) 1991 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)stab.h 5.2 (Berkeley) 4/4/91
+ */
+
+#ifndef _STAB_H_
+#define _STAB_H_
+
+/*
+ * The following are symbols used by various debuggers and by the Pascal
+ * compiler. Each of them must have one (or more) of the bits defined by
+ * the N_STAB mask set.
+ */
+
+#define N_GSYM 0x20 /* global symbol */
+#define N_FNAME 0x22 /* F77 function name */
+#define N_FUN 0x24 /* procedure name */
+#define N_STSYM 0x26 /* data segment variable */
+#define N_LCSYM 0x28 /* bss segment variable */
+#define N_MAIN 0x2a /* main function name */
+#define N_PC 0x30 /* global Pascal symbol */
+#define N_RSYM 0x40 /* register variable */
+#define N_SLINE 0x44 /* text segment line number */
+#define N_DSLINE 0x46 /* data segment line number */
+#define N_BSLINE 0x48 /* bss segment line number */
+#define N_SSYM 0x60 /* structure/union element */
+#define N_SO 0x64 /* main source file name */
+#define N_LSYM 0x80 /* stack variable */
+#define N_BINCL 0x82 /* include file beginning */
+#define N_SOL 0x84 /* included source file name */
+#define N_PSYM 0xa0 /* parameter variable */
+#define N_EINCL 0xa2 /* include file end */
+#define N_ENTRY 0xa4 /* alternate entry point */
+#define N_LBRAC 0xc0 /* left bracket */
+#define N_EXCL 0xc2 /* deleted include file */
+#define N_RBRAC 0xe0 /* right bracket */
+#define N_BCOMM 0xe2 /* begin common */
+#define N_ECOMM 0xe4 /* end common */
+#define N_ECOML 0xe8 /* end common (local name) */
+#define N_LENG 0xfe /* length of preceding entry */
+
+#endif /* !_STAB_H_ */
diff --git a/community/firefox-esr/stat.patch b/community/firefox-esr/stat.patch
new file mode 100644
index 0000000000..ed7dc007e2
--- /dev/null
+++ b/community/firefox-esr/stat.patch
@@ -0,0 +1,25 @@
+--- ./dom/system/OSFileConstants.cpp.orig 2013-04-17 06:17:29.798371189 +0000
++++ ./dom/system/OSFileConstants.cpp 2013-04-17 06:30:30.032285977 +0000
+@@ -509,6 +509,11 @@
+ INT_CONSTANT(_STAT_VER),
+ #endif // defined(_STAT_VER)
+
++ // glibc's stat/lstat/fstat are macros while uclibc's are not
++#if defined(__GLIBC__) && !defined(__UCLIBC__)
++ { "OSFILE_STAT_MACROS", INT_TO_JSVAL(1) },
++#endif // defined(stat)
++
+ PROP_END
+ };
+
+--- ./toolkit/components/osfile/modules/osfile_unix_back.jsm.orig 2014-04-03 13:08:26.686409787 +0000
++++ ./toolkit/components/osfile/modules/osfile_unix_back.jsm 2014-04-03 13:34:14.101716259 +0000
+@@ -512,7 +512,7 @@
+ /*path*/ Type.fd,
+ /*buf*/ Type.stat.out_ptr
+ );
+- } else if (Const._STAT_VER != undefined) {
++ } else if (Const.OSFILE_STAT_MACROS != undefined) {
+ const ver = Const._STAT_VER;
+ let xstat_name, lxstat_name, fxstat_name;
+ if (OS.Constants.Sys.Name == "SunOS") {
diff --git a/community/firefox-esr/vendor.js b/community/firefox-esr/vendor.js
new file mode 100644
index 0000000000..2ef8b0d5b2
--- /dev/null
+++ b/community/firefox-esr/vendor.js
@@ -0,0 +1,3 @@
+// Disable default browser checking.
+pref("browser.shell.checkDefaultBrowser", false);
+