Index: head/Mk/Uses/gecko.mk =================================================================== --- head/Mk/Uses/gecko.mk (revision 393689) +++ head/Mk/Uses/gecko.mk (revision 393690) @@ -1,127 +1,127 @@ # $FreeBSD$ # # Handle dependency of different gecko based applications # # MAINTAINER: gecko@FreeBSD.org # # Feature: gecko # Usage: USES=gecko or USES=gecko:ARGS # Valid ARGS: libxul, firefox, seamonkey, thunderbird # in case the first argument is not libxul # The following arguments are available # - build: also add the dependency as a build # dependency # - [0-9][0-9][+]?: a version optionnally # followed by a + # .if !defined(_INCLUDE_USES_GECKO_MK) _INCLUDE_USES_GECKO_MK= yes .if empty(gecko_ARGS) gecko_ARGS= libxul .endif _GECKO_VERSION= ${gecko_ARGS:M[0-9][0-9]*} .if ${gecko_ARGS:Mlibxul} # Compat with older versions GECKO= libxul GECKO_CONFING?= ${LOCALBASE}/bin/${GECKO}-config XPIDL?= ${LOCALBASE}/lib/${GECKO}/xpidl XPIDL_INCL?= `${GECKO_CONFIG} --idlflags` BUILD_DEPENDS+= libxul>=38:${PORTSDIR}/www/libxul RUN_DEPENDS+= libxul>=38:${PORTSDIR}/www/libxul .elif ${gecko_ARGS:Mfirefox} _GECKO_DEFAULT_VERSION= 38 -_GECKO_VERSIONS= 38 39 +_GECKO_VERSIONS= 38 40 _GECKO_TYPE= firefox # Dependence lines for different Firefox versions 38_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox-esr -39_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox +40_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox .if exists(${LOCALBASE}/bin/firefox) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/firefox --version 2>/dev/null _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:M[0-9][0-9]*:C/([0-9][0-9]).*/\1/g} .endif .elif ${gecko_ARGS:Mseamonkey} _GECKO_DEFAULT_VERSION= 33 _GECKO_VERSIONS= 33 _GECKO_TYPE= seamonkey .if exists(${LOCALBASE}/bin/seamonkey) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/seamonkey --version 2>/dev/null _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:M[0-9]*:C/[0-9].([0-9][0-9]).*/\1/g} .endif # Dependence lines for different Seamonkey versions 33_DEPENDS= ${LOCALBASE}/lib/seamonkey/seamonkey:${PORTSDIR}/www/seamonkey .elif ${gecko_ARGS:Mthunderbird} _GECKO_DEFAULT_VERSION= 38 _GECKO_VERSIONS= 38 _GECKO_TYPE= thunderbird .if exists(${LOCALBASE}/bin/thunderbird) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/thunderbird --version 2>/dev/null _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:M[0-9][0-9]*:C/([0-9][0-9]).*/\1/g} .endif # Dependence lines for different Thunderbird versions 38_DEPENDS= ${LOCALBASE}/lib/thunderbird/thunderbird:${PORTSDIR}/mail/thunderbird .else IGNORE= Unknown type of gecko dependency you may specify either libxul, firefox, seamonkey or thunderbird .endif .if defined(_GECKO_TYPE) .if ${_GECKO_VERSION:M*+} _GECKO_MIN_VERSION:= ${_GECKO_VERSION:S/+//} _GECKO_WANTED_VERSIONS:= ${_GECKO_DEFAULT_VERSION} .endif .if ${_GECKO_VERSION:M[0-9][0-9]} _GECKO_WANTED_VERSIONS:= ${_GECKO_VERSION:M[0-9][0-9]} .endif _GECKO_WANTED_VERSIONS?= ${_GECKO_DEFAULT_VERSION} .if defined(_GECKO_MIN_VERSION) . for _v in ${_GECKO_VERSIONS} . if ${_GECKO_MIN_VERSION} <= ${_v} _GECKO_WANTED_VERSIONS+= ${_v} . endif . endfor .endif .for _v in ${_GECKO_WANTED_VERSIONS:O:u} _GECKO_HIGHEST_VERSION:= ${_v} .if defined(_GECKO_INSTALLED_VER) && ${_GECKO_INSTALLED_VER} == ${_v} _GECKO_WANTED_VERSION:= ${_v} .endif .endfor .if !defined(_GECKO_WANTED_VERSION) .if defined(_GECKO_INSTALLED_VER) IGNORE= cannot install: ${_GECKO_TYPE} versions mismatch: ${_GECKO_TYPE}-${_GECKO_INSTALLED_VER} is installed and wanted version is ${_GECKO_TYPE}-${_GECKO_VERSION:M[0-9][0-9]} .else _GECKO_WANTED_VERSION:= ${_GECKO_HIGHEST_VERSION} .endif .endif .if ${gecko_ARGS:Mbuild} BUILD_DEPENDS+= ${${_GECKO_WANTED_VERSION}_DEPENDS} .endif RUN_DEPENDS+= ${${_GECKO_WANTED_VERSION}_DEPENDS} .endif .endif Index: head/www/firefox/Makefile =================================================================== --- head/www/firefox/Makefile (revision 393689) +++ head/www/firefox/Makefile (revision 393690) @@ -1,94 +1,94 @@ # Created by: Alan Eldridge # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 39.0 +DISTVERSION= 40.0 DISTVERSIONSUFFIX=.source PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build6/source + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build4/source MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla BUILD_DEPENDS= nspr>=4.10.8:${PORTSDIR}/devel/nspr \ nss>=3.19.2:${PORTSDIR}/security/nss \ libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \ cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \ soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \ harfbuzz>=0.9.34:${PORTSDIR}/print/harfbuzz \ graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \ libvorbis>=1.3.5:${PORTSDIR}/audio/libvorbis \ libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \ sqlite3>=3.8.9:${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 # opus>=1.1:${PORTSDIR}/audio/opus \ LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l USE_GECKO= gecko CONFLICTS_INSTALL= firefox-esr-31.* firefox-esr-24.* firefox-esr-17.* MOZ_PKGCONFIG_FILES= # empty USE_MOZILLA= -opus MOZILLA_NAME= Firefox USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl USES= dos2unix tar:bzip2 DOS2UNIX_FILES= media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp FIREFOX_ICON= ${MOZILLA}.png FIREFOX_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png MOZ_OPTIONS= --program-transform-name='s/firefox/${MOZILLA}/' \ --enable-application=browser \ --enable-official-branding OPTIONS_DEFAULT= GTK2 OPTIONS_SINGLE+= TOOLKIT OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3 .include "${.CURDIR}/../../www/firefox/Makefile.options" .include WRKSRC:= ${WRKDIR}/mozilla-release .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 .if ${PORT_OPTIONS:MGTK3} BUILD_DEPENDS+= gtk3>=3.14.6:${PORTSDIR}/x11-toolkits/gtk30 .endif post-extract: @${SED} -e 's|@FIREFOX_ICON@|${FIREFOX_ICON}|' -e 's|@MOZILLA@|${MOZILLA}|' \ -e 's|@MOZILLA_NAME@|${MOZILLA_NAME}|' \ <${FILESDIR}/firefox.desktop.in >${WRKDIR}/${MOZILLA}.desktop post-patch: @${REINPLACE_CMD} -e '/MOZPNG/s/=[0-9]*/=10511/' \ ${WRKSRC}/configure.in @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/browser/app/nsBrowserApp.cpp pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${WRKSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) post-install: ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps ${INSTALL_DATA} ${WRKDIR}/${MOZILLA}.desktop ${STAGEDIR}${PREFIX}/share/applications/ ${LN} -sf ${FIREFOX_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${FIREFOX_ICON} .include Index: head/www/firefox/distinfo =================================================================== --- head/www/firefox/distinfo (revision 393689) +++ head/www/firefox/distinfo (revision 393690) @@ -1,2 +1,2 @@ -SHA256 (firefox-39.0.source.tar.bz2) = 7e25014deb926df9220c3ab40ac6816c13a04c4cf7bd89b08fc1743307df1096 -SIZE (firefox-39.0.source.tar.bz2) = 182881881 +SHA256 (firefox-40.0.source.tar.bz2) = 85890be28de9e4af047fd79ce2c4616488a2a1f5c9845a03f861b24cbeb169d1 +SIZE (firefox-40.0.source.tar.bz2) = 178284401 Index: head/www/firefox/files/patch-bug1073117 =================================================================== --- head/www/firefox/files/patch-bug1073117 (revision 393689) +++ head/www/firefox/files/patch-bug1073117 (nonexistent) @@ -1,383 +0,0 @@ -commit 27ead4e -Author: Martin Stransky -Date: Thu Apr 30 01:31:00 2015 -0400 - - Bug 1073117 - Add support for has_tab_gap notebook style. r=karlt - - --HG-- - extra : rebase_source : 1755623794079eb9fa8b4c7a17bd07f6f10a0dfe ---- - widget/gtk/gtk3drawing.c | 289 +++++++++++++++++++++------------------- - widget/gtk/nsNativeThemeGTK.cpp | 2 + - 2 files changed, 153 insertions(+), 138 deletions(-) - -diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c -index 7fef6fa..a691316 100644 ---- widget/gtk/gtk3drawing.c -+++ widget/gtk/gtk3drawing.c -@@ -65,6 +65,7 @@ static GtkWidget* gScrolledWindowWidget; - static style_prop_t style_prop_func; - static gboolean have_arrow_scaling; - static gboolean checkbox_check_state; -+static gboolean notebook_has_tab_gap; - static gboolean is_initialized; - - #define ARROW_UP 0 -@@ -725,6 +726,14 @@ moz_gtk_init() - else - checkbox_check_state = GTK_STATE_FLAG_ACTIVE; - -+ if(!gtk_check_version(3, 12, 0)) { -+ ensure_tab_widget(); -+ gtk_widget_style_get(gTabWidget, "has-tab-gap", ¬ebook_has_tab_gap, NULL); -+ } -+ else { -+ notebook_has_tab_gap = TRUE; -+ } -+ - /* Add style property to GtkEntry. - * Adding the style property to the normal GtkEntry class means that it - * will work without issues inside GtkComboBox and for Spinbuttons. */ -@@ -2012,6 +2021,9 @@ moz_gtk_get_tab_thickness(void) - GtkStyleContext * style; - - ensure_tab_widget(); -+ if (!notebook_has_tab_gap) -+ return 0; /* tabs do not overdraw the tabpanel border with "no gap" style */ -+ - style = gtk_widget_get_style_context(gTabWidget); - gtk_style_context_add_class(style, GTK_STYLE_CLASS_NOTEBOOK); - gtk_style_context_get_border(style, 0, &border); -@@ -2057,7 +2069,7 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, - ensure_tab_widget(); - gtk_widget_set_direction(gTabWidget, direction); - -- style = gtk_widget_get_style_context(gTabWidget); -+ style = gtk_widget_get_style_context(gTabWidget); - gtk_style_context_save(style); - moz_gtk_tab_prepare_style_context(style, flags); - -@@ -2074,143 +2086,155 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, - - focusRect = backRect = tabRect; - -- if ((flags & MOZ_GTK_TAB_SELECTED) == 0) { -- /* Only draw the tab */ -- gtk_render_extension(style, cr, -- tabRect.x, tabRect.y, tabRect.width, tabRect.height, -- (flags & MOZ_GTK_TAB_BOTTOM) ? -- GTK_POS_TOP : GTK_POS_BOTTOM ); -- } else { -- /* Draw the tab and the gap -- * We want the gap to be positioned exactly on the tabpanel top -- * border; since tabbox.css may set a negative margin so that the tab -- * frame rect already overlaps the tabpanel frame rect, we need to take -- * that into account when drawing. To that effect, nsNativeThemeGTK -- * passes us this negative margin (bmargin in the graphic below) in the -- * lowest bits of |flags|. We use it to set gap_voffset, the distance -- * between the top of the gap and the bottom of the tab (resp. the -- * bottom of the gap and the top of the tab when we draw a bottom tab), -- * while ensuring that the gap always touches the border of the tab, -- * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results -- * with big negative or positive margins. -- * Here is a graphical explanation in the case of top tabs: -- * ___________________________ -- * / \ -- * | T A B | -- * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel -- * : ^ bmargin : ^ -- * : | (-negative margin, : | -- * bottom : v passed in flags) : | gap_height -- * of -> :.............................: | (the size of the -- * the tab . part of the gap . | tabpanel top border) -- * . outside of the tab . v -- * ---------------------------------------------- -- * -- * To draw the gap, we use gtk_paint_box_gap(), see comment in -- * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall, -- * which should suffice to ensure that the only visible border is the -- * pierced one. If the tab is in the middle, we make the box_gap begin -- * a bit to the left of the tab and end a bit to the right, adjusting -- * the gap position so it still is under the tab, because we want the -- * rendering of a gap in the middle of a tabpanel. This is the role of -- * the gints gap_{l,r}_offset. On the contrary, if the tab is the -- * first, we align the start border of the box_gap with the start -- * border of the tab (left if LTR, right if RTL), by setting the -- * appropriate offset to 0.*/ -- gint gap_loffset, gap_roffset, gap_voffset, gap_height; -- -- /* Get height needed by the gap */ -- gap_height = moz_gtk_get_tab_thickness(); -- -- /* Extract gap_voffset from the first bits of flags */ -- gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK; -- if (gap_voffset > gap_height) -- gap_voffset = gap_height; -- -- /* Set gap_{l,r}_offset to appropriate values */ -- gap_loffset = gap_roffset = 20; /* should be enough */ -- if (flags & MOZ_GTK_TAB_FIRST) { -- if (direction == GTK_TEXT_DIR_RTL) -- gap_roffset = initial_gap; -- else -- gap_loffset = initial_gap; -- } -- -- if (flags & MOZ_GTK_TAB_BOTTOM) { -- /* Draw the tab on bottom */ -- focusRect.y += gap_voffset; -- focusRect.height -= gap_voffset; -- -+ if (notebook_has_tab_gap) { -+ if ((flags & MOZ_GTK_TAB_SELECTED) == 0) { -+ /* Only draw the tab */ - gtk_render_extension(style, cr, -- tabRect.x, tabRect.y + gap_voffset, tabRect.width, -- tabRect.height - gap_voffset, GTK_POS_TOP); -- -- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); -- -- backRect.y += (gap_voffset - gap_height); -- backRect.height = gap_height; -- -- /* Draw the gap; erase with background color before painting in -- * case theme does not */ -- gtk_render_background(style, cr, backRect.x, backRect.y, -- backRect.width, backRect.height); -- cairo_save(cr); -- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); -- cairo_clip(cr); -- -- gtk_render_frame_gap(style, cr, -- tabRect.x - gap_loffset, -- tabRect.y + gap_voffset - 3 * gap_height, -- tabRect.width + gap_loffset + gap_roffset, -- 3 * gap_height, GTK_POS_BOTTOM, -- gap_loffset, gap_loffset + tabRect.width); -- cairo_restore(cr); -+ tabRect.x, tabRect.y, tabRect.width, tabRect.height, -+ (flags & MOZ_GTK_TAB_BOTTOM) ? -+ GTK_POS_TOP : GTK_POS_BOTTOM ); - } else { -- /* Draw the tab on top */ -- focusRect.height -= gap_voffset; -- gtk_render_extension(style, cr, -- tabRect.x, tabRect.y, tabRect.width, -- tabRect.height - gap_voffset, GTK_POS_BOTTOM); -- -- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); -- -- backRect.y += (tabRect.height - gap_voffset); -- backRect.height = gap_height; -- -- /* Draw the gap; erase with background color before painting in -- * case theme does not */ -- gtk_render_background(style, cr, backRect.x, backRect.y, -- backRect.width, backRect.height); -- -- cairo_save(cr); -- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); -- cairo_clip(cr); -- -- gtk_render_frame_gap(style, cr, -- tabRect.x - gap_loffset, -- tabRect.y + tabRect.height - gap_voffset, -- tabRect.width + gap_loffset + gap_roffset, -- 3 * gap_height, GTK_POS_TOP, -- gap_loffset, gap_loffset + tabRect.width); -- cairo_restore(cr); -+ /* Draw the tab and the gap -+ * We want the gap to be positioned exactly on the tabpanel top -+ * border; since tabbox.css may set a negative margin so that the tab -+ * frame rect already overlaps the tabpanel frame rect, we need to take -+ * that into account when drawing. To that effect, nsNativeThemeGTK -+ * passes us this negative margin (bmargin in the graphic below) in the -+ * lowest bits of |flags|. We use it to set gap_voffset, the distance -+ * between the top of the gap and the bottom of the tab (resp. the -+ * bottom of the gap and the top of the tab when we draw a bottom tab), -+ * while ensuring that the gap always touches the border of the tab, -+ * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results -+ * with big negative or positive margins. -+ * Here is a graphical explanation in the case of top tabs: -+ * ___________________________ -+ * / \ -+ * | T A B | -+ * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel -+ * : ^ bmargin : ^ -+ * : | (-negative margin, : | -+ * bottom : v passed in flags) : | gap_height -+ * of -> :.............................: | (the size of the -+ * the tab . part of the gap . | tabpanel top border) -+ * . outside of the tab . v -+ * ---------------------------------------------- -+ * -+ * To draw the gap, we use gtk_paint_box_gap(), see comment in -+ * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall, -+ * which should suffice to ensure that the only visible border is the -+ * pierced one. If the tab is in the middle, we make the box_gap begin -+ * a bit to the left of the tab and end a bit to the right, adjusting -+ * the gap position so it still is under the tab, because we want the -+ * rendering of a gap in the middle of a tabpanel. This is the role of -+ * the gints gap_{l,r}_offset. On the contrary, if the tab is the -+ * first, we align the start border of the box_gap with the start -+ * border of the tab (left if LTR, right if RTL), by setting the -+ * appropriate offset to 0.*/ -+ gint gap_loffset, gap_roffset, gap_voffset, gap_height; -+ -+ /* Get height needed by the gap */ -+ gap_height = moz_gtk_get_tab_thickness(); -+ -+ /* Extract gap_voffset from the first bits of flags */ -+ gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK; -+ if (gap_voffset > gap_height) -+ gap_voffset = gap_height; -+ -+ /* Set gap_{l,r}_offset to appropriate values */ -+ gap_loffset = gap_roffset = 20; /* should be enough */ -+ if (flags & MOZ_GTK_TAB_FIRST) { -+ if (direction == GTK_TEXT_DIR_RTL) -+ gap_roffset = initial_gap; -+ else -+ gap_loffset = initial_gap; -+ } -+ -+ if (flags & MOZ_GTK_TAB_BOTTOM) { -+ /* Draw the tab on bottom */ -+ focusRect.y += gap_voffset; -+ focusRect.height -= gap_voffset; -+ -+ gtk_render_extension(style, cr, -+ tabRect.x, tabRect.y + gap_voffset, tabRect.width, -+ tabRect.height - gap_voffset, GTK_POS_TOP); -+ -+ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); -+ -+ backRect.y += (gap_voffset - gap_height); -+ backRect.height = gap_height; -+ -+ /* Draw the gap; erase with background color before painting in -+ * case theme does not */ -+ gtk_render_background(style, cr, backRect.x, backRect.y, -+ backRect.width, backRect.height); -+ cairo_save(cr); -+ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); -+ cairo_clip(cr); -+ -+ gtk_render_frame_gap(style, cr, -+ tabRect.x - gap_loffset, -+ tabRect.y + gap_voffset - 3 * gap_height, -+ tabRect.width + gap_loffset + gap_roffset, -+ 3 * gap_height, GTK_POS_BOTTOM, -+ gap_loffset, gap_loffset + tabRect.width); -+ cairo_restore(cr); -+ } else { -+ /* Draw the tab on top */ -+ focusRect.height -= gap_voffset; -+ gtk_render_extension(style, cr, -+ tabRect.x, tabRect.y, tabRect.width, -+ tabRect.height - gap_voffset, GTK_POS_BOTTOM); -+ -+ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); -+ -+ backRect.y += (tabRect.height - gap_voffset); -+ backRect.height = gap_height; -+ -+ /* Draw the gap; erase with background color before painting in -+ * case theme does not */ -+ gtk_render_background(style, cr, backRect.x, backRect.y, -+ backRect.width, backRect.height); -+ -+ cairo_save(cr); -+ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); -+ cairo_clip(cr); -+ -+ gtk_render_frame_gap(style, cr, -+ tabRect.x - gap_loffset, -+ tabRect.y + tabRect.height - gap_voffset, -+ tabRect.width + gap_loffset + gap_roffset, -+ 3 * gap_height, GTK_POS_TOP, -+ gap_loffset, gap_loffset + tabRect.width); -+ cairo_restore(cr); -+ } - } -+ } else { -+ gtk_render_background(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height); -+ gtk_render_frame(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height); - } - -+ gtk_style_context_restore(style); -+ - if (state->focused) { - /* Paint the focus ring */ -- GtkBorder border; -- gtk_style_context_get_border(style, GetStateFlagsFromGtkWidgetState(state), &border); -+ GtkBorder padding; - -- focusRect.x += border.left; -- focusRect.width -= (border.left + border.right); -- focusRect.y += border.top; -- focusRect.height -= (border.top + border.bottom); -+ gtk_style_context_save(style); -+ moz_gtk_tab_prepare_style_context(style, flags); -+ -+ gtk_style_context_get_padding(style, GetStateFlagsFromGtkWidgetState(state), &padding); -+ -+ focusRect.x += padding.left; -+ focusRect.width -= (padding.left + padding.right); -+ focusRect.y += padding.top; -+ focusRect.height -= (padding.top + padding.bottom); - - gtk_render_focus(style, cr, - focusRect.x, focusRect.y, focusRect.width, focusRect.height); -+ -+ gtk_style_context_restore(style); - } - -- gtk_style_context_restore(style); - - return MOZ_GTK_SUCCESS; - } -@@ -2831,11 +2855,7 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, - gtk_style_context_save(style); - moz_gtk_tab_prepare_style_context(style, flags); - -- // TODO add_style_border() should be replaced -- // with focus-line-width and focus-padding -- // see Bug 877605 - *left = *top = *right = *bottom = 0; -- moz_gtk_add_style_border(style, left, top, right, bottom); - moz_gtk_add_style_padding(style, left, top, right, bottom); - - gtk_widget_style_get (gTabWidget, "tab-curvature", &tab_curvature, NULL); -@@ -2846,16 +2866,9 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, - int initial_gap; - gtk_widget_style_get (gTabWidget, "initial-gap", &initial_gap, NULL); - if (direction == GTK_TEXT_DIR_RTL) -- *right += initial_gap; -+ *right += initial_gap; - else -- *left += initial_gap; -- } -- -- // Top tabs have no bottom border, bottom tabs have no top border -- if (flags & MOZ_GTK_TAB_BOTTOM) { -- *top = 0; -- } else { -- *bottom = 0; -+ *left += initial_gap; - } - - gtk_style_context_restore(style); -diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp -index 9dedd76..779eceb 100644 ---- widget/gtk/nsNativeThemeGTK.cpp -+++ widget/gtk/nsNativeThemeGTK.cpp -@@ -765,6 +765,8 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType, - return false; - - gint gap_height = moz_gtk_get_tab_thickness(); -+ if (!gap_height) -+ return false; - - int32_t extra = gap_height - GetTabMarginPixels(aFrame); - if (extra <= 0) Property changes on: head/www/firefox/files/patch-bug1073117 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/firefox/files/patch-bug1021761 =================================================================== --- head/www/firefox/files/patch-bug1021761 (revision 393689) +++ head/www/firefox/files/patch-bug1021761 (revision 393690) @@ -1,1102 +1,1102 @@ diff --git configure.in configure.in index 48e60c0..ec08417 100644 --- configure.in +++ configure.in @@ -5591,6 +5591,67 @@ 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_WITH_STRING(oss, +[ --with-oss[=PFX] Enable OpenSoundSystem support [installed at prefix PFX]], + OSSPREFIX=$withval) + +if test -n "$OSSPREFIX"; then + if test "$OSSPREFIX" != "no"; then + MOZ_OSS=1 + else + MOZ_OSS= + fi +fi + +_SAVE_CFLAGS=$CFLAGS +_SAVE_LIBS=$LIBS +if test -n "$MOZ_OSS"; then + dnl Prefer 4Front implementation + AC_MSG_CHECKING([MOZ_OSS_CFLAGS]) + if test "$OSSPREFIX" != "yes"; then + oss_conf=${OSSPREFIX%/usr}/etc/oss.conf + if test -f "$oss_conf"; then + . "$oss_conf" + else + OSSLIBDIR=$OSSPREFIX/lib/oss + fi + if test -d "$OSSLIBDIR"; then + MOZ_OSS_CFLAGS="$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 soundcard.h) + + if test "$ac_cv_header_sys_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="$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 ================================== diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS index b441e8a..950d9e5 100644 --- media/libcubeb/AUTHORS +++ media/libcubeb/AUTHORS @@ -4,3 +4,4 @@ Michael Wu Paul Adenot David Richards Sebastien Alaiwan +Evgeniy Vodolazskiy 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 #include #include +#include #include #include #include @@ -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); @@ -327,10 +374,10 @@ alsa_refill_stream(cubeb_stream * stm) b[i] *= stm->volume; } } - wrote = snd_pcm_writei(stm->pcm, p, got); + 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; @@ -938,12 +1044,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) return CUBEB_ERROR; } - r = snd_pcm_hw_params_any(stm->pcm, hw_params); + r = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); if (r < 0) { return CUBEB_ERROR; } - r = snd_pcm_hw_params_get_channels_max(hw_params, max_channels); + r = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels); if (r < 0) { return CUBEB_ERROR; } @@ -963,34 +1069,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. */ - r = snd_pcm_open(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); + r = WRAP(snd_pcm_open)(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); if (r < 0) { return CUBEB_ERROR; } - r = snd_pcm_hw_params_any(pcm, hw_params); + r = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); if (r < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - r = snd_pcm_hw_params_get_rate(hw_params, rate, &dir); + r = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir); if (r >= 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; - r = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL); + r = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL); if (r < 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,402 @@ +/* + * 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 +#else +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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; irunning) { + 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, + .stream_set_volume = oss_stream_set_volume, + .stream_set_panning = oss_stream_set_panning, + .stream_get_current_device = NULL, + .stream_device_destroy = NULL, + .stream_register_device_changed_callback = NULL +}; 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 media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build +diff --git media/webrtc/signaling/test/common.build media/webrtc/signaling/test/common.build index 991f03f..3d99eb5 100644 ---- media/webrtc/signaling/test/moz.build -+++ media/webrtc/signaling/test/moz.build -@@ -112,8 +112,8 @@ if CONFIG['JS_SHARED_LIBRARY']: +--- media/webrtc/signaling/test/common.build ++++ media/webrtc/signaling/test/common.build +@@ -102,8 +102,8 @@ USE_LIBS += ['mozglue'] OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] OS_LIBS += CONFIG['REALTIME_LIBS'] -if CONFIG['MOZ_ALSA']: - OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] +if CONFIG['MOZ_OSS']: + OS_LIBS += CONFIG['MOZ_OSS_LIBS'] if CONFIG['MOZ_NATIVE_JPEG']: OS_LIBS += CONFIG['MOZ_JPEG_LIBS'] diff --git toolkit/library/moz.build toolkit/library/moz.build index e191f13..4fb268a 100644 --- toolkit/library/moz.build +++ toolkit/library/moz.build @@ -234,8 +234,8 @@ if CONFIG['MOZ_NATIVE_LIBVPX']: if not CONFIG['MOZ_TREE_PIXMAN']: OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] -if CONFIG['MOZ_ALSA']: - OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] +if CONFIG['MOZ_OSS']: + OS_LIBS += CONFIG['MOZ_OSS_LIBS'] if CONFIG['HAVE_CLOCK_MONOTONIC']: OS_LIBS += CONFIG['REALTIME_LIBS'] Index: head/www/firefox/files/patch-bug826985 =================================================================== --- head/www/firefox/files/patch-bug826985 (revision 393689) +++ head/www/firefox/files/patch-bug826985 (revision 393690) @@ -1,179 +1,179 @@ commit 8024d93 Author: Henrik Gulbrandsen Date: Fri Jan 4 13:49:22 2013 +0100 Bug 826985 - Support more video formats for WebRTC via libv4l2 on Linux. --- config/system-headers | 1 + configure.in | 7 +++++++ media/webrtc/signaling/test/Makefile.in | 1 + .../modules/video_capture/linux/device_info_linux.cc | 17 +++++++++++++++++ .../modules/video_capture/linux/video_capture_linux.cc | 16 +++++++++++++++- .../webrtc/modules/video_capture/video_capture.gypi | 11 +++++++++++ toolkit/library/Makefile.in | 1 + 6 files changed, 52 insertions(+), 1 deletion(-) diff --git config/system-headers config/system-headers index 55e4cd1..76567b3 100644 --- config/system-headers +++ config/system-headers @@ -627,6 +627,7 @@ libgnome/libgnome.h libgnomeui/gnome-icon-lookup.h libgnomeui/gnome-icon-theme.h libgnomeui/gnome-ui-init.h +libv4l2.h lib$routines.h limits limits.h diff --git configure.in configure.in index 55e4cd1..76567b3 100644 --- configure.in +++ configure.in @@ -5309,6 +5309,9 @@ if test -n "$MOZ_WEBRTC"; then MOZ_VP8_ENCODER=1 MOZ_VP8_ERROR_CONCEALMENT=1 + dnl with libv4l2 we can support more cameras + PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) + dnl enable once Signaling lands MOZ_WEBRTC_SIGNALING=1 AC_DEFINE(MOZ_WEBRTC_SIGNALING) 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/moz.build media/webrtc/signaling/test/moz.build +diff --git media/webrtc/signaling/test/common.build media/webrtc/signaling/test/common.build index b483cd1..f1dd1f0 100644 ---- media/webrtc/signaling/test/moz.build -+++ media/webrtc/signaling/test/moz.build -@@ -122,6 +122,7 @@ if CONFIG['JS_SHARED_LIBRARY']: - 'js', - ] +--- media/webrtc/signaling/test/common.build ++++ media/webrtc/signaling/test/common.build +@@ -99,6 +99,7 @@ if CONFIG['JS_SHARED_LIBRARY']: + + USE_LIBS += ['mozglue'] +OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS'] OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] OS_LIBS += CONFIG['REALTIME_LIBS'] diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc 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 @@ -25,10 +25,21 @@ #else #include #endif +#ifdef HAVE_LIBV4L2 +#include +#endif #include "webrtc/system_wrappers/interface/ref_count.h" #include "webrtc/system_wrappers/interface/trace.h" +#ifdef HAVE_LIBV4L2 +#define open v4l2_open +#define close v4l2_close +#define dup v4l2_dup +#define ioctl v4l2_ioctl +#define mmap v4l2_mmap +#define munmap v4l2_munmap +#endif namespace webrtc { @@ -130,6 +142,11 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( memset(deviceNameUTF8, 0, deviceNameLength); memcpy(cameraName, cap.card, sizeof(cap.card)); + if (cameraName[0] == '\0') + { + sprintf(cameraName, "Camera at /dev/video%d", deviceNumber); + } + if (deviceNameLength >= strlen(cameraName)) { memcpy(deviceNameUTF8, cameraName, strlen(cameraName)); diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc index 12df1b3..e9863ba 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc +++ media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc @@ -25,6 +25,9 @@ #else #include #endif +#ifdef HAVE_LIBV4L2 +#include +#endif #include @@ -26,6 +31,15 @@ #include "critical_section_wrapper.h" #include "video_capture_linux.h" +#ifdef HAVE_LIBV4L2 +#define open v4l2_open +#define close v4l2_close +#define dup v4l2_dup +#define ioctl v4l2_ioctl +#define mmap v4l2_mmap +#define munmap v4l2_munmap +#endif + namespace webrtc { namespace videocapturemodule diff --git media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi index d46b5aa..e452223 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi +++ media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi @@ -7,6 +7,9 @@ # be found in the AUTHORS file in the root of the source tree. { + 'variables': { + 'use_libv4l2%': 0, + }, 'targets': [ { 'target_name': 'video_capture_module', @@ -69,6 +72,19 @@ 'linux/video_capture_linux.cc', 'linux/video_capture_linux.h', ], + 'conditions': [ + ['use_libv4l2==1', { + 'defines': [ + 'HAVE_LIBV4L2', + ], + 'cflags_mozilla': [ + '$(MOZ_LIBV4L2_CFLAGS)', + ], + 'libraries': [ + '-lv4l2', + ], + }], + ], }], # linux ['OS=="mac"', { 'sources': [ diff --git toolkit/library/moz.build toolkit/library/moz.build index 9c16ffa..1db3794 100644 --- toolkit/library/moz.build +++ toolkit/library/moz.build @@ -163,6 +163,7 @@ if CONFIG['OS_ARCH'] == 'Linux' and CONF ] OS_LIBS += CONFIG['MOZ_CAIRO_OSLIBS'] +OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS'] OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] OS_LIBS += CONFIG['MOZ_APP_EXTRA_LIBS'] Index: head/www/firefox/files/patch-bug847568 =================================================================== --- head/www/firefox/files/patch-bug847568 (revision 393689) +++ head/www/firefox/files/patch-bug847568 (revision 393690) @@ -1,242 +1,247 @@ # Allow building against system-wide graphite2/harfbuzz. diff --git config/Makefile.in config/Makefile.in index 14bfc0d..5383399 100644 --- config/Makefile.in +++ config/Makefile.in @@ -75,6 +75,8 @@ export:: $(export-preqs) -DMOZ_NATIVE_LIBEVENT=$(MOZ_NATIVE_LIBEVENT) \ -DMOZ_NATIVE_LIBVPX=$(MOZ_NATIVE_LIBVPX) \ -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \ + -DMOZ_NATIVE_GRAPHITE2=$(MOZ_NATIVE_GRAPHITE2) \ + -DMOZ_NATIVE_HARFBUZZ=$(MOZ_NATIVE_HARFBUZZ) \ $(srcdir)/system-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers $(INSTALL) system_wrappers $(DIST) diff --git config/system-headers config/system-headers index 18e8703..bdc5f82 100644 --- config/system-headers +++ config/system-headers @@ -1357,3 +1357,11 @@ unicode/utypes.h #endif libutil.h unwind.h +#if MOZ_NATIVE_GRAPHITE2==1 +graphite2/Font.h +graphite2/Segment.h +#endif +#if MOZ_NATIVE_HARFBUZZ==1 +harfbuzz/hb-ot.h +harfbuzz/hb.h +#endif diff --git configure.in configure.in index ac38f40..87536b7 100644 --- configure.in +++ configure.in @@ -7986,6 +7986,49 @@ if test "$USE_FC_FREETYPE"; then fi dnl ======================================================== +dnl Check for harfbuzz +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-harfbuzz, +[ --with-system-harfbuzz Use system harfbuzz (located with pkgconfig)], +MOZ_NATIVE_HARFBUZZ=1, +MOZ_NATIVE_HARFBUZZ=) + +if test -n "$MOZ_NATIVE_HARFBUZZ"; then + PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 0.9.34) +fi + +AC_SUBST(MOZ_NATIVE_HARFBUZZ) + +dnl ======================================================== +dnl Check for graphite2 +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-graphite2, +[ --with-system-graphite2 Use system graphite2 (located with pkgconfig)], +MOZ_NATIVE_GRAPHITE2=1, +MOZ_NATIVE_GRAPHITE2=) + +if test -n "$MOZ_NATIVE_GRAPHITE2"; then + PKG_CHECK_MODULES(MOZ_GRAPHITE2, graphite2) + + dnl graphite2.pc has bogus version, check manually + AC_TRY_COMPILE([ #include + #define GR2_VERSION_REQUIRE(major,minor,bugfix) \ + ( GR2_VERSION_MAJOR * 10000 + GR2_VERSION_MINOR \ + * 100 + GR2_VERSION_BUGFIX >= \ + (major) * 10000 + (minor) * 100 + (bugfix) ) + ], [ + #if !GR2_VERSION_REQUIRE(1,2,4) + #error "Insufficient graphite2 version." + #endif + ], [], + [AC_MSG_ERROR([--with-system-graphite2 requested but no working libgraphite2 found])]) +fi + +AC_SUBST(MOZ_NATIVE_GRAPHITE2) + +dnl ======================================================== dnl Check for pixman and cairo dnl ======================================================== diff --git dom/base/moz.build dom/base/moz.build index a660ba4..6b2f602 100644 --- dom/base/moz.build +++ dom/base/moz.build -@@ -196,6 +196,9 @@ SOURCES += [ - 'nsObjectLoadingContent.cpp', - ] +@@ -375,6 +375,9 @@ if CONFIG['INTEL_ARCHITECTURE']: + SOURCES += ['nsTextFragmentSSE2.cpp'] + SOURCES['nsTextFragmentSSE2.cpp'].flags += CONFIG['SSE2_FLAGS'] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + SOURCES['nsContentUtils.cpp'].flags += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + EXTRA_COMPONENTS += [ - 'contentAreaDropListener.js', - 'contentAreaDropListener.manifest', + 'ConsoleAPI.manifest', + 'ConsoleAPIStorage.js', diff --git gfx/graphite2/moz-gr-update.sh gfx/graphite2/moz-gr-update.sh index f3d76ea..a9e7fb6 100644 --- gfx/graphite2/moz-gr-update.sh +++ gfx/graphite2/moz-gr-update.sh @@ -23,8 +23,14 @@ echo "\nSee" $0 "for update procedure.\n" >> gfx/graphite2/README.mozilla find gfx/graphite2/ -name "*.cpp" -exec perl -p -i -e "s///;s/Windows.h/windows.h/;" {} \; find gfx/graphite2/ -name "*.h" -exec perl -p -i -e "s///;s/Windows.h/windows.h/;" {} \; +# closest tag/release to require for system version +TAG=$(cd ../graphitedev/ && hg parents --template {latesttag}) + +perl -p -i -e "s/[0-9]+\,[0-9]+\,[0-9]+/$TAG/ and tr/./,/ \ + if /GR2_VERSION_REQUIRE/" configure.in + # summarize what's been touched -echo Updated to $CHANGESET. +echo Updated to $CHANGESET \($TAG for --with-system-graphite2\) echo Here is what changed in the gfx/graphite2 directory: echo diff --git gfx/harfbuzz/README-mozilla gfx/harfbuzz/README-mozilla index ca57d16..1ce21fe 100644 --- gfx/harfbuzz/README-mozilla +++ gfx/harfbuzz/README-mozilla -@@ -21,3 +21,8 @@ In addition, the src/Makefile.in file here is NOT from upstream, nor is it +@@ -18,3 +18,8 @@ the mozilla tree. + In addition, the src/Makefile.in file here is NOT from upstream, nor is it generated from src/Makefile.am (the original harfbuzz version); it is a mozilla- - specific makefile that is maintained by hand. It should only need updating when - new source files or exported headers are added in harfbuzz. + specific makefile that is maintained by hand. + +The in-tree copy may be omitted during build by --with-system-harfbuzz. +Make sure to keep pkg-config version check within configure.in in sync +with checkout version or increment latest tag by one if it's not based +on upstream release. diff --git gfx/moz.build gfx/moz.build index 519aa46..6929751 100644 --- gfx/moz.build +++ gfx/moz.build @@ -7,6 +7,12 @@ if CONFIG['MOZ_TREE_CAIRO']: DIRS += ['cairo'] +if not CONFIG['MOZ_NATIVE_GRAPHITE2']: + DIRS += ['graphite2/src' ] + +if not CONFIG['MOZ_NATIVE_HARFBUZZ']: + DIRS += ['harfbuzz/src'] + DIRS += [ '2d', 'ycbcr', @@ -15,8 +21,6 @@ DIRS += [ 'qcms', 'gl', 'layers', - 'graphite2/src', - 'harfbuzz/src', 'ots/src', 'thebes', 'ipc', diff --git gfx/skia/generate_mozbuild.py gfx/skia/generate_mozbuild.py index 28fa6b5..240dced 100755 --- gfx/skia/generate_mozbuild.py +++ gfx/skia/generate_mozbuild.py -@@ -140,6 +140,9 @@ if CONFIG['GNU_CXX']: - if not CONFIG['CLANG_CXX']: - CXXFLAGS += ['-Wno-logical-op'] +@@ -142,6 +142,9 @@ if CONFIG['GNU_CXX']: + if CONFIG['CPU_ARCH'] == 'arm': + SOURCES['trunk/src/opts/SkBlitRow_opts_arm.cpp'].flags += ['-fomit-frame-pointer'] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android', 'gonk', 'qt'): CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] diff --git gfx/skia/moz.build gfx/skia/moz.build index 1d0c2f9..adb8941 100644 --- gfx/skia/moz.build +++ gfx/skia/moz.build -@@ -968,6 +968,9 @@ if CONFIG['GNU_CXX']: - if not CONFIG['CLANG_CXX']: - CXXFLAGS += ['-Wno-logical-op'] +@@ -970,6 +970,9 @@ if CONFIG['GNU_CXX']: + if CONFIG['CPU_ARCH'] == 'arm': + SOURCES['trunk/src/opts/SkBlitRow_opts_arm.cpp'].flags += ['-fomit-frame-pointer'] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android', 'gonk', 'qt'): CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] diff --git gfx/thebes/moz.build gfx/thebes/moz.build index d5852fa..aeeab25 100644 --- gfx/thebes/moz.build +++ gfx/thebes/moz.build @@ -278,6 +278,12 @@ CXXFLAGS += CONFIG['TK_CFLAGS'] CFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] CFLAGS += CONFIG['TK_CFLAGS'] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + +if CONFIG['MOZ_NATIVE_GRAPHITE2']: + CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('android', 'gonk', 'qt'): CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] diff --git intl/unicharutil/util/moz.build intl/unicharutil/util/moz.build index d736943..41a931f 100644 --- intl/unicharutil/util/moz.build +++ intl/unicharutil/util/moz.build -@@ -37,3 +37,6 @@ if CONFIG['_MSC_VER']: - +@@ -42,6 +42,9 @@ if CONFIG['_MSC_VER']: if CONFIG['ENABLE_INTL_API']: CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS'] -+ + +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] ++ + if CONFIG['GNU_CXX']: + FAIL_ON_WARNINGS = True + diff --git netwerk/dns/moz.build netwerk/dns/moz.build index 0b0717a..2e665c9 100644 --- netwerk/dns/moz.build +++ netwerk/dns/moz.build -@@ -64,3 +64,6 @@ GENERATED_FILES = [ - LOCAL_INCLUDES += [ +@@ -66,5 +66,8 @@ LOCAL_INCLUDES += [ '/netwerk/base', ] -+ + +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] ++ + if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['ANDROID_VERSION'] > '19': + CXXFLAGS += ['-I%s/bionic/libc/dns/include' % CONFIG['ANDROID_SOURCE']] diff --git toolkit/library/moz.build toolkit/library/moz.build index 67f0db9..d42137a 100644 --- toolkit/library/moz.build +++ toolkit/library/moz.build @@ -187,6 +187,12 @@ if CONFIG['MOZ_NATIVE_LIBVPX']: if not CONFIG['MOZ_TREE_PIXMAN']: OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] +if CONFIG['MOZ_NATIVE_GRAPHITE2']: + OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS'] + +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS'] + if CONFIG['MOZ_OSS']: OS_LIBS += CONFIG['MOZ_OSS_LIBS'] Index: head/www/firefox/files/patch-ijg-libjpeg =================================================================== --- head/www/firefox/files/patch-ijg-libjpeg (revision 393689) +++ head/www/firefox/files/patch-ijg-libjpeg (revision 393690) @@ -1,382 +1,383 @@ # Partially revert bug 791305 to allow building with system IJG jpeg library diff --git configure.in configure.in index f0aeb5d..1c01010 100644 --- configure.in +++ configure.in @@ -4027,11 +4027,7 @@ if test "$MOZ_NATIVE_JPEG" = 1; then #include ], [ #if JPEG_LIB_VERSION < $MOZJPEG #error "Insufficient JPEG library version ($MOZJPEG required)." - #endif - #ifndef JCS_EXTENSIONS - #error "libjpeg-turbo JCS_EXTENSIONS required" - #endif - ], + #endif ], MOZ_NATIVE_JPEG=1, AC_MSG_ERROR([Insufficient JPEG library version for --with-system-jpeg])) fi diff --git image/decoders/nsJPEGDecoder.cpp image/decoders/nsJPEGDecoder.cpp index 8fa8200..1d2a259 100644 --- image/decoders/nsJPEGDecoder.cpp +++ image/decoders/nsJPEGDecoder.cpp @@ -21,13 +21,28 @@ extern "C" { #include "iccjpeg.h" -} +#ifdef JCS_EXTENSIONS #if MOZ_BIG_ENDIAN #define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_XRGB #else #define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_BGRX #endif +#else +/* Colorspace conversion (copied from jpegint.h) */ +struct jpeg_color_deconverter { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, color_convert, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows)); +}; + +METHODDEF(void) +ycc_rgb_convert_argb (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows); +#endif +} static void cmyk_convert_rgb(JSAMPROW row, JDIMENSION width); @@ -367,6 +382,7 @@ nsJPEGDecoder::WriteInternal(const char* case JCS_GRAYSCALE: case JCS_RGB: case JCS_YCbCr: +#ifdef JCS_EXTENSIONS // if we're not color managing we can decode directly to // MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB if (mCMSMode != eCMSMode_All) { @@ -375,6 +391,9 @@ nsJPEGDecoder::WriteInternal(const char* } else { mInfo.out_color_space = JCS_RGB; } +#else + mInfo.out_color_space = JCS_RGB; +#endif break; case JCS_CMYK: case JCS_YCCK: -@@ -433,6 +452,15 @@ nsJPEGDecoder::WriteInternal(const char* +@@ -448,6 +467,16 @@ nsJPEGDecoder::WriteInternal(const char* return; // I/O suspension } +#ifndef JCS_EXTENSIONS + /* Force to use our YCbCr to Packed RGB converter when possible */ + if (!mTransform && (mCMSMode != eCMSMode_All) && + mInfo.jpeg_color_space == JCS_YCbCr && mInfo.out_color_space == JCS_RGB) { + /* Special case for the most common case: transform from YCbCr direct into packed ARGB */ + mInfo.out_color_components = 4; /* Packed ARGB pixels are always 4 bytes...*/ + mInfo.cconvert->color_convert = ycc_rgb_convert_argb; + } +#endif - ++ // If this is a progressive JPEG ... mState = mInfo.buffered_image ? + JPEG_DECOMPRESS_PROGRESSIVE : JPEG_DECOMPRESS_SEQUENTIAL; @@ -605,7 +633,11 @@ nsJPEGDecoder::OutputScanlines(bool* sus uint32_t* imageRow = ((uint32_t*)mImageData) + (mInfo.output_scanline * mInfo.output_width); +#ifdef JCS_EXTENSIONS if (mInfo.out_color_space == MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB) { +#else + if (mInfo.cconvert->color_convert == ycc_rgb_convert_argb) { +#endif // Special case: scanline will be directly converted into packed ARGB if (jpeg_read_scanlines(&mInfo, (JSAMPARRAY)&imageRow, 1) != 1) { *suspend = true; // suspend @@ -920,6 +952,282 @@ term_source (j_decompress_ptr jd) } // namespace mozilla +#ifndef JCS_EXTENSIONS +/**************** YCbCr -> Cairo's RGB24/ARGB32 conversion: most common case **************/ + +/* + * YCbCr is defined per CCIR 601-1, except that Cb and Cr are + * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. + * The conversion equations to be implemented are therefore + * R = Y + 1.40200 * Cr + * G = Y - 0.34414 * Cb - 0.71414 * Cr + * B = Y + 1.77200 * Cb + * where Cb and Cr represent the incoming values less CENTERJSAMPLE. + * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) + * + * To avoid floating-point arithmetic, we represent the fractional constants + * as integers scaled up by 2^16 (about 4 digits precision); we have to divide + * the products by 2^16, with appropriate rounding, to get the correct answer. + * Notice that Y, being an integral input, does not contribute any fraction + * so it need not participate in the rounding. + * + * For even more speed, we avoid doing any multiplications in the inner loop + * by precalculating the constants times Cb and Cr for all possible values. + * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); + * for 12-bit samples it is still acceptable. It's not very reasonable for + * 16-bit samples, but if you want lossless storage you shouldn't be changing + * colorspace anyway. + * The Cr=>R and Cb=>B values can be rounded to integers in advance; the + * values for the G calculation are left scaled up, since we must add them + * together before rounding. + */ + +#define SCALEBITS 16 /* speediest right-shift on some machines */ + +/* Use static tables for color processing. */ +/* Four tables, each 256 entries of 4 bytes totals 4K which is not bad... */ + +const int Cr_r_tab[(MAXJSAMPLE+1) * sizeof(int)] ={ + -0xb3, -0xb2, -0xb1, -0xaf, -0xae, -0xac, + -0xab, -0xaa, -0xa8, -0xa7, -0xa5, -0xa4, + -0xa3, -0xa1, -0xa0, -0x9e, -0x9d, -0x9c, + -0x9a, -0x99, -0x97, -0x96, -0x95, -0x93, + -0x92, -0x90, -0x8f, -0x8e, -0x8c, -0x8b, + -0x89, -0x88, -0x87, -0x85, -0x84, -0x82, + -0x81, -0x80, -0x7e, -0x7d, -0x7b, -0x7a, + -0x79, -0x77, -0x76, -0x74, -0x73, -0x72, + -0x70, -0x6f, -0x6d, -0x6c, -0x6b, -0x69, + -0x68, -0x66, -0x65, -0x64, -0x62, -0x61, + -0x5f, -0x5e, -0x5d, -0x5b, -0x5a, -0x58, + -0x57, -0x56, -0x54, -0x53, -0x51, -0x50, + -0x4f, -0x4d, -0x4c, -0x4a, -0x49, -0x48, + -0x46, -0x45, -0x43, -0x42, -0x40, -0x3f, + -0x3e, -0x3c, -0x3b, -0x39, -0x38, -0x37, + -0x35, -0x34, -0x32, -0x31, -0x30, -0x2e, + -0x2d, -0x2b, -0x2a, -0x29, -0x27, -0x26, + -0x24, -0x23, -0x22, -0x20, -0x1f, -0x1d, + -0x1c, -0x1b, -0x19, -0x18, -0x16, -0x15, + -0x14, -0x12, -0x11, -0x0f, -0x0e, -0x0d, + -0x0b, -0x0a, -0x08, -0x07, -0x06, -0x04, + -0x03, -0x01, 0x00, 0x01, 0x03, 0x04, + 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0d, + 0x0e, 0x0f, 0x11, 0x12, 0x14, 0x15, + 0x16, 0x18, 0x19, 0x1b, 0x1c, 0x1d, + 0x1f, 0x20, 0x22, 0x23, 0x24, 0x26, + 0x27, 0x29, 0x2a, 0x2b, 0x2d, 0x2e, + 0x30, 0x31, 0x32, 0x34, 0x35, 0x37, + 0x38, 0x39, 0x3b, 0x3c, 0x3e, 0x3f, + 0x40, 0x42, 0x43, 0x45, 0x46, 0x48, + 0x49, 0x4a, 0x4c, 0x4d, 0x4f, 0x50, + 0x51, 0x53, 0x54, 0x56, 0x57, 0x58, + 0x5a, 0x5b, 0x5d, 0x5e, 0x5f, 0x61, + 0x62, 0x64, 0x65, 0x66, 0x68, 0x69, + 0x6b, 0x6c, 0x6d, 0x6f, 0x70, 0x72, + 0x73, 0x74, 0x76, 0x77, 0x79, 0x7a, + 0x7b, 0x7d, 0x7e, 0x80, 0x81, 0x82, + 0x84, 0x85, 0x87, 0x88, 0x89, 0x8b, + 0x8c, 0x8e, 0x8f, 0x90, 0x92, 0x93, + 0x95, 0x96, 0x97, 0x99, 0x9a, 0x9c, + 0x9d, 0x9e, 0xa0, 0xa1, 0xa3, 0xa4, + 0xa5, 0xa7, 0xa8, 0xaa, 0xab, 0xac, + 0xae, 0xaf, 0xb1, 0xb2, + }; + +const int Cb_b_tab[(MAXJSAMPLE+1) * sizeof(int)] ={ + -0xe3, -0xe1, -0xdf, -0xde, -0xdc, -0xda, + -0xd8, -0xd6, -0xd5, -0xd3, -0xd1, -0xcf, + -0xce, -0xcc, -0xca, -0xc8, -0xc6, -0xc5, + -0xc3, -0xc1, -0xbf, -0xbe, -0xbc, -0xba, + -0xb8, -0xb7, -0xb5, -0xb3, -0xb1, -0xaf, + -0xae, -0xac, -0xaa, -0xa8, -0xa7, -0xa5, + -0xa3, -0xa1, -0x9f, -0x9e, -0x9c, -0x9a, + -0x98, -0x97, -0x95, -0x93, -0x91, -0x90, + -0x8e, -0x8c, -0x8a, -0x88, -0x87, -0x85, + -0x83, -0x81, -0x80, -0x7e, -0x7c, -0x7a, + -0x78, -0x77, -0x75, -0x73, -0x71, -0x70, + -0x6e, -0x6c, -0x6a, -0x69, -0x67, -0x65, + -0x63, -0x61, -0x60, -0x5e, -0x5c, -0x5a, + -0x59, -0x57, -0x55, -0x53, -0x52, -0x50, + -0x4e, -0x4c, -0x4a, -0x49, -0x47, -0x45, + -0x43, -0x42, -0x40, -0x3e, -0x3c, -0x3a, + -0x39, -0x37, -0x35, -0x33, -0x32, -0x30, + -0x2e, -0x2c, -0x2b, -0x29, -0x27, -0x25, + -0x23, -0x22, -0x20, -0x1e, -0x1c, -0x1b, + -0x19, -0x17, -0x15, -0x13, -0x12, -0x10, + -0x0e, -0x0c, -0x0b, -0x09, -0x07, -0x05, + -0x04, -0x02, 0x00, 0x02, 0x04, 0x05, + 0x07, 0x09, 0x0b, 0x0c, 0x0e, 0x10, + 0x12, 0x13, 0x15, 0x17, 0x19, 0x1b, + 0x1c, 0x1e, 0x20, 0x22, 0x23, 0x25, + 0x27, 0x29, 0x2b, 0x2c, 0x2e, 0x30, + 0x32, 0x33, 0x35, 0x37, 0x39, 0x3a, + 0x3c, 0x3e, 0x40, 0x42, 0x43, 0x45, + 0x47, 0x49, 0x4a, 0x4c, 0x4e, 0x50, + 0x52, 0x53, 0x55, 0x57, 0x59, 0x5a, + 0x5c, 0x5e, 0x60, 0x61, 0x63, 0x65, + 0x67, 0x69, 0x6a, 0x6c, 0x6e, 0x70, + 0x71, 0x73, 0x75, 0x77, 0x78, 0x7a, + 0x7c, 0x7e, 0x80, 0x81, 0x83, 0x85, + 0x87, 0x88, 0x8a, 0x8c, 0x8e, 0x90, + 0x91, 0x93, 0x95, 0x97, 0x98, 0x9a, + 0x9c, 0x9e, 0x9f, 0xa1, 0xa3, 0xa5, + 0xa7, 0xa8, 0xaa, 0xac, 0xae, 0xaf, + 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xba, + 0xbc, 0xbe, 0xbf, 0xc1, 0xc3, 0xc5, + 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xcf, + 0xd1, 0xd3, 0xd5, 0xd6, 0xd8, 0xda, + 0xdc, 0xde, 0xdf, 0xe1, + }; + +const int Cr_g_tab[(MAXJSAMPLE+1) * sizeof(int)] ={ + 0x5b6900, 0x5ab22e, 0x59fb5c, 0x59448a, 0x588db8, 0x57d6e6, + 0x572014, 0x566942, 0x55b270, 0x54fb9e, 0x5444cc, 0x538dfa, + 0x52d728, 0x522056, 0x516984, 0x50b2b2, 0x4ffbe0, 0x4f450e, + 0x4e8e3c, 0x4dd76a, 0x4d2098, 0x4c69c6, 0x4bb2f4, 0x4afc22, + 0x4a4550, 0x498e7e, 0x48d7ac, 0x4820da, 0x476a08, 0x46b336, + 0x45fc64, 0x454592, 0x448ec0, 0x43d7ee, 0x43211c, 0x426a4a, + 0x41b378, 0x40fca6, 0x4045d4, 0x3f8f02, 0x3ed830, 0x3e215e, + 0x3d6a8c, 0x3cb3ba, 0x3bfce8, 0x3b4616, 0x3a8f44, 0x39d872, + 0x3921a0, 0x386ace, 0x37b3fc, 0x36fd2a, 0x364658, 0x358f86, + 0x34d8b4, 0x3421e2, 0x336b10, 0x32b43e, 0x31fd6c, 0x31469a, + 0x308fc8, 0x2fd8f6, 0x2f2224, 0x2e6b52, 0x2db480, 0x2cfdae, + 0x2c46dc, 0x2b900a, 0x2ad938, 0x2a2266, 0x296b94, 0x28b4c2, + 0x27fdf0, 0x27471e, 0x26904c, 0x25d97a, 0x2522a8, 0x246bd6, + 0x23b504, 0x22fe32, 0x224760, 0x21908e, 0x20d9bc, 0x2022ea, + 0x1f6c18, 0x1eb546, 0x1dfe74, 0x1d47a2, 0x1c90d0, 0x1bd9fe, + 0x1b232c, 0x1a6c5a, 0x19b588, 0x18feb6, 0x1847e4, 0x179112, + 0x16da40, 0x16236e, 0x156c9c, 0x14b5ca, 0x13fef8, 0x134826, + 0x129154, 0x11da82, 0x1123b0, 0x106cde, 0x0fb60c, 0x0eff3a, + 0x0e4868, 0x0d9196, 0x0cdac4, 0x0c23f2, 0x0b6d20, 0x0ab64e, + 0x09ff7c, 0x0948aa, 0x0891d8, 0x07db06, 0x072434, 0x066d62, + 0x05b690, 0x04ffbe, 0x0448ec, 0x03921a, 0x02db48, 0x022476, + 0x016da4, 0x00b6d2, 0x000000, -0x00b6d2, -0x016da4, -0x022476, + -0x02db48, -0x03921a, -0x0448ec, -0x04ffbe, -0x05b690, -0x066d62, + -0x072434, -0x07db06, -0x0891d8, -0x0948aa, -0x09ff7c, -0x0ab64e, + -0x0b6d20, -0x0c23f2, -0x0cdac4, -0x0d9196, -0x0e4868, -0x0eff3a, + -0x0fb60c, -0x106cde, -0x1123b0, -0x11da82, -0x129154, -0x134826, + -0x13fef8, -0x14b5ca, -0x156c9c, -0x16236e, -0x16da40, -0x179112, + -0x1847e4, -0x18feb6, -0x19b588, -0x1a6c5a, -0x1b232c, -0x1bd9fe, + -0x1c90d0, -0x1d47a2, -0x1dfe74, -0x1eb546, -0x1f6c18, -0x2022ea, + -0x20d9bc, -0x21908e, -0x224760, -0x22fe32, -0x23b504, -0x246bd6, + -0x2522a8, -0x25d97a, -0x26904c, -0x27471e, -0x27fdf0, -0x28b4c2, + -0x296b94, -0x2a2266, -0x2ad938, -0x2b900a, -0x2c46dc, -0x2cfdae, + -0x2db480, -0x2e6b52, -0x2f2224, -0x2fd8f6, -0x308fc8, -0x31469a, + -0x31fd6c, -0x32b43e, -0x336b10, -0x3421e2, -0x34d8b4, -0x358f86, + -0x364658, -0x36fd2a, -0x37b3fc, -0x386ace, -0x3921a0, -0x39d872, + -0x3a8f44, -0x3b4616, -0x3bfce8, -0x3cb3ba, -0x3d6a8c, -0x3e215e, + -0x3ed830, -0x3f8f02, -0x4045d4, -0x40fca6, -0x41b378, -0x426a4a, + -0x43211c, -0x43d7ee, -0x448ec0, -0x454592, -0x45fc64, -0x46b336, + -0x476a08, -0x4820da, -0x48d7ac, -0x498e7e, -0x4a4550, -0x4afc22, + -0x4bb2f4, -0x4c69c6, -0x4d2098, -0x4dd76a, -0x4e8e3c, -0x4f450e, + -0x4ffbe0, -0x50b2b2, -0x516984, -0x522056, -0x52d728, -0x538dfa, + -0x5444cc, -0x54fb9e, -0x55b270, -0x566942, -0x572014, -0x57d6e6, + -0x588db8, -0x59448a, -0x59fb5c, -0x5ab22e, + }; + +const int Cb_g_tab[(MAXJSAMPLE+1) * sizeof(int)] ={ + 0x2c8d00, 0x2c34e6, 0x2bdccc, 0x2b84b2, 0x2b2c98, 0x2ad47e, + 0x2a7c64, 0x2a244a, 0x29cc30, 0x297416, 0x291bfc, 0x28c3e2, + 0x286bc8, 0x2813ae, 0x27bb94, 0x27637a, 0x270b60, 0x26b346, + 0x265b2c, 0x260312, 0x25aaf8, 0x2552de, 0x24fac4, 0x24a2aa, + 0x244a90, 0x23f276, 0x239a5c, 0x234242, 0x22ea28, 0x22920e, + 0x2239f4, 0x21e1da, 0x2189c0, 0x2131a6, 0x20d98c, 0x208172, + 0x202958, 0x1fd13e, 0x1f7924, 0x1f210a, 0x1ec8f0, 0x1e70d6, + 0x1e18bc, 0x1dc0a2, 0x1d6888, 0x1d106e, 0x1cb854, 0x1c603a, + 0x1c0820, 0x1bb006, 0x1b57ec, 0x1affd2, 0x1aa7b8, 0x1a4f9e, + 0x19f784, 0x199f6a, 0x194750, 0x18ef36, 0x18971c, 0x183f02, + 0x17e6e8, 0x178ece, 0x1736b4, 0x16de9a, 0x168680, 0x162e66, + 0x15d64c, 0x157e32, 0x152618, 0x14cdfe, 0x1475e4, 0x141dca, + 0x13c5b0, 0x136d96, 0x13157c, 0x12bd62, 0x126548, 0x120d2e, + 0x11b514, 0x115cfa, 0x1104e0, 0x10acc6, 0x1054ac, 0x0ffc92, + 0x0fa478, 0x0f4c5e, 0x0ef444, 0x0e9c2a, 0x0e4410, 0x0debf6, + 0x0d93dc, 0x0d3bc2, 0x0ce3a8, 0x0c8b8e, 0x0c3374, 0x0bdb5a, + 0x0b8340, 0x0b2b26, 0x0ad30c, 0x0a7af2, 0x0a22d8, 0x09cabe, + 0x0972a4, 0x091a8a, 0x08c270, 0x086a56, 0x08123c, 0x07ba22, + 0x076208, 0x0709ee, 0x06b1d4, 0x0659ba, 0x0601a0, 0x05a986, + 0x05516c, 0x04f952, 0x04a138, 0x04491e, 0x03f104, 0x0398ea, + 0x0340d0, 0x02e8b6, 0x02909c, 0x023882, 0x01e068, 0x01884e, + 0x013034, 0x00d81a, 0x008000, 0x0027e6, -0x003034, -0x00884e, + -0x00e068, -0x013882, -0x01909c, -0x01e8b6, -0x0240d0, -0x0298ea, + -0x02f104, -0x03491e, -0x03a138, -0x03f952, -0x04516c, -0x04a986, + -0x0501a0, -0x0559ba, -0x05b1d4, -0x0609ee, -0x066208, -0x06ba22, + -0x07123c, -0x076a56, -0x07c270, -0x081a8a, -0x0872a4, -0x08cabe, + -0x0922d8, -0x097af2, -0x09d30c, -0x0a2b26, -0x0a8340, -0x0adb5a, + -0x0b3374, -0x0b8b8e, -0x0be3a8, -0x0c3bc2, -0x0c93dc, -0x0cebf6, + -0x0d4410, -0x0d9c2a, -0x0df444, -0x0e4c5e, -0x0ea478, -0x0efc92, + -0x0f54ac, -0x0facc6, -0x1004e0, -0x105cfa, -0x10b514, -0x110d2e, + -0x116548, -0x11bd62, -0x12157c, -0x126d96, -0x12c5b0, -0x131dca, + -0x1375e4, -0x13cdfe, -0x142618, -0x147e32, -0x14d64c, -0x152e66, + -0x158680, -0x15de9a, -0x1636b4, -0x168ece, -0x16e6e8, -0x173f02, + -0x17971c, -0x17ef36, -0x184750, -0x189f6a, -0x18f784, -0x194f9e, + -0x19a7b8, -0x19ffd2, -0x1a57ec, -0x1ab006, -0x1b0820, -0x1b603a, + -0x1bb854, -0x1c106e, -0x1c6888, -0x1cc0a2, -0x1d18bc, -0x1d70d6, + -0x1dc8f0, -0x1e210a, -0x1e7924, -0x1ed13e, -0x1f2958, -0x1f8172, + -0x1fd98c, -0x2031a6, -0x2089c0, -0x20e1da, -0x2139f4, -0x21920e, + -0x21ea28, -0x224242, -0x229a5c, -0x22f276, -0x234a90, -0x23a2aa, + -0x23fac4, -0x2452de, -0x24aaf8, -0x250312, -0x255b2c, -0x25b346, + -0x260b60, -0x26637a, -0x26bb94, -0x2713ae, -0x276bc8, -0x27c3e2, + -0x281bfc, -0x287416, -0x28cc30, -0x29244a, -0x297c64, -0x29d47e, + -0x2a2c98, -0x2a84b2, -0x2adccc, -0x2b34e6, + }; + + +/* We assume that right shift corresponds to signed division by 2 with + * rounding towards minus infinity. This is correct for typical "arithmetic + * shift" instructions that shift in copies of the sign bit. But some + * C compilers implement >> with an unsigned shift. For these machines you + * must define RIGHT_SHIFT_IS_UNSIGNED. + * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity. + * It is only applied with constant shift counts. SHIFT_TEMPS must be + * included in the variables of any routine using RIGHT_SHIFT. + */ + +#ifdef RIGHT_SHIFT_IS_UNSIGNED +#define SHIFT_TEMPS INT32 shift_temp; +#define RIGHT_SHIFT(x,shft) \ + ((shift_temp = (x)) < 0 ? \ + (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \ + (shift_temp >> (shft))) +#else +#define SHIFT_TEMPS +#define RIGHT_SHIFT(x,shft) ((x) >> (shft)) +#endif + + +METHODDEF(void) +ycc_rgb_convert_argb (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + JDIMENSION num_cols = cinfo->output_width; + JSAMPLE * range_limit = cinfo->sample_range_limit; + + SHIFT_TEMPS + + /* This is used if we don't have SSE2 */ + + while (--num_rows >= 0) { + JSAMPROW inptr0 = input_buf[0][input_row]; + JSAMPROW inptr1 = input_buf[1][input_row]; + JSAMPROW inptr2 = input_buf[2][input_row]; + input_row++; + uint32_t *outptr = (uint32_t *) *output_buf++; + for (JDIMENSION col = 0; col < num_cols; col++) { + int y = GETJSAMPLE(inptr0[col]); + int cb = GETJSAMPLE(inptr1[col]); + int cr = GETJSAMPLE(inptr2[col]); + JSAMPLE * range_limit_y = range_limit + y; + /* Range-limiting is essential due to noise introduced by DCT losses. */ + outptr[col] = 0xFF000000 | + ( range_limit_y[Cr_r_tab[cr]] << 16 ) | + ( range_limit_y[((int) RIGHT_SHIFT(Cb_g_tab[cb] + Cr_g_tab[cr], SCALEBITS))] << 8 ) | + ( range_limit_y[Cb_b_tab[cb]] ); + } + } +} +#endif + + ///*************** Inverted CMYK -> RGB conversion ************************* /// Input is (Inverted) CMYK stored as 4 bytes per pixel. /// Output is RGB stored as 3 bytes per pixel. Index: head/www/firefox/files/patch-system-openh264 =================================================================== --- head/www/firefox/files/patch-system-openh264 (revision 393689) +++ head/www/firefox/files/patch-system-openh264 (revision 393690) @@ -1,238 +1,231 @@ # Revert bug 1045209 to allow using absolute path diff --git dom/media/gmp/GMPChild.cpp dom/media/gmp/GMPChild.cpp index 1dde3ac..12c88cf 100644 --- dom/media/gmp/GMPChild.cpp +++ dom/media/gmp/GMPChild.cpp @@ -76,21 +76,14 @@ GetFileBase(const std::string& aPluginPa } #endif - nsCOMPtr parent; - rv = aFileBase->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(aFileBase->GetLeafName(leafName))) { return false; } - aBaseName = Substring(parentLeafName, + aBaseName = Substring(leafName, 4, - parentLeafName.Length() - 1); + leafName.Length() - 1); return true; } diff --git dom/media/gmp/GMPParent.cpp dom/media/gmp/GMPParent.cpp index aa60acf..90878ca 100644 --- dom/media/gmp/GMPParent.cpp +++ dom/media/gmp/GMPParent.cpp @@ -93,22 +93,15 @@ mService = aService; mDirectory = aPluginDir; - // aPluginDir is // - // where should be gmp-gmpopenh264 - nsCOMPtr parent; - nsresult rv = aPluginDir->GetParent(getter_AddRefs(parent)); + nsAutoString leafname; + nsresult rv = aPluginDir->GetLeafName(leafname); if (NS_FAILED(rv)) { return rv; } - nsAutoString parentLeafName; - rv = parent->GetLeafName(parentLeafName); - if (NS_FAILED(rv)) { - return rv; - } - LOGD("%s: for %s", __FUNCTION__, NS_LossyConvertUTF16toASCII(parentLeafName).get()); + LOGD("%s: for %s", __FUNCTION__, 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 @@ -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); -@@ -885,10 +883,12 @@ +@@ -895,10 +893,12 @@ GMPDownloader.prototype = { // Success, set the prefs let now = Math.round(Date.now() / 1000); GMPPrefs.set(GMPPrefs.KEY_PLUGIN_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_PLUGIN_VERSION, gmpAddon.version, gmpAddon.id); + GMPPrefs.set(GMPPrefs.KEY_PLUGIN_PATH, + installToDirPath.path, gmpAddon.id); - this._deferred.resolve(extractedPaths); - }, err => { - this._deferred.reject(err); + // Reset the trial create pref, so that Gecko knows to do a test + // run before reporting that the GMP works to content. + GMPPrefs.reset(GMPPrefs.KEY_PLUGIN_TRIAL_CREATE, gmpAddon.version, diff --git toolkit/modules/GMPUtils.jsm toolkit/modules/GMPUtils.jsm index 1f3a0b1..93517be 100644 --- toolkit/modules/GMPUtils.jsm +++ toolkit/modules/GMPUtils.jsm @@ -70,6 +70,7 @@ this.GMPPrefs = { KEY_EME_ENABLED: "media.eme.enabled", KEY_PLUGIN_ENABLED: "media.{0}.enabled", KEY_PLUGIN_LAST_UPDATE: "media.{0}.lastUpdate", + KEY_PLUGIN_PATH: "media.{0}.path", KEY_PLUGIN_VERSION: "media.{0}.version", KEY_PLUGIN_AUTOUPDATE: "media.{0}.autoupdate", KEY_PLUGIN_FORCEVISIBLE: "media.{0}.forcevisible", diff --git toolkit/mozapps/extensions/internal/GMPProvider.jsm toolkit/mozapps/extensions/internal/GMPProvider.jsm index 1f3a0b1..93517be 100644 --- toolkit/mozapps/extensions/internal/GMPProvider.jsm +++ toolkit/mozapps/extensions/internal/GMPProvider.jsm @@ -100,12 +100,11 @@ Log.repository.getLoggerWithMessagePrefix("Toolkit.GMP", "GMPWrapper(" + this._plugin.id + ") "); - Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, - this._plugin.id), + Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, this._plugin.id), this.onPrefEnabledChanged, this); - Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION, + Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH, this._plugin.id), - this.onPrefVersionChanged, this); + this.onPrefPathChanged, this); if (this._plugin.isEME) { Preferences.observe(GMPPrefs.KEY_EME_ENABLED, this.onPrefEMEGlobalEnabledChanged, this); -@@ -134,17 +133,14 @@ - optionsType: AddonManager.OPTIONS_TYPE_INLINE, - get optionsURL() { return this._plugin.optionsURL; }, +@@ -135,11 +134,8 @@ GMPWrapper.prototype = { -+ set gmpPath(aPath) { this._gmpPath = aPath; }, get gmpPath() { - if (!this._gmpPath && this.isInstalled) { - this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir, - this._plugin.id, - GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, - null, this._plugin.id)); + if (!this._gmpPath) { + this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); } return this._gmpPath; }, -- - get missingKey() { - return this._plugin.missingKey; - }, -@@ -141,8 +137,13 @@ +@@ -158,8 +154,13 @@ GMPWrapper.prototype = { get description() { return this._plugin.description; }, get fullDescription() { return this._plugin.fullDescription; }, - get version() { return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null, - this._plugin.id); }, + get version() { + if (this.isInstalled) { + return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null, + this._plugin.id); + } + return null; + }, get isActive() { return !this.appDisabled && !this.userDisabled; }, get appDisabled() { @@ -289,24 +290,17 @@ get pluginMimeTypes() { return []; }, get pluginLibraries() { - if (this.isInstalled) { - let path = this.version; - return [path]; - } - return []; + let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); + return path && path.length ? [OS.Path.basename(path)] : []; }, get pluginFullpath() { - if (this.isInstalled) { - let path = OS.Path.join(OS.Constants.Path.profileDir, - this._plugin.id, - this.version); - return [path]; - } - return []; + let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); + return path && path.length ? [path] : []; }, get isInstalled() { - return this.version && this.version.length > 0; + let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); + return path && path.length > 0; }, _handleEnabledChanged: function() { @@ -362,10 +356,10 @@ } }, - onPrefVersionChanged: function() { + onPrefPathChanged: function() { AddonManagerPrivate.callAddonListeners("onUninstalling", this, false); if (this._gmpPath) { - this._log.info("onPrefVersionChanged() - unregistering gmp directory " + + this._log.info("onPrefPathChanged() - unregistering gmp directory " + this._gmpPath); - gmpService.removePluginDirectory(this._gmpPath); + gmpService.removeAndDeletePluginDirectory(this._gmpPath, true /* can defer */); } -@@ -374,15 +368,10 @@ +@@ -415,15 +409,10 @@ GMPWrapper.prototype = { AddonManagerPrivate.callInstallListeners("onExternalInstall", null, this, null, false); AddonManagerPrivate.callAddonListeners("onInstalling", this, false); - this._gmpPath = null; - if (this.isInstalled) { - this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir, - this._plugin.id, - GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, - null, this._plugin.id)); - } + this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, + null, this._plugin.id); if (this._gmpPath && this.isActive) { - this._log.info("onPrefVersionChanged() - registering gmp directory " + + this._log.info("onPrefPathChanged() - registering gmp directory " + this._gmpPath); gmpService.addPluginDirectory(this._gmpPath); } @@ -393,9 +382,9 @@ Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, this._plugin.id), this.onPrefEnabledChanged, this); - Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION, + Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH, this._plugin.id), - this.onPrefVersionChanged, this); + this.onPrefPathChanged, this); if (this._plugin.isEME) { Preferences.ignore(GMPPrefs.KEY_EME_ENABLED, this.onPrefEMEGlobalEnabledChanged, this); Index: head/www/firefox/files/patch-z-bug517422 =================================================================== --- head/www/firefox/files/patch-z-bug517422 (revision 393689) +++ head/www/firefox/files/patch-z-bug517422 (revision 393690) @@ -1,582 +1,586 @@ # Allow more config/external/ libs built against system-wide version. diff --git config/Makefile.in config/Makefile.in index 5383399..0410004 100644 --- config/Makefile.in +++ config/Makefile.in @@ -77,6 +77,14 @@ export:: $(export-preqs) -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \ -DMOZ_NATIVE_GRAPHITE2=$(MOZ_NATIVE_GRAPHITE2) \ -DMOZ_NATIVE_HARFBUZZ=$(MOZ_NATIVE_HARFBUZZ) \ + -DMOZ_NATIVE_OGG=$(MOZ_NATIVE_OGG) \ + -DMOZ_NATIVE_THEORA=$(MOZ_NATIVE_THEORA) \ + -DMOZ_NATIVE_VORBIS=$(MOZ_NATIVE_VORBIS) \ + -DMOZ_NATIVE_TREMOR=$(MOZ_NATIVE_TREMOR) \ + -DMOZ_NATIVE_CELT=$(MOZ_NATIVE_CELT) \ + -DMOZ_NATIVE_OPUS=$(MOZ_NATIVE_OPUS) \ + -DMOZ_NATIVE_SPEEX=$(MOZ_NATIVE_SPEEX) \ + -DMOZ_NATIVE_SOUNDTOUCH=$(MOZ_NATIVE_SOUNDTOUCH) \ $(srcdir)/system-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers $(INSTALL) system_wrappers $(DIST) diff --git config/external/moz.build config/external/moz.build index f67c5c7..eb909ce 100644 --- config/external/moz.build +++ config/external/moz.build @@ -19,10 +19,19 @@ if CONFIG['MOZ_UPDATER']: # There's no "native brotli" yet, but probably in the future... external_dirs += ['modules/brotli'] -if CONFIG['MOZ_VORBIS']: +if not CONFIG['MOZ_NATIVE_OGG']: + external_dirs += ['media/libogg'] + +if not CONFIG['MOZ_NATIVE_CELT'] or not CONFIG['MOZ_NATIVE_OPUS']: + external_dirs += ['media/libopus'] + +if not CONFIG['MOZ_NATIVE_THEORA']: + external_dirs += ['media/libtheora'] + +if CONFIG['MOZ_VORBIS'] and not CONFIG['MOZ_NATIVE_VORBIS']: external_dirs += ['media/libvorbis'] -if CONFIG['MOZ_TREMOR']: +if CONFIG['MOZ_TREMOR'] and not CONFIG['MOZ_NATIVE_TREMOR']: external_dirs += ['media/libtremor'] if CONFIG['MOZ_WEBM']: @@ -37,15 +46,16 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ if not CONFIG['MOZ_NATIVE_PNG']: external_dirs += ['media/libpng'] +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/libopus', - 'media/libtheora', - 'media/libspeex_resampler', 'media/libstagefright', - 'media/libsoundtouch', ] DIRS += ['../../' + i for i in external_dirs] diff --git config/system-headers config/system-headers index bef567c..9807c29 100644 --- config/system-headers +++ config/system-headers @@ -1263,7 +1263,6 @@ X11/Xlocale.h X11/Xos.h X11/Xutil.h zmouse.h -soundtouch/SoundTouch.h #if MOZ_NATIVE_PNG==1 png.h #endif @@ -1325,6 +1324,7 @@ vorbis/codec.h theora/theoradec.h tremor/ivorbiscodec.h speex/speex_resampler.h +soundtouch/SoundTouch.h ogg/ogg.h ogg/os_types.h nestegg/nestegg.h @@ -1365,3 +1365,35 @@ graphite2/Segment.h harfbuzz/hb-ot.h harfbuzz/hb.h #endif +#if MOZ_NATIVE_OGG==1 +ogg/ogg.h +ogg/os_types.h +#endif +#if MOZ_NATIVE_THEORA==1 +theora/theoradec.h +#endif +#if MOZ_NATIVE_VORBIS==1 +vorbis/codec.h +vorbis/vorbisenc.h +#endif +#if MOZ_NATIVE_TREMOR==1 +tremor/ivorbiscodec.h +#endif +#if MOZ_NATIVE_CELT==1 +celt.h +celt_header.h +celt/celt.h +celt/celt_header.h +#endif +#if MOZ_NATIVE_OPUS==1 +opus.h +opus_multistream.h +opus/opus.h +opus/opus_multistream.h +#endif +#if MOZ_NATIVE_SPEEX==1 +speex/speex_resampler.h +#endif +#if MOZ_NATIVE_SOUNDTOUCH==1 +soundtouch/SoundTouch.h +#endif diff --git configure.in configure.in index 87db361..7947626 100644 --- configure.in +++ configure.in @@ -5223,6 +5223,157 @@ if test "${ac_cv_c_attribute_aligned}" ! fi dnl ======================================================== +dnl Check for libogg +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-ogg, +[ --with-system-ogg Use system libogg (located with pkgconfig)], +MOZ_NATIVE_OGG=1, +MOZ_NATIVE_OGG=) + +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) + +dnl ======================================================== +dnl Check for libvorbis +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-vorbis, +[ --with-system-vorbis Use system libvorbis (located with pkgconfig)], +MOZ_NATIVE_VORBIS=1, +MOZ_NATIVE_VORBIS=) + +if test -n "$MOZ_NATIVE_VORBIS"; then + PKG_CHECK_MODULES(MOZ_VORBIS, vorbis vorbisenc >= 1.3.5) +fi + +AC_SUBST(MOZ_NATIVE_VORBIS) + +dnl ======================================================== +dnl Check for integer-only libvorbis aka tremor +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-tremor, +[ --with-system-tremor Use system libtremor (located with pkgconfig)], +MOZ_NATIVE_TREMOR=1, +MOZ_NATIVE_TREMOR=) + +if test -n "$MOZ_NATIVE_TREMOR"; then + PKG_CHECK_MODULES(MOZ_TREMOR, vorbisidec >= 1.2.1) +fi + +AC_SUBST(MOZ_NATIVE_TREMOR) + +dnl ======================================================== +dnl Check for libcelt +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-celt, +[ --with-system-celt Use system libcelt (located with pkgconfig)], +MOZ_NATIVE_CELT=1, +MOZ_NATIVE_CELT=) + +if test -n "$MOZ_NATIVE_CELT"; then + PKG_CHECK_MODULES(MOZ_CELT, celt) +else + MOZ_CELT_CFLAGS='-I$(topsrcdir)/media/libopus' +fi + +AC_SUBST(MOZ_NATIVE_CELT) + +dnl ======================================================== +dnl Check for libopus +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-opus, +[ --with-system-opus Use system libopus (located with pkgconfig)], +MOZ_NATIVE_OPUS=1, +MOZ_NATIVE_OPUS=) + +if test -n "$MOZ_NATIVE_OPUS"; then + PKG_CHECK_MODULES(MOZ_OPUS, opus >= 1.1) +else + MOZ_OPUS_CFLAGS='-I$(topsrcdir)/media/libopus/include' +fi + +AC_SUBST(MOZ_NATIVE_OPUS) + +dnl ======================================================== +dnl Check for libtheora +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-theora, +[ --with-system-theora Use system libtheora (located with pkgconfig)], +MOZ_NATIVE_THEORA=1, +MOZ_NATIVE_THEORA=) + +if test -n "$MOZ_NATIVE_THEORA"; then + PKG_CHECK_MODULES(MOZ_THEORA, theora >= 1.2) +fi + +AC_SUBST(MOZ_NATIVE_THEORA) + +dnl ======================================================== +dnl Check for libspeex resampler +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-speex, +[ --with-system-speex Use system libspeex (located with pkgconfig)], +MOZ_NATIVE_SPEEX=1, +MOZ_NATIVE_SPEEX=) + +if test -n "$MOZ_NATIVE_SPEEX"; then + PKG_CHECK_MODULES(MOZ_SPEEX, speexdsp >= 1.2) +fi + +AC_SUBST(MOZ_NATIVE_SPEEX) + +dnl ======================================================== +dnl Check for libsoundtouch +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-soundtouch, +[ --with-system-soundtouch Use system libsoundtouch (located with pkgconfig)], +MOZ_NATIVE_SOUNDTOUCH=1, +MOZ_NATIVE_SOUNDTOUCH=) + +if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then + PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.8.0) + + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + _SAVE_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS $MOZ_SOUNDTOUCH_CFLAGS" + AC_CACHE_CHECK(for soundtouch sample type, + ac_cv_soundtouch_sample_type, + [AC_TRY_COMPILE([#include + #ifndef SOUNDTOUCH_INTEGER_SAMPLES + #error soundtouch expects float samples + #endif], + [], + [ac_cv_soundtouch_sample_type=short], + [ac_cv_soundtouch_sample_type=float])]) + CXXFLAGS=$_SAVE_CXXFLAGS + AC_LANG_RESTORE + + if test \( -n "$MOZ_SAMPLE_TYPE_S16" -a "$ac_cv_soundtouch_sample_type" != short \) \ + -o \( -n "$MOZ_SAMPLE_TYPE_FLOAT32" -a "$ac_cv_soundtouch_sample_type" != float \) ; then + AC_MSG_ERROR([SoundTouch library is built with incompatible sample type. Either rebuild the library with/without --enable-integer-samples, chase default Mozilla sample type or remove --with-system-soundtouch.]) + fi +fi + +AC_SUBST(MOZ_NATIVE_SOUNDTOUCH) + +dnl ======================================================== dnl = Disable VP8 decoder support dnl ======================================================== MOZ_ARG_DISABLE_BOOL(webm, diff --git dom/media/AudioStream.h dom/media/AudioStream.h index 085676d..00c54fb 100644 --- dom/media/AudioStream.h +++ dom/media/AudioStream.h @@ -17,7 +17,7 @@ #include "CubebUtils.h" namespace soundtouch { -class SoundTouch; +class MOZ_IMPORT_API SoundTouch; } namespace mozilla { diff --git dom/media/moz.build dom/media/moz.build index 7526cff..e0a0ca0 100644 --- dom/media/moz.build +++ dom/media/moz.build @@ -212,3 +212,24 @@ if CONFIG['ANDROID_VERSION'] > '15': CFLAGS += CONFIG['GSTREAMER_CFLAGS'] CXXFLAGS += CONFIG['GSTREAMER_CFLAGS'] + +if CONFIG['MOZ_NATIVE_OGG']: + CXXFLAGS += CONFIG['MOZ_OGG_CFLAGS'] + +if CONFIG['MOZ_NATIVE_THEORA']: + CXXFLAGS += CONFIG['MOZ_THEORA_CFLAGS'] + +if CONFIG['MOZ_NATIVE_VORBIS']: + CXXFLAGS += CONFIG['MOZ_VORBIS_CFLAGS'] + +if CONFIG['MOZ_NATIVE_TREMOR']: + CXXFLAGS += CONFIG['MOZ_TREMOR_CFLAGS'] + +if CONFIG['MOZ_NATIVE_OPUS']: + CXXFLAGS += CONFIG['MOZ_OPUS_CFLAGS'] + +if CONFIG['MOZ_NATIVE_SPEEX']: + CXXFLAGS += CONFIG['MOZ_SPEEX_CFLAGS'] + +if CONFIG['MOZ_NATIVE_SOUNDTOUCH']: + CXXFLAGS += CONFIG['MOZ_SOUNDTOUCH_CFLAGS'] diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build index 944744d..9a7c8c0 100644 --- media/libcubeb/src/moz.build +++ media/libcubeb/src/moz.build @@ -65,6 +65,9 @@ if CONFIG['GKMEDIAS_SHARED_LIBRARY']: FINAL_LIBRARY = 'gkmedias' +if CONFIG['MOZ_NATIVE_SPEEX']: + SOURCES['cubeb_resampler.cpp'].flags += CONFIG['MOZ_SPEEX_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': CFLAGS += [ '-I%s/%s' % (CONFIG['ANDROID_SOURCE'], d) for d in [ diff --git media/libogg/README_MOZILLA media/libogg/README_MOZILLA index 0833e4d..7ece97b 100644 --- media/libogg/README_MOZILLA +++ media/libogg/README_MOZILLA @@ -6,3 +6,6 @@ The svn revision number used was r17287. The int-types.patch address a bug that config_types.h generated from Linux platform can't be used on OpenSolaris directly see Mozilla bug 449754 + +The in-tree copy may be omitted during build by --with-system-ogg. +Keep version in configure.in in sync on updates. diff --git media/libopus/README_MOZILLA media/libopus/README_MOZILLA index 2d85c9f..d3fb9f8 100644 --- media/libopus/README_MOZILLA +++ media/libopus/README_MOZILLA @@ -9,3 +9,6 @@ files after the copy step. The upstream repository is https://git.xiph.org/opus.git The git tag/revision used was v1.1. + +The in-tree copy may be omitted during build by --with-system-opus. +So, keep its pkg-config version check within configure.in in sync on updates. diff --git media/libsoundtouch/README_MOZILLA media/libsoundtouch/README_MOZILLA index bfd4b1a..15b158d 100644 --- media/libsoundtouch/README_MOZILLA +++ media/libsoundtouch/README_MOZILLA @@ -6,3 +6,5 @@ The whole library is not used, only the relevant files are imported in the tree, using the script `update.sh`. Some changes have been made to the files, using the patch `moz-libsoundtouch.patch`. We also use a custom soundtouch_config.h. +The in-tree copy may be omitted during build by --with-system-soundtouch. +Keep version in configure.in in sync on updates. diff --git media/libspeex_resampler/README_MOZILLA media/libspeex_resampler/README_MOZILLA index 7f6b1bb..e830300 100644 --- media/libspeex_resampler/README_MOZILLA +++ media/libspeex_resampler/README_MOZILLA @@ -3,3 +3,6 @@ This source is from the Speex DSP library It consists in the audio resampling code (resampler.c) and its header files dependancies, imported into the tree using the update.sh script. + +The in-tree copy may be omitted during build by --with-system-speex. +Keep version in configure.in in sync on updates. diff --git media/libtheora/README_MOZILLA media/libtheora/README_MOZILLA index d48dbfa..f08a2ed 100644 --- media/libtheora/README_MOZILLA +++ media/libtheora/README_MOZILLA @@ -3,3 +3,6 @@ using the update.sh script. The changes made were those applied by update.sh, the addition/update of Makefile.in files for the Mozilla build system. The subversion revision used was r17578. + +The in-tree copy may be omitted during build by --with-system-theora. +Keep version in configure.in in sync on updates. diff --git media/libtheora/moz.build media/libtheora/moz.build index 14265b1..3069e99 100644 --- media/libtheora/moz.build +++ media/libtheora/moz.build -@@ -93,3 +93,5 @@ if CONFIG['GNU_AS']: - if CONFIG['OS_TARGET'] == 'Android': - DEFINES['__linux__'] = True +@@ -21,6 +21,9 @@ if CONFIG['GKMEDIAS_SHARED_LIBRARY']: + # The encoder is currently not included. + DEFINES['THEORA_DISABLE_ENCODE'] = True +if CONFIG['MOZ_NATIVE_OGG']: + CFLAGS += CONFIG['MOZ_OGG_CFLAGS'] ++ + # Suppress warnings in third-party code. + if CONFIG['GNU_CC']: + CFLAGS += ['-Wno-type-limits'] diff --git media/libtremor/README_MOZILLA media/libtremor/README_MOZILLA index ee67b53..3f34a09 100644 --- media/libtremor/README_MOZILLA +++ media/libtremor/README_MOZILLA @@ -5,3 +5,6 @@ Makefile.in files for the Mozilla build system. The upstream release used was http://svn.xiph.org/trunk/Tremor/ The subversion revision used was r17547. + +The in-tree copy may be omitted during build by --with-system-tremor. +Keep version in configure.in in sync on updates. diff --git media/libtremor/moz.build media/libtremor/moz.build index 31831ba..a03d576 100644 --- media/libtremor/moz.build +++ media/libtremor/moz.build @@ -6,3 +6,5 @@ DIRS += ['include/tremor', 'lib'] +if CONFIG['MOZ_NATIVE_OGG']: + CFLAGS += CONFIG['MOZ_OGG_CFLAGS'] diff --git media/libvorbis/README_MOZILLA media/libvorbis/README_MOZILLA index 7c7454c..55baedd 100644 --- media/libvorbis/README_MOZILLA +++ media/libvorbis/README_MOZILLA @@ -8,3 +8,6 @@ https://svn.xiph.org/tags/vorbis/libvorbis-1.3.4@19059 Some files are renamed during the copy to prevent clashes with object file names with other Mozilla libraries. + +The in-tree copy may be omitted during build by --with-system-vorbis. +Keep version in configure.in in sync on updates. diff --git media/libvorbis/moz.build media/libvorbis/moz.build index 919b99e..cc776f7 100644 --- media/libvorbis/moz.build +++ media/libvorbis/moz.build @@ -55,3 +55,6 @@ FINAL_LIBRARY = 'gkmedias' # Suppress warnings in third-party code. if CONFIG['GNU_CC']: CFLAGS += ['-Wno-uninitialized'] + +if CONFIG['MOZ_NATIVE_OGG']: + CFLAGS += CONFIG['MOZ_OGG_CFLAGS'] -diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build +diff --git media/webrtc/signaling/test/common.build media/webrtc/signaling/test/common.build index bbc971c..6ed7e41 100644 ---- media/webrtc/signaling/test/moz.build -+++ media/webrtc/signaling/test/moz.build -@@ -127,6 +127,9 @@ if CONFIG['MOZ_ALSA']: +--- media/webrtc/signaling/test/common.build ++++ media/webrtc/signaling/test/common.build +@@ -108,6 +109,9 @@ if CONFIG['MOZ_OSS']: if CONFIG['MOZ_NATIVE_JPEG']: OS_LIBS += CONFIG['MOZ_JPEG_LIBS'] +if CONFIG['MOZ_NATIVE_OPUS']: + OS_LIBS += CONFIG['MOZ_OPUS_LIBS'] + if CONFIG['MOZ_NATIVE_LIBVPX']: OS_LIBS += CONFIG['MOZ_LIBVPX_LIBS'] diff --git media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi index 00e77e7..55f48ab 100644 --- media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi +++ media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi @@ -17,18 +17,11 @@ 'conditions': [ ['build_with_mozilla==1', { # Mozilla provides its own build of the opus library. - 'include_dirs': [ - '/media/libopus/include', - '/media/libopus/src', - '/media/libopus/celt', + 'cflags_mozilla': [ + '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt', + '$(MOZ_OPUS_CFLAGS)', + '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src', ], - 'direct_dependent_settings': { - 'include_dirs': [ - '/media/libopus/include', - '/media/libopus/src', - '/media/libopus/celt', - ], - }, }, { 'dependencies': [ '<(DEPTH)/third_party/opus/opus.gyp:opus' diff --git media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi index 00e77e7..55f48ab 100644 --- media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi +++ media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi @@ -84,19 +84,11 @@ ], }], ['build_with_mozilla==1', { - 'include_dirs': [ - # Need Opus header files for the audio classifier. - '<(DEPTH)/../../../media/opus/celt', -# '<(DEPTH)/third_party/opus/src/src', + 'cflags_mozilla': [ + '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt', + '$(MOZ_OPUS_CFLAGS)', + '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src', ], - 'direct_dependent_settings': { - 'include_dirs': [ - '../../../../../../media/opus/celt', - # Need Opus header files for the audio classifier. - '<(DEPTH)/../../../media/opus/celt', -# '<(DEPTH)/third_party/opus/src/src', - ], - }, }], ], 'sources': [ diff --git toolkit/library/moz.build toolkit/library/moz.build index d42137a..695e75a8 100644 --- toolkit/library/moz.build +++ toolkit/library/moz.build @@ -178,6 +178,30 @@ if CONFIG['MOZ_NATIVE_PNG']: if CONFIG['MOZ_NATIVE_HUNSPELL']: OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS'] +if CONFIG['MOZ_NATIVE_OGG']: + OS_LIBS += CONFIG['MOZ_OGG_LIBS'] + +if CONFIG['MOZ_NATIVE_THEORA']: + OS_LIBS += CONFIG['MOZ_THEORA_LIBS'] + +if CONFIG['MOZ_NATIVE_VORBIS']: + OS_LIBS += CONFIG['MOZ_VORBIS_LIBS'] + +if CONFIG['MOZ_NATIVE_TREMOR']: + OS_LIBS += CONFIG['MOZ_TREMOR_LIBS'] + +if CONFIG['MOZ_NATIVE_CELT']: + OS_LIBS += CONFIG['MOZ_CELT_LIBS'] + +if CONFIG['MOZ_NATIVE_OPUS']: + OS_LIBS += CONFIG['MOZ_OPUS_LIBS'] + +if CONFIG['MOZ_NATIVE_SPEEX']: + OS_LIBS += CONFIG['MOZ_SPEEX_LIBS'] + +if CONFIG['MOZ_NATIVE_SOUNDTOUCH']: + OS_LIBS += CONFIG['MOZ_SOUNDTOUCH_LIBS'] + if CONFIG['MOZ_NATIVE_LIBEVENT']: OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS'] diff --git xpcom/build/XPCOMInit.cpp xpcom/build/XPCOMInit.cpp index 2cf281e..6d7af0e 100644 --- xpcom/build/XPCOMInit.cpp +++ xpcom/build/XPCOMInit.cpp @@ -138,7 +138,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 @@ -651,11 +653,13 @@ NS_InitXPCOM2(nsIServiceManager** aResult, // 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. Index: head/www/firefox-esr/Makefile =================================================================== --- head/www/firefox-esr/Makefile (revision 393689) +++ head/www/firefox-esr/Makefile (revision 393690) @@ -1,96 +1,96 @@ # Created by: Alan Eldridge # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 38.1.0 +DISTVERSION= 38.2.0 DISTVERSIONSUFFIX=esr.source PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}esr/source \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}esr-candidates/build1/source + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}esr-candidates/build2/source PKGNAMESUFFIX= -esr MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla BUILD_DEPENDS= nspr>=4.10.8:${PORTSDIR}/devel/nspr \ nss>=3.19.2:${PORTSDIR}/security/nss \ libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \ cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \ soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \ harfbuzz>=0.9.34:${PORTSDIR}/print/harfbuzz \ graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \ libvorbis>=1.3.5:${PORTSDIR}/audio/libvorbis \ libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \ sqlite3>=3.8.9:${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 # opus>=1.1:${PORTSDIR}/audio/opus \ LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l USE_GECKO= gecko CPE_PRODUCT= ${PORTNAME}_esr CONFLICTS_INSTALL= firefox-4[0-4].* firefox-3[02-9].* firefox-2[0-35-9].* MOZ_PKGCONFIG_FILES= # empty USE_MOZILLA= -opus MOZILLA_NAME= Firefox USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl USES= dos2unix tar:bzip2 DOS2UNIX_FILES= media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp FIREFOX_ICON= ${MOZILLA}.png FIREFOX_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png MOZ_OPTIONS= --program-transform-name='s/firefox/${MOZILLA}/' \ --enable-application=browser \ --enable-official-branding OPTIONS_DEFAULT= GTK2 OPTIONS_SINGLE+= TOOLKIT OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3 .include "${.CURDIR}/../../www/firefox/Makefile.options" .include WRKSRC:= ${WRKDIR}/mozilla-esr38 .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 .if ${PORT_OPTIONS:MGTK3} BUILD_DEPENDS+= gtk3>=3.14.6:${PORTSDIR}/x11-toolkits/gtk30 .endif post-extract: @${SED} -e 's|@FIREFOX_ICON@|${FIREFOX_ICON}|' -e 's|@MOZILLA@|${MOZILLA}|' \ -e 's|@MOZILLA_NAME@|${MOZILLA_NAME}|' \ <${FILESDIR}/firefox.desktop.in >${WRKDIR}/${MOZILLA}.desktop post-patch: @${REINPLACE_CMD} -e '/MOZPNG/s/=[0-9]*/=10511/' \ ${WRKSRC}/configure.in @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/browser/app/nsBrowserApp.cpp pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${WRKSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) post-install: ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps ${INSTALL_DATA} ${WRKDIR}/${MOZILLA}.desktop ${STAGEDIR}${PREFIX}/share/applications/ ${LN} -sf ${FIREFOX_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${FIREFOX_ICON} .include Index: head/www/firefox-esr/distinfo =================================================================== --- head/www/firefox-esr/distinfo (revision 393689) +++ head/www/firefox-esr/distinfo (revision 393690) @@ -1,2 +1,2 @@ -SHA256 (firefox-38.1.0esr.source.tar.bz2) = 85eb5f916aa47a92cf50803dcb35e7fa3a9da29abf5fc91cbb6a70bbbc2618ff -SIZE (firefox-38.1.0esr.source.tar.bz2) = 180392775 +SHA256 (firefox-38.2.0esr.source.tar.bz2) = 55867254f21cfc610aa63c8aa0d7156df6eb4c0cb37ebac30259e4890170aacb +SIZE (firefox-38.2.0esr.source.tar.bz2) = 180722192 Index: head/www/firefox-esr-i18n/Makefile =================================================================== --- head/www/firefox-esr-i18n/Makefile (revision 393689) +++ head/www/firefox-esr-i18n/Makefile (revision 393690) @@ -1,91 +1,90 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= firefox -PORTVERSION= 38.1.0 -PORTREVISION= 1 +PORTVERSION= 38.2.0 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}esr/linux-i686/xpi \ - MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}esr-candidates/build1/linux-i686/xpi + MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}esr-candidates/build2/linux-i686/xpi PKGNAMEPREFIX= PKGNAMESUFFIX= -esr-i18n DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} MAINTAINER= gecko@FreeBSD.org COMMENT= Localized interface for Firefox EXTRACT_DEPENDS= zip:${PORTSDIR}/archivers/zip USES= zip:infozip gecko:firefox,build USE_XPI= firefox NO_ARCH= yes USE_SUBMAKE= yes WDIR= langpack-*@firefox.mozilla.org XPI_DISTNAMES= ${FIREFOX_I18N_} PLIST?= ${WRKDIR}/plist PLISTF?= ${WRKDIR}/plist_files .include "${.CURDIR}/Makefile.option" .include .ifndef WITHOUT_SWITCHER RUN_DEPENDS+= xpi-quick-locale-switcher>=0:${PORTSDIR}/www/xpi-quick-locale-switcher .endif .include "${.CURDIR}/Makefile.lang" FIREFOX_I18N_?= ${FIREFOX_I18N} .for dist in ${XPI_DISTNAMES} XPI_ID_${dist}= langpack-${dist}@firefox.mozilla.org .endfor pre-everything:: @${ECHO_CMD} @${ECHO_CMD} "Please define FIREFOX_I18N_ALL to install all languages." @${ECHO_CMD} do-extract: @${MKDIR} ${WRKSRC} @for lang in ${FIREFOX_I18N_}; do \ if ! (${UNZIP_CMD} -qo ${_DISTDIR}/$$lang.xpi -d ${WRKSRC}/langpack-$$lang@firefox.mozilla.org);\ then \ exit 1; \ fi; \ cd ${WRKSRC}/langpack-$$lang@firefox.mozilla.org/; \ ${FIND} -H -s * ! -type d | \ ${SED} -e "s|^|lib/xpi/langpack-$$lang@firefox.mozilla.org/|" >> ${PLISTF}; \ done ${CAT} ${PLISTF} | ${SORT} >> ${PLIST} do-install: @${MKDIR} ${STAGEDIR}${XPI_LIBDIR} ${STAGEDIR}${XPI_SLDIRS_ALL} cd ${WRKSRC}; ${PAX} -rw . ${STAGEDIR}${XPI_LIBDIR} ${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${WDIR}/ @for e in ${STAGEDIR}${XPI_LIBDIR}/${WDIR}; do \ for _dir in ${XPI_LINKFARMS} ; do \ ${LN} -sf $${_e##*/} ${STAGEDIR}$$_dir/ ${_Q} ; \ done \ done @${ECHO_CMD} '@exec ${INSTALL} -d ${XPI_SLDIRS_ALL:S,^${PREFIX},%D,}' ${_A} @${ECHO_CMD} '@exec for _dir in ${XPI_LINKFARMS} ; { \ ${LN} -sf ${XPI_LIBDIR}/${WDIR} $$_dir/ ${_Q}; }' ${_A} @${ECHO_CMD} '@unexec for _dir in ${XPI_LINKFARMS} ${XPI_LIBDIR}; { ${RM} -f $$_dir/${WDIR} ; }' ${_A} post-patch: ${FIND} ${WRKSRC} -name install.rdf -print0 | \ ${XARGS} -0L1 ${REINPLACE_CMD} -i '' -e '/ Index: head/www/firefox-esr-i18n/distinfo =================================================================== --- head/www/firefox-esr-i18n/distinfo (revision 393689) +++ head/www/firefox-esr-i18n/distinfo (revision 393690) @@ -1,176 +1,176 @@ -SHA256 (xpi/firefox-38.1.0/ach.xpi) = d8d0439db26597a0d869e5467bb849bc77c1786b0c2df3a16cf91801523cbebb -SIZE (xpi/firefox-38.1.0/ach.xpi) = 477969 -SHA256 (xpi/firefox-38.1.0/af.xpi) = 1a4c6835db2ba384767f6ceddf021a30b61c1d29f17577cf2f7330e3358c9ff7 -SIZE (xpi/firefox-38.1.0/af.xpi) = 483325 -SHA256 (xpi/firefox-38.1.0/an.xpi) = dbecee3b6d22ff49680d412a338a8e94d6f759c62110cb55ed6aa21f11537a0a -SIZE (xpi/firefox-38.1.0/an.xpi) = 461422 -SHA256 (xpi/firefox-38.1.0/ar.xpi) = 47eef2d1bfa6e5594cd8835bddca7bfd5019aac1553b54b05c1c749fad659dda -SIZE (xpi/firefox-38.1.0/ar.xpi) = 516495 -SHA256 (xpi/firefox-38.1.0/as.xpi) = 1628e61d5bb7e7c4cbdff288ca2e6d8623578ccf12797e63b27864e68be21c1c -SIZE (xpi/firefox-38.1.0/as.xpi) = 509574 -SHA256 (xpi/firefox-38.1.0/ast.xpi) = bfe8b26cffb80f7cc0824dc08546f31d54da190bf8fd342b12204ecdc85977e7 -SIZE (xpi/firefox-38.1.0/ast.xpi) = 397202 -SHA256 (xpi/firefox-38.1.0/az.xpi) = a29a1f0362aa53c7ea42e500478d2218e6e3e356c7305b249c65f078218fb272 -SIZE (xpi/firefox-38.1.0/az.xpi) = 489152 -SHA256 (xpi/firefox-38.1.0/be.xpi) = ff7583b04c4e57128f0165ecd94488bca77cf4a84bf0284f313f9aca2c885faf -SIZE (xpi/firefox-38.1.0/be.xpi) = 441056 -SHA256 (xpi/firefox-38.1.0/bg.xpi) = 5096d0dc1ff5e547fb07906e0a3183b3117a6453311fb28afa991db5c34c95d1 -SIZE (xpi/firefox-38.1.0/bg.xpi) = 487819 -SHA256 (xpi/firefox-38.1.0/bn-BD.xpi) = 2ca791e8a573f76f60698b3b634cf9c0768eee657ba6e99f65c0f8979e152216 -SIZE (xpi/firefox-38.1.0/bn-BD.xpi) = 528688 -SHA256 (xpi/firefox-38.1.0/bn-IN.xpi) = b664469d76782fe549f582b79cb88d8350d439038ee1eaa7a7388fd5b3cb1eff -SIZE (xpi/firefox-38.1.0/bn-IN.xpi) = 527927 -SHA256 (xpi/firefox-38.1.0/br.xpi) = 57ee679bb3532a0e9289827d4fb421598683ea8168656889edddcff1e21bb6b9 -SIZE (xpi/firefox-38.1.0/br.xpi) = 441962 -SHA256 (xpi/firefox-38.1.0/bs.xpi) = 92b42a21fdd59775f65f13316e875f93f7478695aa70ab02016f3145c79a3aea -SIZE (xpi/firefox-38.1.0/bs.xpi) = 485305 -SHA256 (xpi/firefox-38.1.0/ca.xpi) = 53c42f1501f90ddd9259ca255baae8a7ea6a1055fa88acc0cd1de9d8a20db2b9 -SIZE (xpi/firefox-38.1.0/ca.xpi) = 458091 -SHA256 (xpi/firefox-38.1.0/cs.xpi) = a23e9ea357bd08c5029d31d6865516efc5ff3aa8504dae8dc316af5efc859fa9 -SIZE (xpi/firefox-38.1.0/cs.xpi) = 446725 -SHA256 (xpi/firefox-38.1.0/cy.xpi) = 464c9b57d03fbaff4a6241dfa492623a338018a609e2289defeba196ab454b95 -SIZE (xpi/firefox-38.1.0/cy.xpi) = 444384 -SHA256 (xpi/firefox-38.1.0/da.xpi) = 2b339c9a73067076f4ca8b28d9d8543064be5616dd4db50cf0bf1ed0e4cea3c2 -SIZE (xpi/firefox-38.1.0/da.xpi) = 450762 -SHA256 (xpi/firefox-38.1.0/de.xpi) = bb0aca584ae740caa4cd2adeab2de09670c38ec8dd0241512318201b3ed6d761 -SIZE (xpi/firefox-38.1.0/de.xpi) = 451628 -SHA256 (xpi/firefox-38.1.0/dsb.xpi) = 921ff1abd17da602be91dcd9ddf7f0655bb97231840ac72f964252bacfdcfcf9 -SIZE (xpi/firefox-38.1.0/dsb.xpi) = 470923 -SHA256 (xpi/firefox-38.1.0/el.xpi) = 96e8b36888ccadce8d576208a76ab6522c3148c501bc35549e25bce545c11a01 -SIZE (xpi/firefox-38.1.0/el.xpi) = 498369 -SHA256 (xpi/firefox-38.1.0/en-GB.xpi) = 3f80590f27a73d5cb50b56b7658c38f4378f0bb1b84d3da4c2e0cd9a7b8f4120 -SIZE (xpi/firefox-38.1.0/en-GB.xpi) = 437845 -SHA256 (xpi/firefox-38.1.0/en-US.xpi) = 36fe4e6fc9b319f65b81ab0f9f8eda2b185ff175b6d4999799489365154142e6 -SIZE (xpi/firefox-38.1.0/en-US.xpi) = 469718 -SHA256 (xpi/firefox-38.1.0/en-ZA.xpi) = 6d3a854cffcb9a6ff37a6ae4b2b9a91da3fd16914ea4cd70f69ad3039b960ceb -SIZE (xpi/firefox-38.1.0/en-ZA.xpi) = 439925 -SHA256 (xpi/firefox-38.1.0/eo.xpi) = ac159c4a6b9dfb3b838dd757350cdfa92d7322c772e46bf79fbfce8d7e03b433 -SIZE (xpi/firefox-38.1.0/eo.xpi) = 488369 -SHA256 (xpi/firefox-38.1.0/es-AR.xpi) = 7410081864264d57267ffb4795aac402a72d30e369e4aa6ec2df6501c77ead8f -SIZE (xpi/firefox-38.1.0/es-AR.xpi) = 453982 -SHA256 (xpi/firefox-38.1.0/es-CL.xpi) = f5979bcfc6576cd6796a555617966c4f7c42d90bba52dc281824d09f7ca2ba01 -SIZE (xpi/firefox-38.1.0/es-CL.xpi) = 384678 -SHA256 (xpi/firefox-38.1.0/es-ES.xpi) = 87e28415879608af646ab9a531108c74b18a8b94f7a472439841ed7b79240537 -SIZE (xpi/firefox-38.1.0/es-ES.xpi) = 374072 -SHA256 (xpi/firefox-38.1.0/es-MX.xpi) = aa8e47ac74821a900eac826459e9fefb0eb8c0de77ee1b5246a55e23a369f4b8 -SIZE (xpi/firefox-38.1.0/es-MX.xpi) = 457049 -SHA256 (xpi/firefox-38.1.0/et.xpi) = 76e0e0480e62cc5187e6cf97845d61d835a16b883582cd8a27ef2b6e74c3d69c -SIZE (xpi/firefox-38.1.0/et.xpi) = 443228 -SHA256 (xpi/firefox-38.1.0/eu.xpi) = ecac2d452d2a4e4165970a1aed2a0ae6bff8212c0d6dc0687e5782758d5d72d9 -SIZE (xpi/firefox-38.1.0/eu.xpi) = 466554 -SHA256 (xpi/firefox-38.1.0/fa.xpi) = 90bbd088bff3a41dfc752f695f0184e68d5621ffdaa17536a989067bc2f4f7de -SIZE (xpi/firefox-38.1.0/fa.xpi) = 518281 -SHA256 (xpi/firefox-38.1.0/ff.xpi) = cb840656488d9044aa2042805f95458720fbcbb19e6fbd8beca197a9101817d1 -SIZE (xpi/firefox-38.1.0/ff.xpi) = 454586 -SHA256 (xpi/firefox-38.1.0/fi.xpi) = 6d1a14149420b2d851673c58308cff8b5218a4e9835b60d5a5274d2edf367635 -SIZE (xpi/firefox-38.1.0/fi.xpi) = 444852 -SHA256 (xpi/firefox-38.1.0/fr.xpi) = 8e416c8c930e09adb020ede16d420fd94a4e0e169d3a40213e33db94dee44d6b -SIZE (xpi/firefox-38.1.0/fr.xpi) = 461401 -SHA256 (xpi/firefox-38.1.0/fy-NL.xpi) = f6f06bac70b7edd570510deed989e3184d08a42a7e49a7e7960ed1f6a705e0a0 -SIZE (xpi/firefox-38.1.0/fy-NL.xpi) = 455537 -SHA256 (xpi/firefox-38.1.0/ga-IE.xpi) = 39ae1a583ac7be57fb3631e98734008823fe735ac679a173efe8729ef66e295c -SIZE (xpi/firefox-38.1.0/ga-IE.xpi) = 469623 -SHA256 (xpi/firefox-38.1.0/gd.xpi) = c38b1152552c91e0531eb4536b2727bc72c1c9397679d8b42003dbf7dab1be7d -SIZE (xpi/firefox-38.1.0/gd.xpi) = 454616 -SHA256 (xpi/firefox-38.1.0/gl.xpi) = d8ad198ce7afef708e7974384cac5b646efa58c1b914c0e58a0c19569276ac9d -SIZE (xpi/firefox-38.1.0/gl.xpi) = 448924 -SHA256 (xpi/firefox-38.1.0/gu-IN.xpi) = dc03e9021e27b9c5d41be2c9e569da7165176f2139872fc5694500edd71e7102 -SIZE (xpi/firefox-38.1.0/gu-IN.xpi) = 477980 -SHA256 (xpi/firefox-38.1.0/he.xpi) = 4d67723435a899817745f8141c7671fd8c0ed899db6b9fc040a7cf77a997113a -SIZE (xpi/firefox-38.1.0/he.xpi) = 486784 -SHA256 (xpi/firefox-38.1.0/hi-IN.xpi) = 3404e4a912049d583508619d92fb37663629cddc09f91f2c6f6e007fcbd1a281 -SIZE (xpi/firefox-38.1.0/hi-IN.xpi) = 508166 -SHA256 (xpi/firefox-38.1.0/hr.xpi) = 98487a75721efbb651b30d94fc00edac8962ca4aa0f356c714aae1761ed1650b -SIZE (xpi/firefox-38.1.0/hr.xpi) = 478271 -SHA256 (xpi/firefox-38.1.0/hsb.xpi) = b36779a40c56839cb9b6a78eca688704dcc5c202921493726640805580b7bf6e -SIZE (xpi/firefox-38.1.0/hsb.xpi) = 468719 -SHA256 (xpi/firefox-38.1.0/hu.xpi) = 93ace7ddee6b87c2a3cdfeedce151ced7354d3504d0d7e1aee8f2368094cabc0 -SIZE (xpi/firefox-38.1.0/hu.xpi) = 453554 -SHA256 (xpi/firefox-38.1.0/hy-AM.xpi) = 8c6a5918df7c1bdd36cdf9a5fe44400c53e2e8998dc910ad71ff29178299d63b -SIZE (xpi/firefox-38.1.0/hy-AM.xpi) = 534264 -SHA256 (xpi/firefox-38.1.0/id.xpi) = f37f250ba26bdf7cdb1f3d47a6bf7f7feb90ebd82da1a55ff4f11932af1da1e5 -SIZE (xpi/firefox-38.1.0/id.xpi) = 431488 -SHA256 (xpi/firefox-38.1.0/is.xpi) = fa4eca6ec46e110683178b282f4bd3cc6b47b315e4ddbd34cd99b8c00676b297 -SIZE (xpi/firefox-38.1.0/is.xpi) = 485128 -SHA256 (xpi/firefox-38.1.0/it.xpi) = 42948d7424e1554ce71e34d34c63b1bd3b94bf067845b8826576591aeeba3bb9 -SIZE (xpi/firefox-38.1.0/it.xpi) = 368409 -SHA256 (xpi/firefox-38.1.0/ja.xpi) = 456e16ba61c0bb904cbfb3d05b184d6fc9d7cac7f346c7b38d9fe230af96e96d -SIZE (xpi/firefox-38.1.0/ja.xpi) = 479113 -SHA256 (xpi/firefox-38.1.0/kk.xpi) = 0c10adeca506e653e464285b1feaf049d79dbcb45e1820dfe6cbb13198422c5a -SIZE (xpi/firefox-38.1.0/kk.xpi) = 503567 -SHA256 (xpi/firefox-38.1.0/km.xpi) = b94aff6d6093856b1726b1aa8d6ffa0ad2db3a897ea9ad6a5589fbffac6580a9 -SIZE (xpi/firefox-38.1.0/km.xpi) = 565673 -SHA256 (xpi/firefox-38.1.0/kn.xpi) = 72d4b3da5a920975904ba4f17b55826685ec71ffc4e952a946142210e2ae95eb -SIZE (xpi/firefox-38.1.0/kn.xpi) = 533464 -SHA256 (xpi/firefox-38.1.0/ko.xpi) = 4caa6c2e11b1c0d9184cc688fcb5f9534ab74a1d87c2d7624a83c0fc1ea4699d -SIZE (xpi/firefox-38.1.0/ko.xpi) = 460853 -SHA256 (xpi/firefox-38.1.0/lij.xpi) = 75c704a30c99d4bd6b0a99945709dd88c86b8859ffe448ed59b0b9af51c76c7b -SIZE (xpi/firefox-38.1.0/lij.xpi) = 444237 -SHA256 (xpi/firefox-38.1.0/lt.xpi) = 0a4c45516ba00ab84b2744690ff4e70ef624825238fa4c4cd6345db68be158e5 -SIZE (xpi/firefox-38.1.0/lt.xpi) = 486451 -SHA256 (xpi/firefox-38.1.0/lv.xpi) = 3f88098b580f7591a9a435ba93f06e73f6adb312d9a19ad4b756768b93bd3b1b -SIZE (xpi/firefox-38.1.0/lv.xpi) = 467197 -SHA256 (xpi/firefox-38.1.0/mai.xpi) = 27473c24c7f66a9ed31ccda36d04bf98cc81f699bdfe4c5958de0abd9c5c6824 -SIZE (xpi/firefox-38.1.0/mai.xpi) = 514665 -SHA256 (xpi/firefox-38.1.0/mk.xpi) = 6e2d2ac3b859eedc499041e2961cc1bf4b92316dd59526f14ff694fb4c2067b4 -SIZE (xpi/firefox-38.1.0/mk.xpi) = 529204 -SHA256 (xpi/firefox-38.1.0/ml.xpi) = f4d488f0207854450945af1230b70db6773bd94bad6804fdba4215bba921734f -SIZE (xpi/firefox-38.1.0/ml.xpi) = 528919 -SHA256 (xpi/firefox-38.1.0/mr.xpi) = dd9caa414cc4ba76ec4161b246612cb008585b5662b4c911d1ca7058e86a54a5 -SIZE (xpi/firefox-38.1.0/mr.xpi) = 505961 -SHA256 (xpi/firefox-38.1.0/ms.xpi) = 00c98155bc447385340e2c1b08ecfac7f4405b8b843c0603ab39a65b037f49e3 -SIZE (xpi/firefox-38.1.0/ms.xpi) = 489872 -SHA256 (xpi/firefox-38.1.0/nb-NO.xpi) = 9b17997524d839b610e60b42cae25c512ea93f3fedad473e723a91289f839ca5 -SIZE (xpi/firefox-38.1.0/nb-NO.xpi) = 444176 -SHA256 (xpi/firefox-38.1.0/nl.xpi) = 8d1532bbbb2a843babfd5b46909f0af1457fc8c9c14145b693ad0ff91b3e90ef -SIZE (xpi/firefox-38.1.0/nl.xpi) = 443993 -SHA256 (xpi/firefox-38.1.0/nn-NO.xpi) = 732a5be1501711e2aed2a5073dd6a3726095b8d3940765e4b368c74c2ad32c59 -SIZE (xpi/firefox-38.1.0/nn-NO.xpi) = 438451 -SHA256 (xpi/firefox-38.1.0/or.xpi) = 1297c29d98f2b1952d05f50417ba383c28505dd316ab8fd7179be6f6805ba892 -SIZE (xpi/firefox-38.1.0/or.xpi) = 527048 -SHA256 (xpi/firefox-38.1.0/pa-IN.xpi) = d3ee939b7914194a87f5ea3b24e569c3c9486ca3d0b997e8303c2c9c42b3bf76 -SIZE (xpi/firefox-38.1.0/pa-IN.xpi) = 493722 -SHA256 (xpi/firefox-38.1.0/pl.xpi) = 8b88410da0376d2c14ccc3e3c0eb8a0031d60d048aebba176100854a17bc16b4 -SIZE (xpi/firefox-38.1.0/pl.xpi) = 406566 -SHA256 (xpi/firefox-38.1.0/pt-BR.xpi) = f1b89e40d210497e3a7ef45b7acbf42c9d0b0b7990efd35d94f04fd0247dfc53 -SIZE (xpi/firefox-38.1.0/pt-BR.xpi) = 459812 -SHA256 (xpi/firefox-38.1.0/pt-PT.xpi) = 23e456c3550b31d7596956dd9739ef317ae742137419d426a4326f277e1c0206 -SIZE (xpi/firefox-38.1.0/pt-PT.xpi) = 439974 -SHA256 (xpi/firefox-38.1.0/rm.xpi) = f305e7a119c349ec71d4000517f315867f8174147dbbf6178a715e27e9aca29b -SIZE (xpi/firefox-38.1.0/rm.xpi) = 446286 -SHA256 (xpi/firefox-38.1.0/ro.xpi) = cd38ec29af9fbbc27ad61330d2804d57f999c98cebccf6333aa58d55c4e1db87 -SIZE (xpi/firefox-38.1.0/ro.xpi) = 494078 -SHA256 (xpi/firefox-38.1.0/ru.xpi) = b2c612a33a7e7126343644b3931749cd9de1421f8bb1aad283087f0ede074c31 -SIZE (xpi/firefox-38.1.0/ru.xpi) = 414418 -SHA256 (xpi/firefox-38.1.0/si.xpi) = 02de4fd1753d33e6b0c1d81dce2beec09dd01c1bff2c0e82864ec0700971bb68 -SIZE (xpi/firefox-38.1.0/si.xpi) = 537392 -SHA256 (xpi/firefox-38.1.0/sk.xpi) = 2fb1510e200824e455dee3492c8de7c0dd6bc4925307c5069d454fdc9513ca9b -SIZE (xpi/firefox-38.1.0/sk.xpi) = 469436 -SHA256 (xpi/firefox-38.1.0/sl.xpi) = d5f5ae891561d7ea891f9eaeee4a417e76159f8ee2b6402580d71e155de5bf23 -SIZE (xpi/firefox-38.1.0/sl.xpi) = 441593 -SHA256 (xpi/firefox-38.1.0/son.xpi) = 9fa1b158b3ca08335ca6c9bcf70fd76e6b4baab6cfdb667475188aaacc2f2193 -SIZE (xpi/firefox-38.1.0/son.xpi) = 449266 -SHA256 (xpi/firefox-38.1.0/sq.xpi) = 94d82f9dcf552f6e696e14d17ea9da388de8f5231e72bed6a0eef8b7426f6097 -SIZE (xpi/firefox-38.1.0/sq.xpi) = 486075 -SHA256 (xpi/firefox-38.1.0/sr.xpi) = f63271245f4919db7b86e9740a5128f50db750fe747e98343b1641291e7be1d3 -SIZE (xpi/firefox-38.1.0/sr.xpi) = 479418 -SHA256 (xpi/firefox-38.1.0/sv-SE.xpi) = 724e6ed7ad69ea5a612185851d1bcc39eb46e9cdaaee9032609637516b2fb4fc -SIZE (xpi/firefox-38.1.0/sv-SE.xpi) = 452631 -SHA256 (xpi/firefox-38.1.0/ta.xpi) = f0fc43a9cfde17cb71a3c1adef1ec4ae53201d0246528216f7c62fa93d5ca621 -SIZE (xpi/firefox-38.1.0/ta.xpi) = 506605 -SHA256 (xpi/firefox-38.1.0/te.xpi) = 47024b3c034826560b19281b5346d3c79b46b86c308d15c98acc5898545c47a5 -SIZE (xpi/firefox-38.1.0/te.xpi) = 526252 -SHA256 (xpi/firefox-38.1.0/th.xpi) = f99a2d738ee379bde70fc472626611365054eb25165c613824180d8ee7d53454 -SIZE (xpi/firefox-38.1.0/th.xpi) = 534269 -SHA256 (xpi/firefox-38.1.0/tr.xpi) = c7eac37f05b3a4afc073e85c9a065f343cc40b0cdba17fb8dd7219bc175c7723 -SIZE (xpi/firefox-38.1.0/tr.xpi) = 481075 -SHA256 (xpi/firefox-38.1.0/uk.xpi) = 6c68750ac5d4dab03b6c93d7694d8a8c430e95d9ad103a86c2477089fd678d99 -SIZE (xpi/firefox-38.1.0/uk.xpi) = 493312 -SHA256 (xpi/firefox-38.1.0/vi.xpi) = 874f22b8c19d7fe417496c6916b150c7d51a7021e5e73809a542799238c194fd -SIZE (xpi/firefox-38.1.0/vi.xpi) = 467503 -SHA256 (xpi/firefox-38.1.0/xh.xpi) = 53aca9e35a77091be291a3d2246ada0110d71e0451018c20d9a8c1f40dd2b2ae -SIZE (xpi/firefox-38.1.0/xh.xpi) = 450241 -SHA256 (xpi/firefox-38.1.0/zh-CN.xpi) = 0dbc3ac200290bdb5514c2076f5a1459442b4e3ee235ef29216384f2ad06d61f -SIZE (xpi/firefox-38.1.0/zh-CN.xpi) = 488276 -SHA256 (xpi/firefox-38.1.0/zh-TW.xpi) = e3ec89fe112a80d424e25934d21de61efbde5e6680ce2aece0c37a04d96be91c -SIZE (xpi/firefox-38.1.0/zh-TW.xpi) = 467843 +SHA256 (xpi/firefox-38.2.0/ach.xpi) = 80f2d65db6ba7c1079e36d4540c5364dadf50ee5cc00cdd1f4fe505915b12ef9 +SIZE (xpi/firefox-38.2.0/ach.xpi) = 477970 +SHA256 (xpi/firefox-38.2.0/af.xpi) = 4d822352bd0dbaa73dd547602e20ccdccb62b3ef9bdeccc03f172511e18b41ed +SIZE (xpi/firefox-38.2.0/af.xpi) = 483326 +SHA256 (xpi/firefox-38.2.0/an.xpi) = c58525c2b8bca44c5242e15a3597d3c5af89cbd227a2f37dec0cc64b777eaa2c +SIZE (xpi/firefox-38.2.0/an.xpi) = 461423 +SHA256 (xpi/firefox-38.2.0/ar.xpi) = 5e5e573f9cf9bb050ac9e94311887b83684c9933c8ba36021010b093b69c667b +SIZE (xpi/firefox-38.2.0/ar.xpi) = 516496 +SHA256 (xpi/firefox-38.2.0/as.xpi) = 690987405cf31ba44a2bc52a040f79e07bdca5e1a68bccb65a94f608dd32a168 +SIZE (xpi/firefox-38.2.0/as.xpi) = 509574 +SHA256 (xpi/firefox-38.2.0/ast.xpi) = 81ad42dce9d9525aa2d4339e928d5675d4f069b46deffed0c1afa7c29f7b4586 +SIZE (xpi/firefox-38.2.0/ast.xpi) = 397203 +SHA256 (xpi/firefox-38.2.0/az.xpi) = bb1b9b3e7ee14cf447780807ecda9789d696e83a6ceaa83a3f455025462976b0 +SIZE (xpi/firefox-38.2.0/az.xpi) = 489154 +SHA256 (xpi/firefox-38.2.0/be.xpi) = f025e13585be2126f1f805f431a2aab6f92064970a5d3ecf8e458fb35fcf1b04 +SIZE (xpi/firefox-38.2.0/be.xpi) = 441058 +SHA256 (xpi/firefox-38.2.0/bg.xpi) = d566656889a8922a88bab1a06fcf6e49f1131cc7ebc53aa19ea9b177314a7003 +SIZE (xpi/firefox-38.2.0/bg.xpi) = 487819 +SHA256 (xpi/firefox-38.2.0/bn-BD.xpi) = 1d8a734901cfc8f4a3372ae7586e6615a044757faaa43d0102d687465a7d8646 +SIZE (xpi/firefox-38.2.0/bn-BD.xpi) = 528690 +SHA256 (xpi/firefox-38.2.0/bn-IN.xpi) = 7a6e05c0eab890318718b014402168f30e2593a63cbd639b1dec9bbf88e74b30 +SIZE (xpi/firefox-38.2.0/bn-IN.xpi) = 527927 +SHA256 (xpi/firefox-38.2.0/br.xpi) = e5bc879e345784c9b4d9228a3e8900b4ffa4e643f01546db80cb4d9e11049a34 +SIZE (xpi/firefox-38.2.0/br.xpi) = 441961 +SHA256 (xpi/firefox-38.2.0/bs.xpi) = 0bf5d0e162a33a5ef6ac3059a5b713d88fff367f7384ad56a594ec07aafce358 +SIZE (xpi/firefox-38.2.0/bs.xpi) = 485305 +SHA256 (xpi/firefox-38.2.0/ca.xpi) = d2aaebad9dd838e9cb6aa4d5fcc45cfb2105cd655671455fd5a360ca43302842 +SIZE (xpi/firefox-38.2.0/ca.xpi) = 458091 +SHA256 (xpi/firefox-38.2.0/cs.xpi) = d3f1fe4b368d1f30cf93f6dba98af57491f2f23df1754edfc896aa7aef7bab8d +SIZE (xpi/firefox-38.2.0/cs.xpi) = 446725 +SHA256 (xpi/firefox-38.2.0/cy.xpi) = 7ab25f18ca0e267fcbc30503f47162319a5c1c08e1bc03518bab04c2c8fe59c2 +SIZE (xpi/firefox-38.2.0/cy.xpi) = 444385 +SHA256 (xpi/firefox-38.2.0/da.xpi) = 23147921fc13063f39818bc2d563d4b07b0a5ab466000d9405fd9b9249e67663 +SIZE (xpi/firefox-38.2.0/da.xpi) = 450762 +SHA256 (xpi/firefox-38.2.0/de.xpi) = 6d4cdaa88f41cc5feaae869db51684d85b1b1d6026ba9309c0572261828f8c1b +SIZE (xpi/firefox-38.2.0/de.xpi) = 451628 +SHA256 (xpi/firefox-38.2.0/dsb.xpi) = ff71942cac9c2548caa8f12df7005b5b9f91264f5b7da7360a99a088c4528440 +SIZE (xpi/firefox-38.2.0/dsb.xpi) = 470924 +SHA256 (xpi/firefox-38.2.0/el.xpi) = 24226e706875c0f1c1b18c4f2f55fb83e5963c3e22061a2af436d92e8b66ae29 +SIZE (xpi/firefox-38.2.0/el.xpi) = 498370 +SHA256 (xpi/firefox-38.2.0/en-GB.xpi) = 2824d85c15ff1a0ee6bd69228dec418481c9a7c4565beb5b45d0428e0b6f127b +SIZE (xpi/firefox-38.2.0/en-GB.xpi) = 437846 +SHA256 (xpi/firefox-38.2.0/en-US.xpi) = 92f20a9f6190d284201b5aff848d5bc111eda558f44c17b957eb45df9e787def +SIZE (xpi/firefox-38.2.0/en-US.xpi) = 469718 +SHA256 (xpi/firefox-38.2.0/en-ZA.xpi) = 7b103f2e7472388b6fea50c602a5950404e9d297a8ede752e04e93fecce4cc1a +SIZE (xpi/firefox-38.2.0/en-ZA.xpi) = 439926 +SHA256 (xpi/firefox-38.2.0/eo.xpi) = 7c41dc63256b9ae615206cecd5bf008879443791b03269e1d4dfcbb0b6e73fb9 +SIZE (xpi/firefox-38.2.0/eo.xpi) = 488370 +SHA256 (xpi/firefox-38.2.0/es-AR.xpi) = fede8e15d08da232349fd180b17d208d556de12fcb37a98a59362773e67ceca1 +SIZE (xpi/firefox-38.2.0/es-AR.xpi) = 453983 +SHA256 (xpi/firefox-38.2.0/es-CL.xpi) = 5957a2f6db01d593b6d82149f1ecd6b129e5322f74a254ac46d07503719e61c9 +SIZE (xpi/firefox-38.2.0/es-CL.xpi) = 384680 +SHA256 (xpi/firefox-38.2.0/es-ES.xpi) = 2da47c5401a9e60c84859bd28635cac8bd03d07cfc0d25ffd2fed66819d060bb +SIZE (xpi/firefox-38.2.0/es-ES.xpi) = 374073 +SHA256 (xpi/firefox-38.2.0/es-MX.xpi) = 0d396f5f5ea77920d7273fe4dd3662b08997657c321fb7ae62c9406abd9135e1 +SIZE (xpi/firefox-38.2.0/es-MX.xpi) = 457050 +SHA256 (xpi/firefox-38.2.0/et.xpi) = fac02f932ee8c93c660daf2b36ca6a8246724dfa5ac040809e6d88eb219b7a03 +SIZE (xpi/firefox-38.2.0/et.xpi) = 443228 +SHA256 (xpi/firefox-38.2.0/eu.xpi) = 492ac55eceaff28188516c154e738d4189615135e4434cde7d4108c6c92200a2 +SIZE (xpi/firefox-38.2.0/eu.xpi) = 466555 +SHA256 (xpi/firefox-38.2.0/fa.xpi) = 125f97265b11efa49886c6ca9611b6cdedfbaf40ac59fa7ba2f5d86308dbe4e9 +SIZE (xpi/firefox-38.2.0/fa.xpi) = 518281 +SHA256 (xpi/firefox-38.2.0/ff.xpi) = 36e58433af2939b69d461a4d21f8576c2773ab926f95e9742fcfa28c4b8155a9 +SIZE (xpi/firefox-38.2.0/ff.xpi) = 454587 +SHA256 (xpi/firefox-38.2.0/fi.xpi) = e56a3252d800bdc5ad2c18badf8a1a6743e7aa4fd29f459a339ef05a26614272 +SIZE (xpi/firefox-38.2.0/fi.xpi) = 444852 +SHA256 (xpi/firefox-38.2.0/fr.xpi) = 959138dcce85fd35da81fc9a1ddc28bfb06435f9a71fa1f2a2cf0b44978cdf70 +SIZE (xpi/firefox-38.2.0/fr.xpi) = 461402 +SHA256 (xpi/firefox-38.2.0/fy-NL.xpi) = 3f86674161098d9446ea0736969c0d030eca100688880921daa8e615a9410e38 +SIZE (xpi/firefox-38.2.0/fy-NL.xpi) = 455537 +SHA256 (xpi/firefox-38.2.0/ga-IE.xpi) = bfb2eeb0c787ff5ca2afec939f4da875eb854bc5baafcd61021b2d0a4db4456b +SIZE (xpi/firefox-38.2.0/ga-IE.xpi) = 469624 +SHA256 (xpi/firefox-38.2.0/gd.xpi) = 8acb2f0a4416f8ef182abcf6450e9169852524c0fbf37dbf15cb5156273eec8c +SIZE (xpi/firefox-38.2.0/gd.xpi) = 454616 +SHA256 (xpi/firefox-38.2.0/gl.xpi) = 53ecc5c4d83346d327cfea3ed8554b468f9ecb17daba0ee655268a3d1a23d276 +SIZE (xpi/firefox-38.2.0/gl.xpi) = 448924 +SHA256 (xpi/firefox-38.2.0/gu-IN.xpi) = 33799f5f28c4b6fd80f5ecb5b4ac1ff9ebe34461e50c59151d029053f1f73d53 +SIZE (xpi/firefox-38.2.0/gu-IN.xpi) = 477977 +SHA256 (xpi/firefox-38.2.0/he.xpi) = 98f05fde9c1341b7d32e196660884fa24c266575374aa8fb26859f5fa75b7b46 +SIZE (xpi/firefox-38.2.0/he.xpi) = 486785 +SHA256 (xpi/firefox-38.2.0/hi-IN.xpi) = 3a9480cd2345f00507ae719c33185acf5e9f66a9c996607dfac0ec95d0d32d89 +SIZE (xpi/firefox-38.2.0/hi-IN.xpi) = 508167 +SHA256 (xpi/firefox-38.2.0/hr.xpi) = 125abeb8f4a881fd68bb8f8bd31d7b89c98d35f3d04e18ade625a74e45723466 +SIZE (xpi/firefox-38.2.0/hr.xpi) = 478271 +SHA256 (xpi/firefox-38.2.0/hsb.xpi) = a88449a67fdb85b21e031b894fc060e328c42a3ac1a39d13fff8446cc4df00d1 +SIZE (xpi/firefox-38.2.0/hsb.xpi) = 468720 +SHA256 (xpi/firefox-38.2.0/hu.xpi) = d37fc8e422a2421829665a13c7b39bc18af76afc22639395fe346a3540a360e1 +SIZE (xpi/firefox-38.2.0/hu.xpi) = 453554 +SHA256 (xpi/firefox-38.2.0/hy-AM.xpi) = ebdf5d14d7b97eddafe6fedc3b7b58b4823e2ba7e9f019facc65c469a1c0538b +SIZE (xpi/firefox-38.2.0/hy-AM.xpi) = 534264 +SHA256 (xpi/firefox-38.2.0/id.xpi) = 861b0ee5cd7130606f8db16d16855a932f62d18ea279aeb425d13043b88afecf +SIZE (xpi/firefox-38.2.0/id.xpi) = 431488 +SHA256 (xpi/firefox-38.2.0/is.xpi) = 17f205a9d775e3a97ea3d7b63ee931f4cf5bb24089978fc979dc4d1b5d057311 +SIZE (xpi/firefox-38.2.0/is.xpi) = 485129 +SHA256 (xpi/firefox-38.2.0/it.xpi) = 1da955c3cb53ee2fdbf03454840f2588ec3731b88d5ea31e450c4473eb7c0c8b +SIZE (xpi/firefox-38.2.0/it.xpi) = 368409 +SHA256 (xpi/firefox-38.2.0/ja.xpi) = 1b51688caa1e55b2117fe510d31485a3219c3f4446e3475c87699abd460e84b0 +SIZE (xpi/firefox-38.2.0/ja.xpi) = 479113 +SHA256 (xpi/firefox-38.2.0/kk.xpi) = 9a445773926e5abf3df7ed1e4ace90e52c17ffcfc65e76bc81b14ce3f9a47910 +SIZE (xpi/firefox-38.2.0/kk.xpi) = 503568 +SHA256 (xpi/firefox-38.2.0/km.xpi) = fbff5ab8dae477e73725de8f1ee346287aede8c00b6891dbb11d4500b7e6620e +SIZE (xpi/firefox-38.2.0/km.xpi) = 565673 +SHA256 (xpi/firefox-38.2.0/kn.xpi) = d8756e4efe30cf21178d51ea7186d0bac4980a10fbfb29534d0e3988859d2997 +SIZE (xpi/firefox-38.2.0/kn.xpi) = 533464 +SHA256 (xpi/firefox-38.2.0/ko.xpi) = 19f3413cf7c9e0deaa025d254c8e787f2e2d3dbe0c800841d69f87dd02249b30 +SIZE (xpi/firefox-38.2.0/ko.xpi) = 460854 +SHA256 (xpi/firefox-38.2.0/lij.xpi) = 769ad5652416a94c038f1df689532c35cf00804e7971f7d0bfa7157ebc24e95d +SIZE (xpi/firefox-38.2.0/lij.xpi) = 444239 +SHA256 (xpi/firefox-38.2.0/lt.xpi) = 692e7fb76eba7b2926300e2ae12dd1215c4010722cd95ece2893556ce1729ff5 +SIZE (xpi/firefox-38.2.0/lt.xpi) = 486452 +SHA256 (xpi/firefox-38.2.0/lv.xpi) = 0e7a1903ee292b3bacf00a876bce9618a869a708820bb04cc4487536b7a09590 +SIZE (xpi/firefox-38.2.0/lv.xpi) = 467198 +SHA256 (xpi/firefox-38.2.0/mai.xpi) = c51b1627c24c48721cf799e9438d097d2b815e576042813a15d7631285385499 +SIZE (xpi/firefox-38.2.0/mai.xpi) = 514666 +SHA256 (xpi/firefox-38.2.0/mk.xpi) = e4be6327448665795bc83a5de98826bfbc78118d188e7687546b5b5d170a1e3a +SIZE (xpi/firefox-38.2.0/mk.xpi) = 529205 +SHA256 (xpi/firefox-38.2.0/ml.xpi) = 6aa7b005affd7cdc10d9c42454e841d94ecc94bec273755ef9754e033a3e62be +SIZE (xpi/firefox-38.2.0/ml.xpi) = 528919 +SHA256 (xpi/firefox-38.2.0/mr.xpi) = 73bb6c2101dfa7876814c68b3b02467608c72e0e8bc3517aa0fec61673069bba +SIZE (xpi/firefox-38.2.0/mr.xpi) = 505961 +SHA256 (xpi/firefox-38.2.0/ms.xpi) = f4f68fd8871ab409f9d3d0540873167e693314278a16508450a359d9cafdfdc3 +SIZE (xpi/firefox-38.2.0/ms.xpi) = 489872 +SHA256 (xpi/firefox-38.2.0/nb-NO.xpi) = 8056a9169fd52a12f8f806f1e2870a2578591df8a2c711786bee7ce84436dbfa +SIZE (xpi/firefox-38.2.0/nb-NO.xpi) = 444177 +SHA256 (xpi/firefox-38.2.0/nl.xpi) = 5dd497dbddcc664facae77de25b8b3f4e3c87a1747bc44595dd91b716ba82748 +SIZE (xpi/firefox-38.2.0/nl.xpi) = 443995 +SHA256 (xpi/firefox-38.2.0/nn-NO.xpi) = a7371d8b484cb686965b3769f0bedf6c8803bbbc05021c8b3e24d99dfe66348d +SIZE (xpi/firefox-38.2.0/nn-NO.xpi) = 438452 +SHA256 (xpi/firefox-38.2.0/or.xpi) = 79db2dab58df83d308c614469a7050d3228898fcb2edfbdb9eaf66d37d541719 +SIZE (xpi/firefox-38.2.0/or.xpi) = 527050 +SHA256 (xpi/firefox-38.2.0/pa-IN.xpi) = cbfc04c1b6dd2de9f87bca693b4de8275ab4860cc538c0d7a60fecb58b88c6dd +SIZE (xpi/firefox-38.2.0/pa-IN.xpi) = 493723 +SHA256 (xpi/firefox-38.2.0/pl.xpi) = f7f312ed6907c15004e75cfb95a0e254087932cf8203b1d0419dc1eea055a9c7 +SIZE (xpi/firefox-38.2.0/pl.xpi) = 406567 +SHA256 (xpi/firefox-38.2.0/pt-BR.xpi) = d13fcef16af096732c430b699a53b1d0d76eb3829bff5166d876ffcc94e123e7 +SIZE (xpi/firefox-38.2.0/pt-BR.xpi) = 459814 +SHA256 (xpi/firefox-38.2.0/pt-PT.xpi) = 9cd4c26a521f2e0550ea62ddc27ca751a2b3f2fdc6d55af861936abcdd6c1efd +SIZE (xpi/firefox-38.2.0/pt-PT.xpi) = 439976 +SHA256 (xpi/firefox-38.2.0/rm.xpi) = cf88953513fc4b20a5318b3d4e8f771edc7dc3ef3b3b09a8858ad1b9261c0866 +SIZE (xpi/firefox-38.2.0/rm.xpi) = 446287 +SHA256 (xpi/firefox-38.2.0/ro.xpi) = d5151574b477c6964461ae75563397ebc8f11dfb9331e2ffeb046a4bd046ea97 +SIZE (xpi/firefox-38.2.0/ro.xpi) = 494080 +SHA256 (xpi/firefox-38.2.0/ru.xpi) = 0289531702f0e2ad68984a9dd939e67dafed98eed7c1a6552d136d759ed74684 +SIZE (xpi/firefox-38.2.0/ru.xpi) = 414418 +SHA256 (xpi/firefox-38.2.0/si.xpi) = 314d1635548bbfd7f41927cf327c781d03d99b8ed1a2c8775a34ba6cd3b12a85 +SIZE (xpi/firefox-38.2.0/si.xpi) = 537394 +SHA256 (xpi/firefox-38.2.0/sk.xpi) = d40e11bda881fa9703e51065bab7204bc5dad8d4affedd4638cfe96f907ddf07 +SIZE (xpi/firefox-38.2.0/sk.xpi) = 469436 +SHA256 (xpi/firefox-38.2.0/sl.xpi) = 8ba7277af23a615970cc1384d3b54e8d88a3305da9fe03790819e7b1aeb41a15 +SIZE (xpi/firefox-38.2.0/sl.xpi) = 441594 +SHA256 (xpi/firefox-38.2.0/son.xpi) = 3709b10419d813e3255ef9022e276344ca90788c33858aec111c541b455bb79a +SIZE (xpi/firefox-38.2.0/son.xpi) = 449268 +SHA256 (xpi/firefox-38.2.0/sq.xpi) = fdc0e581d870726728aad45980c6f10d4141a0b9fa39424e51335c8751063e30 +SIZE (xpi/firefox-38.2.0/sq.xpi) = 486075 +SHA256 (xpi/firefox-38.2.0/sr.xpi) = 6007a48742b675c34bd8a331c201f79a19cb52fe7dd7907cd73e76ff9d0c090c +SIZE (xpi/firefox-38.2.0/sr.xpi) = 479420 +SHA256 (xpi/firefox-38.2.0/sv-SE.xpi) = 21158bf5a1286bc55dda4e34ef00fecf5490c55da61dfbb8de8a8f15f6c3fb95 +SIZE (xpi/firefox-38.2.0/sv-SE.xpi) = 452632 +SHA256 (xpi/firefox-38.2.0/ta.xpi) = ec13ec46f071219815b200ab46f103ebdca82308187562d57ae9ae01a9c234e8 +SIZE (xpi/firefox-38.2.0/ta.xpi) = 506606 +SHA256 (xpi/firefox-38.2.0/te.xpi) = b1ffd8fa3534f51d3ec9294288223898d8c41285c4fa400e096fc7ec1aff8b0b +SIZE (xpi/firefox-38.2.0/te.xpi) = 526253 +SHA256 (xpi/firefox-38.2.0/th.xpi) = 0e15637fcefb0e16c4722c242466d2f67b18eb0fbe79097cc29e5358cf7aa19d +SIZE (xpi/firefox-38.2.0/th.xpi) = 534271 +SHA256 (xpi/firefox-38.2.0/tr.xpi) = fae94efd727ddd145146d2df759e02e060e8302c666ea6cb2d09558bdff76abe +SIZE (xpi/firefox-38.2.0/tr.xpi) = 481076 +SHA256 (xpi/firefox-38.2.0/uk.xpi) = d9871bbdffe5f9cf5275894c05a7934a21af421c3343844fb5efa78efa06aaa8 +SIZE (xpi/firefox-38.2.0/uk.xpi) = 493314 +SHA256 (xpi/firefox-38.2.0/vi.xpi) = 9e7dc043c3aa7890255241bdd0292a01d957fcb77434ed236df07401e3f7a9b2 +SIZE (xpi/firefox-38.2.0/vi.xpi) = 467505 +SHA256 (xpi/firefox-38.2.0/xh.xpi) = d41ee639470dce1ff3a103987c16ad5dc32c3b1f468760855d9c840dfbc0a39d +SIZE (xpi/firefox-38.2.0/xh.xpi) = 450242 +SHA256 (xpi/firefox-38.2.0/zh-CN.xpi) = 6b58c8a6fd5e62933d8ec42758a6fc7dd4794b7f659855331debc876e8b80bec +SIZE (xpi/firefox-38.2.0/zh-CN.xpi) = 488277 +SHA256 (xpi/firefox-38.2.0/zh-TW.xpi) = bb22672b52104fd11c28d5609d2c039dd0b3636445b091523dfb90538cf84e94 +SIZE (xpi/firefox-38.2.0/zh-TW.xpi) = 467844 Index: head/www/firefox-i18n/Makefile =================================================================== --- head/www/firefox-i18n/Makefile (revision 393689) +++ head/www/firefox-i18n/Makefile (revision 393690) @@ -1,89 +1,89 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= firefox-i18n -PORTVERSION= 39.0 +PORTVERSION= 40.0 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \ - MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build6/linux-i686/xpi + MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build4/linux-i686/xpi PKGNAMEPREFIX= DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} MAINTAINER= gecko@FreeBSD.org COMMENT= Localized interface for Firefox EXTRACT_DEPENDS= zip:${PORTSDIR}/archivers/zip -USES= zip:infozip gecko:firefox,39,build +USES= zip:infozip gecko:firefox,40,build USE_XPI= firefox linux-firefox NO_ARCH= yes USE_SUBMAKE= yes WDIR= langpack-*@firefox.mozilla.org XPI_DISTNAMES= ${FIREFOX_I18N_} PLIST?= ${WRKDIR}/plist PLISTF?= ${WRKDIR}/plist_files .include "${.CURDIR}/Makefile.option" .include .ifndef WITHOUT_SWITCHER RUN_DEPENDS+= xpi-quick-locale-switcher>=0:${PORTSDIR}/www/xpi-quick-locale-switcher .endif .include "${.CURDIR}/Makefile.lang" FIREFOX_I18N_?= ${FIREFOX_I18N} .for dist in ${XPI_DISTNAMES} XPI_ID_${dist}= langpack-${dist}@firefox.mozilla.org .endfor pre-everything:: @${ECHO_CMD} @${ECHO_CMD} "Please define FIREFOX_I18N_ALL to install all languages." @${ECHO_CMD} do-extract: @${MKDIR} ${WRKSRC} @for lang in ${FIREFOX_I18N_}; do \ if ! (${UNZIP_CMD} -qo ${_DISTDIR}/$$lang.xpi -d ${WRKSRC}/langpack-$$lang@firefox.mozilla.org);\ then \ exit 1; \ fi; \ cd ${WRKSRC}/langpack-$$lang@firefox.mozilla.org/; \ ${FIND} -H -s * ! -type d | \ ${SED} -e "s|^|lib/xpi/langpack-$$lang@firefox.mozilla.org/|" >> ${PLISTF}; \ done ${CAT} ${PLISTF} | ${SORT} >> ${PLIST} do-install: @${MKDIR} ${STAGEDIR}${XPI_LIBDIR} ${STAGEDIR}${XPI_SLDIRS_ALL} cd ${WRKSRC}; ${PAX} -rw . ${STAGEDIR}${XPI_LIBDIR} ${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${WDIR}/ @for e in ${STAGEDIR}${XPI_LIBDIR}/${WDIR}; do \ for _dir in ${XPI_LINKFARMS} ; do \ ${LN} -sf $${_e##*/} ${STAGEDIR}$$_dir/ ${_Q} ; \ done \ done @${ECHO_CMD} '@exec ${INSTALL} -d ${XPI_SLDIRS_ALL:S,^${PREFIX},%D,}' ${_A} @${ECHO_CMD} '@exec for _dir in ${XPI_LINKFARMS} ; { \ ${LN} -sf ${XPI_LIBDIR}/${WDIR} $$_dir/ ${_Q}; }' ${_A} @${ECHO_CMD} '@unexec for _dir in ${XPI_LINKFARMS} ${XPI_LIBDIR}; { ${RM} -f $$_dir/${WDIR} ; }' ${_A} post-patch: ${FIND} ${WRKSRC} -name install.rdf -print0 | \ ${XARGS} -0L1 ${REINPLACE_CMD} -i '' -e '/ Index: head/www/firefox-i18n/distinfo =================================================================== --- head/www/firefox-i18n/distinfo (revision 393689) +++ head/www/firefox-i18n/distinfo (revision 393690) @@ -1,176 +1,176 @@ -SHA256 (xpi/firefox-i18n-39.0/ach.xpi) = c922e238ef7201cb0b0c2a9da00164c350b440a3d02c838daa45b17713bf3eab -SIZE (xpi/firefox-i18n-39.0/ach.xpi) = 483041 -SHA256 (xpi/firefox-i18n-39.0/af.xpi) = 3653816368acb76e6773826db81c6473bdd923f7d61ca5ef24e9144d38c3752e -SIZE (xpi/firefox-i18n-39.0/af.xpi) = 487310 -SHA256 (xpi/firefox-i18n-39.0/an.xpi) = c0bf2029255947a5c1fcb681fdb4ad0522a0b9941f5862046c45a70d04b68609 -SIZE (xpi/firefox-i18n-39.0/an.xpi) = 465359 -SHA256 (xpi/firefox-i18n-39.0/ar.xpi) = 1607562dafe4274ed7eb74e8d993baa70162c91de265bb2ac1dd8a63bdc1a3b3 -SIZE (xpi/firefox-i18n-39.0/ar.xpi) = 520323 -SHA256 (xpi/firefox-i18n-39.0/as.xpi) = 653ee076f738a7365dd75da4899032f31ac73451e9a2b26a1ec5e4621547f443 -SIZE (xpi/firefox-i18n-39.0/as.xpi) = 514544 -SHA256 (xpi/firefox-i18n-39.0/ast.xpi) = 1fde38dbd96c86bc523d8524472c0de157d58d07e963a1a9bb6794fb6db484d4 -SIZE (xpi/firefox-i18n-39.0/ast.xpi) = 387702 -SHA256 (xpi/firefox-i18n-39.0/az.xpi) = 6bdd0663efa56eebaa67edabee1630147b051181ad993c14241ba7a7b4ccaad0 -SIZE (xpi/firefox-i18n-39.0/az.xpi) = 494213 -SHA256 (xpi/firefox-i18n-39.0/be.xpi) = 8a2278c789a06cc5b27ccfff3731ed8c534529d67e9c5cc42a2e3b6d8613c858 -SIZE (xpi/firefox-i18n-39.0/be.xpi) = 445945 -SHA256 (xpi/firefox-i18n-39.0/bg.xpi) = 24d6285a03ee495b928be4f221f49af8a1f9a07f4ce5be14beff6ebc531f7687 -SIZE (xpi/firefox-i18n-39.0/bg.xpi) = 491422 -SHA256 (xpi/firefox-i18n-39.0/bn-BD.xpi) = 67d9759ac8d22b976ede194fd4c03b72411aa8bb7f733d13ea034119b0a086e5 -SIZE (xpi/firefox-i18n-39.0/bn-BD.xpi) = 533076 -SHA256 (xpi/firefox-i18n-39.0/bn-IN.xpi) = ec20ec3b29b5c7c8827fdbe78e7081ba20ae7d840ed7181b80bd983e19e26dc0 -SIZE (xpi/firefox-i18n-39.0/bn-IN.xpi) = 532548 -SHA256 (xpi/firefox-i18n-39.0/br.xpi) = b2cb99df9e051e3f625b99f8e929a2cddfea5252e41be0064d6ca3d782b1f592 -SIZE (xpi/firefox-i18n-39.0/br.xpi) = 445830 -SHA256 (xpi/firefox-i18n-39.0/bs.xpi) = 9b85eb51785eafdd7467baba89fec2ad72596e56ca7c955f809b23076467853e -SIZE (xpi/firefox-i18n-39.0/bs.xpi) = 489604 -SHA256 (xpi/firefox-i18n-39.0/ca.xpi) = e4302b4babac9b90600ef142bf9d1060a596ac64f91481b23c4884d10f69183f -SIZE (xpi/firefox-i18n-39.0/ca.xpi) = 461923 -SHA256 (xpi/firefox-i18n-39.0/cs.xpi) = 26de879be7e96d6c8020a46ba73049ed13344c1943ea0128ffdcce356cd02f95 -SIZE (xpi/firefox-i18n-39.0/cs.xpi) = 450723 -SHA256 (xpi/firefox-i18n-39.0/cy.xpi) = 91cb0a9d93c5214e0e42ec9fa19c318209635975f7da6849e0b3ccd3a95c5951 -SIZE (xpi/firefox-i18n-39.0/cy.xpi) = 448065 -SHA256 (xpi/firefox-i18n-39.0/da.xpi) = 64748e6b957775bb3ac42bb35f227c88092afb11afce62b425b4c0747fbe285f -SIZE (xpi/firefox-i18n-39.0/da.xpi) = 454611 -SHA256 (xpi/firefox-i18n-39.0/de.xpi) = 56bb69de98fc46442e3aa2c09f95ebd0723f3c73fd890a013450c88225f9a80f -SIZE (xpi/firefox-i18n-39.0/de.xpi) = 456189 -SHA256 (xpi/firefox-i18n-39.0/dsb.xpi) = 802fcc3a4a30b7b899bdceb5a45878b48da89a9048e4a295784c07b45198cd7a -SIZE (xpi/firefox-i18n-39.0/dsb.xpi) = 474911 -SHA256 (xpi/firefox-i18n-39.0/el.xpi) = 22f7185683d08b186ca0022663f1c822b865683f913e8411ebd50408dc91bd2f -SIZE (xpi/firefox-i18n-39.0/el.xpi) = 502653 -SHA256 (xpi/firefox-i18n-39.0/en-GB.xpi) = 2cf069f9da826329c5e5a22aadc4ea5a08ab0e25470b43c358e4ea14edebe88a -SIZE (xpi/firefox-i18n-39.0/en-GB.xpi) = 441232 -SHA256 (xpi/firefox-i18n-39.0/en-US.xpi) = 0e89eb7cbe1fb84203d0217200dcea154a7422d1a7e6049f564796576a732762 -SIZE (xpi/firefox-i18n-39.0/en-US.xpi) = 473134 -SHA256 (xpi/firefox-i18n-39.0/en-ZA.xpi) = 73a7c02e116e86db894266147770124e6627a82c8a3cfe8e336526215fd50444 -SIZE (xpi/firefox-i18n-39.0/en-ZA.xpi) = 444467 -SHA256 (xpi/firefox-i18n-39.0/eo.xpi) = 972ddf4c1acffd1f46b7fe3d7926994a8be0bfccc8589466c26490cc97d06a3d -SIZE (xpi/firefox-i18n-39.0/eo.xpi) = 489005 -SHA256 (xpi/firefox-i18n-39.0/es-AR.xpi) = 1f6fefebe9901763b950de6bbe6aa85bb948673d976f47814b907507274f0766 -SIZE (xpi/firefox-i18n-39.0/es-AR.xpi) = 457407 -SHA256 (xpi/firefox-i18n-39.0/es-CL.xpi) = 03bd03f60a298295a975252629c8ff9362430d15b650f5bcd82ce6604d0cf514 -SIZE (xpi/firefox-i18n-39.0/es-CL.xpi) = 386702 -SHA256 (xpi/firefox-i18n-39.0/es-ES.xpi) = a096fc6c58a2959bf8471830040351feddfac0555150af9409540cec10685afe -SIZE (xpi/firefox-i18n-39.0/es-ES.xpi) = 376299 -SHA256 (xpi/firefox-i18n-39.0/es-MX.xpi) = 56793b19b75c7c1e9692f3b3d415e572439800e288f8e0227bcf690466a064fa -SIZE (xpi/firefox-i18n-39.0/es-MX.xpi) = 462390 -SHA256 (xpi/firefox-i18n-39.0/et.xpi) = 0aaa0ccc0568456adbc0401acceb97983a7045405f4972058b60606fedc19c79 -SIZE (xpi/firefox-i18n-39.0/et.xpi) = 446725 -SHA256 (xpi/firefox-i18n-39.0/eu.xpi) = 7d04e5b11906f474d4096cb496514f8f370eada489739d31742128c7aaebcc91 -SIZE (xpi/firefox-i18n-39.0/eu.xpi) = 470410 -SHA256 (xpi/firefox-i18n-39.0/fa.xpi) = 605d95815fe0c77a4fc5df46d670d4e8e5b35924729a3a640210a0581d3330a1 -SIZE (xpi/firefox-i18n-39.0/fa.xpi) = 520579 -SHA256 (xpi/firefox-i18n-39.0/ff.xpi) = 30e3f30a775f38cb5663a707a1a85ee59f91007fbc229e47401a753702772d89 -SIZE (xpi/firefox-i18n-39.0/ff.xpi) = 459433 -SHA256 (xpi/firefox-i18n-39.0/fi.xpi) = 59d56595435d52e334cb3f388f711ced61075cf0026ba7d4e2cd04527d689ca7 -SIZE (xpi/firefox-i18n-39.0/fi.xpi) = 448585 -SHA256 (xpi/firefox-i18n-39.0/fr.xpi) = 59f1fc070ab7b7f65bab0c475f8fe894fa5c4e924d4f78b97cec8268d2359c41 -SIZE (xpi/firefox-i18n-39.0/fr.xpi) = 465588 -SHA256 (xpi/firefox-i18n-39.0/fy-NL.xpi) = 4812b3fae6bd6083fc0520487403c95f6104d7838e7edc450f05bce495832e3c -SIZE (xpi/firefox-i18n-39.0/fy-NL.xpi) = 459611 -SHA256 (xpi/firefox-i18n-39.0/ga-IE.xpi) = 75f737af71ef7cb19ef4bcd99fa63c6c5d5b77b2d2b96c526b46faa375c2c6db -SIZE (xpi/firefox-i18n-39.0/ga-IE.xpi) = 473547 -SHA256 (xpi/firefox-i18n-39.0/gd.xpi) = 792a7907e5eeb1486a404b9a3a8d88d7eecca87d87a2646d9a11cdaefe01a78c -SIZE (xpi/firefox-i18n-39.0/gd.xpi) = 458521 -SHA256 (xpi/firefox-i18n-39.0/gl.xpi) = fa21c7bcc4989c6c0c0c459f46f7bd716cb7d19ad37861d57389177e7b1e143a -SIZE (xpi/firefox-i18n-39.0/gl.xpi) = 453846 -SHA256 (xpi/firefox-i18n-39.0/gu-IN.xpi) = 189995f89fa441a743354e708d9e8a87d346625881ffaad7bff528de90ba1206 -SIZE (xpi/firefox-i18n-39.0/gu-IN.xpi) = 482866 -SHA256 (xpi/firefox-i18n-39.0/he.xpi) = 70984a01b309959bcbe1d693cba3d92b51a65c3e71535ec015c4b3f950a53f62 -SIZE (xpi/firefox-i18n-39.0/he.xpi) = 486474 -SHA256 (xpi/firefox-i18n-39.0/hi-IN.xpi) = a340651af88b6437a9c04e0c7186f928b730475550a383ac8387714f7a40f1a9 -SIZE (xpi/firefox-i18n-39.0/hi-IN.xpi) = 513451 -SHA256 (xpi/firefox-i18n-39.0/hr.xpi) = 48ab8729d65620b8ccb3e866a4d3eb57bb4e9d4e363491a0c61f1eea122e0c24 -SIZE (xpi/firefox-i18n-39.0/hr.xpi) = 482071 -SHA256 (xpi/firefox-i18n-39.0/hsb.xpi) = f87894bd9d003e9a62548ac82608dbb4b24f36eea8d776872c490a576b4c80e7 -SIZE (xpi/firefox-i18n-39.0/hsb.xpi) = 472665 -SHA256 (xpi/firefox-i18n-39.0/hu.xpi) = e1388ec88077f8a3111d8011b7e8e8773580a1e2b71d6432baff09fa08ee54a8 -SIZE (xpi/firefox-i18n-39.0/hu.xpi) = 457441 -SHA256 (xpi/firefox-i18n-39.0/hy-AM.xpi) = 1ab7dbb561103d9ac32e55c273ebf738480567a9882c9957f9e29829814dc766 -SIZE (xpi/firefox-i18n-39.0/hy-AM.xpi) = 538192 -SHA256 (xpi/firefox-i18n-39.0/id.xpi) = 41ec6c7ea5015d879600675359a21e160a6fc940e1ff634949c759a076da9c06 -SIZE (xpi/firefox-i18n-39.0/id.xpi) = 435240 -SHA256 (xpi/firefox-i18n-39.0/is.xpi) = 68651c22d74e0133a82eab94e8734bfded3bc219b1de7489180835573cb81ba6 -SIZE (xpi/firefox-i18n-39.0/is.xpi) = 488859 -SHA256 (xpi/firefox-i18n-39.0/it.xpi) = 7a681ca2928e3e2154ca190cc06d015144afffd9669b938410e8d48980a1c959 -SIZE (xpi/firefox-i18n-39.0/it.xpi) = 370614 -SHA256 (xpi/firefox-i18n-39.0/ja.xpi) = e510ba604a63b8cb6caf1e24500cb5cfb6a07a90ff22f111b501e847523ff2d0 -SIZE (xpi/firefox-i18n-39.0/ja.xpi) = 483150 -SHA256 (xpi/firefox-i18n-39.0/kk.xpi) = 5ff684dc2245de82a8edda2d02ee20dfbef7db6165060b20e6e3d229437968ef -SIZE (xpi/firefox-i18n-39.0/kk.xpi) = 507527 -SHA256 (xpi/firefox-i18n-39.0/km.xpi) = 27d62503232240cd92508ce3d724f351d5ff8ad99a52d3cf962cf948829a9162 -SIZE (xpi/firefox-i18n-39.0/km.xpi) = 571219 -SHA256 (xpi/firefox-i18n-39.0/kn.xpi) = 342165fe3c5060bb15f6a889e4be80653731012be8d694e8ef817b447230cc46 -SIZE (xpi/firefox-i18n-39.0/kn.xpi) = 537653 -SHA256 (xpi/firefox-i18n-39.0/ko.xpi) = 348a8c4cd0f26b244fc2bc8467a8e6a8285bb7228e6deb6288fc7b464152ebe5 -SIZE (xpi/firefox-i18n-39.0/ko.xpi) = 465013 -SHA256 (xpi/firefox-i18n-39.0/lij.xpi) = 1870af5218e7223a83f935bbe58415e95a278dd1191db1c7b9f2e3446ae12285 -SIZE (xpi/firefox-i18n-39.0/lij.xpi) = 448691 -SHA256 (xpi/firefox-i18n-39.0/lt.xpi) = c49a0538443d77e1fbaf6660fdc15bc76181723af2f8b07af6579b408bc24370 -SIZE (xpi/firefox-i18n-39.0/lt.xpi) = 490579 -SHA256 (xpi/firefox-i18n-39.0/lv.xpi) = 8ac08b4ac3ae70dd7bbe090f0b0f984ebefef03c6d1d20cc4ba3527605c921be -SIZE (xpi/firefox-i18n-39.0/lv.xpi) = 471166 -SHA256 (xpi/firefox-i18n-39.0/mai.xpi) = 561890d80e0162a7e2f3ba5e46ecc07f2ea681005f6f3bae6810fb8acf9408e0 -SIZE (xpi/firefox-i18n-39.0/mai.xpi) = 520123 -SHA256 (xpi/firefox-i18n-39.0/mk.xpi) = e91f81eb8b68e7a2af87d5c82577bc713e4c163a0a64b9a80a99ee6b0830dc56 -SIZE (xpi/firefox-i18n-39.0/mk.xpi) = 533582 -SHA256 (xpi/firefox-i18n-39.0/ml.xpi) = 9fecda84807976d1b320c0070b4f87eff5813f4965aec60e27df8f64e0f08622 -SIZE (xpi/firefox-i18n-39.0/ml.xpi) = 533592 -SHA256 (xpi/firefox-i18n-39.0/mr.xpi) = 511dcdbdb0d0fa919acf81879544d32e066e435bdda14a991f86d0c4999aae4c -SIZE (xpi/firefox-i18n-39.0/mr.xpi) = 510890 -SHA256 (xpi/firefox-i18n-39.0/ms.xpi) = 29494a97c34ed72ca533bec56481eb1baf75d48cc956e13030ff573d4434476e -SIZE (xpi/firefox-i18n-39.0/ms.xpi) = 494765 -SHA256 (xpi/firefox-i18n-39.0/nb-NO.xpi) = 4070b2df0eec4f1f2176c382759c1be4742a12313c01c3bd77ff80bfad0f7100 -SIZE (xpi/firefox-i18n-39.0/nb-NO.xpi) = 447825 -SHA256 (xpi/firefox-i18n-39.0/nl.xpi) = a99f7645bfb669f3a1e6d70ed6401f6492d1ac426757ca8c40683ecb3166ab19 -SIZE (xpi/firefox-i18n-39.0/nl.xpi) = 447540 -SHA256 (xpi/firefox-i18n-39.0/nn-NO.xpi) = 3481260f436473f8b4fa4116faece6a12472b022bd59e477bdec5d85edf211bd -SIZE (xpi/firefox-i18n-39.0/nn-NO.xpi) = 442076 -SHA256 (xpi/firefox-i18n-39.0/or.xpi) = 0a0fdb72e6ee2481fd0f6057021a03dd8c150b428cce05029649f72c8c308cc1 -SIZE (xpi/firefox-i18n-39.0/or.xpi) = 532004 -SHA256 (xpi/firefox-i18n-39.0/pa-IN.xpi) = 4f1359b27b7131ddc944b5746adb2af2b5c319d19151447075db512359f7f084 -SIZE (xpi/firefox-i18n-39.0/pa-IN.xpi) = 497420 -SHA256 (xpi/firefox-i18n-39.0/pl.xpi) = ca291faf583e5b53d5ac607d6e0a6eec13fdedddbf1a003158edf75d475c007d -SIZE (xpi/firefox-i18n-39.0/pl.xpi) = 408063 -SHA256 (xpi/firefox-i18n-39.0/pt-BR.xpi) = 55fbd2f5e4081394fa79b51935f809b5d5ed283f3c5d08597eb8aafdf1f012b4 -SIZE (xpi/firefox-i18n-39.0/pt-BR.xpi) = 463600 -SHA256 (xpi/firefox-i18n-39.0/pt-PT.xpi) = a41b6fc5b5791a596184b5226e3bb8d6185ad97a58bedcb8589afae849a6c40e -SIZE (xpi/firefox-i18n-39.0/pt-PT.xpi) = 444720 -SHA256 (xpi/firefox-i18n-39.0/rm.xpi) = 451394fad795daae087c5bd2d80d9afdc1b0eae52b73a66f97cb3bae61e1419d -SIZE (xpi/firefox-i18n-39.0/rm.xpi) = 449713 -SHA256 (xpi/firefox-i18n-39.0/ro.xpi) = a81a237f50f2aed3186029a1a63556d2ca6ed5c6b6b95c5b9137c94a88a1496c -SIZE (xpi/firefox-i18n-39.0/ro.xpi) = 497997 -SHA256 (xpi/firefox-i18n-39.0/ru.xpi) = 5b3ccfb721175424e567da7071ad3a3fd4f7ac1aaddea5106cd57f306014e1c4 -SIZE (xpi/firefox-i18n-39.0/ru.xpi) = 417166 -SHA256 (xpi/firefox-i18n-39.0/si.xpi) = bc0f7a5bdd857cc7bccec42aeaa87ebb50f3e6be515b91c1465de602ec4ba907 -SIZE (xpi/firefox-i18n-39.0/si.xpi) = 542367 -SHA256 (xpi/firefox-i18n-39.0/sk.xpi) = 749217670c0ab1bc40c5cf19380185ad77a9ab95b130a7d47bd71f5110303073 -SIZE (xpi/firefox-i18n-39.0/sk.xpi) = 473458 -SHA256 (xpi/firefox-i18n-39.0/sl.xpi) = 3c5807b2e4a150dcd625e227fa09414ac6e35f81c02984727681ce70158fdc35 -SIZE (xpi/firefox-i18n-39.0/sl.xpi) = 445483 -SHA256 (xpi/firefox-i18n-39.0/son.xpi) = c23ee1f72b1bdbaa2e9ead73dd8513413ed775d1f10ff3d73d17f10e0eba8267 -SIZE (xpi/firefox-i18n-39.0/son.xpi) = 453638 -SHA256 (xpi/firefox-i18n-39.0/sq.xpi) = 570609619b1850037303663b9bc27e1670b1248bd054a93d9d671e32dc9e037a -SIZE (xpi/firefox-i18n-39.0/sq.xpi) = 489758 -SHA256 (xpi/firefox-i18n-39.0/sr.xpi) = 0c559cc85f990b2759baf9cec96554e3e8c062ee5a0ab571e408aa888e6495b7 -SIZE (xpi/firefox-i18n-39.0/sr.xpi) = 483401 -SHA256 (xpi/firefox-i18n-39.0/sv-SE.xpi) = 88fa20f03e1c9f9ec7b8db45c1fbe3fd4eb89c10f52f0352b6e922352e986fa6 -SIZE (xpi/firefox-i18n-39.0/sv-SE.xpi) = 456397 -SHA256 (xpi/firefox-i18n-39.0/ta.xpi) = b1c71f7c30456bd20cc670cc976ca419257f15b01776be7095276d42e39f78ba -SIZE (xpi/firefox-i18n-39.0/ta.xpi) = 511678 -SHA256 (xpi/firefox-i18n-39.0/te.xpi) = 245cbea46dbbe581a728262a3bff4bdad410fc447c1dfcfc5ab68825f0685d6b -SIZE (xpi/firefox-i18n-39.0/te.xpi) = 531784 -SHA256 (xpi/firefox-i18n-39.0/th.xpi) = 1222f9eebb48c02abcac8e0f064e23bdb7b4c5288211816a51e598d2135aee90 -SIZE (xpi/firefox-i18n-39.0/th.xpi) = 539248 -SHA256 (xpi/firefox-i18n-39.0/tr.xpi) = 712b98ad2a0cf4b059554fe76d798a76ec3aa10ce2e95af0796dd9d46fa120b0 -SIZE (xpi/firefox-i18n-39.0/tr.xpi) = 484956 -SHA256 (xpi/firefox-i18n-39.0/uk.xpi) = 5b06984dc2d539dab5d3b83ec915b02a498d41185a2d3bfb7e465ef139fd605b -SIZE (xpi/firefox-i18n-39.0/uk.xpi) = 498395 -SHA256 (xpi/firefox-i18n-39.0/vi.xpi) = a44f0486939c81e86e2aaf255cfe70d17e2ec42b8cc400ec2d699c3a1a951044 -SIZE (xpi/firefox-i18n-39.0/vi.xpi) = 471789 -SHA256 (xpi/firefox-i18n-39.0/xh.xpi) = 8d66c08160c6a2e3860bca6cc7d9c87b653c97c70994beb45bfc8fad9afb4f03 -SIZE (xpi/firefox-i18n-39.0/xh.xpi) = 454916 -SHA256 (xpi/firefox-i18n-39.0/zh-CN.xpi) = a7e959d6aba6f67b880b9ebcc1d1c2e253f01e079475191dc3eef978a9d9b2b5 -SIZE (xpi/firefox-i18n-39.0/zh-CN.xpi) = 492380 -SHA256 (xpi/firefox-i18n-39.0/zh-TW.xpi) = ec30c554c57aa27835723253f4c0dfc4fc75ca591f9a64fbd65f7622d7b212dd -SIZE (xpi/firefox-i18n-39.0/zh-TW.xpi) = 471887 +SHA256 (xpi/firefox-i18n-40.0/ach.xpi) = e554083f001e907eec4a88bc81bef28393277c09b9c7ce1abe398210862b07a3 +SIZE (xpi/firefox-i18n-40.0/ach.xpi) = 494118 +SHA256 (xpi/firefox-i18n-40.0/af.xpi) = b61d8416df3becbc35f688ae7c96571cda02385061df4b00d984986407d56cea +SIZE (xpi/firefox-i18n-40.0/af.xpi) = 498499 +SHA256 (xpi/firefox-i18n-40.0/an.xpi) = e1e0711f6a8d443f9f3593551226dbc76b6fc28aaea401bc6add52ca2e275bf1 +SIZE (xpi/firefox-i18n-40.0/an.xpi) = 476724 +SHA256 (xpi/firefox-i18n-40.0/ar.xpi) = 79bd4729256e570e4f20c3c221a3fa2a4741c148cd5849dfc20c5e35c7ca5faf +SIZE (xpi/firefox-i18n-40.0/ar.xpi) = 532105 +SHA256 (xpi/firefox-i18n-40.0/as.xpi) = 6e39750f4837dc4c10bb62e3debb4a19303262292a24cddc02bb7a481c5d60aa +SIZE (xpi/firefox-i18n-40.0/as.xpi) = 522245 +SHA256 (xpi/firefox-i18n-40.0/ast.xpi) = 3e62ed6c6ce14e3628d9458fc726ff2491f48c6d99fed78247081ff82357c4fc +SIZE (xpi/firefox-i18n-40.0/ast.xpi) = 408919 +SHA256 (xpi/firefox-i18n-40.0/az.xpi) = 1826c1051cab9cbe50efa046a8b44c72c26b75916e5820de93e33a7e4b407d5c +SIZE (xpi/firefox-i18n-40.0/az.xpi) = 505059 +SHA256 (xpi/firefox-i18n-40.0/be.xpi) = 9d89aa879892a8b95f4f79a5048614136e1e9a439f648c047ea15b0edc56f9e7 +SIZE (xpi/firefox-i18n-40.0/be.xpi) = 464200 +SHA256 (xpi/firefox-i18n-40.0/bg.xpi) = 2013de458f1c0e2ba48c45dfa3ad8dc6ed50c78f73b912a3b395bcea089c17b2 +SIZE (xpi/firefox-i18n-40.0/bg.xpi) = 503493 +SHA256 (xpi/firefox-i18n-40.0/bn-BD.xpi) = 44a1cfd3a7709676132dba3f75d8984302dd6205c7cb541fbe68fb0d106548b7 +SIZE (xpi/firefox-i18n-40.0/bn-BD.xpi) = 538759 +SHA256 (xpi/firefox-i18n-40.0/bn-IN.xpi) = e840826d1f4f9389f9655fb3806c044d067459ff59f42db5e9ff2de037af9381 +SIZE (xpi/firefox-i18n-40.0/bn-IN.xpi) = 541269 +SHA256 (xpi/firefox-i18n-40.0/br.xpi) = f0b4ff7d974ce7becfff7769fb25e032f34b0dead44a99af46a8a1e1fcb693ac +SIZE (xpi/firefox-i18n-40.0/br.xpi) = 456848 +SHA256 (xpi/firefox-i18n-40.0/bs.xpi) = 73f5011523066ff6905d309ec35d4cef0a2ddf8615fd407d3facc39de2ba11aa +SIZE (xpi/firefox-i18n-40.0/bs.xpi) = 497331 +SHA256 (xpi/firefox-i18n-40.0/ca.xpi) = 665b3ddebe9469d4d83b3a5f6a3ade94c3a6f84bc74c6a70ae47660907f81e6c +SIZE (xpi/firefox-i18n-40.0/ca.xpi) = 474109 +SHA256 (xpi/firefox-i18n-40.0/cs.xpi) = f4dfa8d86217a603a1505147c6b552a99a270f1e0e555cf0ca6b59a584a45d0d +SIZE (xpi/firefox-i18n-40.0/cs.xpi) = 462357 +SHA256 (xpi/firefox-i18n-40.0/cy.xpi) = 274cee2b5d37a864209f7ef77005029341c194c76b2a734a6a3a7eff3a394b09 +SIZE (xpi/firefox-i18n-40.0/cy.xpi) = 459245 +SHA256 (xpi/firefox-i18n-40.0/da.xpi) = 010045369f3589ee09e6e3ffe9e56c65536d0be4cf9f84ace56607ba6d0f52a5 +SIZE (xpi/firefox-i18n-40.0/da.xpi) = 465571 +SHA256 (xpi/firefox-i18n-40.0/de.xpi) = 942a21e3741c265de969858c25d2c042d5d69a278a677f279b080fdfe2a7ebb4 +SIZE (xpi/firefox-i18n-40.0/de.xpi) = 467231 +SHA256 (xpi/firefox-i18n-40.0/dsb.xpi) = edfbdc66772da2528e3a67211325a9f085c4951ae69d7d6b27f344ce7dd97de9 +SIZE (xpi/firefox-i18n-40.0/dsb.xpi) = 486586 +SHA256 (xpi/firefox-i18n-40.0/el.xpi) = 9b82a5e6c520c7b98d8d5cfdbf23e6893b39aeec40b93817b6f49738b848b11a +SIZE (xpi/firefox-i18n-40.0/el.xpi) = 513115 +SHA256 (xpi/firefox-i18n-40.0/en-GB.xpi) = 534bcde43d5441cba6f101eb175f26d161104617c8ae8e046c7865cd4bf8e595 +SIZE (xpi/firefox-i18n-40.0/en-GB.xpi) = 451899 +SHA256 (xpi/firefox-i18n-40.0/en-US.xpi) = de23d7b289aae64d4aeb8d1bd00c7ea303acb477e28c5c36e4e55333e60f5993 +SIZE (xpi/firefox-i18n-40.0/en-US.xpi) = 483748 +SHA256 (xpi/firefox-i18n-40.0/en-ZA.xpi) = 5df44c1ec6cf02a95dc54ff9039b7ceaae1ac2a8cdbaa74950d42e2dddccf921 +SIZE (xpi/firefox-i18n-40.0/en-ZA.xpi) = 455369 +SHA256 (xpi/firefox-i18n-40.0/eo.xpi) = c8404c5a03994073a599c60ca2b5b5fe8e122450d6a309711fb40b1dc7db5f8b +SIZE (xpi/firefox-i18n-40.0/eo.xpi) = 500201 +SHA256 (xpi/firefox-i18n-40.0/es-AR.xpi) = b23c4d61e7ee35a0b4af14e8a0b04a8b6d90e92e09655953c34bda1d7a2936d5 +SIZE (xpi/firefox-i18n-40.0/es-AR.xpi) = 468597 +SHA256 (xpi/firefox-i18n-40.0/es-CL.xpi) = 1980bb1bb66d34cce9f986284718c18c8712092cafecb1329d0d1f8bdfaa63fa +SIZE (xpi/firefox-i18n-40.0/es-CL.xpi) = 394971 +SHA256 (xpi/firefox-i18n-40.0/es-ES.xpi) = 4514f639405508564f397b6f01668569737f175fbe7d8acc943336b2269b4eed +SIZE (xpi/firefox-i18n-40.0/es-ES.xpi) = 383893 +SHA256 (xpi/firefox-i18n-40.0/es-MX.xpi) = 6298279edc297d8253ee6b32536beb9ef0e7f7ca429b45bc4c5d65d9ed05dfad +SIZE (xpi/firefox-i18n-40.0/es-MX.xpi) = 472916 +SHA256 (xpi/firefox-i18n-40.0/et.xpi) = b7cd97496d8cd4afc1a85b4bd17fb26fe3ee85c468a7d6b4fcb40b0b5c994ad9 +SIZE (xpi/firefox-i18n-40.0/et.xpi) = 457407 +SHA256 (xpi/firefox-i18n-40.0/eu.xpi) = 9156b7fb83fd9127c38ee5fe0284feff1e849a73210ae4a2f2f66fb1fc46382c +SIZE (xpi/firefox-i18n-40.0/eu.xpi) = 481823 +SHA256 (xpi/firefox-i18n-40.0/fa.xpi) = 53095ebcbf9858886800385305496765e9c2837f4bba64c7e287893c819283e6 +SIZE (xpi/firefox-i18n-40.0/fa.xpi) = 526970 +SHA256 (xpi/firefox-i18n-40.0/ff.xpi) = 495081e6d635f4bddd335dd790b00b7c96d0eddad5ffca91c2ad4590808574a7 +SIZE (xpi/firefox-i18n-40.0/ff.xpi) = 465792 +SHA256 (xpi/firefox-i18n-40.0/fi.xpi) = d33c683435229aeb35742233a6462c52b60ccf6ea35a71750fe8b42781058bc4 +SIZE (xpi/firefox-i18n-40.0/fi.xpi) = 459381 +SHA256 (xpi/firefox-i18n-40.0/fr.xpi) = ef7824db8f82f5999261177722b28a80cf6f8c1ae0d6db348806e1ca1a1e1641 +SIZE (xpi/firefox-i18n-40.0/fr.xpi) = 477147 +SHA256 (xpi/firefox-i18n-40.0/fy-NL.xpi) = ff52c34f9552b5fa98edec028cf52306dd9759cd3f18efeb03559dd8499cb151 +SIZE (xpi/firefox-i18n-40.0/fy-NL.xpi) = 471144 +SHA256 (xpi/firefox-i18n-40.0/ga-IE.xpi) = 71cfb7ea4fbd63e0b06eafe61a22a9c8d787fe5668ff2247ccd8141f41c1b4ea +SIZE (xpi/firefox-i18n-40.0/ga-IE.xpi) = 485534 +SHA256 (xpi/firefox-i18n-40.0/gd.xpi) = 1e47002a4428fcccff851a50753c376b2970de7f857e30f7ede8273087e9cdda +SIZE (xpi/firefox-i18n-40.0/gd.xpi) = 469749 +SHA256 (xpi/firefox-i18n-40.0/gl.xpi) = 8e00af1201cc5c7a22377cbdec0d6c5bceeb0c3ee4bbae078c1e2471c9e26a5a +SIZE (xpi/firefox-i18n-40.0/gl.xpi) = 463633 +SHA256 (xpi/firefox-i18n-40.0/gu-IN.xpi) = 2db4e55437ffe7b3782d39e443b4026406ebcbb944eaa2379ba043b5f7c3fc3a +SIZE (xpi/firefox-i18n-40.0/gu-IN.xpi) = 498590 +SHA256 (xpi/firefox-i18n-40.0/he.xpi) = 878788f3071655ac4d41e3fd366273f2146c74109badc025476a89159c9a348a +SIZE (xpi/firefox-i18n-40.0/he.xpi) = 497109 +SHA256 (xpi/firefox-i18n-40.0/hi-IN.xpi) = 6c55c894e0167c755703fb4a1255a98d7adf5a6c4bde3d19df632ef39f3ccd43 +SIZE (xpi/firefox-i18n-40.0/hi-IN.xpi) = 519928 +SHA256 (xpi/firefox-i18n-40.0/hr.xpi) = 44c2593a6e19cbf14800fac98950cbe68a5852b61bd3af054dacba3def384464 +SIZE (xpi/firefox-i18n-40.0/hr.xpi) = 494491 +SHA256 (xpi/firefox-i18n-40.0/hsb.xpi) = f3223386cfc2fdc9b6db091c34b5a2502fe58efc52566d5a89f438591b0b2b20 +SIZE (xpi/firefox-i18n-40.0/hsb.xpi) = 484248 +SHA256 (xpi/firefox-i18n-40.0/hu.xpi) = db41373d2ecc78d4e54c3cc9c0be9763b4cbb69d575c0c047667449a701e69e4 +SIZE (xpi/firefox-i18n-40.0/hu.xpi) = 469053 +SHA256 (xpi/firefox-i18n-40.0/hy-AM.xpi) = 560d7ad91c649135c496dbe68b1afdd9ff75b0dbe5a45e60d082f30149308972 +SIZE (xpi/firefox-i18n-40.0/hy-AM.xpi) = 550064 +SHA256 (xpi/firefox-i18n-40.0/id.xpi) = 7ed0e561eb2c186af2e478dc8f8b1fa93811ff2ab91fefcd808e2fb8b3ed4e23 +SIZE (xpi/firefox-i18n-40.0/id.xpi) = 446091 +SHA256 (xpi/firefox-i18n-40.0/is.xpi) = cb0a953953eda60c0dae5e94cb7cc169c85a516ed5d92bb92de1078c4a6756d1 +SIZE (xpi/firefox-i18n-40.0/is.xpi) = 499892 +SHA256 (xpi/firefox-i18n-40.0/it.xpi) = 42ef3776f64d19a121767dcab78e378a248a953e66388a0312ab313b23d62eda +SIZE (xpi/firefox-i18n-40.0/it.xpi) = 377832 +SHA256 (xpi/firefox-i18n-40.0/ja.xpi) = 8cd5f175b821c3a6ecf92d33a440c90852e6c35655c45cc9f4057cc962b59f2f +SIZE (xpi/firefox-i18n-40.0/ja.xpi) = 495438 +SHA256 (xpi/firefox-i18n-40.0/kk.xpi) = f025a610be25f5c968888fa5a72de98f4f8a57c20873ff55ab7997b01b31a42a +SIZE (xpi/firefox-i18n-40.0/kk.xpi) = 520130 +SHA256 (xpi/firefox-i18n-40.0/km.xpi) = 8865824596d407f85d2c230529974e12404a209541d00dee03750bf3553b1084 +SIZE (xpi/firefox-i18n-40.0/km.xpi) = 578732 +SHA256 (xpi/firefox-i18n-40.0/kn.xpi) = f38ad6fab46fc33df076f9ad0bebf880c469519a2725b64ae4a053e1567ca202 +SIZE (xpi/firefox-i18n-40.0/kn.xpi) = 550863 +SHA256 (xpi/firefox-i18n-40.0/ko.xpi) = dcb3903a9364c6377cac36fc955d33a2715dac93d5279ecef2bd93e52d18055c +SIZE (xpi/firefox-i18n-40.0/ko.xpi) = 476891 +SHA256 (xpi/firefox-i18n-40.0/lij.xpi) = 1a1ff8c9b44e1ae04a0d51a5583383580999b2396319fd3c3f2288a12db6fce2 +SIZE (xpi/firefox-i18n-40.0/lij.xpi) = 462237 +SHA256 (xpi/firefox-i18n-40.0/lt.xpi) = 543abc37f38598d2eb39958c734300ce1148fb8b9682bf5aa8d6bb5916f7e379 +SIZE (xpi/firefox-i18n-40.0/lt.xpi) = 502209 +SHA256 (xpi/firefox-i18n-40.0/lv.xpi) = 45151a53dd326c6b33f54c238c18291002460ccb93978dffd69b793efa2cbc85 +SIZE (xpi/firefox-i18n-40.0/lv.xpi) = 482485 +SHA256 (xpi/firefox-i18n-40.0/mai.xpi) = fb5fb7035dcca358d01977daf06a0b216e99ddd127ad606713cd31ad6b3a96dc +SIZE (xpi/firefox-i18n-40.0/mai.xpi) = 527989 +SHA256 (xpi/firefox-i18n-40.0/mk.xpi) = 571cac4d6787bb9e1caeedf82fcb736f8dd884f04ae8ba5ad771ec2f84aef7c0 +SIZE (xpi/firefox-i18n-40.0/mk.xpi) = 542561 +SHA256 (xpi/firefox-i18n-40.0/ml.xpi) = a621fb5bfdd873609a05e8c9c41f3e4b8587294b44ce3dae4737cfcd1dd69789 +SIZE (xpi/firefox-i18n-40.0/ml.xpi) = 540382 +SHA256 (xpi/firefox-i18n-40.0/mr.xpi) = 01ddeebf2c72cd23bacc4fd47138ef1e0032d67696da7fe15e3fb356c84d40d5 +SIZE (xpi/firefox-i18n-40.0/mr.xpi) = 522284 +SHA256 (xpi/firefox-i18n-40.0/ms.xpi) = 92b03a2ca0d763c96ff7b7f0dfe1f28d882343a238d2b4538db03a657293b692 +SIZE (xpi/firefox-i18n-40.0/ms.xpi) = 504518 +SHA256 (xpi/firefox-i18n-40.0/nb-NO.xpi) = 576c14b1001a03f3ab7d58a39b896268be81edd83abffbe393d9ce3ef225181e +SIZE (xpi/firefox-i18n-40.0/nb-NO.xpi) = 458940 +SHA256 (xpi/firefox-i18n-40.0/nl.xpi) = c036ec11b744f07c118709c53988d96bb2ef8129b8d9c1737a9882d789e9c8c9 +SIZE (xpi/firefox-i18n-40.0/nl.xpi) = 458630 +SHA256 (xpi/firefox-i18n-40.0/nn-NO.xpi) = 62b82af6bf1e9af4b13ec6b04e3f508f120c60caa662fc0668b5f0177a0c3684 +SIZE (xpi/firefox-i18n-40.0/nn-NO.xpi) = 453067 +SHA256 (xpi/firefox-i18n-40.0/or.xpi) = 5f3b0626feccf7fb7452a205293c21a104a94384ab735a084eb0dc6d3a861db7 +SIZE (xpi/firefox-i18n-40.0/or.xpi) = 539206 +SHA256 (xpi/firefox-i18n-40.0/pa-IN.xpi) = a2cec7e89cc7c4a4008aa4a546166dd3c7e09de104d31e71d85c112d5f7ca650 +SIZE (xpi/firefox-i18n-40.0/pa-IN.xpi) = 509121 +SHA256 (xpi/firefox-i18n-40.0/pl.xpi) = b25358252256a6a91f32b8b6e255e59d3012793549e3ba4bda7a8896c3c35376 +SIZE (xpi/firefox-i18n-40.0/pl.xpi) = 415190 +SHA256 (xpi/firefox-i18n-40.0/pt-BR.xpi) = b556a5dca70d9f8b368ab63b0a8d416a88b5a453bdafc309522e2c5d5e4c3156 +SIZE (xpi/firefox-i18n-40.0/pt-BR.xpi) = 475444 +SHA256 (xpi/firefox-i18n-40.0/pt-PT.xpi) = 9936c7c749f36252179435c8555b8c4249b8f694539f773e4fbd0e920ec55b7b +SIZE (xpi/firefox-i18n-40.0/pt-PT.xpi) = 456034 +SHA256 (xpi/firefox-i18n-40.0/rm.xpi) = cd7f900284b029ecb39d4405bec94652130d1a3b368530375e93d59fafcad18a +SIZE (xpi/firefox-i18n-40.0/rm.xpi) = 461465 +SHA256 (xpi/firefox-i18n-40.0/ro.xpi) = fb32a84eae34c040d295b0bc935f8804e03bff7c74a9b5619fb19f72230f49a7 +SIZE (xpi/firefox-i18n-40.0/ro.xpi) = 509715 +SHA256 (xpi/firefox-i18n-40.0/ru.xpi) = bde2daf623054fb3d780fcf702754aaa5a93ecb73e8ea11bca1dbdd6e3cf5ff1 +SIZE (xpi/firefox-i18n-40.0/ru.xpi) = 425656 +SHA256 (xpi/firefox-i18n-40.0/si.xpi) = 03d266f9758b421d85b12ea37fa7c256b6c16b86d7867ea04093f42ac3bcc68f +SIZE (xpi/firefox-i18n-40.0/si.xpi) = 548767 +SHA256 (xpi/firefox-i18n-40.0/sk.xpi) = 4005c70a7fa251b35068fc489676eaa72daef195ec37690bb0ae3f862e70719a +SIZE (xpi/firefox-i18n-40.0/sk.xpi) = 485119 +SHA256 (xpi/firefox-i18n-40.0/sl.xpi) = f82b26ef4f77c6b7ac2fb6f540eac48282c591908b174d5efefd1926df37ebff +SIZE (xpi/firefox-i18n-40.0/sl.xpi) = 457939 +SHA256 (xpi/firefox-i18n-40.0/son.xpi) = e6c1c250b4e28c9d6cfeff9289f3a54cf4b7948dc109f70566478bb8912b3733 +SIZE (xpi/firefox-i18n-40.0/son.xpi) = 465947 +SHA256 (xpi/firefox-i18n-40.0/sq.xpi) = 173a8bebd0ee5171eb78499db0d3c16b71670eb71121070186baa7e39c266c12 +SIZE (xpi/firefox-i18n-40.0/sq.xpi) = 501444 +SHA256 (xpi/firefox-i18n-40.0/sr.xpi) = e4d37920e3533eae7ada50c3ec61751c5f5c66502a2cfece58e8e8d13bdca6f0 +SIZE (xpi/firefox-i18n-40.0/sr.xpi) = 494735 +SHA256 (xpi/firefox-i18n-40.0/sv-SE.xpi) = e29c4b7e2eb91ffdd5ccc45b12262ea3c3f3d1d37029db07591e6f05207c60c0 +SIZE (xpi/firefox-i18n-40.0/sv-SE.xpi) = 467790 +SHA256 (xpi/firefox-i18n-40.0/ta.xpi) = 95288f552337949c2f1c77bb0a85c251e3f79acd46ce0b9c24f7b34200cccda5 +SIZE (xpi/firefox-i18n-40.0/ta.xpi) = 521799 +SHA256 (xpi/firefox-i18n-40.0/te.xpi) = 2c4b6a1bceef86db1648c41542f6c889f7a71c8590ab72019aaab5f45f3ef5a6 +SIZE (xpi/firefox-i18n-40.0/te.xpi) = 540973 +SHA256 (xpi/firefox-i18n-40.0/th.xpi) = 7a557c263fe642d0a4587b4ecd4bb0f03fa44ed3b3710d1d0a60551138c61764 +SIZE (xpi/firefox-i18n-40.0/th.xpi) = 550262 +SHA256 (xpi/firefox-i18n-40.0/tr.xpi) = 86775c5eaaabdf8a5cbe05ad7da205eabc84f5f12ad462c824bf68fa172bacb6 +SIZE (xpi/firefox-i18n-40.0/tr.xpi) = 496252 +SHA256 (xpi/firefox-i18n-40.0/uk.xpi) = 630737a2587417d71cf131dfc4545859e51e99573c99aebf9af39385240c5185 +SIZE (xpi/firefox-i18n-40.0/uk.xpi) = 511143 +SHA256 (xpi/firefox-i18n-40.0/vi.xpi) = b49d38eba8b33d393c1ddc55789ce5f519214003f82bd42b3e0de736d28411bb +SIZE (xpi/firefox-i18n-40.0/vi.xpi) = 481058 +SHA256 (xpi/firefox-i18n-40.0/xh.xpi) = 79ea2a29f890d7b702b21618e7fad17163e887c6fdb449d38a6926218b2993fa +SIZE (xpi/firefox-i18n-40.0/xh.xpi) = 461037 +SHA256 (xpi/firefox-i18n-40.0/zh-CN.xpi) = 95906a6de0651b8c09b000df1a643ea0cd056bf69599ff6a022603ea5fb61d4d +SIZE (xpi/firefox-i18n-40.0/zh-CN.xpi) = 504407 +SHA256 (xpi/firefox-i18n-40.0/zh-TW.xpi) = c8a93b71e583a6736d7a7e57d0f468c805b8852b6a12253b951c21336bfceb1b +SIZE (xpi/firefox-i18n-40.0/zh-TW.xpi) = 491274 Index: head/www/libxul/Makefile =================================================================== --- head/www/libxul/Makefile (revision 393689) +++ head/www/libxul/Makefile (revision 393690) @@ -1,98 +1,98 @@ # Created by: Michael Johnson # $FreeBSD$ PORTNAME= libxul -DISTVERSION= 38.1.0 +DISTVERSION= 38.2.0 CATEGORIES?= www devel MASTER_SITES= MOZILLA/firefox/releases/${DISTVERSION}esr/source \ - MOZILLA/firefox/candidates/${DISTVERSION}esr-candidates/build1/source + MOZILLA/firefox/candidates/${DISTVERSION}esr-candidates/build2/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.8:${PORTSDIR}/devel/nspr \ nss>=3.19.2:${PORTSDIR}/security/nss \ libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \ cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \ soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \ harfbuzz>=0.9.34:${PORTSDIR}/print/harfbuzz \ graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \ libvorbis>=1.3.5:${PORTSDIR}/audio/libvorbis \ libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \ sqlite3>=3.8.9:${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 # opus>=1.1:${PORTSDIR}/audio/opus \ LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l WRKSRC= ${WRKDIR}/mozilla-esr38 CONFLICTS_INSTALL= libxul-1.9.* USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl USES= dos2unix pathfix tar:bzip2 DOS2UNIX_FILES= media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp MAKE_ENV= SKIP_GRE_REGISTRATION=1 mozappdir=${PREFIX}/lib/${MOZILLA} LDFLAGS+= -Wl,-rpath,${PREFIX}/lib/${MOZ_RPATH} USE_LDCONFIG= ${PREFIX}/lib/${MOZILLA} MOZ_OPTIONS?= --enable-application=xulrunner USE_GECKO= gecko CPE_PRODUCT= firefox_esr MOZILLA_EXEC_NAME=xulrunner USE_MOZILLA= -opus MOZILLA_PLIST_DIRS= bin include lib share/idl libdata MOZ_PKGCONFIG_FILES= libxul-embedding libxul mozilla-js \ mozilla-plugin OPTIONS_DEFAULT= GTK2 OPTIONS_SINGLE+= TOOLKIT OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3 .include "${.CURDIR}/../../www/firefox/Makefile.options" .include .if ${USE_MOZILLA:M-nss} MOZ_PKGCONFIG_FILES+= mozilla-nss .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 .if ${PORT_OPTIONS:MGTK3} BUILD_DEPENDS+= gtk3>=3.14.6:${PORTSDIR}/x11-toolkits/gtk30 .endif .if ${PORT_OPTIONS:MTEST} BROKEN= stage-package fails with ValueError: no path specified .endif post-patch: @${REINPLACE_CMD} -e '/MOZPNG/s/=[0-9]*/=10511/' \ ${WRKSRC}/configure.in @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/xulrunner/stub/nsXULStub.cpp pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${WRKSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) post-build: @${REINPLACE_CMD} -e "s|\(Libs:.*\)\($$\)|\1 -Wl,-rpath,${PREFIX}/lib/${MOZ_RPATH}\2| ; \ s|%sdkdir%|%sdkdir%/sdk|g ; \ s|%%MOZ_LIBDIR%%|${PREFIX}/lib/${MOZILLA}|g" \ ${WRKSRC}/xulrunner/installer/*.pc.in || ${TRUE} .include Index: head/www/libxul/distinfo =================================================================== --- head/www/libxul/distinfo (revision 393689) +++ head/www/libxul/distinfo (revision 393690) @@ -1,2 +1,2 @@ -SHA256 (firefox-38.1.0esr.source.tar.bz2) = 85eb5f916aa47a92cf50803dcb35e7fa3a9da29abf5fc91cbb6a70bbbc2618ff -SIZE (firefox-38.1.0esr.source.tar.bz2) = 180392775 +SHA256 (firefox-38.2.0esr.source.tar.bz2) = 55867254f21cfc610aa63c8aa0d7156df6eb4c0cb37ebac30259e4890170aacb +SIZE (firefox-38.2.0esr.source.tar.bz2) = 180722192 Index: head/www/linux-firefox/Makefile =================================================================== --- head/www/linux-firefox/Makefile (revision 393689) +++ head/www/linux-firefox/Makefile (revision 393690) @@ -1,22 +1,22 @@ # Created by: voisine # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 39.0 +DISTVERSION= 40.0 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build6/linux-i686/en-US + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build4/linux-i686/en-US MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla USES= tar:bzip2 WANT_GTK218= yes PREFS_FILE= ${WRKSRC}/${APP_SUBDIR}defaults/preferences/browser-prefs.js APP_SUBDIR= browser/ # plugins, extensions .include "${.CURDIR}/../linux-seamonkey/Makefile.common" .include Index: head/www/linux-firefox/distinfo =================================================================== --- head/www/linux-firefox/distinfo (revision 393689) +++ head/www/linux-firefox/distinfo (revision 393690) @@ -1,6 +1,6 @@ -SHA256 (firefox-39.0.tar.bz2) = b612185276ec1e3f60165ee274854c0244611b27076a29ca899d6e84a93e0983 -SIZE (firefox-39.0.tar.bz2) = 48620957 +SHA256 (firefox-40.0.tar.bz2) = ee2c2bb0bf690807644095f7b220506aa2895ec00a7a9133c3da7cf4a8c63b55 +SIZE (firefox-40.0.tar.bz2) = 49228898 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 SIZE (gtk2-2.18.3-19.fc12.i686.rpm) = 3198708 Index: head/www/linux-firefox/pkg-plist =================================================================== --- head/www/linux-firefox/pkg-plist (revision 393689) +++ head/www/linux-firefox/pkg-plist (revision 393690) @@ -1,75 +1,68 @@ bin/%%APP_NAME%% share/applications/%%APP_NAME%%.desktop lib/%%APP_NAME%%/Throbber-small.gif lib/%%APP_NAME%%/application.ini lib/%%APP_NAME%%/browser/blocklist.xml lib/%%APP_NAME%%/browser/chrome.manifest lib/%%APP_NAME%%/browser/chrome/icons/default/default16.png lib/%%APP_NAME%%/browser/chrome/icons/default/default32.png lib/%%APP_NAME%%/browser/chrome/icons/default/default48.png lib/%%APP_NAME%%/browser/components/components.manifest lib/%%APP_NAME%%/browser/components/libbrowsercomps.so lib/%%APP_NAME%%/browser/crashreporter-override.ini lib/%%APP_NAME%%/browser/defaults/preferences/browser-prefs.js +lib/%%APP_NAME%%/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/chrome.manifest lib/%%APP_NAME%%/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/icon.png lib/%%APP_NAME%%/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf lib/%%APP_NAME%%/browser/icons/mozicon128.png lib/%%APP_NAME%%/browser/omni.ja lib/%%APP_NAME%%/browser/plugins -lib/%%APP_NAME%%/browser/searchplugins/amazondotcom.xml -lib/%%APP_NAME%%/browser/searchplugins/bing.xml -lib/%%APP_NAME%%/browser/searchplugins/ddg.xml -lib/%%APP_NAME%%/browser/searchplugins/eBay.xml -lib/%%APP_NAME%%/browser/searchplugins/google.xml -lib/%%APP_NAME%%/browser/searchplugins/twitter.xml -lib/%%APP_NAME%%/browser/searchplugins/wikipedia.xml -lib/%%APP_NAME%%/browser/searchplugins/yahoo.xml lib/%%APP_NAME%%/chrome.manifest lib/%%APP_NAME%%/components/components.manifest lib/%%APP_NAME%%/components/libdbusservice.so lib/%%APP_NAME%%/components/libmozgnome.so lib/%%APP_NAME%%/crashreporter lib/%%APP_NAME%%/crashreporter.ini lib/%%APP_NAME%%/defaults/pref/channel-prefs.js lib/%%APP_NAME%%/dependentlibs.list lib/%%APP_NAME%%/dictionaries/en-US.aff lib/%%APP_NAME%%/dictionaries/en-US.dic lib/%%APP_NAME%%/firefox lib/%%APP_NAME%%/firefox-bin lib/%%APP_NAME%%/gmp-clearkey/0.1/clearkey.info lib/%%APP_NAME%%/gmp-clearkey/0.1/libclearkey.so lib/%%APP_NAME%%/icons/updater.png lib/%%APP_NAME%%/libfreebl3.chk lib/%%APP_NAME%%/libfreebl3.so %%GTK218%%lib/%%APP_NAME%%/libgdk-x11-2.0.so.0 %%GTK218%%lib/%%APP_NAME%%/libgio-2.0.so.0 %%GTK218%%lib/%%APP_NAME%%/libglib-2.0.so.0 %%GTK218%%lib/%%APP_NAME%%/libgtk-x11-2.0.so.0 lib/%%APP_NAME%%/libmozsqlite3.so lib/%%APP_NAME%%/libnspr4.so lib/%%APP_NAME%%/libnss3.so lib/%%APP_NAME%%/libnssckbi.so lib/%%APP_NAME%%/libnssdbm3.chk lib/%%APP_NAME%%/libnssdbm3.so lib/%%APP_NAME%%/libnssutil3.so lib/%%APP_NAME%%/libplc4.so lib/%%APP_NAME%%/libplds4.so lib/%%APP_NAME%%/libsmime3.so lib/%%APP_NAME%%/libsoftokn3.chk lib/%%APP_NAME%%/libsoftokn3.so lib/%%APP_NAME%%/libssl3.so lib/%%APP_NAME%%/libxul.so lib/%%APP_NAME%%/omni.ja lib/%%APP_NAME%%/platform.ini lib/%%APP_NAME%%/plugin-container lib/%%APP_NAME%%/precomplete lib/%%APP_NAME%%/removed-files lib/%%APP_NAME%%/run-mozilla.sh lib/%%APP_NAME%%/update-settings.ini lib/%%APP_NAME%%/updater lib/%%APP_NAME%%/updater.ini lib/%%APP_NAME%%/webapprt-stub 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