Firefox 47.0
authorWolfgang Rosenauer <wr@rosenauer.org>
Wed, 08 Jun 2016 13:45:00 +0200
changeset 916 2f9f2e040647
parent 915 e969636be188
child 918 0f93e8da34b6
child 922 bf541a540a74
Firefox 47.0 - removed obsolete patches - xulrunner is dead (mozilla-pkgconfig.patch) - added new patches from Factory - rebased existing patches
MozillaFirefox/MozillaFirefox.changes
MozillaFirefox/MozillaFirefox.spec
MozillaFirefox/create-tar.sh
MozillaFirefox/l10n_changesets.txt
MozillaFirefox/mozilla-exclude-nametablecpp.patch
MozillaFirefox/mozilla-gcc6.patch
MozillaFirefox/mozilla-libproxy.patch
MozillaFirefox/mozilla-repo.patch
firefox-kde.patch
mozilla-exclude-nametablecpp.patch
mozilla-gcc6.patch
mozilla-kde.patch
mozilla-libproxy.patch
mozilla-pkgconfig.patch
mozilla-repo.patch
mozilla-shared-nss-db.patch
series
--- a/MozillaFirefox/MozillaFirefox.changes	Tue Jun 07 21:44:20 2016 +0200
+++ b/MozillaFirefox/MozillaFirefox.changes	Wed Jun 08 13:45:00 2016 +0200
@@ -1,4 +1,82 @@
 -------------------------------------------------------------------
