Index: branches/2016Q2/Mk/Uses/gecko.mk =================================================================== --- branches/2016Q2/Mk/Uses/gecko.mk (revision 413771) +++ branches/2016Q2/Mk/Uses/gecko.mk (revision 413772) @@ -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:www/libxul -RUN_DEPENDS+= libxul>=38:www/libxul +BUILD_DEPENDS+= libxul>=45:www/libxul +RUN_DEPENDS+= libxul>=45:www/libxul .elif ${gecko_ARGS:Mfirefox} -_GECKO_DEFAULT_VERSION= 38 -_GECKO_VERSIONS= 38 45 +_GECKO_DEFAULT_VERSION= 45 +_GECKO_VERSIONS= 45 46 _GECKO_TYPE= firefox # Dependence lines for different Firefox versions -38_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox-esr -45_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox +45_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox-esr +46_DEPENDS= ${LOCALBASE}/lib/firefox/firefox: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= 39 _GECKO_VERSIONS= 39 _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 39_DEPENDS= ${LOCALBASE}/lib/seamonkey/seamonkey: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: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: branches/2016Q2/www/firefox/Makefile =================================================================== --- branches/2016Q2/www/firefox/Makefile (revision 413771) +++ branches/2016Q2/www/firefox/Makefile (revision 413772) @@ -1,88 +1,88 @@ # Created by: Alan Eldridge # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 45.0.1 +DISTVERSION= 46.0 DISTVERSIONSUFFIX=.source -PORTREVISION= 3 +PORTREVISION= 1 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build2/source + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build5/source MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla BUILD_DEPENDS= nspr>=4.12:devel/nspr \ - nss>=3.21.1:security/nss \ + nss>=3.22.3:security/nss \ libevent2>=2.0.21_2:devel/libevent2 \ soundtouch>=1.9.0:audio/soundtouch \ - harfbuzz>=1.1.0:print/harfbuzz \ - graphite2>=1.3.6:graphics/graphite2 \ + harfbuzz>=1.1.3:print/harfbuzz \ + graphite2>=1.3.7:graphics/graphite2 \ png>=1.6.19:graphics/png \ libvorbis>=1.3.5,3:audio/libvorbis \ libvpx>=1.5.0:multimedia/libvpx \ - sqlite3>=3.9.1:databases/sqlite3 \ + sqlite3>=3.10.2:databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3 \ v4l_compat>0:multimedia/v4l_compat \ autoconf-2.13:devel/autoconf213 \ yasm:devel/yasm \ zip:archivers/zip \ unzip:archivers/unzip LIB_DEPENDS= libv4l2.so:multimedia/libv4l USE_GECKO= gecko CONFLICTS_INSTALL= firefox-esr-45.* firefox-esr-3[18].* firefox-esr-24.* MOZ_PKGCONFIG_FILES= # empty USE_MOZILLA= # empty MOZILLA_NAME= Firefox USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl USES= tar:xz 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_EXCLUDE= GSTREAMER LOGGING OPTIONS_DEFINE= RUST OPTIONS_DEFAULT= BUNDLED_CAIRO GTK3 ${OPTIONS_DEFAULT_${OPSYS}_${OSREL:R}_${ARCH}} # XXX lang/rust currently builds only on these platforms OPTIONS_DEFAULT_DragonFly_4_x86_64= RUST OPTIONS_DEFAULT_FreeBSD_10_amd64= RUST OPTIONS_DEFAULT_FreeBSD_10_i386= RUST OPTIONS_DEFAULT_FreeBSD_11_amd64= RUST OPTIONS_DEFAULT_FreeBSD_11_i386= RUST OPTIONS_SINGLE+= TOOLKIT OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3 .include "${.CURDIR}/../../www/firefox/Makefile.options" WRKSRC:= ${WRKDIR}/${PORTNAME}-${DISTVERSION} 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 '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: branches/2016Q2/www/firefox/distinfo =================================================================== --- branches/2016Q2/www/firefox/distinfo (revision 413771) +++ branches/2016Q2/www/firefox/distinfo (revision 413772) @@ -1,2 +1,2 @@ -SHA256 (firefox-45.0.1.source.tar.xz) = d1814ac6d8cd687696bd0d98da3bb525f6df11fe655e0d668742b21fca57d9c8 -SIZE (firefox-45.0.1.source.tar.xz) = 184009616 +SHA256 (firefox-46.0.source.tar.xz) = b35aa05162362d73cd308066adca207f7aa40ceae10931fa4819371df6c4f8bf +SIZE (firefox-46.0.source.tar.xz) = 187338968 Index: branches/2016Q2/www/firefox/files/patch-bug1257947 =================================================================== --- branches/2016Q2/www/firefox/files/patch-bug1257947 (revision 413771) +++ branches/2016Q2/www/firefox/files/patch-bug1257947 (nonexistent) @@ -1,14 +0,0 @@ -# Fix Hello icon (bug 1257947) - ---- browser/extensions/loop/jar.mn -+++ browser/extensions/loop/jar.mn -@@ -4,7 +4,7 @@ - - [.] chrome.jar: - % content loop %content/ contentaccessible=yes --% skin loop classic/1.0 %skin/linux/ os=Linux -+% skin loop classic/1.0 %skin/linux/ - % skin loop classic/1.0 %skin/osx/ os=Darwin - % skin loop classic/1.0 %skin/windows/ os=WINNT - % skin loop-shared classic/1.0 %skin/shared/ - Property changes on: branches/2016Q2/www/firefox/files/patch-bug1257947 ___________________________________________________________________ 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: branches/2016Q2/www/firefox/files/patch-bug1021761 =================================================================== --- branches/2016Q2/www/firefox/files/patch-bug1021761 (revision 413771) +++ branches/2016Q2/www/firefox/files/patch-bug1021761 (revision 413772) @@ -1,1102 +1,1110 @@ 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) ++Linux|SunOS|DragonFly|FreeBSD|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, +@@ -859,7 +965,7 @@ alsa_stream_init(cubeb * ctx, cubeb_stre 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); + stm->params.channels, stm->params.rate, 1, + latency * 1000); if (r < 0) { - alsa_stream_destroy(stm); +@@ -867,15 +973,15 @@ alsa_stream_init(cubeb * ctx, cubeb_stre 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); +- r = snd_pcm_get_params(stm->pcm, &stm->buffer_size, &period_size); ++ r = WRAP(snd_pcm_get_params)(stm->pcm, &stm->buffer_size, &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, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); + r = WRAP(snd_pcm_open)(&pcm, CUBEB_ALSA_PCM_NAME, 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 @@ +@@ -0,0 +1,412 @@ +/* + * 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 + +#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); ++ got = stream->data_callback(stream, stream->user_ptr, NULL, 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, ++ cubeb_devid input_device, ++ cubeb_stream_params * input_stream_params, ++ cubeb_devid output_device, ++ cubeb_stream_params * output_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; + ++ assert(!input_stream_params && "not supported."); ++ if (input_device || output_device) { ++ /* Device selection not yet implemented. */ ++ return CUBEB_ERROR_DEVICE_UNAVAILABLE; ++ } ++ + 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->params = *output_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) { ++ SET(SNDCTL_DSP_CHANNELS, output_stream_params->channels); ++ SET(SNDCTL_DSP_SPEED, output_stream_params->rate); ++ switch (output_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/common.build media/webrtc/signaling/test/common.build index 991f03f..3d99eb5 100644 --- 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: branches/2016Q2/www/firefox/files/patch-bug1239550 =================================================================== --- branches/2016Q2/www/firefox/files/patch-bug1239550 (nonexistent) +++ branches/2016Q2/www/firefox/files/patch-bug1239550 (revision 413772) @@ -0,0 +1,144 @@ +diff --git a/media/ffvpx/config.asm b/media/ffvpx/config.asm +--- media/ffvpx/config.asm ++++ media/ffvpx/config.asm +@@ -192,7 +192,6 @@ + %define HAVE_MACH_MACH_TIME_H 0 + %define HAVE_MACHINE_IOCTL_BT848_H 0 + %define HAVE_MACHINE_IOCTL_METEOR_H 0 +-%define HAVE_MALLOC_H 1 + %define HAVE_OPENJPEG_1_5_OPENJPEG_H 0 + %define HAVE_OPENGL_GL3_H 0 + %define HAVE_POLL_H 1 +@@ -268,18 +267,15 @@ + %define HAVE_ISATTY 1 + %define HAVE_JACK_PORT_GET_LATENCY_RANGE 0 + %define HAVE_KBHIT 0 +-%define HAVE_LOCALTIME_R 1 + %define HAVE_LSTAT 1 + %define HAVE_LZO1X_999_COMPRESS 0 + %define HAVE_MACH_ABSOLUTE_TIME 0 + %define HAVE_MAPVIEWOFFILE 0 +-%define HAVE_MEMALIGN 1 + %define HAVE_MKSTEMP 1 + %define HAVE_MMAP 1 + %define HAVE_MPROTECT 1 + %define HAVE_NANOSLEEP 1 + %define HAVE_PEEKNAMEDPIPE 0 +-%define HAVE_POSIX_MEMALIGN 1 + %define HAVE_PTHREAD_CANCEL 1 + %define HAVE_SCHED_GETAFFINITY 1 + %define HAVE_SETCONSOLETEXTATTRIBUTE 0 +diff --git a/media/ffvpx/config_unix32.h b/media/ffvpx/config_unix32.h +--- media/ffvpx/config_unix32.h ++++ media/ffvpx/config_unix32.h +@@ -216,7 +216,6 @@ + #define HAVE_MACH_MACH_TIME_H 0 + #define HAVE_MACHINE_IOCTL_BT848_H 0 + #define HAVE_MACHINE_IOCTL_METEOR_H 0 +-#define HAVE_MALLOC_H 1 + #define HAVE_OPENJPEG_2_1_OPENJPEG_H 0 + #define HAVE_OPENJPEG_2_0_OPENJPEG_H 0 + #define HAVE_OPENJPEG_1_5_OPENJPEG_H 0 +@@ -269,7 +268,6 @@ + #define HAVE_TRUNCF 1 + #define HAVE_ACCESS 1 + #define HAVE_ALIGNED_MALLOC 0 +-#define HAVE_ARC4RANDOM 0 + #define HAVE_CLOCK_GETTIME 1 + #define HAVE_CLOSESOCKET 0 + #define HAVE_COMMANDLINETOARGVW 0 +@@ -295,18 +293,15 @@ + #define HAVE_ISATTY 1 + #define HAVE_JACK_PORT_GET_LATENCY_RANGE 0 + #define HAVE_KBHIT 0 +-#define HAVE_LOCALTIME_R 1 + #define HAVE_LSTAT 1 + #define HAVE_LZO1X_999_COMPRESS 0 + #define HAVE_MACH_ABSOLUTE_TIME 0 + #define HAVE_MAPVIEWOFFILE 0 +-#define HAVE_MEMALIGN 0 + #define HAVE_MKSTEMP 1 + #define HAVE_MMAP 1 + #define HAVE_MPROTECT 1 + #define HAVE_NANOSLEEP 1 + #define HAVE_PEEKNAMEDPIPE 0 +-#define HAVE_POSIX_MEMALIGN 0 + #define HAVE_PTHREAD_CANCEL 1 + #define HAVE_SCHED_GETAFFINITY 1 + #define HAVE_SETCONSOLETEXTATTRIBUTE 0 +diff --git a/media/ffvpx/config_unix64.asm b/media/ffvpx/config_unix64.asm +--- media/ffvpx/config_unix64.asm ++++ media/ffvpx/config_unix64.asm +@@ -200,7 +200,6 @@ + %define HAVE_MACH_MACH_TIME_H 0 + %define HAVE_MACHINE_IOCTL_BT848_H 0 + %define HAVE_MACHINE_IOCTL_METEOR_H 0 +-%define HAVE_MALLOC_H 1 + %define HAVE_OPENJPEG_2_1_OPENJPEG_H 0 + %define HAVE_OPENJPEG_2_0_OPENJPEG_H 0 + %define HAVE_OPENJPEG_1_5_OPENJPEG_H 0 +@@ -253,7 +252,6 @@ + %define HAVE_TRUNCF 1 + %define HAVE_ACCESS 1 + %define HAVE_ALIGNED_MALLOC 0 +-%define HAVE_ARC4RANDOM 0 + %define HAVE_CLOCK_GETTIME 1 + %define HAVE_CLOSESOCKET 0 + %define HAVE_COMMANDLINETOARGVW 0 +@@ -279,18 +277,15 @@ + %define HAVE_ISATTY 1 + %define HAVE_JACK_PORT_GET_LATENCY_RANGE 0 + %define HAVE_KBHIT 0 +-%define HAVE_LOCALTIME_R 1 + %define HAVE_LSTAT 1 + %define HAVE_LZO1X_999_COMPRESS 0 + %define HAVE_MACH_ABSOLUTE_TIME 0 + %define HAVE_MAPVIEWOFFILE 0 +-%define HAVE_MEMALIGN 1 + %define HAVE_MKSTEMP 1 + %define HAVE_MMAP 1 + %define HAVE_MPROTECT 1 + %define HAVE_NANOSLEEP 1 + %define HAVE_PEEKNAMEDPIPE 0 +-%define HAVE_POSIX_MEMALIGN 1 + %define HAVE_PTHREAD_CANCEL 1 + %define HAVE_SCHED_GETAFFINITY 1 + %define HAVE_SETCONSOLETEXTATTRIBUTE 0 +diff --git a/media/ffvpx/config_unix64.h b/media/ffvpx/config_unix64.h +--- media/ffvpx/config_unix64.h ++++ media/ffvpx/config_unix64.h +@@ -216,7 +216,6 @@ + #define HAVE_MACH_MACH_TIME_H 0 + #define HAVE_MACHINE_IOCTL_BT848_H 0 + #define HAVE_MACHINE_IOCTL_METEOR_H 0 +-#define HAVE_MALLOC_H 1 + #define HAVE_OPENJPEG_2_1_OPENJPEG_H 0 + #define HAVE_OPENJPEG_2_0_OPENJPEG_H 0 + #define HAVE_OPENJPEG_1_5_OPENJPEG_H 0 +@@ -269,7 +268,6 @@ + #define HAVE_TRUNCF 1 + #define HAVE_ACCESS 1 + #define HAVE_ALIGNED_MALLOC 0 +-#define HAVE_ARC4RANDOM 0 + #define HAVE_CLOCK_GETTIME 1 + #define HAVE_CLOSESOCKET 0 + #define HAVE_COMMANDLINETOARGVW 0 +@@ -295,18 +293,15 @@ + #define HAVE_ISATTY 1 + #define HAVE_JACK_PORT_GET_LATENCY_RANGE 0 + #define HAVE_KBHIT 0 +-#define HAVE_LOCALTIME_R 1 + #define HAVE_LSTAT 1 + #define HAVE_LZO1X_999_COMPRESS 0 + #define HAVE_MACH_ABSOLUTE_TIME 0 + #define HAVE_MAPVIEWOFFILE 0 +-#define HAVE_MEMALIGN 1 + #define HAVE_MKSTEMP 1 + #define HAVE_MMAP 1 + #define HAVE_MPROTECT 1 + #define HAVE_NANOSLEEP 1 + #define HAVE_PEEKNAMEDPIPE 0 +-#define HAVE_POSIX_MEMALIGN 1 + #define HAVE_PTHREAD_CANCEL 1 + #define HAVE_SCHED_GETAFFINITY 1 + #define HAVE_SETCONSOLETEXTATTRIBUTE 0 Property changes on: branches/2016Q2/www/firefox/files/patch-bug1239550 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2016Q2/www/firefox/files/patch-bug1256136 =================================================================== --- branches/2016Q2/www/firefox/files/patch-bug1256136 (nonexistent) +++ branches/2016Q2/www/firefox/files/patch-bug1256136 (revision 413772) @@ -0,0 +1,21 @@ +diff --git xpcom/glue/nsISupportsImpl.h xpcom/glue/nsISupportsImpl.h +index 9102102..e1f34c0 100644 +--- xpcom/glue/nsISupportsImpl.h ++++ xpcom/glue/nsISupportsImpl.h +@@ -32,11 +32,11 @@ + #include "mozilla/TypeTraits.h" + + #if defined(__clang__) +- // bug 1028428 shows that at least in FreeBSD 10.0 with Clang 3.4 and libc++ 3.4, +- // std::is_destructible is buggy in that it returns false when it should return true +- // on ipc::SharedMemory. On the other hand, all Clang versions currently in use +- // seem to handle the fallback just fine. +-# define MOZ_CAN_USE_IS_DESTRUCTIBLE_FALLBACK ++# if MOZ_USING_LIBCXX && __has_include() ++# define MOZ_HAVE_STD_IS_DESTRUCTIBLE ++# else ++# define MOZ_CAN_USE_IS_DESTRUCTIBLE_FALLBACK ++# endif + #elif defined(__GNUC__) + // GCC 4.7 is has buggy std::is_destructible + # if MOZ_USING_LIBSTDCXX && MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) Property changes on: branches/2016Q2/www/firefox/files/patch-bug1256136 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2016Q2/www/firefox/files/patch-bug826985 =================================================================== --- branches/2016Q2/www/firefox/files/patch-bug826985 (revision 413771) +++ branches/2016Q2/www/firefox/files/patch-bug826985 (revision 413772) @@ -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 +@@ -629,6 +629,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 + link.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/common.build media/webrtc/signaling/test/common.build index b483cd1..f1dd1f0 100644 --- 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', @@ -75,6 +78,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: branches/2016Q2/www/firefox/files/patch-bug847568 =================================================================== --- branches/2016Q2/www/firefox/files/patch-bug847568 (revision 413771) +++ branches/2016Q2/www/firefox/files/patch-bug847568 (revision 413772) @@ -1,257 +1,257 @@ # 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 @@ -49,6 +49,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 @@ -1344,3 +1344,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 @@ -7989,6 +7989,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 >= 1.1.0) ++ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 1.1.3) +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,3,6) ++ #if !GR2_VERSION_REQUIRE(1,3,7) + #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 @@ -397,6 +397,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 += [ '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 @@ -1,6 +1,7 @@ #!/bin/bash # Script used to update the Graphite2 library in the mozilla source tree +# and bump version for --with-system-graphite2 # This script lives in gfx/graphite2, along with the library source, # but must be run from the top level of the mozilla-central tree. @@ -37,12 +38,16 @@ echo "See" $0 "for update procedure." >> #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/;" {} \; +# chase version for --with-system-graphite2 +perl -p -i -e "s/[0-9]+\,[0-9]+\,[0-9]+/$RELEASE/ and tr/./,/ \ + if /GR2_VERSION_REQUIRE/" configure.in + # summarize what's been touched echo Updated to $RELEASE. echo Here is what changed in the gfx/graphite2 directory: echo -hg stat gfx/graphite2 +hg stat configure.in gfx/graphite2 echo echo If gfx/graphite2/src/files.mk has changed, please make corresponding diff --git gfx/harfbuzz/README-mozilla gfx/harfbuzz/README-mozilla index ca57d16..1ce21fe 100644 --- gfx/harfbuzz/README-mozilla +++ gfx/harfbuzz/README-mozilla @@ -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. + +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 @@ -134,6 +134,9 @@ if CONFIG['CLANG_CXX'] or CONFIG['CLANG_ '-Wno-unused-private-field', ] +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 @@ -752,6 +752,9 @@ if CONFIG['CLANG_CXX'] or CONFIG['CLANG_ '-Wno-unused-private-field', ] +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 @@ -306,7 +306,13 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk LOCAL_INCLUDES += CONFIG['SKIA_INCLUDES'] -DEFINES['GRAPHITE2_STATIC'] = True +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + +if CONFIG['MOZ_NATIVE_GRAPHITE2']: + CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS'] +else: + DEFINES['GRAPHITE2_STATIC'] = True if CONFIG['CLANG_CXX']: # Suppress warnings from Skia header files. index d736943..41a931f 100644 --- intl/unicharutil/util/moz.build +++ intl/unicharutil/util/moz.build @@ -44,4 +44,7 @@ if CONFIG['ENABLE_INTL_API']: LOCAL_INCLUDES += CONFIG['MOZ_ICU_INCLUDES'] USE_LIBS += ['icu'] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + DIST_INSTALL = True diff --git netwerk/dns/moz.build netwerk/dns/moz.build index 0b0717a..2e665c9 100644 --- netwerk/dns/moz.build +++ netwerk/dns/moz.build @@ -66,6 +66,9 @@ 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': LOCAL_INCLUDES += ['%' + '%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 @@ -231,6 +231,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: branches/2016Q2/www/firefox/files/patch-z-bug517422 =================================================================== --- branches/2016Q2/www/firefox/files/patch-z-bug517422 (revision 413771) +++ branches/2016Q2/www/firefox/files/patch-z-bug517422 (revision 413772) @@ -1,444 +1,446 @@ # 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,11 @@ 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_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,16 @@ if CONFIG['MOZ_UPDATER']: +@@ -20,12 +20,21 @@ 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_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,15 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ - if not CONFIG['MOZ_NATIVE_PNG']: - external_dirs += ['media/libpng'] - ++if not CONFIG['MOZ_NATIVE_THEORA']: ++ external_dirs += ['media/libtheora'] ++ +if not CONFIG['MOZ_NATIVE_SOUNDTOUCH']: + external_dirs += ['media/libsoundtouch'] + - external_dirs += [ + if CONFIG['MOZ_WEBM_ENCODER']: + external_dirs += ['media/libmkv'] + +@@ -51,12 +60,9 @@ external_dirs += [ 'media/kiss_fft', 'media/libcubeb', + 'media/libnestegg', - '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 @@ -1364,3 +1363,17 @@ 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 diff --git configure.in configure.in index 87db361..7947626 100644 --- configure.in +++ configure.in -@@ -5223,6 +5223,111 @@ if test "${ac_cv_c_attribute_aligned}" ! +@@ -5401,6 +5401,111 @@ if test -n "$MOZ_OMX_PLUGIN"; then + fi fi - dnl ======================================================== ++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 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 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.9.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 + +if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then + AC_DEFINE(MOZ_NATIVE_SOUNDTOUCH) +fi +AC_SUBST(MOZ_NATIVE_SOUNDTOUCH) + -+dnl ======================================================== - dnl = Disable VP8 decoder support + dnl system libvpx Support dnl ======================================================== - MOZ_ARG_DISABLE_BOOL(webm, + MOZ_ARG_WITH_BOOL(system-libvpx, diff --git dom/media/AudioStream.cpp dom/media/AudioStream.cpp index 2127256..1ec09fe 100644 --- dom/media/AudioStream.cpp +++ dom/media/AudioStream.cpp @@ -129,7 +129,9 @@ AudioStream::AudioStream() , mOutChannels(0) , mWritten(0) , mAudioClock(this) +#ifndef MOZ_NATIVE_SOUNDTOUCH , mTimeStretcher(nullptr) +#endif , mDumpFile(nullptr) , mBytesPerFrame(0) , mState(INITIALIZED) @@ -152,9 +154,11 @@ AudioStream::~AudioStream() if (mDumpFile) { fclose(mDumpFile); } +#ifndef MOZ_NATIVE_SOUNDTOUCH if (mTimeStretcher) { soundtouch::destroySoundTouchObj(mTimeStretcher); } +#endif } size_t @@ -177,7 +181,11 @@ nsresult AudioStream::EnsureTimeStretcherInitializedUnlocked() { mMonitor.AssertCurrentThreadOwns(); if (!mTimeStretcher) { +#ifdef MOZ_NATIVE_SOUNDTOUCH + mTimeStretcher = new soundtouch::SoundTouch(); +#else mTimeStretcher = soundtouch::createSoundTouchObj(); +#endif mTimeStretcher->setSampleRate(mInRate); mTimeStretcher->setChannels(mOutChannels); mTimeStretcher->setPitch(1.0); diff --git dom/media/AudioStream.h dom/media/AudioStream.h index a552e3e..02b80b1 100644 --- dom/media/AudioStream.h +++ dom/media/AudioStream.h @@ -15,7 +15,11 @@ #include "mozilla/RefPtr.h" #include "mozilla/UniquePtr.h" #include "CubebUtils.h" +#ifdef MOZ_NATIVE_SOUNDTOUCH +#include "soundtouch/SoundTouch.h" +#else #include "soundtouch/SoundTouchFactory.h" +#endif namespace mozilla { @@ -277,7 +277,11 @@ private: // Number of frames written to the buffers. int64_t mWritten; AudioClock mAudioClock; +#ifdef MOZ_NATIVE_SOUNDTOUCH + nsAutoPtr mTimeStretcher; +#else soundtouch::SoundTouch* mTimeStretcher; +#endif // Stream start time for stream open delay telemetry. TimeStamp mStartTime; 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,18 @@ if CONFIG['ANDROID_VERSION'] > '15': +@@ -300,6 +300,21 @@ if CONFIG['MOZ_WEBRTC']: - CFLAGS += CONFIG['GSTREAMER_CFLAGS'] - CXXFLAGS += CONFIG['GSTREAMER_CFLAGS'] -+ + DEFINES['MOZILLA_INTERNAL_API'] = True + +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_SOUNDTOUCH']: + CXXFLAGS += CONFIG['MOZ_SOUNDTOUCH_CFLAGS'] ++ + if CONFIG['OS_TARGET'] == 'WINNT': + DEFINES['WEBRTC_WIN'] = True + else: 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/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/libsoundtouch/src/soundtouch_perms.h media/libsoundtouch/src/soundtouch_perms.h index 0af2fe6..d80c145 100644 --- media/libsoundtouch/src/soundtouch_perms.h +++ media/libsoundtouch/src/soundtouch_perms.h @@ -12,7 +12,9 @@ #pragma GCC visibility push(default) #include "SoundTouch.h" +#ifndef MOZ_NATIVE_SOUNDTOUCH #include "SoundTouchFactory.h" +#endif #pragma GCC visibility pop #endif // MOZILLA_SOUNDTOUCH_PERMS_H 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 @@ -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 toolkit/library/moz.build toolkit/library/moz.build index d42137a..695e75a8 100644 --- toolkit/library/moz.build +++ toolkit/library/moz.build @@ -178,6 +178,21 @@ 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_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: branches/2016Q2/www/firefox-esr/Makefile =================================================================== --- branches/2016Q2/www/firefox-esr/Makefile (revision 413771) +++ branches/2016Q2/www/firefox-esr/Makefile (revision 413772) @@ -1,82 +1,82 @@ # Created by: Alan Eldridge # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 38.7.1 +DISTVERSION= 45.1.0 DISTVERSIONSUFFIX=esr.source -PORTREVISION= 1 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}esr/source \ MOZILLA/${PORTNAME}/candidates/${DISTVERSION}esr-candidates/build1/source PKGNAMESUFFIX= -esr MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla -BUILD_DEPENDS= nspr>=4.10.10:devel/nspr \ - nss>=3.19.2.1:security/nss \ +BUILD_DEPENDS= nspr>=4.12:devel/nspr \ + nss>=3.21.1:security/nss \ libevent2>=2.0.21_2:devel/libevent2 \ - soundtouch>=1.8.0:audio/soundtouch \ - harfbuzz>=0.9.34:print/harfbuzz \ - graphite2>=1.2.4:graphics/graphite2 \ + soundtouch>=1.9.0:audio/soundtouch \ + harfbuzz>=1.1.0:print/harfbuzz \ + graphite2>=1.3.6:graphics/graphite2 \ + png>=1.6.19:graphics/png \ libvorbis>=1.3.5,3:audio/libvorbis \ - libvpx>=1.3.0:multimedia/libvpx \ - sqlite3>=3.8.9:databases/sqlite3 \ + libvpx>=1.5.0:multimedia/libvpx \ + sqlite3>=3.9.1:databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3 \ v4l_compat>0:multimedia/v4l_compat \ autoconf-2.13:devel/autoconf213 \ + yasm:devel/yasm \ zip:archivers/zip \ unzip:archivers/unzip -# opus>=1.1:audio/opus \ LIB_DEPENDS= libv4l2.so:multimedia/libv4l USE_GECKO= gecko CPE_PRODUCT= ${PORTNAME}_esr -CONFLICTS_INSTALL= firefox-4[0-46-9].* firefox-3[02-9].* firefox-2[0-35-9].* +CONFLICTS_INSTALL= firefox-[0-9]* MOZ_PKGCONFIG_FILES= # empty -USE_MOZILLA= -opus +USE_MOZILLA= # empty MOZILLA_NAME= Firefox USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl -USES= tar:bzip2 +USES= tar:xz 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_EXCLUDE= GSTREAMER LOGGING +OPTIONS_DEFINE= RUST +OPTIONS_DEFAULT= BUNDLED_CAIRO GTK2 OPTIONS_SINGLE+= TOOLKIT OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3 .include "${.CURDIR}/../../www/firefox/Makefile.options" -WRKSRC:= ${WRKDIR}/mozilla-esr38 +WRKSRC:= ${WRKDIR}/${PORTNAME}-${DISTVERSION}esr 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: branches/2016Q2/www/firefox-esr/distinfo =================================================================== --- branches/2016Q2/www/firefox-esr/distinfo (revision 413771) +++ branches/2016Q2/www/firefox-esr/distinfo (revision 413772) @@ -1,2 +1,2 @@ -SHA256 (firefox-38.7.1esr.source.tar.bz2) = d0fce46a948610c8231ceaad5da5542bd57af363ff2341d77f2f00955f888f65 -SIZE (firefox-38.7.1esr.source.tar.bz2) = 181300248 +SHA256 (firefox-45.1.0esr.source.tar.xz) = 8bdc4a0f6d0ca4f28e888ca0044ba735ddc78302820b5ffcc25cd65064ff40a1 +SIZE (firefox-45.1.0esr.source.tar.xz) = 184373664 Index: branches/2016Q2/www/firefox-esr/files/patch-bug779713 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug779713 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug779713 (nonexistent) @@ -1,77 +0,0 @@ -diff --git mfbt/Alignment.h mfbt/Alignment.h -index e0843ca..353ec36 100644 ---- mfbt/Alignment.h -+++ mfbt/Alignment.h -@@ -9,11 +9,20 @@ - #ifndef mozilla_Alignment_h - #define mozilla_Alignment_h - -+#include "mozilla/Attributes.h" -+ - #include - #include - - namespace mozilla { - -+#if defined(MOZ_HAVE_CXX11_ALIGNAS) -+#define MOZ_ALIGNOF(T) alignof(T) -+#elif defined(__GNUC__) -+#define MOZ_ALIGNOF(T) __alignof__(T) -+#elif defined(_MSC_VER) -+#define MOZ_ALIGNOF(T) __alignof(T) -+#else - /* - * This class, and the corresponding macro MOZ_ALIGNOF, figures out how many - * bytes of alignment a given type needs. -@@ -32,6 +41,7 @@ public: - }; - - #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment -+#endif - - /* - * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. -@@ -43,7 +53,10 @@ public: - * will declare a two-character array |arr| aligned to 8 bytes. - */ - --#if defined(__GNUC__) -+#if defined(MOZ_HAVE_CXX11_ALIGNAS) -+# define MOZ_ALIGNED_DECL(_type, _align) \ -+ alignas(_align) _type -+#elif defined(__GNUC__) - # define MOZ_ALIGNED_DECL(_type, _align) \ - _type __attribute__((aligned(_align))) - #elif defined(_MSC_VER) -diff --git mfbt/Attributes.h mfbt/Attributes.h -index d317766..ddb13da 100644 ---- mfbt/Attributes.h -+++ mfbt/Attributes.h -@@ -50,6 +50,7 @@ - * don't indicate support for them here, due to - * http://stackoverflow.com/questions/20498142/visual-studio-2013-explicit-keyword-bug - */ -+# define MOZ_HAVE_CXX11_ALIGNAS - # define MOZ_HAVE_NEVER_INLINE __declspec(noinline) - # define MOZ_HAVE_NORETURN __declspec(noreturn) - # ifdef __clang__ -@@ -70,6 +71,9 @@ - # ifndef __has_extension - # define __has_extension __has_feature /* compatibility, for older versions of clang */ - # endif -+# if __has_extension(cxx_alignas) -+# define MOZ_HAVE_CXX11_ALIGNAS -+# endif - # if __has_extension(cxx_constexpr) - # define MOZ_HAVE_CXX11_CONSTEXPR - # endif -@@ -84,6 +88,9 @@ - # endif - #elif defined(__GNUC__) - # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L -+# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) -+# define MOZ_HAVE_CXX11_ALIGNAS -+# endif - # define MOZ_HAVE_CXX11_CONSTEXPR - # define MOZ_HAVE_EXPLICIT_CONVERSION - # endif Property changes on: branches/2016Q2/www/firefox-esr/files/patch-bug779713 ___________________________________________________________________ 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: branches/2016Q2/www/firefox-esr/files/extra-patch-bug1125514 =================================================================== --- branches/2016Q2/www/firefox-esr/files/extra-patch-bug1125514 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/extra-patch-bug1125514 (nonexistent) @@ -1,36 +0,0 @@ -changeset: 258513:ffbd5f5f46f1 -user: Guilherme Goncalves -date: Thu Aug 20 10:05:29 2015 +0900 -summary: Bug 1125514 - Use jemalloc's metadata statistics to compute bookkeeping. r=glandium - ---- memory/build/mozjemalloc_compat.c~ -+++ memory/build/mozjemalloc_compat.c -@@ -136,6 +136,7 @@ jemalloc_stats_impl(jemalloc_stats_t *st - { - unsigned narenas; - size_t active, allocated, mapped, page, pdirty; -+ size_t meta, ameta; - size_t lg_chunk; - - // Refresh jemalloc's stats by updating its epoch, see ctl_refresh in -@@ -149,17 +150,19 @@ jemalloc_stats_impl(jemalloc_stats_t *st - CTL_GET("stats.active", active); - CTL_GET("stats.allocated", allocated); - CTL_GET("stats.mapped", mapped); -+ CTL_GET("stats.metadata", meta); - CTL_GET("opt.lg_chunk", lg_chunk); -- CTL_GET("stats.bookkeeping", stats->bookkeeping); - - /* get the summation for all arenas, i == narenas */ - CTL_I_GET("stats.arenas.0.pdirty", pdirty, narenas); -+ CTL_I_GET("stats.arenas.0.metadata.allocated", ameta, narenas); - - stats->chunksize = 1 << lg_chunk; - stats->mapped = mapped; - stats->allocated = allocated; - stats->waste = active - allocated; - stats->page_cache = pdirty * page; -+ stats->bookkeeping = meta - ameta; - stats->bin_unused = compute_bin_unused(narenas); - stats->waste -= stats->bin_unused; - } Property changes on: branches/2016Q2/www/firefox-esr/files/extra-patch-bug1125514 ___________________________________________________________________ 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: branches/2016Q2/www/firefox-esr/files/patch-dom-events-MessageEvent.h =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-dom-events-MessageEvent.h (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-dom-events-MessageEvent.h (nonexistent) @@ -1,12 +0,0 @@ ---- dom/events/MessageEvent.h.orig 2015-12-22 00:49:29.000000000 +0100 -+++ dom/events/MessageEvent.h 2016-01-24 16:05:27.439512000 +0100 -@@ -15,9 +15,6 @@ namespace mozilla { - namespace dom { - - struct MessageEventInit; --class MessagePort; --class MessagePortBase; --class MessagePortList; - class OwningWindowProxyOrMessagePort; - - /** Property changes on: branches/2016Q2/www/firefox-esr/files/patch-dom-events-MessageEvent.h ___________________________________________________________________ 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: branches/2016Q2/www/firefox-esr/files/patch-bug1073117 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug1073117 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug1073117 (nonexistent) @@ -1,877 +0,0 @@ -diff --git widget/gtk/gtk2drawing.c widget/gtk/gtk2drawing.c -index 34f22af..1b950ab 100644 ---- widget/gtk/gtk2drawing.c -+++ widget/gtk/gtk2drawing.c -@@ -831,7 +831,7 @@ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) - return MOZ_GTK_SUCCESS; - } - --gint -+static gint - moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, - gint* focus_width, gint* focus_pad) - { -@@ -928,7 +928,7 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) - return MOZ_GTK_SUCCESS; - } - --gint -+static gint - moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) - { - static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; -diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c -index 08a58d6..7fef6fa 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. */ -@@ -762,37 +771,17 @@ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing) - gint - moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) - { -- gboolean interior_focus; -- gint focus_width = 0; -+ GtkBorder border; -+ GtkBorder padding; -+ GtkStyleContext *style; - - ensure_entry_widget(); -- gtk_widget_style_get(gEntryWidget, -- "interior-focus", &interior_focus, -- "focus-line-width", &focus_width, -- NULL); -- if (interior_focus) { -- GtkBorder border; -- GtkStyleContext *style = gtk_widget_get_style_context(gEntryWidget); -- gtk_style_context_get_border(style, 0, &border); -- *focus_h_width = border.left + focus_width; -- *focus_v_width = border.top + focus_width; -- } else { -- *focus_h_width = focus_width; -- *focus_v_width = focus_width; -- } -- return MOZ_GTK_SUCCESS; --} -- --gint --moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, -- gint* focus_width, gint* focus_pad) --{ -- gtk_widget_style_get (widget, -- "interior-focus", interior_focus, -- "focus-line-width", focus_width, -- "focus-padding", focus_pad, -- NULL); -+ style = gtk_widget_get_style_context(gEntryWidget); - -+ gtk_style_context_get_border(style, 0, &border); -+ gtk_style_context_get_padding(style, 0, &padding); -+ *focus_h_width = border.left + padding.left; -+ *focus_v_width = border.top + padding.top; - return MOZ_GTK_SUCCESS; - } - -@@ -880,24 +860,6 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) - return MOZ_GTK_SUCCESS; - } - --gint --moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) --{ -- static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; -- GtkBorder *tmp_border; -- -- gtk_widget_style_get (widget, "inner-border", &tmp_border, NULL); -- -- if (tmp_border) { -- *inner_border = *tmp_border; -- gtk_border_free(tmp_border); -- } -- else -- *inner_border = default_inner_border; -- -- return MOZ_GTK_SUCCESS; --} -- - static gint - moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, - GtkWidgetState* state, -@@ -908,19 +870,8 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, - GtkStyleContext* style = gtk_widget_get_style_context(widget); - gint x = rect->x, y=rect->y, width=rect->width, height=rect->height; - -- gboolean interior_focus; -- gint focus_width, focus_pad; -- -- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); - gtk_widget_set_direction(widget, direction); -- -- if (!interior_focus && state->focused) { -- x += focus_width + focus_pad; -- y += focus_width + focus_pad; -- width -= 2 * (focus_width + focus_pad); -- height -= 2 * (focus_width + focus_pad); -- } -- -+ - gtk_style_context_save(style); - gtk_style_context_set_state(style, state_flags); - -@@ -953,20 +904,12 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, - } - - if (state->focused) { -- if (interior_focus) { -- GtkBorder border; -- gtk_style_context_get_border(style, state_flags, &border); -- x += border.left + focus_pad; -- y += border.top + focus_pad; -- width -= 2 * (border.left + focus_pad); -- height -= 2 * (border.top + focus_pad); -- } else { -- x -= focus_width + focus_pad; -- y -= focus_width + focus_pad; -- width += 2 * (focus_width + focus_pad); -- height += 2 * (focus_width + focus_pad); -- } -- -+ GtkBorder border; -+ gtk_style_context_get_border(style, state_flags, &border); -+ x += border.left; -+ y += border.top; -+ width -= (border.left + border.right); -+ height -= (border.top + border.bottom); - gtk_render_focus(style, cr, x, y, width, height); - } - gtk_style_context_restore(style); -@@ -1056,33 +999,23 @@ calculate_button_inner_rect(GtkWidget* button, GdkRectangle* rect, - GtkTextDirection direction, - gboolean ignore_focus) - { -- GtkBorder inner_border; -- gboolean interior_focus; -- gint focus_width, focus_pad; - GtkStyleContext* style; - GtkBorder border; -+ GtkBorder padding = {0, 0, 0, 0}; - - style = gtk_widget_get_style_context(button); - - /* This mirrors gtkbutton's child positioning */ -- moz_gtk_button_get_inner_border(button, &inner_border); -- moz_gtk_widget_get_focus(button, &interior_focus, -- &focus_width, &focus_pad); -- -- if (ignore_focus) -- focus_width = focus_pad = 0; -- - gtk_style_context_get_border(style, 0, &border); -+ if (!ignore_focus) -+ gtk_style_context_get_padding(style, 0, &padding); - -- inner_rect->x = rect->x + border.left + focus_width + focus_pad; -- inner_rect->x += direction == GTK_TEXT_DIR_LTR ? -- inner_border.left : inner_border.right; -- inner_rect->y = rect->y + inner_border.top + border.top + -- focus_width + focus_pad; -- inner_rect->width = MAX(1, rect->width - inner_border.left - -- inner_border.right - (border.left + focus_pad + focus_width) * 2); -- inner_rect->height = MAX(1, rect->height - inner_border.top - -- inner_border.bottom - (border.top + focus_pad + focus_width) * 2); -+ inner_rect->x = rect->x + border.left + padding.left; -+ inner_rect->y = rect->y + padding.top + border.top; -+ inner_rect->width = MAX(1, rect->width - padding.left - -+ padding.right - border.left * 2); -+ inner_rect->height = MAX(1, rect->height - padding.top - -+ padding.bottom - border.top * 2); - - return MOZ_GTK_SUCCESS; - } -@@ -1457,19 +1390,12 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, - { - gint x = rect->x, y = rect->y, width = rect->width, height = rect->height; - GtkStyleContext* style; -- gboolean interior_focus; -- gint focus_width; - int draw_focus_outline_only = state->depressed; // NS_THEME_FOCUS_OUTLINE - - gtk_widget_set_direction(widget, direction); - - style = gtk_widget_get_style_context(widget); - -- gtk_widget_style_get(widget, -- "interior-focus", &interior_focus, -- "focus-line-width", &focus_width, -- NULL); -- - if (draw_focus_outline_only) { - // Inflate the given 'rect' with the focus outline size. - gint h, v; -@@ -1501,14 +1427,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, - /* This will get us the lit borders that focused textboxes enjoy on - * some themes. */ - gtk_style_context_set_state(style, GTK_STATE_FLAG_FOCUSED); -- if (!interior_focus) { -- /* Indent the border a little bit if we have exterior focus -- (this is what GTK does to draw native entries) */ -- x += focus_width; -- y += focus_width; -- width -= 2 * focus_width; -- height -= 2 * focus_width; -- } - } - - if (state->disabled) { -@@ -1520,11 +1438,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, - } - gtk_render_frame(style, cr, x, y, width, height); - -- if (state->focused && !state->disabled) { -- if (!interior_focus) { -- gtk_render_focus(style, cr, rect->x, rect->y, rect->width, rect->height); -- } -- } - gtk_style_context_restore(style); - - return MOZ_GTK_SUCCESS; -@@ -1829,8 +1742,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, - GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); - GtkStyleContext* style; - GtkWidget *widget; -- gboolean interior_focus; -- gint focus_width, focus_pad; - - if (isradio) { - ensure_radiobutton_widget(); -@@ -1843,7 +1754,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, - - style = gtk_widget_get_style_context(widget); - gtk_style_context_save(style); -- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); - gtk_style_context_set_state(style, state_flags); - - /* this is for drawing a prelight box */ -@@ -1852,10 +1762,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, - rect->x, rect->y, rect->width, rect->height); - } - -- if (state->focused && !interior_focus) { -- gtk_render_focus(style, cr, -- rect->x, rect->y, rect->width, rect->height); -- } - gtk_style_context_restore(style); - - return MOZ_GTK_SUCCESS; -@@ -1868,7 +1774,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, - { - GtkStyleContext *style; - GtkWidget *widget; -- gboolean interior_focus; - - if (!state->focused) - return MOZ_GTK_SUCCESS; -@@ -1889,10 +1794,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, - } - gtk_widget_set_direction(widget, direction); - -- gtk_widget_style_get(widget, "interior-focus", &interior_focus, NULL); -- if (!interior_focus) -- return MOZ_GTK_SUCCESS; -- - gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state)); - gtk_render_focus(style, cr, - rect->x, rect->y, rect->width, rect->height); -@@ -2105,6 +2015,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); -@@ -2150,7 +2063,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); - -@@ -2167,143 +2080,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; -+ -+ gtk_style_context_save(style); -+ moz_gtk_tab_prepare_style_context(style, flags); - -- focusRect.x += border.left; -- focusRect.width -= (border.left + border.right); -- focusRect.y += border.top; -- focusRect.height -= (border.top + border.bottom); -+ 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; - } -@@ -2684,26 +2609,18 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - switch (widget) { - case MOZ_GTK_BUTTON: - { -- GtkBorder inner_border; -- gboolean interior_focus; -- gint focus_width, focus_pad; -- - ensure_button_widget(); -+ style = gtk_widget_get_style_context(gButtonWidget); -+ - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget)); - - /* Don't add this padding in HTML, otherwise the buttons will - become too big and stuff the layout. */ - if (!inhtml) { -- moz_gtk_widget_get_focus(gButtonWidget, &interior_focus, &focus_width, &focus_pad); -- moz_gtk_button_get_inner_border(gButtonWidget, &inner_border); -- *left += focus_width + focus_pad + inner_border.left; -- *right += focus_width + focus_pad + inner_border.right; -- *top += focus_width + focus_pad + inner_border.top; -- *bottom += focus_width + focus_pad + inner_border.bottom; -+ moz_gtk_add_style_padding(style, left, top, right, bottom); - } - -- moz_gtk_add_style_border(gtk_widget_get_style_context(gButtonWidget), -- left, top, right, bottom); -+ moz_gtk_add_style_border(style, left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_ENTRY: -@@ -2717,7 +2610,13 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - ensure_entry_widget(); - style = gtk_widget_get_style_context(gEntryWidget); - moz_gtk_add_style_border(style, left, top, right, bottom); -- moz_gtk_add_style_padding(style, left, top, right, bottom); -+ -+ /* Use the document padding in HTML -+ and GTK style padding in XUL. */ -+ if (!inhtml) { -+ moz_gtk_add_style_padding(style, left, top, right, bottom); -+ } -+ - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_TREEVIEW: -@@ -2737,23 +2636,15 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - * assigned. - * That is why the following code is the same as for MOZ_GTK_BUTTON. - * */ -- -- GtkBorder inner_border; -- gboolean interior_focus; -- gint focus_width, focus_pad; -+ GtkStyleContext *style; - - ensure_tree_header_cell_widget(); - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gTreeHeaderCellWidget)); - -- moz_gtk_widget_get_focus(gTreeHeaderCellWidget, &interior_focus, &focus_width, &focus_pad); -- moz_gtk_button_get_inner_border(gTreeHeaderCellWidget, &inner_border); -- *left += focus_width + focus_pad + inner_border.left; -- *right += focus_width + focus_pad + inner_border.right; -- *top += focus_width + focus_pad + inner_border.top; -- *bottom += focus_width + focus_pad + inner_border.bottom; -- -- moz_gtk_add_style_border(gtk_widget_get_style_context(gTreeHeaderCellWidget), -- left, top, right, bottom); -+ style = gtk_widget_get_style_context(gTreeHeaderCellWidget); -+ -+ moz_gtk_add_style_border(style, left, top, right, bottom); -+ moz_gtk_add_style_padding(style, left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_TREE_HEADER_SORTARROW: -@@ -2773,29 +2664,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - /* We need to account for the arrow on the dropdown, so text - * doesn't come too close to the arrow, or in some cases spill - * into the arrow. */ -- gboolean ignored_interior_focus, wide_separators; -- gint focus_width, focus_pad, separator_width; -+ gboolean wide_separators; -+ gint separator_width; - GtkRequisition arrow_req; - GtkBorder border; - - ensure_combo_box_widgets(); - -- *left = gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); -+ *left = *top = *right = *bottom = -+ gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); -+ -+ style = gtk_widget_get_style_context(gComboBoxButtonWidget); - - if (!inhtml) { -- moz_gtk_widget_get_focus(gComboBoxButtonWidget, -- &ignored_interior_focus, -- &focus_width, &focus_pad); -- *left += focus_width + focus_pad; -+ moz_gtk_add_style_padding(style, left, top, right, bottom); - } - -- style = gtk_widget_get_style_context(gComboBoxButtonWidget); -- gtk_style_context_get_border(style, 0, &border); -- -- *top = *left + border.top; -- *left += border.left; -- -- *right = *left; *bottom = *top; -+ moz_gtk_add_style_border(style, left, top, right, bottom); - - /* If there is no separator, don't try to count its width. */ - separator_width = 0; -@@ -2847,60 +2732,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - ensure_frame_widget(); - w = gFrameWidget; - break; -- case MOZ_GTK_CHECKBUTTON_LABEL: -- case MOZ_GTK_RADIOBUTTON_LABEL: -- { -- gboolean interior_focus; -- gint focus_width, focus_pad; -- -- /* If the focus is interior, then the label has a border of -- (focus_width + focus_pad). */ -- if (widget == MOZ_GTK_CHECKBUTTON_LABEL) { -- ensure_checkbox_widget(); -- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, -- &focus_width, &focus_pad); -- } -- else { -- ensure_radiobutton_widget(); -- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, -- &focus_width, &focus_pad); -- } -- -- if (interior_focus) -- *left = *top = *right = *bottom = (focus_width + focus_pad); -- -- return MOZ_GTK_SUCCESS; -- } -- - case MOZ_GTK_CHECKBUTTON_CONTAINER: - case MOZ_GTK_RADIOBUTTON_CONTAINER: - { -- gboolean interior_focus; -- gint focus_width, focus_pad; -- -- /* If the focus is _not_ interior, then the container has a border -- of (focus_width + focus_pad). */ - if (widget == MOZ_GTK_CHECKBUTTON_CONTAINER) { - ensure_checkbox_widget(); -- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, -- &focus_width, &focus_pad); - w = gCheckboxWidget; - } else { - ensure_radiobutton_widget(); -- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, -- &focus_width, &focus_pad); - w = gRadiobuttonWidget; - } -+ style = gtk_widget_get_style_context(w); - - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w)); -- -- if (!interior_focus) { -- *left += (focus_width + focus_pad); -- *right += (focus_width + focus_pad); -- *top += (focus_width + focus_pad); -- *bottom += (focus_width + focus_pad); -- } -- -+ moz_gtk_add_style_border(style, -+ left, top, right, bottom); -+ moz_gtk_add_style_padding(style, -+ left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_MENUPOPUP: -@@ -2927,6 +2775,8 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - return MOZ_GTK_SUCCESS; - } - /* These widgets have no borders, since they are not containers. */ -+ case MOZ_GTK_CHECKBUTTON_LABEL: -+ case MOZ_GTK_RADIOBUTTON_LABEL: - case MOZ_GTK_SPLITTER_HORIZONTAL: - case MOZ_GTK_SPLITTER_VERTICAL: - case MOZ_GTK_CHECKBUTTON: -@@ -2975,11 +2849,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); -@@ -2990,16 +2860,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/gtkdrawing.h widget/gtk/gtkdrawing.h -index 1938e8f..5f71cfd 100644 ---- widget/gtk/gtkdrawing.h -+++ widget/gtk/gtkdrawing.h -@@ -293,16 +293,6 @@ moz_gtk_checkbox_get_metrics(gint* indicator_size, gint* indicator_spacing); - gint - moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing); - --/** -- * Get the inner-border value for a GtkButton widget (button or tree header) -- * widget: [IN] the widget to get the border value for -- * inner_border: [OUT] the inner border -- * -- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise -- */ --gint --moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); -- - /** Get the extra size for the focus ring for outline:auto. - * widget: [IN] the widget to get the focus metrics for - * focus_h_width: [OUT] the horizontal width -@@ -313,19 +303,6 @@ moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); - gint - moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width); - --/** Get the focus metrics for a treeheadercell, button, checkbox, or radio button. -- * widget: [IN] the widget to get the focus metrics for -- * interior_focus: [OUT] whether the focus is drawn around the -- * label (TRUE) or around the whole container (FALSE) -- * focus_width: [OUT] the width of the focus line -- * focus_pad: [OUT] the padding between the focus line and children -- * -- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise -- */ --gint --moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, -- gint* focus_width, gint* focus_pad); -- - /** Get the horizontal padding for the menuitem widget or checkmenuitem widget. - * horizontal_padding: [OUT] The left and right padding of the menuitem or checkmenuitem - * -diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp -index e5e1867..76d28e3 100644 ---- widget/gtk/nsNativeThemeGTK.cpp -+++ widget/gtk/nsNativeThemeGTK.cpp -@@ -761,6 +761,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: branches/2016Q2/www/firefox-esr/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: branches/2016Q2/www/firefox-esr/files/patch-bug1144643 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug1144643 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug1144643 (nonexistent) @@ -1,33 +0,0 @@ -commit a0ccc19 -Author: Martin Stransky -Date: Wed Mar 18 07:14:00 2015 -0400 - - Bug 1144643 - Render tooltips as transparent on Gtk3. r=karlt - - --HG-- - extra : rebase_source : 23085532b27350ca71cbe18db071628388003f33 ---- - widget/gtk/nsNativeThemeGTK.cpp | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp -index e5e1867..26d13a5 100644 ---- widget/gtk/nsNativeThemeGTK.cpp -+++ widget/gtk/nsNativeThemeGTK.cpp -@@ -1528,9 +1528,15 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType) - case NS_THEME_MENUPOPUP: - case NS_THEME_WINDOW: - case NS_THEME_DIALOG: -- // Tooltips use gtk_paint_flat_box(). -+ return eOpaque; -+ // Tooltips use gtk_paint_flat_box() on Gtk2 -+ // but are shaped on Gtk3 - case NS_THEME_TOOLTIP: -+#if (MOZ_WIDGET_GTK == 2) - return eOpaque; -+#else -+ return eTransparent; -+#endif - } - - return eUnknownTransparency; Property changes on: branches/2016Q2/www/firefox-esr/files/patch-bug1144643 ___________________________________________________________________ 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: branches/2016Q2/www/firefox-esr/files/patch-bug1143686 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug1143686 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug1143686 (nonexistent) @@ -1,46 +0,0 @@ -commit e50e738 -Author: Martin Stransky -Date: Mon Mar 16 08:00:00 2015 -0400 - - Bug 1143686 - Gtk3 - Render scrollbar thumb with margin. r=karlt ---- - widget/gtk/gtk3drawing.c | 14 ++++++++++---- - 1 file changed, 10 insertions(+), 4 deletions(-) - -diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c -index 17f46ab..08a58d6 100644 ---- widget/gtk/gtk3drawing.c -+++ widget/gtk/gtk3drawing.c -@@ -1230,6 +1230,7 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, - GtkStyleContext* style; - GtkScrollbar *scrollbar; - GtkAdjustment *adj; -+ GtkBorder margin; - - ensure_scrollbar_widget(); - -@@ -1239,15 +1240,20 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, - scrollbar = GTK_SCROLLBAR(gVertScrollbarWidget); - - gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction); -- -+ - style = gtk_widget_get_style_context(GTK_WIDGET(scrollbar)); - gtk_style_context_save(style); -- -+ - gtk_style_context_add_class(style, GTK_STYLE_CLASS_SLIDER); - gtk_style_context_set_state(style, state_flags); - -- gtk_render_slider(style, cr, rect->x, rect->y, -- rect->width, rect->height, -+ gtk_style_context_get_margin (style, state_flags, &margin); -+ -+ gtk_render_slider(style, cr, -+ rect->x + margin.left, -+ rect->y + margin.top, -+ rect->width - margin.left - margin.right, -+ rect->height - margin.top - margin.bottom, - (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) ? - GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL); - Property changes on: branches/2016Q2/www/firefox-esr/files/patch-bug1143686 ___________________________________________________________________ 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: branches/2016Q2/www/firefox-esr/files/patch-bug1148203 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug1148203 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug1148203 (nonexistent) @@ -1,38 +0,0 @@ -# HG changeset patch -# User Chris Double -# Date 1427767594 -46800 -# Tue Mar 31 15:06:34 2015 +1300 -# Node ID 858ea94746eedc4b65734f8ceedfff7021940cb2 -# Parent 1b8f36a7ee321ca62cf87424910d0e2ed6fed076 -Bug 1148203 - Fix build errors with combinations of enable/disable of ffmp4/ffmpeg/eme - r=cpearce,ted - -Fixes build error with all three disabled. Prevents other combinations -that cause build errors by detecting them at configure time and displaying -an error message. - -diff --git a/configure.in b/configure.in ---- configure.in -+++ configure.in -@@ -5316,6 +5316,10 @@ MOZ_ARG_DISABLE_BOOL(fmp4, - MOZ_FMP4=, - MOZ_FMP4=1) - -+if test -n "$MOZ_FFMPEG" -a -z "$MOZ_FMP4"; then -+ AC_MSG_ERROR([Fragmented MP4 support must be enabled if using FFMPEG]) -+fi -+ - if test -n "$MOZ_FMP4"; then - AC_DEFINE(MOZ_FMP4) - MOZ_EME=1 -diff --git a/media/libstagefright/binding/MoofParser.cpp b/media/libstagefright/binding/MoofParser.cpp ---- media/libstagefright/binding/MoofParser.cpp -+++ media/libstagefright/binding/MoofParser.cpp -@@ -9,7 +9,7 @@ - - #include "prlog.h" - --#ifdef PR_LOGGING -+#if defined(MOZ_FMP4) && defined(PR_LOGGING) - extern PRLogModuleInfo* GetDemuxerLog(); - - /* Polyfill __func__ on MSVC to pass to the log. */ Property changes on: branches/2016Q2/www/firefox-esr/files/patch-bug1148203 ___________________________________________________________________ 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: branches/2016Q2/www/firefox-esr/files/patch-bug1138845 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug1138845 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug1138845 (nonexistent) @@ -1,134 +0,0 @@ -commit 4b5b332 -Author: Mike Hommey -Date: Tue Mar 3 18:41:13 2015 +0900 - - Bug 1138845 - Don't require atk-bridge for gtk+3 builds. r=tbsaunde ---- - accessible/atk/Platform.cpp | 29 +++++++++++++++++++---------- - config/system-headers | 1 - - configure.in | 2 +- - 3 files changed, 20 insertions(+), 12 deletions(-) - -diff --git accessible/atk/Platform.cpp accessible/atk/Platform.cpp -index a2afd96..2ed5e0b 100644 ---- accessible/atk/Platform.cpp -+++ accessible/atk/Platform.cpp -@@ -18,8 +18,9 @@ - #include - #endif - #include -+ - #if (MOZ_WIDGET_GTK == 3) --#include -+extern "C" __attribute__((weak,visibility("default"))) int atk_bridge_adaptor_init(int*, char **[]); - #endif - - using namespace mozilla; -@@ -46,7 +47,6 @@ static gulong sToplevel_hide_hook = 0; - - GType g_atk_hyperlink_impl_type = G_TYPE_INVALID; - --#if (MOZ_WIDGET_GTK == 2) - struct GnomeAccessibilityModule - { - const char *libName; -@@ -67,11 +67,13 @@ static GnomeAccessibilityModule sAtkBridge = { - "gnome_accessibility_module_shutdown", nullptr - }; - -+#if (MOZ_WIDGET_GTK == 2) - static GnomeAccessibilityModule sGail = { - "libgail.so", nullptr, - "gnome_accessibility_module_init", nullptr, - "gnome_accessibility_module_shutdown", nullptr - }; -+#endif - - static nsresult - LoadGtkModule(GnomeAccessibilityModule& aModule) -@@ -98,7 +100,11 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) - else - subLen = loc2 - loc1; - nsAutoCString sub(Substring(libPath, loc1, subLen)); -+#if (MOZ_WIDGET_GTK == 2) - sub.AppendLiteral("/gtk-2.0/modules/"); -+#else -+ sub.AppendLiteral("/gtk-3.0/modules/"); -+#endif - sub.Append(aModule.libName); - aModule.lib = PR_LoadLibrary(sub.get()); - if (aModule.lib) -@@ -123,7 +129,6 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) - } - return NS_OK; - } --#endif // (MOZ_WIDGET_GTK == 2) - - void - a11y::PlatformInit() -@@ -175,14 +180,17 @@ a11y::PlatformInit() - - // Init atk-bridge now - PR_SetEnv("NO_AT_BRIDGE=0"); --#if (MOZ_WIDGET_GTK == 2) -- rv = LoadGtkModule(sAtkBridge); -- if (NS_SUCCEEDED(rv)) { -- (*sAtkBridge.init)(); -- } --#else -- atk_bridge_adaptor_init(nullptr, nullptr); -+#if (MOZ_WIDGET_GTK == 3) -+ if (atk_bridge_adaptor_init) { -+ atk_bridge_adaptor_init(nullptr, nullptr); -+ } else - #endif -+ { -+ nsresult rv = LoadGtkModule(sAtkBridge); -+ if (NS_SUCCEEDED(rv)) { -+ (*sAtkBridge.init)(); -+ } -+ } - - if (!sToplevel_event_hook_added) { - sToplevel_event_hook_added = true; -@@ -210,7 +218,6 @@ a11y::PlatformShutdown() - sToplevel_hide_hook); - } - --#if (MOZ_WIDGET_GTK == 2) - if (sAtkBridge.lib) { - // Do not shutdown/unload atk-bridge, - // an exit function registered will take care of it -@@ -221,6 +228,7 @@ a11y::PlatformShutdown() - sAtkBridge.init = nullptr; - sAtkBridge.shutdown = nullptr; - } -+#if (MOZ_WIDGET_GTK == 2) - if (sGail.lib) { - // Do not shutdown gail because - // 1) Maybe it's not init-ed by us. e.g. GtkEmbed -diff --git config/system-headers config/system-headers -index 2c94a7d..cf01775 100644 ---- config/system-headers -+++ config/system-headers -@@ -189,7 +189,6 @@ asm/signal.h - ASRegistry.h - assert.h - atk/atk.h --atk-bridge.h - atlcom.h - atlconv.h - atlctl.cpp -diff --git configure.in configure.in -index 0bd1eb7..f3b3365 100644 ---- configure.in -+++ configure.in -@@ -4408,7 +4408,7 @@ fi - - if test "$COMPILE_ENVIRONMENT"; then - if test "$MOZ_ENABLE_GTK3"; then -- PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 atk-bridge-2.0 $GDK_PACKAGES) -+ PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 $GDK_PACKAGES) - MOZ_GTK3_CFLAGS="-I${_topsrcdir}/widget/gtk/compat-gtk3 $MOZ_GTK3_CFLAGS" - dnl Contrary to MOZ_GTK2_LIBS, MOZ_GTK3_LIBS needs to be literally added to TK_LIBS instead - dnl of a make reference because of how TK_LIBS is mangled in toolkit/library/moz.build Property changes on: branches/2016Q2/www/firefox-esr/files/patch-bug1138845 ___________________________________________________________________ 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: branches/2016Q2/www/firefox-esr/files/patch-bug1026499 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug1026499 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug1026499 (nonexistent) @@ -1,68 +0,0 @@ -commit 8d0efe4 -Author: Martin Husemann -Date: Wed Jun 18 18:12:22 2014 +0200 - - Bug 1026499 - Use MOZ_ALIGNED_DECL to declare union members in ipdl value declarations. r=bsmedberg ---- - ipc/ipdl/ipdl/cxx/ast.py | 7 ++++--- - ipc/ipdl/ipdl/cxx/cgen.py | 5 ++++- - ipc/ipdl/ipdl/lower.py | 2 +- - 4 files changed, 10 insertions(+), 5 deletions(-) - -diff --git ipc/ipdl/ipdl/cxx/ast.py ipc/ipdl/ipdl/cxx/ast.py -index 3180a65..c2d945b 100644 ---- ipc/ipdl/ipdl/cxx/ast.py -+++ ipc/ipdl/ipdl/cxx/ast.py -@@ -336,12 +336,13 @@ Type.VOID = Type('void') - Type.VOIDPTR = Type('void', ptr=1) - - class TypeArray(Node): -- def __init__(self, basetype, nmemb): -- '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr''' -+ def __init__(self, basetype, nmemb, alignType): -+ '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr, |alignType| is a type''' - self.basetype = basetype - self.nmemb = nmemb -+ self.alignType = alignType - def __deepcopy__(self, memo): -- return TypeArray(deepcopy(self.basetype, memo), nmemb) -+ return TypeArray(deepcopy(self.basetype, memo), nmemb, alignType) - - class TypeEnum(Node): - def __init__(self, name=None): -diff --git ipc/ipdl/ipdl/cxx/cgen.py ipc/ipdl/ipdl/cxx/cgen.py -index 48b0988..bc914cf 100644 ---- ipc/ipdl/ipdl/cxx/cgen.py -+++ ipc/ipdl/ipdl/cxx/cgen.py -@@ -101,6 +101,7 @@ class CxxCodeGen(CodePrinter, Visitor): - def visitDecl(self, d): - # C-syntax arrays make code generation much more annoying - if isinstance(d.type, TypeArray): -+ self.write('MOZ_ALIGNED_DECL(') - d.type.basetype.accept(self) - else: - d.type.accept(self) -@@ -111,7 +112,9 @@ class CxxCodeGen(CodePrinter, Visitor): - if isinstance(d.type, TypeArray): - self.write('[') - d.type.nmemb.accept(self) -- self.write(']') -+ self.write('], MOZ_ALIGNOF(') -+ d.type.alignType.accept(self) -+ self.write('))') - - def visitParam(self, p): - self.visitDecl(p) -diff --git ipc/ipdl/ipdl/lower.py ipc/ipdl/ipdl/lower.py -index e97a34c..9360f3c 100644 ---- ipc/ipdl/ipdl/lower.py -+++ ipc/ipdl/ipdl/lower.py -@@ -768,7 +768,7 @@ IPDL union type.""" - if self.recursive: - return self.ptrToType() - else: -- return TypeArray(Type('char'), ExprSizeof(self.internalType())) -+ return TypeArray(Type('char'), ExprSizeof(self.internalType()), self.internalType()) - - def unionValue(self): - # NB: knows that Union's storage C union is named |mValue| Property changes on: branches/2016Q2/www/firefox-esr/files/patch-bug1026499 ___________________________________________________________________ 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: branches/2016Q2/www/firefox-esr/files/patch-memory-jemalloc-Makefile.in =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-memory-jemalloc-Makefile.in (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-memory-jemalloc-Makefile.in (nonexistent) @@ -1,10 +0,0 @@ ---- memory/jemalloc/Makefile.in~ -+++ memory/jemalloc/Makefile.in -@@ -12,3 +12,7 @@ include $(topsrcdir)/config/rules.mk - ifdef GNU_CC - CFLAGS += -std=gnu99 - endif -+ -+# XXX startup crash workaround for gcc47 on amd64 -+jemalloc.$(OBJ_SUFFIX): OS_CFLAGS := $(filter-out -O3 -Ofast,$(OS_CFLAGS)) -+jemalloc.$(OBJ_SUFFIX): MOZ_OPTIMIZE_FLAGS= Property changes on: branches/2016Q2/www/firefox-esr/files/patch-memory-jemalloc-Makefile.in ___________________________________________________________________ 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: branches/2016Q2/www/firefox-esr/files/patch-bug1013882 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug1013882 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug1013882 (revision 413772) @@ -1,69 +1,69 @@ diff --git b2g/installer/Makefile.in b2g/installer/Makefile.in index 754312a..c69904c 100644 --- b2g/installer/Makefile.in +++ b2g/installer/Makefile.in -@@ -63,6 +63,10 @@ ifneq (,$(filter rtsp,$(NECKO_PROTOCOLS))) +@@ -101,6 +101,10 @@ ifneq (,$(filter rtsp,$(NECKO_PROTOCOLS) DEFINES += -DMOZ_RTSP endif +ifdef MOZ_DEBUG +DEFINES += -DMOZ_DEBUG=1 +endif + - ifdef GKMEDIAS_SHARED_LIBRARY - DEFINES += -DGKMEDIAS_SHARED_LIBRARY - endif + DEFINES += -DMOZ_ICU_VERSION=$(MOZ_ICU_VERSION) + ifdef MOZ_NATIVE_ICU + DEFINES += -DMOZ_NATIVE_ICU diff --git b2g/installer/package-manifest.in b2g/installer/package-manifest.in index 17d433c..0416187 100644 --- b2g/installer/package-manifest.in +++ b2g/installer/package-manifest.in -@@ -576,7 +576,7 @@ - @BINPATH@/components/MozKeyboard.js - @BINPATH@/components/InputMethod.manifest +@@ -660,7 +660,7 @@ + @RESPATH@/components/EngineeringModeAPI.js + @RESPATH@/components/EngineeringModeService.js -#ifdef MOZ_DEBUG +#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG) - @BINPATH@/components/TestInterfaceJS.js - @BINPATH@/components/TestInterfaceJS.manifest + @RESPATH@/components/TestInterfaceJS.js + @RESPATH@/components/TestInterfaceJS.manifest #endif diff --git browser/installer/package-manifest.in browser/installer/package-manifest.in index b509fd4..195345c 100644 --- browser/installer/package-manifest.in +++ browser/installer/package-manifest.in @@ -608,7 +608,7 @@ @RESPATH@/components/MozKeyboard.js @RESPATH@/components/InputMethod.manifest -#ifdef MOZ_DEBUG +#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG) @RESPATH@/components/TestInterfaceJS.js @RESPATH@/components/TestInterfaceJS.manifest #endif diff --git mobile/android/installer/Makefile.in mobile/android/installer/Makefile.in index 96dceab..3528ad6 100644 --- mobile/android/installer/Makefile.in +++ mobile/android/installer/Makefile.in @@ -41,6 +41,10 @@ BINPATH = bin endif DEFINES += -DBINPATH=$(BINPATH) +ifdef MOZ_DEBUG +DEFINES += -DMOZ_DEBUG=1 +endif + ifdef ENABLE_MARIONETTE DEFINES += -DENABLE_MARIONETTE=1 endif diff --git mobile/android/installer/package-manifest.in mobile/android/installer/package-manifest.in index 994580b..cf142df 100644 --- mobile/android/installer/package-manifest.in +++ mobile/android/installer/package-manifest.in @@ -440,7 +440,7 @@ @BINPATH@/components/dom_webspeechsynth.xpt #endif -#ifdef MOZ_DEBUG +#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG) @BINPATH@/components/TestInterfaceJS.js @BINPATH@/components/TestInterfaceJS.manifest #endif Index: branches/2016Q2/www/firefox-esr/files/patch-bug1021761 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug1021761 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug1021761 (revision 413772) @@ -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); +- r = snd_pcm_open(&pcm, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); ++ r = WRAP(snd_pcm_open)(&pcm, CUBEB_ALSA_PCM_NAME, 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: branches/2016Q2/www/firefox-esr/files/patch-bug1233275 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug1233275 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug1233275 (revision 413772) @@ -1,40 +1,36 @@ # Copy environment for IPC using NSPR to avoid race diff --git a/ipc/chromium/src/base/process_util_bsd.cc b/ipc/chromium/src/base/process_util_bsd.cc --- ipc/chromium/src/base/process_util_bsd.cc +++ ipc/chromium/src/base/process_util_bsd.cc -@@ -13,6 +13,7 @@ +@@ -12,10 +12,9 @@ #include +#include "nspr.h" #include "base/eintr_wrapper.h" - #include "base/file_util.h" - #include "base/logging.h" -@@ -48,7 +49,6 @@ - #ifdef HAVE_POSIX_SPAWN - #include --extern "C" char **environ __dso_public; - #endif +-extern "C" char **environ __attribute__((__visibility__("default"))); +- + namespace base { - namespace { -@@ -114,6 +114,7 @@ bool LaunchApp(const std::vector + #include "SharedMemoryBasic.h" + #include "mozilla/Atomics.h" +@@ -34,7 +34,7 @@ struct ParamTraits; + namespace mozilla { + #if defined(OS_WIN) + typedef HANDLE CrossProcessMutexHandle; +-#elif defined(OS_LINUX) || defined(OS_MACOSX) ++#elif !defined(OS_NETBSD) && !defined(OS_OPENBSD) + typedef mozilla::ipc::SharedMemoryBasic::Handle CrossProcessMutexHandle; + #else + // Stub for other platforms. We can't use uintptr_t here since different +@@ -100,7 +100,7 @@ private: + + #if defined(OS_WIN) + HANDLE mMutex; +-#elif defined(OS_LINUX) || defined(OS_MACOSX) ++#elif !defined(OS_NETBSD) && !defined(OS_OPENBSD) + RefPtr mSharedBuffer; + pthread_mutex_t* mMutex; + mozilla::Atomic* mCount; +diff --git a/ipc/glue/moz.build b/ipc/glue/moz.build +--- ipc/glue/moz.build ++++ ipc/glue/moz.build +@@ -61,7 +61,7 @@ if CONFIG['OS_ARCH'] == 'WINNT': + SOURCES += [ + 'CrossProcessMutex_windows.cpp', + ] +-elif CONFIG['OS_ARCH'] in ('Linux', 'Darwin'): ++elif not CONFIG['OS_ARCH'] in ('NetBSD', 'OpenBSD'): + UNIFIED_SOURCES += [ + 'CrossProcessMutex_posix.cpp', + ] Property changes on: branches/2016Q2/www/firefox-esr/files/patch-bug1252246 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2016Q2/www/firefox-esr/files/patch-bug1257947 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug1257947 (nonexistent) +++ branches/2016Q2/www/firefox-esr/files/patch-bug1257947 (revision 413772) @@ -0,0 +1,13 @@ +# Fix Hello icon (bug 1257947) + +--- browser/extensions/loop/jar.mn.orig 2016-04-14 21:11:21.842908299 +0200 ++++ browser/extensions/loop/jar.mn 2016-04-14 21:11:36.570907377 +0200 +@@ -6,7 +6,7 @@ + [features/loop@mozilla.org] chrome.jar: + % content loop %content/ contentaccessible=yes + % content loop-locale-fallback %content/locale-fallback/en-US/ +-% skin loop classic/1.0 %skin/linux/ os=Linux ++% skin loop classic/1.0 %skin/linux/ + % skin loop classic/1.0 %skin/osx/ os=Darwin + % skin loop classic/1.0 %skin/windows/ os=WINNT + % skin loop-shared classic/1.0 %skin/shared/ Property changes on: branches/2016Q2/www/firefox-esr/files/patch-bug1257947 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2016Q2/www/firefox-esr/files/patch-bug702179 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug702179 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug702179 (revision 413772) @@ -1,24 +1,13 @@ -commit 6ddaacd -Author: Ginn Chen -Date: Wed Nov 30 07:23:46 2011 +0800 - - Bug 702179 dtrace probes are not installed on Solaris with static js lib r=glandium ---- - js/src/Makefile.in | 3 --- - toolkit/library/moz.build | 5 ----- - 2 files changed, 8 deletions(-) - -diff --git js/src/Makefile.in js/src/Makefile.in -index 62bbfa0..90400cb 100644 ---- js/src/Makefile.in -+++ js/src/Makefile.in -@@ -17,9 +17,6 @@ TOPLEVEL_BUILD := 1 - run_for_side_effects := $(shell echo 'MAKE: $(MAKE)') - EXTRA_LIBS += $(NSPR_LIBS) +--- js/src/moz.build.orig 2015-12-16 12:32:04.574425000 +0100 ++++ js/src/moz.build 2015-12-16 12:32:09.032032000 +0100 +@@ -671,10 +671,6 @@ CFLAGS += CONFIG['MOZ_ICU_CFLAGS'] + CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS'] + LOCAL_INCLUDES += CONFIG['MOZ_ICU_INCLUDES'] --DIST_INSTALL = 1 --NO_EXPAND_LIBS = 1 +-NO_EXPAND_LIBS = True - - ifdef JS_HAS_CTYPES - ifdef MOZ_NATIVE_FFI - LOCAL_INCLUDES = $(MOZ_FFI_CFLAGS) +-DIST_INSTALL = True +- + # Prepare self-hosted JS code for embedding + GENERATED_FILES += ['selfhosted.out.h'] + selfhosted = GENERATED_FILES['selfhosted.out.h'] Index: branches/2016Q2/www/firefox-esr/files/patch-bug826985 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug826985 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug826985 (revision 413772) @@ -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 -@@ -635,6 +635,7 @@ libgnomevfs/gnome-vfs-mime-handlers.h - libgnomevfs/gnome-vfs-mime-utils.h - libgnomevfs/gnome-vfs-ops.h - libgnomevfs/gnome-vfs-standard-callbacks.h +@@ -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', +@@ -75,6 +78,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', ++ ], ++ }], + ], -+ 'cflags_mozilla': [ -+ '$(MOZ_LIBV4L2_CFLAGS)', -+ ], -+ 'libraries': [ -+ '-lv4l2', -+ ], -+ }], -+ ], - }], # linux - ['OS=="mac"', { - 'sources': [ + }], # 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: branches/2016Q2/www/firefox-esr/files/patch-bug847568 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug847568 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug847568 (revision 413772) @@ -1,238 +1,257 @@ # 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) +@@ -49,6 +49,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 +@@ -1344,3 +1344,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 +@@ -7989,6 +7989,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) ++ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 1.1.0) +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) ++ #if !GR2_VERSION_REQUIRE(1,3,6) + #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', - ] +@@ -397,6 +397,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 -@@ -37,6 +37,9 @@ +@@ -1,6 +1,7 @@ + #!/bin/bash + + # Script used to update the Graphite2 library in the mozilla source tree ++# and bump version for --with-system-graphite2 + + # This script lives in gfx/graphite2, along with the library source, + # but must be run from the top level of the mozilla-central tree. +@@ -37,12 +38,16 @@ echo "See" $0 "for update procedure." >> #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/;" {} \; ++# chase version for --with-system-graphite2 +perl -p -i -e "s/[0-9]+\,[0-9]+\,[0-9]+/$RELEASE/ and tr/./,/ \ + if /GR2_VERSION_REQUIRE/" configure.in + # summarize what's been touched echo Updated to $RELEASE. echo Here is what changed in the gfx/graphite2 directory: + echo + +-hg stat gfx/graphite2 ++hg stat configure.in gfx/graphite2 + + echo + echo If gfx/graphite2/src/files.mk has changed, please make corresponding 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'] +@@ -134,6 +134,9 @@ if CONFIG['CLANG_CXX'] or CONFIG['CLANG_ + '-Wno-unused-private-field', + ] +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'] +@@ -752,6 +752,9 @@ if CONFIG['CLANG_CXX'] or CONFIG['CLANG_ + '-Wno-unused-private-field', + ] +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 -@@ -294,7 +294,13 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'andr - if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'qt'): - CXXFLAGS += CONFIG['MOZ_PANGO_CFLAGS'] +@@ -306,7 +306,13 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk + LOCAL_INCLUDES += CONFIG['SKIA_INCLUDES'] + -DEFINES['GRAPHITE2_STATIC'] = True +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + +if CONFIG['MOZ_NATIVE_GRAPHITE2']: + CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS'] +else: + DEFINES['GRAPHITE2_STATIC'] = True - if CONFIG['GKMEDIAS_SHARED_LIBRARY']: - DEFINES['OTS_DLL'] = True -diff --git intl/unicharutil/util/moz.build intl/unicharutil/util/moz.build + if CONFIG['CLANG_CXX']: + # Suppress warnings from Skia header files. index d736943..41a931f 100644 --- intl/unicharutil/util/moz.build +++ intl/unicharutil/util/moz.build -@@ -37,3 +37,6 @@ if CONFIG['_MSC_VER']: +@@ -44,4 +44,7 @@ if CONFIG['ENABLE_INTL_API']: + LOCAL_INCLUDES += CONFIG['MOZ_ICU_INCLUDES'] + USE_LIBS += ['icu'] - if CONFIG['ENABLE_INTL_API']: - CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS'] -+ +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] ++ + DIST_INSTALL = 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,6 +66,9 @@ 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': + LOCAL_INCLUDES += ['%' + '%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']: +@@ -231,6 +231,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: branches/2016Q2/www/firefox-esr/files/patch-bug981348 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug981348 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug981348 (revision 413772) @@ -1,41 +1,41 @@ diff --git dom/system/OSFileConstants.cpp dom/system/OSFileConstants.cpp index 4b21361..cb3be32 100644 --- dom/system/OSFileConstants.cpp +++ dom/system/OSFileConstants.cpp -@@ -596,7 +596,7 @@ static const dom::ConstantSpec gLibcProperties[] = +@@ -662,7 +662,7 @@ - { "OSFILE_SIZEOF_STATVFS", INT_TO_JSVAL(sizeof (struct statvfs)) }, + { "OSFILE_SIZEOF_STATVFS", JS::Int32Value(sizeof (struct statvfs)) }, -- { "OSFILE_OFFSETOF_STATVFS_F_BSIZE", INT_TO_JSVAL(offsetof (struct statvfs, f_bsize)) }, -+ { "OSFILE_OFFSETOF_STATVFS_F_FRSIZE", INT_TO_JSVAL(offsetof (struct statvfs, f_frsize)) }, - { "OSFILE_OFFSETOF_STATVFS_F_BAVAIL", INT_TO_JSVAL(offsetof (struct statvfs, f_bavail)) }, +- { "OSFILE_OFFSETOF_STATVFS_F_BSIZE", JS::Int32Value(offsetof (struct statvfs, f_bsize)) }, ++ { "OSFILE_OFFSETOF_STATVFS_F_FRSIZE", JS::Int32Value(offsetof (struct statvfs, f_frsize)) }, + { "OSFILE_OFFSETOF_STATVFS_F_BAVAIL", JS::Int32Value(offsetof (struct statvfs, f_bavail)) }, #endif // defined(XP_UNIX) diff --git toolkit/components/osfile/modules/osfile_unix_back.jsm toolkit/components/osfile/modules/osfile_unix_back.jsm index b59fca4..0cf220b 100644 --- toolkit/components/osfile/modules/osfile_unix_back.jsm +++ toolkit/components/osfile/modules/osfile_unix_back.jsm @@ -228,8 +228,8 @@ let statvfs = new SharedAll.HollowStructure("statvfs", Const.OSFILE_SIZEOF_STATVFS); - statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_BSIZE, - "f_bsize", Type.unsigned_long.implementation); + statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_FRSIZE, + "f_frsize", Type.unsigned_long.implementation); statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_BAVAIL, "f_bavail", Type.fsblkcnt_t.implementation); diff --git toolkit/components/osfile/modules/osfile_unix_front.jsm toolkit/components/osfile/modules/osfile_unix_front.jsm index 99e5e9b..de642c5 100644 --- toolkit/components/osfile/modules/osfile_unix_front.jsm +++ toolkit/components/osfile/modules/osfile_unix_front.jsm @@ -373,7 +373,7 @@ throw_on_negative("statvfs", UnixFile.statvfs(sourcePath, fileSystemInfoPtr)); let bytes = new Type.uint64_t.implementation( - fileSystemInfo.f_bsize * fileSystemInfo.f_bavail); + fileSystemInfo.f_frsize * fileSystemInfo.f_bavail); return bytes.value; }; Index: branches/2016Q2/www/firefox-esr/files/patch-bug991253 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-bug991253 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-bug991253 (revision 413772) @@ -1,17 +1,17 @@ ---- extensions/spellcheck/hunspell/src/mozHunspell.cpp~ -+++ extensions/spellcheck/hunspell/src/mozHunspell.cpp -@@ -400,6 +400,14 @@ mozHunspell::LoadDictionaryList(bool aNo +--- extensions/spellcheck/hunspell/glue/mozHunspell.cpp~ ++++ extensions/spellcheck/hunspell/glue/mozHunspell.cpp +@@ -392,6 +392,14 @@ mozHunspell::LoadDictionaryList(bool aNo } } + // load system hunspell dictionaries + nsCOMPtr hunDir; + NS_NewNativeLocalFile(NS_LITERAL_CSTRING("%%LOCALBASE%%/share/hunspell"), + true, getter_AddRefs(hunDir)); + if (hunDir) { + LoadDictionariesFromDir(hunDir); + } + // find dictionaries from extensions requiring restart nsCOMPtr dictDirs; rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY_LIST, Index: branches/2016Q2/www/firefox-esr/files/patch-config-baseconfig.mk =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-config-baseconfig.mk (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-config-baseconfig.mk (revision 413772) @@ -1,14 +1,17 @@ --- config/baseconfig.mk~ +++ config/baseconfig.mk -@@ -1,7 +1,7 @@ +@@ -2,10 +2,10 @@ + # directly in python/mozbuild/mozbuild/base.py for gmake validation. + # We thus use INCLUDED_AUTOCONF_MK to enable/disable some parts depending + # whether a normal build is happening or whether the check is running. -includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) +includedir := $(includedir)/%%MOZILLA%% +idldir = $(datadir)/idl/%%MOZILLA%% +installdir = $(libdir)/%%MOZILLA%% +sdkdir = $(libdir)/%%MOZILLA%% - ifndef TOP_DIST - TOP_DIST = dist - endif + ifeq (.,$(DEPTH)) + DIST = dist + else Index: branches/2016Q2/www/firefox-esr/files/patch-ijg-libjpeg =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-ijg-libjpeg (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-ijg-libjpeg (revision 413772) @@ -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: branches/2016Q2/www/firefox-esr/files/patch-modules-libpref-init-all.js =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-modules-libpref-init-all.js (nonexistent) +++ branches/2016Q2/www/firefox-esr/files/patch-modules-libpref-init-all.js (revision 413772) @@ -0,0 +1,15 @@ +--- modules/libpref/init/all.js.orig 2015-08-06 22:39:34 UTC ++++ modules/libpref/init/all.js +@@ -4052,7 +4052,12 @@ pref("layers.max-active", -1); + pref("layers.tiles.adjust", true); + + // Set the default values, and then override per-platform as needed ++#ifdef MOZ_TREE_CAIRO + pref("layers.offmainthreadcomposition.enabled", true); ++#else ++// Disable for system cairo on suspicion of causing random crashes ++pref("layers.offmainthreadcomposition.enabled", false); ++#endif + // Compositor target frame rate. NOTE: If vsync is enabled the compositor + // frame rate will still be capped. + // -1 -> default (match layout.frame_rate or 60 FPS) Property changes on: branches/2016Q2/www/firefox-esr/files/patch-modules-libpref-init-all.js ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2016Q2/www/firefox-esr/files/patch-toolkit_mozapps_installer_packager_mk =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-toolkit_mozapps_installer_packager_mk (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-toolkit_mozapps_installer_packager_mk (revision 413772) @@ -1,13 +1,13 @@ $OpenBSD: patch-toolkit_mozapps_installer_packager_mk,v 1.11 2012/06/11 15:29:56 landry Exp $ install headers/idl/sdk libs only if xulrunner --- toolkit/mozapps/installer/packager.mk.orig Fri Jun 1 14:04:20 2012 +++ toolkit/mozapps/installer/packager.mk Tue Jun 5 07:55:51 2012 -@@ -886,7 +886,7 @@ endif +@@ -127,7 +127,7 @@ endif $(NSINSTALL) -D $(DESTDIR)$(bindir) $(RM) -f $(DESTDIR)$(bindir)/$(MOZ_APP_NAME) ln -s $(installdir)/$(MOZ_APP_NAME) $(DESTDIR)$(bindir) -ifdef INSTALL_SDK # Here comes the hard part +ifeq ($(MOZ_APP_NAME),xulrunner) $(NSINSTALL) -D $(DESTDIR)$(includedir) (cd $(DIST)/include && tar $(TAR_CREATE_FLAGS) - .) | \ (cd $(DESTDIR)$(includedir) && tar -xf -) Index: branches/2016Q2/www/firefox-esr/files/patch-z-bug517422 =================================================================== --- branches/2016Q2/www/firefox-esr/files/patch-z-bug517422 (revision 413771) +++ branches/2016Q2/www/firefox-esr/files/patch-z-bug517422 (revision 413772) @@ -1,582 +1,444 @@ # 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) +@@ -77,6 +77,11 @@ 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']: +@@ -19,10 +19,16 @@ 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 +@@ -37,15 +46,15 @@ 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/libopus', - 'media/libtheora', -- 'media/libspeex_resampler', + '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 +@@ -1364,3 +1363,17 @@ 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}" ! +@@ -5223,6 +5223,111 @@ 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 Check for libSoundTouch +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)], ++[ --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) ++ PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.9.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 + ++if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then ++ AC_DEFINE(MOZ_NATIVE_SOUNDTOUCH) ++fi +AC_SUBST(MOZ_NATIVE_SOUNDTOUCH) + +dnl ======================================================== dnl = Disable VP8 decoder support dnl ======================================================== MOZ_ARG_DISABLE_BOOL(webm, +diff --git dom/media/AudioStream.cpp dom/media/AudioStream.cpp +index 2127256..1ec09fe 100644 +--- dom/media/AudioStream.cpp ++++ dom/media/AudioStream.cpp +@@ -129,7 +129,9 @@ AudioStream::AudioStream() + , mOutChannels(0) + , mWritten(0) + , mAudioClock(this) ++#ifndef MOZ_NATIVE_SOUNDTOUCH + , mTimeStretcher(nullptr) ++#endif + , mDumpFile(nullptr) + , mBytesPerFrame(0) + , mState(INITIALIZED) +@@ -152,9 +154,11 @@ AudioStream::~AudioStream() + if (mDumpFile) { + fclose(mDumpFile); + } ++#ifndef MOZ_NATIVE_SOUNDTOUCH + if (mTimeStretcher) { + soundtouch::destroySoundTouchObj(mTimeStretcher); + } ++#endif + } + + size_t +@@ -177,7 +181,11 @@ nsresult AudioStream::EnsureTimeStretcherInitializedUnlocked() + { + mMonitor.AssertCurrentThreadOwns(); + if (!mTimeStretcher) { ++#ifdef MOZ_NATIVE_SOUNDTOUCH ++ mTimeStretcher = new soundtouch::SoundTouch(); ++#else + mTimeStretcher = soundtouch::createSoundTouchObj(); ++#endif + mTimeStretcher->setSampleRate(mInRate); + mTimeStretcher->setChannels(mOutChannels); + mTimeStretcher->setPitch(1.0); diff --git dom/media/AudioStream.h dom/media/AudioStream.h -index 085676d..00c54fb 100644 +index a552e3e..02b80b1 100644 --- dom/media/AudioStream.h +++ dom/media/AudioStream.h -@@ -17,7 +17,7 @@ +@@ -15,7 +15,11 @@ + #include "mozilla/RefPtr.h" + #include "mozilla/UniquePtr.h" #include "CubebUtils.h" ++#ifdef MOZ_NATIVE_SOUNDTOUCH ++#include "soundtouch/SoundTouch.h" ++#else + #include "soundtouch/SoundTouchFactory.h" ++#endif - namespace soundtouch { --class SoundTouch; -+class MOZ_IMPORT_API SoundTouch; - } - namespace mozilla { + +@@ -277,7 +277,11 @@ private: + // Number of frames written to the buffers. + int64_t mWritten; + AudioClock mAudioClock; ++#ifdef MOZ_NATIVE_SOUNDTOUCH ++ nsAutoPtr mTimeStretcher; ++#else + soundtouch::SoundTouch* mTimeStretcher; ++#endif + + // Stream start time for stream open delay telemetry. + TimeStamp mStartTime; 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': +@@ -212,3 +212,18 @@ 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 +diff --git media/libsoundtouch/src/soundtouch_perms.h media/libsoundtouch/src/soundtouch_perms.h +index 0af2fe6..d80c145 100644 +--- media/libsoundtouch/src/soundtouch_perms.h ++++ media/libsoundtouch/src/soundtouch_perms.h +@@ -12,7 +12,9 @@ - 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. + #pragma GCC visibility push(default) + #include "SoundTouch.h" ++#ifndef MOZ_NATIVE_SOUNDTOUCH + #include "SoundTouchFactory.h" ++#endif + #pragma GCC visibility pop + + #endif // MOZILLA_SOUNDTOUCH_PERMS_H 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 -index bbc971c..6ed7e41 100644 ---- media/webrtc/signaling/test/moz.build -+++ media/webrtc/signaling/test/moz.build -@@ -127,6 +127,9 @@ if CONFIG['MOZ_ALSA']: - 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']: +@@ -178,6 +178,21 @@ 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: branches/2016Q2/www/firefox-esr-i18n/Makefile =================================================================== --- branches/2016Q2/www/firefox-esr-i18n/Makefile (revision 413771) +++ branches/2016Q2/www/firefox-esr-i18n/Makefile (revision 413772) @@ -1,90 +1,90 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= firefox -PORTVERSION= 38.7.1 +PORTVERSION= 45.1.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 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: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: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} 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}; { ${RM} -f $$_dir/${WDIR} ; }' ${_A} post-patch: ${FIND} ${WRKSRC} -name install.rdf -print0 | \ ${XARGS} -0L1 ${REINPLACE_CMD} -i '' -e '/ Index: branches/2016Q2/www/firefox-esr-i18n/Makefile.lang =================================================================== --- branches/2016Q2/www/firefox-esr-i18n/Makefile.lang (revision 413771) +++ branches/2016Q2/www/firefox-esr-i18n/Makefile.lang (revision 413772) @@ -1,291 +1,285 @@ # Created by: Koji Yokota # $FreeBSD$ FIREFOX_I18N_ALL_= ach af an ar as ast az be bg bn-BD bn-IN br bs ca cs \ cy da de dsb el en-GB en-US en-ZA eo es-AR es-CL \ - es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl \ + es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn \ gu-IN he hi-IN hr hsb hu hy-AM id is it ja kk km \ kn ko lij lt lv mai mk ml mr ms nb-NO nl nn-NO \ or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son sq \ - sr sv-SE ta te th tr uk vi xh zh-CN zh-TW + sr sv-SE ta te th tr uk uz vi xh zh-CN zh-TW .if defined(FIREFOX_I18N_ALL) || defined(PACKAGE_BUILDING) || target(package) FIREFOX_I18N= ${FIREFOX_I18N_ALL_} .else .if ${PORT_OPTIONS:MLANG_ACH} FIREFOX_I18N+= ach .endif .if ${PORT_OPTIONS:MLANG_AF} FIREFOX_I18N+= af .endif .if ${PORT_OPTIONS:MLANG_AN} FIREFOX_I18N+= an .endif .if ${PORT_OPTIONS:MLANG_AR} FIREFOX_I18N+= ar .endif .if ${PORT_OPTIONS:MLANG_AS} FIREFOX_I18N+= as .endif .if ${PORT_OPTIONS:MLANG_AST} FIREFOX_I18N+= ast .endif .if ${PORT_OPTIONS:MLANG_AZ} FIREFOX_I18N+= az .endif .if ${PORT_OPTIONS:MLANG_BE} FIREFOX_I18N+= be .endif .if ${PORT_OPTIONS:MLANG_BG} FIREFOX_I18N+= bg .endif .if ${PORT_OPTIONS:MLANG_BB} FIREFOX_I18N+= bn-BD .endif .if ${PORT_OPTIONS:MLANG_BN} FIREFOX_I18N+= bn-IN .endif .if ${PORT_OPTIONS:MLANG_BR} FIREFOX_I18N+= br .endif .if ${PORT_OPTIONS:MLANG_BS} FIREFOX_I18N+= bs .endif .if ${PORT_OPTIONS:MLANG_CA} FIREFOX_I18N+= ca .endif .if ${PORT_OPTIONS:MLANG_CS} FIREFOX_I18N+= cs .endif -.if ${PORT_OPTIONS:MLANG_CSB} -FIREFOX_I18N+= csb -.endif .if ${PORT_OPTIONS:MLANG_CY} FIREFOX_I18N+= cy .endif .if ${PORT_OPTIONS:MLANG_DA} FIREFOX_I18N+= da .endif .if ${PORT_OPTIONS:MLANG_DE} FIREFOX_I18N+= de .endif .if ${PORT_OPTIONS:MLANG_DSB} FIREFOX_I18N+= dsb .endif .if ${PORT_OPTIONS:MLANG_EL} FIREFOX_I18N+= el .endif .if ${PORT_OPTIONS:MLANG_GB} FIREFOX_I18N+= en-GB .endif .if ${PORT_OPTIONS:MLANG_US} FIREFOX_I18N+= en-US .endif .if ${PORT_OPTIONS:MLANG_ZA} FIREFOX_I18N+= en-ZA .endif .if ${PORT_OPTIONS:MLANG_EO} FIREFOX_I18N+= eo .endif .if ${PORT_OPTIONS:MLANG_SA} FIREFOX_I18N+= es-AR .endif .if ${PORT_OPTIONS:MLANG_SC} FIREFOX_I18N+= es-CL .endif .if ${PORT_OPTIONS:MLANG_ES} FIREFOX_I18N+= es-ES .endif .if ${PORT_OPTIONS:MLANG_SM} FIREFOX_I18N+= es-MX .endif .if ${PORT_OPTIONS:MLANG_ET} FIREFOX_I18N+= et .endif .if ${PORT_OPTIONS:MLANG_EU} FIREFOX_I18N+= eu .endif .if ${PORT_OPTIONS:MLANG_FA} FIREFOX_I18N+= fa .endif .if ${PORT_OPTIONS:MLANG_FF} FIREFOX_I18N+= ff .endif .if ${PORT_OPTIONS:MLANG_FI} FIREFOX_I18N+= fi .endif .if ${PORT_OPTIONS:MLANG_FR} FIREFOX_I18N+= fr .endif .if ${PORT_OPTIONS:MLANG_FY} FIREFOX_I18N+= fy-NL .endif .if ${PORT_OPTIONS:MLANG_GA} FIREFOX_I18N+= ga-IE .endif .if ${PORT_OPTIONS:MLANG_GD} FIREFOX_I18N+= gd .endif .if ${PORT_OPTIONS:MLANG_GL} FIREFOX_I18N+= gl .endif +.if ${PORT_OPTIONS:MLANG_GN} +FIREFOX_I18N+= gn +.endif .if ${PORT_OPTIONS:MLANG_GU} FIREFOX_I18N+= gu-IN .endif .if ${PORT_OPTIONS:MLANG_HE} FIREFOX_I18N+= he .endif .if ${PORT_OPTIONS:MLANG_HI} FIREFOX_I18N+= hi-IN .endif .if ${PORT_OPTIONS:MLANG_HR} FIREFOX_I18N+= hr .endif .if ${PORT_OPTIONS:MLANG_HSB} FIREFOX_I18N+= hsb .endif .if ${PORT_OPTIONS:MLANG_HU} FIREFOX_I18N+= hu .endif .if ${PORT_OPTIONS:MLANG_AM} FIREFOX_I18N+= hy-AM .endif .if ${PORT_OPTIONS:MLANG_ID} FIREFOX_I18N+= id .endif .if ${PORT_OPTIONS:MLANG_IS} FIREFOX_I18N+= is .endif .if ${PORT_OPTIONS:MLANG_IT} FIREFOX_I18N+= it .endif .if ${PORT_OPTIONS:MLANG_JA} FIREFOX_I18N+= ja .endif .if ${PORT_OPTIONS:MLANG_KK} FIREFOX_I18N+= kk .endif .if ${PORT_OPTIONS:MLANG_KM} FIREFOX_I18N+= km .endif .if ${PORT_OPTIONS:MLANG_KN} FIREFOX_I18N+= kn .endif .if ${PORT_OPTIONS:MLANG_KO} FIREFOX_I18N+= ko .endif -.if ${PORT_OPTIONS:MLANG_KU} -FIREFOX_I18N+= ku -.endif .if ${PORT_OPTIONS:MLANG_LIJ} FIREFOX_I18N+= lij .endif .if ${PORT_OPTIONS:MLANG_LT} FIREFOX_I18N+= lt .endif .if ${PORT_OPTIONS:MLANG_LV} FIREFOX_I18N+= lv .endif .if ${PORT_OPTIONS:MLANG_MAI} FIREFOX_I18N+= mai .endif .if ${PORT_OPTIONS:MLANG_MK} FIREFOX_I18N+= mk .endif .if ${PORT_OPTIONS:MLANG_ML} FIREFOX_I18N+= ml .endif .if ${PORT_OPTIONS:MLANG_MR} FIREFOX_I18N+= mr .endif .if ${PORT_OPTIONS:MLANG_MS} FIREFOX_I18N+= ms .endif .if ${PORT_OPTIONS:MLANG_NB} FIREFOX_I18N+= nb-NO .endif .if ${PORT_OPTIONS:MLANG_NL} FIREFOX_I18N+= nl .endif .if ${PORT_OPTIONS:MLANG_NN} FIREFOX_I18N+= nn-NO .endif .if ${PORT_OPTIONS:MLANG_OR} FIREFOX_I18N+= or .endif .if ${PORT_OPTIONS:MLANG_PA} FIREFOX_I18N+= pa-IN .endif .if ${PORT_OPTIONS:MLANG_PL} FIREFOX_I18N+= pl .endif .if ${PORT_OPTIONS:MLANG_PBR} FIREFOX_I18N+= pt-BR .endif .if ${PORT_OPTIONS:MLANG_PT} FIREFOX_I18N+= pt-PT .endif .if ${PORT_OPTIONS:MLANG_RM} FIREFOX_I18N+= rm .endif .if ${PORT_OPTIONS:MLANG_RO} FIREFOX_I18N+= ro .endif .if ${PORT_OPTIONS:MLANG_RU} FIREFOX_I18N+= ru .endif .if ${PORT_OPTIONS:MLANG_SI} FIREFOX_I18N+= si .endif .if ${PORT_OPTIONS:MLANG_SK} FIREFOX_I18N+= sk .endif -.if ${PORT_OPTIONS:MLANG_SON} -FIREFOX_I18N+= son -.endif .if ${PORT_OPTIONS:MLANG_SL} FIREFOX_I18N+= sl .endif +.if ${PORT_OPTIONS:MLANG_SON} +FIREFOX_I18N+= son +.endif .if ${PORT_OPTIONS:MLANG_SQ} FIREFOX_I18N+= sq .endif .if ${PORT_OPTIONS:MLANG_SR} FIREFOX_I18N+= sr .endif .if ${PORT_OPTIONS:MLANG_SV} FIREFOX_I18N+= sv-SE .endif -.if ${PORT_OPTIONS:MLANG_SW} -FIREFOX_I18N+= sw -.endif .if ${PORT_OPTIONS:MLANG_TA} FIREFOX_I18N+= ta .endif .if ${PORT_OPTIONS:MLANG_TE} FIREFOX_I18N+= te .endif .if ${PORT_OPTIONS:MLANG_TH} FIREFOX_I18N+= th .endif .if ${PORT_OPTIONS:MLANG_TR} FIREFOX_I18N+= tr .endif .if ${PORT_OPTIONS:MLANG_UK} FIREFOX_I18N+= uk .endif +.if ${PORT_OPTIONS:MLANG_UZ} +FIREFOX_I18N+= uz +.endif .if ${PORT_OPTIONS:MLANG_VI} FIREFOX_I18N+= vi .endif .if ${PORT_OPTIONS:MLANG_XH} FIREFOX_I18N+= xh .endif .if ${PORT_OPTIONS:MLANG_CN} FIREFOX_I18N+= zh-CN .endif .if ${PORT_OPTIONS:MLANG_TW} FIREFOX_I18N+= zh-TW -.endif -.if ${PORT_OPTIONS:MLANG_ZU} -FIREFOX_I18N+= zu .endif .endif Index: branches/2016Q2/www/firefox-esr-i18n/Makefile.option =================================================================== --- branches/2016Q2/www/firefox-esr-i18n/Makefile.option (revision 413771) +++ branches/2016Q2/www/firefox-esr-i18n/Makefile.option (revision 413772) @@ -1,111 +1,114 @@ # Created by: Koji Yokota # $FreeBSD$ +# this is sorted on the name of the xpi files, not the option name OPTIONS_DEFINE= LANG_ACH \ LANG_AF \ LANG_AN \ - LANG_SQ \ LANG_AR \ LANG_AS \ - LANG_AM \ LANG_AST \ LANG_AZ \ - LANG_EU \ - LANG_BN \ + LANG_BE \ + LANG_BG \ LANG_BB \ - LANG_BS \ + LANG_BN \ LANG_BR \ - LANG_BG \ - LANG_BE \ + LANG_BS \ LANG_CA \ - LANG_CN \ LANG_CS \ + LANG_CY \ LANG_DA \ - LANG_NL \ + LANG_DE \ + LANG_DSB \ + LANG_EL \ LANG_GB \ LANG_US \ + LANG_ZA \ LANG_EO \ + LANG_SA \ + LANG_SC \ + LANG_ES \ + LANG_SM \ LANG_ET \ - LANG_GL \ - LANG_DE \ - LANG_DSB \ - LANG_EL \ - LANG_GU \ + LANG_EU \ + LANG_FA \ LANG_FF \ LANG_FI \ LANG_FR \ LANG_FY \ LANG_GA \ LANG_GD \ + LANG_GL \ + LANG_GN \ + LANG_GU \ LANG_HE \ LANG_HI \ LANG_HR \ LANG_HSB \ LANG_HU \ - LANG_IS \ + LANG_AM \ LANG_ID \ + LANG_IS \ LANG_IT \ LANG_JA \ - LANG_KN \ LANG_KK \ LANG_KM \ + LANG_KN \ LANG_KO \ - LANG_LV \ - LANG_LT \ LANG_LIJ \ - LANG_MK \ + LANG_LT \ + LANG_LV \ LANG_MAI \ + LANG_MK \ LANG_ML \ LANG_MR \ - LANG_MN \ LANG_MS \ LANG_NB \ + LANG_NL \ LANG_NN \ LANG_OR \ - LANG_FA \ + LANG_PA \ LANG_PL \ - LANG_PT \ LANG_PBR\ - LANG_PA \ - LANG_RO \ + LANG_PT \ LANG_RM \ + LANG_RO \ LANG_RU \ - LANG_SR \ LANG_SI \ - LANG_ES \ - LANG_SON \ - LANG_SA \ - LANG_SC \ - LANG_SM \ LANG_SK \ LANG_SL \ + LANG_SON \ + LANG_SQ \ + LANG_SR \ LANG_SV \ - LANG_TW \ LANG_TA \ LANG_TE \ LANG_TH \ LANG_TR \ LANG_UK \ + LANG_UZ \ LANG_VI \ - LANG_CY \ LANG_XH \ - LANG_ZA \ - LANG_ZU + LANG_CN \ + LANG_TW OPTIONS_DEFAULT=LANG_AR LANG_BN LANG_BR LANG_CN LANG_ET LANG_DE LANG_FR \ LANG_HI LANG_ID LANG_IT LANG_JA LANG_KO LANG_MK LANG_MR \ - LANG_MN LANG_PBR LANG_PA LANG_RU LANG_ES LANG_SON LANG_TE + LANG_PBR LANG_PA LANG_RU LANG_ES LANG_SON LANG_TE LANG_ACH_DESC?= Acholi language support LANG_AN_DESC?= Aragonese language support LANG_AS_DESC?= Assamese language support LANG_AZ_DESC?= Azerbaijani language support LANG_CSB_DESC?= Kashubian language support LANG_DSB_DESC?= Lower Sorbian language support LANG_FF_DESC?= Fulah language support +LANG_GN_DESC?= Guarani (Paraguay) language support LANG_HSB_DESC?= Upper Sorbian language support LANG_KM_DESC?= Khmer language support LANG_LIJ_DESC?= Ligurian (Genoa) language support LANG_MS_DESC?= Malay language support LANG_SW_DESC?= Swahili language support +LANG_UZ_DESC?= Uzbek language support LANG_XH_DESC?= Xhosa language support Index: branches/2016Q2/www/firefox-esr-i18n/distinfo =================================================================== --- branches/2016Q2/www/firefox-esr-i18n/distinfo (revision 413771) +++ branches/2016Q2/www/firefox-esr-i18n/distinfo (revision 413772) @@ -1,176 +1,180 @@ -SHA256 (xpi/firefox-38.7.1/ach.xpi) = e426d4a42a3a5922ebfce36791f3150eec4be09b82c48a24cff82d54231ab1b1 -SIZE (xpi/firefox-38.7.1/ach.xpi) = 477969 -SHA256 (xpi/firefox-38.7.1/af.xpi) = 495ba9aa6d33b913ceb89be4eff01746574b6315d87b038ae9229d9ba0217adb -SIZE (xpi/firefox-38.7.1/af.xpi) = 483326 -SHA256 (xpi/firefox-38.7.1/an.xpi) = 9e3c9588b363b08ec230bf0518a6709a84d9efe0cd89f4577147e91f7e223fd7 -SIZE (xpi/firefox-38.7.1/an.xpi) = 461423 -SHA256 (xpi/firefox-38.7.1/ar.xpi) = 49035a4c7bbc4ec29388a531d13a73c6d6c69dcbcb55fcfd0f09866378a795d0 -SIZE (xpi/firefox-38.7.1/ar.xpi) = 516495 -SHA256 (xpi/firefox-38.7.1/as.xpi) = 245b472e0a22f66afb2aa1b5c5121be45a51137e5b356be40c2e792189593af9 -SIZE (xpi/firefox-38.7.1/as.xpi) = 509574 -SHA256 (xpi/firefox-38.7.1/ast.xpi) = 54915a1d3d4e241cfa11a41384db5d50cbf13e2053b74ff38d49480550d4f0b8 -SIZE (xpi/firefox-38.7.1/ast.xpi) = 397202 -SHA256 (xpi/firefox-38.7.1/az.xpi) = f0600dcc8b1b7e0d871d402aa7f93e16796b1560d329bb9e93c65649c6117ba3 -SIZE (xpi/firefox-38.7.1/az.xpi) = 489153 -SHA256 (xpi/firefox-38.7.1/be.xpi) = 6b36c34fc846032af3ef67707662c997704d6a410c1d672c2cda7cd7c172d6b6 -SIZE (xpi/firefox-38.7.1/be.xpi) = 441057 -SHA256 (xpi/firefox-38.7.1/bg.xpi) = ffb7d4db11f3fa641281cdfa2eb146971dba5b5c74c0fc84401ee5f5779d6f52 -SIZE (xpi/firefox-38.7.1/bg.xpi) = 487819 -SHA256 (xpi/firefox-38.7.1/bn-BD.xpi) = b77c6eb0c696926727a792b0fc60f95713b4b999d54fc7708804bee5abd11213 -SIZE (xpi/firefox-38.7.1/bn-BD.xpi) = 528690 -SHA256 (xpi/firefox-38.7.1/bn-IN.xpi) = d7558c09adcc9c26cdf0ff1d5e66813336c8e1e50dfe759510553788e0bc887a -SIZE (xpi/firefox-38.7.1/bn-IN.xpi) = 527927 -SHA256 (xpi/firefox-38.7.1/br.xpi) = 75fa3b403ba6be699e7dce4d189231c6ce6c50d0ad44e672140f5ec680635100 -SIZE (xpi/firefox-38.7.1/br.xpi) = 441962 -SHA256 (xpi/firefox-38.7.1/bs.xpi) = 2cc60c9216dc38d7b28a7fd1594d1755c69378ec05c9edcdaef5b6de9ed3a11c -SIZE (xpi/firefox-38.7.1/bs.xpi) = 485305 -SHA256 (xpi/firefox-38.7.1/ca.xpi) = febf01c4ebe3ed48ced0bd4309f0baa1423fb42e992286669d32ac6022ad5625 -SIZE (xpi/firefox-38.7.1/ca.xpi) = 458092 -SHA256 (xpi/firefox-38.7.1/cs.xpi) = 13e71176b8ec9d27858aa9536e3c702b1e30b700f9e68016beb78d29353cd838 -SIZE (xpi/firefox-38.7.1/cs.xpi) = 446726 -SHA256 (xpi/firefox-38.7.1/cy.xpi) = 4b23251868fbaf581186e19f20b5fc661ea5f015e769b782470ed0790ab2c25f -SIZE (xpi/firefox-38.7.1/cy.xpi) = 444385 -SHA256 (xpi/firefox-38.7.1/da.xpi) = 54ee9948a047eec9827abf0ea62f4f80f963edde1e681f7a3e8b22a518468c32 -SIZE (xpi/firefox-38.7.1/da.xpi) = 450762 -SHA256 (xpi/firefox-38.7.1/de.xpi) = 02ab0f297dac17e189eb8aa19c5a11e5a7f7d93a59c4734847ccdbe6c079f4d3 -SIZE (xpi/firefox-38.7.1/de.xpi) = 451629 -SHA256 (xpi/firefox-38.7.1/dsb.xpi) = 995d87f77fd6da8c3ae62c1dceb6f74caf32c0b135b0852f4259e6fba31402f8 -SIZE (xpi/firefox-38.7.1/dsb.xpi) = 470923 -SHA256 (xpi/firefox-38.7.1/el.xpi) = f7798d14e6b623a4390d2eb6aebb5cdcf0ac14a538d0aa60d0f68d6400110201 -SIZE (xpi/firefox-38.7.1/el.xpi) = 498370 -SHA256 (xpi/firefox-38.7.1/en-GB.xpi) = 299005aa0b813bf6ce711214abd89f116a907be84e14076620bc54d54b0e5fd1 -SIZE (xpi/firefox-38.7.1/en-GB.xpi) = 437845 -SHA256 (xpi/firefox-38.7.1/en-US.xpi) = 2850454d1cea1aba064f69e5d3b845ae3591f6b65b54011c4e16f7816df22b8e -SIZE (xpi/firefox-38.7.1/en-US.xpi) = 469718 -SHA256 (xpi/firefox-38.7.1/en-ZA.xpi) = e749074c9260be3eecc42976c06341920b93015a40f2564f9e04a6de7f9b47d0 -SIZE (xpi/firefox-38.7.1/en-ZA.xpi) = 439925 -SHA256 (xpi/firefox-38.7.1/eo.xpi) = 6b7c10f8a21a5038f3a770ebfb37b10207ac9ce2702abfefe8f7f4225223a84d -SIZE (xpi/firefox-38.7.1/eo.xpi) = 488369 -SHA256 (xpi/firefox-38.7.1/es-AR.xpi) = 6d69d7543694e5dbc79918b630c0ebed94c7cb67dc3ee6cf93f05accc26af920 -SIZE (xpi/firefox-38.7.1/es-AR.xpi) = 453983 -SHA256 (xpi/firefox-38.7.1/es-CL.xpi) = cada53ffc8c1a0d35cf16fa8990d1e4678937375fefaf5b464a6c0d6e0a4d398 -SIZE (xpi/firefox-38.7.1/es-CL.xpi) = 384678 -SHA256 (xpi/firefox-38.7.1/es-ES.xpi) = 6cac270d43a71cbf833329197bb5d965be231bb5c67311a005861c347b64659f -SIZE (xpi/firefox-38.7.1/es-ES.xpi) = 374073 -SHA256 (xpi/firefox-38.7.1/es-MX.xpi) = a54e0d916a2b5b0b81e68f24a3f0263458311435204013fc1c09aed94161bea5 -SIZE (xpi/firefox-38.7.1/es-MX.xpi) = 457049 -SHA256 (xpi/firefox-38.7.1/et.xpi) = 0577f74dac4d36ae9ed87aeffb2e4d6f9cfb2286fafd6d8b45378d6aec7919a8 -SIZE (xpi/firefox-38.7.1/et.xpi) = 443229 -SHA256 (xpi/firefox-38.7.1/eu.xpi) = 13e617b0e8476d6ea2353414f5157c8f2494c2a91a06476568ecc513abdd2bbc -SIZE (xpi/firefox-38.7.1/eu.xpi) = 466555 -SHA256 (xpi/firefox-38.7.1/fa.xpi) = e41d3fa8b4af987a567faffb61199417bb6fc7c691e8e22865d5a5cf73074506 -SIZE (xpi/firefox-38.7.1/fa.xpi) = 518282 -SHA256 (xpi/firefox-38.7.1/ff.xpi) = c44d2a4fa2e780027332c2e987a919c4b515f79b9cac7bf1a919c336c8602673 -SIZE (xpi/firefox-38.7.1/ff.xpi) = 454587 -SHA256 (xpi/firefox-38.7.1/fi.xpi) = 4cca1a5987ba25b7d516e006e7286bd88b9d87db24b295a21cdafeaec1d8b42c -SIZE (xpi/firefox-38.7.1/fi.xpi) = 444852 -SHA256 (xpi/firefox-38.7.1/fr.xpi) = 3307e02df045e91d4406e1008fca298fd386f707899914052faee11a10cb79fe -SIZE (xpi/firefox-38.7.1/fr.xpi) = 461402 -SHA256 (xpi/firefox-38.7.1/fy-NL.xpi) = 2dfe6582cf7f4b38bf7ab1ba4d929764144d9fe0d9981f28a0371a3c201a6e10 -SIZE (xpi/firefox-38.7.1/fy-NL.xpi) = 455541 -SHA256 (xpi/firefox-38.7.1/ga-IE.xpi) = d5f98c255c96505b2303780ae939db1d63280b8d757c1a33308b0fba3e6a83d3 -SIZE (xpi/firefox-38.7.1/ga-IE.xpi) = 469623 -SHA256 (xpi/firefox-38.7.1/gd.xpi) = 0c34cec01771932438fa78457a65bb320d5246e003861caa4a2b099f5bde7194 -SIZE (xpi/firefox-38.7.1/gd.xpi) = 454616 -SHA256 (xpi/firefox-38.7.1/gl.xpi) = 61a24fc4decd3fc98815784183e98c9d631fb0569fc8342c2d052585c5367264 -SIZE (xpi/firefox-38.7.1/gl.xpi) = 448925 -SHA256 (xpi/firefox-38.7.1/gu-IN.xpi) = 404df6179b7d422ca170c8b5fb473a3a4deb31382876f2944f311ab716bb261e -SIZE (xpi/firefox-38.7.1/gu-IN.xpi) = 477980 -SHA256 (xpi/firefox-38.7.1/he.xpi) = fd43f7c6721b6b33fbe65e64b6b6bdcc8c64d1801ece8cb30ac6828e90ed682f -SIZE (xpi/firefox-38.7.1/he.xpi) = 486786 -SHA256 (xpi/firefox-38.7.1/hi-IN.xpi) = 9330e532d897056aad75c33ac89c34e947d45ba902679d67b02201936b4ccdc6 -SIZE (xpi/firefox-38.7.1/hi-IN.xpi) = 508167 -SHA256 (xpi/firefox-38.7.1/hr.xpi) = fa418bf4eddc971c53d9e2f2dc46726df63820fd196bc17b4c51f9b19fcbf6bf -SIZE (xpi/firefox-38.7.1/hr.xpi) = 478272 -SHA256 (xpi/firefox-38.7.1/hsb.xpi) = 9a59584de8d1339950c085e486d79a59dc3a40c04cceaa06ac2fc335fdbdfb7f -SIZE (xpi/firefox-38.7.1/hsb.xpi) = 468719 -SHA256 (xpi/firefox-38.7.1/hu.xpi) = 8116c880098c2efa89561edf0ef0541cea1a1d742dbfc6df97747c3e7d8b4003 -SIZE (xpi/firefox-38.7.1/hu.xpi) = 453555 -SHA256 (xpi/firefox-38.7.1/hy-AM.xpi) = fb2c52d224128732dc2efa22661bc74ccfab729a263ea92979e0007a151ae80d -SIZE (xpi/firefox-38.7.1/hy-AM.xpi) = 534265 -SHA256 (xpi/firefox-38.7.1/id.xpi) = 07b83d2cac216a8e395b78f816d29c812af142a59c63543785dc2b16f8242e39 -SIZE (xpi/firefox-38.7.1/id.xpi) = 431489 -SHA256 (xpi/firefox-38.7.1/is.xpi) = 4e4d5d646d985da2f1c2199919edfd123153229109137aaefee806d7aadb6136 -SIZE (xpi/firefox-38.7.1/is.xpi) = 485128 -SHA256 (xpi/firefox-38.7.1/it.xpi) = f130c735897f87788add259808b1ba63597c563d16e13718f1c8cc252435afdc -SIZE (xpi/firefox-38.7.1/it.xpi) = 368409 -SHA256 (xpi/firefox-38.7.1/ja.xpi) = a8dfde526878ec3139641b2684b33374b3c8efe2437daa3b61eae55435a241fb -SIZE (xpi/firefox-38.7.1/ja.xpi) = 479113 -SHA256 (xpi/firefox-38.7.1/kk.xpi) = 575076851a9ced7683cca17e642c377cceeedc645bd39d065a603d6acbd94762 -SIZE (xpi/firefox-38.7.1/kk.xpi) = 503568 -SHA256 (xpi/firefox-38.7.1/km.xpi) = e7b96756bf6fa67491b52b36bf4278b318fdf19c17f8b229a537a9a7d991fcf2 -SIZE (xpi/firefox-38.7.1/km.xpi) = 565674 -SHA256 (xpi/firefox-38.7.1/kn.xpi) = a045b0e508b2b25b69aa5d59a0837de0dcff30e89c699ce2a679f8681a38b8e2 -SIZE (xpi/firefox-38.7.1/kn.xpi) = 533464 -SHA256 (xpi/firefox-38.7.1/ko.xpi) = a1eec2480d601ddd5457e2db32e093ea1fa2afb86f5e994efcbdb1cb3a04ce30 -SIZE (xpi/firefox-38.7.1/ko.xpi) = 460854 -SHA256 (xpi/firefox-38.7.1/lij.xpi) = 9976a055215e903deca570ea02d453747319629408bcd8b589f8d71848c391f7 -SIZE (xpi/firefox-38.7.1/lij.xpi) = 444241 -SHA256 (xpi/firefox-38.7.1/lt.xpi) = e6c4d6219fe9615ceeaf500e3307ea2e918e596ebf302bedf3621e39f08b4b81 -SIZE (xpi/firefox-38.7.1/lt.xpi) = 486452 -SHA256 (xpi/firefox-38.7.1/lv.xpi) = 5ddd9963c85db2e99bb26908e767ccb4b079fe87ee08feb15e62d5bf8eb56414 -SIZE (xpi/firefox-38.7.1/lv.xpi) = 467198 -SHA256 (xpi/firefox-38.7.1/mai.xpi) = 73064db0dccc3127d9998b04537d236a288538595e06c0f5d8b6a1712669cb57 -SIZE (xpi/firefox-38.7.1/mai.xpi) = 514665 -SHA256 (xpi/firefox-38.7.1/mk.xpi) = f01ac3cd7c09b8855df905acac57daf053f0e5dbb476f8c58fea23c3034ccedf -SIZE (xpi/firefox-38.7.1/mk.xpi) = 529205 -SHA256 (xpi/firefox-38.7.1/ml.xpi) = 7c5b7d6e67a86df253b8f865035a049cc8541d35d7741029faf5ec4f285fbd88 -SIZE (xpi/firefox-38.7.1/ml.xpi) = 528919 -SHA256 (xpi/firefox-38.7.1/mr.xpi) = 903e11f0be03982cb00da9e709469c98f321ebb96cd416258b3c5ed807c54c29 -SIZE (xpi/firefox-38.7.1/mr.xpi) = 505961 -SHA256 (xpi/firefox-38.7.1/ms.xpi) = 5b9f3769a67c0211eaba899a03ad5bd54aea33a4759c342dc1db57b43342562e -SIZE (xpi/firefox-38.7.1/ms.xpi) = 489872 -SHA256 (xpi/firefox-38.7.1/nb-NO.xpi) = 34c8aa37d1e6c914ad97aba939ce26800d71d96ed264247afe56767c57bf522c -SIZE (xpi/firefox-38.7.1/nb-NO.xpi) = 444176 -SHA256 (xpi/firefox-38.7.1/nl.xpi) = 0f794624e2e68eaeb33c2d225dbdae3ff407c887549f4969ff702f886fb68c36 -SIZE (xpi/firefox-38.7.1/nl.xpi) = 443994 -SHA256 (xpi/firefox-38.7.1/nn-NO.xpi) = 743ea205e27aefd8eccaa22aa92f507a7a2e87a87c6c0cc032faff1eac24142e -SIZE (xpi/firefox-38.7.1/nn-NO.xpi) = 438451 -SHA256 (xpi/firefox-38.7.1/or.xpi) = bc6db8fa74f36e725a5c3b13f81240353dcb5dace0280b045b70a7e71788df1b -SIZE (xpi/firefox-38.7.1/or.xpi) = 527049 -SHA256 (xpi/firefox-38.7.1/pa-IN.xpi) = b18721f0e3ff559201179007b6e2a4bc52528f5d4fd4b633472456a2d9394526 -SIZE (xpi/firefox-38.7.1/pa-IN.xpi) = 493722 -SHA256 (xpi/firefox-38.7.1/pl.xpi) = 126d7277b112cd5e1016e970dd966002a00c1bcc168ebb076380eba0b93b8e9b -SIZE (xpi/firefox-38.7.1/pl.xpi) = 406566 -SHA256 (xpi/firefox-38.7.1/pt-BR.xpi) = a50abb5b26d99b2015993d38aa2736b049e9784375f29c4340c67b5ce5901e9e -SIZE (xpi/firefox-38.7.1/pt-BR.xpi) = 459810 -SHA256 (xpi/firefox-38.7.1/pt-PT.xpi) = e74a1044b30ce08b536840eb97fc41322ffbbfabb8d65f32f86552f9055adca9 -SIZE (xpi/firefox-38.7.1/pt-PT.xpi) = 439975 -SHA256 (xpi/firefox-38.7.1/rm.xpi) = 23a00150ed90672462ce64646b960afe7e93c365407c900d64b5efdefc9658b0 -SIZE (xpi/firefox-38.7.1/rm.xpi) = 446287 -SHA256 (xpi/firefox-38.7.1/ro.xpi) = 5ec5d1365df706e1cb24877df22ac97e7aaa982af951e99e4318d05a6a4c9164 -SIZE (xpi/firefox-38.7.1/ro.xpi) = 494078 -SHA256 (xpi/firefox-38.7.1/ru.xpi) = b993cbfaa34fc2c2b06993ab1a1b660d9f9c58830ce0c1ef6afa6eb80e566932 -SIZE (xpi/firefox-38.7.1/ru.xpi) = 414419 -SHA256 (xpi/firefox-38.7.1/si.xpi) = 976713479c27a6e27eb8aa1264c690e83ad006be284e28e4762f9b76ddfd2170 -SIZE (xpi/firefox-38.7.1/si.xpi) = 537393 -SHA256 (xpi/firefox-38.7.1/sk.xpi) = d85f0a9f7ed32c93c9006af642e1442aa65860a8fe0252f1282575f64f790305 -SIZE (xpi/firefox-38.7.1/sk.xpi) = 469436 -SHA256 (xpi/firefox-38.7.1/sl.xpi) = 788ab280792ffe954cc410191f30f358e74b8f786435616d62c371087359f799 -SIZE (xpi/firefox-38.7.1/sl.xpi) = 441594 -SHA256 (xpi/firefox-38.7.1/son.xpi) = eec4af39f46367dcc9c282e298e6b947b4da62e8e2f4ee75c03de11f277d11e5 -SIZE (xpi/firefox-38.7.1/son.xpi) = 449268 -SHA256 (xpi/firefox-38.7.1/sq.xpi) = 7264bc57b263ff32a5e1a93e8047cdee44fc6bd78be737ffd03648d2485a9aa1 -SIZE (xpi/firefox-38.7.1/sq.xpi) = 486076 -SHA256 (xpi/firefox-38.7.1/sr.xpi) = b92988b1bee95773e35639ed3f02db267916bc2cff8a71bf02aab38fa1cab520 -SIZE (xpi/firefox-38.7.1/sr.xpi) = 479419 -SHA256 (xpi/firefox-38.7.1/sv-SE.xpi) = 980c79937cdd273c0275731bd26c03d57e82c8a5e0d0fb79b0dbd0a25b606ab8 -SIZE (xpi/firefox-38.7.1/sv-SE.xpi) = 452633 -SHA256 (xpi/firefox-38.7.1/ta.xpi) = b0a828f1f077ebbedd6618e85de5172f2f51f4baaf13acfedf7b5d94fbf6f85c -SIZE (xpi/firefox-38.7.1/ta.xpi) = 506607 -SHA256 (xpi/firefox-38.7.1/te.xpi) = ed56af85b5ae041aa56986688d51e1f14ffe210360483e744c1350508961a865 -SIZE (xpi/firefox-38.7.1/te.xpi) = 526250 -SHA256 (xpi/firefox-38.7.1/th.xpi) = 45c2369c227ccdd786cd9e99bfe3ef53f98bf8d86c17286ab7182c60b66bb042 -SIZE (xpi/firefox-38.7.1/th.xpi) = 534270 -SHA256 (xpi/firefox-38.7.1/tr.xpi) = 0bb028b144c5cda6b0d310b91b1312e591e18c91db0b223a037b18e0cbe34f83 -SIZE (xpi/firefox-38.7.1/tr.xpi) = 481076 -SHA256 (xpi/firefox-38.7.1/uk.xpi) = 2fa352e22e30f6ad80c4884ab85b9036483223b17470cf0d559875c9da1b815a -SIZE (xpi/firefox-38.7.1/uk.xpi) = 493313 -SHA256 (xpi/firefox-38.7.1/vi.xpi) = e44d8ad1601ccda0f534ae5a7c5afbbca89723ab4dd35c54ff917fed15112914 -SIZE (xpi/firefox-38.7.1/vi.xpi) = 467504 -SHA256 (xpi/firefox-38.7.1/xh.xpi) = e758251a6189df898e7eaf67a794d5160e82b0a94a703b1821f4dc6e0cdb86fd -SIZE (xpi/firefox-38.7.1/xh.xpi) = 450242 -SHA256 (xpi/firefox-38.7.1/zh-CN.xpi) = 8c99716132f6268368d632e150cb77ad43e4a2374f85566fccbbe88dcbf76512 -SIZE (xpi/firefox-38.7.1/zh-CN.xpi) = 488276 -SHA256 (xpi/firefox-38.7.1/zh-TW.xpi) = e41aa8a9b5cd65abaca3735e2a87065671d1fc30b7627187ca1e4353290549f0 -SIZE (xpi/firefox-38.7.1/zh-TW.xpi) = 467843 +SHA256 (xpi/firefox-45.1.0/ach.xpi) = 520703fb2e195a2ed247633062cb0bbb5aa4adb090abd00f83ed7fcebce532b4 +SIZE (xpi/firefox-45.1.0/ach.xpi) = 426525 +SHA256 (xpi/firefox-45.1.0/af.xpi) = 4e830d0c8fd8d2be20de9bc76484b5517191c582bfc3ec8fd049f80d101905f8 +SIZE (xpi/firefox-45.1.0/af.xpi) = 439350 +SHA256 (xpi/firefox-45.1.0/an.xpi) = dacee584b408755b199e91cc302eae5819ce362d5177633ae4da67d277767e32 +SIZE (xpi/firefox-45.1.0/an.xpi) = 449031 +SHA256 (xpi/firefox-45.1.0/ar.xpi) = ffd15f00739b1add480594933b14af7ed6f1a18be9d9570e5d55f06dcdad211f +SIZE (xpi/firefox-45.1.0/ar.xpi) = 474955 +SHA256 (xpi/firefox-45.1.0/as.xpi) = 5844b82bb60165784c0d0066ca03d6149997854b241712d67675568684db2749 +SIZE (xpi/firefox-45.1.0/as.xpi) = 483091 +SHA256 (xpi/firefox-45.1.0/ast.xpi) = 8387356f83db26385201ca706b1de8d870ccf74647cf64c3db99c430e53757ca +SIZE (xpi/firefox-45.1.0/ast.xpi) = 419244 +SHA256 (xpi/firefox-45.1.0/az.xpi) = 757612b2ab3d7a0174f77fba2fc79c36012ea81c4d32f70368a10d2a4ad913da +SIZE (xpi/firefox-45.1.0/az.xpi) = 464012 +SHA256 (xpi/firefox-45.1.0/be.xpi) = fa57643a1c050dd4b5d37a5302348ef86dd0f97d718ff42ae2fb65ce49514156 +SIZE (xpi/firefox-45.1.0/be.xpi) = 442614 +SHA256 (xpi/firefox-45.1.0/bg.xpi) = 0483235b368cf7b980fa8a017c8f606842eb2538f989656e0ca49cd968dc036b +SIZE (xpi/firefox-45.1.0/bg.xpi) = 460803 +SHA256 (xpi/firefox-45.1.0/bn-BD.xpi) = ec199c1a9a1f5aa379eee7176584c9f68d85ecc7e27a00d3252de3260748ab6c +SIZE (xpi/firefox-45.1.0/bn-BD.xpi) = 515637 +SHA256 (xpi/firefox-45.1.0/bn-IN.xpi) = 3ddc05753ccd30595d5204f90ee715bab75fefeec430c572ec0e98d13ffb6c42 +SIZE (xpi/firefox-45.1.0/bn-IN.xpi) = 494070 +SHA256 (xpi/firefox-45.1.0/br.xpi) = 6a914b1c11d73a628be78596ce34dbe9c10a6bf221c16aa409b39d6033b4cf8f +SIZE (xpi/firefox-45.1.0/br.xpi) = 436387 +SHA256 (xpi/firefox-45.1.0/bs.xpi) = 835a206cd5f2f628c80abd440c393c2984bcb202a2ecdcc86e0c8fc5218f2be1 +SIZE (xpi/firefox-45.1.0/bs.xpi) = 442992 +SHA256 (xpi/firefox-45.1.0/ca.xpi) = 34d21e459aa1ca44748de421429f6368fcac22d66ab44135df4e9d583f705c9a +SIZE (xpi/firefox-45.1.0/ca.xpi) = 436828 +SHA256 (xpi/firefox-45.1.0/cs.xpi) = 66de4bb611850904d2b3037e22ea60a1e0184ad0362afbfd04c1c74a649f4674 +SIZE (xpi/firefox-45.1.0/cs.xpi) = 443478 +SHA256 (xpi/firefox-45.1.0/cy.xpi) = a0e9d2d5b7c4406ff9156464bbcf44f2f3f7f12c1a409eb091b10fc18425cf98 +SIZE (xpi/firefox-45.1.0/cy.xpi) = 438903 +SHA256 (xpi/firefox-45.1.0/da.xpi) = beaeddeff7d784a1e8bf99ccbf36e65240aa62de7f600f8a5513a34e95f995ed +SIZE (xpi/firefox-45.1.0/da.xpi) = 430073 +SHA256 (xpi/firefox-45.1.0/de.xpi) = d375a46d2d5b626c3036d45eb286da06402b40c4fb7fe564c07426cb9b9e05ac +SIZE (xpi/firefox-45.1.0/de.xpi) = 445477 +SHA256 (xpi/firefox-45.1.0/dsb.xpi) = 9358152130db0eb7bbed6d71ef27464ce5367e041ff2329813c783a51a624538 +SIZE (xpi/firefox-45.1.0/dsb.xpi) = 463786 +SHA256 (xpi/firefox-45.1.0/el.xpi) = 5ec7b64200168b59dde23b41e44874f2a15f47ee160cf9d2e7b65a7ced08698c +SIZE (xpi/firefox-45.1.0/el.xpi) = 470862 +SHA256 (xpi/firefox-45.1.0/en-GB.xpi) = c856d0dedb73068d16b56db7706d6107f510dfe9649f0b878988b75fd8f4fc58 +SIZE (xpi/firefox-45.1.0/en-GB.xpi) = 423866 +SHA256 (xpi/firefox-45.1.0/en-US.xpi) = b21bee531e86c7e85c9c4a97e4ba4b2c7d061e44a7dbbdc23bcef57d897891c9 +SIZE (xpi/firefox-45.1.0/en-US.xpi) = 425464 +SHA256 (xpi/firefox-45.1.0/en-ZA.xpi) = 601cb03941023adcf1f22234c538912ad138629d24031266f4b7deaed2f47e8d +SIZE (xpi/firefox-45.1.0/en-ZA.xpi) = 420771 +SHA256 (xpi/firefox-45.1.0/eo.xpi) = 8f45bb2b8ac13d578e9ec410a1d05523ee5284409ac908c456109194a8d79d74 +SIZE (xpi/firefox-45.1.0/eo.xpi) = 440955 +SHA256 (xpi/firefox-45.1.0/es-AR.xpi) = 8017fa20fee5db586f654496e8779cbc3b7f0ce7ea710f8eeefb0e67c374d0b0 +SIZE (xpi/firefox-45.1.0/es-AR.xpi) = 441476 +SHA256 (xpi/firefox-45.1.0/es-CL.xpi) = 5d7b7d5c58198a61d13371d8e7cfd8a61b1b173e5c75e1595c68787f38fa2f92 +SIZE (xpi/firefox-45.1.0/es-CL.xpi) = 368759 +SHA256 (xpi/firefox-45.1.0/es-ES.xpi) = 422423e6a3c680daa70fb84bed3c671f8a754fa8c0f9957f0bbffe390042f476 +SIZE (xpi/firefox-45.1.0/es-ES.xpi) = 353710 +SHA256 (xpi/firefox-45.1.0/es-MX.xpi) = 02772e3581b82d298a3a42ba944fab64645516f2768353891ab7168882c0290e +SIZE (xpi/firefox-45.1.0/es-MX.xpi) = 449390 +SHA256 (xpi/firefox-45.1.0/et.xpi) = 47fe79a5b5a3ce60fc2df77170cad6f33a4cd45b46506f6994b5f3b9cd7d0cd5 +SIZE (xpi/firefox-45.1.0/et.xpi) = 433347 +SHA256 (xpi/firefox-45.1.0/eu.xpi) = 09ef21060722257a9c061f36f65ff264387572084cbb9df09ead920c81779956 +SIZE (xpi/firefox-45.1.0/eu.xpi) = 441352 +SHA256 (xpi/firefox-45.1.0/fa.xpi) = e66d551af1ab1d722c778c07164297fb1836b5e07013c4be94012ee7dddcba2f +SIZE (xpi/firefox-45.1.0/fa.xpi) = 491935 +SHA256 (xpi/firefox-45.1.0/ff.xpi) = d117e2390e6e5311b8e3fac85be71c090149d0b49f04f5a99a9ced3b853567b8 +SIZE (xpi/firefox-45.1.0/ff.xpi) = 441495 +SHA256 (xpi/firefox-45.1.0/fi.xpi) = 7fcfe60b776ce7beb4284d9ee026a4a845d76912be44a4e8868f01385fad568e +SIZE (xpi/firefox-45.1.0/fi.xpi) = 438343 +SHA256 (xpi/firefox-45.1.0/fr.xpi) = acf98ddd2d7900b378631f9f0debe5725ffbb6757bb12e8395c648b923a612b2 +SIZE (xpi/firefox-45.1.0/fr.xpi) = 450033 +SHA256 (xpi/firefox-45.1.0/fy-NL.xpi) = 631becc167f5ac36071a68124047638cdea99589ee7c8e44619e9630a8499d81 +SIZE (xpi/firefox-45.1.0/fy-NL.xpi) = 447773 +SHA256 (xpi/firefox-45.1.0/ga-IE.xpi) = 996f321a4706efbf0489ed0d4f834396758cece68ea51fcedb78c55f00e9c486 +SIZE (xpi/firefox-45.1.0/ga-IE.xpi) = 460050 +SHA256 (xpi/firefox-45.1.0/gd.xpi) = c691bc21f05f9e0b1cd8a00f60516ddad15240bc4eb314b025940e47d06140ec +SIZE (xpi/firefox-45.1.0/gd.xpi) = 449705 +SHA256 (xpi/firefox-45.1.0/gl.xpi) = d941d515af9a304579cf5f08719489ddcbdbfe7a63c3b6d65e02138084bbc3bd +SIZE (xpi/firefox-45.1.0/gl.xpi) = 434800 +SHA256 (xpi/firefox-45.1.0/gn.xpi) = 437b2b9885a8e3800435afd26e33638743cf300b66a9ee0b9e92566fc1419d7d +SIZE (xpi/firefox-45.1.0/gn.xpi) = 460642 +SHA256 (xpi/firefox-45.1.0/gu-IN.xpi) = 7fe25e9f20cdaaa10d5685303c69bdfdb42d677ace365933f6041d88a6298984 +SIZE (xpi/firefox-45.1.0/gu-IN.xpi) = 472561 +SHA256 (xpi/firefox-45.1.0/he.xpi) = 878cbe9aa34d1968a40b1abc8a43eb7bf75d2a1c85e13e77d45e79ad595552f1 +SIZE (xpi/firefox-45.1.0/he.xpi) = 454782 +SHA256 (xpi/firefox-45.1.0/hi-IN.xpi) = def808718637fb0a8f1ec842fa6187d7c6ccf33e77535d8d1a7e37045910767a +SIZE (xpi/firefox-45.1.0/hi-IN.xpi) = 486985 +SHA256 (xpi/firefox-45.1.0/hr.xpi) = 272881202ef43f0f686649bf5135c374d5cae28670aea2833a2d3c9414591578 +SIZE (xpi/firefox-45.1.0/hr.xpi) = 449065 +SHA256 (xpi/firefox-45.1.0/hsb.xpi) = 788e9d9a496663a81eda82af730a1db2228fcb3b5d4b9e04d7f28036c62fb2db +SIZE (xpi/firefox-45.1.0/hsb.xpi) = 461449 +SHA256 (xpi/firefox-45.1.0/hu.xpi) = 8ddefee5e3d9bb1f2983af3376f8247e3fcd38b1bd0136d82b1e7c610a87feba +SIZE (xpi/firefox-45.1.0/hu.xpi) = 449772 +SHA256 (xpi/firefox-45.1.0/hy-AM.xpi) = e54b4ea162145165b938cbd89d78e6817bed4bb92f252aa7cf380ad32f62b9e8 +SIZE (xpi/firefox-45.1.0/hy-AM.xpi) = 500035 +SHA256 (xpi/firefox-45.1.0/id.xpi) = 3792ff8654aaad501b523720a5ff250d41fed98b6105abfb5de198aa52e6e2ee +SIZE (xpi/firefox-45.1.0/id.xpi) = 427171 +SHA256 (xpi/firefox-45.1.0/is.xpi) = 742676e0207c26fc81a1ef89ddee5fa905dda343659cee879f5a192ce8951c87 +SIZE (xpi/firefox-45.1.0/is.xpi) = 443209 +SHA256 (xpi/firefox-45.1.0/it.xpi) = 781c48919f90a461d402936252dfd04cc449d20fcfdace5b3e2430dc76acc874 +SIZE (xpi/firefox-45.1.0/it.xpi) = 343720 +SHA256 (xpi/firefox-45.1.0/ja.xpi) = 5de75db5bb087a5032a5d8fbac727239639a5ec5a5544e5ad563c42d6cfaf1e2 +SIZE (xpi/firefox-45.1.0/ja.xpi) = 486325 +SHA256 (xpi/firefox-45.1.0/kk.xpi) = 64e3ccdaafca6d9127d0faa46c253342340ce0eacdbcc8e4176fcf0166e012a9 +SIZE (xpi/firefox-45.1.0/kk.xpi) = 498890 +SHA256 (xpi/firefox-45.1.0/km.xpi) = 8cd72b860d89103ec6f61f46137ada5f1b96047e70beb70e08b0fc5b97c3fe61 +SIZE (xpi/firefox-45.1.0/km.xpi) = 504298 +SHA256 (xpi/firefox-45.1.0/kn.xpi) = 8b5b90c613be9e2892f07795bcfed1a7d68c9105546836a678a230086f4cdc90 +SIZE (xpi/firefox-45.1.0/kn.xpi) = 495877 +SHA256 (xpi/firefox-45.1.0/ko.xpi) = 65cdc4462a2212e935b7309e047a2ad05ad34ff9921e958a2de7243c6a6650e6 +SIZE (xpi/firefox-45.1.0/ko.xpi) = 465285 +SHA256 (xpi/firefox-45.1.0/lij.xpi) = c7054361b75abe861dd365cf2cd6f98783326c6adc8756ba1d10e916095438f7 +SIZE (xpi/firefox-45.1.0/lij.xpi) = 381379 +SHA256 (xpi/firefox-45.1.0/lt.xpi) = 4c6c918deeab044783177cb7f0303269be16ff3cbf80c855786f71b2732a5cb9 +SIZE (xpi/firefox-45.1.0/lt.xpi) = 454674 +SHA256 (xpi/firefox-45.1.0/lv.xpi) = 647bcdf245353e7f22b04c387ae98bb0a4283f0555bd832c03abb5551fbc09d5 +SIZE (xpi/firefox-45.1.0/lv.xpi) = 445716 +SHA256 (xpi/firefox-45.1.0/mai.xpi) = 9cedbc11eaffb5968e33df27f47f67fb457bb7dc17ae142283f093f245c38e6d +SIZE (xpi/firefox-45.1.0/mai.xpi) = 492644 +SHA256 (xpi/firefox-45.1.0/mk.xpi) = 2e4fc67d1ed7564148851166d04787ce856445960849ac891982ab3c66da0ade +SIZE (xpi/firefox-45.1.0/mk.xpi) = 476389 +SHA256 (xpi/firefox-45.1.0/ml.xpi) = 9e7375141869b52cbdd7ef89a4dabc9b797d7b50632a7d9a8af72c780fb20f05 +SIZE (xpi/firefox-45.1.0/ml.xpi) = 498677 +SHA256 (xpi/firefox-45.1.0/mr.xpi) = c3d38c612d3aff7c4fd2f8bccd2b74176be0f0b0161781c5242dedbedb35c5f0 +SIZE (xpi/firefox-45.1.0/mr.xpi) = 503694 +SHA256 (xpi/firefox-45.1.0/ms.xpi) = 2875610734813bbbf52337bd3317768e82838dce14543333041648d0cc30b529 +SIZE (xpi/firefox-45.1.0/ms.xpi) = 440061 +SHA256 (xpi/firefox-45.1.0/nb-NO.xpi) = 9496e01cb9839677cb8051667acc2b6692f4663de532d13d72c31596e2fa0fac +SIZE (xpi/firefox-45.1.0/nb-NO.xpi) = 435466 +SHA256 (xpi/firefox-45.1.0/nl.xpi) = 3e7bcb94564cb01be83e12adc490001180f0cf666c6ce64691bd46fc1af4fd7f +SIZE (xpi/firefox-45.1.0/nl.xpi) = 435197 +SHA256 (xpi/firefox-45.1.0/nn-NO.xpi) = 55d754d238d3fb7834199879ea64667e11bdf14b291a715f34586090a8b75269 +SIZE (xpi/firefox-45.1.0/nn-NO.xpi) = 432929 +SHA256 (xpi/firefox-45.1.0/or.xpi) = 07d421f719bef417588838d668ea50f28853c8b05f0197334dd48df982102813 +SIZE (xpi/firefox-45.1.0/or.xpi) = 495917 +SHA256 (xpi/firefox-45.1.0/pa-IN.xpi) = 909c16142442a4f0cd83a0b4da87ce52fd339fba740b008227b143c3cb90dec1 +SIZE (xpi/firefox-45.1.0/pa-IN.xpi) = 489546 +SHA256 (xpi/firefox-45.1.0/pl.xpi) = d79512a921f3137ec393882af23ac4060a5e058fff0b23466750c3a921b12396 +SIZE (xpi/firefox-45.1.0/pl.xpi) = 383924 +SHA256 (xpi/firefox-45.1.0/pt-BR.xpi) = fc299a8c1552ac2008a2a4cb5fe8b0fb2285e8f0cf92df541a309da3bb08219d +SIZE (xpi/firefox-45.1.0/pt-BR.xpi) = 450986 +SHA256 (xpi/firefox-45.1.0/pt-PT.xpi) = 388de1d5ec25349f7d0b59bb8d0817ab7031821f23591692debeaf06d130ad23 +SIZE (xpi/firefox-45.1.0/pt-PT.xpi) = 437017 +SHA256 (xpi/firefox-45.1.0/rm.xpi) = 2a1185afca7aebf2a236df616f8a7fada7829cce0ccbd7f0bab38b42ee6530c4 +SIZE (xpi/firefox-45.1.0/rm.xpi) = 437714 +SHA256 (xpi/firefox-45.1.0/ro.xpi) = f094b95572faf5415ce7cd1073830d6c1e82e09b305478a70322f3485276c8f8 +SIZE (xpi/firefox-45.1.0/ro.xpi) = 444056 +SHA256 (xpi/firefox-45.1.0/ru.xpi) = 7e2c2f27b273077193b9a2eee3581e324201ea2b8119960ead943c4bad895441 +SIZE (xpi/firefox-45.1.0/ru.xpi) = 392734 +SHA256 (xpi/firefox-45.1.0/si.xpi) = 87d5c084c8c9ee2949e9703bf59163f03400b466b83722ee3dd9e3a114bc4f8b +SIZE (xpi/firefox-45.1.0/si.xpi) = 482242 +SHA256 (xpi/firefox-45.1.0/sk.xpi) = b9770ec13612263736b1c59063e644f5c78dedf25b43b66339107ee1c5fd5a9d +SIZE (xpi/firefox-45.1.0/sk.xpi) = 453603 +SHA256 (xpi/firefox-45.1.0/sl.xpi) = 1b7a5c66c37c4cc7900cd4fc97c019c166b1cdd974846d685179f84733fb92f8 +SIZE (xpi/firefox-45.1.0/sl.xpi) = 444960 +SHA256 (xpi/firefox-45.1.0/son.xpi) = f1782e9086ea8a52c3f0c66b4d315b086bd75b649c539e88d389943a051c4457 +SIZE (xpi/firefox-45.1.0/son.xpi) = 433509 +SHA256 (xpi/firefox-45.1.0/sq.xpi) = ff807f114438782bc017869b6a4e4cc2c323cabc09ad9a47094bed7736382897 +SIZE (xpi/firefox-45.1.0/sq.xpi) = 452182 +SHA256 (xpi/firefox-45.1.0/sr.xpi) = 24f3be1c5751a1283e14ebbb33c73951371c2f0715a1fece502f03d6dd5cef87 +SIZE (xpi/firefox-45.1.0/sr.xpi) = 464474 +SHA256 (xpi/firefox-45.1.0/sv-SE.xpi) = f0f0d1f0217cdbf6d919ad5731c6f6492c30c059fd4ece63ec59f44a61742e45 +SIZE (xpi/firefox-45.1.0/sv-SE.xpi) = 444208 +SHA256 (xpi/firefox-45.1.0/ta.xpi) = 5803307096dc644cbb282c42e8d041451899dacbd052a68b2f2d044b425e23bd +SIZE (xpi/firefox-45.1.0/ta.xpi) = 483114 +SHA256 (xpi/firefox-45.1.0/te.xpi) = 2ad70721fa4b4b2b67bdce70760b72f2d9c32a79e4bda2563aa5a6a5c9758395 +SIZE (xpi/firefox-45.1.0/te.xpi) = 492465 +SHA256 (xpi/firefox-45.1.0/th.xpi) = 0ba903ee3607ba6bc76c39a1ea855e3e0eec9b0af91beced08136def0138949a +SIZE (xpi/firefox-45.1.0/th.xpi) = 477644 +SHA256 (xpi/firefox-45.1.0/tr.xpi) = cf86e15a1c0547f891121d9cadce25cd3be09d35c1e2f998a2809e7f66241e3d +SIZE (xpi/firefox-45.1.0/tr.xpi) = 451160 +SHA256 (xpi/firefox-45.1.0/uk.xpi) = d9b9493fa0da79fdd86c043c455b7626312246ed5c3b1a82052b79a3231d25b7 +SIZE (xpi/firefox-45.1.0/uk.xpi) = 494776 +SHA256 (xpi/firefox-45.1.0/uz.xpi) = e33398c14c24241c412fd22b46eaa3e2f78cb36e26a9ee02fe2aacc881cc3aa6 +SIZE (xpi/firefox-45.1.0/uz.xpi) = 443798 +SHA256 (xpi/firefox-45.1.0/vi.xpi) = 842a43a616f2a5ea0ad6963fe21fb2d3b25b98612a21be629adbb74301dec67a +SIZE (xpi/firefox-45.1.0/vi.xpi) = 450774 +SHA256 (xpi/firefox-45.1.0/xh.xpi) = 24f08d22e7d90f211a005b7c6f5580512268088c046b452052e62102b6e4acf1 +SIZE (xpi/firefox-45.1.0/xh.xpi) = 432913 +SHA256 (xpi/firefox-45.1.0/zh-CN.xpi) = 5532eaf005914abca2e28a9c455029a98357bd17b305a0460e020ca37f4fd864 +SIZE (xpi/firefox-45.1.0/zh-CN.xpi) = 475791 +SHA256 (xpi/firefox-45.1.0/zh-TW.xpi) = 5127eb60caead072b71dac2a3a75a0b28fc85f7532ef78f75e4bd834557a0aab +SIZE (xpi/firefox-45.1.0/zh-TW.xpi) = 466524 Index: branches/2016Q2/www/firefox-i18n/Makefile =================================================================== --- branches/2016Q2/www/firefox-i18n/Makefile (revision 413771) +++ branches/2016Q2/www/firefox-i18n/Makefile (revision 413772) @@ -1,89 +1,90 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= firefox-i18n -PORTVERSION= 45.0.1 +PORTVERSION= 46.0 +PORTREVISION= 1 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \ - MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build2/linux-i686/xpi + MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build5/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:archivers/zip -USES= zip:infozip gecko:firefox,45,build +USES= zip:infozip gecko:firefox,46,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: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} 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} ; { ${RM} -f $$_dir/${WDIR} ; }' ${_A} post-patch: ${FIND} ${WRKSRC} -name install.rdf -print0 | \ ${XARGS} -0L1 ${REINPLACE_CMD} -i '' -e '/ Index: branches/2016Q2/www/firefox-i18n/Makefile.lang =================================================================== --- branches/2016Q2/www/firefox-i18n/Makefile.lang (revision 413771) +++ branches/2016Q2/www/firefox-i18n/Makefile.lang (revision 413772) @@ -1,282 +1,282 @@ # Created by: Koji Yokota # $FreeBSD$ FIREFOX_I18N_ALL_= ach af an ar as ast az be bg bn-BD bn-IN br bs ca cs \ - cy da de dsb el en-GB en-US en-ZA eo es-AR es-CL \ - es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl \ + cy da de dsb el en-GB en-ZA eo es-AR es-CL \ + es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn \ gu-IN he hi-IN hr hsb hu hy-AM id is it ja kk km \ kn ko lij lt lv mai mk ml mr ms nb-NO nl nn-NO \ or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son sq \ sr sv-SE ta te th tr uk uz vi xh zh-CN zh-TW .if defined(FIREFOX_I18N_ALL) || defined(PACKAGE_BUILDING) || target(package) FIREFOX_I18N= ${FIREFOX_I18N_ALL_} .else .if ${PORT_OPTIONS:MLANG_ACH} FIREFOX_I18N+= ach .endif .if ${PORT_OPTIONS:MLANG_AF} FIREFOX_I18N+= af .endif .if ${PORT_OPTIONS:MLANG_AN} FIREFOX_I18N+= an .endif .if ${PORT_OPTIONS:MLANG_AR} FIREFOX_I18N+= ar .endif .if ${PORT_OPTIONS:MLANG_AS} FIREFOX_I18N+= as .endif .if ${PORT_OPTIONS:MLANG_AST} FIREFOX_I18N+= ast .endif .if ${PORT_OPTIONS:MLANG_AZ} FIREFOX_I18N+= az .endif .if ${PORT_OPTIONS:MLANG_BE} FIREFOX_I18N+= be .endif .if ${PORT_OPTIONS:MLANG_BG} FIREFOX_I18N+= bg .endif .if ${PORT_OPTIONS:MLANG_BB} FIREFOX_I18N+= bn-BD .endif .if ${PORT_OPTIONS:MLANG_BN} FIREFOX_I18N+= bn-IN .endif .if ${PORT_OPTIONS:MLANG_BR} FIREFOX_I18N+= br .endif .if ${PORT_OPTIONS:MLANG_BS} FIREFOX_I18N+= bs .endif .if ${PORT_OPTIONS:MLANG_CA} FIREFOX_I18N+= ca .endif .if ${PORT_OPTIONS:MLANG_CS} FIREFOX_I18N+= cs .endif .if ${PORT_OPTIONS:MLANG_CY} FIREFOX_I18N+= cy .endif .if ${PORT_OPTIONS:MLANG_DA} FIREFOX_I18N+= da .endif .if ${PORT_OPTIONS:MLANG_DE} FIREFOX_I18N+= de .endif .if ${PORT_OPTIONS:MLANG_DSB} FIREFOX_I18N+= dsb .endif .if ${PORT_OPTIONS:MLANG_EL} FIREFOX_I18N+= el .endif .if ${PORT_OPTIONS:MLANG_GB} FIREFOX_I18N+= en-GB .endif -.if ${PORT_OPTIONS:MLANG_US} -FIREFOX_I18N+= en-US -.endif .if ${PORT_OPTIONS:MLANG_ZA} FIREFOX_I18N+= en-ZA .endif .if ${PORT_OPTIONS:MLANG_EO} FIREFOX_I18N+= eo .endif .if ${PORT_OPTIONS:MLANG_SA} FIREFOX_I18N+= es-AR .endif .if ${PORT_OPTIONS:MLANG_SC} FIREFOX_I18N+= es-CL .endif .if ${PORT_OPTIONS:MLANG_ES} FIREFOX_I18N+= es-ES .endif .if ${PORT_OPTIONS:MLANG_SM} FIREFOX_I18N+= es-MX .endif .if ${PORT_OPTIONS:MLANG_ET} FIREFOX_I18N+= et .endif .if ${PORT_OPTIONS:MLANG_EU} FIREFOX_I18N+= eu .endif .if ${PORT_OPTIONS:MLANG_FA} FIREFOX_I18N+= fa .endif .if ${PORT_OPTIONS:MLANG_FF} FIREFOX_I18N+= ff .endif .if ${PORT_OPTIONS:MLANG_FI} FIREFOX_I18N+= fi .endif .if ${PORT_OPTIONS:MLANG_FR} FIREFOX_I18N+= fr .endif .if ${PORT_OPTIONS:MLANG_FY} FIREFOX_I18N+= fy-NL .endif .if ${PORT_OPTIONS:MLANG_GA} FIREFOX_I18N+= ga-IE .endif .if ${PORT_OPTIONS:MLANG_GD} FIREFOX_I18N+= gd .endif .if ${PORT_OPTIONS:MLANG_GL} FIREFOX_I18N+= gl +.endif +.if ${PORT_OPTIONS:MLANG_GN} +FIREFOX_I18N+= gn .endif .if ${PORT_OPTIONS:MLANG_GU} FIREFOX_I18N+= gu-IN .endif .if ${PORT_OPTIONS:MLANG_HE} FIREFOX_I18N+= he .endif .if ${PORT_OPTIONS:MLANG_HI} FIREFOX_I18N+= hi-IN .endif .if ${PORT_OPTIONS:MLANG_HR} FIREFOX_I18N+= hr .endif .if ${PORT_OPTIONS:MLANG_HSB} FIREFOX_I18N+= hsb .endif .if ${PORT_OPTIONS:MLANG_HU} FIREFOX_I18N+= hu .endif .if ${PORT_OPTIONS:MLANG_AM} FIREFOX_I18N+= hy-AM .endif .if ${PORT_OPTIONS:MLANG_ID} FIREFOX_I18N+= id .endif .if ${PORT_OPTIONS:MLANG_IS} FIREFOX_I18N+= is .endif .if ${PORT_OPTIONS:MLANG_IT} FIREFOX_I18N+= it .endif .if ${PORT_OPTIONS:MLANG_JA} FIREFOX_I18N+= ja .endif .if ${PORT_OPTIONS:MLANG_KK} FIREFOX_I18N+= kk .endif .if ${PORT_OPTIONS:MLANG_KM} FIREFOX_I18N+= km .endif .if ${PORT_OPTIONS:MLANG_KN} FIREFOX_I18N+= kn .endif .if ${PORT_OPTIONS:MLANG_KO} FIREFOX_I18N+= ko .endif .if ${PORT_OPTIONS:MLANG_LIJ} FIREFOX_I18N+= lij .endif .if ${PORT_OPTIONS:MLANG_LT} FIREFOX_I18N+= lt .endif .if ${PORT_OPTIONS:MLANG_LV} FIREFOX_I18N+= lv .endif .if ${PORT_OPTIONS:MLANG_MAI} FIREFOX_I18N+= mai .endif .if ${PORT_OPTIONS:MLANG_MK} FIREFOX_I18N+= mk .endif .if ${PORT_OPTIONS:MLANG_ML} FIREFOX_I18N+= ml .endif .if ${PORT_OPTIONS:MLANG_MR} FIREFOX_I18N+= mr .endif .if ${PORT_OPTIONS:MLANG_MS} FIREFOX_I18N+= ms .endif .if ${PORT_OPTIONS:MLANG_NB} FIREFOX_I18N+= nb-NO .endif .if ${PORT_OPTIONS:MLANG_NL} FIREFOX_I18N+= nl .endif .if ${PORT_OPTIONS:MLANG_NN} FIREFOX_I18N+= nn-NO .endif .if ${PORT_OPTIONS:MLANG_OR} FIREFOX_I18N+= or .endif .if ${PORT_OPTIONS:MLANG_PA} FIREFOX_I18N+= pa-IN .endif .if ${PORT_OPTIONS:MLANG_PL} FIREFOX_I18N+= pl .endif .if ${PORT_OPTIONS:MLANG_PBR} FIREFOX_I18N+= pt-BR .endif .if ${PORT_OPTIONS:MLANG_PT} FIREFOX_I18N+= pt-PT .endif .if ${PORT_OPTIONS:MLANG_RM} FIREFOX_I18N+= rm .endif .if ${PORT_OPTIONS:MLANG_RO} FIREFOX_I18N+= ro .endif .if ${PORT_OPTIONS:MLANG_RU} FIREFOX_I18N+= ru .endif .if ${PORT_OPTIONS:MLANG_SI} FIREFOX_I18N+= si .endif .if ${PORT_OPTIONS:MLANG_SK} FIREFOX_I18N+= sk .endif .if ${PORT_OPTIONS:MLANG_SL} FIREFOX_I18N+= sl .endif .if ${PORT_OPTIONS:MLANG_SON} FIREFOX_I18N+= son .endif .if ${PORT_OPTIONS:MLANG_SQ} FIREFOX_I18N+= sq .endif .if ${PORT_OPTIONS:MLANG_SR} FIREFOX_I18N+= sr .endif .if ${PORT_OPTIONS:MLANG_SV} FIREFOX_I18N+= sv-SE .endif .if ${PORT_OPTIONS:MLANG_TA} FIREFOX_I18N+= ta .endif .if ${PORT_OPTIONS:MLANG_TE} FIREFOX_I18N+= te .endif .if ${PORT_OPTIONS:MLANG_TH} FIREFOX_I18N+= th .endif .if ${PORT_OPTIONS:MLANG_TR} FIREFOX_I18N+= tr .endif .if ${PORT_OPTIONS:MLANG_UK} FIREFOX_I18N+= uk .endif .if ${PORT_OPTIONS:MLANG_UZ} FIREFOX_I18N+= uz .endif .if ${PORT_OPTIONS:MLANG_VI} FIREFOX_I18N+= vi .endif .if ${PORT_OPTIONS:MLANG_XH} FIREFOX_I18N+= xh .endif .if ${PORT_OPTIONS:MLANG_CN} FIREFOX_I18N+= zh-CN .endif .if ${PORT_OPTIONS:MLANG_TW} FIREFOX_I18N+= zh-TW .endif .endif Index: branches/2016Q2/www/firefox-i18n/Makefile.option =================================================================== --- branches/2016Q2/www/firefox-i18n/Makefile.option (revision 413771) +++ branches/2016Q2/www/firefox-i18n/Makefile.option (revision 413772) @@ -1,112 +1,113 @@ # Created by: Koji Yokota # $FreeBSD$ # this is sorted on the name of the xpi files, not the option name OPTIONS_DEFINE= LANG_ACH \ LANG_AF \ LANG_AN \ LANG_AR \ LANG_AS \ LANG_AST \ LANG_AZ \ LANG_BE \ LANG_BG \ LANG_BB \ LANG_BN \ LANG_BR \ LANG_BS \ LANG_CA \ LANG_CS \ LANG_CY \ LANG_DA \ LANG_DE \ LANG_DSB \ LANG_EL \ LANG_GB \ - LANG_US \ LANG_ZA \ LANG_EO \ LANG_SA \ LANG_SC \ LANG_ES \ LANG_SM \ LANG_ET \ LANG_EU \ LANG_FA \ LANG_FF \ LANG_FI \ LANG_FR \ LANG_FY \ LANG_GA \ LANG_GD \ LANG_GL \ + LANG_GN \ LANG_GU \ LANG_HE \ LANG_HI \ LANG_HR \ LANG_HSB \ LANG_HU \ LANG_AM \ LANG_ID \ LANG_IS \ LANG_IT \ LANG_JA \ LANG_KK \ LANG_KM \ LANG_KN \ LANG_KO \ LANG_LIJ \ LANG_LT \ LANG_LV \ LANG_MAI \ LANG_MK \ LANG_ML \ LANG_MR \ LANG_MS \ LANG_NB \ LANG_NL \ LANG_NN \ LANG_OR \ LANG_PA \ LANG_PL \ LANG_PBR\ LANG_PT \ LANG_RM \ LANG_RO \ LANG_RU \ LANG_SI \ LANG_SK \ LANG_SL \ LANG_SON \ LANG_SQ \ LANG_SR \ LANG_SV \ LANG_TA \ LANG_TE \ LANG_TH \ LANG_TR \ LANG_UK \ LANG_UZ \ LANG_VI \ LANG_XH \ LANG_CN \ LANG_TW OPTIONS_DEFAULT=LANG_AR LANG_BN LANG_BR LANG_CN LANG_ET LANG_DE LANG_FR \ LANG_HI LANG_ID LANG_IT LANG_JA LANG_KO LANG_MK LANG_MR \ LANG_PBR LANG_PA LANG_RU LANG_ES LANG_SON LANG_TE LANG_ACH_DESC?= Acholi language support LANG_AN_DESC?= Aragonese language support LANG_AS_DESC?= Assamese language support LANG_AZ_DESC?= Azerbaijani language support LANG_CSB_DESC?= Kashubian language support LANG_DSB_DESC?= Lower Sorbian language support LANG_FF_DESC?= Fulah language support +LANG_GN_DESC?= Guarani (Paraguay) language support LANG_HSB_DESC?= Upper Sorbian language support LANG_KM_DESC?= Khmer language support LANG_LIJ_DESC?= Ligurian (Genoa) language support LANG_MS_DESC?= Malay language support LANG_SW_DESC?= Swahili language support LANG_UZ_DESC?= Uzbek language support LANG_XH_DESC?= Xhosa language support Index: branches/2016Q2/www/firefox-i18n/distinfo =================================================================== --- branches/2016Q2/www/firefox-i18n/distinfo (revision 413771) +++ branches/2016Q2/www/firefox-i18n/distinfo (revision 413772) @@ -1,178 +1,178 @@ -SHA256 (xpi/firefox-i18n-45.0.1/ach.xpi) = bfecbd8c3196bcb72597d9313fee99cbe78995b3760106c16d862dd80c3dce89 -SIZE (xpi/firefox-i18n-45.0.1/ach.xpi) = 421464 -SHA256 (xpi/firefox-i18n-45.0.1/af.xpi) = d0b4d85f6f3260cbfa27fb83be0cc11d224a37106c7309fd71aaa32b5e20ff03 -SIZE (xpi/firefox-i18n-45.0.1/af.xpi) = 436169 -SHA256 (xpi/firefox-i18n-45.0.1/an.xpi) = 8fda82ba873fa73787afee2ae0e0f88e183f901dafcbe5866b79d6eaf4ff19a7 -SIZE (xpi/firefox-i18n-45.0.1/an.xpi) = 443979 -SHA256 (xpi/firefox-i18n-45.0.1/ar.xpi) = d0fa28f972326c9da83bba4f92310ee65d577b9c3a8520a09f7fc2704c64573d -SIZE (xpi/firefox-i18n-45.0.1/ar.xpi) = 471775 -SHA256 (xpi/firefox-i18n-45.0.1/as.xpi) = 5fc518733fa7bfba6650473f2d54a1cc92fa7493c64ccda77bb9776d4308d78b -SIZE (xpi/firefox-i18n-45.0.1/as.xpi) = 479910 -SHA256 (xpi/firefox-i18n-45.0.1/ast.xpi) = 76b15d58485d275eb6e04668b75b5d5e91f644d6fa83249fe7ab2d796b88ba6b -SIZE (xpi/firefox-i18n-45.0.1/ast.xpi) = 416054 -SHA256 (xpi/firefox-i18n-45.0.1/az.xpi) = b32bba73ba76654d068cba967a0752fe11e43a0a2062d269c8339d87973e11ed -SIZE (xpi/firefox-i18n-45.0.1/az.xpi) = 458356 -SHA256 (xpi/firefox-i18n-45.0.1/be.xpi) = 18118c91d5d9fd8376b175e01894a377bd945614dcec67e0373838b59512d682 -SIZE (xpi/firefox-i18n-45.0.1/be.xpi) = 439433 -SHA256 (xpi/firefox-i18n-45.0.1/bg.xpi) = b551ecb81f495c84957d433db8d10dffc7e68cb616bda261fb8396a0787b68a5 -SIZE (xpi/firefox-i18n-45.0.1/bg.xpi) = 457342 -SHA256 (xpi/firefox-i18n-45.0.1/bn-BD.xpi) = 64725b3e3974e58580a99b56ddc3674f217e7ffe442cbd93f410ab4807719bf3 -SIZE (xpi/firefox-i18n-45.0.1/bn-BD.xpi) = 509415 -SHA256 (xpi/firefox-i18n-45.0.1/bn-IN.xpi) = 44561d72423124f708b7ec13315b961a8e1cb9cd5fdcdcd06ff939e5f5ca456a -SIZE (xpi/firefox-i18n-45.0.1/bn-IN.xpi) = 490801 -SHA256 (xpi/firefox-i18n-45.0.1/br.xpi) = 26bf95185251b8c45a158cf68326070e7c3d5bf66bdde25dd175794b381a8b6c -SIZE (xpi/firefox-i18n-45.0.1/br.xpi) = 431333 -SHA256 (xpi/firefox-i18n-45.0.1/bs.xpi) = a0ff84f7b3b0adc237b6d9e844a96b2d8ea2bad19e136995407eaf59a2cbd45f -SIZE (xpi/firefox-i18n-45.0.1/bs.xpi) = 439698 -SHA256 (xpi/firefox-i18n-45.0.1/ca.xpi) = 7d9489ea2d3d2fafa2e7557e75e7df485861466316152332a4a20311771b1ca9 -SIZE (xpi/firefox-i18n-45.0.1/ca.xpi) = 433726 -SHA256 (xpi/firefox-i18n-45.0.1/cs.xpi) = b4a504b0d68a1076cc62ae7fc2aeee4fbb6a4e7b2e88139209643694e49cf0f0 -SIZE (xpi/firefox-i18n-45.0.1/cs.xpi) = 437701 -SHA256 (xpi/firefox-i18n-45.0.1/cy.xpi) = 3b9d430c65e6ef81eeb64690f9ce64e3c040f461ae1e6aa8c7466477c16e6e1a -SIZE (xpi/firefox-i18n-45.0.1/cy.xpi) = 433864 -SHA256 (xpi/firefox-i18n-45.0.1/da.xpi) = cb7cac876b49e95f9692390eaf116ccf5a7dd4ef0ee72d597b4e517ebbb85c0b -SIZE (xpi/firefox-i18n-45.0.1/da.xpi) = 424613 -SHA256 (xpi/firefox-i18n-45.0.1/de.xpi) = 123e04c49962645a18947efb04b8e5d3fc162cc0c1c184244d0cb2cbf4c8317f -SIZE (xpi/firefox-i18n-45.0.1/de.xpi) = 439756 -SHA256 (xpi/firefox-i18n-45.0.1/dsb.xpi) = b5189bfb9221ec3613c3604886e4af640ac1b2fc820a2748d112615ab6d84660 -SIZE (xpi/firefox-i18n-45.0.1/dsb.xpi) = 458054 -SHA256 (xpi/firefox-i18n-45.0.1/el.xpi) = 8eb0b4fd6fc146743688e485d0deb56b5ca9baa65fec5e776c2bdba24d157443 -SIZE (xpi/firefox-i18n-45.0.1/el.xpi) = 467211 -SHA256 (xpi/firefox-i18n-45.0.1/en-GB.xpi) = 3f885c1d6df7a13f0b4b33785bd15f577dec52f11f80cc5a771d504fd6519708 -SIZE (xpi/firefox-i18n-45.0.1/en-GB.xpi) = 418742 -SHA256 (xpi/firefox-i18n-45.0.1/en-US.xpi) = e99fa9424f29bddbe7ef1238feccf97de7585037a199517e102c6f1dca92629d -SIZE (xpi/firefox-i18n-45.0.1/en-US.xpi) = 420387 -SHA256 (xpi/firefox-i18n-45.0.1/en-ZA.xpi) = 8e99633fc46f8318302dbb636e0f1811e38c809988638f6bf6a98d5b74aacad7 -SIZE (xpi/firefox-i18n-45.0.1/en-ZA.xpi) = 415694 -SHA256 (xpi/firefox-i18n-45.0.1/eo.xpi) = 5c207f5864ea6aba4598657af36ab59009f72a20529e2f69ff6394e09180b474 -SIZE (xpi/firefox-i18n-45.0.1/eo.xpi) = 437888 -SHA256 (xpi/firefox-i18n-45.0.1/es-AR.xpi) = 90872a58ee2b7ced889bf9e05e9350feb78e6b8cda4fc780325a3e868257ffe2 -SIZE (xpi/firefox-i18n-45.0.1/es-AR.xpi) = 436400 -SHA256 (xpi/firefox-i18n-45.0.1/es-CL.xpi) = 4e94a545ea6a0f4a718527beedecadf92556bde9d55216382fac090c69b9e127 -SIZE (xpi/firefox-i18n-45.0.1/es-CL.xpi) = 363186 -SHA256 (xpi/firefox-i18n-45.0.1/es-ES.xpi) = 564a1dad93ada231367816841a91190ff140661742b1035633c945284a9032c5 -SIZE (xpi/firefox-i18n-45.0.1/es-ES.xpi) = 348133 -SHA256 (xpi/firefox-i18n-45.0.1/es-MX.xpi) = e02710aba78845f6eae241736a4ac279585c10a9c12fa3e231ae6e99ece50618 -SIZE (xpi/firefox-i18n-45.0.1/es-MX.xpi) = 443818 -SHA256 (xpi/firefox-i18n-45.0.1/et.xpi) = 8733b463d7c609288bc4a80da064a3ecb59af42107ce156db4402df5b47005b8 -SIZE (xpi/firefox-i18n-45.0.1/et.xpi) = 427886 -SHA256 (xpi/firefox-i18n-45.0.1/eu.xpi) = e5dc30c260897c65c62d3f052a16b33648955cf4ae3edc366080f81478e3912a -SIZE (xpi/firefox-i18n-45.0.1/eu.xpi) = 438042 -SHA256 (xpi/firefox-i18n-45.0.1/fa.xpi) = e8c611cf2ca4f938dba0a323f16eceb1d5e696d581ccf2f0e89cb86d0258126d -SIZE (xpi/firefox-i18n-45.0.1/fa.xpi) = 485805 -SHA256 (xpi/firefox-i18n-45.0.1/ff.xpi) = d31c33931ed4bc04e7b30f44a7a500f8934a60938a8c728052fb8fcafe8b1949 -SIZE (xpi/firefox-i18n-45.0.1/ff.xpi) = 438223 -SHA256 (xpi/firefox-i18n-45.0.1/fi.xpi) = 9b94a66db6d0da6abece2968459227ba10c323b2515560d5513e150da7389b96 -SIZE (xpi/firefox-i18n-45.0.1/fi.xpi) = 435343 -SHA256 (xpi/firefox-i18n-45.0.1/fr.xpi) = 3852ed894d4bbfea425d49e61a1137388b12a66d720e16ee8e7db0809ae6a051 -SIZE (xpi/firefox-i18n-45.0.1/fr.xpi) = 444345 -SHA256 (xpi/firefox-i18n-45.0.1/fy-NL.xpi) = a5e58052b875613255e004565aacd504f5e2c82d4daa607c0b64801fcc761105 -SIZE (xpi/firefox-i18n-45.0.1/fy-NL.xpi) = 442268 -SHA256 (xpi/firefox-i18n-45.0.1/ga-IE.xpi) = adc6a7696eb6be2fd08f93ca8795a54787d499b80f04263bc10599365353c7ee -SIZE (xpi/firefox-i18n-45.0.1/ga-IE.xpi) = 454974 -SHA256 (xpi/firefox-i18n-45.0.1/gd.xpi) = de6990704adfcce0bdea29a53946afbf8418f57e62ec5b9984454a920e1088bc -SIZE (xpi/firefox-i18n-45.0.1/gd.xpi) = 443932 -SHA256 (xpi/firefox-i18n-45.0.1/gl.xpi) = 962376f41f570c78668a79c35fdf7cff52eba94be8adffc9f1073b36c51dfaf5 -SIZE (xpi/firefox-i18n-45.0.1/gl.xpi) = 431619 -SHA256 (xpi/firefox-i18n-45.0.1/gu-IN.xpi) = 9a41d4d2f18a254c9f5416a58be6d4cb1e93028b7d29383876b1e5445ce88e50 -SIZE (xpi/firefox-i18n-45.0.1/gu-IN.xpi) = 469357 -SHA256 (xpi/firefox-i18n-45.0.1/he.xpi) = 26d5ee962a69bc71d87ae1bd0b080b26862700b6fe5f7c423e82f7e28c3a11c8 -SIZE (xpi/firefox-i18n-45.0.1/he.xpi) = 451979 -SHA256 (xpi/firefox-i18n-45.0.1/hi-IN.xpi) = 8fadf559d0bcdd16de233923fbdce93d766898d7247cc560c49d535aa1a63bc9 -SIZE (xpi/firefox-i18n-45.0.1/hi-IN.xpi) = 483334 -SHA256 (xpi/firefox-i18n-45.0.1/hr.xpi) = 5c28fe6b8d593b624f754eb48183039e0fd3cbc7f7f42cf018b196f51a6b1ffb -SIZE (xpi/firefox-i18n-45.0.1/hr.xpi) = 445884 -SHA256 (xpi/firefox-i18n-45.0.1/hsb.xpi) = 83b991eb76554e4108b659a16646bada15a14c9f805246094f18373ff0e1f866 -SIZE (xpi/firefox-i18n-45.0.1/hsb.xpi) = 455734 -SHA256 (xpi/firefox-i18n-45.0.1/hu.xpi) = 3d595fd6f2d38df49ab82f7a074e912e2879ec3c0db9e74c6f86662bbac7bff3 -SIZE (xpi/firefox-i18n-45.0.1/hu.xpi) = 444069 -SHA256 (xpi/firefox-i18n-45.0.1/hy-AM.xpi) = e4aaf97614f193a151032c94f30dd69cd00d401400df650c327c75dc1025fd15 -SIZE (xpi/firefox-i18n-45.0.1/hy-AM.xpi) = 494082 -SHA256 (xpi/firefox-i18n-45.0.1/id.xpi) = bae1c6c55096512357b2d3bca2d124d6e0ded8f2781422eaec53bdd2d1dc9e2c -SIZE (xpi/firefox-i18n-45.0.1/id.xpi) = 421750 -SHA256 (xpi/firefox-i18n-45.0.1/is.xpi) = 6249ab1fd56b5c013d908253f140d2285de8c6c8912a5f9d2d4744e8a5e28012 -SIZE (xpi/firefox-i18n-45.0.1/is.xpi) = 438156 -SHA256 (xpi/firefox-i18n-45.0.1/it.xpi) = 9768e30aaf513296f31e36e772f32fac991980cb7f7a9de95732892aa7dca9a1 -SIZE (xpi/firefox-i18n-45.0.1/it.xpi) = 338105 -SHA256 (xpi/firefox-i18n-45.0.1/ja.xpi) = a1f443992b4c28614cbde849a7f593d55606ce12d81776f21f758517fdd35a8f -SIZE (xpi/firefox-i18n-45.0.1/ja.xpi) = 480327 -SHA256 (xpi/firefox-i18n-45.0.1/kk.xpi) = 3ac47c61d5483cc9b99eee1ff46590599ac7bad5efe3254d430db0f651d18ea6 -SIZE (xpi/firefox-i18n-45.0.1/kk.xpi) = 493280 -SHA256 (xpi/firefox-i18n-45.0.1/km.xpi) = 8d5bc5510b1c2ab936523b0310cd5998717a0307943085025bf6bffd0e7fd33c -SIZE (xpi/firefox-i18n-45.0.1/km.xpi) = 501117 -SHA256 (xpi/firefox-i18n-45.0.1/kn.xpi) = 8d1535ff4e8bdb8c9fb64e34034f165face428fed3b42a46f81862f35c5b68ef -SIZE (xpi/firefox-i18n-45.0.1/kn.xpi) = 492246 -SHA256 (xpi/firefox-i18n-45.0.1/ko.xpi) = 97201d6e5bdc11d5e927cc93bf922dfbeb3387c3028cc2a3e3d3d4027e4716a9 -SIZE (xpi/firefox-i18n-45.0.1/ko.xpi) = 459998 -SHA256 (xpi/firefox-i18n-45.0.1/lij.xpi) = 46d8c53b3e13248f004d58dfe34af9d3c5ecc63a0cd1b6668aa633310023a629 -SIZE (xpi/firefox-i18n-45.0.1/lij.xpi) = 376302 -SHA256 (xpi/firefox-i18n-45.0.1/lt.xpi) = 2893c7deaba5aeccc5747c3eba74f0cc0ad7e5fb443acff7f2577fd3b4d4ec90 -SIZE (xpi/firefox-i18n-45.0.1/lt.xpi) = 451529 -SHA256 (xpi/firefox-i18n-45.0.1/lv.xpi) = a2b71586941b259b0a7b1c850b60a1cc66a6210fcc020a68126f35e70645e8ac -SIZE (xpi/firefox-i18n-45.0.1/lv.xpi) = 442659 -SHA256 (xpi/firefox-i18n-45.0.1/mai.xpi) = a338518396ba9a06b24b3d87ca3537c1b95286f5d3e2660eb1aa4126eb7c8856 -SIZE (xpi/firefox-i18n-45.0.1/mai.xpi) = 487582 -SHA256 (xpi/firefox-i18n-45.0.1/mk.xpi) = a3b3626d56aadc8006748318f621b91ee408b57612ce4fa4f23c168d57cc1c6a -SIZE (xpi/firefox-i18n-45.0.1/mk.xpi) = 473208 -SHA256 (xpi/firefox-i18n-45.0.1/ml.xpi) = b72f04d6e22faee33715bdb9138f3ae6efac52ece76e3e12813d63e607a560a1 -SIZE (xpi/firefox-i18n-45.0.1/ml.xpi) = 495274 -SHA256 (xpi/firefox-i18n-45.0.1/mr.xpi) = 4abfbec9b42017c3f38faf7ff04733be2a9b97c2e12a7154f26796ba13a42de2 -SIZE (xpi/firefox-i18n-45.0.1/mr.xpi) = 498643 -SHA256 (xpi/firefox-i18n-45.0.1/ms.xpi) = bb4d804e462e8856ac007a69e82b1a049abca8920daf892c68a308b44b7b27aa -SIZE (xpi/firefox-i18n-45.0.1/ms.xpi) = 436880 -SHA256 (xpi/firefox-i18n-45.0.1/nb-NO.xpi) = b839a63bf3f56324d4c00a90209b2875aa50ba938e15ebc5e4d7bae9cc36fc9a -SIZE (xpi/firefox-i18n-45.0.1/nb-NO.xpi) = 432169 -SHA256 (xpi/firefox-i18n-45.0.1/nl.xpi) = b366a8b4225256badcf30add565a24e63950bcb8f9bee11d9d3994d0365ba9dc -SIZE (xpi/firefox-i18n-45.0.1/nl.xpi) = 429705 -SHA256 (xpi/firefox-i18n-45.0.1/nn-NO.xpi) = 01cbad2f574040db315695aef0f4f3ac86ba954c229911bc80655fd279436680 -SIZE (xpi/firefox-i18n-45.0.1/nn-NO.xpi) = 427852 -SHA256 (xpi/firefox-i18n-45.0.1/or.xpi) = 9ad57d569a7905717b50049b1c5837220f6432ecdc3b17ee7286a5c28c6eee13 -SIZE (xpi/firefox-i18n-45.0.1/or.xpi) = 492741 -SHA256 (xpi/firefox-i18n-45.0.1/pa-IN.xpi) = 38dc731280948f5a95ae5cebf95481db1300153488558dac7c12b18514317ab5 -SIZE (xpi/firefox-i18n-45.0.1/pa-IN.xpi) = 485889 -SHA256 (xpi/firefox-i18n-45.0.1/pl.xpi) = 03381d564b052e6a3a72bab4a397c1bc5d4b3323e70fd84b5562ec7baaff3132 -SIZE (xpi/firefox-i18n-45.0.1/pl.xpi) = 379558 -SHA256 (xpi/firefox-i18n-45.0.1/pt-BR.xpi) = ca2895c07d8a109f17db1b85d28a64d14bf9c54a62a34d6eeafc55c655127ea2 -SIZE (xpi/firefox-i18n-45.0.1/pt-BR.xpi) = 445519 -SHA256 (xpi/firefox-i18n-45.0.1/pt-PT.xpi) = 607da2f67887229c414407e61971ffc89d806e8b2ed08feb25bc804558f1dc6d -SIZE (xpi/firefox-i18n-45.0.1/pt-PT.xpi) = 431499 -SHA256 (xpi/firefox-i18n-45.0.1/rm.xpi) = 147bba5fb3f74e9edb1f5c8e16fda20ca077e8a16f98335661afad1ac054aa9d -SIZE (xpi/firefox-i18n-45.0.1/rm.xpi) = 432733 -SHA256 (xpi/firefox-i18n-45.0.1/ro.xpi) = 0e849b4040a73981f2e65091f9246abeb91285cfce55590a3a83ebfc7b67474c -SIZE (xpi/firefox-i18n-45.0.1/ro.xpi) = 440798 -SHA256 (xpi/firefox-i18n-45.0.1/ru.xpi) = 7f9f7923c8a5ddd9ef710e0647771fafc43ef60923ec3a4587eec894dcc1c599 -SIZE (xpi/firefox-i18n-45.0.1/ru.xpi) = 386410 -SHA256 (xpi/firefox-i18n-45.0.1/si.xpi) = ec8f2f4aa282b77888d3b59d06be4c45a6d2e0fb1fbbd51037f4666044d4cc6e -SIZE (xpi/firefox-i18n-45.0.1/si.xpi) = 479305 -SHA256 (xpi/firefox-i18n-45.0.1/sk.xpi) = 7fb0fdabf32772687c1712642fa6540909a1e8c6731c0d335e84f2847a7b3dd9 -SIZE (xpi/firefox-i18n-45.0.1/sk.xpi) = 447859 -SHA256 (xpi/firefox-i18n-45.0.1/sl.xpi) = b874e0db65cb8baaca505311af05a4714fef57134faf9bab0c552f79299694c2 -SIZE (xpi/firefox-i18n-45.0.1/sl.xpi) = 439485 -SHA256 (xpi/firefox-i18n-45.0.1/son.xpi) = 63e3c5bbf78c42560377750d7ab9aa005b2af89d5e4c49a1f6be13578d92aede -SIZE (xpi/firefox-i18n-45.0.1/son.xpi) = 430488 -SHA256 (xpi/firefox-i18n-45.0.1/sq.xpi) = 53947904925157ff490ace369c7f2071d3442335ddd4b0b1538e79b43c4c5b24 -SIZE (xpi/firefox-i18n-45.0.1/sq.xpi) = 446482 -SHA256 (xpi/firefox-i18n-45.0.1/sr.xpi) = c221481f17155cfb414a3b1c09ffb042186205e885939c48793095892e3e9ebf -SIZE (xpi/firefox-i18n-45.0.1/sr.xpi) = 459051 -SHA256 (xpi/firefox-i18n-45.0.1/sv-SE.xpi) = 79d2328023982b88e1a2324cf0e4dbcba129e17bf5e45f7dbcb307a8f5f9690b -SIZE (xpi/firefox-i18n-45.0.1/sv-SE.xpi) = 438724 -SHA256 (xpi/firefox-i18n-45.0.1/ta.xpi) = 12d6ae4147cb6639a61e7bacddc84f54d30ec907a0ac033a8ea8a3acfee37f7c -SIZE (xpi/firefox-i18n-45.0.1/ta.xpi) = 479528 -SHA256 (xpi/firefox-i18n-45.0.1/te.xpi) = cf5349e6012556e35bcc206519ad3f407309585a53b8323e2f82c1fe016e35a8 -SIZE (xpi/firefox-i18n-45.0.1/te.xpi) = 489283 -SHA256 (xpi/firefox-i18n-45.0.1/th.xpi) = 57adc3d7106a145ae529db6c98679b4f6c8ceac1b03fa5810cfbdbef41cca47f -SIZE (xpi/firefox-i18n-45.0.1/th.xpi) = 474141 -SHA256 (xpi/firefox-i18n-45.0.1/tr.xpi) = 6477212c022fdd92f88b11a92d89b29dd41c421ca7c34b34265384ca41a5c1fd -SIZE (xpi/firefox-i18n-45.0.1/tr.xpi) = 445669 -SHA256 (xpi/firefox-i18n-45.0.1/uk.xpi) = 9859be74b6a0a926be952efff9e46ad0e20341a883ff880658eb9220fb556343 -SIZE (xpi/firefox-i18n-45.0.1/uk.xpi) = 488434 -SHA256 (xpi/firefox-i18n-45.0.1/uz.xpi) = 3b8529725ea137bd47e61891d81a85becb8b9b28da3eea5d24fb0eee95870474 -SIZE (xpi/firefox-i18n-45.0.1/uz.xpi) = 438746 -SHA256 (xpi/firefox-i18n-45.0.1/vi.xpi) = 1ae60c460ad2bb1eb7bbd86c6fa463422be01be56ba623dee336671d6e37d9c6 -SIZE (xpi/firefox-i18n-45.0.1/vi.xpi) = 447594 -SHA256 (xpi/firefox-i18n-45.0.1/xh.xpi) = 638b3ac560c1e61f410ff8ee53125e58d6a0fe7e7ae9ed6be6ec32080199419a -SIZE (xpi/firefox-i18n-45.0.1/xh.xpi) = 429734 -SHA256 (xpi/firefox-i18n-45.0.1/zh-CN.xpi) = 69dcf93c1e3ea55d248834f653d2d80706a1c91038f745b183f9f670116728e2 -SIZE (xpi/firefox-i18n-45.0.1/zh-CN.xpi) = 469931 -SHA256 (xpi/firefox-i18n-45.0.1/zh-TW.xpi) = b5ed300a15623e1f8207e5b566864f2cba8772ddcec5fff460b8b37e5a9f2cbd -SIZE (xpi/firefox-i18n-45.0.1/zh-TW.xpi) = 460795 +SHA256 (xpi/firefox-i18n-46.0/ach.xpi) = fed4c0742afbe72822697145f45fd724146bf49ea2cdc938fdeca4e69ca7261d +SIZE (xpi/firefox-i18n-46.0/ach.xpi) = 430443 +SHA256 (xpi/firefox-i18n-46.0/af.xpi) = 46b12db3f2d6ba7cf897323a2ecd5d9ba249f5081f1663c6d3b802d6d038ddb7 +SIZE (xpi/firefox-i18n-46.0/af.xpi) = 437789 +SHA256 (xpi/firefox-i18n-46.0/an.xpi) = 611ea5d95e608fd636093c58923397d13e81b2ea9aad6f613c7811e944837d03 +SIZE (xpi/firefox-i18n-46.0/an.xpi) = 447582 +SHA256 (xpi/firefox-i18n-46.0/ar.xpi) = 9385a0ef670e4c3233d76baab390af50c52fcac14522a4748e5225528cce1444 +SIZE (xpi/firefox-i18n-46.0/ar.xpi) = 473522 +SHA256 (xpi/firefox-i18n-46.0/as.xpi) = 6f11023309830b6f23d122d9e0b96d552a4a618a3464ec21d427b2a5445390fe +SIZE (xpi/firefox-i18n-46.0/as.xpi) = 485694 +SHA256 (xpi/firefox-i18n-46.0/ast.xpi) = b474df8eed6bc429152cd76a35a5c5e138ff79657abfb02ca1e95251dba43410 +SIZE (xpi/firefox-i18n-46.0/ast.xpi) = 421892 +SHA256 (xpi/firefox-i18n-46.0/az.xpi) = 53a87320e345eff5df43e7986f19da7b4edcb5b24d160098343793575b4bf37c +SIZE (xpi/firefox-i18n-46.0/az.xpi) = 458474 +SHA256 (xpi/firefox-i18n-46.0/be.xpi) = ecc4a15a4de606cea61314d7d16470f8f25415689f35a286044ed406237b8132 +SIZE (xpi/firefox-i18n-46.0/be.xpi) = 447214 +SHA256 (xpi/firefox-i18n-46.0/bg.xpi) = eb3841f86515949df9a9f6ebb94b529ad21915eb7ef3fa436f1185feaf9ed093 +SIZE (xpi/firefox-i18n-46.0/bg.xpi) = 485175 +SHA256 (xpi/firefox-i18n-46.0/bn-BD.xpi) = a4f5d8cc8662399b2ef99172cc65d48c19660c7d8f6c022888f20e4b936d8aaf +SIZE (xpi/firefox-i18n-46.0/bn-BD.xpi) = 514991 +SHA256 (xpi/firefox-i18n-46.0/bn-IN.xpi) = 6c1767e4830af887b044437a06521a05ecb6433e38729021eb17075118f12310 +SIZE (xpi/firefox-i18n-46.0/bn-IN.xpi) = 511116 +SHA256 (xpi/firefox-i18n-46.0/br.xpi) = f7aaa06e800816ea4051fd2ebdb2df8dc08e4a336f966b91f667a3c1cd6332cf +SIZE (xpi/firefox-i18n-46.0/br.xpi) = 434620 +SHA256 (xpi/firefox-i18n-46.0/bs.xpi) = 164e8f0bd85aeda4d06a10f71224e5c934474c94f0758d6421eedf9d8141e3d8 +SIZE (xpi/firefox-i18n-46.0/bs.xpi) = 441621 +SHA256 (xpi/firefox-i18n-46.0/ca.xpi) = d6bfb1a3a352cf7f5b9359aa79e3e8524c62308a3f693d2371a8d0202478aae5 +SIZE (xpi/firefox-i18n-46.0/ca.xpi) = 439859 +SHA256 (xpi/firefox-i18n-46.0/cs.xpi) = e8c4fc6792b12c074e2faa2e5aba3a4ebe52afe9c16c22785ada5796c6e1bba9 +SIZE (xpi/firefox-i18n-46.0/cs.xpi) = 442444 +SHA256 (xpi/firefox-i18n-46.0/cy.xpi) = f1e2139c07a6520a2b73258e45b7f74744b7863787ed2e629f29fa65180cf2ff +SIZE (xpi/firefox-i18n-46.0/cy.xpi) = 437876 +SHA256 (xpi/firefox-i18n-46.0/da.xpi) = b12d113a3d9d6dae0b7b7cf4e8e0e1e3fbc83bcb7527803d76940ee43bf90929 +SIZE (xpi/firefox-i18n-46.0/da.xpi) = 428341 +SHA256 (xpi/firefox-i18n-46.0/de.xpi) = b14c26fc8793d60fd1098f2f8caf0d26fde877d9ac736ba6e541725446135b2a +SIZE (xpi/firefox-i18n-46.0/de.xpi) = 444268 +SHA256 (xpi/firefox-i18n-46.0/dsb.xpi) = a599a59056d86ad68b3c248525b3f4986e28d98b060d21d94fad6e813320bff1 +SIZE (xpi/firefox-i18n-46.0/dsb.xpi) = 462489 +SHA256 (xpi/firefox-i18n-46.0/el.xpi) = b778555f9cc12ff1beeea8cd2ce6049d8410df8cb283aa7b9b58a17d226fa6b5 +SIZE (xpi/firefox-i18n-46.0/el.xpi) = 473311 +SHA256 (xpi/firefox-i18n-46.0/en-GB.xpi) = c4714ff0d8750378461d150222716659cc95827344d2653ef87a59d595671ad1 +SIZE (xpi/firefox-i18n-46.0/en-GB.xpi) = 421832 +SHA256 (xpi/firefox-i18n-46.0/en-ZA.xpi) = 978f834143a5179418641acc06553103589adea8d0e6b6b393a09a319b1217ea +SIZE (xpi/firefox-i18n-46.0/en-ZA.xpi) = 411466 +SHA256 (xpi/firefox-i18n-46.0/eo.xpi) = 4a064487f8e71b4572c087d16ce4b43059ad74171173e68bb93c0e433160c942 +SIZE (xpi/firefox-i18n-46.0/eo.xpi) = 438143 +SHA256 (xpi/firefox-i18n-46.0/es-AR.xpi) = 29545eb48f7bd0c271de03fddf75ff5a25787b214480ed248584eefb242fa28f +SIZE (xpi/firefox-i18n-46.0/es-AR.xpi) = 439950 +SHA256 (xpi/firefox-i18n-46.0/es-CL.xpi) = 58bbe653ff54178b1b774333acc784b4f7e44d23c06ab3d280a618eb44919829 +SIZE (xpi/firefox-i18n-46.0/es-CL.xpi) = 369969 +SHA256 (xpi/firefox-i18n-46.0/es-ES.xpi) = 26d03abea3ef085ae8f58c2a8585b3c4f373a1966e3ac0150e9ee126e44b091c +SIZE (xpi/firefox-i18n-46.0/es-ES.xpi) = 351180 +SHA256 (xpi/firefox-i18n-46.0/es-MX.xpi) = b13a25a3f73308e70c4f9b27dd5991ea0abaeb35e2ca4eaec62485673b5d239a +SIZE (xpi/firefox-i18n-46.0/es-MX.xpi) = 447979 +SHA256 (xpi/firefox-i18n-46.0/et.xpi) = 0c44f7f904eecfddfca3b230960698d1354194c9d61f16275efc8f1fba136a18 +SIZE (xpi/firefox-i18n-46.0/et.xpi) = 431024 +SHA256 (xpi/firefox-i18n-46.0/eu.xpi) = 4205ce50589d7c13668db050a46e3d51e99848d9cf56ccee8d963c9e82984ae4 +SIZE (xpi/firefox-i18n-46.0/eu.xpi) = 439771 +SHA256 (xpi/firefox-i18n-46.0/fa.xpi) = af4da0d7eeea69e056d42032762a69c07f2701b537ffd1cc6043ef9ded81ee69 +SIZE (xpi/firefox-i18n-46.0/fa.xpi) = 490944 +SHA256 (xpi/firefox-i18n-46.0/ff.xpi) = 50a25095e330031c76f3abd715f4eb0304da608e7800d425a6027b7ef45b2c5e +SIZE (xpi/firefox-i18n-46.0/ff.xpi) = 444062 +SHA256 (xpi/firefox-i18n-46.0/fi.xpi) = af03d0d3a3bacf96911e6adfcb132b2dd8797f1711b1326479f4e771592e7fb4 +SIZE (xpi/firefox-i18n-46.0/fi.xpi) = 433020 +SHA256 (xpi/firefox-i18n-46.0/fr.xpi) = 6e795f71f1d351a860351b5fdfafd51739cf91c7ccfb8dc9fdbfc9d0c75c1480 +SIZE (xpi/firefox-i18n-46.0/fr.xpi) = 452728 +SHA256 (xpi/firefox-i18n-46.0/fy-NL.xpi) = 11c3cab12d0b977fad9160f3a1504539fffd670184aef9dd25b8612e09ffa6c6 +SIZE (xpi/firefox-i18n-46.0/fy-NL.xpi) = 446168 +SHA256 (xpi/firefox-i18n-46.0/ga-IE.xpi) = f125b502fe1c9d9de95ad5d9a8813a09005a61a441d72df2333ef44f87b63825 +SIZE (xpi/firefox-i18n-46.0/ga-IE.xpi) = 458904 +SHA256 (xpi/firefox-i18n-46.0/gd.xpi) = bce8174b84a47bc02424b12ce40432de8eba92c21c46e769bc8e14d75c9f3dd0 +SIZE (xpi/firefox-i18n-46.0/gd.xpi) = 448230 +SHA256 (xpi/firefox-i18n-46.0/gl.xpi) = 4036f0d8fafbe22792c8d694a542fe0ddbe32d93deb93a78e93e05b294417875 +SIZE (xpi/firefox-i18n-46.0/gl.xpi) = 437766 +SHA256 (xpi/firefox-i18n-46.0/gn.xpi) = 0171e1e407286d705bb150d0add35235dc324917e2ea4907a6d473f0111efb4f +SIZE (xpi/firefox-i18n-46.0/gn.xpi) = 459161 +SHA256 (xpi/firefox-i18n-46.0/gu-IN.xpi) = 64e574f4b80bea11389ccbc951f9369dc26aabbc0f01346c86ccf4caa2f7d671 +SIZE (xpi/firefox-i18n-46.0/gu-IN.xpi) = 475142 +SHA256 (xpi/firefox-i18n-46.0/he.xpi) = ae790d2392e74b9c91f7b60bf51585bc5d3541b25445834530e0f74a818ca321 +SIZE (xpi/firefox-i18n-46.0/he.xpi) = 458180 +SHA256 (xpi/firefox-i18n-46.0/hi-IN.xpi) = 45702138fc4fdc28b49b4d4cbb468617ff1ea6782ac613d530146b7ac6564998 +SIZE (xpi/firefox-i18n-46.0/hi-IN.xpi) = 489651 +SHA256 (xpi/firefox-i18n-46.0/hr.xpi) = d09bd205ca032edc73bcf6a397303329b683f86cb86ef2d68080e09a90ac0845 +SIZE (xpi/firefox-i18n-46.0/hr.xpi) = 447689 +SHA256 (xpi/firefox-i18n-46.0/hsb.xpi) = 1d992b99aa7248f17c02b1c91c445f8954e4c9ad59743a0773a8b47eb12da5ce +SIZE (xpi/firefox-i18n-46.0/hsb.xpi) = 460152 +SHA256 (xpi/firefox-i18n-46.0/hu.xpi) = 4bb111606b82e225d58f225685206b3dc9a366497e8b30652f8fc97ba4f83d5d +SIZE (xpi/firefox-i18n-46.0/hu.xpi) = 452539 +SHA256 (xpi/firefox-i18n-46.0/hy-AM.xpi) = 4c37aa4c63d09b0e2037d5056fae12cbbc1d168d6dc489a42a3605f296cb0f2f +SIZE (xpi/firefox-i18n-46.0/hy-AM.xpi) = 499568 +SHA256 (xpi/firefox-i18n-46.0/id.xpi) = c31226896c8847e29aa19f6dd1115145409ca5ee4c45f0bd53dfd02430240ba7 +SIZE (xpi/firefox-i18n-46.0/id.xpi) = 424737 +SHA256 (xpi/firefox-i18n-46.0/is.xpi) = c0a83dfc0e44a4a7ea07126fef84d6e68ff1965b636ad0ff882433de9649d380 +SIZE (xpi/firefox-i18n-46.0/is.xpi) = 441729 +SHA256 (xpi/firefox-i18n-46.0/it.xpi) = cd770c0fe5b9dcfff7056c08441d0cf9b0d3e8e4088c02510a4959f27975d77e +SIZE (xpi/firefox-i18n-46.0/it.xpi) = 345366 +SHA256 (xpi/firefox-i18n-46.0/ja.xpi) = 9072722594eef1f73b76e2f69503757589a7eb69eb7d714e6be1bb9cfdd21bdb +SIZE (xpi/firefox-i18n-46.0/ja.xpi) = 489493 +SHA256 (xpi/firefox-i18n-46.0/kk.xpi) = 08bfecc3e683fd30b91e9bd68b9382b0448460b9db08bf1705e1eecaf0bac2ba +SIZE (xpi/firefox-i18n-46.0/kk.xpi) = 496353 +SHA256 (xpi/firefox-i18n-46.0/km.xpi) = 94137ded181bd55e3f9fc70e89ebcfe6b7908dfa41a0c70fa579f85f0ca6c253 +SIZE (xpi/firefox-i18n-46.0/km.xpi) = 507043 +SHA256 (xpi/firefox-i18n-46.0/kn.xpi) = 586a10a626ce066ba1970d7d8e30f23177ba657942d0d4348c17dcb13b93d529 +SIZE (xpi/firefox-i18n-46.0/kn.xpi) = 516228 +SHA256 (xpi/firefox-i18n-46.0/ko.xpi) = 35a39b0958ac5ee06ff0c2355da39f2158875fe5b6f50395ed01af243022ceb5 +SIZE (xpi/firefox-i18n-46.0/ko.xpi) = 464533 +SHA256 (xpi/firefox-i18n-46.0/lij.xpi) = 7e3b3d1a426541d2a944473b999cd2d0cb7e19ce2f5010b92f81b41ff1144e6b +SIZE (xpi/firefox-i18n-46.0/lij.xpi) = 386443 +SHA256 (xpi/firefox-i18n-46.0/lt.xpi) = 23a8313e98f0c635b3dbcac68f68469c6dbb9b66b409779c1a78de033fe5b208 +SIZE (xpi/firefox-i18n-46.0/lt.xpi) = 453289 +SHA256 (xpi/firefox-i18n-46.0/lv.xpi) = d15d0e26fd8e3235c566e5bcd29a8e6cb1bcee5dd40c6a941c6e344506540a6b +SIZE (xpi/firefox-i18n-46.0/lv.xpi) = 444308 +SHA256 (xpi/firefox-i18n-46.0/mai.xpi) = f6dc411db917a9ef0de3a5f0697dfc78cd2c800c34255337655cf4efc03ca090 +SIZE (xpi/firefox-i18n-46.0/mai.xpi) = 495279 +SHA256 (xpi/firefox-i18n-46.0/mk.xpi) = 644e607e4226756ba15df243059ba5f0a7bd53352cafc600af41c6621799e8e6 +SIZE (xpi/firefox-i18n-46.0/mk.xpi) = 478876 +SHA256 (xpi/firefox-i18n-46.0/ml.xpi) = b9673c9bd3b816fc8dad6ff7f1421a595bd108dd43aa70961d8f75a5671aeae5 +SIZE (xpi/firefox-i18n-46.0/ml.xpi) = 520778 +SHA256 (xpi/firefox-i18n-46.0/mr.xpi) = f632e20b453350166fa4829421fdadf9caf47f868a03b8d11ecfab6a2e5ab1d8 +SIZE (xpi/firefox-i18n-46.0/mr.xpi) = 502340 +SHA256 (xpi/firefox-i18n-46.0/ms.xpi) = a4fa3fbd034ff9d411fd066a9450586b9fcde50fa1c1e62abbcba8431a3bf0b0 +SIZE (xpi/firefox-i18n-46.0/ms.xpi) = 442934 +SHA256 (xpi/firefox-i18n-46.0/nb-NO.xpi) = 07202efd56d6bd5eca50a6a42b325267f9a867ee5cfbd2945fa90ba4d52a519b +SIZE (xpi/firefox-i18n-46.0/nb-NO.xpi) = 433763 +SHA256 (xpi/firefox-i18n-46.0/nl.xpi) = 3dfc67fafc82fa312db50f2692a8c4de38cc4930162704e05a9fa05154f3dce7 +SIZE (xpi/firefox-i18n-46.0/nl.xpi) = 433503 +SHA256 (xpi/firefox-i18n-46.0/nn-NO.xpi) = 13242257b9cec3d6bea8c453b48103e3a312af5e25aca7d415d62ddd3f13924d +SIZE (xpi/firefox-i18n-46.0/nn-NO.xpi) = 429674 +SHA256 (xpi/firefox-i18n-46.0/or.xpi) = 01ba1055c33953962949f7717a850d81c27aecf7b84fef5f5d09827a302529ea +SIZE (xpi/firefox-i18n-46.0/or.xpi) = 498519 +SHA256 (xpi/firefox-i18n-46.0/pa-IN.xpi) = beaaee2689247170f69902215af706ada1435150c5a003e3f57e01824d56335f +SIZE (xpi/firefox-i18n-46.0/pa-IN.xpi) = 492242 +SHA256 (xpi/firefox-i18n-46.0/pl.xpi) = 05e0389cc6e808ad43c5c63ff34cb258dcb117e6f5ca5296e8bcb5916918dc04 +SIZE (xpi/firefox-i18n-46.0/pl.xpi) = 385182 +SHA256 (xpi/firefox-i18n-46.0/pt-BR.xpi) = 1445768139d1f6446b7bbb8994fdcca244879e076508f117346e54b0eb3558f1 +SIZE (xpi/firefox-i18n-46.0/pt-BR.xpi) = 449180 +SHA256 (xpi/firefox-i18n-46.0/pt-PT.xpi) = e34c96e262eb1c405935b198e110ee66e70137207c98244dffdf575838c7c462 +SIZE (xpi/firefox-i18n-46.0/pt-PT.xpi) = 435559 +SHA256 (xpi/firefox-i18n-46.0/rm.xpi) = 9535f8e33f333f05064fe79952958a95b182467705935f50ccd4ef9ca293e923 +SIZE (xpi/firefox-i18n-46.0/rm.xpi) = 436663 +SHA256 (xpi/firefox-i18n-46.0/ro.xpi) = ade9d780415b51e3f33e8166addfe630e5031bc76dcb61886d6b2abf3be79bb3 +SIZE (xpi/firefox-i18n-46.0/ro.xpi) = 449481 +SHA256 (xpi/firefox-i18n-46.0/ru.xpi) = 2d2813de241fbbf8b1635fd5e1048c06f0d8ce454d725ed54ab3ea3974da2505 +SIZE (xpi/firefox-i18n-46.0/ru.xpi) = 396302 +SHA256 (xpi/firefox-i18n-46.0/si.xpi) = efb0f41536540d2416f515466738c07ea84ab9ef16255886a76994cf1ee0077b +SIZE (xpi/firefox-i18n-46.0/si.xpi) = 484910 +SHA256 (xpi/firefox-i18n-46.0/sk.xpi) = 7b716650c5e45e15050188c038dbfd8916a932db0f77b79f0543ff556c59ea4b +SIZE (xpi/firefox-i18n-46.0/sk.xpi) = 452438 +SHA256 (xpi/firefox-i18n-46.0/sl.xpi) = 1a43d30c62acdfb7f1dd999d7024e060e4f1585ea6e8e8644ba117146064b2cd +SIZE (xpi/firefox-i18n-46.0/sl.xpi) = 443725 +SHA256 (xpi/firefox-i18n-46.0/son.xpi) = 3fbc8ce72b144388a5cf086ec3564d3b67d763d35b3ce850a5b63e9ccc0485a2 +SIZE (xpi/firefox-i18n-46.0/son.xpi) = 436205 +SHA256 (xpi/firefox-i18n-46.0/sq.xpi) = fa6256f44984435a15ce8b21fb93e27723b06e5f818b1fab59540af56188c2bb +SIZE (xpi/firefox-i18n-46.0/sq.xpi) = 450772 +SHA256 (xpi/firefox-i18n-46.0/sr.xpi) = cab87a556aa49508eb6196cfd8c3bc282692c45aadf524adc48ea6034a449df4 +SIZE (xpi/firefox-i18n-46.0/sr.xpi) = 467598 +SHA256 (xpi/firefox-i18n-46.0/sv-SE.xpi) = a878876e86ce8c92d13eb083e8c088fdcd24fd6aab03b1907f9d1a31668458d5 +SIZE (xpi/firefox-i18n-46.0/sv-SE.xpi) = 442643 +SHA256 (xpi/firefox-i18n-46.0/ta.xpi) = 44e3c0cca2ca5ac747cfbb4c4c424ebd62c200f14cb0ccf18315000a350e3a60 +SIZE (xpi/firefox-i18n-46.0/ta.xpi) = 485894 +SHA256 (xpi/firefox-i18n-46.0/te.xpi) = ce01126833f7707550e7bddbcf0cb89686b45b95186dce08e530cc6615e1ee84 +SIZE (xpi/firefox-i18n-46.0/te.xpi) = 512321 +SHA256 (xpi/firefox-i18n-46.0/th.xpi) = 8bb483e006ec6d75b6c1ec2daa2456e6d4fde8a7f592889629edeafbb7bd5729 +SIZE (xpi/firefox-i18n-46.0/th.xpi) = 489017 +SHA256 (xpi/firefox-i18n-46.0/tr.xpi) = 52ab3ee5d26412eed8848ff98c00389ae23013ebb231f6548dc4cd4c4caab608 +SIZE (xpi/firefox-i18n-46.0/tr.xpi) = 443017 +SHA256 (xpi/firefox-i18n-46.0/uk.xpi) = cb1ce0a6fb9cd724f235a47e685f08eee1c24f20502d41ac55c1b985b39dfb83 +SIZE (xpi/firefox-i18n-46.0/uk.xpi) = 492432 +SHA256 (xpi/firefox-i18n-46.0/uz.xpi) = 5fa6bed2eb75f7dda1473f9573f6421eba6ca309c48933e3d759b0bc93d7bc22 +SIZE (xpi/firefox-i18n-46.0/uz.xpi) = 450193 +SHA256 (xpi/firefox-i18n-46.0/vi.xpi) = c34cce409028112f1985c73096277b1ca53a6aacb4b6f37d3a1c75e9f09e6426 +SIZE (xpi/firefox-i18n-46.0/vi.xpi) = 453661 +SHA256 (xpi/firefox-i18n-46.0/xh.xpi) = 5b27fb4df7e15f5e08ab2b38e7b488aa4dae04c103bbd32e1b845995e1409b2b +SIZE (xpi/firefox-i18n-46.0/xh.xpi) = 439663 +SHA256 (xpi/firefox-i18n-46.0/zh-CN.xpi) = a21c2b8dcee8df36fe49ab59a7381668ad2a471606eb5fbc86c6e1d456daf54a +SIZE (xpi/firefox-i18n-46.0/zh-CN.xpi) = 464300 +SHA256 (xpi/firefox-i18n-46.0/zh-TW.xpi) = 2c363a59e3447698abaf6442ba5d5bd6db18c0ba0f411821b13060d13b676be6 +SIZE (xpi/firefox-i18n-46.0/zh-TW.xpi) = 472116 Index: branches/2016Q2/www/libxul/Makefile =================================================================== --- branches/2016Q2/www/libxul/Makefile (revision 413771) +++ branches/2016Q2/www/libxul/Makefile (revision 413772) @@ -1,80 +1,80 @@ # Created by: Michael Johnson # $FreeBSD$ PORTNAME= libxul -DISTVERSION= 38.7.1 -PORTREVISION= 1 +DISTVERSION= 45.1.0 CATEGORIES?= www devel MASTER_SITES= MOZILLA/firefox/releases/${DISTVERSION}esr/source \ MOZILLA/firefox/candidates/${DISTVERSION}esr-candidates/build1/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.10:devel/nspr \ - nss>=3.19.2.1:security/nss \ +BUILD_DEPENDS= nspr>=4.12:devel/nspr \ + nss>=3.21.1:security/nss \ libevent2>=2.0.21_2:devel/libevent2 \ - soundtouch>=1.8.0:audio/soundtouch \ - harfbuzz>=0.9.34:print/harfbuzz \ - graphite2>=1.2.4:graphics/graphite2 \ + soundtouch>=1.9.0:audio/soundtouch \ + harfbuzz>=1.1.0:print/harfbuzz \ + graphite2>=1.3.6:graphics/graphite2 \ + png>=1.6.19:graphics/png \ libvorbis>=1.3.5,3:audio/libvorbis \ - libvpx>=1.3.0:multimedia/libvpx \ - sqlite3>=3.8.9:databases/sqlite3 \ + libvpx>=1.5.0:multimedia/libvpx \ + sqlite3>=3.9.1:databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3 \ v4l_compat>0:multimedia/v4l_compat \ autoconf-2.13:devel/autoconf213 \ + yasm:devel/yasm \ zip:archivers/zip \ unzip:archivers/unzip -# opus>=1.1:audio/opus \ LIB_DEPENDS= libv4l2.so:multimedia/libv4l -WRKSRC= ${WRKDIR}/mozilla-esr38 +WRKSRC:= ${WRKDIR}/firefox-${DISTVERSION}esr CONFLICTS_INSTALL= libxul-1.9.* USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl -USES= pathfix tar:bzip2 +USES= pathfix tar:xz 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 +USE_MOZILLA= # empty MOZILLA_PLIST_DIRS= bin include lib share/idl libdata MOZ_PKGCONFIG_FILES= libxul-embedding libxul mozilla-js \ mozilla-plugin -OPTIONS_DEFAULT= GTK2 +OPTIONS_EXCLUDE= GSTREAMER LOGGING +OPTIONS_DEFINE= RUST +OPTIONS_DEFAULT= BUNDLED_CAIRO GTK2 OPTIONS_SINGLE+= TOOLKIT OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3 .include "${.CURDIR}/../../www/firefox/Makefile.options" .if ${USE_MOZILLA:M-nss} MOZ_PKGCONFIG_FILES+= mozilla-nss .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: branches/2016Q2/www/libxul/distinfo =================================================================== --- branches/2016Q2/www/libxul/distinfo (revision 413771) +++ branches/2016Q2/www/libxul/distinfo (revision 413772) @@ -1,2 +1,2 @@ -SHA256 (firefox-38.7.1esr.source.tar.bz2) = d0fce46a948610c8231ceaad5da5542bd57af363ff2341d77f2f00955f888f65 -SIZE (firefox-38.7.1esr.source.tar.bz2) = 181300248 +SHA256 (firefox-45.1.0esr.source.tar.xz) = 8bdc4a0f6d0ca4f28e888ca0044ba735ddc78302820b5ffcc25cd65064ff40a1 +SIZE (firefox-45.1.0esr.source.tar.xz) = 184373664 Index: branches/2016Q2/www/libxul/files/patch-bug779713 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug779713 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug779713 (nonexistent) @@ -1,77 +0,0 @@ -diff --git mfbt/Alignment.h mfbt/Alignment.h -index e0843ca..353ec36 100644 ---- mfbt/Alignment.h -+++ mfbt/Alignment.h -@@ -9,11 +9,20 @@ - #ifndef mozilla_Alignment_h - #define mozilla_Alignment_h - -+#include "mozilla/Attributes.h" -+ - #include - #include - - namespace mozilla { - -+#if defined(MOZ_HAVE_CXX11_ALIGNAS) -+#define MOZ_ALIGNOF(T) alignof(T) -+#elif defined(__GNUC__) -+#define MOZ_ALIGNOF(T) __alignof__(T) -+#elif defined(_MSC_VER) -+#define MOZ_ALIGNOF(T) __alignof(T) -+#else - /* - * This class, and the corresponding macro MOZ_ALIGNOF, figures out how many - * bytes of alignment a given type needs. -@@ -32,6 +41,7 @@ public: - }; - - #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment -+#endif - - /* - * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. -@@ -43,7 +53,10 @@ public: - * will declare a two-character array |arr| aligned to 8 bytes. - */ - --#if defined(__GNUC__) -+#if defined(MOZ_HAVE_CXX11_ALIGNAS) -+# define MOZ_ALIGNED_DECL(_type, _align) \ -+ alignas(_align) _type -+#elif defined(__GNUC__) - # define MOZ_ALIGNED_DECL(_type, _align) \ - _type __attribute__((aligned(_align))) - #elif defined(_MSC_VER) -diff --git mfbt/Attributes.h mfbt/Attributes.h -index d317766..ddb13da 100644 ---- mfbt/Attributes.h -+++ mfbt/Attributes.h -@@ -50,6 +50,7 @@ - * don't indicate support for them here, due to - * http://stackoverflow.com/questions/20498142/visual-studio-2013-explicit-keyword-bug - */ -+# define MOZ_HAVE_CXX11_ALIGNAS - # define MOZ_HAVE_NEVER_INLINE __declspec(noinline) - # define MOZ_HAVE_NORETURN __declspec(noreturn) - # ifdef __clang__ -@@ -70,6 +71,9 @@ - # ifndef __has_extension - # define __has_extension __has_feature /* compatibility, for older versions of clang */ - # endif -+# if __has_extension(cxx_alignas) -+# define MOZ_HAVE_CXX11_ALIGNAS -+# endif - # if __has_extension(cxx_constexpr) - # define MOZ_HAVE_CXX11_CONSTEXPR - # endif -@@ -84,6 +88,9 @@ - # endif - #elif defined(__GNUC__) - # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L -+# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) -+# define MOZ_HAVE_CXX11_ALIGNAS -+# endif - # define MOZ_HAVE_CXX11_CONSTEXPR - # define MOZ_HAVE_EXPLICIT_CONVERSION - # endif Property changes on: branches/2016Q2/www/libxul/files/patch-bug779713 ___________________________________________________________________ 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: branches/2016Q2/www/libxul/files/extra-patch-bug1125514 =================================================================== --- branches/2016Q2/www/libxul/files/extra-patch-bug1125514 (revision 413771) +++ branches/2016Q2/www/libxul/files/extra-patch-bug1125514 (nonexistent) @@ -1,36 +0,0 @@ -changeset: 258513:ffbd5f5f46f1 -user: Guilherme Goncalves -date: Thu Aug 20 10:05:29 2015 +0900 -summary: Bug 1125514 - Use jemalloc's metadata statistics to compute bookkeeping. r=glandium - ---- memory/build/mozjemalloc_compat.c~ -+++ memory/build/mozjemalloc_compat.c -@@ -136,6 +136,7 @@ jemalloc_stats_impl(jemalloc_stats_t *st - { - unsigned narenas; - size_t active, allocated, mapped, page, pdirty; -+ size_t meta, ameta; - size_t lg_chunk; - - // Refresh jemalloc's stats by updating its epoch, see ctl_refresh in -@@ -149,17 +150,19 @@ jemalloc_stats_impl(jemalloc_stats_t *st - CTL_GET("stats.active", active); - CTL_GET("stats.allocated", allocated); - CTL_GET("stats.mapped", mapped); -+ CTL_GET("stats.metadata", meta); - CTL_GET("opt.lg_chunk", lg_chunk); -- CTL_GET("stats.bookkeeping", stats->bookkeeping); - - /* get the summation for all arenas, i == narenas */ - CTL_I_GET("stats.arenas.0.pdirty", pdirty, narenas); -+ CTL_I_GET("stats.arenas.0.metadata.allocated", ameta, narenas); - - stats->chunksize = 1 << lg_chunk; - stats->mapped = mapped; - stats->allocated = allocated; - stats->waste = active - allocated; - stats->page_cache = pdirty * page; -+ stats->bookkeeping = meta - ameta; - stats->bin_unused = compute_bin_unused(narenas); - stats->waste -= stats->bin_unused; - } Property changes on: branches/2016Q2/www/libxul/files/extra-patch-bug1125514 ___________________________________________________________________ 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: branches/2016Q2/www/libxul/files/patch-dom-events-MessageEvent.h =================================================================== --- branches/2016Q2/www/libxul/files/patch-dom-events-MessageEvent.h (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-dom-events-MessageEvent.h (nonexistent) @@ -1,12 +0,0 @@ ---- dom/events/MessageEvent.h.orig 2015-12-22 00:49:29.000000000 +0100 -+++ dom/events/MessageEvent.h 2016-01-17 14:44:08.806122000 +0100 -@@ -15,9 +15,6 @@ namespace mozilla { - namespace dom { - - struct MessageEventInit; --class MessagePort; --class MessagePortBase; --class MessagePortList; - class OwningWindowProxyOrMessagePort; - - /** Property changes on: branches/2016Q2/www/libxul/files/patch-dom-events-MessageEvent.h ___________________________________________________________________ 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: branches/2016Q2/www/libxul/files/patch-bug1073117 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug1073117 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug1073117 (nonexistent) @@ -1,877 +0,0 @@ -diff --git widget/gtk/gtk2drawing.c widget/gtk/gtk2drawing.c -index 34f22af..1b950ab 100644 ---- widget/gtk/gtk2drawing.c -+++ widget/gtk/gtk2drawing.c -@@ -831,7 +831,7 @@ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) - return MOZ_GTK_SUCCESS; - } - --gint -+static gint - moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, - gint* focus_width, gint* focus_pad) - { -@@ -928,7 +928,7 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) - return MOZ_GTK_SUCCESS; - } - --gint -+static gint - moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) - { - static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; -diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c -index 08a58d6..7fef6fa 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. */ -@@ -762,37 +771,17 @@ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing) - gint - moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) - { -- gboolean interior_focus; -- gint focus_width = 0; -+ GtkBorder border; -+ GtkBorder padding; -+ GtkStyleContext *style; - - ensure_entry_widget(); -- gtk_widget_style_get(gEntryWidget, -- "interior-focus", &interior_focus, -- "focus-line-width", &focus_width, -- NULL); -- if (interior_focus) { -- GtkBorder border; -- GtkStyleContext *style = gtk_widget_get_style_context(gEntryWidget); -- gtk_style_context_get_border(style, 0, &border); -- *focus_h_width = border.left + focus_width; -- *focus_v_width = border.top + focus_width; -- } else { -- *focus_h_width = focus_width; -- *focus_v_width = focus_width; -- } -- return MOZ_GTK_SUCCESS; --} -- --gint --moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, -- gint* focus_width, gint* focus_pad) --{ -- gtk_widget_style_get (widget, -- "interior-focus", interior_focus, -- "focus-line-width", focus_width, -- "focus-padding", focus_pad, -- NULL); -+ style = gtk_widget_get_style_context(gEntryWidget); - -+ gtk_style_context_get_border(style, 0, &border); -+ gtk_style_context_get_padding(style, 0, &padding); -+ *focus_h_width = border.left + padding.left; -+ *focus_v_width = border.top + padding.top; - return MOZ_GTK_SUCCESS; - } - -@@ -880,24 +860,6 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) - return MOZ_GTK_SUCCESS; - } - --gint --moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) --{ -- static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; -- GtkBorder *tmp_border; -- -- gtk_widget_style_get (widget, "inner-border", &tmp_border, NULL); -- -- if (tmp_border) { -- *inner_border = *tmp_border; -- gtk_border_free(tmp_border); -- } -- else -- *inner_border = default_inner_border; -- -- return MOZ_GTK_SUCCESS; --} -- - static gint - moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, - GtkWidgetState* state, -@@ -908,19 +870,8 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, - GtkStyleContext* style = gtk_widget_get_style_context(widget); - gint x = rect->x, y=rect->y, width=rect->width, height=rect->height; - -- gboolean interior_focus; -- gint focus_width, focus_pad; -- -- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); - gtk_widget_set_direction(widget, direction); -- -- if (!interior_focus && state->focused) { -- x += focus_width + focus_pad; -- y += focus_width + focus_pad; -- width -= 2 * (focus_width + focus_pad); -- height -= 2 * (focus_width + focus_pad); -- } -- -+ - gtk_style_context_save(style); - gtk_style_context_set_state(style, state_flags); - -@@ -953,20 +904,12 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, - } - - if (state->focused) { -- if (interior_focus) { -- GtkBorder border; -- gtk_style_context_get_border(style, state_flags, &border); -- x += border.left + focus_pad; -- y += border.top + focus_pad; -- width -= 2 * (border.left + focus_pad); -- height -= 2 * (border.top + focus_pad); -- } else { -- x -= focus_width + focus_pad; -- y -= focus_width + focus_pad; -- width += 2 * (focus_width + focus_pad); -- height += 2 * (focus_width + focus_pad); -- } -- -+ GtkBorder border; -+ gtk_style_context_get_border(style, state_flags, &border); -+ x += border.left; -+ y += border.top; -+ width -= (border.left + border.right); -+ height -= (border.top + border.bottom); - gtk_render_focus(style, cr, x, y, width, height); - } - gtk_style_context_restore(style); -@@ -1056,33 +999,23 @@ calculate_button_inner_rect(GtkWidget* button, GdkRectangle* rect, - GtkTextDirection direction, - gboolean ignore_focus) - { -- GtkBorder inner_border; -- gboolean interior_focus; -- gint focus_width, focus_pad; - GtkStyleContext* style; - GtkBorder border; -+ GtkBorder padding = {0, 0, 0, 0}; - - style = gtk_widget_get_style_context(button); - - /* This mirrors gtkbutton's child positioning */ -- moz_gtk_button_get_inner_border(button, &inner_border); -- moz_gtk_widget_get_focus(button, &interior_focus, -- &focus_width, &focus_pad); -- -- if (ignore_focus) -- focus_width = focus_pad = 0; -- - gtk_style_context_get_border(style, 0, &border); -+ if (!ignore_focus) -+ gtk_style_context_get_padding(style, 0, &padding); - -- inner_rect->x = rect->x + border.left + focus_width + focus_pad; -- inner_rect->x += direction == GTK_TEXT_DIR_LTR ? -- inner_border.left : inner_border.right; -- inner_rect->y = rect->y + inner_border.top + border.top + -- focus_width + focus_pad; -- inner_rect->width = MAX(1, rect->width - inner_border.left - -- inner_border.right - (border.left + focus_pad + focus_width) * 2); -- inner_rect->height = MAX(1, rect->height - inner_border.top - -- inner_border.bottom - (border.top + focus_pad + focus_width) * 2); -+ inner_rect->x = rect->x + border.left + padding.left; -+ inner_rect->y = rect->y + padding.top + border.top; -+ inner_rect->width = MAX(1, rect->width - padding.left - -+ padding.right - border.left * 2); -+ inner_rect->height = MAX(1, rect->height - padding.top - -+ padding.bottom - border.top * 2); - - return MOZ_GTK_SUCCESS; - } -@@ -1457,19 +1390,12 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, - { - gint x = rect->x, y = rect->y, width = rect->width, height = rect->height; - GtkStyleContext* style; -- gboolean interior_focus; -- gint focus_width; - int draw_focus_outline_only = state->depressed; // NS_THEME_FOCUS_OUTLINE - - gtk_widget_set_direction(widget, direction); - - style = gtk_widget_get_style_context(widget); - -- gtk_widget_style_get(widget, -- "interior-focus", &interior_focus, -- "focus-line-width", &focus_width, -- NULL); -- - if (draw_focus_outline_only) { - // Inflate the given 'rect' with the focus outline size. - gint h, v; -@@ -1501,14 +1427,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, - /* This will get us the lit borders that focused textboxes enjoy on - * some themes. */ - gtk_style_context_set_state(style, GTK_STATE_FLAG_FOCUSED); -- if (!interior_focus) { -- /* Indent the border a little bit if we have exterior focus -- (this is what GTK does to draw native entries) */ -- x += focus_width; -- y += focus_width; -- width -= 2 * focus_width; -- height -= 2 * focus_width; -- } - } - - if (state->disabled) { -@@ -1520,11 +1438,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, - } - gtk_render_frame(style, cr, x, y, width, height); - -- if (state->focused && !state->disabled) { -- if (!interior_focus) { -- gtk_render_focus(style, cr, rect->x, rect->y, rect->width, rect->height); -- } -- } - gtk_style_context_restore(style); - - return MOZ_GTK_SUCCESS; -@@ -1829,8 +1742,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, - GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); - GtkStyleContext* style; - GtkWidget *widget; -- gboolean interior_focus; -- gint focus_width, focus_pad; - - if (isradio) { - ensure_radiobutton_widget(); -@@ -1843,7 +1754,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, - - style = gtk_widget_get_style_context(widget); - gtk_style_context_save(style); -- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); - gtk_style_context_set_state(style, state_flags); - - /* this is for drawing a prelight box */ -@@ -1852,10 +1762,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, - rect->x, rect->y, rect->width, rect->height); - } - -- if (state->focused && !interior_focus) { -- gtk_render_focus(style, cr, -- rect->x, rect->y, rect->width, rect->height); -- } - gtk_style_context_restore(style); - - return MOZ_GTK_SUCCESS; -@@ -1868,7 +1774,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, - { - GtkStyleContext *style; - GtkWidget *widget; -- gboolean interior_focus; - - if (!state->focused) - return MOZ_GTK_SUCCESS; -@@ -1889,10 +1794,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, - } - gtk_widget_set_direction(widget, direction); - -- gtk_widget_style_get(widget, "interior-focus", &interior_focus, NULL); -- if (!interior_focus) -- return MOZ_GTK_SUCCESS; -- - gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state)); - gtk_render_focus(style, cr, - rect->x, rect->y, rect->width, rect->height); -@@ -2105,6 +2015,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); -@@ -2150,7 +2063,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); - -@@ -2167,143 +2080,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; -+ -+ gtk_style_context_save(style); -+ moz_gtk_tab_prepare_style_context(style, flags); - -- focusRect.x += border.left; -- focusRect.width -= (border.left + border.right); -- focusRect.y += border.top; -- focusRect.height -= (border.top + border.bottom); -+ 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; - } -@@ -2684,26 +2609,18 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - switch (widget) { - case MOZ_GTK_BUTTON: - { -- GtkBorder inner_border; -- gboolean interior_focus; -- gint focus_width, focus_pad; -- - ensure_button_widget(); -+ style = gtk_widget_get_style_context(gButtonWidget); -+ - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget)); - - /* Don't add this padding in HTML, otherwise the buttons will - become too big and stuff the layout. */ - if (!inhtml) { -- moz_gtk_widget_get_focus(gButtonWidget, &interior_focus, &focus_width, &focus_pad); -- moz_gtk_button_get_inner_border(gButtonWidget, &inner_border); -- *left += focus_width + focus_pad + inner_border.left; -- *right += focus_width + focus_pad + inner_border.right; -- *top += focus_width + focus_pad + inner_border.top; -- *bottom += focus_width + focus_pad + inner_border.bottom; -+ moz_gtk_add_style_padding(style, left, top, right, bottom); - } - -- moz_gtk_add_style_border(gtk_widget_get_style_context(gButtonWidget), -- left, top, right, bottom); -+ moz_gtk_add_style_border(style, left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_ENTRY: -@@ -2717,7 +2610,13 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - ensure_entry_widget(); - style = gtk_widget_get_style_context(gEntryWidget); - moz_gtk_add_style_border(style, left, top, right, bottom); -- moz_gtk_add_style_padding(style, left, top, right, bottom); -+ -+ /* Use the document padding in HTML -+ and GTK style padding in XUL. */ -+ if (!inhtml) { -+ moz_gtk_add_style_padding(style, left, top, right, bottom); -+ } -+ - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_TREEVIEW: -@@ -2737,23 +2636,15 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - * assigned. - * That is why the following code is the same as for MOZ_GTK_BUTTON. - * */ -- -- GtkBorder inner_border; -- gboolean interior_focus; -- gint focus_width, focus_pad; -+ GtkStyleContext *style; - - ensure_tree_header_cell_widget(); - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gTreeHeaderCellWidget)); - -- moz_gtk_widget_get_focus(gTreeHeaderCellWidget, &interior_focus, &focus_width, &focus_pad); -- moz_gtk_button_get_inner_border(gTreeHeaderCellWidget, &inner_border); -- *left += focus_width + focus_pad + inner_border.left; -- *right += focus_width + focus_pad + inner_border.right; -- *top += focus_width + focus_pad + inner_border.top; -- *bottom += focus_width + focus_pad + inner_border.bottom; -- -- moz_gtk_add_style_border(gtk_widget_get_style_context(gTreeHeaderCellWidget), -- left, top, right, bottom); -+ style = gtk_widget_get_style_context(gTreeHeaderCellWidget); -+ -+ moz_gtk_add_style_border(style, left, top, right, bottom); -+ moz_gtk_add_style_padding(style, left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_TREE_HEADER_SORTARROW: -@@ -2773,29 +2664,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - /* We need to account for the arrow on the dropdown, so text - * doesn't come too close to the arrow, or in some cases spill - * into the arrow. */ -- gboolean ignored_interior_focus, wide_separators; -- gint focus_width, focus_pad, separator_width; -+ gboolean wide_separators; -+ gint separator_width; - GtkRequisition arrow_req; - GtkBorder border; - - ensure_combo_box_widgets(); - -- *left = gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); -+ *left = *top = *right = *bottom = -+ gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); -+ -+ style = gtk_widget_get_style_context(gComboBoxButtonWidget); - - if (!inhtml) { -- moz_gtk_widget_get_focus(gComboBoxButtonWidget, -- &ignored_interior_focus, -- &focus_width, &focus_pad); -- *left += focus_width + focus_pad; -+ moz_gtk_add_style_padding(style, left, top, right, bottom); - } - -- style = gtk_widget_get_style_context(gComboBoxButtonWidget); -- gtk_style_context_get_border(style, 0, &border); -- -- *top = *left + border.top; -- *left += border.left; -- -- *right = *left; *bottom = *top; -+ moz_gtk_add_style_border(style, left, top, right, bottom); - - /* If there is no separator, don't try to count its width. */ - separator_width = 0; -@@ -2847,60 +2732,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - ensure_frame_widget(); - w = gFrameWidget; - break; -- case MOZ_GTK_CHECKBUTTON_LABEL: -- case MOZ_GTK_RADIOBUTTON_LABEL: -- { -- gboolean interior_focus; -- gint focus_width, focus_pad; -- -- /* If the focus is interior, then the label has a border of -- (focus_width + focus_pad). */ -- if (widget == MOZ_GTK_CHECKBUTTON_LABEL) { -- ensure_checkbox_widget(); -- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, -- &focus_width, &focus_pad); -- } -- else { -- ensure_radiobutton_widget(); -- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, -- &focus_width, &focus_pad); -- } -- -- if (interior_focus) -- *left = *top = *right = *bottom = (focus_width + focus_pad); -- -- return MOZ_GTK_SUCCESS; -- } -- - case MOZ_GTK_CHECKBUTTON_CONTAINER: - case MOZ_GTK_RADIOBUTTON_CONTAINER: - { -- gboolean interior_focus; -- gint focus_width, focus_pad; -- -- /* If the focus is _not_ interior, then the container has a border -- of (focus_width + focus_pad). */ - if (widget == MOZ_GTK_CHECKBUTTON_CONTAINER) { - ensure_checkbox_widget(); -- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, -- &focus_width, &focus_pad); - w = gCheckboxWidget; - } else { - ensure_radiobutton_widget(); -- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, -- &focus_width, &focus_pad); - w = gRadiobuttonWidget; - } -+ style = gtk_widget_get_style_context(w); - - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w)); -- -- if (!interior_focus) { -- *left += (focus_width + focus_pad); -- *right += (focus_width + focus_pad); -- *top += (focus_width + focus_pad); -- *bottom += (focus_width + focus_pad); -- } -- -+ moz_gtk_add_style_border(style, -+ left, top, right, bottom); -+ moz_gtk_add_style_padding(style, -+ left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_MENUPOPUP: -@@ -2927,6 +2775,8 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - return MOZ_GTK_SUCCESS; - } - /* These widgets have no borders, since they are not containers. */ -+ case MOZ_GTK_CHECKBUTTON_LABEL: -+ case MOZ_GTK_RADIOBUTTON_LABEL: - case MOZ_GTK_SPLITTER_HORIZONTAL: - case MOZ_GTK_SPLITTER_VERTICAL: - case MOZ_GTK_CHECKBUTTON: -@@ -2975,11 +2849,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); -@@ -2990,16 +2860,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/gtkdrawing.h widget/gtk/gtkdrawing.h -index 1938e8f..5f71cfd 100644 ---- widget/gtk/gtkdrawing.h -+++ widget/gtk/gtkdrawing.h -@@ -293,16 +293,6 @@ moz_gtk_checkbox_get_metrics(gint* indicator_size, gint* indicator_spacing); - gint - moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing); - --/** -- * Get the inner-border value for a GtkButton widget (button or tree header) -- * widget: [IN] the widget to get the border value for -- * inner_border: [OUT] the inner border -- * -- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise -- */ --gint --moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); -- - /** Get the extra size for the focus ring for outline:auto. - * widget: [IN] the widget to get the focus metrics for - * focus_h_width: [OUT] the horizontal width -@@ -313,19 +303,6 @@ moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); - gint - moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width); - --/** Get the focus metrics for a treeheadercell, button, checkbox, or radio button. -- * widget: [IN] the widget to get the focus metrics for -- * interior_focus: [OUT] whether the focus is drawn around the -- * label (TRUE) or around the whole container (FALSE) -- * focus_width: [OUT] the width of the focus line -- * focus_pad: [OUT] the padding between the focus line and children -- * -- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise -- */ --gint --moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, -- gint* focus_width, gint* focus_pad); -- - /** Get the horizontal padding for the menuitem widget or checkmenuitem widget. - * horizontal_padding: [OUT] The left and right padding of the menuitem or checkmenuitem - * -diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp -index e5e1867..76d28e3 100644 ---- widget/gtk/nsNativeThemeGTK.cpp -+++ widget/gtk/nsNativeThemeGTK.cpp -@@ -761,6 +761,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: branches/2016Q2/www/libxul/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: branches/2016Q2/www/libxul/files/patch-bug1144643 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug1144643 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug1144643 (nonexistent) @@ -1,33 +0,0 @@ -commit a0ccc19 -Author: Martin Stransky -Date: Wed Mar 18 07:14:00 2015 -0400 - - Bug 1144643 - Render tooltips as transparent on Gtk3. r=karlt - - --HG-- - extra : rebase_source : 23085532b27350ca71cbe18db071628388003f33 ---- - widget/gtk/nsNativeThemeGTK.cpp | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp -index e5e1867..26d13a5 100644 ---- widget/gtk/nsNativeThemeGTK.cpp -+++ widget/gtk/nsNativeThemeGTK.cpp -@@ -1528,9 +1528,15 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType) - case NS_THEME_MENUPOPUP: - case NS_THEME_WINDOW: - case NS_THEME_DIALOG: -- // Tooltips use gtk_paint_flat_box(). -+ return eOpaque; -+ // Tooltips use gtk_paint_flat_box() on Gtk2 -+ // but are shaped on Gtk3 - case NS_THEME_TOOLTIP: -+#if (MOZ_WIDGET_GTK == 2) - return eOpaque; -+#else -+ return eTransparent; -+#endif - } - - return eUnknownTransparency; Property changes on: branches/2016Q2/www/libxul/files/patch-bug1144643 ___________________________________________________________________ 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: branches/2016Q2/www/libxul/files/patch-bug1143686 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug1143686 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug1143686 (nonexistent) @@ -1,46 +0,0 @@ -commit e50e738 -Author: Martin Stransky -Date: Mon Mar 16 08:00:00 2015 -0400 - - Bug 1143686 - Gtk3 - Render scrollbar thumb with margin. r=karlt ---- - widget/gtk/gtk3drawing.c | 14 ++++++++++---- - 1 file changed, 10 insertions(+), 4 deletions(-) - -diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c -index 17f46ab..08a58d6 100644 ---- widget/gtk/gtk3drawing.c -+++ widget/gtk/gtk3drawing.c -@@ -1230,6 +1230,7 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, - GtkStyleContext* style; - GtkScrollbar *scrollbar; - GtkAdjustment *adj; -+ GtkBorder margin; - - ensure_scrollbar_widget(); - -@@ -1239,15 +1240,20 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, - scrollbar = GTK_SCROLLBAR(gVertScrollbarWidget); - - gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction); -- -+ - style = gtk_widget_get_style_context(GTK_WIDGET(scrollbar)); - gtk_style_context_save(style); -- -+ - gtk_style_context_add_class(style, GTK_STYLE_CLASS_SLIDER); - gtk_style_context_set_state(style, state_flags); - -- gtk_render_slider(style, cr, rect->x, rect->y, -- rect->width, rect->height, -+ gtk_style_context_get_margin (style, state_flags, &margin); -+ -+ gtk_render_slider(style, cr, -+ rect->x + margin.left, -+ rect->y + margin.top, -+ rect->width - margin.left - margin.right, -+ rect->height - margin.top - margin.bottom, - (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) ? - GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL); - Property changes on: branches/2016Q2/www/libxul/files/patch-bug1143686 ___________________________________________________________________ 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: branches/2016Q2/www/libxul/files/patch-bug1148203 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug1148203 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug1148203 (nonexistent) @@ -1,38 +0,0 @@ -# HG changeset patch -# User Chris Double -# Date 1427767594 -46800 -# Tue Mar 31 15:06:34 2015 +1300 -# Node ID 858ea94746eedc4b65734f8ceedfff7021940cb2 -# Parent 1b8f36a7ee321ca62cf87424910d0e2ed6fed076 -Bug 1148203 - Fix build errors with combinations of enable/disable of ffmp4/ffmpeg/eme - r=cpearce,ted - -Fixes build error with all three disabled. Prevents other combinations -that cause build errors by detecting them at configure time and displaying -an error message. - -diff --git a/configure.in b/configure.in ---- configure.in -+++ configure.in -@@ -5316,6 +5316,10 @@ MOZ_ARG_DISABLE_BOOL(fmp4, - MOZ_FMP4=, - MOZ_FMP4=1) - -+if test -n "$MOZ_FFMPEG" -a -z "$MOZ_FMP4"; then -+ AC_MSG_ERROR([Fragmented MP4 support must be enabled if using FFMPEG]) -+fi -+ - if test -n "$MOZ_FMP4"; then - AC_DEFINE(MOZ_FMP4) - MOZ_EME=1 -diff --git a/media/libstagefright/binding/MoofParser.cpp b/media/libstagefright/binding/MoofParser.cpp ---- media/libstagefright/binding/MoofParser.cpp -+++ media/libstagefright/binding/MoofParser.cpp -@@ -9,7 +9,7 @@ - - #include "prlog.h" - --#ifdef PR_LOGGING -+#if defined(MOZ_FMP4) && defined(PR_LOGGING) - extern PRLogModuleInfo* GetDemuxerLog(); - - /* Polyfill __func__ on MSVC to pass to the log. */ Property changes on: branches/2016Q2/www/libxul/files/patch-bug1148203 ___________________________________________________________________ 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: branches/2016Q2/www/libxul/files/patch-bug1138845 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug1138845 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug1138845 (nonexistent) @@ -1,134 +0,0 @@ -commit 4b5b332 -Author: Mike Hommey -Date: Tue Mar 3 18:41:13 2015 +0900 - - Bug 1138845 - Don't require atk-bridge for gtk+3 builds. r=tbsaunde ---- - accessible/atk/Platform.cpp | 29 +++++++++++++++++++---------- - config/system-headers | 1 - - configure.in | 2 +- - 3 files changed, 20 insertions(+), 12 deletions(-) - -diff --git accessible/atk/Platform.cpp accessible/atk/Platform.cpp -index a2afd96..2ed5e0b 100644 ---- accessible/atk/Platform.cpp -+++ accessible/atk/Platform.cpp -@@ -18,8 +18,9 @@ - #include - #endif - #include -+ - #if (MOZ_WIDGET_GTK == 3) --#include -+extern "C" __attribute__((weak,visibility("default"))) int atk_bridge_adaptor_init(int*, char **[]); - #endif - - using namespace mozilla; -@@ -46,7 +47,6 @@ static gulong sToplevel_hide_hook = 0; - - GType g_atk_hyperlink_impl_type = G_TYPE_INVALID; - --#if (MOZ_WIDGET_GTK == 2) - struct GnomeAccessibilityModule - { - const char *libName; -@@ -67,11 +67,13 @@ static GnomeAccessibilityModule sAtkBridge = { - "gnome_accessibility_module_shutdown", nullptr - }; - -+#if (MOZ_WIDGET_GTK == 2) - static GnomeAccessibilityModule sGail = { - "libgail.so", nullptr, - "gnome_accessibility_module_init", nullptr, - "gnome_accessibility_module_shutdown", nullptr - }; -+#endif - - static nsresult - LoadGtkModule(GnomeAccessibilityModule& aModule) -@@ -98,7 +100,11 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) - else - subLen = loc2 - loc1; - nsAutoCString sub(Substring(libPath, loc1, subLen)); -+#if (MOZ_WIDGET_GTK == 2) - sub.AppendLiteral("/gtk-2.0/modules/"); -+#else -+ sub.AppendLiteral("/gtk-3.0/modules/"); -+#endif - sub.Append(aModule.libName); - aModule.lib = PR_LoadLibrary(sub.get()); - if (aModule.lib) -@@ -123,7 +129,6 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) - } - return NS_OK; - } --#endif // (MOZ_WIDGET_GTK == 2) - - void - a11y::PlatformInit() -@@ -175,14 +180,17 @@ a11y::PlatformInit() - - // Init atk-bridge now - PR_SetEnv("NO_AT_BRIDGE=0"); --#if (MOZ_WIDGET_GTK == 2) -- rv = LoadGtkModule(sAtkBridge); -- if (NS_SUCCEEDED(rv)) { -- (*sAtkBridge.init)(); -- } --#else -- atk_bridge_adaptor_init(nullptr, nullptr); -+#if (MOZ_WIDGET_GTK == 3) -+ if (atk_bridge_adaptor_init) { -+ atk_bridge_adaptor_init(nullptr, nullptr); -+ } else - #endif -+ { -+ nsresult rv = LoadGtkModule(sAtkBridge); -+ if (NS_SUCCEEDED(rv)) { -+ (*sAtkBridge.init)(); -+ } -+ } - - if (!sToplevel_event_hook_added) { - sToplevel_event_hook_added = true; -@@ -210,7 +218,6 @@ a11y::PlatformShutdown() - sToplevel_hide_hook); - } - --#if (MOZ_WIDGET_GTK == 2) - if (sAtkBridge.lib) { - // Do not shutdown/unload atk-bridge, - // an exit function registered will take care of it -@@ -221,6 +228,7 @@ a11y::PlatformShutdown() - sAtkBridge.init = nullptr; - sAtkBridge.shutdown = nullptr; - } -+#if (MOZ_WIDGET_GTK == 2) - if (sGail.lib) { - // Do not shutdown gail because - // 1) Maybe it's not init-ed by us. e.g. GtkEmbed -diff --git config/system-headers config/system-headers -index 2c94a7d..cf01775 100644 ---- config/system-headers -+++ config/system-headers -@@ -189,7 +189,6 @@ asm/signal.h - ASRegistry.h - assert.h - atk/atk.h --atk-bridge.h - atlcom.h - atlconv.h - atlctl.cpp -diff --git configure.in configure.in -index 0bd1eb7..f3b3365 100644 ---- configure.in -+++ configure.in -@@ -4408,7 +4408,7 @@ fi - - if test "$COMPILE_ENVIRONMENT"; then - if test "$MOZ_ENABLE_GTK3"; then -- PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 atk-bridge-2.0 $GDK_PACKAGES) -+ PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 $GDK_PACKAGES) - MOZ_GTK3_CFLAGS="-I${_topsrcdir}/widget/gtk/compat-gtk3 $MOZ_GTK3_CFLAGS" - dnl Contrary to MOZ_GTK2_LIBS, MOZ_GTK3_LIBS needs to be literally added to TK_LIBS instead - dnl of a make reference because of how TK_LIBS is mangled in toolkit/library/moz.build Property changes on: branches/2016Q2/www/libxul/files/patch-bug1138845 ___________________________________________________________________ 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: branches/2016Q2/www/libxul/files/patch-bug1026499 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug1026499 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug1026499 (nonexistent) @@ -1,68 +0,0 @@ -commit 8d0efe4 -Author: Martin Husemann -Date: Wed Jun 18 18:12:22 2014 +0200 - - Bug 1026499 - Use MOZ_ALIGNED_DECL to declare union members in ipdl value declarations. r=bsmedberg ---- - ipc/ipdl/ipdl/cxx/ast.py | 7 ++++--- - ipc/ipdl/ipdl/cxx/cgen.py | 5 ++++- - ipc/ipdl/ipdl/lower.py | 2 +- - 4 files changed, 10 insertions(+), 5 deletions(-) - -diff --git ipc/ipdl/ipdl/cxx/ast.py ipc/ipdl/ipdl/cxx/ast.py -index 3180a65..c2d945b 100644 ---- ipc/ipdl/ipdl/cxx/ast.py -+++ ipc/ipdl/ipdl/cxx/ast.py -@@ -336,12 +336,13 @@ Type.VOID = Type('void') - Type.VOIDPTR = Type('void', ptr=1) - - class TypeArray(Node): -- def __init__(self, basetype, nmemb): -- '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr''' -+ def __init__(self, basetype, nmemb, alignType): -+ '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr, |alignType| is a type''' - self.basetype = basetype - self.nmemb = nmemb -+ self.alignType = alignType - def __deepcopy__(self, memo): -- return TypeArray(deepcopy(self.basetype, memo), nmemb) -+ return TypeArray(deepcopy(self.basetype, memo), nmemb, alignType) - - class TypeEnum(Node): - def __init__(self, name=None): -diff --git ipc/ipdl/ipdl/cxx/cgen.py ipc/ipdl/ipdl/cxx/cgen.py -index 48b0988..bc914cf 100644 ---- ipc/ipdl/ipdl/cxx/cgen.py -+++ ipc/ipdl/ipdl/cxx/cgen.py -@@ -101,6 +101,7 @@ class CxxCodeGen(CodePrinter, Visitor): - def visitDecl(self, d): - # C-syntax arrays make code generation much more annoying - if isinstance(d.type, TypeArray): -+ self.write('MOZ_ALIGNED_DECL(') - d.type.basetype.accept(self) - else: - d.type.accept(self) -@@ -111,7 +112,9 @@ class CxxCodeGen(CodePrinter, Visitor): - if isinstance(d.type, TypeArray): - self.write('[') - d.type.nmemb.accept(self) -- self.write(']') -+ self.write('], MOZ_ALIGNOF(') -+ d.type.alignType.accept(self) -+ self.write('))') - - def visitParam(self, p): - self.visitDecl(p) -diff --git ipc/ipdl/ipdl/lower.py ipc/ipdl/ipdl/lower.py -index e97a34c..9360f3c 100644 ---- ipc/ipdl/ipdl/lower.py -+++ ipc/ipdl/ipdl/lower.py -@@ -768,7 +768,7 @@ IPDL union type.""" - if self.recursive: - return self.ptrToType() - else: -- return TypeArray(Type('char'), ExprSizeof(self.internalType())) -+ return TypeArray(Type('char'), ExprSizeof(self.internalType()), self.internalType()) - - def unionValue(self): - # NB: knows that Union's storage C union is named |mValue| Property changes on: branches/2016Q2/www/libxul/files/patch-bug1026499 ___________________________________________________________________ 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: branches/2016Q2/www/libxul/files/patch-memory-jemalloc-Makefile.in =================================================================== --- branches/2016Q2/www/libxul/files/patch-memory-jemalloc-Makefile.in (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-memory-jemalloc-Makefile.in (nonexistent) @@ -1,10 +0,0 @@ ---- memory/jemalloc/Makefile.in~ -+++ memory/jemalloc/Makefile.in -@@ -12,3 +12,7 @@ include $(topsrcdir)/config/rules.mk - ifdef GNU_CC - CFLAGS += -std=gnu99 - endif -+ -+# XXX startup crash workaround for gcc47 on amd64 -+jemalloc.$(OBJ_SUFFIX): OS_CFLAGS := $(filter-out -O3 -Ofast,$(OS_CFLAGS)) -+jemalloc.$(OBJ_SUFFIX): MOZ_OPTIMIZE_FLAGS= Property changes on: branches/2016Q2/www/libxul/files/patch-memory-jemalloc-Makefile.in ___________________________________________________________________ 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: branches/2016Q2/www/libxul/files/patch-bug1013882 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug1013882 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug1013882 (revision 413772) @@ -1,69 +1,69 @@ diff --git b2g/installer/Makefile.in b2g/installer/Makefile.in index 754312a..c69904c 100644 --- b2g/installer/Makefile.in +++ b2g/installer/Makefile.in -@@ -63,6 +63,10 @@ ifneq (,$(filter rtsp,$(NECKO_PROTOCOLS))) +@@ -101,6 +101,10 @@ ifneq (,$(filter rtsp,$(NECKO_PROTOCOLS) DEFINES += -DMOZ_RTSP endif +ifdef MOZ_DEBUG +DEFINES += -DMOZ_DEBUG=1 +endif + - ifdef GKMEDIAS_SHARED_LIBRARY - DEFINES += -DGKMEDIAS_SHARED_LIBRARY - endif + DEFINES += -DMOZ_ICU_VERSION=$(MOZ_ICU_VERSION) + ifdef MOZ_NATIVE_ICU + DEFINES += -DMOZ_NATIVE_ICU diff --git b2g/installer/package-manifest.in b2g/installer/package-manifest.in index 17d433c..0416187 100644 --- b2g/installer/package-manifest.in +++ b2g/installer/package-manifest.in -@@ -576,7 +576,7 @@ - @BINPATH@/components/MozKeyboard.js - @BINPATH@/components/InputMethod.manifest +@@ -660,7 +660,7 @@ + @RESPATH@/components/EngineeringModeAPI.js + @RESPATH@/components/EngineeringModeService.js -#ifdef MOZ_DEBUG +#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG) - @BINPATH@/components/TestInterfaceJS.js - @BINPATH@/components/TestInterfaceJS.manifest + @RESPATH@/components/TestInterfaceJS.js + @RESPATH@/components/TestInterfaceJS.manifest #endif diff --git browser/installer/package-manifest.in browser/installer/package-manifest.in index b509fd4..195345c 100644 --- browser/installer/package-manifest.in +++ browser/installer/package-manifest.in @@ -608,7 +608,7 @@ @RESPATH@/components/MozKeyboard.js @RESPATH@/components/InputMethod.manifest -#ifdef MOZ_DEBUG +#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG) @RESPATH@/components/TestInterfaceJS.js @RESPATH@/components/TestInterfaceJS.manifest #endif diff --git mobile/android/installer/Makefile.in mobile/android/installer/Makefile.in index 96dceab..3528ad6 100644 --- mobile/android/installer/Makefile.in +++ mobile/android/installer/Makefile.in @@ -41,6 +41,10 @@ BINPATH = bin endif DEFINES += -DBINPATH=$(BINPATH) +ifdef MOZ_DEBUG +DEFINES += -DMOZ_DEBUG=1 +endif + ifdef ENABLE_MARIONETTE DEFINES += -DENABLE_MARIONETTE=1 endif diff --git mobile/android/installer/package-manifest.in mobile/android/installer/package-manifest.in index 994580b..cf142df 100644 --- mobile/android/installer/package-manifest.in +++ mobile/android/installer/package-manifest.in @@ -440,7 +440,7 @@ @BINPATH@/components/dom_webspeechsynth.xpt #endif -#ifdef MOZ_DEBUG +#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG) @BINPATH@/components/TestInterfaceJS.js @BINPATH@/components/TestInterfaceJS.manifest #endif Index: branches/2016Q2/www/libxul/files/patch-bug1021761 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug1021761 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug1021761 (revision 413772) @@ -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); +- r = snd_pcm_open(&pcm, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); ++ r = WRAP(snd_pcm_open)(&pcm, CUBEB_ALSA_PCM_NAME, 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: branches/2016Q2/www/libxul/files/patch-bug1233275 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug1233275 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug1233275 (revision 413772) @@ -1,40 +1,36 @@ # Copy environment for IPC using NSPR to avoid race diff --git a/ipc/chromium/src/base/process_util_bsd.cc b/ipc/chromium/src/base/process_util_bsd.cc --- ipc/chromium/src/base/process_util_bsd.cc +++ ipc/chromium/src/base/process_util_bsd.cc -@@ -13,6 +13,7 @@ +@@ -12,10 +12,9 @@ #include +#include "nspr.h" #include "base/eintr_wrapper.h" - #include "base/file_util.h" - #include "base/logging.h" -@@ -48,7 +49,6 @@ - #ifdef HAVE_POSIX_SPAWN - #include --extern "C" char **environ __dso_public; - #endif +-extern "C" char **environ __attribute__((__visibility__("default"))); +- + namespace base { - namespace { -@@ -114,6 +114,7 @@ bool LaunchApp(const std::vector + #include "SharedMemoryBasic.h" + #include "mozilla/Atomics.h" +@@ -34,7 +34,7 @@ struct ParamTraits; + namespace mozilla { + #if defined(OS_WIN) + typedef HANDLE CrossProcessMutexHandle; +-#elif defined(OS_LINUX) || defined(OS_MACOSX) ++#elif !defined(OS_NETBSD) && !defined(OS_OPENBSD) + typedef mozilla::ipc::SharedMemoryBasic::Handle CrossProcessMutexHandle; + #else + // Stub for other platforms. We can't use uintptr_t here since different +@@ -100,7 +100,7 @@ private: + + #if defined(OS_WIN) + HANDLE mMutex; +-#elif defined(OS_LINUX) || defined(OS_MACOSX) ++#elif !defined(OS_NETBSD) && !defined(OS_OPENBSD) + RefPtr mSharedBuffer; + pthread_mutex_t* mMutex; + mozilla::Atomic* mCount; +diff --git a/ipc/glue/moz.build b/ipc/glue/moz.build +--- ipc/glue/moz.build ++++ ipc/glue/moz.build +@@ -61,7 +61,7 @@ if CONFIG['OS_ARCH'] == 'WINNT': + SOURCES += [ + 'CrossProcessMutex_windows.cpp', + ] +-elif CONFIG['OS_ARCH'] in ('Linux', 'Darwin'): ++elif not CONFIG['OS_ARCH'] in ('NetBSD', 'OpenBSD'): + UNIFIED_SOURCES += [ + 'CrossProcessMutex_posix.cpp', + ] Property changes on: branches/2016Q2/www/libxul/files/patch-bug1252246 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2016Q2/www/libxul/files/patch-bug702179 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug702179 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug702179 (revision 413772) @@ -1,24 +1,13 @@ -commit 6ddaacd -Author: Ginn Chen -Date: Wed Nov 30 07:23:46 2011 +0800 - - Bug 702179 dtrace probes are not installed on Solaris with static js lib r=glandium ---- - js/src/Makefile.in | 3 --- - toolkit/library/moz.build | 5 ----- - 2 files changed, 8 deletions(-) - -diff --git js/src/Makefile.in js/src/Makefile.in -index 62bbfa0..90400cb 100644 ---- js/src/Makefile.in -+++ js/src/Makefile.in -@@ -17,9 +17,6 @@ TOPLEVEL_BUILD := 1 - run_for_side_effects := $(shell echo 'MAKE: $(MAKE)') - EXTRA_LIBS += $(NSPR_LIBS) +--- js/src/moz.build.orig 2015-12-16 12:32:04.574425000 +0100 ++++ js/src/moz.build 2015-12-16 12:32:09.032032000 +0100 +@@ -671,10 +671,6 @@ CFLAGS += CONFIG['MOZ_ICU_CFLAGS'] + CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS'] + LOCAL_INCLUDES += CONFIG['MOZ_ICU_INCLUDES'] --DIST_INSTALL = 1 --NO_EXPAND_LIBS = 1 +-NO_EXPAND_LIBS = True - - ifdef JS_HAS_CTYPES - ifdef MOZ_NATIVE_FFI - LOCAL_INCLUDES = $(MOZ_FFI_CFLAGS) +-DIST_INSTALL = True +- + # Prepare self-hosted JS code for embedding + GENERATED_FILES += ['selfhosted.out.h'] + selfhosted = GENERATED_FILES['selfhosted.out.h'] Index: branches/2016Q2/www/libxul/files/patch-bug826985 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug826985 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug826985 (revision 413772) @@ -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 -@@ -635,6 +635,7 @@ libgnomevfs/gnome-vfs-mime-handlers.h - libgnomevfs/gnome-vfs-mime-utils.h - libgnomevfs/gnome-vfs-ops.h - libgnomevfs/gnome-vfs-standard-callbacks.h +@@ -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', +@@ -75,6 +78,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', ++ ], ++ }], + ], -+ 'cflags_mozilla': [ -+ '$(MOZ_LIBV4L2_CFLAGS)', -+ ], -+ 'libraries': [ -+ '-lv4l2', -+ ], -+ }], -+ ], - }], # linux - ['OS=="mac"', { - 'sources': [ + }], # 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: branches/2016Q2/www/libxul/files/patch-bug847568 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug847568 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug847568 (revision 413772) @@ -1,238 +1,257 @@ # 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) +@@ -49,6 +49,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 +@@ -1344,3 +1344,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 +@@ -7989,6 +7989,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) ++ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 1.1.0) +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) ++ #if !GR2_VERSION_REQUIRE(1,3,6) + #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', - ] +@@ -397,6 +397,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 -@@ -37,6 +37,9 @@ +@@ -1,6 +1,7 @@ + #!/bin/bash + + # Script used to update the Graphite2 library in the mozilla source tree ++# and bump version for --with-system-graphite2 + + # This script lives in gfx/graphite2, along with the library source, + # but must be run from the top level of the mozilla-central tree. +@@ -37,12 +38,16 @@ echo "See" $0 "for update procedure." >> #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/;" {} \; ++# chase version for --with-system-graphite2 +perl -p -i -e "s/[0-9]+\,[0-9]+\,[0-9]+/$RELEASE/ and tr/./,/ \ + if /GR2_VERSION_REQUIRE/" configure.in + # summarize what's been touched echo Updated to $RELEASE. echo Here is what changed in the gfx/graphite2 directory: + echo + +-hg stat gfx/graphite2 ++hg stat configure.in gfx/graphite2 + + echo + echo If gfx/graphite2/src/files.mk has changed, please make corresponding 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'] +@@ -134,6 +134,9 @@ if CONFIG['CLANG_CXX'] or CONFIG['CLANG_ + '-Wno-unused-private-field', + ] +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'] +@@ -752,6 +752,9 @@ if CONFIG['CLANG_CXX'] or CONFIG['CLANG_ + '-Wno-unused-private-field', + ] +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 -@@ -294,7 +294,13 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'andr - if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'qt'): - CXXFLAGS += CONFIG['MOZ_PANGO_CFLAGS'] +@@ -306,7 +306,13 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk + LOCAL_INCLUDES += CONFIG['SKIA_INCLUDES'] + -DEFINES['GRAPHITE2_STATIC'] = True +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + +if CONFIG['MOZ_NATIVE_GRAPHITE2']: + CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS'] +else: + DEFINES['GRAPHITE2_STATIC'] = True - if CONFIG['GKMEDIAS_SHARED_LIBRARY']: - DEFINES['OTS_DLL'] = True -diff --git intl/unicharutil/util/moz.build intl/unicharutil/util/moz.build + if CONFIG['CLANG_CXX']: + # Suppress warnings from Skia header files. index d736943..41a931f 100644 --- intl/unicharutil/util/moz.build +++ intl/unicharutil/util/moz.build -@@ -37,3 +37,6 @@ if CONFIG['_MSC_VER']: +@@ -44,4 +44,7 @@ if CONFIG['ENABLE_INTL_API']: + LOCAL_INCLUDES += CONFIG['MOZ_ICU_INCLUDES'] + USE_LIBS += ['icu'] - if CONFIG['ENABLE_INTL_API']: - CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS'] -+ +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] ++ + DIST_INSTALL = 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,6 +66,9 @@ 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': + LOCAL_INCLUDES += ['%' + '%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']: +@@ -231,6 +231,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: branches/2016Q2/www/libxul/files/patch-bug981348 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug981348 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug981348 (revision 413772) @@ -1,41 +1,41 @@ diff --git dom/system/OSFileConstants.cpp dom/system/OSFileConstants.cpp index 4b21361..cb3be32 100644 --- dom/system/OSFileConstants.cpp +++ dom/system/OSFileConstants.cpp -@@ -596,7 +596,7 @@ static const dom::ConstantSpec gLibcProperties[] = +@@ -662,7 +662,7 @@ - { "OSFILE_SIZEOF_STATVFS", INT_TO_JSVAL(sizeof (struct statvfs)) }, + { "OSFILE_SIZEOF_STATVFS", JS::Int32Value(sizeof (struct statvfs)) }, -- { "OSFILE_OFFSETOF_STATVFS_F_BSIZE", INT_TO_JSVAL(offsetof (struct statvfs, f_bsize)) }, -+ { "OSFILE_OFFSETOF_STATVFS_F_FRSIZE", INT_TO_JSVAL(offsetof (struct statvfs, f_frsize)) }, - { "OSFILE_OFFSETOF_STATVFS_F_BAVAIL", INT_TO_JSVAL(offsetof (struct statvfs, f_bavail)) }, +- { "OSFILE_OFFSETOF_STATVFS_F_BSIZE", JS::Int32Value(offsetof (struct statvfs, f_bsize)) }, ++ { "OSFILE_OFFSETOF_STATVFS_F_FRSIZE", JS::Int32Value(offsetof (struct statvfs, f_frsize)) }, + { "OSFILE_OFFSETOF_STATVFS_F_BAVAIL", JS::Int32Value(offsetof (struct statvfs, f_bavail)) }, #endif // defined(XP_UNIX) diff --git toolkit/components/osfile/modules/osfile_unix_back.jsm toolkit/components/osfile/modules/osfile_unix_back.jsm index b59fca4..0cf220b 100644 --- toolkit/components/osfile/modules/osfile_unix_back.jsm +++ toolkit/components/osfile/modules/osfile_unix_back.jsm @@ -228,8 +228,8 @@ let statvfs = new SharedAll.HollowStructure("statvfs", Const.OSFILE_SIZEOF_STATVFS); - statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_BSIZE, - "f_bsize", Type.unsigned_long.implementation); + statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_FRSIZE, + "f_frsize", Type.unsigned_long.implementation); statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_BAVAIL, "f_bavail", Type.fsblkcnt_t.implementation); diff --git toolkit/components/osfile/modules/osfile_unix_front.jsm toolkit/components/osfile/modules/osfile_unix_front.jsm index 99e5e9b..de642c5 100644 --- toolkit/components/osfile/modules/osfile_unix_front.jsm +++ toolkit/components/osfile/modules/osfile_unix_front.jsm @@ -373,7 +373,7 @@ throw_on_negative("statvfs", UnixFile.statvfs(sourcePath, fileSystemInfoPtr)); let bytes = new Type.uint64_t.implementation( - fileSystemInfo.f_bsize * fileSystemInfo.f_bavail); + fileSystemInfo.f_frsize * fileSystemInfo.f_bavail); return bytes.value; }; Index: branches/2016Q2/www/libxul/files/patch-bug991253 =================================================================== --- branches/2016Q2/www/libxul/files/patch-bug991253 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-bug991253 (revision 413772) @@ -1,17 +1,17 @@ ---- extensions/spellcheck/hunspell/src/mozHunspell.cpp~ -+++ extensions/spellcheck/hunspell/src/mozHunspell.cpp -@@ -400,6 +400,14 @@ mozHunspell::LoadDictionaryList(bool aNo +--- extensions/spellcheck/hunspell/glue/mozHunspell.cpp~ ++++ extensions/spellcheck/hunspell/glue/mozHunspell.cpp +@@ -392,6 +392,14 @@ mozHunspell::LoadDictionaryList(bool aNo } } + // load system hunspell dictionaries + nsCOMPtr hunDir; + NS_NewNativeLocalFile(NS_LITERAL_CSTRING("%%LOCALBASE%%/share/hunspell"), + true, getter_AddRefs(hunDir)); + if (hunDir) { + LoadDictionariesFromDir(hunDir); + } + // find dictionaries from extensions requiring restart nsCOMPtr dictDirs; rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY_LIST, Index: branches/2016Q2/www/libxul/files/patch-config-baseconfig.mk =================================================================== --- branches/2016Q2/www/libxul/files/patch-config-baseconfig.mk (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-config-baseconfig.mk (revision 413772) @@ -1,14 +1,17 @@ --- config/baseconfig.mk~ +++ config/baseconfig.mk -@@ -1,7 +1,7 @@ +@@ -2,10 +2,10 @@ + # directly in python/mozbuild/mozbuild/base.py for gmake validation. + # We thus use INCLUDED_AUTOCONF_MK to enable/disable some parts depending + # whether a normal build is happening or whether the check is running. -includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) +includedir := $(includedir)/%%MOZILLA%% +idldir = $(datadir)/idl/%%MOZILLA%% +installdir = $(libdir)/%%MOZILLA%% +sdkdir = $(libdir)/%%MOZILLA%% - ifndef TOP_DIST - TOP_DIST = dist - endif + ifeq (.,$(DEPTH)) + DIST = dist + else Index: branches/2016Q2/www/libxul/files/patch-ijg-libjpeg =================================================================== --- branches/2016Q2/www/libxul/files/patch-ijg-libjpeg (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-ijg-libjpeg (revision 413772) @@ -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: branches/2016Q2/www/libxul/files/patch-modules-libpref-init-all.js =================================================================== --- branches/2016Q2/www/libxul/files/patch-modules-libpref-init-all.js (nonexistent) +++ branches/2016Q2/www/libxul/files/patch-modules-libpref-init-all.js (revision 413772) @@ -0,0 +1,15 @@ +--- modules/libpref/init/all.js.orig 2015-08-06 22:39:34 UTC ++++ modules/libpref/init/all.js +@@ -4052,7 +4052,12 @@ pref("layers.max-active", -1); + pref("layers.tiles.adjust", true); + + // Set the default values, and then override per-platform as needed ++#ifdef MOZ_TREE_CAIRO + pref("layers.offmainthreadcomposition.enabled", true); ++#else ++// Disable for system cairo on suspicion of causing random crashes ++pref("layers.offmainthreadcomposition.enabled", false); ++#endif + // Compositor target frame rate. NOTE: If vsync is enabled the compositor + // frame rate will still be capped. + // -1 -> default (match layout.frame_rate or 60 FPS) Property changes on: branches/2016Q2/www/libxul/files/patch-modules-libpref-init-all.js ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2016Q2/www/libxul/files/patch-toolkit_mozapps_installer_packager_mk =================================================================== --- branches/2016Q2/www/libxul/files/patch-toolkit_mozapps_installer_packager_mk (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-toolkit_mozapps_installer_packager_mk (revision 413772) @@ -1,13 +1,13 @@ $OpenBSD: patch-toolkit_mozapps_installer_packager_mk,v 1.11 2012/06/11 15:29:56 landry Exp $ install headers/idl/sdk libs only if xulrunner --- toolkit/mozapps/installer/packager.mk.orig Fri Jun 1 14:04:20 2012 +++ toolkit/mozapps/installer/packager.mk Tue Jun 5 07:55:51 2012 -@@ -886,7 +886,7 @@ endif +@@ -127,7 +127,7 @@ endif $(NSINSTALL) -D $(DESTDIR)$(bindir) $(RM) -f $(DESTDIR)$(bindir)/$(MOZ_APP_NAME) ln -s $(installdir)/$(MOZ_APP_NAME) $(DESTDIR)$(bindir) -ifdef INSTALL_SDK # Here comes the hard part +ifeq ($(MOZ_APP_NAME),xulrunner) $(NSINSTALL) -D $(DESTDIR)$(includedir) (cd $(DIST)/include && tar $(TAR_CREATE_FLAGS) - .) | \ (cd $(DESTDIR)$(includedir) && tar -xf -) Index: branches/2016Q2/www/libxul/files/patch-z-bug517422 =================================================================== --- branches/2016Q2/www/libxul/files/patch-z-bug517422 (revision 413771) +++ branches/2016Q2/www/libxul/files/patch-z-bug517422 (revision 413772) @@ -1,582 +1,444 @@ # 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) +@@ -77,6 +77,11 @@ 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']: +@@ -19,10 +19,16 @@ 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 +@@ -37,15 +46,15 @@ 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/libopus', - 'media/libtheora', -- 'media/libspeex_resampler', + '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 +@@ -1364,3 +1363,17 @@ 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}" ! +@@ -5223,6 +5223,111 @@ 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 Check for libSoundTouch +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)], ++[ --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) ++ PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.9.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 + ++if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then ++ AC_DEFINE(MOZ_NATIVE_SOUNDTOUCH) ++fi +AC_SUBST(MOZ_NATIVE_SOUNDTOUCH) + +dnl ======================================================== dnl = Disable VP8 decoder support dnl ======================================================== MOZ_ARG_DISABLE_BOOL(webm, +diff --git dom/media/AudioStream.cpp dom/media/AudioStream.cpp +index 2127256..1ec09fe 100644 +--- dom/media/AudioStream.cpp ++++ dom/media/AudioStream.cpp +@@ -129,7 +129,9 @@ AudioStream::AudioStream() + , mOutChannels(0) + , mWritten(0) + , mAudioClock(this) ++#ifndef MOZ_NATIVE_SOUNDTOUCH + , mTimeStretcher(nullptr) ++#endif + , mDumpFile(nullptr) + , mBytesPerFrame(0) + , mState(INITIALIZED) +@@ -152,9 +154,11 @@ AudioStream::~AudioStream() + if (mDumpFile) { + fclose(mDumpFile); + } ++#ifndef MOZ_NATIVE_SOUNDTOUCH + if (mTimeStretcher) { + soundtouch::destroySoundTouchObj(mTimeStretcher); + } ++#endif + } + + size_t +@@ -177,7 +181,11 @@ nsresult AudioStream::EnsureTimeStretcherInitializedUnlocked() + { + mMonitor.AssertCurrentThreadOwns(); + if (!mTimeStretcher) { ++#ifdef MOZ_NATIVE_SOUNDTOUCH ++ mTimeStretcher = new soundtouch::SoundTouch(); ++#else + mTimeStretcher = soundtouch::createSoundTouchObj(); ++#endif + mTimeStretcher->setSampleRate(mInRate); + mTimeStretcher->setChannels(mOutChannels); + mTimeStretcher->setPitch(1.0); diff --git dom/media/AudioStream.h dom/media/AudioStream.h -index 085676d..00c54fb 100644 +index a552e3e..02b80b1 100644 --- dom/media/AudioStream.h +++ dom/media/AudioStream.h -@@ -17,7 +17,7 @@ +@@ -15,7 +15,11 @@ + #include "mozilla/RefPtr.h" + #include "mozilla/UniquePtr.h" #include "CubebUtils.h" ++#ifdef MOZ_NATIVE_SOUNDTOUCH ++#include "soundtouch/SoundTouch.h" ++#else + #include "soundtouch/SoundTouchFactory.h" ++#endif - namespace soundtouch { --class SoundTouch; -+class MOZ_IMPORT_API SoundTouch; - } - namespace mozilla { + +@@ -277,7 +277,11 @@ private: + // Number of frames written to the buffers. + int64_t mWritten; + AudioClock mAudioClock; ++#ifdef MOZ_NATIVE_SOUNDTOUCH ++ nsAutoPtr mTimeStretcher; ++#else + soundtouch::SoundTouch* mTimeStretcher; ++#endif + + // Stream start time for stream open delay telemetry. + TimeStamp mStartTime; 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': +@@ -212,3 +212,18 @@ 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 +diff --git media/libsoundtouch/src/soundtouch_perms.h media/libsoundtouch/src/soundtouch_perms.h +index 0af2fe6..d80c145 100644 +--- media/libsoundtouch/src/soundtouch_perms.h ++++ media/libsoundtouch/src/soundtouch_perms.h +@@ -12,7 +12,9 @@ - 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. + #pragma GCC visibility push(default) + #include "SoundTouch.h" ++#ifndef MOZ_NATIVE_SOUNDTOUCH + #include "SoundTouchFactory.h" ++#endif + #pragma GCC visibility pop + + #endif // MOZILLA_SOUNDTOUCH_PERMS_H 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 -index bbc971c..6ed7e41 100644 ---- media/webrtc/signaling/test/moz.build -+++ media/webrtc/signaling/test/moz.build -@@ -127,6 +127,9 @@ if CONFIG['MOZ_ALSA']: - 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']: +@@ -178,6 +178,21 @@ 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: branches/2016Q2/www/linux-firefox/Makefile =================================================================== --- branches/2016Q2/www/linux-firefox/Makefile (revision 413771) +++ branches/2016Q2/www/linux-firefox/Makefile (revision 413772) @@ -1,22 +1,23 @@ # Created by: voisine # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 45.0.1 +DISTVERSION= 46.0 +PORTREVISION= 1 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build2/linux-i686/en-US + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build5/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: branches/2016Q2/www/linux-firefox/distinfo =================================================================== --- branches/2016Q2/www/linux-firefox/distinfo (revision 413771) +++ branches/2016Q2/www/linux-firefox/distinfo (revision 413772) @@ -1,6 +1,6 @@ -SHA256 (firefox-45.0.1.tar.bz2) = a78498b51059f46d42cf2fcb2232d57d97f2ab4e8a789151d3a26e013132dbb8 -SIZE (firefox-45.0.1.tar.bz2) = 51761993 +SHA256 (firefox-46.0.tar.bz2) = 43ff37fc9138b185a052966b69901c461b7fed6d642bf483be27e0ccd8e6c5dc +SIZE (firefox-46.0.tar.bz2) = 53220326 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: branches/2016Q2/www/linux-firefox/pkg-plist =================================================================== --- branches/2016Q2/www/linux-firefox/pkg-plist (revision 413771) +++ branches/2016Q2/www/linux-firefox/pkg-plist (revision 413772) @@ -1,64 +1,70 @@ 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}.xpi +lib/%%APP_NAME%%/browser/features/e10srollout@mozilla.org.xpi +lib/%%APP_NAME%%/browser/features/firefox@getpocket.com.xpi lib/%%APP_NAME%%/browser/features/loop@mozilla.org.xpi lib/%%APP_NAME%%/browser/icons/mozicon128.png lib/%%APP_NAME%%/browser/omni.ja lib/%%APP_NAME%%/browser/plugins 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%%/gtk2/libmozgtk.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%%/liblgpllibs.so +lib/%%APP_NAME%%/libmozavcodec.so +lib/%%APP_NAME%%/libmozavutil.so +lib/%%APP_NAME%%/libmozgtk.so 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 Index: branches/2016Q2 =================================================================== --- branches/2016Q2 (revision 413771) +++ branches/2016Q2 (revision 413772) Property changes on: branches/2016Q2 ___________________________________________________________________ Modified: svn:mergeinfo ## -0,0 +0,1 ## Merged /head:r413326,413726,413760