summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Mk/Uses/gecko.mk8
-rw-r--r--Mk/bsd.gecko.mk21
-rw-r--r--devel/nspr/pkg-plist4
-rw-r--r--mail/linux-thunderbird/Makefile2
-rw-r--r--mail/linux-thunderbird/distinfo4
-rw-r--r--mail/linux-thunderbird/pkg-plist14
-rw-r--r--mail/thunderbird-i18n/Makefile13
-rw-r--r--mail/thunderbird-i18n/distinfo220
-rw-r--r--mail/thunderbird/Makefile10
-rw-r--r--mail/thunderbird/distinfo4
-rw-r--r--mail/thunderbird/files/patch-bug10217611092
-rw-r--r--mail/thunderbird/files/patch-bug107370918
-rw-r--r--mail/thunderbird/files/patch-bug107698345
-rw-r--r--mail/thunderbird/files/patch-clang34-disable-stdcall13
-rw-r--r--net-im/linux-instantbird/pkg-plist11
-rw-r--r--security/ca_root_nss/Makefile2
-rw-r--r--security/ca_root_nss/distinfo4
-rw-r--r--security/ca_root_nss/pkg-plist3
-rw-r--r--security/nss/Makefile3
-rw-r--r--security/nss/distinfo4
-rw-r--r--security/nss/pkg-plist3
-rw-r--r--www/firefox-esr-i18n/Makefile13
-rw-r--r--www/firefox-esr-i18n/distinfo356
-rw-r--r--www/firefox-esr/Makefile6
-rw-r--r--www/firefox-esr/distinfo4
-rw-r--r--www/firefox-esr/files/patch-bug10217611092
-rw-r--r--www/firefox-esr/files/patch-bug107370918
-rw-r--r--www/firefox-esr/files/patch-bug107698345
-rw-r--r--www/firefox-esr/files/patch-clang34-disable-stdcall13
-rw-r--r--www/firefox-i18n/Makefile13
-rw-r--r--www/firefox-i18n/distinfo356
-rw-r--r--www/firefox/Makefile8
-rw-r--r--www/firefox/distinfo4
-rw-r--r--www/firefox/files/patch-bug101554795
-rw-r--r--www/firefox/files/patch-bug10217611101
-rw-r--r--www/firefox/files/patch-bug104126826
-rw-r--r--www/firefox/files/patch-bug107370918
-rw-r--r--www/firefox/files/patch-bug107698345
-rw-r--r--www/firefox/files/patch-bug77971320
-rw-r--r--www/firefox/files/patch-bug8269855
-rw-r--r--www/firefox/files/patch-bug8475686
-rw-r--r--www/firefox/files/patch-clang34-disable-stdcall13
-rw-r--r--www/firefox/files/patch-system-openh264218
-rw-r--r--www/libxul/Makefile51
-rw-r--r--www/libxul/distinfo4
-rw-r--r--www/libxul/files/patch-bug10136753
-rw-r--r--www/libxul/files/patch-bug101388269
-rw-r--r--www/libxul/files/patch-bug101554711
-rw-r--r--www/libxul/files/patch-bug10217611092
-rw-r--r--www/libxul/files/patch-bug1026828 (renamed from www/firefox/files/patch-bug1026828)0
-rw-r--r--www/libxul/files/patch-bug104138112
-rw-r--r--www/libxul/files/patch-bug104179522
-rw-r--r--www/libxul/files/patch-bug107370918
-rw-r--r--www/libxul/files/patch-bug107698345
-rw-r--r--www/libxul/files/patch-bug70217915
-rw-r--r--www/libxul/files/patch-bug77971335
-rw-r--r--www/libxul/files/patch-bug78346314
-rw-r--r--www/libxul/files/patch-bug803480102
-rw-r--r--www/libxul/files/patch-bug807492628
-rw-r--r--www/libxul/files/patch-bug81071668
-rw-r--r--www/libxul/files/patch-bug82698552
-rw-r--r--www/libxul/files/patch-bug847568 (renamed from www/libxul/files/patch-z-bug847568)93
-rw-r--r--www/libxul/files/patch-bug851992339
-rw-r--r--www/libxul/files/patch-bug87615613
-rw-r--r--www/libxul/files/patch-bug87879111
-rw-r--r--www/libxul/files/patch-bug88618111
-rw-r--r--www/libxul/files/patch-bug889699175
-rw-r--r--www/libxul/files/patch-bug893397201
-rw-r--r--www/libxul/files/patch-bug910875102
-rw-r--r--www/libxul/files/patch-bug91621639
-rw-r--r--www/libxul/files/patch-bug91658935
-rw-r--r--www/libxul/files/patch-bug91817736
-rw-r--r--www/libxul/files/patch-bug93873035
-rw-r--r--www/libxul/files/patch-bug945046130
-rw-r--r--www/libxul/files/patch-bug94656044
-rw-r--r--www/libxul/files/patch-bug9612648
-rw-r--r--www/libxul/files/patch-bug96181648
-rw-r--r--www/libxul/files/patch-bug96234518
-rw-r--r--www/libxul/files/patch-bug97563463
-rw-r--r--www/libxul/files/patch-bug97745727
-rw-r--r--www/libxul/files/patch-bug98134841
-rw-r--r--www/libxul/files/patch-bug98584822
-rw-r--r--www/libxul/files/patch-clang34-disable-stdcall13
-rw-r--r--www/libxul/files/patch-config-baseconfig.mk10
-rw-r--r--www/libxul/files/patch-toolkit_mozapps_installer_packager_mk13
-rw-r--r--www/libxul/files/patch-toolkit_xre_Makefile.in8
-rw-r--r--www/libxul/files/patch-z-bug102682813
-rw-r--r--www/libxul/files/patch-z-bug517422 (renamed from www/libxul/files/patch-zz-bug517422)232
-rw-r--r--www/libxul/files/pkg-deinstall.in28
-rw-r--r--www/libxul/files/pkg-install.in37
-rw-r--r--www/linux-firefox/Makefile2
-rw-r--r--www/linux-firefox/distinfo4
-rw-r--r--www/linux-firefox/pkg-plist18
-rw-r--r--www/linux-seamonkey/Makefile.common11
-rw-r--r--www/xpi-adblock/Makefile.xpi11
95 files changed, 5769 insertions, 3336 deletions
diff --git a/Mk/Uses/gecko.mk b/Mk/Uses/gecko.mk
index 39fe987c7e6f..96fdca0a47ab 100644
--- a/Mk/Uses/gecko.mk
+++ b/Mk/Uses/gecko.mk
@@ -31,18 +31,18 @@ GECKO_CONFING?= ${LOCALBASE}/bin/${GECKO}-config
XPIDL?= ${LOCALBASE}/lib/${GECKO}/xpidl
XPIDL_INCL?= `${GECKO_CONFIG} --idlflags`
-BUILD_DEPENDS+= libxul>=24:${PORTSDIR}/www/libxul
-RUN_DEPENDS+= libxul>=24:${PORTSDIR}/www/libxul
+BUILD_DEPENDS+= libxul>=31:${PORTSDIR}/www/libxul
+RUN_DEPENDS+= libxul>=31:${PORTSDIR}/www/libxul
.elif ${gecko_ARGS:Mfirefox}
_GECKO_DEFAULT_VERSION= 31
-_GECKO_VERSIONS= 31 32
+_GECKO_VERSIONS= 31 33
_GECKO_TYPE= firefox
# Dependence lines for different Firefox versions
31_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox-esr
-32_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox
+33_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox
.if exists(${LOCALBASE}/bin/firefox)
_GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/firefox --version 2>/dev/null
diff --git a/Mk/bsd.gecko.mk b/Mk/bsd.gecko.mk
index b4eaa6ae506d..d9e7b0464e00 100644
--- a/Mk/bsd.gecko.mk
+++ b/Mk/bsd.gecko.mk
@@ -94,7 +94,6 @@ USE_XORG= xext xrender xt
MOZILLA_SUFX?= none
MOZSRC?= ${WRKSRC}
WRKSRC?= ${WRKDIR}/mozilla
-PLISTD?= ${WRKDIR}/plist_dirs
PLISTF?= ${WRKDIR}/plist_files
MOZ_PIS_DIR?= lib/${MOZILLA}/init.d
@@ -254,11 +253,7 @@ MOZ_TOOLKIT= cairo-gtk3
USE_MOZILLA+= -cairo # ports/169343
USE_DISPLAY=yes # install
USE_GNOME+= pango
-. if ${MOZILLA_VER:R:R} >= 30 || ${MOZILLA} == "seamonkey"
USE_QT5+= qmake_build buildtools_build gui network quick printsupport
-. else
-USE_QT4+= qmake_build moc_build rcc_build gui network opengl
-. endif
MOZ_EXPORT+= HOST_QMAKE="${QMAKE}" HOST_MOC="${MOC}" HOST_RCC="${RCC}"
.elif ${MOZ_TOOLKIT:Mcairo-gtk3}
USE_GNOME+= gtk30
@@ -287,13 +282,8 @@ MOZ_OPTIONS+= --disable-dbus --disable-libnotify
.endif
.if ${PORT_OPTIONS:MGSTREAMER}
-. if ${MOZILLA_VER:R:R} >= 30 || ${MOZILLA} == "seamonkey"
USE_GSTREAMER1?=good libav
MOZ_OPTIONS+= --enable-gstreamer=1.0
-. else
-USE_GSTREAMER?= good ffmpeg
-MOZ_OPTIONS+= --enable-gstreamer
-. endif
.else
MOZ_OPTIONS+= --disable-gstreamer
.endif
@@ -337,7 +327,7 @@ MOZ_OPTIONS+= --disable-libproxy
.endif
.if ${PORT_OPTIONS:MPGO}
-USE_GCC?= yes
+USES:= compiler:gcc-c++11-lib ${USES:Ncompiler*c++11*}
USE_DISPLAY=yes
.undef GNU_CONFIGURE
@@ -449,7 +439,7 @@ LIBS+= -lcxxrt
. endif
. endif
.elif ${ARCH:Mpowerpc*}
-USE_GCC?= yes
+USES:= compiler:gcc-c++11-lib ${USES:Ncompiler*c++11*}
CFLAGS+= -D__STDC_CONSTANT_MACROS
. if ${ARCH} == "powerpc64"
MOZ_EXPORT+= UNAME_m="${ARCH}"
@@ -600,15 +590,12 @@ port-post-install:
gecko-create-plist:
# Create the plist
- ${RM} -f ${PLISTF} ${PLISTD}
+ ${RM} -f ${PLISTF}
.for dir in ${MOZILLA_PLIST_DIRS}
@cd ${STAGEDIR}${PREFIX}/${dir} && ${FIND} -H -s * ! -type d | \
- ${SED} -e 's|^|${dir}/|' >> ${PLISTF} && \
- ${FIND} -d * -type d | \
- ${SED} -e 's|^|@dirrm ${dir}/|' >> ${PLISTD}
+ ${SED} -e 's|^|${dir}/|' >> ${PLISTF}
.endfor
${CAT} ${PLISTF} | ${SORT} >> ${TMPPLIST}
- ${CAT} ${PLISTD} | ${SORT} -r >> ${TMPPLIST}
gecko-moz-pis-pre-install:
.if defined(MOZ_PIS_SCRIPTS)
diff --git a/devel/nspr/pkg-plist b/devel/nspr/pkg-plist
index d46c85864d56..27efd70e878c 100644
--- a/devel/nspr/pkg-plist
+++ b/devel/nspr/pkg-plist
@@ -90,7 +90,3 @@ lib/libplds4.a
lib/libplds4.so
lib/libplds4.so.1
libdata/pkgconfig/nspr.pc
-@dirrm include/nspr/private
-@dirrm include/nspr/obsolete
-@dirrm include/nspr/md
-@dirrm include/nspr
diff --git a/mail/linux-thunderbird/Makefile b/mail/linux-thunderbird/Makefile
index 61ac401e2f9e..9e93133f6064 100644
--- a/mail/linux-thunderbird/Makefile
+++ b/mail/linux-thunderbird/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= thunderbird
-DISTVERSION= 31.1.2
+DISTVERSION= 31.2.0
CATEGORIES= mail news net-im ipv6
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US
diff --git a/mail/linux-thunderbird/distinfo b/mail/linux-thunderbird/distinfo
index 5b21bfb83982..cd6b5336f427 100644
--- a/mail/linux-thunderbird/distinfo
+++ b/mail/linux-thunderbird/distinfo
@@ -1,5 +1,5 @@
-SHA256 (thunderbird-31.1.2.tar.bz2) = 9209fa7bdada6245717dbfaf517d68cef04719812504bc0c988def6adc7baab5
-SIZE (thunderbird-31.1.2.tar.bz2) = 33552961
+SHA256 (thunderbird-31.2.0.tar.bz2) = 4c4da90f383d7b43e97e471656a6cfbbd44d1b80d57b8b2405497678aced46b5
+SIZE (thunderbird-31.2.0.tar.bz2) = 33559450
SHA256 (glib2-2.22.2-2.fc12.i686.rpm) = e3b459c245ec14e7248e9de4b506963a4773407f3e58835db5070d0ed02ecc99
SIZE (glib2-2.22.2-2.fc12.i686.rpm) = 1162908
SHA256 (gtk2-2.18.3-19.fc12.i686.rpm) = aea9cf7ffe9c8dae0faa2bf3d2aa1b2117c55dce03da72dcce8c268279ec0a4b
diff --git a/mail/linux-thunderbird/pkg-plist b/mail/linux-thunderbird/pkg-plist
index edf841303cac..0a609912cd98 100644
--- a/mail/linux-thunderbird/pkg-plist
+++ b/mail/linux-thunderbird/pkg-plist
@@ -78,17 +78,3 @@ lib/%%APP_NAME%%/updater
lib/%%APP_NAME%%/updater.ini
@exec /bin/cp -R %%LOCALBASE%%/lib/xpi/symlinks/%%APP_NAME%%/ %D/lib/%%APP_NAME%%/extensions/ 2>/dev/null || true
@unexec /usr/bin/find %D/lib/%%APP_NAME%%/extensions/ -depth 1 -type l -delete 2>/dev/null || true
-@dirrm lib/%%APP_NAME%%/chrome/icons/default
-@dirrm lib/%%APP_NAME%%/chrome/icons
-@dirrm lib/%%APP_NAME%%/chrome
-@dirrm lib/%%APP_NAME%%/components
-@dirrm lib/%%APP_NAME%%/defaults/messenger
-@dirrm lib/%%APP_NAME%%/defaults/pref
-@dirrm lib/%%APP_NAME%%/defaults
-@dirrm lib/%%APP_NAME%%/dictionaries
-@dirrm lib/%%APP_NAME%%/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
-@dirrm lib/%%APP_NAME%%/extensions
-@dirrm lib/%%APP_NAME%%/icons
-@dirrm lib/%%APP_NAME%%/isp
-@dirrm lib/%%APP_NAME%%/searchplugins
-@dirrm lib/%%APP_NAME%%
diff --git a/mail/thunderbird-i18n/Makefile b/mail/thunderbird-i18n/Makefile
index 33cae5f85072..11dd8bcc67ec 100644
--- a/mail/thunderbird-i18n/Makefile
+++ b/mail/thunderbird-i18n/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= thunderbird-i18n
-PORTVERSION= 31.1.2
+PORTVERSION= 31.2.0
CATEGORIES= mail news net-im
MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${PORTVERSION}/linux-i686/xpi
PKGNAMEPREFIX=
@@ -12,7 +12,7 @@ DIST_SUBDIR= xpi/${DISTNAME}
MAINTAINER= gecko@FreeBSD.org
COMMENT= Localized interface for Thunderbird
-USES= gecko:thunderbird zip
+USES= gecko:thunderbird,build zip
USE_XPI= thunderbird
NO_BUILD= yes
@@ -24,15 +24,11 @@ WDIR= langpack-*@thunderbird.mozilla.org
XPI_DISTNAMES= ${THUNDERBIRD_I18N_}
PLIST?= ${WRKDIR}/plist
-PLISTD?= ${WRKDIR}/plist_dirs
PLISTF?= ${WRKDIR}/plist_files
.include "${.CURDIR}/Makefile.option"
.include <bsd.port.pre.mk>
-# make sure that thunderbird always gets upgraded before this port
-BUILD_DEPENDS= thunderbird>=0:${PORTSDIR}/mail/thunderbird
-
.ifndef WITHOUT_SWITCHER
RUN_DEPENDS+= xpi-quick-locale-switcher>=0:${PORTSDIR}/www/xpi-quick-locale-switcher
.endif
@@ -55,12 +51,9 @@ do-extract:
fi; \
cd ${WRKSRC}/langpack-$$lang@thunderbird.mozilla.org/; \
${FIND} -H -s * ! -type d | \
- ${SED} -e "s|^|lib/xpi/langpack-$$lang@thunderbird.mozilla.org/|" >> ${PLISTF} && \
- ${FIND} -d * -type d | \
- ${SED} -e "s|^|@dirrm lib/xpi/langpack-$$lang@thunderbird.mozilla.org/|" >> ${PLISTD}; \
+ ${SED} -e "s|^|lib/xpi/langpack-$$lang@thunderbird.mozilla.org/|" >> ${PLISTF}; \
done
${CAT} ${PLISTF} | ${SORT} >> ${PLIST}
- ${CAT} ${PLISTD} | ${SORT} -r >> ${PLIST}
do-install:
diff --git a/mail/thunderbird-i18n/distinfo b/mail/thunderbird-i18n/distinfo
index 4933adb11fa7..094926733cba 100644
--- a/mail/thunderbird-i18n/distinfo
+++ b/mail/thunderbird-i18n/distinfo
@@ -1,110 +1,110 @@
-SHA256 (xpi/thunderbird-i18n-31.1.2/ar.xpi) = d7f7f5fa42bc7dbeeb67ea312cd1390f9daf38cf22db2d29acebcd1d3e74d1fa
-SIZE (xpi/thunderbird-i18n-31.1.2/ar.xpi) = 472810
-SHA256 (xpi/thunderbird-i18n-31.1.2/ast.xpi) = 635422fbc96177f43cb01c292a3b0a06ceb3040355d00880a6ddeffb4dcfeb4a
-SIZE (xpi/thunderbird-i18n-31.1.2/ast.xpi) = 393048
-SHA256 (xpi/thunderbird-i18n-31.1.2/be.xpi) = a8a48f464b3a44a5724096995431606b740af3247bb325f47a63c065f626c1d7
-SIZE (xpi/thunderbird-i18n-31.1.2/be.xpi) = 427488
-SHA256 (xpi/thunderbird-i18n-31.1.2/bg.xpi) = e5dd2c1c5a97cc90514a1d0e0852e8579e625d689964b198036a6ac6f33e446c
-SIZE (xpi/thunderbird-i18n-31.1.2/bg.xpi) = 493735
-SHA256 (xpi/thunderbird-i18n-31.1.2/bn-BD.xpi) = 461fac71d5d8a3910d68740def12b2235374b39f5cfa01ab912021e295cbd3c2
-SIZE (xpi/thunderbird-i18n-31.1.2/bn-BD.xpi) = 555612
-SHA256 (xpi/thunderbird-i18n-31.1.2/br.xpi) = 3c1d248c517de97d559a85f127e6871afd1a8c245cb4999be80626a258bdbb49
-SIZE (xpi/thunderbird-i18n-31.1.2/br.xpi) = 441444
-SHA256 (xpi/thunderbird-i18n-31.1.2/ca.xpi) = fff999721e7b388880a7a9c64d73add479e2a2f9e447b8d4e506a318efde9069
-SIZE (xpi/thunderbird-i18n-31.1.2/ca.xpi) = 441712
-SHA256 (xpi/thunderbird-i18n-31.1.2/cs.xpi) = 40c16d650c2f48ea945daca989f24cc293343794c45c5cde3f7ffe1305b8f159
-SIZE (xpi/thunderbird-i18n-31.1.2/cs.xpi) = 444701
-SHA256 (xpi/thunderbird-i18n-31.1.2/da.xpi) = fdfd890e09e23004cc1ba4c0df38648cd74f1c8d9d8d336c15a2aee8f75d98fc
-SIZE (xpi/thunderbird-i18n-31.1.2/da.xpi) = 422052
-SHA256 (xpi/thunderbird-i18n-31.1.2/de.xpi) = da60f2a84ca8cb6b4e15393046ae43adac368dac35327f04bf89d31e8e0f829e
-SIZE (xpi/thunderbird-i18n-31.1.2/de.xpi) = 424665
-SHA256 (xpi/thunderbird-i18n-31.1.2/el.xpi) = 975fdb6134fe5436d0459eb89dc6e8ae3d8829f2b8f7b5a3387011215184cef5
-SIZE (xpi/thunderbird-i18n-31.1.2/el.xpi) = 484855
-SHA256 (xpi/thunderbird-i18n-31.1.2/en-GB.xpi) = 87ac86fac2b341286e9789c1037404588813bb858e9cd718f7de5e401ddade6e
-SIZE (xpi/thunderbird-i18n-31.1.2/en-GB.xpi) = 412515
-SHA256 (xpi/thunderbird-i18n-31.1.2/en-US.xpi) = f96739de83f760ee65727e9a68ad59e13cc60d2272b6a03bc80b5153fa0a365a
-SIZE (xpi/thunderbird-i18n-31.1.2/en-US.xpi) = 413660
-SHA256 (xpi/thunderbird-i18n-31.1.2/es-AR.xpi) = d50ef569c6f74ceac8d9eb128cd98c3b2bb0af4853d1bf7a26265d5f31a8d452
-SIZE (xpi/thunderbird-i18n-31.1.2/es-AR.xpi) = 438530
-SHA256 (xpi/thunderbird-i18n-31.1.2/es-ES.xpi) = 6a9ec42a0f90b1d59fb61e47e533b5c79df41e13d8452d2fba5e5a649527cffe
-SIZE (xpi/thunderbird-i18n-31.1.2/es-ES.xpi) = 374979
-SHA256 (xpi/thunderbird-i18n-31.1.2/et.xpi) = 7763519e3c74f37afa026a8fe7214a2b99e9d0f86391031eaa66869e3ef74870
-SIZE (xpi/thunderbird-i18n-31.1.2/et.xpi) = 434364
-SHA256 (xpi/thunderbird-i18n-31.1.2/eu.xpi) = 233ce00a457754f2454f26e618cc01f1736671a717a96b63cc7bea3d72193172
-SIZE (xpi/thunderbird-i18n-31.1.2/eu.xpi) = 431448
-SHA256 (xpi/thunderbird-i18n-31.1.2/fi.xpi) = 833ce0403ed46f87cb2730d2a0a4f3cdaa383295f84e7beeb90d6e48b2a0ddf7
-SIZE (xpi/thunderbird-i18n-31.1.2/fi.xpi) = 435632
-SHA256 (xpi/thunderbird-i18n-31.1.2/fr.xpi) = daf99b99c3fa73679801750bfbd33ac007edc05621ad663e4e26ddfee17b5dd2
-SIZE (xpi/thunderbird-i18n-31.1.2/fr.xpi) = 444143
-SHA256 (xpi/thunderbird-i18n-31.1.2/fy-NL.xpi) = f775a2236591a18d84fcf36e5b5a5d1bb8a5864b91faa29c2b39e0bee599ff0e
-SIZE (xpi/thunderbird-i18n-31.1.2/fy-NL.xpi) = 438544
-SHA256 (xpi/thunderbird-i18n-31.1.2/ga-IE.xpi) = 6eed7b3ac1e4f9ac89b138041c2a10d7fae0ef5492035397bfafe771952526db
-SIZE (xpi/thunderbird-i18n-31.1.2/ga-IE.xpi) = 449361
-SHA256 (xpi/thunderbird-i18n-31.1.2/gd.xpi) = 0576fb35d74a20624581b4fe53ef916032e77e3c7bfd9a7b86fdf687a413c923
-SIZE (xpi/thunderbird-i18n-31.1.2/gd.xpi) = 453171
-SHA256 (xpi/thunderbird-i18n-31.1.2/gl.xpi) = 274c45fe7bffe038a9c846359e99847193672e7c4dcec4c47e65720a8d16e3c0
-SIZE (xpi/thunderbird-i18n-31.1.2/gl.xpi) = 446787
-SHA256 (xpi/thunderbird-i18n-31.1.2/he.xpi) = 784505dd220387ff2b569118380957882feabf61366a9cde1e794e4fc08414f7
-SIZE (xpi/thunderbird-i18n-31.1.2/he.xpi) = 476111
-SHA256 (xpi/thunderbird-i18n-31.1.2/hr.xpi) = 4908835dafeb9bef43f4fa294f254bcd64c611c40f1aa35716730f179a3af554
-SIZE (xpi/thunderbird-i18n-31.1.2/hr.xpi) = 436982
-SHA256 (xpi/thunderbird-i18n-31.1.2/hu.xpi) = 210f50f948c726744ffdfa33cdb1fd9f4434698bd6c131257984f2e2cdcc1ecc
-SIZE (xpi/thunderbird-i18n-31.1.2/hu.xpi) = 454541
-SHA256 (xpi/thunderbird-i18n-31.1.2/hy-AM.xpi) = 8acd553aacfdf9f4ed66fdd50454f473146fa1762309ff48104a941e62cff995
-SIZE (xpi/thunderbird-i18n-31.1.2/hy-AM.xpi) = 492767
-SHA256 (xpi/thunderbird-i18n-31.1.2/id.xpi) = 8388260bdb9d7d715e7cfdfe21826e5d390bcb1f48d1e649d82d0142f360d42d
-SIZE (xpi/thunderbird-i18n-31.1.2/id.xpi) = 475875
-SHA256 (xpi/thunderbird-i18n-31.1.2/is.xpi) = cebe06ca5e72448ffe8e5d97c61b2be3a898b1ceb9726f9a0bfa7cec714f8eb2
-SIZE (xpi/thunderbird-i18n-31.1.2/is.xpi) = 437959
-SHA256 (xpi/thunderbird-i18n-31.1.2/it.xpi) = d5bab57141fbae37f3a983ed85983d91fff71f005da1dcf89682563c92baf3f3
-SIZE (xpi/thunderbird-i18n-31.1.2/it.xpi) = 368000
-SHA256 (xpi/thunderbird-i18n-31.1.2/ja.xpi) = 06a62d4ef79c2a7006b15fae6882b7919b10843c2b93cd23decf9e4d07151555
-SIZE (xpi/thunderbird-i18n-31.1.2/ja.xpi) = 489267
-SHA256 (xpi/thunderbird-i18n-31.1.2/ko.xpi) = fb40e186e31bc836a8f18be6df4dc654b793a782f1b79f4b143ff3830781dca2
-SIZE (xpi/thunderbird-i18n-31.1.2/ko.xpi) = 448920
-SHA256 (xpi/thunderbird-i18n-31.1.2/lt.xpi) = 80dc6b4ba4fef803776e3634682cded4ae4df1a35771d30ed0c2a1f4af6a6e30
-SIZE (xpi/thunderbird-i18n-31.1.2/lt.xpi) = 457812
-SHA256 (xpi/thunderbird-i18n-31.1.2/nb-NO.xpi) = be32cfc7192a3836f48c11022ec58d28091f568f1bf2fc25e1d7667ac6222603
-SIZE (xpi/thunderbird-i18n-31.1.2/nb-NO.xpi) = 430941
-SHA256 (xpi/thunderbird-i18n-31.1.2/nl.xpi) = 0607fe516735fea3763154f63bc2212f1b76ea3cfae26f1748e7d3f05b5a1301
-SIZE (xpi/thunderbird-i18n-31.1.2/nl.xpi) = 431887
-SHA256 (xpi/thunderbird-i18n-31.1.2/nn-NO.xpi) = 31782ee5743442de756d7eb6dc601ec5843af0d6f45254f946fedca23dfbf9f5
-SIZE (xpi/thunderbird-i18n-31.1.2/nn-NO.xpi) = 433198
-SHA256 (xpi/thunderbird-i18n-31.1.2/pa-IN.xpi) = 4f3849fb31c8fe4f65869b35595621df22d2491d08df259d9fdb14ee89b9df04
-SIZE (xpi/thunderbird-i18n-31.1.2/pa-IN.xpi) = 525323
-SHA256 (xpi/thunderbird-i18n-31.1.2/pl.xpi) = ea31936122f377d83c6d059435c28c3e990cadd6d1332d97ac3a7bb196ad085b
-SIZE (xpi/thunderbird-i18n-31.1.2/pl.xpi) = 410872
-SHA256 (xpi/thunderbird-i18n-31.1.2/pt-BR.xpi) = 74501df72d4747944fafafde1fedf2214c86c4f4ba594d276f5efec437f14a28
-SIZE (xpi/thunderbird-i18n-31.1.2/pt-BR.xpi) = 450477
-SHA256 (xpi/thunderbird-i18n-31.1.2/pt-PT.xpi) = 43f0d1a2a6187e3f01e75c091c599341b0895e71e3c76b7e6cd040fd95d69482
-SIZE (xpi/thunderbird-i18n-31.1.2/pt-PT.xpi) = 439603
-SHA256 (xpi/thunderbird-i18n-31.1.2/rm.xpi) = 5c8c153c5f36e7237605fcbaa2d66df0e72b7c6a20f793b9113c3e16c87240b8
-SIZE (xpi/thunderbird-i18n-31.1.2/rm.xpi) = 439185
-SHA256 (xpi/thunderbird-i18n-31.1.2/ro.xpi) = 381a1f57aa7e3646dcd29aa28eec1bd951cff1e378d5fe795a5e87556fd286ae
-SIZE (xpi/thunderbird-i18n-31.1.2/ro.xpi) = 479746
-SHA256 (xpi/thunderbird-i18n-31.1.2/ru.xpi) = 667ffecf4065352a0e6b32ed5d4535dc9758167cb431b01b13bac9d4027719e5
-SIZE (xpi/thunderbird-i18n-31.1.2/ru.xpi) = 436156
-SHA256 (xpi/thunderbird-i18n-31.1.2/si.xpi) = 5bb7054dc79e73852f39464b3cabeb28ef45dd814a2fbef699fd8ac0d28cfa15
-SIZE (xpi/thunderbird-i18n-31.1.2/si.xpi) = 528812
-SHA256 (xpi/thunderbird-i18n-31.1.2/sk.xpi) = e8f13c479e58e7858ef82864927bb48d013d3f1b7c04b26b525504cb475ba02e
-SIZE (xpi/thunderbird-i18n-31.1.2/sk.xpi) = 452995
-SHA256 (xpi/thunderbird-i18n-31.1.2/sl.xpi) = 4e2c3392ae516d34f2568a6de607e86e641eda8e1dd211420ab9c569354757b2
-SIZE (xpi/thunderbird-i18n-31.1.2/sl.xpi) = 433874
-SHA256 (xpi/thunderbird-i18n-31.1.2/sq.xpi) = f38d505b006a209c28fbe2497e2840b1402f15659ab8850b96e401b37439aa43
-SIZE (xpi/thunderbird-i18n-31.1.2/sq.xpi) = 454695
-SHA256 (xpi/thunderbird-i18n-31.1.2/sr.xpi) = 0ea7ab963f7316a8c99c4ede0d2604532b8e9c640d1c1ad17b5aef52410efb6a
-SIZE (xpi/thunderbird-i18n-31.1.2/sr.xpi) = 537335
-SHA256 (xpi/thunderbird-i18n-31.1.2/sv-SE.xpi) = c2be7fa0cc149411afa6cd697fc5f9c5db8e8dc94eb361e9005a7c85207812ad
-SIZE (xpi/thunderbird-i18n-31.1.2/sv-SE.xpi) = 436105
-SHA256 (xpi/thunderbird-i18n-31.1.2/ta-LK.xpi) = 2990c01eccc33ba92e4bd4a5b6bc6a862a3d4ba038187193862aee20590f222f
-SIZE (xpi/thunderbird-i18n-31.1.2/ta-LK.xpi) = 553508
-SHA256 (xpi/thunderbird-i18n-31.1.2/tr.xpi) = 7c28f5337d0f5265ffc264e06b7f18b733358ba040d36cccc14586e4b2b212d5
-SIZE (xpi/thunderbird-i18n-31.1.2/tr.xpi) = 457359
-SHA256 (xpi/thunderbird-i18n-31.1.2/uk.xpi) = 711e037fe115f63b560e59ca33f26fe89b021587d3ade4706df0fe5c4822af16
-SIZE (xpi/thunderbird-i18n-31.1.2/uk.xpi) = 499656
-SHA256 (xpi/thunderbird-i18n-31.1.2/vi.xpi) = 9889f4d9ebf9d298b7a5076879bf34e71dd00665a6be69ff2331df49fdc0b620
-SIZE (xpi/thunderbird-i18n-31.1.2/vi.xpi) = 513834
-SHA256 (xpi/thunderbird-i18n-31.1.2/zh-CN.xpi) = b29c35c9b4de9678f8f15d5910b23b842553b80763f41f2340e823a03b44700e
-SIZE (xpi/thunderbird-i18n-31.1.2/zh-CN.xpi) = 462667
-SHA256 (xpi/thunderbird-i18n-31.1.2/zh-TW.xpi) = 9c76eae686d8a72ceb11a24ad155521aa02ee65ade6a068a4dfe6df5f7ba4698
-SIZE (xpi/thunderbird-i18n-31.1.2/zh-TW.xpi) = 463408
+SHA256 (xpi/thunderbird-i18n-31.2.0/ar.xpi) = de2222b5edbe334c323086d2f4742b3d89abf53ea9d04e7b145b56e06203490a
+SIZE (xpi/thunderbird-i18n-31.2.0/ar.xpi) = 472812
+SHA256 (xpi/thunderbird-i18n-31.2.0/ast.xpi) = 5d8a3d7cf8a8777595d9427f9ef9fa50af9e42d3c02fb0eaf23bc98ee5fc673d
+SIZE (xpi/thunderbird-i18n-31.2.0/ast.xpi) = 393049
+SHA256 (xpi/thunderbird-i18n-31.2.0/be.xpi) = f8228331079c95d98aff60c49039b41bc494c10074b19d92850d0abc88b94da2
+SIZE (xpi/thunderbird-i18n-31.2.0/be.xpi) = 427488
+SHA256 (xpi/thunderbird-i18n-31.2.0/bg.xpi) = 4c7ec26c111e810476f8308a2b65c1fd754c9a970eec04440a186cab9487dd5b
+SIZE (xpi/thunderbird-i18n-31.2.0/bg.xpi) = 493734
+SHA256 (xpi/thunderbird-i18n-31.2.0/bn-BD.xpi) = 41cd06883895d4813f140aeb2c9592ded5c1971e035373a79ff9484dc731e8de
+SIZE (xpi/thunderbird-i18n-31.2.0/bn-BD.xpi) = 555613
+SHA256 (xpi/thunderbird-i18n-31.2.0/br.xpi) = a4fbe64d4b4e2c4a0c92a1679459b774b6f19838203661c97bfdd4bd132e0918
+SIZE (xpi/thunderbird-i18n-31.2.0/br.xpi) = 441444
+SHA256 (xpi/thunderbird-i18n-31.2.0/ca.xpi) = ff37b69e48d8fe429a981bce805cf6470f21ccfb9718762aa49fbe16246e0e6a
+SIZE (xpi/thunderbird-i18n-31.2.0/ca.xpi) = 441713
+SHA256 (xpi/thunderbird-i18n-31.2.0/cs.xpi) = 11c4d4d9aa51b4db454ea0aa3164d62ed17c6b108be18b28bf2eacf626546737
+SIZE (xpi/thunderbird-i18n-31.2.0/cs.xpi) = 444701
+SHA256 (xpi/thunderbird-i18n-31.2.0/da.xpi) = c11a949b9e20375542b72dfd631091db3ae29040cf32f15cf661c141b72d9503
+SIZE (xpi/thunderbird-i18n-31.2.0/da.xpi) = 422051
+SHA256 (xpi/thunderbird-i18n-31.2.0/de.xpi) = c5a529579a4884a9efd7dade99fda51fb17f1918e68439719c4d4cb9f303d908
+SIZE (xpi/thunderbird-i18n-31.2.0/de.xpi) = 424665
+SHA256 (xpi/thunderbird-i18n-31.2.0/el.xpi) = 3a60bd9b6d3806794ae7a45f5ed51ddaed0cc7d3d4eefb32e1a048e92e3bd617
+SIZE (xpi/thunderbird-i18n-31.2.0/el.xpi) = 484855
+SHA256 (xpi/thunderbird-i18n-31.2.0/en-GB.xpi) = 2d96c8962746fe12c42d6d161d0993c317344b6ce236689a33554f432832922b
+SIZE (xpi/thunderbird-i18n-31.2.0/en-GB.xpi) = 412515
+SHA256 (xpi/thunderbird-i18n-31.2.0/en-US.xpi) = b3ce584db1780e96d42284945d5accde989ee747bbe5d56fa26df500a4f8655d
+SIZE (xpi/thunderbird-i18n-31.2.0/en-US.xpi) = 413660
+SHA256 (xpi/thunderbird-i18n-31.2.0/es-AR.xpi) = 24b5ce7d75676056103ae24c589b19e707c94ad1e79dc5cb8d9aa85abeef40a2
+SIZE (xpi/thunderbird-i18n-31.2.0/es-AR.xpi) = 438531
+SHA256 (xpi/thunderbird-i18n-31.2.0/es-ES.xpi) = 2d879a455caac1fb21cf7f4cbedd0a685e8a13c4048d9182c0027ee7b947f398
+SIZE (xpi/thunderbird-i18n-31.2.0/es-ES.xpi) = 374979
+SHA256 (xpi/thunderbird-i18n-31.2.0/et.xpi) = 1f7a2196700782542290c7c28d0da7c6f9e958f8ff9c2e00318c4bfe4fa26f97
+SIZE (xpi/thunderbird-i18n-31.2.0/et.xpi) = 434364
+SHA256 (xpi/thunderbird-i18n-31.2.0/eu.xpi) = 006bc0dad91e8ed9d5b1b0b812171a147bc34fb5b8159f5b990a14b34e426941
+SIZE (xpi/thunderbird-i18n-31.2.0/eu.xpi) = 431448
+SHA256 (xpi/thunderbird-i18n-31.2.0/fi.xpi) = 0ee12f069f1ca5e36873b5ed7ddf42539358dbee321dd2c60c9d86c0b099ad87
+SIZE (xpi/thunderbird-i18n-31.2.0/fi.xpi) = 435632
+SHA256 (xpi/thunderbird-i18n-31.2.0/fr.xpi) = db6cc05b0c2ba94130cf065e4ee9c0440c5583bed557e46453a1cbc0df3c2cb4
+SIZE (xpi/thunderbird-i18n-31.2.0/fr.xpi) = 444144
+SHA256 (xpi/thunderbird-i18n-31.2.0/fy-NL.xpi) = 041ade3e98acdcb4ef5589aea49c9c8cd49730fd117d7fc0f45c4a24db9235d9
+SIZE (xpi/thunderbird-i18n-31.2.0/fy-NL.xpi) = 438545
+SHA256 (xpi/thunderbird-i18n-31.2.0/ga-IE.xpi) = f25ca1b71b9ab326a08a74492de3bf7ab276751e79ac3bba97e017b6d63b35a0
+SIZE (xpi/thunderbird-i18n-31.2.0/ga-IE.xpi) = 449362
+SHA256 (xpi/thunderbird-i18n-31.2.0/gd.xpi) = f520c4ffff9903ae8277f59c90e3d0a8f7c3dbdfcf08f7a09eed5e52be28ab75
+SIZE (xpi/thunderbird-i18n-31.2.0/gd.xpi) = 453171
+SHA256 (xpi/thunderbird-i18n-31.2.0/gl.xpi) = 49e151a0e9fb797534095177a36c8323f4b21af7c3b0cd119cddb5c8c3991a38
+SIZE (xpi/thunderbird-i18n-31.2.0/gl.xpi) = 446788
+SHA256 (xpi/thunderbird-i18n-31.2.0/he.xpi) = db3ec6a406074229b5d470147ed18c195d1c83ff002c9c6692e5a974fce68109
+SIZE (xpi/thunderbird-i18n-31.2.0/he.xpi) = 476111
+SHA256 (xpi/thunderbird-i18n-31.2.0/hr.xpi) = a79194cb6a188515b02591bb4d10aab2f0a4f51ad7d9de880e5f97b0d824b6bb
+SIZE (xpi/thunderbird-i18n-31.2.0/hr.xpi) = 436980
+SHA256 (xpi/thunderbird-i18n-31.2.0/hu.xpi) = 57ee1d724aed1a7afc67fcc58905f74c2d5694602ccc54218266a608611e90b8
+SIZE (xpi/thunderbird-i18n-31.2.0/hu.xpi) = 454542
+SHA256 (xpi/thunderbird-i18n-31.2.0/hy-AM.xpi) = 2626af0ff4cd8023c599abb158a5f61e4e507112f1c7ccf470bef16896a3224c
+SIZE (xpi/thunderbird-i18n-31.2.0/hy-AM.xpi) = 492765
+SHA256 (xpi/thunderbird-i18n-31.2.0/id.xpi) = a053c4935b4088c8fbb0850a73b4177ae854462f8ad37d130581879969fad498
+SIZE (xpi/thunderbird-i18n-31.2.0/id.xpi) = 475876
+SHA256 (xpi/thunderbird-i18n-31.2.0/is.xpi) = 63a39a88a75fabc271e09f8a8bed08388a1c3aa1fbb6b8a3e2946f7ba3ba008d
+SIZE (xpi/thunderbird-i18n-31.2.0/is.xpi) = 437959
+SHA256 (xpi/thunderbird-i18n-31.2.0/it.xpi) = b7a9c9454d038bda5138bbf73c30af650d79aa5de017c3d4eefd039cbfa6ca27
+SIZE (xpi/thunderbird-i18n-31.2.0/it.xpi) = 368001
+SHA256 (xpi/thunderbird-i18n-31.2.0/ja.xpi) = 128c6413771d621a80840f26d9248f52ca6d16456e032f2f754058dca233eab3
+SIZE (xpi/thunderbird-i18n-31.2.0/ja.xpi) = 489267
+SHA256 (xpi/thunderbird-i18n-31.2.0/ko.xpi) = 949d6bbc2c35c4fa2751a4efdd21d253f60c30e7ff975fd4b5806d89d1737a3c
+SIZE (xpi/thunderbird-i18n-31.2.0/ko.xpi) = 448920
+SHA256 (xpi/thunderbird-i18n-31.2.0/lt.xpi) = c6eb3433657dab7ebb01cbb86d0024aa49598a4fca61f500ed9e44c4e74fdc95
+SIZE (xpi/thunderbird-i18n-31.2.0/lt.xpi) = 456351
+SHA256 (xpi/thunderbird-i18n-31.2.0/nb-NO.xpi) = 2779fff656aaebaa852aa79c0685a801159a5d5b296bc239a871e0ca3b77558f
+SIZE (xpi/thunderbird-i18n-31.2.0/nb-NO.xpi) = 430941
+SHA256 (xpi/thunderbird-i18n-31.2.0/nl.xpi) = 21da7b7403d3c3746ff560a541dc87fdce9537fd14bfaee3904e936c426d4400
+SIZE (xpi/thunderbird-i18n-31.2.0/nl.xpi) = 431888
+SHA256 (xpi/thunderbird-i18n-31.2.0/nn-NO.xpi) = c79700f36907cde8d2a5788b121a7d0118f8b2471c72eda8f6aaf41f6049293b
+SIZE (xpi/thunderbird-i18n-31.2.0/nn-NO.xpi) = 433198
+SHA256 (xpi/thunderbird-i18n-31.2.0/pa-IN.xpi) = 899c8f1dc900280a44869bd5c4be649f30186c361b717a9e996d269c744fce7e
+SIZE (xpi/thunderbird-i18n-31.2.0/pa-IN.xpi) = 525323
+SHA256 (xpi/thunderbird-i18n-31.2.0/pl.xpi) = 489f30d45340cc7fdfc3a84d7459f464404ad5abd4cc72d4091c1e1c167f2533
+SIZE (xpi/thunderbird-i18n-31.2.0/pl.xpi) = 410872
+SHA256 (xpi/thunderbird-i18n-31.2.0/pt-BR.xpi) = 2459b15a8277d9c636f7380201f9636a98f7be66e695567bb545af21bed3f581
+SIZE (xpi/thunderbird-i18n-31.2.0/pt-BR.xpi) = 450477
+SHA256 (xpi/thunderbird-i18n-31.2.0/pt-PT.xpi) = f44efe77338e3bac23eb4e266a22e7e21c977db0b1740e2e2bb8978cb2724d75
+SIZE (xpi/thunderbird-i18n-31.2.0/pt-PT.xpi) = 439604
+SHA256 (xpi/thunderbird-i18n-31.2.0/rm.xpi) = b0f7e929ebe3e1c88b304e7df9cc3f5fc185effe1666bf5bebaab5874d1706d7
+SIZE (xpi/thunderbird-i18n-31.2.0/rm.xpi) = 439185
+SHA256 (xpi/thunderbird-i18n-31.2.0/ro.xpi) = 4c60b7a9233ed19b79f38f2c1acdd3c3c421e83866986720d36bc2dd5852c5ab
+SIZE (xpi/thunderbird-i18n-31.2.0/ro.xpi) = 479747
+SHA256 (xpi/thunderbird-i18n-31.2.0/ru.xpi) = 8098a2085dc282b70d5f2ec44a51676086d7e930c45056b8be8225529c0a93bd
+SIZE (xpi/thunderbird-i18n-31.2.0/ru.xpi) = 436156
+SHA256 (xpi/thunderbird-i18n-31.2.0/si.xpi) = 07a599cddff30ebdb245b03cf7fb3f10fd7dab77c7d5f72043a348147d9561b1
+SIZE (xpi/thunderbird-i18n-31.2.0/si.xpi) = 528812
+SHA256 (xpi/thunderbird-i18n-31.2.0/sk.xpi) = c2a10018d3a697735368112b957f84bfb1033567a04897e744e1a4d25cb91e1b
+SIZE (xpi/thunderbird-i18n-31.2.0/sk.xpi) = 452995
+SHA256 (xpi/thunderbird-i18n-31.2.0/sl.xpi) = 03391be8d12577f9e733e137818fdda4f4f28724ddbd4d9548e4ad26da94296a
+SIZE (xpi/thunderbird-i18n-31.2.0/sl.xpi) = 433874
+SHA256 (xpi/thunderbird-i18n-31.2.0/sq.xpi) = be5ba55ce94531b3dc84056e0433f78d341fe3b4f8ba5c68f67795aca44c8490
+SIZE (xpi/thunderbird-i18n-31.2.0/sq.xpi) = 454694
+SHA256 (xpi/thunderbird-i18n-31.2.0/sr.xpi) = e8f23cffa3b76f867dd0209f1f65a2b55d3f80245dbba9946b0f1993c1759791
+SIZE (xpi/thunderbird-i18n-31.2.0/sr.xpi) = 537335
+SHA256 (xpi/thunderbird-i18n-31.2.0/sv-SE.xpi) = 1760e8023cb00f33111279f25b60604613b682385aa735c2286fdd3d909853e2
+SIZE (xpi/thunderbird-i18n-31.2.0/sv-SE.xpi) = 436105
+SHA256 (xpi/thunderbird-i18n-31.2.0/ta-LK.xpi) = 1fe61ab35f687cd2389296783b7896b191bcc3ce02f7229404e1adc46360fe0e
+SIZE (xpi/thunderbird-i18n-31.2.0/ta-LK.xpi) = 553508
+SHA256 (xpi/thunderbird-i18n-31.2.0/tr.xpi) = a44cfd98890ab255a21b54991de71eca5f06a17e5cf825c01f8b7874ff2b2edd
+SIZE (xpi/thunderbird-i18n-31.2.0/tr.xpi) = 457360
+SHA256 (xpi/thunderbird-i18n-31.2.0/uk.xpi) = 7942f621505ce2270dbac9aecded2be7457aedf8ae345ffa776dfa5f3e524cb6
+SIZE (xpi/thunderbird-i18n-31.2.0/uk.xpi) = 499656
+SHA256 (xpi/thunderbird-i18n-31.2.0/vi.xpi) = 132981f1bdcf48ffb630965052713425d93fed862d0a87e9878c2196f64fd684
+SIZE (xpi/thunderbird-i18n-31.2.0/vi.xpi) = 513835
+SHA256 (xpi/thunderbird-i18n-31.2.0/zh-CN.xpi) = d6382bf21c901de5301a2ce4f2aaba839ba4ea3171bb2b965fca6876703c79cf
+SIZE (xpi/thunderbird-i18n-31.2.0/zh-CN.xpi) = 462668
+SHA256 (xpi/thunderbird-i18n-31.2.0/zh-TW.xpi) = 7704b9a4ed6f20c94b1390349614e18af643bf6d58b9cef38664afcc7048346f
+SIZE (xpi/thunderbird-i18n-31.2.0/zh-TW.xpi) = 463408
diff --git a/mail/thunderbird/Makefile b/mail/thunderbird/Makefile
index 9b0b217abed6..92c5dc57d83d 100644
--- a/mail/thunderbird/Makefile
+++ b/mail/thunderbird/Makefile
@@ -2,10 +2,10 @@
# $FreeBSD$
PORTNAME= thunderbird
-DISTVERSION= 31.1.2
+DISTVERSION= 31.2.0
CATEGORIES= mail news net-im ipv6
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
- https://ftp.mozilla.org/pub/mozilla.org/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source/
+ https://ftp.mozilla.org/pub/mozilla.org/${PORTNAME}/candidates/${DISTVERSION}-candidates/build2/source/
DISTFILES= ${PORTNAME}-${DISTVERSION}.source${EXTRACT_SUFX}
EXTRACT_ONLY= ${PORTNAME}-${DISTVERSION}.source${EXTRACT_SUFX}
@@ -32,7 +32,7 @@ BUILD_DEPENDS= nspr>=4.10.6:${PORTSDIR}/devel/nspr \
LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l
EM_VERSION= 1.7.2
-L_VERSION= 3.3.1.2
+L_VERSION= 3.3.2
SSP_UNSAFE= yes
OBJDIR_BUILD= # in-tree build broken after bug 789837
@@ -80,8 +80,8 @@ MOZSRC:= ${WRKSRC}/mozilla
XPI_LIBDIR= ${PREFIX}/lib/xpi
# avoid clang 3.2/3.3 crash in js/src/jsgc.cpp on refillFreeList<(js::AllowGC)1>
-# http://svnweb.freebsd.org/changeset/base/255804
-.if ${CHOSEN_COMPILER_TYPE} == clang && ${ARCH} == i386 && ${OSVERSION} < 1000056
+# To be removed when 9.2R goes EOL. http://llvm.org/PR15840
+.if ${ARCH} == i386 && ${CHOSEN_COMPILER_TYPE} == clang && ${COMPILER_VERSION:M3[23]}
. if ${PORT_OPTIONS:MOPTIMIZED_CFLAGS}
BROKEN= Cannot build with OPTIMIZED_CFLAGS option due to \
a ${CHOSEN_COMPILER_TYPE} bug: unset the option or \
diff --git a/mail/thunderbird/distinfo b/mail/thunderbird/distinfo
index 1e7c4157fba6..18cb22c174eb 100644
--- a/mail/thunderbird/distinfo
+++ b/mail/thunderbird/distinfo
@@ -1,4 +1,4 @@
-SHA256 (thunderbird-31.1.2.source.tar.bz2) = 86b18e7642ad8e6004cb4826daec586a24fae8a27da59df49f0039495dd5d7b5
-SIZE (thunderbird-31.1.2.source.tar.bz2) = 171033949
+SHA256 (thunderbird-31.2.0.source.tar.bz2) = 48130bbd9102303167aa832ea80970201777ee65b91fbab515332527850749b4
+SIZE (thunderbird-31.2.0.source.tar.bz2) = 171047372
SHA256 (enigmail-1.7.2.tar.gz) = 7b3a62e83961bafec1cdac60075aa6c317c8f655a837e31a7d1f3ce6a49fc7d6
SIZE (enigmail-1.7.2.tar.gz) = 1420346
diff --git a/mail/thunderbird/files/patch-bug1021761 b/mail/thunderbird/files/patch-bug1021761
new file mode 100644
index 000000000000..441cf005574b
--- /dev/null
+++ b/mail/thunderbird/files/patch-bug1021761
@@ -0,0 +1,1092 @@
+diff --git configure.in configure.in
+index 48e60c0..ec08417 100644
+--- mozilla/configure.in
++++ mozilla/configure.in
+@@ -5438,6 +5438,60 @@ fi
+ AC_SUBST(MOZ_WEBM_ENCODER)
+
+ dnl ==================================
++dnl = Check OSS availability
++dnl ==================================
++
++dnl If using Linux, Solaris or BSDs, ensure that OSS is available
++case "$OS_TARGET" in
++Linux|SunOS|DragonFly|FreeBSD|NetBSD|GNU/kFreeBSD)
++ MOZ_OSS=1
++ ;;
++esac
++
++MOZ_ARG_DISABLE_BOOL(oss,
++[ --disable-oss Disable OpenSoundSystem support],
++ MOZ_OSS=,
++ MOZ_OSS=1)
++
++_SAVE_CFLAGS=$CFLAGS
++_SAVE_LIBS=$LIBS
++if test -n "$MOZ_OSS"; then
++ dnl Prefer 4Front implementation
++ AC_MSG_CHECKING([MOZ_OSS_CFLAGS])
++ if test -z "$MOZ_OSS_CFLAGS"; then
++ for oss_conf in /etc/oss.conf /usr/local/etc/oss.conf; do
++ if test -e "$oss_conf"; then
++ . "$oss_conf"
++ fi
++ done
++ if test -d "$OSSLIBDIR"; then
++ MOZ_OSS_CFLAGS="-I$OSSLIBDIR/include"
++ fi
++ fi
++ AC_MSG_RESULT([$MOZ_OSS_CFLAGS])
++
++ CFLAGS="$CFLAGS $MOZ_OSS_CFLAGS"
++ MOZ_CHECK_HEADERS(sys/soundcard.h linux/soundcard.h soundcard.h)
++
++ if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \
++ "$ac_cv_header_linux_soundcard_h" != "yes" -a \
++ "$ac_cv_header_soundcard_h" != "yes"; then
++ AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --disable-ogg --disable-wave --disable-webm.])
++ fi
++
++ dnl Assume NetBSD implementation over SunAudio
++ AC_CHECK_LIB(ossaudio, _oss_ioctl,
++ [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound")
++ MOZ_OSS_LIBS="-lossaudio"])
++fi
++CFLAGS=$_SAVE_CFLAGS
++LIBS=$_SAVE_LIBS
++
++AC_SUBST(MOZ_OSS)
++AC_SUBST_LIST(MOZ_OSS_CFLAGS)
++AC_SUBST_LIST(MOZ_OSS_LIBS)
++
++dnl ==================================
+ dnl = Check alsa availability on Linux
+ dnl ==================================
+
+@@ -5451,12 +5505,23 @@ MOZ_ARG_ENABLE_BOOL(alsa,
+ MOZ_ALSA=1,
+ MOZ_ALSA=)
+
++MOZ_ARG_DISABLE_BOOL(alsa-dlopen,
++[ --disable-alsa-dlopen Disable runtime linking of libasound.so],
++ DISABLE_LIBASOUND_DLOPEN=1,
++ DISABLE_LIBASOUND_DLOPEN=)
++
+ if test -n "$MOZ_ALSA"; then
+ PKG_CHECK_MODULES(MOZ_ALSA, alsa, ,
+ [echo "$MOZ_ALSA_PKG_ERRORS"
+ AC_MSG_ERROR([Need alsa for Ogg, Wave or WebM decoding on Linux. Disable with --disable-ogg --disable-wave --disable-webm. (On Ubuntu, you might try installing the package libasound2-dev.)])])
+ fi
+
++if test -n "$DISABLE_LIBASOUND_DLOPEN"; then
++ AC_DEFINE(DISABLE_LIBASOUND_DLOPEN)
++else
++ MOZ_ALSA_LIBS=
++fi
++
+ AC_SUBST(MOZ_ALSA)
+
+ dnl ========================================================
+diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS
+index b441e8a..950d9e5 100644
+--- mozilla/media/libcubeb/AUTHORS
++++ mozilla/media/libcubeb/AUTHORS
+@@ -4,3 +4,4 @@ Michael Wu <mwu@mozilla.com>
+ Paul Adenot <paul@paul.cx>
+ David Richards <drichards@mozilla.com>
+ Sebastien Alaiwan <sebastien.alaiwan@gmail.com>
++Evgeniy Vodolazskiy <waterlaz@gmail.com>
+diff --git media/libcubeb/src/cubeb.c media/libcubeb/src/cubeb.c
+index 9c3adcc..45d765b 100644
+--- mozilla/media/libcubeb/src/cubeb.c
++++ mozilla/media/libcubeb/src/cubeb.c
+@@ -54,6 +54,9 @@ int opensl_init(cubeb ** context, char const * context_name);
+ #if defined(USE_AUDIOTRACK)
+ int audiotrack_init(cubeb ** context, char const * context_name);
+ #endif
++#if defined(USE_OSS)
++int oss_init(cubeb ** context, char const * context_name);
++#endif
+
+ int
+ validate_stream_params(cubeb_stream_params stream_params)
+@@ -120,6 +123,9 @@ cubeb_init(cubeb ** context, char const * context_name)
+ #if defined(USE_AUDIOTRACK)
+ audiotrack_init,
+ #endif
++#if defined(USE_OSS)
++ oss_init,
++#endif
+ };
+ int i;
+
+diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c
+index a962553..1f780f4 100644
+--- mozilla/media/libcubeb/src/cubeb_alsa.c
++++ mozilla/media/libcubeb/src/cubeb_alsa.c
+@@ -11,6 +11,7 @@
+ #include <sys/time.h>
+ #include <assert.h>
+ #include <limits.h>
++#include <dlfcn.h>
+ #include <poll.h>
+ #include <unistd.h>
+ #include <alsa/asoundlib.h>
+@@ -24,6 +25,50 @@
+
+ #define ALSA_PA_PLUGIN "ALSA <-> PulseAudio PCM I/O Plugin"
+
++#ifdef DISABLE_LIBASOUND_DLOPEN
++#define WRAP(x) x
++#else
++#define WRAP(x) cubeb_##x
++#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x
++MAKE_TYPEDEF(snd_config);
++MAKE_TYPEDEF(snd_config_add);
++MAKE_TYPEDEF(snd_config_copy);
++MAKE_TYPEDEF(snd_config_delete);
++MAKE_TYPEDEF(snd_config_get_id);
++MAKE_TYPEDEF(snd_config_get_string);
++MAKE_TYPEDEF(snd_config_imake_integer);
++MAKE_TYPEDEF(snd_config_search);
++MAKE_TYPEDEF(snd_config_search_definition);
++MAKE_TYPEDEF(snd_lib_error_set_handler);
++MAKE_TYPEDEF(snd_pcm_avail_update);
++MAKE_TYPEDEF(snd_pcm_close);
++MAKE_TYPEDEF(snd_pcm_delay);
++MAKE_TYPEDEF(snd_pcm_drain);
++MAKE_TYPEDEF(snd_pcm_frames_to_bytes);
++MAKE_TYPEDEF(snd_pcm_get_params);
++/* snd_pcm_hw_params_alloca is actually a macro */
++/* MAKE_TYPEDEF(snd_pcm_hw_params_alloca); */
++MAKE_TYPEDEF(snd_pcm_hw_params_sizeof);
++#define snd_pcm_hw_params_sizeof cubeb_snd_pcm_hw_params_sizeof
++MAKE_TYPEDEF(snd_pcm_hw_params_any);
++MAKE_TYPEDEF(snd_pcm_hw_params_get_channels_max);
++MAKE_TYPEDEF(snd_pcm_hw_params_get_rate);
++MAKE_TYPEDEF(snd_pcm_hw_params_set_rate_near);
++MAKE_TYPEDEF(snd_pcm_nonblock);
++MAKE_TYPEDEF(snd_pcm_open);
++MAKE_TYPEDEF(snd_pcm_open_lconf);
++MAKE_TYPEDEF(snd_pcm_pause);
++MAKE_TYPEDEF(snd_pcm_poll_descriptors);
++MAKE_TYPEDEF(snd_pcm_poll_descriptors_count);
++MAKE_TYPEDEF(snd_pcm_poll_descriptors_revents);
++MAKE_TYPEDEF(snd_pcm_recover);
++MAKE_TYPEDEF(snd_pcm_set_params);
++MAKE_TYPEDEF(snd_pcm_state);
++MAKE_TYPEDEF(snd_pcm_writei);
++
++#undef MAKE_TYPEDEF
++#endif
++
+ /* ALSA is not thread-safe. snd_pcm_t instances are individually protected
+ by the owning cubeb_stream's mutex. snd_pcm_t creation and destruction
+ is not thread-safe until ALSA 1.0.24 (see alsa-lib.git commit 91c9c8f1),
+@@ -64,6 +109,8 @@ struct cubeb {
+ workaround is not required. */
+ snd_config_t * local_config;
+ int is_pa;
++
++ void * libasound;
+ };
+
+ enum stream_state {
+@@ -262,7 +309,7 @@ alsa_refill_stream(cubeb_stream * stm)
+
+ pthread_mutex_lock(&stm->mutex);
+
+- r = snd_pcm_poll_descriptors_revents(stm->pcm, stm->fds, stm->nfds, &revents);
++ r = WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents);
+ if (r < 0 || revents != POLLOUT) {
+ /* This should be a stream error; it makes no sense for poll(2) to wake
+ for this stream and then have the stream report that it's not ready.
+@@ -271,10 +318,10 @@ alsa_refill_stream(cubeb_stream * stm)
+ return RUNNING;
+ }
+
+- avail = snd_pcm_avail_update(stm->pcm);
++ avail = WRAP(snd_pcm_avail_update)(stm->pcm);
+ if (avail == -EPIPE) {
+- snd_pcm_recover(stm->pcm, avail, 1);
+- avail = snd_pcm_avail_update(stm->pcm);
++ WRAP(snd_pcm_recover)(stm->pcm, avail, 1);
++ avail = WRAP(snd_pcm_avail_update)(stm->pcm);
+ }
+
+ /* Failed to recover from an xrun, this stream must be broken. */
+@@ -293,8 +340,8 @@ alsa_refill_stream(cubeb_stream * stm)
+ available to write. If avail is still zero here, the stream must be in
+ a funky state, so recover and try again. */
+ if (avail == 0) {
+- snd_pcm_recover(stm->pcm, -EPIPE, 1);
+- avail = snd_pcm_avail_update(stm->pcm);
++ WRAP(snd_pcm_recover)(stm->pcm, -EPIPE, 1);
++ avail = WRAP(snd_pcm_avail_update)(stm->pcm);
+ if (avail <= 0) {
+ pthread_mutex_unlock(&stm->mutex);
+ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR);
+@@ -302,7 +349,7 @@ alsa_refill_stream(cubeb_stream * stm)
+ }
+ }
+
+- p = calloc(1, snd_pcm_frames_to_bytes(stm->pcm, avail));
++ p = calloc(1, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, avail));
+ assert(p);
+
+ pthread_mutex_unlock(&stm->mutex);
+@@ -313,10 +360,10 @@ alsa_refill_stream(cubeb_stream * stm)
+ return ERROR;
+ }
+ if (got > 0) {
+- snd_pcm_sframes_t wrote = snd_pcm_writei(stm->pcm, p, got);
++ snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
+ if (wrote == -EPIPE) {
+- snd_pcm_recover(stm->pcm, wrote, 1);
+- wrote = snd_pcm_writei(stm->pcm, p, got);
++ WRAP(snd_pcm_recover)(stm->pcm, wrote, 1);
++ wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
+ }
+ assert(wrote >= 0 && wrote == got);
+ stm->write_position += wrote;
+@@ -342,7 +389,7 @@ alsa_refill_stream(cubeb_stream * stm)
+
+ /* Fill the remaining buffer with silence to guarantee one full period
+ has been written. */
+- snd_pcm_writei(stm->pcm, (char *) p + got, avail - got);
++ WRAP(snd_pcm_writei)(stm->pcm, (char *) p + got, avail - got);
+
+ set_timeout(&stm->drain_timeout, buffer_time * 1000);
+
+@@ -453,26 +500,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm)
+
+ slave_def = NULL;
+
+- r = snd_config_search(root_pcm, "slave", &slave_pcm);
++ r = WRAP(snd_config_search)(root_pcm, "slave", &slave_pcm);
+ if (r < 0) {
+ return NULL;
+ }
+
+- r = snd_config_get_string(slave_pcm, &string);
++ r = WRAP(snd_config_get_string)(slave_pcm, &string);
+ if (r >= 0) {
+- r = snd_config_search_definition(lconf, "pcm_slave", string, &slave_def);
++ r = WRAP(snd_config_search_definition)(lconf, "pcm_slave", string, &slave_def);
+ if (r < 0) {
+ return NULL;
+ }
+ }
+
+ do {
+- r = snd_config_search(slave_def ? slave_def : slave_pcm, "pcm", &pcm);
++ r = WRAP(snd_config_search)(slave_def ? slave_def : slave_pcm, "pcm", &pcm);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_get_string(slave_def ? slave_def : slave_pcm, &string);
++ r = WRAP(snd_config_get_string)(slave_def ? slave_def : slave_pcm, &string);
+ if (r < 0) {
+ break;
+ }
+@@ -481,7 +528,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm)
+ if (r < 0 || r > (int) sizeof(node_name)) {
+ break;
+ }
+- r = snd_config_search(lconf, node_name, &pcm);
++ r = WRAP(snd_config_search)(lconf, node_name, &pcm);
+ if (r < 0) {
+ break;
+ }
+@@ -490,7 +537,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm)
+ } while (0);
+
+ if (slave_def) {
+- snd_config_delete(slave_def);
++ WRAP(snd_config_delete)(slave_def);
+ }
+
+ return NULL;
+@@ -513,22 +560,22 @@ init_local_config_with_workaround(char const * pcm_name)
+
+ lconf = NULL;
+
+- if (snd_config == NULL) {
++ if (*WRAP(snd_config) == NULL) {
+ return NULL;
+ }
+
+- r = snd_config_copy(&lconf, snd_config);
++ r = WRAP(snd_config_copy)(&lconf, *WRAP(snd_config));
+ if (r < 0) {
+ return NULL;
+ }
+
+ do {
+- r = snd_config_search_definition(lconf, "pcm", pcm_name, &pcm_node);
++ r = WRAP(snd_config_search_definition)(lconf, "pcm", pcm_name, &pcm_node);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_get_id(pcm_node, &string);
++ r = WRAP(snd_config_get_id)(pcm_node, &string);
+ if (r < 0) {
+ break;
+ }
+@@ -537,7 +584,7 @@ init_local_config_with_workaround(char const * pcm_name)
+ if (r < 0 || r > (int) sizeof(node_name)) {
+ break;
+ }
+- r = snd_config_search(lconf, node_name, &pcm_node);
++ r = WRAP(snd_config_search)(lconf, node_name, &pcm_node);
+ if (r < 0) {
+ break;
+ }
+@@ -548,12 +595,12 @@ init_local_config_with_workaround(char const * pcm_name)
+ }
+
+ /* Fetch the PCM node's type, and bail out if it's not the PulseAudio plugin. */
+- r = snd_config_search(pcm_node, "type", &node);
++ r = WRAP(snd_config_search)(pcm_node, "type", &node);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_get_string(node, &string);
++ r = WRAP(snd_config_get_string)(node, &string);
+ if (r < 0) {
+ break;
+ }
+@@ -564,18 +611,18 @@ init_local_config_with_workaround(char const * pcm_name)
+
+ /* Don't clobber an explicit existing handle_underrun value, set it only
+ if it doesn't already exist. */
+- r = snd_config_search(pcm_node, "handle_underrun", &node);
++ r = WRAP(snd_config_search)(pcm_node, "handle_underrun", &node);
+ if (r != -ENOENT) {
+ break;
+ }
+
+ /* Disable pcm_pulse's asynchronous underrun handling. */
+- r = snd_config_imake_integer(&node, "handle_underrun", 0);
++ r = WRAP(snd_config_imake_integer)(&node, "handle_underrun", 0);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_add(pcm_node, node);
++ r = WRAP(snd_config_add)(pcm_node, node);
+ if (r < 0) {
+ break;
+ }
+@@ -583,7 +630,7 @@ init_local_config_with_workaround(char const * pcm_name)
+ return lconf;
+ } while (0);
+
+- snd_config_delete(lconf);
++ WRAP(snd_config_delete)(lconf);
+
+ return NULL;
+ }
+@@ -595,9 +642,9 @@ alsa_locked_pcm_open(snd_pcm_t ** pcm, snd_pcm_stream_t stream, snd_config_t * l
+
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+ if (local_config) {
+- r = snd_pcm_open_lconf(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config);
++ r = WRAP(snd_pcm_open_lconf)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config);
+ } else {
+- r = snd_pcm_open(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK);
++ r = WRAP(snd_pcm_open)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK);
+ }
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+
+@@ -610,7 +657,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm)
+ int r;
+
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+- r = snd_pcm_close(pcm);
++ r = WRAP(snd_pcm_close)(pcm);
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+
+ return r;
+@@ -667,12 +714,65 @@ alsa_init(cubeb ** context, char const * context_name)
+ pthread_attr_t attr;
+ snd_pcm_t * dummy;
+
++ void * libasound = NULL;
++
++#ifndef DISABLE_LIBASOUND_DLOPEN
++ libasound = dlopen("libasound.so", RTLD_LAZY);
++ if (!libasound) {
++ return CUBEB_ERROR;
++ }
++
++#define LOAD(x) do { \
++ cubeb_##x = dlsym(libasound, #x); \
++ if (!cubeb_##x) { \
++ dlclose(libasound); \
++ return CUBEB_ERROR; \
++ } \
++ } while(0)
++
++ LOAD(snd_config);
++ LOAD(snd_config_add);
++ LOAD(snd_config_copy);
++ LOAD(snd_config_delete);
++ LOAD(snd_config_get_id);
++ LOAD(snd_config_get_string);
++ LOAD(snd_config_imake_integer);
++ LOAD(snd_config_search);
++ LOAD(snd_config_search_definition);
++ LOAD(snd_lib_error_set_handler);
++ LOAD(snd_pcm_avail_update);
++ LOAD(snd_pcm_close);
++ LOAD(snd_pcm_delay);
++ LOAD(snd_pcm_drain);
++ LOAD(snd_pcm_frames_to_bytes);
++ LOAD(snd_pcm_get_params);
++ /* snd_pcm_hw_params_alloca is actually a macro */
++ /* LOAD(snd_pcm_hw_params_alloca); */
++ LOAD(snd_pcm_hw_params_sizeof);
++ LOAD(snd_pcm_hw_params_any);
++ LOAD(snd_pcm_hw_params_get_channels_max);
++ LOAD(snd_pcm_hw_params_get_rate);
++ LOAD(snd_pcm_hw_params_set_rate_near);
++ LOAD(snd_pcm_nonblock);
++ LOAD(snd_pcm_open);
++ LOAD(snd_pcm_open_lconf);
++ LOAD(snd_pcm_pause);
++ LOAD(snd_pcm_poll_descriptors);
++ LOAD(snd_pcm_poll_descriptors_count);
++ LOAD(snd_pcm_poll_descriptors_revents);
++ LOAD(snd_pcm_recover);
++ LOAD(snd_pcm_set_params);
++ LOAD(snd_pcm_state);
++ LOAD(snd_pcm_writei);
++
++#undef LOAD
++#endif
+ assert(context);
+ *context = NULL;
+
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+ if (!cubeb_alsa_error_handler_set) {
+- snd_lib_error_set_handler(silent_error_handler);
++ WRAP(snd_lib_error_set_handler)(silent_error_handler);
+ cubeb_alsa_error_handler_set = 1;
+ }
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+@@ -680,6 +780,8 @@ alsa_init(cubeb ** context, char const * context_name)
+ ctx = calloc(1, sizeof(*ctx));
+ assert(ctx);
+
++ ctx->libasound = libasound;
++
+ ctx->ops = &alsa_ops;
+
+ r = pthread_mutex_init(&ctx->mutex, NULL);
+@@ -729,7 +831,7 @@ alsa_init(cubeb ** context, char const * context_name)
+ config fails with EINVAL, the PA PCM is too old for this workaround. */
+ if (r == -EINVAL) {
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+- snd_config_delete(ctx->local_config);
++ WRAP(snd_config_delete)(ctx->local_config);
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+ ctx->local_config = NULL;
+ } else if (r >= 0) {
+@@ -768,9 +870,13 @@ alsa_destroy(cubeb * ctx)
+ pthread_mutex_destroy(&ctx->mutex);
+ free(ctx->fds);
+
++ if (ctx->libasound) {
++ dlclose(ctx->libasound);
++ }
++
+ if (ctx->local_config) {
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+- snd_config_delete(ctx->local_config);
++ WRAP(snd_config_delete)(ctx->local_config);
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+ }
+
+@@ -838,7 +944,7 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name,
+ return CUBEB_ERROR;
+ }
+
+- r = snd_pcm_nonblock(stm->pcm, 1);
++ r = WRAP(snd_pcm_nonblock)(stm->pcm, 1);
+ assert(r == 0);
+
+ /* Ugly hack: the PA ALSA plugin allows buffer configurations that can't
+@@ -848,23 +954,23 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name,
+ latency = latency < 500 ? 500 : latency;
+ }
+
+- r = snd_pcm_set_params(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED,
+- stm->params.channels, stm->params.rate, 1,
+- latency * 1000);
++ r = WRAP(snd_pcm_set_params)(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED,
++ stm->params.channels, stm->params.rate, 1,
++ latency * 1000);
+ if (r < 0) {
+ alsa_stream_destroy(stm);
+ return CUBEB_ERROR_INVALID_FORMAT;
+ }
+
+- r = snd_pcm_get_params(stm->pcm, &stm->buffer_size, &stm->period_size);
++ r = WRAP(snd_pcm_get_params)(stm->pcm, &stm->buffer_size, &stm->period_size);
+ assert(r == 0);
+
+- stm->nfds = snd_pcm_poll_descriptors_count(stm->pcm);
++ stm->nfds = WRAP(snd_pcm_poll_descriptors_count)(stm->pcm);
+ assert(stm->nfds > 0);
+
+ stm->saved_fds = calloc(stm->nfds, sizeof(struct pollfd));
+ assert(stm->saved_fds);
+- r = snd_pcm_poll_descriptors(stm->pcm, stm->saved_fds, stm->nfds);
++ r = WRAP(snd_pcm_poll_descriptors)(stm->pcm, stm->saved_fds, stm->nfds);
+ assert((nfds_t) r == stm->nfds);
+
+ r = pthread_cond_init(&stm->cond, NULL);
+@@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_any(stm->pcm, hw_params);
++ rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params);
+ if (rv < 0) {
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_get_channels_max(hw_params, max_channels);
++ rv = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels);
+ if (rv < 0) {
+ return CUBEB_ERROR;
+ }
+@@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) {
+
+ /* get a pcm, disabling resampling, so we get a rate the
+ * hardware/dmix/pulse/etc. supports. */
+- rv = snd_pcm_open(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
++ rv = WRAP(snd_pcm_open)(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
+ if (rv < 0) {
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_any(pcm, hw_params);
++ rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params);
+ if (rv < 0) {
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_get_rate(hw_params, rate, &dir);
++ rv = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir);
+ if (rv >= 0) {
+ /* There is a default rate: use it. */
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+ return CUBEB_OK;
+ }
+
+ /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */
+ *rate = 44100;
+
+- rv = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL);
++ rv = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL);
+ if (rv < 0) {
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+ return CUBEB_ERROR;
+ }
+
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+
+ return CUBEB_OK;
+ }
+@@ -1013,7 +1119,7 @@ alsa_stream_start(cubeb_stream * stm)
+ ctx = stm->context;
+
+ pthread_mutex_lock(&stm->mutex);
+- snd_pcm_pause(stm->pcm, 0);
++ WRAP(snd_pcm_pause)(stm->pcm, 0);
+ gettimeofday(&stm->last_activity, NULL);
+ pthread_mutex_unlock(&stm->mutex);
+
+@@ -1047,7 +1153,7 @@ alsa_stream_stop(cubeb_stream * stm)
+ pthread_mutex_unlock(&ctx->mutex);
+
+ pthread_mutex_lock(&stm->mutex);
+- snd_pcm_pause(stm->pcm, 1);
++ WRAP(snd_pcm_pause)(stm->pcm, 1);
+ pthread_mutex_unlock(&stm->mutex);
+
+ return CUBEB_OK;
+@@ -1063,8 +1169,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position)
+ pthread_mutex_lock(&stm->mutex);
+
+ delay = -1;
+- if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING ||
+- snd_pcm_delay(stm->pcm, &delay) != 0) {
++ if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING ||
++ WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) {
+ *position = stm->last_position;
+ pthread_mutex_unlock(&stm->mutex);
+ return CUBEB_OK;
+@@ -1089,7 +1195,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency)
+ snd_pcm_sframes_t delay;
+ /* This function returns the delay in frames until a frame written using
+ snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */
+- if (snd_pcm_delay(stm->pcm, &delay)) {
++ if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) {
+ return CUBEB_ERROR;
+ }
+
+diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c
+new file mode 100644
+index 0000000..5e38e27
+--- /dev/null
++++ mozilla/media/libcubeb/src/cubeb_oss.c
+@@ -0,0 +1,399 @@
++/*
++ * Copyright © 2014 Mozilla Foundation
++ *
++ * This program is made available under an ISC-style license. See the
++ * accompanying file LICENSE for details.
++ */
++#if defined(HAVE_SYS_SOUNDCARD_H)
++#include <sys/soundcard.h>
++#elif defined(HAVE_LINUX_SOUNDCARD_H)
++#include <linux/soundcard.h>
++#else
++#include <soundcard.h>
++#endif
++#include <unistd.h>
++#include <stdlib.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <sys/ioctl.h>
++#include <errno.h>
++#include <pthread.h>
++#include <stdio.h>
++
++#include "cubeb/cubeb.h"
++#include "cubeb-internal.h"
++
++#ifndef CUBEB_OSS_DEFAULT_OUTPUT
++#define CUBEB_OSS_DEFAULT_OUTPUT "/dev/dsp"
++#endif
++
++#define OSS_BUFFER_SIZE 1024
++
++struct cubeb {
++ struct cubeb_ops const * ops;
++};
++
++struct cubeb_stream {
++ cubeb * context;
++
++ cubeb_data_callback data_callback;
++ cubeb_state_callback state_callback;
++ void * user_ptr;
++ float volume;
++ float panning;
++
++ pthread_mutex_t state_mutex;
++ pthread_cond_t state_cond;
++
++ int running;
++ int stopped;
++ int floating;
++
++ /* These two vars are needed to support old versions of OSS */
++ unsigned int position_bytes;
++ unsigned int last_position_bytes;
++
++ uint64_t written_frags; /* The number of fragments written to /dev/dsp */
++ uint64_t missed_frags; /* fragments output with stopped stream */
++
++ cubeb_stream_params params;
++ int fd;
++ pthread_t th;
++};
++
++static struct cubeb_ops const oss_ops;
++
++int oss_init(cubeb ** context, char const * context_name)
++{
++ cubeb* ctx = (cubeb*)malloc(sizeof(cubeb));
++ ctx->ops = &oss_ops;
++ *context = ctx;
++ return CUBEB_OK;
++}
++
++static void oss_destroy(cubeb *ctx)
++{
++ free(ctx);
++}
++
++static char const * oss_get_backend_id(cubeb * context)
++{
++ static char oss_name[] = "oss";
++ return oss_name;
++}
++
++static int oss_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
++{
++ *max_channels = 2; /* Let's support only stereo for now */
++ return CUBEB_OK;
++}
++
++static int oss_get_min_latency(cubeb * context, cubeb_stream_params params,
++ uint32_t * latency_ms)
++{
++ /* 40ms is a big enough number to work ok */
++ *latency_ms = 40;
++ return CUBEB_OK;
++}
++
++static int oss_get_preferred_sample_rate(cubeb *context, uint32_t * rate)
++{
++ /* 48000 seems a prefered choice for most audio devices
++ * and a good choice for OSS */
++ *rate = 48000;
++ return CUBEB_OK;
++}
++
++static void run_state_callback(cubeb_stream *stream, cubeb_state state)
++{
++ if (stream->state_callback) {
++ stream->state_callback(stream, stream->user_ptr, state);
++ }
++}
++
++static long run_data_callback(cubeb_stream *stream, void *buffer, long nframes)
++{
++ long got = 0;
++ pthread_mutex_lock(&stream->state_mutex);
++ if (stream->data_callback && stream->running && !stream->stopped) {
++ pthread_mutex_unlock(&stream->state_mutex);
++ got = stream->data_callback(stream, stream->user_ptr, buffer, nframes);
++ } else {
++ pthread_mutex_unlock(&stream->state_mutex);
++ }
++ return got;
++}
++
++static void apply_volume(int16_t* buffer, unsigned int n,
++ float volume, float panning)
++{
++ float left = volume;
++ float right = volume;
++ unsigned int i;
++ int pan[2];
++ if (panning<0) {
++ right *= (1+panning);
++ } else {
++ left *= (1-panning);
++ }
++ pan[0] = 128.0*left;
++ pan[1] = 128.0*right;
++ for(i=0; i<n; i++){
++ buffer[i] = ((int)buffer[i])*pan[i%2]/128;
++ }
++}
++
++static void *writer(void *stm)
++{
++ cubeb_stream* stream = (cubeb_stream*)stm;
++ int16_t buffer[OSS_BUFFER_SIZE];
++ float f_buffer[OSS_BUFFER_SIZE];
++ int got;
++ unsigned long i;
++ while (stream->running) {
++ pthread_mutex_lock(&stream->state_mutex);
++ if (stream->stopped) {
++ pthread_mutex_unlock(&stream->state_mutex);
++ run_state_callback(stream, CUBEB_STATE_STOPPED);
++ pthread_mutex_lock(&stream->state_mutex);
++ while (stream->stopped) {
++ pthread_cond_wait(&stream->state_cond, &stream->state_mutex);
++ }
++ pthread_mutex_unlock(&stream->state_mutex);
++ run_state_callback(stream, CUBEB_STATE_STARTED);
++ continue;
++ }
++ pthread_mutex_unlock(&stream->state_mutex);
++ if (stream->floating) {
++ got = run_data_callback(stream, f_buffer,
++ OSS_BUFFER_SIZE/stream->params.channels);
++ for (i=0; i<((unsigned long)got)*stream->params.channels; i++) {
++ buffer[i] = f_buffer[i]*32767.0;
++ }
++ } else {
++ got = run_data_callback(stream, buffer,
++ OSS_BUFFER_SIZE/stream->params.channels);
++ }
++ apply_volume(buffer, got*stream->params.channels,
++ stream->volume, stream->panning);
++ if (got<0) {
++ run_state_callback(stream, CUBEB_STATE_ERROR);
++ break;
++ }
++ if (!got) {
++ run_state_callback(stream, CUBEB_STATE_DRAINED);
++ }
++ if (got) {
++ size_t i = 0;
++ size_t s = got*stream->params.channels*sizeof(int16_t);
++ while (i < s) {
++ ssize_t n = write(stream->fd, ((char*)buffer) + i, s - i);
++ if (n<=0) {
++ run_state_callback(stream, CUBEB_STATE_ERROR);
++ break;
++ }
++ i+=n;
++ }
++ stream->written_frags+=got;
++ }
++ }
++ return NULL;
++}
++
++static void oss_try_set_latency(cubeb_stream* stream, unsigned int latency)
++{
++ unsigned int latency_bytes, n_frag;
++ int frag;
++ /* fragment size of 1024 is a good choice with good chances to be accepted */
++ unsigned int frag_size=1024;
++ unsigned int frag_log=10; /* 2^frag_log = frag_size */
++ latency_bytes =
++ latency*stream->params.rate*stream->params.channels*sizeof(uint16_t)/1000;
++ n_frag = latency_bytes>>frag_log;
++ frag = (n_frag<<16) | frag_log;
++ /* Even if this fails we wish to continue, not checking for errors */
++ ioctl(stream->fd, SNDCTL_DSP_SETFRAGMENT, &frag);
++}
++
++static int oss_stream_init(cubeb * context, cubeb_stream ** stm,
++ char const * stream_name,
++ cubeb_stream_params stream_params,
++ unsigned int latency,
++ cubeb_data_callback data_callback,
++ cubeb_state_callback state_callback, void * user_ptr)
++{
++ cubeb_stream* stream = (cubeb_stream*)malloc(sizeof(cubeb_stream));
++ stream->context = context;
++ stream->data_callback = data_callback;
++ stream->state_callback = state_callback;
++ stream->user_ptr = user_ptr;
++
++ if ((stream->fd = open(CUBEB_OSS_DEFAULT_OUTPUT, O_WRONLY)) == -1) {
++ free(stream);
++ return CUBEB_ERROR;
++ }
++#define SET(what, to) do { unsigned int i = to; \
++ int j = ioctl(stream->fd, what, &i); \
++ if (j == -1 || i != to) { \
++ close(stream->fd); \
++ free(stream); \
++ return CUBEB_ERROR_INVALID_FORMAT; } } while (0)
++
++ stream->params = stream_params;
++ stream->volume = 1.0;
++ stream->panning = 0.0;
++
++ oss_try_set_latency(stream, latency);
++
++ stream->floating = 0;
++ SET(SNDCTL_DSP_CHANNELS, stream_params.channels);
++ SET(SNDCTL_DSP_SPEED, stream_params.rate);
++ switch (stream_params.format) {
++ case CUBEB_SAMPLE_S16LE:
++ SET(SNDCTL_DSP_SETFMT, AFMT_S16_LE);
++ break;
++ case CUBEB_SAMPLE_S16BE:
++ SET(SNDCTL_DSP_SETFMT, AFMT_S16_BE);
++ break;
++ case CUBEB_SAMPLE_FLOAT32LE:
++ SET(SNDCTL_DSP_SETFMT, AFMT_S16_NE);
++ stream->floating = 1;
++ break;
++ default:
++ close(stream->fd);
++ free(stream);
++ return CUBEB_ERROR;
++ }
++
++
++ pthread_mutex_init(&stream->state_mutex, NULL);
++ pthread_cond_init(&stream->state_cond, NULL);
++
++ stream->running = 1;
++ stream->stopped = 1;
++ stream->position_bytes = 0;
++ stream->last_position_bytes = 0;
++ stream->written_frags = 0;
++ stream->missed_frags = 0;
++
++ pthread_create(&stream->th, NULL, writer, (void*)stream);
++
++ *stm = stream;
++
++ return CUBEB_OK;
++}
++
++static void oss_stream_destroy(cubeb_stream * stream)
++{
++ pthread_mutex_lock(&stream->state_mutex);
++
++ stream->running = 0;
++ stream->stopped = 0;
++ pthread_cond_signal(&stream->state_cond);
++
++ pthread_mutex_unlock(&stream->state_mutex);
++
++ pthread_join(stream->th, NULL);
++
++ pthread_mutex_destroy(&stream->state_mutex);
++ pthread_cond_destroy(&stream->state_cond);
++ close(stream->fd);
++ free(stream);
++}
++
++static int oss_stream_get_latency(cubeb_stream * stream, uint32_t * latency)
++{
++ if (ioctl(stream->fd, SNDCTL_DSP_GETODELAY, latency)==-1) {
++ return CUBEB_ERROR;
++ }
++ /* Convert latency from bytes to frames */
++ *latency /= stream->params.channels*sizeof(int16_t);
++ return CUBEB_OK;
++}
++
++
++static int oss_stream_current_optr(cubeb_stream * stream, uint64_t * position)
++{
++ count_info ci;
++ /* Unfortunately, this ioctl is only available in OSS 4.x */
++#ifdef SNDCTL_DSP_CURRENT_OPTR
++ oss_count_t count;
++ if (ioctl(stream->fd, SNDCTL_DSP_CURRENT_OPTR, &count) != -1) {
++ *position = count.samples;// + count.fifo_samples;
++ return CUBEB_OK;
++ }
++#endif
++ /* Fall back to this ioctl in case the previous one fails */
++ if (ioctl(stream->fd, SNDCTL_DSP_GETOPTR, &ci) == -1) {
++ return CUBEB_ERROR;
++ }
++ /* ci.bytes is only 32 bit and will start to wrap after arithmetic overflow */
++ stream->position_bytes += ci.bytes - stream->last_position_bytes;
++ stream->last_position_bytes = ci.bytes;
++ *position = stream->position_bytes/stream->params.channels/sizeof(int16_t);
++ return CUBEB_OK;
++}
++
++static int oss_stream_get_position(cubeb_stream * stream, uint64_t * position)
++{
++ if ( oss_stream_current_optr(stream, position) == CUBEB_OK ){
++ *position -= stream->missed_frags;
++ return CUBEB_OK;
++ }
++ /* If no correct method to get position works we resort to this */
++ *position = stream->written_frags;
++ return CUBEB_OK;
++}
++
++
++static int oss_stream_start(cubeb_stream * stream)
++{
++ pthread_mutex_lock(&stream->state_mutex);
++ if (stream->stopped) {
++ uint64_t ptr;
++ oss_stream_current_optr(stream, &ptr);
++ stream->missed_frags = ptr - stream->written_frags;
++ stream->stopped = 0;
++ pthread_cond_signal(&stream->state_cond);
++ }
++ pthread_mutex_unlock(&stream->state_mutex);
++ return CUBEB_OK;
++}
++
++static int oss_stream_stop(cubeb_stream * stream)
++{
++ pthread_mutex_lock(&stream->state_mutex);
++ stream->stopped = 1;
++ pthread_mutex_unlock(&stream->state_mutex);
++ return CUBEB_OK;
++}
++
++int oss_stream_set_panning(cubeb_stream * stream, float panning)
++{
++ if (stream->params.channels == 2) {
++ stream->panning=panning;
++ }
++ return CUBEB_OK;
++}
++
++int oss_stream_set_volume(cubeb_stream * stream, float volume)
++{
++ stream->volume=volume;
++ return CUBEB_OK;
++}
++
++static struct cubeb_ops const oss_ops = {
++ .init = oss_init,
++ .get_backend_id = oss_get_backend_id,
++ .get_max_channel_count = oss_get_max_channel_count,
++ .get_min_latency = oss_get_min_latency,
++ .get_preferred_sample_rate = oss_get_preferred_sample_rate,
++ .destroy = oss_destroy,
++ .stream_init = oss_stream_init,
++ .stream_destroy = oss_stream_destroy,
++ .stream_start = oss_stream_start,
++ .stream_stop = oss_stream_stop,
++ .stream_get_position = oss_stream_get_position,
++ .stream_get_latency = oss_stream_get_latency
++};
+diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build
+index 8b7a0dd..31212ce 100644
+--- mozilla/media/libcubeb/src/moz.build
++++ mozilla/media/libcubeb/src/moz.build
+@@ -17,6 +17,12 @@ if CONFIG['MOZ_ALSA']:
+ ]
+ DEFINES['USE_ALSA'] = True
+
++if CONFIG['MOZ_OSS']:
++ SOURCES += [
++ 'cubeb_oss.c',
++ ]
++ DEFINES['USE_OSS'] = True
++
+ if CONFIG['MOZ_PULSEAUDIO']:
+ SOURCES += [
+ 'cubeb_pulse.c',
+@@ -75,5 +81,6 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
+
+ FAIL_ON_WARNINGS = True
+
++CFLAGS += CONFIG['MOZ_OSS_CFLAGS']
+ CFLAGS += CONFIG['MOZ_ALSA_CFLAGS']
+ CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS']
+diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk
+index e191f13..4fb268a 100644
+--- mozilla/toolkit/library/libxul.mk
++++ mozilla/toolkit/library/libxul.mk
+@@ -146,6 +146,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32
+ endif
+ endif
+
++ifdef MOZ_OSS
++EXTRA_DSO_LDOPTS += $(MOZ_OSS_LIBS)
++endif
++
+ ifdef MOZ_ALSA
+ EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS)
+ endif
diff --git a/mail/thunderbird/files/patch-bug1073709 b/mail/thunderbird/files/patch-bug1073709
new file mode 100644
index 000000000000..054ed2725747
--- /dev/null
+++ b/mail/thunderbird/files/patch-bug1073709
@@ -0,0 +1,18 @@
+diff --git mfbt/Atomics.h mfbt/Atomics.h
+index 495a9d3..c7f7601 100644
+--- mozilla/mfbt/Atomics.h
++++ mozilla/mfbt/Atomics.h
+@@ -34,10 +34,12 @@
+ * loose typing of the atomic builtins. GCC 4.5 and 4.6 lacks inline
+ * definitions for unspecialized std::atomic and causes linking errors.
+ * Therefore, we require at least 4.7.0 for using libstdc++.
++ *
++ * libc++ <atomic> is only functional with clang.
+ */
+ # if MOZ_USING_LIBSTDCXX && MOZ_LIBSTDCXX_VERSION_AT_LEAST(4, 7, 0)
+ # define MOZ_HAVE_CXX11_ATOMICS
+-# elif MOZ_USING_LIBCXX
++# elif MOZ_USING_LIBCXX && defined(__clang__)
+ # define MOZ_HAVE_CXX11_ATOMICS
+ # endif
+ /*
diff --git a/mail/thunderbird/files/patch-bug1076983 b/mail/thunderbird/files/patch-bug1076983
new file mode 100644
index 000000000000..ff764be7398f
--- /dev/null
+++ b/mail/thunderbird/files/patch-bug1076983
@@ -0,0 +1,45 @@
+commit e10ee74
+Author: Martin Thomson <martin.thomson@gmail.com>
+Date: Tue Oct 14 17:17:35 2014 -0700
+
+ Bug 1076983 - Disabling SSL 3.0 with pref
+---
+ netwerk/base/public/security-prefs.js | 2 +-
+ security/manager/ssl/src/nsNSSComponent.cpp | 7 +++----
+ 2 files changed, 4 insertions(+), 5 deletions(-)
+
+diff --git netwerk/base/public/security-prefs.js netwerk/base/public/security-prefs.js
+index 352552e..c12731b 100644
+--- mozilla/netwerk/base/public/security-prefs.js
++++ mozilla/netwerk/base/public/security-prefs.js
+@@ -2,7 +2,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/. */
+
+-pref("security.tls.version.min", 0);
++pref("security.tls.version.min", 1);
+ pref("security.tls.version.max", 3);
+
+ pref("security.ssl.allow_unrestricted_renego_everywhere__temporarily_available_pref", false);
+diff --git security/manager/ssl/src/nsNSSComponent.cpp security/manager/ssl/src/nsNSSComponent.cpp
+index 8cab67b..772959d 100644
+--- mozilla/security/manager/ssl/src/nsNSSComponent.cpp
++++ mozilla/security/manager/ssl/src/nsNSSComponent.cpp
+@@ -829,14 +829,13 @@ void nsNSSComponent::setValidationOptions(bool isInitialSetting,
+ mDefaultCertVerifier = new SharedCertVerifier(odc, osc, ogc, pinningMode);
+ }
+
+-// Enable the TLS versions given in the prefs, defaulting to SSL 3.0 (min
+-// version) and TLS 1.2 (max version) when the prefs aren't set or set to
+-// invalid values.
++// Enable the TLS versions given in the prefs, defaulting to TLS 1.0 (min) and
++// TLS 1.2 (max) when the prefs aren't set or set to invalid values.
+ nsresult
+ nsNSSComponent::setEnabledTLSVersions()
+ {
+ // keep these values in sync with security-prefs.js
+- static const int32_t PSM_DEFAULT_MIN_TLS_VERSION = 0;
++ static const int32_t PSM_DEFAULT_MIN_TLS_VERSION = 1;
+ static const int32_t PSM_DEFAULT_MAX_TLS_VERSION = 3;
+
+ int32_t minVersion = Preferences::GetInt("security.tls.version.min",
diff --git a/mail/thunderbird/files/patch-clang34-disable-stdcall b/mail/thunderbird/files/patch-clang34-disable-stdcall
deleted file mode 100644
index 2b91fba7197f..000000000000
--- a/mail/thunderbird/files/patch-clang34-disable-stdcall
+++ /dev/null
@@ -1,13 +0,0 @@
-# http://llvm.org/bugs/show_bug.cgi?id=19007
-
---- mozilla/xpcom/base/nscore.h~
-+++ mozilla/xpcom/base/nscore.h
-@@ -110,7 +110,7 @@
- * NS_HIDDEN_(int) NS_FASTCALL func2(char *foo);
- */
-
--#if defined(__i386__) && defined(__GNUC__)
-+#if defined(__i386__) && defined(__GNUC__) && !(defined(__clang__) && __clang_major__ == 3 && __clang_minor__ == 4 && __clang_patchlevel__ == 0)
- #define NS_FASTCALL __attribute__ ((regparm (3), stdcall))
- #define NS_CONSTRUCTOR_FASTCALL __attribute__ ((regparm (3), stdcall))
- #elif defined(XP_WIN) && !defined(_WIN64)
diff --git a/net-im/linux-instantbird/pkg-plist b/net-im/linux-instantbird/pkg-plist
index 78c9c13aafa2..41afb73ce8f1 100644
--- a/net-im/linux-instantbird/pkg-plist
+++ b/net-im/linux-instantbird/pkg-plist
@@ -61,14 +61,3 @@ lib/%%APP_NAME%%/updater
lib/%%APP_NAME%%/updater.ini
@exec /bin/cp -R %%LOCALBASE%%/lib/xpi/symlinks/%%APP_NAME%%/ %D/lib/%%APP_NAME%%/extensions/ 2>/dev/null || true
@unexec /usr/bin/find %D/lib/%%APP_NAME%%/extensions/ -depth 1 -type l -delete 2>/dev/null || true
-@dirrm lib/%%APP_NAME%%/chrome/icons/default
-@dirrm lib/%%APP_NAME%%/chrome/icons
-@dirrm lib/%%APP_NAME%%/chrome
-@dirrm lib/%%APP_NAME%%/components
-@dirrm lib/%%APP_NAME%%/defaults/pref
-@dirrm lib/%%APP_NAME%%/defaults
-@dirrm lib/%%APP_NAME%%/dictionaries
-@dirrm lib/%%APP_NAME%%/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
-@dirrm lib/%%APP_NAME%%/extensions
-@dirrm lib/%%APP_NAME%%/icons
-@dirrm lib/%%APP_NAME%%
diff --git a/security/ca_root_nss/Makefile b/security/ca_root_nss/Makefile
index 00a1e815044c..05697332d82c 100644
--- a/security/ca_root_nss/Makefile
+++ b/security/ca_root_nss/Makefile
@@ -25,7 +25,7 @@ PLIST_SUB+= CERTDIR=${CERTDIR}
# !!! Please DO NOT submit patches for new version until it has !!!
# !!! been committed there first. !!!
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-VERSION_NSS= 3.17.1
+VERSION_NSS= 3.17.2
#NSS_SUFFIX= .with.ckbi.1.93
CERTDATA_TXT_PATH= nss-${VERSION_NSS}/nss/lib/ckfw/builtins/certdata.txt
BUNDLE_PROCESSOR= MAca-bundle.pl
diff --git a/security/ca_root_nss/distinfo b/security/ca_root_nss/distinfo
index f10d11f4c10f..a159ea298054 100644
--- a/security/ca_root_nss/distinfo
+++ b/security/ca_root_nss/distinfo
@@ -1,2 +1,2 @@
-SHA256 (nss-3.17.1.tar.gz) = 0e210afba7cd1e033a08f61fcd1f466639649fc413e72aa050f3d52c19376e5f
-SIZE (nss-3.17.1.tar.gz) = 6927105
+SHA256 (nss-3.17.2.tar.gz) = 134929e44e44b968a4883f4ee513a71ae45d55b486cee41ee8e26c3cc84dab8b
+SIZE (nss-3.17.2.tar.gz) = 6927414
diff --git a/security/ca_root_nss/pkg-plist b/security/ca_root_nss/pkg-plist
index 684e1fd864c4..1ef91c605872 100644
--- a/security/ca_root_nss/pkg-plist
+++ b/security/ca_root_nss/pkg-plist
@@ -1,2 +1,3 @@
%%CERTDIR%%/ca-root-nss.crt
-%%ETCSYMLINK%%/etc/ssl/cert.pem
+%%ETCSYMLINK%%@cwd /
+%%ETCSYMLINK%%etc/ssl/cert.pem
diff --git a/security/nss/Makefile b/security/nss/Makefile
index 0d1670747ad1..4453d936c093 100644
--- a/security/nss/Makefile
+++ b/security/nss/Makefile
@@ -2,7 +2,8 @@
# $FreeBSD$
PORTNAME= nss
-PORTVERSION= 3.17.1
+PORTVERSION= 3.17.2
+#DISTVERSIONSUFFIX= .with.ckbi.1.93
CATEGORIES= security
MASTER_SITES= MOZILLA/security/${PORTNAME}/releases/${DISTNAME:tu:C/[-.]/_/g}_RTM/src
diff --git a/security/nss/distinfo b/security/nss/distinfo
index f10d11f4c10f..a159ea298054 100644
--- a/security/nss/distinfo
+++ b/security/nss/distinfo
@@ -1,2 +1,2 @@
-SHA256 (nss-3.17.1.tar.gz) = 0e210afba7cd1e033a08f61fcd1f466639649fc413e72aa050f3d52c19376e5f
-SIZE (nss-3.17.1.tar.gz) = 6927105
+SHA256 (nss-3.17.2.tar.gz) = 134929e44e44b968a4883f4ee513a71ae45d55b486cee41ee8e26c3cc84dab8b
+SIZE (nss-3.17.2.tar.gz) = 6927414
diff --git a/security/nss/pkg-plist b/security/nss/pkg-plist
index 69ef420db9ab..2a383e9f1db6 100644
--- a/security/nss/pkg-plist
+++ b/security/nss/pkg-plist
@@ -136,6 +136,3 @@ lib/nss/libsoftokn3.so.1
lib/nss/libssl3.so
lib/nss/libssl3.so.1
libdata/pkgconfig/nss.pc
-@dirrm lib/nss
-@dirrm include/nss/nss
-@dirrm include/nss
diff --git a/www/firefox-esr-i18n/Makefile b/www/firefox-esr-i18n/Makefile
index 07e2ab3b5a94..1f8551e7bcf7 100644
--- a/www/firefox-esr-i18n/Makefile
+++ b/www/firefox-esr-i18n/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= firefox
-PORTVERSION= 31.1.1
+PORTVERSION= 31.2.0
CATEGORIES= www
MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${PORTVERSION}esr/linux-i686/xpi
PKGNAMEPREFIX=
@@ -15,7 +15,7 @@ COMMENT= Localized interface for Firefox
EXTRACT_DEPENDS= zip:${PORTSDIR}/archivers/zip
-USES= zip:infozip gecko:firefox
+USES= zip:infozip gecko:firefox,build
USE_XPI= firefox
NO_ARCH= yes
@@ -26,15 +26,11 @@ WDIR= langpack-*@firefox.mozilla.org
XPI_DISTNAMES= ${FIREFOX_I18N_}
PLIST?= ${WRKDIR}/plist
-PLISTD?= ${WRKDIR}/plist_dirs
PLISTF?= ${WRKDIR}/plist_files
.include "${.CURDIR}/Makefile.option"
.include <bsd.port.pre.mk>
-# make sure that firefox always gets upgraded before this port
-BUILD_DEPENDS+= firefox-esr>=0:${PORTSDIR}/www/firefox-esr
-
.ifndef WITHOUT_SWITCHER
RUN_DEPENDS+= xpi-quick-locale-switcher>=0:${PORTSDIR}/www/xpi-quick-locale-switcher
.endif
@@ -61,12 +57,9 @@ do-extract:
fi; \
cd ${WRKSRC}/langpack-$$lang@firefox.mozilla.org/; \
${FIND} -H -s * ! -type d | \
- ${SED} -e "s|^|lib/xpi/langpack-$$lang@firefox.mozilla.org/|" >> ${PLISTF} && \
- ${FIND} -d * -type d | \
- ${SED} -e "s|^|@dirrm lib/xpi/langpack-$$lang@firefox.mozilla.org/|" >> ${PLISTD}; \
+ ${SED} -e "s|^|lib/xpi/langpack-$$lang@firefox.mozilla.org/|" >> ${PLISTF}; \
done
${CAT} ${PLISTF} | ${SORT} >> ${PLIST}
- ${CAT} ${PLISTD} | ${SORT} -r >> ${PLIST}
do-install:
@${MKDIR} ${STAGEDIR}${XPI_LIBDIR} ${STAGEDIR}${XPI_SLDIRS_ALL}
diff --git a/www/firefox-esr-i18n/distinfo b/www/firefox-esr-i18n/distinfo
index 6ce9c18eb4ef..be84c552ea8d 100644
--- a/www/firefox-esr-i18n/distinfo
+++ b/www/firefox-esr-i18n/distinfo
@@ -1,178 +1,178 @@
-SHA256 (xpi/firefox-31.1.1/ach.xpi) = 6fdf1f2e6656c3a080a05f6a613578352eb61a437247c72f94cf4503c67d8ab0
-SIZE (xpi/firefox-31.1.1/ach.xpi) = 445521
-SHA256 (xpi/firefox-31.1.1/af.xpi) = 5874296d3904ae2badcf6c3b9c429bf3293a1460465ec17b1042dc31d2c5eefb
-SIZE (xpi/firefox-31.1.1/af.xpi) = 431286
-SHA256 (xpi/firefox-31.1.1/an.xpi) = 3c095a587b861f5a2b5e3ffdf30baba14f48b216c9f45c400c1bf7a6b9a4c578
-SIZE (xpi/firefox-31.1.1/an.xpi) = 407347
-SHA256 (xpi/firefox-31.1.1/ar.xpi) = 03eecec3999d308e11f5d6dbd95f3bc20c4c6764f3fd742631d966cd22c1b1a9
-SIZE (xpi/firefox-31.1.1/ar.xpi) = 460019
-SHA256 (xpi/firefox-31.1.1/as.xpi) = 4eb785835ac928665f9f7c24c3c6d3f9b4c85c2e88f637c9dca92ac1dd154e79
-SIZE (xpi/firefox-31.1.1/as.xpi) = 448764
-SHA256 (xpi/firefox-31.1.1/ast.xpi) = c4200329d076109584df6a3098918c8d39441b75e45fa9cdfed24ed9238993c8
-SIZE (xpi/firefox-31.1.1/ast.xpi) = 352536
-SHA256 (xpi/firefox-31.1.1/be.xpi) = d5343bbedf7c50466ce1d7e62cb362009448efddfe93fe30a030443f92f60a34
-SIZE (xpi/firefox-31.1.1/be.xpi) = 378864
-SHA256 (xpi/firefox-31.1.1/bg.xpi) = 8b2c1106301953f967dc47535b19ea86b626ec9ea36f52e6247e4ec96d4998ca
-SIZE (xpi/firefox-31.1.1/bg.xpi) = 438256
-SHA256 (xpi/firefox-31.1.1/bn-BD.xpi) = 1ce1de4604dfbd5c80ef714e2e1475702a9dadaaa3fd208867a5e991271423ab
-SIZE (xpi/firefox-31.1.1/bn-BD.xpi) = 472822
-SHA256 (xpi/firefox-31.1.1/bn-IN.xpi) = 2d7ba974217ec760593a84b8cf06c6c4db734e8f7ab4e43a297b9d943fb972f4
-SIZE (xpi/firefox-31.1.1/bn-IN.xpi) = 462788
-SHA256 (xpi/firefox-31.1.1/br.xpi) = 17eb535edbc81938d2e1921ccc8cfebfc2b1196d5eaa9188030c016c8f4eeab8
-SIZE (xpi/firefox-31.1.1/br.xpi) = 389901
-SHA256 (xpi/firefox-31.1.1/bs.xpi) = 6d9c82c976cc17db39b04d216c86eb4a209355257c93025779dd423d735ee5bb
-SIZE (xpi/firefox-31.1.1/bs.xpi) = 429210
-SHA256 (xpi/firefox-31.1.1/ca.xpi) = bfe41867be0b9f537b55f7ed08818050794db65262690c2f067b009487cac302
-SIZE (xpi/firefox-31.1.1/ca.xpi) = 403771
-SHA256 (xpi/firefox-31.1.1/cs.xpi) = f3cc9f6ae8052375b913004a9a8fc32af3cbecdadb33fa550eeec277046400be
-SIZE (xpi/firefox-31.1.1/cs.xpi) = 391174
-SHA256 (xpi/firefox-31.1.1/csb.xpi) = fccdbc4ad797ed4a030713af86db74fd785bf6ed1491fe630f9a6fb1654ba866
-SIZE (xpi/firefox-31.1.1/csb.xpi) = 383891
-SHA256 (xpi/firefox-31.1.1/cy.xpi) = 8a89d240e1dd6a836c97e1f23b252211fec9bd489c287dbac4a7a382d2d7fd56
-SIZE (xpi/firefox-31.1.1/cy.xpi) = 390923
-SHA256 (xpi/firefox-31.1.1/da.xpi) = c838feb1fe2974bb3dbafa662d4598a9dc2fd19e44a87ae27cbc7a8bf208c8a3
-SIZE (xpi/firefox-31.1.1/da.xpi) = 397943
-SHA256 (xpi/firefox-31.1.1/de.xpi) = 7f40ed6ade9bbb99cfe98097014f6a736c3c548d31a490ec44198497fdab293d
-SIZE (xpi/firefox-31.1.1/de.xpi) = 395360
-SHA256 (xpi/firefox-31.1.1/el.xpi) = bf3cadfb7a1b5e55174c27865629d64cfda90afc37acb16175623ec054519b9b
-SIZE (xpi/firefox-31.1.1/el.xpi) = 443178
-SHA256 (xpi/firefox-31.1.1/en-GB.xpi) = 223532757c5cbf945fd623db9decfb47576e54fe8df5e30e28cb29f24c5631fd
-SIZE (xpi/firefox-31.1.1/en-GB.xpi) = 390314
-SHA256 (xpi/firefox-31.1.1/en-US.xpi) = 1677b307f95d3d0e27bdb156390d7e7baf8abf735b674828905d52d9a2c719c0
-SIZE (xpi/firefox-31.1.1/en-US.xpi) = 422983
-SHA256 (xpi/firefox-31.1.1/en-ZA.xpi) = 43b63fd60c4b2df5961736b9c79bf471ec0fa8b6223e3e37eae7c5e5d932e9dc
-SIZE (xpi/firefox-31.1.1/en-ZA.xpi) = 388724
-SHA256 (xpi/firefox-31.1.1/eo.xpi) = 05a6c5e36a55abfa57d51fa2462177e1504b2316f76dc8f290d5d27ed2a0a0d1
-SIZE (xpi/firefox-31.1.1/eo.xpi) = 432027
-SHA256 (xpi/firefox-31.1.1/es-AR.xpi) = 215358c70e1c0a1b7d17175d34f71ac01ce097a54894dd11b10dc047cd0cfb00
-SIZE (xpi/firefox-31.1.1/es-AR.xpi) = 400133
-SHA256 (xpi/firefox-31.1.1/es-CL.xpi) = c4ad585111d1ee2a15b2fe9b25de34b28076e19a6c61adaea458fd09de9c904d
-SIZE (xpi/firefox-31.1.1/es-CL.xpi) = 343004
-SHA256 (xpi/firefox-31.1.1/es-ES.xpi) = 3a9f723c6ab2e1ab0d3b54b3b8fd1af6eee80b85d22bd2a70d9a1be377e13dd5
-SIZE (xpi/firefox-31.1.1/es-ES.xpi) = 336076
-SHA256 (xpi/firefox-31.1.1/es-MX.xpi) = 6035872b5923648fea348a97e7728a82fa5efb576fee5ca081fd529be37265af
-SIZE (xpi/firefox-31.1.1/es-MX.xpi) = 402868
-SHA256 (xpi/firefox-31.1.1/et.xpi) = 21abe762a361f7e4c46653ceb76bd403fe89ee72fd3747b12457ec6fa152474d
-SIZE (xpi/firefox-31.1.1/et.xpi) = 390557
-SHA256 (xpi/firefox-31.1.1/eu.xpi) = e25a2edd774fac26ec91bf8d14682f861529955f9744f797d711341e5df52cbd
-SIZE (xpi/firefox-31.1.1/eu.xpi) = 413195
-SHA256 (xpi/firefox-31.1.1/fa.xpi) = 4380d34f6faea6768e36ed6378786a113150da69f3e7a9ed6cd6f3ef3478a2d4
-SIZE (xpi/firefox-31.1.1/fa.xpi) = 461053
-SHA256 (xpi/firefox-31.1.1/ff.xpi) = 7b98d33bcfbe159dadc1ecd1b81f79881c8774cf1a6cc3fa5d90f5c0974c2082
-SIZE (xpi/firefox-31.1.1/ff.xpi) = 400339
-SHA256 (xpi/firefox-31.1.1/fi.xpi) = a6181675e753d2f38505a829409f58264a4d48c9e7eb88f67bada06143a542f8
-SIZE (xpi/firefox-31.1.1/fi.xpi) = 392935
-SHA256 (xpi/firefox-31.1.1/fr.xpi) = af8d1c53d9aab9610c5832a55ecc0681cf242b2dfefb10d32be5a7c7d5df7d92
-SIZE (xpi/firefox-31.1.1/fr.xpi) = 406658
-SHA256 (xpi/firefox-31.1.1/fy-NL.xpi) = 69f6f76874531b78a903353e42cb4c6be1b48cde6a826657d5750295bde241ea
-SIZE (xpi/firefox-31.1.1/fy-NL.xpi) = 402126
-SHA256 (xpi/firefox-31.1.1/ga-IE.xpi) = 556ba1ab2358d4b0342d0857d33fe30cce0159b5b56c868795ee07ef52898102
-SIZE (xpi/firefox-31.1.1/ga-IE.xpi) = 410272
-SHA256 (xpi/firefox-31.1.1/gd.xpi) = 62cc0784e8505aa65bd473013d29ce340733c7bd8310a58ae8864e182b9e82a9
-SIZE (xpi/firefox-31.1.1/gd.xpi) = 403209
-SHA256 (xpi/firefox-31.1.1/gl.xpi) = cac80900712c81e12ec130c209765bf68b46fcff5eabee8b9152089903d77930
-SIZE (xpi/firefox-31.1.1/gl.xpi) = 390795
-SHA256 (xpi/firefox-31.1.1/gu-IN.xpi) = 371f13f674423f1dfd88ab7c64883440afed9dee347116dddc1aab6cb86e9f0f
-SIZE (xpi/firefox-31.1.1/gu-IN.xpi) = 423698
-SHA256 (xpi/firefox-31.1.1/he.xpi) = 5d71c412e54e4a99050f57b46ab17f304a09b237fec129a1442dde5cc6911aee
-SIZE (xpi/firefox-31.1.1/he.xpi) = 427826
-SHA256 (xpi/firefox-31.1.1/hi-IN.xpi) = 05d20383bc27e75c6535101a1eadc5f60d52b618d0cddfbe04161852bc31c4e5
-SIZE (xpi/firefox-31.1.1/hi-IN.xpi) = 441597
-SHA256 (xpi/firefox-31.1.1/hr.xpi) = ce3c722bd803b404600a12cbcee089667b069b012368b3d7970d00e16be501c1
-SIZE (xpi/firefox-31.1.1/hr.xpi) = 424567
-SHA256 (xpi/firefox-31.1.1/hsb.xpi) = ad80ddd7dbd7c8beef870c5260b1a57071dee059f28ede6dd9a5d8499fe5ab6d
-SIZE (xpi/firefox-31.1.1/hsb.xpi) = 413272
-SHA256 (xpi/firefox-31.1.1/hu.xpi) = 56106ebf8f077e0164daf24ec2958c2827ab8faa6c82674702a4da36b71775fa
-SIZE (xpi/firefox-31.1.1/hu.xpi) = 398840
-SHA256 (xpi/firefox-31.1.1/hy-AM.xpi) = aa5066e369b9059f5703472e9aa4b74eef359421a18c32e32d5ab096ebf4d744
-SIZE (xpi/firefox-31.1.1/hy-AM.xpi) = 478939
-SHA256 (xpi/firefox-31.1.1/id.xpi) = 4dae7e640509860e73039c62cce36547c7548807768ed76f106933962eb5924f
-SIZE (xpi/firefox-31.1.1/id.xpi) = 378497
-SHA256 (xpi/firefox-31.1.1/is.xpi) = 6f333874466de53763ab43c17a0e19ad072bb08e07c312ee2d45246f24216a06
-SIZE (xpi/firefox-31.1.1/is.xpi) = 427523
-SHA256 (xpi/firefox-31.1.1/it.xpi) = bea9801005341306abb709f5b5e1baf6c24454b1f6883e114d4d7ec8c430f4a0
-SIZE (xpi/firefox-31.1.1/it.xpi) = 331101
-SHA256 (xpi/firefox-31.1.1/ja.xpi) = 8034e32113788b71c4a5461d435eaf5c9e0e29fc6253c08ca6681c0aa2c587cf
-SIZE (xpi/firefox-31.1.1/ja.xpi) = 421664
-SHA256 (xpi/firefox-31.1.1/kk.xpi) = 928da032eaca0c2d00adc8d18909f48a4ebe314f1bdcfecb4226f2b201ffc90c
-SIZE (xpi/firefox-31.1.1/kk.xpi) = 439312
-SHA256 (xpi/firefox-31.1.1/km.xpi) = a9766a123776bf9e0bab3fe1dc9a5ec1e8547a604eeffdb83dcfa3588764fffe
-SIZE (xpi/firefox-31.1.1/km.xpi) = 506672
-SHA256 (xpi/firefox-31.1.1/kn.xpi) = c34a3b1b7a6d73037c0aff4b439d1bd4a763ca30ac6384eefa572a007258ab07
-SIZE (xpi/firefox-31.1.1/kn.xpi) = 459087
-SHA256 (xpi/firefox-31.1.1/ko.xpi) = 7786691a1cdce405825be81ca3a34e334b0faa7a5b9aef0138a403946d9da2db
-SIZE (xpi/firefox-31.1.1/ko.xpi) = 403010
-SHA256 (xpi/firefox-31.1.1/ku.xpi) = 016ac15dbe6ec47539caff01c3da210f30c9b7f2a762c4b2e3b2c90555b71078
-SIZE (xpi/firefox-31.1.1/ku.xpi) = 420259
-SHA256 (xpi/firefox-31.1.1/lij.xpi) = 22d338a6c0a79637faf87e6ed4f5bcc3bcfb1eddf24c302f316c7c5ca4980a7d
-SIZE (xpi/firefox-31.1.1/lij.xpi) = 386060
-SHA256 (xpi/firefox-31.1.1/lt.xpi) = 1af446a4e81b6deadc7f5b8a1636970af443a2559f8d567dee1b3a57e33f3919
-SIZE (xpi/firefox-31.1.1/lt.xpi) = 435627
-SHA256 (xpi/firefox-31.1.1/lv.xpi) = b97839604f2f11447311b002cb0bc2b10d1f05df186d8d993a4deac9fae49c20
-SIZE (xpi/firefox-31.1.1/lv.xpi) = 398772
-SHA256 (xpi/firefox-31.1.1/mai.xpi) = a9e704365371a55f301bbca9b6cf637df7b31023337af2b0e3d8c756b3fea340
-SIZE (xpi/firefox-31.1.1/mai.xpi) = 445080
-SHA256 (xpi/firefox-31.1.1/mk.xpi) = ba59a414acd349cfc8854c35cbb41e479469437addb89dcae88eb511051e0691
-SIZE (xpi/firefox-31.1.1/mk.xpi) = 475679
-SHA256 (xpi/firefox-31.1.1/ml.xpi) = d7915d1dae94507e63bce378a0c39343328577206134ec58481838e164b26130
-SIZE (xpi/firefox-31.1.1/ml.xpi) = 466450
-SHA256 (xpi/firefox-31.1.1/mr.xpi) = 6363700e29ddd2908ddffbff2dc33d4a1a18d1a2f76e71c965fd268842b9eaa9
-SIZE (xpi/firefox-31.1.1/mr.xpi) = 451487
-SHA256 (xpi/firefox-31.1.1/ms.xpi) = 604dc5f23278c91fe6259cebc91beab8b5cbcf09cfe308daa438612fb2a03fdd
-SIZE (xpi/firefox-31.1.1/ms.xpi) = 436427
-SHA256 (xpi/firefox-31.1.1/nb-NO.xpi) = af19788ad67b8ebbdb6abe50b18650d3655c0fb95d602867eaea86bcf5715d28
-SIZE (xpi/firefox-31.1.1/nb-NO.xpi) = 392201
-SHA256 (xpi/firefox-31.1.1/nl.xpi) = ce4db00532785488cd10450231cef90aa0e93572c83c8da9cfd6a91c631bc1b0
-SIZE (xpi/firefox-31.1.1/nl.xpi) = 391081
-SHA256 (xpi/firefox-31.1.1/nn-NO.xpi) = 9dfb2fb13405ed19d8d880623d58457738a8984d44b47298649deb41c052ad68
-SIZE (xpi/firefox-31.1.1/nn-NO.xpi) = 386477
-SHA256 (xpi/firefox-31.1.1/or.xpi) = 1f179e14464af7832aa85ef3a392735a5d08e6ef8ad415d5670cda3a121310e6
-SIZE (xpi/firefox-31.1.1/or.xpi) = 464946
-SHA256 (xpi/firefox-31.1.1/pa-IN.xpi) = 78a26f4751d5a7018af41084d7e078d6741465f49ae6b2d0dc89e3d3f4d4848f
-SIZE (xpi/firefox-31.1.1/pa-IN.xpi) = 439522
-SHA256 (xpi/firefox-31.1.1/pl.xpi) = 91e8441981e9684f8c521d4fbb4b393748de2f03aca8fe08c4849eb1189cfa98
-SIZE (xpi/firefox-31.1.1/pl.xpi) = 374942
-SHA256 (xpi/firefox-31.1.1/pt-BR.xpi) = 0febcf4143322916cc959a986ef1bb0d3dadd3ad562861c58aca0c4952348831
-SIZE (xpi/firefox-31.1.1/pt-BR.xpi) = 405761
-SHA256 (xpi/firefox-31.1.1/pt-PT.xpi) = 5ea85bd2f7dc5b59313e7951fd220fb9156b82d0244440b530ce920f8d8c4870
-SIZE (xpi/firefox-31.1.1/pt-PT.xpi) = 386540
-SHA256 (xpi/firefox-31.1.1/rm.xpi) = aa669ecb03ce28ef863bd2aec634f56bc893e264c29e32580bb0b2582619dbd8
-SIZE (xpi/firefox-31.1.1/rm.xpi) = 399482
-SHA256 (xpi/firefox-31.1.1/ro.xpi) = 129f2f91ccd94e910071ca2c04abc70df6ea343454c6b7cbb91fa70a09c57a40
-SIZE (xpi/firefox-31.1.1/ro.xpi) = 439583
-SHA256 (xpi/firefox-31.1.1/ru.xpi) = 653b01e41b465517f92ef604c1ef050bbacd9890b10a53af4324382d174bf4cb
-SIZE (xpi/firefox-31.1.1/ru.xpi) = 368093
-SHA256 (xpi/firefox-31.1.1/si.xpi) = 06861fc68e466857de23928263c53bec114eb48d02b86555b3b0b2ebea6eaa29
-SIZE (xpi/firefox-31.1.1/si.xpi) = 463420
-SHA256 (xpi/firefox-31.1.1/sk.xpi) = fbb10e2de2d07d5573d9940fa7a56214619c1454b3e53698d455249fd15597fe
-SIZE (xpi/firefox-31.1.1/sk.xpi) = 413998
-SHA256 (xpi/firefox-31.1.1/sl.xpi) = 639948ffb5acd1871ea736256eb6c34e139d1bf5de89a16ff98382d73c4b6389
-SIZE (xpi/firefox-31.1.1/sl.xpi) = 387330
-SHA256 (xpi/firefox-31.1.1/son.xpi) = ef988159928608d56ea34af4b7d5a37ec91ad7c7bba2a692e48717f35142be06
-SIZE (xpi/firefox-31.1.1/son.xpi) = 395339
-SHA256 (xpi/firefox-31.1.1/sq.xpi) = 5b7e3b0a8c8792196465c30260820f8365e8b3045a7d2786e2ad27101dec0bb4
-SIZE (xpi/firefox-31.1.1/sq.xpi) = 431332
-SHA256 (xpi/firefox-31.1.1/sr.xpi) = cf71728a9de5d45eae8688a85a9018404e37ec695cc8894fca8516d5b0fac2df
-SIZE (xpi/firefox-31.1.1/sr.xpi) = 426098
-SHA256 (xpi/firefox-31.1.1/sv-SE.xpi) = fc6caed086a855da848ceb68cac8fe2b9a6a64b5a3a6605cf5c9bba84532ccd0
-SIZE (xpi/firefox-31.1.1/sv-SE.xpi) = 399222
-SHA256 (xpi/firefox-31.1.1/ta.xpi) = 28dbd7dd6a47b617b77a7dd5329ca69f5caa43ed795b7ba97500b923f2ae8b5a
-SIZE (xpi/firefox-31.1.1/ta.xpi) = 447882
-SHA256 (xpi/firefox-31.1.1/te.xpi) = 0d9b89c3ee2a4939eb1f25942649a6767bf774ff3fb56b5612cb4c8ff40e12bf
-SIZE (xpi/firefox-31.1.1/te.xpi) = 462784
-SHA256 (xpi/firefox-31.1.1/th.xpi) = 0c83a11e5b502d4bfd9ef8e8f1876d7a2aafd34d25d32d5d28e83b4bce26c2e8
-SIZE (xpi/firefox-31.1.1/th.xpi) = 478322
-SHA256 (xpi/firefox-31.1.1/tr.xpi) = 38e657289b5e23c0af4dac58943ef028bc52806ee9771f5fbd616530d561e56e
-SIZE (xpi/firefox-31.1.1/tr.xpi) = 417566
-SHA256 (xpi/firefox-31.1.1/uk.xpi) = b3a2c405fc815451952517ec0b132699cbb247f291cd5a2190791223a744d581
-SIZE (xpi/firefox-31.1.1/uk.xpi) = 428198
-SHA256 (xpi/firefox-31.1.1/vi.xpi) = 29201bfd7c77c405e1d5f49694b398b1e205b632b8e958b5a0ba839e7eabbf3e
-SIZE (xpi/firefox-31.1.1/vi.xpi) = 413570
-SHA256 (xpi/firefox-31.1.1/xh.xpi) = 38a24819d64c9f09b578601f2f285e55290d26475f806720dd1c1aa0281fdb60
-SIZE (xpi/firefox-31.1.1/xh.xpi) = 398072
-SHA256 (xpi/firefox-31.1.1/zh-CN.xpi) = 03f44281fe0d63243d6d975b1c030c202a0eba8862d507464b22bc3b69a0a9ac
-SIZE (xpi/firefox-31.1.1/zh-CN.xpi) = 419826
-SHA256 (xpi/firefox-31.1.1/zh-TW.xpi) = 3ea6c0b5bf573259bbfda7fcc3933739cd2d14ce08911731157376724bc1f420
-SIZE (xpi/firefox-31.1.1/zh-TW.xpi) = 412717
-SHA256 (xpi/firefox-31.1.1/zu.xpi) = 3ad0b6daf51f88997e438d4b9e076b9f78ab8e6118b9fe153c1ff719ec4dac2b
-SIZE (xpi/firefox-31.1.1/zu.xpi) = 433412
+SHA256 (xpi/firefox-31.2.0/ach.xpi) = c769e86035a60f576525823a7a36607a411b202c3d7604ebc5da5bed2124bed9
+SIZE (xpi/firefox-31.2.0/ach.xpi) = 445523
+SHA256 (xpi/firefox-31.2.0/af.xpi) = 57cdf7f14b5a005b701168f5b00921d6969462e44432547f1654b58c377c0b77
+SIZE (xpi/firefox-31.2.0/af.xpi) = 431286
+SHA256 (xpi/firefox-31.2.0/an.xpi) = dbb32e0247988d700b1d3a92bf88d477252c655aabcc014fc5ed4f6809368e82
+SIZE (xpi/firefox-31.2.0/an.xpi) = 407348
+SHA256 (xpi/firefox-31.2.0/ar.xpi) = b06fa502bc99c5a9e92540a1520c0978d05806520a91a9bb3d7c10888b32ccb9
+SIZE (xpi/firefox-31.2.0/ar.xpi) = 460021
+SHA256 (xpi/firefox-31.2.0/as.xpi) = bb6f9a5102f1f38ac6f234fc0c767d732bf97baa0e419d78bf9b75b1a9bd12b0
+SIZE (xpi/firefox-31.2.0/as.xpi) = 448765
+SHA256 (xpi/firefox-31.2.0/ast.xpi) = 0fe5e881a60cb60cade90c708710ec56270e188ede4b39e06fd7b505fe823a0b
+SIZE (xpi/firefox-31.2.0/ast.xpi) = 352537
+SHA256 (xpi/firefox-31.2.0/be.xpi) = 0355ee81c6feb0df5c088099841d86ba05050fd9e79eca62170457b79757b4c6
+SIZE (xpi/firefox-31.2.0/be.xpi) = 378865
+SHA256 (xpi/firefox-31.2.0/bg.xpi) = e4246b7a7278974dad4c6bb60eea2984d436e1cca839dd3b8d583c447a03615c
+SIZE (xpi/firefox-31.2.0/bg.xpi) = 438257
+SHA256 (xpi/firefox-31.2.0/bn-BD.xpi) = 38d5e7e6d9f7835ca764213bbd2a31346358cbb61bb8dd3789e16798a112ddb7
+SIZE (xpi/firefox-31.2.0/bn-BD.xpi) = 472823
+SHA256 (xpi/firefox-31.2.0/bn-IN.xpi) = 1afeea551763b587256421a601ff4b6ce60e53b287bf712a835e7b17fed875e8
+SIZE (xpi/firefox-31.2.0/bn-IN.xpi) = 462789
+SHA256 (xpi/firefox-31.2.0/br.xpi) = d8ddd888288ab49b6904c1f4abb7ce4c38acae1efaa46759938d81b047cc83b6
+SIZE (xpi/firefox-31.2.0/br.xpi) = 389901
+SHA256 (xpi/firefox-31.2.0/bs.xpi) = 837e4a8889ff6c1d017e5ae5b1dede1d7a5cb3d0d083aecbc7b21a88a0cff2ae
+SIZE (xpi/firefox-31.2.0/bs.xpi) = 429211
+SHA256 (xpi/firefox-31.2.0/ca.xpi) = 537a4711f2a142014fbccfaf3bc31ba42af643544d0125cf06778acd4abe4e07
+SIZE (xpi/firefox-31.2.0/ca.xpi) = 403772
+SHA256 (xpi/firefox-31.2.0/cs.xpi) = 482090ca325690abd77eef212824869a87654231f02f23bae50bbb7a2fafdf87
+SIZE (xpi/firefox-31.2.0/cs.xpi) = 391176
+SHA256 (xpi/firefox-31.2.0/csb.xpi) = ea225f7b951d602ade09b2542a5c0784b604709207f4cf5433ac83e1698b1eb3
+SIZE (xpi/firefox-31.2.0/csb.xpi) = 383891
+SHA256 (xpi/firefox-31.2.0/cy.xpi) = 510150d21176fb7f643b7e14cdd70673d5013b3a0e609d2ca384ca094ef69f76
+SIZE (xpi/firefox-31.2.0/cy.xpi) = 390924
+SHA256 (xpi/firefox-31.2.0/da.xpi) = 0132e0748a0cc5f7e43ae61b070b9c4112dce750878ddc2aa27dfc2c72b035f3
+SIZE (xpi/firefox-31.2.0/da.xpi) = 397944
+SHA256 (xpi/firefox-31.2.0/de.xpi) = 1465a28db347e3c0df9e01739e345035335f6490ca7518b198b1a63dee60d5f5
+SIZE (xpi/firefox-31.2.0/de.xpi) = 395361
+SHA256 (xpi/firefox-31.2.0/el.xpi) = 78c1461e87834b59ac58125e01d3687e058ab302d01569a5bf2807856977bac4
+SIZE (xpi/firefox-31.2.0/el.xpi) = 443179
+SHA256 (xpi/firefox-31.2.0/en-GB.xpi) = 54965babb2213abf774d42888f6e2f6f2edaa22d4694879d883cf4fcf2e40364
+SIZE (xpi/firefox-31.2.0/en-GB.xpi) = 390315
+SHA256 (xpi/firefox-31.2.0/en-US.xpi) = 1a3749346ca21a483e251fe6e481a20164f872c1b12a5346924d9f22c9d54aac
+SIZE (xpi/firefox-31.2.0/en-US.xpi) = 422984
+SHA256 (xpi/firefox-31.2.0/en-ZA.xpi) = 9368f89b995028edc2862bce1d63dc513bc0e48bb6fe8f5db103abdc1dabfd2b
+SIZE (xpi/firefox-31.2.0/en-ZA.xpi) = 388725
+SHA256 (xpi/firefox-31.2.0/eo.xpi) = 5e4931c8f711c2425600736aa8aa09a43e198d407ce895ec9e99ebd052789a59
+SIZE (xpi/firefox-31.2.0/eo.xpi) = 432028
+SHA256 (xpi/firefox-31.2.0/es-AR.xpi) = 3fb090888018f4af3adecaaa1784d0e2d4f7951caac9ab043cfeb8f8a9332958
+SIZE (xpi/firefox-31.2.0/es-AR.xpi) = 400134
+SHA256 (xpi/firefox-31.2.0/es-CL.xpi) = a02fe5632557dc92508b6c320a14b7020d5dde0e7932e3b4f4aad18bedd318b7
+SIZE (xpi/firefox-31.2.0/es-CL.xpi) = 343005
+SHA256 (xpi/firefox-31.2.0/es-ES.xpi) = a32e7bfb38a3ac4be877f9633a8c66c7aacb8ef46da2efa560b624460f4565bd
+SIZE (xpi/firefox-31.2.0/es-ES.xpi) = 336077
+SHA256 (xpi/firefox-31.2.0/es-MX.xpi) = ff372bfa355b8ef259fd99fce95c4125cc28f5095c8f7a08c769517dda557ed3
+SIZE (xpi/firefox-31.2.0/es-MX.xpi) = 402869
+SHA256 (xpi/firefox-31.2.0/et.xpi) = 2c28f96ff32ad93b8b1f44c7fafeffeae7d1d6c659dca1b21d12fa486e90f143
+SIZE (xpi/firefox-31.2.0/et.xpi) = 390557
+SHA256 (xpi/firefox-31.2.0/eu.xpi) = b24004437d622122bb8d4bfd54334c6d89e4ef5640d3abd047459d8fd9d7425d
+SIZE (xpi/firefox-31.2.0/eu.xpi) = 413196
+SHA256 (xpi/firefox-31.2.0/fa.xpi) = 7827842cd6534550afae0152c35744e12a9d6db21aa74677aff3978bc941319f
+SIZE (xpi/firefox-31.2.0/fa.xpi) = 461054
+SHA256 (xpi/firefox-31.2.0/ff.xpi) = 074b0141d94be2fb03d0dd2842c0797cc575e0c87ca6ab3715c82b79738d4649
+SIZE (xpi/firefox-31.2.0/ff.xpi) = 400340
+SHA256 (xpi/firefox-31.2.0/fi.xpi) = 006ec627541f25c5e5f7dafc867145537fae603ed284f8f8b60d581631b41199
+SIZE (xpi/firefox-31.2.0/fi.xpi) = 392936
+SHA256 (xpi/firefox-31.2.0/fr.xpi) = 5a9cffccefd8ddf04f3272cb2f4b7572fece6a18f7c3668e409acdbd6286e977
+SIZE (xpi/firefox-31.2.0/fr.xpi) = 406659
+SHA256 (xpi/firefox-31.2.0/fy-NL.xpi) = 9881d96cc165c9d9a2df59ce4727d755ca621ea8611121ff08fbdd3fb69fc5ac
+SIZE (xpi/firefox-31.2.0/fy-NL.xpi) = 402126
+SHA256 (xpi/firefox-31.2.0/ga-IE.xpi) = bca393f87d5fd0924837765f64541742e0863ec7e79aad080ecbfa89a53f1104
+SIZE (xpi/firefox-31.2.0/ga-IE.xpi) = 410274
+SHA256 (xpi/firefox-31.2.0/gd.xpi) = 255ee1279267c7272290884a578b5481e1a69541dfc25429da7947d6d9fc8bff
+SIZE (xpi/firefox-31.2.0/gd.xpi) = 403210
+SHA256 (xpi/firefox-31.2.0/gl.xpi) = 1568276d2872d6d8b723e42947604290951702aea9316a9d38fc77a15613913a
+SIZE (xpi/firefox-31.2.0/gl.xpi) = 390796
+SHA256 (xpi/firefox-31.2.0/gu-IN.xpi) = 0dd85acebb39393984549eefeb5b499cdd10c5bb1512221458cac759032f2245
+SIZE (xpi/firefox-31.2.0/gu-IN.xpi) = 423699
+SHA256 (xpi/firefox-31.2.0/he.xpi) = 823c801d00be4aa28a8bb58449cfc236f3d3451c34636a9343fd3c608999a3e9
+SIZE (xpi/firefox-31.2.0/he.xpi) = 427827
+SHA256 (xpi/firefox-31.2.0/hi-IN.xpi) = dc46b295b2b3effac251006b2288f8879c0660fb7e34cb018ffbdf76113849ba
+SIZE (xpi/firefox-31.2.0/hi-IN.xpi) = 441599
+SHA256 (xpi/firefox-31.2.0/hr.xpi) = 9d1d4043ec2a9582944e6b3bd1cf530c552c3f2b5ed311167e95c86486deb9c4
+SIZE (xpi/firefox-31.2.0/hr.xpi) = 424568
+SHA256 (xpi/firefox-31.2.0/hsb.xpi) = 48b13132f0f31fb9f0841b3af14928813deb04a7dbdd12318433b730e38f161c
+SIZE (xpi/firefox-31.2.0/hsb.xpi) = 413273
+SHA256 (xpi/firefox-31.2.0/hu.xpi) = 37ab26915267e7e18e6fc319a15ac3024035e33ff176cef87b9c0322e23e799a
+SIZE (xpi/firefox-31.2.0/hu.xpi) = 398841
+SHA256 (xpi/firefox-31.2.0/hy-AM.xpi) = 56a0495127d8afe15dde6ec9405d4ffcfbed3fe1fbea916eaae716d135566a96
+SIZE (xpi/firefox-31.2.0/hy-AM.xpi) = 478940
+SHA256 (xpi/firefox-31.2.0/id.xpi) = 51f32b7cf43083a7c9a4909c87ac5708f0d4095e1b88b576fa00531b45639576
+SIZE (xpi/firefox-31.2.0/id.xpi) = 378498
+SHA256 (xpi/firefox-31.2.0/is.xpi) = 211287e74680cff1f0f2ff98666ae3e794ce8b20e2d278b2fe0a9c2e9b8c5e1b
+SIZE (xpi/firefox-31.2.0/is.xpi) = 427524
+SHA256 (xpi/firefox-31.2.0/it.xpi) = 050ef8be24f69022fc9d06a34288ae7f531c0a8e341d959ccde1338298c16e0e
+SIZE (xpi/firefox-31.2.0/it.xpi) = 331102
+SHA256 (xpi/firefox-31.2.0/ja.xpi) = 6782829c967cdd70dfeffc682e5d4964e4e3c6171ce3b98ab5fdb315d4e3aa5c
+SIZE (xpi/firefox-31.2.0/ja.xpi) = 421664
+SHA256 (xpi/firefox-31.2.0/kk.xpi) = faf857b0f39559d0a462f1f7a9eda0e82ceaafb26d261107ff737c3df9fcf94b
+SIZE (xpi/firefox-31.2.0/kk.xpi) = 439313
+SHA256 (xpi/firefox-31.2.0/km.xpi) = 34f832f39ec8e76c89ad27a9eaf2b98d4023b16b28f8b8f4a8e7dc072f865656
+SIZE (xpi/firefox-31.2.0/km.xpi) = 506673
+SHA256 (xpi/firefox-31.2.0/kn.xpi) = d8f70817729b91a823b133ac4e44f3a93e4acb47bde85e97212de636e16f203b
+SIZE (xpi/firefox-31.2.0/kn.xpi) = 459088
+SHA256 (xpi/firefox-31.2.0/ko.xpi) = 2ebc4178fd8e3f2a4ad270994413bb72e5242b6933b941a5c2b5ddc30ee7bd45
+SIZE (xpi/firefox-31.2.0/ko.xpi) = 403011
+SHA256 (xpi/firefox-31.2.0/ku.xpi) = a706dc8164911ffd151670deb5b39310065915ff90ab00b332442d790d728fc0
+SIZE (xpi/firefox-31.2.0/ku.xpi) = 420260
+SHA256 (xpi/firefox-31.2.0/lij.xpi) = 3893fc559cc1c5ebee0b82034cb87b17140231d47e3ddb9c89b6c011fdc7b8dd
+SIZE (xpi/firefox-31.2.0/lij.xpi) = 386061
+SHA256 (xpi/firefox-31.2.0/lt.xpi) = b5183c5874ca9df14343eb1c818de9d3ae5cf190d0f299d0ac6dd791f1c5922d
+SIZE (xpi/firefox-31.2.0/lt.xpi) = 435628
+SHA256 (xpi/firefox-31.2.0/lv.xpi) = 78674c9deb360ac74425cda52c5acb9ea7358fd08a7145ad02379209a695c66b
+SIZE (xpi/firefox-31.2.0/lv.xpi) = 398773
+SHA256 (xpi/firefox-31.2.0/mai.xpi) = 37be09e55574343c15f7dbdb0d175dbc6d08c5a98d3c0d806ea93168db2d2bfd
+SIZE (xpi/firefox-31.2.0/mai.xpi) = 445082
+SHA256 (xpi/firefox-31.2.0/mk.xpi) = 4d1e11edc32d66753c9474403b66cfada750b1093ec888d94c01fb5a5be33148
+SIZE (xpi/firefox-31.2.0/mk.xpi) = 475680
+SHA256 (xpi/firefox-31.2.0/ml.xpi) = 2329f4af84513c928e401cb40614ecc18ad041ec60d42832ec5d14c0f5204580
+SIZE (xpi/firefox-31.2.0/ml.xpi) = 466451
+SHA256 (xpi/firefox-31.2.0/mr.xpi) = daf65260a17f6b83834b1d5c377af999810a1c7bed3a5b4aa40e183fbd733314
+SIZE (xpi/firefox-31.2.0/mr.xpi) = 451488
+SHA256 (xpi/firefox-31.2.0/ms.xpi) = 5568d4cdf4574ab6e4b60aa6d83a3ef80bd62699a2ba1c6a78dbc11f34c2f1b6
+SIZE (xpi/firefox-31.2.0/ms.xpi) = 436427
+SHA256 (xpi/firefox-31.2.0/nb-NO.xpi) = 8a313933ad2b47d73fcd8039831fcde57c628d129e63d67fd2a620f9fbcc2fc0
+SIZE (xpi/firefox-31.2.0/nb-NO.xpi) = 392203
+SHA256 (xpi/firefox-31.2.0/nl.xpi) = d2d787673e4be5b54569bb6a4bed3b6353a01bcaf6626cd6cd7caf10424432c8
+SIZE (xpi/firefox-31.2.0/nl.xpi) = 391082
+SHA256 (xpi/firefox-31.2.0/nn-NO.xpi) = 23babb9300e18e16e9cebacca00a2cc33685dafde3ad3d331ab40e820a94fa26
+SIZE (xpi/firefox-31.2.0/nn-NO.xpi) = 386478
+SHA256 (xpi/firefox-31.2.0/or.xpi) = 1d7ab1bc8ba86d19f84ad04f26edfe1dd029b5a49baaaddf946f083012e0b934
+SIZE (xpi/firefox-31.2.0/or.xpi) = 464946
+SHA256 (xpi/firefox-31.2.0/pa-IN.xpi) = 2b5ca7f0a23d671a72f4df7b204791d6c492c4d883d53b708568600f6578baee
+SIZE (xpi/firefox-31.2.0/pa-IN.xpi) = 439523
+SHA256 (xpi/firefox-31.2.0/pl.xpi) = 407985b06154518eb72b0f1da73c87c068d5da4dca539ec8b8bca9add870d6bf
+SIZE (xpi/firefox-31.2.0/pl.xpi) = 374944
+SHA256 (xpi/firefox-31.2.0/pt-BR.xpi) = e763c07a6b80ed36c5747f1a32d111021bd17fc1ef2cd9e1aa12c1c90951cace
+SIZE (xpi/firefox-31.2.0/pt-BR.xpi) = 405762
+SHA256 (xpi/firefox-31.2.0/pt-PT.xpi) = 381e2a663c660ed9cf63eaed262b396d65f2c70854beb3fbec89ddcc972762f4
+SIZE (xpi/firefox-31.2.0/pt-PT.xpi) = 386541
+SHA256 (xpi/firefox-31.2.0/rm.xpi) = da3e9f63941cc72c0cc070217bf2fa71801098e990a16165710aadb1a285547d
+SIZE (xpi/firefox-31.2.0/rm.xpi) = 399482
+SHA256 (xpi/firefox-31.2.0/ro.xpi) = 4b1d62a87be63f08318274c256ae282900b917b175d1502d2f2556fee93b3ddb
+SIZE (xpi/firefox-31.2.0/ro.xpi) = 439584
+SHA256 (xpi/firefox-31.2.0/ru.xpi) = e8732b5b096db9dc60eb6a9ebae9e78a5e7c9997ddf2fb97f3b62ddbb15cecff
+SIZE (xpi/firefox-31.2.0/ru.xpi) = 368094
+SHA256 (xpi/firefox-31.2.0/si.xpi) = 27872434fa0ae19d1044229af86aca23cb6b02f033ccd9228920689b2d71e060
+SIZE (xpi/firefox-31.2.0/si.xpi) = 463420
+SHA256 (xpi/firefox-31.2.0/sk.xpi) = a631838713bf217783d0ed83337a778569afb94e13735a70925d0c5079db151e
+SIZE (xpi/firefox-31.2.0/sk.xpi) = 413999
+SHA256 (xpi/firefox-31.2.0/sl.xpi) = 855e46b2b49d02809dc068dee1e98ee51394ec3549fffd5cdc0dad93409c453d
+SIZE (xpi/firefox-31.2.0/sl.xpi) = 387331
+SHA256 (xpi/firefox-31.2.0/son.xpi) = 41c3d4322c383f203506ce3bda188119cc1cdce0bcdcd4185ec0f51c75297267
+SIZE (xpi/firefox-31.2.0/son.xpi) = 395340
+SHA256 (xpi/firefox-31.2.0/sq.xpi) = e450cf0d2cb0cd42522ab6a5d070e95388095f6e7e3403a424af2d7119cf007a
+SIZE (xpi/firefox-31.2.0/sq.xpi) = 431332
+SHA256 (xpi/firefox-31.2.0/sr.xpi) = cbb505263e8e6c6108cbe0105cbd183c5b8ba5495c66739ea441ab56982e0189
+SIZE (xpi/firefox-31.2.0/sr.xpi) = 426099
+SHA256 (xpi/firefox-31.2.0/sv-SE.xpi) = 362c6eac4236deab720557af6a90fdd28bae7360f67a7384e0b62aa1af0c73ab
+SIZE (xpi/firefox-31.2.0/sv-SE.xpi) = 399223
+SHA256 (xpi/firefox-31.2.0/ta.xpi) = 8dfa72d8d5eaf474ff1a00e398df2a6749b6e4e65f5666b5a0d94e53c6e4530f
+SIZE (xpi/firefox-31.2.0/ta.xpi) = 447883
+SHA256 (xpi/firefox-31.2.0/te.xpi) = 1e3ce73fd862e1a6cd452f626493e6750ce19124acdc513e647f37b89b71f854
+SIZE (xpi/firefox-31.2.0/te.xpi) = 462788
+SHA256 (xpi/firefox-31.2.0/th.xpi) = 0ecd6135dbff272447bd8b15ff556e24235d381863830b2beea32b7cc46781ff
+SIZE (xpi/firefox-31.2.0/th.xpi) = 478323
+SHA256 (xpi/firefox-31.2.0/tr.xpi) = 3958e21037690f549024488fd5a6fb9ca1018eb8e6f391c37e50533c3fecdf94
+SIZE (xpi/firefox-31.2.0/tr.xpi) = 417567
+SHA256 (xpi/firefox-31.2.0/uk.xpi) = 652a6d2bbe632b6e6c9736d78bfe79c71fb6ffca1bcdcf36aeb181d2ac9ab8c6
+SIZE (xpi/firefox-31.2.0/uk.xpi) = 428199
+SHA256 (xpi/firefox-31.2.0/vi.xpi) = 46cf4bd7121b8d793942ac197a95022153b1ce238002344512f6311ff6c78bf7
+SIZE (xpi/firefox-31.2.0/vi.xpi) = 413571
+SHA256 (xpi/firefox-31.2.0/xh.xpi) = 862d1ec5cb8eec5dc2f3aca9d9697860809d13c6dfad059736440c2afab92164
+SIZE (xpi/firefox-31.2.0/xh.xpi) = 398073
+SHA256 (xpi/firefox-31.2.0/zh-CN.xpi) = e7ede8bf0ee5db225e81825eabaafe4c9578203330e150acf3676857458e278b
+SIZE (xpi/firefox-31.2.0/zh-CN.xpi) = 419827
+SHA256 (xpi/firefox-31.2.0/zh-TW.xpi) = 38372e46da7fc942e8e7c85d518d37d6c8c3d66396898322f5e73f4088b9fcb4
+SIZE (xpi/firefox-31.2.0/zh-TW.xpi) = 412717
+SHA256 (xpi/firefox-31.2.0/zu.xpi) = b1c012329f888b3ebedb9057c5a503f23ff37a7a3cc87f227677e525b564d878
+SIZE (xpi/firefox-31.2.0/zu.xpi) = 433413
diff --git a/www/firefox-esr/Makefile b/www/firefox-esr/Makefile
index 5d000e10439e..81bb00dbe16d 100644
--- a/www/firefox-esr/Makefile
+++ b/www/firefox-esr/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= firefox
-DISTVERSION= 31.1.1
+DISTVERSION= 31.2.0
DISTVERSIONSUFFIX=esr.source
PORTEPOCH= 1
CATEGORIES= www ipv6
@@ -61,8 +61,8 @@ MOZ_OPTIONS= --program-transform-name='s/firefox/${MOZILLA}/' \
WRKSRC:= ${WRKDIR}/mozilla-esr31
# avoid clang 3.2/3.3 crash in js/src/jsgc.cpp on refillFreeList<(js::AllowGC)1>
-# http://svnweb.freebsd.org/changeset/base/255804
-.if ${CHOSEN_COMPILER_TYPE} == clang && ${ARCH} == i386 && ${OSVERSION} < 1000056
+# To be removed when 9.2R goes EOL. http://llvm.org/PR15840
+.if ${ARCH} == i386 && ${CHOSEN_COMPILER_TYPE} == clang && ${COMPILER_VERSION:M3[23]}
. if ${PORT_OPTIONS:MOPTIMIZED_CFLAGS}
BROKEN= Cannot build with OPTIMIZED_CFLAGS option due to \
a ${CHOSEN_COMPILER_TYPE} bug: unset the option or \
diff --git a/www/firefox-esr/distinfo b/www/firefox-esr/distinfo
index 2a733bd2fade..819393e94163 100644
--- a/www/firefox-esr/distinfo
+++ b/www/firefox-esr/distinfo
@@ -1,2 +1,2 @@
-SHA256 (firefox-31.1.1esr.source.tar.bz2) = 79be660e766b5adfaf3fc8031804bd64d27d330231f0de5995dd89671d1998d2
-SIZE (firefox-31.1.1esr.source.tar.bz2) = 147904415
+SHA256 (firefox-31.2.0esr.source.tar.bz2) = 02de399cbf467ea536042008d1e0cd4ac6ffdc9b469d3189384f02ec0590d378
+SIZE (firefox-31.2.0esr.source.tar.bz2) = 147362334
diff --git a/www/firefox-esr/files/patch-bug1021761 b/www/firefox-esr/files/patch-bug1021761
new file mode 100644
index 000000000000..bd0a689f12c7
--- /dev/null
+++ b/www/firefox-esr/files/patch-bug1021761
@@ -0,0 +1,1092 @@
+diff --git configure.in configure.in
+index 48e60c0..ec08417 100644
+--- configure.in
++++ configure.in
+@@ -5438,6 +5438,60 @@ fi
+ AC_SUBST(MOZ_WEBM_ENCODER)
+
+ dnl ==================================
++dnl = Check OSS availability
++dnl ==================================
++
++dnl If using Linux, Solaris or BSDs, ensure that OSS is available
++case "$OS_TARGET" in
++Linux|SunOS|DragonFly|FreeBSD|NetBSD|GNU/kFreeBSD)
++ MOZ_OSS=1
++ ;;
++esac
++
++MOZ_ARG_DISABLE_BOOL(oss,
++[ --disable-oss Disable OpenSoundSystem support],
++ MOZ_OSS=,
++ MOZ_OSS=1)
++
++_SAVE_CFLAGS=$CFLAGS
++_SAVE_LIBS=$LIBS
++if test -n "$MOZ_OSS"; then
++ dnl Prefer 4Front implementation
++ AC_MSG_CHECKING([MOZ_OSS_CFLAGS])
++ if test -z "$MOZ_OSS_CFLAGS"; then
++ for oss_conf in /etc/oss.conf /usr/local/etc/oss.conf; do
++ if test -e "$oss_conf"; then
++ . "$oss_conf"
++ fi
++ done
++ if test -d "$OSSLIBDIR"; then
++ MOZ_OSS_CFLAGS="-I$OSSLIBDIR/include"
++ fi
++ fi
++ AC_MSG_RESULT([$MOZ_OSS_CFLAGS])
++
++ CFLAGS="$CFLAGS $MOZ_OSS_CFLAGS"
++ MOZ_CHECK_HEADERS(sys/soundcard.h linux/soundcard.h soundcard.h)
++
++ if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \
++ "$ac_cv_header_linux_soundcard_h" != "yes" -a \
++ "$ac_cv_header_soundcard_h" != "yes"; then
++ AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --disable-ogg --disable-wave --disable-webm.])
++ fi
++
++ dnl Assume NetBSD implementation over SunAudio
++ AC_CHECK_LIB(ossaudio, _oss_ioctl,
++ [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound")
++ MOZ_OSS_LIBS="-lossaudio"])
++fi
++CFLAGS=$_SAVE_CFLAGS
++LIBS=$_SAVE_LIBS
++
++AC_SUBST(MOZ_OSS)
++AC_SUBST_LIST(MOZ_OSS_CFLAGS)
++AC_SUBST_LIST(MOZ_OSS_LIBS)
++
++dnl ==================================
+ dnl = Check alsa availability on Linux
+ dnl ==================================
+
+@@ -5451,12 +5505,23 @@ MOZ_ARG_ENABLE_BOOL(alsa,
+ MOZ_ALSA=1,
+ MOZ_ALSA=)
+
++MOZ_ARG_DISABLE_BOOL(alsa-dlopen,
++[ --disable-alsa-dlopen Disable runtime linking of libasound.so],
++ DISABLE_LIBASOUND_DLOPEN=1,
++ DISABLE_LIBASOUND_DLOPEN=)
++
+ if test -n "$MOZ_ALSA"; then
+ PKG_CHECK_MODULES(MOZ_ALSA, alsa, ,
+ [echo "$MOZ_ALSA_PKG_ERRORS"
+ AC_MSG_ERROR([Need alsa for Ogg, Wave or WebM decoding on Linux. Disable with --disable-ogg --disable-wave --disable-webm. (On Ubuntu, you might try installing the package libasound2-dev.)])])
+ fi
+
++if test -n "$DISABLE_LIBASOUND_DLOPEN"; then
++ AC_DEFINE(DISABLE_LIBASOUND_DLOPEN)
++else
++ MOZ_ALSA_LIBS=
++fi
++
+ AC_SUBST(MOZ_ALSA)
+
+ dnl ========================================================
+diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS
+index b441e8a..950d9e5 100644
+--- media/libcubeb/AUTHORS
++++ media/libcubeb/AUTHORS
+@@ -4,3 +4,4 @@ Michael Wu <mwu@mozilla.com>
+ Paul Adenot <paul@paul.cx>
+ David Richards <drichards@mozilla.com>
+ Sebastien Alaiwan <sebastien.alaiwan@gmail.com>
++Evgeniy Vodolazskiy <waterlaz@gmail.com>
+diff --git media/libcubeb/src/cubeb.c media/libcubeb/src/cubeb.c
+index 9c3adcc..45d765b 100644
+--- media/libcubeb/src/cubeb.c
++++ media/libcubeb/src/cubeb.c
+@@ -54,6 +54,9 @@ int opensl_init(cubeb ** context, char const * context_name);
+ #if defined(USE_AUDIOTRACK)
+ int audiotrack_init(cubeb ** context, char const * context_name);
+ #endif
++#if defined(USE_OSS)
++int oss_init(cubeb ** context, char const * context_name);
++#endif
+
+ int
+ validate_stream_params(cubeb_stream_params stream_params)
+@@ -120,6 +123,9 @@ cubeb_init(cubeb ** context, char const * context_name)
+ #if defined(USE_AUDIOTRACK)
+ audiotrack_init,
+ #endif
++#if defined(USE_OSS)
++ oss_init,
++#endif
+ };
+ int i;
+
+diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c
+index a962553..1f780f4 100644
+--- media/libcubeb/src/cubeb_alsa.c
++++ media/libcubeb/src/cubeb_alsa.c
+@@ -11,6 +11,7 @@
+ #include <sys/time.h>
+ #include <assert.h>
+ #include <limits.h>
++#include <dlfcn.h>
+ #include <poll.h>
+ #include <unistd.h>
+ #include <alsa/asoundlib.h>
+@@ -24,6 +25,50 @@
+
+ #define ALSA_PA_PLUGIN "ALSA <-> PulseAudio PCM I/O Plugin"
+
++#ifdef DISABLE_LIBASOUND_DLOPEN
++#define WRAP(x) x
++#else
++#define WRAP(x) cubeb_##x
++#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x
++MAKE_TYPEDEF(snd_config);
++MAKE_TYPEDEF(snd_config_add);
++MAKE_TYPEDEF(snd_config_copy);
++MAKE_TYPEDEF(snd_config_delete);
++MAKE_TYPEDEF(snd_config_get_id);
++MAKE_TYPEDEF(snd_config_get_string);
++MAKE_TYPEDEF(snd_config_imake_integer);
++MAKE_TYPEDEF(snd_config_search);
++MAKE_TYPEDEF(snd_config_search_definition);
++MAKE_TYPEDEF(snd_lib_error_set_handler);
++MAKE_TYPEDEF(snd_pcm_avail_update);
++MAKE_TYPEDEF(snd_pcm_close);
++MAKE_TYPEDEF(snd_pcm_delay);
++MAKE_TYPEDEF(snd_pcm_drain);
++MAKE_TYPEDEF(snd_pcm_frames_to_bytes);
++MAKE_TYPEDEF(snd_pcm_get_params);
++/* snd_pcm_hw_params_alloca is actually a macro */
++/* MAKE_TYPEDEF(snd_pcm_hw_params_alloca); */
++MAKE_TYPEDEF(snd_pcm_hw_params_sizeof);
++#define snd_pcm_hw_params_sizeof cubeb_snd_pcm_hw_params_sizeof
++MAKE_TYPEDEF(snd_pcm_hw_params_any);
++MAKE_TYPEDEF(snd_pcm_hw_params_get_channels_max);
++MAKE_TYPEDEF(snd_pcm_hw_params_get_rate);
++MAKE_TYPEDEF(snd_pcm_hw_params_set_rate_near);
++MAKE_TYPEDEF(snd_pcm_nonblock);
++MAKE_TYPEDEF(snd_pcm_open);
++MAKE_TYPEDEF(snd_pcm_open_lconf);
++MAKE_TYPEDEF(snd_pcm_pause);
++MAKE_TYPEDEF(snd_pcm_poll_descriptors);
++MAKE_TYPEDEF(snd_pcm_poll_descriptors_count);
++MAKE_TYPEDEF(snd_pcm_poll_descriptors_revents);
++MAKE_TYPEDEF(snd_pcm_recover);
++MAKE_TYPEDEF(snd_pcm_set_params);
++MAKE_TYPEDEF(snd_pcm_state);
++MAKE_TYPEDEF(snd_pcm_writei);
++
++#undef MAKE_TYPEDEF
++#endif
++
+ /* ALSA is not thread-safe. snd_pcm_t instances are individually protected
+ by the owning cubeb_stream's mutex. snd_pcm_t creation and destruction
+ is not thread-safe until ALSA 1.0.24 (see alsa-lib.git commit 91c9c8f1),
+@@ -64,6 +109,8 @@ struct cubeb {
+ workaround is not required. */
+ snd_config_t * local_config;
+ int is_pa;
++
++ void * libasound;
+ };
+
+ enum stream_state {
+@@ -262,7 +309,7 @@ alsa_refill_stream(cubeb_stream * stm)
+
+ pthread_mutex_lock(&stm->mutex);
+
+- r = snd_pcm_poll_descriptors_revents(stm->pcm, stm->fds, stm->nfds, &revents);
++ r = WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents);
+ if (r < 0 || revents != POLLOUT) {
+ /* This should be a stream error; it makes no sense for poll(2) to wake
+ for this stream and then have the stream report that it's not ready.
+@@ -271,10 +318,10 @@ alsa_refill_stream(cubeb_stream * stm)
+ return RUNNING;
+ }
+
+- avail = snd_pcm_avail_update(stm->pcm);
++ avail = WRAP(snd_pcm_avail_update)(stm->pcm);
+ if (avail == -EPIPE) {
+- snd_pcm_recover(stm->pcm, avail, 1);
+- avail = snd_pcm_avail_update(stm->pcm);
++ WRAP(snd_pcm_recover)(stm->pcm, avail, 1);
++ avail = WRAP(snd_pcm_avail_update)(stm->pcm);
+ }
+
+ /* Failed to recover from an xrun, this stream must be broken. */
+@@ -293,8 +340,8 @@ alsa_refill_stream(cubeb_stream * stm)
+ available to write. If avail is still zero here, the stream must be in
+ a funky state, so recover and try again. */
+ if (avail == 0) {
+- snd_pcm_recover(stm->pcm, -EPIPE, 1);
+- avail = snd_pcm_avail_update(stm->pcm);
++ WRAP(snd_pcm_recover)(stm->pcm, -EPIPE, 1);
++ avail = WRAP(snd_pcm_avail_update)(stm->pcm);
+ if (avail <= 0) {
+ pthread_mutex_unlock(&stm->mutex);
+ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR);
+@@ -302,7 +349,7 @@ alsa_refill_stream(cubeb_stream * stm)
+ }
+ }
+
+- p = calloc(1, snd_pcm_frames_to_bytes(stm->pcm, avail));
++ p = calloc(1, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, avail));
+ assert(p);
+
+ pthread_mutex_unlock(&stm->mutex);
+@@ -313,10 +360,10 @@ alsa_refill_stream(cubeb_stream * stm)
+ return ERROR;
+ }
+ if (got > 0) {
+- snd_pcm_sframes_t wrote = snd_pcm_writei(stm->pcm, p, got);
++ snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
+ if (wrote == -EPIPE) {
+- snd_pcm_recover(stm->pcm, wrote, 1);
+- wrote = snd_pcm_writei(stm->pcm, p, got);
++ WRAP(snd_pcm_recover)(stm->pcm, wrote, 1);
++ wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
+ }
+ assert(wrote >= 0 && wrote == got);
+ stm->write_position += wrote;
+@@ -342,7 +389,7 @@ alsa_refill_stream(cubeb_stream * stm)
+
+ /* Fill the remaining buffer with silence to guarantee one full period
+ has been written. */
+- snd_pcm_writei(stm->pcm, (char *) p + got, avail - got);
++ WRAP(snd_pcm_writei)(stm->pcm, (char *) p + got, avail - got);
+
+ set_timeout(&stm->drain_timeout, buffer_time * 1000);
+
+@@ -453,26 +500,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm)
+
+ slave_def = NULL;
+
+- r = snd_config_search(root_pcm, "slave", &slave_pcm);
++ r = WRAP(snd_config_search)(root_pcm, "slave", &slave_pcm);
+ if (r < 0) {
+ return NULL;
+ }
+
+- r = snd_config_get_string(slave_pcm, &string);
++ r = WRAP(snd_config_get_string)(slave_pcm, &string);
+ if (r >= 0) {
+- r = snd_config_search_definition(lconf, "pcm_slave", string, &slave_def);
++ r = WRAP(snd_config_search_definition)(lconf, "pcm_slave", string, &slave_def);
+ if (r < 0) {
+ return NULL;
+ }
+ }
+
+ do {
+- r = snd_config_search(slave_def ? slave_def : slave_pcm, "pcm", &pcm);
++ r = WRAP(snd_config_search)(slave_def ? slave_def : slave_pcm, "pcm", &pcm);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_get_string(slave_def ? slave_def : slave_pcm, &string);
++ r = WRAP(snd_config_get_string)(slave_def ? slave_def : slave_pcm, &string);
+ if (r < 0) {
+ break;
+ }
+@@ -481,7 +528,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm)
+ if (r < 0 || r > (int) sizeof(node_name)) {
+ break;
+ }
+- r = snd_config_search(lconf, node_name, &pcm);
++ r = WRAP(snd_config_search)(lconf, node_name, &pcm);
+ if (r < 0) {
+ break;
+ }
+@@ -490,7 +537,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm)
+ } while (0);
+
+ if (slave_def) {
+- snd_config_delete(slave_def);
++ WRAP(snd_config_delete)(slave_def);
+ }
+
+ return NULL;
+@@ -513,22 +560,22 @@ init_local_config_with_workaround(char const * pcm_name)
+
+ lconf = NULL;
+
+- if (snd_config == NULL) {
++ if (*WRAP(snd_config) == NULL) {
+ return NULL;
+ }
+
+- r = snd_config_copy(&lconf, snd_config);
++ r = WRAP(snd_config_copy)(&lconf, *WRAP(snd_config));
+ if (r < 0) {
+ return NULL;
+ }
+
+ do {
+- r = snd_config_search_definition(lconf, "pcm", pcm_name, &pcm_node);
++ r = WRAP(snd_config_search_definition)(lconf, "pcm", pcm_name, &pcm_node);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_get_id(pcm_node, &string);
++ r = WRAP(snd_config_get_id)(pcm_node, &string);
+ if (r < 0) {
+ break;
+ }
+@@ -537,7 +584,7 @@ init_local_config_with_workaround(char const * pcm_name)
+ if (r < 0 || r > (int) sizeof(node_name)) {
+ break;
+ }
+- r = snd_config_search(lconf, node_name, &pcm_node);
++ r = WRAP(snd_config_search)(lconf, node_name, &pcm_node);
+ if (r < 0) {
+ break;
+ }
+@@ -548,12 +595,12 @@ init_local_config_with_workaround(char const * pcm_name)
+ }
+
+ /* Fetch the PCM node's type, and bail out if it's not the PulseAudio plugin. */
+- r = snd_config_search(pcm_node, "type", &node);
++ r = WRAP(snd_config_search)(pcm_node, "type", &node);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_get_string(node, &string);
++ r = WRAP(snd_config_get_string)(node, &string);
+ if (r < 0) {
+ break;
+ }
+@@ -564,18 +611,18 @@ init_local_config_with_workaround(char const * pcm_name)
+
+ /* Don't clobber an explicit existing handle_underrun value, set it only
+ if it doesn't already exist. */
+- r = snd_config_search(pcm_node, "handle_underrun", &node);
++ r = WRAP(snd_config_search)(pcm_node, "handle_underrun", &node);
+ if (r != -ENOENT) {
+ break;
+ }
+
+ /* Disable pcm_pulse's asynchronous underrun handling. */
+- r = snd_config_imake_integer(&node, "handle_underrun", 0);
++ r = WRAP(snd_config_imake_integer)(&node, "handle_underrun", 0);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_add(pcm_node, node);
++ r = WRAP(snd_config_add)(pcm_node, node);
+ if (r < 0) {
+ break;
+ }
+@@ -583,7 +630,7 @@ init_local_config_with_workaround(char const * pcm_name)
+ return lconf;
+ } while (0);
+
+- snd_config_delete(lconf);
++ WRAP(snd_config_delete)(lconf);
+
+ return NULL;
+ }
+@@ -595,9 +642,9 @@ alsa_locked_pcm_open(snd_pcm_t ** pcm, snd_pcm_stream_t stream, snd_config_t * l
+
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+ if (local_config) {
+- r = snd_pcm_open_lconf(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config);
++ r = WRAP(snd_pcm_open_lconf)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config);
+ } else {
+- r = snd_pcm_open(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK);
++ r = WRAP(snd_pcm_open)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK);
+ }
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+
+@@ -610,7 +657,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm)
+ int r;
+
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+- r = snd_pcm_close(pcm);
++ r = WRAP(snd_pcm_close)(pcm);
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+
+ return r;
+@@ -667,12 +714,65 @@ alsa_init(cubeb ** context, char const * context_name)
+ pthread_attr_t attr;
+ snd_pcm_t * dummy;
+
++ void * libasound = NULL;
++
++#ifndef DISABLE_LIBASOUND_DLOPEN
++ libasound = dlopen("libasound.so", RTLD_LAZY);
++ if (!libasound) {
++ return CUBEB_ERROR;
++ }
++
++#define LOAD(x) do { \
++ cubeb_##x = dlsym(libasound, #x); \
++ if (!cubeb_##x) { \
++ dlclose(libasound); \
++ return CUBEB_ERROR; \
++ } \
++ } while(0)
++
++ LOAD(snd_config);
++ LOAD(snd_config_add);
++ LOAD(snd_config_copy);
++ LOAD(snd_config_delete);
++ LOAD(snd_config_get_id);
++ LOAD(snd_config_get_string);
++ LOAD(snd_config_imake_integer);
++ LOAD(snd_config_search);
++ LOAD(snd_config_search_definition);
++ LOAD(snd_lib_error_set_handler);
++ LOAD(snd_pcm_avail_update);
++ LOAD(snd_pcm_close);
++ LOAD(snd_pcm_delay);
++ LOAD(snd_pcm_drain);
++ LOAD(snd_pcm_frames_to_bytes);
++ LOAD(snd_pcm_get_params);
++ /* snd_pcm_hw_params_alloca is actually a macro */
++ /* LOAD(snd_pcm_hw_params_alloca); */
++ LOAD(snd_pcm_hw_params_sizeof);
++ LOAD(snd_pcm_hw_params_any);
++ LOAD(snd_pcm_hw_params_get_channels_max);
++ LOAD(snd_pcm_hw_params_get_rate);
++ LOAD(snd_pcm_hw_params_set_rate_near);
++ LOAD(snd_pcm_nonblock);
++ LOAD(snd_pcm_open);
++ LOAD(snd_pcm_open_lconf);
++ LOAD(snd_pcm_pause);
++ LOAD(snd_pcm_poll_descriptors);
++ LOAD(snd_pcm_poll_descriptors_count);
++ LOAD(snd_pcm_poll_descriptors_revents);
++ LOAD(snd_pcm_recover);
++ LOAD(snd_pcm_set_params);
++ LOAD(snd_pcm_state);
++ LOAD(snd_pcm_writei);
++
++#undef LOAD
++#endif
+ assert(context);
+ *context = NULL;
+
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+ if (!cubeb_alsa_error_handler_set) {
+- snd_lib_error_set_handler(silent_error_handler);
++ WRAP(snd_lib_error_set_handler)(silent_error_handler);
+ cubeb_alsa_error_handler_set = 1;
+ }
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+@@ -680,6 +780,8 @@ alsa_init(cubeb ** context, char const * context_name)
+ ctx = calloc(1, sizeof(*ctx));
+ assert(ctx);
+
++ ctx->libasound = libasound;
++
+ ctx->ops = &alsa_ops;
+
+ r = pthread_mutex_init(&ctx->mutex, NULL);
+@@ -729,7 +831,7 @@ alsa_init(cubeb ** context, char const * context_name)
+ config fails with EINVAL, the PA PCM is too old for this workaround. */
+ if (r == -EINVAL) {
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+- snd_config_delete(ctx->local_config);
++ WRAP(snd_config_delete)(ctx->local_config);
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+ ctx->local_config = NULL;
+ } else if (r >= 0) {
+@@ -768,9 +870,13 @@ alsa_destroy(cubeb * ctx)
+ pthread_mutex_destroy(&ctx->mutex);
+ free(ctx->fds);
+
++ if (ctx->libasound) {
++ dlclose(ctx->libasound);
++ }
++
+ if (ctx->local_config) {
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+- snd_config_delete(ctx->local_config);
++ WRAP(snd_config_delete)(ctx->local_config);
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+ }
+
+@@ -838,7 +944,7 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name,
+ return CUBEB_ERROR;
+ }
+
+- r = snd_pcm_nonblock(stm->pcm, 1);
++ r = WRAP(snd_pcm_nonblock)(stm->pcm, 1);
+ assert(r == 0);
+
+ /* Ugly hack: the PA ALSA plugin allows buffer configurations that can't
+@@ -848,23 +954,23 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name,
+ latency = latency < 500 ? 500 : latency;
+ }
+
+- r = snd_pcm_set_params(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED,
+- stm->params.channels, stm->params.rate, 1,
+- latency * 1000);
++ r = WRAP(snd_pcm_set_params)(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED,
++ stm->params.channels, stm->params.rate, 1,
++ latency * 1000);
+ if (r < 0) {
+ alsa_stream_destroy(stm);
+ return CUBEB_ERROR_INVALID_FORMAT;
+ }
+
+- r = snd_pcm_get_params(stm->pcm, &stm->buffer_size, &stm->period_size);
++ r = WRAP(snd_pcm_get_params)(stm->pcm, &stm->buffer_size, &stm->period_size);
+ assert(r == 0);
+
+- stm->nfds = snd_pcm_poll_descriptors_count(stm->pcm);
++ stm->nfds = WRAP(snd_pcm_poll_descriptors_count)(stm->pcm);
+ assert(stm->nfds > 0);
+
+ stm->saved_fds = calloc(stm->nfds, sizeof(struct pollfd));
+ assert(stm->saved_fds);
+- r = snd_pcm_poll_descriptors(stm->pcm, stm->saved_fds, stm->nfds);
++ r = WRAP(snd_pcm_poll_descriptors)(stm->pcm, stm->saved_fds, stm->nfds);
+ assert((nfds_t) r == stm->nfds);
+
+ r = pthread_cond_init(&stm->cond, NULL);
+@@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_any(stm->pcm, hw_params);
++ rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params);
+ if (rv < 0) {
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_get_channels_max(hw_params, max_channels);
++ rv = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels);
+ if (rv < 0) {
+ return CUBEB_ERROR;
+ }
+@@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) {
+
+ /* get a pcm, disabling resampling, so we get a rate the
+ * hardware/dmix/pulse/etc. supports. */
+- rv = snd_pcm_open(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
++ rv = WRAP(snd_pcm_open)(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
+ if (rv < 0) {
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_any(pcm, hw_params);
++ rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params);
+ if (rv < 0) {
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_get_rate(hw_params, rate, &dir);
++ rv = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir);
+ if (rv >= 0) {
+ /* There is a default rate: use it. */
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+ return CUBEB_OK;
+ }
+
+ /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */
+ *rate = 44100;
+
+- rv = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL);
++ rv = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL);
+ if (rv < 0) {
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+ return CUBEB_ERROR;
+ }
+
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+
+ return CUBEB_OK;
+ }
+@@ -1013,7 +1119,7 @@ alsa_stream_start(cubeb_stream * stm)
+ ctx = stm->context;
+
+ pthread_mutex_lock(&stm->mutex);
+- snd_pcm_pause(stm->pcm, 0);
++ WRAP(snd_pcm_pause)(stm->pcm, 0);
+ gettimeofday(&stm->last_activity, NULL);
+ pthread_mutex_unlock(&stm->mutex);
+
+@@ -1047,7 +1153,7 @@ alsa_stream_stop(cubeb_stream * stm)
+ pthread_mutex_unlock(&ctx->mutex);
+
+ pthread_mutex_lock(&stm->mutex);
+- snd_pcm_pause(stm->pcm, 1);
++ WRAP(snd_pcm_pause)(stm->pcm, 1);
+ pthread_mutex_unlock(&stm->mutex);
+
+ return CUBEB_OK;
+@@ -1063,8 +1169,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position)
+ pthread_mutex_lock(&stm->mutex);
+
+ delay = -1;
+- if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING ||
+- snd_pcm_delay(stm->pcm, &delay) != 0) {
++ if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING ||
++ WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) {
+ *position = stm->last_position;
+ pthread_mutex_unlock(&stm->mutex);
+ return CUBEB_OK;
+@@ -1089,7 +1195,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency)
+ snd_pcm_sframes_t delay;
+ /* This function returns the delay in frames until a frame written using
+ snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */
+- if (snd_pcm_delay(stm->pcm, &delay)) {
++ if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) {
+ return CUBEB_ERROR;
+ }
+
+diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c
+new file mode 100644
+index 0000000..5e38e27
+--- /dev/null
++++ media/libcubeb/src/cubeb_oss.c
+@@ -0,0 +1,399 @@
++/*
++ * Copyright © 2014 Mozilla Foundation
++ *
++ * This program is made available under an ISC-style license. See the
++ * accompanying file LICENSE for details.
++ */
++#if defined(HAVE_SYS_SOUNDCARD_H)
++#include <sys/soundcard.h>
++#elif defined(HAVE_LINUX_SOUNDCARD_H)
++#include <linux/soundcard.h>
++#else
++#include <soundcard.h>
++#endif
++#include <unistd.h>
++#include <stdlib.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <sys/ioctl.h>
++#include <errno.h>
++#include <pthread.h>
++#include <stdio.h>
++
++#include "cubeb/cubeb.h"
++#include "cubeb-internal.h"
++
++#ifndef CUBEB_OSS_DEFAULT_OUTPUT
++#define CUBEB_OSS_DEFAULT_OUTPUT "/dev/dsp"
++#endif
++
++#define OSS_BUFFER_SIZE 1024
++
++struct cubeb {
++ struct cubeb_ops const * ops;
++};
++
++struct cubeb_stream {
++ cubeb * context;
++
++ cubeb_data_callback data_callback;
++ cubeb_state_callback state_callback;
++ void * user_ptr;
++ float volume;
++ float panning;
++
++ pthread_mutex_t state_mutex;
++ pthread_cond_t state_cond;
++
++ int running;
++ int stopped;
++ int floating;
++
++ /* These two vars are needed to support old versions of OSS */
++ unsigned int position_bytes;
++ unsigned int last_position_bytes;
++
++ uint64_t written_frags; /* The number of fragments written to /dev/dsp */
++ uint64_t missed_frags; /* fragments output with stopped stream */
++
++ cubeb_stream_params params;
++ int fd;
++ pthread_t th;
++};
++
++static struct cubeb_ops const oss_ops;
++
++int oss_init(cubeb ** context, char const * context_name)
++{
++ cubeb* ctx = (cubeb*)malloc(sizeof(cubeb));
++ ctx->ops = &oss_ops;
++ *context = ctx;
++ return CUBEB_OK;
++}
++
++static void oss_destroy(cubeb *ctx)
++{
++ free(ctx);
++}
++
++static char const * oss_get_backend_id(cubeb * context)
++{
++ static char oss_name[] = "oss";
++ return oss_name;
++}
++
++static int oss_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
++{
++ *max_channels = 2; /* Let's support only stereo for now */
++ return CUBEB_OK;
++}
++
++static int oss_get_min_latency(cubeb * context, cubeb_stream_params params,
++ uint32_t * latency_ms)
++{
++ /* 40ms is a big enough number to work ok */
++ *latency_ms = 40;
++ return CUBEB_OK;
++}
++
++static int oss_get_preferred_sample_rate(cubeb *context, uint32_t * rate)
++{
++ /* 48000 seems a prefered choice for most audio devices
++ * and a good choice for OSS */
++ *rate = 48000;
++ return CUBEB_OK;
++}
++
++static void run_state_callback(cubeb_stream *stream, cubeb_state state)
++{
++ if (stream->state_callback) {
++ stream->state_callback(stream, stream->user_ptr, state);
++ }
++}
++
++static long run_data_callback(cubeb_stream *stream, void *buffer, long nframes)
++{
++ long got = 0;
++ pthread_mutex_lock(&stream->state_mutex);
++ if (stream->data_callback && stream->running && !stream->stopped) {
++ pthread_mutex_unlock(&stream->state_mutex);
++ got = stream->data_callback(stream, stream->user_ptr, buffer, nframes);
++ } else {
++ pthread_mutex_unlock(&stream->state_mutex);
++ }
++ return got;
++}
++
++static void apply_volume(int16_t* buffer, unsigned int n,
++ float volume, float panning)
++{
++ float left = volume;
++ float right = volume;
++ unsigned int i;
++ int pan[2];
++ if (panning<0) {
++ right *= (1+panning);
++ } else {
++ left *= (1-panning);
++ }
++ pan[0] = 128.0*left;
++ pan[1] = 128.0*right;
++ for(i=0; i<n; i++){
++ buffer[i] = ((int)buffer[i])*pan[i%2]/128;
++ }
++}
++
++static void *writer(void *stm)
++{
++ cubeb_stream* stream = (cubeb_stream*)stm;
++ int16_t buffer[OSS_BUFFER_SIZE];
++ float f_buffer[OSS_BUFFER_SIZE];
++ int got;
++ unsigned long i;
++ while (stream->running) {
++ pthread_mutex_lock(&stream->state_mutex);
++ if (stream->stopped) {
++ pthread_mutex_unlock(&stream->state_mutex);
++ run_state_callback(stream, CUBEB_STATE_STOPPED);
++ pthread_mutex_lock(&stream->state_mutex);
++ while (stream->stopped) {
++ pthread_cond_wait(&stream->state_cond, &stream->state_mutex);
++ }
++ pthread_mutex_unlock(&stream->state_mutex);
++ run_state_callback(stream, CUBEB_STATE_STARTED);
++ continue;
++ }
++ pthread_mutex_unlock(&stream->state_mutex);
++ if (stream->floating) {
++ got = run_data_callback(stream, f_buffer,
++ OSS_BUFFER_SIZE/stream->params.channels);
++ for (i=0; i<((unsigned long)got)*stream->params.channels; i++) {
++ buffer[i] = f_buffer[i]*32767.0;
++ }
++ } else {
++ got = run_data_callback(stream, buffer,
++ OSS_BUFFER_SIZE/stream->params.channels);
++ }
++ apply_volume(buffer, got*stream->params.channels,
++ stream->volume, stream->panning);
++ if (got<0) {
++ run_state_callback(stream, CUBEB_STATE_ERROR);
++ break;
++ }
++ if (!got) {
++ run_state_callback(stream, CUBEB_STATE_DRAINED);
++ }
++ if (got) {
++ size_t i = 0;
++ size_t s = got*stream->params.channels*sizeof(int16_t);
++ while (i < s) {
++ ssize_t n = write(stream->fd, ((char*)buffer) + i, s - i);
++ if (n<=0) {
++ run_state_callback(stream, CUBEB_STATE_ERROR);
++ break;
++ }
++ i+=n;
++ }
++ stream->written_frags+=got;
++ }
++ }
++ return NULL;
++}
++
++static void oss_try_set_latency(cubeb_stream* stream, unsigned int latency)
++{
++ unsigned int latency_bytes, n_frag;
++ int frag;
++ /* fragment size of 1024 is a good choice with good chances to be accepted */
++ unsigned int frag_size=1024;
++ unsigned int frag_log=10; /* 2^frag_log = frag_size */
++ latency_bytes =
++ latency*stream->params.rate*stream->params.channels*sizeof(uint16_t)/1000;
++ n_frag = latency_bytes>>frag_log;
++ frag = (n_frag<<16) | frag_log;
++ /* Even if this fails we wish to continue, not checking for errors */
++ ioctl(stream->fd, SNDCTL_DSP_SETFRAGMENT, &frag);
++}
++
++static int oss_stream_init(cubeb * context, cubeb_stream ** stm,
++ char const * stream_name,
++ cubeb_stream_params stream_params,
++ unsigned int latency,
++ cubeb_data_callback data_callback,
++ cubeb_state_callback state_callback, void * user_ptr)
++{
++ cubeb_stream* stream = (cubeb_stream*)malloc(sizeof(cubeb_stream));
++ stream->context = context;
++ stream->data_callback = data_callback;
++ stream->state_callback = state_callback;
++ stream->user_ptr = user_ptr;
++
++ if ((stream->fd = open(CUBEB_OSS_DEFAULT_OUTPUT, O_WRONLY)) == -1) {
++ free(stream);
++ return CUBEB_ERROR;
++ }
++#define SET(what, to) do { unsigned int i = to; \
++ int j = ioctl(stream->fd, what, &i); \
++ if (j == -1 || i != to) { \
++ close(stream->fd); \
++ free(stream); \
++ return CUBEB_ERROR_INVALID_FORMAT; } } while (0)
++
++ stream->params = stream_params;
++ stream->volume = 1.0;
++ stream->panning = 0.0;
++
++ oss_try_set_latency(stream, latency);
++
++ stream->floating = 0;
++ SET(SNDCTL_DSP_CHANNELS, stream_params.channels);
++ SET(SNDCTL_DSP_SPEED, stream_params.rate);
++ switch (stream_params.format) {
++ case CUBEB_SAMPLE_S16LE:
++ SET(SNDCTL_DSP_SETFMT, AFMT_S16_LE);
++ break;
++ case CUBEB_SAMPLE_S16BE:
++ SET(SNDCTL_DSP_SETFMT, AFMT_S16_BE);
++ break;
++ case CUBEB_SAMPLE_FLOAT32LE:
++ SET(SNDCTL_DSP_SETFMT, AFMT_S16_NE);
++ stream->floating = 1;
++ break;
++ default:
++ close(stream->fd);
++ free(stream);
++ return CUBEB_ERROR;
++ }
++
++
++ pthread_mutex_init(&stream->state_mutex, NULL);
++ pthread_cond_init(&stream->state_cond, NULL);
++
++ stream->running = 1;
++ stream->stopped = 1;
++ stream->position_bytes = 0;
++ stream->last_position_bytes = 0;
++ stream->written_frags = 0;
++ stream->missed_frags = 0;
++
++ pthread_create(&stream->th, NULL, writer, (void*)stream);
++
++ *stm = stream;
++
++ return CUBEB_OK;
++}
++
++static void oss_stream_destroy(cubeb_stream * stream)
++{
++ pthread_mutex_lock(&stream->state_mutex);
++
++ stream->running = 0;
++ stream->stopped = 0;
++ pthread_cond_signal(&stream->state_cond);
++
++ pthread_mutex_unlock(&stream->state_mutex);
++
++ pthread_join(stream->th, NULL);
++
++ pthread_mutex_destroy(&stream->state_mutex);
++ pthread_cond_destroy(&stream->state_cond);
++ close(stream->fd);
++ free(stream);
++}
++
++static int oss_stream_get_latency(cubeb_stream * stream, uint32_t * latency)
++{
++ if (ioctl(stream->fd, SNDCTL_DSP_GETODELAY, latency)==-1) {
++ return CUBEB_ERROR;
++ }
++ /* Convert latency from bytes to frames */
++ *latency /= stream->params.channels*sizeof(int16_t);
++ return CUBEB_OK;
++}
++
++
++static int oss_stream_current_optr(cubeb_stream * stream, uint64_t * position)
++{
++ count_info ci;
++ /* Unfortunately, this ioctl is only available in OSS 4.x */
++#ifdef SNDCTL_DSP_CURRENT_OPTR
++ oss_count_t count;
++ if (ioctl(stream->fd, SNDCTL_DSP_CURRENT_OPTR, &count) != -1) {
++ *position = count.samples;// + count.fifo_samples;
++ return CUBEB_OK;
++ }
++#endif
++ /* Fall back to this ioctl in case the previous one fails */
++ if (ioctl(stream->fd, SNDCTL_DSP_GETOPTR, &ci) == -1) {
++ return CUBEB_ERROR;
++ }
++ /* ci.bytes is only 32 bit and will start to wrap after arithmetic overflow */
++ stream->position_bytes += ci.bytes - stream->last_position_bytes;
++ stream->last_position_bytes = ci.bytes;
++ *position = stream->position_bytes/stream->params.channels/sizeof(int16_t);
++ return CUBEB_OK;
++}
++
++static int oss_stream_get_position(cubeb_stream * stream, uint64_t * position)
++{
++ if ( oss_stream_current_optr(stream, position) == CUBEB_OK ){
++ *position -= stream->missed_frags;
++ return CUBEB_OK;
++ }
++ /* If no correct method to get position works we resort to this */
++ *position = stream->written_frags;
++ return CUBEB_OK;
++}
++
++
++static int oss_stream_start(cubeb_stream * stream)
++{
++ pthread_mutex_lock(&stream->state_mutex);
++ if (stream->stopped) {
++ uint64_t ptr;
++ oss_stream_current_optr(stream, &ptr);
++ stream->missed_frags = ptr - stream->written_frags;
++ stream->stopped = 0;
++ pthread_cond_signal(&stream->state_cond);
++ }
++ pthread_mutex_unlock(&stream->state_mutex);
++ return CUBEB_OK;
++}
++
++static int oss_stream_stop(cubeb_stream * stream)
++{
++ pthread_mutex_lock(&stream->state_mutex);
++ stream->stopped = 1;
++ pthread_mutex_unlock(&stream->state_mutex);
++ return CUBEB_OK;
++}
++
++int oss_stream_set_panning(cubeb_stream * stream, float panning)
++{
++ if (stream->params.channels == 2) {
++ stream->panning=panning;
++ }
++ return CUBEB_OK;
++}
++
++int oss_stream_set_volume(cubeb_stream * stream, float volume)
++{
++ stream->volume=volume;
++ return CUBEB_OK;
++}
++
++static struct cubeb_ops const oss_ops = {
++ .init = oss_init,
++ .get_backend_id = oss_get_backend_id,
++ .get_max_channel_count = oss_get_max_channel_count,
++ .get_min_latency = oss_get_min_latency,
++ .get_preferred_sample_rate = oss_get_preferred_sample_rate,
++ .destroy = oss_destroy,
++ .stream_init = oss_stream_init,
++ .stream_destroy = oss_stream_destroy,
++ .stream_start = oss_stream_start,
++ .stream_stop = oss_stream_stop,
++ .stream_get_position = oss_stream_get_position,
++ .stream_get_latency = oss_stream_get_latency
++};
+diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build
+index 8b7a0dd..31212ce 100644
+--- media/libcubeb/src/moz.build
++++ media/libcubeb/src/moz.build
+@@ -17,6 +17,12 @@ if CONFIG['MOZ_ALSA']:
+ ]
+ DEFINES['USE_ALSA'] = True
+
++if CONFIG['MOZ_OSS']:
++ SOURCES += [
++ 'cubeb_oss.c',
++ ]
++ DEFINES['USE_OSS'] = True
++
+ if CONFIG['MOZ_PULSEAUDIO']:
+ SOURCES += [
+ 'cubeb_pulse.c',
+@@ -75,5 +81,6 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
+
+ FAIL_ON_WARNINGS = True
+
++CFLAGS += CONFIG['MOZ_OSS_CFLAGS']
+ CFLAGS += CONFIG['MOZ_ALSA_CFLAGS']
+ CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS']
+diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk
+index e191f13..4fb268a 100644
+--- toolkit/library/libxul.mk
++++ toolkit/library/libxul.mk
+@@ -146,6 +146,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32
+ endif
+ endif
+
++ifdef MOZ_OSS
++EXTRA_DSO_LDOPTS += $(MOZ_OSS_LIBS)
++endif
++
+ ifdef MOZ_ALSA
+ EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS)
+ endif
diff --git a/www/firefox-esr/files/patch-bug1073709 b/www/firefox-esr/files/patch-bug1073709
new file mode 100644
index 000000000000..f011d7438ad0
--- /dev/null
+++ b/www/firefox-esr/files/patch-bug1073709
@@ -0,0 +1,18 @@
+diff --git mfbt/Atomics.h mfbt/Atomics.h
+index 495a9d3..c7f7601 100644
+--- mfbt/Atomics.h
++++ mfbt/Atomics.h
+@@ -34,10 +34,12 @@
+ * loose typing of the atomic builtins. GCC 4.5 and 4.6 lacks inline
+ * definitions for unspecialized std::atomic and causes linking errors.
+ * Therefore, we require at least 4.7.0 for using libstdc++.
++ *
++ * libc++ <atomic> is only functional with clang.
+ */
+ # if MOZ_USING_LIBSTDCXX && MOZ_LIBSTDCXX_VERSION_AT_LEAST(4, 7, 0)
+ # define MOZ_HAVE_CXX11_ATOMICS
+-# elif MOZ_USING_LIBCXX
++# elif MOZ_USING_LIBCXX && defined(__clang__)
+ # define MOZ_HAVE_CXX11_ATOMICS
+ # endif
+ /*
diff --git a/www/firefox-esr/files/patch-bug1076983 b/www/firefox-esr/files/patch-bug1076983
new file mode 100644
index 000000000000..182aadf58bf5
--- /dev/null
+++ b/www/firefox-esr/files/patch-bug1076983
@@ -0,0 +1,45 @@
+commit e10ee74
+Author: Martin Thomson <martin.thomson@gmail.com>
+Date: Tue Oct 14 17:17:35 2014 -0700
+
+ Bug 1076983 - Disabling SSL 3.0 with pref
+---
+ netwerk/base/public/security-prefs.js | 2 +-
+ security/manager/ssl/src/nsNSSComponent.cpp | 7 +++----
+ 2 files changed, 4 insertions(+), 5 deletions(-)
+
+diff --git netwerk/base/public/security-prefs.js netwerk/base/public/security-prefs.js
+index 352552e..c12731b 100644
+--- netwerk/base/public/security-prefs.js
++++ netwerk/base/public/security-prefs.js
+@@ -2,7 +2,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/. */
+
+-pref("security.tls.version.min", 0);
++pref("security.tls.version.min", 1);
+ pref("security.tls.version.max", 3);
+
+ pref("security.ssl.allow_unrestricted_renego_everywhere__temporarily_available_pref", false);
+diff --git security/manager/ssl/src/nsNSSComponent.cpp security/manager/ssl/src/nsNSSComponent.cpp
+index 8cab67b..772959d 100644
+--- security/manager/ssl/src/nsNSSComponent.cpp
++++ security/manager/ssl/src/nsNSSComponent.cpp
+@@ -829,14 +829,13 @@ void nsNSSComponent::setValidationOptions(bool isInitialSetting,
+ mDefaultCertVerifier = new SharedCertVerifier(odc, osc, ogc, pinningMode);
+ }
+
+-// Enable the TLS versions given in the prefs, defaulting to SSL 3.0 (min
+-// version) and TLS 1.2 (max version) when the prefs aren't set or set to
+-// invalid values.
++// Enable the TLS versions given in the prefs, defaulting to TLS 1.0 (min) and
++// TLS 1.2 (max) when the prefs aren't set or set to invalid values.
+ nsresult
+ nsNSSComponent::setEnabledTLSVersions()
+ {
+ // keep these values in sync with security-prefs.js
+- static const int32_t PSM_DEFAULT_MIN_TLS_VERSION = 0;
++ static const int32_t PSM_DEFAULT_MIN_TLS_VERSION = 1;
+ static const int32_t PSM_DEFAULT_MAX_TLS_VERSION = 3;
+
+ int32_t minVersion = Preferences::GetInt("security.tls.version.min",
diff --git a/www/firefox-esr/files/patch-clang34-disable-stdcall b/www/firefox-esr/files/patch-clang34-disable-stdcall
deleted file mode 100644
index de30c49f9950..000000000000
--- a/www/firefox-esr/files/patch-clang34-disable-stdcall
+++ /dev/null
@@ -1,13 +0,0 @@
-# http://llvm.org/bugs/show_bug.cgi?id=19007
-
---- xpcom/base/nscore.h~
-+++ xpcom/base/nscore.h
-@@ -110,7 +110,7 @@
- * NS_HIDDEN_(int) NS_FASTCALL func2(char *foo);
- */
-
--#if defined(__i386__) && defined(__GNUC__)
-+#if defined(__i386__) && defined(__GNUC__) && !(defined(__clang__) && __clang_major__ == 3 && __clang_minor__ == 4 && __clang_patchlevel__ == 0)
- #define NS_FASTCALL __attribute__ ((regparm (3), stdcall))
- #define NS_CONSTRUCTOR_FASTCALL __attribute__ ((regparm (3), stdcall))
- #elif defined(XP_WIN) && !defined(_WIN64)
diff --git a/www/firefox-i18n/Makefile b/www/firefox-i18n/Makefile
index 3a38976ee766..a12491a68c70 100644
--- a/www/firefox-i18n/Makefile
+++ b/www/firefox-i18n/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= firefox-i18n
-PORTVERSION= 32.0.2
+PORTVERSION= 33.0
CATEGORIES= www
MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${PORTVERSION}/linux-i686/xpi
PKGNAMEPREFIX=
@@ -14,7 +14,7 @@ COMMENT= Localized interface for Firefox
EXTRACT_DEPENDS= zip:${PORTSDIR}/archivers/zip
-USES= zip:infozip gecko:firefox,32
+USES= zip:infozip gecko:firefox,33,build
USE_XPI= firefox linux-firefox
NO_ARCH= yes
@@ -25,15 +25,11 @@ WDIR= langpack-*@firefox.mozilla.org
XPI_DISTNAMES= ${FIREFOX_I18N_}
PLIST?= ${WRKDIR}/plist
-PLISTD?= ${WRKDIR}/plist_dirs
PLISTF?= ${WRKDIR}/plist_files
.include "${.CURDIR}/Makefile.option"
.include <bsd.port.pre.mk>
-# make sure that firefox always gets upgraded before this port
-BUILD_DEPENDS+= firefox>=0:${PORTSDIR}/www/firefox
-
.ifndef WITHOUT_SWITCHER
RUN_DEPENDS+= xpi-quick-locale-switcher>=0:${PORTSDIR}/www/xpi-quick-locale-switcher
.endif
@@ -60,12 +56,9 @@ do-extract:
fi; \
cd ${WRKSRC}/langpack-$$lang@firefox.mozilla.org/; \
${FIND} -H -s * ! -type d | \
- ${SED} -e "s|^|lib/xpi/langpack-$$lang@firefox.mozilla.org/|" >> ${PLISTF} && \
- ${FIND} -d * -type d | \
- ${SED} -e "s|^|@dirrm lib/xpi/langpack-$$lang@firefox.mozilla.org/|" >> ${PLISTD}; \
+ ${SED} -e "s|^|lib/xpi/langpack-$$lang@firefox.mozilla.org/|" >> ${PLISTF}; \
done
${CAT} ${PLISTF} | ${SORT} >> ${PLIST}
- ${CAT} ${PLISTD} | ${SORT} -r >> ${PLIST}
do-install:
@${MKDIR} ${STAGEDIR}${XPI_LIBDIR} ${STAGEDIR}${XPI_SLDIRS_ALL}
diff --git a/www/firefox-i18n/distinfo b/www/firefox-i18n/distinfo
index f6ab9cff5c7e..c34d5837432d 100644
--- a/www/firefox-i18n/distinfo
+++ b/www/firefox-i18n/distinfo
@@ -1,178 +1,178 @@
-SHA256 (xpi/firefox-i18n-32.0.2/ach.xpi) = b3a1df4452ae27d90d3e1690760d6436b4d0de130c726b8172784d727b4cb081
-SIZE (xpi/firefox-i18n-32.0.2/ach.xpi) = 431471
-SHA256 (xpi/firefox-i18n-32.0.2/af.xpi) = 43055a6aebbc72c5f5def27bf671968482279087b0c08ddbb603ac956760d952
-SIZE (xpi/firefox-i18n-32.0.2/af.xpi) = 434842
-SHA256 (xpi/firefox-i18n-32.0.2/an.xpi) = 44f5deee991eda3e21946005d48e012cfab961f01f6813a43bfa3250341067a1
-SIZE (xpi/firefox-i18n-32.0.2/an.xpi) = 409798
-SHA256 (xpi/firefox-i18n-32.0.2/ar.xpi) = 39be83c8c2b2b14538d226b77c47a5dd2c87ad70a3b6a71dddb3068594e2dfbc
-SIZE (xpi/firefox-i18n-32.0.2/ar.xpi) = 462439
-SHA256 (xpi/firefox-i18n-32.0.2/as.xpi) = 1f61119d750e2067bd9518aa782aa32cf5c9dce50fe6a23bbb94f0eddf5bd34f
-SIZE (xpi/firefox-i18n-32.0.2/as.xpi) = 451613
-SHA256 (xpi/firefox-i18n-32.0.2/ast.xpi) = 3812808aa0b14128c2a4de106f67f8ab893c80ea5a864ad13462ded26a4d1675
-SIZE (xpi/firefox-i18n-32.0.2/ast.xpi) = 348236
-SHA256 (xpi/firefox-i18n-32.0.2/be.xpi) = e607e32cf9758314655b59c5171bc3f5acb2bddc41fa931067b0a926710a8dc8
-SIZE (xpi/firefox-i18n-32.0.2/be.xpi) = 383998
-SHA256 (xpi/firefox-i18n-32.0.2/bg.xpi) = 69fec1817b9b24a89d5e316232c29a814ee726c0351c3ad60dafd74443bbf582
-SIZE (xpi/firefox-i18n-32.0.2/bg.xpi) = 441209
-SHA256 (xpi/firefox-i18n-32.0.2/bn-BD.xpi) = 618a5440e3dd3acabb78f227f7f538bef732e681f6dde1d8948f182eaa197bfa
-SIZE (xpi/firefox-i18n-32.0.2/bn-BD.xpi) = 476239
-SHA256 (xpi/firefox-i18n-32.0.2/bn-IN.xpi) = 597e90e762bd2b75b6f2897dcff2dd54eafedb4e55adc6c9910e4ea8d787148b
-SIZE (xpi/firefox-i18n-32.0.2/bn-IN.xpi) = 465498
-SHA256 (xpi/firefox-i18n-32.0.2/br.xpi) = 309f0f07b78f51d4b005a56ae3355b91dc13d88540bf5d297c2d332214f745fd
-SIZE (xpi/firefox-i18n-32.0.2/br.xpi) = 392151
-SHA256 (xpi/firefox-i18n-32.0.2/bs.xpi) = 472b8302bca7d919c1732cc5153ad43cd5a7317b9be22cee1eb66bcb0d2a5cd1
-SIZE (xpi/firefox-i18n-32.0.2/bs.xpi) = 432988
-SHA256 (xpi/firefox-i18n-32.0.2/ca.xpi) = bf33ad776bcda2b41540d5d9833ed2fb54383ccc79e0e4de1bfe58d4d2b83396
-SIZE (xpi/firefox-i18n-32.0.2/ca.xpi) = 406288
-SHA256 (xpi/firefox-i18n-32.0.2/cs.xpi) = bb5b7a29e99084e921a3423779cd5995c59725d0fcdb07da6bc5f89693143204
-SIZE (xpi/firefox-i18n-32.0.2/cs.xpi) = 393844
-SHA256 (xpi/firefox-i18n-32.0.2/csb.xpi) = f3a4aa1efc52f17f16a8f8e9761adea8eac4a1e6d5c71e3c9a38221ee156b7ab
-SIZE (xpi/firefox-i18n-32.0.2/csb.xpi) = 387643
-SHA256 (xpi/firefox-i18n-32.0.2/cy.xpi) = d796c5b121e089d40a619ab36266f2c686b9723641b5effbb327c78c5c877d77
-SIZE (xpi/firefox-i18n-32.0.2/cy.xpi) = 393348
-SHA256 (xpi/firefox-i18n-32.0.2/da.xpi) = ab3fef27a2a9d7ad7a53a8197a868418bff1b1fd299bfad88772e5bab002456d
-SIZE (xpi/firefox-i18n-32.0.2/da.xpi) = 400446
-SHA256 (xpi/firefox-i18n-32.0.2/de.xpi) = 3b21850c366a27d7afaf256effe0e04392d0d36d9d875569e122388b3c08084d
-SIZE (xpi/firefox-i18n-32.0.2/de.xpi) = 398214
-SHA256 (xpi/firefox-i18n-32.0.2/el.xpi) = 4cc9451f5876499c8130cdb9e38e0e0718cd22d4934e968cb4526ef466751766
-SIZE (xpi/firefox-i18n-32.0.2/el.xpi) = 446649
-SHA256 (xpi/firefox-i18n-32.0.2/en-GB.xpi) = 77eed519237687134db60afee4826e37eef3adee77661b53facfd8c2d691e041
-SIZE (xpi/firefox-i18n-32.0.2/en-GB.xpi) = 393086
-SHA256 (xpi/firefox-i18n-32.0.2/en-US.xpi) = f4b841f91820905f8f19e98c8205e5f83f7e903161ce9f032d5849a752cc93ad
-SIZE (xpi/firefox-i18n-32.0.2/en-US.xpi) = 425315
-SHA256 (xpi/firefox-i18n-32.0.2/en-ZA.xpi) = 0e2288b5bbbffb5a876427606f208740ce59d4fc6710689df40343ef65088fca
-SIZE (xpi/firefox-i18n-32.0.2/en-ZA.xpi) = 392544
-SHA256 (xpi/firefox-i18n-32.0.2/eo.xpi) = ca8c4b5e5e531f2c7a5926541f91a989c15dcc0b34c7ddd3bd28df31407a68af
-SIZE (xpi/firefox-i18n-32.0.2/eo.xpi) = 434542
-SHA256 (xpi/firefox-i18n-32.0.2/es-AR.xpi) = 48db1fc2bf9e19fc47988a3e38e750fd3810db7dd16272ed1fca1d351d09713e
-SIZE (xpi/firefox-i18n-32.0.2/es-AR.xpi) = 402544
-SHA256 (xpi/firefox-i18n-32.0.2/es-CL.xpi) = eafa582ff3e389d8d97c6d969abec02c46cc7c21969e1e53e13762155ac7b699
-SIZE (xpi/firefox-i18n-32.0.2/es-CL.xpi) = 343841
-SHA256 (xpi/firefox-i18n-32.0.2/es-ES.xpi) = fb88b03fa9463e41aeaf59d3762e4965f966f562d0e2e38d83b2a897fbc81ca9
-SIZE (xpi/firefox-i18n-32.0.2/es-ES.xpi) = 336664
-SHA256 (xpi/firefox-i18n-32.0.2/es-MX.xpi) = bec462a19c5b9380891b7bc01c48eb06774c59cdb0d67f0c41668d68e59b3460
-SIZE (xpi/firefox-i18n-32.0.2/es-MX.xpi) = 405044
-SHA256 (xpi/firefox-i18n-32.0.2/et.xpi) = 71d26932f0f454055a0a2e752e0de7ea8816291b3614313d737500c5c7408914
-SIZE (xpi/firefox-i18n-32.0.2/et.xpi) = 393088
-SHA256 (xpi/firefox-i18n-32.0.2/eu.xpi) = 397881bac7c7112a53383335eec6464f78d17b5bf84b89339603f83cc0c7e9a9
-SIZE (xpi/firefox-i18n-32.0.2/eu.xpi) = 415534
-SHA256 (xpi/firefox-i18n-32.0.2/fa.xpi) = 870a12fa2b4e9b2b28f3de8b81f6abeb41b33b8acf5fdcd856f3741313b74adb
-SIZE (xpi/firefox-i18n-32.0.2/fa.xpi) = 464225
-SHA256 (xpi/firefox-i18n-32.0.2/ff.xpi) = d26525de80fac1d0a150240043bbd5c13478099da7c26b034320408534cd3f8f
-SIZE (xpi/firefox-i18n-32.0.2/ff.xpi) = 402691
-SHA256 (xpi/firefox-i18n-32.0.2/fi.xpi) = 6802e96635829cd60613ed7b1eec83cb98d00f0b4c55c253a80ad68f98df3330
-SIZE (xpi/firefox-i18n-32.0.2/fi.xpi) = 395214
-SHA256 (xpi/firefox-i18n-32.0.2/fr.xpi) = 327a62f803c6459b671058c773a85425ab84fd2446300e4d03a9f4d6cff2434a
-SIZE (xpi/firefox-i18n-32.0.2/fr.xpi) = 409446
-SHA256 (xpi/firefox-i18n-32.0.2/fy-NL.xpi) = 3c59e98118c5866daecc021e15c4264afe7f3c31a9fe54fc74b13fa4c3f8d745
-SIZE (xpi/firefox-i18n-32.0.2/fy-NL.xpi) = 404329
-SHA256 (xpi/firefox-i18n-32.0.2/ga-IE.xpi) = 03963a61a327baf0c855cacb0693b63ece7880535a87e6ae5993e8a0c0eecf66
-SIZE (xpi/firefox-i18n-32.0.2/ga-IE.xpi) = 414417
-SHA256 (xpi/firefox-i18n-32.0.2/gd.xpi) = dc7309cba3a62b2b7a6eeb4bd9b5a79390901fe440e858111377b47acd404212
-SIZE (xpi/firefox-i18n-32.0.2/gd.xpi) = 405358
-SHA256 (xpi/firefox-i18n-32.0.2/gl.xpi) = ce4ae2e6a7d3c7009e026823849628d1dcdaf59d822b1a1f9cb392b118690c44
-SIZE (xpi/firefox-i18n-32.0.2/gl.xpi) = 394206
-SHA256 (xpi/firefox-i18n-32.0.2/gu-IN.xpi) = f4dd8498b822bbc67ce5443763097cbd1886fcadb33e5be7f686630cdaf30e2a
-SIZE (xpi/firefox-i18n-32.0.2/gu-IN.xpi) = 428758
-SHA256 (xpi/firefox-i18n-32.0.2/he.xpi) = 7688b19b770d3d1315a79ccdbe4dcd5ed7b93e1f574cc9996792184296326cfd
-SIZE (xpi/firefox-i18n-32.0.2/he.xpi) = 431064
-SHA256 (xpi/firefox-i18n-32.0.2/hi-IN.xpi) = 5efc6075a352e4c5f1a04757c5e809c5f27f41b686d2e69c9e4e4b440ef1b8fa
-SIZE (xpi/firefox-i18n-32.0.2/hi-IN.xpi) = 444733
-SHA256 (xpi/firefox-i18n-32.0.2/hr.xpi) = b6b3c824aa5c415da71e47ca05853c591d6aca20517377740b3d09eaba8c4c3d
-SIZE (xpi/firefox-i18n-32.0.2/hr.xpi) = 428930
-SHA256 (xpi/firefox-i18n-32.0.2/hsb.xpi) = 63ec1f233b3b2d46d597d7ee436e530e87f19caee8bde8cd7a2226aa711f27cb
-SIZE (xpi/firefox-i18n-32.0.2/hsb.xpi) = 415886
-SHA256 (xpi/firefox-i18n-32.0.2/hu.xpi) = 977b229855182474fd0eb9a1f43f02c5cfbd18dd2ccd318a637c9d8213fe27d6
-SIZE (xpi/firefox-i18n-32.0.2/hu.xpi) = 401284
-SHA256 (xpi/firefox-i18n-32.0.2/hy-AM.xpi) = 3fe0f54b74c84e6aa3d73e21a4c7d849bca3c4753c1e5534a896375d12ddb79b
-SIZE (xpi/firefox-i18n-32.0.2/hy-AM.xpi) = 481697
-SHA256 (xpi/firefox-i18n-32.0.2/id.xpi) = bca438bb1547d29e481a6b2533802980d356fceeb41a480789c03646b23e77c9
-SIZE (xpi/firefox-i18n-32.0.2/id.xpi) = 380797
-SHA256 (xpi/firefox-i18n-32.0.2/is.xpi) = 4b40fa4a67e1076f1185acb157f4fd3606b33a1150fe4817258f260780a5f517
-SIZE (xpi/firefox-i18n-32.0.2/is.xpi) = 429949
-SHA256 (xpi/firefox-i18n-32.0.2/it.xpi) = ded50eb9b9b1e4c440f06875c13cb3ae1f51759ba8261d241c7996755d719f7a
-SIZE (xpi/firefox-i18n-32.0.2/it.xpi) = 331764
-SHA256 (xpi/firefox-i18n-32.0.2/ja.xpi) = c50fbfc22ff6fcdbfb02b99a75059a19c4e2a04e21224bdb9cb4c39ab8be00d3
-SIZE (xpi/firefox-i18n-32.0.2/ja.xpi) = 424370
-SHA256 (xpi/firefox-i18n-32.0.2/kk.xpi) = 06712779e16a31da1cf7730fe1aba6d4c1d23c603ca057e4f4370fece7979b88
-SIZE (xpi/firefox-i18n-32.0.2/kk.xpi) = 441958
-SHA256 (xpi/firefox-i18n-32.0.2/km.xpi) = b1ff78c850e1dfdf4bd49cad6a499e238a9df061cfb2a9f362dc67a4d11bb6f0
-SIZE (xpi/firefox-i18n-32.0.2/km.xpi) = 509427
-SHA256 (xpi/firefox-i18n-32.0.2/kn.xpi) = ae8749ab165c3efadf3c6ff71b381988748e1fedb7137ba983acda79f200b5e4
-SIZE (xpi/firefox-i18n-32.0.2/kn.xpi) = 462122
-SHA256 (xpi/firefox-i18n-32.0.2/ko.xpi) = 12bf30b4de6fa42289d581ac610c2a138e8dea083ac3a2aff68c335a5925723c
-SIZE (xpi/firefox-i18n-32.0.2/ko.xpi) = 405909
-SHA256 (xpi/firefox-i18n-32.0.2/ku.xpi) = 02f11ac5a7abf68a4743edf6df369fa327b2b3bdf81296bea696d2bd99d90463
-SIZE (xpi/firefox-i18n-32.0.2/ku.xpi) = 423738
-SHA256 (xpi/firefox-i18n-32.0.2/lij.xpi) = 17fb8f8c59ca0217ec3efcdf6e8b8c35a34596babf393f686156f98f5297ac61
-SIZE (xpi/firefox-i18n-32.0.2/lij.xpi) = 389876
-SHA256 (xpi/firefox-i18n-32.0.2/lt.xpi) = 37132b9109f65e4236d36c758bedb86a56a32adf540cb714c9e5057c84fac599
-SIZE (xpi/firefox-i18n-32.0.2/lt.xpi) = 437860
-SHA256 (xpi/firefox-i18n-32.0.2/lv.xpi) = bbbe45a3f335762d0fac604d819a833d4bb3dac6540f6f1e5aba6a01f7c577f7
-SIZE (xpi/firefox-i18n-32.0.2/lv.xpi) = 400545
-SHA256 (xpi/firefox-i18n-32.0.2/mai.xpi) = 7d528b8a3269e74a41c0ab6c9310fbb056025d5399e2df4b2236613b722b6ae6
-SIZE (xpi/firefox-i18n-32.0.2/mai.xpi) = 448010
-SHA256 (xpi/firefox-i18n-32.0.2/mk.xpi) = f8b4d74359fd7b26ea9ca6d7363f0b51fd366a27ed165132d54a968ca355b073
-SIZE (xpi/firefox-i18n-32.0.2/mk.xpi) = 478850
-SHA256 (xpi/firefox-i18n-32.0.2/ml.xpi) = 69fc177ff6947504e0a1ad47a4a06eedde2427094bf4e9f2d597135039ee50f9
-SIZE (xpi/firefox-i18n-32.0.2/ml.xpi) = 469498
-SHA256 (xpi/firefox-i18n-32.0.2/mr.xpi) = 4620424f96680330c26fd090cc72608a23e44ec00c5304823cea26517518f090
-SIZE (xpi/firefox-i18n-32.0.2/mr.xpi) = 455571
-SHA256 (xpi/firefox-i18n-32.0.2/ms.xpi) = 90716a48d921d0d69115d72424d77dca1405940b1c649ffe65eeabe13829fbc7
-SIZE (xpi/firefox-i18n-32.0.2/ms.xpi) = 440609
-SHA256 (xpi/firefox-i18n-32.0.2/nb-NO.xpi) = a7e8af44d8d5226a5f38ccace03182426eaecba0bd01d90f8e263c46964d25a5
-SIZE (xpi/firefox-i18n-32.0.2/nb-NO.xpi) = 394448
-SHA256 (xpi/firefox-i18n-32.0.2/nl.xpi) = 59504411cc63e21dffa9ac48bd349613e3cb7bc7e1a8650d24136ad17aa8aca6
-SIZE (xpi/firefox-i18n-32.0.2/nl.xpi) = 393386
-SHA256 (xpi/firefox-i18n-32.0.2/nn-NO.xpi) = ae6cf0feb31e5acda6dd664df382303cbbfc7e2360daa8520f91cf2c463e5fd8
-SIZE (xpi/firefox-i18n-32.0.2/nn-NO.xpi) = 390705
-SHA256 (xpi/firefox-i18n-32.0.2/or.xpi) = 6cc6e4115140887bf27977f8d14a3fb8ae28768359759c8bd8d561058457a996
-SIZE (xpi/firefox-i18n-32.0.2/or.xpi) = 467019
-SHA256 (xpi/firefox-i18n-32.0.2/pa-IN.xpi) = e130ad8f61bdf9dfc3cc2dabef80768f2083886da05bcd1aaaa433c41cb0f2d5
-SIZE (xpi/firefox-i18n-32.0.2/pa-IN.xpi) = 440988
-SHA256 (xpi/firefox-i18n-32.0.2/pl.xpi) = 2365d4c5081183a9a793d99b3fdd50abf7a82ec8cad168e0a233c9e471cb52f2
-SIZE (xpi/firefox-i18n-32.0.2/pl.xpi) = 374511
-SHA256 (xpi/firefox-i18n-32.0.2/pt-BR.xpi) = 40ee58447bfeeb0476af44fc227f156c8c206f87ac9eb110067bd7dbbc9f6ab2
-SIZE (xpi/firefox-i18n-32.0.2/pt-BR.xpi) = 408157
-SHA256 (xpi/firefox-i18n-32.0.2/pt-PT.xpi) = cf054d8765f198f32f73b863ae126fd014ae6d5e1ef4c4563cc02ffa76a5dc28
-SIZE (xpi/firefox-i18n-32.0.2/pt-PT.xpi) = 388392
-SHA256 (xpi/firefox-i18n-32.0.2/rm.xpi) = cc3276620775af1a662a2f28364f1909a3804e2ff67d3049ab9895d963b93d48
-SIZE (xpi/firefox-i18n-32.0.2/rm.xpi) = 402947
-SHA256 (xpi/firefox-i18n-32.0.2/ro.xpi) = 7c6abd4cd178065ca8652b49bb6774a28f44ee8979dc92b8ad1c99e13c737421
-SIZE (xpi/firefox-i18n-32.0.2/ro.xpi) = 443783
-SHA256 (xpi/firefox-i18n-32.0.2/ru.xpi) = e4a61ad50d87eaf54e6488943aae63cb7646e5ba0cebb4d494ecc6ace0b19dec
-SIZE (xpi/firefox-i18n-32.0.2/ru.xpi) = 368829
-SHA256 (xpi/firefox-i18n-32.0.2/si.xpi) = e4d53e64512e444c51605d70e88edc36baefaabea1001d6f929fc95bdc60d0db
-SIZE (xpi/firefox-i18n-32.0.2/si.xpi) = 464952
-SHA256 (xpi/firefox-i18n-32.0.2/sk.xpi) = 54671f7065dd07b2f18637059d7e150b5329d9e6a006970749cf10b1fa554066
-SIZE (xpi/firefox-i18n-32.0.2/sk.xpi) = 416660
-SHA256 (xpi/firefox-i18n-32.0.2/sl.xpi) = ae43e792bbd760d51775baeb1742fd12d43265ab43cb0863f3c52a6670b9c001
-SIZE (xpi/firefox-i18n-32.0.2/sl.xpi) = 390284
-SHA256 (xpi/firefox-i18n-32.0.2/son.xpi) = a4aee846c1743c2b16fc3b6e327a11995179191bdcceeb41b2647860f31b8f73
-SIZE (xpi/firefox-i18n-32.0.2/son.xpi) = 397412
-SHA256 (xpi/firefox-i18n-32.0.2/sq.xpi) = 3869506e7ed28640c2d12aa2fa4fae6579ec6ca2fd94ab3e956817074789c230
-SIZE (xpi/firefox-i18n-32.0.2/sq.xpi) = 433978
-SHA256 (xpi/firefox-i18n-32.0.2/sr.xpi) = 1190767ec6ce0d99497279b50d8c02d72167d81fcd90878e8de2daee94c03177
-SIZE (xpi/firefox-i18n-32.0.2/sr.xpi) = 428047
-SHA256 (xpi/firefox-i18n-32.0.2/sv-SE.xpi) = f613e10447bb362b0fbd121a2ebf95276b1ad42069c252a23c015b4502b18208
-SIZE (xpi/firefox-i18n-32.0.2/sv-SE.xpi) = 401269
-SHA256 (xpi/firefox-i18n-32.0.2/ta.xpi) = a06c016bba3f86b0387311904b4c6279603d25da2ae99599e9a811c86bfd4d43
-SIZE (xpi/firefox-i18n-32.0.2/ta.xpi) = 450601
-SHA256 (xpi/firefox-i18n-32.0.2/te.xpi) = a8e0711e7f089a93632d8ef05a34cfb14e132ace37bfe4198cb4309f557c0a79
-SIZE (xpi/firefox-i18n-32.0.2/te.xpi) = 466255
-SHA256 (xpi/firefox-i18n-32.0.2/th.xpi) = 27e6fdec786a26cd783016d5340bb15ac5fff46abaf3b71f19b8d5467e40de24
-SIZE (xpi/firefox-i18n-32.0.2/th.xpi) = 481720
-SHA256 (xpi/firefox-i18n-32.0.2/tr.xpi) = 573af1f2eb8ff900415cbda273a5bb052588e1cb4b8dae434a0512763e554230
-SIZE (xpi/firefox-i18n-32.0.2/tr.xpi) = 420125
-SHA256 (xpi/firefox-i18n-32.0.2/uk.xpi) = c5bb381f821ad67011af88b150c8a1bb4b5efeee4511b87250048af3753db45d
-SIZE (xpi/firefox-i18n-32.0.2/uk.xpi) = 432601
-SHA256 (xpi/firefox-i18n-32.0.2/vi.xpi) = 3a3283958f08885fdad7d3e77e8bdde432b7bf3584e9ec5028a6b47ef6596a0b
-SIZE (xpi/firefox-i18n-32.0.2/vi.xpi) = 415402
-SHA256 (xpi/firefox-i18n-32.0.2/xh.xpi) = dadfac55b0531b55c00e405059c18000dca4cffbb7f7711229a709ecf263c571
-SIZE (xpi/firefox-i18n-32.0.2/xh.xpi) = 401582
-SHA256 (xpi/firefox-i18n-32.0.2/zh-CN.xpi) = 51ca5254d80d88ecc846a0862c702ba10def054caa177f034310409f64e452a3
-SIZE (xpi/firefox-i18n-32.0.2/zh-CN.xpi) = 422370
-SHA256 (xpi/firefox-i18n-32.0.2/zh-TW.xpi) = 6ce32fd0e43b7f92ea4af92c5784fcc2cfb147504d74adcede71da16e3dc4fee
-SIZE (xpi/firefox-i18n-32.0.2/zh-TW.xpi) = 415186
-SHA256 (xpi/firefox-i18n-32.0.2/zu.xpi) = 4375ce4e1ddb3ea704c827c2b91887a3bfd6c2104e0dd967b58a96cef47f354f
-SIZE (xpi/firefox-i18n-32.0.2/zu.xpi) = 436624
+SHA256 (xpi/firefox-i18n-33.0/ach.xpi) = fb1c69ad70661a723778e8030f4f09796ecf33e49fd2f8e32c4cb0c027f0e174
+SIZE (xpi/firefox-i18n-33.0/ach.xpi) = 438595
+SHA256 (xpi/firefox-i18n-33.0/af.xpi) = 6c35fcf441063ed7ce0deaa115f57ce5d23bc1f78fc147fb38963c8689e15375
+SIZE (xpi/firefox-i18n-33.0/af.xpi) = 439710
+SHA256 (xpi/firefox-i18n-33.0/an.xpi) = cf61e89e1f45511403ffbc1d112ee6ecc67f338c6f7217cfee1bddc4d1621400
+SIZE (xpi/firefox-i18n-33.0/an.xpi) = 417166
+SHA256 (xpi/firefox-i18n-33.0/ar.xpi) = 3a08de4e1064f75c1c64935a353de6b781bc16f25b0469ff741723f861d610c7
+SIZE (xpi/firefox-i18n-33.0/ar.xpi) = 470558
+SHA256 (xpi/firefox-i18n-33.0/as.xpi) = fc34573003c2e37a6d903fd6432a79048ef865307f14c1ead1e233dcee92d818
+SIZE (xpi/firefox-i18n-33.0/as.xpi) = 459612
+SHA256 (xpi/firefox-i18n-33.0/ast.xpi) = a4274b532025baf42573d249b12a3b3793b5a80e4a8bf05a0989f9ee95081c1a
+SIZE (xpi/firefox-i18n-33.0/ast.xpi) = 352928
+SHA256 (xpi/firefox-i18n-33.0/be.xpi) = f36bb698fcf733bd1610af2a09af091cccd3052995fec229ce56ff827aab993c
+SIZE (xpi/firefox-i18n-33.0/be.xpi) = 392180
+SHA256 (xpi/firefox-i18n-33.0/bg.xpi) = 55d1ed7be23c7e504701ae5b904f92f5279b2a180f8da7feed5a46bec9e6f7b1
+SIZE (xpi/firefox-i18n-33.0/bg.xpi) = 448725
+SHA256 (xpi/firefox-i18n-33.0/bn-BD.xpi) = 3eda0769d9958143df336aacd460e2a5f7e563d8e482bc5038e9efc4e8e5e6a0
+SIZE (xpi/firefox-i18n-33.0/bn-BD.xpi) = 483351
+SHA256 (xpi/firefox-i18n-33.0/bn-IN.xpi) = 32925970bfd0b35c07c6c6aac53ece6e5d52eae6064cb5733723aa7764e09cfa
+SIZE (xpi/firefox-i18n-33.0/bn-IN.xpi) = 474177
+SHA256 (xpi/firefox-i18n-33.0/br.xpi) = 9be193df751dd2f3068a17c7bd1554ca34cb6f02480125c0b57375606626d3f7
+SIZE (xpi/firefox-i18n-33.0/br.xpi) = 399012
+SHA256 (xpi/firefox-i18n-33.0/bs.xpi) = e15eac3ffd067fbfee4a79a12c330dc882ff03a9c4d42d5188b3e2cd20bde5fc
+SIZE (xpi/firefox-i18n-33.0/bs.xpi) = 440178
+SHA256 (xpi/firefox-i18n-33.0/ca.xpi) = bdd9c95ffc48bf5b0b1b09b67115145a8088f351bbc5a030d313b8ac19ba60f5
+SIZE (xpi/firefox-i18n-33.0/ca.xpi) = 413704
+SHA256 (xpi/firefox-i18n-33.0/cs.xpi) = 3989481da7fc00e2ae6d66f6f0a74a0c5bdead68fe57471bd2d77c70aa3eed9e
+SIZE (xpi/firefox-i18n-33.0/cs.xpi) = 401175
+SHA256 (xpi/firefox-i18n-33.0/csb.xpi) = df6e50a4068c0f1bc52a9a59fe3a668277806788f13281ba948c37809f2e73b4
+SIZE (xpi/firefox-i18n-33.0/csb.xpi) = 394930
+SHA256 (xpi/firefox-i18n-33.0/cy.xpi) = 8757239c3b218f720b6e931346ce0602f8f01a040670758b90afa21edb28f2fc
+SIZE (xpi/firefox-i18n-33.0/cy.xpi) = 400467
+SHA256 (xpi/firefox-i18n-33.0/da.xpi) = 37a36bf620d820d25dfb6dd0be59c201f82765cf616ca2533f1b5d248d6c570a
+SIZE (xpi/firefox-i18n-33.0/da.xpi) = 407440
+SHA256 (xpi/firefox-i18n-33.0/de.xpi) = 2d9f301a170467c19090acc2c31d7aa71dd6db6b616964a8e882a2ffca064b38
+SIZE (xpi/firefox-i18n-33.0/de.xpi) = 405657
+SHA256 (xpi/firefox-i18n-33.0/el.xpi) = 90aca35e51d1643e120a9e73eac11ffbd067b669f85d44f0de7ed72cfd6b9185
+SIZE (xpi/firefox-i18n-33.0/el.xpi) = 453581
+SHA256 (xpi/firefox-i18n-33.0/en-GB.xpi) = 99046c8de54ab0904184b7ff357bbb8ea672e389152506706cea564ee6e8a442
+SIZE (xpi/firefox-i18n-33.0/en-GB.xpi) = 399889
+SHA256 (xpi/firefox-i18n-33.0/en-US.xpi) = 4b7f41bcdeabce6e1b61a0edf6d118b49afffa97af9ad9f254172339679cf317
+SIZE (xpi/firefox-i18n-33.0/en-US.xpi) = 431991
+SHA256 (xpi/firefox-i18n-33.0/en-ZA.xpi) = fa30bef0e8f0796cae3bf72a298b92bc7a0a31fc3d47cdd5f9677acffb3efede
+SIZE (xpi/firefox-i18n-33.0/en-ZA.xpi) = 395962
+SHA256 (xpi/firefox-i18n-33.0/eo.xpi) = 4b4ead0e0f57f35438f5ffc8d6e64d7e5b666c5bb5bab44d8e4e7be4813b3399
+SIZE (xpi/firefox-i18n-33.0/eo.xpi) = 441493
+SHA256 (xpi/firefox-i18n-33.0/es-AR.xpi) = 0cb63288064df4d36ea08f4da8a7f49ab1905b7b4f1a21a8a054a1038de77b9b
+SIZE (xpi/firefox-i18n-33.0/es-AR.xpi) = 409699
+SHA256 (xpi/firefox-i18n-33.0/es-CL.xpi) = 0990b2ff9cc2efca578483aa4a6266c2ddce6e8fc3ba87f5b1868ca9849e1a79
+SIZE (xpi/firefox-i18n-33.0/es-CL.xpi) = 348957
+SHA256 (xpi/firefox-i18n-33.0/es-ES.xpi) = c233820830581da617c225dad2d23192dbf5e50eada4fa1cdf8a06d9ff54f19c
+SIZE (xpi/firefox-i18n-33.0/es-ES.xpi) = 341270
+SHA256 (xpi/firefox-i18n-33.0/es-MX.xpi) = c6ed2ef02b15dd9bab90dc9080203c1f26271a3c71ae7b21f64f509cb6994e58
+SIZE (xpi/firefox-i18n-33.0/es-MX.xpi) = 412164
+SHA256 (xpi/firefox-i18n-33.0/et.xpi) = f87686d61e12871e6a05f8a926a2dd44df9e3e3a4203a1d2aadc2da4776a0728
+SIZE (xpi/firefox-i18n-33.0/et.xpi) = 399818
+SHA256 (xpi/firefox-i18n-33.0/eu.xpi) = 8faec8e4d8cc006166dc9b43622c3cc4e31b68b0c54e2c11705d56c53657c794
+SIZE (xpi/firefox-i18n-33.0/eu.xpi) = 422546
+SHA256 (xpi/firefox-i18n-33.0/fa.xpi) = 666f3d24ac27d0973bad9b3f27cf0467f51a704224160215ab8cd121f6efe785
+SIZE (xpi/firefox-i18n-33.0/fa.xpi) = 470960
+SHA256 (xpi/firefox-i18n-33.0/ff.xpi) = bb18f8d2d5a215877ed0b4a1c43bce30e30f2d7a02613b7263e1796ffee1db86
+SIZE (xpi/firefox-i18n-33.0/ff.xpi) = 409820
+SHA256 (xpi/firefox-i18n-33.0/fi.xpi) = eb98aa10a822ca1bcb28aabffdbd82577f1078670c61acb54699d5bbcb0caaf5
+SIZE (xpi/firefox-i18n-33.0/fi.xpi) = 401952
+SHA256 (xpi/firefox-i18n-33.0/fr.xpi) = 0f176eab92151de66cd6838371a459cdf2bf9f3070aaac24b501e736efa0b204
+SIZE (xpi/firefox-i18n-33.0/fr.xpi) = 416671
+SHA256 (xpi/firefox-i18n-33.0/fy-NL.xpi) = 6fb09fa98046863e6a2d3cf19273d8f9f8818916f977be70238d3ae9866ea485
+SIZE (xpi/firefox-i18n-33.0/fy-NL.xpi) = 411367
+SHA256 (xpi/firefox-i18n-33.0/ga-IE.xpi) = c75e0bbd666715742ab7a2948aedecc265df4a9c3f2e00beb63096767ac95dcc
+SIZE (xpi/firefox-i18n-33.0/ga-IE.xpi) = 419255
+SHA256 (xpi/firefox-i18n-33.0/gd.xpi) = 2a90aec7c6ca941fdfd69a1ef11c6c7d9d93a69897362a3ed4f8442acde0eb3d
+SIZE (xpi/firefox-i18n-33.0/gd.xpi) = 412399
+SHA256 (xpi/firefox-i18n-33.0/gl.xpi) = f4956b7fc8c6de9dbcb64f060a217811989be2601958165de65add289adc5227
+SIZE (xpi/firefox-i18n-33.0/gl.xpi) = 401180
+SHA256 (xpi/firefox-i18n-33.0/gu-IN.xpi) = 9c9795a80b21797b27378dc607fe140dcf2c9ae6d51cb814a127e31f13ec5615
+SIZE (xpi/firefox-i18n-33.0/gu-IN.xpi) = 429327
+SHA256 (xpi/firefox-i18n-33.0/he.xpi) = 986dac932aae7dccda7aac1e708a79b615480bb3bffec5c0f458c86f4857def6
+SIZE (xpi/firefox-i18n-33.0/he.xpi) = 447202
+SHA256 (xpi/firefox-i18n-33.0/hi-IN.xpi) = 86acbca3eedad6ed9c09163f7ada90e0f4e7d12513c6ae49dd98efbefa9c2e4c
+SIZE (xpi/firefox-i18n-33.0/hi-IN.xpi) = 451706
+SHA256 (xpi/firefox-i18n-33.0/hr.xpi) = f0cd9503c33807734dcc39302279b6b86c060da7ef76b0be2c44a859154e9eac
+SIZE (xpi/firefox-i18n-33.0/hr.xpi) = 434271
+SHA256 (xpi/firefox-i18n-33.0/hsb.xpi) = d06ebff4cea67d31858ff88642c225367348a1358870d507a3628e7df8a23067
+SIZE (xpi/firefox-i18n-33.0/hsb.xpi) = 423342
+SHA256 (xpi/firefox-i18n-33.0/hu.xpi) = 123341ddd77027e35843a953f2388dbf50b10d3ad3edbe0a6049d3baadd8c2a3
+SIZE (xpi/firefox-i18n-33.0/hu.xpi) = 408613
+SHA256 (xpi/firefox-i18n-33.0/hy-AM.xpi) = 91cbfe3d5f6b05baf84929396bdd5621df0647a4d94be4c481bcc939750ea178
+SIZE (xpi/firefox-i18n-33.0/hy-AM.xpi) = 489405
+SHA256 (xpi/firefox-i18n-33.0/id.xpi) = 1a4e9ad4e11b732944532d4d95abb56af4f15345b14281e280140dc2ea03aa91
+SIZE (xpi/firefox-i18n-33.0/id.xpi) = 387694
+SHA256 (xpi/firefox-i18n-33.0/is.xpi) = 907ffe72503e9cdd760240029398cea2a6e3880acd6eda292e3edbbdf3ce3322
+SIZE (xpi/firefox-i18n-33.0/is.xpi) = 437346
+SHA256 (xpi/firefox-i18n-33.0/it.xpi) = 415ef2b97a40ea2116dba0978067f682b4af5d9ac2d97e64f166514bac6ec14f
+SIZE (xpi/firefox-i18n-33.0/it.xpi) = 336091
+SHA256 (xpi/firefox-i18n-33.0/ja.xpi) = 4b10c2b762b4f13fc6a7fb5fd7a0dfb92ef8e70715d501b45b407ebe37020046
+SIZE (xpi/firefox-i18n-33.0/ja.xpi) = 431410
+SHA256 (xpi/firefox-i18n-33.0/kk.xpi) = 6ad7755cafe48b4fe5bc8c90a7a3130d11405edac7b9057aad52cc4a6d864761
+SIZE (xpi/firefox-i18n-33.0/kk.xpi) = 449694
+SHA256 (xpi/firefox-i18n-33.0/km.xpi) = 822b71c4f383a45493e21e027ec8421d4392e9e8237e68db07508c745fa4171c
+SIZE (xpi/firefox-i18n-33.0/km.xpi) = 517638
+SHA256 (xpi/firefox-i18n-33.0/kn.xpi) = f7dc9d5344b9da358f8b063f90ba49053b8544dae3359371fbb6e8d9fa072e26
+SIZE (xpi/firefox-i18n-33.0/kn.xpi) = 484376
+SHA256 (xpi/firefox-i18n-33.0/ko.xpi) = 37e69852de14fd4fcf00f8926ac65824019abe2aba2bb8abb2d96b5bc7be4fa0
+SIZE (xpi/firefox-i18n-33.0/ko.xpi) = 413554
+SHA256 (xpi/firefox-i18n-33.0/ku.xpi) = e759629274c879532284a6a7e52950c731136e3507dc8547f7689df3b757b9d5
+SIZE (xpi/firefox-i18n-33.0/ku.xpi) = 430767
+SHA256 (xpi/firefox-i18n-33.0/lij.xpi) = 856405a868374b53a8ee7d425854465d67e572d2895d545631d4d92c3af753d1
+SIZE (xpi/firefox-i18n-33.0/lij.xpi) = 397338
+SHA256 (xpi/firefox-i18n-33.0/lt.xpi) = bc96b34812c514908635b826f59a1716b23e2a109a835ed68dfa428502022137
+SIZE (xpi/firefox-i18n-33.0/lt.xpi) = 440543
+SHA256 (xpi/firefox-i18n-33.0/lv.xpi) = 07a74935d2a65581b8328d212b183b821686da3fdf274632ad5dd6eeb49ac1c9
+SIZE (xpi/firefox-i18n-33.0/lv.xpi) = 406916
+SHA256 (xpi/firefox-i18n-33.0/mai.xpi) = 4501c3b32e6639f0de237b1d0f9dcef3f420761cb9c0373a0670884f7ce03ad4
+SIZE (xpi/firefox-i18n-33.0/mai.xpi) = 454969
+SHA256 (xpi/firefox-i18n-33.0/mk.xpi) = eb97247d2044c679d3a741bea2bfff51d4b6a67bfbf62515b455f174ce34fd63
+SIZE (xpi/firefox-i18n-33.0/mk.xpi) = 485785
+SHA256 (xpi/firefox-i18n-33.0/ml.xpi) = 652530081f5e2611dd4d30463b1cd8d14e39d9a330cac7eb78115106ff0e8353
+SIZE (xpi/firefox-i18n-33.0/ml.xpi) = 481574
+SHA256 (xpi/firefox-i18n-33.0/mr.xpi) = 8988eca854ae4ab11adb0e1ac5987df038839002d0115f979bc43490259670f3
+SIZE (xpi/firefox-i18n-33.0/mr.xpi) = 462151
+SHA256 (xpi/firefox-i18n-33.0/ms.xpi) = 75ebab12603eede36683daba73ffe9a666f367506f0f8a53de0f5e8ce871a04f
+SIZE (xpi/firefox-i18n-33.0/ms.xpi) = 445101
+SHA256 (xpi/firefox-i18n-33.0/nb-NO.xpi) = 80623c481de4d414672210b9d6d3ed9fb3794395129bc992a6bf5815e10ce8a7
+SIZE (xpi/firefox-i18n-33.0/nb-NO.xpi) = 401222
+SHA256 (xpi/firefox-i18n-33.0/nl.xpi) = 659f7f5df5547dd8c632ef05662369b89a45145cfd50c2565b118a10278a805c
+SIZE (xpi/firefox-i18n-33.0/nl.xpi) = 400415
+SHA256 (xpi/firefox-i18n-33.0/nn-NO.xpi) = 030b817817696600b9e524d724401c67632d5f81e852401f098ccae216cf0db9
+SIZE (xpi/firefox-i18n-33.0/nn-NO.xpi) = 395688
+SHA256 (xpi/firefox-i18n-33.0/or.xpi) = 7a48c53b2fcda0241ebcf996719f12b7f46b58729bd38fe3c244b495b1617b49
+SIZE (xpi/firefox-i18n-33.0/or.xpi) = 475958
+SHA256 (xpi/firefox-i18n-33.0/pa-IN.xpi) = ce3bb7683b86118bd1eaaadec5c9e749bccfb6dfaa975505a8d2c10b19129e0f
+SIZE (xpi/firefox-i18n-33.0/pa-IN.xpi) = 447560
+SHA256 (xpi/firefox-i18n-33.0/pl.xpi) = b80a786af82163eb41b2cdca1a58ada369501a8a178086ba5e145642052c88b2
+SIZE (xpi/firefox-i18n-33.0/pl.xpi) = 382736
+SHA256 (xpi/firefox-i18n-33.0/pt-BR.xpi) = 08c0e76602d6697700f6fa22c4e684bebfe90f38b9b2c5b892788827a18f4e24
+SIZE (xpi/firefox-i18n-33.0/pt-BR.xpi) = 415351
+SHA256 (xpi/firefox-i18n-33.0/pt-PT.xpi) = 8ac786c4119de61cab7ac1f01ac6986d06963f2c9735f686fedc02dcf6f3c3b8
+SIZE (xpi/firefox-i18n-33.0/pt-PT.xpi) = 395800
+SHA256 (xpi/firefox-i18n-33.0/rm.xpi) = f3526efc6d4813a40392f77fe24b3d21de7bd74e4007a0010d9213526988ebf5
+SIZE (xpi/firefox-i18n-33.0/rm.xpi) = 409252
+SHA256 (xpi/firefox-i18n-33.0/ro.xpi) = d87aab4766066c24033cf4675b0fb7ca00ac3fbe9015e800e06d0e15563f8c34
+SIZE (xpi/firefox-i18n-33.0/ro.xpi) = 450878
+SHA256 (xpi/firefox-i18n-33.0/ru.xpi) = 4c08e198084f214a1f2fd1fa7e186921d799d6907120047a1226e6afcbebdd94
+SIZE (xpi/firefox-i18n-33.0/ru.xpi) = 378687
+SHA256 (xpi/firefox-i18n-33.0/si.xpi) = b26343b0d8517ab8029a04dabc220b69b827d82f1b6f983abbadb779d812ea2c
+SIZE (xpi/firefox-i18n-33.0/si.xpi) = 471817
+SHA256 (xpi/firefox-i18n-33.0/sk.xpi) = 16ab1c936f58121120e71ccfa488dd0664d67db4b1dad3ff361f4b21fe742d37
+SIZE (xpi/firefox-i18n-33.0/sk.xpi) = 424073
+SHA256 (xpi/firefox-i18n-33.0/sl.xpi) = 13300580cf18f0777dfa261f33efc61b8d47797e17d501f92fac1f9bbe86f64b
+SIZE (xpi/firefox-i18n-33.0/sl.xpi) = 397421
+SHA256 (xpi/firefox-i18n-33.0/son.xpi) = 4629ac52b8c68dd4f2b6de35ffe3bbc0f4c0605822d1cff180b386cc00a4ca65
+SIZE (xpi/firefox-i18n-33.0/son.xpi) = 404432
+SHA256 (xpi/firefox-i18n-33.0/sq.xpi) = 708dead68642d8d782674a44c7be7040bc516a311cb328b57c477c7d914cffb9
+SIZE (xpi/firefox-i18n-33.0/sq.xpi) = 440871
+SHA256 (xpi/firefox-i18n-33.0/sr.xpi) = 54bc18b7e5b709a28c01d70983024925fabf04a4f3cc2770368f36d69da3e561
+SIZE (xpi/firefox-i18n-33.0/sr.xpi) = 435266
+SHA256 (xpi/firefox-i18n-33.0/sv-SE.xpi) = a27a1990d0bc6b34ba26e3dcbde16cf539b7974653772c105ac8e11813ecf945
+SIZE (xpi/firefox-i18n-33.0/sv-SE.xpi) = 408341
+SHA256 (xpi/firefox-i18n-33.0/ta.xpi) = d919beb0086c7cf5b1ad8d491e0e43d2ed6fa0afa774f74cf80ed3df0a5b8a45
+SIZE (xpi/firefox-i18n-33.0/ta.xpi) = 458828
+SHA256 (xpi/firefox-i18n-33.0/te.xpi) = a93c0c8a50f2aa8eb47a3f69be699da2dfd9447577ad8e2af20022d32c9adbfd
+SIZE (xpi/firefox-i18n-33.0/te.xpi) = 477729
+SHA256 (xpi/firefox-i18n-33.0/th.xpi) = e51608654d570673567a92aedcd016478a810fcb4991f9408e6d73fa31afd248
+SIZE (xpi/firefox-i18n-33.0/th.xpi) = 488197
+SHA256 (xpi/firefox-i18n-33.0/tr.xpi) = 31bb3bbbc4aff041559dbef932c8103063cb5fa333b640a68b2dc0e73dd3b8a1
+SIZE (xpi/firefox-i18n-33.0/tr.xpi) = 427703
+SHA256 (xpi/firefox-i18n-33.0/uk.xpi) = a39eda76dd9d437c59b1aa5463d1e2a340f764da694c886eeccefb56bf6fb018
+SIZE (xpi/firefox-i18n-33.0/uk.xpi) = 439819
+SHA256 (xpi/firefox-i18n-33.0/vi.xpi) = 8422c888ac94653562971a78c86bde365f29a669dcd3bf0c9dacf68b5138f0c3
+SIZE (xpi/firefox-i18n-33.0/vi.xpi) = 422408
+SHA256 (xpi/firefox-i18n-33.0/xh.xpi) = 5e415f6c1bd7de7fdb96385f044455f465954836119950a51dd34ebfefa9dcbd
+SIZE (xpi/firefox-i18n-33.0/xh.xpi) = 408460
+SHA256 (xpi/firefox-i18n-33.0/zh-CN.xpi) = 0fe62fe5f372b01f40a9d20617688eda3923cc3a90d3742200e9c841ba0523f2
+SIZE (xpi/firefox-i18n-33.0/zh-CN.xpi) = 429857
+SHA256 (xpi/firefox-i18n-33.0/zh-TW.xpi) = 88e13c51ab2cde95ca274c458c73af74fe2b4a0eeb5efde3e223a55f73940a6e
+SIZE (xpi/firefox-i18n-33.0/zh-TW.xpi) = 422430
+SHA256 (xpi/firefox-i18n-33.0/zu.xpi) = 6deb6b853ec1923ab325332d2eb5e96e6a0cea443d447203dff0cff5352c15bf
+SIZE (xpi/firefox-i18n-33.0/zu.xpi) = 443460
diff --git a/www/firefox/Makefile b/www/firefox/Makefile
index eb329d4a19f7..4f27c5589fc1 100644
--- a/www/firefox/Makefile
+++ b/www/firefox/Makefile
@@ -2,12 +2,12 @@
# $FreeBSD$
PORTNAME= firefox
-DISTVERSION= 32.0.3
+DISTVERSION= 33.0
DISTVERSIONSUFFIX=.source
PORTEPOCH= 1
CATEGORIES= www ipv6
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
- https://ftp.mozilla.org/pub/mozilla.org/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source/
+ https://ftp.mozilla.org/pub/mozilla.org/${PORTNAME}/candidates/${DISTVERSION}-candidates/build2/source/
MAINTAINER= gecko@FreeBSD.org
COMMENT= Web browser based on the browser portion of Mozilla
@@ -60,8 +60,8 @@ MOZ_OPTIONS= --program-transform-name='s/firefox/${MOZILLA}/' \
WRKSRC:= ${WRKDIR}/mozilla-release
# avoid clang 3.2/3.3 crash in js/src/jsgc.cpp on refillFreeList<(js::AllowGC)1>
-# http://svnweb.freebsd.org/changeset/base/255804
-.if ${CHOSEN_COMPILER_TYPE} == clang && ${ARCH} == i386 && ${OSVERSION} < 1000056
+# To be removed when 9.2R goes EOL. http://llvm.org/PR15840
+.if ${ARCH} == i386 && ${CHOSEN_COMPILER_TYPE} == clang && ${COMPILER_VERSION:M3[23]}
. if ${PORT_OPTIONS:MOPTIMIZED_CFLAGS}
BROKEN= Cannot build with OPTIMIZED_CFLAGS option due to \
a ${CHOSEN_COMPILER_TYPE} bug: unset the option or \
diff --git a/www/firefox/distinfo b/www/firefox/distinfo
index add936a9fe79..a6126851c48a 100644
--- a/www/firefox/distinfo
+++ b/www/firefox/distinfo
@@ -1,2 +1,2 @@
-SHA256 (firefox-32.0.3.source.tar.bz2) = ae2aa20538d03b392a04663593fb106c0aec2d8bbb78ddac84a88ce7617b1efe
-SIZE (firefox-32.0.3.source.tar.bz2) = 150323569
+SHA256 (firefox-33.0.source.tar.bz2) = 1018c2fae8c54c8a45f5a3ce348a2617a3f8039a789b09b7cfa5a27be069b229
+SIZE (firefox-33.0.source.tar.bz2) = 155177527
diff --git a/www/firefox/files/patch-bug1015547 b/www/firefox/files/patch-bug1015547
deleted file mode 100644
index 8acec9f542d7..000000000000
--- a/www/firefox/files/patch-bug1015547
+++ /dev/null
@@ -1,95 +0,0 @@
-diff --git configure.in configure.in
-index 7bed45f..053de17 100644
---- configure.in
-+++ configure.in
-@@ -2950,7 +2950,7 @@ dnl Checks for library functions.
- dnl ========================================================
- AC_PROG_GCC_TRADITIONAL
- AC_FUNC_MEMCMP
--AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r)
-+AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r arc4random arc4random_buf)
-
- dnl check for clock_gettime(), the CLOCK_MONOTONIC clock
- AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC),
-diff --git xpcom/base/nsUUIDGenerator.cpp xpcom/base/nsUUIDGenerator.cpp
-index 0687344..ca3ff8b 100644
---- xpcom/base/nsUUIDGenerator.cpp
-+++ xpcom/base/nsUUIDGenerator.cpp
-@@ -16,6 +16,10 @@
-
- #include "nsUUIDGenerator.h"
-
-+#ifdef ANDROID
-+extern "C" NS_EXPORT void arc4random_buf(void *, size_t);
-+#endif
-+
- using namespace mozilla;
-
- NS_IMPL_ISUPPORTS(nsUUIDGenerator, nsIUUIDGenerator)
-@@ -35,7 +39,7 @@ nsUUIDGenerator::Init()
- // We're a service, so we're guaranteed that Init() is not going
- // to be reentered while we're inside Init().
-
--#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
-+#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
- /* initialize random number generator using NSPR random noise */
- unsigned int seed;
-
-@@ -72,7 +76,7 @@ nsUUIDGenerator::Init()
- }
- #endif
-
--#endif /* non XP_WIN and non XP_MACOSX */
-+#endif /* non XP_WIN and non XP_MACOSX and non ARC4RANDOM */
-
- return NS_OK;
- }
-@@ -122,13 +126,16 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* aId)
- * back to it; instead, we use the value returned when we called
- * initstate, since older glibc's have broken setstate() return values
- */
--#ifndef ANDROID
-+#ifndef HAVE_ARC4RANDOM
- setstate(mState);
- #endif
-
-+#ifdef HAVE_ARC4RANDOM_BUF
-+ arc4random_buf(aId, sizeof(nsID));
-+#else /* HAVE_ARC4RANDOM_BUF */
- size_t bytesLeft = sizeof(nsID);
- while (bytesLeft > 0) {
--#ifdef ANDROID
-+#ifdef HAVE_ARC4RANDOM
- long rval = arc4random();
- const size_t mRBytes = 4;
- #else
-@@ -150,6 +157,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* aId)
-
- bytesLeft -= toWrite;
- }
-+#endif /* HAVE_ARC4RANDOM_BUF */
-
- /* Put in the version */
- aId->m2 &= 0x0fff;
-@@ -159,7 +167,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* aId)
- aId->m3[0] &= 0x3f;
- aId->m3[0] |= 0x80;
-
--#ifndef ANDROID
-+#ifndef HAVE_ARC4RANDOM
- /* Restore the previous RNG state */
- setstate(mSavedState);
- #endif
-diff --git xpcom/base/nsUUIDGenerator.h xpcom/base/nsUUIDGenerator.h
-index 6a24212..68ed6f2 100644
---- xpcom/base/nsUUIDGenerator.h
-+++ xpcom/base/nsUUIDGenerator.h
-@@ -29,7 +29,7 @@ private:
- protected:
-
- mozilla::Mutex mLock;
--#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
-+#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
- char mState[128];
- char* mSavedState;
- uint8_t mRBytes;
diff --git a/www/firefox/files/patch-bug1021761 b/www/firefox/files/patch-bug1021761
new file mode 100644
index 000000000000..cf179649803d
--- /dev/null
+++ b/www/firefox/files/patch-bug1021761
@@ -0,0 +1,1101 @@
+diff --git configure.in configure.in
+index 48e60c0..ec08417 100644
+--- configure.in
++++ configure.in
+@@ -5438,6 +5438,60 @@ fi
+ AC_SUBST(MOZ_WEBM_ENCODER)
+
+ dnl ==================================
++dnl = Check OSS availability
++dnl ==================================
++
++dnl If using Linux, Solaris or BSDs, ensure that OSS is available
++case "$OS_TARGET" in
++Linux|SunOS|DragonFly|FreeBSD|NetBSD|GNU/kFreeBSD)
++ MOZ_OSS=1
++ ;;
++esac
++
++MOZ_ARG_DISABLE_BOOL(oss,
++[ --disable-oss Disable OpenSoundSystem support],
++ MOZ_OSS=,
++ MOZ_OSS=1)
++
++_SAVE_CFLAGS=$CFLAGS
++_SAVE_LIBS=$LIBS
++if test -n "$MOZ_OSS"; then
++ dnl Prefer 4Front implementation
++ AC_MSG_CHECKING([MOZ_OSS_CFLAGS])
++ if test -z "$MOZ_OSS_CFLAGS"; then
++ for oss_conf in /etc/oss.conf /usr/local/etc/oss.conf; do
++ if test -e "$oss_conf"; then
++ . "$oss_conf"
++ fi
++ done
++ if test -d "$OSSLIBDIR"; then
++ MOZ_OSS_CFLAGS="-I$OSSLIBDIR/include"
++ fi
++ fi
++ AC_MSG_RESULT([$MOZ_OSS_CFLAGS])
++
++ CFLAGS="$CFLAGS $MOZ_OSS_CFLAGS"
++ MOZ_CHECK_HEADERS(sys/soundcard.h linux/soundcard.h soundcard.h)
++
++ if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \
++ "$ac_cv_header_linux_soundcard_h" != "yes" -a \
++ "$ac_cv_header_soundcard_h" != "yes"; then
++ AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --disable-ogg --disable-wave --disable-webm.])
++ fi
++
++ dnl Assume NetBSD implementation over SunAudio
++ AC_CHECK_LIB(ossaudio, _oss_ioctl,
++ [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound")
++ MOZ_OSS_LIBS="-lossaudio"])
++fi
++CFLAGS=$_SAVE_CFLAGS
++LIBS=$_SAVE_LIBS
++
++AC_SUBST(MOZ_OSS)
++AC_SUBST_LIST(MOZ_OSS_CFLAGS)
++AC_SUBST_LIST(MOZ_OSS_LIBS)
++
++dnl ==================================
+ dnl = Check alsa availability on Linux
+ dnl ==================================
+
+@@ -5451,12 +5505,23 @@ MOZ_ARG_ENABLE_BOOL(alsa,
+ MOZ_ALSA=1,
+ MOZ_ALSA=)
+
++MOZ_ARG_DISABLE_BOOL(alsa-dlopen,
++[ --disable-alsa-dlopen Disable runtime linking of libasound.so],
++ DISABLE_LIBASOUND_DLOPEN=1,
++ DISABLE_LIBASOUND_DLOPEN=)
++
+ if test -n "$MOZ_ALSA"; then
+ PKG_CHECK_MODULES(MOZ_ALSA, alsa, ,
+ [echo "$MOZ_ALSA_PKG_ERRORS"
+ AC_MSG_ERROR([Need alsa for Ogg, Wave or WebM decoding on Linux. Disable with --disable-ogg --disable-wave --disable-webm. (On Ubuntu, you might try installing the package libasound2-dev.)])])
+ fi
+
++if test -n "$DISABLE_LIBASOUND_DLOPEN"; then
++ AC_DEFINE(DISABLE_LIBASOUND_DLOPEN)
++else
++ MOZ_ALSA_LIBS=
++fi
++
+ AC_SUBST(MOZ_ALSA)
+
+ dnl ========================================================
+diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS
+index b441e8a..950d9e5 100644
+--- media/libcubeb/AUTHORS
++++ media/libcubeb/AUTHORS
+@@ -4,3 +4,4 @@ Michael Wu <mwu@mozilla.com>
+ Paul Adenot <paul@paul.cx>
+ David Richards <drichards@mozilla.com>
+ Sebastien Alaiwan <sebastien.alaiwan@gmail.com>
++Evgeniy Vodolazskiy <waterlaz@gmail.com>
+diff --git media/libcubeb/src/cubeb.c media/libcubeb/src/cubeb.c
+index 9c3adcc..45d765b 100644
+--- media/libcubeb/src/cubeb.c
++++ media/libcubeb/src/cubeb.c
+@@ -54,6 +54,9 @@ int opensl_init(cubeb ** context, char const * context_name);
+ #if defined(USE_AUDIOTRACK)
+ int audiotrack_init(cubeb ** context, char const * context_name);
+ #endif
++#if defined(USE_OSS)
++int oss_init(cubeb ** context, char const * context_name);
++#endif
+
+ int
+ validate_stream_params(cubeb_stream_params stream_params)
+@@ -120,6 +123,9 @@ cubeb_init(cubeb ** context, char const * context_name)
+ #if defined(USE_AUDIOTRACK)
+ audiotrack_init,
+ #endif
++#if defined(USE_OSS)
++ oss_init,
++#endif
+ };
+ int i;
+
+diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c
+index a962553..1f780f4 100644
+--- media/libcubeb/src/cubeb_alsa.c
++++ media/libcubeb/src/cubeb_alsa.c
+@@ -11,6 +11,7 @@
+ #include <sys/time.h>
+ #include <assert.h>
+ #include <limits.h>
++#include <dlfcn.h>
+ #include <poll.h>
+ #include <unistd.h>
+ #include <alsa/asoundlib.h>
+@@ -24,6 +25,50 @@
+
+ #define ALSA_PA_PLUGIN "ALSA <-> PulseAudio PCM I/O Plugin"
+
++#ifdef DISABLE_LIBASOUND_DLOPEN
++#define WRAP(x) x
++#else
++#define WRAP(x) cubeb_##x
++#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x
++MAKE_TYPEDEF(snd_config);
++MAKE_TYPEDEF(snd_config_add);
++MAKE_TYPEDEF(snd_config_copy);
++MAKE_TYPEDEF(snd_config_delete);
++MAKE_TYPEDEF(snd_config_get_id);
++MAKE_TYPEDEF(snd_config_get_string);
++MAKE_TYPEDEF(snd_config_imake_integer);
++MAKE_TYPEDEF(snd_config_search);
++MAKE_TYPEDEF(snd_config_search_definition);
++MAKE_TYPEDEF(snd_lib_error_set_handler);
++MAKE_TYPEDEF(snd_pcm_avail_update);
++MAKE_TYPEDEF(snd_pcm_close);
++MAKE_TYPEDEF(snd_pcm_delay);
++MAKE_TYPEDEF(snd_pcm_drain);
++MAKE_TYPEDEF(snd_pcm_frames_to_bytes);
++MAKE_TYPEDEF(snd_pcm_get_params);
++/* snd_pcm_hw_params_alloca is actually a macro */
++/* MAKE_TYPEDEF(snd_pcm_hw_params_alloca); */
++MAKE_TYPEDEF(snd_pcm_hw_params_sizeof);
++#define snd_pcm_hw_params_sizeof cubeb_snd_pcm_hw_params_sizeof
++MAKE_TYPEDEF(snd_pcm_hw_params_any);
++MAKE_TYPEDEF(snd_pcm_hw_params_get_channels_max);
++MAKE_TYPEDEF(snd_pcm_hw_params_get_rate);
++MAKE_TYPEDEF(snd_pcm_hw_params_set_rate_near);
++MAKE_TYPEDEF(snd_pcm_nonblock);
++MAKE_TYPEDEF(snd_pcm_open);
++MAKE_TYPEDEF(snd_pcm_open_lconf);
++MAKE_TYPEDEF(snd_pcm_pause);
++MAKE_TYPEDEF(snd_pcm_poll_descriptors);
++MAKE_TYPEDEF(snd_pcm_poll_descriptors_count);
++MAKE_TYPEDEF(snd_pcm_poll_descriptors_revents);
++MAKE_TYPEDEF(snd_pcm_recover);
++MAKE_TYPEDEF(snd_pcm_set_params);
++MAKE_TYPEDEF(snd_pcm_state);
++MAKE_TYPEDEF(snd_pcm_writei);
++
++#undef MAKE_TYPEDEF
++#endif
++
+ /* ALSA is not thread-safe. snd_pcm_t instances are individually protected
+ by the owning cubeb_stream's mutex. snd_pcm_t creation and destruction
+ is not thread-safe until ALSA 1.0.24 (see alsa-lib.git commit 91c9c8f1),
+@@ -64,6 +109,8 @@ struct cubeb {
+ workaround is not required. */
+ snd_config_t * local_config;
+ int is_pa;
++
++ void * libasound;
+ };
+
+ enum stream_state {
+@@ -262,7 +309,7 @@ alsa_refill_stream(cubeb_stream * stm)
+
+ pthread_mutex_lock(&stm->mutex);
+
+- r = snd_pcm_poll_descriptors_revents(stm->pcm, stm->fds, stm->nfds, &revents);
++ r = WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents);
+ if (r < 0 || revents != POLLOUT) {
+ /* This should be a stream error; it makes no sense for poll(2) to wake
+ for this stream and then have the stream report that it's not ready.
+@@ -271,10 +318,10 @@ alsa_refill_stream(cubeb_stream * stm)
+ return RUNNING;
+ }
+
+- avail = snd_pcm_avail_update(stm->pcm);
++ avail = WRAP(snd_pcm_avail_update)(stm->pcm);
+ if (avail == -EPIPE) {
+- snd_pcm_recover(stm->pcm, avail, 1);
+- avail = snd_pcm_avail_update(stm->pcm);
++ WRAP(snd_pcm_recover)(stm->pcm, avail, 1);
++ avail = WRAP(snd_pcm_avail_update)(stm->pcm);
+ }
+
+ /* Failed to recover from an xrun, this stream must be broken. */
+@@ -293,8 +340,8 @@ alsa_refill_stream(cubeb_stream * stm)
+ available to write. If avail is still zero here, the stream must be in
+ a funky state, so recover and try again. */
+ if (avail == 0) {
+- snd_pcm_recover(stm->pcm, -EPIPE, 1);
+- avail = snd_pcm_avail_update(stm->pcm);
++ WRAP(snd_pcm_recover)(stm->pcm, -EPIPE, 1);
++ avail = WRAP(snd_pcm_avail_update)(stm->pcm);
+ if (avail <= 0) {
+ pthread_mutex_unlock(&stm->mutex);
+ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR);
+@@ -302,7 +349,7 @@ alsa_refill_stream(cubeb_stream * stm)
+ }
+ }
+
+- p = calloc(1, snd_pcm_frames_to_bytes(stm->pcm, avail));
++ p = calloc(1, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, avail));
+ assert(p);
+
+ pthread_mutex_unlock(&stm->mutex);
+@@ -313,10 +360,10 @@ alsa_refill_stream(cubeb_stream * stm)
+ return ERROR;
+ }
+ if (got > 0) {
+- snd_pcm_sframes_t wrote = snd_pcm_writei(stm->pcm, p, got);
++ snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
+ if (wrote == -EPIPE) {
+- snd_pcm_recover(stm->pcm, wrote, 1);
+- wrote = snd_pcm_writei(stm->pcm, p, got);
++ WRAP(snd_pcm_recover)(stm->pcm, wrote, 1);
++ wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
+ }
+ assert(wrote >= 0 && wrote == got);
+ stm->write_position += wrote;
+@@ -342,7 +389,7 @@ alsa_refill_stream(cubeb_stream * stm)
+
+ /* Fill the remaining buffer with silence to guarantee one full period
+ has been written. */
+- snd_pcm_writei(stm->pcm, (char *) p + got, avail - got);
++ WRAP(snd_pcm_writei)(stm->pcm, (char *) p + got, avail - got);
+
+ set_timeout(&stm->drain_timeout, buffer_time * 1000);
+
+@@ -453,26 +500,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm)
+
+ slave_def = NULL;
+
+- r = snd_config_search(root_pcm, "slave", &slave_pcm);
++ r = WRAP(snd_config_search)(root_pcm, "slave", &slave_pcm);
+ if (r < 0) {
+ return NULL;
+ }
+
+- r = snd_config_get_string(slave_pcm, &string);
++ r = WRAP(snd_config_get_string)(slave_pcm, &string);
+ if (r >= 0) {
+- r = snd_config_search_definition(lconf, "pcm_slave", string, &slave_def);
++ r = WRAP(snd_config_search_definition)(lconf, "pcm_slave", string, &slave_def);
+ if (r < 0) {
+ return NULL;
+ }
+ }
+
+ do {
+- r = snd_config_search(slave_def ? slave_def : slave_pcm, "pcm", &pcm);
++ r = WRAP(snd_config_search)(slave_def ? slave_def : slave_pcm, "pcm", &pcm);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_get_string(slave_def ? slave_def : slave_pcm, &string);
++ r = WRAP(snd_config_get_string)(slave_def ? slave_def : slave_pcm, &string);
+ if (r < 0) {
+ break;
+ }
+@@ -481,7 +528,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm)
+ if (r < 0 || r > (int) sizeof(node_name)) {
+ break;
+ }
+- r = snd_config_search(lconf, node_name, &pcm);
++ r = WRAP(snd_config_search)(lconf, node_name, &pcm);
+ if (r < 0) {
+ break;
+ }
+@@ -490,7 +537,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm)
+ } while (0);
+
+ if (slave_def) {
+- snd_config_delete(slave_def);
++ WRAP(snd_config_delete)(slave_def);
+ }
+
+ return NULL;
+@@ -513,22 +560,22 @@ init_local_config_with_workaround(char const * pcm_name)
+
+ lconf = NULL;
+
+- if (snd_config == NULL) {
++ if (*WRAP(snd_config) == NULL) {
+ return NULL;
+ }
+
+- r = snd_config_copy(&lconf, snd_config);
++ r = WRAP(snd_config_copy)(&lconf, *WRAP(snd_config));
+ if (r < 0) {
+ return NULL;
+ }
+
+ do {
+- r = snd_config_search_definition(lconf, "pcm", pcm_name, &pcm_node);
++ r = WRAP(snd_config_search_definition)(lconf, "pcm", pcm_name, &pcm_node);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_get_id(pcm_node, &string);
++ r = WRAP(snd_config_get_id)(pcm_node, &string);
+ if (r < 0) {
+ break;
+ }
+@@ -537,7 +584,7 @@ init_local_config_with_workaround(char const * pcm_name)
+ if (r < 0 || r > (int) sizeof(node_name)) {
+ break;
+ }
+- r = snd_config_search(lconf, node_name, &pcm_node);
++ r = WRAP(snd_config_search)(lconf, node_name, &pcm_node);
+ if (r < 0) {
+ break;
+ }
+@@ -548,12 +595,12 @@ init_local_config_with_workaround(char const * pcm_name)
+ }
+
+ /* Fetch the PCM node's type, and bail out if it's not the PulseAudio plugin. */
+- r = snd_config_search(pcm_node, "type", &node);
++ r = WRAP(snd_config_search)(pcm_node, "type", &node);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_get_string(node, &string);
++ r = WRAP(snd_config_get_string)(node, &string);
+ if (r < 0) {
+ break;
+ }
+@@ -564,18 +611,18 @@ init_local_config_with_workaround(char const * pcm_name)
+
+ /* Don't clobber an explicit existing handle_underrun value, set it only
+ if it doesn't already exist. */
+- r = snd_config_search(pcm_node, "handle_underrun", &node);
++ r = WRAP(snd_config_search)(pcm_node, "handle_underrun", &node);
+ if (r != -ENOENT) {
+ break;
+ }
+
+ /* Disable pcm_pulse's asynchronous underrun handling. */
+- r = snd_config_imake_integer(&node, "handle_underrun", 0);
++ r = WRAP(snd_config_imake_integer)(&node, "handle_underrun", 0);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_add(pcm_node, node);
++ r = WRAP(snd_config_add)(pcm_node, node);
+ if (r < 0) {
+ break;
+ }
+@@ -583,7 +630,7 @@ init_local_config_with_workaround(char const * pcm_name)
+ return lconf;
+ } while (0);
+
+- snd_config_delete(lconf);
++ WRAP(snd_config_delete)(lconf);
+
+ return NULL;
+ }
+@@ -595,9 +642,9 @@ alsa_locked_pcm_open(snd_pcm_t ** pcm, snd_pcm_stream_t stream, snd_config_t * l
+
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+ if (local_config) {
+- r = snd_pcm_open_lconf(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config);
++ r = WRAP(snd_pcm_open_lconf)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config);
+ } else {
+- r = snd_pcm_open(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK);
++ r = WRAP(snd_pcm_open)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK);
+ }
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+
+@@ -610,7 +657,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm)
+ int r;
+
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+- r = snd_pcm_close(pcm);
++ r = WRAP(snd_pcm_close)(pcm);
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+
+ return r;
+@@ -667,12 +714,65 @@ alsa_init(cubeb ** context, char const * context_name)
+ pthread_attr_t attr;
+ snd_pcm_t * dummy;
+
++ void * libasound = NULL;
++
++#ifndef DISABLE_LIBASOUND_DLOPEN
++ libasound = dlopen("libasound.so", RTLD_LAZY);
++ if (!libasound) {
++ return CUBEB_ERROR;
++ }
++
++#define LOAD(x) do { \
++ cubeb_##x = dlsym(libasound, #x); \
++ if (!cubeb_##x) { \
++ dlclose(libasound); \
++ return CUBEB_ERROR; \
++ } \
++ } while(0)
++
++ LOAD(snd_config);
++ LOAD(snd_config_add);
++ LOAD(snd_config_copy);
++ LOAD(snd_config_delete);
++ LOAD(snd_config_get_id);
++ LOAD(snd_config_get_string);
++ LOAD(snd_config_imake_integer);
++ LOAD(snd_config_search);
++ LOAD(snd_config_search_definition);
++ LOAD(snd_lib_error_set_handler);
++ LOAD(snd_pcm_avail_update);
++ LOAD(snd_pcm_close);
++ LOAD(snd_pcm_delay);
++ LOAD(snd_pcm_drain);
++ LOAD(snd_pcm_frames_to_bytes);
++ LOAD(snd_pcm_get_params);
++ /* snd_pcm_hw_params_alloca is actually a macro */
++ /* LOAD(snd_pcm_hw_params_alloca); */
++ LOAD(snd_pcm_hw_params_sizeof);
++ LOAD(snd_pcm_hw_params_any);
++ LOAD(snd_pcm_hw_params_get_channels_max);
++ LOAD(snd_pcm_hw_params_get_rate);
++ LOAD(snd_pcm_hw_params_set_rate_near);
++ LOAD(snd_pcm_nonblock);
++ LOAD(snd_pcm_open);
++ LOAD(snd_pcm_open_lconf);
++ LOAD(snd_pcm_pause);
++ LOAD(snd_pcm_poll_descriptors);
++ LOAD(snd_pcm_poll_descriptors_count);
++ LOAD(snd_pcm_poll_descriptors_revents);
++ LOAD(snd_pcm_recover);
++ LOAD(snd_pcm_set_params);
++ LOAD(snd_pcm_state);
++ LOAD(snd_pcm_writei);
++
++#undef LOAD
++#endif
+ assert(context);
+ *context = NULL;
+
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+ if (!cubeb_alsa_error_handler_set) {
+- snd_lib_error_set_handler(silent_error_handler);
++ WRAP(snd_lib_error_set_handler)(silent_error_handler);
+ cubeb_alsa_error_handler_set = 1;
+ }
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+@@ -680,6 +780,8 @@ alsa_init(cubeb ** context, char const * context_name)
+ ctx = calloc(1, sizeof(*ctx));
+ assert(ctx);
+
++ ctx->libasound = libasound;
++
+ ctx->ops = &alsa_ops;
+
+ r = pthread_mutex_init(&ctx->mutex, NULL);
+@@ -729,7 +831,7 @@ alsa_init(cubeb ** context, char const * context_name)
+ config fails with EINVAL, the PA PCM is too old for this workaround. */
+ if (r == -EINVAL) {
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+- snd_config_delete(ctx->local_config);
++ WRAP(snd_config_delete)(ctx->local_config);
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+ ctx->local_config = NULL;
+ } else if (r >= 0) {
+@@ -768,9 +870,13 @@ alsa_destroy(cubeb * ctx)
+ pthread_mutex_destroy(&ctx->mutex);
+ free(ctx->fds);
+
++ if (ctx->libasound) {
++ dlclose(ctx->libasound);
++ }
++
+ if (ctx->local_config) {
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+- snd_config_delete(ctx->local_config);
++ WRAP(snd_config_delete)(ctx->local_config);
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+ }
+
+@@ -838,7 +944,7 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name,
+ return CUBEB_ERROR;
+ }
+
+- r = snd_pcm_nonblock(stm->pcm, 1);
++ r = WRAP(snd_pcm_nonblock)(stm->pcm, 1);
+ assert(r == 0);
+
+ /* Ugly hack: the PA ALSA plugin allows buffer configurations that can't
+@@ -848,23 +954,23 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name,
+ latency = latency < 500 ? 500 : latency;
+ }
+
+- r = snd_pcm_set_params(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED,
+- stm->params.channels, stm->params.rate, 1,
+- latency * 1000);
++ r = WRAP(snd_pcm_set_params)(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED,
++ stm->params.channels, stm->params.rate, 1,
++ latency * 1000);
+ if (r < 0) {
+ alsa_stream_destroy(stm);
+ return CUBEB_ERROR_INVALID_FORMAT;
+ }
+
+- r = snd_pcm_get_params(stm->pcm, &stm->buffer_size, &stm->period_size);
++ r = WRAP(snd_pcm_get_params)(stm->pcm, &stm->buffer_size, &stm->period_size);
+ assert(r == 0);
+
+- stm->nfds = snd_pcm_poll_descriptors_count(stm->pcm);
++ stm->nfds = WRAP(snd_pcm_poll_descriptors_count)(stm->pcm);
+ assert(stm->nfds > 0);
+
+ stm->saved_fds = calloc(stm->nfds, sizeof(struct pollfd));
+ assert(stm->saved_fds);
+- r = snd_pcm_poll_descriptors(stm->pcm, stm->saved_fds, stm->nfds);
++ r = WRAP(snd_pcm_poll_descriptors)(stm->pcm, stm->saved_fds, stm->nfds);
+ assert((nfds_t) r == stm->nfds);
+
+ r = pthread_cond_init(&stm->cond, NULL);
+@@ -895,7 +1001,7 @@ alsa_stream_destroy(cubeb_stream * stm)
+ pthread_mutex_lock(&stm->mutex);
+ if (stm->pcm) {
+ if (stm->state == DRAINING) {
+- snd_pcm_drain(stm->pcm);
++ WRAP(snd_pcm_drain)(stm->pcm);
+ }
+ alsa_locked_pcm_close(stm->pcm);
+ stm->pcm = NULL;
+@@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_any(stm->pcm, hw_params);
++ rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params);
+ if (rv < 0) {
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_get_channels_max(hw_params, max_channels);
++ rv = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels);
+ if (rv < 0) {
+ return CUBEB_ERROR;
+ }
+@@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) {
+
+ /* get a pcm, disabling resampling, so we get a rate the
+ * hardware/dmix/pulse/etc. supports. */
+- rv = snd_pcm_open(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
++ rv = WRAP(snd_pcm_open)(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
+ if (rv < 0) {
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_any(pcm, hw_params);
++ rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params);
+ if (rv < 0) {
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_get_rate(hw_params, rate, &dir);
++ rv = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir);
+ if (rv >= 0) {
+ /* There is a default rate: use it. */
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+ return CUBEB_OK;
+ }
+
+ /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */
+ *rate = 44100;
+
+- rv = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL);
++ rv = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL);
+ if (rv < 0) {
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+ return CUBEB_ERROR;
+ }
+
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+
+ return CUBEB_OK;
+ }
+@@ -1013,7 +1119,7 @@ alsa_stream_start(cubeb_stream * stm)
+ ctx = stm->context;
+
+ pthread_mutex_lock(&stm->mutex);
+- snd_pcm_pause(stm->pcm, 0);
++ WRAP(snd_pcm_pause)(stm->pcm, 0);
+ gettimeofday(&stm->last_activity, NULL);
+ pthread_mutex_unlock(&stm->mutex);
+
+@@ -1047,7 +1153,7 @@ alsa_stream_stop(cubeb_stream * stm)
+ pthread_mutex_unlock(&ctx->mutex);
+
+ pthread_mutex_lock(&stm->mutex);
+- snd_pcm_pause(stm->pcm, 1);
++ WRAP(snd_pcm_pause)(stm->pcm, 1);
+ pthread_mutex_unlock(&stm->mutex);
+
+ return CUBEB_OK;
+@@ -1063,8 +1169,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position)
+ pthread_mutex_lock(&stm->mutex);
+
+ delay = -1;
+- if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING ||
+- snd_pcm_delay(stm->pcm, &delay) != 0) {
++ if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING ||
++ WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) {
+ *position = stm->last_position;
+ pthread_mutex_unlock(&stm->mutex);
+ return CUBEB_OK;
+@@ -1089,7 +1195,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency)
+ snd_pcm_sframes_t delay;
+ /* This function returns the delay in frames until a frame written using
+ snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */
+- if (snd_pcm_delay(stm->pcm, &delay)) {
++ if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) {
+ return CUBEB_ERROR;
+ }
+
+diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c
+new file mode 100644
+index 0000000..5e38e27
+--- /dev/null
++++ media/libcubeb/src/cubeb_oss.c
+@@ -0,0 +1,399 @@
++/*
++ * Copyright © 2014 Mozilla Foundation
++ *
++ * This program is made available under an ISC-style license. See the
++ * accompanying file LICENSE for details.
++ */
++#if defined(HAVE_SYS_SOUNDCARD_H)
++#include <sys/soundcard.h>
++#elif defined(HAVE_LINUX_SOUNDCARD_H)
++#include <linux/soundcard.h>
++#else
++#include <soundcard.h>
++#endif
++#include <unistd.h>
++#include <stdlib.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <sys/ioctl.h>
++#include <errno.h>
++#include <pthread.h>
++#include <stdio.h>
++
++#include "cubeb/cubeb.h"
++#include "cubeb-internal.h"
++
++#ifndef CUBEB_OSS_DEFAULT_OUTPUT
++#define CUBEB_OSS_DEFAULT_OUTPUT "/dev/dsp"
++#endif
++
++#define OSS_BUFFER_SIZE 1024
++
++struct cubeb {
++ struct cubeb_ops const * ops;
++};
++
++struct cubeb_stream {
++ cubeb * context;
++
++ cubeb_data_callback data_callback;
++ cubeb_state_callback state_callback;
++ void * user_ptr;
++ float volume;
++ float panning;
++
++ pthread_mutex_t state_mutex;
++ pthread_cond_t state_cond;
++
++ int running;
++ int stopped;
++ int floating;
++
++ /* These two vars are needed to support old versions of OSS */
++ unsigned int position_bytes;
++ unsigned int last_position_bytes;
++
++ uint64_t written_frags; /* The number of fragments written to /dev/dsp */
++ uint64_t missed_frags; /* fragments output with stopped stream */
++
++ cubeb_stream_params params;
++ int fd;
++ pthread_t th;
++};
++
++static struct cubeb_ops const oss_ops;
++
++int oss_init(cubeb ** context, char const * context_name)
++{
++ cubeb* ctx = (cubeb*)malloc(sizeof(cubeb));
++ ctx->ops = &oss_ops;
++ *context = ctx;
++ return CUBEB_OK;
++}
++
++static void oss_destroy(cubeb *ctx)
++{
++ free(ctx);
++}
++
++static char const * oss_get_backend_id(cubeb * context)
++{
++ static char oss_name[] = "oss";
++ return oss_name;
++}
++
++static int oss_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
++{
++ *max_channels = 2; /* Let's support only stereo for now */
++ return CUBEB_OK;
++}
++
++static int oss_get_min_latency(cubeb * context, cubeb_stream_params params,
++ uint32_t * latency_ms)
++{
++ /* 40ms is a big enough number to work ok */
++ *latency_ms = 40;
++ return CUBEB_OK;
++}
++
++static int oss_get_preferred_sample_rate(cubeb *context, uint32_t * rate)
++{
++ /* 48000 seems a prefered choice for most audio devices
++ * and a good choice for OSS */
++ *rate = 48000;
++ return CUBEB_OK;
++}
++
++static void run_state_callback(cubeb_stream *stream, cubeb_state state)
++{
++ if (stream->state_callback) {
++ stream->state_callback(stream, stream->user_ptr, state);
++ }
++}
++
++static long run_data_callback(cubeb_stream *stream, void *buffer, long nframes)
++{
++ long got = 0;
++ pthread_mutex_lock(&stream->state_mutex);
++ if (stream->data_callback && stream->running && !stream->stopped) {
++ pthread_mutex_unlock(&stream->state_mutex);
++ got = stream->data_callback(stream, stream->user_ptr, buffer, nframes);
++ } else {
++ pthread_mutex_unlock(&stream->state_mutex);
++ }
++ return got;
++}
++
++static void apply_volume(int16_t* buffer, unsigned int n,
++ float volume, float panning)
++{
++ float left = volume;
++ float right = volume;
++ unsigned int i;
++ int pan[2];
++ if (panning<0) {
++ right *= (1+panning);
++ } else {
++ left *= (1-panning);
++ }
++ pan[0] = 128.0*left;
++ pan[1] = 128.0*right;
++ for(i=0; i<n; i++){
++ buffer[i] = ((int)buffer[i])*pan[i%2]/128;
++ }
++}
++
++static void *writer(void *stm)
++{
++ cubeb_stream* stream = (cubeb_stream*)stm;
++ int16_t buffer[OSS_BUFFER_SIZE];
++ float f_buffer[OSS_BUFFER_SIZE];
++ int got;
++ unsigned long i;
++ while (stream->running) {
++ pthread_mutex_lock(&stream->state_mutex);
++ if (stream->stopped) {
++ pthread_mutex_unlock(&stream->state_mutex);
++ run_state_callback(stream, CUBEB_STATE_STOPPED);
++ pthread_mutex_lock(&stream->state_mutex);
++ while (stream->stopped) {
++ pthread_cond_wait(&stream->state_cond, &stream->state_mutex);
++ }
++ pthread_mutex_unlock(&stream->state_mutex);
++ run_state_callback(stream, CUBEB_STATE_STARTED);
++ continue;
++ }
++ pthread_mutex_unlock(&stream->state_mutex);
++ if (stream->floating) {
++ got = run_data_callback(stream, f_buffer,
++ OSS_BUFFER_SIZE/stream->params.channels);
++ for (i=0; i<((unsigned long)got)*stream->params.channels; i++) {
++ buffer[i] = f_buffer[i]*32767.0;
++ }
++ } else {
++ got = run_data_callback(stream, buffer,
++ OSS_BUFFER_SIZE/stream->params.channels);
++ }
++ apply_volume(buffer, got*stream->params.channels,
++ stream->volume, stream->panning);
++ if (got<0) {
++ run_state_callback(stream, CUBEB_STATE_ERROR);
++ break;
++ }
++ if (!got) {
++ run_state_callback(stream, CUBEB_STATE_DRAINED);
++ }
++ if (got) {
++ size_t i = 0;
++ size_t s = got*stream->params.channels*sizeof(int16_t);
++ while (i < s) {
++ ssize_t n = write(stream->fd, ((char*)buffer) + i, s - i);
++ if (n<=0) {
++ run_state_callback(stream, CUBEB_STATE_ERROR);
++ break;
++ }
++ i+=n;
++ }
++ stream->written_frags+=got;
++ }
++ }
++ return NULL;
++}
++
++static void oss_try_set_latency(cubeb_stream* stream, unsigned int latency)
++{
++ unsigned int latency_bytes, n_frag;
++ int frag;
++ /* fragment size of 1024 is a good choice with good chances to be accepted */
++ unsigned int frag_size=1024;
++ unsigned int frag_log=10; /* 2^frag_log = frag_size */
++ latency_bytes =
++ latency*stream->params.rate*stream->params.channels*sizeof(uint16_t)/1000;
++ n_frag = latency_bytes>>frag_log;
++ frag = (n_frag<<16) | frag_log;
++ /* Even if this fails we wish to continue, not checking for errors */
++ ioctl(stream->fd, SNDCTL_DSP_SETFRAGMENT, &frag);
++}
++
++static int oss_stream_init(cubeb * context, cubeb_stream ** stm,
++ char const * stream_name,
++ cubeb_stream_params stream_params,
++ unsigned int latency,
++ cubeb_data_callback data_callback,
++ cubeb_state_callback state_callback, void * user_ptr)
++{
++ cubeb_stream* stream = (cubeb_stream*)malloc(sizeof(cubeb_stream));
++ stream->context = context;
++ stream->data_callback = data_callback;
++ stream->state_callback = state_callback;
++ stream->user_ptr = user_ptr;
++
++ if ((stream->fd = open(CUBEB_OSS_DEFAULT_OUTPUT, O_WRONLY)) == -1) {
++ free(stream);
++ return CUBEB_ERROR;
++ }
++#define SET(what, to) do { unsigned int i = to; \
++ int j = ioctl(stream->fd, what, &i); \
++ if (j == -1 || i != to) { \
++ close(stream->fd); \
++ free(stream); \
++ return CUBEB_ERROR_INVALID_FORMAT; } } while (0)
++
++ stream->params = stream_params;
++ stream->volume = 1.0;
++ stream->panning = 0.0;
++
++ oss_try_set_latency(stream, latency);
++
++ stream->floating = 0;
++ SET(SNDCTL_DSP_CHANNELS, stream_params.channels);
++ SET(SNDCTL_DSP_SPEED, stream_params.rate);
++ switch (stream_params.format) {
++ case CUBEB_SAMPLE_S16LE:
++ SET(SNDCTL_DSP_SETFMT, AFMT_S16_LE);
++ break;
++ case CUBEB_SAMPLE_S16BE:
++ SET(SNDCTL_DSP_SETFMT, AFMT_S16_BE);
++ break;
++ case CUBEB_SAMPLE_FLOAT32LE:
++ SET(SNDCTL_DSP_SETFMT, AFMT_S16_NE);
++ stream->floating = 1;
++ break;
++ default:
++ close(stream->fd);
++ free(stream);
++ return CUBEB_ERROR;
++ }
++
++
++ pthread_mutex_init(&stream->state_mutex, NULL);
++ pthread_cond_init(&stream->state_cond, NULL);
++
++ stream->running = 1;
++ stream->stopped = 1;
++ stream->position_bytes = 0;
++ stream->last_position_bytes = 0;
++ stream->written_frags = 0;
++ stream->missed_frags = 0;
++
++ pthread_create(&stream->th, NULL, writer, (void*)stream);
++
++ *stm = stream;
++
++ return CUBEB_OK;
++}
++
++static void oss_stream_destroy(cubeb_stream * stream)
++{
++ pthread_mutex_lock(&stream->state_mutex);
++
++ stream->running = 0;
++ stream->stopped = 0;
++ pthread_cond_signal(&stream->state_cond);
++
++ pthread_mutex_unlock(&stream->state_mutex);
++
++ pthread_join(stream->th, NULL);
++
++ pthread_mutex_destroy(&stream->state_mutex);
++ pthread_cond_destroy(&stream->state_cond);
++ close(stream->fd);
++ free(stream);
++}
++
++static int oss_stream_get_latency(cubeb_stream * stream, uint32_t * latency)
++{
++ if (ioctl(stream->fd, SNDCTL_DSP_GETODELAY, latency)==-1) {
++ return CUBEB_ERROR;
++ }
++ /* Convert latency from bytes to frames */
++ *latency /= stream->params.channels*sizeof(int16_t);
++ return CUBEB_OK;
++}
++
++
++static int oss_stream_current_optr(cubeb_stream * stream, uint64_t * position)
++{
++ count_info ci;
++ /* Unfortunately, this ioctl is only available in OSS 4.x */
++#ifdef SNDCTL_DSP_CURRENT_OPTR
++ oss_count_t count;
++ if (ioctl(stream->fd, SNDCTL_DSP_CURRENT_OPTR, &count) != -1) {
++ *position = count.samples;// + count.fifo_samples;
++ return CUBEB_OK;
++ }
++#endif
++ /* Fall back to this ioctl in case the previous one fails */
++ if (ioctl(stream->fd, SNDCTL_DSP_GETOPTR, &ci) == -1) {
++ return CUBEB_ERROR;
++ }
++ /* ci.bytes is only 32 bit and will start to wrap after arithmetic overflow */
++ stream->position_bytes += ci.bytes - stream->last_position_bytes;
++ stream->last_position_bytes = ci.bytes;
++ *position = stream->position_bytes/stream->params.channels/sizeof(int16_t);
++ return CUBEB_OK;
++}
++
++static int oss_stream_get_position(cubeb_stream * stream, uint64_t * position)
++{
++ if ( oss_stream_current_optr(stream, position) == CUBEB_OK ){
++ *position -= stream->missed_frags;
++ return CUBEB_OK;
++ }
++ /* If no correct method to get position works we resort to this */
++ *position = stream->written_frags;
++ return CUBEB_OK;
++}
++
++
++static int oss_stream_start(cubeb_stream * stream)
++{
++ pthread_mutex_lock(&stream->state_mutex);
++ if (stream->stopped) {
++ uint64_t ptr;
++ oss_stream_current_optr(stream, &ptr);
++ stream->missed_frags = ptr - stream->written_frags;
++ stream->stopped = 0;
++ pthread_cond_signal(&stream->state_cond);
++ }
++ pthread_mutex_unlock(&stream->state_mutex);
++ return CUBEB_OK;
++}
++
++static int oss_stream_stop(cubeb_stream * stream)
++{
++ pthread_mutex_lock(&stream->state_mutex);
++ stream->stopped = 1;
++ pthread_mutex_unlock(&stream->state_mutex);
++ return CUBEB_OK;
++}
++
++int oss_stream_set_panning(cubeb_stream * stream, float panning)
++{
++ if (stream->params.channels == 2) {
++ stream->panning=panning;
++ }
++ return CUBEB_OK;
++}
++
++int oss_stream_set_volume(cubeb_stream * stream, float volume)
++{
++ stream->volume=volume;
++ return CUBEB_OK;
++}
++
++static struct cubeb_ops const oss_ops = {
++ .init = oss_init,
++ .get_backend_id = oss_get_backend_id,
++ .get_max_channel_count = oss_get_max_channel_count,
++ .get_min_latency = oss_get_min_latency,
++ .get_preferred_sample_rate = oss_get_preferred_sample_rate,
++ .destroy = oss_destroy,
++ .stream_init = oss_stream_init,
++ .stream_destroy = oss_stream_destroy,
++ .stream_start = oss_stream_start,
++ .stream_stop = oss_stream_stop,
++ .stream_get_position = oss_stream_get_position,
++ .stream_get_latency = oss_stream_get_latency
++};
+diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build
+index 8b7a0dd..31212ce 100644
+--- media/libcubeb/src/moz.build
++++ media/libcubeb/src/moz.build
+@@ -17,6 +17,12 @@ if CONFIG['MOZ_ALSA']:
+ ]
+ DEFINES['USE_ALSA'] = True
+
++if CONFIG['MOZ_OSS']:
++ SOURCES += [
++ 'cubeb_oss.c',
++ ]
++ DEFINES['USE_OSS'] = True
++
+ if CONFIG['MOZ_PULSEAUDIO']:
+ SOURCES += [
+ 'cubeb_pulse.c',
+@@ -75,5 +81,6 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
+
+ FAIL_ON_WARNINGS = True
+
++CFLAGS += CONFIG['MOZ_OSS_CFLAGS']
+ CFLAGS += CONFIG['MOZ_ALSA_CFLAGS']
+ CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS']
+diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk
+index e191f13..4fb268a 100644
+--- toolkit/library/libxul.mk
++++ toolkit/library/libxul.mk
+@@ -146,6 +146,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32
+ endif
+ endif
+
++ifdef MOZ_OSS
++EXTRA_DSO_LDOPTS += $(MOZ_OSS_LIBS)
++endif
++
+ ifdef MOZ_ALSA
+ EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS)
+ endif
diff --git a/www/firefox/files/patch-bug1041268 b/www/firefox/files/patch-bug1041268
new file mode 100644
index 000000000000..d4ab1a91395e
--- /dev/null
+++ b/www/firefox/files/patch-bug1041268
@@ -0,0 +1,26 @@
+diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc
+index 97f69d3..77a50b3 100644
+--- media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc
++++ media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc
+@@ -18,7 +18,7 @@ ScreenCapturer* ScreenCapturer::Create() {
+ return Create(DesktopCaptureOptions::CreateDefault());
+ }
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
+ ScreenCapturer* ScreenCapturer::CreateWithXDamage(
+ bool use_update_notifications) {
+ DesktopCaptureOptions options;
+diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h
+index a8d40a7..177a6c1 100644
+--- media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h
++++ media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h
+@@ -74,7 +74,7 @@ class ScreenCapturer : public DesktopCapturer {
+ static ScreenCapturer* Create(const DesktopCaptureOptions& options);
+ static ScreenCapturer* Create();
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
+ // Creates platform-specific capturer and instructs it whether it should use
+ // X DAMAGE support.
+ static ScreenCapturer* CreateWithXDamage(bool use_x_damage);
diff --git a/www/firefox/files/patch-bug1073709 b/www/firefox/files/patch-bug1073709
new file mode 100644
index 000000000000..f011d7438ad0
--- /dev/null
+++ b/www/firefox/files/patch-bug1073709
@@ -0,0 +1,18 @@
+diff --git mfbt/Atomics.h mfbt/Atomics.h
+index 495a9d3..c7f7601 100644
+--- mfbt/Atomics.h
++++ mfbt/Atomics.h
+@@ -34,10 +34,12 @@
+ * loose typing of the atomic builtins. GCC 4.5 and 4.6 lacks inline
+ * definitions for unspecialized std::atomic and causes linking errors.
+ * Therefore, we require at least 4.7.0 for using libstdc++.
++ *
++ * libc++ <atomic> is only functional with clang.
+ */
+ # if MOZ_USING_LIBSTDCXX && MOZ_LIBSTDCXX_VERSION_AT_LEAST(4, 7, 0)
+ # define MOZ_HAVE_CXX11_ATOMICS
+-# elif MOZ_USING_LIBCXX
++# elif MOZ_USING_LIBCXX && defined(__clang__)
+ # define MOZ_HAVE_CXX11_ATOMICS
+ # endif
+ /*
diff --git a/www/firefox/files/patch-bug1076983 b/www/firefox/files/patch-bug1076983
new file mode 100644
index 000000000000..182aadf58bf5
--- /dev/null
+++ b/www/firefox/files/patch-bug1076983
@@ -0,0 +1,45 @@
+commit e10ee74
+Author: Martin Thomson <martin.thomson@gmail.com>
+Date: Tue Oct 14 17:17:35 2014 -0700
+
+ Bug 1076983 - Disabling SSL 3.0 with pref
+---
+ netwerk/base/public/security-prefs.js | 2 +-
+ security/manager/ssl/src/nsNSSComponent.cpp | 7 +++----
+ 2 files changed, 4 insertions(+), 5 deletions(-)
+
+diff --git netwerk/base/public/security-prefs.js netwerk/base/public/security-prefs.js
+index 352552e..c12731b 100644
+--- netwerk/base/public/security-prefs.js
++++ netwerk/base/public/security-prefs.js
+@@ -2,7 +2,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/. */
+
+-pref("security.tls.version.min", 0);
++pref("security.tls.version.min", 1);
+ pref("security.tls.version.max", 3);
+
+ pref("security.ssl.allow_unrestricted_renego_everywhere__temporarily_available_pref", false);
+diff --git security/manager/ssl/src/nsNSSComponent.cpp security/manager/ssl/src/nsNSSComponent.cpp
+index 8cab67b..772959d 100644
+--- security/manager/ssl/src/nsNSSComponent.cpp
++++ security/manager/ssl/src/nsNSSComponent.cpp
+@@ -829,14 +829,13 @@ void nsNSSComponent::setValidationOptions(bool isInitialSetting,
+ mDefaultCertVerifier = new SharedCertVerifier(odc, osc, ogc, pinningMode);
+ }
+
+-// Enable the TLS versions given in the prefs, defaulting to SSL 3.0 (min
+-// version) and TLS 1.2 (max version) when the prefs aren't set or set to
+-// invalid values.
++// Enable the TLS versions given in the prefs, defaulting to TLS 1.0 (min) and
++// TLS 1.2 (max) when the prefs aren't set or set to invalid values.
+ nsresult
+ nsNSSComponent::setEnabledTLSVersions()
+ {
+ // keep these values in sync with security-prefs.js
+- static const int32_t PSM_DEFAULT_MIN_TLS_VERSION = 0;
++ static const int32_t PSM_DEFAULT_MIN_TLS_VERSION = 1;
+ static const int32_t PSM_DEFAULT_MAX_TLS_VERSION = 3;
+
+ int32_t minVersion = Preferences::GetInt("security.tls.version.min",
diff --git a/www/firefox/files/patch-bug779713 b/www/firefox/files/patch-bug779713
index e4643f4422cb..37e0bc2fb5c0 100644
--- a/www/firefox/files/patch-bug779713
+++ b/www/firefox/files/patch-bug779713
@@ -47,7 +47,15 @@ diff --git mfbt/Attributes.h mfbt/Attributes.h
index d317766..ddb13da 100644
--- mfbt/Attributes.h
+++ mfbt/Attributes.h
-@@ -54,6 +54,9 @@
+@@ -51,6 +51,7 @@
+ * http://stackoverflow.com/questions/20498142/visual-studio-2013-explicit-keyword-bug
+ */
+ # if _MSC_VER >= 1800
++# define MOZ_HAVE_CXX11_ALIGNAS
+ # define MOZ_HAVE_CXX11_DELETE
+ # endif
+ # if _MSC_VER >= 1700
+@@ -74,6 +75,9 @@
# ifndef __has_extension
# define __has_extension __has_feature /* compatibility, for older versions of clang */
# endif
@@ -57,7 +65,7 @@ index d317766..ddb13da 100644
# if __has_extension(cxx_constexpr)
# define MOZ_HAVE_CXX11_CONSTEXPR
# endif
-@@ -75,6 +78,9 @@
+@@ -95,6 +99,9 @@
# endif
#elif defined(__GNUC__)
# if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
@@ -67,11 +75,3 @@ index d317766..ddb13da 100644
# if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0)
# define MOZ_HAVE_CXX11_OVERRIDE
# define MOZ_HAVE_CXX11_FINAL final
-@@ -96,6 +102,7 @@
- # define MOZ_HAVE_NORETURN __attribute__((noreturn))
- #elif defined(_MSC_VER)
- # if _MSC_VER >= 1800
-+# define MOZ_HAVE_CXX11_ALIGNAS
- # define MOZ_HAVE_CXX11_DELETE
- # endif
- # if _MSC_VER >= 1700
diff --git a/www/firefox/files/patch-bug826985 b/www/firefox/files/patch-bug826985
index d87c9dc21e4e..4e20ff41d658 100644
--- a/www/firefox/files/patch-bug826985
+++ b/www/firefox/files/patch-bug826985
@@ -132,7 +132,7 @@ index d46b5aa..e452223 100644
'targets': [
{
'target_name': 'video_capture_module',
-@@ -46,6 +49,16 @@
+@@ -46,6 +49,19 @@
'linux/video_capture_linux.cc',
'linux/video_capture_linux.h',
],
@@ -141,6 +141,9 @@ index d46b5aa..e452223 100644
+ 'defines': [
+ 'HAVE_LIBV4L2',
+ ],
++ 'cflags_mozilla': [
++ '$(MOZ_LIBV4L2_CFLAGS)',
++ ],
+ 'libraries': [
+ '-lv4l2',
+ ],
diff --git a/www/firefox/files/patch-bug847568 b/www/firefox/files/patch-bug847568
index 1504654a4341..a065b937eae9 100644
--- a/www/firefox/files/patch-bug847568
+++ b/www/firefox/files/patch-bug847568
@@ -164,9 +164,9 @@ diff --git intl/unicharutil/util/Makefile.in intl/unicharutil/util/Makefile.in
index f6b9f7c..60863f4 100644
--- intl/unicharutil/util/Makefile.in
+++ intl/unicharutil/util/Makefile.in
-@@ -21,3 +21,7 @@ ifdef _MSC_VER
- OS_COMPILE_CXXFLAGS += -Zl
- OS_COMPILE_CFLAGS += -Zl
+@@ -15,3 +15,7 @@ include $(topsrcdir)/config/rules.mk
+ ifdef ENABLE_INTL_API
+ LOCAL_INCLUDES += $(MOZ_ICU_CFLAGS)
endif
+
+ifdef MOZ_NATIVE_HARFBUZZ
diff --git a/www/firefox/files/patch-clang34-disable-stdcall b/www/firefox/files/patch-clang34-disable-stdcall
deleted file mode 100644
index de30c49f9950..000000000000
--- a/www/firefox/files/patch-clang34-disable-stdcall
+++ /dev/null
@@ -1,13 +0,0 @@
-# http://llvm.org/bugs/show_bug.cgi?id=19007
-
---- xpcom/base/nscore.h~
-+++ xpcom/base/nscore.h
-@@ -110,7 +110,7 @@
- * NS_HIDDEN_(int) NS_FASTCALL func2(char *foo);
- */
-
--#if defined(__i386__) && defined(__GNUC__)
-+#if defined(__i386__) && defined(__GNUC__) && !(defined(__clang__) && __clang_major__ == 3 && __clang_minor__ == 4 && __clang_patchlevel__ == 0)
- #define NS_FASTCALL __attribute__ ((regparm (3), stdcall))
- #define NS_CONSTRUCTOR_FASTCALL __attribute__ ((regparm (3), stdcall))
- #elif defined(XP_WIN) && !defined(_WIN64)
diff --git a/www/firefox/files/patch-system-openh264 b/www/firefox/files/patch-system-openh264
new file mode 100644
index 000000000000..14bd5488fed5
--- /dev/null
+++ b/www/firefox/files/patch-system-openh264
@@ -0,0 +1,218 @@
+# Revert bug 1045209 to allow using absolute path
+
+diff --git content/media/gmp/GMPChild.cpp content/media/gmp/GMPChild.cpp
+index 4165a75..81914d5 100644
+--- content/media/gmp/GMPChild.cpp
++++ content/media/gmp/GMPChild.cpp
+@@ -66,19 +66,11 @@
+ }
+ #endif
+
+- nsCOMPtr<nsIFile> parent;
+- rv = aLibFile->GetParent(getter_AddRefs(parent));
+- if (NS_FAILED(rv)) {
+- return false;
+- }
+-
+- nsAutoString parentLeafName;
+- rv = parent->GetLeafName(parentLeafName);
+- if (NS_FAILED(rv)) {
++ nsAutoString leafName;
++ if (NS_FAILED(aLibFile->GetLeafName(leafName))) {
+ return false;
+ }
+-
+- nsAutoString baseName(Substring(parentLeafName, 4, parentLeafName.Length() - 1));
++ nsAutoString baseName(Substring(leafName, 4, leafName.Length() - 1));
+
+ #if defined(XP_MACOSX)
+ nsAutoString binaryName = NS_LITERAL_STRING("lib") + baseName + NS_LITERAL_STRING(".dylib");
+diff --git content/media/gmp/GMPParent.cpp content/media/gmp/GMPParent.cpp
+index e63453e..bf83b30 100644
+--- content/media/gmp/GMPParent.cpp
++++ content/media/gmp/GMPParent.cpp
+@@ -87,23 +87,16 @@
+ mService = aService;
+ mDirectory = aPluginDir;
+
+- // aPluginDir is <profile-dir>/<gmp-plugin-id>/<version>
+- // where <gmp-plugin-id> should be gmp-gmpopenh264
+- nsCOMPtr<nsIFile> parent;
+- nsresult rv = aPluginDir->GetParent(getter_AddRefs(parent));
+- if (NS_FAILED(rv)) {
+- return rv;
+- }
+- nsAutoString parentLeafName;
+- rv = parent->GetLeafName(parentLeafName);
++ nsAutoString leafname;
++ nsresult rv = aPluginDir->GetLeafName(leafname);
+ if (NS_FAILED(rv)) {
+ return rv;
+ }
+ LOGD(("%s::%s: %p for %s", __CLASS__, __FUNCTION__, this,
+- NS_LossyConvertUTF16toASCII(parentLeafName).get()));
++ NS_LossyConvertUTF16toASCII(leafname).get()));
+
+- MOZ_ASSERT(parentLeafName.Length() > 4);
+- mName = Substring(parentLeafName, 4);
++ MOZ_ASSERT(leafname.Length() > 4);
++ mName = Substring(leafname, 4);
+
+ return ReadGMPMetaData();
+ }
+diff --git toolkit/modules/GMPInstallManager.jsm toolkit/modules/GMPInstallManager.jsm
+index 9593492..470384b 100644
+--- toolkit/modules/GMPInstallManager.jsm
++++ toolkit/modules/GMPInstallManager.jsm
+@@ -107,6 +107,7 @@
+ */
+ KEY_LOG_ENABLED: "media.gmp-manager.log",
+ KEY_ADDON_LAST_UPDATE: "media.{0}.lastUpdate",
++ KEY_ADDON_PATH: "media.{0}.path",
+ KEY_ADDON_VERSION: "media.{0}.version",
+ KEY_ADDON_AUTOUPDATE: "media.{0}.autoupdate",
+ KEY_URL: "media.gmp-manager.url",
+@@ -888,9 +889,7 @@
+ let gmpAddon = this._gmpAddon;
+ let installToDirPath = Cc["@mozilla.org/file/local;1"].
+ createInstance(Ci.nsIFile);
+- let path = OS.Path.join(OS.Constants.Path.profileDir,
+- gmpAddon.id,
+- gmpAddon.version);
++ let path = OS.Path.join(OS.Constants.Path.profileDir, gmpAddon.id);
+ installToDirPath.initWithPath(path);
+ log.info("install to directory path: " + installToDirPath.path);
+ let gmpInstaller = new GMPExtractor(zipPath, installToDirPath.path);
+@@ -899,10 +898,12 @@
+ // Success, set the prefs
+ let now = Math.round(Date.now() / 1000);
+ GMPPrefs.set(GMPPrefs.KEY_ADDON_LAST_UPDATE, now, gmpAddon.id);
+- // Setting the version pref signals installation completion to consumers,
+- // if you need to set other prefs etc. do it before this.
++ // Setting the path pref signals installation completion to consumers,
++ // so set the version and potential other information they use first.
+ GMPPrefs.set(GMPPrefs.KEY_ADDON_VERSION, gmpAddon.version,
+ gmpAddon.id);
++ GMPPrefs.set(GMPPrefs.KEY_ADDON_PATH,
++ installToDirPath.path, gmpAddon.id);
+ this._deferred.resolve(extractedPaths);
+ }, err => {
+ this._deferred.reject(err);
+diff --git toolkit/mozapps/extensions/internal/OpenH264Provider.jsm toolkit/mozapps/extensions/internal/OpenH264Provider.jsm
+index 1f3a0b1..93517be 100644
+--- toolkit/mozapps/extensions/internal/OpenH264Provider.jsm
++++ toolkit/mozapps/extensions/internal/OpenH264Provider.jsm
+@@ -29,6 +29,7 @@
+ const OPENH264_PLUGIN_ID = "gmp-gmpopenh264";
+ const OPENH264_PREF_BRANCH = "media." + OPENH264_PLUGIN_ID + ".";
+ const OPENH264_PREF_ENABLED = "enabled";
++const OPENH264_PREF_PATH = "path";
+ const OPENH264_PREF_VERSION = "version";
+ const OPENH264_PREF_LASTUPDATE = "lastUpdate";
+ const OPENH264_PREF_AUTOUPDATE = "autoupdate";
+@@ -93,7 +94,12 @@
+
+ get description() { return pluginsBundle.GetStringFromName("openH264_description"); },
+
+- get version() { return prefs.get(OPENH264_PREF_VERSION, ""); },
++ get version() {
++ if (this.isInstalled) {
++ return prefs.get(OPENH264_PREF_VERSION, "");
++ }
++ return "";
++ },
+
+ get isActive() { return !this.userDisabled; },
+ get appDisabled() { return false; },
+@@ -217,24 +223,17 @@
+
+ get pluginMimeTypes() { return []; },
+ get pluginLibraries() {
+- if (this.isInstalled) {
+- let path = this.version;
+- return [path];
+- }
+- return [];
++ let path = prefs.get(OPENH264_PREF_PATH, null);
++ return path && path.length ? [OS.Path.basename(path)] : [];
+ },
+ get pluginFullpath() {
+- if (this.isInstalled) {
+- let path = OS.Path.join(OS.Constants.Path.profileDir,
+- OPENH264_PLUGIN_ID,
+- this.version);
+- return [path];
+- }
+- return [];
++ let path = prefs.get(OPENH264_PREF_PATH, null);
++ return path && path.length ? [path] : [];
+ },
+
+ get isInstalled() {
+- return this.version.length > 0;
++ let path = prefs.get(OPENH264_PREF_PATH, "");
++ return path.length > 0;
+ },
+ };
+
+@@ -245,19 +244,14 @@
+ "OpenH264Provider" + "::");
+ OpenH264Wrapper._log = Log.repository.getLoggerWithMessagePrefix("Toolkit.OpenH264Provider",
+ "OpenH264Wrapper" + "::");
+- this.gmpPath = null;
+- if (OpenH264Wrapper.isInstalled) {
+- this.gmpPath = OS.Path.join(OS.Constants.Path.profileDir,
+- OPENH264_PLUGIN_ID,
+- prefs.get(OPENH264_PREF_VERSION, null));
+- }
++ this.gmpPath = prefs.get(OPENH264_PREF_PATH, null);
+ let enabled = prefs.get(OPENH264_PREF_ENABLED, true);
+ this._log.trace("startup() - enabled=" + enabled + ", gmpPath="+this.gmpPath);
+
+
+ Services.obs.addObserver(this, AddonManager.OPTIONS_NOTIFICATION_DISPLAYED, false);
+ prefs.observe(OPENH264_PREF_ENABLED, this.onPrefEnabledChanged, this);
+- prefs.observe(OPENH264_PREF_VERSION, this.onPrefVersionChanged, this);
++ prefs.observe(OPENH264_PREF_PATH, this.onPrefPathChanged, this);
+ prefs.observe(OPENH264_PREF_LOGGING, configureLogging);
+
+ if (this.gmpPath && enabled) {
+@@ -270,7 +264,7 @@
+ this._log.trace("shutdown()");
+ Services.obs.removeObserver(this, AddonManager.OPTIONS_NOTIFICATION_DISPLAYED);
+ prefs.ignore(OPENH264_PREF_ENABLED, this.onPrefEnabledChanged, this);
+- prefs.ignore(OPENH264_PREF_VERSION, this.onPrefVersionChanged, this);
++ prefs.ignore(OPENH264_PREF_PATH, this.onPrefPathChanged, this);
+ prefs.ignore(OPENH264_PREF_LOGGING, configureLogging);
+
+ return OpenH264Wrapper._updateTask;
+@@ -296,25 +290,20 @@
+ wrapper);
+ },
+
+- onPrefVersionChanged: function() {
++ onPrefPathChanged: function() {
+ let wrapper = OpenH264Wrapper;
+
+ AddonManagerPrivate.callAddonListeners("onUninstalling", wrapper, false);
+ if (this.gmpPath) {
+- this._log.info("onPrefVersionChanged() - unregistering gmp directory " + this.gmpPath);
++ this._log.info("onPrefPathChanged() - removing gmp directory " + this.gmpPath);
+ gmpService.removePluginDirectory(this.gmpPath);
+ }
+ AddonManagerPrivate.callAddonListeners("onUninstalled", wrapper);
+
+ AddonManagerPrivate.callInstallListeners("onExternalInstall", null, wrapper, null, false);
+- this.gmpPath = null;
+- if (OpenH264Wrapper.isInstalled) {
+- this.gmpPath = OS.Path.join(OS.Constants.Path.profileDir,
+- OPENH264_PLUGIN_ID,
+- prefs.get(OPENH264_PREF_VERSION, null));
+- }
++ this.gmpPath = prefs.get(OPENH264_PREF_PATH, null);
+ if (this.gmpPath && wrapper.isActive) {
+- this._log.info("onPrefVersionChanged() - registering gmp directory " + this.gmpPath);
++ this._log.info("onPrefPathChanged() - adding gmp directory " + this.gmpPath);
+ gmpService.addPluginDirectory(this.gmpPath);
+ }
+ AddonManagerPrivate.callAddonListeners("onInstalled", wrapper);
diff --git a/www/libxul/Makefile b/www/libxul/Makefile
index 3554824e7424..ed68631a9056 100644
--- a/www/libxul/Makefile
+++ b/www/libxul/Makefile
@@ -2,37 +2,38 @@
# $FreeBSD$
PORTNAME= libxul
-DISTVERSION= 24.8.1
+DISTVERSION= 31.2.0
CATEGORIES?= www devel
-MASTER_SITES= MOZILLA/firefox/releases/${DISTVERSION}esr/source \
- https://ftp.mozilla.org/pub/mozilla.org/firefox/candidates/${DISTVERSION}esr-candidates/build1/source/
+MASTER_SITES= MOZILLA/firefox/releases/${DISTVERSION}esr/source
DISTNAME= firefox-${DISTVERSION}esr.source
MAINTAINER?= gecko@FreeBSD.org
COMMENT?= Mozilla runtime package that can be used to bootstrap XUL+XPCOM apps
-BUILD_DEPENDS= nspr>=4.10.2:${PORTSDIR}/devel/nspr \
- nss>=3.15.4:${PORTSDIR}/security/nss \
- sqlite3>=3.7.17:${PORTSDIR}/databases/sqlite3 \
- ${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \
+BUILD_DEPENDS= nspr>=4.10.6:${PORTSDIR}/devel/nspr \
+ nss>=3.16.2:${PORTSDIR}/security/nss \
libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \
- cairo>=1.10.2_1,1:${PORTSDIR}/graphics/cairo \
- soundtouch>=1.7.0:${PORTSDIR}/audio/soundtouch \
- harfbuzz>=0.9.16:${PORTSDIR}/print/harfbuzz \
- graphite2>=1.2.3:${PORTSDIR}/graphics/graphite2 \
+ cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \
+ soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \
+ harfbuzz>=0.9.25:${PORTSDIR}/print/harfbuzz \
+ graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \
libvorbis>=1.3.4:${PORTSDIR}/audio/libvorbis \
opus>=1.1:${PORTSDIR}/audio/opus \
+ libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \
+ sqlite3>=3.8.4.2:${PORTSDIR}/databases/sqlite3 \
+ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \
v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \
autoconf-2.13:${PORTSDIR}/devel/autoconf213 \
zip:${PORTSDIR}/archivers/zip \
unzip:${PORTSDIR}/archivers/unzip
+
LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l
-WRKSRC= ${WRKDIR}/mozilla-esr24
+WRKSRC= ${WRKDIR}/mozilla-esr31
CONFLICTS= libxul-1.9.*
WANT_GNOME= yes
-USE_QT4= # empty
+USE_QT5= # empty
QT_NONSTANDARD= yes
WANT_PERL= yes
ALL_TARGET= default
@@ -52,10 +53,11 @@ OBJDIR_BUILD= # in-tree build broken after bug 789837
MOZILLA_EXEC_NAME=xulrunner
USE_MOZILLA= # empty
MOZILLA_PLIST_DIRS= bin include lib share/idl libdata
-PLIST_DIRSTRY= share/idl
MOZ_PKGCONFIG_FILES= libxul-embedding libxul mozilla-js \
mozilla-plugin
+BROKEN= build error on js/xpconnect/src/libxpconnect_s.a.desc
+
.include "${.CURDIR}/../../www/firefox/Makefile.options"
.include <bsd.port.pre.mk>
@@ -63,10 +65,31 @@ MOZ_PKGCONFIG_FILES= libxul-embedding libxul mozilla-js \
MOZ_PKGCONFIG_FILES+= mozilla-nss
.endif
+# avoid clang 3.2/3.3 crash in js/src/jsgc.cpp on refillFreeList<(js::AllowGC)1>
+# To be removed when 9.2R goes EOL. http://llvm.org/PR15840
+.if ${ARCH} == i386 && ${CHOSEN_COMPILER_TYPE} == clang && ${COMPILER_VERSION:M3[23]}
+. if ${PORT_OPTIONS:MOPTIMIZED_CFLAGS}
+BROKEN= Cannot build with OPTIMIZED_CFLAGS option due to \
+ a ${CHOSEN_COMPILER_TYPE} bug: unset the option or \
+ use FAVORITE_COMPILER=gcc in Makefile.local/make.conf
+# apply workaround only for -O2 or greater
+. elif ${CXXFLAGS:M-O*} && ! ${CXXFLAGS:M-O[01]}
+. if ${MACHINE_CPU:Msse2}
+CXXFLAGS+= -msse2
+. else
+CXXFLAGS+= -O1
+. endif
+. endif
+.endif
+
.if ${PORT_OPTIONS:MALSA}
RUN_DEPENDS+= alsa-lib>=1.0.27.2_1:${PORTSDIR}/audio/alsa-lib
.endif
+.if ${PORT_OPTIONS:MGSTREAMER}
+RUN_DEPENDS+= gstreamer1-libav>=1.2.4_1:${PORTSDIR}/multimedia/gstreamer1-libav
+.endif
+
post-patch:
@${REINPLACE_CMD} -e '/MOZPNG/s/=[0-9]*/=10511/' \
${WRKSRC}/configure.in
diff --git a/www/libxul/distinfo b/www/libxul/distinfo
index 59dcae9068c6..819393e94163 100644
--- a/www/libxul/distinfo
+++ b/www/libxul/distinfo
@@ -1,2 +1,2 @@
-SHA256 (firefox-24.8.1esr.source.tar.bz2) = 53db5f6d52e4669bf2650b1dd9d480b31eb1cc42c107ed741a65fb5bcacc8932
-SIZE (firefox-24.8.1esr.source.tar.bz2) = 119811868
+SHA256 (firefox-31.2.0esr.source.tar.bz2) = 02de399cbf467ea536042008d1e0cd4ac6ffdc9b469d3189384f02ec0590d378
+SIZE (firefox-31.2.0esr.source.tar.bz2) = 147362334
diff --git a/www/libxul/files/patch-bug1013675 b/www/libxul/files/patch-bug1013675
index cb1b4d0f5ea7..eac435acf3d0 100644
--- a/www/libxul/files/patch-bug1013675
+++ b/www/libxul/files/patch-bug1013675
@@ -2,7 +2,7 @@ diff --git xpcom/base/nsDebugImpl.cpp xpcom/base/nsDebugImpl.cpp
index 13a286f..293bd73 100644
--- xpcom/base/nsDebugImpl.cpp
+++ xpcom/base/nsDebugImpl.cpp
-@@ -45,13 +45,44 @@
+@@ -45,12 +45,43 @@
#endif
#endif
@@ -10,7 +10,6 @@ index 13a286f..293bd73 100644
+#if defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
+ || defined(__NetBSD__) || defined(__OpenBSD__)
#include <stdbool.h>
- #include <sys/types.h>
#include <unistd.h>
+#include <sys/param.h>
#include <sys/sysctl.h>
diff --git a/www/libxul/files/patch-bug1013882 b/www/libxul/files/patch-bug1013882
new file mode 100644
index 000000000000..86dc379fe50f
--- /dev/null
+++ b/www/libxul/files/patch-bug1013882
@@ -0,0 +1,69 @@
+diff --git b2g/installer/Makefile.in b2g/installer/Makefile.in
+index 754312a..c69904c 100644
+--- b2g/installer/Makefile.in
++++ b2g/installer/Makefile.in
+@@ -63,6 +63,10 @@ ifneq (,$(filter rtsp,$(NECKO_PROTOCOLS)))
+ DEFINES += -DMOZ_RTSP
+ endif
+
++ifdef MOZ_DEBUG
++DEFINES += -DMOZ_DEBUG=1
++endif
++
+ ifdef GKMEDIAS_SHARED_LIBRARY
+ DEFINES += -DGKMEDIAS_SHARED_LIBRARY
+ endif
+diff --git b2g/installer/package-manifest.in b2g/installer/package-manifest.in
+index 17d433c..0416187 100644
+--- b2g/installer/package-manifest.in
++++ b2g/installer/package-manifest.in
+@@ -576,7 +576,7 @@
+ @BINPATH@/components/MozKeyboard.js
+ @BINPATH@/components/InputMethod.manifest
+
+-#ifdef MOZ_DEBUG
++#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG)
+ @BINPATH@/components/TestInterfaceJS.js
+ @BINPATH@/components/TestInterfaceJS.manifest
+ #endif
+diff --git browser/installer/package-manifest.in browser/installer/package-manifest.in
+index b509fd4..195345c 100644
+--- browser/installer/package-manifest.in
++++ browser/installer/package-manifest.in
+@@ -583,7 +583,7 @@
+ @BINPATH@/components/MozKeyboard.js
+ @BINPATH@/components/InputMethod.manifest
+
+-#ifdef MOZ_DEBUG
++#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG)
+ @BINPATH@/components/TestInterfaceJS.js
+ @BINPATH@/components/TestInterfaceJS.manifest
+ #endif
+diff --git mobile/android/installer/Makefile.in mobile/android/installer/Makefile.in
+index 96dceab..3528ad6 100644
+--- mobile/android/installer/Makefile.in
++++ mobile/android/installer/Makefile.in
+@@ -41,6 +41,10 @@ BINPATH = bin
+ endif
+ DEFINES += -DBINPATH=$(BINPATH)
+
++ifdef MOZ_DEBUG
++DEFINES += -DMOZ_DEBUG=1
++endif
++
+ ifdef ENABLE_MARIONETTE
+ DEFINES += -DENABLE_MARIONETTE=1
+ endif
+diff --git mobile/android/installer/package-manifest.in mobile/android/installer/package-manifest.in
+index 994580b..cf142df 100644
+--- mobile/android/installer/package-manifest.in
++++ mobile/android/installer/package-manifest.in
+@@ -440,7 +440,7 @@
+ @BINPATH@/components/dom_webspeechsynth.xpt
+ #endif
+
+-#ifdef MOZ_DEBUG
++#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG)
+ @BINPATH@/components/TestInterfaceJS.js
+ @BINPATH@/components/TestInterfaceJS.manifest
+ #endif
diff --git a/www/libxul/files/patch-bug1015547 b/www/libxul/files/patch-bug1015547
index df963e0de88c..ecb488c36e7f 100644
--- a/www/libxul/files/patch-bug1015547
+++ b/www/libxul/files/patch-bug1015547
@@ -2,11 +2,12 @@ diff --git configure.in configure.in
index 7bed45f..053de17 100644
--- configure.in
+++ configure.in
-@@ -3166,6 +3166,7 @@ AC_CHECK_FUNCS(random strerror lchown fc
- AC_CHECK_FUNCS(statvfs64 statvfs statfs64 statfs)
- AC_CHECK_FUNCS(flockfile getpagesize)
- AC_CHECK_FUNCS(localtime_r strtok_r)
-+AC_CHECK_FUNCS(arc4random arc4random_buf)
+@@ -2950,7 +2950,7 @@ dnl Checks for library functions.
+ dnl ========================================================
+ AC_PROG_GCC_TRADITIONAL
+ AC_FUNC_MEMCMP
+-AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r)
++AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r arc4random arc4random_buf)
dnl check for clock_gettime(), the CLOCK_MONOTONIC clock
AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC),
diff --git a/www/libxul/files/patch-bug1021761 b/www/libxul/files/patch-bug1021761
new file mode 100644
index 000000000000..bd0a689f12c7
--- /dev/null
+++ b/www/libxul/files/patch-bug1021761
@@ -0,0 +1,1092 @@
+diff --git configure.in configure.in
+index 48e60c0..ec08417 100644
+--- configure.in
++++ configure.in
+@@ -5438,6 +5438,60 @@ fi
+ AC_SUBST(MOZ_WEBM_ENCODER)
+
+ dnl ==================================
++dnl = Check OSS availability
++dnl ==================================
++
++dnl If using Linux, Solaris or BSDs, ensure that OSS is available
++case "$OS_TARGET" in
++Linux|SunOS|DragonFly|FreeBSD|NetBSD|GNU/kFreeBSD)
++ MOZ_OSS=1
++ ;;
++esac
++
++MOZ_ARG_DISABLE_BOOL(oss,
++[ --disable-oss Disable OpenSoundSystem support],
++ MOZ_OSS=,
++ MOZ_OSS=1)
++
++_SAVE_CFLAGS=$CFLAGS
++_SAVE_LIBS=$LIBS
++if test -n "$MOZ_OSS"; then
++ dnl Prefer 4Front implementation
++ AC_MSG_CHECKING([MOZ_OSS_CFLAGS])
++ if test -z "$MOZ_OSS_CFLAGS"; then
++ for oss_conf in /etc/oss.conf /usr/local/etc/oss.conf; do
++ if test -e "$oss_conf"; then
++ . "$oss_conf"
++ fi
++ done
++ if test -d "$OSSLIBDIR"; then
++ MOZ_OSS_CFLAGS="-I$OSSLIBDIR/include"
++ fi
++ fi
++ AC_MSG_RESULT([$MOZ_OSS_CFLAGS])
++
++ CFLAGS="$CFLAGS $MOZ_OSS_CFLAGS"
++ MOZ_CHECK_HEADERS(sys/soundcard.h linux/soundcard.h soundcard.h)
++
++ if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \
++ "$ac_cv_header_linux_soundcard_h" != "yes" -a \
++ "$ac_cv_header_soundcard_h" != "yes"; then
++ AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --disable-ogg --disable-wave --disable-webm.])
++ fi
++
++ dnl Assume NetBSD implementation over SunAudio
++ AC_CHECK_LIB(ossaudio, _oss_ioctl,
++ [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound")
++ MOZ_OSS_LIBS="-lossaudio"])
++fi
++CFLAGS=$_SAVE_CFLAGS
++LIBS=$_SAVE_LIBS
++
++AC_SUBST(MOZ_OSS)
++AC_SUBST_LIST(MOZ_OSS_CFLAGS)
++AC_SUBST_LIST(MOZ_OSS_LIBS)
++
++dnl ==================================
+ dnl = Check alsa availability on Linux
+ dnl ==================================
+
+@@ -5451,12 +5505,23 @@ MOZ_ARG_ENABLE_BOOL(alsa,
+ MOZ_ALSA=1,
+ MOZ_ALSA=)
+
++MOZ_ARG_DISABLE_BOOL(alsa-dlopen,
++[ --disable-alsa-dlopen Disable runtime linking of libasound.so],
++ DISABLE_LIBASOUND_DLOPEN=1,
++ DISABLE_LIBASOUND_DLOPEN=)
++
+ if test -n "$MOZ_ALSA"; then
+ PKG_CHECK_MODULES(MOZ_ALSA, alsa, ,
+ [echo "$MOZ_ALSA_PKG_ERRORS"
+ AC_MSG_ERROR([Need alsa for Ogg, Wave or WebM decoding on Linux. Disable with --disable-ogg --disable-wave --disable-webm. (On Ubuntu, you might try installing the package libasound2-dev.)])])
+ fi
+
++if test -n "$DISABLE_LIBASOUND_DLOPEN"; then
++ AC_DEFINE(DISABLE_LIBASOUND_DLOPEN)
++else
++ MOZ_ALSA_LIBS=
++fi
++
+ AC_SUBST(MOZ_ALSA)
+
+ dnl ========================================================
+diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS
+index b441e8a..950d9e5 100644
+--- media/libcubeb/AUTHORS
++++ media/libcubeb/AUTHORS
+@@ -4,3 +4,4 @@ Michael Wu <mwu@mozilla.com>
+ Paul Adenot <paul@paul.cx>
+ David Richards <drichards@mozilla.com>
+ Sebastien Alaiwan <sebastien.alaiwan@gmail.com>
++Evgeniy Vodolazskiy <waterlaz@gmail.com>
+diff --git media/libcubeb/src/cubeb.c media/libcubeb/src/cubeb.c
+index 9c3adcc..45d765b 100644
+--- media/libcubeb/src/cubeb.c
++++ media/libcubeb/src/cubeb.c
+@@ -54,6 +54,9 @@ int opensl_init(cubeb ** context, char const * context_name);
+ #if defined(USE_AUDIOTRACK)
+ int audiotrack_init(cubeb ** context, char const * context_name);
+ #endif
++#if defined(USE_OSS)
++int oss_init(cubeb ** context, char const * context_name);
++#endif
+
+ int
+ validate_stream_params(cubeb_stream_params stream_params)
+@@ -120,6 +123,9 @@ cubeb_init(cubeb ** context, char const * context_name)
+ #if defined(USE_AUDIOTRACK)
+ audiotrack_init,
+ #endif
++#if defined(USE_OSS)
++ oss_init,
++#endif
+ };
+ int i;
+
+diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c
+index a962553..1f780f4 100644
+--- media/libcubeb/src/cubeb_alsa.c
++++ media/libcubeb/src/cubeb_alsa.c
+@@ -11,6 +11,7 @@
+ #include <sys/time.h>
+ #include <assert.h>
+ #include <limits.h>
++#include <dlfcn.h>
+ #include <poll.h>
+ #include <unistd.h>
+ #include <alsa/asoundlib.h>
+@@ -24,6 +25,50 @@
+
+ #define ALSA_PA_PLUGIN "ALSA <-> PulseAudio PCM I/O Plugin"
+
++#ifdef DISABLE_LIBASOUND_DLOPEN
++#define WRAP(x) x
++#else
++#define WRAP(x) cubeb_##x
++#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x
++MAKE_TYPEDEF(snd_config);
++MAKE_TYPEDEF(snd_config_add);
++MAKE_TYPEDEF(snd_config_copy);
++MAKE_TYPEDEF(snd_config_delete);
++MAKE_TYPEDEF(snd_config_get_id);
++MAKE_TYPEDEF(snd_config_get_string);
++MAKE_TYPEDEF(snd_config_imake_integer);
++MAKE_TYPEDEF(snd_config_search);
++MAKE_TYPEDEF(snd_config_search_definition);
++MAKE_TYPEDEF(snd_lib_error_set_handler);
++MAKE_TYPEDEF(snd_pcm_avail_update);
++MAKE_TYPEDEF(snd_pcm_close);
++MAKE_TYPEDEF(snd_pcm_delay);
++MAKE_TYPEDEF(snd_pcm_drain);
++MAKE_TYPEDEF(snd_pcm_frames_to_bytes);
++MAKE_TYPEDEF(snd_pcm_get_params);
++/* snd_pcm_hw_params_alloca is actually a macro */
++/* MAKE_TYPEDEF(snd_pcm_hw_params_alloca); */
++MAKE_TYPEDEF(snd_pcm_hw_params_sizeof);
++#define snd_pcm_hw_params_sizeof cubeb_snd_pcm_hw_params_sizeof
++MAKE_TYPEDEF(snd_pcm_hw_params_any);
++MAKE_TYPEDEF(snd_pcm_hw_params_get_channels_max);
++MAKE_TYPEDEF(snd_pcm_hw_params_get_rate);
++MAKE_TYPEDEF(snd_pcm_hw_params_set_rate_near);
++MAKE_TYPEDEF(snd_pcm_nonblock);
++MAKE_TYPEDEF(snd_pcm_open);
++MAKE_TYPEDEF(snd_pcm_open_lconf);
++MAKE_TYPEDEF(snd_pcm_pause);
++MAKE_TYPEDEF(snd_pcm_poll_descriptors);
++MAKE_TYPEDEF(snd_pcm_poll_descriptors_count);
++MAKE_TYPEDEF(snd_pcm_poll_descriptors_revents);
++MAKE_TYPEDEF(snd_pcm_recover);
++MAKE_TYPEDEF(snd_pcm_set_params);
++MAKE_TYPEDEF(snd_pcm_state);
++MAKE_TYPEDEF(snd_pcm_writei);
++
++#undef MAKE_TYPEDEF
++#endif
++
+ /* ALSA is not thread-safe. snd_pcm_t instances are individually protected
+ by the owning cubeb_stream's mutex. snd_pcm_t creation and destruction
+ is not thread-safe until ALSA 1.0.24 (see alsa-lib.git commit 91c9c8f1),
+@@ -64,6 +109,8 @@ struct cubeb {
+ workaround is not required. */
+ snd_config_t * local_config;
+ int is_pa;
++
++ void * libasound;
+ };
+
+ enum stream_state {
+@@ -262,7 +309,7 @@ alsa_refill_stream(cubeb_stream * stm)
+
+ pthread_mutex_lock(&stm->mutex);
+
+- r = snd_pcm_poll_descriptors_revents(stm->pcm, stm->fds, stm->nfds, &revents);
++ r = WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents);
+ if (r < 0 || revents != POLLOUT) {
+ /* This should be a stream error; it makes no sense for poll(2) to wake
+ for this stream and then have the stream report that it's not ready.
+@@ -271,10 +318,10 @@ alsa_refill_stream(cubeb_stream * stm)
+ return RUNNING;
+ }
+
+- avail = snd_pcm_avail_update(stm->pcm);
++ avail = WRAP(snd_pcm_avail_update)(stm->pcm);
+ if (avail == -EPIPE) {
+- snd_pcm_recover(stm->pcm, avail, 1);
+- avail = snd_pcm_avail_update(stm->pcm);
++ WRAP(snd_pcm_recover)(stm->pcm, avail, 1);
++ avail = WRAP(snd_pcm_avail_update)(stm->pcm);
+ }
+
+ /* Failed to recover from an xrun, this stream must be broken. */
+@@ -293,8 +340,8 @@ alsa_refill_stream(cubeb_stream * stm)
+ available to write. If avail is still zero here, the stream must be in
+ a funky state, so recover and try again. */
+ if (avail == 0) {
+- snd_pcm_recover(stm->pcm, -EPIPE, 1);
+- avail = snd_pcm_avail_update(stm->pcm);
++ WRAP(snd_pcm_recover)(stm->pcm, -EPIPE, 1);
++ avail = WRAP(snd_pcm_avail_update)(stm->pcm);
+ if (avail <= 0) {
+ pthread_mutex_unlock(&stm->mutex);
+ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR);
+@@ -302,7 +349,7 @@ alsa_refill_stream(cubeb_stream * stm)
+ }
+ }
+
+- p = calloc(1, snd_pcm_frames_to_bytes(stm->pcm, avail));
++ p = calloc(1, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, avail));
+ assert(p);
+
+ pthread_mutex_unlock(&stm->mutex);
+@@ -313,10 +360,10 @@ alsa_refill_stream(cubeb_stream * stm)
+ return ERROR;
+ }
+ if (got > 0) {
+- snd_pcm_sframes_t wrote = snd_pcm_writei(stm->pcm, p, got);
++ snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
+ if (wrote == -EPIPE) {
+- snd_pcm_recover(stm->pcm, wrote, 1);
+- wrote = snd_pcm_writei(stm->pcm, p, got);
++ WRAP(snd_pcm_recover)(stm->pcm, wrote, 1);
++ wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
+ }
+ assert(wrote >= 0 && wrote == got);
+ stm->write_position += wrote;
+@@ -342,7 +389,7 @@ alsa_refill_stream(cubeb_stream * stm)
+
+ /* Fill the remaining buffer with silence to guarantee one full period
+ has been written. */
+- snd_pcm_writei(stm->pcm, (char *) p + got, avail - got);
++ WRAP(snd_pcm_writei)(stm->pcm, (char *) p + got, avail - got);
+
+ set_timeout(&stm->drain_timeout, buffer_time * 1000);
+
+@@ -453,26 +500,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm)
+
+ slave_def = NULL;
+
+- r = snd_config_search(root_pcm, "slave", &slave_pcm);
++ r = WRAP(snd_config_search)(root_pcm, "slave", &slave_pcm);
+ if (r < 0) {
+ return NULL;
+ }
+
+- r = snd_config_get_string(slave_pcm, &string);
++ r = WRAP(snd_config_get_string)(slave_pcm, &string);
+ if (r >= 0) {
+- r = snd_config_search_definition(lconf, "pcm_slave", string, &slave_def);
++ r = WRAP(snd_config_search_definition)(lconf, "pcm_slave", string, &slave_def);
+ if (r < 0) {
+ return NULL;
+ }
+ }
+
+ do {
+- r = snd_config_search(slave_def ? slave_def : slave_pcm, "pcm", &pcm);
++ r = WRAP(snd_config_search)(slave_def ? slave_def : slave_pcm, "pcm", &pcm);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_get_string(slave_def ? slave_def : slave_pcm, &string);
++ r = WRAP(snd_config_get_string)(slave_def ? slave_def : slave_pcm, &string);
+ if (r < 0) {
+ break;
+ }
+@@ -481,7 +528,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm)
+ if (r < 0 || r > (int) sizeof(node_name)) {
+ break;
+ }
+- r = snd_config_search(lconf, node_name, &pcm);
++ r = WRAP(snd_config_search)(lconf, node_name, &pcm);
+ if (r < 0) {
+ break;
+ }
+@@ -490,7 +537,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm)
+ } while (0);
+
+ if (slave_def) {
+- snd_config_delete(slave_def);
++ WRAP(snd_config_delete)(slave_def);
+ }
+
+ return NULL;
+@@ -513,22 +560,22 @@ init_local_config_with_workaround(char const * pcm_name)
+
+ lconf = NULL;
+
+- if (snd_config == NULL) {
++ if (*WRAP(snd_config) == NULL) {
+ return NULL;
+ }
+
+- r = snd_config_copy(&lconf, snd_config);
++ r = WRAP(snd_config_copy)(&lconf, *WRAP(snd_config));
+ if (r < 0) {
+ return NULL;
+ }
+
+ do {
+- r = snd_config_search_definition(lconf, "pcm", pcm_name, &pcm_node);
++ r = WRAP(snd_config_search_definition)(lconf, "pcm", pcm_name, &pcm_node);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_get_id(pcm_node, &string);
++ r = WRAP(snd_config_get_id)(pcm_node, &string);
+ if (r < 0) {
+ break;
+ }
+@@ -537,7 +584,7 @@ init_local_config_with_workaround(char const * pcm_name)
+ if (r < 0 || r > (int) sizeof(node_name)) {
+ break;
+ }
+- r = snd_config_search(lconf, node_name, &pcm_node);
++ r = WRAP(snd_config_search)(lconf, node_name, &pcm_node);
+ if (r < 0) {
+ break;
+ }
+@@ -548,12 +595,12 @@ init_local_config_with_workaround(char const * pcm_name)
+ }
+
+ /* Fetch the PCM node's type, and bail out if it's not the PulseAudio plugin. */
+- r = snd_config_search(pcm_node, "type", &node);
++ r = WRAP(snd_config_search)(pcm_node, "type", &node);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_get_string(node, &string);
++ r = WRAP(snd_config_get_string)(node, &string);
+ if (r < 0) {
+ break;
+ }
+@@ -564,18 +611,18 @@ init_local_config_with_workaround(char const * pcm_name)
+
+ /* Don't clobber an explicit existing handle_underrun value, set it only
+ if it doesn't already exist. */
+- r = snd_config_search(pcm_node, "handle_underrun", &node);
++ r = WRAP(snd_config_search)(pcm_node, "handle_underrun", &node);
+ if (r != -ENOENT) {
+ break;
+ }
+
+ /* Disable pcm_pulse's asynchronous underrun handling. */
+- r = snd_config_imake_integer(&node, "handle_underrun", 0);
++ r = WRAP(snd_config_imake_integer)(&node, "handle_underrun", 0);
+ if (r < 0) {
+ break;
+ }
+
+- r = snd_config_add(pcm_node, node);
++ r = WRAP(snd_config_add)(pcm_node, node);
+ if (r < 0) {
+ break;
+ }
+@@ -583,7 +630,7 @@ init_local_config_with_workaround(char const * pcm_name)
+ return lconf;
+ } while (0);
+
+- snd_config_delete(lconf);
++ WRAP(snd_config_delete)(lconf);
+
+ return NULL;
+ }
+@@ -595,9 +642,9 @@ alsa_locked_pcm_open(snd_pcm_t ** pcm, snd_pcm_stream_t stream, snd_config_t * l
+
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+ if (local_config) {
+- r = snd_pcm_open_lconf(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config);
++ r = WRAP(snd_pcm_open_lconf)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config);
+ } else {
+- r = snd_pcm_open(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK);
++ r = WRAP(snd_pcm_open)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK);
+ }
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+
+@@ -610,7 +657,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm)
+ int r;
+
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+- r = snd_pcm_close(pcm);
++ r = WRAP(snd_pcm_close)(pcm);
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+
+ return r;
+@@ -667,12 +714,65 @@ alsa_init(cubeb ** context, char const * context_name)
+ pthread_attr_t attr;
+ snd_pcm_t * dummy;
+
++ void * libasound = NULL;
++
++#ifndef DISABLE_LIBASOUND_DLOPEN
++ libasound = dlopen("libasound.so", RTLD_LAZY);
++ if (!libasound) {
++ return CUBEB_ERROR;
++ }
++
++#define LOAD(x) do { \
++ cubeb_##x = dlsym(libasound, #x); \
++ if (!cubeb_##x) { \
++ dlclose(libasound); \
++ return CUBEB_ERROR; \
++ } \
++ } while(0)
++
++ LOAD(snd_config);
++ LOAD(snd_config_add);
++ LOAD(snd_config_copy);
++ LOAD(snd_config_delete);
++ LOAD(snd_config_get_id);
++ LOAD(snd_config_get_string);
++ LOAD(snd_config_imake_integer);
++ LOAD(snd_config_search);
++ LOAD(snd_config_search_definition);
++ LOAD(snd_lib_error_set_handler);
++ LOAD(snd_pcm_avail_update);
++ LOAD(snd_pcm_close);
++ LOAD(snd_pcm_delay);
++ LOAD(snd_pcm_drain);
++ LOAD(snd_pcm_frames_to_bytes);
++ LOAD(snd_pcm_get_params);
++ /* snd_pcm_hw_params_alloca is actually a macro */
++ /* LOAD(snd_pcm_hw_params_alloca); */
++ LOAD(snd_pcm_hw_params_sizeof);
++ LOAD(snd_pcm_hw_params_any);
++ LOAD(snd_pcm_hw_params_get_channels_max);
++ LOAD(snd_pcm_hw_params_get_rate);
++ LOAD(snd_pcm_hw_params_set_rate_near);
++ LOAD(snd_pcm_nonblock);
++ LOAD(snd_pcm_open);
++ LOAD(snd_pcm_open_lconf);
++ LOAD(snd_pcm_pause);
++ LOAD(snd_pcm_poll_descriptors);
++ LOAD(snd_pcm_poll_descriptors_count);
++ LOAD(snd_pcm_poll_descriptors_revents);
++ LOAD(snd_pcm_recover);
++ LOAD(snd_pcm_set_params);
++ LOAD(snd_pcm_state);
++ LOAD(snd_pcm_writei);
++
++#undef LOAD
++#endif
+ assert(context);
+ *context = NULL;
+
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+ if (!cubeb_alsa_error_handler_set) {
+- snd_lib_error_set_handler(silent_error_handler);
++ WRAP(snd_lib_error_set_handler)(silent_error_handler);
+ cubeb_alsa_error_handler_set = 1;
+ }
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+@@ -680,6 +780,8 @@ alsa_init(cubeb ** context, char const * context_name)
+ ctx = calloc(1, sizeof(*ctx));
+ assert(ctx);
+
++ ctx->libasound = libasound;
++
+ ctx->ops = &alsa_ops;
+
+ r = pthread_mutex_init(&ctx->mutex, NULL);
+@@ -729,7 +831,7 @@ alsa_init(cubeb ** context, char const * context_name)
+ config fails with EINVAL, the PA PCM is too old for this workaround. */
+ if (r == -EINVAL) {
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+- snd_config_delete(ctx->local_config);
++ WRAP(snd_config_delete)(ctx->local_config);
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+ ctx->local_config = NULL;
+ } else if (r >= 0) {
+@@ -768,9 +870,13 @@ alsa_destroy(cubeb * ctx)
+ pthread_mutex_destroy(&ctx->mutex);
+ free(ctx->fds);
+
++ if (ctx->libasound) {
++ dlclose(ctx->libasound);
++ }
++
+ if (ctx->local_config) {
+ pthread_mutex_lock(&cubeb_alsa_mutex);
+- snd_config_delete(ctx->local_config);
++ WRAP(snd_config_delete)(ctx->local_config);
+ pthread_mutex_unlock(&cubeb_alsa_mutex);
+ }
+
+@@ -838,7 +944,7 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name,
+ return CUBEB_ERROR;
+ }
+
+- r = snd_pcm_nonblock(stm->pcm, 1);
++ r = WRAP(snd_pcm_nonblock)(stm->pcm, 1);
+ assert(r == 0);
+
+ /* Ugly hack: the PA ALSA plugin allows buffer configurations that can't
+@@ -848,23 +954,23 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name,
+ latency = latency < 500 ? 500 : latency;
+ }
+
+- r = snd_pcm_set_params(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED,
+- stm->params.channels, stm->params.rate, 1,
+- latency * 1000);
++ r = WRAP(snd_pcm_set_params)(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED,
++ stm->params.channels, stm->params.rate, 1,
++ latency * 1000);
+ if (r < 0) {
+ alsa_stream_destroy(stm);
+ return CUBEB_ERROR_INVALID_FORMAT;
+ }
+
+- r = snd_pcm_get_params(stm->pcm, &stm->buffer_size, &stm->period_size);
++ r = WRAP(snd_pcm_get_params)(stm->pcm, &stm->buffer_size, &stm->period_size);
+ assert(r == 0);
+
+- stm->nfds = snd_pcm_poll_descriptors_count(stm->pcm);
++ stm->nfds = WRAP(snd_pcm_poll_descriptors_count)(stm->pcm);
+ assert(stm->nfds > 0);
+
+ stm->saved_fds = calloc(stm->nfds, sizeof(struct pollfd));
+ assert(stm->saved_fds);
+- r = snd_pcm_poll_descriptors(stm->pcm, stm->saved_fds, stm->nfds);
++ r = WRAP(snd_pcm_poll_descriptors)(stm->pcm, stm->saved_fds, stm->nfds);
+ assert((nfds_t) r == stm->nfds);
+
+ r = pthread_cond_init(&stm->cond, NULL);
+@@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_any(stm->pcm, hw_params);
++ rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params);
+ if (rv < 0) {
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_get_channels_max(hw_params, max_channels);
++ rv = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels);
+ if (rv < 0) {
+ return CUBEB_ERROR;
+ }
+@@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) {
+
+ /* get a pcm, disabling resampling, so we get a rate the
+ * hardware/dmix/pulse/etc. supports. */
+- rv = snd_pcm_open(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
++ rv = WRAP(snd_pcm_open)(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
+ if (rv < 0) {
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_any(pcm, hw_params);
++ rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params);
+ if (rv < 0) {
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+ return CUBEB_ERROR;
+ }
+
+- rv = snd_pcm_hw_params_get_rate(hw_params, rate, &dir);
++ rv = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir);
+ if (rv >= 0) {
+ /* There is a default rate: use it. */
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+ return CUBEB_OK;
+ }
+
+ /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */
+ *rate = 44100;
+
+- rv = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL);
++ rv = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL);
+ if (rv < 0) {
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+ return CUBEB_ERROR;
+ }
+
+- snd_pcm_close(pcm);
++ WRAP(snd_pcm_close)(pcm);
+
+ return CUBEB_OK;
+ }
+@@ -1013,7 +1119,7 @@ alsa_stream_start(cubeb_stream * stm)
+ ctx = stm->context;
+
+ pthread_mutex_lock(&stm->mutex);
+- snd_pcm_pause(stm->pcm, 0);
++ WRAP(snd_pcm_pause)(stm->pcm, 0);
+ gettimeofday(&stm->last_activity, NULL);
+ pthread_mutex_unlock(&stm->mutex);
+
+@@ -1047,7 +1153,7 @@ alsa_stream_stop(cubeb_stream * stm)
+ pthread_mutex_unlock(&ctx->mutex);
+
+ pthread_mutex_lock(&stm->mutex);
+- snd_pcm_pause(stm->pcm, 1);
++ WRAP(snd_pcm_pause)(stm->pcm, 1);
+ pthread_mutex_unlock(&stm->mutex);
+
+ return CUBEB_OK;
+@@ -1063,8 +1169,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position)
+ pthread_mutex_lock(&stm->mutex);
+
+ delay = -1;
+- if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING ||
+- snd_pcm_delay(stm->pcm, &delay) != 0) {
++ if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING ||
++ WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) {
+ *position = stm->last_position;
+ pthread_mutex_unlock(&stm->mutex);
+ return CUBEB_OK;
+@@ -1089,7 +1195,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency)
+ snd_pcm_sframes_t delay;
+ /* This function returns the delay in frames until a frame written using
+ snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */
+- if (snd_pcm_delay(stm->pcm, &delay)) {
++ if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) {
+ return CUBEB_ERROR;
+ }
+
+diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c
+new file mode 100644
+index 0000000..5e38e27
+--- /dev/null
++++ media/libcubeb/src/cubeb_oss.c
+@@ -0,0 +1,399 @@
++/*
++ * Copyright © 2014 Mozilla Foundation
++ *
++ * This program is made available under an ISC-style license. See the
++ * accompanying file LICENSE for details.
++ */
++#if defined(HAVE_SYS_SOUNDCARD_H)
++#include <sys/soundcard.h>
++#elif defined(HAVE_LINUX_SOUNDCARD_H)
++#include <linux/soundcard.h>
++#else
++#include <soundcard.h>
++#endif
++#include <unistd.h>
++#include <stdlib.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <sys/ioctl.h>
++#include <errno.h>
++#include <pthread.h>
++#include <stdio.h>
++
++#include "cubeb/cubeb.h"
++#include "cubeb-internal.h"
++
++#ifndef CUBEB_OSS_DEFAULT_OUTPUT
++#define CUBEB_OSS_DEFAULT_OUTPUT "/dev/dsp"
++#endif
++
++#define OSS_BUFFER_SIZE 1024
++
++struct cubeb {
++ struct cubeb_ops const * ops;
++};
++
++struct cubeb_stream {
++ cubeb * context;
++
++ cubeb_data_callback data_callback;
++ cubeb_state_callback state_callback;
++ void * user_ptr;
++ float volume;
++ float panning;
++
++ pthread_mutex_t state_mutex;
++ pthread_cond_t state_cond;
++
++ int running;
++ int stopped;
++ int floating;
++
++ /* These two vars are needed to support old versions of OSS */
++ unsigned int position_bytes;
++ unsigned int last_position_bytes;
++
++ uint64_t written_frags; /* The number of fragments written to /dev/dsp */
++ uint64_t missed_frags; /* fragments output with stopped stream */
++
++ cubeb_stream_params params;
++ int fd;
++ pthread_t th;
++};
++
++static struct cubeb_ops const oss_ops;
++
++int oss_init(cubeb ** context, char const * context_name)
++{
++ cubeb* ctx = (cubeb*)malloc(sizeof(cubeb));
++ ctx->ops = &oss_ops;
++ *context = ctx;
++ return CUBEB_OK;
++}
++
++static void oss_destroy(cubeb *ctx)
++{
++ free(ctx);
++}
++
++static char const * oss_get_backend_id(cubeb * context)
++{
++ static char oss_name[] = "oss";
++ return oss_name;
++}
++
++static int oss_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
++{
++ *max_channels = 2; /* Let's support only stereo for now */
++ return CUBEB_OK;
++}
++
++static int oss_get_min_latency(cubeb * context, cubeb_stream_params params,
++ uint32_t * latency_ms)
++{
++ /* 40ms is a big enough number to work ok */
++ *latency_ms = 40;
++ return CUBEB_OK;
++}
++
++static int oss_get_preferred_sample_rate(cubeb *context, uint32_t * rate)
++{
++ /* 48000 seems a prefered choice for most audio devices
++ * and a good choice for OSS */
++ *rate = 48000;
++ return CUBEB_OK;
++}
++
++static void run_state_callback(cubeb_stream *stream, cubeb_state state)
++{
++ if (stream->state_callback) {
++ stream->state_callback(stream, stream->user_ptr, state);
++ }
++}
++
++static long run_data_callback(cubeb_stream *stream, void *buffer, long nframes)
++{
++ long got = 0;
++ pthread_mutex_lock(&stream->state_mutex);
++ if (stream->data_callback && stream->running && !stream->stopped) {
++ pthread_mutex_unlock(&stream->state_mutex);
++ got = stream->data_callback(stream, stream->user_ptr, buffer, nframes);
++ } else {
++ pthread_mutex_unlock(&stream->state_mutex);
++ }
++ return got;
++}
++
++static void apply_volume(int16_t* buffer, unsigned int n,
++ float volume, float panning)
++{
++ float left = volume;
++ float right = volume;
++ unsigned int i;
++ int pan[2];
++ if (panning<0) {
++ right *= (1+panning);
++ } else {
++ left *= (1-panning);
++ }
++ pan[0] = 128.0*left;
++ pan[1] = 128.0*right;
++ for(i=0; i<n; i++){
++ buffer[i] = ((int)buffer[i])*pan[i%2]/128;
++ }
++}
++
++static void *writer(void *stm)
++{
++ cubeb_stream* stream = (cubeb_stream*)stm;
++ int16_t buffer[OSS_BUFFER_SIZE];
++ float f_buffer[OSS_BUFFER_SIZE];
++ int got;
++ unsigned long i;
++ while (stream->running) {
++ pthread_mutex_lock(&stream->state_mutex);
++ if (stream->stopped) {
++ pthread_mutex_unlock(&stream->state_mutex);
++ run_state_callback(stream, CUBEB_STATE_STOPPED);
++ pthread_mutex_lock(&stream->state_mutex);
++ while (stream->stopped) {
++ pthread_cond_wait(&stream->state_cond, &stream->state_mutex);
++ }
++ pthread_mutex_unlock(&stream->state_mutex);
++ run_state_callback(stream, CUBEB_STATE_STARTED);
++ continue;
++ }
++ pthread_mutex_unlock(&stream->state_mutex);
++ if (stream->floating) {
++ got = run_data_callback(stream, f_buffer,
++ OSS_BUFFER_SIZE/stream->params.channels);
++ for (i=0; i<((unsigned long)got)*stream->params.channels; i++) {
++ buffer[i] = f_buffer[i]*32767.0;
++ }
++ } else {
++ got = run_data_callback(stream, buffer,
++ OSS_BUFFER_SIZE/stream->params.channels);
++ }
++ apply_volume(buffer, got*stream->params.channels,
++ stream->volume, stream->panning);
++ if (got<0) {
++ run_state_callback(stream, CUBEB_STATE_ERROR);
++ break;
++ }
++ if (!got) {
++ run_state_callback(stream, CUBEB_STATE_DRAINED);
++ }
++ if (got) {
++ size_t i = 0;
++ size_t s = got*stream->params.channels*sizeof(int16_t);
++ while (i < s) {
++ ssize_t n = write(stream->fd, ((char*)buffer) + i, s - i);
++ if (n<=0) {
++ run_state_callback(stream, CUBEB_STATE_ERROR);
++ break;
++ }
++ i+=n;
++ }
++ stream->written_frags+=got;
++ }
++ }
++ return NULL;
++}
++
++static void oss_try_set_latency(cubeb_stream* stream, unsigned int latency)
++{
++ unsigned int latency_bytes, n_frag;
++ int frag;
++ /* fragment size of 1024 is a good choice with good chances to be accepted */
++ unsigned int frag_size=1024;
++ unsigned int frag_log=10; /* 2^frag_log = frag_size */
++ latency_bytes =
++ latency*stream->params.rate*stream->params.channels*sizeof(uint16_t)/1000;
++ n_frag = latency_bytes>>frag_log;
++ frag = (n_frag<<16) | frag_log;
++ /* Even if this fails we wish to continue, not checking for errors */
++ ioctl(stream->fd, SNDCTL_DSP_SETFRAGMENT, &frag);
++}
++
++static int oss_stream_init(cubeb * context, cubeb_stream ** stm,
++ char const * stream_name,
++ cubeb_stream_params stream_params,
++ unsigned int latency,
++ cubeb_data_callback data_callback,
++ cubeb_state_callback state_callback, void * user_ptr)
++{
++ cubeb_stream* stream = (cubeb_stream*)malloc(sizeof(cubeb_stream));
++ stream->context = context;
++ stream->data_callback = data_callback;
++ stream->state_callback = state_callback;
++ stream->user_ptr = user_ptr;
++
++ if ((stream->fd = open(CUBEB_OSS_DEFAULT_OUTPUT, O_WRONLY)) == -1) {
++ free(stream);
++ return CUBEB_ERROR;
++ }
++#define SET(what, to) do { unsigned int i = to; \
++ int j = ioctl(stream->fd, what, &i); \
++ if (j == -1 || i != to) { \
++ close(stream->fd); \
++ free(stream); \
++ return CUBEB_ERROR_INVALID_FORMAT; } } while (0)
++
++ stream->params = stream_params;
++ stream->volume = 1.0;
++ stream->panning = 0.0;
++
++ oss_try_set_latency(stream, latency);
++
++ stream->floating = 0;
++ SET(SNDCTL_DSP_CHANNELS, stream_params.channels);
++ SET(SNDCTL_DSP_SPEED, stream_params.rate);
++ switch (stream_params.format) {
++ case CUBEB_SAMPLE_S16LE:
++ SET(SNDCTL_DSP_SETFMT, AFMT_S16_LE);
++ break;
++ case CUBEB_SAMPLE_S16BE:
++ SET(SNDCTL_DSP_SETFMT, AFMT_S16_BE);
++ break;
++ case CUBEB_SAMPLE_FLOAT32LE:
++ SET(SNDCTL_DSP_SETFMT, AFMT_S16_NE);
++ stream->floating = 1;
++ break;
++ default:
++ close(stream->fd);
++ free(stream);
++ return CUBEB_ERROR;
++ }
++
++
++ pthread_mutex_init(&stream->state_mutex, NULL);
++ pthread_cond_init(&stream->state_cond, NULL);
++
++ stream->running = 1;
++ stream->stopped = 1;
++ stream->position_bytes = 0;
++ stream->last_position_bytes = 0;
++ stream->written_frags = 0;
++ stream->missed_frags = 0;
++
++ pthread_create(&stream->th, NULL, writer, (void*)stream);
++
++ *stm = stream;
++
++ return CUBEB_OK;
++}
++
++static void oss_stream_destroy(cubeb_stream * stream)
++{
++ pthread_mutex_lock(&stream->state_mutex);
++
++ stream->running = 0;
++ stream->stopped = 0;
++ pthread_cond_signal(&stream->state_cond);
++
++ pthread_mutex_unlock(&stream->state_mutex);
++
++ pthread_join(stream->th, NULL);
++
++ pthread_mutex_destroy(&stream->state_mutex);
++ pthread_cond_destroy(&stream->state_cond);
++ close(stream->fd);
++ free(stream);
++}
++
++static int oss_stream_get_latency(cubeb_stream * stream, uint32_t * latency)
++{
++ if (ioctl(stream->fd, SNDCTL_DSP_GETODELAY, latency)==-1) {
++ return CUBEB_ERROR;
++ }
++ /* Convert latency from bytes to frames */
++ *latency /= stream->params.channels*sizeof(int16_t);
++ return CUBEB_OK;
++}
++
++
++static int oss_stream_current_optr(cubeb_stream * stream, uint64_t * position)
++{
++ count_info ci;
++ /* Unfortunately, this ioctl is only available in OSS 4.x */
++#ifdef SNDCTL_DSP_CURRENT_OPTR
++ oss_count_t count;
++ if (ioctl(stream->fd, SNDCTL_DSP_CURRENT_OPTR, &count) != -1) {
++ *position = count.samples;// + count.fifo_samples;
++ return CUBEB_OK;
++ }
++#endif
++ /* Fall back to this ioctl in case the previous one fails */
++ if (ioctl(stream->fd, SNDCTL_DSP_GETOPTR, &ci) == -1) {
++ return CUBEB_ERROR;
++ }
++ /* ci.bytes is only 32 bit and will start to wrap after arithmetic overflow */
++ stream->position_bytes += ci.bytes - stream->last_position_bytes;
++ stream->last_position_bytes = ci.bytes;
++ *position = stream->position_bytes/stream->params.channels/sizeof(int16_t);
++ return CUBEB_OK;
++}
++
++static int oss_stream_get_position(cubeb_stream * stream, uint64_t * position)
++{
++ if ( oss_stream_current_optr(stream, position) == CUBEB_OK ){
++ *position -= stream->missed_frags;
++ return CUBEB_OK;
++ }
++ /* If no correct method to get position works we resort to this */
++ *position = stream->written_frags;
++ return CUBEB_OK;
++}
++
++
++static int oss_stream_start(cubeb_stream * stream)
++{
++ pthread_mutex_lock(&stream->state_mutex);
++ if (stream->stopped) {
++ uint64_t ptr;
++ oss_stream_current_optr(stream, &ptr);
++ stream->missed_frags = ptr - stream->written_frags;
++ stream->stopped = 0;
++ pthread_cond_signal(&stream->state_cond);
++ }
++ pthread_mutex_unlock(&stream->state_mutex);
++ return CUBEB_OK;
++}
++
++static int oss_stream_stop(cubeb_stream * stream)
++{
++ pthread_mutex_lock(&stream->state_mutex);
++ stream->stopped = 1;
++ pthread_mutex_unlock(&stream->state_mutex);
++ return CUBEB_OK;
++}
++
++int oss_stream_set_panning(cubeb_stream * stream, float panning)
++{
++ if (stream->params.channels == 2) {
++ stream->panning=panning;
++ }
++ return CUBEB_OK;
++}
++
++int oss_stream_set_volume(cubeb_stream * stream, float volume)
++{
++ stream->volume=volume;
++ return CUBEB_OK;
++}
++
++static struct cubeb_ops const oss_ops = {
++ .init = oss_init,
++ .get_backend_id = oss_get_backend_id,
++ .get_max_channel_count = oss_get_max_channel_count,
++ .get_min_latency = oss_get_min_latency,
++ .get_preferred_sample_rate = oss_get_preferred_sample_rate,
++ .destroy = oss_destroy,
++ .stream_init = oss_stream_init,
++ .stream_destroy = oss_stream_destroy,
++ .stream_start = oss_stream_start,
++ .stream_stop = oss_stream_stop,
++ .stream_get_position = oss_stream_get_position,
++ .stream_get_latency = oss_stream_get_latency
++};
+diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build
+index 8b7a0dd..31212ce 100644
+--- media/libcubeb/src/moz.build
++++ media/libcubeb/src/moz.build
+@@ -17,6 +17,12 @@ if CONFIG['MOZ_ALSA']:
+ ]
+ DEFINES['USE_ALSA'] = True
+
++if CONFIG['MOZ_OSS']:
++ SOURCES += [
++ 'cubeb_oss.c',
++ ]
++ DEFINES['USE_OSS'] = True
++
+ if CONFIG['MOZ_PULSEAUDIO']:
+ SOURCES += [
+ 'cubeb_pulse.c',
+@@ -75,5 +81,6 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
+
+ FAIL_ON_WARNINGS = True
+
++CFLAGS += CONFIG['MOZ_OSS_CFLAGS']
+ CFLAGS += CONFIG['MOZ_ALSA_CFLAGS']
+ CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS']
+diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk
+index e191f13..4fb268a 100644
+--- toolkit/library/libxul.mk
++++ toolkit/library/libxul.mk
+@@ -146,6 +146,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32
+ endif
+ endif
+
++ifdef MOZ_OSS
++EXTRA_DSO_LDOPTS += $(MOZ_OSS_LIBS)
++endif
++
+ ifdef MOZ_ALSA
+ EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS)
+ endif
diff --git a/www/firefox/files/patch-bug1026828 b/www/libxul/files/patch-bug1026828
index 69e79f5ac560..69e79f5ac560 100644
--- a/www/firefox/files/patch-bug1026828
+++ b/www/libxul/files/patch-bug1026828
diff --git a/www/libxul/files/patch-bug1041381 b/www/libxul/files/patch-bug1041381
new file mode 100644
index 000000000000..ef90b7b00c3f
--- /dev/null
+++ b/www/libxul/files/patch-bug1041381
@@ -0,0 +1,12 @@
+diff --git config/rules.mk config/rules.mk
+index 1dee8c3..4d67eda 100644
+--- config/rules.mk
++++ config/rules.mk
+@@ -822,6 +822,7 @@ endif
+ ifdef DTRACE_PROBE_OBJ
+ EXTRA_DEPS += $(DTRACE_PROBE_OBJ)
+ OBJS += $(DTRACE_PROBE_OBJ)
++EXCLUDED_OBJS += $(DTRACE_PROBE_OBJ)
+ endif
+
+ $(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
diff --git a/www/libxul/files/patch-bug1041795 b/www/libxul/files/patch-bug1041795
index ba567f83dcac..3e92884412fb 100644
--- a/www/libxul/files/patch-bug1041795
+++ b/www/libxul/files/patch-bug1041795
@@ -20,28 +20,6 @@ index 4d67eda..783942f 100644
endif
$(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(MOZ_GLUE_LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) $(if $(LIB_IS_C_ONLY),,$(STLPORT_LIBS))
@$(RM) $(DTRACE_PROBE_OBJ)
-diff --git js/src/config/rules.mk js/src/config/rules.mk
-index 4d67eda..783942f 100644
---- js/src/config/rules.mk
-+++ js/src/config/rules.mk
-@@ -858,7 +858,7 @@ ifdef DTRACE_PROBE_OBJ
- ifndef DTRACE_LIB_DEPENDENT
- NON_DTRACE_OBJS := $(filter-out $(DTRACE_PROBE_OBJ),$(OBJS))
- $(DTRACE_PROBE_OBJ): $(NON_DTRACE_OBJS)
-- dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(NON_DTRACE_OBJS)
-+ dtrace -x nolibs -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(NON_DTRACE_OBJS)
- endif
- endif
- endif
-@@ -876,7 +876,7 @@ ifndef INCREMENTAL_LINKER
- endif
- ifdef DTRACE_LIB_DEPENDENT
- ifndef XP_MACOSX
-- dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS))
-+ dtrace -x nolibs -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS))
- endif
- $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(MOZ_GLUE_LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) $(if $(LIB_IS_C_ONLY),,$(STLPORT_LIBS))
- @$(RM) $(DTRACE_PROBE_OBJ)
diff --git js/src/Makefile.in js/src/Makefile.in
index 28ca5e8..96793d7 100644
--- js/src/Makefile.in
diff --git a/www/libxul/files/patch-bug1073709 b/www/libxul/files/patch-bug1073709
new file mode 100644
index 000000000000..f011d7438ad0
--- /dev/null
+++ b/www/libxul/files/patch-bug1073709
@@ -0,0 +1,18 @@
+diff --git mfbt/Atomics.h mfbt/Atomics.h
+index 495a9d3..c7f7601 100644
+--- mfbt/Atomics.h
++++ mfbt/Atomics.h
+@@ -34,10 +34,12 @@
+ * loose typing of the atomic builtins. GCC 4.5 and 4.6 lacks inline
+ * definitions for unspecialized std::atomic and causes linking errors.
+ * Therefore, we require at least 4.7.0 for using libstdc++.
++ *
++ * libc++ <atomic> is only functional with clang.
+ */
+ # if MOZ_USING_LIBSTDCXX && MOZ_LIBSTDCXX_VERSION_AT_LEAST(4, 7, 0)
+ # define MOZ_HAVE_CXX11_ATOMICS
+-# elif MOZ_USING_LIBCXX
++# elif MOZ_USING_LIBCXX && defined(__clang__)
+ # define MOZ_HAVE_CXX11_ATOMICS
+ # endif
+ /*
diff --git a/www/libxul/files/patch-bug1076983 b/www/libxul/files/patch-bug1076983
new file mode 100644
index 000000000000..182aadf58bf5
--- /dev/null
+++ b/www/libxul/files/patch-bug1076983
@@ -0,0 +1,45 @@
+commit e10ee74
+Author: Martin Thomson <martin.thomson@gmail.com>
+Date: Tue Oct 14 17:17:35 2014 -0700
+
+ Bug 1076983 - Disabling SSL 3.0 with pref
+---
+ netwerk/base/public/security-prefs.js | 2 +-
+ security/manager/ssl/src/nsNSSComponent.cpp | 7 +++----
+ 2 files changed, 4 insertions(+), 5 deletions(-)
+
+diff --git netwerk/base/public/security-prefs.js netwerk/base/public/security-prefs.js
+index 352552e..c12731b 100644
+--- netwerk/base/public/security-prefs.js
++++ netwerk/base/public/security-prefs.js
+@@ -2,7 +2,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/. */
+
+-pref("security.tls.version.min", 0);
++pref("security.tls.version.min", 1);
+ pref("security.tls.version.max", 3);
+
+ pref("security.ssl.allow_unrestricted_renego_everywhere__temporarily_available_pref", false);
+diff --git security/manager/ssl/src/nsNSSComponent.cpp security/manager/ssl/src/nsNSSComponent.cpp
+index 8cab67b..772959d 100644
+--- security/manager/ssl/src/nsNSSComponent.cpp
++++ security/manager/ssl/src/nsNSSComponent.cpp
+@@ -829,14 +829,13 @@ void nsNSSComponent::setValidationOptions(bool isInitialSetting,
+ mDefaultCertVerifier = new SharedCertVerifier(odc, osc, ogc, pinningMode);
+ }
+
+-// Enable the TLS versions given in the prefs, defaulting to SSL 3.0 (min
+-// version) and TLS 1.2 (max version) when the prefs aren't set or set to
+-// invalid values.
++// Enable the TLS versions given in the prefs, defaulting to TLS 1.0 (min) and
++// TLS 1.2 (max) when the prefs aren't set or set to invalid values.
+ nsresult
+ nsNSSComponent::setEnabledTLSVersions()
+ {
+ // keep these values in sync with security-prefs.js
+- static const int32_t PSM_DEFAULT_MIN_TLS_VERSION = 0;
++ static const int32_t PSM_DEFAULT_MIN_TLS_VERSION = 1;
+ static const int32_t PSM_DEFAULT_MAX_TLS_VERSION = 3;
+
+ int32_t minVersion = Preferences::GetInt("security.tls.version.min",
diff --git a/www/libxul/files/patch-bug702179 b/www/libxul/files/patch-bug702179
index 5754b607ad57..d7b90a082519 100644
--- a/www/libxul/files/patch-bug702179
+++ b/www/libxul/files/patch-bug702179
@@ -25,11 +25,12 @@ diff --git js/src/Makefile.in js/src/Makefile.in
index e28160a..28ca5e8 100644
--- js/src/Makefile.in
+++ js/src/Makefile.in
-@@ -35,7 +35,6 @@ ifdef JS_SHARED_LIBRARY
- FORCE_SHARED_LIB = 1
- endif
- FORCE_STATIC_LIB = 1
--DIST_INSTALL = 1
+@@ -18,8 +18,6 @@ run_for_side_effects := $(shell echo 'MAKE: $(MAKE)')
+ STATIC_LIBRARY_NAME = js_static
+ LIBS = $(NSPR_LIBS)
- ###############################################
- # BEGIN include sources for low-level code shared with mfbt
+-DIST_INSTALL = 1
+-
+ ifdef JS_STANDALONE
+ SHARED_LIBRARY_LIBS += $(call EXPAND_LIBNAME_PATH,mfbt,$(DEPTH)/mfbt)
+ ifndef MOZ_NATIVE_ZLIB
diff --git a/www/libxul/files/patch-bug779713 b/www/libxul/files/patch-bug779713
index 1398d36f6a15..e4643f4422cb 100644
--- a/www/libxul/files/patch-bug779713
+++ b/www/libxul/files/patch-bug779713
@@ -1,8 +1,15 @@
-diff --git mfbt/Util.h mfbt/Util.h
+diff --git mfbt/Alignment.h mfbt/Alignment.h
index e0843ca..353ec36 100644
---- mfbt/Util.h
-+++ mfbt/Util.h
-@@ -19,6 +19,13 @@
+--- mfbt/Alignment.h
++++ mfbt/Alignment.h
+@@ -9,11 +9,20 @@
+ #ifndef mozilla_Alignment_h
+ #define mozilla_Alignment_h
+
++#include "mozilla/Attributes.h"
++
+ #include <stddef.h>
+ #include <stdint.h>
namespace mozilla {
@@ -14,9 +21,9 @@ index e0843ca..353ec36 100644
+#define MOZ_ALIGNOF(T) __alignof(T)
+#else
/*
- * This class, and the corresponding macro MOZ_ALIGNOF, figure out how many
+ * This class, and the corresponding macro MOZ_ALIGNOF, figures out how many
* bytes of alignment a given type needs.
-@@ -37,6 +44,7 @@ class AlignmentFinder
+@@ -32,6 +41,7 @@ public:
};
#define MOZ_ALIGNOF(T) mozilla::AlignmentFinder<T>::alignment
@@ -24,7 +31,7 @@ index e0843ca..353ec36 100644
/*
* Declare the MOZ_ALIGNED_DECL macro for declaring aligned types.
-@@ -48,7 +56,10 @@ class AlignmentFinder
+@@ -43,7 +53,10 @@ public:
* will declare a two-character array |arr| aligned to 8 bytes.
*/
@@ -40,7 +47,7 @@ diff --git mfbt/Attributes.h mfbt/Attributes.h
index d317766..ddb13da 100644
--- mfbt/Attributes.h
+++ mfbt/Attributes.h
-@@ -67,6 +67,9 @@
+@@ -54,6 +54,9 @@
# ifndef __has_extension
# define __has_extension __has_feature /* compatibility, for older versions of clang */
# endif
@@ -50,7 +57,7 @@ index d317766..ddb13da 100644
# if __has_extension(cxx_constexpr)
# define MOZ_HAVE_CXX11_CONSTEXPR
# endif
-@@ -85,6 +88,9 @@
+@@ -75,6 +78,9 @@
# endif
#elif defined(__GNUC__)
# if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
@@ -60,13 +67,11 @@ index d317766..ddb13da 100644
# if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0)
# define MOZ_HAVE_CXX11_OVERRIDE
# define MOZ_HAVE_CXX11_FINAL final
-@@ -102,6 +108,9 @@
- # define MOZ_HAVE_NEVER_INLINE __attribute__((noinline))
+@@ -96,6 +102,7 @@
# define MOZ_HAVE_NORETURN __attribute__((noreturn))
#elif defined(_MSC_VER)
-+# if _MSC_VER >= 1800
+ # if _MSC_VER >= 1800
+# define MOZ_HAVE_CXX11_ALIGNAS
-+# endif
+ # define MOZ_HAVE_CXX11_DELETE
+ # endif
# if _MSC_VER >= 1700
- # define MOZ_HAVE_CXX11_FINAL final
- # else
diff --git a/www/libxul/files/patch-bug783463 b/www/libxul/files/patch-bug783463
deleted file mode 100644
index dedbb7003927..000000000000
--- a/www/libxul/files/patch-bug783463
+++ /dev/null
@@ -1,14 +0,0 @@
---- gfx/skia/moz.build~
-+++ gfx/skia/moz.build
-@@ -188,10 +188,9 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'qt
- 'SkMMapStream.cpp',
- 'SkOSFile.cpp',
- ]
-- if CONFIG['OS_TARGET'] == 'Linux':
-+ if CONFIG['MOZ_X11'] == 1 or CONFIG['OS_TARGET'] == 'Linux':
- CPP_SOURCES += [
- 'SkFontHost_linux.cpp',
-- 'SkFontHost_tables.cpp',
- 'SkThread_pthread.cpp',
- 'SkTime_Unix.cpp',
- ]
diff --git a/www/libxul/files/patch-bug803480 b/www/libxul/files/patch-bug803480
deleted file mode 100644
index 5f5b4fe7f392..000000000000
--- a/www/libxul/files/patch-bug803480
+++ /dev/null
@@ -1,102 +0,0 @@
-diff --git configure.in configure.in
-index a0575dc..be327fd 100644
---- configure.in
-+++ configure.in
-@@ -4306,7 +4306,6 @@ NS_PRINTING=1
- MOZ_PDF_PRINTING=
- MOZ_DISABLE_CRYPTOLEGACY=
- NSS_DISABLE_DBM=
--NECKO_WIFI=1
- NECKO_COOKIES=1
- NECKO_PROTOCOLS_DEFAULT="about data file ftp http res viewsource websocket wyciwyg device"
- USE_ARM_KUSER=
-@@ -4336,11 +4335,6 @@ case "${target}" in
- fi
-
- NSS_DISABLE_DBM=1
-- if test -z "$gonkdir"; then
-- NECKO_WIFI=
-- else
-- NECKO_WIFI=1
-- fi
- MOZ_THEME_FASTSTRIPE=1
- MOZ_TREE_FREETYPE=1
- MOZ_MEMORY=1
-@@ -8485,28 +8479,39 @@ done
- dnl
- dnl option to disable necko's wifi scanner
- dnl
-+
-+case "$OS_TARGET" in
-+ OS2)
-+ dnl OS/2 implementation of Necko-WiFi support will be added in bug 506566
-+ ;;
-+ Android)
-+ if test -n "$gonkdir"; then
-+ NECKO_WIFI=1
-+ fi
-+ ;;
-+ Darwin|SunOS|WINNT)
-+ NECKO_WIFI=1
-+ ;;
-+ Linux)
-+ if test -z "$MOZ_ENABLE_DBUS"; then
-+ AC_MSG_ERROR([Necko WiFi scanning needs DBus on your platform, remove --disable-dbus or use --disable-necko-wifi])
-+ fi
-+ NECKO_WIFI=1
-+ NECKO_WIFI_DBUS=1
-+ ;;
-+esac
-+
- MOZ_ARG_DISABLE_BOOL(necko-wifi,
- [ --disable-necko-wifi Disable necko wifi scanner],
- NECKO_WIFI=,
- NECKO_WIFI=1)
-
--if test "$OS_ARCH" = "OS2"; then
-- dnl OS/2 implementation of Necko-WiFi support will be added in bug 506566
-- NECKO_WIFI=
--fi
--if test "$NECKO_WIFI" -a \
-- "$OS_ARCH" != "Linux" -a \
-- "$OS_ARCH" != "Darwin" -a \
-- "$OS_ARCH" != "SunOS" -a \
-- "$OS_ARCH" != "WINNT"; then
-- AC_MSG_ERROR([Necko WiFi scanning not supported on your platform, use --disable-necko-wifi])
--fi
--
- if test "$NECKO_WIFI"; then
- AC_DEFINE(NECKO_WIFI)
- _NON_GLOBAL_ACDEFINES="$_NON_GLOBAL_ACDEFINES NECKO_WIFI"
- fi
- AC_SUBST(NECKO_WIFI)
-+AC_SUBST(NECKO_WIFI_DBUS)
-
- dnl
- dnl option to disable cookies
-diff --git netwerk/wifi/Makefile.in netwerk/wifi/Makefile.in
-index 26dbd79..4cbf912 100644
---- netwerk/wifi/Makefile.in
-+++ netwerk/wifi/Makefile.in
-@@ -20,7 +20,7 @@ ifeq ($(OS_ARCH),SunOS)
- OS_INCLUDES += $(GLIB_CFLAGS)
- endif
-
--ifdef MOZ_ENABLE_DBUS
-+ifdef NECKO_WIFI_DBUS
- OS_INCLUDES += $(MOZ_DBUS_GLIB_CFLAGS)
- endif
-
-diff --git netwerk/wifi/moz.build netwerk/wifi/moz.build
-index 5e70211..07b01de 100644
---- netwerk/wifi/moz.build
-+++ netwerk/wifi/moz.build
-@@ -43,7 +43,7 @@ elif CONFIG['OS_ARCH'] == 'SunOS':
- 'nsWifiScannerSolaris.cpp',
- ]
-
--if CONFIG['MOZ_ENABLE_DBUS']:
-+if CONFIG['NECKO_WIFI_DBUS']:
- CPP_SOURCES += [
- 'nsWifiScannerDBus.cpp',
- ]
diff --git a/www/libxul/files/patch-bug807492 b/www/libxul/files/patch-bug807492
deleted file mode 100644
index 3b39766e0492..000000000000
--- a/www/libxul/files/patch-bug807492
+++ /dev/null
@@ -1,628 +0,0 @@
-JJdiff --git configure.in configure.in
-index c167461..8346c11 100644
---- configure.in
-+++ configure.in
-@@ -5246,17 +5246,17 @@ if test "$NS_PRINTING"; then
- AC_DEFINE(NS_PRINT_PREVIEW)
- fi
-
- dnl Turn off webrtc for OS's we don't handle yet, but allow
- dnl --enable-webrtc to override. Can disable for everything in
- dnl the master list above.
- if test -n "$MOZ_WEBRTC"; then
- case "$target" in
-- *-linux*|*-mingw*|*-darwin*|*-android*|*-linuxandroid*)
-+ *-linux*|*-mingw*|*-darwin*|*-android*|*-linuxandroid*|*-dragonfly*|*-freebsd*|*-netbsd*|*-openbsd*)
- dnl Leave enabled
- ;;
- *)
- dnl default to disabled for all others
- MOZ_WEBRTC=
- ;;
- esac
- fi
-diff --git media/mtransport/objs.mk media/mtransport/objs.mk
-index f1fc85f..141e8ca 100644
---- media/mtransport/objs.mk
-+++ media/mtransport/objs.mk
-@@ -18,22 +18,26 @@ LOCAL_INCLUDES += \
- -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/util/libekr \
- -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/log \
- -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/registry \
- -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/stats \
- -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/plugin \
- -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/event \
- $(NULL)
-
--ifeq ($(OS_TARGET), Darwin)
-+ifneq (,$(filter Darwin DragonFly FreeBSD NetBSD OpenBSD,$(OS_TARGET)))
- LOCAL_INCLUDES += \
- -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/port/darwin/include \
- -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/port/generic/include \
- $(NULL)
-+ifeq ($(OS_TARGET), Darwin)
- DEFINES += -DDARWIN
-+else
-+DEFINES += -DBSD
-+endif
- endif
-
- ifeq ($(OS_TARGET), Linux)
- LOCAL_INCLUDES += \
- -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/port/linux/include \
- -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/port/generic/include \
- $(NULL)
- DEFINES += -DLINUX
-diff --git media/mtransport/test/Makefile.in media/mtransport/test/Makefile.in
-index c1d5bf4..2ecf2c7 100644
---- media/mtransport/test/Makefile.in
-+++ media/mtransport/test/Makefile.in
-@@ -73,22 +73,24 @@ DEFINES += -D__Userspace_os_FreeBSD=1
- else
- #default_fallback; probably doesn't work
- DEFINES += -D__Userspace_os_$(OS_TARGET)=1
- endif
- endif
- endif
- endif
-
--ifeq ($(OS_TARGET), Darwin)
-+ifneq (,$(filter Darwin DragonFly FreeBSD NetBSD OpenBSD,$(OS_TARGET)))
- LOCAL_INCLUDES += -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/port/darwin/include
-+ifeq ($(OS_TARGET), Darwin)
- DEFINES += \
- -DGTEST_USE_OWN_TR1_TUPLE=1 \
- $(NULL)
- endif
-+endif
-
- ifeq ($(OS_TARGET), Linux)
- LOCAL_INCLUDES += -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/port/linux/include
- endif
-
- ifeq ($(OS_TARGET), Android)
- LOCAL_INCLUDES += -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/port/android/include
-
-diff --git media/mtransport/third_party/nICEr/nicer.gyp media/mtransport/third_party/nICEr/nicer.gyp
-index 0e1f8b4..9a4b995 100644
---- media/mtransport/third_party/nICEr/nicer.gyp
-+++ media/mtransport/third_party/nICEr/nicer.gyp
-@@ -126,26 +126,36 @@
- 'R_DEFINED_UINT2=uint16_t',
- 'R_DEFINED_INT4=int32_t',
- 'R_DEFINED_UINT4=uint32_t',
- 'R_DEFINED_INT8=int64_t',
- 'R_DEFINED_UINT8=uint64_t',
- ],
-
- 'conditions' : [
-- ## Mac
-+ ## Mac and BSDs
- [ 'OS == "mac"', {
-+ 'defines' : [
-+ 'DARWIN',
-+ 'HAVE_XLOCALE',
-+ ],
-+ }],
-+ [ 'os_bsd == 1', {
-+ 'defines' : [
-+ 'BSD',
-+ ],
-+ }],
-+ [ 'OS == "mac" or os_bsd == 1', {
- 'cflags_mozilla': [
- '-Wall',
- '-Wno-parentheses',
- '-Wno-strict-prototypes',
- '-Wmissing-prototypes',
- ],
- 'defines' : [
-- 'DARWIN',
- 'HAVE_LIBM=1',
- 'HAVE_STRDUP=1',
- 'HAVE_STRLCPY=1',
- 'HAVE_SYS_TIME_H=1',
- 'HAVE_VFPRINTF=1',
- 'NEW_STDIO'
- 'RETSIGTYPE=void',
- 'TIME_WITH_SYS_TIME_H=1',
-diff --git media/mtransport/third_party/nICEr/src/stun/addrs.c media/mtransport/third_party/nICEr/src/stun/addrs.c
-index b0b66b2..04fea94 100644
---- media/mtransport/third_party/nICEr/src/stun/addrs.c
-+++ media/mtransport/third_party/nICEr/src/stun/addrs.c
-@@ -50,17 +50,19 @@ static char *RCSSTRING __UNUSED__="$Id: addrs.c,v 1.2 2008/04/28 18:21:30 ekr Ex
- #else
- #include <syslog.h>
- /* Work around an Android NDK < r8c bug */
- #undef __unused
- #include <linux/sysctl.h>
- #endif
- #include <net/if.h>
- #ifndef LINUX
-+#if !defined(__OpenBSD__) && !defined(__NetBSD__)
- #include <net/if_var.h>
-+#endif
- #include <net/if_dl.h>
- #include <net/if_types.h>
- #include <sys/sockio.h>
- #else
- #include <linux/if.h>
- #endif
- #include <net/route.h>
-
-@@ -75,17 +77,17 @@ static char *RCSSTRING __UNUSED__="$Id: addrs.c,v 1.2 2008/04/28 18:21:30 ekr Ex
- #include <netdb.h>
- #endif /* UNIX */
-
- #include "stun.h"
- #include "addrs.h"
-
-
-
--#ifdef DARWIN
-+#if defined(BSD) || defined(DARWIN)
- /*
- * Copyright (c) 1983, 1993
- * 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
-@@ -685,17 +687,17 @@ nr_stun_remove_duplicate_addrs(nr_transport_addr addrs[], int remove_loopback, i
- }
-
- int
- nr_stun_get_addrs(nr_transport_addr addrs[], int maxaddrs, int drop_loopback, int *count)
- {
- int _status=0;
- int i;
-
--#ifdef DARWIN
-+#if defined(BSD) || defined(DARWIN)
- _status = stun_get_mib_addrs(addrs, maxaddrs, count);
- #elif defined(WIN32)
- _status = stun_get_win32_addrs(addrs, maxaddrs, count);
- #elif defined(__sparc__)
- _status = stun_get_sparc_addrs(addrs, maxaddrs, count);
- #else
- _status = stun_get_siocgifconf_addrs(addrs, maxaddrs, count);
- #endif
-diff --git media/mtransport/third_party/nICEr/src/stun/stun.h media/mtransport/third_party/nICEr/src/stun/stun.h
-index a3c51f9..eb65ac8 100644
---- media/mtransport/third_party/nICEr/src/stun/stun.h
-+++ media/mtransport/third_party/nICEr/src/stun/stun.h
-@@ -36,21 +36,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- #ifdef WIN32
- #include <winsock2.h>
- #else
- #include <sys/param.h>
- #include <sys/socket.h>
- #include <net/if.h>
- #ifndef LINUX
-+#if !defined(__OpenBSD__) && !defined(__NetBSD__)
- #include <net/if_var.h>
-+#endif
- #include <net/if_dl.h>
- #include <net/if_types.h>
- #endif
-+#ifndef BSD
- #include <net/route.h>
-+#endif
- #include <netinet/in.h>
- #ifndef LINUX
- #include <netinet/in_var.h>
- #endif
- #include <arpa/inet.h>
- #include <netdb.h>
- #endif
- #include <time.h>
-diff --git media/mtransport/third_party/nICEr/src/util/mbslen.c media/mtransport/third_party/nICEr/src/util/mbslen.c
-index cc260b7..66af2d7 100644
---- media/mtransport/third_party/nICEr/src/util/mbslen.c
-+++ media/mtransport/third_party/nICEr/src/util/mbslen.c
-@@ -38,50 +38,58 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- #include <errno.h>
- #include <csi_platform.h>
-
- #include <assert.h>
- #include <locale.h>
- #include <stdlib.h>
- #include <wchar.h>
--#ifdef DARWIN
-+
-+#ifdef __FreeBSD__
-+#include <osreldate.h>
-+# if __FreeBSD_version > 900505
-+# define HAVE_XLOCALE
-+# endif
-+#endif
-+
-+#ifdef HAVE_XLOCALE
- #include <xlocale.h>
--#endif /* DARWIN */
-+#endif /* HAVE_XLOCALE */
-
- #include "nr_api.h"
- #include "mbslen.h"
-
- /* get number of characters in a mult-byte character string */
- int
- mbslen(const char *s, size_t *ncharsp)
- {
--#ifdef DARWIN
-+#ifdef HAVE_XLOCALE
- static locale_t loc = 0;
- static int initialized = 0;
--#endif /* DARWIN */
-+#endif /* HAVE_XLOCALE */
- #ifdef WIN32
- char *my_locale=0;
- unsigned int i;
- #endif /* WIN32 */
- int _status;
- size_t nbytes;
- int nchars;
- mbstate_t mbs;
-
--#ifdef DARWIN
-+#ifdef HAVE_XLOCALE
- if (! initialized) {
- initialized = 1;
- loc = newlocale(LC_CTYPE_MASK, "UTF-8", LC_GLOBAL_LOCALE);
- }
-
- if (loc == 0) {
- /* unable to create the UTF-8 locale */
- assert(loc != 0); /* should never happen */
--#endif /* DARWIN */
-+#endif /* HAVE_XLOCALE */
-
- #ifdef WIN32
- if (!setlocale(LC_CTYPE, 0))
- ABORT(R_INTERNAL);
-
- if (!(my_locale = r_strdup(setlocale(LC_CTYPE, 0))))
- ABORT(R_NO_MEMORY);
-
-@@ -94,28 +102,28 @@ mbslen(const char *s, size_t *ncharsp)
- /* can't count UTF-8 characters with mbrlen if the locale isn't UTF-8 */
- /* null-checking setlocale is required because Android */
- char *locale = setlocale(LC_CTYPE, 0);
- /* some systems use "utf8" instead of "UTF-8" like Fedora 17 */
- if (!locale || (!strcasestr(locale, "UTF-8") && !strcasestr(locale, "UTF8")))
- ABORT(R_NOT_FOUND);
- #endif
-
--#ifdef DARWIN
-+#ifdef HAVE_XLOCALE
- }
--#endif /* DARWIN */
-+#endif /* HAVE_XLOCALE */
-
- memset(&mbs, 0, sizeof(mbs));
- nchars = 0;
-
--#ifdef DARWIN
-+#ifdef HAVE_XLOCALE
- while (*s != '\0' && (nbytes = mbrlen_l(s, strlen(s), &mbs, loc)) != 0)
- #else
- while (*s != '\0' && (nbytes = mbrlen(s, strlen(s), &mbs)) != 0)
--#endif /* DARWIN */
-+#endif /* HAVE_XLOCALE */
- {
- if (nbytes == (size_t)-1) /* should never happen */ {
- ABORT(R_INTERNAL);
- }
- if (nbytes == (size_t)-2) /* encoding error */ {
- ABORT(R_BAD_DATA);
- }
-
-diff --git media/mtransport/third_party/nrappkit/nrappkit.gyp media/mtransport/third_party/nrappkit/nrappkit.gyp
-index 3cc8e1c..74016c6 100644
---- media/mtransport/third_party/nrappkit/nrappkit.gyp
-+++ media/mtransport/third_party/nrappkit/nrappkit.gyp
-@@ -142,26 +142,35 @@
- 'R_DEFINED_UINT2=uint16_t',
- 'R_DEFINED_INT4=int32_t',
- 'R_DEFINED_UINT4=uint32_t',
- 'R_DEFINED_INT8=int64_t',
- 'R_DEFINED_UINT8=uint64_t',
- ],
-
- 'conditions' : [
-- ## Mac
-+ ## Mac and BSDs
- [ 'OS == "mac"', {
-+ 'defines' : [
-+ 'DARWIN',
-+ ],
-+ }],
-+ [ 'os_bsd == 1', {
-+ 'defines' : [
-+ 'BSD',
-+ ],
-+ }],
-+ [ 'OS == "mac" or os_bsd == 1', {
- 'cflags_mozilla': [
- '-Wall',
- '-Wno-parentheses',
- '-Wno-strict-prototypes',
- '-Wmissing-prototypes',
- ],
- 'defines' : [
-- 'DARWIN',
- 'HAVE_LIBM=1',
- 'HAVE_STRDUP=1',
- 'HAVE_STRLCPY=1',
- 'HAVE_SYS_TIME_H=1',
- 'HAVE_VFPRINTF=1',
- 'NEW_STDIO'
- 'RETSIGTYPE=void',
- 'TIME_WITH_SYS_TIME_H=1',
-diff --git media/mtransport/third_party/nrappkit/src/log/r_log.c media/mtransport/third_party/nrappkit/src/log/r_log.c
-index efb7ef2..aebf578 100644
---- media/mtransport/third_party/nrappkit/src/log/r_log.c
-+++ media/mtransport/third_party/nrappkit/src/log/r_log.c
-@@ -43,16 +43,17 @@ static char *RCSSTRING __UNUSED__ ="$Id: r_log.c,v 1.10 2008/11/25 22:25:18 adam
- #ifdef LINUX
- #define _BSD_SOURCE
- #endif
-
- #include "r_log.h"
- #include "hex.h"
-
- #include <string.h>
-+#include <errno.h>
- #ifndef _MSC_VER
- #include <strings.h>
- #include <syslog.h>
- #endif
- #include <registry.h>
- #include <time.h>
-
-
-diff --git media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
-index bcb1ec0..bb73591 100644
---- media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
-+++ media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
-@@ -33,7 +33,7 @@
- #ifndef _SYS_QUEUE_H_
- #define _SYS_QUEUE_H_
-
--#ifndef DARWIN
-+#if !defined(__FreeBSD__) && !defined(DARWIN)
- #include <stddef.h>
- #define __offsetof offsetof
- #endif
-diff --git media/mtransport/third_party/nrappkit/src/util/util.c media/mtransport/third_party/nrappkit/src/util/util.c
-index a7d4ff1..ff11a60 100644
---- media/mtransport/third_party/nrappkit/src/util/util.c
-+++ media/mtransport/third_party/nrappkit/src/util/util.c
-@@ -40,16 +40,17 @@
- static char *RCSSTRING __UNUSED__ ="$Id: util.c,v 1.5 2007/11/21 00:09:13 adamcain Exp $";
-
- #ifndef WIN32
- #include <sys/uio.h>
- #include <pwd.h>
- #include <dirent.h>
- #endif
- #include <string.h>
-+#include <errno.h>
- #include <ctype.h>
- #include <sys/stat.h>
- #ifdef OPENSSL
- #include <openssl/evp.h>
- #endif
- #include "nr_common.h"
- #include "r_common.h"
- #include "registry.h"
-diff --git media/webrtc/signaling/signaling.gyp media/webrtc/signaling/signaling.gyp
-index 2a91e3d..31de641 100644
---- media/webrtc/signaling/signaling.gyp
-+++ media/webrtc/signaling/signaling.gyp
-@@ -212,16 +212,29 @@
- 'SIPCC_BUILD',
- 'HAVE_WINSOCK2_H',
- 'CPR_STDINT_INCLUDE=\\"mozilla/StandardInteger.h\\"'
- ],
-
- 'cflags_mozilla': [
- ],
- }],
-+ ['os_bsd==1', {
-+ 'include_dirs': [
-+ ],
-+ 'defines': [
-+ # avoiding pointless ifdef churn
-+ 'SIP_OS_OSX',
-+ 'OSX',
-+ 'SECLIB_OPENSSL',
-+ ],
-+
-+ 'cflags_mozilla': [
-+ ],
-+ }],
- ['OS=="mac"', {
- 'include_dirs': [
- ],
- 'defines': [
- 'SIP_OS_OSX',
- 'OSX',
- '_FORTIFY_SOURCE=2',
- ],
-@@ -747,17 +760,17 @@
- 'EXTERNAL_TICK_REQUIRED',
- 'GIPS_VER=3480',
- ],
-
- 'cflags_mozilla': [
- ],
-
- }],
-- ['OS=="mac"', {
-+ ['OS=="mac" or os_bsd==1', {
-
- 'include_dirs': [
- ],
-
- 'sources': [
- # SIPSTACK
- './src/sipcc/core/sipstack/sip_platform_task.c',
-
-@@ -792,24 +805,23 @@
- './src/sipcc/cpr/darwin/cpr_darwin_timers_using_select.c',
- './src/sipcc/cpr/darwin/cpr_darwin_tst.h',
- './src/sipcc/cpr/darwin/cpr_darwin_types.h',
- ],
-
-
- 'defines' : [
- 'SIP_OS_OSX',
-- '_POSIX_SOURCE',
-+ # using BSD extensions, leave _POSIX_SOURCE undefined
- 'CPR_MEMORY_LITTLE_ENDIAN',
- 'NO_SOCKET_POLLING',
- 'USE_TIMER_SELECT_BASED',
- 'FULL_BUILD',
- 'STUBBED_OUT',
- 'USE_PRINTF',
-- '_DARWIN_C_SOURCE',
- 'NO_NSPR_10_SUPPORT',
- ],
-
- 'cflags_mozilla': [
- ],
- }],
- ],
-
-diff --git media/webrtc/signaling/src/sipcc/cpr/darwin/cpr_darwin_ipc.c media/webrtc/signaling/src/sipcc/cpr/darwin/cpr_darwin_ipc.c
-index a7c47e1..4f191de 100644
---- media/webrtc/signaling/src/sipcc/cpr/darwin/cpr_darwin_ipc.c
-+++ media/webrtc/signaling/src/sipcc/cpr/darwin/cpr_darwin_ipc.c
-@@ -317,21 +317,25 @@ cprGetMessage (cprMsgQueue_t msgQueue, boolean waitForever, void **ppUserData)
- {
- static const char fname[] = "cprGetMessage";
-
- void *buffer = 0;
- cpr_msg_queue_t *msgq;
- cpr_msgq_node_t *node;
- struct timespec timeout;
- struct timeval tv;
-+#ifndef __APPLE__
-+ struct timezone tz;
-+#else
- // On the iPhone, there is a DarwinAlias problem with "timezone"
- struct _timezone {
- int tz_minuteswest; /* of Greenwich */
- int tz_dsttime; /* type of dst correction to apply */
- } tz;
-+#endif
-
- /* Initialize ppUserData */
- if (ppUserData) {
- *ppUserData = NULL;
- }
-
- msgq = (cpr_msg_queue_t *) msgQueue;
- if (msgq == NULL) {
-diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in
-index a30e330..cfbd8a3 100644
---- media/webrtc/signaling/test/Makefile.in
-+++ media/webrtc/signaling/test/Makefile.in
-@@ -81,17 +81,17 @@ endif
- ifeq (qt,$(MOZ_WIDGET_TOOLKIT))
- LIBS += \
- $(XLIBS) \
- $(TK_LIBS) \
- $(MOZ_PANGO_LIBS) \
- $(NULL)
- endif
-
--ifeq ($(OS_TARGET),Linux)
-+ifneq (,$(filter Linux DragonFly FreeBSD NetBSD OpenBSD,$(OS_TARGET)))
- LIBS += \
- $(MOZ_CAIRO_OSLIBS) \
- $(NULL)
- endif
-
- ifeq ($(OS_TARGET),Darwin)
- LIBS += \
- -framework AudioToolbox \
-diff --git media/webrtc/trunk/tools/gyp/pylib/gyp/generator/mozmake.py media/webrtc/trunk/tools/gyp/pylib/gyp/generator/mozmake.py
-index 338d0b7..2241d41 100644
---- media/webrtc/trunk/tools/gyp/pylib/gyp/generator/mozmake.py
-+++ media/webrtc/trunk/tools/gyp/pylib/gyp/generator/mozmake.py
-@@ -1,16 +1,17 @@
- # Copyright (c) 2012 Mozilla Foundation. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
-
- import collections
- import gyp
- import gyp.common
- import sys
-+import platform
- import os
- import re
- import shlex
-
- generator_wants_sorted_dependencies = True
-
- generator_default_variables = {
- }
-@@ -107,30 +108,44 @@ endif
-
- def ensure_directory_exists(path):
- dir = os.path.dirname(path)
- if dir and not os.path.exists(dir):
- os.makedirs(dir)
-
- def GetFlavor(params):
- """Returns |params.flavor| if it's set, the system's default flavor else."""
-+ system = platform.system().lower()
- flavors = {
-- 'win32': 'win',
-- 'darwin': 'mac',
-- 'sunos5': 'solaris',
-- 'freebsd7': 'freebsd',
-- 'freebsd8': 'freebsd',
-+ 'microsoft': 'win',
-+ 'windows' : 'win',
-+ 'darwin' : 'mac',
-+ 'sunos' : 'solaris',
-+ 'dragonfly': 'bsd',
-+ 'freebsd' : 'bsd',
-+ 'netbsd' : 'bsd',
-+ 'openbsd' : 'bsd',
- }
-- flavor = flavors.get(sys.platform, 'linux')
-- return params.get('flavor', flavor)
-+
-+ if 'flavor' in params:
-+ return params['flavor']
-+ if system.startswith('cygwin'):
-+ return 'win'
-+ if system in flavors:
-+ return flavors[system]
-+
-+ return 'linux'
-
-
- def CalculateVariables(default_variables, params):
-+ flavor = GetFlavor(params)
-+ if flavor == 'bsd':
-+ flavor = platform.system().lower()
- generator_flags = params.get('generator_flags', {})
-- default_variables['OS'] = generator_flags.get('os', GetFlavor(params))
-+ default_variables['OS'] = generator_flags.get('os', flavor)
-
-
- def CalculateGeneratorInputInfo(params):
- """Calculate the generator specific info that gets fed to input (called by
- gyp)."""
- generator_flags = params.get('generator_flags', {})
- if generator_flags.get('adjust_static_libraries', False):
- global generator_wants_static_library_dependencies_adjusted
diff --git a/www/libxul/files/patch-bug810716 b/www/libxul/files/patch-bug810716
deleted file mode 100644
index 8c08e9a66986..000000000000
--- a/www/libxul/files/patch-bug810716
+++ /dev/null
@@ -1,68 +0,0 @@
-diff --git configure.in configure.in
-index 2084be9..eb6eeb2 100644
---- configure.in
-+++ configure.in
-@@ -3369,14 +3369,19 @@ fi
- AC_CACHE_CHECK(
- [for res_ninit()],
- ac_cv_func_res_ninit,
-- [AC_TRY_LINK([
-+ [AC_TRY_RUN([
- #ifdef linux
- #define _BSD_SOURCE 1
- #endif
-+ #include <sys/types.h>
-+ #include <netinet/in.h>
-+ #include <arpa/nameser.h>
- #include <resolv.h>
-- ],
-- [int foo = res_ninit(&_res);],
-+ int main(int argc, char **argv){
-+ int foo = res_ninit(&_res);
-+ }],
- [ac_cv_func_res_ninit=yes],
-+ [ac_cv_func_res_ninit=no],
- [ac_cv_func_res_ninit=no])
- ])
-
-diff --git extensions/auth/nsAuthGSSAPI.cpp extensions/auth/nsAuthGSSAPI.cpp
-index e828beb..6444246 100644
---- extensions/auth/nsAuthGSSAPI.cpp
-+++ extensions/auth/nsAuthGSSAPI.cpp
-@@ -39,6 +39,9 @@ typedef KLStatus (*KLCacheHasValidTickets_type)(
- #endif
-
- #if defined(HAVE_RES_NINIT)
-+#include <sys/types.h>
-+#include <netinet/in.h>
-+#include <arpa/nameser.h>
- #include <resolv.h>
- #endif
-
-diff --git js/src/configure.in js/src/configure.in
-index e25f569..b9722f9 100644
---- js/src/configure.in
-+++ js/src/configure.in
-@@ -2797,14 +2797,19 @@ fi
- AC_CACHE_CHECK(
- [for res_ninit()],
- ac_cv_func_res_ninit,
-- [AC_TRY_LINK([
-+ [AC_TRY_RUN([
- #ifdef linux
- #define _BSD_SOURCE 1
- #endif
-+ #include <sys/types.h>
-+ #include <netinet/in.h>
-+ #include <arpa/nameser.h>
- #include <resolv.h>
-- ],
-- [int foo = res_ninit(&_res);],
-+ int main(int argc, char **argv){
-+ int foo = res_ninit(&_res);
-+ }],
- [ac_cv_func_res_ninit=yes],
-+ [ac_cv_func_res_ninit=no],
- [ac_cv_func_res_ninit=no])
- ])
-
diff --git a/www/libxul/files/patch-bug826985 b/www/libxul/files/patch-bug826985
index fe55ff667281..b8eee831f66d 100644
--- a/www/libxul/files/patch-bug826985
+++ b/www/libxul/files/patch-bug826985
@@ -26,22 +26,23 @@ index 55e4cd1..76567b3 100644
dnl enable once Signaling lands
MOZ_WEBRTC_SIGNALING=1
AC_DEFINE(MOZ_WEBRTC_SIGNALING)
-@@ -8981,6 +8984,10 @@ elif test "${OS_TARGET}" = "Android"; then
- fi
- fi
-
-+if test -n "$MOZ_LIBV4L2_LIBS"; then
-+ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D use_libv4l2=1"
-+fi
-+
- if test -n "$MOZ_WEBRTC"; then
- AC_MSG_RESULT("generating WebRTC Makefiles...")
-
+diff --git build/gyp.mozbuild build/gyp.mozbuild
+index b483cd1..f1dd1f0 100644
+--- build/gyp.mozbuild
++++ build/gyp.mozbuild
+@@ -11,6 +11,7 @@ gyp_vars = {
+ 'have_ethtool_cmd_speed_hi': 1 if CONFIG['MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI'] else 0,
+ 'include_alsa_audio': 1 if CONFIG['MOZ_ALSA'] else 0,
+ 'include_pulse_audio': 1 if CONFIG['MOZ_PULSEAUDIO'] else 0,
++ 'use_libv4l2': 1 if CONFIG['MOZ_LIBV4L2_LIBS'] else 0,
+ # basic stuff for everything
+ 'include_internal_video_render': 0,
+ 'clang_use_chrome_plugins': 0,
diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in
index b483cd1..f1dd1f0 100644
--- media/webrtc/signaling/test/Makefile.in
+++ media/webrtc/signaling/test/Makefile.in
-@@ -17,6 +17,7 @@ LIBS = \
+@@ -7,6 +7,7 @@ LIBS = \
$(NSPR_LIBS) \
$(NSS_LIBS) \
$(REALTIME_LIBS) \
@@ -53,7 +54,7 @@ diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_lin
index 239a292..bab496c 100644
--- media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
+++ media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
-@@ -26,11 +26,23 @@
+@@ -25,10 +25,21 @@
#else
#include <linux/videodev2.h>
#endif
@@ -61,9 +62,8 @@ index 239a292..bab496c 100644
+#include <libv4l2.h>
+#endif
- #include "ref_count.h"
- #include "trace.h"
-
+ #include "webrtc/system_wrappers/interface/ref_count.h"
+ #include "webrtc/system_wrappers/interface/trace.h"
+#ifdef HAVE_LIBV4L2
+#define open v4l2_open
@@ -73,10 +73,9 @@ index 239a292..bab496c 100644
+#define mmap v4l2_mmap
+#define munmap v4l2_munmap
+#endif
-+
+
namespace webrtc
{
- namespace videocapturemodule
@@ -130,6 +142,11 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName(
memset(deviceNameUTF8, 0, deviceNameLength);
memcpy(cameraName, cap.card, sizeof(cap.card));
@@ -152,13 +151,16 @@ index d46b5aa..e452223 100644
],
diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in
index 9c16ffa..1db3794 100644
---- toolkit/library/Makefile.in
-+++ toolkit/library/Makefile.in
-@@ -405,6 +405,7 @@ endif
+--- toolkit/library/libxul.mk
++++ toolkit/library/libxul.mk
+@@ -182,6 +182,10 @@ endif
+
EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib)
- ifdef MOZ_WEBRTC
++ifdef MOZ_LIBV4L2_LIBS
+EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS)
- ifdef MOZ_PEERCONNECTION
- COMPONENT_LIBS += peerconnection
- endif
++endif
++
+ ifdef MOZ_WEBRTC
+ ifeq (WINNT,$(OS_TARGET))
+ EXTRA_DSO_LDOPTS += \
diff --git a/www/libxul/files/patch-z-bug847568 b/www/libxul/files/patch-bug847568
index 9c8105691ab2..1504654a4341 100644
--- a/www/libxul/files/patch-z-bug847568
+++ b/www/libxul/files/patch-bug847568
@@ -33,7 +33,7 @@ diff --git configure.in configure.in
index ac38f40..87536b7 100644
--- configure.in
+++ configure.in
-@@ -8032,6 +8032,56 @@ if test "$USE_FC_FREETYPE"; then
+@@ -8032,6 +8032,52 @@ if test "$USE_FC_FREETYPE"; then
fi
dnl ========================================================
@@ -46,9 +46,7 @@ index ac38f40..87536b7 100644
+MOZ_NATIVE_HARFBUZZ=)
+
+if test -n "$MOZ_NATIVE_HARFBUZZ"; then
-+ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 0.9.16)
-+else
-+ MOZ_HARFBUZZ_LIBS='$(DEPTH)/gfx/harfbuzz/src/$(LIB_PREFIX)mozharfbuzz.$(LIB_SUFFIX)'
++ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 0.9.25)
+fi
+
+AC_SUBST(MOZ_NATIVE_HARFBUZZ)
@@ -64,7 +62,7 @@ index ac38f40..87536b7 100644
+MOZ_NATIVE_GRAPHITE2=)
+
+if test -n "$MOZ_NATIVE_GRAPHITE2"; then
-+ PKG_CHECK_MODULES(MOZ_GRAPHITE, graphite2)
++ PKG_CHECK_MODULES(MOZ_GRAPHITE2, graphite2)
+
+ dnl graphite2.pc has bogus version, check manually
+ AC_TRY_COMPILE([ #include <graphite2/Font.h>
@@ -73,57 +71,35 @@ index ac38f40..87536b7 100644
+ * 100 + GR2_VERSION_BUGFIX >= \
+ (major) * 10000 + (minor) * 100 + (bugfix) )
+ ], [
-+ #if !GR2_VERSION_REQUIRE(1,2,3)
++ #if !GR2_VERSION_REQUIRE(1,2,4)
+ #error "Insufficient graphite2 version."
+ #endif
+ ], [],
+ [AC_MSG_ERROR([--with-system-graphite2 requested but no working libgraphite2 found])])
-++else
-++ MOZ_GRAPHITE_LIBS='$(DEPTH)/gfx/graphite2/src/$(LIB_PREFIX)mozgraphite2.$(LIB_SUFFIX)'
+fi
+
+AC_SUBST(MOZ_NATIVE_GRAPHITE2)
-+AC_SUBST(MOZ_GRAPHITE_CFLAGS)
-+AC_SUBST(MOZ_GRAPHITE_LIBS)
++AC_SUBST(MOZ_GRAPHITE2_CFLAGS)
++AC_SUBST(MOZ_GRAPHITE2_LIBS)
+
+dnl ========================================================
dnl Check for pixman and cairo
dnl ========================================================
-@@ -8379,18 +8412,6 @@ QCMS_LIBS='$(DEPTH)/gfx/qcms/$(LIB_PREFI
- AC_SUBST(QCMS_LIBS)
+diff --git content/base/src/moz.build content/base/src/moz.build
+index d4f6380..0ee55df 100644
+--- content/base/src/moz.build
++++ content/base/src/moz.build
+@@ -179,6 +179,9 @@ SOURCES += [
+ 'nsObjectLoadingContent.cpp',
+ ]
- dnl ========================================================
--dnl HarfBuzz
--dnl ========================================================
--MOZ_HARFBUZZ_LIBS='$(DEPTH)/gfx/harfbuzz/src/$(LIB_PREFIX)mozharfbuzz.$(LIB_SUFFIX)'
--AC_SUBST(MOZ_HARFBUZZ_LIBS)
--
--dnl ========================================================
--dnl SIL Graphite
--dnl ========================================================
--MOZ_GRAPHITE_LIBS='$(DEPTH)/gfx/graphite2/src/$(LIB_PREFIX)mozgraphite2.$(LIB_SUFFIX)'
--AC_SUBST(MOZ_GRAPHITE_LIBS)
--
--dnl ========================================================
- dnl OTS
- dnl ========================================================
- MOZ_OTS_LIBS='$(DEPTH)/gfx/ots/src/$(LIB_PREFIX)mozots.$(LIB_SUFFIX)'
-diff --git content/base/src/Makefile.in content/base/src/Makefile.in
-index a618096..596901a 100644
---- content/base/src/Makefile.in
-+++ content/base/src/Makefile.in
-@@ -5,6 +5,10 @@
-
- include $(topsrcdir)/config/rules.mk
-
-+ifdef MOZ_NATIVE_HARFBUZZ
-+nsContentUtils.$(OBJ_SUFFIX): CXXFLAGS+=$(MOZ_HARFBUZZ_CFLAGS)
-+endif
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ SOURCES['nsContentUtils.cpp'].flags += [CONFIG['MOZ_HARFBUZZ_CFLAGS']]
+
- # gcc requires -msse2 for this file since it uses SSE2 intrinsics. (See bug
- # 585538 comment 12.)
- ifneq (,$(INTEL_ARCHITECTURE))
+ EXTRA_COMPONENTS += [
+ 'contentAreaDropListener.js',
+ 'contentAreaDropListener.manifest',
diff --git gfx/moz.build gfx/moz.build
index 519aa46..6929751 100644
--- gfx/moz.build
@@ -174,7 +150,7 @@ index 45c36ae..79d32cf 100644
CFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS)
+ifdef MOZ_NATIVE_GRAPHITE2
-+CXXFLAGS += $(MOZ_GRAPHITE_CFLAGS)
++CXXFLAGS += $(MOZ_GRAPHITE2_CFLAGS)
+endif
+
+ifdef MOZ_NATIVE_HARFBUZZ
@@ -196,29 +172,6 @@ index f6b9f7c..60863f4 100644
+ifdef MOZ_NATIVE_HARFBUZZ
+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS)
+endif
-diff --git layout/media/Makefile.in layout/media/Makefile.in
-index 1cacbd7..a8cd156 100644
---- layout/media/Makefile.in
-+++ layout/media/Makefile.in
-@@ -18,10 +18,16 @@ endif
- SHARED_LIBRARY_LIBS = \
- $(MOZ_OTS_LIBS) \
- $(QCMS_LIBS) \
-- $(MOZ_GRAPHITE_LIBS) \
-- $(MOZ_HARFBUZZ_LIBS) \
- $(NULL)
-
-+ifndef MOZ_NATIVE_GRAPHITE2
-+SHARED_LIBRARY_LIBS += $(MOZ_GRAPHITE_LIBS)
-+endif
-+
-+ifndef MOZ_NATIVE_HARFBUZZ
-+SHARED_LIBRARY_LIBS += $(MOZ_HARFBUZZ_LIBS)
-+endif
-+
- ifdef MOZ_TREE_CAIRO
- SHARED_LIBRARY_LIBS += $(MOZ_CAIRO_LIBS)
- endif
diff --git netwerk/dns/Makefile.in netwerk/dns/Makefile.in
index 1cacbd7..f5d72bb 100644
--- netwerk/dns/Makefile.in
@@ -234,16 +187,16 @@ index 1cacbd7..f5d72bb 100644
# Generate the include file containing compact, static definitions
# for effective TLD data.
etld_data.inc: $(srcdir)/prepare_tlds.py $(srcdir)/effective_tld_names.dat
-diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in
+diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk
index 67f0db9..d42137a 100644
---- toolkit/library/Makefile.in
-+++ toolkit/library/Makefile.in
+--- toolkit/library/libxul.mk
++++ toolkit/library/libxul.mk
@@ -89,6 +89,14 @@ ifndef MOZ_TREE_PIXMAN
EXTRA_DSO_LDOPTS += $(MOZ_PIXMAN_LIBS)
endif
+ifdef MOZ_NATIVE_GRAPHITE2
-+EXTRA_DSO_LDOPTS += $(MOZ_GRAPHITE_LIBS)
++EXTRA_DSO_LDOPTS += $(MOZ_GRAPHITE2_LIBS)
+endif
+
+ifdef MOZ_NATIVE_HARFBUZZ
diff --git a/www/libxul/files/patch-bug851992 b/www/libxul/files/patch-bug851992
deleted file mode 100644
index 4c322188c47c..000000000000
--- a/www/libxul/files/patch-bug851992
+++ /dev/null
@@ -1,339 +0,0 @@
-diff --git a/config/Makefile.in b/config/Makefile.in
---- config/Makefile.in
-+++ config/Makefile.in
-@@ -97,16 +97,17 @@ export:: $(export-preqs)
- -DMOZ_TREE_PIXMAN=$(MOZ_TREE_PIXMAN) \
- -DMOZ_NATIVE_HUNSPELL=$(MOZ_NATIVE_HUNSPELL) \
- -DMOZ_NATIVE_BZ2=$(MOZ_NATIVE_BZ2) \
- -DMOZ_NATIVE_ZLIB=$(MOZ_NATIVE_ZLIB) \
- -DMOZ_NATIVE_PNG=$(MOZ_NATIVE_PNG) \
- -DMOZ_NATIVE_JPEG=$(MOZ_NATIVE_JPEG) \
- -DMOZ_NATIVE_LIBEVENT=$(MOZ_NATIVE_LIBEVENT) \
- -DMOZ_NATIVE_LIBVPX=$(MOZ_NATIVE_LIBVPX) \
-+ -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \
- $(srcdir)/system-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers
- $(INSTALL) system_wrappers $(DIST)
-
- GARBAGE_DIRS += system_wrappers
- endif
-
- ifdef WRAP_STL_INCLUDES
- ifdef GNU_CXX
-diff --git a/config/system-headers b/config/system-headers
---- config/system-headers
-+++ config/system-headers
-@@ -1125,8 +1125,19 @@ gst/video/video.h
- sys/msg.h
- sys/ipc.h
- sys/thr.h
- sys/user.h
- kvm.h
- spawn.h
- err.h
- xlocale.h
-+#if MOZ_NATIVE_ICU==1
-+unicode/locid.h
-+unicode/numsys.h
-+unicode/ucal.h
-+unicode/ucol.h
-+unicode/udat.h
-+unicode/udatpg.h
-+unicode/uenum.h
-+unicode/unum.h
-+unicode/ustring.h
-+#endif
-diff --git a/configure.in b/configure.in
---- configure.in
-+++ configure.in
-@@ -4134,16 +4134,32 @@ if test -n "$MOZ_NATIVE_FFI"; then
- PKG_CHECK_MODULES(MOZ_FFI, libffi > 3.0.9)
- else
- PKG_CHECK_MODULES(MOZ_FFI, libffi >= 3.0.9)
- fi
- MOZ_JS_STATIC_LIBS="$MOZ_JS_STATIC_LIBS $MOZ_FFI_LIBS"
- fi
-
- dnl ========================================================
-+dnl system icu support
-+dnl ========================================================
-+MOZ_NATIVE_ICU=
-+MOZ_ARG_WITH_BOOL(system-icu,
-+[ --with-system-icu
-+ Use system icu (located with pkgconfig)],
-+ MOZ_NATIVE_ICU=1)
-+
-+if test -n "$MOZ_NATIVE_ICU"; then
-+ PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 50.1)
-+ MOZ_JS_STATIC_LIBS="$MOZ_JS_STATIC_LIBS $MOZ_ICU_LIBS"
-+fi
-+
-+AC_SUBST(MOZ_NATIVE_ICU)
-+
-+dnl ========================================================
- dnl Java SDK support
- dnl ========================================================
-
- JAVA_BIN_PATH=
- MOZ_ARG_WITH_STRING(java-bin-path,
- [ --with-java-bin-path=dir
- Location of Java binaries (java, javac, jar)],
- JAVA_BIN_PATH=$withval)
-diff --git a/js/src/Makefile.in b/js/src/Makefile.in
---- js/src/Makefile.in.orig 2013-10-22 08:19:02.000000000 +0200
-+++ js/src/Makefile.in 2013-10-29 10:11:58.272605098 +0100
-@@ -237,10 +237,14 @@
- # ICU headers need to be available whether we build with the complete
- # Internationalization API or not - ICU stubs rely on them.
-
-+ifdef MOZ_NATIVE_ICU
-+LOCAL_INCLUDES += $(MOZ_ICU_CFLAGS)
-+else
- LOCAL_INCLUDES += \
- -I$(topsrcdir)/../../intl/icu/source/common \
- -I$(topsrcdir)/../../intl/icu/source/i18n \
- $(NULL)
-+endif
-
- ifdef ENABLE_INTL_API
-
-@@ -260,6 +264,7 @@
- ICU_MAKE = $(MAKE)
- endif
-
-+ifndef MOZ_NATIVE_ICU
- # - Build ICU as part of the "export" target, so things get built
- # in the right order.
- # - ICU requires GNU make according to its readme.html. pymake can't be used
-@@ -276,6 +281,7 @@
- $(call SUBMAKE,$@,intl/icu)
-
- endif
-+endif
-
- #
- # END ECMAScript Internationalization API
-@@ -413,7 +419,11 @@
- DEFINES += -DUSE_ZLIB
- endif
-
--SHARED_LIBRARY_LIBS += $(ICU_LIBS)
-+ifdef MOZ_NATIVE_ICU
-+EXTRA_DSO_LDOPTS += $(MOZ_ICU_LIBS)
-+else
-+SHARED_LIBRARY_LIBS += $(MOZ_ICU_LIBS)
-+endif
-
- # Prevent floating point errors caused by VC++ optimizations
- ifdef _MSC_VER
-diff --git a/js/src/config/Makefile.in b/js/src/config/Makefile.in
---- js/src/config/Makefile.in
-+++ js/src/config/Makefile.in
-@@ -54,16 +54,17 @@ include $(topsrcdir)/config/rules.mk
-
- HOST_CFLAGS += -DUNICODE -D_UNICODE
-
- ifdef WRAP_SYSTEM_INCLUDES
- export:: \
- $(call mkdir_deps,system_wrappers_js) \
- $(NULL)
- $(PYTHON) $(srcdir)/Preprocessor.py $(DEFINES) $(ACDEFINES) \
-+ -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \
- $(srcdir)/system-headers | $(PERL) $(srcdir)/make-system-wrappers.pl system_wrappers_js
- $(INSTALL) system_wrappers_js $(DIST)
-
- GARBAGE_DIRS += system_wrappers_js
- endif
-
- GARBAGE += $(srcdir)/*.pyc *.pyc
-
-diff --git a/js/src/config/system-headers b/js/src/config/system-headers
---- js/src/config/system-headers
-+++ js/src/config/system-headers
-@@ -1125,8 +1125,19 @@ gst/video/video.h
- sys/msg.h
- sys/ipc.h
- sys/thr.h
- sys/user.h
- kvm.h
- spawn.h
- err.h
- xlocale.h
-+#if MOZ_NATIVE_ICU==1
-+unicode/locid.h
-+unicode/numsys.h
-+unicode/ucal.h
-+unicode/ucol.h
-+unicode/udat.h
-+unicode/udatpg.h
-+unicode/uenum.h
-+unicode/unum.h
-+unicode/ustring.h
-+#endif
-diff --git a/js/src/configure.in b/js/src/configure.in
---- js/src/configure.in
-+++ js/src/configure.in
-@@ -4406,59 +4406,68 @@ if test "$ACCESSIBILITY" -a "$MOZ_ENABLE
- AC_DEFINE_UNQUOTED(ATK_MINOR_VERSION, $ATK_MINOR_VERSION)
- AC_DEFINE_UNQUOTED(ATK_REV_VERSION, $ATK_REV_VERSION)
- fi
-
-
- dnl ========================================================
- dnl ECMAScript Internationalization API Support (uses ICU)
- dnl ========================================================
-+ICU_LIB_NAMES=
-+MOZ_NATIVE_ICU=
-+MOZ_ARG_WITH_BOOL(system-icu,
-+[ --with-system-icu
-+ Use system icu (located with pkgconfig)],
-+ MOZ_NATIVE_ICU=1)
-+
-+if test -n "$MOZ_NATIVE_ICU"; then
-+ PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 50.1)
-+fi
-
- if test -n "$JS_STANDALONE"; then
- ENABLE_INTL_API=1
- fi
- MOZ_ARG_ENABLE_BOOL(intl-api,
- [ --enable-intl-api Enable ECMAScript Internationalization API (default=yes for standalone JS)],
- ENABLE_INTL_API=1,
- ENABLE_INTL_API= )
-
- dnl Settings for the implementation of the ECMAScript Internationalization API
- if test -n "$ENABLE_INTL_API"; then
- AC_DEFINE(ENABLE_INTL_API)
-- # We build ICU as a static library.
-- AC_DEFINE(U_STATIC_IMPLEMENTATION)
--
-- case "$OS_TARGET" in
-- WINNT)
-- ICU_LIB_NAMES="icuin icuuc icudt"
-- ;;
-- Darwin|Linux)
-- ICU_LIB_NAMES="icui18n icuuc icudata"
-- ;;
-- *)
-- AC_MSG_ERROR([ECMAScript Internationalization API is not yet supported on this platform])
-- esac
--
-- ICU_LIBS='$(call EXPAND_LIBNAME_PATH,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/lib)'
--else
-- ICU_LIB_NAMES=
-- ICU_LIBS=
-+
-+ if test -z "$MOZ_NATIVE_ICU"; then
-+ case "$OS_TARGET" in
-+ WINNT)
-+ ICU_LIB_NAMES="icuin icuuc icudt"
-+ ;;
-+ Darwin|Linux)
-+ ICU_LIB_NAMES="icui18n icuuc icudata"
-+ ;;
-+ *)
-+ AC_MSG_ERROR([ECMAScript Internationalization API is not yet supported on this platform])
-+ esac
-+ MOZ_ICU_LIBS='$(call EXPAND_LIBNAME_PATH,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/lib)'
-+ fi
- fi
-
- AC_SUBST(ENABLE_INTL_API)
- AC_SUBST(ICU_LIB_NAMES)
--AC_SUBST(ICU_LIBS)
--
--dnl Source files that use ICU should have control over which parts of the ICU
--dnl namespace they want to use.
--AC_DEFINE(U_USING_ICU_NAMESPACE,0)
--
-+AC_SUBST(MOZ_ICU_LIBS)
-+AC_SUBST(MOZ_NATIVE_ICU)
-
- dnl Settings for ICU
--if test -n "$ENABLE_INTL_API" ; then
-+if test -n "$ENABLE_INTL_API" -a -z "$MOZ_NATIVE_ICU"; then
-+ dnl We build ICU as a static library.
-+ AC_DEFINE(U_STATIC_IMPLEMENTATION)
-+
-+ dnl Source files that use ICU should have control over which parts of the ICU
-+ dnl namespace they want to use.
-+ AC_DEFINE(U_USING_ICU_NAMESPACE,0)
-+
- # Set ICU compile options
- ICU_CPPFLAGS=""
- # don't use icu namespace automatically in client code
- ICU_CPPFLAGS="$ICU_CPPFLAGS -DU_USING_ICU_NAMESPACE=0"
- # don't include obsolete header files
- ICU_CPPFLAGS="$ICU_CPPFLAGS -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1"
- # remove chunks of the library that we don't need (yet)
- ICU_CPPFLAGS="$ICU_CPPFLAGS -DUCONFIG_NO_LEGACY_CONVERSION"
-diff --git a/js/src/gdb/Makefile.in b/js/src/gdb/Makefile.in
---- js/src/gdb/Makefile.in
-+++ js/src/gdb/Makefile.in
-@@ -14,16 +14,20 @@ include $(DEPTH)/config/autoconf.mk
- # Building against js_static requires that we declare mfbt sybols "exported"
- # on its behalf.
- DEFINES += -DEXPORT_JS_API -DIMPL_MFBT
-
- LIBS = $(DEPTH)/$(LIB_PREFIX)js_static.$(LIB_SUFFIX) $(NSPR_LIBS) $(MOZ_ZLIB_LIBS)
-
- LOCAL_INCLUDES += -I$(topsrcdir) -I..
-
-+ifdef MOZ_NATIVE_ICU
-+EXTRA_LIBS += $(MOZ_ICU_LIBS)
-+endif
-+
- EXTRA_LIBS += $(MOZ_FFI_LIBS)
-
- # Place a GDB Python auto-load file next to the gdb-tests executable, both
- # in the build directory and in the dist/bin directory.
- PP_TARGETS += GDB_AUTOLOAD
- GDB_AUTOLOAD := gdb-tests-gdb.py.in
- GDB_AUTOLOAD_FLAGS := -Dtopsrcdir=$(abspath $(topsrcdir))
-
-diff --git a/js/src/jsapi-tests/Makefile.in b/js/src/jsapi-tests/Makefile.in
---- js/src/jsapi-tests/Makefile.in
-+++ js/src/jsapi-tests/Makefile.in
-@@ -15,16 +15,20 @@ DEFINES += -DEXPORT_JS_API
- # Building against js_static requires that we declare mfbt sybols "exported"
- # on its behalf.
- DEFINES += -DIMPL_MFBT
-
- LIBS = $(DEPTH)/$(LIB_PREFIX)js_static.$(LIB_SUFFIX) $(NSPR_LIBS) $(MOZ_ZLIB_LIBS)
-
- LOCAL_INCLUDES += -I$(topsrcdir) -I..
-
-+ifdef MOZ_NATIVE_ICU
-+EXTRA_LIBS += $(MOZ_ICU_LIBS)
-+endif
-+
- EXTRA_LIBS += $(MOZ_FFI_LIBS)
-
- ifdef QEMU_EXE
- MOZ_POST_PROGRAM_COMMAND = $(topsrcdir)/build/qemu-wrap --qemu $(QEMU_EXE) --libdir $(CROSS_LIB)
- endif
-
- # Place a GDB Python auto-load file next to the jsapi-tests executable in
- # the build directory.
-diff --git a/js/src/shell/Makefile.in b/js/src/shell/Makefile.in
---- js/src/shell/Makefile.in
-+++ js/src/shell/Makefile.in
-@@ -22,16 +22,19 @@ DEFINES += -DEXPORT_JS_API
- # Building against js_static requires that we declare mfbt sybols "exported"
- # on its behalf.
- DEFINES += -DIMPL_MFBT
-
- LIBS = $(NSPR_LIBS) $(EDITLINE_LIBS) $(DEPTH)/$(LIB_PREFIX)js_static.$(LIB_SUFFIX) $(MOZ_ZLIB_LIBS)
- ifdef MOZ_NATIVE_FFI
- EXTRA_LIBS += $(MOZ_FFI_LIBS)
- endif
-+ifdef MOZ_NATIVE_ICU
-+EXTRA_LIBS += $(MOZ_ICU_LIBS)
-+endif
-
- LOCAL_INCLUDES += -I$(topsrcdir) -I..
-
- ifeq ($(OS_ARCH),Darwin)
- ifeq ($(TARGET_CPU),x86_64)
- DARWIN_EXE_LDFLAGS += -pagezero_size 10000 -image_base 100000000
- endif
- endif
diff --git a/www/libxul/files/patch-bug876156 b/www/libxul/files/patch-bug876156
deleted file mode 100644
index 84ecf6170671..000000000000
--- a/www/libxul/files/patch-bug876156
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git mfbt/Atomics.h mfbt/Atomics.h
-index d79af6c..40b9336 100644
---- mfbt/Atomics.h
-+++ mfbt/Atomics.h
-@@ -35,7 +35,7 @@
- */
- # if !defined(__linux__) && !defined(__OpenBSD__) && \
- (__cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)) && \
-- __has_include(<atomic>)
-+ __has_include_next(<atomic>)
- # define MOZ_HAVE_CXX11_ATOMICS
- # endif
- /*
diff --git a/www/libxul/files/patch-bug878791 b/www/libxul/files/patch-bug878791
deleted file mode 100644
index d8a3612e1702..000000000000
--- a/www/libxul/files/patch-bug878791
+++ /dev/null
@@ -1,11 +0,0 @@
---- toolkit/components/osfile/osfile_unix_allthreads.jsm.orig 2013-05-11 21:19:53.000000000 +0200
-+++ toolkit/components/osfile/osfile_unix_allthreads.jsm 2013-06-02 17:15:05.000000000 +0200
-@@ -40,7 +40,7 @@ if (typeof Components != "undefined") {
- // Open libc
- let libc;
- let libc_candidates = [ "libSystem.B.dylib",
-- "libc.so.6",
-+ "libc.so.7",
- "libc.so" ];
- for (let i = 0; i < libc_candidates.length; ++i) {
- try {
diff --git a/www/libxul/files/patch-bug886181 b/www/libxul/files/patch-bug886181
deleted file mode 100644
index ed1c4df8348b..000000000000
--- a/www/libxul/files/patch-bug886181
+++ /dev/null
@@ -1,11 +0,0 @@
---- modules/libpref/src/init/all.js~
-+++ modules/libpref/src/init/all.js
-@@ -193,7 +193,7 @@ pref("media.webm.enabled", true);
- pref("media.dash.enabled", false);
- #endif
- #ifdef MOZ_GSTREAMER
--pref("media.gstreamer.enabled", false);
-+pref("media.gstreamer.enabled", true);
- #endif
- #ifdef MOZ_WEBRTC
- pref("media.navigator.enabled", true);
diff --git a/www/libxul/files/patch-bug889699 b/www/libxul/files/patch-bug889699
deleted file mode 100644
index fef97da4ac50..000000000000
--- a/www/libxul/files/patch-bug889699
+++ /dev/null
@@ -1,175 +0,0 @@
-commit 7eb5827
-Author: Edwin Flores <eflores@mozilla.com>
-Date: Sat Jul 20 12:03:08 2013 +1200
-
- Bug 889699 - Make gstreamer backend return more accurate results for canPlayType() r=alessandro.d
----
- content/media/gstreamer/GStreamerFormatHelper.cpp | 90 +++++++++++++++++------
- 1 file changed, 66 insertions(+), 24 deletions(-)
-
-diff --git content/media/gstreamer/GStreamerFormatHelper.cpp content/media/gstreamer/GStreamerFormatHelper.cpp
-index f05ff8f..39f1fdf 100644
---- content/media/gstreamer/GStreamerFormatHelper.cpp
-+++ content/media/gstreamer/GStreamerFormatHelper.cpp
-@@ -6,7 +6,7 @@
-
- #include "GStreamerFormatHelper.h"
- #include "nsCharSeparatedTokenizer.h"
--#include "nsXPCOMStrings.h"
-+#include "nsString.h"
- #include "GStreamerLoader.h"
-
- #define ENTRY_FORMAT(entry) entry[0]
-@@ -36,7 +36,7 @@ void GStreamerFormatHelper::Shutdown() {
- }
- }
-
--char const *const GStreamerFormatHelper::mContainers[6][2] = {
-+static char const *const sContainers[6][2] = {
- {"video/mp4", "video/quicktime"},
- {"video/quicktime", "video/quicktime"},
- {"audio/mp4", "audio/x-m4a"},
-@@ -45,7 +45,7 @@ char const *const GStreamerFormatHelper::mContainers[6][2] = {
- {"audio/mp3", "audio/mpeg, mpegversion=(int)1"},
- };
-
--char const *const GStreamerFormatHelper::mCodecs[9][2] = {
-+static char const *const sCodecs[9][2] = {
- {"avc1.42E01E", "video/x-h264"},
- {"avc1.42001E", "video/x-h264"},
- {"avc1.58A01E", "video/x-h264"},
-@@ -57,6 +57,15 @@ char const *const GStreamerFormatHelper::mCodecs[9][2] = {
- {"mp3", "audio/mpeg, mpegversion=(int)1"},
- };
-
-+static char const * const sDefaultCodecCaps[][2] = {
-+ {"video/mp4", "video/x-h264"},
-+ {"video/quicktime", "video/x-h264"},
-+ {"audio/mp4", "audio/mpeg, mpegversion=(int)4"},
-+ {"audio/x-m4a", "audio/mpeg, mpegversion=(int)4"},
-+ {"audio/mp3", "audio/mpeg, layer=(int)3"},
-+ {"audio/mpeg", "audio/mpeg, layer=(int)3"}
-+};
-+
- GStreamerFormatHelper::GStreamerFormatHelper()
- : mFactories(nullptr),
- mCookie(static_cast<uint32_t>(-1))
-@@ -66,15 +75,15 @@ GStreamerFormatHelper::GStreamerFormatHelper()
- }
-
- mSupportedContainerCaps = gst_caps_new_empty();
-- for (unsigned int i = 0; i < G_N_ELEMENTS(mContainers); i++) {
-- const char* capsString = mContainers[i][1];
-+ for (unsigned int i = 0; i < G_N_ELEMENTS(sContainers); i++) {
-+ const char* capsString = sContainers[i][1];
- GstCaps* caps = gst_caps_from_string(capsString);
- gst_caps_append(mSupportedContainerCaps, caps);
- }
-
- mSupportedCodecCaps = gst_caps_new_empty();
-- for (unsigned int i = 0; i < G_N_ELEMENTS(mCodecs); i++) {
-- const char* capsString = mCodecs[i][1];
-+ for (unsigned int i = 0; i < G_N_ELEMENTS(sCodecs); i++) {
-+ const char* capsString = sCodecs[i][1];
- GstCaps* caps = gst_caps_from_string(capsString);
- gst_caps_append(mSupportedCodecCaps, caps);
- }
-@@ -92,6 +101,41 @@ GStreamerFormatHelper::~GStreamerFormatHelper() {
- g_list_free(mFactories);
- }
-
-+static GstCaps *
-+GetContainerCapsFromMIMEType(const char *aType) {
-+ /* convert aMIMEType to gst container caps */
-+ const char* capsString = nullptr;
-+ for (uint32_t i = 0; i < G_N_ELEMENTS(sContainers); i++) {
-+ if (!strcmp(ENTRY_FORMAT(sContainers[i]), aType)) {
-+ capsString = ENTRY_CAPS(sContainers[i]);
-+ break;
-+ }
-+ }
-+
-+ if (!capsString) {
-+ /* we couldn't find any matching caps */
-+ return nullptr;
-+ }
-+
-+ return gst_caps_from_string(capsString);
-+}
-+
-+static GstCaps *
-+GetDefaultCapsFromMIMEType(const char *aType) {
-+ GstCaps *caps = GetContainerCapsFromMIMEType(aType);
-+
-+ for (uint32_t i = 0; i < G_N_ELEMENTS(sDefaultCodecCaps); i++) {
-+ if (!strcmp(sDefaultCodecCaps[i][0], aType)) {
-+ GstCaps *tmp = gst_caps_from_string(sDefaultCodecCaps[i][1]);
-+
-+ gst_caps_append(caps, tmp);
-+ return caps;
-+ }
-+ }
-+
-+ return nullptr;
-+}
-+
- bool GStreamerFormatHelper::CanHandleMediaType(const nsACString& aMIMEType,
- const nsAString* aCodecs) {
- if (!sLoadOK) {
-@@ -101,7 +145,15 @@ bool GStreamerFormatHelper::CanHandleMediaType(const nsACString& aMIMEType,
- const char *type;
- NS_CStringGetData(aMIMEType, &type, NULL);
-
-- GstCaps* caps = ConvertFormatsToCaps(type, aCodecs);
-+ GstCaps *caps;
-+ if (aCodecs && !aCodecs->IsEmpty()) {
-+ caps = ConvertFormatsToCaps(type, aCodecs);
-+ } else {
-+ // Get a minimal set of codec caps for this MIME type we should support so
-+ // that we don't overreport MIME types we are able to play.
-+ caps = GetDefaultCapsFromMIMEType(type);
-+ }
-+
- if (!caps) {
- return false;
- }
-@@ -118,21 +170,11 @@ GstCaps* GStreamerFormatHelper::ConvertFormatsToCaps(const char* aMIMEType,
-
- unsigned int i;
-
-- /* convert aMIMEType to gst container caps */
-- const char* capsString = nullptr;
-- for (i = 0; i < G_N_ELEMENTS(mContainers); i++) {
-- if (!strcmp(ENTRY_FORMAT(mContainers[i]), aMIMEType)) {
-- capsString = ENTRY_CAPS(mContainers[i]);
-- break;
-- }
-- }
--
-- if (!capsString) {
-- /* we couldn't find any matching caps */
-+ GstCaps *caps = GetContainerCapsFromMIMEType(aMIMEType);
-+ if (!caps) {
- return nullptr;
- }
-
-- GstCaps* caps = gst_caps_from_string(capsString);
- /* container only */
- if (!aCodecs) {
- return caps;
-@@ -141,11 +183,11 @@ GstCaps* GStreamerFormatHelper::ConvertFormatsToCaps(const char* aMIMEType,
- nsCharSeparatedTokenizer tokenizer(*aCodecs, ',');
- while (tokenizer.hasMoreTokens()) {
- const nsSubstring& codec = tokenizer.nextToken();
-- capsString = nullptr;
-+ const char *capsString = nullptr;
-
-- for (i = 0; i < G_N_ELEMENTS(mCodecs); i++) {
-- if (codec.EqualsASCII(ENTRY_FORMAT(mCodecs[i]))) {
-- capsString = ENTRY_CAPS(mCodecs[i]);
-+ for (i = 0; i < G_N_ELEMENTS(sCodecs); i++) {
-+ if (codec.EqualsASCII(ENTRY_FORMAT(sCodecs[i]))) {
-+ capsString = ENTRY_CAPS(sCodecs[i]);
- break;
- }
- }
diff --git a/www/libxul/files/patch-bug893397 b/www/libxul/files/patch-bug893397
deleted file mode 100644
index 906f712d58dd..000000000000
--- a/www/libxul/files/patch-bug893397
+++ /dev/null
@@ -1,201 +0,0 @@
-diff --git configure.in configure.in
-index 549ad06..2878d9f 100644
---- configure.in
-+++ configure.in
-@@ -8091,7 +8091,7 @@ case "$OS_TARGET" in
- NECKO_WIFI=1
- fi
- ;;
-- Darwin|SunOS|WINNT)
-+ Darwin|FreeBSD|SunOS|WINNT)
- NECKO_WIFI=1
- ;;
- Linux)
-diff --git netwerk/wifi/moz.build netwerk/wifi/moz.build
-index 07b01de..11706af 100644
---- netwerk/wifi/moz.build
-+++ netwerk/wifi/moz.build
-@@ -31,6 +31,10 @@ if CONFIG['OS_ARCH'] == 'Darwin':
- CPP_SOURCES += [
- 'nsWifiScannerMac.cpp',
- ]
-+elif CONFIG['OS_ARCH'] == 'FreeBSD':
-+ CPP_SOURCES += [
-+ 'nsWifiScannerFreeBSD.cpp',
-+ ]
- elif CONFIG['OS_ARCH'] == 'WINNT':
- CPP_SOURCES += [
- 'nsWifiScannerWin.cpp',
-diff --git netwerk/wifi/nsWifiScannerFreeBSD.cpp netwerk/wifi/nsWifiScannerFreeBSD.cpp
-new file mode 100644
-index 0000000..80d4cb6
---- /dev/null
-+++ netwerk/wifi/nsWifiScannerFreeBSD.cpp
-@@ -0,0 +1,167 @@
-+/* 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/. */
-+
-+// Developed by J.R. Oldroyd <fbsd@opal.com>, December 2012.
-+
-+// For FreeBSD we use the getifaddrs(3) to obtain the list of interfaces
-+// and then check for those with an 802.11 media type and able to return
-+// a list of stations. This is similar to ifconfig(8).
-+
-+#include <sys/types.h>
-+#include <sys/ioctl.h>
-+#include <sys/socket.h>
-+#include <net/if.h>
-+#include <net/if_media.h>
-+#include <net80211/ieee80211_ioctl.h>
-+
-+#include <ifaddrs.h>
-+#include <string.h>
-+#include <unistd.h>
-+
-+#include "nsWifiAccessPoint.h"
-+
-+using namespace mozilla;
-+
-+static nsresult
-+FreeBSDGetAccessPointData(nsCOMArray<nsWifiAccessPoint> &accessPoints)
-+{
-+ // get list of interfaces
-+ struct ifaddrs *ifal;
-+ if (getifaddrs(&ifal) < 0) {
-+ return NS_ERROR_FAILURE;
-+ }
-+
-+ accessPoints.Clear();
-+
-+ // loop through the interfaces
-+ nsresult rv = NS_ERROR_FAILURE;
-+ struct ifaddrs *ifa;
-+ for (ifa = ifal; ifa; ifa = ifa->ifa_next) {
-+ // limit to one interface per address
-+ if (ifa->ifa_addr->sa_family != AF_LINK) {
-+ continue;
-+ }
-+
-+ // store interface name in socket structure
-+ struct ifreq ifr;
-+ memset(&ifr, 0, sizeof(ifr));
-+ strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name));
-+ ifr.ifr_addr.sa_family = AF_LOCAL;
-+
-+ // open socket to interface
-+ int s = socket(ifr.ifr_addr.sa_family, SOCK_DGRAM, 0);
-+ if (s < 0) {
-+ continue;
-+ }
-+
-+ // clear interface media structure
-+ struct ifmediareq ifmr;
-+ memset(&ifmr, 0, sizeof(ifmr));
-+ strncpy(ifmr.ifm_name, ifa->ifa_name, sizeof(ifmr.ifm_name));
-+
-+ // get interface media information
-+ if (ioctl(s, SIOCGIFMEDIA, (caddr_t)&ifmr) < 0) {
-+ close(s);
-+ continue;
-+ }
-+
-+ // check interface is a WiFi interface
-+ if (IFM_TYPE(ifmr.ifm_active) != IFM_IEEE80211) {
-+ close(s);
-+ continue;
-+ }
-+
-+ // perform WiFi scan
-+ struct ieee80211req i802r;
-+ char iscanbuf[32*1024];
-+ memset(&i802r, 0, sizeof(i802r));
-+ strncpy(i802r.i_name, ifa->ifa_name, sizeof(i802r.i_name));
-+ i802r.i_type = IEEE80211_IOC_SCAN_RESULTS;
-+ i802r.i_data = iscanbuf;
-+ i802r.i_len = sizeof(iscanbuf);
-+ if (ioctl(s, SIOCG80211, &i802r) < 0) {
-+ close(s);
-+ continue;
-+ }
-+
-+ // close socket
-+ close(s);
-+
-+ // loop through WiFi networks and build geoloc-lookup structure
-+ char *vsr = (char *) i802r.i_data;
-+ unsigned len = i802r.i_len;
-+ while (len >= sizeof(struct ieee80211req_scan_result)) {
-+ struct ieee80211req_scan_result *isr =
-+ (struct ieee80211req_scan_result *) vsr;
-+
-+ // determine size of this entry
-+ char *id;
-+ int idlen;
-+ if (isr->isr_meshid_len) {
-+ id = vsr + isr->isr_ie_off + isr->isr_ssid_len;
-+ idlen = isr->isr_meshid_len;
-+ } else {
-+ id = vsr + isr->isr_ie_off;
-+ idlen = isr->isr_ssid_len;
-+ }
-+
-+ // copy network data
-+ char ssid[IEEE80211_NWID_LEN+1];
-+ strncpy(ssid, id, idlen);
-+ ssid[idlen] = '\0';
-+ nsWifiAccessPoint *ap = new nsWifiAccessPoint();
-+ ap->setSSID(ssid, strlen(ssid));
-+ ap->setMac(isr->isr_bssid);
-+ ap->setSignal(isr->isr_rssi);
-+ accessPoints.AppendObject(ap);
-+ rv = NS_OK;
-+
-+ // log the data
-+ LOG(( "FreeBSD access point: "
-+ "SSID: %s, MAC: %02x-%02x-%02x-%02x-%02x-%02x, "
-+ "Strength: %d, Channel: %dMHz\n",
-+ ssid, isr->isr_bssid[0], isr->isr_bssid[1], isr->isr_bssid[2],
-+ isr->isr_bssid[3], isr->isr_bssid[4], isr->isr_bssid[5],
-+ isr->isr_rssi, isr->isr_freq));
-+
-+ // increment pointers
-+ len -= isr->isr_len;
-+ vsr += isr->isr_len;
-+ }
-+ }
-+
-+ freeifaddrs(ifal);
-+
-+ return rv;
-+}
-+
-+nsresult
-+nsWifiMonitor::DoScan()
-+{
-+ // Regularly get the access point data.
-+
-+ nsCOMArray<nsWifiAccessPoint> lastAccessPoints;
-+ nsCOMArray<nsWifiAccessPoint> accessPoints;
-+
-+ do {
-+ nsresult rv = FreeBSDGetAccessPointData(accessPoints);
-+ if (NS_FAILED(rv))
-+ return rv;
-+
-+ bool accessPointsChanged = !AccessPointsEqual(accessPoints, lastAccessPoints);
-+ ReplaceArray(lastAccessPoints, accessPoints);
-+
-+ rv = CallWifiListeners(lastAccessPoints, accessPointsChanged);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ // wait for some reasonable amount of time. pref?
-+ LOG(("waiting on monitor\n"));
-+
-+ ReentrantMonitorAutoEnter mon(mReentrantMonitor);
-+ mon.Wait(PR_SecondsToInterval(60));
-+ }
-+ while (mKeepGoing);
-+
-+ return NS_OK;
-+}
diff --git a/www/libxul/files/patch-bug910875 b/www/libxul/files/patch-bug910875
deleted file mode 100644
index 4f1d5a521e84..000000000000
--- a/www/libxul/files/patch-bug910875
+++ /dev/null
@@ -1,102 +0,0 @@
-diff --git media/webrtc/trunk/webrtc/modules/audio_device/audio_device_impl.cc media/webrtc/trunk/webrtc/modules/audio_device/audio_device_impl.cc
-index f231b1e..6087696 100644
---- media/webrtc/trunk/webrtc/modules/audio_device/audio_device_impl.cc
-+++ media/webrtc/trunk/webrtc/modules/audio_device/audio_device_impl.cc
-@@ -16,7 +16,9 @@
- #include <assert.h>
- #include <string.h>
-
--#if defined(_WIN32)
-+#if defined(WEBRTC_DUMMY_AUDIO_BUILD)
-+// do not include platform specific headers
-+#elif defined(_WIN32)
- #include "audio_device_utility_win.h"
- #include "audio_device_wave_win.h"
- #if defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD)
-@@ -32,14 +34,8 @@
- #include <stdlib.h>
- #include "audio_device_utility_android.h"
- #include "audio_device_jni_android.h"
--#elif defined(WEBRTC_LINUX)
-+#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
- #include "audio_device_utility_linux.h"
-- #if defined(LINUX_ALSA)
-- #include "audio_device_alsa_linux.h"
-- #endif
-- #if defined(LINUX_PULSE)
-- #include "audio_device_pulse_linux.h"
-- #endif
- #elif defined(WEBRTC_IOS)
- #include "audio_device_utility_ios.h"
- #include "audio_device_ios.h"
-@@ -47,6 +43,12 @@
- #include "audio_device_utility_mac.h"
- #include "audio_device_mac.h"
- #endif
-+#if defined(LINUX_ALSA)
-+ #include "audio_device_alsa_linux.h"
-+#endif
-+#if defined(LINUX_PULSE)
-+ #include "audio_device_pulse_linux.h"
-+#endif
- #include "audio_device_dummy.h"
- #include "audio_device_utility_dummy.h"
- #include "critical_section_wrapper.h"
-@@ -161,7 +163,7 @@ WebRtc_Word32 AudioDeviceModuleImpl::Che
- #elif defined(WEBRTC_ANDROID)
- platform = kPlatformAndroid;
- WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "current platform is ANDROID");
--#elif defined(WEBRTC_LINUX)
-+#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
- platform = kPlatformLinux;
- WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "current platform is LINUX");
- #elif defined(WEBRTC_IOS)
-@@ -309,7 +311,7 @@ int32_t AudioDeviceModuleImpl::CreatePlatformSpecificObjects()
-
- // Create the *Linux* implementation of the Audio Device
- //
--#elif defined(WEBRTC_LINUX)
-+#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
- if ((audioLayer == kLinuxPulseAudio) || (audioLayer == kPlatformDefaultAudio))
- {
- #if defined(LINUX_PULSE)
-@@ -355,7 +357,7 @@ int32_t AudioDeviceModuleImpl::CreatePlatformSpecificObjects()
- //
- ptrAudioDeviceUtility = new AudioDeviceUtilityLinux(Id());
- }
--#endif // #if defined(WEBRTC_LINUX)
-+#endif // #if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
-
- // Create the *iPhone* implementation of the Audio Device
- //
-diff --git media/webrtc/trunk/webrtc/modules/audio_device/test/audio_device_test_api.cc media/webrtc/trunk/webrtc/modules/audio_device/test/audio_device_test_api.cc
-index defd7f8..906c4a2 100644
---- media/webrtc/trunk/webrtc/modules/audio_device/test/audio_device_test_api.cc
-+++ media/webrtc/trunk/webrtc/modules/audio_device/test/audio_device_test_api.cc
-@@ -197,7 +197,7 @@ class AudioDeviceAPITest: public testing::Test {
- // Create default implementation instance
- EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
- kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL);
--#elif defined(WEBRTC_LINUX)
-+#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
- EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
- kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL);
- EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create(
-@@ -1690,7 +1690,7 @@ TEST_F(AudioDeviceAPITest, CPULoad) {
-
- // TODO(kjellander): Fix flakiness causing failures on Windows.
- // TODO(phoglund): Fix flakiness causing failures on Linux.
--#if !defined(_WIN32) && !defined(WEBRTC_LINUX)
-+#if !defined(_WIN32) && !defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
- TEST_F(AudioDeviceAPITest, StartAndStopRawOutputFileRecording) {
- // NOTE: this API is better tested in a functional test
- CheckInitialPlayoutStates();
-@@ -1759,7 +1759,7 @@ TEST_F(AudioDeviceAPITest, StartAndStopRawInputFileRecording) {
- // - size of raw_input_not_recording.pcm shall be 0
- // - size of raw_input_not_recording.pcm shall be > 0
- }
--#endif // !WIN32 && !WEBRTC_LINUX
-+#endif // !WIN32 && !WEBRTC_LINUX && !defined(WEBRTC_BSD)
-
- TEST_F(AudioDeviceAPITest, RecordingSampleRate) {
- uint32_t sampleRate(0);
diff --git a/www/libxul/files/patch-bug916216 b/www/libxul/files/patch-bug916216
deleted file mode 100644
index ca82967fa78c..000000000000
--- a/www/libxul/files/patch-bug916216
+++ /dev/null
@@ -1,39 +0,0 @@
---- media/webrtc/trunk/build/build_config.h~
-+++ media/webrtc/trunk/build/build_config.h
-@@ -37,9 +37,15 @@
- #elif defined(_WIN32)
- #define OS_WIN 1
- #define TOOLKIT_VIEWS 1
--#elif defined(__FreeBSD__)
-+#elif defined(__DragonFly__)
-+#define OS_DRAGONFLY 1
-+#define TOOLKIT_GTK
-+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
- #define OS_FREEBSD 1
- #define TOOLKIT_GTK
-+#elif defined(__NetBSD__)
-+#define OS_NETBSD 1
-+#define TOOLKIT_GTK
- #elif defined(__OpenBSD__)
- #define OS_OPENBSD 1
- #define TOOLKIT_GTK
-@@ -56,15 +62,15 @@
-
- // For access to standard BSD features, use OS_BSD instead of a
- // more specific macro.
--#if defined(OS_FREEBSD) || defined(OS_OPENBSD)
-+#if defined(OS_DRAGONFLY) || defined(OS_FREEBSD) \
-+ || defined(OS_NETBSD) || defined(OS_OPENBSD)
- #define OS_BSD 1
- #endif
-
- // For access to standard POSIXish features, use OS_POSIX instead of a
- // more specific macro.
--#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_FREEBSD) || \
-- defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(OS_ANDROID) || \
-- defined(OS_NACL)
-+#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
-+ defined(OS_SOLARIS) || defined(OS_ANDROID) || defined(OS_NACL)
- #define OS_POSIX 1
- #endif
-
diff --git a/www/libxul/files/patch-bug916589 b/www/libxul/files/patch-bug916589
deleted file mode 100644
index c6c6c58c9175..000000000000
--- a/www/libxul/files/patch-bug916589
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
-index 5b50785..7cf47d5 100644
---- media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
-+++ media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
-@@ -33,9 +33,10 @@
- #ifndef _SYS_QUEUE_H_
- #define _SYS_QUEUE_H_
-
--#if !defined(__FreeBSD__) && !defined(DARWIN)
- #include <stddef.h>
--#define __offsetof offsetof
-+
-+#ifndef offsetof
-+#define offsetof(type, field) ((size_t)(&((type *)0)->field))
- #endif
-
- #define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
-@@ -43,8 +44,6 @@
- (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
- (var) = (tvar))
-
--// #define __offsetof(type, field) ((size_t)(&((type *)0)->field))
--
- /*
- * This file defines four types of data structures: singly-linked lists,
- * singly-linked tail queues, lists and tail queues.
-@@ -285,7 +284,7 @@ struct { \
- (STAILQ_EMPTY((head)) ? \
- NULL : \
- ((struct type *) \
-- ((char *)((head)->stqh_last) - __offsetof(struct type, field))))
-+ ((char *)((head)->stqh_last) - offsetof(struct type, field))))
-
- #define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
-
diff --git a/www/libxul/files/patch-bug918177 b/www/libxul/files/patch-bug918177
deleted file mode 100644
index 76dd34ca040a..000000000000
--- a/www/libxul/files/patch-bug918177
+++ /dev/null
@@ -1,36 +0,0 @@
-diff --git config/stl-headers config/stl-headers
-index c057d8e..dc7f6f0 100644
---- config/stl-headers
-+++ config/stl-headers
-@@ -21,6 +21,7 @@ algorithm
- atomic
- deque
- ios
-+iosfwd
- iostream
- iterator
- limits
-diff --git config/system-headers config/system-headers
-index d31c94e..570c82a 100644
---- config/system-headers
-+++ config/system-headers
-@@ -469,6 +469,7 @@ IOKit/IOMessage.h
- IOKit/pwr_mgt/IOPMLib.h
- iomanip
- ios
-+iosfwd
- iostream
- iostream.h
- iterator
-diff --git js/src/config/system-headers js/src/config/system-headers
-index d31c94e..570c82a 100644
---- js/src/config/system-headers
-+++ js/src/config/system-headers
-@@ -469,6 +469,7 @@ IOKit/IOMessage.h
- IOKit/pwr_mgt/IOPMLib.h
- iomanip
- ios
-+iosfwd
- iostream
- iostream.h
- iterator
diff --git a/www/libxul/files/patch-bug938730 b/www/libxul/files/patch-bug938730
deleted file mode 100644
index ac444b228ae6..000000000000
--- a/www/libxul/files/patch-bug938730
+++ /dev/null
@@ -1,35 +0,0 @@
-commit 1961aa2
-Author: Kai Engert <kaie@kuix.de>
-Date: Wed Nov 20 20:25:12 2013 +0100
-
- Bug 938730 - avoid mix of memory allocators (crashes) when using system sqlite, r=asuth
----
- storage/src/Makefile.in | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git storage/src/Makefile.in storage/src/Makefile.in
-index 9418640..c7391ed 100644
---- storage/src/Makefile.in
-+++ storage/src/Makefile.in
-@@ -6,14 +6,21 @@
- # Don't use the jemalloc allocator on Android, because we can't guarantee
- # that Gecko will configure sqlite before it is first used (bug 730495).
- #
-+# Don't use the jemalloc allocator when using system sqlite. Linked in libraries
-+# (such as NSS) might trigger an initialization of sqlite and allocation
-+# of memory using the default allocator, prior to the storage service
-+# registering its allocator, causing memory management failures (bug 938730).
-+#
- # Note: On Windows our sqlite build assumes we use jemalloc. If you disable
- # MOZ_STORAGE_MEMORY on Windows, you will also need to change the "ifdef
- # MOZ_MEMORY" options in db/sqlite3/src/Makefile.in.
- ifdef MOZ_MEMORY
-+ifndef MOZ_NATIVE_SQLITE
- ifneq ($(OS_TARGET), Android)
- DEFINES += -DMOZ_STORAGE_MEMORY
- endif
- endif
-+endif
-
- # For nsDependentJSString
- LOCAL_INCLUDES = \
diff --git a/www/libxul/files/patch-bug945046 b/www/libxul/files/patch-bug945046
deleted file mode 100644
index 2da32f78cd4c..000000000000
--- a/www/libxul/files/patch-bug945046
+++ /dev/null
@@ -1,130 +0,0 @@
-diff --git config/system-headers config/system-headers
-index 432cba6..18a9627 100644
---- config/system-headers
-+++ config/system-headers
-@@ -1157,3 +1157,4 @@ unicode/uenum.h
- unicode/unum.h
- unicode/ustring.h
- #endif
-+libutil.h
-diff --git js/src/config/system-headers js/src/config/system-headers
-index 432cba6..18a9627 100644
---- js/src/config/system-headers
-+++ js/src/config/system-headers
-@@ -1157,3 +1157,4 @@ unicode/uenum.h
- unicode/unum.h
- unicode/ustring.h
- #endif
-+libutil.h
-diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in
-index 9975621..b4b037d 100644
---- toolkit/library/Makefile.in
-+++ toolkit/library/Makefile.in
-@@ -289,6 +289,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,kvm)
- EXTRA_DSO_LDOPTS += -Wl,--warn-unresolved-symbols
- endif
-
-+ifeq ($(OS_ARCH),FreeBSD)
-+OS_LIBS += $(call EXPAND_LIBNAME,util)
-+endif
-+
- ifeq ($(OS_ARCH),WINNT)
- OS_LIBS += $(call EXPAND_LIBNAME,shell32 ole32 version winspool comdlg32 imm32 msimg32 shlwapi psapi ws2_32 dbghelp rasapi32 rasdlg iphlpapi uxtheme setupapi secur32 sensorsapi portabledeviceguids windowscodecs wininet wbemuuid)
- ifdef ACCESSIBILITY
-diff --git xpcom/base/nsMemoryReporterManager.cpp xpcom/base/nsMemoryReporterManager.cpp
-index b8147c8..0ffb34e 100644
---- xpcom/base/nsMemoryReporterManager.cpp
-+++ xpcom/base/nsMemoryReporterManager.cpp
-@@ -153,6 +153,43 @@ static nsresult GetResidentFast(int64_t
- return GetResident(n);
- }
-
-+#ifdef __FreeBSD__
-+#include <libutil.h>
-+
-+static nsresult
-+GetKinfoVmentrySelf(int64_t* prss)
-+{
-+ int cnt;
-+ struct kinfo_vmentry *vmmap, *kve;
-+ if ((vmmap = kinfo_getvmmap(getpid(), &cnt)) == NULL)
-+ return NS_ERROR_FAILURE;
-+
-+ if (prss)
-+ *prss = 0;
-+
-+ for (int i = 0; i < cnt; i++) {
-+ kve = &vmmap[i];
-+ if (prss)
-+ *prss += kve->kve_private_resident;
-+ }
-+
-+ free(vmmap);
-+ return NS_OK;
-+}
-+
-+#define HAVE_PRIVATE_REPORTER
-+static nsresult
-+GetPrivate(int64_t* aN)
-+{
-+ int64_t priv;
-+ nsresult rv = GetKinfoVmentrySelf(&priv);
-+ if (NS_SUCCEEDED(rv))
-+ *aN = priv * getpagesize();
-+
-+ return NS_OK;
-+}
-+#endif // FreeBSD
-+
- #elif defined(SOLARIS)
-
- #include <procfs.h>
-@@ -327,6 +364,24 @@ static nsresult GetResidentFast(int64_t
- }
-
- #define HAVE_PRIVATE_REPORTER
-+static nsresult
-+GetPrivate(int64_t* aN)
-+{
-+ PROCESS_MEMORY_COUNTERS_EX pmcex;
-+ pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
-+
-+ if (!GetProcessMemoryInfo(
-+ GetCurrentProcess(),
-+ (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
-+ return NS_ERROR_FAILURE;
-+ }
-+
-+ *aN = pmcex.PrivateUsage;
-+ return NS_OK;
-+}
-+#endif // XP_<PLATFORM>
-+
-+#ifdef HAVE_PRIVATE_REPORTER
- class PrivateReporter MOZ_FINAL : public MemoryReporterBase
- {
- public:
-@@ -339,21 +394,10 @@ public:
-
- NS_IMETHOD GetAmount(int64_t *aAmount)
- {
-- PROCESS_MEMORY_COUNTERS_EX pmcex;
-- pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
--
-- if (!GetProcessMemoryInfo(
-- GetCurrentProcess(),
-- (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
-- return NS_ERROR_FAILURE;
-- }
--
-- *aAmount = pmcex.PrivateUsage;
-- return NS_OK;
-+ return GetPrivate(aAmount);
- }
- };
--
--#endif // XP_<PLATFORM>
-+#endif
-
- #ifdef HAVE_VSIZE_AND_RESIDENT_REPORTERS
- class VsizeReporter MOZ_FINAL : public MemoryReporterBase
diff --git a/www/libxul/files/patch-bug946560 b/www/libxul/files/patch-bug946560
deleted file mode 100644
index e2560bd0d0c3..000000000000
--- a/www/libxul/files/patch-bug946560
+++ /dev/null
@@ -1,44 +0,0 @@
-diff --git xpcom/base/nsMemoryInfoDumper.cpp xpcom/base/nsMemoryInfoDumper.cpp
-index 0b2f78c..d857374 100644
---- xpcom/base/nsMemoryInfoDumper.cpp
-+++ xpcom/base/nsMemoryInfoDumper.cpp
-@@ -30,7 +30,7 @@
- #include <unistd.h>
- #endif
-
--#ifdef XP_LINUX
-+#if defined(XP_LINUX) || defined(__FreeBSD__)
- #include <fcntl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
-@@ -109,7 +109,7 @@ private:
-
- } // anonymous namespace
-
--#ifdef XP_LINUX // {
-+#if defined(XP_LINUX) || defined(__FreeBSD__) // {
- namespace {
-
- /*
-@@ -548,7 +548,7 @@ nsMemoryInfoDumper::~nsMemoryInfoDumper(
- /* static */ void
- nsMemoryInfoDumper::Initialize()
- {
--#ifdef XP_LINUX
-+#if defined(XP_LINUX) || defined(__FreeBSD__)
- SignalPipeWatcher::Create();
- FifoWatcher::MaybeCreate();
- #endif
-diff --git xpcom/base/nsMemoryReporterManager.cpp xpcom/base/nsMemoryReporterManager.cpp
-index 8c65665..8f6d0e9 100644
---- xpcom/base/nsMemoryReporterManager.cpp
-+++ xpcom/base/nsMemoryReporterManager.cpp
-@@ -824,7 +824,7 @@ nsMemoryReporterManager::Init()
- RegisterReporter(new mozilla::dmd::DMDReporter);
- #endif
-
--#if defined(XP_LINUX)
-+#if defined(XP_LINUX) || defined(__FreeBSD__)
- nsMemoryInfoDumper::Initialize();
- #endif
-
diff --git a/www/libxul/files/patch-bug961264 b/www/libxul/files/patch-bug961264
index 85bc94d001ff..94fd84ce5cb6 100644
--- a/www/libxul/files/patch-bug961264
+++ b/www/libxul/files/patch-bug961264
@@ -142,9 +142,9 @@ diff --git js/src/configure.in js/src/configure.in
index bddd46d..d4b522e 100644
--- js/src/configure.in
+++ js/src/configure.in
-@@ -2348,116 +2348,13 @@ fi
+@@ -2077,116 +2077,13 @@ AC_LANG_CPLUSPLUS
- AC_LANG_C
+ MOZ_CXX11
-dnl Check for .hidden assembler directive and visibility attribute.
-dnl Borrowed from glibc configure.in
@@ -249,7 +249,7 @@ index bddd46d..d4b522e 100644
- ])
- if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \
- "$ac_cv_have_visibility_class_bug" = "no"; then
-- VISIBILITY_FLAGS='-I$(DIST)/system_wrappers_js -include $(topsrcdir)/config/gcc_hidden.h'
+- VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
- WRAP_SYSTEM_INCLUDES=1
- else
- VISIBILITY_FLAGS='-fvisibility=hidden'
@@ -259,7 +259,7 @@ index bddd46d..d4b522e 100644
- fi # have visibility(hidden) attribute
+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
-+ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers_js -include $(topsrcdir)/config/gcc_hidden.h'
++ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
+ WRAP_SYSTEM_INCLUDES=1
fi # GNU_CC
diff --git a/www/libxul/files/patch-bug961816 b/www/libxul/files/patch-bug961816
deleted file mode 100644
index 322e73f952f6..000000000000
--- a/www/libxul/files/patch-bug961816
+++ /dev/null
@@ -1,48 +0,0 @@
-diff --git config/system-headers config/system-headers
-index 8803150..ae38d68 100644
---- config/system-headers
-+++ config/system-headers
-@@ -1158,3 +1158,4 @@ unicode/unum.h
- unicode/ustring.h
- #endif
- libutil.h
-+unwind.h
-diff --git configure.in configure.in
-index f452a5e..a1ebbcc 100644
---- configure.in
-+++ configure.in
-@@ -7455,7 +7455,10 @@ dnl ========================================================
- dnl = Support for gcc stack unwinding (from gcc 3.3)
- dnl ========================================================
- if test -z "$SKIP_LIBRARY_CHECKS"; then
-+ AC_LANG_SAVE
-+ AC_LANG_CPLUSPLUS
- MOZ_CHECK_HEADER(unwind.h, AC_CHECK_FUNCS(_Unwind_Backtrace))
-+ AC_LANG_RESTORE
- fi
-
- dnl ========================================================
-diff --git config/system-headers config/system-headers
-index 8803150..ae38d68 100644
---- js/src/config/system-headers
-+++ js/src/config/system-headers
-@@ -1158,3 +1158,4 @@ unicode/unum.h
- unicode/ustring.h
- #endif
- libutil.h
-+unwind.h
-diff --git configure.in configure.in
-index f452a5e..a1ebbcc 100644
---- js/src/configure.in
-+++ js/src/configure.in
-@@ -7455,7 +7455,10 @@ dnl ========================================================
- dnl = Support for gcc stack unwinding (from gcc 3.3)
- dnl ========================================================
- if test -z "$SKIP_LIBRARY_CHECKS"; then
-+ AC_LANG_SAVE
-+ AC_LANG_CPLUSPLUS
- MOZ_CHECK_HEADER(unwind.h, AC_CHECK_FUNCS(_Unwind_Backtrace))
-+ AC_LANG_RESTORE
- fi
-
- dnl ========================================================
diff --git a/www/libxul/files/patch-bug962345 b/www/libxul/files/patch-bug962345
deleted file mode 100644
index a465c93a51d1..000000000000
--- a/www/libxul/files/patch-bug962345
+++ /dev/null
@@ -1,18 +0,0 @@
-diff --git config/system-headers config/system-headers
-index 8803150..ae38d68 100644
---- config/system-headers
-+++ config/system-headers
-@@ -1159,3 +1159,4 @@ unicode/ustring.h
- #endif
- libutil.h
- unwind.h
-+cairo-qt.h
-diff --git config/system-headers config/system-headers
-index 8803150..ae38d68 100644
---- js/src/config/system-headers
-+++ js/src/config/system-headers
-@@ -1159,3 +1159,4 @@ unicode/ustring.h
- #endif
- libutil.h
- unwind.h
-+cairo-qt.h
diff --git a/www/libxul/files/patch-bug975634 b/www/libxul/files/patch-bug975634
deleted file mode 100644
index d41e69e83892..000000000000
--- a/www/libxul/files/patch-bug975634
+++ /dev/null
@@ -1,63 +0,0 @@
-diff --git configure.in configure.in
-index 0d9236a..0447104 100644
---- configure.in
-+++ configure.in
-@@ -9034,6 +9034,20 @@ AC_SUBST(MOZ_FOLD_LIBS)
- AC_SUBST(MOZ_ENABLE_SZIP)
- AC_SUBST(MOZ_SZIP_FLAGS)
-
-+AC_MSG_CHECKING([for posix_fadvise])
-+AC_TRY_LINK([#define _XOPEN_SOURCE 600
-+ #include <fcntl.h>],
-+ [posix_fadvise(0, 0, 0, 0);],
-+ [ac_cv___posix_fadvise=true],
-+ [ac_cv___posix_fadvise=false])
-+
-+if test "$ac_cv___posix_fadvise" = true ; then
-+ AC_DEFINE(HAVE_POSIX_FADVISE)
-+ AC_MSG_RESULT(yes)
-+else
-+ AC_MSG_RESULT(no)
-+fi
-+
- AC_MSG_CHECKING([for posix_fallocate])
- AC_TRY_LINK([#define _XOPEN_SOURCE 600
- #include <fcntl.h>],
-diff --git js/src/configure.in js/src/configure.in
-index da9767c..352ba14 100644
---- js/src/configure.in
-+++ js/src/configure.in
-@@ -4025,6 +4025,20 @@ AC_SUBST(CXX_VERSION)
- AC_SUBST(MSMANIFEST_TOOL)
- AC_SUBST(MOZ_LINKER)
-
-+AC_MSG_CHECKING([for posix_fadvise])
-+AC_TRY_LINK([#define _XOPEN_SOURCE 600
-+ #include <fcntl.h>],
-+ [posix_fadvise(0, 0, 0, 0);],
-+ [ac_cv___posix_fadvise=true],
-+ [ac_cv___posix_fadvise=false])
-+
-+if test "$ac_cv___posix_fadvise" = true ; then
-+ AC_DEFINE(HAVE_POSIX_FADVISE)
-+ AC_MSG_RESULT(yes)
-+else
-+ AC_MSG_RESULT(no)
-+fi
-+
- AC_MSG_CHECKING([for posix_fallocate])
- AC_TRY_LINK([#define _XOPEN_SOURCE 600
- #include <fcntl.h>],
-diff --git xpcom/io/nsLocalFileUnix.cpp xpcom/io/nsLocalFileUnix.cpp
-index bacf06c..0e46e4a 100644
---- xpcom/io/nsLocalFileUnix.cpp
-+++ xpcom/io/nsLocalFileUnix.cpp
-@@ -382,7 +382,7 @@ nsLocalFile::OpenNSPRFileDesc(int32_t flags, int32_t mode, PRFileDesc **_retval)
- PR_Delete(mPath.get());
- }
-
--#if defined(LINUX) && !defined(ANDROID)
-+#if defined(HAVE_POSIX_FADVISE)
- if (flags & OS_READAHEAD) {
- posix_fadvise(PR_FileDesc2NativeHandle(*_retval), 0, 0,
- POSIX_FADV_SEQUENTIAL);
diff --git a/www/libxul/files/patch-bug977457 b/www/libxul/files/patch-bug977457
deleted file mode 100644
index cf57b6b1b809..000000000000
--- a/www/libxul/files/patch-bug977457
+++ /dev/null
@@ -1,27 +0,0 @@
-diff --git xpcom/base/nsStackWalk.cpp xpcom/base/nsStackWalk.cpp
-index bb0e15b..7641267 100644
---- xpcom/base/nsStackWalk.cpp
-+++ xpcom/base/nsStackWalk.cpp
-@@ -23,6 +23,12 @@ struct CriticalAddress {
- };
- static CriticalAddress gCriticalAddress;
-
-+// for _Unwind_Backtrace from libcxxrt or libunwind
-+// cxxabi.h from libcxxrt implicitly includes unwind.h first
-+#if defined(HAVE__UNWIND_BACKTRACE) && !defined(_GNU_SOURCE)
-+#define _GNU_SOURCE
-+#endif
-+
- #if defined(HAVE_DLOPEN) || defined(XP_MACOSX)
- #include <dlfcn.h>
- #endif
-@@ -1222,9 +1228,6 @@ NS_StackWalk(NS_WalkStackCallback aCallback, uint32_t aSkipFrames,
- #elif defined(HAVE__UNWIND_BACKTRACE)
-
- // libgcc_s.so symbols _Unwind_Backtrace@@GCC_3.3 and _Unwind_GetIP@@GCC_3.0
--#ifndef _GNU_SOURCE
--#define _GNU_SOURCE
--#endif
- #include <unwind.h>
-
- struct unwind_info {
diff --git a/www/libxul/files/patch-bug981348 b/www/libxul/files/patch-bug981348
new file mode 100644
index 000000000000..6eb877b08fa8
--- /dev/null
+++ b/www/libxul/files/patch-bug981348
@@ -0,0 +1,41 @@
+diff --git dom/system/OSFileConstants.cpp dom/system/OSFileConstants.cpp
+index 4b21361..cb3be32 100644
+--- dom/system/OSFileConstants.cpp
++++ dom/system/OSFileConstants.cpp
+@@ -596,7 +596,7 @@ static const dom::ConstantSpec gLibcProperties[] =
+
+ { "OSFILE_SIZEOF_STATVFS", INT_TO_JSVAL(sizeof (struct statvfs)) },
+
+- { "OSFILE_OFFSETOF_STATVFS_F_BSIZE", INT_TO_JSVAL(offsetof (struct statvfs, f_bsize)) },
++ { "OSFILE_OFFSETOF_STATVFS_F_FRSIZE", INT_TO_JSVAL(offsetof (struct statvfs, f_frsize)) },
+ { "OSFILE_OFFSETOF_STATVFS_F_BAVAIL", INT_TO_JSVAL(offsetof (struct statvfs, f_bavail)) },
+
+ #endif // defined(XP_UNIX)
+diff --git toolkit/components/osfile/modules/osfile_unix_back.jsm toolkit/components/osfile/modules/osfile_unix_back.jsm
+index b59fca4..0cf220b 100644
+--- toolkit/components/osfile/modules/osfile_unix_back.jsm
++++ toolkit/components/osfile/modules/osfile_unix_back.jsm
+@@ -228,8 +228,8 @@
+ let statvfs = new SharedAll.HollowStructure("statvfs",
+ Const.OSFILE_SIZEOF_STATVFS);
+
+- statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_BSIZE,
+- "f_bsize", Type.unsigned_long.implementation);
++ statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_FRSIZE,
++ "f_frsize", Type.unsigned_long.implementation);
+ statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_BAVAIL,
+ "f_bavail", Type.fsblkcnt_t.implementation);
+
+diff --git toolkit/components/osfile/modules/osfile_unix_front.jsm toolkit/components/osfile/modules/osfile_unix_front.jsm
+index 99e5e9b..de642c5 100644
+--- toolkit/components/osfile/modules/osfile_unix_front.jsm
++++ toolkit/components/osfile/modules/osfile_unix_front.jsm
+@@ -373,7 +373,7 @@
+ throw_on_negative("statvfs", UnixFile.statvfs(sourcePath, fileSystemInfoPtr));
+
+ let bytes = new Type.uint64_t.implementation(
+- fileSystemInfo.f_bsize * fileSystemInfo.f_bavail);
++ fileSystemInfo.f_frsize * fileSystemInfo.f_bavail);
+
+ return bytes.value;
+ };
diff --git a/www/libxul/files/patch-bug985848 b/www/libxul/files/patch-bug985848
deleted file mode 100644
index c20c0e039827..000000000000
--- a/www/libxul/files/patch-bug985848
+++ /dev/null
@@ -1,22 +0,0 @@
---- media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
-+++ media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
-@@ -19,7 +19,7 @@
- #include <stdlib.h>
-
- //v4l includes
--#if defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
-+#if defined(__NetBSD__) || defined(__OpenBSD__)
- #include <sys/videoio.h>
- #elif defined(__sun)
- #include <sys/videodev2.h>
---- media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc
-+++ media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc
-@@ -18,7 +18,7 @@
- #include <string.h>
-
- //v4l includes
--#if defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
-+#if defined(__NetBSD__) || defined(__OpenBSD__)
- #include <sys/videoio.h>
- #elif defined(__sun)
- #include <sys/videodev2.h>
diff --git a/www/libxul/files/patch-clang34-disable-stdcall b/www/libxul/files/patch-clang34-disable-stdcall
deleted file mode 100644
index 8f4bb31b9ccd..000000000000
--- a/www/libxul/files/patch-clang34-disable-stdcall
+++ /dev/null
@@ -1,13 +0,0 @@
-# http://llvm.org/bugs/show_bug.cgi?id=19007
-
---- xpcom/base/nscore.h~
-+++ xpcom/base/nscore.h
-@@ -110,7 +110,7 @@
- * NS_HIDDEN_(int) NS_FASTCALL func2(char *foo);
- */
-
--#if defined(__i386__) && defined(__GNUC__) && !defined(XP_OS2)
-+#if defined(__i386__) && defined(__GNUC__) && !defined(XP_OS2) && !(defined(__clang__) && __clang_major__ == 3 && __clang_minor__ == 4 && __clang_patchlevel__ == 0)
- #define NS_FASTCALL __attribute__ ((regparm (3), stdcall))
- #define NS_CONSTRUCTOR_FASTCALL __attribute__ ((regparm (3), stdcall))
- #elif defined(XP_WIN) && !defined(_WIN64)
diff --git a/www/libxul/files/patch-config-baseconfig.mk b/www/libxul/files/patch-config-baseconfig.mk
index e6fd78f35e7b..9db69516cbcc 100644
--- a/www/libxul/files/patch-config-baseconfig.mk
+++ b/www/libxul/files/patch-config-baseconfig.mk
@@ -1,8 +1,6 @@
--- config/baseconfig.mk~
+++ config/baseconfig.mk
-@@ -1,9 +1,9 @@
- INCLUDED_AUTOCONF_MK = 1
-
+@@ -1,7 +1,7 @@
-includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
-idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
@@ -11,6 +9,6 @@
+idldir = $(datadir)/idl/%%MOZILLA%%
+installdir = $(libdir)/%%MOZILLA%%
+sdkdir = $(libdir)/%%MOZILLA%%
- DIST = $(DEPTH)/dist
-
- # We do magic with OBJ_SUFFIX in config.mk, the following ensures we don't
+ ifndef TOP_DIST
+ TOP_DIST = dist
+ endif
diff --git a/www/libxul/files/patch-toolkit_mozapps_installer_packager_mk b/www/libxul/files/patch-toolkit_mozapps_installer_packager_mk
new file mode 100644
index 000000000000..75af88fbcb4a
--- /dev/null
+++ b/www/libxul/files/patch-toolkit_mozapps_installer_packager_mk
@@ -0,0 +1,13 @@
+$OpenBSD: patch-toolkit_mozapps_installer_packager_mk,v 1.11 2012/06/11 15:29:56 landry Exp $
+install headers/idl/sdk libs only if xulrunner
+--- toolkit/mozapps/installer/packager.mk.orig Fri Jun 1 14:04:20 2012
++++ toolkit/mozapps/installer/packager.mk Tue Jun 5 07:55:51 2012
+@@ -886,7 +886,7 @@ endif
+ $(NSINSTALL) -D $(DESTDIR)$(bindir)
+ $(RM) -f $(DESTDIR)$(bindir)/$(MOZ_APP_NAME)
+ ln -s $(installdir)/$(MOZ_APP_NAME) $(DESTDIR)$(bindir)
+-ifdef INSTALL_SDK # Here comes the hard part
++ifeq ($(MOZ_APP_NAME),xulrunner)
+ $(NSINSTALL) -D $(DESTDIR)$(includedir)
+ (cd $(DIST)/include && tar $(TAR_CREATE_FLAGS) - .) | \
+ (cd $(DESTDIR)$(includedir) && tar -xf -)
diff --git a/www/libxul/files/patch-toolkit_xre_Makefile.in b/www/libxul/files/patch-toolkit_xre_Makefile.in
deleted file mode 100644
index 4a9c8533a2f8..000000000000
--- a/www/libxul/files/patch-toolkit_xre_Makefile.in
+++ /dev/null
@@ -1,8 +0,0 @@
---- toolkit/xre/Makefile.in.orig 2007-09-10 10:31:53.000000000 -0400
-+++ toolkit/xre/Makefile.in 2007-09-10 10:35:00.000000000 -0400
-@@ -263,5 +263,3 @@
- libs:: platform.ini
- $(INSTALL) $^ $(DIST)/bin
-
--install::
-- $(INSTALL) $(IFLAGS1) $^ $(DESTDIR)$(mozappdir)
diff --git a/www/libxul/files/patch-z-bug1026828 b/www/libxul/files/patch-z-bug1026828
deleted file mode 100644
index 5d2020cd091f..000000000000
--- a/www/libxul/files/patch-z-bug1026828
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git storage/src/Makefile.in storage/src/Makefile.in
-index 4cd2551..5c40536 100644
---- storage/src/Makefile.in
-+++ storage/src/Makefile.in
-@@ -31,7 +31,7 @@ endif
- # MOZ_STORAGE_MEMORY on Windows, you will also need to change the "ifdef
- # MOZ_MEMORY" options in db/sqlite3/src/Makefile.in.
- ifdef MOZ_MEMORY
--ifndef MOZ_NATIVE_SQLITE
-+ifneq (,$(not $(MOZ_NATIVE_SQLITE))$(MOZ_NATIVE_JEMALLOC))
- ifneq ($(OS_TARGET), Android)
- DEFINES += -DMOZ_STORAGE_MEMORY
- endif
diff --git a/www/libxul/files/patch-zz-bug517422 b/www/libxul/files/patch-z-bug517422
index 1c3d05480bc2..17432a29775c 100644
--- a/www/libxul/files/patch-zz-bug517422
+++ b/www/libxul/files/patch-z-bug517422
@@ -18,52 +18,53 @@ index 5383399..0410004 100644
$(srcdir)/system-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers
$(INSTALL) system_wrappers $(DIST)
-diff --git toolkit/toolkit.mozbuild toolkit/toolkit.mozbuild
-index c22a36c..2febb45 100644
---- toolkit/toolkit.mozbuild
-+++ toolkit/toolkit.mozbuild
-@@ -64,13 +64,13 @@ add_tier_dir('platform', 'rdf')
- if CONFIG['MOZ_JSDEBUGGER']:
- add_tier_dir('platform', 'js/jsd')
+diff --git config/external/moz.build config/external/moz.build
+index f67c5c7..eb909ce 100644
+--- config/external/moz.build
++++ config/external/moz.build
+@@ -15,13 +15,19 @@ if CONFIG['MOZ_UPDATER']:
+ if not CONFIG['MOZ_NATIVE_BZ2']:
+ external_dirs += ['modules/libbz2']
-if CONFIG['MOZ_VORBIS']:
++if not CONFIG['MOZ_NATIVE_OGG']:
++ external_dirs += ['media/libogg']
++
++if not CONFIG['MOZ_NATIVE_THEORA']:
++ external_dirs += ['media/libtheora']
++
+if CONFIG['MOZ_VORBIS'] and not CONFIG['MOZ_NATIVE_VORBIS']:
- add_tier_dir('platform', 'media/libvorbis')
+ external_dirs += ['media/libvorbis']
-if CONFIG['MOZ_TREMOR']:
+if CONFIG['MOZ_TREMOR'] and not CONFIG['MOZ_NATIVE_TREMOR']:
- add_tier_dir('platform', 'media/libtremor')
+ external_dirs += ['media/libtremor']
-if CONFIG['MOZ_OPUS']:
+if CONFIG['MOZ_OPUS'] and not CONFIG['MOZ_NATIVE_OPUS']:
- add_tier_dir('platform', 'media/libopus')
+ external_dirs += ['media/libopus']
if CONFIG['MOZ_WEBM']:
-@@ -82,7 +82,10 @@ if CONFIG['MOZ_VP8'] and not CONFIG['MOZ
- add_tier_dir('platform', 'media/libvpx')
-
- if CONFIG['MOZ_OGG']:
-- add_tier_dir('platform', ['media/libogg', 'media/libtheora'])
-+ if not CONFIG['MOZ_NATIVE_OGG']:
-+ add_tier_dir('platform', 'media/libogg')
-+ if not CONFIG['MOZ_NATIVE_THEORA']:
-+ add_tier_dir('platform', 'media/libtheora')
-
- if CONFIG['MOZ_WEBRTC']:
- add_tier_dir('platform', [
-@@ -92,10 +95,10 @@ if CONFIG['MOZ_WEBRTC']:
- 'media/mtransport/standalone',
- ])
+@@ -36,13 +42,15 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ_NATIVE_LIBVPX']:
+ if not CONFIG['MOZ_NATIVE_PNG']:
+ external_dirs += ['media/libpng']
--if CONFIG['MOZ_SPEEX_RESAMPLER']:
-+if CONFIG['MOZ_SPEEX_RESAMPLER'] and not CONFIG['MOZ_NATIVE_SPEEX']:
- add_tier_dir('platform', 'media/libspeex_resampler')
++if not CONFIG['MOZ_NATIVE_SPEEX']:
++ external_dirs += ['media/libspeex_resampler']
++
++if not CONFIG['MOZ_NATIVE_SOUNDTOUCH']:
++ external_dirs += ['media/libsoundtouch']
++
+ external_dirs += [
+ 'media/kiss_fft',
+ 'media/libcubeb',
+- 'media/libogg',
+- 'media/libtheora',
+- 'media/libspeex_resampler',
+- 'media/libsoundtouch',
+ ]
--if CONFIG['MOZ_SOUNDTOUCH']:
-+if CONFIG['MOZ_SOUNDTOUCH'] and not CONFIG['MOZ_NATIVE_SOUNDTOUCH']:
- add_tier_dir('platform', 'media/libsoundtouch')
-
- if CONFIG['MOZ_CUBEB']:
+ PARALLEL_DIRS += ['../../' + i for i in external_dirs]
diff --git config/system-headers config/system-headers
index bef567c..9807c29 100644
--- config/system-headers
@@ -120,7 +121,7 @@ diff --git configure.in configure.in
index 87db361..7947626 100644
--- configure.in
+++ configure.in
-@@ -5211,6 +5211,57 @@ if test "${ac_cv_c_attribute_aligned}" != "0"; then
+@@ -5211,6 +5211,63 @@ if test "${ac_cv_c_attribute_aligned}" != "0"; then
fi
dnl ========================================================
@@ -134,6 +135,12 @@ index 87db361..7947626 100644
+
+if test -n "$MOZ_NATIVE_OGG"; then
+ PKG_CHECK_MODULES(MOZ_OGG, ogg >= 1.2.1)
++
++ _SAVE_LIBS=$LIBS
++ LIBS="$LIBS $MOZ_OGG_LIBS"
++ AC_CHECK_FUNC(ogg_set_mem_functions, [],
++ [AC_DEFINE(MOZ_OGG_NO_MEM_REPORTING)])
++ LIBS=$_SAVE_LIBS
+fi
+
+AC_SUBST(MOZ_NATIVE_OGG)
@@ -244,7 +251,7 @@ index 87db361..7947626 100644
+MOZ_NATIVE_SOUNDTOUCH=)
+
+if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then
-+ PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.7.0)
++ PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.8.0)
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
@@ -276,15 +283,28 @@ index 87db361..7947626 100644
dnl = Disable VP8 decoder support
dnl ========================================================
MOZ_ARG_DISABLE_BOOL(webm,
+diff --git content/media/AudioStream.h content/media/AudioStream.h
+index 085676d..00c54fb 100644
+--- content/media/AudioStream.h
++++ content/media/AudioStream.h
+@@ -26,7 +26,7 @@ public:
+ };
+
+ namespace soundtouch {
+-class SoundTouch;
++class MOZ_IMPORT_API SoundTouch;
+ }
+
+ namespace mozilla {
diff --git content/media/Makefile.in content/media/Makefile.in
index fd34449..c6c42c8 100644
--- content/media/Makefile.in
+++ content/media/Makefile.in
-@@ -6,4 +6,31 @@ include $(topsrcdir)/config/rules.mk
+@@ -6,3 +6,31 @@ include $(topsrcdir)/config/rules.mk
CFLAGS += $(GSTREAMER_CFLAGS)
CXXFLAGS += $(GSTREAMER_CFLAGS)
-
++
+ifdef MOZ_NATIVE_OGG
+CXXFLAGS += $(MOZ_OGG_CFLAGS)
+endif
@@ -324,98 +344,16 @@ index 4c14494..1cb98e2 100644
+ifdef MOZ_NATIVE_SPEEX
+CFLAGS += $(MOZ_SPEEX_CFLAGS)
+endif
-+
- AudioNodeEngineNEON.$(OBJ_SUFFIX): CXXFLAGS += -mfpu=neon
-diff --git layout/media/Makefile.in layout/media/Makefile.in
-index 1cacbd7..a8cd156 100644
---- layout/media/Makefile.in
-+++ layout/media/Makefile.in
-@@ -36,31 +36,45 @@ ifdef MOZ_TREE_PIXMAN
- SHARED_LIBRARY_LIBS += $(MOZ_PIXMAN_LIBS)
- endif
-
-+ifdef MOZ_OGG
-+ifndef MOZ_NATIVE_OGG
-+SHARED_LIBRARY_LIBS += \
-+ $(DEPTH)/media/libogg/src/$(LIB_PREFIX)ogg.$(LIB_SUFFIX) \
-+ $(NULL)
-+endif
-+endif
-+
- ifdef MOZ_VORBIS
-+ifndef MOZ_NATIVE_VORBIS
- SHARED_LIBRARY_LIBS += \
- $(DEPTH)/media/libvorbis/lib/$(LIB_PREFIX)vorbis.$(LIB_SUFFIX) \
-- $(DEPTH)/media/libogg/src/$(LIB_PREFIX)ogg.$(LIB_SUFFIX) \
- $(NULL)
- endif
-+endif
-
- ifdef MOZ_TREMOR
-+ifndef MOZ_NATIVE_TREMOR
- SHARED_LIBRARY_LIBS += \
- $(DEPTH)/media/libtremor/lib/$(LIB_PREFIX)tremor.$(LIB_SUFFIX) \
-- $(DEPTH)/media/libogg/src/$(LIB_PREFIX)ogg.$(LIB_SUFFIX) \
- $(NULL)
- endif
-+endif
-
- ifdef MOZ_OGG
-+ifndef MOZ_NATIVE_THEORA
- SHARED_LIBRARY_LIBS += \
- $(DEPTH)/media/libtheora/lib/$(LIB_PREFIX)theora.$(LIB_SUFFIX) \
- $(NULL)
- endif
-+endif
-
- ifdef MOZ_OPUS
-+ifndef MOZ_NATIVE_OPUS
- SHARED_LIBRARY_LIBS += \
- $(DEPTH)/media/libopus/$(LIB_PREFIX)opus.$(LIB_SUFFIX) \
- $(NULL)
- endif
-+endif
-
- ifdef MOZ_WEBM
- SHARED_LIBRARY_LIBS += \
-@@ -77,16 +91,20 @@ endif
- endif
-
- ifdef MOZ_SPEEX_RESAMPLER
-+ifndef MOZ_NATIVE_SPEEX
- SHARED_LIBRARY_LIBS += \
- $(DEPTH)/media/libspeex_resampler/src/$(LIB_PREFIX)speex_resampler.$(LIB_SUFFIX) \
- $(NULL)
- endif
-+endif
-
- ifdef MOZ_SOUNDTOUCH
-+ifndef MOZ_NATIVE_SOUNDTOUCH
- SHARED_LIBRARY_LIBS += \
- $(DEPTH)/media/libsoundtouch/src/$(LIB_PREFIX)soundtouch.$(LIB_SUFFIX) \
- $(NULL)
- endif
-+endif
-
- ifdef MOZ_CUBEB
- SHARED_LIBRARY_LIBS += \
diff --git media/libtheora/Makefile.in media/libtheora/Makefile.in
new file mode 100644
index 0000000..1f02dc0
--- /dev/null
+++ media/libtheora/Makefile.in
-@@ -0,0 +1,16 @@
+@@ -0,0 +1,9 @@
+# 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/.
+
-+DEPTH = @DEPTH@
-+topsrcdir = @top_srcdir@
-+srcdir = @srcdir@
-+VPATH = @srcdir@
-+
-+include $(DEPTH)/config/autoconf.mk
-+
+include $(topsrcdir)/config/rules.mk
+
+ifdef MOZ_NATIVE_OGG
@@ -426,18 +364,11 @@ new file mode 100644
index 0000000..1f02dc0
--- /dev/null
+++ media/libtremor/Makefile.in
-@@ -0,0 +1,16 @@
+@@ -0,0 +1,9 @@
+# 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/.
+
-+DEPTH = @DEPTH@
-+topsrcdir = @top_srcdir@
-+srcdir = @srcdir@
-+VPATH = @srcdir@
-+
-+include $(DEPTH)/config/autoconf.mk
-+
+include $(topsrcdir)/config/rules.mk
+
+ifdef MOZ_NATIVE_OGG
@@ -448,18 +379,11 @@ new file mode 100644
index 0000000..1f02dc0
--- /dev/null
+++ media/libvorbis/Makefile.in
-@@ -0,0 +1,16 @@
+@@ -0,0 +1,9 @@
+# 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/.
+
-+DEPTH = @DEPTH@
-+topsrcdir = @top_srcdir@
-+srcdir = @srcdir@
-+VPATH = @srcdir@
-+
-+include $(DEPTH)/config/autoconf.mk
-+
+include $(topsrcdir)/config/rules.mk
+
+ifdef MOZ_NATIVE_OGG
@@ -491,7 +415,7 @@ index 00e77e7..55f48ab 100644
['build_with_mozilla==1', {
# Mozilla provides its own build of the opus library.
- 'include_dirs': [
-- '$(DIST)/include/opus',
+- '/media/libopus/include',
- ]
+ 'cflags_mozilla': [
+ '$(MOZ_OPUS_CFLAGS)',
@@ -499,10 +423,10 @@ index 00e77e7..55f48ab 100644
}, {
'dependencies': [
'<(DEPTH)/third_party/opus/opus.gyp:opus'
-diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in
+diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk
index d42137a..695e75a8 100644
---- toolkit/library/Makefile.in
-+++ toolkit/library/Makefile.in
+--- toolkit/library/libxul.mk
++++ toolkit/library/libxul.mk
@@ -77,6 +77,34 @@ ifdef MOZ_NATIVE_HUNSPELL
EXTRA_DSO_LDOPTS += $(MOZ_HUNSPELL_LIBS)
endif
@@ -538,3 +462,31 @@ index d42137a..695e75a8 100644
ifdef MOZ_NATIVE_LIBEVENT
EXTRA_DSO_LDOPTS += $(MOZ_LIBEVENT_LIBS)
endif
+diff --git xpcom/build/nsXPComInit.cpp xpcom/build/nsXPComInit.cpp
+index 2cf281e..6d7af0e 100644
+--- xpcom/build/nsXPComInit.cpp
++++ xpcom/build/nsXPComInit.cpp
+@@ -130,7 +130,9 @@ extern nsresult nsStringInputStreamConstructor(nsISupports *, REFNSIID, void **)
+ #include "mozilla/VisualEventTracer.h"
+ #endif
+
++#ifndef MOZ_OGG_NO_MEM_REPORTING
+ #include "ogg/ogg.h"
++#endif
+ #if defined(MOZ_VPX) && !defined(MOZ_VPX_NO_MEM_REPORTING)
+ #include "vpx_mem/vpx_mem.h"
+ #endif
+@@ -571,11 +573,13 @@ NS_InitXPCOM2(nsIServiceManager* *result,
+ // this oddness.
+ mozilla::SetICUMemoryFunctions();
+
++#ifndef MOZ_OGG_NO_MEM_REPORTING
+ // Do the same for libogg.
+ ogg_set_mem_functions(OggReporter::CountingMalloc,
+ OggReporter::CountingCalloc,
+ OggReporter::CountingRealloc,
+ OggReporter::CountingFree);
++#endif
+
+ #if defined(MOZ_VPX) && !defined(MOZ_VPX_NO_MEM_REPORTING)
+ // And for VPX.
diff --git a/www/libxul/files/pkg-deinstall.in b/www/libxul/files/pkg-deinstall.in
deleted file mode 100644
index 2544ee4ed3a2..000000000000
--- a/www/libxul/files/pkg-deinstall.in
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh
-#
-# $MCom: ports/www/mozilla/pkg-deinstall.in,v 1.25 2008/07/26 19:07:07 ahze Exp $
-#
-# Date created: Mon Nov 29, 2003
-# Whom: Thierry Thomas (<thierry@pompo.net>)
-# Fix the chrome registry.
-
-umask 022
-PATH=/bin:/usr/bin
-
-[ "x$1" = "x" ] && exit 1
-[ "x$2" != "xDEINSTALL" ] && exit 0
-
-MOZDIR=%%MOZDIR%%
-
-rm -rf ${MOZDIR}/chrome/overlayinfo
-rm -f ${MOZDIR}/chrome/*.rdf
-rm -f ${MOZDIR}/component.reg
-rm -f ${MOZDIR}/components/*.dat
-rm -f ${MOZDIR}/components.ini
-rm -f ${MOZDIR}/defaults.ini
-rm -f ${MOZDIR}/chrome/app-chrome.manifest
-rm -rf ${MOZDIR}/updates
-find %%MOZDIR%%/plugins/ -depth 1 -type l -delete > /dev/null 2>&1
-find %%MOZDIR%%/extensions/ -depth 1 -type l -delete > /dev/null 2>&1
-
-exit 0
diff --git a/www/libxul/files/pkg-install.in b/www/libxul/files/pkg-install.in
deleted file mode 100644
index 9feab2225a78..000000000000
--- a/www/libxul/files/pkg-install.in
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/sh
-#
-# $MCom: ports/www/mozilla/pkg-install.in,v 1.26 2008/08/04 16:58:03 mezz Exp $
-#
-# Date created: Mon Nov 29, 2003
-# Whom: Thierry Thomas (<thierry@pompo.net>)
-# Fix the chrome registry.
-
-umask 022
-PATH=/bin:/usr/bin
-
-[ "x$1" = "x" ] && exit 1
-[ "x$2" != "xPOST-INSTALL" ] && exit 0
-
-MOZDIR=%%MOZDIR%%
-MOZBIN=${MOZDIR}/%%MOZILLA_BIN%%
-REGXPCOM=${MOZDIR}/regxpcom
-REGCHROME=${MOZDIR}/regchrome
-
-rm -rf ${MOZDIR}/chrome/overlayinfo
-rm -f ${MOZDIR}/chrome/*.rdf
-mkdir -p ${MOZDIR}/chrome/overlayinfo
-rm -f ${MOZDIR}/component.reg
-
-cd ${MOZDIR} || exit 1
-if [ -f ${REGXPCOM} ]; then
- ./run-mozilla.sh ${REGXPCOM} || true
-fi
-if [ -f ${REGCHROME} ]; then
- ./run-mozilla.sh ${REGCHROME} || true
-fi
-if [ -f ${MOZBIN} -a "${1%-*}" = "nvu" ]; then
- ./run-mozilla.sh ${MOZBIN} -register > /dev/null 2>&1
-fi
-cp -R %%LOCALBASE%%/lib/xpi/symlinks/%%MOZILLA%%/ %%MOZDIR%%/extensions/ > /dev/null 2>&1
-
-exit 0
diff --git a/www/linux-firefox/Makefile b/www/linux-firefox/Makefile
index 1e2e801c3f01..0244723f185c 100644
--- a/www/linux-firefox/Makefile
+++ b/www/linux-firefox/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= firefox
-DISTVERSION= 32.0.3
+DISTVERSION= 33.0
PORTEPOCH= 1
CATEGORIES= www ipv6
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US
diff --git a/www/linux-firefox/distinfo b/www/linux-firefox/distinfo
index f1ed01583f39..f811688ffc93 100644
--- a/www/linux-firefox/distinfo
+++ b/www/linux-firefox/distinfo
@@ -1,5 +1,5 @@
-SHA256 (firefox-32.0.3.tar.bz2) = 265ae5df1a5f2edeae8d08bdcde45df0920f6fb0ad70385371d06ff890017982
-SIZE (firefox-32.0.3.tar.bz2) = 42239723
+SHA256 (firefox-33.0.tar.bz2) = 56ba7069dcd2f026e7a21867ab71e1fce462031d3fea77d180ee922eb1c96239
+SIZE (firefox-33.0.tar.bz2) = 43261598
SHA256 (glib2-2.22.2-2.fc12.i686.rpm) = e3b459c245ec14e7248e9de4b506963a4773407f3e58835db5070d0ed02ecc99
SIZE (glib2-2.22.2-2.fc12.i686.rpm) = 1162908
SHA256 (gtk2-2.18.3-19.fc12.i686.rpm) = aea9cf7ffe9c8dae0faa2bf3d2aa1b2117c55dce03da72dcce8c268279ec0a4b
diff --git a/www/linux-firefox/pkg-plist b/www/linux-firefox/pkg-plist
index dda500c89460..02e3cb5dbab7 100644
--- a/www/linux-firefox/pkg-plist
+++ b/www/linux-firefox/pkg-plist
@@ -72,21 +72,3 @@ lib/%%APP_NAME%%/webapprt/omni.ja
lib/%%APP_NAME%%/webapprt/webapprt.ini
@exec /bin/cp -R %%LOCALBASE%%/lib/xpi/symlinks/%%APP_NAME%%/ %D/lib/%%APP_NAME%%/browser/extensions/ 2>/dev/null || true
@unexec /usr/bin/find %D/lib/%%APP_NAME%%/browser/extensions/ -depth 1 -type l -delete 2>/dev/null || true
-@dirrm lib/%%APP_NAME%%/browser/chrome/icons/default
-@dirrm lib/%%APP_NAME%%/browser/chrome/icons
-@dirrm lib/%%APP_NAME%%/browser/chrome
-@dirrm lib/%%APP_NAME%%/browser/components
-@dirrm lib/%%APP_NAME%%/browser/defaults/preferences
-@dirrm lib/%%APP_NAME%%/browser/defaults
-@dirrm lib/%%APP_NAME%%/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
-@dirrm lib/%%APP_NAME%%/browser/extensions
-@dirrm lib/%%APP_NAME%%/browser/icons
-@dirrm lib/%%APP_NAME%%/browser/searchplugins
-@dirrm lib/%%APP_NAME%%/browser
-@dirrm lib/%%APP_NAME%%/components
-@dirrm lib/%%APP_NAME%%/defaults/pref
-@dirrm lib/%%APP_NAME%%/defaults
-@dirrm lib/%%APP_NAME%%/dictionaries
-@dirrm lib/%%APP_NAME%%/icons
-@dirrm lib/%%APP_NAME%%/webapprt
-@dirrm lib/%%APP_NAME%%
diff --git a/www/linux-seamonkey/Makefile.common b/www/linux-seamonkey/Makefile.common
index 11d049dabe06..7ca09a978b90 100644
--- a/www/linux-seamonkey/Makefile.common
+++ b/www/linux-seamonkey/Makefile.common
@@ -28,8 +28,8 @@ ONLY_FOR_ARCHS= i386 amd64
APP_NAME= ${PKGBASE}
BIN_NAME?= ${PORTNAME}
USE_LINUX= yes
-USE_LINUX_APPS+= alsalib alsa-plugins-oss atk dbusglib dbuslibs \
- fontconfig gtk2 hicontheme pango
+USE_LINUX_APPS+=alsalib alsa-plugins-oss atk dbusglib dbuslibs \
+ fontconfig gtk2 hicontheme pango
WRKSRC?= ${WRKDIR}/${BIN_NAME}
FDIR= ${STAGEDIR}${PREFIX}/lib/${APP_NAME}
@@ -58,7 +58,6 @@ _Q= 2>/dev/null || true
.if !target(post-extract)
post-extract:
@${RM} -rf ${WRKSRC}/updates
- @${MKDIR} ${WRKSRC}/${APP_SUBDIR}extensions
@${LN} -sf ${LOCALBASE}/lib/browser_plugins/symlinks/${APP_NAME} \
${WRKSRC}/${APP_SUBDIR}plugins
. if defined(WANT_GTK218)
@@ -76,8 +75,8 @@ post-extract:
post-patch:
@${MKDIR} ${PREFS_FILE:H}
- # empty port preferences
- @${DO_NADA} >>${PREFS_FILE}
+ # disable SSL 3.0 per bug 1076983
+ ${ECHO} 'pref("security.tls.version.min", 1);' >> ${PREFS_FILE}
.endif
.if !target(do-install)
@@ -122,8 +121,6 @@ create-plist: build
%D/lib/%%APP_NAME%%/${APP_SUBDIR}extensions/ ${_Q}' >> ${PLIST}
${ECHO_CMD} '@unexec ${FIND} %D/lib/%%APP_NAME%%/${APP_SUBDIR}extensions/ \
-depth 1 -type l -delete ${_Q}' >> ${PLIST}
- cd ${WRKSRC} && ${FIND} -sd . -type d | \
- ${SED} -e "s#^\.#@dirrm lib/%%APP_NAME%%#" >> ${PLIST}
.if defined(WANT_GTK218)
. for f in ${GTK218_FILES}
${REINPLACE_CMD} -i '' '/${f:T}/s/^/%%GTK218%%/' ${PLIST}
diff --git a/www/xpi-adblock/Makefile.xpi b/www/xpi-adblock/Makefile.xpi
index d774d15af835..e0b7854e13ba 100644
--- a/www/xpi-adblock/Makefile.xpi
+++ b/www/xpi-adblock/Makefile.xpi
@@ -7,8 +7,6 @@
# PLIST_FILES. XPI_FILES can be generated by xpi-gen, but be
# sure to put chrome.manifest in ${FILESDIR} before that if you
# need it.
-# XPI_DIRS - List of directories in xpi archive. This is used to produce
-# PLIST_DIRS.
# XPI_DISTNAME - The name of distribution
# Default: ${PORTNAME}
# PORTNAME, PORTVERSION, DISTVERSIONSUFFIX, CATEGORIES, MAINTAINER, COMMENT
@@ -143,9 +141,6 @@ XPI_SLDIR?= ${XPI_LIBDIR}/symlinks
.ifndef XPI_DISTNAMES
XPI_XPIDIR?= ${XPI_LIBDIR}/${XPI_ID}
.endif
-XPI_DIRS_TRY= ${XPI_SLDIRS_ALL:S,^${PREFIX}/,,} \
- ${XPI_SLDIR:S,^${PREFIX}/,,} \
- ${XPI_LIBDIR:S,^${PREFIX}/,,}
PLIST_SUB+= XPI_LIBDIR="${XPI_LIBDIR:S,^${PREFIX}/,,}" \
XPI_XPIDIR="${XPI_XPIDIR:S,^${PREFIX}/,,}"
@@ -155,13 +150,11 @@ _TD_FULL= ${XPI_XPIDIR}
_A= >> ${TMPPLIST}
_Q= 2>/dev/null || true
PLIST_FILES+= ${XPI_FILES:S!^!${_TD}/!}
-PLIST_DIRS+= ${XPI_DIRS:S!^!${_TD}/!} ${_TD}
.for dist in ${XPI_DISTNAMES}
XPI_XPIDIR_${dist}= ${XPI_LIBDIR}/${XPI_ID_${dist}}
_TD_${dist}= ${XPI_XPIDIR_${dist}:S,^${PREFIX}/,,}
PLIST_FILES+= ${XPI_FILES_${dist}:S!^!${_TD_${dist}}/!}
-PLIST_DIRS+= ${XPI_DIRS_${dist}:S!^!${_TD_${dist}}/!} ${_TD_${dist}}
.endfor
.if !target(do-install)
@@ -174,7 +167,6 @@ do-install:
@${ECHO_CMD} '@exec ${INSTALL} -d ${XPI_SLDIRS_ALL:S,^${STAGEDIR}${PREFIX},%D,}' ${_A}
@${ECHO_CMD} '@exec for _dir in ${XPI_LINKFARMS} ; { ${LN} -sf ${_TD_FULL} $$_dir/ ${_Q}; }' ${_A}
@${ECHO_CMD} '@unexec for _dir in ${XPI_LINKFARMS} ; { ${RM} -f $$_dir/${XPI_ID} ; }' ${_A}
- @for _dir in ${XPI_DIRS_TRY} ; { ${ECHO_CMD} "@unexec rmdir %D/$$_dir ${_Q}" ${_A} ; }
.endif
.if !target(relink)
@@ -206,7 +198,6 @@ xpi-gen: extract
@if [ -d ${FILESDIR} -a -f ${FILESDIR}/chrome.manifest ] ; \
then ${ECHO_CMD} chrome.manifest ; fi
@${ECHO_CMD}
- @${ECHO_CMD} -n 'XPI_DIRS='
@cd ${WRKSRC} && ${FIND} -ds . -not -name . -type d | cut -f2- -d/ | ${TR} '\n' ' '
@${ECHO_CMD}
@@ -214,8 +205,6 @@ xpi-plist: extract
@${FIND} -s ${WRKSRC} -not -type d | ${SED} -e "s,^${WRKSRC},%%XPI_XPIDIR%%," > ${PLIST}
@if [ -d ${FILESDIR} -a -f ${FILESDIR}/chrome.manifest ] ; \
then ${ECHO_CMD} %%XPI_XPIDIR%%/chrome.manifest >> ${PLIST} ; fi
- @${FIND} -ds ${WRKSRC} -type d -not -name ${DISTNAME} | \
- ${SED} -e "s,^${WRKSRC},@dirrm %%XPI_XPIDIR%%," >> ${PLIST}
xpi-pre-chrome:
@${CHMOD} g+w ${_TD_FULL}