+Tue Jun  7 19:47:25 UTC 2016 - wr@rosenauer.org
+
+- update to Firefox 47.0 (boo#983549)
+  * Enable VP9 video codec for users with fast machines
+  * Embedded YouTube videos now play with HTML5 video if Flash is
+    not installed
+  * View and search open tabs from your smartphone or another
+    computer in a sidebar
+  * Allow no-cache on back/forward navigations for https resources
+  security fixes:
+  * MFSA 2016-49/CVE-2016-2815/CVE-2016-2818
+    (boo#983638)
+    (bmo#1241896, bmo#1242798, bmo#1243466, bmo#1245743,
+     bmo#1264300, bmo#1271037, bmo#1234147, bmo#1256493,
+     bmo#1256739, bmo#1256968, bmo#1261230, bmo#1261752,
+     bmo#1263384, bmo#1264575, bmo#1265577, bmo#1267130,
+     bmo#1269729, bmo#1273202, bmo#1273701)
+    Miscellaneous memory safety hazards (rv:47.0 / rv:45.2)
+  * MFSA 2016-50/CVE-2016-2819 (boo#983655) (bmo#1270381)
+    Buffer overflow parsing HTML5 fragments
+  * MFSA 2016-51/CVE-2016-2821 (bsc#983653) (bmo#1271460)
+    Use-after-free deleting tables from a contenteditable document
+  * MFSA 2016-52/CVE-2016-2822 (boo#983652) (bmo#1273129)
+    Addressbar spoofing though the SELECT element
+  * MFSA 2016-53/CVE-2016-2824 (boo#983651) (bmo#1248580)
+    Out-of-bounds write with WebGL shader
+  * MFSA 2016-54/CVE-2016-2825 (boo#983649) (bmo#1193093)
+    Partial same-origin-policy through setting location.host
+    through data URI
+  * MFSA 2016-56/CVE-2016-2828 (boo#983646) (bmo#1223810)
+    Use-after-free when textures are used in WebGL operations
+    after recycle pool destruction
+  * MFSA 2016-57/CVE-2016-2829 (boo#983644) (bmo#1248329)
+    Incorrect icon displayed on permissions notifications
+  * MFSA 2016-58/CVE-2016-2831 (boo#983643) (bmo#1261933)
+    Entering fullscreen and persistent pointerlock without user
+    permission
+  * MFSA 2016-59/CVE-2016-2832 (boo#983632) (bmo#1025267)
+    Information disclosure of disabled plugins through CSS
+    pseudo-classes
+  * MFSA 2016-60/CVE-2016-2833 (boo#983640) (bmo#908933)
+    Java applets bypass CSP protections
+  * MFSA 2016-62/CVE-2016-2834 (boo#983639) (bmo#1206283,
+    bmo#1221620, bmo#1241034, bmo#1241037)
+    Network Security Services (NSS) vulnerabilities
+    fixed by requiring NSS 3.23
+  packaging changes:
+  * cleanup configure options (boo#981695):
+    - notably remove GStreamer support which is gone from FF
+  * remove obsolete patches
+    - mozilla-libproxy.patch
+    - mozilla-repo.patch
+
+-------------------------------------------------------------------
+Wed May 25 16:36:23 UTC 2016 - badshah400@gmail.com
+
+- The conditional testing for gcc was failing for different
+  openSUSE versions, drop it and apply patches unconditionally.
+
+-------------------------------------------------------------------
+Mon May 23 15:30:27 UTC 2016 - badshah400@gmail.com
+
+- Add patches to fix building with gcc6:
+  + mozilla-gcc6.patch: fix building with gcc >= 6.1; patch
+    taken from upstream:
+    https://hg.mozilla.org/mozilla-central/rev/55212130f19d.
+  + mozilla-exclude-nametablecpp.patch: Exclude NameTable.cpp
+    from unified compilation because #include <cmath> in other
+    source files causes gcc6 compilation failure; patch taken from
+    upstream:
+    https://hg.mozilla.org/mozilla-central/rev/9c57b7cacffc.
+
+-------------------------------------------------------------------
+Fri May 13 00:00:00 CEST 2016 - dsterba@suse.cz
+
+- enable build with PIE and full relro on x86_64 (boo#980384)
+
+-------------------------------------------------------------------
 Wed May  4 10:27:43 UTC 2016 - wr@rosenauer.org
 
 - update to Firefox 46.0.1
--- a/MozillaFirefox/MozillaFirefox.spec	Tue Jun 07 21:44:20 2016 +0200
+++ b/MozillaFirefox/MozillaFirefox.spec	Wed Jun 08 13:45:00 2016 +0200
@@ -18,10 +18,13 @@
 
 
 # changed with every update
-%define major 46
-%define mainver %major.0.1
+%define major 47
+%define mainver %major.0
 %define update_channel release
-%define releasedate 2016050300
+%define releasedate 20160606000000
+
+# PIE, full relro (x86_64 for now)
+%define build_hardened 1
 
 # general build definitions
 %if "%{update_channel}" != "aurora"
@@ -41,12 +44,6 @@
 %define __find_requires sh %{SOURCE4}
 %global provfind sh -c "grep -v '.so' | %__find_provides"
 %global __find_provides %provfind
-%if 0%{?suse_version} > 1310
-%define gstreamer_ver 1.0
-%define gstreamer 1
-%else
-%define gstreamer_ver 0.10
-%endif
 # Set up Google API keys, see http://www.chromium.org/developers/how-tos/api-keys
 # Note: these are for the openSUSE Firefox builds ONLY. For your own distribution,
 # please get your own set of keys.
@@ -78,7 +75,7 @@
 BuildRequires:  libproxy-devel
 BuildRequires:  makeinfo
 BuildRequires:  mozilla-nspr-devel >= 4.12
-BuildRequires:  mozilla-nss-devel >= 3.22.3
+BuildRequires:  mozilla-nss-devel >= 3.23
 BuildRequires:  nss-shared-helper-devel
 BuildRequires:  python-devel
 BuildRequires:  startup-notification-devel
@@ -87,9 +84,6 @@
 BuildRequires:  xorg-x11-libXt-devel
 BuildRequires:  yasm
 BuildRequires:  zip
-BuildRequires:  pkgconfig(gstreamer-%gstreamer_ver)
-BuildRequires:  pkgconfig(gstreamer-app-%gstreamer_ver)
-BuildRequires:  pkgconfig(gstreamer-plugins-base-%gstreamer_ver)
 BuildRequires:  pkgconfig(libpulse)
 %if 0%{?firefox_use_gtk3}
 BuildRequires:  pkgconfig(glib-2.0)
@@ -97,26 +91,11 @@
 BuildRequires:  pkgconfig(gtk+-3.0) >= 3.4.0
 BuildRequires:  pkgconfig(gtk+-unix-print-3.0)
 %endif
-# libavcodec is already used if available for H.264 but
-# explicitely loaded by FF. For proper H.264 support the
-# openSUSE delivered version is not sufficient but currently
-# prevents even the use of the GStreamer method
-# https://bugzilla.mozilla.org/show_bug.cgi?id=1234157
-# to get H.264 working correctly libavcodec from packman
-# is required. As of today the following recommends will
-# pull in libavcodec52 from packman since it's the only
-# package providing libavcodec but it's not loaded from
-# Firefox as the minimal version is 53
+# libavcodec is required for H.264 support but the
+# openSUSE version is currently not able to play H.264
+# therefore the Packman version is required
+# minimum version of libavcodec is 53
 #Recommends:     libavcodec
-%if 0%{?gstreamer} == 1
-Requires:       libgstreamer-1_0-0
-Recommends:     gstreamer-fluendo-mp3
-Recommends:     gstreamer-plugins-libav
-%else
-Requires:       libgstreamer-0_10-0
-Recommends:     gstreamer-0_10-fluendo-mp3
-Recommends:     gstreamer-0_10-plugins-ffmpeg
-%endif
 Version:        %{mainver}
 Release:        0
 %if "%{name}" == "MozillaFirefox"
@@ -162,13 +141,13 @@
 Patch4:         mozilla-preferences.patch
 Patch5:         mozilla-language.patch
 Patch6:         mozilla-ntlm-full-path.patch
-Patch7:         mozilla-repo.patch
 Patch8:         mozilla-openaes-decl.patch
 Patch10:        mozilla-no-stdcxx-check.patch
-Patch11:        mozilla-libproxy.patch
-Patch12:        mozilla-reduce-files-per-UnifiedBindings.patch
-Patch13:        mozilla-gtk3_20.patch
-Patch14:        mozilla-check_return.patch
+Patch11:        mozilla-reduce-files-per-UnifiedBindings.patch
+Patch12:        mozilla-gtk3_20.patch
+Patch13:        mozilla-check_return.patch
+Patch14:        mozilla-gcc6.patch
+Patch15:        mozilla-exclude-nametablecpp.patch
 # Firefox/browser
 Patch101:       firefox-kde.patch
 Patch102:       firefox-no-default-ualocale.patch
@@ -274,15 +253,15 @@
 %patch4 -p1
 %patch5 -p1
 %patch6 -p1
-%patch7 -p1
 %patch8 -p1
 %patch10 -p1
 %patch11 -p1
+%if 0%{?firefox_use_gtk3}
 %patch12 -p1
-%if 0%{?firefox_use_gtk3}
+%endif
 %patch13 -p1
-%endif
 %patch14 -p1
+%patch15 -p1
 # Firefox
 %patch101 -p1
 %patch102 -p1
@@ -301,7 +280,7 @@
   exit 1
 fi
 source %{SOURCE5}
-export MOZ_SOURCE_STAMP=$REV
+export MOZ_SOURCE_CHANGESET=$REV
 export SOURCE_REPO=$REPO
 export source_repo=$REPO
 export MOZ_SOURCE_REPO=$REPO
@@ -318,6 +297,11 @@
 # Limit RAM usage during link
 export LDFLAGS="${LDFLAGS} -Wl,--no-keep-memory -Wl,--reduce-memory-overheads"
 %endif
+%if 0%{?build_hardened}
+%ifarch x86_64
+export LDFLAGS="${LDFLAGS} -Wl,-z,relro,-z,now"
+%endif
+%endif
 %ifarch ppc64 ppc64le
 export CFLAGS="$CFLAGS -mminimal-toc"
 %endif
@@ -340,13 +324,16 @@
 %else
 ac_add_options --enable-default-toolkit=cairo-gtk2
 %endif
+%if 0%{?build_hardened}
+ac_add_options --enable-pie
+%endif
 %ifarch %ix86 %arm
 %if 0%{?suse_version} > 1230
 ac_add_options --disable-optimize
 %endif
 %endif
-%ifnarch ppc ppc64 ppc64le aarch64
-ac_add_options --enable-elf-hack
+%ifarch ppc ppc64 ppc64le aarch64 %arm
+ac_add_options --disable-elf-hack
 %endif
 ac_add_options --with-system-nspr
 ac_add_options --with-system-nss
@@ -356,16 +343,12 @@
 #ac_add_options --with-system-jpeg    # libjpeg-turbo is used internally
 #ac_add_options --with-system-png     # doesn't work because of missing APNG support
 ac_add_options --with-system-zlib
-ac_add_options --disable-installer
 ac_add_options --disable-updater
 ac_add_options --disable-tests
 ac_add_options --disable-debug
 ac_add_options --enable-startup-notification
 #ac_add_options --enable-chrome-format=jar
 ac_add_options --enable-update-channel=%{update_channel}
-%if 0%{?gstreamer} == 1
-ac_add_options --enable-gstreamer=1.0
-%endif
 %if %branding
 ac_add_options --enable-official-branding
 %endif
@@ -374,7 +357,6 @@
 ac_add_options --disable-crashreporter
 %endif
 %ifarch %arm
-ac_add_options --disable-elf-hack
 ac_add_options --with-fpu=vfpv3-d16
 ac_add_options --with-float-abi=hard
 ac_add_options --with-arch=armv7-a
--- a/MozillaFirefox/create-tar.sh	Tue Jun 07 21:44:20 2016 +0200
+++ b/MozillaFirefox/create-tar.sh	Wed Jun 08 13:45:00 2016 +0200
@@ -7,8 +7,8 @@
 
 CHANNEL="release"
 BRANCH="releases/mozilla-$CHANNEL"
-RELEASE_TAG="FIREFOX_46_0_1_RELEASE"
-VERSION="46.0.1"
+RELEASE_TAG="FIREFOX_47_0_RELEASE"
+VERSION="47.0"
 
 # mozilla
 if [ -d mozilla ]; then
--- a/MozillaFirefox/l10n_changesets.txt	Tue Jun 07 21:44:20 2016 +0200
+++ b/MozillaFirefox/l10n_changesets.txt	Wed Jun 08 13:45:00 2016 +0200
@@ -1,90 +1,92 @@
-ach 658769a76613
+ach 9a0c8e338b70
 af 431e02c10881
 an fe436c75f71d
 ar bbcf06888dc5
 as 8313f975ae77
 ast 0300b60cd340
-az fd96727d2a26
+az db362112cd4d
 be b72077740aac
 bg 9f7507dd2b92
-bn-BD fe0a6bb82a2d
+bn-BD 1dac94619464
 bn-IN a2ea6b87d80d
-br 95b028350e29
+br e4c45f737a88
 bs cfee6f5b1e50
-ca e8ca2d46b4a8
-cs ed6004b91b51
-cy 5bbcbba9b054
-da 324fe068c0b9
-de 217ff3f0054a
-dsb 7cdfb5d9dc5d
+ca 55814ed0a2ee
+cak 244b8a568146
+cs a98b5d34950d
+cy 02a8a09a2a24
+da 1976f45a00fb
+de 69c491b3e8dd
+dsb 60185ee5350d
 el 22b959c9a739
-en-GB 36012ab486ad
-en-ZA 1c91f05aae5a
-eo 049c1b065f4c
-es-AR b3647b1d5927
-es-CL e45186f983b9
-es-ES 6fe131a8b07f
-es-MX 4cd511663283
+en-GB ac4d309f11aa
+en-ZA 52a936eeeea1
+eo 9402e7dc1816
+es-AR d3e6fdb0980e
+es-CL 247114b95260
+es-ES 05251e5fad44
+es-MX 198b582408f2
 et ecae9df9c92a
-eu 1a65e2c03dda
-fa e5993d9fb76e
+eu 5b00fd411da4
+fa c64ea222eb3a
 ff 8373353b43c4
-fi b743718650bc
-fr 7d0bb8edc149
-fy-NL 02ee99ad3f83
-ga-IE 713ecb614f77
-gd e5b86736a5f9
+fi 485cd6730972
+fr 262385fe83a0
+fy-NL d133532b4a76
+ga-IE 2217b283ff59
+gd 664cfe62d15b
 gl c869caff337a
 gn 65b2894520b6
 gu-IN 6245b4309461
-he ee92b661d299
+he 2d122d643e0b
 hi-IN bba2a926e4f8
-hr 8502beb4ee68
-hsb c91a11523487
-hu 09bbddfef7ee
-hy-AM 3d7a9324fb25
-id cb8f841d30d2
-is 46c99105eb3b
-it 6063a6d94e13
-ja 5ff86cadfe9a
-ja-JP-mac ab760b3dcdd1
-kk 5a7bd05bf942
+hr 5e68406d5630
+hsb ed7044697b0a
+hu ea25586b7644
+hy-AM 723627d1c0a4
+id d84757c01f40
+is 0b19292ab8a3
+it 9ada32a4f24b
+ja 6374f9dd3854
+ja-JP-mac 28d0060377c0
+kk 58b2a6152124
 km 339790840ac1
-kn b23d8fbcf41a
-ko 5f303ed16778
+kn a7e2c93d27ad
+ko 4c2bafb385f3
 lij e9113fac3a93
-lt 628e96e62e44
-lv 063998fdecf8
+lt 64c104a758bf
+lv 918ea0cd0aca
 mai ce010a305377
 mk ffdf2a789185
 ml 1b85d75836cd
-mr 553ff31f4edd
+mr 943d62e6e06d
 ms 41bbf86ac0d9
-nb-NO 5e6e5710fac9
-nl ac486141ab40
-nn-NO be9e3eeb75fb
+nb-NO bee48c9ea2d4
+nl 3bdea753600d
+nn-NO 1deb8231f357
 or febd1b04dbfc
 pa-IN 6c5ed1be55fb
-pl 49e141118acb
-pt-BR cd1aef7b5045
-pt-PT 2e4fd2a1f98f
-rm 0a52db6a6117
-ro c6ac34be77b1
-ru 3f0b3c8e19a4
+pl c9e8c3b4977c
+pt-BR ba6e3510ab03
+pt-PT 89d85625e259
+rm 5c20929daf23
+ro b1baa279bda4
+ru 2248b98b11c2
 si 03a3b09a2203
-sk 3505a5f99bff
-sl 1e098ab8c27a
+sk b1a81bf66ed4
+sl 6079300745a1
 son 3ae9a4ff0453
-sq c24e570a4207
-sr 896d72a0fa21
-sv-SE ea1de38fe731
+sq bc47aefcea37
+sr 93d5749016bd
+sv-SE 711ed419239c
 ta f9dbc2cca1fb
 te 286ff9885ea2
 th d630f05d665f
-tr b751d2d9b6ee
-uk c5cdb9068667
-uz dc28cf99c5cf
+tr 4c05084f5ef2
+uk 6b23f6bb9dcb
+uz 1209fe62df1c
 vi 68ce305343a3
-xh f3eb8f92afe8
-zh-CN d73d448f89d6
-zh-TW 44c9950bb3e6
+xh 8466fb6c8797
+zh-CN bedbf795f45e
+zh-TW 8a8fcc28bce0
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-exclude-nametablecpp.patch	Wed Jun 08 13:45:00 2016 +0200
@@ -0,0 +1,1 @@
+../mozilla-exclude-nametablecpp.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-gcc6.patch	Wed Jun 08 13:45:00 2016 +0200
@@ -0,0 +1,1 @@
+../mozilla-gcc6.patch
\ No newline at end of file
--- a/MozillaFirefox/mozilla-libproxy.patch	Tue Jun 07 21:44:20 2016 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-../mozilla-libproxy.patch
\ No newline at end of file
--- a/MozillaFirefox/mozilla-repo.patch	Tue Jun 07 21:44:20 2016 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-../mozilla-repo.patch
\ No newline at end of file
--- a/firefox-kde.patch	Tue Jun 07 21:44:20 2016 +0200
+++ b/firefox-kde.patch	Wed Jun 08 13:45:00 2016 +0200
@@ -1,11 +1,11 @@
 # HG changeset patch
-# Parent  fd5629206dcf3f64d85ab177be6bc6076f0f1619
+# Parent  4311c6bdf61ac317bc60b25cd89ff67662a75049
 
 diff --git a/browser/base/content/browser-kde.xul b/browser/base/content/browser-kde.xul
 new file mode 100644
 --- /dev/null
 +++ b/browser/base/content/browser-kde.xul
-@@ -0,0 +1,1175 @@
+@@ -0,0 +1,1160 @@
 +#filter substitution
 +<?xml version="1.0"?>
 +# -*- Mode: HTML -*-
@@ -77,6 +77,8 @@
 +
 +<script type="application/javascript" src="chrome://global/content/contentAreaUtils.js"/>
 +
++<script type="application/javascript" src="chrome://browser/content/downloads/downloads.js"/>
++<script type="application/javascript" src="chrome://browser/content/downloads/indicator.js"/>
 +<script type="application/javascript" src="chrome://browser/content/places/editBookmarkOverlay.js"/>
 +
 +# All sets except for popupsets (commands, keys, stringbundles and broadcasters) *must* go into the
@@ -188,12 +190,6 @@
 +        <vbox>
 +          <label id="editBookmarkPanelTitle"/>
 +          <description id="editBookmarkPanelDescription"/>
-+          <hbox>
-+            <button id="editBookmarkPanelRemoveButton"
-+                    class="editBookmarkPanelHeaderButton"
-+                    oncommand="StarUI.removeBookmarkButtonCommand();"
-+                    accesskey="&editBookmark.removeBookmark.accessKey;"/>
-+          </hbox>
 +        </vbox>
 +      </row>
 +      <vbox id="editBookmarkPanelContent" flex="1" hidden="true"/>
@@ -204,15 +200,15 @@
 +                label="&editBookmark.done.label;"
 +                default="true"
 +                oncommand="StarUI.panel.hidePopup();"/>
-+        <button id="editBookmarkPanelDeleteButton"
++        <button id="editBookmarkPanelRemoveButton"
 +                class="editBookmarkPanelBottomButton"
-+                label="&editBookmark.cancel.label;"
-+                oncommand="StarUI.cancelButtonOnCommand();"/>
++                oncommand="StarUI.removeBookmarkButtonCommand();"
++                accesskey="&editBookmark.removeBookmark.accessKey;"/>
 +#else
-+        <button id="editBookmarkPanelDeleteButton"
++        <button id="editBookmarkPanelRemoveButton"
 +                class="editBookmarkPanelBottomButton"
-+                label="&editBookmark.cancel.label;"
-+                oncommand="StarUI.cancelButtonOnCommand();"/>
++                oncommand="StarUI.removeBookmarkButtonCommand();"
++                accesskey="&editBookmark.removeBookmark.accessKey;"/>
 +        <button id="editBookmarkPanelDoneButton"
 +                class="editBookmarkPanelBottomButton"
 +                label="&editBookmark.done.label;"
@@ -471,6 +467,46 @@
 +
 +    <tooltip id="dynamic-shortcut-tooltip"
 +             onpopupshowing="UpdateDynamicShortcutTooltipText(this);"/>
++
++    <menupopup id="SyncedTabsSidebarContext">
++      <menuitem label="&syncedTabs.context.openTab.label;"
++                accesskey="&syncedTabs.context.openTab.accesskey;"
++                id="syncedTabsOpenSelected"/>
++      <menuitem label="&syncedTabs.context.bookmarkSingleTab.label;"
++                accesskey="&syncedTabs.context.bookmarkSingleTab.accesskey;"
++                id="syncedTabsBookmarkSelected"/>
++      <menuseparator/>
++      <menuitem label="&syncSyncNowItem.label;"
++                accesskey="&syncSyncNowItem.accesskey;"
++                id="syncedTabsRefresh"/>
++    </menupopup>
++    <menupopup id="SyncedTabsSidebarTabsFilterContext"
++               class="textbox-contextmenu">
++      <menuitem label="&undoCmd.label;"
++                accesskey="&undoCmd.accesskey;"
++                cmd="cmd_undo"/>
++      <menuseparator/>
++      <menuitem label="&cutCmd.label;"
++                accesskey="&cutCmd.accesskey;"
++                cmd="cmd_cut"/>
++      <menuitem label="&copyCmd.label;"
++                accesskey="&copyCmd.accesskey;"
++                cmd="cmd_copy"/>
++      <menuitem label="&pasteCmd.label;"
++                accesskey="&pasteCmd.accesskey;"
++                cmd="cmd_paste"/>
++      <menuitem label="&deleteCmd.label;"
++                accesskey="&deleteCmd.accesskey;"
++                cmd="cmd_delete"/>
++      <menuseparator/>
++      <menuitem label="&selectAllCmd.label;"
++                accesskey="&selectAllCmd.accesskey;"
++                cmd="cmd_selectAll"/>
++      <menuseparator/>
++      <menuitem label="&syncSyncNowItem.label;"
++                accesskey="&syncSyncNowItem.accesskey;"
++                id="syncedTabsRefreshFilter"/>
++    </menupopup>
 +  </popupset>
 +
 +#ifdef CAN_DRAW_IN_TITLEBAR
@@ -667,10 +703,6 @@
 +              <box id="notification-popup-box" hidden="true" align="center">
 +                <image id="default-notification-icon" class="notification-anchor-icon" role="button"
 +                       aria-label="&urlbar.defaultNotificationAnchor.label;"/>
-+                <!-- NB: the identity-notification-icon is used for persona-based auth and preffed
-+                     off by default. It hasn't been updated for some time and liable to being
-+                     removed.-->
-+                <image id="identity-notification-icon" class="notification-anchor-icon" role="button"/>
 +                <image id="geo-notification-icon" class="notification-anchor-icon" role="button"
 +                       aria-label="&urlbar.geolocationNotificationAnchor.label;"/>
 +                <image id="addons-notification-icon" class="notification-anchor-icon" role="button"
@@ -811,30 +843,6 @@
 +                      command="Browser:ShowAllBookmarks"
 +                      key="manBookmarkKb"/>
 +            <menuseparator/>
-+            <menuitem id="BMB_subscribeToPageMenuitem"
-+#ifndef XP_MACOSX
-+                      class="menuitem-iconic subviewbutton"
-+#else
-+                      class="subviewbutton"
-+#endif
-+                      label="&subscribeToPageMenuitem.label;"
-+                      oncommand="return FeedHandler.subscribeToFeed(null, event);"
-+                      onclick="checkForMiddleClick(this, event);"
-+                      observes="singleFeedMenuitemState"/>
-+            <menu id="BMB_subscribeToPageMenupopup"
-+#ifndef XP_MACOSX
-+                  class="menu-iconic subviewbutton"
-+#else
-+                  class="subviewbutton"
-+#endif
-+                  label="&subscribeToPageMenupopup.label;"
-+                  observes="multipleFeedsMenuState">
-+              <menupopup id="BMB_subscribeToPageSubmenuMenupopup"
-+                         onpopupshowing="return FeedHandler.buildFeedList(event.target);"
-+                         oncommand="return FeedHandler.subscribeToFeed(null, event);"
-+                         onclick="checkForMiddleClick(this, event);"/>
-+            </menu>
-+            <menuseparator/>
 +            <menu id="BMB_bookmarksToolbar"
 +                  class="menu-iconic bookmark-item subviewbutton"
 +                  label="&personalbarCmd.label;"
@@ -1133,29 +1141,6 @@
 +
 +  <vbox id="browser-bottombox" layer="true">
 +    <notificationbox id="global-notificationbox" notificationside="bottom"/>
-+    <toolbar id="developer-toolbar"
-+             hidden="true">
-+#ifdef XP_MACOSX
-+          <toolbarbutton id="developer-toolbar-closebutton"
-+                         class="devtools-closebutton"
-+                         oncommand="DeveloperToolbar.hide();"
-+                         tooltiptext="&devToolbarCloseButton.tooltiptext;"/>
-+#endif
-+          <stack class="gclitoolbar-stack-node" flex="1">
-+            <textbox class="gclitoolbar-input-node" rows="1"/>
-+            <hbox class="gclitoolbar-complete-node"/>
-+          </stack>
-+          <toolbarbutton id="developer-toolbar-toolbox-button"
-+                         class="developer-toolbar-button"
-+                         observes="devtoolsMenuBroadcaster_DevToolbox"
-+                         tooltiptext="&devToolbarToolsButton.tooltip;"/>
-+#ifndef XP_MACOSX
-+          <toolbarbutton id="developer-toolbar-closebutton"
-+                         class="devtools-closebutton"
-+                         oncommand="DeveloperToolbar.hide();"
-+                         tooltiptext="&devToolbarCloseButton.tooltiptext;"/>
-+#endif
-+   </toolbar>
 +  </vbox>
 +
 +  <svg:svg height="0">
@@ -1266,7 +1251,7 @@
 diff --git a/browser/components/preferences/in-content/main.js b/browser/components/preferences/in-content/main.js
 --- a/browser/components/preferences/in-content/main.js
 +++ b/browser/components/preferences/in-content/main.js
-@@ -19,16 +19,22 @@ var gMainPane = {
+@@ -23,16 +23,22 @@ var gMainPane = {
    init: function ()
    {
      function setEventListener(aId, aEventType, aCallback)
@@ -1287,12 +1272,12 @@
      // In Windows 8 we launch the control panel since it's the only
      // way to get all file type association prefs. So we don't know
      // when the user will select the default.  We refresh here periodically
-     // in case the default changes.  On other Windows OS's defaults can also
+     // in case the default changes. On other Windows OS's defaults can also
      // be set while the prefs are open.
-@@ -704,16 +710,27 @@ var gMainPane = {
-    */
-   setDefaultBrowser: function()
-   {
+@@ -736,16 +742,27 @@ var gMainPane = {
+     let alwaysCheckPref = document.getElementById("browser.shell.checkDefaultBrowser");
+     alwaysCheckPref.value = true;
+ 
      let shellSvc = getShellService();
      if (!shellSvc)
        return;
@@ -1300,10 +1285,10 @@
        shellSvc.setDefaultBrowser(true, false);
 +      if (kde_session == 1) {
 +        var shellObj = Components.classes["@mozilla.org/file/local;1"]
-+                                   .createInstance(Components.interfaces.nsILocalFile);
++          .createInstance(Components.interfaces.nsILocalFile);
 +        shellObj.initWithPath("/usr/bin/kwriteconfig");
 +        var process = Components.classes["@mozilla.org/process/util;1"]
-+                                  .createInstance(Components.interfaces.nsIProcess);
++          .createInstance(Components.interfaces.nsIProcess);
 +        process.init(shellObj);
 +        var args = ["--file", "kdeglobals", "--group", "General", "--key",
 +            "BrowserApplication", "firefox"];
@@ -1313,8 +1298,8 @@
        Cu.reportError(ex);
        return;
      }
-     let selectedIndex =
-       shellSvc.isDefaultBrowser(false, true) ? 1 : 0;
+ 
+     let selectedIndex = shellSvc.isDefaultBrowser(false, true) ? 1 : 0;
      document.getElementById("setDefaultPane").selectedIndex = selectedIndex;
    }
 diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build
@@ -1632,7 +1617,7 @@
 diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
 --- a/browser/installer/package-manifest.in
 +++ b/browser/installer/package-manifest.in
-@@ -703,16 +703,17 @@
+@@ -697,16 +697,17 @@
  @RESPATH@/greprefs.js
  @RESPATH@/defaults/autoconfig/prefcalls.js
  @RESPATH@/browser/defaults/permissions
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-exclude-nametablecpp.patch	Wed Jun 08 13:45:00 2016 +0200
@@ -0,0 +1,50 @@
+
+# HG changeset patch
+# User Jonathan Kew <jkew@mozilla.com>
+# Date 1463581374 -3600
+# Node ID 9c57b7cacffc57ec3919a2cf3b5ce861e0cf3842
+# Parent  ea7843420fe518b772c7b259d8ff47193fc5b79e
+Bug 1272647 - Exclude NameTable.cpp from unified compilation because #include <cmath> in other source files causes gcc6 compilation failure. r=bas
+
+diff --git a/gfx/graphite2/src/moz.build b/gfx/graphite2/src/moz.build
+--- a/gfx/graphite2/src/moz.build
++++ b/gfx/graphite2/src/moz.build
+@@ -40,30 +40,35 @@ UNIFIED_SOURCES += [
+     'gr_features.cpp',
+     'gr_font.cpp',
+     'gr_logging.cpp',
+     'gr_segment.cpp',
+     'gr_slot.cpp',
+     'Intervals.cpp',
+     'json.cpp',
+     'Justifier.cpp',
+-    'NameTable.cpp',
+     'Pass.cpp',
+     'Position.cpp',
+     'SegCache.cpp',
+     'SegCacheEntry.cpp',
+     'SegCacheStore.cpp',
+     'Segment.cpp',
+     'Silf.cpp',
+     'Slot.cpp',
+     'Sparse.cpp',
+     'TtfUtil.cpp',
+     'UtfCodec.cpp',
+ ]
+ 
++# Excluded from UNIFIED_SOURCES because <cmath> from other files breaks it,
++# see bug 1272647.
++SOURCES += [
++    'NameTable.cpp',
++]
++
+ # tell graphite2 not to export symbols, we'll be linking it directly with
+ # thebes
+ DEFINES['GRAPHITE2_STATIC'] = True
+ 
+ # We allow warnings for third-party code that can be updated from upstream.
+ ALLOW_COMPILER_WARNINGS = True
+ 
+ FINAL_LIBRARY = 'gkmedias'
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-gcc6.patch	Wed Jun 08 13:45:00 2016 +0200
@@ -0,0 +1,76 @@
+
+# HG changeset patch
+# User Mike Hommey <mh+mozilla@glandium.org>
+# Date 1457596445 -32400
+# Node ID 55212130f19da3079167a6b0a5a0ed6689c9a71d
+# Parent  27c94617d7064d566c24a42e11cd4c7ef725923d
+Bug 1245076 - Don't include mozalloc.h from the cstdlib wrapper. r=froydnj
+
+Our STL wrappers do various different things, one of which is including
+mozalloc.h for infallible operator new. mozalloc.h includes stdlib.h,
+which, in libstdc++ >= 6 is now itself a wrapper around cstdlib, which
+circles back to our STL wrapper.
+
+But of the things our STL wrappers do, including mozalloc.h is not one
+that is necessary for cstdlib. So skip including mozalloc.h in our
+cstdlib wrapper.
+
+Additionally, some C++ sources (in media/mtransport) are including
+headers in an extern "C" block, which end up including stdlib.h, which
+ends up including cstdlib because really, this is all C++, and our
+wrapper pre-includes <new> for mozalloc.h, which fails because templates
+don't work inside extern "C". So, don't pre-include <new> when we're not
+including mozalloc.h.
+
+
+diff --git a/config/gcc-stl-wrapper.template.h b/config/gcc-stl-wrapper.template.h
+--- a/config/gcc-stl-wrapper.template.h
++++ b/config/gcc-stl-wrapper.template.h
+@@ -12,33 +12,40 @@
+ // compiling ObjC.
+ #if defined(__EXCEPTIONS) && __EXCEPTIONS && !(__OBJC__ && __GNUC__ && XP_IOS)
+ #  error "STL code can only be used with -fno-exceptions"
+ #endif
+ 
+ // Silence "warning: #include_next is a GCC extension"
+ #pragma GCC system_header
+ 
++// Don't include mozalloc for cstdlib. See bug 1245076.
++#ifndef moz_dont_include_mozalloc_for_cstdlib
++#  define moz_dont_include_mozalloc_for_cstdlib
++#endif
++#ifndef moz_dont_include_mozalloc_for_${HEADER}
+ // mozalloc.h wants <new>; break the cycle by always explicitly
+ // including <new> here.  NB: this is a tad sneaky.  Sez the gcc docs:
+ //
+ //    `#include_next' does not distinguish between <file> and "file"
+ //    inclusion, nor does it check that the file you specify has the
+ //    same name as the current file. It simply looks for the file
+ //    named, starting with the directory in the search path after the
+ //    one where the current file was found.
+-#include_next <new>
++#  include_next <new>
+ 
+ // See if we're in code that can use mozalloc.  NB: this duplicates
+ // code in nscore.h because nscore.h pulls in prtypes.h, and chromium
+ // can't build with that being included before base/basictypes.h.
+-#if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC)
+-#  include "mozilla/mozalloc.h"
+-#else
+-#  error "STL code can only be used with infallible ::operator new()"
++#  if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC)
++#    include "mozilla/mozalloc.h"
++#  else
++#    error "STL code can only be used with infallible ::operator new()"
++#  endif
++
+ #endif
+ 
+ #if defined(DEBUG) && !defined(_GLIBCXX_DEBUG)
+ // Enable checked iterators and other goodies
+ //
+ // FIXME/bug 551254: gcc's debug STL implementation requires -frtti.
+ // Figure out how to resolve this with -fno-rtti.  Maybe build with
+ // -frtti in DEBUG builds?
+
+
--- a/mozilla-kde.patch	Tue Jun 07 21:44:20 2016 +0200
+++ b/mozilla-kde.patch	Wed Jun 08 13:45:00 2016 +0200
@@ -1,5 +1,5 @@
 # HG changeset patch
-# Parent  61cdc9af8ceaf75083e751e0d6497feddc26f7ba
+# Parent  f2726ebfae7cdded8e7ca6030829b0a3fae4e438
 Description: Add KDE integration to Firefox (toolkit parts)
 Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
 Author: Lubos Lunak <lunak@suse.com>
@@ -27,7 +27,7 @@
  #include "prefread.h"
  #include "prefapi_private_data.h"
  
-@@ -1135,16 +1136,34 @@ pref_LoadPrefsInDir(nsIFile* aDir, char 
+@@ -1138,16 +1139,34 @@ pref_LoadPrefsInDir(nsIFile* aDir, char 
  
  static nsresult pref_LoadPrefsInDirList(const char *listId)
  {
@@ -62,7 +62,7 @@
      return NS_OK;
  
    bool hasMore;
-@@ -1160,17 +1179,17 @@ static nsresult pref_LoadPrefsInDirList(
+@@ -1163,17 +1182,17 @@ static nsresult pref_LoadPrefsInDirList(
  
      nsAutoCString leaf;
      path->GetNativeLeafName(leaf);
@@ -81,7 +81,7 @@
  {
    nsZipItemPtr<char> manifest(jarReader, name, true);
    NS_ENSURE_TRUE(manifest.Buffer(), NS_ERROR_NOT_AVAILABLE);
-@@ -1264,24 +1283,36 @@ static nsresult pref_InitInitialObjects(
+@@ -1267,24 +1286,36 @@ static nsresult pref_InitInitialObjects(
    /* these pref file names should not be used: we process them after all other application pref files for backwards compatibility */
    static const char* specialFiles[] = {
  #if defined(XP_MACOSX)
@@ -325,7 +325,7 @@
 +          xmlns="http://www.mozilla.org/xbl"
 +          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
 +          xmlns:xbl="http://www.mozilla.org/xbl">
-+  
++
 +  <binding id="dialog" extends="chrome://global/content/bindings/general.xml#root-element">
 +    <resources>
 +      <stylesheet src="chrome://global/skin/dialog.css"/>
@@ -334,10 +334,10 @@
 +      <xul:vbox class="box-inherit dialog-content-box" flex="1">
 +        <children/>
 +      </xul:vbox>
-+          
++
 +      <xul:hbox class="dialog-button-box" anonid="buttons"
 +                xbl:inherits="pack=buttonpack,align=buttonalign,dir=buttondir,orient=buttonorient"
-+#ifdef XP_UNIX_GNOME
++#ifdef XP_UNIX
 +                >
 +        <xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/>
 +        <xul:button dlgtype="help" class="dialog-button" hidden="true"/>
@@ -349,12 +349,12 @@
 +#elif XP_UNIX
 +                >
 +        <xul:button dlgtype="help" class="dialog-button" hidden="true"/>
-+	<xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
-+	<xul:spacer anonid="spacer" flex="1"/>
-+	<xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
-+	<xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
-+	<xul:button dlgtype="cancel" class="dialog-button"/>
-+	<xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/>
++        <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
++        <xul:spacer anonid="spacer" flex="1"/>
++        <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
++        <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
++        <xul:button dlgtype="cancel" class="dialog-button"/>
++        <xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/>
 +#else
 +                pack="end">
 +        <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
@@ -403,7 +403,7 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <method name="cancelDialog">
 +        <body>
 +        <![CDATA[
@@ -411,7 +411,7 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <method name="getButton">
 +        <parameter name="aDlgType"/>
 +        <body>
@@ -462,7 +462,7 @@
 +        <![CDATA[
 +          var xOffset = screen.availWidth/2 - window.outerWidth/2;
 +          var yOffset = screen.availHeight/2 - window.outerHeight/2; //(opener.outerHeight *2)/10;
-+  
++
 +          xOffset = xOffset > 0 ? xOffset : 0;
 +          yOffset = yOffset > 0 ? yOffset : 0;
 +          window.moveTo(xOffset, yOffset);
@@ -534,7 +534,7 @@
 +          setTimeout(focusInit, 0);
 +        ]]>
 +        </body>
-+      </method>                
++      </method>
 +
 +      <property name="mStrBundle">
 +        <getter>
@@ -549,7 +549,7 @@
 +          return this._mStrBundle;
 +        ]]></getter>
 +      </property>
-+      
++
 +      <method name="_configureButtons">
 +        <parameter name="aButtons"/>
 +        <body>
@@ -621,7 +621,7 @@
 +
 +          // ensure that hitting enter triggers the default button command
 +          this.defaultButton = this.defaultButton;
-+          
++
 +          // if there is a special button configuration, use it
 +          if (aButtons) {
 +            // expect a comma delimited list of dlgtype values
@@ -634,7 +634,7 @@
 +              shown[list[i].replace(/ /g, "")] = true;
 +
 +            // hide/show the buttons we want
-+            for (dlgtype in buttons) 
++            for (dlgtype in buttons)
 +              buttons[dlgtype].hidden = !shown[dlgtype];
 +
 +            let { AppConstants } =
@@ -682,7 +682,7 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <method name="_doButtonCommand">
 +        <parameter name="aDlgType"/>
 +        <body>
@@ -706,17 +706,17 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <method name="_fireButtonEvent">
 +        <parameter name="aDlgType"/>
 +        <body>
 +        <![CDATA[
 +          var event = document.createEvent("Events");
 +          event.initEvent("dialog"+aDlgType, true, true);
-+          
++
 +          // handle dom event handlers
 +          var noCancel = this.dispatchEvent(event);
-+          
++
 +          // handle any xml attribute event handlers
 +          var handler = this.getAttribute("ondialog"+aDlgType);
 +          if (handler != "") {
@@ -725,7 +725,7 @@
 +            if (returned == false)
 +              noCancel = false;
 +          }
-+          
++
 +          return noCancel;
 +        ]]>
 +        </body>
@@ -746,7 +746,7 @@
 +      </method>
 +
 +    </implementation>
-+    
++
 +    <handlers>
 +      <handler event="keypress" keycode="VK_RETURN"
 +               group="system" action="this._hitEnter(event);"/>
@@ -782,7 +782,7 @@
 new file mode 100644
 --- /dev/null
 +++ b/toolkit/content/widgets/preferences-kde.xml
-@@ -0,0 +1,1406 @@
+@@ -0,0 +1,1408 @@
 +<?xml version="1.0"?>
 +
 +<!DOCTYPE bindings [
@@ -849,7 +849,7 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <method name="fireChangedEvent">
 +        <parameter name="aPreference"/>
 +        <body>
@@ -866,7 +866,7 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <field name="service">
 +        Components.classes["@mozilla.org/preferences-service;1"]
 +                  .getService(Components.interfaces.nsIPrefService);
@@ -916,11 +916,11 @@
 +            .addObserver(this.name, this.preferences, false);
 +        // In non-instant apply mode, we must try and use the last saved state
 +        // from any previous opens of a child dialog instead of the value from
-+        // preferences, to pick up any edits a user may have made. 
++        // preferences, to pick up any edits a user may have made.
 +
 +        var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
 +                    .getService(Components.interfaces.nsIScriptSecurityManager);
-+        if (this.preferences.type == "child" && 
++        if (this.preferences.type == "child" &&
 +            !this.instantApply && window.opener &&
 +            secMan.isSystemPrincipal(window.opener.document.nodePrincipal)) {
 +          var pdoc = window.opener.document;
@@ -961,13 +961,13 @@
 +        <setter>
 +          if (val == this.name)
 +            return val;
-+            
++
 +          this.preferences.rootBranchInternal
 +              .removeObserver(this.name, this.preferences);
 +          this.setAttribute('name', val);
 +          this.preferences.rootBranchInternal
 +              .addObserver(val, this.preferences, false);
-+              
++
 +          return val;
 +        </setter>
 +      </property>
@@ -994,20 +994,20 @@
 +        </body>
 +      </method>
 +      <property name="value" onget="return this._value" onset="return this._setValue(val);"/>
-+      
++
 +      <property name="locked">
 +        <getter>
 +          return this.preferences.rootBranch.prefIsLocked(this.name);
 +        </getter>
 +      </property>
-+      
++
 +      <property name="disabled">
 +        <getter>
 +          return this.getAttribute("disabled") == "true";
 +        </getter>
 +        <setter>
 +        <![CDATA[
-+          if (val) 
++          if (val)
 +            this.setAttribute("disabled", "true");
 +          else
 +            this.removeAttribute("disabled");
@@ -1018,24 +1018,24 @@
 +          var elements = document.getElementsByAttribute("preference", this.id);
 +          for (var i = 0; i < elements.length; ++i) {
 +            elements[i].disabled = val;
-+            
++
 +            var labels = document.getElementsByAttribute("control", elements[i].id);
 +            for (var j = 0; j < labels.length; ++j)
 +              labels[j].disabled = val;
 +          }
-+            
++
 +          return val;
 +        ]]>
 +        </setter>
 +      </property>
-+      
++
 +      <property name="tabIndex">
 +        <getter>
 +          return parseInt(this.getAttribute("tabindex"));
 +        </getter>
 +        <setter>
 +        <![CDATA[
-+          if (val) 
++          if (val)
 +            this.setAttribute("tabindex", val);
 +          else
 +            this.removeAttribute("tabindex");
@@ -1046,12 +1046,12 @@
 +          var elements = document.getElementsByAttribute("preference", this.id);
 +          for (var i = 0; i < elements.length; ++i) {
 +            elements[i].tabIndex = val;
-+            
++
 +            var labels = document.getElementsByAttribute("control", elements[i].id);
 +            for (var j = 0; j < labels.length; ++j)
 +              labels[j].tabIndex = val;
 +          }
-+            
++
 +          return val;
 +        ]]>
 +        </setter>
@@ -1065,7 +1065,7 @@
 +        ]]>
 +        </getter>
 +      </property>
-+      
++
 +      <method name="reset">
 +        <body>
 +          // defer reset until preference update
@@ -1073,7 +1073,7 @@
 +        </body>
 +      </method>
 +
-+      <field name="_useDefault">false</field>      
++      <field name="_useDefault">false</field>
 +      <property name="defaultValue">
 +        <getter>
 +        <![CDATA[
@@ -1084,27 +1084,27 @@
 +        ]]>
 +        </getter>
 +      </property>
-+      
++
 +      <property name="_branch">
 +        <getter>
 +          return this._useDefault ? this.preferences.defaultBranch : this.preferences.rootBranch;
 +        </getter>
 +      </property>
-+      
++
 +      <field name="batching">false</field>
-+      
++
 +      <method name="_reportUnknownType">
 +        <body>
 +        <![CDATA[
 +          var consoleService = Components.classes["@mozilla.org/consoleservice;1"]
 +                                         .getService(Components.interfaces.nsIConsoleService);
-+          var msg = "<preference> with id='" + this.id + "' and name='" + 
++          var msg = "<preference> with id='" + this.id + "' and name='" +
 +                    this.name + "' has unknown type '" + this.type + "'.";
 +          consoleService.logStringMessage(msg);
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <property name="valueFromPreferences">
 +        <getter>
 +        <![CDATA[
@@ -1189,7 +1189,7 @@
 +              if (!lf.exists())
 +                lf.initWithPath(val);
 +            }
-+            else 
++            else
 +              lf = val.QueryInterface(Components.interfaces.nsILocalFile);
 +            this.preferences.rootBranch
 +                .setComplexValue(this.name, Components.interfaces.nsILocalFile, lf);
@@ -1203,7 +1203,7 @@
 +        ]]>
 +        </setter>
 +      </property>
-+      
++
 +      <method name="setElementValue">
 +        <parameter name="aElement"/>
 +        <body>
@@ -1220,7 +1220,7 @@
 +            try {
 +              var event = document.createEvent("Events");
 +              event.initEvent("syncfrompreference", true, true);
-+              var f = new Function ("event", 
++              var f = new Function ("event",
 +                                    aElement.getAttribute("onsyncfrompreference"));
 +              rv = f.call(aElement, event);
 +            }
@@ -1228,20 +1228,22 @@
 +              Components.utils.reportError(e);
 +            }
 +          }
-+          var val = rv !== undefined ? rv : (this.instantApply ? this.valueFromPreferences : this.value);
++          var val = rv;
++          if (val === undefined)
++            val = this.instantApply ? this.valueFromPreferences : this.value;
 +          // if the preference is marked for reset, show default value in UI
 +          if (val === undefined)
 +            val = this.defaultValue;
 +
 +          /**
-+           * Initialize a UI element property with a value. Handles the case 
++           * Initialize a UI element property with a value. Handles the case
 +           * where an element has not yet had a XBL binding attached for it and
 +           * the property setter does not yet exist by setting the same attribute
-+           * on the XUL element using DOM apis and assuming the element's 
-+           * constructor or property getters appropriately handle this state. 
++           * on the XUL element using DOM apis and assuming the element's
++           * constructor or property getters appropriately handle this state.
 +           */
 +          function setValue(element, attribute, value) {
-+            if (attribute in element) 
++            if (attribute in element)
 +              element[attribute] = value;
 +            else
 +              element.setAttribute(attribute, value);
@@ -1273,19 +1275,19 @@
 +            try {
 +              var event = document.createEvent("Events");
 +              event.initEvent("synctopreference", true, true);
-+              var f = new Function ("event", 
++              var f = new Function ("event",
 +                                    aElement.getAttribute("onsynctopreference"));
 +              var rv = f.call(aElement, event);
-+              if (rv !== undefined) 
++              if (rv !== undefined)
 +                return rv;
 +            }
 +            catch (e) {
 +              Components.utils.reportError(e);
 +            }
 +          }
-+          
++
 +          /**
-+           * Read the value of an attribute from an element, assuming the 
++           * Read the value of an attribute from an element, assuming the
 +           * attribute is a property on the element's node API. If the property
 +           * is not present in the API, then assume its value is contained in
 +           * an attribute, as is the case before a binding has been attached.
@@ -1313,7 +1315,7 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <method name="isElementEditable">
 +        <parameter name="aElement"/>
 +        <body>
@@ -1329,26 +1331,26 @@
 +            return true;
 +          }
 +          return aElement.getAttribute("preference-editable") == "true";
-+        ]]> 
++        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <method name="updateElements">
 +        <body>
 +        <![CDATA[
 +          if (!this.id)
 +            return;
 +
-+          // This "change" event handler tracks changes made to preferences by 
-+          // sources other than the user in this window. 
++          // This "change" event handler tracks changes made to preferences by
++          // sources other than the user in this window.
 +          var elements = document.getElementsByAttribute("preference", this.id);
-+          for (var i = 0; i < elements.length; ++i) 
++          for (var i = 0; i < elements.length; ++i)
 +            this.setElementValue(elements[i]);
 +        ]]>
 +        </body>
 +      </method>
 +    </implementation>
-+    
++
 +    <handlers>
 +      <handler event="change">
 +        this.updateElements();
@@ -1423,7 +1425,7 @@
 +              // no buttons on Mac except Help
 +              cancelButton.hidden = true;
 +              // Move Help button to the end
-+              document.getAnonymousElementByAttribute(this, "anonid", "spacer").hidden = true;         
++              document.getAnonymousElementByAttribute(this, "anonid", "spacer").hidden = true;
 +              // Also, don't fire onDialogAccept on enter
 +              acceptButton.disabled = true;
 +            } else {
@@ -1500,26 +1502,26 @@
 +                onget="return document.getAnonymousElementByAttribute(this, 'class', 'paneDeckContainer');"/>
 +      <property name="_selector"
 +                onget="return document.getAnonymousElementByAttribute(this, 'anonid', 'selector');"/>
-+      <property name="lastSelected" 
++      <property name="lastSelected"
 +                onget="return this.getAttribute('lastSelected');">
 +        <setter>
-+          this.setAttribute("lastSelected", val); 
++          this.setAttribute("lastSelected", val);
 +          document.persist(this.id, "lastSelected");
 +          return val;
-+        </setter>          
++        </setter>
 +      </property>
 +      <property name="currentPane"
 +                onset="return this._currentPane = val;">
 +        <getter>
 +          if (!this._currentPane)
 +            this._currentPane = this.preferencePanes[0];
-+          
++
 +          return this._currentPane;
-+        </getter> 
++        </getter>
 +      </property>
 +      <field name="_currentPane">null</field>
-+      
-+      
++
++
 +      <method name="_makePaneButton">
 +        <parameter name="aPaneElement"/>
 +        <body>
@@ -1551,16 +1553,16 @@
 +            {
 +              this._pane = aPane;
 +            }
-+            OverlayLoadObserver.prototype = { 
++            OverlayLoadObserver.prototype = {
 +              _outer: this,
-+              observe: function (aSubject, aTopic, aData) 
++              observe: function (aSubject, aTopic, aData)
 +              {
 +                this._pane.loaded = true;
 +                this._outer._fireEvent("paneload", this._pane);
 +                this._outer._selectPane(this._pane);
 +              }
 +            };
-+            
++
 +            var obs = new OverlayLoadObserver(aPaneElement);
 +            document.loadOverlay(aPaneElement.src, obs);
 +          }
@@ -1569,13 +1571,13 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <method name="_fireEvent">
 +        <parameter name="aEventName"/>
 +        <parameter name="aTarget"/>
 +        <body>
 +        <![CDATA[
-+          // Panel loaded, synthesize a load event. 
++          // Panel loaded, synthesize a load event.
 +          try {
 +            var event = document.createEvent("Events");
 +            event.initEvent(aEventName, true, true);
@@ -1586,16 +1588,16 @@
 +              if (rv == false)
 +                cancel = true;
 +            }
-+            return !cancel;  
++            return !cancel;
 +          }
-+          catch (e) { 
++          catch (e) {
 +            Components.utils.reportError(e);
 +          }
 +          return false;
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <field name="_initialized">false</field>
 +      <method name="_selectPane">
 +        <parameter name="aPaneElement"/>
@@ -1614,13 +1616,13 @@
 +          else
 +            helpButton.hidden = true;
 +
-+          // Find this pane's index in the deck and set the deck's 
++          // Find this pane's index in the deck and set the deck's
 +          // selectedIndex to that value to switch to it.
 +          var prefpanes = this.preferencePanes;
 +          for (var i = 0; i < prefpanes.length; ++i) {
 +            if (prefpanes[i] == aPaneElement) {
 +              this._paneDeck.selectedIndex = i;
-+              
++
 +              if (this.type != "child") {
 +                if (aPaneElement.hasAttribute("flex") && this._shouldAnimate &&
 +                    prefpanes.length > 1)
@@ -1673,7 +1675,7 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <property name="_shouldAnimate">
 +        <getter>
 +        <![CDATA[
@@ -1690,7 +1692,7 @@
 +        ]]>
 +        </getter>
 +      </property>
-+      
++
 +      <method name="animate">
 +        <parameter name="aOldPane"/>
 +        <parameter name="aNewPane"/>
@@ -1698,7 +1700,7 @@
 +        <![CDATA[
 +          // if we are already resizing, use currentHeight
 +          var oldHeight = this._currentHeight ? this._currentHeight : aOldPane.contentHeight;
-+          
++
 +          this._multiplier = aNewPane.contentHeight > oldHeight ? 1 : -1;
 +          var sizeDelta = Math.abs(oldHeight - aNewPane.contentHeight);
 +          this._animateRemainder = sizeDelta % this._animateIncrement;
@@ -1707,7 +1709,7 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <property name="_sizeIncrement">
 +        <getter>
 +        <![CDATA[
@@ -1717,7 +1719,7 @@
 +          if ((this._multiplier > 0 && this._currentHeight >= lastSelectedPane.contentHeight) ||
 +              (this._multiplier < 0 && this._currentHeight <= lastSelectedPane.contentHeight))
 +            return 0;
-+          
++
 +          if ((this._multiplier > 0 && newHeight > lastSelectedPane.contentHeight) ||
 +              (this._multiplier < 0 && newHeight < lastSelectedPane.contentHeight))
 +            increment = this._animateRemainder * this._multiplier;
@@ -1725,14 +1727,14 @@
 +        ]]>
 +        </getter>
 +      </property>
-+      
++
 +      <method name="notify">
 +        <parameter name="aTimer"/>
 +        <body>
 +        <![CDATA[
 +          if (!document)
 +            aTimer.cancel();
-+          
++
 +          if (aTimer == this._animateTimer) {
 +            var increment = this._sizeIncrement;
 +            if (increment != 0) {
@@ -1756,39 +1758,39 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <method name="_setUpAnimationTimer">
 +        <parameter name="aStartHeight"/>
 +        <body>
 +        <![CDATA[
-+          if (!this._animateTimer) 
++          if (!this._animateTimer)
 +            this._animateTimer = Components.classes["@mozilla.org/timer;1"]
 +                                           .createInstance(Components.interfaces.nsITimer);
 +          else
 +            this._animateTimer.cancel();
 +          this._currentHeight = aStartHeight;
-+          
-+          this._animateTimer.initWithCallback(this, this._animateDelay, 
++
++          this._animateTimer.initWithCallback(this, this._animateDelay,
 +                                              Components.interfaces.nsITimer.TYPE_REPEATING_SLACK);
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <method name="_setUpFadeTimer">
 +        <body>
 +        <![CDATA[
-+          if (!this._fadeTimer) 
++          if (!this._fadeTimer)
 +            this._fadeTimer = Components.classes["@mozilla.org/timer;1"]
 +                                        .createInstance(Components.interfaces.nsITimer);
 +          else
 +            this._fadeTimer.cancel();
-+          
-+          this._fadeTimer.initWithCallback(this, this._fadeDelay, 
++
++          this._fadeTimer.initWithCallback(this, this._fadeDelay,
 +                                           Components.interfaces.nsITimer.TYPE_REPEATING_SLACK);
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <field name="_animateTimer">null</field>
 +      <field name="_fadeTimer">null</field>
 +      <field name="_animateDelay">15</field>
@@ -1804,13 +1806,13 @@
 +        <body>
 +        <![CDATA[
 +          this.appendChild(aPaneElement);
-+          
++
 +          // Set up pane button
 +          this._makePaneButton(aPaneElement);
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <method name="openSubDialog">
 +        <parameter name="aURL"/>
 +        <parameter name="aFeatures"/>
@@ -1819,7 +1821,7 @@
 +          return openDialog(aURL, "", "modal,centerscreen,resizable=no" + (aFeatures != "" ? ("," + aFeatures) : ""), aParams);
 +        </body>
 +      </method>
-+      
++
 +      <method name="openWindow">
 +        <parameter name="aWindowType"/>
 +        <parameter name="aURL"/>
@@ -1856,29 +1858,29 @@
 +                    .getService(Components.interfaces.nsIScriptSecurityManager);
 +        if (this.type == "child" && window.opener &&
 +            secMan.isSystemPrincipal(window.opener.document.nodePrincipal)) {
-+          var psvc = Components.classes["@mozilla.org/preferences-service;1"]
++          let psvc = Components.classes["@mozilla.org/preferences-service;1"]
 +                               .getService(Components.interfaces.nsIPrefBranch);
 +          var pdocEl = window.opener.document.documentElement;
 +          if (pdocEl.instantApply) {
-+            var panes = this.preferencePanes;
-+            for (var i = 0; i < panes.length; ++i)
++            let panes = this.preferencePanes;
++            for (let i = 0; i < panes.length; ++i)
 +              panes[i].writePreferences(true);
 +          }
 +          else {
 +            // Clone all the preferences elements from the child document and
-+            // insert them into the pane collection of the parent. 
++            // insert them into the pane collection of the parent.
 +            var pdoc = window.opener.document;
 +            if (pdoc.documentElement.localName == "prefwindow") {
 +              var currentPane = pdoc.documentElement.currentPane;
 +              var id = window.location.href + "#childprefs";
 +              var childPrefs = pdoc.getElementById(id);
 +              if (!childPrefs) {
-+                var childPrefs = pdoc.createElement("preferences");
++                childPrefs = pdoc.createElement("preferences");
 +                currentPane.appendChild(childPrefs);
 +                childPrefs.id = id;
 +              }
-+              var panes = this.preferencePanes;
-+              for (var i = 0; i < panes.length; ++i) {
++              let panes = this.preferencePanes;
++              for (let i = 0; i < panes.length; ++i) {
 +                var preferences = panes[i].preferences;
 +                for (var j = 0; j < preferences.length; ++j) {
 +                  // Try to find a preference element for the same preference.
@@ -1909,11 +1911,11 @@
 +          }
 +        }
 +        else {
-+          var panes = this.preferencePanes;
++          let panes = this.preferencePanes;
 +          for (var i = 0; i < panes.length; ++i)
 +            panes[i].writePreferences(false);
 +
-+          var psvc = Components.classes["@mozilla.org/preferences-service;1"]
++          let psvc = Components.classes["@mozilla.org/preferences-service;1"]
 +                               .getService(Components.interfaces.nsIPrefService);
 +          psvc.savePrefFile(null);
 +        }
@@ -1955,7 +1957,7 @@
 +      </handler>
 +    </handlers>
 +  </binding>
-+  
++
 +  <binding id="prefpane">
 +    <resources>
 +      <stylesheet src="chrome://global/skin/preferences.css"/>
@@ -1990,20 +1992,20 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
-+      <property name="src" 
++
++      <property name="src"
 +                onget="return this.getAttribute('src');"
 +                onset="this.setAttribute('src', val); return val;"/>
-+      <property name="selected" 
++      <property name="selected"
 +                onget="return this.getAttribute('selected') == 'true';"
 +                onset="this.setAttribute('selected', val); return val;"/>
-+      <property name="image" 
++      <property name="image"
 +                onget="return this.getAttribute('image');"
 +                onset="this.setAttribute('image', val); return val;"/>
-+      <property name="label" 
++      <property name="label"
 +                onget="return this.getAttribute('label');"
 +                onset="this.setAttribute('label', val); return val;"/>
-+      
++
 +      <property name="preferenceElements"
 +                onget="return this.getElementsByAttribute('preference', '*');"/>
 +      <property name="preferences"
@@ -2027,30 +2029,30 @@
 +      </property>
 +
 +      <field name="_loaded">false</field>
-+      <property name="loaded" 
++      <property name="loaded"
 +                onget="return !this.src ? true : this._loaded;"
 +                onset="this._loaded = val; return val;"/>
-+      
++
 +      <method name="preferenceForElement">
 +        <parameter name="aElement"/>
 +        <body>
 +          return document.getElementById(aElement.getAttribute("preference"));
 +        </body>
 +      </method>
-+      
++
 +      <method name="getPreferenceElement">
 +        <parameter name="aStartElement"/>
 +        <body>
 +        <![CDATA[
 +          var temp = aStartElement;
-+          while (temp && temp.nodeType == Node.ELEMENT_NODE && 
++          while (temp && temp.nodeType == Node.ELEMENT_NODE &&
 +                 !temp.hasAttribute("preference"))
 +            temp = temp.parentNode;
 +          return temp.nodeType == Node.ELEMENT_NODE ? temp : aStartElement;
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <field name="DeferredTask" readonly="true">
 +        let targetObj = {};
 +        Components.utils.import("resource://gre/modules/DeferredTask.jsm", targetObj);
@@ -2106,7 +2108,7 @@
 +        ]]>
 +        </body>
 +      </method>
-+      
++
 +      <property name="contentHeight">
 +        <getter>
 +          var targetHeight = parseInt(window.getComputedStyle(this._content, "").height);
@@ -2121,25 +2123,25 @@
 +    </implementation>
 +    <handlers>
 +      <handler event="command">
-+        // This "command" event handler tracks changes made to preferences by 
++        // This "command" event handler tracks changes made to preferences by
 +        // the user in this window.
 +        if (event.sourceEvent)
 +          event = event.sourceEvent;
 +        this.userChangedValue(event.target);
 +      </handler>
 +      <handler event="select">
-+        // This "select" event handler tracks changes made to colorpicker 
++        // This "select" event handler tracks changes made to colorpicker
 +        // preferences by the user in this window.
-+        if (event.target.localName == "colorpicker") 
++        if (event.target.localName == "colorpicker")
 +          this.userChangedValue(event.target);
 +      </handler>
 +      <handler event="change">
-+        // This "change" event handler tracks changes made to preferences by 
-+        // the user in this window. 
++        // This "change" event handler tracks changes made to preferences by
++        // the user in this window.
 +        this.userChangedValue(event.target);
 +      </handler>
 +      <handler event="input">
-+        // This "input" event handler tracks changes made to preferences by 
++        // This "input" event handler tracks changes made to preferences by
 +        // the user in this window.
 +        this.userChangedValue(event.target);
 +      </handler>
@@ -2156,11 +2158,11 @@
 +            dump("*** No preference found for " + elements[i].getAttribute("preference") + "\n");
 +          }
 +        }
-+      ]]>      
++      ]]>
 +      </handler>
 +    </handlers>
 +  </binding>
-+          
++
 +  <binding id="panebutton" role="xul:listitem"
 +           extends="chrome://global/content/bindings/radio.xml#radio">
 +    <resources>
--- a/mozilla-libproxy.patch	Tue Jun 07 21:44:20 2016 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-# HG changeset patch
-# User Wolfgang Rosenauer <wr@rosenauer.org>
-# Parent  95b421ca30846be2b5d7230d72263e6dff042d0b
-Bug 1220399 - building with libproxy support fails
-
-diff --git a/toolkit/system/unixproxy/nsLibProxySettings.cpp b/toolkit/system/unixproxy/nsLibProxySettings.cpp
---- a/toolkit/system/unixproxy/nsLibProxySettings.cpp
-+++ b/toolkit/system/unixproxy/nsLibProxySettings.cpp
-@@ -2,16 +2,17 @@
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * 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 "nsISystemProxySettings.h"
- #include "mozilla/ModuleUtils.h"
- #include "nsIServiceManager.h"
- #include "nsIURI.h"
-+#include "nsNetCID.h"
- #include "nsString.h"
- #include "nsCOMPtr.h"
- #include "nspr.h"
- 
- extern "C" {
- #include <proxy.h>
- }
- 
--- a/mozilla-pkgconfig.patch	Tue Jun 07 21:44:20 2016 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-From: Wolfgang Rosenauer
-Subject: pkgconfig tuning
-
-diff --git a/xulrunner/installer/Makefile.in b/xulrunner/installer/Makefile.in
---- a/xulrunner/installer/Makefile.in
-+++ b/xulrunner/installer/Makefile.in
-@@ -33,16 +33,19 @@ include $(topsrcdir)/config/rules.mk
- 
- INSTALL_SDK = 1
- 
- include $(topsrcdir)/toolkit/mozapps/installer/signing.mk
- include $(topsrcdir)/toolkit/mozapps/installer/packager.mk
- 
- # Add pkg-config files to the install:: target
- 
-+# the apilibdir always ends with 1.9 as every patch update will provide a link
-+apilibdir = $(dir $(installdir))xulrunner-18
-+
- pkg_config_files = \
- 	libxul.pc \
- 	libxul-embedding.pc \
- 	mozilla-js.pc \
- 	mozilla-plugin.pc \
- 	$(NULL)
- 
- ifdef MOZ_NATIVE_NSPR
-@@ -70,16 +73,17 @@ pkg_config_files += mozilla-nss.pc
- endif
- 
- %.pc: $(srcdir)/%.pc.in $(GLOBAL_DEPS)
- 	cat $< | sed \
- 	-e "s|%prefix%|$(prefix)|" \
- 	-e "s|%includedir%|$(includedir)|" \
- 	-e "s|%idldir%|$(idldir)|" \
- 	-e "s|%sdkdir%|$(sdkdir)|" \
-+	-e "s|%libdir%|$(apilibdir)|" \
- 	-e "s|%MOZ_APP_NAME%|$(MOZ_APP_NAME)|" \
- 	-e "s|%MOZILLA_VERSION%|$(MOZ_APP_VERSION)|" \
- 	-e "s|%WCHAR_CFLAGS%|$(WCHAR_CFLAGS)|" \
- 	-e "s|%FULL_NSPR_LIBS%|$(FULL_NSPR_LIBS)|" \
- 	-e "s|%FULL_NSPR_CFLAGS%|$(FULL_NSPR_CFLAGS)|" \
- 	-e "s|%NSPR_NAME%|$(NSPR_NAME)|" \
- 	-e "s|%NSPR_VERSION%|$(NSPR_VERSION)|" \
- 	-e "s|%MOZ_XUL_LINK%|$(MOZ_XUL_LINK)|" \
-diff --git a/xulrunner/installer/libxul-embedding.pc.in b/xulrunner/installer/libxul-embedding.pc.in
---- a/xulrunner/installer/libxul-embedding.pc.in
-+++ b/xulrunner/installer/libxul-embedding.pc.in
-@@ -1,10 +1,11 @@
- prefix=%prefix%
- sdkdir=%sdkdir%
- includedir=%includedir%
- idldir=%idldir%
- 
- Name: libxul-embedding
- Description: Static library for version-independent embedding of the Mozilla runtime
- Version: %MOZILLA_VERSION%
--Libs: -L${sdkdir}/lib -lxpcomglue -ldl
-+Requires: %NSPR_NAME% >= %NSPR_VERSION%
-+Libs: -L${sdkdir}/sdk/lib -lxpcomglue -ldl
- Cflags: -DXPCOM_GLUE -I${includedir} %WCHAR_CFLAGS%
-diff --git a/xulrunner/installer/libxul.pc.in b/xulrunner/installer/libxul.pc.in
---- a/xulrunner/installer/libxul.pc.in
-+++ b/xulrunner/installer/libxul.pc.in
-@@ -1,10 +1,11 @@
- prefix=%prefix%
- sdkdir=%sdkdir%
-+libdir=%libdir%
- includedir=%includedir%
- idldir=%idldir%
- 
- Name: libxul
- Description: The Mozilla Runtime and Embedding Engine
- Version: %MOZILLA_VERSION%
- Requires: %NSPR_NAME% >= %NSPR_VERSION%
- Libs: -L${sdkdir}/lib %MOZ_XUL_LINK%
-diff --git a/xulrunner/installer/mozilla-js.pc.in b/xulrunner/installer/mozilla-js.pc.in
---- a/xulrunner/installer/mozilla-js.pc.in
-+++ b/xulrunner/installer/mozilla-js.pc.in
-@@ -1,10 +1,11 @@
- prefix=%prefix%
- sdkdir=%sdkdir%
-+libdir=%libdir%
- includedir=%includedir%
- 
- Name: JavaScript
- Description: The Mozilla JavaScript Library
- Version: %MOZILLA_VERSION%
- Requires: %NSPR_NAME% >= %NSPR_VERSION%
--Libs: -L${sdkdir}/lib %MOZ_JS_LINK%
-+Libs: -Wl,-rpath,${libdir} -L${sdkdir}/lib %MOZ_JS_LINK%
- Cflags: -I${includedir} -DXP_UNIX
--- a/mozilla-repo.patch	Tue Jun 07 21:44:20 2016 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-# HG changeset patch
-# Parent 80b6464bd883864fce57e8748010869af1be69e9
-# Parent  808d61f33afa6fb9921d3a7f994a71cf2dd9331a
-
-diff --git a/toolkit/mozapps/installer/package-name.mk b/toolkit/mozapps/installer/package-name.mk
---- a/toolkit/mozapps/installer/package-name.mk
-+++ b/toolkit/mozapps/installer/package-name.mk
-@@ -147,24 +147,24 @@ else
- BUILDID = $(shell $(PYTHON) $(MOZILLA_DIR)/config/printconfigsetting.py $(DIST)/bin/platform.ini Build BuildID)
- endif
- 
- ifndef INCLUDED_RCS_MK
-   USE_RCS_MK := 1
-   include $(MOZILLA_DIR)/config/makefiles/makeutils.mk
- endif
- 
--MOZ_SOURCE_STAMP = $(firstword $(shell hg -R $(MOZILLA_DIR) parent --template="{node}\n" 2>/dev/null))
-+#MOZ_SOURCE_STAMP = $(firstword $(shell hg -R $(MOZILLA_DIR) parent --template="{node}\n" 2>/dev/null))
- 
- ###########################################################################
- # bug: 746277 - preserve existing functionality.
- # MOZILLA_DIR="": cd $(SPACE); hg # succeeds if ~/.hg exists
- ###########################################################################
- ifdef MOZ_INCLUDE_SOURCE_INFO
--MOZ_SOURCE_REPO = $(call getSourceRepo,$(MOZILLA_DIR)$(NULL) $(NULL))
-+#MOZ_SOURCE_REPO = $(call getSourceRepo,$(MOZILLA_DIR)$(NULL) $(NULL))
- endif
- 
- MOZ_SOURCESTAMP_FILE = $(DIST)/$(PKG_PATH)/$(MOZ_INFO_BASENAME).txt
- MOZ_BUILDINFO_FILE = $(DIST)/$(PKG_PATH)/$(MOZ_INFO_BASENAME).json
- MOZ_BUILDID_INFO_TXT_FILE = $(DIST)/$(PKG_PATH)/$(MOZ_INFO_BASENAME)_info.txt
- MOZ_MOZINFO_FILE = $(DIST)/$(PKG_PATH)/$(MOZ_INFO_BASENAME).mozinfo.json
- MOZ_TEST_PACKAGES_FILE = $(DIST)/$(PKG_PATH)/test_packages.json
- MOZ_TEST_PACKAGES_FILE_TC = $(DIST)/$(PKG_PATH)/test_packages_tc.json
--- a/mozilla-shared-nss-db.patch	Tue Jun 07 21:44:20 2016 +0200
+++ b/mozilla-shared-nss-db.patch	Wed Jun 08 13:45:00 2016 +0200
@@ -4,10 +4,10 @@
          (can be disabled by exporting MOZ_XRE_NO_NSSHELPER=1)
 References:
 
-diff --git a/configure.in b/configure.in
---- a/configure.in
-+++ b/configure.in
-@@ -8310,16 +8310,31 @@ if test "$MOZ_ENABLE_SKIA"; then
+diff --git a/old-configure.in b/old-configure.in
+--- a/old-configure.in
++++ b/old-configure.in
+@@ -8187,16 +8187,31 @@ if test "$MOZ_ENABLE_SKIA"; then
      AC_DEFINE(USE_SKIA_GPU)
      AC_SUBST(MOZ_ENABLE_SKIA_GPU)
    fi
@@ -87,7 +87,7 @@
  #include "mozilla/Preferences.h"
  #include "mozilla/PublicSSL.h"
  #include "mozilla/Services.h"
-@@ -1007,17 +1014,31 @@ nsNSSComponent::InitializeNSS()
+@@ -1017,17 +1024,31 @@ nsNSSComponent::InitializeNSS()
        return rv;
      }
    }
@@ -122,22 +122,22 @@
 diff --git a/toolkit/library/moz.build b/toolkit/library/moz.build
 --- a/toolkit/library/moz.build
 +++ b/toolkit/library/moz.build
-@@ -205,16 +205,18 @@ if CONFIG['MOZ_B2G_CAMERA'] and CONFIG['
-         'stagefright_omx',
-     ]
- 
- if CONFIG['OS_ARCH'] == 'Linux' and CONFIG['OS_TARGET'] != 'Android':
+@@ -209,16 +209,18 @@ if CONFIG['OS_ARCH'] == 'Linux' and CONF
      OS_LIBS += [
          'rt',
      ]
  
+ OS_LIBS += CONFIG['MOZ_CAIRO_OSLIBS']
+ OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS']
+ OS_LIBS += CONFIG['MOZ_SERVO_LIBS']
+ 
 +OS_LIBS += sorted(CONFIG['NSSHELPER_LIBS'])
 +
- OS_LIBS += CONFIG['MOZ_CAIRO_OSLIBS']
- OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS']
- 
  if CONFIG['MOZ_NATIVE_JPEG']:
      OS_LIBS += CONFIG['MOZ_JPEG_LIBS']
  
  if CONFIG['MOZ_NATIVE_PNG']:
      OS_LIBS += CONFIG['MOZ_PNG_LIBS']
+ 
+ if CONFIG['MOZ_NATIVE_HUNSPELL']:
+     OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS']
--- a/series	Tue Jun 07 21:44:20 2016 +0200
+++ b/series	Wed Jun 08 13:45:00 2016 +0200
@@ -1,19 +1,18 @@
 # xulrunner/gecko patches
-mozilla-pkgconfig.patch
 mozilla-nongnome-proxies.patch
 mozilla-shared-nss-db.patch
 mozilla-kde.patch
 mozilla-preferences.patch
 mozilla-language.patch
 mozilla-ntlm-full-path.patch
-mozilla-repo.patch
 mozilla-idldir.patch
 mozilla-openaes-decl.patch
 mozilla-no-stdcxx-check.patch
-mozilla-libproxy.patch
 mozilla-reduce-files-per-UnifiedBindings.patch
 mozilla-gtk3_20.patch
 mozilla-check_return.patch
+mozilla-gcc6.patch
+mozilla-exclude-nametablecpp.patch
 
 # Firefox patches
 firefox-kde.patch