Index: head/Mk/Uses/gecko.mk =================================================================== --- head/Mk/Uses/gecko.mk (revision 380089) +++ head/Mk/Uses/gecko.mk (revision 380090) @@ -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>=31:${PORTSDIR}/www/libxul RUN_DEPENDS+= libxul>=31:${PORTSDIR}/www/libxul .elif ${gecko_ARGS:Mfirefox} _GECKO_DEFAULT_VERSION= 31 -_GECKO_VERSIONS= 31 35 +_GECKO_VERSIONS= 31 36 _GECKO_TYPE= firefox # Dependence lines for different Firefox versions 31_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox-esr -35_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox +36_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox .if exists(${LOCALBASE}/bin/firefox) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/firefox --version 2>/dev/null _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:M[0-9][0-9]*:C/([0-9][0-9]).*/\1/g} .endif .elif ${gecko_ARGS:Mseamonkey} -_GECKO_DEFAULT_VERSION= 32 -_GECKO_VERSIONS= 32 +_GECKO_DEFAULT_VERSION= 33 +_GECKO_VERSIONS= 33 _GECKO_TYPE= seamonkey .if exists(${LOCALBASE}/bin/seamonkey) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/seamonkey --version 2>/dev/null _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:M[0-9]*:C/[0-9].([0-9][0-9]).*/\1/g} .endif # Dependence lines for different Seamonkey versions -32_DEPENDS= ${LOCALBASE}/lib/seamonkey/seamonkey:${PORTSDIR}/www/seamonkey +33_DEPENDS= ${LOCALBASE}/lib/seamonkey/seamonkey:${PORTSDIR}/www/seamonkey .elif ${gecko_ARGS:Mthunderbird} _GECKO_DEFAULT_VERSION= 31 _GECKO_VERSIONS= 31 _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 31_DEPENDS= ${LOCALBASE}/lib/thunderbird/thunderbird:${PORTSDIR}/mail/thunderbird .else IGNORE= Unknown type of gecko dependency you may specify either libxul, firefox, seamonkey or thunderbird .endif .if defined(_GECKO_TYPE) .if ${_GECKO_VERSION:M*+} _GECKO_MIN_VERSION:= ${_GECKO_VERSION:S/+//} _GECKO_WANTED_VERSIONS:= ${_GECKO_DEFAULT_VERSION} .endif .if ${_GECKO_VERSION:M[0-9][0-9]} _GECKO_WANTED_VERSIONS:= ${_GECKO_VERSION:M[0-9][0-9]} .endif _GECKO_WANTED_VERSIONS?= ${_GECKO_DEFAULT_VERSION} .if defined(_GECKO_MIN_VERSION) . for _v in ${_GECKO_VERSIONS} . if ${_GECKO_MIN_VERSION} <= ${_v} _GECKO_WANTED_VERSIONS+= ${_v} . endif . endfor .endif .for _v in ${_GECKO_WANTED_VERSIONS:O:u} _GECKO_HIGHEST_VERSION:= ${_v} .if defined(_GECKO_INSTALLED_VER) && ${_GECKO_INSTALLED_VER} == ${_v} _GECKO_WANTED_VERSION:= ${_v} .endif .endfor .if !defined(_GECKO_WANTED_VERSION) .if defined(_GECKO_INSTALLED_VER) IGNORE= cannot install: ${_GECKO_TYPE} versions mismatch: ${_GECKO_TYPE}-${_GECKO_INSTALLED_VER} is installed and wanted version is ${_GECKO_TYPE}-${_GECKO_VERSION:M[0-9][0-9]} .else _GECKO_WANTED_VERSION:= ${_GECKO_HIGHEST_VERSION} .endif .endif .if ${gecko_ARGS:Mbuild} BUILD_DEPENDS+= ${${_GECKO_WANTED_VERSION}_DEPENDS} .endif RUN_DEPENDS+= ${${_GECKO_WANTED_VERSION}_DEPENDS} .endif .endif Index: head/Mk/bsd.gecko.mk =================================================================== --- head/Mk/bsd.gecko.mk (revision 380089) +++ head/Mk/bsd.gecko.mk (revision 380090) @@ -1,595 +1,595 @@ #-*- tab-width: 4; -*- # ex:ts=4 # # Date created: 12 Nov 2005 # Whom: Michael Johnson # # $FreeBSD$ # # 4 column tabs prevent hair loss and tooth decay! # bsd.gecko.mk abstracts the selection of gecko-based backends. It allows users # and porters to support any available gecko backend without needing to build # many conditional tests. ${USE_GECKO} is the list of backends that your port # can handle, and ${GECKO} is set by bsd.gecko.mk to be the chosen backend. # Users set ${WITH_GECKO} to the list of gecko backends they want on their # system. .if defined(USE_GECKO) .if !defined(_POSTMKINCLUDED) && !defined(Gecko_Pre_Include) Gecko_Pre_Include= bsd.gecko.mk # This file contains some reusable components for mozilla ports. It's of # use primarily to apps from the mozilla project itself (such as Firefox, # Thunderbird, etc.), and probably won't be of use for gecko-based ports # like epiphany, galeon, etc. # # You need to make sure to add USE_GECKO=gecko to for your port can uses # one of these options below. # # Ports can use the following: # # USE_MOZILLA By default, it enables every system dependency # listed in '_ALL_DEPENDS'. If your port doesn't # need one of those then you can use '-' like # 'USE_MOZILLA= -png -vpx' to subtract the # dependencies. Experimental deps use '+' like # 'USE_MOZILLA= +speex +theora'. # # MOZILLA_PLIST_DIRS List of directories to descend into when installing # and creating the plist # # MOZ_PIS_SCRIPTS List of scripts residing in ${FILESDIR} to be # filtered through MOZCONFIG_SED and installed along # with our Pluggable Init Scripts (PIS) # # MOZ_SED_ARGS sed(1) commands through which MOZ_PIS_SCRIPTS are # filtered. There is a default set defined here, so # you probably want to add to MOZ_SED_ARGS rather # than clobber it # # MOZ_OPTIONS configure arguments (added to .mozconfig). If # NOMOZCONFIG is defined, you probably want to set # CONFIGURE_ARGS+=${MOZ_OPTIONS} # # MOZ_MK_OPTIONS The make(1) arguments (added to .mozconfig). If # NOMOZCONFIG is defined, you probably want to set # MAKE_ARGS+=${MOZ_MK_OPTIONS} # # MOZ_EXPORT Environment variables for the build process (added # to .mozconfig). If NOMOZCONFIG is defined, you # probably want to set MAKE_ENV+=${MOZ_EXPORT} # # MOZ_CHROME A variable for the --enable-chrome-format= in # CONFIGURE_ARGS. The default is omni. # # MOZ_TOOLKIT A variable for the --enable-default-toolkit= in # CONFIGURE_ARGS. The default is cairo-gtk2. # # MOZ_EXTENSIONS A list of extensions to build # # MOZ_PROTOCOLS A list of protocols to build (http, ftp, etc.) # # PORT_MOZCONFIG Defaults to ${FILESDIR}/mozconfig.in, but can be # set to a generic mozconfig included with the port # # NOMOZCONFIG Don't drop a customized .mozconfig into the build # directory. Options will have to be specified in # CONFIGURE_ARGS instead # MAINTAINER?= gecko@FreeBSD.org MOZILLA?= ${PORTNAME} MOZILLA_VER?= ${PORTVERSION} MOZILLA_BIN?= ${PORTNAME}-bin MOZILLA_EXEC_NAME?=${MOZILLA} MOZ_RPATH?= ${MOZILLA} USES+= cpe compiler:c++11-lang gmake iconv perl5 pkgconfig \ python:2.7,build desktop-file-utils CPE_VENDOR?=mozilla USE_PERL5= build USE_XORG= xext xrender xt .if ${MOZILLA} != "libxul" BUNDLE_LIBS= yes .endif MOZILLA_SUFX?= none MOZSRC?= ${WRKSRC} WRKSRC?= ${WRKDIR}/mozilla PLISTF?= ${WRKDIR}/plist_files MOZ_OBJDIR?= ${WRKSRC}/obj-${CONFIGURE_TARGET} MOZ_PIS_DIR?= lib/${MOZILLA}/init.d PORT_MOZCONFIG?= ${FILESDIR}/mozconfig.in MOZCONFIG?= ${WRKSRC}/.mozconfig # XXX Not ?= because fmake uses MAKEFILE internally MAKEFILE= ${WRKSRC}/client.mk MOZILLA_PLIST_DIRS?= bin lib share/pixmaps share/applications PKGINSTALL?= ${WRKDIR}/pkg-install PKGDEINSTALL?= ${WRKDIR}/pkg-deinstall PKGINSTALL_INC?= ${.CURDIR}/../../www/firefox/files/pkg-install.in PKGDEINSTALL_INC?= ${.CURDIR}/../../www/firefox/files/pkg-deinstall.in MOZ_PKGCONFIG_FILES?= ${MOZILLA}-gtkmozembed ${MOZILLA}-js \ ${MOZILLA}-xpcom ${MOZILLA}-plugin ALL_TARGET?= build CONFIGURE_TARGET:=${ARCH:C/amd64/x86_64/}-portbld-${OPSYS:tl}${OSREL} MOZ_EXPORT+= ${CONFIGURE_ENV} \ PERL="${PERL}" MOZ_OPTIONS+= ${CONFIGURE_TARGET} --prefix="${PREFIX}" MOZ_MK_OPTIONS+=MOZ_OBJDIR="${MOZ_OBJDIR}" CPPFLAGS+= -isystem${LOCALBASE}/include LDFLAGS+= -L${LOCALBASE}/lib -Wl,-rpath,${PREFIX}/lib/${MOZILLA} # use jemalloc 3.0.0 API for stats/tuning MOZ_EXPORT+= MOZ_JEMALLOC3=1 .if ${OSVERSION} < 1000012 || ${MOZILLA_VER:R:R} >= 37 MOZ_OPTIONS+= --enable-jemalloc .endif # Standard depends _ALL_DEPENDS= cairo event ffi graphite harfbuzz hunspell icu jpeg nspr nss opus png pixman soundtouch sqlite vorbis vpx cairo_LIB_DEPENDS= libcairo.so:${PORTSDIR}/graphics/cairo cairo_MOZ_OPTIONS= --enable-system-cairo event_LIB_DEPENDS= libevent.so:${PORTSDIR}/devel/libevent2 event_MOZ_OPTIONS= --with-system-libevent ffi_LIB_DEPENDS= libffi.so:${PORTSDIR}/devel/libffi ffi_MOZ_OPTIONS= --enable-system-ffi -.if exists(${FILESDIR}/patch-bug847568) || exists(${FILESDIR}/patch-z-bug847568) +.if exists(${FILESDIR}/patch-bug847568) graphite_LIB_DEPENDS= libgraphite2.so:${PORTSDIR}/graphics/graphite2 graphite_MOZ_OPTIONS= --with-system-graphite2 harfbuzz_LIB_DEPENDS= libharfbuzz.so:${PORTSDIR}/print/harfbuzz harfbuzz_MOZ_OPTIONS= --with-system-harfbuzz .endif hunspell_LIB_DEPENDS= libhunspell-1.3.so:${PORTSDIR}/textproc/hunspell hunspell_MOZ_OPTIONS= --enable-system-hunspell icu_LIB_DEPENDS= libicui18n.so:${PORTSDIR}/devel/icu icu_MOZ_OPTIONS= --with-system-icu --with-intl-api -jpeg_BUILD_DEPENDS=yasm:${PORTSDIR}/devel/yasm # XXX depends on ports/180159 or package flavor support #jpeg_LIB_DEPENDS= libjpeg.so:${PORTSDIR}/graphics/libjpeg-turbo jpeg_LIB_DEPENDS= libjpeg.so:${PORTSDIR}/graphics/jpeg jpeg_MOZ_OPTIONS= --with-system-jpeg=${LOCALBASE} nspr_LIB_DEPENDS= libnspr4.so:${PORTSDIR}/devel/nspr nspr_MOZ_OPTIONS= --with-system-nspr nss_LIB_DEPENDS= libnss3.so:${PORTSDIR}/security/nss nss_MOZ_OPTIONS= --with-system-nss -.if exists(${FILESDIR}/patch-z-bug517422) || exists(${FILESDIR}/patch-zz-bug517422) +.if exists(${FILESDIR}/patch-z-bug517422) opus_LIB_DEPENDS= libopus.so:${PORTSDIR}/audio/opus opus_MOZ_OPTIONS= --with-system-opus .endif pixman_LIB_DEPENDS= libpixman-1.so:${PORTSDIR}/x11/pixman pixman_MOZ_OPTIONS= --enable-system-pixman png_LIB_DEPENDS= libpng.so:${PORTSDIR}/graphics/png png_MOZ_OPTIONS= --with-system-png=${LOCALBASE} -.if exists(${FILESDIR}/patch-z-bug517422) || exists(${FILESDIR}/patch-zz-bug517422) +.if exists(${FILESDIR}/patch-z-bug517422) soundtouch_LIB_DEPENDS= libSoundTouch.so:${PORTSDIR}/audio/soundtouch soundtouch_MOZ_OPTIONS= --with-system-soundtouch # XXX disabled: bug 913854 not yet upstreamed speex_LIB_DEPENDS= libspeexdsp.so:${PORTSDIR}/audio/speex speex_MOZ_OPTIONS= --with-system-speex .endif sqlite_LIB_DEPENDS= libsqlite3.so:${PORTSDIR}/databases/sqlite3 sqlite_MOZ_OPTIONS= --enable-system-sqlite -.if exists(${FILESDIR}/patch-z-bug517422) || exists(${FILESDIR}/patch-zz-bug517422) +.if exists(${FILESDIR}/patch-z-bug517422) # XXX disabled: update to 1.2.x or review backported fixes theora_LIB_DEPENDS= libtheora.so:${PORTSDIR}/multimedia/libtheora theora_MOZ_OPTIONS= --with-system-theora vorbis_LIB_DEPENDS= libvorbis.so:${PORTSDIR}/audio/libvorbis vorbis_MOZ_OPTIONS= --with-system-vorbis --with-system-ogg .endif -vpx_BUILD_DEPENDS= yasm:${PORTSDIR}/devel/yasm vpx_LIB_DEPENDS= libvpx.so:${PORTSDIR}/multimedia/libvpx vpx_MOZ_OPTIONS= --with-system-libvpx .for use in ${USE_MOZILLA} ${use:S/-/_WITHOUT_/}= ${TRUE} .endfor .for dep in ${_ALL_DEPENDS} ${USE_MOZILLA:M+*:S/+//} .if !defined(_WITHOUT_${dep}) BUILD_DEPENDS+= ${${dep}_BUILD_DEPENDS} LIB_DEPENDS+= ${${dep}_LIB_DEPENDS} RUN_DEPENDS+= ${${dep}_RUN_DEPENDS} MOZ_OPTIONS+= ${${dep}_MOZ_OPTIONS} .else BUILD_DEPENDS+= ${-${dep}_BUILD_DEPENDS} .endif .endfor # Standard options MOZ_CHROME?= omni MOZ_TOOLKIT?= cairo-gtk2 MOZ_OPTIONS+= \ --enable-chrome-format=${MOZ_CHROME} \ --enable-default-toolkit=${MOZ_TOOLKIT} \ --with-pthreads # Configure options for install .if !defined(MOZ_EXTENSIONS) MOZ_OPTIONS+= --enable-extensions=default .else MOZ_OPTIONS+= --enable-extensions=${MOZ_EXTENSIONS} .endif .if !defined(MOZ_PROTOCOLS) MOZ_OPTIONS+= --enable-necko-protocols=default .else MOZ_OPTIONS+= --enable-necko-protocols=${MOZ_PROTOCOLS} .endif # others MOZ_OPTIONS+= --with-system-zlib \ --with-system-bz2 \ --enable-unified-compilation \ --disable-debug-symbols \ --disable-glibtest \ --disable-gtktest \ --disable-freetypetest \ --disable-installer \ --disable-updater \ --disable-pedantic # XXX stolen from www/chromium MOZ_EXPORT+= MOZ_GOOGLE_API_KEY=AIzaSyBsp9n41JLW8jCokwn7vhoaMejDFRd1mp8 .if ${PORT_OPTIONS:MGTK3} MOZ_TOOLKIT= cairo-gtk3 .endif .if ${MOZ_TOOLKIT:Mcairo-qt} # don't use - transparent backgrounds (bug 521582), USE_MOZILLA+= -cairo # ports/169343 USE_DISPLAY=yes # install USE_GNOME+= pango USE_QT5+= qmake_build buildtools_build gui network quick printsupport MOZ_EXPORT+= HOST_QMAKE="${QMAKE}" HOST_MOC="${MOC}" HOST_RCC="${RCC}" .elif ${MOZ_TOOLKIT:Mcairo-gtk3} USE_GNOME+= gtk30 . if ${MOZILLA_VER:R:R} >= 32 USE_GNOME+= gtk20 # bug 624422 . endif .else # gtk2, cairo-gtk2 USE_GNOME+= gtk20 .endif .if ${PORT_OPTIONS:MOPTIMIZED_CFLAGS} CFLAGS+= -O3 MOZ_EXPORT+= MOZ_OPTIMIZE_FLAGS="${CFLAGS:M-O*}" MOZ_OPTIONS+= --enable-optimize .else MOZ_OPTIONS+= --disable-optimize .endif .if ${PORT_OPTIONS:MDBUS} BUILD_DEPENDS+= libnotify>0:${PORTSDIR}/devel/libnotify LIB_DEPENDS+= libdbus-glib-1.so:${PORTSDIR}/devel/dbus-glib \ libstartup-notification-1.so:${PORTSDIR}/x11/startup-notification MOZ_OPTIONS+= --enable-startup-notification .else MOZ_OPTIONS+= --disable-dbus --disable-libnotify .endif .if ${PORT_OPTIONS:MGSTREAMER} USE_GSTREAMER1?=good libav MOZ_OPTIONS+= --enable-gstreamer=1.0 .else MOZ_OPTIONS+= --disable-gstreamer .endif .if ${PORT_OPTIONS:MGCONF} BUILD_DEPENDS+= ${gconf2_DETECT}:${gconf2_LIB_DEPENDS:C/.*://} USE_GNOME+= gconf2:build MOZ_OPTIONS+= --enable-gconf .else MOZ_OPTIONS+= --disable-gconf .endif .if ${PORT_OPTIONS:MGIO} && ! ${MOZ_TOOLKIT:Mcairo-qt} MOZ_OPTIONS+= --enable-gio .else MOZ_OPTIONS+= --disable-gio .endif .if ${PORT_OPTIONS:MGNOMEUI} BUILD_DEPENDS+= ${libgnomeui_DETECT}:${libgnomeui_LIB_DEPENDS:C/.*://} USE_GNOME+= libgnomeui:build MOZ_OPTIONS+= --enable-gnomeui .else MOZ_OPTIONS+= --disable-gnomeui .endif .if ${PORT_OPTIONS:MLIBPROXY} LIB_DEPENDS+= libproxy.so:${PORTSDIR}/net/libproxy MOZ_OPTIONS+= --enable-libproxy .else MOZ_OPTIONS+= --disable-libproxy .endif .if ${PORT_OPTIONS:MPGO} USES:= compiler:gcc-c++11-lib ${USES:Ncompiler*c++11*} USE_DISPLAY=yes ALL_TARGET= profiledbuild MOZ_EXPORT+=MOZ_OPTIMIZE_FLAGS="-Os" MOZ_PGO_OPTIMIZE_FLAGS="${CFLAGS:M-O*}" .endif .if ${PORT_OPTIONS:MALSA} LIB_DEPENDS+= libasound.so:${PORTSDIR}/audio/alsa-lib RUN_DEPENDS+= ${LOCALBASE}/lib/alsa-lib/libasound_module_pcm_oss.so:${PORTSDIR}/audio/alsa-plugins MOZ_OPTIONS+= --enable-alsa .endif .if ${PORT_OPTIONS:MPULSEAUDIO} . if ${PORT_OPTIONS:MALSA} BUILD_DEPENDS+= pulseaudio>0:${PORTSDIR}/audio/pulseaudio . else # pull pulse package if we cannot fallback to another backend LIB_DEPENDS+= libpulse.so:${PORTSDIR}/audio/pulseaudio . endif MOZ_OPTIONS+= --enable-pulseaudio .else MOZ_OPTIONS+= --disable-pulseaudio .endif .if ${PORT_OPTIONS:MDEBUG} MOZ_OPTIONS+= --enable-debug --disable-release STRIP= # ports/184285 .else MOZ_OPTIONS+= --disable-debug --enable-release .endif .if ${PORT_OPTIONS:MDTRACE} . if ${OSVERSION} < 1000510 BROKEN= dtrace -G crashes with C++ object files . endif MOZ_OPTIONS+= --enable-dtrace LIBS+= -lelf STRIP= .else MOZ_OPTIONS+= --disable-dtrace .endif .if ${PORT_OPTIONS:MLOGGING} || ${PORT_OPTIONS:MDEBUG} MOZ_OPTIONS+= --enable-logging .else MOZ_OPTIONS+= --disable-logging .endif .if ${PORT_OPTIONS:MPROFILE} MOZ_OPTIONS+= --enable-profiling STRIP= .else MOZ_OPTIONS+= --disable-profiling .endif .if ${PORT_OPTIONS:MTEST} USE_XORG+= xscrnsaver MOZ_OPTIONS+= --enable-tests .else MOZ_OPTIONS+= --disable-tests .endif .if !defined(STRIP) || ${STRIP} == "" MOZ_OPTIONS+= --disable-strip --disable-install-strip .else MOZ_OPTIONS+= --enable-strip --enable-install-strip .endif # _MAKE_JOBS is only available after bsd.port.post.mk, thus cannot be # used in .mozconfig. And client.mk automatically uses -jN where N # is what multiprocessing.cpu_count() returns. .if defined(MAKE_JOBS_NUMBER) MOZ_MAKE_FLAGS+=-j${MAKE_JOBS_NUMBER} .endif .if defined(MOZ_MAKE_FLAGS) MOZ_MK_OPTIONS+=MOZ_MAKE_FLAGS="${MOZ_MAKE_FLAGS}" .endif MOZ_SED_ARGS+= -e's|@CPPFLAGS@|${CPPFLAGS}|g' \ -e 's|@CFLAGS@|${CFLAGS}|g' \ -e 's|@LDFLAGS@|${LDFLAGS}|g' \ -e 's|@LIBS@|${LIBS}|g' \ -e 's|@LOCALBASE@|${LOCALBASE}|g' \ -e 's|@PERL@|${PERL5}|g' \ -e 's|@MOZDIR@|${PREFIX}/lib/${MOZILLA}|g' \ -e 's|%%PREFIX%%|${PREFIX}|g' \ -e 's|%%CFLAGS%%|${CFLAGS}|g' \ -e 's|%%LDFLAGS%%|${LDFLAGS}|g' \ -e 's|%%LIBS%%|${LIBS}|g' \ -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ -e 's|%%PERL%%|${PERL5}|g' \ -e 's|%%MOZILLA%%|${MOZILLA}|g' \ -e 's|%%MOZILLA_BIN%%|${MOZILLA_BIN}|g' \ -e 's|%%MOZDIR%%|${PREFIX}/lib/${MOZILLA}|g' MOZCONFIG_SED?= ${SED} ${MOZ_SED_ARGS} .if ${ARCH} == amd64 . if ${USE_MOZILLA:M-nss} USE_BINUTILS= # intel-gcm.s CFLAGS+= -B${LOCALBASE}/bin LDFLAGS+= -B${LOCALBASE}/bin . if ${OSVERSION} < 1000041 && exists(/usr/lib/libcxxrt.so) && \ ${CXXFLAGS:M-stdlib=libc++} LIBS+= -lcxxrt . endif . endif .elif ${ARCH:Mpowerpc*} USES:= compiler:gcc-c++11-lib ${USES:Ncompiler*c++11*} CFLAGS+= -D__STDC_CONSTANT_MACROS . if ${ARCH} == "powerpc64" MOZ_EXPORT+= UNAME_m="${ARCH}" CFLAGS+= -mminimal-toc . endif .elif ${ARCH} == "sparc64" # Work around miscompilation/mislinkage of the sCanonicalVTable hacks. MOZ_OPTIONS+= --disable-v1-string-abi .endif .else # bsd.port.post.mk pre-extract: gecko-pre-extract gecko-pre-extract: .if ${PORT_OPTIONS:MPGO} @${ECHO} "*****************************************************************" @${ECHO} "**************************** attention **************************" @${ECHO} "*****************************************************************" @${ECHO} "To build ${MOZILLA} with PGO support you need a running X server and" @${ECHO} " build this port with an user who could access the X server! " @${ECHO} "" @${ECHO} "During the build a ${MOZILLA} instance will start and run some test." @${ECHO} " Do not interrupt or close ${MOZILLA} during this tests! " @${ECHO} "*****************************************************************" @sleep 10 .endif post-patch: gecko-post-patch gecko-moz-pis-patch gecko-post-patch: .if exists(${PKGINSTALL_INC}) @${MOZCONFIG_SED} < ${PKGINSTALL_INC} > ${PKGINSTALL} .endif .if exists(${PKGDEINSTALL_INC}) @${MOZCONFIG_SED} < ${PKGDEINSTALL_INC} > ${PKGDEINSTALL} .endif @${RM} -f ${MOZCONFIG} .if !defined(NOMOZCONFIG) @if [ -e ${PORT_MOZCONFIG} ] ; then \ ${MOZCONFIG_SED} < ${PORT_MOZCONFIG} >> ${MOZCONFIG} ; \ fi .for arg in ${MOZ_OPTIONS} @${ECHO_CMD} ac_add_options ${arg:Q} >> ${MOZCONFIG} .endfor .for arg in ${MOZ_MK_OPTIONS} @${ECHO_CMD} mk_add_options ${arg:Q} >> ${MOZCONFIG} .endfor .for var in ${MOZ_EXPORT} @${ECHO_CMD} export ${var:Q} >> ${MOZCONFIG} .endfor .endif # .if !defined(NOMOZCONFIG) .if exists(${MOZSRC}/build/unix/mozilla-config.in) @${REINPLACE_CMD} -e 's/%{idldir}/%idldir%/g ; \ s|"%FULL_NSPR_CFLAGS%"|`nspr-config --cflags`|g ; \ s|"%FULL_NSPR_LIBS%"|`nspr-config --libs`|g' \ ${MOZSRC}/build/unix/mozilla-config.in .endif .if ${USE_MOZILLA:M-nspr} @${ECHO_MSG} "===> Applying NSPR patches" @for i in ${.CURDIR}/../../devel/nspr/files/patch-*; do \ ${PATCH} ${PATCH_ARGS} -d ${MOZSRC}/nsprpub/build < $$i; \ done .endif .if ${USE_MOZILLA:M-nss} @${ECHO_MSG} "===> Applying NSS patches" @for i in ${.CURDIR}/../../security/nss/files/patch-*; do \ ${PATCH} ${PATCH_ARGS} -d ${MOZSRC}/security/nss < $$i; \ done .endif @for f in \ ${WRKSRC}/directory/c-sdk/config/FreeBSD.mk \ ${WRKSRC}/directory/c-sdk/configure \ ${MOZSRC}/security/coreconf/FreeBSD.mk \ ${MOZSRC}/js/src/Makefile.in \ ${MOZSRC}/js/src/configure \ ${MOZSRC}/configure \ ${WRKSRC}/configure; do \ if [ -f $$f ] ; then \ ${REINPLACE_CMD} -Ee 's|-lc_r|${PTHREAD_LIBS}|g ; \ s|-l?pthread|${PTHREAD_LIBS}|g ; \ s|echo aout|echo elf|g ; \ s|/usr/X11R6|${LOCALBASE}|g' \ $$f; \ fi; \ done @if [ -f ${WRKSRC}/config/baseconfig.mk ] ; then \ ${REINPLACE_CMD} -e 's|%%MOZILLA%%|${MOZILLA}|g' \ ${WRKSRC}/config/baseconfig.mk; \ fi @${REINPLACE_CMD} -e 's|%%MOZILLA%%|${MOZILLA}|g' \ ${MOZSRC}/config/baseconfig.mk @${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|g ; \ s|%%LOCALBASE%%|${LOCALBASE}|g' \ ${MOZSRC}/build/unix/run-mozilla.sh @${REINPLACE_CMD} -e 's|/usr/local/netscape|${LOCALBASE}|g ; \ s|/usr/local/lib/netscape|${LOCALBASE}/lib|g' \ ${MOZSRC}/xpcom/io/SpecialSystemDirectory.cpp @${REINPLACE_CMD} -e 's|/etc|${PREFIX}&|g' \ ${MOZSRC}/xpcom/build/nsXPCOMPrivate.h @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g' \ -e 's|mozilla/plugins|browser_plugins|g' \ -e 's|share/mozilla/extensions|lib/xpi|g' \ ${MOZSRC}/xpcom/io/nsAppFileLocationProvider.cpp \ ${MOZSRC}/toolkit/xre/nsXREDirProvider.cpp @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${MOZSRC}/extensions/spellcheck/hunspell/src/mozHunspell.cpp # handles mozilla pis scripts. gecko-moz-pis-patch: .for moz in ${MOZ_PIS_SCRIPTS} @${MOZCONFIG_SED} < ${FILESDIR}/${moz} > ${WRKDIR}/${moz} .endfor do-configure: gecko-do-configure gecko-do-configure: @(if ! ${CONFIGURE_ENV} ${DO_MAKE_BUILD} configure; then \ ${ECHO_MSG} "===> Script \"${CONFIGURE_SCRIPT}\" failed unexpectedly."; \ (${ECHO_CMD} ${CONFIGURE_FAIL_MESSAGE}) | ${FMT} 75 79 ; \ ${FALSE}; \ fi) pre-install: gecko-moz-pis-pre-install post-install-script: gecko-create-plist gecko-create-plist: port-post-install .if !target(port-post-install) port-post-install: @${DO_NADA} .endif gecko-create-plist: # Create the plist ${RM} -f ${PLISTF} .for dir in ${MOZILLA_PLIST_DIRS} @cd ${STAGEDIR}${PREFIX}/${dir} && ${FIND} -H -s * ! -type d | \ ${SED} -e 's|^|${dir}/|' >> ${PLISTF} .endfor ${CAT} ${PLISTF} | ${SORT} >> ${TMPPLIST} gecko-moz-pis-pre-install: .if defined(MOZ_PIS_SCRIPTS) ${MKDIR} ${STAGEDIR}${PREFIX}/${MOZ_PIS_DIR} .for moz in ${MOZ_PIS_SCRIPTS} ${INSTALL_SCRIPT} ${WRKDIR}/${moz} ${STAGEDIR}${PREFIX}/${MOZ_PIS_DIR} .endfor .endif .endif .endif # HERE THERE BE TACOS -- adamw Index: head/mail/linux-thunderbird/Makefile =================================================================== --- head/mail/linux-thunderbird/Makefile (revision 380089) +++ head/mail/linux-thunderbird/Makefile (revision 380090) @@ -1,17 +1,17 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= thunderbird -DISTVERSION= 31.4.0 +DISTVERSION= 31.5.0 CATEGORIES= mail news net-im ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US MAINTAINER= gecko@FreeBSD.org COMMENT= Mozilla Thunderbird is standalone mail and news that stands above USES= tar:bzip2 WANT_GTK218= yes .include "${.CURDIR}/../../www/linux-seamonkey/Makefile.common" .include Index: head/mail/linux-thunderbird/distinfo =================================================================== --- head/mail/linux-thunderbird/distinfo (revision 380089) +++ head/mail/linux-thunderbird/distinfo (revision 380090) @@ -1,6 +1,6 @@ -SHA256 (thunderbird-31.4.0.tar.bz2) = e08c0d4d2bd570801a3609133e63abb080f9f825c288fa2f5761639f2f6e4958 -SIZE (thunderbird-31.4.0.tar.bz2) = 36871510 +SHA256 (thunderbird-31.5.0.tar.bz2) = c4a1e9865e756a09383e110f8f81a229e49fcec04012de80856ce454ed6e41f7 +SIZE (thunderbird-31.5.0.tar.bz2) = 36874681 SHA256 (glib2-2.22.2-2.fc12.i686.rpm) = e3b459c245ec14e7248e9de4b506963a4773407f3e58835db5070d0ed02ecc99 SIZE (glib2-2.22.2-2.fc12.i686.rpm) = 1162908 SHA256 (gtk2-2.18.3-19.fc12.i686.rpm) = aea9cf7ffe9c8dae0faa2bf3d2aa1b2117c55dce03da72dcce8c268279ec0a4b SIZE (gtk2-2.18.3-19.fc12.i686.rpm) = 3198708 Index: head/mail/thunderbird/Makefile =================================================================== --- head/mail/thunderbird/Makefile (revision 380089) +++ head/mail/thunderbird/Makefile (revision 380090) @@ -1,179 +1,178 @@ # Created by: Joe Marcus Clarke # $FreeBSD$ PORTNAME= thunderbird -DISTVERSION= 31.4.0 -PORTREVISION= 2 +DISTVERSION= 31.5.0 CATEGORIES= mail news net-im ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ https://ftp.mozilla.org/pub/mozilla.org/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source/ DISTFILES= ${PORTNAME}-${DISTVERSION}.source${EXTRACT_SUFX} EXTRACT_ONLY= ${PORTNAME}-${DISTVERSION}.source${EXTRACT_SUFX} MAINTAINER= gecko@FreeBSD.org COMMENT= Mozilla Thunderbird is standalone mail and news that stands above BUILD_DEPENDS= nspr>=4.10.6:${PORTSDIR}/devel/nspr \ nss>=3.16:${PORTSDIR}/security/nss \ libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \ cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \ soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \ harfbuzz>=0.9.25:${PORTSDIR}/print/harfbuzz \ graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \ libvorbis>=1.3.4:${PORTSDIR}/audio/libvorbis \ opus>=1.1:${PORTSDIR}/audio/opus \ libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \ sqlite3>=3.8.4.2:${PORTSDIR}/databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \ v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \ autoconf-2.13:${PORTSDIR}/devel/autoconf213 \ zip:${PORTSDIR}/archivers/zip \ unzip:${PORTSDIR}/archivers/unzip LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l EM_VERSION= 1.7.2 -L_VERSION= 3.3.4 +L_VERSION= 3.3.5 SSP_UNSAFE= yes USE_GECKO= gecko USE_MOZILLA= # empty USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl USES= dos2unix tar:bzip2 DOS2UNIX_FILES= mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp MOZ_OPTIONS= --program-transform-name='s/thunderbird/${MOZILLA}/' \ --enable-single-profile --disable-profilesharing \ --enable-application=mail --enable-official-branding MOZ_MK_OPTIONS= MOZ_THUNDERBIRD=1 MAIL_PKG_SHARED=1 MOZ_EXPORT= MOZ_THUNDERBIRD=1 MAIL_PKG_SHARED=1 MOZ_PKGCONFIG_FILES= PORTNAME_ICON= ${MOZILLA}.png PORTNAME_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/chrome/icons/default/default48.png SYSTEM_PREFS= ${FAKEDIR}/lib/${PORTNAME}/defaults/pref/${PORTNAME}.js MOZ_PIS_SCRIPTS=moz_pis_S50cleanhome OPTIONS_DEFINE= ENIGMAIL LIGHTNING OPTIONS_DEFAULT=ENIGMAIL LIGHTNING .include "${.CURDIR}/../../www/firefox/Makefile.options" OPTIONS_DEFAULT:=${OPTIONS_DEFAULT:S/GSTREAMER//} .include WRKSRC= ${WRKDIR}/comm-esr31 MOZSRC:= ${WRKSRC}/mozilla XPI_LIBDIR= ${PREFIX}/lib/xpi .if ${PORTVERSION:R:R} < 33 CONFIGURE_TARGET:=${CONFIGURE_TARGET:S/portbld/unknown/} MOZ_OPTIONS:= ${MOZ_OPTIONS:S/${CONFIGURE_TARGET}//} .endif .if ${PORT_OPTIONS:MALSA} RUN_DEPENDS+= alsa-lib>=1.0.27.2_1:${PORTSDIR}/audio/alsa-lib .endif .if ${PORT_OPTIONS:MGSTREAMER} RUN_DEPENDS+= gstreamer1-libav>=1.2.4_1:${PORTSDIR}/multimedia/gstreamer1-libav .endif .if ${PORT_OPTIONS:MENIGMAIL} MASTER_SITES+= https://www.enigmail.net/download/source/:enigmail DISTFILES+= ${EM_DISTFILE}:enigmail RUN_DEPENDS+= gpg:${PORTSDIR}/security/gnupg EM_DISTNAME= enigmail-${EM_VERSION} EM_DISTFILE= ${EM_DISTNAME}.tar.gz EM_XPI_FILE= ${WRKSRC}/mailnews/extensions/enigmail/build/${EM_DISTNAME}-${OPSYS:tl}-${ARCH:S/amd64/x86_64/:S/i386/x86/}-gcc3.xpi EM_ORIG_ID= {847b3a00-7ab1-11d4-8f02-006008948af5} EM_ID= ${PORTNAME}@mozilla-enigmail.org EM_ID_RFILES= ${XPI_LIBDIR}/${EM_ID}/install.rdf \ ${XPI_LIBDIR}/${EM_ID}/components/enigmail.js \ ${XPI_LIBDIR}/${EM_ID}/modules/enigmailCommon.jsm .endif .if ${PORT_OPTIONS:MLIGHTNING} MOZ_OPTIONS+= --enable-calendar MOZ_MK_OPTIONS+= MOZ_CO_PROJECT=calendar LIGHTNING_DIR= share/lightning XPI_FILE= ${MOZ_OBJDIR}/mozilla/dist/xpi-stage/lightning-${L_VERSION}.en-US.${OPSYS:tl}${OSREL}-${ARCH:S/amd64/x86_64/}.xpi XPI_ORIG_ID= {e2fda1a4-762b-4020-b5ad-a41df1933103} XPI_ID= lightning@thunderbird.mozilla.org .else MOZ_OPTIONS+= --disable-calendar .endif post-extract: @${SED} -e 's|@PORTNAME_ICON@|${PORTNAME_ICON}|;s|@MOZILLA@|${MOZILLA}|' \ <${FILESDIR}/thunderbird.desktop.in >${WRKDIR}/${MOZILLA_EXEC_NAME}.desktop .if ${PORT_OPTIONS:MENIGMAIL} @${TAR} -xf ${_DISTDIR}/${EM_DISTFILE} \ -C ${WRKSRC}/mailnews/extensions .endif post-patch: @${REINPLACE_CMD} -e '/MOZPNG/s/=[0-9]*/=10511/' \ ${MOZSRC}/configure.in ${WRKSRC}/configure.in @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/mail/app/nsMailApp.cpp .if ${PORT_OPTIONS:MENIGMAIL} @${REINPLACE_CMD} -e 's,/usr/bin/perl,${PERL},' \ ${WRKSRC}/mailnews/extensions/enigmail/util/fixlang.pl \ ${WRKSRC}/mailnews/extensions/enigmail/util/make-lang-xpi.pl @${REINPLACE_CMD} -e '/^xpi/s/$$/ all/' \ -e '/^all/s/ xpi//' \ -e '/^XPI_MODULE_VERS/s/= .*/= ${EM_VERSION}/' \ ${WRKSRC}/mailnews/extensions/enigmail/Makefile @${REINPLACE_CMD} -e '/em:version/s,>[^<]*<,>${EM_VERSION}<,' \ -e '/em:maxVersion/s/pre//' \ ${WRKSRC}/mailnews/extensions/enigmail/package/install.rdf .endif pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${MOZSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${MOZSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) .if ${PORT_OPTIONS:MENIGMAIL} post-configure: cd ${WRKSRC}/mailnews/extensions/enigmail/ && \ ${SETENV} ${CONFIGURE_ENV} ${MAKE_ENV} ./configure post-build: ${DO_MAKE_BUILD:S/${MAKEFILE}/Makefile/} all xpi \ -C ${WRKSRC}/mailnews/extensions/enigmail .endif port-pre-install: ${MKDIR} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/defaults post-install: ${INSTALL_DATA} ${WRKDIR}/${MOZILLA_EXEC_NAME}.desktop ${STAGEDIR}${PREFIX}/share/applications ${LN} -sf ${PORTNAME_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${PORTNAME_ICON} .if ${PORT_OPTIONS:MLIGHTNING} @${MKDIR} ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/thunderbird @(cd ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID}; ${TAR} -xf ${XPI_FILE}) @${REINPLACE_CMD} -i "" "s/${XPI_ORIG_ID}/${XPI_ID}/" ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID}/install.rdf @${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID} @${LN} -sf ${XPI_LIBDIR}/${XPI_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/thunderbird 2>/dev/null || true @${ECHO_CMD} '@exec ${LN} -sf %D/lib/xpi/${XPI_ID} ${LOCALBASE}/lib/thunderbird/extensions 2>/dev/null || true' >> ${TMPPLIST} @${ECHO_CMD} '@unexec ${RM} -f ${LOCALBASE}/lib/thunderbird/extensions/${XPI_ID}' >> ${TMPPLIST} .endif .if ${PORT_OPTIONS:MENIGMAIL} @${MKDIR} ${STAGEDIR}${XPI_LIBDIR}/${EM_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/${PORTNAME} @(cd ${STAGEDIR}${XPI_LIBDIR}/${EM_ID}; ${TAR} -xf ${EM_XPI_FILE}) @${REINPLACE_CMD} -i "" "s/${EM_ORIG_ID}/${EM_ID}/" ${EM_ID_RFILES:S/^/${STAGEDIR}/} @${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${EM_ID} @${LN} -sf ${XPI_LIBDIR}/${EM_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/${PORTNAME} 2>/dev/null || true @${ECHO_CMD} '@exec ${LN} -sf %D/lib/xpi/${EM_ID} ${LOCALBASE}/lib/${PORTNAME}/extensions 2>/dev/null || true' >> ${TMPPLIST} @${ECHO_CMD} '@unexec ${RM} -f ${LOCALBASE}/lib/${PORTNAME}/extensions/${EM_ID}' >> ${TMPPLIST} .endif .include Index: head/mail/thunderbird/distinfo =================================================================== --- head/mail/thunderbird/distinfo (revision 380089) +++ head/mail/thunderbird/distinfo (revision 380090) @@ -1,4 +1,4 @@ -SHA256 (thunderbird-31.4.0.source.tar.bz2) = 3e4b6cb5934b7a8e51a673044e0691eb7cd88a08415494673cd7eadb35cd90c3 -SIZE (thunderbird-31.4.0.source.tar.bz2) = 171045601 +SHA256 (thunderbird-31.5.0.source.tar.bz2) = 17ca8904ac2cc4815b145074b0f2b5729e22e8d3f635c3afe12913b35893e2d9 +SIZE (thunderbird-31.5.0.source.tar.bz2) = 392347898 SHA256 (enigmail-1.7.2.tar.gz) = 7b3a62e83961bafec1cdac60075aa6c317c8f655a837e31a7d1f3ce6a49fc7d6 SIZE (enigmail-1.7.2.tar.gz) = 1420346 Index: head/mail/thunderbird/files/patch-bug1083461 =================================================================== --- head/mail/thunderbird/files/patch-bug1083461 (revision 380089) +++ head/mail/thunderbird/files/patch-bug1083461 (nonexistent) @@ -1,156 +0,0 @@ -commit c97894b -Author: L. David Baron -Date: Sun Oct 19 23:31:39 2014 -0400 - - Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers. r=bzbarsky approval-mozilla-esr31=bkerensa ---- - layout/style/nsCSSValue.cpp | 28 ++++++++++++++++------------ - layout/style/nsCSSValue.h | 22 ++++++++++++++++------ - layout/style/nsStyleAnimation.cpp | 6 ++++-- - 3 files changed, 36 insertions(+), 20 deletions(-) - -diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp -index 781ef65..4bbc979 100644 ---- mozilla/layout/style/nsCSSValue.cpp -+++ mozilla/layout/style/nsCSSValue.cpp -@@ -253,13 +253,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const - return *mValue.mRect == *aOther.mValue.mRect; - } - else if (eCSSUnit_List == mUnit) { -- return *mValue.mList == *aOther.mValue.mList; -+ return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList); - } - else if (eCSSUnit_SharedList == mUnit) { - return *mValue.mSharedList == *aOther.mValue.mSharedList; - } - else if (eCSSUnit_PairList == mUnit) { -- return *mValue.mPairList == *aOther.mValue.mPairList; -+ return nsCSSValuePairList::Equal(mValue.mPairList, -+ aOther.mValue.mPairList); - } - else if (eCSSUnit_GridTemplateAreas == mUnit) { - return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas; -@@ -1740,13 +1741,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult, - } - } - --bool --nsCSSValueList::operator==(const nsCSSValueList& aOther) const -+/* static */ bool -+nsCSSValueList::Equal(const nsCSSValueList* aList1, -+ const nsCSSValueList* aList2) - { -- if (this == &aOther) -+ if (aList1 == aList2) { - return true; -+ } - -- const nsCSSValueList *p1 = this, *p2 = &aOther; -+ const nsCSSValueList *p1 = aList1, *p2 = aList2; - for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) { - if (p1->mValue != p2->mValue) - return false; -@@ -1799,8 +1802,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult - bool - nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const - { -- return !mHead == !aOther.mHead && -- (!mHead || *mHead == *aOther.mHead); -+ return nsCSSValueList::Equal(mHead, aOther.mHead); - } - - size_t -@@ -2010,13 +2012,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty, - } - } - --bool --nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const -+/* static */ bool -+nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1, -+ const nsCSSValuePairList* aList2) - { -- if (this == &aOther) -+ if (aList1 == aList2) { - return true; -+ } - -- const nsCSSValuePairList *p1 = this, *p2 = &aOther; -+ const nsCSSValuePairList *p1 = aList1, *p2 = aList2; - for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) { - if (p1->mXValue != p2->mXValue || - p1->mYValue != p2->mYValue) -diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h -index 753938c..77eeef0 100644 ---- mozilla/layout/style/nsCSSValue.h -+++ mozilla/layout/style/nsCSSValue.h -@@ -806,9 +806,8 @@ struct nsCSSValueList { - void AppendToString(nsCSSProperty aProperty, nsAString& aResult, - nsCSSValue::Serialization aValueSerialization) const; - -- bool operator==(nsCSSValueList const& aOther) const; -- bool operator!=(const nsCSSValueList& aOther) const -- { return !(*this == aOther); } -+ static bool Equal(const nsCSSValueList* aList1, -+ const nsCSSValueList* aList2); - - size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; - -@@ -821,6 +820,12 @@ private: - { - MOZ_COUNT_CTOR(nsCSSValueList); - } -+ -+ // We don't want operator== or operator!= because they wouldn't be -+ // null-safe, which is generally what we need. Use |Equal| method -+ // above instead. -+ bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE; -+ bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE; - }; - - // nsCSSValueList_heap differs from nsCSSValueList only in being -@@ -1199,9 +1204,8 @@ struct nsCSSValuePairList { - void AppendToString(nsCSSProperty aProperty, nsAString& aResult, - nsCSSValue::Serialization aValueSerialization) const; - -- bool operator==(const nsCSSValuePairList& aOther) const; -- bool operator!=(const nsCSSValuePairList& aOther) const -- { return !(*this == aOther); } -+ static bool Equal(const nsCSSValuePairList* aList1, -+ const nsCSSValuePairList* aList2); - - size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; - -@@ -1215,6 +1219,12 @@ private: - { - MOZ_COUNT_CTOR(nsCSSValuePairList); - } -+ -+ // We don't want operator== or operator!= because they wouldn't be -+ // null-safe, which is generally what we need. Use |Equal| method -+ // above instead. -+ bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE; -+ bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE; - }; - - // nsCSSValuePairList_heap differs from nsCSSValuePairList only in being -diff --git layout/style/nsStyleAnimation.cpp layout/style/nsStyleAnimation.cpp -index 6c2ccb0..8dbe404 100644 ---- mozilla/layout/style/nsStyleAnimation.cpp -+++ mozilla/layout/style/nsStyleAnimation.cpp -@@ -3816,11 +3816,13 @@ nsStyleAnimation::Value::operator==(const Value& aOther) const - case eUnit_Filter: - case eUnit_Shadow: - case eUnit_BackgroundPosition: -- return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList; -+ return nsCSSValueList::Equal(mValue.mCSSValueList, -+ aOther.mValue.mCSSValueList); - case eUnit_Transform: - return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList; - case eUnit_CSSValuePairList: -- return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList; -+ return nsCSSValuePairList::Equal(mValue.mCSSValuePairList, -+ aOther.mValue.mCSSValuePairList); - case eUnit_UnparsedString: - return (NS_strcmp(GetStringBufferValue(), - aOther.GetStringBufferValue()) == 0); Property changes on: head/mail/thunderbird/files/patch-bug1083461 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-bug1021761 =================================================================== --- head/mail/thunderbird/files/patch-bug1021761 (revision 380089) +++ head/mail/thunderbird/files/patch-bug1021761 (revision 380090) @@ -1,1092 +1,1091 @@ diff --git configure.in configure.in index 48e60c0..ec08417 100644 --- mozilla/configure.in +++ mozilla/configure.in -@@ -5438,6 +5438,60 @@ fi +@@ -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_DISABLE_BOOL(oss, -+[ --disable-oss Disable OpenSoundSystem support], -+ MOZ_OSS=, -+ MOZ_OSS=1) ++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 -z "$MOZ_OSS_CFLAGS"; then -+ for oss_conf in /etc/oss.conf /usr/local/etc/oss.conf; do -+ if test -e "$oss_conf"; then -+ . "$oss_conf" -+ fi -+ done ++ if test "$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="-I$OSSLIBDIR/include" ++ 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 linux/soundcard.h soundcard.h) ++ MOZ_CHECK_HEADERS(sys/soundcard.h soundcard.h) + + if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \ -+ "$ac_cv_header_linux_soundcard_h" != "yes" -a \ + "$ac_cv_header_soundcard_h" != "yes"; then + AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --disable-ogg --disable-wave --disable-webm.]) + fi + + dnl Assume NetBSD implementation over SunAudio + AC_CHECK_LIB(ossaudio, _oss_ioctl, + [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound") -+ MOZ_OSS_LIBS="-lossaudio"]) ++ 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 ================================== -@@ -5451,12 +5505,23 @@ MOZ_ARG_ENABLE_BOOL(alsa, - MOZ_ALSA=1, - MOZ_ALSA=) - -+MOZ_ARG_DISABLE_BOOL(alsa-dlopen, -+[ --disable-alsa-dlopen Disable runtime linking of libasound.so], -+ DISABLE_LIBASOUND_DLOPEN=1, -+ DISABLE_LIBASOUND_DLOPEN=) -+ - if test -n "$MOZ_ALSA"; then - PKG_CHECK_MODULES(MOZ_ALSA, alsa, , - [echo "$MOZ_ALSA_PKG_ERRORS" - AC_MSG_ERROR([Need alsa for Ogg, Wave or WebM decoding on Linux. Disable with --disable-ogg --disable-wave --disable-webm. (On Ubuntu, you might try installing the package libasound2-dev.)])]) - fi - -+if test -n "$DISABLE_LIBASOUND_DLOPEN"; then -+ AC_DEFINE(DISABLE_LIBASOUND_DLOPEN) -+else -+ MOZ_ALSA_LIBS= -+fi -+ - AC_SUBST(MOZ_ALSA) - - dnl ======================================================== diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS index b441e8a..950d9e5 100644 --- mozilla/media/libcubeb/AUTHORS +++ mozilla/media/libcubeb/AUTHORS @@ -4,3 +4,4 @@ Michael Wu Paul Adenot David Richards Sebastien Alaiwan +Evgeniy Vodolazskiy diff --git media/libcubeb/src/cubeb.c media/libcubeb/src/cubeb.c index 9c3adcc..45d765b 100644 --- mozilla/media/libcubeb/src/cubeb.c +++ mozilla/media/libcubeb/src/cubeb.c @@ -54,6 +54,9 @@ int opensl_init(cubeb ** context, char const * context_name); #if defined(USE_AUDIOTRACK) int audiotrack_init(cubeb ** context, char const * context_name); #endif +#if defined(USE_OSS) +int oss_init(cubeb ** context, char const * context_name); +#endif int validate_stream_params(cubeb_stream_params stream_params) @@ -120,6 +123,9 @@ cubeb_init(cubeb ** context, char const * context_name) #if defined(USE_AUDIOTRACK) audiotrack_init, #endif +#if defined(USE_OSS) + oss_init, +#endif }; int i; diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c index a962553..1f780f4 100644 --- mozilla/media/libcubeb/src/cubeb_alsa.c +++ mozilla/media/libcubeb/src/cubeb_alsa.c @@ -11,6 +11,7 @@ #include #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); @@ -313,10 +360,10 @@ alsa_refill_stream(cubeb_stream * stm) return ERROR; } if (got > 0) { - snd_pcm_sframes_t wrote = snd_pcm_writei(stm->pcm, p, got); + snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); if (wrote == -EPIPE) { - snd_pcm_recover(stm->pcm, wrote, 1); - wrote = snd_pcm_writei(stm->pcm, p, got); + WRAP(snd_pcm_recover)(stm->pcm, wrote, 1); + wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); } assert(wrote >= 0 && wrote == got); stm->write_position += wrote; @@ -342,7 +389,7 @@ alsa_refill_stream(cubeb_stream * stm) /* Fill the remaining buffer with silence to guarantee one full period has been written. */ - snd_pcm_writei(stm->pcm, (char *) p + got, avail - got); + WRAP(snd_pcm_writei)(stm->pcm, (char *) p + got, avail - got); set_timeout(&stm->drain_timeout, buffer_time * 1000); @@ -453,26 +500,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) slave_def = NULL; - r = snd_config_search(root_pcm, "slave", &slave_pcm); + r = WRAP(snd_config_search)(root_pcm, "slave", &slave_pcm); if (r < 0) { return NULL; } - r = snd_config_get_string(slave_pcm, &string); + r = WRAP(snd_config_get_string)(slave_pcm, &string); if (r >= 0) { - r = snd_config_search_definition(lconf, "pcm_slave", string, &slave_def); + r = WRAP(snd_config_search_definition)(lconf, "pcm_slave", string, &slave_def); if (r < 0) { return NULL; } } do { - r = snd_config_search(slave_def ? slave_def : slave_pcm, "pcm", &pcm); + r = WRAP(snd_config_search)(slave_def ? slave_def : slave_pcm, "pcm", &pcm); if (r < 0) { break; } - r = snd_config_get_string(slave_def ? slave_def : slave_pcm, &string); + r = WRAP(snd_config_get_string)(slave_def ? slave_def : slave_pcm, &string); if (r < 0) { break; } @@ -481,7 +528,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) if (r < 0 || r > (int) sizeof(node_name)) { break; } - r = snd_config_search(lconf, node_name, &pcm); + r = WRAP(snd_config_search)(lconf, node_name, &pcm); if (r < 0) { break; } @@ -490,7 +537,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) } while (0); if (slave_def) { - snd_config_delete(slave_def); + WRAP(snd_config_delete)(slave_def); } return NULL; @@ -513,22 +560,22 @@ init_local_config_with_workaround(char const * pcm_name) lconf = NULL; - if (snd_config == NULL) { + if (*WRAP(snd_config) == NULL) { return NULL; } - r = snd_config_copy(&lconf, snd_config); + r = WRAP(snd_config_copy)(&lconf, *WRAP(snd_config)); if (r < 0) { return NULL; } do { - r = snd_config_search_definition(lconf, "pcm", pcm_name, &pcm_node); + r = WRAP(snd_config_search_definition)(lconf, "pcm", pcm_name, &pcm_node); if (r < 0) { break; } - r = snd_config_get_id(pcm_node, &string); + r = WRAP(snd_config_get_id)(pcm_node, &string); if (r < 0) { break; } @@ -537,7 +584,7 @@ init_local_config_with_workaround(char const * pcm_name) if (r < 0 || r > (int) sizeof(node_name)) { break; } - r = snd_config_search(lconf, node_name, &pcm_node); + r = WRAP(snd_config_search)(lconf, node_name, &pcm_node); if (r < 0) { break; } @@ -548,12 +595,12 @@ init_local_config_with_workaround(char const * pcm_name) } /* Fetch the PCM node's type, and bail out if it's not the PulseAudio plugin. */ - r = snd_config_search(pcm_node, "type", &node); + r = WRAP(snd_config_search)(pcm_node, "type", &node); if (r < 0) { break; } - r = snd_config_get_string(node, &string); + r = WRAP(snd_config_get_string)(node, &string); if (r < 0) { break; } @@ -564,18 +611,18 @@ init_local_config_with_workaround(char const * pcm_name) /* Don't clobber an explicit existing handle_underrun value, set it only if it doesn't already exist. */ - r = snd_config_search(pcm_node, "handle_underrun", &node); + r = WRAP(snd_config_search)(pcm_node, "handle_underrun", &node); if (r != -ENOENT) { break; } /* Disable pcm_pulse's asynchronous underrun handling. */ - r = snd_config_imake_integer(&node, "handle_underrun", 0); + r = WRAP(snd_config_imake_integer)(&node, "handle_underrun", 0); if (r < 0) { break; } - r = snd_config_add(pcm_node, node); + r = WRAP(snd_config_add)(pcm_node, node); if (r < 0) { break; } @@ -583,7 +630,7 @@ init_local_config_with_workaround(char const * pcm_name) return lconf; } while (0); - snd_config_delete(lconf); + WRAP(snd_config_delete)(lconf); return NULL; } @@ -595,9 +642,9 @@ alsa_locked_pcm_open(snd_pcm_t ** pcm, snd_pcm_stream_t stream, snd_config_t * l pthread_mutex_lock(&cubeb_alsa_mutex); if (local_config) { - r = snd_pcm_open_lconf(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config); + r = WRAP(snd_pcm_open_lconf)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config); } else { - r = snd_pcm_open(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK); + r = WRAP(snd_pcm_open)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK); } pthread_mutex_unlock(&cubeb_alsa_mutex); @@ -610,7 +657,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm) int r; pthread_mutex_lock(&cubeb_alsa_mutex); - r = snd_pcm_close(pcm); + r = WRAP(snd_pcm_close)(pcm); pthread_mutex_unlock(&cubeb_alsa_mutex); return r; @@ -667,12 +714,65 @@ alsa_init(cubeb ** context, char const * context_name) pthread_attr_t attr; snd_pcm_t * dummy; + void * libasound = NULL; + +#ifndef DISABLE_LIBASOUND_DLOPEN + libasound = dlopen("libasound.so", RTLD_LAZY); + if (!libasound) { + return CUBEB_ERROR; + } + +#define LOAD(x) do { \ + cubeb_##x = dlsym(libasound, #x); \ + if (!cubeb_##x) { \ + dlclose(libasound); \ + return CUBEB_ERROR; \ + } \ + } while(0) + + LOAD(snd_config); + LOAD(snd_config_add); + LOAD(snd_config_copy); + LOAD(snd_config_delete); + LOAD(snd_config_get_id); + LOAD(snd_config_get_string); + LOAD(snd_config_imake_integer); + LOAD(snd_config_search); + LOAD(snd_config_search_definition); + LOAD(snd_lib_error_set_handler); + LOAD(snd_pcm_avail_update); + LOAD(snd_pcm_close); + LOAD(snd_pcm_delay); + LOAD(snd_pcm_drain); + LOAD(snd_pcm_frames_to_bytes); + LOAD(snd_pcm_get_params); + /* snd_pcm_hw_params_alloca is actually a macro */ + /* LOAD(snd_pcm_hw_params_alloca); */ + LOAD(snd_pcm_hw_params_sizeof); + LOAD(snd_pcm_hw_params_any); + LOAD(snd_pcm_hw_params_get_channels_max); + LOAD(snd_pcm_hw_params_get_rate); + LOAD(snd_pcm_hw_params_set_rate_near); + LOAD(snd_pcm_nonblock); + LOAD(snd_pcm_open); + LOAD(snd_pcm_open_lconf); + LOAD(snd_pcm_pause); + LOAD(snd_pcm_poll_descriptors); + LOAD(snd_pcm_poll_descriptors_count); + LOAD(snd_pcm_poll_descriptors_revents); + LOAD(snd_pcm_recover); + LOAD(snd_pcm_set_params); + LOAD(snd_pcm_state); + LOAD(snd_pcm_writei); + +#undef LOAD +#endif assert(context); *context = NULL; pthread_mutex_lock(&cubeb_alsa_mutex); if (!cubeb_alsa_error_handler_set) { - snd_lib_error_set_handler(silent_error_handler); + WRAP(snd_lib_error_set_handler)(silent_error_handler); cubeb_alsa_error_handler_set = 1; } pthread_mutex_unlock(&cubeb_alsa_mutex); @@ -680,6 +780,8 @@ alsa_init(cubeb ** context, char const * context_name) ctx = calloc(1, sizeof(*ctx)); assert(ctx); + ctx->libasound = libasound; + ctx->ops = &alsa_ops; r = pthread_mutex_init(&ctx->mutex, NULL); @@ -729,7 +831,7 @@ alsa_init(cubeb ** context, char const * context_name) config fails with EINVAL, the PA PCM is too old for this workaround. */ if (r == -EINVAL) { pthread_mutex_lock(&cubeb_alsa_mutex); - snd_config_delete(ctx->local_config); + WRAP(snd_config_delete)(ctx->local_config); pthread_mutex_unlock(&cubeb_alsa_mutex); ctx->local_config = NULL; } else if (r >= 0) { @@ -768,9 +870,13 @@ alsa_destroy(cubeb * ctx) pthread_mutex_destroy(&ctx->mutex); free(ctx->fds); + if (ctx->libasound) { + dlclose(ctx->libasound); + } + if (ctx->local_config) { pthread_mutex_lock(&cubeb_alsa_mutex); - snd_config_delete(ctx->local_config); + WRAP(snd_config_delete)(ctx->local_config); pthread_mutex_unlock(&cubeb_alsa_mutex); } @@ -838,7 +944,7 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, return CUBEB_ERROR; } - r = snd_pcm_nonblock(stm->pcm, 1); + r = WRAP(snd_pcm_nonblock)(stm->pcm, 1); assert(r == 0); /* Ugly hack: the PA ALSA plugin allows buffer configurations that can't @@ -848,23 +954,23 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, latency = latency < 500 ? 500 : latency; } - r = snd_pcm_set_params(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, - stm->params.channels, stm->params.rate, 1, - latency * 1000); + r = WRAP(snd_pcm_set_params)(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, + stm->params.channels, stm->params.rate, 1, + latency * 1000); if (r < 0) { alsa_stream_destroy(stm); return CUBEB_ERROR_INVALID_FORMAT; } - r = snd_pcm_get_params(stm->pcm, &stm->buffer_size, &stm->period_size); + r = WRAP(snd_pcm_get_params)(stm->pcm, &stm->buffer_size, &stm->period_size); assert(r == 0); - stm->nfds = snd_pcm_poll_descriptors_count(stm->pcm); + stm->nfds = WRAP(snd_pcm_poll_descriptors_count)(stm->pcm); assert(stm->nfds > 0); stm->saved_fds = calloc(stm->nfds, sizeof(struct pollfd)); assert(stm->saved_fds); - r = snd_pcm_poll_descriptors(stm->pcm, stm->saved_fds, stm->nfds); + r = WRAP(snd_pcm_poll_descriptors)(stm->pcm, stm->saved_fds, stm->nfds); assert((nfds_t) r == stm->nfds); r = pthread_cond_init(&stm->cond, NULL); @@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) return CUBEB_ERROR; } - rv = snd_pcm_hw_params_any(stm->pcm, hw_params); + rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); if (rv < 0) { return CUBEB_ERROR; } - rv = snd_pcm_hw_params_get_channels_max(hw_params, max_channels); + rv = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels); if (rv < 0) { return CUBEB_ERROR; } @@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { /* get a pcm, disabling resampling, so we get a rate the * hardware/dmix/pulse/etc. supports. */ - rv = snd_pcm_open(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); + rv = WRAP(snd_pcm_open)(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); if (rv < 0) { return CUBEB_ERROR; } - rv = snd_pcm_hw_params_any(pcm, hw_params); + rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); if (rv < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - rv = snd_pcm_hw_params_get_rate(hw_params, rate, &dir); + rv = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir); if (rv >= 0) { /* There is a default rate: use it. */ - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */ *rate = 44100; - rv = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL); + rv = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL); if (rv < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } @@ -1013,7 +1119,7 @@ alsa_stream_start(cubeb_stream * stm) ctx = stm->context; pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 0); + WRAP(snd_pcm_pause)(stm->pcm, 0); gettimeofday(&stm->last_activity, NULL); pthread_mutex_unlock(&stm->mutex); @@ -1047,7 +1153,7 @@ alsa_stream_stop(cubeb_stream * stm) pthread_mutex_unlock(&ctx->mutex); pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 1); + WRAP(snd_pcm_pause)(stm->pcm, 1); pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1063,8 +1169,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) pthread_mutex_lock(&stm->mutex); delay = -1; - if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING || - snd_pcm_delay(stm->pcm, &delay) != 0) { + if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING || + WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) { *position = stm->last_position; pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1089,7 +1195,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) snd_pcm_sframes_t delay; /* This function returns the delay in frames until a frame written using snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */ - if (snd_pcm_delay(stm->pcm, &delay)) { + if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) { return CUBEB_ERROR; } diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c new file mode 100644 index 0000000..5e38e27 --- /dev/null +++ mozilla/media/libcubeb/src/cubeb_oss.c -@@ -0,0 +1,399 @@ +@@ -0,0 +1,397 @@ +/* + * 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 -+#elif defined(HAVE_LINUX_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 +}; diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build index 8b7a0dd..31212ce 100644 --- mozilla/media/libcubeb/src/moz.build +++ mozilla/media/libcubeb/src/moz.build @@ -17,6 +17,12 @@ if CONFIG['MOZ_ALSA']: ] DEFINES['USE_ALSA'] = True +if CONFIG['MOZ_OSS']: + SOURCES += [ + 'cubeb_oss.c', + ] + DEFINES['USE_OSS'] = True + if CONFIG['MOZ_PULSEAUDIO']: SOURCES += [ 'cubeb_pulse.c', @@ -75,5 +81,6 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': FAIL_ON_WARNINGS = True +CFLAGS += CONFIG['MOZ_OSS_CFLAGS'] CFLAGS += CONFIG['MOZ_ALSA_CFLAGS'] CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS'] +diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in +index 991f03f..3d99eb5 100644 +--- mozilla/media/webrtc/signaling/test/Makefile.in ++++ mozilla/media/webrtc/signaling/test/Makefile.in +@@ -26,9 +26,9 @@ ifdef JS_SHARED_LIBRARY + LIBS += $(MOZ_JS_LIBS) + endif + +-ifdef MOZ_ALSA ++ifdef MOZ_OSS + LIBS += \ +- $(MOZ_ALSA_LIBS) \ ++ $(MOZ_OSS_LIBS) \ + $(NULL) + endif + diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk index e191f13..4fb268a 100644 --- mozilla/toolkit/library/libxul.mk +++ mozilla/toolkit/library/libxul.mk -@@ -146,6 +146,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32 +@@ -146,9 +146,9 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32 endif endif +-ifdef MOZ_ALSA +-EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS) +-endif +ifdef MOZ_OSS +EXTRA_DSO_LDOPTS += $(MOZ_OSS_LIBS) +endif -+ - ifdef MOZ_ALSA - EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS) - endif + + ifdef HAVE_CLOCK_MONOTONIC + EXTRA_DSO_LDOPTS += $(REALTIME_LIBS) Index: head/mail/thunderbird/files/patch-bug991253 =================================================================== --- head/mail/thunderbird/files/patch-bug991253 (revision 380089) +++ head/mail/thunderbird/files/patch-bug991253 (revision 380090) @@ -1,15 +1,17 @@ --- mozilla/extensions/spellcheck/hunspell/src/mozHunspell.cpp~ +++ mozilla/extensions/spellcheck/hunspell/src/mozHunspell.cpp -@@ -400,6 +400,12 @@ mozHunspell::LoadDictionaryList() +@@ -400,6 +400,14 @@ mozHunspell::LoadDictionaryList(bool aNo } } + // load system hunspell dictionaries -+ nsIFile* hunDir; ++ nsCOMPtr hunDir; + NS_NewNativeLocalFile(NS_LITERAL_CSTRING("%%LOCALBASE%%/share/hunspell"), -+ true, &hunDir); -+ LoadDictionariesFromDir(hunDir); ++ true, getter_AddRefs(hunDir)); ++ if (hunDir) { ++ LoadDictionariesFromDir(hunDir); ++ } + // find dictionaries from extensions requiring restart nsCOMPtr dictDirs; rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY_LIST, Index: head/mail/thunderbird-i18n/Makefile =================================================================== --- head/mail/thunderbird-i18n/Makefile (revision 380089) +++ head/mail/thunderbird-i18n/Makefile (revision 380090) @@ -1,84 +1,84 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= thunderbird-i18n -PORTVERSION= 31.4.0 +PORTVERSION= 31.5.0 CATEGORIES= mail news net-im MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${PORTVERSION}/linux-i686/xpi PKGNAMEPREFIX= DISTFILES= ${THUNDERBIRD_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} MAINTAINER= gecko@FreeBSD.org COMMENT= Localized interface for Thunderbird USES= gecko:thunderbird,build zip USE_XPI= thunderbird NO_BUILD= yes NO_ARCH= yes USE_SUBMAKE= yes WDIR= langpack-*@thunderbird.mozilla.org XPI_DISTNAMES= ${THUNDERBIRD_I18N_} PLIST?= ${WRKDIR}/plist PLISTF?= ${WRKDIR}/plist_files .include "${.CURDIR}/Makefile.option" .include .ifndef WITHOUT_SWITCHER RUN_DEPENDS+= xpi-quick-locale-switcher>=0:${PORTSDIR}/www/xpi-quick-locale-switcher .endif .include "${.CURDIR}/Makefile.lang" THUNDERBIRD_I18N_?= ${THUNDERBIRD_I18N} .for dist in ${XPI_DISTNAMES} XPI_ID_${dist}= langpack-${dist}@thunderbird.mozilla.org .endfor do-extract: @${RM} -rf ${WRKDIR} @${MKDIR} ${WRKDIR} ${WRKSRC} @for lang in ${THUNDERBIRD_I18N_}; do \ if ! (${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${_DISTDIR}/$$lang.xpi -d ${WRKSRC}/langpack-$$lang@thunderbird.mozilla.org);\ then \ exit 1; \ fi; \ cd ${WRKSRC}/langpack-$$lang@thunderbird.mozilla.org/; \ ${FIND} -H -s * ! -type d | \ ${SED} -e "s|^|lib/xpi/langpack-$$lang@thunderbird.mozilla.org/|" >> ${PLISTF}; \ done ${CAT} ${PLISTF} | ${SORT} >> ${PLIST} do-install: @${MKDIR} ${STAGEDIR}${XPI_LIBDIR} ${XPI_SLDIRS_ALL:S,^,${STAGEDIR},} cd ${WRKSRC}; ${PAX} -rw . ${STAGEDIR}${XPI_LIBDIR} ${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${WDIR}/ @for e in ${STAGEDIR}${XPI_LIBDIR}/${WDIR}; do \ for _dir in ${XPI_LINKFARMS} ; do \ ${LN} -sf $${_e##*/} ${STAGEDIR}$$_dir/ ${_Q} ; \ done \ done @${ECHO_CMD} '@exec ${INSTALL} -d ${XPI_SLDIRS_ALL:S,^${PREFIX},%D,}' ${_A} @${ECHO_CMD} '@exec for _dir in ${XPI_LINKFARMS} ; { \ ${LN} -sf ${XPI_LIBDIR}/${WDIR} $$_dir/ ${_Q}; }' ${_A} @${ECHO_CMD} '@unexec for _dir in ${XPI_LINKFARMS} ${XPI_LIBDIR}; { ${RM} -f $$_dir/${WDIR} ; }' ${_A} post-patch: ${FIND} ${WRKSRC} -name install.rdf -print0 | \ ${XARGS} -0L1 ${REINPLACE_CMD} -i '' -e '/ Index: head/mail/thunderbird-i18n/distinfo =================================================================== --- head/mail/thunderbird-i18n/distinfo (revision 380089) +++ head/mail/thunderbird-i18n/distinfo (revision 380090) @@ -1,110 +1,110 @@ -SHA256 (xpi/thunderbird-i18n-31.4.0/ar.xpi) = b758c51e79fa7713a6f147d928eec15892f044d2f295ff0ec48f5a76820f812c -SIZE (xpi/thunderbird-i18n-31.4.0/ar.xpi) = 472812 -SHA256 (xpi/thunderbird-i18n-31.4.0/ast.xpi) = 6376fa259325eeafd71e148fedcf19cf9e3a620fe805e78089a3d68af4a4caef -SIZE (xpi/thunderbird-i18n-31.4.0/ast.xpi) = 393049 -SHA256 (xpi/thunderbird-i18n-31.4.0/be.xpi) = ac3f330a687ad8cb329a46844e92439dfb069b29369fdec93885c74a6137a35e -SIZE (xpi/thunderbird-i18n-31.4.0/be.xpi) = 427488 -SHA256 (xpi/thunderbird-i18n-31.4.0/bg.xpi) = 5c1bc813f0f2e5440d6a7f6bbe0cb346de688d47cd241b68834bf398ee35908c -SIZE (xpi/thunderbird-i18n-31.4.0/bg.xpi) = 493734 -SHA256 (xpi/thunderbird-i18n-31.4.0/bn-BD.xpi) = aafaff2a6dad2220a1e75b8948da60c9eba68f81130fbded5c34e773f4fc46d9 -SIZE (xpi/thunderbird-i18n-31.4.0/bn-BD.xpi) = 555613 -SHA256 (xpi/thunderbird-i18n-31.4.0/br.xpi) = 867200206ee9d6339a2bbfce71f7d3bceca32a0821d5fd4d5ed03585b8f98cdd -SIZE (xpi/thunderbird-i18n-31.4.0/br.xpi) = 441444 -SHA256 (xpi/thunderbird-i18n-31.4.0/ca.xpi) = 36481e5c6f1c138ca7752cfa4085c4ba9e4bf6ed32c52f6bbf72c105ea59c08c -SIZE (xpi/thunderbird-i18n-31.4.0/ca.xpi) = 441713 -SHA256 (xpi/thunderbird-i18n-31.4.0/cs.xpi) = 391fe8f7f56270ef3f3e23c4855387053155134d4b2718a40e2a96a8432dec4c -SIZE (xpi/thunderbird-i18n-31.4.0/cs.xpi) = 444701 -SHA256 (xpi/thunderbird-i18n-31.4.0/da.xpi) = bc46fdba7cb03e1d83fc471b54cfe4bc6734a72871b6f286c66fc63c26142764 -SIZE (xpi/thunderbird-i18n-31.4.0/da.xpi) = 422052 -SHA256 (xpi/thunderbird-i18n-31.4.0/de.xpi) = 060e5bc3c4995ce1d44d8d463d47af785748a3ade78160e4a9c54ad4c6ce982b -SIZE (xpi/thunderbird-i18n-31.4.0/de.xpi) = 424665 -SHA256 (xpi/thunderbird-i18n-31.4.0/el.xpi) = bef0bdf34e89eb0bb36ea53456d479beff39e3a2fa19cc96a3f082ada84dcc0c -SIZE (xpi/thunderbird-i18n-31.4.0/el.xpi) = 484855 -SHA256 (xpi/thunderbird-i18n-31.4.0/en-GB.xpi) = bd6815c2cb86ac06cf171d956c28bf29eef10405058c3fba5a7cc34dd90171d7 -SIZE (xpi/thunderbird-i18n-31.4.0/en-GB.xpi) = 412515 -SHA256 (xpi/thunderbird-i18n-31.4.0/en-US.xpi) = c659b3c533e040d1c99d4f0f69dec4a995dc8c437271bcecfae53de4dd6181a1 -SIZE (xpi/thunderbird-i18n-31.4.0/en-US.xpi) = 413660 -SHA256 (xpi/thunderbird-i18n-31.4.0/es-AR.xpi) = cce52ecb2aede4639c4606c860f50abdb90cde00b761319887bad1ecf541f48b -SIZE (xpi/thunderbird-i18n-31.4.0/es-AR.xpi) = 438531 -SHA256 (xpi/thunderbird-i18n-31.4.0/es-ES.xpi) = 7dcd156460118af201d721b0a48366546cce7ad9f3406371930492fc18b19677 -SIZE (xpi/thunderbird-i18n-31.4.0/es-ES.xpi) = 374979 -SHA256 (xpi/thunderbird-i18n-31.4.0/et.xpi) = 9338e5f57be7b9cb7d594c8177c67a5d27a38d9fd9632c4d2b52276cd3b17170 -SIZE (xpi/thunderbird-i18n-31.4.0/et.xpi) = 434364 -SHA256 (xpi/thunderbird-i18n-31.4.0/eu.xpi) = b00c7af0eba2f57014a69d3b7aff4de21c8a4ce51897d19bfb6d0127a85c6a3e -SIZE (xpi/thunderbird-i18n-31.4.0/eu.xpi) = 431449 -SHA256 (xpi/thunderbird-i18n-31.4.0/fi.xpi) = 5de0e63d0373ba13e944c7d097b413b02e32cdb36a33e66b3280a82f97e1969c -SIZE (xpi/thunderbird-i18n-31.4.0/fi.xpi) = 435633 -SHA256 (xpi/thunderbird-i18n-31.4.0/fr.xpi) = 056086aea4ae18784038f01f4911ee540b6140978894ed4e6bb29aac669a6917 -SIZE (xpi/thunderbird-i18n-31.4.0/fr.xpi) = 444144 -SHA256 (xpi/thunderbird-i18n-31.4.0/fy-NL.xpi) = af9a03bc3f80465eca10e23ed77a2df331483493bb461b64792e06a6dd57da29 -SIZE (xpi/thunderbird-i18n-31.4.0/fy-NL.xpi) = 438545 -SHA256 (xpi/thunderbird-i18n-31.4.0/ga-IE.xpi) = 0c36c28fe519fa379cfcc75a8382268c1ef037509d90b9c7018e5317a8067a96 -SIZE (xpi/thunderbird-i18n-31.4.0/ga-IE.xpi) = 449362 -SHA256 (xpi/thunderbird-i18n-31.4.0/gd.xpi) = 0a49f061bd5a908cd6aa40bd7157d8622ecafc1b2039461702a1947ae07b6a23 -SIZE (xpi/thunderbird-i18n-31.4.0/gd.xpi) = 453171 -SHA256 (xpi/thunderbird-i18n-31.4.0/gl.xpi) = 136711c07702118c67aff6e1ced3036acc85fdfd34810d1b31d7beda6e05d7d9 -SIZE (xpi/thunderbird-i18n-31.4.0/gl.xpi) = 446788 -SHA256 (xpi/thunderbird-i18n-31.4.0/he.xpi) = 193c08a611dc42594b544146a060598108a6b810caed7b8f6e4c610ef88f6f63 -SIZE (xpi/thunderbird-i18n-31.4.0/he.xpi) = 476112 -SHA256 (xpi/thunderbird-i18n-31.4.0/hr.xpi) = a35b6b8095950c830a14f507a74a0efece50726d9ba7a2d0fc7d14b53150a8b7 -SIZE (xpi/thunderbird-i18n-31.4.0/hr.xpi) = 436980 -SHA256 (xpi/thunderbird-i18n-31.4.0/hu.xpi) = 31b103b899684391b48c4b7284474efd96b39fd6612ed5b607fa283b05ec1f61 -SIZE (xpi/thunderbird-i18n-31.4.0/hu.xpi) = 454542 -SHA256 (xpi/thunderbird-i18n-31.4.0/hy-AM.xpi) = 44d9e4471a2cfd9938ddf7e617184228d448f9aba94a2eaba88b34650474cf28 -SIZE (xpi/thunderbird-i18n-31.4.0/hy-AM.xpi) = 492766 -SHA256 (xpi/thunderbird-i18n-31.4.0/id.xpi) = 91f7bd26d3939fbf4ce4398215b4a74a252e663217201fc5c606e5f24e28cc79 -SIZE (xpi/thunderbird-i18n-31.4.0/id.xpi) = 475876 -SHA256 (xpi/thunderbird-i18n-31.4.0/is.xpi) = cabb75f91fa2d4592dbf94526bddf2549be1f552d0f943ccfc5a540fc8f5ebaa -SIZE (xpi/thunderbird-i18n-31.4.0/is.xpi) = 437959 -SHA256 (xpi/thunderbird-i18n-31.4.0/it.xpi) = 688327a8dca03496a2114645ebe9ba43c0b709b0d448a17d76369a8e8fb09373 -SIZE (xpi/thunderbird-i18n-31.4.0/it.xpi) = 368001 -SHA256 (xpi/thunderbird-i18n-31.4.0/ja.xpi) = ba7c5ea060cb8efab96b159516b09aa04d026ace91e80b8eef504280b1ad2bed -SIZE (xpi/thunderbird-i18n-31.4.0/ja.xpi) = 489267 -SHA256 (xpi/thunderbird-i18n-31.4.0/ko.xpi) = 175928cdec2ad62bdf97a365020bd688f692a4f57e6d9417aa69c9cc67f1a302 -SIZE (xpi/thunderbird-i18n-31.4.0/ko.xpi) = 448920 -SHA256 (xpi/thunderbird-i18n-31.4.0/lt.xpi) = 93655d1035276a89c68425d14879dcadc6eb1e566bf934f9e9589eaec788d15b -SIZE (xpi/thunderbird-i18n-31.4.0/lt.xpi) = 456352 -SHA256 (xpi/thunderbird-i18n-31.4.0/nb-NO.xpi) = 2d63b4eb3baf322b12526b6a465f165e0fc946c9f86cd973168572f384f35453 -SIZE (xpi/thunderbird-i18n-31.4.0/nb-NO.xpi) = 430941 -SHA256 (xpi/thunderbird-i18n-31.4.0/nl.xpi) = 6bb744c813d8656642845538d2f93d874877ad1d231c699aa16b44452e57bbe5 -SIZE (xpi/thunderbird-i18n-31.4.0/nl.xpi) = 431888 -SHA256 (xpi/thunderbird-i18n-31.4.0/nn-NO.xpi) = 6091e8dd488e704456e8318ee01eb566e738ea9c6a346e5351c590b65c9a35ae -SIZE (xpi/thunderbird-i18n-31.4.0/nn-NO.xpi) = 433198 -SHA256 (xpi/thunderbird-i18n-31.4.0/pa-IN.xpi) = af33455b4ef8d579595d4e312ae9d53920f49f90a2b436bd0ffb225938e50536 -SIZE (xpi/thunderbird-i18n-31.4.0/pa-IN.xpi) = 525323 -SHA256 (xpi/thunderbird-i18n-31.4.0/pl.xpi) = 7128b31c1293ef7d314aa91334c83846149e0584dac24cb2702c1d4455142b81 -SIZE (xpi/thunderbird-i18n-31.4.0/pl.xpi) = 410872 -SHA256 (xpi/thunderbird-i18n-31.4.0/pt-BR.xpi) = a2a1711be09d3c9c856bfe7ee4cdeb278fc3509e03c2b71990f179ad083dafe6 -SIZE (xpi/thunderbird-i18n-31.4.0/pt-BR.xpi) = 450477 -SHA256 (xpi/thunderbird-i18n-31.4.0/pt-PT.xpi) = d529f227ad665ffd62b00b12d8740b9ac60fcdb22156a1cdfaeac4a1d16d6221 -SIZE (xpi/thunderbird-i18n-31.4.0/pt-PT.xpi) = 439604 -SHA256 (xpi/thunderbird-i18n-31.4.0/rm.xpi) = dbc36dc2dca453e9db62dcf98696df1d5fd3f567bf61b9ac8d82e7655655e0e4 -SIZE (xpi/thunderbird-i18n-31.4.0/rm.xpi) = 439186 -SHA256 (xpi/thunderbird-i18n-31.4.0/ro.xpi) = 97a115649c8d2bdb7440bf1ba382def1e72b9e03e7e379311cbcf0b3281a7fcc -SIZE (xpi/thunderbird-i18n-31.4.0/ro.xpi) = 479749 -SHA256 (xpi/thunderbird-i18n-31.4.0/ru.xpi) = 4e5067b258ff6f881f2570a0575bd87e3aba780cfd680576419d32a126278a49 -SIZE (xpi/thunderbird-i18n-31.4.0/ru.xpi) = 436156 -SHA256 (xpi/thunderbird-i18n-31.4.0/si.xpi) = 79bbf1f26ef7ce4e9e6b3a6d548d851ef5c4b36157207a21b70d609857a4d7bc -SIZE (xpi/thunderbird-i18n-31.4.0/si.xpi) = 528812 -SHA256 (xpi/thunderbird-i18n-31.4.0/sk.xpi) = 9b042399be1fdf1d327aaf400a49ef269b39a6afb359e78b79b21473d8d2e5ba -SIZE (xpi/thunderbird-i18n-31.4.0/sk.xpi) = 452995 -SHA256 (xpi/thunderbird-i18n-31.4.0/sl.xpi) = f3db7ef61fa94c1a5a941bc85bd1dbfe87a76b0227225c6a4c9e9857b25dba35 -SIZE (xpi/thunderbird-i18n-31.4.0/sl.xpi) = 433874 -SHA256 (xpi/thunderbird-i18n-31.4.0/sq.xpi) = e0eef93742c9b9a6c511300733998de104a1c63666fe5d5ab485d872eec381f8 -SIZE (xpi/thunderbird-i18n-31.4.0/sq.xpi) = 454695 -SHA256 (xpi/thunderbird-i18n-31.4.0/sr.xpi) = b5c85dafe1aa73f14c2831670a7766955c0893d74f3e45e5c447e8b007515c11 -SIZE (xpi/thunderbird-i18n-31.4.0/sr.xpi) = 537335 -SHA256 (xpi/thunderbird-i18n-31.4.0/sv-SE.xpi) = 715426ca25f8f7a6fbf0976743cb5c572f1e6b53d1df1ca5ee71a102f172f0ad -SIZE (xpi/thunderbird-i18n-31.4.0/sv-SE.xpi) = 436106 -SHA256 (xpi/thunderbird-i18n-31.4.0/ta-LK.xpi) = bf294f9942ca6495b6f4196b0955c956792b5651628f9374ad34fc655e91ba5f -SIZE (xpi/thunderbird-i18n-31.4.0/ta-LK.xpi) = 553509 -SHA256 (xpi/thunderbird-i18n-31.4.0/tr.xpi) = f408ef749ea4a160605961abc37f03322affce56e09ccdb0c824f6de2926ff10 -SIZE (xpi/thunderbird-i18n-31.4.0/tr.xpi) = 457360 -SHA256 (xpi/thunderbird-i18n-31.4.0/uk.xpi) = f7be658507adaaed67fd9bd1a6482a2b49ffc975e991934aad7e319e3f21c843 -SIZE (xpi/thunderbird-i18n-31.4.0/uk.xpi) = 499656 -SHA256 (xpi/thunderbird-i18n-31.4.0/vi.xpi) = 30a49028ea0d54edeb9a06a7d7dcf7e58e6e77ba36ff93353358c7eb23df7f66 -SIZE (xpi/thunderbird-i18n-31.4.0/vi.xpi) = 513835 -SHA256 (xpi/thunderbird-i18n-31.4.0/zh-CN.xpi) = 84a96831d8d781c1641e40ddab8bc1b2ab134c8c695b7de739d6dce51cbba583 -SIZE (xpi/thunderbird-i18n-31.4.0/zh-CN.xpi) = 462668 -SHA256 (xpi/thunderbird-i18n-31.4.0/zh-TW.xpi) = 48ea0c4b0f391a90d887283437c23b2bfc0af6f0b9efb85e72444a0931f905a5 -SIZE (xpi/thunderbird-i18n-31.4.0/zh-TW.xpi) = 463408 +SHA256 (xpi/thunderbird-i18n-31.5.0/ar.xpi) = 80b83ce312ed5616edc61b34604d4991ed1e2179f067336d019b64e32a929530 +SIZE (xpi/thunderbird-i18n-31.5.0/ar.xpi) = 472812 +SHA256 (xpi/thunderbird-i18n-31.5.0/ast.xpi) = 5e04389beb3b7a8fe8d910e52d6683104db2a937746c7db829d6e4ff6c8bab9d +SIZE (xpi/thunderbird-i18n-31.5.0/ast.xpi) = 393049 +SHA256 (xpi/thunderbird-i18n-31.5.0/be.xpi) = a7db2f7a89632a0e55b650dc08b957bc678445db5fb807b029cc7f330651ff28 +SIZE (xpi/thunderbird-i18n-31.5.0/be.xpi) = 427488 +SHA256 (xpi/thunderbird-i18n-31.5.0/bg.xpi) = 1ea991edf2e89421e1f6de27538610be53c61190fc24d62ae181677e904d25dd +SIZE (xpi/thunderbird-i18n-31.5.0/bg.xpi) = 493734 +SHA256 (xpi/thunderbird-i18n-31.5.0/bn-BD.xpi) = e0e1249d2a82c5a52f9b11dc5b4c64dd3204c07feacd431db6fcb31678604f93 +SIZE (xpi/thunderbird-i18n-31.5.0/bn-BD.xpi) = 555613 +SHA256 (xpi/thunderbird-i18n-31.5.0/br.xpi) = e62d04221c7352c833da0df59a44ea13aa9bb30654a8d745760b0e1a3f42689a +SIZE (xpi/thunderbird-i18n-31.5.0/br.xpi) = 441444 +SHA256 (xpi/thunderbird-i18n-31.5.0/ca.xpi) = b3bff4b5595a3427c4ef31ba27fcfef64839bcbddf37b62d2f04f35c31e3889a +SIZE (xpi/thunderbird-i18n-31.5.0/ca.xpi) = 441713 +SHA256 (xpi/thunderbird-i18n-31.5.0/cs.xpi) = cb84334c881ba9444553b334c6cd6e6541c71bd432c8bff46014603a70e10ec2 +SIZE (xpi/thunderbird-i18n-31.5.0/cs.xpi) = 444701 +SHA256 (xpi/thunderbird-i18n-31.5.0/da.xpi) = 284e99c29e42d02c79638c9483aa0b8cc008b46a53da11865f8da33506c46b6b +SIZE (xpi/thunderbird-i18n-31.5.0/da.xpi) = 422051 +SHA256 (xpi/thunderbird-i18n-31.5.0/de.xpi) = a55c0d175e08ce74aa94b9f703c89079aa64996e605a34d061dd775fb8d3fea5 +SIZE (xpi/thunderbird-i18n-31.5.0/de.xpi) = 424665 +SHA256 (xpi/thunderbird-i18n-31.5.0/el.xpi) = 46870a4296ad1f1c1871034bbd3afa21f345f32c2970960ffff0f836d847cd69 +SIZE (xpi/thunderbird-i18n-31.5.0/el.xpi) = 484855 +SHA256 (xpi/thunderbird-i18n-31.5.0/en-GB.xpi) = c92104ae4cd34fb8f545d4c3a5a39bc3caea50d4729d3689859b84a49b187c06 +SIZE (xpi/thunderbird-i18n-31.5.0/en-GB.xpi) = 412515 +SHA256 (xpi/thunderbird-i18n-31.5.0/en-US.xpi) = 51564b06ba20565fbe98dfe1047c914c55fcb6f621f9f6fdbfd76d4167a4ebe5 +SIZE (xpi/thunderbird-i18n-31.5.0/en-US.xpi) = 413660 +SHA256 (xpi/thunderbird-i18n-31.5.0/es-AR.xpi) = ef962dfff8cc1f77506e1ac9f852cd314eaf11e017e0a46a8f4ea4de53f9bf21 +SIZE (xpi/thunderbird-i18n-31.5.0/es-AR.xpi) = 438531 +SHA256 (xpi/thunderbird-i18n-31.5.0/es-ES.xpi) = 6dd729d5d718a6b4c5d542b37e3876e3523fdf21953224c9eb39eb9efd5f4b1d +SIZE (xpi/thunderbird-i18n-31.5.0/es-ES.xpi) = 374979 +SHA256 (xpi/thunderbird-i18n-31.5.0/et.xpi) = 43d89ed6ca9df9e0d008193ff9e40cc95bd95831d64e163f72a81c2efdfa7ad5 +SIZE (xpi/thunderbird-i18n-31.5.0/et.xpi) = 434364 +SHA256 (xpi/thunderbird-i18n-31.5.0/eu.xpi) = a7c6a4c165ad6f2d1f175527d5f875554fa399a6d6889236ffed493077bbc6e0 +SIZE (xpi/thunderbird-i18n-31.5.0/eu.xpi) = 431448 +SHA256 (xpi/thunderbird-i18n-31.5.0/fi.xpi) = b35caace844de02426c23f9e87b8f9651215d80d95f45bb13a2f5002d612204d +SIZE (xpi/thunderbird-i18n-31.5.0/fi.xpi) = 435632 +SHA256 (xpi/thunderbird-i18n-31.5.0/fr.xpi) = 4712f3ed3edbbc4b14f4dd50e1402be4cb8dfcdd965c67f8d3186c391702e0ae +SIZE (xpi/thunderbird-i18n-31.5.0/fr.xpi) = 444144 +SHA256 (xpi/thunderbird-i18n-31.5.0/fy-NL.xpi) = bba975b7a3783432d46017fa650cffdff40b2c28229db24f1f4b5d0a73fc0a77 +SIZE (xpi/thunderbird-i18n-31.5.0/fy-NL.xpi) = 438545 +SHA256 (xpi/thunderbird-i18n-31.5.0/ga-IE.xpi) = b115d881b42e94c6c2357e884c9b943574830ff150a75435a5e80130adc77304 +SIZE (xpi/thunderbird-i18n-31.5.0/ga-IE.xpi) = 449362 +SHA256 (xpi/thunderbird-i18n-31.5.0/gd.xpi) = 9943a52c4c3843b1422f9deb566f04357bbba5a7f60c8ce587a6b46f177ac508 +SIZE (xpi/thunderbird-i18n-31.5.0/gd.xpi) = 453171 +SHA256 (xpi/thunderbird-i18n-31.5.0/gl.xpi) = 5e2564106632fa6c978345c59f87c93034061f1d2d8ad3f2558214b6056a37de +SIZE (xpi/thunderbird-i18n-31.5.0/gl.xpi) = 446788 +SHA256 (xpi/thunderbird-i18n-31.5.0/he.xpi) = 1a6fc4ead76564ecd40dbafe42da5c0cf9ae487160db5da24a45d5cafa86afb1 +SIZE (xpi/thunderbird-i18n-31.5.0/he.xpi) = 476111 +SHA256 (xpi/thunderbird-i18n-31.5.0/hr.xpi) = d9758d7f3866155c29237fce8a59a5ab25ef7372f52a4abf802cdc68e9aa0735 +SIZE (xpi/thunderbird-i18n-31.5.0/hr.xpi) = 436980 +SHA256 (xpi/thunderbird-i18n-31.5.0/hu.xpi) = 95bbeadbfe9eef336ab446272029ec6ee909f590cffd84299b4d7ea8cd215408 +SIZE (xpi/thunderbird-i18n-31.5.0/hu.xpi) = 454542 +SHA256 (xpi/thunderbird-i18n-31.5.0/hy-AM.xpi) = 6f4157eb89931bf75f080791e456c45833ca81f12550bb1c93804be561e309f1 +SIZE (xpi/thunderbird-i18n-31.5.0/hy-AM.xpi) = 492765 +SHA256 (xpi/thunderbird-i18n-31.5.0/id.xpi) = 6e5015d1eb222a70e7aa9f0bca08eec99b81172a216fbba068450e02da681c17 +SIZE (xpi/thunderbird-i18n-31.5.0/id.xpi) = 475876 +SHA256 (xpi/thunderbird-i18n-31.5.0/is.xpi) = ef04dd0a3fe1c0e4edc39a447f561cffb6b962f3dc610ffcd0946c1d26904845 +SIZE (xpi/thunderbird-i18n-31.5.0/is.xpi) = 437959 +SHA256 (xpi/thunderbird-i18n-31.5.0/it.xpi) = 17a0b2c5a2cb1421ec0e73a21040fc18a961ba662508db10a9df19b8476a83ac +SIZE (xpi/thunderbird-i18n-31.5.0/it.xpi) = 368001 +SHA256 (xpi/thunderbird-i18n-31.5.0/ja.xpi) = 4bb4ce66c270912d005227395c1959579d8bb8f4f8297f3078b3f0d25bcfa0d3 +SIZE (xpi/thunderbird-i18n-31.5.0/ja.xpi) = 489267 +SHA256 (xpi/thunderbird-i18n-31.5.0/ko.xpi) = 7a38503c3a9b8e5400dea6627728ded00a0557ae334e1107384559c42e1dec08 +SIZE (xpi/thunderbird-i18n-31.5.0/ko.xpi) = 448920 +SHA256 (xpi/thunderbird-i18n-31.5.0/lt.xpi) = 2417df06915b561cc020d2819a7025db605e5af46ccc1c143fa4d05ccade392b +SIZE (xpi/thunderbird-i18n-31.5.0/lt.xpi) = 456351 +SHA256 (xpi/thunderbird-i18n-31.5.0/nb-NO.xpi) = a79569621cb322351152f4dea1607c9b37f50348a14114f9e61007ecae32288b +SIZE (xpi/thunderbird-i18n-31.5.0/nb-NO.xpi) = 430942 +SHA256 (xpi/thunderbird-i18n-31.5.0/nl.xpi) = 011833942de32f1ddc54c5af9737267c88fd8f540c15cac117b495e056092c10 +SIZE (xpi/thunderbird-i18n-31.5.0/nl.xpi) = 431888 +SHA256 (xpi/thunderbird-i18n-31.5.0/nn-NO.xpi) = cc40effe5cdf84001f7128eb8490e4341dfb896c341bab7487acbfcef38c3747 +SIZE (xpi/thunderbird-i18n-31.5.0/nn-NO.xpi) = 433198 +SHA256 (xpi/thunderbird-i18n-31.5.0/pa-IN.xpi) = 5b5b5fd4429225671a02c6bd81441574013969eb09c82270ba84c6f196a82a03 +SIZE (xpi/thunderbird-i18n-31.5.0/pa-IN.xpi) = 525323 +SHA256 (xpi/thunderbird-i18n-31.5.0/pl.xpi) = f9929f9e7f59e58af8423b66a06577814740c1d25cad445132bbbce00f75ec0a +SIZE (xpi/thunderbird-i18n-31.5.0/pl.xpi) = 410872 +SHA256 (xpi/thunderbird-i18n-31.5.0/pt-BR.xpi) = 9f3d7078b8e8266583042eb9329f9ac0253a6aa0478b8f61ab40e11414c4d2e1 +SIZE (xpi/thunderbird-i18n-31.5.0/pt-BR.xpi) = 450477 +SHA256 (xpi/thunderbird-i18n-31.5.0/pt-PT.xpi) = 6c77ef803b065be17f2089879d1bacf0e1fd12097ad55748da7d5cd870e2cd70 +SIZE (xpi/thunderbird-i18n-31.5.0/pt-PT.xpi) = 439604 +SHA256 (xpi/thunderbird-i18n-31.5.0/rm.xpi) = ad39f5df1f8038b80e575173f6e97cff72a926f41b974d008011f4b285f88730 +SIZE (xpi/thunderbird-i18n-31.5.0/rm.xpi) = 439185 +SHA256 (xpi/thunderbird-i18n-31.5.0/ro.xpi) = 7964ab86199c2b7d16d025eb4080db630ee9d7221c7637470d1f774279b69c85 +SIZE (xpi/thunderbird-i18n-31.5.0/ro.xpi) = 479749 +SHA256 (xpi/thunderbird-i18n-31.5.0/ru.xpi) = 6a75dea1bc33c492e8ec8b6a6dd783d2ca908f0f94d47474ddd96fd6b6116865 +SIZE (xpi/thunderbird-i18n-31.5.0/ru.xpi) = 436156 +SHA256 (xpi/thunderbird-i18n-31.5.0/si.xpi) = 4295a6f35fef93bd1c1b4b07d315ed45f92109c56e2cd1bfabb98b42b7d0e68b +SIZE (xpi/thunderbird-i18n-31.5.0/si.xpi) = 528812 +SHA256 (xpi/thunderbird-i18n-31.5.0/sk.xpi) = b91dd4281edb18f64412c7b459df5afebb12acc5de89c0af26c5a453603d9a36 +SIZE (xpi/thunderbird-i18n-31.5.0/sk.xpi) = 452995 +SHA256 (xpi/thunderbird-i18n-31.5.0/sl.xpi) = aec21bd6f7f183dc7446ed24dda5c64ae7362c48f6d32ef3169cfc273ba4c45f +SIZE (xpi/thunderbird-i18n-31.5.0/sl.xpi) = 433874 +SHA256 (xpi/thunderbird-i18n-31.5.0/sq.xpi) = 40658e0261e2eea88c2561435a721b221634d6d7b50293bec162f5db24ae6fde +SIZE (xpi/thunderbird-i18n-31.5.0/sq.xpi) = 454694 +SHA256 (xpi/thunderbird-i18n-31.5.0/sr.xpi) = 3e9bd7a41b45a165518bfa773b96ccf56f8f6420d54164e51f3af44e3264ee0e +SIZE (xpi/thunderbird-i18n-31.5.0/sr.xpi) = 537336 +SHA256 (xpi/thunderbird-i18n-31.5.0/sv-SE.xpi) = 34806febfad1cb915b7489d43e6ec10273aba1458d922b03d38995669f85283f +SIZE (xpi/thunderbird-i18n-31.5.0/sv-SE.xpi) = 436105 +SHA256 (xpi/thunderbird-i18n-31.5.0/ta-LK.xpi) = d9ecbfde0508d1fe70a541f30edebea6d60f952b3f102c65c235ac9ed2274a28 +SIZE (xpi/thunderbird-i18n-31.5.0/ta-LK.xpi) = 553508 +SHA256 (xpi/thunderbird-i18n-31.5.0/tr.xpi) = 165d89d6c12fc99f2de8f83c4ea39f4866b2b65ded899598fd072b909c9aee22 +SIZE (xpi/thunderbird-i18n-31.5.0/tr.xpi) = 457360 +SHA256 (xpi/thunderbird-i18n-31.5.0/uk.xpi) = 8841b2b381fdd345cd0b19fc2feead78028d5cc118fda6ffb52539b7e6f7c8b3 +SIZE (xpi/thunderbird-i18n-31.5.0/uk.xpi) = 499656 +SHA256 (xpi/thunderbird-i18n-31.5.0/vi.xpi) = 0b4049bbb4ac58833d3ae35750ece29c4893554afcb9622afbe1d64345e6378e +SIZE (xpi/thunderbird-i18n-31.5.0/vi.xpi) = 513835 +SHA256 (xpi/thunderbird-i18n-31.5.0/zh-CN.xpi) = 38a92f434e1d70abd474be1fa449bbb0c19ccad91ef440a5d8e8803e98bda5d3 +SIZE (xpi/thunderbird-i18n-31.5.0/zh-CN.xpi) = 462668 +SHA256 (xpi/thunderbird-i18n-31.5.0/zh-TW.xpi) = c81b39d164cc196e99ae0526c124647ea6de6574b415e0dcd8299f76c8240c84 +SIZE (xpi/thunderbird-i18n-31.5.0/zh-TW.xpi) = 463408 Index: head/www/firefox/Makefile =================================================================== --- head/www/firefox/Makefile (revision 380089) +++ head/www/firefox/Makefile (revision 380090) @@ -1,95 +1,94 @@ # Created by: Alan Eldridge # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 35.0.1 +DISTVERSION= 36.0 DISTVERSIONSUFFIX=.source -PORTREVISION= 1 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ - https://ftp.mozilla.org/pub/mozilla.org/${PORTNAME}/candidates/${DISTVERSION}-candidates/build3/source/ + https://ftp.mozilla.org/pub/mozilla.org/${PORTNAME}/candidates/${DISTVERSION}-candidates/build2/source/ MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla BUILD_DEPENDS= nspr>=4.10.6:${PORTSDIR}/devel/nspr \ - nss>=3.17.2:${PORTSDIR}/security/nss \ + nss>=3.17.4:${PORTSDIR}/security/nss \ libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \ cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \ soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \ harfbuzz>=0.9.25:${PORTSDIR}/print/harfbuzz \ graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \ libvorbis>=1.3.4:${PORTSDIR}/audio/libvorbis \ opus>=1.1:${PORTSDIR}/audio/opus \ libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \ - sqlite3>=3.8.6:${PORTSDIR}/databases/sqlite3 \ + sqlite3>=3.8.7.4:${PORTSDIR}/databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \ v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \ autoconf-2.13:${PORTSDIR}/devel/autoconf213 \ zip:${PORTSDIR}/archivers/zip \ unzip:${PORTSDIR}/archivers/unzip LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l USE_GECKO= gecko CONFLICTS= firefox-esr-31.* firefox-esr-24.* firefox-esr-17.* MOZ_PKGCONFIG_FILES= # empty USE_MOZILLA= # empty MOZILLA_NAME= Firefox USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl USES= dos2unix tar:bzip2 DOS2UNIX_FILES= media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp FIREFOX_ICON= ${MOZILLA}.png FIREFOX_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png MOZ_OPTIONS= --program-transform-name='s/firefox/${MOZILLA}/' \ --enable-application=browser \ --enable-official-branding OPTIONS_DEFAULT= GTK2 OPTIONS_SINGLE+= TOOLKIT OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3 .include "${.CURDIR}/../../www/firefox/Makefile.options" .include WRKSRC:= ${WRKDIR}/mozilla-release .if ${PORT_OPTIONS:MALSA} RUN_DEPENDS+= alsa-lib>=1.0.27.2_1:${PORTSDIR}/audio/alsa-lib .endif .if ${PORT_OPTIONS:MGSTREAMER} RUN_DEPENDS+= gstreamer1-libav>=1.2.4_1:${PORTSDIR}/multimedia/gstreamer1-libav .endif .if ${PORT_OPTIONS:MGTK3} BUILD_DEPENDS+= gtk3>=3.14.6:${PORTSDIR}/x11-toolkits/gtk30 .endif post-extract: @${SED} -e 's|@FIREFOX_ICON@|${FIREFOX_ICON}|' -e 's|@MOZILLA@|${MOZILLA}|' \ -e 's|@MOZILLA_NAME@|${MOZILLA_NAME}|' \ <${FILESDIR}/firefox.desktop.in >${WRKDIR}/${MOZILLA}.desktop post-patch: @${REINPLACE_CMD} -e '/MOZPNG/s/=[0-9]*/=10511/' \ ${WRKSRC}/configure.in @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/browser/app/nsBrowserApp.cpp pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${WRKSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) post-install: ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps ${INSTALL_DATA} ${WRKDIR}/${MOZILLA}.desktop ${STAGEDIR}${PREFIX}/share/applications/ ${LN} -sf ${FIREFOX_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${FIREFOX_ICON} .include Index: head/www/firefox/Makefile.options =================================================================== --- head/www/firefox/Makefile.options (revision 380089) +++ head/www/firefox/Makefile.options (revision 380090) @@ -1,16 +1,14 @@ # -*- makefile-bsdmake -*- OPTIONS_DEFINE+= DBUS DEBUG DTRACE GCONF GIO GNOMEUI GSTREAMER \ LIBPROXY LOGGING OPTIMIZED_CFLAGS PGO PROFILE TEST OPTIONS_DEFAULT+= ALSA DBUS GIO GSTREAMER LOGGING OPTIMIZED_CFLAGS OPTIONS_MULTI+= AUDIO OPTIONS_MULTI_AUDIO= ALSA PULSEAUDIO -DTRACE_DESC?= Build with DTrace probes # move to bsd.options.desc.mk ENIGMAIL_DESC?= Enigmail extension -GIO_DESC?= GIO for file I/O # move to bsd.options.desc.mk GNOMEUI_DESC?= libgnomeui support module LIBPROXY_DESC?= Proxy support via libproxy LIGHTNING_DESC?= Calendar extension LOGGING_DESC?= Additional log messages Index: head/www/firefox/distinfo =================================================================== --- head/www/firefox/distinfo (revision 380089) +++ head/www/firefox/distinfo (revision 380090) @@ -1,2 +1,2 @@ -SHA256 (firefox-35.0.1.source.tar.bz2) = c92b34e08e39e2d482a61194e79255478331a54bf86bf144dc38f3d4bfbc507a -SIZE (firefox-35.0.1.source.tar.bz2) = 176276361 +SHA256 (firefox-36.0.source.tar.bz2) = 54c8e44b773c0cae885b2be0dc7d2421d2050206cdb0f00d376492d7cf9d5b20 +SIZE (firefox-36.0.source.tar.bz2) = 400388435 Index: head/www/firefox/files/patch-bug858919 =================================================================== --- head/www/firefox/files/patch-bug858919 (revision 380089) +++ head/www/firefox/files/patch-bug858919 (nonexistent) @@ -1,394 +0,0 @@ -commit a33d4f7 -Author: Martin Stransky -Date: Fri Nov 14 04:04:00 2014 +0100 - - Bug 858919 - Add support for libnotify calls which was removed for new notification API. r=karlt ---- - toolkit/components/alerts/nsAlertsService.cpp | 10 +-- - toolkit/system/gnome/moz.build | 2 + - toolkit/system/gnome/nsAlertsIconListener.cpp | 64 ++++++++++++------ - toolkit/system/gnome/nsAlertsIconListener.h | 89 ++++++++++++++++++++++++++ - toolkit/system/gnome/nsGnomeModule.cpp | 5 ++ - toolkit/system/gnome/nsSystemAlertsService.cpp | 54 ++++++++++++++++ - toolkit/system/gnome/nsSystemAlertsService.h | 27 ++++++++ - 7 files changed, 226 insertions(+), 25 deletions(-) - -diff --git toolkit/components/alerts/nsAlertsService.cpp toolkit/components/alerts/nsAlertsService.cpp -index 93f4536..f8b5e07 100644 ---- toolkit/components/alerts/nsAlertsService.cpp -+++ toolkit/components/alerts/nsAlertsService.cpp -@@ -100,10 +100,12 @@ NS_IMETHODIMP nsAlertsService::ShowAlertNotification(const nsAString & aImageUrl - nsCOMPtr sysAlerts(do_GetService(NS_SYSTEMALERTSERVICE_CONTRACTID)); - nsresult rv; - if (sysAlerts) { -- return sysAlerts->ShowAlertNotification(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable, -- aAlertCookie, aAlertListener, aAlertName, -- aBidi, aLang, aData, -- IPC::Principal(aPrincipal)); -+ rv = sysAlerts->ShowAlertNotification(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable, -+ aAlertCookie, aAlertListener, aAlertName, -+ aBidi, aLang, aData, -+ IPC::Principal(aPrincipal)); -+ if (NS_SUCCEEDED(rv)) -+ return NS_OK; - } - - if (!ShouldShowAlert()) { -diff --git toolkit/system/gnome/moz.build toolkit/system/gnome/moz.build -index c033f8b..9242209 100644 ---- toolkit/system/gnome/moz.build -+++ toolkit/system/gnome/moz.build -@@ -5,7 +5,9 @@ - # file, You can obtain one at http://mozilla.org/MPL/2.0/. - - SOURCES += [ -+ 'nsAlertsIconListener.cpp', - 'nsGnomeModule.cpp', -+ 'nsSystemAlertsService.cpp', - ] - - if CONFIG['MOZ_ENABLE_GCONF']: -diff --git toolkit/system/gnome/nsAlertsIconListener.cpp toolkit/system/gnome/nsAlertsIconListener.cpp -index f39335e..55f4356 100644 ---- toolkit/system/gnome/nsAlertsIconListener.cpp -+++ toolkit/system/gnome/nsAlertsIconListener.cpp -@@ -51,6 +51,21 @@ static void notify_closed_marshal(GClosure* closure, - NS_RELEASE(alert); - } - -+static GdkPixbuf* -+GetPixbufFromImgRequest(imgIRequest* aRequest) -+{ -+ nsCOMPtr image; -+ nsresult rv = aRequest->GetImage(getter_AddRefs(image)); -+ if (NS_FAILED(rv)) { -+ return nullptr; -+ } -+ -+ nsCOMPtr imgToPixbuf = -+ do_GetService("@mozilla.org/widget/image-to-gdk-pixbuf;1"); -+ -+ return imgToPixbuf->ConvertImageToPixbuf(image); -+} -+ - NS_IMPL_ISUPPORTS(nsAlertsIconListener, imgINotificationObserver, - nsIObserver, nsISupportsWeakReference) - -@@ -106,47 +121,45 @@ nsAlertsIconListener::Notify(imgIRequest *aRequest, int32_t aType, const nsIntRe - nsresult - nsAlertsIconListener::OnStopRequest(imgIRequest* aRequest) - { -+ NS_ASSERTION(mIconRequest == aRequest, "aRequest does not match!"); -+ - uint32_t imgStatus = imgIRequest::STATUS_ERROR; - nsresult rv = aRequest->GetImageStatus(&imgStatus); - NS_ENSURE_SUCCESS(rv, rv); - if (imgStatus == imgIRequest::STATUS_ERROR && !mLoadedFrame) { - // We have an error getting the image. Display the notification with no icon. - ShowAlert(nullptr); -- } - -- if (mIconRequest) { -+ // Cancel any pending request - mIconRequest->Cancel(NS_BINDING_ABORTED); - mIconRequest = nullptr; - } -+ - return NS_OK; - } - - nsresult - nsAlertsIconListener::OnStopFrame(imgIRequest* aRequest) - { -- if (aRequest != mIconRequest) -- return NS_ERROR_FAILURE; -+ NS_ASSERTION(mIconRequest == aRequest, "aRequest does not match!"); - - if (mLoadedFrame) - return NS_OK; // only use one frame - -- nsCOMPtr image; -- nsresult rv = aRequest->GetImage(getter_AddRefs(image)); -- if (NS_FAILED(rv)) -- return rv; -- -- nsCOMPtr imgToPixbuf = -- do_GetService("@mozilla.org/widget/image-to-gdk-pixbuf;1"); -- -- GdkPixbuf* imagePixbuf = imgToPixbuf->ConvertImageToPixbuf(image); -- if (!imagePixbuf) -- return NS_ERROR_FAILURE; -+ GdkPixbuf* imagePixbuf = GetPixbufFromImgRequest(aRequest); -+ if (!imagePixbuf) { -+ ShowAlert(nullptr); -+ } else { -+ ShowAlert(imagePixbuf); -+ g_object_unref(imagePixbuf); -+ } - -- ShowAlert(imagePixbuf); -+ mLoadedFrame = true; - -- g_object_unref(imagePixbuf); -+ // Cancel any pending request (multipart image loading/decoding for instance) -+ mIconRequest->Cancel(NS_BINDING_ABORTED); -+ mIconRequest = nullptr; - -- mLoadedFrame = true; - return NS_OK; - } - -@@ -180,6 +193,9 @@ nsAlertsIconListener::ShowAlert(GdkPixbuf* aPixbuf) - mClosureHandler = g_signal_connect_closure(mNotification, "closed", closure, FALSE); - gboolean result = notify_notification_show(mNotification, nullptr); - -+ if (result && mAlertListener) -+ mAlertListener->Observe(nullptr, "alertshow", mAlertCookie.get()); -+ - return result ? NS_OK : NS_ERROR_FAILURE; - } - -@@ -201,9 +217,15 @@ nsAlertsIconListener::StartRequest(const nsAString & aImageUrl) - if (!il) - return ShowAlert(nullptr); - -- return il->LoadImageXPCOM(imageUri, nullptr, nullptr, nullptr, nullptr, -- this, nullptr, nsIRequest::LOAD_NORMAL, nullptr, -- nullptr, getter_AddRefs(mIconRequest)); -+ nsresult rv = il->LoadImageXPCOM(imageUri, nullptr, nullptr, nullptr, nullptr, -+ this, nullptr, nsIRequest::LOAD_NORMAL, nullptr, -+ 0 /* use default */, getter_AddRefs(mIconRequest)); -+ if (NS_FAILED(rv)) -+ return rv; -+ -+ mIconRequest->StartDecoding(); -+ -+ return NS_OK; - } - - void -diff --git toolkit/system/gnome/nsAlertsIconListener.h toolkit/system/gnome/nsAlertsIconListener.h -new file mode 100644 -index 0000000..ac96db9 ---- /dev/null -+++ toolkit/system/gnome/nsAlertsIconListener.h -@@ -0,0 +1,89 @@ -+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+#ifndef nsAlertsIconListener_h__ -+#define nsAlertsIconListener_h__ -+ -+#include "nsCOMPtr.h" -+#include "imgINotificationObserver.h" -+#include "nsStringAPI.h" -+#include "nsIObserver.h" -+#include "nsWeakReference.h" -+ -+#include -+ -+class imgIRequest; -+ -+struct NotifyNotification; -+ -+class nsAlertsIconListener : public imgINotificationObserver, -+ public nsIObserver, -+ public nsSupportsWeakReference -+{ -+public: -+ NS_DECL_ISUPPORTS -+ NS_DECL_IMGINOTIFICATIONOBSERVER -+ NS_DECL_NSIOBSERVER -+ -+ nsAlertsIconListener(); -+ -+ nsresult InitAlertAsync(const nsAString & aImageUrl, -+ const nsAString & aAlertTitle, -+ const nsAString & aAlertText, -+ bool aAlertTextClickable, -+ const nsAString & aAlertCookie, -+ nsIObserver * aAlertListener); -+ -+ void SendCallback(); -+ void SendClosed(); -+ -+protected: -+ virtual ~nsAlertsIconListener(); -+ -+ nsresult OnStopRequest(imgIRequest* aRequest); -+ nsresult OnStopFrame(imgIRequest* aRequest); -+ -+ /** -+ * The only difference between libnotify.so.4 and libnotify.so.1 for these symbols -+ * is that notify_notification_new takes three arguments in libnotify.so.4 and -+ * four in libnotify.so.1. -+ * Passing the fourth argument as NULL is binary compatible. -+ */ -+ typedef void (*NotifyActionCallback)(NotifyNotification*, char*, gpointer); -+ typedef bool (*notify_is_initted_t)(void); -+ typedef bool (*notify_init_t)(const char*); -+ typedef GList* (*notify_get_server_caps_t)(void); -+ typedef NotifyNotification* (*notify_notification_new_t)(const char*, const char*, const char*, const char*); -+ typedef bool (*notify_notification_show_t)(void*, char*); -+ typedef void (*notify_notification_set_icon_from_pixbuf_t)(void*, GdkPixbuf*); -+ typedef void (*notify_notification_add_action_t)(void*, const char*, const char*, NotifyActionCallback, gpointer, GFreeFunc); -+ -+ nsCOMPtr mIconRequest; -+ nsCString mAlertTitle; -+ nsCString mAlertText; -+ -+ nsCOMPtr mAlertListener; -+ nsString mAlertCookie; -+ -+ bool mLoadedFrame; -+ bool mAlertHasAction; -+ -+ static void* libNotifyHandle; -+ static bool libNotifyNotAvail; -+ static notify_is_initted_t notify_is_initted; -+ static notify_init_t notify_init; -+ static notify_get_server_caps_t notify_get_server_caps; -+ static notify_notification_new_t notify_notification_new; -+ static notify_notification_show_t notify_notification_show; -+ static notify_notification_set_icon_from_pixbuf_t notify_notification_set_icon_from_pixbuf; -+ static notify_notification_add_action_t notify_notification_add_action; -+ NotifyNotification* mNotification; -+ gulong mClosureHandler; -+ -+ nsresult StartRequest(const nsAString & aImageUrl); -+ nsresult ShowAlert(GdkPixbuf* aPixbuf); -+}; -+ -+#endif -diff --git toolkit/system/gnome/nsGnomeModule.cpp toolkit/system/gnome/nsGnomeModule.cpp -index 5ccc8e5..f893893 100644 ---- toolkit/system/gnome/nsGnomeModule.cpp -+++ toolkit/system/gnome/nsGnomeModule.cpp -@@ -22,6 +22,8 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGnomeVFSService, Init) - NS_GENERIC_FACTORY_CONSTRUCTOR(nsGIOService) - NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGSettingsService, Init) - #endif -+#include "nsSystemAlertsService.h" -+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSystemAlertsService, Init) - - #ifdef MOZ_ENABLE_GCONF - NS_DEFINE_NAMED_CID(NS_GCONFSERVICE_CID); -@@ -33,6 +35,7 @@ NS_DEFINE_NAMED_CID(NS_GNOMEVFSSERVICE_CID); - NS_DEFINE_NAMED_CID(NS_GIOSERVICE_CID); - NS_DEFINE_NAMED_CID(NS_GSETTINGSSERVICE_CID); - #endif -+NS_DEFINE_NAMED_CID(NS_SYSTEMALERTSSERVICE_CID); - - static const mozilla::Module::CIDEntry kGnomeCIDs[] = { - #ifdef MOZ_ENABLE_GCONF -@@ -45,6 +48,7 @@ static const mozilla::Module::CIDEntry kGnomeCIDs[] = { - { &kNS_GIOSERVICE_CID, false, nullptr, nsGIOServiceConstructor }, - { &kNS_GSETTINGSSERVICE_CID, false, nullptr, nsGSettingsServiceConstructor }, - #endif -+ { &kNS_SYSTEMALERTSSERVICE_CID, false, nullptr, nsSystemAlertsServiceConstructor }, - { nullptr } - }; - -@@ -59,6 +63,7 @@ static const mozilla::Module::ContractIDEntry kGnomeContracts[] = { - { NS_GIOSERVICE_CONTRACTID, &kNS_GIOSERVICE_CID }, - { NS_GSETTINGSSERVICE_CONTRACTID, &kNS_GSETTINGSSERVICE_CID }, - #endif -+ { NS_SYSTEMALERTSERVICE_CONTRACTID, &kNS_SYSTEMALERTSSERVICE_CID }, - { nullptr } - }; - -diff --git toolkit/system/gnome/nsSystemAlertsService.cpp toolkit/system/gnome/nsSystemAlertsService.cpp -new file mode 100644 -index 0000000..b91b402 ---- /dev/null -+++ toolkit/system/gnome/nsSystemAlertsService.cpp -@@ -0,0 +1,54 @@ -+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode:nil; c-basic-offset: 2 -*- */ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+#include "nsXULAppAPI.h" -+#include "nsSystemAlertsService.h" -+#include "nsAlertsIconListener.h" -+#include "nsAutoPtr.h" -+ -+NS_IMPL_ADDREF(nsSystemAlertsService) -+NS_IMPL_RELEASE(nsSystemAlertsService) -+ -+NS_INTERFACE_MAP_BEGIN(nsSystemAlertsService) -+ NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIAlertsService) -+ NS_INTERFACE_MAP_ENTRY(nsIAlertsService) -+NS_INTERFACE_MAP_END_THREADSAFE -+ -+nsSystemAlertsService::nsSystemAlertsService() -+{ -+} -+ -+nsSystemAlertsService::~nsSystemAlertsService() -+{} -+ -+nsresult -+nsSystemAlertsService::Init() -+{ -+ return NS_OK; -+} -+ -+NS_IMETHODIMP nsSystemAlertsService::ShowAlertNotification(const nsAString & aImageUrl, const nsAString & aAlertTitle, -+ const nsAString & aAlertText, bool aAlertTextClickable, -+ const nsAString & aAlertCookie, -+ nsIObserver * aAlertListener, -+ const nsAString & aAlertName, -+ const nsAString & aBidi, -+ const nsAString & aLang, -+ const nsAString & aData, -+ nsIPrincipal * aPrincipal) -+{ -+ nsRefPtr alertListener = new nsAlertsIconListener(); -+ if (!alertListener) -+ return NS_ERROR_OUT_OF_MEMORY; -+ -+ return alertListener->InitAlertAsync(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable, -+ aAlertCookie, aAlertListener); -+} -+ -+NS_IMETHODIMP nsSystemAlertsService::CloseAlert(const nsAString& aAlertName, -+ nsIPrincipal* aPrincipal) -+{ -+ return NS_ERROR_NOT_IMPLEMENTED; -+} -diff --git toolkit/system/gnome/nsSystemAlertsService.h toolkit/system/gnome/nsSystemAlertsService.h -new file mode 100644 -index 0000000..b0bd625 ---- /dev/null -+++ toolkit/system/gnome/nsSystemAlertsService.h -@@ -0,0 +1,27 @@ -+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+#ifndef nsSystemAlertsService_h__ -+#define nsSystemAlertsService_h__ -+ -+#include "nsIAlertsService.h" -+#include "nsCOMPtr.h" -+ -+class nsSystemAlertsService : public nsIAlertsService -+{ -+public: -+ NS_DECL_NSIALERTSSERVICE -+ NS_DECL_ISUPPORTS -+ -+ nsSystemAlertsService(); -+ -+ nsresult Init(); -+ -+protected: -+ virtual ~nsSystemAlertsService(); -+ -+}; -+ -+#endif /* nsSystemAlertsService_h__ */ Property changes on: head/www/firefox/files/patch-bug858919 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/firefox/files/patch-bug1041795 =================================================================== --- head/www/firefox/files/patch-bug1041795 (revision 380089) +++ head/www/firefox/files/patch-bug1041795 (nonexistent) @@ -1,48 +0,0 @@ -diff --git config/rules.mk config/rules.mk -index 4d67eda..783942f 100644 ---- config/rules.mk -+++ config/rules.mk -@@ -858,7 +858,7 @@ ifdef DTRACE_PROBE_OBJ - ifndef DTRACE_LIB_DEPENDENT - NON_DTRACE_OBJS := $(filter-out $(DTRACE_PROBE_OBJ),$(OBJS)) - $(DTRACE_PROBE_OBJ): $(NON_DTRACE_OBJS) -- dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(NON_DTRACE_OBJS) -+ dtrace -x nolibs -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(NON_DTRACE_OBJS) - endif - endif - endif -@@ -876,7 +876,7 @@ ifndef INCREMENTAL_LINKER - endif - ifdef DTRACE_LIB_DEPENDENT - ifndef XP_MACOSX -- dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS)) -+ dtrace -x nolibs -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS)) - endif - $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(MOZ_GLUE_LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) $(if $(LIB_IS_C_ONLY),,$(STLPORT_LIBS)) - @$(RM) $(DTRACE_PROBE_OBJ) -diff --git js/src/Makefile.in js/src/Makefile.in -index 28ca5e8..96793d7 100644 ---- js/src/Makefile.in -+++ js/src/Makefile.in -@@ -342,7 +342,7 @@ endif - - ifdef HAVE_DTRACE - $(CURDIR)/javascript-trace.h: $(srcdir)/devtools/javascript-trace.d -- dtrace -h -s $(srcdir)/devtools/javascript-trace.d -o javascript-trace.h.in -+ dtrace -x nolibs -h -s $(srcdir)/devtools/javascript-trace.d -o javascript-trace.h.in - sed -e 's/if _DTRACE_VERSION/ifdef INCLUDE_MOZILLA_DTRACE/' \ - -e '/const/!s/char \*/const char */g' \ - javascript-trace.h.in > javascript-trace.h -diff --git probes/Makefile.in probes/Makefile.in -index 6d18f34..deec83f 100644 ---- probes/Makefile.in -+++ probes/Makefile.in -@@ -7,7 +7,7 @@ export:: $(DIST)/include/mozilla-trace.h - - # Replace _DTRACE_VERSION with INCLUDE_MOZILLA_DTRACE - $(DIST)/include/mozilla-trace.h: mozilla-trace.d Makefile -- dtrace -h -s $(srcdir)/mozilla-trace.d -o mozilla-trace.h.tmp -+ dtrace -x nolibs -h -s $(srcdir)/mozilla-trace.d -o mozilla-trace.h.tmp - sed -e 's/if _DTRACE_VERSION/ifdef INCLUDE_MOZILLA_DTRACE/' \ - mozilla-trace.h.tmp > $(DIST)/include/mozilla-trace.h - rm mozilla-trace.h.tmp Property changes on: head/www/firefox/files/patch-bug1041795 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/firefox/files/patch-bug1082199 =================================================================== --- head/www/firefox/files/patch-bug1082199 (revision 380089) +++ head/www/firefox/files/patch-bug1082199 (nonexistent) @@ -1,26 +0,0 @@ -commit 258ec90 -Author: Guilherme Goncalves -Date: Fri Oct 17 15:55:00 2014 +0200 - - Bug 1082199 - Recompute stats in jemalloc_stats when using jemalloc3. r=glandium ---- - memory/build/mozjemalloc_compat.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git memory/build/mozjemalloc_compat.c memory/build/mozjemalloc_compat.c -index 78bb13a..70265a7 100644 ---- memory/build/mozjemalloc_compat.c -+++ memory/build/mozjemalloc_compat.c -@@ -68,6 +68,12 @@ jemalloc_stats_impl(jemalloc_stats_t *stats) - size_t active, allocated, mapped, page, pdirty; - size_t lg_chunk; - -+ // Refresh jemalloc's stats by updating its epoch, see ctl_refresh in -+ // src/ctl.c -+ uint64_t epoch = 0; -+ size_t esz = sizeof(epoch); -+ int ret = je_(mallctl)("epoch", &epoch, &esz, &epoch, esz); -+ - CTL_GET("arenas.narenas", narenas); - CTL_GET("arenas.page", page); - CTL_GET("stats.active", active); Property changes on: head/www/firefox/files/patch-bug1082199 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/firefox/files/patch-bug1083461 =================================================================== --- head/www/firefox/files/patch-bug1083461 (revision 380089) +++ head/www/firefox/files/patch-bug1083461 (nonexistent) @@ -1,159 +0,0 @@ -commit 87f367b -Author: L. David Baron -Date: Sun Oct 19 23:31:39 2014 -0400 - - Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers. r=bzbarsky - - --HG-- - extra : transplant_source : %CD%5D%9BE%FE%DE%A4%F2%B8%CF%D7%AE%84%90%3B%E8%A0d%D7%2B ---- - layout/style/StyleAnimationValue.cpp | 6 ++++-- - layout/style/nsCSSValue.cpp | 28 ++++++++++++++++------------ - layout/style/nsCSSValue.h | 22 ++++++++++++++++------ - 3 files changed, 36 insertions(+), 20 deletions(-) - -diff --git layout/style/StyleAnimationValue.cpp layout/style/StyleAnimationValue.cpp -index 40bc8bf..1898fe6 100644 ---- layout/style/StyleAnimationValue.cpp -+++ layout/style/StyleAnimationValue.cpp -@@ -3851,11 +3851,13 @@ StyleAnimationValue::operator==(const StyleAnimationValue& aOther) const - case eUnit_Filter: - case eUnit_Shadow: - case eUnit_BackgroundPosition: -- return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList; -+ return nsCSSValueList::Equal(mValue.mCSSValueList, -+ aOther.mValue.mCSSValueList); - case eUnit_Transform: - return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList; - case eUnit_CSSValuePairList: -- return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList; -+ return nsCSSValuePairList::Equal(mValue.mCSSValuePairList, -+ aOther.mValue.mCSSValuePairList); - case eUnit_UnparsedString: - return (NS_strcmp(GetStringBufferValue(), - aOther.GetStringBufferValue()) == 0); -diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp -index dcb8496..fefb4f9 100644 ---- layout/style/nsCSSValue.cpp -+++ layout/style/nsCSSValue.cpp -@@ -264,13 +264,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const - return *mValue.mRect == *aOther.mValue.mRect; - } - else if (eCSSUnit_List == mUnit) { -- return *mValue.mList == *aOther.mValue.mList; -+ return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList); - } - else if (eCSSUnit_SharedList == mUnit) { - return *mValue.mSharedList == *aOther.mValue.mSharedList; - } - else if (eCSSUnit_PairList == mUnit) { -- return *mValue.mPairList == *aOther.mValue.mPairList; -+ return nsCSSValuePairList::Equal(mValue.mPairList, -+ aOther.mValue.mPairList); - } - else if (eCSSUnit_GridTemplateAreas == mUnit) { - return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas; -@@ -1875,13 +1876,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult, - } - } - --bool --nsCSSValueList::operator==(const nsCSSValueList& aOther) const -+/* static */ bool -+nsCSSValueList::Equal(const nsCSSValueList* aList1, -+ const nsCSSValueList* aList2) - { -- if (this == &aOther) -+ if (aList1 == aList2) { - return true; -+ } - -- const nsCSSValueList *p1 = this, *p2 = &aOther; -+ const nsCSSValueList *p1 = aList1, *p2 = aList2; - for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) { - if (p1->mValue != p2->mValue) - return false; -@@ -1934,8 +1937,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult - bool - nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const - { -- return !mHead == !aOther.mHead && -- (!mHead || *mHead == *aOther.mHead); -+ return nsCSSValueList::Equal(mHead, aOther.mHead); - } - - size_t -@@ -2148,13 +2150,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty, - } - } - --bool --nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const -+/* static */ bool -+nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1, -+ const nsCSSValuePairList* aList2) - { -- if (this == &aOther) -+ if (aList1 == aList2) { - return true; -+ } - -- const nsCSSValuePairList *p1 = this, *p2 = &aOther; -+ const nsCSSValuePairList *p1 = aList1, *p2 = aList2; - for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) { - if (p1->mXValue != p2->mXValue || - p1->mYValue != p2->mYValue) -diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h -index 8418a2d..f0c4e63 100644 ---- layout/style/nsCSSValue.h -+++ layout/style/nsCSSValue.h -@@ -871,9 +871,8 @@ struct nsCSSValueList { - void AppendToString(nsCSSProperty aProperty, nsAString& aResult, - nsCSSValue::Serialization aValueSerialization) const; - -- bool operator==(nsCSSValueList const& aOther) const; -- bool operator!=(const nsCSSValueList& aOther) const -- { return !(*this == aOther); } -+ static bool Equal(const nsCSSValueList* aList1, -+ const nsCSSValueList* aList2); - - size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; - -@@ -886,6 +885,12 @@ private: - { - MOZ_COUNT_CTOR(nsCSSValueList); - } -+ -+ // We don't want operator== or operator!= because they wouldn't be -+ // null-safe, which is generally what we need. Use |Equal| method -+ // above instead. -+ bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE; -+ bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE; - }; - - // nsCSSValueList_heap differs from nsCSSValueList only in being -@@ -1264,9 +1269,8 @@ struct nsCSSValuePairList { - void AppendToString(nsCSSProperty aProperty, nsAString& aResult, - nsCSSValue::Serialization aValueSerialization) const; - -- bool operator==(const nsCSSValuePairList& aOther) const; -- bool operator!=(const nsCSSValuePairList& aOther) const -- { return !(*this == aOther); } -+ static bool Equal(const nsCSSValuePairList* aList1, -+ const nsCSSValuePairList* aList2); - - size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; - -@@ -1280,6 +1284,12 @@ private: - { - MOZ_COUNT_CTOR(nsCSSValuePairList); - } -+ -+ // We don't want operator== or operator!= because they wouldn't be -+ // null-safe, which is generally what we need. Use |Equal| method -+ // above instead. -+ bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE; -+ bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE; - }; - - // nsCSSValuePairList_heap differs from nsCSSValuePairList only in being Property changes on: head/www/firefox/files/patch-bug1083461 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/firefox/files/patch-bug1122586 =================================================================== --- head/www/firefox/files/patch-bug1122586 (revision 380089) +++ head/www/firefox/files/patch-bug1122586 (nonexistent) @@ -1,30 +0,0 @@ -diff --git content/media/MediaDecoderStateMachine.cpp content/media/MediaDecoderStateMachine.cpp -index 36a6ccf..96d3bd0 100644 ---- content/media/MediaDecoderStateMachine.cpp -+++ content/media/MediaDecoderStateMachine.cpp -@@ -18,6 +18,7 @@ - #include "nsTArray.h" - #include "MediaDecoder.h" - #include "MediaDecoderReader.h" -+#include "mozilla/MathAlgorithms.h" - #include "mozilla/mozalloc.h" - #include "VideoUtils.h" - #include "mozilla/dom/TimeRanges.h" -@@ -165,7 +166,7 @@ static_assert(QUICK_BUFFERING_LOW_DATA_USECS <= AMPLE_AUDIO_USECS, - // MediaDecoderStateMachine::UpdateEstimatedDuration(); changes of duration - // less than this are ignored, as they're assumed to be the result of - // instability in the duration estimation. --static const int64_t ESTIMATED_DURATION_FUZZ_FACTOR_USECS = USECS_PER_S / 2; -+static const uint64_t ESTIMATED_DURATION_FUZZ_FACTOR_USECS = USECS_PER_S / 2; - - static TimeDuration UsecsToDuration(int64_t aUsecs) { - return TimeDuration::FromMicroseconds(aUsecs); -@@ -1447,7 +1448,7 @@ void MediaDecoderStateMachine::UpdateEstimatedDuration(int64_t aDuration) - AssertCurrentThreadInMonitor(); - int64_t duration = GetDuration(); - if (aDuration != duration && -- std::abs(aDuration - duration) > ESTIMATED_DURATION_FUZZ_FACTOR_USECS) { -+ mozilla::Abs(aDuration - duration) > ESTIMATED_DURATION_FUZZ_FACTOR_USECS) { - SetDuration(aDuration); - nsCOMPtr event = - NS_NewRunnableMethod(mDecoder, &MediaDecoder::DurationChanged); Property changes on: head/www/firefox/files/patch-bug1122586 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/firefox/files/patch-bug1097592 =================================================================== --- head/www/firefox/files/patch-bug1097592 (revision 380089) +++ head/www/firefox/files/patch-bug1097592 (nonexistent) @@ -1,41 +0,0 @@ -commit a822f9a -Author: Martin Stransky -Date: Fri Nov 14 06:32:00 2014 +0100 - - Bug 1097592 - Don't use PR_FindFunctionSymbolAndLibrary to avoid app freeze, r=karlt ---- - widget/gtk/mozgtk/mozgtk.c | 1 + - widget/gtk/nsWindow.cpp | 8 +------- - 2 files changed, 2 insertions(+), 7 deletions(-) - -diff --git widget/gtk/mozgtk/mozgtk.c widget/gtk/mozgtk/mozgtk.c -index 11829d7..3b46759 100644 ---- widget/gtk/mozgtk/mozgtk.c -+++ widget/gtk/mozgtk/mozgtk.c -@@ -121,6 +121,7 @@ STUB(gdk_x11_lookup_xdisplay) - STUB(gdk_x11_screen_get_xscreen) - STUB(gdk_x11_visual_get_xvisual) - STUB(gdk_x11_window_lookup_for_display) -+STUB(gdk_x11_window_set_user_time) - STUB(gdk_x11_xatom_to_atom) - STUB(gtk_accel_label_new) - STUB(gtk_alignment_get_type) -diff --git widget/gtk/nsWindow.cpp widget/gtk/nsWindow.cpp -index 26c333b..d462f13 100644 ---- widget/gtk/nsWindow.cpp -+++ widget/gtk/nsWindow.cpp -@@ -1295,13 +1295,7 @@ SetUserTimeAndStartupIDForActivatedWindow(GtkWidget* aWindow) - } - - if (sn_launchee_context_get_id_has_timestamp(ctx)) { -- PRLibrary* gtkLibrary; -- SetUserTimeFunc setUserTimeFunc = (SetUserTimeFunc) -- PR_FindFunctionSymbolAndLibrary("gdk_x11_window_set_user_time", >kLibrary); -- if (setUserTimeFunc) { -- setUserTimeFunc(gdkWindow, sn_launchee_context_get_timestamp(ctx)); -- PR_UnloadLibrary(gtkLibrary); -- } -+ gdk_x11_window_set_user_time(gdkWindow, sn_launchee_context_get_timestamp(ctx)); - } - - sn_launchee_context_setup_window(ctx, gdk_x11_window_get_xid(gdkWindow)); Property changes on: head/www/firefox/files/patch-bug1097592 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/firefox/files/patch-bug1013882 =================================================================== --- head/www/firefox/files/patch-bug1013882 (revision 380089) +++ head/www/firefox/files/patch-bug1013882 (revision 380090) @@ -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))) DEFINES += -DMOZ_RTSP endif +ifdef MOZ_DEBUG +DEFINES += -DMOZ_DEBUG=1 +endif + ifdef GKMEDIAS_SHARED_LIBRARY DEFINES += -DGKMEDIAS_SHARED_LIBRARY endif diff --git b2g/installer/package-manifest.in b2g/installer/package-manifest.in index 17d433c..0416187 100644 --- b2g/installer/package-manifest.in +++ b2g/installer/package-manifest.in @@ -576,7 +576,7 @@ @BINPATH@/components/MozKeyboard.js @BINPATH@/components/InputMethod.manifest -#ifdef MOZ_DEBUG +#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG) @BINPATH@/components/TestInterfaceJS.js @BINPATH@/components/TestInterfaceJS.manifest #endif diff --git browser/installer/package-manifest.in browser/installer/package-manifest.in index b509fd4..195345c 100644 --- browser/installer/package-manifest.in +++ browser/installer/package-manifest.in -@@ -583,7 +583,7 @@ - @BINPATH@/components/MozKeyboard.js - @BINPATH@/components/InputMethod.manifest +@@ -608,7 +608,7 @@ + @RESPATH@/components/MozKeyboard.js + @RESPATH@/components/InputMethod.manifest -#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 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: head/www/firefox/files/patch-bug1021761 =================================================================== --- head/www/firefox/files/patch-bug1021761 (revision 380089) +++ head/www/firefox/files/patch-bug1021761 (revision 380090) @@ -1,1105 +1,1102 @@ diff --git configure.in configure.in index 48e60c0..ec08417 100644 --- configure.in +++ configure.in -@@ -5438,6 +5438,60 @@ fi +@@ -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_DISABLE_BOOL(oss, -+[ --disable-oss Disable OpenSoundSystem support], -+ MOZ_OSS=, -+ MOZ_OSS=1) ++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 -z "$MOZ_OSS_CFLAGS"; then -+ for oss_conf in /etc/oss.conf /usr/local/etc/oss.conf; do -+ if test -e "$oss_conf"; then -+ . "$oss_conf" -+ fi -+ done ++ if test "$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="-I$OSSLIBDIR/include" ++ 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 linux/soundcard.h soundcard.h) ++ MOZ_CHECK_HEADERS(sys/soundcard.h soundcard.h) + + if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \ -+ "$ac_cv_header_linux_soundcard_h" != "yes" -a \ + "$ac_cv_header_soundcard_h" != "yes"; then + AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --disable-ogg --disable-wave --disable-webm.]) + fi + + dnl Assume NetBSD implementation over SunAudio + AC_CHECK_LIB(ossaudio, _oss_ioctl, + [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound") -+ MOZ_OSS_LIBS="-lossaudio"]) ++ 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 ================================== -@@ -5451,12 +5505,23 @@ MOZ_ARG_ENABLE_BOOL(alsa, - MOZ_ALSA=1, - MOZ_ALSA=) - -+MOZ_ARG_DISABLE_BOOL(alsa-dlopen, -+[ --disable-alsa-dlopen Disable runtime linking of libasound.so], -+ DISABLE_LIBASOUND_DLOPEN=1, -+ DISABLE_LIBASOUND_DLOPEN=) -+ - if test -n "$MOZ_ALSA"; then - PKG_CHECK_MODULES(MOZ_ALSA, alsa, , - [echo "$MOZ_ALSA_PKG_ERRORS" - AC_MSG_ERROR([Need alsa for Ogg, Wave or WebM decoding on Linux. Disable with --disable-ogg --disable-wave --disable-webm. (On Ubuntu, you might try installing the package libasound2-dev.)])]) - fi - -+if test -n "$DISABLE_LIBASOUND_DLOPEN"; then -+ AC_DEFINE(DISABLE_LIBASOUND_DLOPEN) -+else -+ MOZ_ALSA_LIBS= -+fi -+ - AC_SUBST(MOZ_ALSA) - - dnl ======================================================== diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS index b441e8a..950d9e5 100644 --- media/libcubeb/AUTHORS +++ media/libcubeb/AUTHORS @@ -4,3 +4,4 @@ Michael Wu 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; @@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) return CUBEB_ERROR; } - rv = snd_pcm_hw_params_any(stm->pcm, hw_params); + rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); if (rv < 0) { return CUBEB_ERROR; } - rv = snd_pcm_hw_params_get_channels_max(hw_params, max_channels); + rv = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels); if (rv < 0) { return CUBEB_ERROR; } @@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { /* get a pcm, disabling resampling, so we get a rate the * hardware/dmix/pulse/etc. supports. */ - rv = snd_pcm_open(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); + rv = WRAP(snd_pcm_open)(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); if (rv < 0) { return CUBEB_ERROR; } - rv = snd_pcm_hw_params_any(pcm, hw_params); + rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); if (rv < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - rv = snd_pcm_hw_params_get_rate(hw_params, rate, &dir); + rv = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir); if (rv >= 0) { /* There is a default rate: use it. */ - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */ *rate = 44100; - rv = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL); + rv = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL); if (rv < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } @@ -1013,7 +1119,7 @@ alsa_stream_start(cubeb_stream * stm) ctx = stm->context; pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 0); + WRAP(snd_pcm_pause)(stm->pcm, 0); gettimeofday(&stm->last_activity, NULL); pthread_mutex_unlock(&stm->mutex); @@ -1047,7 +1153,7 @@ alsa_stream_stop(cubeb_stream * stm) pthread_mutex_unlock(&ctx->mutex); pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 1); + WRAP(snd_pcm_pause)(stm->pcm, 1); pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1063,8 +1169,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) pthread_mutex_lock(&stm->mutex); delay = -1; - if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING || - snd_pcm_delay(stm->pcm, &delay) != 0) { + if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING || + WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) { *position = stm->last_position; pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1089,7 +1195,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) snd_pcm_sframes_t delay; /* This function returns the delay in frames until a frame written using snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */ - if (snd_pcm_delay(stm->pcm, &delay)) { + if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) { return CUBEB_ERROR; } diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c new file mode 100644 index 0000000..5e38e27 --- /dev/null +++ media/libcubeb/src/cubeb_oss.c -@@ -0,0 +1,404 @@ +@@ -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 -+#elif defined(HAVE_LINUX_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 +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']: + 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 -@@ -239,6 +239,9 @@ if CONFIG['MOZ_NATIVE_LIBVPX']: +@@ -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['MOZ_ALSA']: - OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] + if CONFIG['HAVE_CLOCK_MONOTONIC']: + OS_LIBS += CONFIG['REALTIME_LIBS'] Index: head/www/firefox/files/patch-bug1122547 =================================================================== --- head/www/firefox/files/patch-bug1122547 (nonexistent) +++ head/www/firefox/files/patch-bug1122547 (revision 380090) @@ -0,0 +1,20 @@ +diff --git media/webrtc/trunk/webrtc/modules/video_coding/main/source/receiver.cc media/webrtc/trunk/webrtc/modules/video_coding/main/source/receiver.cc +index e68a104..a090241 100644 +--- media/webrtc/trunk/webrtc/modules/video_coding/main/source/receiver.cc ++++ media/webrtc/trunk/webrtc/modules/video_coding/main/source/receiver.cc +@@ -159,12 +159,13 @@ VCMEncodedFrame* VCMReceiver::FrameForDecoding( + // Assume that render timing errors are due to changes in the video stream. + if (next_render_time_ms < 0) { + timing_error = true; +- } else if (std::abs(next_render_time_ms - now_ms) > max_video_delay_ms_) { ++ } else if (std::abs(static_cast(next_render_time_ms - now_ms)) > ++ max_video_delay_ms_) { + WEBRTC_TRACE(webrtc::kTraceWarning, webrtc::kTraceVideoCoding, + VCMId(vcm_id_, receiver_id_), + "This frame is out of our delay bounds, resetting jitter " + "buffer: %d > %d", +- static_cast(std::abs(next_render_time_ms - now_ms)), ++ std::abs(static_cast(next_render_time_ms - now_ms)), + max_video_delay_ms_); + timing_error = true; + } else if (static_cast(timing_->TargetVideoDelay()) > Property changes on: head/www/firefox/files/patch-bug1122547 ___________________________________________________________________ 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: head/www/firefox/files/patch-bug847568 =================================================================== --- head/www/firefox/files/patch-bug847568 (revision 380089) +++ head/www/firefox/files/patch-bug847568 (revision 380090) @@ -1,242 +1,242 @@ # Allow building against system-wide graphite2/harfbuzz. diff --git config/Makefile.in config/Makefile.in index 14bfc0d..5383399 100644 --- config/Makefile.in +++ config/Makefile.in @@ -75,6 +75,8 @@ export:: $(export-preqs) -DMOZ_NATIVE_LIBEVENT=$(MOZ_NATIVE_LIBEVENT) \ -DMOZ_NATIVE_LIBVPX=$(MOZ_NATIVE_LIBVPX) \ -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \ + -DMOZ_NATIVE_GRAPHITE2=$(MOZ_NATIVE_GRAPHITE2) \ + -DMOZ_NATIVE_HARFBUZZ=$(MOZ_NATIVE_HARFBUZZ) \ $(srcdir)/system-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers $(INSTALL) system_wrappers $(DIST) diff --git config/system-headers config/system-headers index 18e8703..bdc5f82 100644 --- config/system-headers +++ config/system-headers @@ -1357,3 +1357,11 @@ unicode/utypes.h #endif libutil.h unwind.h +#if MOZ_NATIVE_GRAPHITE2==1 +graphite2/Font.h +graphite2/Segment.h +#endif +#if MOZ_NATIVE_HARFBUZZ==1 +harfbuzz/hb-ot.h +harfbuzz/hb.h +#endif diff --git configure.in configure.in index ac38f40..87536b7 100644 --- configure.in +++ configure.in @@ -7986,6 +7986,49 @@ if test "$USE_FC_FREETYPE"; then fi dnl ======================================================== +dnl Check for harfbuzz +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-harfbuzz, +[ --with-system-harfbuzz Use system harfbuzz (located with pkgconfig)], +MOZ_NATIVE_HARFBUZZ=1, +MOZ_NATIVE_HARFBUZZ=) + +if test -n "$MOZ_NATIVE_HARFBUZZ"; then + PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 0.9.25) +fi + +AC_SUBST(MOZ_NATIVE_HARFBUZZ) + +dnl ======================================================== +dnl Check for graphite2 +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-graphite2, +[ --with-system-graphite2 Use system graphite2 (located with pkgconfig)], +MOZ_NATIVE_GRAPHITE2=1, +MOZ_NATIVE_GRAPHITE2=) + +if test -n "$MOZ_NATIVE_GRAPHITE2"; then + PKG_CHECK_MODULES(MOZ_GRAPHITE2, graphite2) + + dnl graphite2.pc has bogus version, check manually + AC_TRY_COMPILE([ #include + #define GR2_VERSION_REQUIRE(major,minor,bugfix) \ + ( GR2_VERSION_MAJOR * 10000 + GR2_VERSION_MINOR \ + * 100 + GR2_VERSION_BUGFIX >= \ + (major) * 10000 + (minor) * 100 + (bugfix) ) + ], [ + #if !GR2_VERSION_REQUIRE(1,2,4) + #error "Insufficient graphite2 version." + #endif + ], [], + [AC_MSG_ERROR([--with-system-graphite2 requested but no working libgraphite2 found])]) +fi + +AC_SUBST(MOZ_NATIVE_GRAPHITE2) + +dnl ======================================================== dnl Check for pixman and cairo dnl ======================================================== -diff --git content/base/src/moz.build content/base/src/moz.build +diff --git dom/base/moz.build dom/base/moz.build index a660ba4..6b2f602 100644 ---- content/base/src/moz.build -+++ content/base/src/moz.build +--- dom/base/moz.build ++++ dom/base/moz.build @@ -196,6 +196,9 @@ SOURCES += [ 'nsObjectLoadingContent.cpp', ] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + SOURCES['nsContentUtils.cpp'].flags += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + EXTRA_COMPONENTS += [ 'contentAreaDropListener.js', 'contentAreaDropListener.manifest', diff --git gfx/graphite2/moz-gr-update.sh gfx/graphite2/moz-gr-update.sh index f3d76ea..a9e7fb6 100644 --- gfx/graphite2/moz-gr-update.sh +++ gfx/graphite2/moz-gr-update.sh @@ -23,8 +23,14 @@ echo "\nSee" $0 "for update procedure.\n" >> gfx/graphite2/README.mozilla find gfx/graphite2/ -name "*.cpp" -exec perl -p -i -e "s///;s/Windows.h/windows.h/;" {} \; find gfx/graphite2/ -name "*.h" -exec perl -p -i -e "s///;s/Windows.h/windows.h/;" {} \; +# closest tag/release to require for system version +TAG=$(cd ../graphitedev/ && hg parents --template {latesttag}) + +perl -p -i -e "s/[0-9]+\,[0-9]+\,[0-9]+/$TAG/ and tr/./,/ \ + if /GR2_VERSION_REQUIRE/" configure.in + # summarize what's been touched -echo Updated to $CHANGESET. +echo Updated to $CHANGESET \($TAG for --with-system-graphite2\) echo Here is what changed in the gfx/graphite2 directory: echo diff --git gfx/harfbuzz/README-mozilla gfx/harfbuzz/README-mozilla index ca57d16..1ce21fe 100644 --- gfx/harfbuzz/README-mozilla +++ gfx/harfbuzz/README-mozilla @@ -21,3 +21,8 @@ In addition, the src/Makefile.in file here is NOT from upstream, nor is it 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. + +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'] +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'] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android', 'gonk', 'qt'): CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] diff --git gfx/thebes/moz.build gfx/thebes/moz.build index d5852fa..aeeab25 100644 --- gfx/thebes/moz.build +++ gfx/thebes/moz.build @@ -278,6 +278,12 @@ CXXFLAGS += CONFIG['TK_CFLAGS'] CFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] CFLAGS += CONFIG['TK_CFLAGS'] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + +if CONFIG['MOZ_NATIVE_GRAPHITE2']: + CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('android', 'gonk', 'qt'): CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] diff --git intl/unicharutil/util/moz.build intl/unicharutil/util/moz.build index d736943..41a931f 100644 --- intl/unicharutil/util/moz.build +++ intl/unicharutil/util/moz.build @@ -37,3 +37,6 @@ if CONFIG['_MSC_VER']: if CONFIG['ENABLE_INTL_API']: CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS'] + +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] diff --git netwerk/dns/moz.build netwerk/dns/moz.build index 0b0717a..2e665c9 100644 --- netwerk/dns/moz.build +++ netwerk/dns/moz.build @@ -63,3 +63,6 @@ GENERATED_FILES = [ LOCAL_INCLUDES += [ '../base/src', ] + +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] diff --git toolkit/library/moz.build toolkit/library/moz.build index 67f0db9..d42137a 100644 --- toolkit/library/moz.build +++ toolkit/library/moz.build @@ -187,6 +187,12 @@ if CONFIG['MOZ_NATIVE_LIBVPX']: if not CONFIG['MOZ_TREE_PIXMAN']: OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] +if CONFIG['MOZ_NATIVE_GRAPHITE2']: + OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS'] + +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS'] + - if CONFIG['MOZ_ALSA']: - OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] + if CONFIG['MOZ_OSS']: + OS_LIBS += CONFIG['MOZ_OSS_LIBS'] Index: head/www/firefox/files/patch-bug991253 =================================================================== --- head/www/firefox/files/patch-bug991253 (revision 380089) +++ head/www/firefox/files/patch-bug991253 (revision 380090) @@ -1,15 +1,17 @@ --- extensions/spellcheck/hunspell/src/mozHunspell.cpp~ +++ extensions/spellcheck/hunspell/src/mozHunspell.cpp -@@ -400,6 +400,12 @@ mozHunspell::LoadDictionaryList() +@@ -400,6 +400,14 @@ mozHunspell::LoadDictionaryList(bool aNo } } + // load system hunspell dictionaries -+ nsIFile* hunDir; ++ nsCOMPtr hunDir; + NS_NewNativeLocalFile(NS_LITERAL_CSTRING("%%LOCALBASE%%/share/hunspell"), -+ true, &hunDir); -+ LoadDictionariesFromDir(hunDir); ++ true, getter_AddRefs(hunDir)); ++ if (hunDir) { ++ LoadDictionariesFromDir(hunDir); ++ } + // find dictionaries from extensions requiring restart nsCOMPtr dictDirs; rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY_LIST, Index: head/www/firefox/files/patch-ijg-libjpeg =================================================================== --- head/www/firefox/files/patch-ijg-libjpeg (revision 380089) +++ head/www/firefox/files/patch-ijg-libjpeg (revision 380090) @@ -1,382 +1,382 @@ # 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 defined(IS_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); -@@ -324,6 +340,7 @@ nsJPEGDecoder::WriteInternal(const char *aBuffer, uint32_t aCount) - case JCS_GRAYSCALE: - case JCS_RGB: - case JCS_YCbCr: +@@ -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) { -@@ -332,6 +349,9 @@ nsJPEGDecoder::WriteInternal(const char *aBuffer, uint32_t aCount) - } else { - mInfo.out_color_space = JCS_RGB; - } + // 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; ++ mInfo.out_color_space = JCS_RGB; +#endif - break; - case JCS_CMYK: - case JCS_YCCK: -@@ -399,6 +419,15 @@ nsJPEGDecoder::WriteInternal(const char *aBuffer, uint32_t aCount) - return; /* I/O suspension */ + break; + case JCS_CMYK: + case JCS_YCCK: +@@ -433,6 +452,15 @@ 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; -@@ -544,7 +573,11 @@ nsJPEGDecoder::OutputScanlines(bool* suspend) - uint32_t *imageRow = ((uint32_t*)mImageData) + + // If this is a progressive JPEG ... + mState = mInfo.buffered_image ? +@@ -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 */ + // Special case: scanline will be directly converted into packed ARGB if (jpeg_read_scanlines(&mInfo, (JSAMPARRAY)&imageRow, 1) != 1) { - *suspend = true; /* suspend */ -@@ -854,6 +887,282 @@ term_source (j_decompress_ptr jd) + *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. + ///*************** Inverted CMYK -> RGB conversion ************************* + /// Input is (Inverted) CMYK stored as 4 bytes per pixel. + /// Output is RGB stored as 3 bytes per pixel. Index: head/www/firefox/files/patch-system-openh264 =================================================================== --- head/www/firefox/files/patch-system-openh264 (revision 380089) +++ head/www/firefox/files/patch-system-openh264 (revision 380090) @@ -1,221 +1,221 @@ # Revert bug 1045209 to allow using absolute path -diff --git content/media/gmp/GMPChild.cpp content/media/gmp/GMPChild.cpp +diff --git dom/media/gmp/GMPChild.cpp dom/media/gmp/GMPChild.cpp index 1dde3ac..12c88cf 100644 ---- content/media/gmp/GMPChild.cpp -+++ content/media/gmp/GMPChild.cpp +--- dom/media/gmp/GMPChild.cpp ++++ dom/media/gmp/GMPChild.cpp @@ -76,21 +76,14 @@ GetFileBase(const std::string& aPluginPa } #endif - nsCOMPtr parent; - rv = aFileBase->GetParent(getter_AddRefs(parent)); - if (NS_FAILED(rv)) { - return false; - } - - nsAutoString parentLeafName; - rv = parent->GetLeafName(parentLeafName); - if (NS_FAILED(rv)) { + nsAutoString leafName; + if (NS_FAILED(aFileBase->GetLeafName(leafName))) { return false; } - aBaseName = Substring(parentLeafName, + aBaseName = Substring(leafName, 4, - parentLeafName.Length() - 1); + leafName.Length() - 1); return true; } -diff --git content/media/gmp/GMPParent.cpp content/media/gmp/GMPParent.cpp +diff --git dom/media/gmp/GMPParent.cpp dom/media/gmp/GMPParent.cpp index aa60acf..90878ca 100644 ---- content/media/gmp/GMPParent.cpp -+++ content/media/gmp/GMPParent.cpp +--- dom/media/gmp/GMPParent.cpp ++++ dom/media/gmp/GMPParent.cpp @@ -90,23 +90,16 @@ mService = aService; mDirectory = aPluginDir; - // aPluginDir is // - // where should be gmp-gmpopenh264 - nsCOMPtr parent; - nsresult rv = aPluginDir->GetParent(getter_AddRefs(parent)); - if (NS_FAILED(rv)) { - return rv; - } - nsAutoString parentLeafName; - rv = parent->GetLeafName(parentLeafName); + nsAutoString leafname; + nsresult rv = aPluginDir->GetLeafName(leafname); if (NS_FAILED(rv)) { return rv; } LOGD(("%s::%s: %p for %s", __CLASS__, __FUNCTION__, this, - NS_LossyConvertUTF16toASCII(parentLeafName).get())); + NS_LossyConvertUTF16toASCII(leafname).get())); - MOZ_ASSERT(parentLeafName.Length() > 4); - mName = Substring(parentLeafName, 4); + MOZ_ASSERT(leafname.Length() > 4); + mName = Substring(leafname, 4); return ReadGMPMetaData(); } diff --git toolkit/modules/GMPInstallManager.jsm toolkit/modules/GMPInstallManager.jsm index 9593492..470384b 100644 --- toolkit/modules/GMPInstallManager.jsm +++ toolkit/modules/GMPInstallManager.jsm @@ -107,6 +107,7 @@ */ KEY_LOG_ENABLED: "media.gmp-manager.log", KEY_ADDON_LAST_UPDATE: "media.{0}.lastUpdate", + KEY_ADDON_PATH: "media.{0}.path", KEY_ADDON_VERSION: "media.{0}.version", KEY_ADDON_AUTOUPDATE: "media.{0}.autoupdate", KEY_URL: "media.gmp-manager.url", @@ -888,9 +889,7 @@ let gmpAddon = this._gmpAddon; let installToDirPath = Cc["@mozilla.org/file/local;1"]. createInstance(Ci.nsIFile); - let path = OS.Path.join(OS.Constants.Path.profileDir, - gmpAddon.id, - gmpAddon.version); + let path = OS.Path.join(OS.Constants.Path.profileDir, gmpAddon.id); installToDirPath.initWithPath(path); log.info("install to directory path: " + installToDirPath.path); let gmpInstaller = new GMPExtractor(zipPath, installToDirPath.path); @@ -899,10 +898,12 @@ // Success, set the prefs let now = Math.round(Date.now() / 1000); GMPPrefs.set(GMPPrefs.KEY_ADDON_LAST_UPDATE, now, gmpAddon.id); - // Setting the version pref signals installation completion to consumers, - // if you need to set other prefs etc. do it before this. + // Setting the path pref signals installation completion to consumers, + // so set the version and potential other information they use first. GMPPrefs.set(GMPPrefs.KEY_ADDON_VERSION, gmpAddon.version, gmpAddon.id); + GMPPrefs.set(GMPPrefs.KEY_ADDON_PATH, + installToDirPath.path, gmpAddon.id); this._deferred.resolve(extractedPaths); }, err => { this._deferred.reject(err); diff --git toolkit/mozapps/extensions/internal/OpenH264Provider.jsm toolkit/mozapps/extensions/internal/OpenH264Provider.jsm index 1f3a0b1..93517be 100644 --- toolkit/mozapps/extensions/internal/OpenH264Provider.jsm +++ toolkit/mozapps/extensions/internal/OpenH264Provider.jsm @@ -29,6 +29,7 @@ const OPENH264_PLUGIN_ID = "gmp-gmpopenh264"; const OPENH264_PREF_BRANCH = "media." + OPENH264_PLUGIN_ID + "."; const OPENH264_PREF_ENABLED = "enabled"; +const OPENH264_PREF_PATH = "path"; const OPENH264_PREF_VERSION = "version"; const OPENH264_PREF_LASTUPDATE = "lastUpdate"; const OPENH264_PREF_AUTOUPDATE = "autoupdate"; @@ -93,7 +94,12 @@ get description() { return pluginsBundle.GetStringFromName("openH264_description"); }, - get version() { return prefs.get(OPENH264_PREF_VERSION, ""); }, + get version() { + if (this.isInstalled) { + return prefs.get(OPENH264_PREF_VERSION, ""); + } + return ""; + }, get isActive() { return !this.userDisabled; }, get appDisabled() { return false; }, @@ -217,24 +223,17 @@ get pluginMimeTypes() { return []; }, get pluginLibraries() { - if (this.isInstalled) { - let path = this.version; - return [path]; - } - return []; + let path = prefs.get(OPENH264_PREF_PATH, null); + return path && path.length ? [OS.Path.basename(path)] : []; }, get pluginFullpath() { - if (this.isInstalled) { - let path = OS.Path.join(OS.Constants.Path.profileDir, - OPENH264_PLUGIN_ID, - this.version); - return [path]; - } - return []; + let path = prefs.get(OPENH264_PREF_PATH, null); + return path && path.length ? [path] : []; }, get isInstalled() { - return this.version.length > 0; + let path = prefs.get(OPENH264_PREF_PATH, ""); + return path.length > 0; }, }; @@ -245,19 +244,14 @@ "OpenH264Provider" + "::"); OpenH264Wrapper._log = Log.repository.getLoggerWithMessagePrefix("Toolkit.OpenH264Provider", "OpenH264Wrapper" + "::"); - this.gmpPath = null; - if (OpenH264Wrapper.isInstalled) { - this.gmpPath = OS.Path.join(OS.Constants.Path.profileDir, - OPENH264_PLUGIN_ID, - prefs.get(OPENH264_PREF_VERSION, null)); - } + this.gmpPath = prefs.get(OPENH264_PREF_PATH, null); let enabled = prefs.get(OPENH264_PREF_ENABLED, true); this._log.trace("startup() - enabled=" + enabled + ", gmpPath="+this.gmpPath); Services.obs.addObserver(this, AddonManager.OPTIONS_NOTIFICATION_DISPLAYED, false); prefs.observe(OPENH264_PREF_ENABLED, this.onPrefEnabledChanged, this); - prefs.observe(OPENH264_PREF_VERSION, this.onPrefVersionChanged, this); + prefs.observe(OPENH264_PREF_PATH, this.onPrefPathChanged, this); prefs.observe(OPENH264_PREF_LOGGING, configureLogging); if (this.gmpPath && enabled) { @@ -270,7 +264,7 @@ this._log.trace("shutdown()"); Services.obs.removeObserver(this, AddonManager.OPTIONS_NOTIFICATION_DISPLAYED); prefs.ignore(OPENH264_PREF_ENABLED, this.onPrefEnabledChanged, this); - prefs.ignore(OPENH264_PREF_VERSION, this.onPrefVersionChanged, this); + prefs.ignore(OPENH264_PREF_PATH, this.onPrefPathChanged, this); prefs.ignore(OPENH264_PREF_LOGGING, configureLogging); return OpenH264Wrapper._updateTask; @@ -296,25 +290,20 @@ wrapper); }, - onPrefVersionChanged: function() { + onPrefPathChanged: function() { let wrapper = OpenH264Wrapper; AddonManagerPrivate.callAddonListeners("onUninstalling", wrapper, false); if (this.gmpPath) { - this._log.info("onPrefVersionChanged() - unregistering gmp directory " + this.gmpPath); + this._log.info("onPrefPathChanged() - removing gmp directory " + this.gmpPath); gmpService.removePluginDirectory(this.gmpPath); } AddonManagerPrivate.callAddonListeners("onUninstalled", wrapper); AddonManagerPrivate.callInstallListeners("onExternalInstall", null, wrapper, null, false); - this.gmpPath = null; - if (OpenH264Wrapper.isInstalled) { - this.gmpPath = OS.Path.join(OS.Constants.Path.profileDir, - OPENH264_PLUGIN_ID, - prefs.get(OPENH264_PREF_VERSION, null)); - } + this.gmpPath = prefs.get(OPENH264_PREF_PATH, null); if (this.gmpPath && wrapper.isActive) { - this._log.info("onPrefVersionChanged() - registering gmp directory " + this.gmpPath); + this._log.info("onPrefPathChanged() - adding gmp directory " + this.gmpPath); gmpService.addPluginDirectory(this.gmpPath); } AddonManagerPrivate.callAddonListeners("onInstalled", wrapper); Index: head/www/firefox/files/patch-z-bug517422 =================================================================== --- head/www/firefox/files/patch-z-bug517422 (revision 380089) +++ head/www/firefox/files/patch-z-bug517422 (revision 380090) @@ -1,524 +1,524 @@ # 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,13 @@ 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_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 @@ -16,13 +16,19 @@ if CONFIG['MOZ_UPDATER']: if not CONFIG['MOZ_NATIVE_BZ2']: external_dirs += ['modules/libbz2'] -if CONFIG['MOZ_VORBIS']: +if not CONFIG['MOZ_NATIVE_OGG']: + external_dirs += ['media/libogg'] + +if not CONFIG['MOZ_NATIVE_THEORA']: + external_dirs += ['media/libtheora'] + +if CONFIG['MOZ_VORBIS'] and not CONFIG['MOZ_NATIVE_VORBIS']: 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_OPUS']: +if CONFIG['MOZ_OPUS'] and not CONFIG['MOZ_NATIVE_OPUS']: external_dirs += ['media/libopus'] if CONFIG['MOZ_WEBM']: @@ -37,14 +43,16 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ_NATIVE_LIBVPX']: 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/libtheora', - 'media/libspeex_resampler', 'media/libstagefright', - 'media/libsoundtouch', ] DIRS += ['../../' + i for i in external_dirs] diff --git config/system-headers config/system-headers index bef567c..9807c29 100644 --- config/system-headers +++ config/system-headers @@ -1263,7 +1263,6 @@ X11/Xlocale.h X11/Xos.h X11/Xutil.h zmouse.h -soundtouch/SoundTouch.h #if MOZ_NATIVE_PNG==1 png.h #endif @@ -1325,6 +1324,7 @@ vorbis/codec.h theora/theoradec.h tremor/ivorbiscodec.h speex/speex_resampler.h +soundtouch/SoundTouch.h ogg/ogg.h ogg/os_types.h nestegg/nestegg.h @@ -1365,3 +1365,29 @@ 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_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 @@ -5056,6 +5056,57 @@ if test "${ac_cv_c_attribute_aligned}" != "0"; then 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.4) +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 = Disable Opus audio codec support dnl ======================================================== MOZ_ARG_DISABLE_BOOL(opus, @@ -5064,6 +5115,89 @@ MOZ_ARG_DISABLE_BOOL(opus, MOZ_OPUS=1) dnl ======================================================== +dnl Check for libopus +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-opus, +[ --with-system-opus Use system libopus (located with pkgconfig)], +MOZ_NATIVE_OPUS=1, +MOZ_NATIVE_OPUS=) + +if test -n "$MOZ_NATIVE_OPUS"; then + PKG_CHECK_MODULES(MOZ_OPUS, opus >= 1.1) +else + MOZ_OPUS_CFLAGS='-I$(topsrcdir)/media/libopus/include' +fi + +AC_SUBST(MOZ_NATIVE_OPUS) + +dnl ======================================================== +dnl Check for libtheora +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-theora, +[ --with-system-theora Use system libtheora (located with pkgconfig)], +MOZ_NATIVE_THEORA=1, +MOZ_NATIVE_THEORA=) + +if test -n "$MOZ_NATIVE_THEORA"; then + PKG_CHECK_MODULES(MOZ_THEORA, theora >= 1.2) +fi + +AC_SUBST(MOZ_NATIVE_THEORA) + +dnl ======================================================== +dnl Check for libspeex resampler +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-speex, +[ --with-system-speex Use system libspeex (located with pkgconfig)], +MOZ_NATIVE_SPEEX=1, +MOZ_NATIVE_SPEEX=) + +if test -n "$MOZ_NATIVE_SPEEX"; then + PKG_CHECK_MODULES(MOZ_SPEEX, speexdsp >= 1.2) +fi + +AC_SUBST(MOZ_NATIVE_SPEEX) + +dnl ======================================================== +dnl Check for libsoundtouch +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-soundtouch, +[ --with-system-soundtouch Use system libsoundtouch (located with pkgconfig)], +MOZ_NATIVE_SOUNDTOUCH=1, +MOZ_NATIVE_SOUNDTOUCH=) + +if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then + PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.8.0) + + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + _SAVE_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS $MOZ_SOUNDTOUCH_CFLAGS" + AC_CACHE_CHECK(for soundtouch sample type, + ac_cv_soundtouch_sample_type, + [AC_TRY_COMPILE([#include + #ifndef SOUNDTOUCH_INTEGER_SAMPLES + #error soundtouch expects float samples + #endif], + [], + [ac_cv_soundtouch_sample_type=short], + [ac_cv_soundtouch_sample_type=float])]) + CXXFLAGS=$_SAVE_CXXFLAGS + AC_LANG_RESTORE + + if test \( -n "$MOZ_SAMPLE_TYPE_S16" -a "$ac_cv_soundtouch_sample_type" != short \) \ + -o \( -n "$MOZ_SAMPLE_TYPE_FLOAT32" -a "$ac_cv_soundtouch_sample_type" != float \) ; then + AC_MSG_ERROR([SoundTouch library is built with incompatible sample type. Either rebuild the library with/without --enable-integer-samples, chase default Mozilla sample type or remove --with-system-soundtouch.]) + fi +fi + +AC_SUBST(MOZ_NATIVE_SOUNDTOUCH) + +dnl ======================================================== dnl = Disable VP8 decoder support dnl ======================================================== MOZ_ARG_DISABLE_BOOL(webm, -diff --git content/media/AudioStream.h content/media/AudioStream.h +diff --git dom/media/AudioStream.h dom/media/AudioStream.h index 085676d..00c54fb 100644 ---- content/media/AudioStream.h -+++ content/media/AudioStream.h +--- dom/media/AudioStream.h ++++ dom/media/AudioStream.h @@ -17,7 +17,7 @@ #include "CubebUtils.h" namespace soundtouch { -class SoundTouch; +class MOZ_IMPORT_API SoundTouch; } namespace mozilla { -diff --git content/media/moz.build content/media/moz.build +diff --git dom/media/moz.build dom/media/moz.build index 7526cff..e0a0ca0 100644 ---- content/media/moz.build -+++ content/media/moz.build +--- dom/media/moz.build ++++ dom/media/moz.build @@ -212,3 +212,24 @@ if CONFIG['ANDROID_VERSION'] > '15': CFLAGS += CONFIG['GSTREAMER_CFLAGS'] CXXFLAGS += CONFIG['GSTREAMER_CFLAGS'] + +if CONFIG['MOZ_NATIVE_OGG']: + CXXFLAGS += CONFIG['MOZ_OGG_CFLAGS'] + +if CONFIG['MOZ_NATIVE_THEORA']: + CXXFLAGS += CONFIG['MOZ_THEORA_CFLAGS'] + +if CONFIG['MOZ_NATIVE_VORBIS']: + CXXFLAGS += CONFIG['MOZ_VORBIS_CFLAGS'] + +if CONFIG['MOZ_NATIVE_TREMOR']: + CXXFLAGS += CONFIG['MOZ_TREMOR_CFLAGS'] + +if CONFIG['MOZ_NATIVE_OPUS']: + CXXFLAGS += CONFIG['MOZ_OPUS_CFLAGS'] + +if CONFIG['MOZ_NATIVE_SPEEX']: + CXXFLAGS += CONFIG['MOZ_SPEEX_CFLAGS'] + +if CONFIG['MOZ_NATIVE_SOUNDTOUCH']: + CXXFLAGS += CONFIG['MOZ_SOUNDTOUCH_CFLAGS'] diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build index 944744d..9a7c8c0 100644 --- media/libcubeb/src/moz.build +++ media/libcubeb/src/moz.build @@ -65,6 +65,9 @@ if CONFIG['GKMEDIAS_SHARED_LIBRARY']: FINAL_LIBRARY = 'gkmedias' +if CONFIG['MOZ_NATIVE_SPEEX']: + SOURCES['cubeb_resampler.cpp'].flags += CONFIG['MOZ_SPEEX_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': CFLAGS += [ '-I%s/%s' % (CONFIG['ANDROID_SOURCE'], d) for d in [ diff --git media/libogg/README_MOZILLA media/libogg/README_MOZILLA index 0833e4d..7ece97b 100644 --- media/libogg/README_MOZILLA +++ media/libogg/README_MOZILLA @@ -6,3 +6,6 @@ The svn revision number used was r17287. The int-types.patch address a bug that config_types.h generated from Linux platform can't be used on OpenSolaris directly see Mozilla bug 449754 + +The in-tree copy may be omitted during build by --with-system-ogg. +Keep version in configure.in in sync on updates. diff --git media/libopus/README_MOZILLA media/libopus/README_MOZILLA index 2d85c9f..d3fb9f8 100644 --- media/libopus/README_MOZILLA +++ media/libopus/README_MOZILLA @@ -9,3 +9,6 @@ files after the copy step. The upstream repository is https://git.xiph.org/opus.git The git tag/revision used was v1.1. + +The in-tree copy may be omitted during build by --with-system-opus. +So, keep its pkg-config version check within configure.in in sync on updates. diff --git media/libsoundtouch/README_MOZILLA media/libsoundtouch/README_MOZILLA index bfd4b1a..15b158d 100644 --- media/libsoundtouch/README_MOZILLA +++ media/libsoundtouch/README_MOZILLA @@ -6,3 +6,5 @@ The whole library is not used, only the relevant files are imported in the tree, using the script `update.sh`. Some changes have been made to the files, using the patch `moz-libsoundtouch.patch`. We also use a custom soundtouch_config.h. +The in-tree copy may be omitted during build by --with-system-soundtouch. +Keep version in configure.in in sync on updates. diff --git media/libspeex_resampler/README_MOZILLA media/libspeex_resampler/README_MOZILLA index 7f6b1bb..e830300 100644 --- media/libspeex_resampler/README_MOZILLA +++ media/libspeex_resampler/README_MOZILLA @@ -3,3 +3,6 @@ This source is from the Speex DSP library It consists in the audio resampling code (resampler.c) and its header files dependancies, imported into the tree using the update.sh script. + +The in-tree copy may be omitted during build by --with-system-speex. +Keep version in configure.in in sync on updates. diff --git media/libtheora/README_MOZILLA media/libtheora/README_MOZILLA index d48dbfa..f08a2ed 100644 --- media/libtheora/README_MOZILLA +++ media/libtheora/README_MOZILLA @@ -3,3 +3,6 @@ using the update.sh script. The changes made were those applied by update.sh, the addition/update of Makefile.in files for the Mozilla build system. The subversion revision used was r17578. + +The in-tree copy may be omitted during build by --with-system-theora. +Keep version in configure.in in sync on updates. diff --git media/libtheora/moz.build media/libtheora/moz.build index 14265b1..3069e99 100644 --- media/libtheora/moz.build +++ media/libtheora/moz.build -@@ -6,3 +6,5 @@ - - DIRS += ['include', 'lib'] +@@ -93,3 +93,5 @@ if CONFIG['GNU_AS']: + if CONFIG['OS_TARGET'] == 'Android': + DEFINES['__linux__'] = True +if CONFIG['MOZ_NATIVE_OGG']: + CFLAGS += CONFIG['MOZ_OGG_CFLAGS'] 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,9 +17,9 @@ 'conditions': [ ['build_with_mozilla==1', { # Mozilla provides its own build of the opus library. - 'include_dirs': [ - '/media/libopus/include', - ] + 'cflags_mozilla': [ + '$(MOZ_OPUS_CFLAGS)', + ], }, { 'dependencies': [ '<(DEPTH)/third_party/opus/opus.gyp:opus' 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,27 @@ 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_OPUS']: + OS_LIBS += CONFIG['MOZ_OPUS_LIBS'] + +if CONFIG['MOZ_NATIVE_SPEEX']: + OS_LIBS += CONFIG['MOZ_SPEEX_LIBS'] + +if CONFIG['MOZ_NATIVE_SOUNDTOUCH']: + OS_LIBS += CONFIG['MOZ_SOUNDTOUCH_LIBS'] + if CONFIG['MOZ_NATIVE_LIBEVENT']: OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS'] diff --git xpcom/build/XPCOMInit.cpp xpcom/build/XPCOMInit.cpp index 2cf281e..6d7af0e 100644 --- xpcom/build/XPCOMInit.cpp +++ xpcom/build/XPCOMInit.cpp @@ -138,7 +138,9 @@ extern nsresult nsStringInputStreamConstructor(nsISupports*, REFNSIID, void**); #include "mozilla/VisualEventTracer.h" #endif +#ifndef MOZ_OGG_NO_MEM_REPORTING #include "ogg/ogg.h" +#endif #if defined(MOZ_VPX) && !defined(MOZ_VPX_NO_MEM_REPORTING) #include "vpx_mem/vpx_mem.h" #endif @@ -651,11 +653,13 @@ NS_InitXPCOM2(nsIServiceManager** aResult, // this oddness. mozilla::SetICUMemoryFunctions(); +#ifndef MOZ_OGG_NO_MEM_REPORTING // Do the same for libogg. ogg_set_mem_functions(OggReporter::CountingMalloc, OggReporter::CountingCalloc, OggReporter::CountingRealloc, OggReporter::CountingFree); +#endif #if defined(MOZ_VPX) && !defined(MOZ_VPX_NO_MEM_REPORTING) // And for VPX. Index: head/www/firefox-esr/Makefile =================================================================== --- head/www/firefox-esr/Makefile (revision 380089) +++ head/www/firefox-esr/Makefile (revision 380090) @@ -1,87 +1,86 @@ # Created by: Alan Eldridge # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 31.4.0 +DISTVERSION= 31.5.0 DISTVERSIONSUFFIX=esr.source -PORTREVISION= 2 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}esr/source PKGNAMESUFFIX= -esr MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla BUILD_DEPENDS= nspr>=4.10.6:${PORTSDIR}/devel/nspr \ nss>=3.16.2:${PORTSDIR}/security/nss \ libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \ cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \ soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \ harfbuzz>=0.9.25:${PORTSDIR}/print/harfbuzz \ graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \ libvorbis>=1.3.4:${PORTSDIR}/audio/libvorbis \ opus>=1.1:${PORTSDIR}/audio/opus \ libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \ sqlite3>=3.8.4.2:${PORTSDIR}/databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \ v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \ autoconf-2.13:${PORTSDIR}/devel/autoconf213 \ zip:${PORTSDIR}/archivers/zip \ unzip:${PORTSDIR}/archivers/unzip LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l USE_GECKO= gecko CPE_PRODUCT= ${PORTNAME}_esr CONFLICTS= firefox-3[02-9].* firefox-2[0-35-9].* MOZ_PKGCONFIG_FILES= # empty USE_MOZILLA= # empty MOZILLA_NAME= Firefox USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl USES= dos2unix tar:bzip2 DOS2UNIX_FILES= media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp FIREFOX_ICON= ${MOZILLA}.png FIREFOX_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png MOZ_OPTIONS= --program-transform-name='s/firefox/${MOZILLA}/' \ --enable-application=browser \ --enable-official-branding .include "${.CURDIR}/../../www/firefox/Makefile.options" .include WRKSRC:= ${WRKDIR}/mozilla-esr31 .if ${PORT_OPTIONS:MALSA} RUN_DEPENDS+= alsa-lib>=1.0.27.2_1:${PORTSDIR}/audio/alsa-lib .endif .if ${PORT_OPTIONS:MGSTREAMER} RUN_DEPENDS+= gstreamer1-libav>=1.2.4_1:${PORTSDIR}/multimedia/gstreamer1-libav .endif post-extract: @${SED} -e 's|@FIREFOX_ICON@|${FIREFOX_ICON}|' -e 's|@MOZILLA@|${MOZILLA}|' \ -e 's|@MOZILLA_NAME@|${MOZILLA_NAME}|' \ <${FILESDIR}/firefox.desktop.in >${WRKDIR}/${MOZILLA}.desktop post-patch: @${REINPLACE_CMD} -e '/MOZPNG/s/=[0-9]*/=10511/' \ ${WRKSRC}/configure.in @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/browser/app/nsBrowserApp.cpp pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${WRKSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) post-install: ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps ${INSTALL_DATA} ${WRKDIR}/${MOZILLA}.desktop ${STAGEDIR}${PREFIX}/share/applications/ ${LN} -sf ${FIREFOX_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${FIREFOX_ICON} .include Index: head/www/firefox-esr/distinfo =================================================================== --- head/www/firefox-esr/distinfo (revision 380089) +++ head/www/firefox-esr/distinfo (revision 380090) @@ -1,2 +1,2 @@ -SHA256 (firefox-31.4.0esr.source.tar.bz2) = c5ad8b588fb1e7690be5da04f627335f6440277dac4bccd46e6687fcf2fbc23b -SIZE (firefox-31.4.0esr.source.tar.bz2) = 147935703 +SHA256 (firefox-31.5.0esr.source.tar.bz2) = d4243bf74a4421b590f5580f71486f8608a1a483d4779b44ab0e39d6bbf64b6a +SIZE (firefox-31.5.0esr.source.tar.bz2) = 147757474 Index: head/www/firefox-esr/files/patch-bug1083461 =================================================================== --- head/www/firefox-esr/files/patch-bug1083461 (revision 380089) +++ head/www/firefox-esr/files/patch-bug1083461 (nonexistent) @@ -1,156 +0,0 @@ -commit c97894b -Author: L. David Baron -Date: Sun Oct 19 23:31:39 2014 -0400 - - Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers. r=bzbarsky approval-mozilla-esr31=bkerensa ---- - layout/style/nsCSSValue.cpp | 28 ++++++++++++++++------------ - layout/style/nsCSSValue.h | 22 ++++++++++++++++------ - layout/style/nsStyleAnimation.cpp | 6 ++++-- - 3 files changed, 36 insertions(+), 20 deletions(-) - -diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp -index 781ef65..4bbc979 100644 ---- layout/style/nsCSSValue.cpp -+++ layout/style/nsCSSValue.cpp -@@ -253,13 +253,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const - return *mValue.mRect == *aOther.mValue.mRect; - } - else if (eCSSUnit_List == mUnit) { -- return *mValue.mList == *aOther.mValue.mList; -+ return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList); - } - else if (eCSSUnit_SharedList == mUnit) { - return *mValue.mSharedList == *aOther.mValue.mSharedList; - } - else if (eCSSUnit_PairList == mUnit) { -- return *mValue.mPairList == *aOther.mValue.mPairList; -+ return nsCSSValuePairList::Equal(mValue.mPairList, -+ aOther.mValue.mPairList); - } - else if (eCSSUnit_GridTemplateAreas == mUnit) { - return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas; -@@ -1740,13 +1741,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult, - } - } - --bool --nsCSSValueList::operator==(const nsCSSValueList& aOther) const -+/* static */ bool -+nsCSSValueList::Equal(const nsCSSValueList* aList1, -+ const nsCSSValueList* aList2) - { -- if (this == &aOther) -+ if (aList1 == aList2) { - return true; -+ } - -- const nsCSSValueList *p1 = this, *p2 = &aOther; -+ const nsCSSValueList *p1 = aList1, *p2 = aList2; - for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) { - if (p1->mValue != p2->mValue) - return false; -@@ -1799,8 +1802,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult - bool - nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const - { -- return !mHead == !aOther.mHead && -- (!mHead || *mHead == *aOther.mHead); -+ return nsCSSValueList::Equal(mHead, aOther.mHead); - } - - size_t -@@ -2010,13 +2012,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty, - } - } - --bool --nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const -+/* static */ bool -+nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1, -+ const nsCSSValuePairList* aList2) - { -- if (this == &aOther) -+ if (aList1 == aList2) { - return true; -+ } - -- const nsCSSValuePairList *p1 = this, *p2 = &aOther; -+ const nsCSSValuePairList *p1 = aList1, *p2 = aList2; - for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) { - if (p1->mXValue != p2->mXValue || - p1->mYValue != p2->mYValue) -diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h -index 753938c..77eeef0 100644 ---- layout/style/nsCSSValue.h -+++ layout/style/nsCSSValue.h -@@ -806,9 +806,8 @@ struct nsCSSValueList { - void AppendToString(nsCSSProperty aProperty, nsAString& aResult, - nsCSSValue::Serialization aValueSerialization) const; - -- bool operator==(nsCSSValueList const& aOther) const; -- bool operator!=(const nsCSSValueList& aOther) const -- { return !(*this == aOther); } -+ static bool Equal(const nsCSSValueList* aList1, -+ const nsCSSValueList* aList2); - - size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; - -@@ -821,6 +820,12 @@ private: - { - MOZ_COUNT_CTOR(nsCSSValueList); - } -+ -+ // We don't want operator== or operator!= because they wouldn't be -+ // null-safe, which is generally what we need. Use |Equal| method -+ // above instead. -+ bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE; -+ bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE; - }; - - // nsCSSValueList_heap differs from nsCSSValueList only in being -@@ -1199,9 +1204,8 @@ struct nsCSSValuePairList { - void AppendToString(nsCSSProperty aProperty, nsAString& aResult, - nsCSSValue::Serialization aValueSerialization) const; - -- bool operator==(const nsCSSValuePairList& aOther) const; -- bool operator!=(const nsCSSValuePairList& aOther) const -- { return !(*this == aOther); } -+ static bool Equal(const nsCSSValuePairList* aList1, -+ const nsCSSValuePairList* aList2); - - size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; - -@@ -1215,6 +1219,12 @@ private: - { - MOZ_COUNT_CTOR(nsCSSValuePairList); - } -+ -+ // We don't want operator== or operator!= because they wouldn't be -+ // null-safe, which is generally what we need. Use |Equal| method -+ // above instead. -+ bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE; -+ bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE; - }; - - // nsCSSValuePairList_heap differs from nsCSSValuePairList only in being -diff --git layout/style/nsStyleAnimation.cpp layout/style/nsStyleAnimation.cpp -index 6c2ccb0..8dbe404 100644 ---- layout/style/nsStyleAnimation.cpp -+++ layout/style/nsStyleAnimation.cpp -@@ -3816,11 +3816,13 @@ nsStyleAnimation::Value::operator==(const Value& aOther) const - case eUnit_Filter: - case eUnit_Shadow: - case eUnit_BackgroundPosition: -- return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList; -+ return nsCSSValueList::Equal(mValue.mCSSValueList, -+ aOther.mValue.mCSSValueList); - case eUnit_Transform: - return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList; - case eUnit_CSSValuePairList: -- return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList; -+ return nsCSSValuePairList::Equal(mValue.mCSSValuePairList, -+ aOther.mValue.mCSSValuePairList); - case eUnit_UnparsedString: - return (NS_strcmp(GetStringBufferValue(), - aOther.GetStringBufferValue()) == 0); Property changes on: head/www/firefox-esr/files/patch-bug1083461 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/firefox-esr/files/patch-bug1021761 =================================================================== --- head/www/firefox-esr/files/patch-bug1021761 (revision 380089) +++ head/www/firefox-esr/files/patch-bug1021761 (revision 380090) @@ -1,1092 +1,1091 @@ diff --git configure.in configure.in index 48e60c0..ec08417 100644 --- configure.in +++ configure.in -@@ -5438,6 +5438,60 @@ fi +@@ -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_DISABLE_BOOL(oss, -+[ --disable-oss Disable OpenSoundSystem support], -+ MOZ_OSS=, -+ MOZ_OSS=1) ++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 -z "$MOZ_OSS_CFLAGS"; then -+ for oss_conf in /etc/oss.conf /usr/local/etc/oss.conf; do -+ if test -e "$oss_conf"; then -+ . "$oss_conf" -+ fi -+ done ++ if test "$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="-I$OSSLIBDIR/include" ++ 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 linux/soundcard.h soundcard.h) ++ MOZ_CHECK_HEADERS(sys/soundcard.h soundcard.h) + + if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \ -+ "$ac_cv_header_linux_soundcard_h" != "yes" -a \ + "$ac_cv_header_soundcard_h" != "yes"; then + AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --disable-ogg --disable-wave --disable-webm.]) + fi + + dnl Assume NetBSD implementation over SunAudio + AC_CHECK_LIB(ossaudio, _oss_ioctl, + [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound") -+ MOZ_OSS_LIBS="-lossaudio"]) ++ 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 ================================== -@@ -5451,12 +5505,23 @@ MOZ_ARG_ENABLE_BOOL(alsa, - MOZ_ALSA=1, - MOZ_ALSA=) - -+MOZ_ARG_DISABLE_BOOL(alsa-dlopen, -+[ --disable-alsa-dlopen Disable runtime linking of libasound.so], -+ DISABLE_LIBASOUND_DLOPEN=1, -+ DISABLE_LIBASOUND_DLOPEN=) -+ - if test -n "$MOZ_ALSA"; then - PKG_CHECK_MODULES(MOZ_ALSA, alsa, , - [echo "$MOZ_ALSA_PKG_ERRORS" - AC_MSG_ERROR([Need alsa for Ogg, Wave or WebM decoding on Linux. Disable with --disable-ogg --disable-wave --disable-webm. (On Ubuntu, you might try installing the package libasound2-dev.)])]) - fi - -+if test -n "$DISABLE_LIBASOUND_DLOPEN"; then -+ AC_DEFINE(DISABLE_LIBASOUND_DLOPEN) -+else -+ MOZ_ALSA_LIBS= -+fi -+ - AC_SUBST(MOZ_ALSA) - - dnl ======================================================== diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS index b441e8a..950d9e5 100644 --- media/libcubeb/AUTHORS +++ media/libcubeb/AUTHORS @@ -4,3 +4,4 @@ Michael Wu 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); @@ -313,10 +360,10 @@ alsa_refill_stream(cubeb_stream * stm) return ERROR; } if (got > 0) { - snd_pcm_sframes_t wrote = snd_pcm_writei(stm->pcm, p, got); + snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); if (wrote == -EPIPE) { - snd_pcm_recover(stm->pcm, wrote, 1); - wrote = snd_pcm_writei(stm->pcm, p, got); + WRAP(snd_pcm_recover)(stm->pcm, wrote, 1); + wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); } assert(wrote >= 0 && wrote == got); stm->write_position += wrote; @@ -342,7 +389,7 @@ alsa_refill_stream(cubeb_stream * stm) /* Fill the remaining buffer with silence to guarantee one full period has been written. */ - snd_pcm_writei(stm->pcm, (char *) p + got, avail - got); + WRAP(snd_pcm_writei)(stm->pcm, (char *) p + got, avail - got); set_timeout(&stm->drain_timeout, buffer_time * 1000); @@ -453,26 +500,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) slave_def = NULL; - r = snd_config_search(root_pcm, "slave", &slave_pcm); + r = WRAP(snd_config_search)(root_pcm, "slave", &slave_pcm); if (r < 0) { return NULL; } - r = snd_config_get_string(slave_pcm, &string); + r = WRAP(snd_config_get_string)(slave_pcm, &string); if (r >= 0) { - r = snd_config_search_definition(lconf, "pcm_slave", string, &slave_def); + r = WRAP(snd_config_search_definition)(lconf, "pcm_slave", string, &slave_def); if (r < 0) { return NULL; } } do { - r = snd_config_search(slave_def ? slave_def : slave_pcm, "pcm", &pcm); + r = WRAP(snd_config_search)(slave_def ? slave_def : slave_pcm, "pcm", &pcm); if (r < 0) { break; } - r = snd_config_get_string(slave_def ? slave_def : slave_pcm, &string); + r = WRAP(snd_config_get_string)(slave_def ? slave_def : slave_pcm, &string); if (r < 0) { break; } @@ -481,7 +528,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) if (r < 0 || r > (int) sizeof(node_name)) { break; } - r = snd_config_search(lconf, node_name, &pcm); + r = WRAP(snd_config_search)(lconf, node_name, &pcm); if (r < 0) { break; } @@ -490,7 +537,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) } while (0); if (slave_def) { - snd_config_delete(slave_def); + WRAP(snd_config_delete)(slave_def); } return NULL; @@ -513,22 +560,22 @@ init_local_config_with_workaround(char const * pcm_name) lconf = NULL; - if (snd_config == NULL) { + if (*WRAP(snd_config) == NULL) { return NULL; } - r = snd_config_copy(&lconf, snd_config); + r = WRAP(snd_config_copy)(&lconf, *WRAP(snd_config)); if (r < 0) { return NULL; } do { - r = snd_config_search_definition(lconf, "pcm", pcm_name, &pcm_node); + r = WRAP(snd_config_search_definition)(lconf, "pcm", pcm_name, &pcm_node); if (r < 0) { break; } - r = snd_config_get_id(pcm_node, &string); + r = WRAP(snd_config_get_id)(pcm_node, &string); if (r < 0) { break; } @@ -537,7 +584,7 @@ init_local_config_with_workaround(char const * pcm_name) if (r < 0 || r > (int) sizeof(node_name)) { break; } - r = snd_config_search(lconf, node_name, &pcm_node); + r = WRAP(snd_config_search)(lconf, node_name, &pcm_node); if (r < 0) { break; } @@ -548,12 +595,12 @@ init_local_config_with_workaround(char const * pcm_name) } /* Fetch the PCM node's type, and bail out if it's not the PulseAudio plugin. */ - r = snd_config_search(pcm_node, "type", &node); + r = WRAP(snd_config_search)(pcm_node, "type", &node); if (r < 0) { break; } - r = snd_config_get_string(node, &string); + r = WRAP(snd_config_get_string)(node, &string); if (r < 0) { break; } @@ -564,18 +611,18 @@ init_local_config_with_workaround(char const * pcm_name) /* Don't clobber an explicit existing handle_underrun value, set it only if it doesn't already exist. */ - r = snd_config_search(pcm_node, "handle_underrun", &node); + r = WRAP(snd_config_search)(pcm_node, "handle_underrun", &node); if (r != -ENOENT) { break; } /* Disable pcm_pulse's asynchronous underrun handling. */ - r = snd_config_imake_integer(&node, "handle_underrun", 0); + r = WRAP(snd_config_imake_integer)(&node, "handle_underrun", 0); if (r < 0) { break; } - r = snd_config_add(pcm_node, node); + r = WRAP(snd_config_add)(pcm_node, node); if (r < 0) { break; } @@ -583,7 +630,7 @@ init_local_config_with_workaround(char const * pcm_name) return lconf; } while (0); - snd_config_delete(lconf); + WRAP(snd_config_delete)(lconf); return NULL; } @@ -595,9 +642,9 @@ alsa_locked_pcm_open(snd_pcm_t ** pcm, snd_pcm_stream_t stream, snd_config_t * l pthread_mutex_lock(&cubeb_alsa_mutex); if (local_config) { - r = snd_pcm_open_lconf(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config); + r = WRAP(snd_pcm_open_lconf)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config); } else { - r = snd_pcm_open(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK); + r = WRAP(snd_pcm_open)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK); } pthread_mutex_unlock(&cubeb_alsa_mutex); @@ -610,7 +657,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm) int r; pthread_mutex_lock(&cubeb_alsa_mutex); - r = snd_pcm_close(pcm); + r = WRAP(snd_pcm_close)(pcm); pthread_mutex_unlock(&cubeb_alsa_mutex); return r; @@ -667,12 +714,65 @@ alsa_init(cubeb ** context, char const * context_name) pthread_attr_t attr; snd_pcm_t * dummy; + void * libasound = NULL; + +#ifndef DISABLE_LIBASOUND_DLOPEN + libasound = dlopen("libasound.so", RTLD_LAZY); + if (!libasound) { + return CUBEB_ERROR; + } + +#define LOAD(x) do { \ + cubeb_##x = dlsym(libasound, #x); \ + if (!cubeb_##x) { \ + dlclose(libasound); \ + return CUBEB_ERROR; \ + } \ + } while(0) + + LOAD(snd_config); + LOAD(snd_config_add); + LOAD(snd_config_copy); + LOAD(snd_config_delete); + LOAD(snd_config_get_id); + LOAD(snd_config_get_string); + LOAD(snd_config_imake_integer); + LOAD(snd_config_search); + LOAD(snd_config_search_definition); + LOAD(snd_lib_error_set_handler); + LOAD(snd_pcm_avail_update); + LOAD(snd_pcm_close); + LOAD(snd_pcm_delay); + LOAD(snd_pcm_drain); + LOAD(snd_pcm_frames_to_bytes); + LOAD(snd_pcm_get_params); + /* snd_pcm_hw_params_alloca is actually a macro */ + /* LOAD(snd_pcm_hw_params_alloca); */ + LOAD(snd_pcm_hw_params_sizeof); + LOAD(snd_pcm_hw_params_any); + LOAD(snd_pcm_hw_params_get_channels_max); + LOAD(snd_pcm_hw_params_get_rate); + LOAD(snd_pcm_hw_params_set_rate_near); + LOAD(snd_pcm_nonblock); + LOAD(snd_pcm_open); + LOAD(snd_pcm_open_lconf); + LOAD(snd_pcm_pause); + LOAD(snd_pcm_poll_descriptors); + LOAD(snd_pcm_poll_descriptors_count); + LOAD(snd_pcm_poll_descriptors_revents); + LOAD(snd_pcm_recover); + LOAD(snd_pcm_set_params); + LOAD(snd_pcm_state); + LOAD(snd_pcm_writei); + +#undef LOAD +#endif assert(context); *context = NULL; pthread_mutex_lock(&cubeb_alsa_mutex); if (!cubeb_alsa_error_handler_set) { - snd_lib_error_set_handler(silent_error_handler); + WRAP(snd_lib_error_set_handler)(silent_error_handler); cubeb_alsa_error_handler_set = 1; } pthread_mutex_unlock(&cubeb_alsa_mutex); @@ -680,6 +780,8 @@ alsa_init(cubeb ** context, char const * context_name) ctx = calloc(1, sizeof(*ctx)); assert(ctx); + ctx->libasound = libasound; + ctx->ops = &alsa_ops; r = pthread_mutex_init(&ctx->mutex, NULL); @@ -729,7 +831,7 @@ alsa_init(cubeb ** context, char const * context_name) config fails with EINVAL, the PA PCM is too old for this workaround. */ if (r == -EINVAL) { pthread_mutex_lock(&cubeb_alsa_mutex); - snd_config_delete(ctx->local_config); + WRAP(snd_config_delete)(ctx->local_config); pthread_mutex_unlock(&cubeb_alsa_mutex); ctx->local_config = NULL; } else if (r >= 0) { @@ -768,9 +870,13 @@ alsa_destroy(cubeb * ctx) pthread_mutex_destroy(&ctx->mutex); free(ctx->fds); + if (ctx->libasound) { + dlclose(ctx->libasound); + } + if (ctx->local_config) { pthread_mutex_lock(&cubeb_alsa_mutex); - snd_config_delete(ctx->local_config); + WRAP(snd_config_delete)(ctx->local_config); pthread_mutex_unlock(&cubeb_alsa_mutex); } @@ -838,7 +944,7 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, return CUBEB_ERROR; } - r = snd_pcm_nonblock(stm->pcm, 1); + r = WRAP(snd_pcm_nonblock)(stm->pcm, 1); assert(r == 0); /* Ugly hack: the PA ALSA plugin allows buffer configurations that can't @@ -848,23 +954,23 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, latency = latency < 500 ? 500 : latency; } - r = snd_pcm_set_params(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, - stm->params.channels, stm->params.rate, 1, - latency * 1000); + r = WRAP(snd_pcm_set_params)(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, + stm->params.channels, stm->params.rate, 1, + latency * 1000); if (r < 0) { alsa_stream_destroy(stm); return CUBEB_ERROR_INVALID_FORMAT; } - r = snd_pcm_get_params(stm->pcm, &stm->buffer_size, &stm->period_size); + r = WRAP(snd_pcm_get_params)(stm->pcm, &stm->buffer_size, &stm->period_size); assert(r == 0); - stm->nfds = snd_pcm_poll_descriptors_count(stm->pcm); + stm->nfds = WRAP(snd_pcm_poll_descriptors_count)(stm->pcm); assert(stm->nfds > 0); stm->saved_fds = calloc(stm->nfds, sizeof(struct pollfd)); assert(stm->saved_fds); - r = snd_pcm_poll_descriptors(stm->pcm, stm->saved_fds, stm->nfds); + r = WRAP(snd_pcm_poll_descriptors)(stm->pcm, stm->saved_fds, stm->nfds); assert((nfds_t) r == stm->nfds); r = pthread_cond_init(&stm->cond, NULL); @@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) return CUBEB_ERROR; } - rv = snd_pcm_hw_params_any(stm->pcm, hw_params); + rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); if (rv < 0) { return CUBEB_ERROR; } - rv = snd_pcm_hw_params_get_channels_max(hw_params, max_channels); + rv = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels); if (rv < 0) { return CUBEB_ERROR; } @@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { /* get a pcm, disabling resampling, so we get a rate the * hardware/dmix/pulse/etc. supports. */ - rv = snd_pcm_open(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); + rv = WRAP(snd_pcm_open)(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); if (rv < 0) { return CUBEB_ERROR; } - rv = snd_pcm_hw_params_any(pcm, hw_params); + rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); if (rv < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - rv = snd_pcm_hw_params_get_rate(hw_params, rate, &dir); + rv = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir); if (rv >= 0) { /* There is a default rate: use it. */ - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */ *rate = 44100; - rv = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL); + rv = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL); if (rv < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } @@ -1013,7 +1119,7 @@ alsa_stream_start(cubeb_stream * stm) ctx = stm->context; pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 0); + WRAP(snd_pcm_pause)(stm->pcm, 0); gettimeofday(&stm->last_activity, NULL); pthread_mutex_unlock(&stm->mutex); @@ -1047,7 +1153,7 @@ alsa_stream_stop(cubeb_stream * stm) pthread_mutex_unlock(&ctx->mutex); pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 1); + WRAP(snd_pcm_pause)(stm->pcm, 1); pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1063,8 +1169,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) pthread_mutex_lock(&stm->mutex); delay = -1; - if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING || - snd_pcm_delay(stm->pcm, &delay) != 0) { + if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING || + WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) { *position = stm->last_position; pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1089,7 +1195,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) snd_pcm_sframes_t delay; /* This function returns the delay in frames until a frame written using snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */ - if (snd_pcm_delay(stm->pcm, &delay)) { + if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) { return CUBEB_ERROR; } diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c new file mode 100644 index 0000000..5e38e27 --- /dev/null +++ media/libcubeb/src/cubeb_oss.c -@@ -0,0 +1,399 @@ +@@ -0,0 +1,397 @@ +/* + * 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 -+#elif defined(HAVE_LINUX_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 +}; 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/Makefile.in media/webrtc/signaling/test/Makefile.in +index 991f03f..3d99eb5 100644 +--- media/webrtc/signaling/test/Makefile.in ++++ media/webrtc/signaling/test/Makefile.in +@@ -26,9 +26,9 @@ ifdef JS_SHARED_LIBRARY + LIBS += $(MOZ_JS_LIBS) + endif + +-ifdef MOZ_ALSA ++ifdef MOZ_OSS + LIBS += \ +- $(MOZ_ALSA_LIBS) \ ++ $(MOZ_OSS_LIBS) \ + $(NULL) + endif + diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk index e191f13..4fb268a 100644 --- toolkit/library/libxul.mk +++ toolkit/library/libxul.mk -@@ -146,6 +146,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32 +@@ -146,9 +146,9 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32 endif endif +-ifdef MOZ_ALSA +-EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS) +-endif +ifdef MOZ_OSS +EXTRA_DSO_LDOPTS += $(MOZ_OSS_LIBS) +endif -+ - ifdef MOZ_ALSA - EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS) - endif + + ifdef HAVE_CLOCK_MONOTONIC + EXTRA_DSO_LDOPTS += $(REALTIME_LIBS) Index: head/www/firefox-esr/files/patch-bug991253 =================================================================== --- head/www/firefox-esr/files/patch-bug991253 (revision 380089) +++ head/www/firefox-esr/files/patch-bug991253 (revision 380090) @@ -1,15 +1,17 @@ --- extensions/spellcheck/hunspell/src/mozHunspell.cpp~ +++ extensions/spellcheck/hunspell/src/mozHunspell.cpp -@@ -400,6 +400,12 @@ mozHunspell::LoadDictionaryList() +@@ -400,6 +400,14 @@ mozHunspell::LoadDictionaryList(bool aNo } } + // load system hunspell dictionaries -+ nsIFile* hunDir; ++ nsCOMPtr hunDir; + NS_NewNativeLocalFile(NS_LITERAL_CSTRING("%%LOCALBASE%%/share/hunspell"), -+ true, &hunDir); -+ LoadDictionariesFromDir(hunDir); ++ true, getter_AddRefs(hunDir)); ++ if (hunDir) { ++ LoadDictionariesFromDir(hunDir); ++ } + // find dictionaries from extensions requiring restart nsCOMPtr dictDirs; rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY_LIST, Index: head/www/firefox-esr-i18n/Makefile =================================================================== --- head/www/firefox-esr-i18n/Makefile (revision 380089) +++ head/www/firefox-esr-i18n/Makefile (revision 380090) @@ -1,89 +1,89 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= firefox -PORTVERSION= 31.4.0 +PORTVERSION= 31.5.0 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${PORTVERSION}esr/linux-i686/xpi PKGNAMEPREFIX= PKGNAMESUFFIX= -esr-i18n DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} MAINTAINER= gecko@FreeBSD.org COMMENT= Localized interface for Firefox EXTRACT_DEPENDS= zip:${PORTSDIR}/archivers/zip USES= zip:infozip gecko:firefox,build USE_XPI= firefox NO_ARCH= yes USE_SUBMAKE= yes WDIR= langpack-*@firefox.mozilla.org XPI_DISTNAMES= ${FIREFOX_I18N_} PLIST?= ${WRKDIR}/plist PLISTF?= ${WRKDIR}/plist_files .include "${.CURDIR}/Makefile.option" .include .ifndef WITHOUT_SWITCHER RUN_DEPENDS+= xpi-quick-locale-switcher>=0:${PORTSDIR}/www/xpi-quick-locale-switcher .endif .include "${.CURDIR}/Makefile.lang" FIREFOX_I18N_?= ${FIREFOX_I18N} .for dist in ${XPI_DISTNAMES} XPI_ID_${dist}= langpack-${dist}@firefox.mozilla.org .endfor pre-everything:: @${ECHO_CMD} @${ECHO_CMD} "Please define FIREFOX_I18N_ALL to install all languages." @${ECHO_CMD} do-extract: @${MKDIR} ${WRKSRC} @for lang in ${FIREFOX_I18N_}; do \ if ! (${UNZIP_CMD} -qo ${_DISTDIR}/$$lang.xpi -d ${WRKSRC}/langpack-$$lang@firefox.mozilla.org);\ then \ exit 1; \ fi; \ cd ${WRKSRC}/langpack-$$lang@firefox.mozilla.org/; \ ${FIND} -H -s * ! -type d | \ ${SED} -e "s|^|lib/xpi/langpack-$$lang@firefox.mozilla.org/|" >> ${PLISTF}; \ done ${CAT} ${PLISTF} | ${SORT} >> ${PLIST} do-install: @${MKDIR} ${STAGEDIR}${XPI_LIBDIR} ${STAGEDIR}${XPI_SLDIRS_ALL} cd ${WRKSRC}; ${PAX} -rw . ${STAGEDIR}${XPI_LIBDIR} ${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${WDIR}/ @for e in ${STAGEDIR}${XPI_LIBDIR}/${WDIR}; do \ for _dir in ${XPI_LINKFARMS} ; do \ ${LN} -sf $${_e##*/} ${STAGEDIR}$$_dir/ ${_Q} ; \ done \ done @${ECHO_CMD} '@exec ${INSTALL} -d ${XPI_SLDIRS_ALL:S,^${PREFIX},%D,}' ${_A} @${ECHO_CMD} '@exec for _dir in ${XPI_LINKFARMS} ; { \ ${LN} -sf ${XPI_LIBDIR}/${WDIR} $$_dir/ ${_Q}; }' ${_A} @${ECHO_CMD} '@unexec for _dir in ${XPI_LINKFARMS} ${XPI_LIBDIR}; { ${RM} -f $$_dir/${WDIR} ; }' ${_A} post-patch: ${FIND} ${WRKSRC} -name install.rdf -print0 | \ ${XARGS} -0L1 ${REINPLACE_CMD} -i '' -e '/ Index: head/www/firefox-esr-i18n/distinfo =================================================================== --- head/www/firefox-esr-i18n/distinfo (revision 380089) +++ head/www/firefox-esr-i18n/distinfo (revision 380090) @@ -1,178 +1,178 @@ -SHA256 (xpi/firefox-31.4.0/ach.xpi) = eaf510e73f33ad3fd49721d0719af7af12ce2c6a098c73acb1f2e93c5c121245 -SIZE (xpi/firefox-31.4.0/ach.xpi) = 445326 -SHA256 (xpi/firefox-31.4.0/af.xpi) = 34a5f759cd26ccb76cb1031dbdeec3b515d8ce2da9222eae38b0c661bc074db5 -SIZE (xpi/firefox-31.4.0/af.xpi) = 431089 -SHA256 (xpi/firefox-31.4.0/an.xpi) = fbd7d57eca4a3d4e9b72308e80968b1a10f918b3a700d4f090e8695ff5e7af2f -SIZE (xpi/firefox-31.4.0/an.xpi) = 407150 -SHA256 (xpi/firefox-31.4.0/ar.xpi) = 2b5485dc797ac8fb1c32f507a75320250ab6b75a9eb49cb921d2f25b33a62e19 -SIZE (xpi/firefox-31.4.0/ar.xpi) = 459824 -SHA256 (xpi/firefox-31.4.0/as.xpi) = 82e3ab2e0e1757122918d8791f1f047c89b926f0a5cf83630bc968d5fce0478e -SIZE (xpi/firefox-31.4.0/as.xpi) = 448568 -SHA256 (xpi/firefox-31.4.0/ast.xpi) = 9c664b96c48a3e6f81332fc5ea48d924385ff62625f1c919202190dc1ef10b0f -SIZE (xpi/firefox-31.4.0/ast.xpi) = 352341 -SHA256 (xpi/firefox-31.4.0/be.xpi) = 333fc40ffe93242e0b95d12189a92909357255cf8e219d533427b811e2eb486b -SIZE (xpi/firefox-31.4.0/be.xpi) = 378668 -SHA256 (xpi/firefox-31.4.0/bg.xpi) = bcd996534b770549fd63eb3dbf2095f6bd529089f14a63b6122dcc79b182ccad -SIZE (xpi/firefox-31.4.0/bg.xpi) = 438060 -SHA256 (xpi/firefox-31.4.0/bn-BD.xpi) = 32917acf9307d65b36812c8eeea6d37bf57410a99bae9a0d7493b71796cf60e2 -SIZE (xpi/firefox-31.4.0/bn-BD.xpi) = 472626 -SHA256 (xpi/firefox-31.4.0/bn-IN.xpi) = ba061044a27ec45abe9d758ef0b2ef9bb2ec9235129312e5cf87af8b9e3a4caf -SIZE (xpi/firefox-31.4.0/bn-IN.xpi) = 462593 -SHA256 (xpi/firefox-31.4.0/br.xpi) = 06eec86c4d63ab6c24f7b9d4d60737c47f44196140eb4abeae819101db4a3d63 -SIZE (xpi/firefox-31.4.0/br.xpi) = 389704 -SHA256 (xpi/firefox-31.4.0/bs.xpi) = ba1e18761c4bd7345ed6123e5294c5a989a0d3038583197387e2751a08f8af4f -SIZE (xpi/firefox-31.4.0/bs.xpi) = 429014 -SHA256 (xpi/firefox-31.4.0/ca.xpi) = 8bf21f315464405dc1637bcf242039c58e699920ae5f7b0381ff7408d65578c5 -SIZE (xpi/firefox-31.4.0/ca.xpi) = 403575 -SHA256 (xpi/firefox-31.4.0/cs.xpi) = c6169462993492a9241a29ce7cf540be7eb1bbb3673e3a5aec4b9864941571e8 -SIZE (xpi/firefox-31.4.0/cs.xpi) = 390978 -SHA256 (xpi/firefox-31.4.0/csb.xpi) = a953c8819c530cae9e6da1e9dd92df2b98e9a750a2eb09edce0f807ff960fa54 -SIZE (xpi/firefox-31.4.0/csb.xpi) = 383695 -SHA256 (xpi/firefox-31.4.0/cy.xpi) = 1f7989a40d0188a09828c6a555437b54a511d187dba68a92b0b72f8566117437 -SIZE (xpi/firefox-31.4.0/cy.xpi) = 390727 -SHA256 (xpi/firefox-31.4.0/da.xpi) = 9cd79d770c885189f412bd7baf10e9bd4d6701aae7b88635b085b14ef05d6603 -SIZE (xpi/firefox-31.4.0/da.xpi) = 397746 -SHA256 (xpi/firefox-31.4.0/de.xpi) = e665b67984419485d1cba9a9107004202fd2d9982cefc3dff9b462cdc003fc0e -SIZE (xpi/firefox-31.4.0/de.xpi) = 395164 -SHA256 (xpi/firefox-31.4.0/el.xpi) = 860ba409522d5d4b4b143970111792f44cc93b8fcd27c02b91cae319ef08cc8f -SIZE (xpi/firefox-31.4.0/el.xpi) = 442982 -SHA256 (xpi/firefox-31.4.0/en-GB.xpi) = e25f6614fee9063bf579da05dd09be43f1d5bc7fa0909e90e1547515cd7a767f -SIZE (xpi/firefox-31.4.0/en-GB.xpi) = 390118 -SHA256 (xpi/firefox-31.4.0/en-US.xpi) = 5f0e3e05ae6e1775b84a6132df791e7802063d4500c550207506bce76bc585fb -SIZE (xpi/firefox-31.4.0/en-US.xpi) = 422787 -SHA256 (xpi/firefox-31.4.0/en-ZA.xpi) = 7ac9fa92955e8a2eaf75df49c746f39503a803497d238115e821cf2ac01470bc -SIZE (xpi/firefox-31.4.0/en-ZA.xpi) = 388528 -SHA256 (xpi/firefox-31.4.0/eo.xpi) = 140a9f23ed9b16c635c425784b0d2841389595ce04d46e720991dcb782eeacd2 -SIZE (xpi/firefox-31.4.0/eo.xpi) = 431831 -SHA256 (xpi/firefox-31.4.0/es-AR.xpi) = 7a56a6511bb7376e69517acd4756433a94810e7bc8aa29a437b1a30e06a0196e -SIZE (xpi/firefox-31.4.0/es-AR.xpi) = 399937 -SHA256 (xpi/firefox-31.4.0/es-CL.xpi) = 2f35d2f6dc142b17c0a4dbdcbc25306987e1c96b414552ffa4dea5cd9e889f18 -SIZE (xpi/firefox-31.4.0/es-CL.xpi) = 342807 -SHA256 (xpi/firefox-31.4.0/es-ES.xpi) = 874cc019780ed64f6fe26f4a4610c7bfabce00d34828086f5a432b00009be76d -SIZE (xpi/firefox-31.4.0/es-ES.xpi) = 335880 -SHA256 (xpi/firefox-31.4.0/es-MX.xpi) = ed7048153c6d29758a7d2babd4ce35acf6b294b44f4965fa702311f3877b4f35 -SIZE (xpi/firefox-31.4.0/es-MX.xpi) = 402672 -SHA256 (xpi/firefox-31.4.0/et.xpi) = 17b4970b804ff9197f7bbca7e0b2635e5ecabee36c683f1f47e83e60fcc37dae -SIZE (xpi/firefox-31.4.0/et.xpi) = 390360 -SHA256 (xpi/firefox-31.4.0/eu.xpi) = 3e887cc4f1a6c738c44fcdb24333d5c8e24bf8db15b6cfa45cfc8cce1cb6dd7c -SIZE (xpi/firefox-31.4.0/eu.xpi) = 412999 -SHA256 (xpi/firefox-31.4.0/fa.xpi) = 5ba57b2765304f4131a9ec5e4bfa6251ddd5457d548faae629506e3a1ee04f3b -SIZE (xpi/firefox-31.4.0/fa.xpi) = 460857 -SHA256 (xpi/firefox-31.4.0/ff.xpi) = c1b9a05135b5146f72b48bafdd75c990fd127713d6ee2ca084993a3794524484 -SIZE (xpi/firefox-31.4.0/ff.xpi) = 400143 -SHA256 (xpi/firefox-31.4.0/fi.xpi) = 3abceaefeca0740fdd6f4d491ad526d66d33ee2f77fe357b85a140281a58c86e -SIZE (xpi/firefox-31.4.0/fi.xpi) = 392739 -SHA256 (xpi/firefox-31.4.0/fr.xpi) = 5f97738be7748ee58bb7cd89dd1a4383980942a75f5c81a0f5c8aef7a17cb977 -SIZE (xpi/firefox-31.4.0/fr.xpi) = 406462 -SHA256 (xpi/firefox-31.4.0/fy-NL.xpi) = 21d35be7f279d49a140f810661bc6ef9527d79af8aee2fe2c9913fe3444e92e7 -SIZE (xpi/firefox-31.4.0/fy-NL.xpi) = 401930 -SHA256 (xpi/firefox-31.4.0/ga-IE.xpi) = 5c4c1c8531cba4c8e8962a0d3a892cc8fcd5d0005454d066dba6061bac5c04cc -SIZE (xpi/firefox-31.4.0/ga-IE.xpi) = 410077 -SHA256 (xpi/firefox-31.4.0/gd.xpi) = 307042204493f3410c4e06bc7e3df3502601b6c231ce1d690ae7c6c7cd822518 -SIZE (xpi/firefox-31.4.0/gd.xpi) = 403013 -SHA256 (xpi/firefox-31.4.0/gl.xpi) = b7ec758f0f7bb41d4aa4d99a5cec824a2cc6e9b5670993776fb54b658ee4367e -SIZE (xpi/firefox-31.4.0/gl.xpi) = 390599 -SHA256 (xpi/firefox-31.4.0/gu-IN.xpi) = 2700cb21e08d9e5202f865cd3862aec4ea1d7e0b0eeeef4fc0704d1b16212fe2 -SIZE (xpi/firefox-31.4.0/gu-IN.xpi) = 423503 -SHA256 (xpi/firefox-31.4.0/he.xpi) = f79e2044152c07d89b3ea5ac6af5f3b945c013abf5d06d260afe78b6a5dfa982 -SIZE (xpi/firefox-31.4.0/he.xpi) = 427629 -SHA256 (xpi/firefox-31.4.0/hi-IN.xpi) = d31ced4c55ef36dc2c95289672e3be51c6f355fd01cb397ab7a1ad077ab924ed -SIZE (xpi/firefox-31.4.0/hi-IN.xpi) = 441402 -SHA256 (xpi/firefox-31.4.0/hr.xpi) = 2d9e8788031f34820f2f14732d120f7394696be7e32de2fd9a3f51f7e59e277b -SIZE (xpi/firefox-31.4.0/hr.xpi) = 424371 -SHA256 (xpi/firefox-31.4.0/hsb.xpi) = 64114e8edc46d8bb6ef198b864fa5d09dcc2b308b330f1d9f735af04a66733c6 -SIZE (xpi/firefox-31.4.0/hsb.xpi) = 413076 -SHA256 (xpi/firefox-31.4.0/hu.xpi) = 6e0383b7f7ec4d347e500dcb2471e8eb0a46e957899748df67c9580c18eaa0c5 -SIZE (xpi/firefox-31.4.0/hu.xpi) = 398644 -SHA256 (xpi/firefox-31.4.0/hy-AM.xpi) = 5b552c09afda8cf41863651f5807d002b13862d4970dd0fe3d4f0d550c52d771 -SIZE (xpi/firefox-31.4.0/hy-AM.xpi) = 478743 -SHA256 (xpi/firefox-31.4.0/id.xpi) = 3bdad0e38016f00b2077cffb88106f9c4d335b59b3042e2a5fa48bbfb3725710 -SIZE (xpi/firefox-31.4.0/id.xpi) = 378301 -SHA256 (xpi/firefox-31.4.0/is.xpi) = c1ed7c67f4eb9042d521e6a505debf2dc9abf849053762bb98a232bf56e6caa4 -SIZE (xpi/firefox-31.4.0/is.xpi) = 427327 -SHA256 (xpi/firefox-31.4.0/it.xpi) = a3173fd2f42dcb584206d8cfe04b3441feaa97f0dad4c5c42a1c2408ebc4ef97 -SIZE (xpi/firefox-31.4.0/it.xpi) = 330905 -SHA256 (xpi/firefox-31.4.0/ja.xpi) = 1d6012d6ae351215634a5b39314817b3c9ce0f9a1fd1eb8ed0a437cc08c07945 -SIZE (xpi/firefox-31.4.0/ja.xpi) = 421665 -SHA256 (xpi/firefox-31.4.0/kk.xpi) = 04a6cf1a1f6b2ed64a32477f47b4a7c110ec7c4dbb32c085553d95976a4fc580 -SIZE (xpi/firefox-31.4.0/kk.xpi) = 439116 -SHA256 (xpi/firefox-31.4.0/km.xpi) = 352dfc8dc592dc251f29e0717aae7cac1e924a86a705462f5121e2cbaac91223 -SIZE (xpi/firefox-31.4.0/km.xpi) = 506476 -SHA256 (xpi/firefox-31.4.0/kn.xpi) = c781c7ee43b1c0a6b2a6dd39a12cfc2b4f75c40fd59caf809491c5452a97c11f -SIZE (xpi/firefox-31.4.0/kn.xpi) = 458890 -SHA256 (xpi/firefox-31.4.0/ko.xpi) = 9734356ee4dca8ae385f4018f8746740408108b0ccd33154dd6d1dab58fcab97 -SIZE (xpi/firefox-31.4.0/ko.xpi) = 402815 -SHA256 (xpi/firefox-31.4.0/ku.xpi) = 08303c5f66ae6abdc4bf5d2b292bddfa3f03389fdc8ba69ccb47969cf84e982a -SIZE (xpi/firefox-31.4.0/ku.xpi) = 420263 -SHA256 (xpi/firefox-31.4.0/lij.xpi) = 0c7c5a7362f2b331cbc94a1b7236cf5c3cc6f91240df19f8aa22cd4d49df5183 -SIZE (xpi/firefox-31.4.0/lij.xpi) = 385867 -SHA256 (xpi/firefox-31.4.0/lt.xpi) = dc22c989978418d9507879c29c7799948472ff759ea09c3ebb743b5c4e372980 -SIZE (xpi/firefox-31.4.0/lt.xpi) = 435431 -SHA256 (xpi/firefox-31.4.0/lv.xpi) = c2837a25ce4a7439edad27e1731ed93edcd82c6048720252e730e0b8c6be3c9e -SIZE (xpi/firefox-31.4.0/lv.xpi) = 398576 -SHA256 (xpi/firefox-31.4.0/mai.xpi) = 48d5da0525a87d2f19e5f93e7b11eda3f5670e2d809d81df5f827e26c06a663d -SIZE (xpi/firefox-31.4.0/mai.xpi) = 444885 -SHA256 (xpi/firefox-31.4.0/mk.xpi) = 5023557cbe6163c3682242bf18cb5a2db3c3ad26b95b5a0e286bbcbb2e3d5a39 -SIZE (xpi/firefox-31.4.0/mk.xpi) = 475483 -SHA256 (xpi/firefox-31.4.0/ml.xpi) = c89ccdbec76470196ef0bd51bbc9c983b0d84fbfe975bd71a4687265d6e706ed -SIZE (xpi/firefox-31.4.0/ml.xpi) = 466254 -SHA256 (xpi/firefox-31.4.0/mr.xpi) = 2bb0951c07dda8d41170f49596c30087d5c183879369fe9519d7856b5a0f74dd -SIZE (xpi/firefox-31.4.0/mr.xpi) = 451291 -SHA256 (xpi/firefox-31.4.0/ms.xpi) = f5aba922e5f338f86794621a235f99efdffe23f11dfd0d0723f1a1fb78d6905a -SIZE (xpi/firefox-31.4.0/ms.xpi) = 436230 -SHA256 (xpi/firefox-31.4.0/nb-NO.xpi) = 27ef5afaf0963935f04640c0080e1ad5fc25141cb952186416418208f3474ebe -SIZE (xpi/firefox-31.4.0/nb-NO.xpi) = 392005 -SHA256 (xpi/firefox-31.4.0/nl.xpi) = 3b63800651c2b04b98d792cfcf602d0fe5b975732548dacb741ad810d4e8053c -SIZE (xpi/firefox-31.4.0/nl.xpi) = 390885 -SHA256 (xpi/firefox-31.4.0/nn-NO.xpi) = 2b473f58363066d97d2c7e3fcc29b80a1c62e3a9d45f4976c161f04f5e869e6e -SIZE (xpi/firefox-31.4.0/nn-NO.xpi) = 386281 -SHA256 (xpi/firefox-31.4.0/or.xpi) = 70fc92f01226409b3400d6d8c52d8c89aee87a0b5ff5867f1930d5986a951f0b -SIZE (xpi/firefox-31.4.0/or.xpi) = 464749 -SHA256 (xpi/firefox-31.4.0/pa-IN.xpi) = d562cafe45680ce2580fee8b4ffea35bacc26358317e4c873fc2bd8fa781b9c4 -SIZE (xpi/firefox-31.4.0/pa-IN.xpi) = 439326 -SHA256 (xpi/firefox-31.4.0/pl.xpi) = 9eb18afba43725b57e71fe4c2d69c454561786dfa914e3bf153415585646f115 -SIZE (xpi/firefox-31.4.0/pl.xpi) = 374747 -SHA256 (xpi/firefox-31.4.0/pt-BR.xpi) = d156484914f929a8cc2acaa76bb0714cd302ed8f9f677b12176470715142a294 -SIZE (xpi/firefox-31.4.0/pt-BR.xpi) = 405565 -SHA256 (xpi/firefox-31.4.0/pt-PT.xpi) = 74408f5c2a7e7d097274501b1bc1c0f4da67455191dbbf6d5e8fc28eab47b155 -SIZE (xpi/firefox-31.4.0/pt-PT.xpi) = 386344 -SHA256 (xpi/firefox-31.4.0/rm.xpi) = 056579048789796082bb1412bf627c6f4b395a8369b26bf9d5d13a33349fe0ea -SIZE (xpi/firefox-31.4.0/rm.xpi) = 399285 -SHA256 (xpi/firefox-31.4.0/ro.xpi) = 21258fecd09254fff0b0410fb1152a0ca84a6095bae6e7f828e6de585bf795ac -SIZE (xpi/firefox-31.4.0/ro.xpi) = 439387 -SHA256 (xpi/firefox-31.4.0/ru.xpi) = a9bdb4ba53972476d6a556af977ad05b9f2b650c63a49e74009cf76c43d55993 -SIZE (xpi/firefox-31.4.0/ru.xpi) = 367898 -SHA256 (xpi/firefox-31.4.0/si.xpi) = 13b0725e8c837f770b4099b61d8618e5287ab7a6008ff5bde5cff7fb41a51b81 -SIZE (xpi/firefox-31.4.0/si.xpi) = 463223 -SHA256 (xpi/firefox-31.4.0/sk.xpi) = a6f1883319357a76df8516a446e2e952033e50e4ffe8097c723efeeeaba78d8c -SIZE (xpi/firefox-31.4.0/sk.xpi) = 413802 -SHA256 (xpi/firefox-31.4.0/sl.xpi) = a531e61e52de28b107fe869083e2b9b6da7c2fe625e4b630784317401c6010ef -SIZE (xpi/firefox-31.4.0/sl.xpi) = 387134 -SHA256 (xpi/firefox-31.4.0/son.xpi) = 63975c7e789feb3d2340796cc321cd50337527dd730226a0b2d32026a0bfddf9 -SIZE (xpi/firefox-31.4.0/son.xpi) = 395143 -SHA256 (xpi/firefox-31.4.0/sq.xpi) = fdfda585f433b3c23139918480d32379a1c5723794c61448e4d530889108d0de -SIZE (xpi/firefox-31.4.0/sq.xpi) = 431136 -SHA256 (xpi/firefox-31.4.0/sr.xpi) = d564522188b570c9214744bcbf51c8357a6796a03f4e3cab195672fa5c5c5eff -SIZE (xpi/firefox-31.4.0/sr.xpi) = 425902 -SHA256 (xpi/firefox-31.4.0/sv-SE.xpi) = 3b175344594b94d110ec34eb04b9c6f3cfc135acc658aa76141415959b7b7c86 -SIZE (xpi/firefox-31.4.0/sv-SE.xpi) = 399026 -SHA256 (xpi/firefox-31.4.0/ta.xpi) = b2753f3f79464a36ae59ab74340123b55990485baca34737e837135f649889e3 -SIZE (xpi/firefox-31.4.0/ta.xpi) = 447685 -SHA256 (xpi/firefox-31.4.0/te.xpi) = 3f59b97750297c3db28b6207886e71e01c3ad19aa79c99211b3b40068576e34c -SIZE (xpi/firefox-31.4.0/te.xpi) = 462591 -SHA256 (xpi/firefox-31.4.0/th.xpi) = 693c09e4ca32fda0881b10a4463cd988819265f0717045f5f88c9dc0289d6cc2 -SIZE (xpi/firefox-31.4.0/th.xpi) = 478126 -SHA256 (xpi/firefox-31.4.0/tr.xpi) = c1409656574e67fdb932355086e03034d2778d7cdc5df3c9a8d96b226dffc850 -SIZE (xpi/firefox-31.4.0/tr.xpi) = 417370 -SHA256 (xpi/firefox-31.4.0/uk.xpi) = 6cd816e4e376e4ddc5bfd85d256c0adeeb8a714079322b92153063d0daacf3a4 -SIZE (xpi/firefox-31.4.0/uk.xpi) = 428002 -SHA256 (xpi/firefox-31.4.0/vi.xpi) = d3bd923639008d8fe12a6da6b586440443124bc91b9dd4574afa43f370a142e3 -SIZE (xpi/firefox-31.4.0/vi.xpi) = 413374 -SHA256 (xpi/firefox-31.4.0/xh.xpi) = cb82450d18c1f0b46fd036f08bbd18e534a2d0a4c7925f91b88d85206d5770c1 -SIZE (xpi/firefox-31.4.0/xh.xpi) = 397876 -SHA256 (xpi/firefox-31.4.0/zh-CN.xpi) = 68e5448ae679e9f82feb260c8c96ce9fe07a86528b9bb926f20f5692507a9c82 -SIZE (xpi/firefox-31.4.0/zh-CN.xpi) = 419629 -SHA256 (xpi/firefox-31.4.0/zh-TW.xpi) = 6a34241237e8252aa087c5a8d665086d1638f437bea4061bd26ac3bfcee3e6f6 -SIZE (xpi/firefox-31.4.0/zh-TW.xpi) = 412520 -SHA256 (xpi/firefox-31.4.0/zu.xpi) = 7277fd8f5c8491ccf9a895c7534b2cf86fb0672a5c88bfa71948d19cd4e2ea24 -SIZE (xpi/firefox-31.4.0/zu.xpi) = 433215 +SHA256 (xpi/firefox-31.5.0/ach.xpi) = bb108dcfd450711eac124a0a208dbd9b0233becbe8f452465f187cd45db19eb2 +SIZE (xpi/firefox-31.5.0/ach.xpi) = 445326 +SHA256 (xpi/firefox-31.5.0/af.xpi) = 5d13a0a807adead46287bfee0ce51ecc0291f403d4bb162e0e8258af63281cb7 +SIZE (xpi/firefox-31.5.0/af.xpi) = 431090 +SHA256 (xpi/firefox-31.5.0/an.xpi) = ac2df1c3df8899f713688dda5b12afbf48b226b402c4260bf2ecf6685bcb163a +SIZE (xpi/firefox-31.5.0/an.xpi) = 407151 +SHA256 (xpi/firefox-31.5.0/ar.xpi) = 4deefc0cf5ab90e8e012100275ba52312ba7c343c5a7801a7b54a203ca0e12a5 +SIZE (xpi/firefox-31.5.0/ar.xpi) = 459824 +SHA256 (xpi/firefox-31.5.0/as.xpi) = 39780a44a154a1d32485187e1a1ab3cf49acd8c5e1a3822f1c858a756d4bc260 +SIZE (xpi/firefox-31.5.0/as.xpi) = 448569 +SHA256 (xpi/firefox-31.5.0/ast.xpi) = d23a9f445754ba33bb824428269c161fdc7c6a81d50fe85bdeac9f2b260f9d02 +SIZE (xpi/firefox-31.5.0/ast.xpi) = 352341 +SHA256 (xpi/firefox-31.5.0/be.xpi) = 9d28c4dded235338bf5deabea755ccd777c1f808ea42d4bed1a7bdf2c15261f5 +SIZE (xpi/firefox-31.5.0/be.xpi) = 378668 +SHA256 (xpi/firefox-31.5.0/bg.xpi) = a081bf35b8698f16613e43dc04e0b635dc6dded553b6c821233d93cf698422eb +SIZE (xpi/firefox-31.5.0/bg.xpi) = 438061 +SHA256 (xpi/firefox-31.5.0/bn-BD.xpi) = d47f2a963273a63205c961b5c61a7ded439c2e5368a0d4d7fb367332e3714b92 +SIZE (xpi/firefox-31.5.0/bn-BD.xpi) = 472626 +SHA256 (xpi/firefox-31.5.0/bn-IN.xpi) = 04bc2735ef83319bf80f73c57d843ce142a3ba6464ed923110bd661f30913ec7 +SIZE (xpi/firefox-31.5.0/bn-IN.xpi) = 462593 +SHA256 (xpi/firefox-31.5.0/br.xpi) = e236e2e5296726958ca4bd269c7efe5b1a21bf6a64045779fdd947bda2b03b2b +SIZE (xpi/firefox-31.5.0/br.xpi) = 389704 +SHA256 (xpi/firefox-31.5.0/bs.xpi) = 61e626f2d52e435b783bbb725dda2a676db04c1b7f86c25f149b00e9b8aa7678 +SIZE (xpi/firefox-31.5.0/bs.xpi) = 429014 +SHA256 (xpi/firefox-31.5.0/ca.xpi) = 74e748eba11a0a0bf173fa141b2e0fdb542fb5a5240e54e8d758dfca46345cd2 +SIZE (xpi/firefox-31.5.0/ca.xpi) = 403575 +SHA256 (xpi/firefox-31.5.0/cs.xpi) = e4ceaf7e2cbf4a49f62060ebf2748984dcb2391a9be113164099bed81c40f64e +SIZE (xpi/firefox-31.5.0/cs.xpi) = 390979 +SHA256 (xpi/firefox-31.5.0/csb.xpi) = 22ad1bc902f2bedffc2b032340329e88e6ce06ee78b41aaf14d4d00795fc1363 +SIZE (xpi/firefox-31.5.0/csb.xpi) = 383695 +SHA256 (xpi/firefox-31.5.0/cy.xpi) = a8f504501340ec111d34bba386100a13aebdbfe6639808437b2ed3040cc2e232 +SIZE (xpi/firefox-31.5.0/cy.xpi) = 390727 +SHA256 (xpi/firefox-31.5.0/da.xpi) = 2c06911b5b26bf0c9d3726767982d342c8eb7035af38968650e3f0f0278c956c +SIZE (xpi/firefox-31.5.0/da.xpi) = 397747 +SHA256 (xpi/firefox-31.5.0/de.xpi) = 145539d062ab10f10887ff3da2f52b0a9bcc54370e96a28821832a14107caabd +SIZE (xpi/firefox-31.5.0/de.xpi) = 395164 +SHA256 (xpi/firefox-31.5.0/el.xpi) = edc0d38a9716d8dc49359f40d8496ecf901d188b179a7b7ab31fba06c5cb934c +SIZE (xpi/firefox-31.5.0/el.xpi) = 442982 +SHA256 (xpi/firefox-31.5.0/en-GB.xpi) = 12c790bbdead3064d79e608a60a33e9f5347fe2ab29e54291763e7a8f7e165c4 +SIZE (xpi/firefox-31.5.0/en-GB.xpi) = 390118 +SHA256 (xpi/firefox-31.5.0/en-US.xpi) = 26e7c22992638d6108eafd0262021b1433ac52536e1f0d260f474c397aea9e50 +SIZE (xpi/firefox-31.5.0/en-US.xpi) = 422788 +SHA256 (xpi/firefox-31.5.0/en-ZA.xpi) = f9176710ce19f03d6b96d10e90da740f3aa78c84377fdf645ab24a169b0c34a7 +SIZE (xpi/firefox-31.5.0/en-ZA.xpi) = 388528 +SHA256 (xpi/firefox-31.5.0/eo.xpi) = d022de2cd3425cf0874dd2601c766c3a0822dc05263e5bc6813efdcae83d350a +SIZE (xpi/firefox-31.5.0/eo.xpi) = 431831 +SHA256 (xpi/firefox-31.5.0/es-AR.xpi) = cd4e5d7dc39297bd083654db6885947b9f2aca30a6566eb1f8647128105ae740 +SIZE (xpi/firefox-31.5.0/es-AR.xpi) = 399937 +SHA256 (xpi/firefox-31.5.0/es-CL.xpi) = 70652d65a852fb78491a932259698e75fdec48eea78ecad44e72d4f6e9f82128 +SIZE (xpi/firefox-31.5.0/es-CL.xpi) = 342808 +SHA256 (xpi/firefox-31.5.0/es-ES.xpi) = 5cb4781d1afaa3d9e3a4e19b50c130c6fc129462ec5c611659a44e5dc45831f5 +SIZE (xpi/firefox-31.5.0/es-ES.xpi) = 335880 +SHA256 (xpi/firefox-31.5.0/es-MX.xpi) = 71b9c761410e757b4027b347f69b929275fbf9d968b8e79643437703960adb48 +SIZE (xpi/firefox-31.5.0/es-MX.xpi) = 402672 +SHA256 (xpi/firefox-31.5.0/et.xpi) = 4481acf3d797e2b9d1e08cf73f6fcad77f3653ee64affa407fd06d8385bc3cd8 +SIZE (xpi/firefox-31.5.0/et.xpi) = 390361 +SHA256 (xpi/firefox-31.5.0/eu.xpi) = 77e6f45dc8dd6fa7c5d147b47408785064a8241b84f71d82536f97c8e8f4dc07 +SIZE (xpi/firefox-31.5.0/eu.xpi) = 413000 +SHA256 (xpi/firefox-31.5.0/fa.xpi) = a1af11200849e06214fd5ca29e4664eb46e27f6725a9fe1aaff42a4289940c73 +SIZE (xpi/firefox-31.5.0/fa.xpi) = 460857 +SHA256 (xpi/firefox-31.5.0/ff.xpi) = 1766d28cbaf862f4eb8d3ad8233dd8585812108e1bc93ade3c012c7f6fc3a84b +SIZE (xpi/firefox-31.5.0/ff.xpi) = 400143 +SHA256 (xpi/firefox-31.5.0/fi.xpi) = 63f83660ddb1a93915b7d41d691762066921d2ad36e5cd8d5c7d0acfb8e8a18f +SIZE (xpi/firefox-31.5.0/fi.xpi) = 392740 +SHA256 (xpi/firefox-31.5.0/fr.xpi) = 0223279d4f63f1d4831f3c8a9913cdc4559f806e748954746bc35931ea152f9a +SIZE (xpi/firefox-31.5.0/fr.xpi) = 406462 +SHA256 (xpi/firefox-31.5.0/fy-NL.xpi) = 19c3ef9199e33a4898a2981961dadb96f3f5bd862c569bc29539a9896c551329 +SIZE (xpi/firefox-31.5.0/fy-NL.xpi) = 401931 +SHA256 (xpi/firefox-31.5.0/ga-IE.xpi) = 628442c3cb960d61ec82a342b59cd4b3e042a61532071faa3f2a62d107b384dd +SIZE (xpi/firefox-31.5.0/ga-IE.xpi) = 410077 +SHA256 (xpi/firefox-31.5.0/gd.xpi) = c49aab9e23aa7aafac25633def65ca695aed0c548c3f14614495feafe71d9c9d +SIZE (xpi/firefox-31.5.0/gd.xpi) = 403014 +SHA256 (xpi/firefox-31.5.0/gl.xpi) = 359fb88f385273190219a15c89cd51fa17c27c81fda86a519a1936d94a8e92a9 +SIZE (xpi/firefox-31.5.0/gl.xpi) = 390599 +SHA256 (xpi/firefox-31.5.0/gu-IN.xpi) = ce4548df745f2985a647fde9a1a104dbce8b3898e0cd9de2971653ff69329965 +SIZE (xpi/firefox-31.5.0/gu-IN.xpi) = 423502 +SHA256 (xpi/firefox-31.5.0/he.xpi) = 4e670f68c59b7fccb1dcfddf065e6537f8acd411f5ec494188455595b89568e2 +SIZE (xpi/firefox-31.5.0/he.xpi) = 427631 +SHA256 (xpi/firefox-31.5.0/hi-IN.xpi) = bd9c0a81812d5f185cdd67edf4f16f4a16c9022d00ab3f6639dac83dce09e529 +SIZE (xpi/firefox-31.5.0/hi-IN.xpi) = 441402 +SHA256 (xpi/firefox-31.5.0/hr.xpi) = 280caa72b76aac6e04d04077be71c5309c4388a23017d35d370f9cfe5dbbbac8 +SIZE (xpi/firefox-31.5.0/hr.xpi) = 424371 +SHA256 (xpi/firefox-31.5.0/hsb.xpi) = 48381ad58a7b8ef0e40d71ba34039b6c8fb9f173445ec7edae40a47ba13c83ca +SIZE (xpi/firefox-31.5.0/hsb.xpi) = 413076 +SHA256 (xpi/firefox-31.5.0/hu.xpi) = 513b4cb557119e9b48ece493392df142defc84cdaa374f6f46ca57cc42f617ea +SIZE (xpi/firefox-31.5.0/hu.xpi) = 398644 +SHA256 (xpi/firefox-31.5.0/hy-AM.xpi) = 8c2a450df1f8633c103db47b5cf886a8f9d3ca10f6f9daa4aa5ec616530c2a10 +SIZE (xpi/firefox-31.5.0/hy-AM.xpi) = 478743 +SHA256 (xpi/firefox-31.5.0/id.xpi) = 1194be5d192d32b677b63679d45832e6c9492fce5e548d7b955025647ed2d46c +SIZE (xpi/firefox-31.5.0/id.xpi) = 378301 +SHA256 (xpi/firefox-31.5.0/is.xpi) = fb6f3f6013ffb82f9444d8c713d7aef5b995961ce78627bb1f5030bb0097d39a +SIZE (xpi/firefox-31.5.0/is.xpi) = 427327 +SHA256 (xpi/firefox-31.5.0/it.xpi) = 0fe3e274cb85236e051f18da49ad6e56f5ef879b7d795036c1abacdf0fff5156 +SIZE (xpi/firefox-31.5.0/it.xpi) = 330906 +SHA256 (xpi/firefox-31.5.0/ja.xpi) = df9c521908c1e788e9632de04b27598440d479544049172d3a447a5130ec3874 +SIZE (xpi/firefox-31.5.0/ja.xpi) = 421665 +SHA256 (xpi/firefox-31.5.0/kk.xpi) = 819ca9fc93441058c4a8a882681ed9e93d1d32085dd051429584d0fb5b68fb8e +SIZE (xpi/firefox-31.5.0/kk.xpi) = 439117 +SHA256 (xpi/firefox-31.5.0/km.xpi) = 657f070de51d7e0207207db926947ecb0c11e30b17b3f0af2b63e6a743435bfc +SIZE (xpi/firefox-31.5.0/km.xpi) = 506477 +SHA256 (xpi/firefox-31.5.0/kn.xpi) = 2498a01800a2fef21e1dca7b4e72b49907c6d4773ef55b18a60996385e561121 +SIZE (xpi/firefox-31.5.0/kn.xpi) = 458891 +SHA256 (xpi/firefox-31.5.0/ko.xpi) = b2a58ae3da8f233e181d8b8aaad041984a1e3db3c31e454a4c495a4d0c00e677 +SIZE (xpi/firefox-31.5.0/ko.xpi) = 402815 +SHA256 (xpi/firefox-31.5.0/ku.xpi) = bc3fba36baee298981e7ddd2ef1e0ec83c478e34c4c9835bcce2ff1500bb8348 +SIZE (xpi/firefox-31.5.0/ku.xpi) = 420260 +SHA256 (xpi/firefox-31.5.0/lij.xpi) = e6d8307fa3d84f411577ca7025c8e33273f43b2d55498e8cde260e5e5c314f33 +SIZE (xpi/firefox-31.5.0/lij.xpi) = 385864 +SHA256 (xpi/firefox-31.5.0/lt.xpi) = 7948c823d4d4052c7c1dc87bc64fd32e47ba04be224104263aa955c4e46e07a3 +SIZE (xpi/firefox-31.5.0/lt.xpi) = 435431 +SHA256 (xpi/firefox-31.5.0/lv.xpi) = 679ef0e9a2e4e554cebcc849f2467b92d5d959e204d53a1cb490b87c763d828c +SIZE (xpi/firefox-31.5.0/lv.xpi) = 398577 +SHA256 (xpi/firefox-31.5.0/mai.xpi) = 78d51231b6cd8c577a20145232cf6e8a669fd98a11ea40e3ba0bf2ad3d8c9d54 +SIZE (xpi/firefox-31.5.0/mai.xpi) = 444885 +SHA256 (xpi/firefox-31.5.0/mk.xpi) = 27ea862beef51325820211e740f678a0112dc5eb18bd4b414d9a945f0b1840c6 +SIZE (xpi/firefox-31.5.0/mk.xpi) = 475483 +SHA256 (xpi/firefox-31.5.0/ml.xpi) = ece5b4d3b3b816a857e5aecf167630019a63608acd21eb9eacf31d48fb66fdc5 +SIZE (xpi/firefox-31.5.0/ml.xpi) = 466255 +SHA256 (xpi/firefox-31.5.0/mr.xpi) = 4fca29cb24665f4f30425fc2aed9f9169f864eb3c1a9d0b897cc26464a0948d0 +SIZE (xpi/firefox-31.5.0/mr.xpi) = 451292 +SHA256 (xpi/firefox-31.5.0/ms.xpi) = e035a3d5a75b407daae11e0d566af2576e643a278fef836e5525aa187617b76d +SIZE (xpi/firefox-31.5.0/ms.xpi) = 436230 +SHA256 (xpi/firefox-31.5.0/nb-NO.xpi) = b3a7625fd15013b2b4cd0554870f1d8f33705915a43e5b021737e815d7eeb067 +SIZE (xpi/firefox-31.5.0/nb-NO.xpi) = 392006 +SHA256 (xpi/firefox-31.5.0/nl.xpi) = a6c0e019c45e5141e28b5585b5cc8a148260c16ebcf22ffd168d6543ef7b60d3 +SIZE (xpi/firefox-31.5.0/nl.xpi) = 390886 +SHA256 (xpi/firefox-31.5.0/nn-NO.xpi) = 73f823115a674b29906c860253112cd7ee2aececaae7f7fccbe868eb81da2ec8 +SIZE (xpi/firefox-31.5.0/nn-NO.xpi) = 386282 +SHA256 (xpi/firefox-31.5.0/or.xpi) = 0f7232c40f43f9aed1b3f7a050852d1607f9e3d0d9aefbab496f58645b77a85f +SIZE (xpi/firefox-31.5.0/or.xpi) = 464750 +SHA256 (xpi/firefox-31.5.0/pa-IN.xpi) = 2467b7f77c827e1ff00ff399b74dfcde1809662cdcb66b38de33a45fdb2c3104 +SIZE (xpi/firefox-31.5.0/pa-IN.xpi) = 439326 +SHA256 (xpi/firefox-31.5.0/pl.xpi) = 91e676c995e24068fc70a0ab5385318de78e684ace59a0472595469baf874b03 +SIZE (xpi/firefox-31.5.0/pl.xpi) = 374747 +SHA256 (xpi/firefox-31.5.0/pt-BR.xpi) = b67647be890454ceef7472e7862fe851b7d2d82fe2775e5f8f1492f57a129ab4 +SIZE (xpi/firefox-31.5.0/pt-BR.xpi) = 405565 +SHA256 (xpi/firefox-31.5.0/pt-PT.xpi) = 22718cbd2a11712cdd9ca762c6d258a4e3841002e1a68daa3354ddcdab6dba90 +SIZE (xpi/firefox-31.5.0/pt-PT.xpi) = 386345 +SHA256 (xpi/firefox-31.5.0/rm.xpi) = e1b3c4799a87ff021bc3a67f1c803124dd7c9f7cebeef98d3b927bc4ee542fdf +SIZE (xpi/firefox-31.5.0/rm.xpi) = 399286 +SHA256 (xpi/firefox-31.5.0/ro.xpi) = 426a6abc8ca1dc7b3e1c0062a5752e69c4c7a29f6de7a6384b1fc71b7e9ccb7f +SIZE (xpi/firefox-31.5.0/ro.xpi) = 439387 +SHA256 (xpi/firefox-31.5.0/ru.xpi) = 8a36e66e6792fbaedc09495a4dfd803aa49d9841415026fc8798adc0991bf165 +SIZE (xpi/firefox-31.5.0/ru.xpi) = 367898 +SHA256 (xpi/firefox-31.5.0/si.xpi) = 97819f8637b5229b6240bf0d6629200d6ca212a50494aef242ba897816898984 +SIZE (xpi/firefox-31.5.0/si.xpi) = 463224 +SHA256 (xpi/firefox-31.5.0/sk.xpi) = bea9e31c409fafc05bbe8cc34ef11ad8f4b3af2f453b83777283f4042d8bb8de +SIZE (xpi/firefox-31.5.0/sk.xpi) = 413802 +SHA256 (xpi/firefox-31.5.0/sl.xpi) = 0cc5005e810a9284943ea4caacbaf8a9da739fb822cc54be1e0226d0196d4791 +SIZE (xpi/firefox-31.5.0/sl.xpi) = 387134 +SHA256 (xpi/firefox-31.5.0/son.xpi) = 621496ed489eaced375484f8be7230d10e43baa607c85897e2453d4fe3cfd5d6 +SIZE (xpi/firefox-31.5.0/son.xpi) = 395144 +SHA256 (xpi/firefox-31.5.0/sq.xpi) = 9420c20e33cbe1261bb257b4cb047519c03826d8089a80e69bb9cd6a5d6833f7 +SIZE (xpi/firefox-31.5.0/sq.xpi) = 431137 +SHA256 (xpi/firefox-31.5.0/sr.xpi) = 3c02ebadb66948074d0b6b6b91979662933abb11956400dcec50da0ea39b6a57 +SIZE (xpi/firefox-31.5.0/sr.xpi) = 425902 +SHA256 (xpi/firefox-31.5.0/sv-SE.xpi) = 979e24eac0fd4c28dc85e5e866ed5202b48b1e09acaf8227a9490b2a32b2fdf4 +SIZE (xpi/firefox-31.5.0/sv-SE.xpi) = 399026 +SHA256 (xpi/firefox-31.5.0/ta.xpi) = 87cd38aed291b6fd561c6122da262d507cb1595dd3cb70fc3c63af1cdd0dd24d +SIZE (xpi/firefox-31.5.0/ta.xpi) = 447686 +SHA256 (xpi/firefox-31.5.0/te.xpi) = 857d88a0457b5b82e37711424434f11d7e1413983422ef8304c9c5c5fcbccbd2 +SIZE (xpi/firefox-31.5.0/te.xpi) = 462591 +SHA256 (xpi/firefox-31.5.0/th.xpi) = 481021438068e00adfb59a31919039caff64b70c797cbde8b332f7bf47936bea +SIZE (xpi/firefox-31.5.0/th.xpi) = 478127 +SHA256 (xpi/firefox-31.5.0/tr.xpi) = c0f199a09e5b2ac5f0a550703304968c50b3463df2f3685c7d6aedfed443d417 +SIZE (xpi/firefox-31.5.0/tr.xpi) = 417370 +SHA256 (xpi/firefox-31.5.0/uk.xpi) = d04d5593e3afb1546f30f26389482a82819a34887e42e968f2fa04e749b2a124 +SIZE (xpi/firefox-31.5.0/uk.xpi) = 428002 +SHA256 (xpi/firefox-31.5.0/vi.xpi) = 6cb20afb87746943c88cdd339d3ff40a0f7980d42741139b578514964ba7784f +SIZE (xpi/firefox-31.5.0/vi.xpi) = 413374 +SHA256 (xpi/firefox-31.5.0/xh.xpi) = 6c638f61ca36358bdd8aac4d94cbb3041c6eeda17d220c158718cfac8198b2a6 +SIZE (xpi/firefox-31.5.0/xh.xpi) = 397876 +SHA256 (xpi/firefox-31.5.0/zh-CN.xpi) = 94cdfb6df0ebf1882403fb9a8fec7e9a15eeebc07b977746378dc0b22b78e28a +SIZE (xpi/firefox-31.5.0/zh-CN.xpi) = 419630 +SHA256 (xpi/firefox-31.5.0/zh-TW.xpi) = 8a31a36199af4c7f7f37dfd2a3d1db834ae6fb1e470c7bdff9d6ed716ba07e29 +SIZE (xpi/firefox-31.5.0/zh-TW.xpi) = 412521 +SHA256 (xpi/firefox-31.5.0/zu.xpi) = 79505f0655ba69bf6e4f4357bdb1e5a4721fa745efc1533bfdd085f9ae92b39a +SIZE (xpi/firefox-31.5.0/zu.xpi) = 433216 Index: head/www/firefox-i18n/Makefile =================================================================== --- head/www/firefox-i18n/Makefile (revision 380089) +++ head/www/firefox-i18n/Makefile (revision 380090) @@ -1,88 +1,88 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= firefox-i18n -PORTVERSION= 35.0.1 +PORTVERSION= 36.0 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${PORTVERSION}/linux-i686/xpi PKGNAMEPREFIX= DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} MAINTAINER= gecko@FreeBSD.org COMMENT= Localized interface for Firefox EXTRACT_DEPENDS= zip:${PORTSDIR}/archivers/zip -USES= zip:infozip gecko:firefox,35,build +USES= zip:infozip gecko:firefox,36,build USE_XPI= firefox linux-firefox NO_ARCH= yes USE_SUBMAKE= yes WDIR= langpack-*@firefox.mozilla.org XPI_DISTNAMES= ${FIREFOX_I18N_} PLIST?= ${WRKDIR}/plist PLISTF?= ${WRKDIR}/plist_files .include "${.CURDIR}/Makefile.option" .include .ifndef WITHOUT_SWITCHER RUN_DEPENDS+= xpi-quick-locale-switcher>=0:${PORTSDIR}/www/xpi-quick-locale-switcher .endif .include "${.CURDIR}/Makefile.lang" FIREFOX_I18N_?= ${FIREFOX_I18N} .for dist in ${XPI_DISTNAMES} XPI_ID_${dist}= langpack-${dist}@firefox.mozilla.org .endfor pre-everything:: @${ECHO_CMD} @${ECHO_CMD} "Please define FIREFOX_I18N_ALL to install all languages." @${ECHO_CMD} do-extract: @${MKDIR} ${WRKSRC} @for lang in ${FIREFOX_I18N_}; do \ if ! (${UNZIP_CMD} -qo ${_DISTDIR}/$$lang.xpi -d ${WRKSRC}/langpack-$$lang@firefox.mozilla.org);\ then \ exit 1; \ fi; \ cd ${WRKSRC}/langpack-$$lang@firefox.mozilla.org/; \ ${FIND} -H -s * ! -type d | \ ${SED} -e "s|^|lib/xpi/langpack-$$lang@firefox.mozilla.org/|" >> ${PLISTF}; \ done ${CAT} ${PLISTF} | ${SORT} >> ${PLIST} do-install: @${MKDIR} ${STAGEDIR}${XPI_LIBDIR} ${STAGEDIR}${XPI_SLDIRS_ALL} cd ${WRKSRC}; ${PAX} -rw . ${STAGEDIR}${XPI_LIBDIR} ${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${WDIR}/ @for e in ${STAGEDIR}${XPI_LIBDIR}/${WDIR}; do \ for _dir in ${XPI_LINKFARMS} ; do \ ${LN} -sf $${_e##*/} ${STAGEDIR}$$_dir/ ${_Q} ; \ done \ done @${ECHO_CMD} '@exec ${INSTALL} -d ${XPI_SLDIRS_ALL:S,^${PREFIX},%D,}' ${_A} @${ECHO_CMD} '@exec for _dir in ${XPI_LINKFARMS} ; { \ ${LN} -sf ${XPI_LIBDIR}/${WDIR} $$_dir/ ${_Q}; }' ${_A} @${ECHO_CMD} '@unexec for _dir in ${XPI_LINKFARMS} ${XPI_LIBDIR}; { ${RM} -f $$_dir/${WDIR} ; }' ${_A} post-patch: ${FIND} ${WRKSRC} -name install.rdf -print0 | \ ${XARGS} -0L1 ${REINPLACE_CMD} -i '' -e '/ Index: head/www/firefox-i18n/distinfo =================================================================== --- head/www/firefox-i18n/distinfo (revision 380089) +++ head/www/firefox-i18n/distinfo (revision 380090) @@ -1,176 +1,176 @@ -SHA256 (xpi/firefox-i18n-35.0.1/ach.xpi) = 3acc381c637c62cba0e1b3f9e8476e6626bff52f3278d500e8c9b130ff105033 -SIZE (xpi/firefox-i18n-35.0.1/ach.xpi) = 467509 -SHA256 (xpi/firefox-i18n-35.0.1/af.xpi) = 2475f190a5b545bf4c9740ee6052a8d8b283c95ee4e9407efa79e60bdec35890 -SIZE (xpi/firefox-i18n-35.0.1/af.xpi) = 467130 -SHA256 (xpi/firefox-i18n-35.0.1/an.xpi) = 974d7385158b5d0d184c73bec9b1dc2984cef0b9215a838ca332112ae22ff496 -SIZE (xpi/firefox-i18n-35.0.1/an.xpi) = 446091 -SHA256 (xpi/firefox-i18n-35.0.1/ar.xpi) = 7181187b5b2da93036a375c6b4b7def4bf722ffb3f7f161e49edea65422c9cec -SIZE (xpi/firefox-i18n-35.0.1/ar.xpi) = 499638 -SHA256 (xpi/firefox-i18n-35.0.1/as.xpi) = 4e129c2243b742ee19b61e76bcd22828be95f4b6541459a167c3a5cba4a72032 -SIZE (xpi/firefox-i18n-35.0.1/as.xpi) = 488062 -SHA256 (xpi/firefox-i18n-35.0.1/ast.xpi) = 5ba7a10aefaa2862b40238e6dd76ef346ee67347d33ef726b7443d32d968ace5 -SIZE (xpi/firefox-i18n-35.0.1/ast.xpi) = 372416 -SHA256 (xpi/firefox-i18n-35.0.1/az.xpi) = 3604f68010e4e6161e763d36dff280a2ef208eaad54f770074082947ecc95db4 -SIZE (xpi/firefox-i18n-35.0.1/az.xpi) = 470999 -SHA256 (xpi/firefox-i18n-35.0.1/be.xpi) = b449859d6523d75a844b0d6bf1de59e37ab18026b5f9338608dcf5076ee4eb6e -SIZE (xpi/firefox-i18n-35.0.1/be.xpi) = 422264 -SHA256 (xpi/firefox-i18n-35.0.1/bg.xpi) = fcc368a9c5ea0cd07c7d93009ffb87f4a77636ea2c616dee714e9507caf579d5 -SIZE (xpi/firefox-i18n-35.0.1/bg.xpi) = 477012 -SHA256 (xpi/firefox-i18n-35.0.1/bn-BD.xpi) = b78ca016e46d1a22db3dc88df90a2d41931fbdc1081080e76bf01854f744bafe -SIZE (xpi/firefox-i18n-35.0.1/bn-BD.xpi) = 511237 -SHA256 (xpi/firefox-i18n-35.0.1/bn-IN.xpi) = 2dbc1ec7512ea21a7019fecb86e7fca2e7c486e8cb18e82ac087a4f4b8a3f2e5 -SIZE (xpi/firefox-i18n-35.0.1/bn-IN.xpi) = 504192 -SHA256 (xpi/firefox-i18n-35.0.1/br.xpi) = 61ff2fdcc899b7f59f8d27111b05d114c1f55f36955b66867973341f5323cf88 -SIZE (xpi/firefox-i18n-35.0.1/br.xpi) = 427012 -SHA256 (xpi/firefox-i18n-35.0.1/bs.xpi) = c2ef180d5b9b155896a40ed0cc91a82f032d1145a6fbc53da400aa898353dac2 -SIZE (xpi/firefox-i18n-35.0.1/bs.xpi) = 468176 -SHA256 (xpi/firefox-i18n-35.0.1/ca.xpi) = 3f8f4288280820d1173cf967e35ac89329aaed5fa70810f08cba2a289f36c66d -SIZE (xpi/firefox-i18n-35.0.1/ca.xpi) = 442493 -SHA256 (xpi/firefox-i18n-35.0.1/cs.xpi) = f15705b596e1415a0f502a5cf57f48cd6c176bd85ab09e59b665b189d29746fd -SIZE (xpi/firefox-i18n-35.0.1/cs.xpi) = 430874 -SHA256 (xpi/firefox-i18n-35.0.1/cy.xpi) = bf471f0e00a86fe8477b1dadd69702df603b62c487207d1098de18a8d45cb102 -SIZE (xpi/firefox-i18n-35.0.1/cy.xpi) = 429176 -SHA256 (xpi/firefox-i18n-35.0.1/da.xpi) = 60ecad8aa0b690f39b492717ff95e2227046c875c87552de8ffe7cbab0110278 -SIZE (xpi/firefox-i18n-35.0.1/da.xpi) = 435995 -SHA256 (xpi/firefox-i18n-35.0.1/de.xpi) = 64369006b8b34512538744565d29dccf514b5455a3ede32980b21734dee6dda9 -SIZE (xpi/firefox-i18n-35.0.1/de.xpi) = 435483 -SHA256 (xpi/firefox-i18n-35.0.1/dsb.xpi) = 02e0703eb39798c03a232f2eee19027e08cda83feedcfcbab7fa3e0560ae4816 -SIZE (xpi/firefox-i18n-35.0.1/dsb.xpi) = 454784 -SHA256 (xpi/firefox-i18n-35.0.1/el.xpi) = dafab4f4383637fd4bc0fe77974536f17760e4ee4901fff5b2668a920107bf06 -SIZE (xpi/firefox-i18n-35.0.1/el.xpi) = 481158 -SHA256 (xpi/firefox-i18n-35.0.1/en-GB.xpi) = 0245fc34ff932eeb4c1b5c25bfe685517617033a54ec406ab72d0aba0de15eb4 -SIZE (xpi/firefox-i18n-35.0.1/en-GB.xpi) = 425596 -SHA256 (xpi/firefox-i18n-35.0.1/en-US.xpi) = ee3bc397656563ac85aca856ed964185bdc64f79dd95c84d5238e22ce5d28860 -SIZE (xpi/firefox-i18n-35.0.1/en-US.xpi) = 455423 -SHA256 (xpi/firefox-i18n-35.0.1/en-ZA.xpi) = be64bc5180e077ecde34508b033e5b550271663850dbabdab02ac3a980a01d71 -SIZE (xpi/firefox-i18n-35.0.1/en-ZA.xpi) = 421565 -SHA256 (xpi/firefox-i18n-35.0.1/eo.xpi) = b4a64a0c9cdfb0d5a257da0d1e2b7852565f8ba5dec5a2976e9b5e6ce6e5c9bb -SIZE (xpi/firefox-i18n-35.0.1/eo.xpi) = 470276 -SHA256 (xpi/firefox-i18n-35.0.1/es-AR.xpi) = d3298013ec0580c26cbc3298fc68ba334f9f7f514f415851dbc0f438b3a7d1e2 -SIZE (xpi/firefox-i18n-35.0.1/es-AR.xpi) = 438917 -SHA256 (xpi/firefox-i18n-35.0.1/es-CL.xpi) = 4808e96479bc8f179ae1505f40f0e3719f1f0a0e5db34dd4d05c47e9ccb50acc -SIZE (xpi/firefox-i18n-35.0.1/es-CL.xpi) = 374669 -SHA256 (xpi/firefox-i18n-35.0.1/es-ES.xpi) = 4a71fc57cc3a1e8134b550acc4fff64889c0c2c3eb40558f47f88dd6c3c534a3 -SIZE (xpi/firefox-i18n-35.0.1/es-ES.xpi) = 365066 -SHA256 (xpi/firefox-i18n-35.0.1/es-MX.xpi) = e328a8b9d45f283973fc3c3c10543f1fbf4b71f65ef6720522f3ab5a59324566 -SIZE (xpi/firefox-i18n-35.0.1/es-MX.xpi) = 441443 -SHA256 (xpi/firefox-i18n-35.0.1/et.xpi) = f4476419ef4ca9eb496313acb97270ec3bf80f4de6c3142ddc4545edc1e50767 -SIZE (xpi/firefox-i18n-35.0.1/et.xpi) = 428358 -SHA256 (xpi/firefox-i18n-35.0.1/eu.xpi) = 1a17bea191c0a12741bc124e4b8b6168a5414bc0bd0a053f9ca1837a5a491d58 -SIZE (xpi/firefox-i18n-35.0.1/eu.xpi) = 451385 -SHA256 (xpi/firefox-i18n-35.0.1/fa.xpi) = 3aba9cbcac32d7c48bd8c749b6656c51c62c3e56c43475016c6746cf838fe161 -SIZE (xpi/firefox-i18n-35.0.1/fa.xpi) = 496845 -SHA256 (xpi/firefox-i18n-35.0.1/ff.xpi) = 7c0daf076c98fe33e2123c15ab67cf8f17b2d4d3fad8719d276d70fe1b247866 -SIZE (xpi/firefox-i18n-35.0.1/ff.xpi) = 437965 -SHA256 (xpi/firefox-i18n-35.0.1/fi.xpi) = 54266792cdd9cc1400b441d30f29a82d1e2597f11b0d1015793ab4d92a5f6d58 -SIZE (xpi/firefox-i18n-35.0.1/fi.xpi) = 430182 -SHA256 (xpi/firefox-i18n-35.0.1/fr.xpi) = ef3d7cddeca250d8806a837ab469ac3e4370f11b0f79c68c2f27fd5eb01177fa -SIZE (xpi/firefox-i18n-35.0.1/fr.xpi) = 445753 -SHA256 (xpi/firefox-i18n-35.0.1/fy-NL.xpi) = abff62c1abe9f1e65d9224899a043e34cbfe5fbc7dd156c0a6c7e47856535de1 -SIZE (xpi/firefox-i18n-35.0.1/fy-NL.xpi) = 440303 -SHA256 (xpi/firefox-i18n-35.0.1/ga-IE.xpi) = cbbc6d4697c0c75c20f1d616a4d46e79696551ae30e2c87a66f3146c4dd0d100 -SIZE (xpi/firefox-i18n-35.0.1/ga-IE.xpi) = 449555 -SHA256 (xpi/firefox-i18n-35.0.1/gd.xpi) = f0ccb7ce40d28bf69977a260c8b7daec1af56ae8334ec89e76e0f85fd7ad8a83 -SIZE (xpi/firefox-i18n-35.0.1/gd.xpi) = 439244 -SHA256 (xpi/firefox-i18n-35.0.1/gl.xpi) = e5e95935b581e9204b8c8ad087cee75c0d11b89679c598bd75d30eae32ffdd6b -SIZE (xpi/firefox-i18n-35.0.1/gl.xpi) = 430165 -SHA256 (xpi/firefox-i18n-35.0.1/gu-IN.xpi) = e762c277f0d754f00a747cf8620e6d3ddc28f7a50480f9890c0a7f78b9622b23 -SIZE (xpi/firefox-i18n-35.0.1/gu-IN.xpi) = 458572 -SHA256 (xpi/firefox-i18n-35.0.1/he.xpi) = cef8bc677a3d27ec1cde58074f6da507f7a12da4dc880aaa31572246a870f21a -SIZE (xpi/firefox-i18n-35.0.1/he.xpi) = 468597 -SHA256 (xpi/firefox-i18n-35.0.1/hi-IN.xpi) = 846c4f84bea652f4acfc8b7c20e70a250761a61cd972b9794e9b3c5001d7154a -SIZE (xpi/firefox-i18n-35.0.1/hi-IN.xpi) = 488755 -SHA256 (xpi/firefox-i18n-35.0.1/hr.xpi) = e96ea6db4376a754979fc3489fee6d8209b596fe8f489d7da242853a36a2f1d8 -SIZE (xpi/firefox-i18n-35.0.1/hr.xpi) = 462800 -SHA256 (xpi/firefox-i18n-35.0.1/hsb.xpi) = c88e1a400c0feef1a1a153fdd6ef4d66bad8b4df7cd23ad1e76753fe9aa1da2d -SIZE (xpi/firefox-i18n-35.0.1/hsb.xpi) = 452733 -SHA256 (xpi/firefox-i18n-35.0.1/hu.xpi) = 340559b31adf316b911d23d1d5c685f02784bd6980ff652dae0c17bc812201c3 -SIZE (xpi/firefox-i18n-35.0.1/hu.xpi) = 438009 -SHA256 (xpi/firefox-i18n-35.0.1/hy-AM.xpi) = 3fba8b1de7777071f865f677f68fb8bd6551d7a778597ad7ba79ddafff033f8a -SIZE (xpi/firefox-i18n-35.0.1/hy-AM.xpi) = 518275 -SHA256 (xpi/firefox-i18n-35.0.1/id.xpi) = 6687221ffce5922d00ce44994eb7acb85749625b937fb0f004056523fe547611 -SIZE (xpi/firefox-i18n-35.0.1/id.xpi) = 416385 -SHA256 (xpi/firefox-i18n-35.0.1/is.xpi) = 6d089ebba0e25e314413bdf794301ceaf017fd0c9469bcbeb002d185879e5fb7 -SIZE (xpi/firefox-i18n-35.0.1/is.xpi) = 470064 -SHA256 (xpi/firefox-i18n-35.0.1/it.xpi) = 5866566401aefc3fab966709a4a03619b9a6f2f0c9524b2a0b7fae639611035f -SIZE (xpi/firefox-i18n-35.0.1/it.xpi) = 359265 -SHA256 (xpi/firefox-i18n-35.0.1/ja.xpi) = c6f8e7b35f660dda0e7d7ab176fe5a93307fdd586646bc64d12972d7ccb018b9 -SIZE (xpi/firefox-i18n-35.0.1/ja.xpi) = 461521 -SHA256 (xpi/firefox-i18n-35.0.1/kk.xpi) = 611ff26f07b59ced4bf70ad43e0d0b16fad120987d2a7b26c3f644717c369030 -SIZE (xpi/firefox-i18n-35.0.1/kk.xpi) = 485879 -SHA256 (xpi/firefox-i18n-35.0.1/km.xpi) = ac3438326e449bec4e3fb8145b1d06fab26977202cbcc566a4037836029f4774 -SIZE (xpi/firefox-i18n-35.0.1/km.xpi) = 546286 -SHA256 (xpi/firefox-i18n-35.0.1/kn.xpi) = 2f5dbb7a8e5027e8de89327a80d10bb5e4d6cddc0cefcc1d2be8abbc0df55e9e -SIZE (xpi/firefox-i18n-35.0.1/kn.xpi) = 511933 -SHA256 (xpi/firefox-i18n-35.0.1/ko.xpi) = c639be7543588606ac3e60beeb34b3bdf81ec33ca290ceb01cbc7ecca69ba9b1 -SIZE (xpi/firefox-i18n-35.0.1/ko.xpi) = 444350 -SHA256 (xpi/firefox-i18n-35.0.1/lij.xpi) = 436718bc1f3608227619cd60a6f37b74c21a015d04031e0ea2589f93dc6a0f9c -SIZE (xpi/firefox-i18n-35.0.1/lij.xpi) = 426477 -SHA256 (xpi/firefox-i18n-35.0.1/lt.xpi) = 457faeb4590b7aa3b9f380e5e4f55a96a5e0185436b6d7d15de8e5a38ee7cc31 -SIZE (xpi/firefox-i18n-35.0.1/lt.xpi) = 470365 -SHA256 (xpi/firefox-i18n-35.0.1/lv.xpi) = 561ae1afc35b062fe76ceca7cfb3771ee3d7c5df07132e92dbce85f663792a64 -SIZE (xpi/firefox-i18n-35.0.1/lv.xpi) = 433945 -SHA256 (xpi/firefox-i18n-35.0.1/mai.xpi) = 573f1bc3d69e79c915a825c0270731cd1399875d497c0a01602ed0cb3c5d5a1a -SIZE (xpi/firefox-i18n-35.0.1/mai.xpi) = 481807 -SHA256 (xpi/firefox-i18n-35.0.1/mk.xpi) = 6792a05b1d135d67815e959d617cbffb36f205f258b123028a5b44f1e47a09c3 -SIZE (xpi/firefox-i18n-35.0.1/mk.xpi) = 512250 -SHA256 (xpi/firefox-i18n-35.0.1/ml.xpi) = dc21bfa33f3b525e579593084761f51131342ecb5bde14c371034dd0ae50e697 -SIZE (xpi/firefox-i18n-35.0.1/ml.xpi) = 510072 -SHA256 (xpi/firefox-i18n-35.0.1/mr.xpi) = e9aac053cf818d3d5920465eee8570ea4cae83f9956ce24c2aaed10aea3b390d -SIZE (xpi/firefox-i18n-35.0.1/mr.xpi) = 490864 -SHA256 (xpi/firefox-i18n-35.0.1/ms.xpi) = a42a1113aec44c5ebc4956e0a7c7ce914a49133e5f3bb4e5b302e97894c3b0b0 -SIZE (xpi/firefox-i18n-35.0.1/ms.xpi) = 473982 -SHA256 (xpi/firefox-i18n-35.0.1/nb-NO.xpi) = e50d30605491cab9238c568c83f769ece2848750837ffb2a6f8bddd7981285ed -SIZE (xpi/firefox-i18n-35.0.1/nb-NO.xpi) = 427547 -SHA256 (xpi/firefox-i18n-35.0.1/nl.xpi) = 660343874d41a5e94314756dd46d66ad0f1cb5a92eadcf29ac11b615efd28ba4 -SIZE (xpi/firefox-i18n-35.0.1/nl.xpi) = 428993 -SHA256 (xpi/firefox-i18n-35.0.1/nn-NO.xpi) = 613a3b97f713ad1cedc348d275311c77ec312003e8e8a9ea71a64b4aca87eab3 -SIZE (xpi/firefox-i18n-35.0.1/nn-NO.xpi) = 421944 -SHA256 (xpi/firefox-i18n-35.0.1/or.xpi) = dac4b342b6b288cb3fd80dad7e9a2d43bae7d8deba25b7bab913a7ae56c4b813 -SIZE (xpi/firefox-i18n-35.0.1/or.xpi) = 507036 -SHA256 (xpi/firefox-i18n-35.0.1/pa-IN.xpi) = 32fa08bdfbd725d654ecdf1d3626d3562547c9b8134252401b9523b570997a56 -SIZE (xpi/firefox-i18n-35.0.1/pa-IN.xpi) = 478329 -SHA256 (xpi/firefox-i18n-35.0.1/pl.xpi) = dcf1c6c5343f2e327a61021f2d34eb4b37981114e9676bc9b43a99edbdaccab1 -SIZE (xpi/firefox-i18n-35.0.1/pl.xpi) = 399975 -SHA256 (xpi/firefox-i18n-35.0.1/pt-BR.xpi) = 2ca276a7afb55413ffe5ef573922b01cf8c4f77307dc0d0195bed51b71959028 -SIZE (xpi/firefox-i18n-35.0.1/pt-BR.xpi) = 446522 -SHA256 (xpi/firefox-i18n-35.0.1/pt-PT.xpi) = c620cb874d5c59f058281e4dbae08f9facddf6ded521040f6179d6b72d9c2548 -SIZE (xpi/firefox-i18n-35.0.1/pt-PT.xpi) = 424495 -SHA256 (xpi/firefox-i18n-35.0.1/rm.xpi) = 082a4919e2465f8050da69d62bb23ecfe1f69069886c471f9fdfa76e787dd171 -SIZE (xpi/firefox-i18n-35.0.1/rm.xpi) = 437062 -SHA256 (xpi/firefox-i18n-35.0.1/ro.xpi) = a8cb03c120ef5d5dc4bb25ff7cd6813cc43cddad7dcabdd949be9d00b3f742fa -SIZE (xpi/firefox-i18n-35.0.1/ro.xpi) = 479195 -SHA256 (xpi/firefox-i18n-35.0.1/ru.xpi) = e05c3e94d0cce52ac1a05391db5683f98fe7441304ef6791da29cf14e9eddd85 -SIZE (xpi/firefox-i18n-35.0.1/ru.xpi) = 403478 -SHA256 (xpi/firefox-i18n-35.0.1/si.xpi) = 4bb6f070dbcbc9e6a83007d7e767d293058ad9507e83be8a5adc519a2f9a204d -SIZE (xpi/firefox-i18n-35.0.1/si.xpi) = 510075 -SHA256 (xpi/firefox-i18n-35.0.1/sk.xpi) = f4ce68ecdc7e490650fe896e5cd3fbad9d867c516694c3ed90d96635eb380ada -SIZE (xpi/firefox-i18n-35.0.1/sk.xpi) = 453746 -SHA256 (xpi/firefox-i18n-35.0.1/sl.xpi) = d9b193f950e48778fe4b85f92c2ade2dba32d66ae4b9ce18c9c03ce17110cb7f -SIZE (xpi/firefox-i18n-35.0.1/sl.xpi) = 426391 -SHA256 (xpi/firefox-i18n-35.0.1/son.xpi) = 5440d8e0f9a8d1f6d7869ed3e80793da59a9243dff824a9ee79738843e084f24 -SIZE (xpi/firefox-i18n-35.0.1/son.xpi) = 433369 -SHA256 (xpi/firefox-i18n-35.0.1/sq.xpi) = 485dd57f6e456ff0174c074dae974624bd7ba17ae30f77cb67920a41db347f66 -SIZE (xpi/firefox-i18n-35.0.1/sq.xpi) = 470748 -SHA256 (xpi/firefox-i18n-35.0.1/sr.xpi) = 46786455739a5f27f9a5599579bfa71145cdb7f58fbe444e21afc396fd467a73 -SIZE (xpi/firefox-i18n-35.0.1/sr.xpi) = 463763 -SHA256 (xpi/firefox-i18n-35.0.1/sv-SE.xpi) = ea001c2598bdf1e9c6e182151caba27a0aa60af8fde4c4c40a1f2b05a11181d4 -SIZE (xpi/firefox-i18n-35.0.1/sv-SE.xpi) = 437320 -SHA256 (xpi/firefox-i18n-35.0.1/ta.xpi) = 9c2503006d250b7c028818755bd5e8272cce8bf21cdb4a44c8c31d72461d7469 -SIZE (xpi/firefox-i18n-35.0.1/ta.xpi) = 487298 -SHA256 (xpi/firefox-i18n-35.0.1/te.xpi) = 2525e90f735ea20d95c06f17b510ff9480c4274d517bf63145620a4753d3a1c3 -SIZE (xpi/firefox-i18n-35.0.1/te.xpi) = 508639 -SHA256 (xpi/firefox-i18n-35.0.1/th.xpi) = 7dfd4aeeb3cfbd7cfc0e78e0aadd127bb7a63c3ddf6a1bd4820ce336001b5512 -SIZE (xpi/firefox-i18n-35.0.1/th.xpi) = 515441 -SHA256 (xpi/firefox-i18n-35.0.1/tr.xpi) = 518e383cb87645475faf5fbfbb26eb282599c1e1c9a50bb83599853d81eea9e6 -SIZE (xpi/firefox-i18n-35.0.1/tr.xpi) = 465759 -SHA256 (xpi/firefox-i18n-35.0.1/uk.xpi) = db0ccc183158a5974655559b1736a0462b4ead630b4528f96e2d9c851d73252f -SIZE (xpi/firefox-i18n-35.0.1/uk.xpi) = 464399 -SHA256 (xpi/firefox-i18n-35.0.1/vi.xpi) = 786b1ceae1720057361b202a41222de9bb54045b626233bdeb7d185c70654278 -SIZE (xpi/firefox-i18n-35.0.1/vi.xpi) = 450200 -SHA256 (xpi/firefox-i18n-35.0.1/xh.xpi) = 487e7a4cdd4cb711166b553579ffb1f8ac194604a00a4bfc8630f85f306536ea -SIZE (xpi/firefox-i18n-35.0.1/xh.xpi) = 432689 -SHA256 (xpi/firefox-i18n-35.0.1/zh-CN.xpi) = ed836b386eeda9e7cee1b5ad6608380d7cc2ab57e885968e343da1e003cf27ed -SIZE (xpi/firefox-i18n-35.0.1/zh-CN.xpi) = 471967 -SHA256 (xpi/firefox-i18n-35.0.1/zh-TW.xpi) = aaada1e8ce0479d6443817fce323f152c607b658340c81c421a6eee655c14373 -SIZE (xpi/firefox-i18n-35.0.1/zh-TW.xpi) = 451738 +SHA256 (xpi/firefox-i18n-36.0/ach.xpi) = cd52762687bb2de6d1fcddad01c4fac89ea2366680e4a6b3e941aae672818cf7 +SIZE (xpi/firefox-i18n-36.0/ach.xpi) = 465661 +SHA256 (xpi/firefox-i18n-36.0/af.xpi) = 46258ddafdae2c89b50b3580df99ab6927df11529989ae5cd25413208281576d +SIZE (xpi/firefox-i18n-36.0/af.xpi) = 472056 +SHA256 (xpi/firefox-i18n-36.0/an.xpi) = 105473c50622f24752455ad343e724d688c9e839f0fe788ffdaa1723c8db8bab +SIZE (xpi/firefox-i18n-36.0/an.xpi) = 449536 +SHA256 (xpi/firefox-i18n-36.0/ar.xpi) = 0cde10d1facdf7bc147deb011109eb77d2cbf037c046355e1e0e1bb2679e1db4 +SIZE (xpi/firefox-i18n-36.0/ar.xpi) = 504370 +SHA256 (xpi/firefox-i18n-36.0/as.xpi) = 03bb600ddae2d8bba96ba66b9faf254309919c79058f76758f7b58cceacfd24e +SIZE (xpi/firefox-i18n-36.0/as.xpi) = 494229 +SHA256 (xpi/firefox-i18n-36.0/ast.xpi) = d7f01d2a59bee2ca0681714e46da95c002d6fd6e5c994de059a1e6fa0cb9ab2b +SIZE (xpi/firefox-i18n-36.0/ast.xpi) = 377933 +SHA256 (xpi/firefox-i18n-36.0/az.xpi) = 2c73e8bd6fc9b9e4c9385e95251f70a8294f38eadd838a5713ecca6ac1a25b23 +SIZE (xpi/firefox-i18n-36.0/az.xpi) = 475727 +SHA256 (xpi/firefox-i18n-36.0/be.xpi) = 1a1feccbc4e45a54f2a8b3aee4fdb062cc933d31c014af6e3efdc474389a45c1 +SIZE (xpi/firefox-i18n-36.0/be.xpi) = 426958 +SHA256 (xpi/firefox-i18n-36.0/bg.xpi) = 82946bb8a54d6a328e0485a2eaba68a34121e6f9a2eb15249e70e1303d4bfdb3 +SIZE (xpi/firefox-i18n-36.0/bg.xpi) = 481497 +SHA256 (xpi/firefox-i18n-36.0/bn-BD.xpi) = 3f1d483239bb735d633785f2728a4b6809b64cfc3b9010169045663dc137204e +SIZE (xpi/firefox-i18n-36.0/bn-BD.xpi) = 515519 +SHA256 (xpi/firefox-i18n-36.0/bn-IN.xpi) = ab987b8952c98231920e7dbdd34becd004735195671bbbe7f5bdebcdf37df210 +SIZE (xpi/firefox-i18n-36.0/bn-IN.xpi) = 514349 +SHA256 (xpi/firefox-i18n-36.0/br.xpi) = 2c2103c853413ede8534173d0583e42b91bdb41c4e621d864f734058a4b8c45d +SIZE (xpi/firefox-i18n-36.0/br.xpi) = 430389 +SHA256 (xpi/firefox-i18n-36.0/bs.xpi) = c9d1b2fc74349945a929aefa06ccafd2e1368da5458ac08fe403c1b2e9b48495 +SIZE (xpi/firefox-i18n-36.0/bs.xpi) = 472356 +SHA256 (xpi/firefox-i18n-36.0/ca.xpi) = 1d4c748ce84454bd3898135afcfed41056204b609511907e0c60786636c5b888 +SIZE (xpi/firefox-i18n-36.0/ca.xpi) = 446099 +SHA256 (xpi/firefox-i18n-36.0/cs.xpi) = 110687a150b08c6c6758e1c03c0448bb9bdbe85068379a36a080a59ca7b99ce4 +SIZE (xpi/firefox-i18n-36.0/cs.xpi) = 434461 +SHA256 (xpi/firefox-i18n-36.0/cy.xpi) = b1c54c1b1670aad831fb0b0de6670b8c9a9e771a1d8068f4f4d283aa9aa25154 +SIZE (xpi/firefox-i18n-36.0/cy.xpi) = 432589 +SHA256 (xpi/firefox-i18n-36.0/da.xpi) = 72ae9559bd446bda73c55a68f2ac303156de922bc556189fc22e14e7f69cca9f +SIZE (xpi/firefox-i18n-36.0/da.xpi) = 439277 +SHA256 (xpi/firefox-i18n-36.0/de.xpi) = 2a4c1040fd493593e0fce33958911a0c0d3778639698f2bf1ce128260e97ffb0 +SIZE (xpi/firefox-i18n-36.0/de.xpi) = 439186 +SHA256 (xpi/firefox-i18n-36.0/dsb.xpi) = 95777787ad81fff28a4cf6776bfde07d4f05d19bfe074ec6c6931a25cd59eaef +SIZE (xpi/firefox-i18n-36.0/dsb.xpi) = 458446 +SHA256 (xpi/firefox-i18n-36.0/el.xpi) = 4946146b317784bb9a7c8cdaa18a6984e4ccbd0cd5f49a7a86fbc4c780eadaf1 +SIZE (xpi/firefox-i18n-36.0/el.xpi) = 485456 +SHA256 (xpi/firefox-i18n-36.0/en-GB.xpi) = 1a34efc2cdcaf3bfa280f78bf354868c9bc7c219303a85d5f05e3e0758aa2b1c +SIZE (xpi/firefox-i18n-36.0/en-GB.xpi) = 429599 +SHA256 (xpi/firefox-i18n-36.0/en-US.xpi) = 3cdf9a797f0f6ad73ba37dc6755873fb9b0c6efed95ace223ea19db8cfd703dc +SIZE (xpi/firefox-i18n-36.0/en-US.xpi) = 458576 +SHA256 (xpi/firefox-i18n-36.0/en-ZA.xpi) = 176fbf07b20b0d16253840a8bf11988b38d8b4f3f561471cbde6283fa6bd22df +SIZE (xpi/firefox-i18n-36.0/en-ZA.xpi) = 425587 +SHA256 (xpi/firefox-i18n-36.0/eo.xpi) = 2b5878ede3a3e86f3e43b99ba7ad18c6c524a06f214c4d52cd20ff001ece9b33 +SIZE (xpi/firefox-i18n-36.0/eo.xpi) = 473724 +SHA256 (xpi/firefox-i18n-36.0/es-AR.xpi) = 969db2e6097ba3d42c78950357d47ecf68c4ea79c68717d89caedf9ef3377706 +SIZE (xpi/firefox-i18n-36.0/es-AR.xpi) = 442479 +SHA256 (xpi/firefox-i18n-36.0/es-CL.xpi) = 4203bb8da5c14f000e8ca497bb837df2f293aa4f092517f48308b85a45b23160 +SIZE (xpi/firefox-i18n-36.0/es-CL.xpi) = 377184 +SHA256 (xpi/firefox-i18n-36.0/es-ES.xpi) = 924cbd65e596041a3bce0ffbf6092984667cd9d3a6e3d7ffdaba8bf4dd24d907 +SIZE (xpi/firefox-i18n-36.0/es-ES.xpi) = 366986 +SHA256 (xpi/firefox-i18n-36.0/es-MX.xpi) = 2f775bf2d9789e5d1e442d1ae115d8ad1fa864a6ab90ab66a0ea695f60cf4002 +SIZE (xpi/firefox-i18n-36.0/es-MX.xpi) = 444969 +SHA256 (xpi/firefox-i18n-36.0/et.xpi) = e942c03a1bcf91bbb1f9e7341737e0fa5d650b9f82da6bba819e470786ce016f +SIZE (xpi/firefox-i18n-36.0/et.xpi) = 431611 +SHA256 (xpi/firefox-i18n-36.0/eu.xpi) = c1a81882e556e006de17fe5f0d4f22b9ba318ab996e3571250bf121f5c2de65d +SIZE (xpi/firefox-i18n-36.0/eu.xpi) = 454739 +SHA256 (xpi/firefox-i18n-36.0/fa.xpi) = fdf3dc1150d3c617389b45289b54557bd9a07b259d6491cea66bdfa5456e70ef +SIZE (xpi/firefox-i18n-36.0/fa.xpi) = 500877 +SHA256 (xpi/firefox-i18n-36.0/ff.xpi) = 932423f857ab0f439bd8138df336c05bf32b171bede93ee0fea4770d5f71e4ce +SIZE (xpi/firefox-i18n-36.0/ff.xpi) = 442341 +SHA256 (xpi/firefox-i18n-36.0/fi.xpi) = d5b713efe726d68c166a49aa67868aaf5715a67f949863fff932c7a627412a39 +SIZE (xpi/firefox-i18n-36.0/fi.xpi) = 433370 +SHA256 (xpi/firefox-i18n-36.0/fr.xpi) = c6bbbf5d2b635ec567db1cc05650b14ac8256d27473b97d423cd70c70d57a1f9 +SIZE (xpi/firefox-i18n-36.0/fr.xpi) = 449176 +SHA256 (xpi/firefox-i18n-36.0/fy-NL.xpi) = e6fc2b29943ff8f6385bb3bd4ca910b95ca209e20d2489ca8aa22fb022026f10 +SIZE (xpi/firefox-i18n-36.0/fy-NL.xpi) = 443804 +SHA256 (xpi/firefox-i18n-36.0/ga-IE.xpi) = 6877683181a84d74b19d0a58fa31c6e4e1c4b4c9b2334ba72f7aee43caa11bdf +SIZE (xpi/firefox-i18n-36.0/ga-IE.xpi) = 453000 +SHA256 (xpi/firefox-i18n-36.0/gd.xpi) = 4849d0820b282b0cf742d9fc58998b048b84c59ffac769b1f7275feda387820f +SIZE (xpi/firefox-i18n-36.0/gd.xpi) = 442656 +SHA256 (xpi/firefox-i18n-36.0/gl.xpi) = 2cc9eb858d788467cc163f26c7805d27f23dc2e5c0603b5a35dec0ddc804e723 +SIZE (xpi/firefox-i18n-36.0/gl.xpi) = 433435 +SHA256 (xpi/firefox-i18n-36.0/gu-IN.xpi) = acc3e984a815aa092969e58035814428ee021150f6296d7c92b905f8d570d7f9 +SIZE (xpi/firefox-i18n-36.0/gu-IN.xpi) = 463245 +SHA256 (xpi/firefox-i18n-36.0/he.xpi) = 7428790a185f7d0095f0f03a4037bb68a7cbb11e07a88888ac1ceb5ec6c04f76 +SIZE (xpi/firefox-i18n-36.0/he.xpi) = 473373 +SHA256 (xpi/firefox-i18n-36.0/hi-IN.xpi) = f7455568a3d0ea7aaf6946376acfccdbbfcf4a5e46af80afdeab7893eda39ca0 +SIZE (xpi/firefox-i18n-36.0/hi-IN.xpi) = 493294 +SHA256 (xpi/firefox-i18n-36.0/hr.xpi) = c8d36a29bfae974a5d66c575f879a7c90f35b43d46afb46a766c83ee8d990f41 +SIZE (xpi/firefox-i18n-36.0/hr.xpi) = 466358 +SHA256 (xpi/firefox-i18n-36.0/hsb.xpi) = 3142b835fe8c5c9a418c759d051e8aac8a6bbf57f6585ed178d497b77032935c +SIZE (xpi/firefox-i18n-36.0/hsb.xpi) = 456351 +SHA256 (xpi/firefox-i18n-36.0/hu.xpi) = 443282070539cdb96b424d2ce477ff3504dbc8ba96fa4829f36a2cf42cb37558 +SIZE (xpi/firefox-i18n-36.0/hu.xpi) = 441328 +SHA256 (xpi/firefox-i18n-36.0/hy-AM.xpi) = 841759da124a761ce98056b4e7f08fc5410679815fbb2b4208692d52ae7e240c +SIZE (xpi/firefox-i18n-36.0/hy-AM.xpi) = 522155 +SHA256 (xpi/firefox-i18n-36.0/id.xpi) = 49b917ce728d025ea8d7c37c6fb2a08cb1d63cac78d5804ea7efd20ebd827b75 +SIZE (xpi/firefox-i18n-36.0/id.xpi) = 419615 +SHA256 (xpi/firefox-i18n-36.0/is.xpi) = 6c4f2567b7f498c040152afeca9586a5602dafdbbd927f242c7e2980d5d48aa7 +SIZE (xpi/firefox-i18n-36.0/is.xpi) = 473419 +SHA256 (xpi/firefox-i18n-36.0/it.xpi) = b425b23765c451f1514b45c0a0849a3b6b092b1f4835f6d862608e048d58c956 +SIZE (xpi/firefox-i18n-36.0/it.xpi) = 361315 +SHA256 (xpi/firefox-i18n-36.0/ja.xpi) = a88b6e10266962bdcfdb3d3e82c92e390e3cfba1b97e3fa0e3aa857a5d67fbd5 +SIZE (xpi/firefox-i18n-36.0/ja.xpi) = 465475 +SHA256 (xpi/firefox-i18n-36.0/kk.xpi) = c325bd8fa08de23ff056e74afbec7cf8a9cad5850744bfe90661ac64fa8eede0 +SIZE (xpi/firefox-i18n-36.0/kk.xpi) = 490170 +SHA256 (xpi/firefox-i18n-36.0/km.xpi) = 192c31a7695f416a12be2f606bc2b59be2613c545b225aae323a3ed3ffcb7430 +SIZE (xpi/firefox-i18n-36.0/km.xpi) = 550764 +SHA256 (xpi/firefox-i18n-36.0/kn.xpi) = 44d2f08ea69e79dbdb511b623d133b8a3e2891c04143cab06cc7dd0c82f6fd7f +SIZE (xpi/firefox-i18n-36.0/kn.xpi) = 516616 +SHA256 (xpi/firefox-i18n-36.0/ko.xpi) = 754cbea379d94a868de9a77982da90f519b6ff5491da580d5a95a74886958127 +SIZE (xpi/firefox-i18n-36.0/ko.xpi) = 448220 +SHA256 (xpi/firefox-i18n-36.0/lij.xpi) = 151c2fd633588e12f12fb154ee3fb569a1a7e9e4ec5c16165b1e5ac7854455ba +SIZE (xpi/firefox-i18n-36.0/lij.xpi) = 430850 +SHA256 (xpi/firefox-i18n-36.0/lt.xpi) = c80b2a0795988f44b6e2d4f9eca3a783546c2a69a41b28989cc9beb41a180d8a +SIZE (xpi/firefox-i18n-36.0/lt.xpi) = 474005 +SHA256 (xpi/firefox-i18n-36.0/lv.xpi) = 32ba58d5aa0366153f8d40248df0f908d7aa50e64634dbfafd48aaf79dc47fa0 +SIZE (xpi/firefox-i18n-36.0/lv.xpi) = 436231 +SHA256 (xpi/firefox-i18n-36.0/mai.xpi) = 28b87412915594d73c828570508667ebe6d5bd54252149505daf5624df9b6bb9 +SIZE (xpi/firefox-i18n-36.0/mai.xpi) = 485633 +SHA256 (xpi/firefox-i18n-36.0/mk.xpi) = 3c3b68be839f5e1b9e009731d4638c447619c29dbfb1bf5fb415c7a75d59f43e +SIZE (xpi/firefox-i18n-36.0/mk.xpi) = 516378 +SHA256 (xpi/firefox-i18n-36.0/ml.xpi) = 7065016988d6e5aebf27f61dd751ea1891de2a9f663f9c568bf9a04f66a7e1d2 +SIZE (xpi/firefox-i18n-36.0/ml.xpi) = 514512 +SHA256 (xpi/firefox-i18n-36.0/mr.xpi) = aa0bb5c96f9dc644474bf8ac3fe12c5cb4b238eb71e0574b012ac505c5f0d6b4 +SIZE (xpi/firefox-i18n-36.0/mr.xpi) = 495229 +SHA256 (xpi/firefox-i18n-36.0/ms.xpi) = be324d26387defba52f301e977d25ee851ae775c698f44b28b2bd8ed75454eb7 +SIZE (xpi/firefox-i18n-36.0/ms.xpi) = 478247 +SHA256 (xpi/firefox-i18n-36.0/nb-NO.xpi) = fc4c6a33ad10ec6b2cfee793be6a080c24e20bf6dbcf34d52379c4d787d52e55 +SIZE (xpi/firefox-i18n-36.0/nb-NO.xpi) = 432555 +SHA256 (xpi/firefox-i18n-36.0/nl.xpi) = fe585a4ee308e7551528f6179659d97bc22927d737b9704df1207512d9965c8f +SIZE (xpi/firefox-i18n-36.0/nl.xpi) = 432347 +SHA256 (xpi/firefox-i18n-36.0/nn-NO.xpi) = 07915e0bcf316176304e3947959669e357d356d883370635e5d9ed20d828facf +SIZE (xpi/firefox-i18n-36.0/nn-NO.xpi) = 426609 +SHA256 (xpi/firefox-i18n-36.0/or.xpi) = d68be584c618bbb88de313fe7aa79e152d03afaf7b4a310a138cb6946dbd2a14 +SIZE (xpi/firefox-i18n-36.0/or.xpi) = 512011 +SHA256 (xpi/firefox-i18n-36.0/pa-IN.xpi) = d238714ca266ab3229b75f01156dde7805129c75875face9126fb9b3dd0a727f +SIZE (xpi/firefox-i18n-36.0/pa-IN.xpi) = 481891 +SHA256 (xpi/firefox-i18n-36.0/pl.xpi) = c1f25fc40373e6ba2159e14a490924a98fdd9db9584be0122170de9f9e979d5d +SIZE (xpi/firefox-i18n-36.0/pl.xpi) = 402048 +SHA256 (xpi/firefox-i18n-36.0/pt-BR.xpi) = 626a9532870a64e47523bf7748b1e4683acc3cab34495834964f6cfffc773a6c +SIZE (xpi/firefox-i18n-36.0/pt-BR.xpi) = 447670 +SHA256 (xpi/firefox-i18n-36.0/pt-PT.xpi) = f7b27668738a2477a83a5df1b2003203f26ad935baf04350258dd0e50a3179a2 +SIZE (xpi/firefox-i18n-36.0/pt-PT.xpi) = 428706 +SHA256 (xpi/firefox-i18n-36.0/rm.xpi) = 6aa5ca5edce8fd7c8c50fc3619fa1330c24c41860bd7478b52ad22ef72d6b596 +SIZE (xpi/firefox-i18n-36.0/rm.xpi) = 443938 +SHA256 (xpi/firefox-i18n-36.0/ro.xpi) = 610c91311bc3fc4a9f02290e6c4cff84de2c54bd9c0e9d597301c41a9c748728 +SIZE (xpi/firefox-i18n-36.0/ro.xpi) = 483569 +SHA256 (xpi/firefox-i18n-36.0/ru.xpi) = 5a91999701123df52521d52b8d2e1b3867ea7b93d9af834bf1928779653de630 +SIZE (xpi/firefox-i18n-36.0/ru.xpi) = 406023 +SHA256 (xpi/firefox-i18n-36.0/si.xpi) = 85e56491869f3b861f3c778a86fc18a79595427189c029217b7dc4860d1067c9 +SIZE (xpi/firefox-i18n-36.0/si.xpi) = 514744 +SHA256 (xpi/firefox-i18n-36.0/sk.xpi) = 75fbfbae54e2cfd51482c1ffc209907b0e3daa5a2f37fd5d432aecd6b0984755 +SIZE (xpi/firefox-i18n-36.0/sk.xpi) = 457188 +SHA256 (xpi/firefox-i18n-36.0/sl.xpi) = d35efe90a6ee3c5afd9a7032d5851235b0001fb3016da9833b59761755a5205f +SIZE (xpi/firefox-i18n-36.0/sl.xpi) = 429928 +SHA256 (xpi/firefox-i18n-36.0/son.xpi) = 4d94b8ccf453b8b0fd8f396e98559da0943b4c0e451824155a4b760f385324cd +SIZE (xpi/firefox-i18n-36.0/son.xpi) = 436770 +SHA256 (xpi/firefox-i18n-36.0/sq.xpi) = 0aebcc7ae2f32589c7ef11fb55df0b796c57332556fecc7468e65daa4905705b +SIZE (xpi/firefox-i18n-36.0/sq.xpi) = 474053 +SHA256 (xpi/firefox-i18n-36.0/sr.xpi) = 49576b448555aee4601c3af5f68a45016655c7aaf705d7b705541491415f2e5d +SIZE (xpi/firefox-i18n-36.0/sr.xpi) = 467364 +SHA256 (xpi/firefox-i18n-36.0/sv-SE.xpi) = a08c3659a9cbb07de8e3fd105af433452b704f72306bf801cf8f47824dc5b3a9 +SIZE (xpi/firefox-i18n-36.0/sv-SE.xpi) = 440719 +SHA256 (xpi/firefox-i18n-36.0/ta.xpi) = 81913b1572d6d7ed7495d44ab98d96364a22b5ae61c9375740ad903d3a7eb23c +SIZE (xpi/firefox-i18n-36.0/ta.xpi) = 493859 +SHA256 (xpi/firefox-i18n-36.0/te.xpi) = c6fdf3b58724cf0c9ec999581bb2f67e0fc64508de6eeae3d08f4e3a1f87b2a2 +SIZE (xpi/firefox-i18n-36.0/te.xpi) = 513695 +SHA256 (xpi/firefox-i18n-36.0/th.xpi) = 4647d4495928b714491c2c2dbb25597084b31beb0eea74cdb26b0e3e8b543185 +SIZE (xpi/firefox-i18n-36.0/th.xpi) = 521630 +SHA256 (xpi/firefox-i18n-36.0/tr.xpi) = 28f84849c106de0bd32d55af483b80c262744694f437130b0209021ecec797b1 +SIZE (xpi/firefox-i18n-36.0/tr.xpi) = 468961 +SHA256 (xpi/firefox-i18n-36.0/uk.xpi) = e31a1863a8789ef65a5fe7fe7d7536928ce88b431689970cf6aee496a8645154 +SIZE (xpi/firefox-i18n-36.0/uk.xpi) = 469172 +SHA256 (xpi/firefox-i18n-36.0/vi.xpi) = 038708d081c6b5199046b456154a55bef4166a89b536f1efd3141c7cdfcb0000 +SIZE (xpi/firefox-i18n-36.0/vi.xpi) = 454446 +SHA256 (xpi/firefox-i18n-36.0/xh.xpi) = 56f2cdd3b6e6fed9afd150a32234de8ffcd55da1ec58d2c5cd4b30dda68a9c73 +SIZE (xpi/firefox-i18n-36.0/xh.xpi) = 436240 +SHA256 (xpi/firefox-i18n-36.0/zh-CN.xpi) = 58016e2f50536c48f2be10f8cbba49c39f2195c92cced4cd27ff8625ed63a127 +SIZE (xpi/firefox-i18n-36.0/zh-CN.xpi) = 475834 +SHA256 (xpi/firefox-i18n-36.0/zh-TW.xpi) = 1b383472774b35333622cf528f2d40ef00796795e876cfda233a86c262aea2fe +SIZE (xpi/firefox-i18n-36.0/zh-TW.xpi) = 455305 Index: head/www/libxul/Makefile =================================================================== --- head/www/libxul/Makefile (revision 380089) +++ head/www/libxul/Makefile (revision 380090) @@ -1,89 +1,88 @@ # Created by: Michael Johnson # $FreeBSD$ PORTNAME= libxul -DISTVERSION= 31.4.0 -PORTREVISION= 2 +DISTVERSION= 31.5.0 CATEGORIES?= www devel MASTER_SITES= MOZILLA/firefox/releases/${DISTVERSION}esr/source DISTNAME= firefox-${DISTVERSION}esr.source MAINTAINER?= gecko@FreeBSD.org COMMENT?= Mozilla runtime package that can be used to bootstrap XUL+XPCOM apps BUILD_DEPENDS= nspr>=4.10.6:${PORTSDIR}/devel/nspr \ nss>=3.16.2:${PORTSDIR}/security/nss \ libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \ cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \ soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \ harfbuzz>=0.9.25:${PORTSDIR}/print/harfbuzz \ graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \ libvorbis>=1.3.4:${PORTSDIR}/audio/libvorbis \ opus>=1.1:${PORTSDIR}/audio/opus \ libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \ sqlite3>=3.8.4.2:${PORTSDIR}/databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \ v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \ autoconf-2.13:${PORTSDIR}/devel/autoconf213 \ zip:${PORTSDIR}/archivers/zip \ unzip:${PORTSDIR}/archivers/unzip LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l WRKSRC= ${WRKDIR}/mozilla-esr31 CONFLICTS= libxul-1.9.* USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl USES= dos2unix pathfix tar:bzip2 DOS2UNIX_FILES= media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp MAKE_ENV= SKIP_GRE_REGISTRATION=1 mozappdir=${PREFIX}/lib/${MOZILLA} LDFLAGS+= -Wl,-rpath,${PREFIX}/lib/${MOZ_RPATH} USE_LDCONFIG= ${PREFIX}/lib/${MOZILLA} MOZ_OPTIONS?= --enable-application=xulrunner USE_GECKO= gecko CPE_PRODUCT= firefox_esr MOZILLA_EXEC_NAME=xulrunner USE_MOZILLA= # empty MOZILLA_PLIST_DIRS= bin include lib share/idl libdata MOZ_PKGCONFIG_FILES= libxul-embedding libxul mozilla-js \ mozilla-plugin .include "${.CURDIR}/../../www/firefox/Makefile.options" .include .if ${USE_MOZILLA:M-nss} MOZ_PKGCONFIG_FILES+= mozilla-nss .endif .if ${PORT_OPTIONS:MALSA} RUN_DEPENDS+= alsa-lib>=1.0.27.2_1:${PORTSDIR}/audio/alsa-lib .endif .if ${PORT_OPTIONS:MGSTREAMER} RUN_DEPENDS+= gstreamer1-libav>=1.2.4_1:${PORTSDIR}/multimedia/gstreamer1-libav .endif .if ${PORT_OPTIONS:MTEST} BROKEN= stage-package fails with ValueError: no path specified .endif post-patch: @${REINPLACE_CMD} -e '/MOZPNG/s/=[0-9]*/=10511/' \ ${WRKSRC}/configure.in @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/xulrunner/stub/nsXULStub.cpp pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${WRKSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) post-build: @${REINPLACE_CMD} -e "s|\(Libs:.*\)\($$\)|\1 -Wl,-rpath,${PREFIX}/lib/${MOZ_RPATH}\2| ; \ s|%sdkdir%|%sdkdir%/sdk|g ; \ s|%%MOZ_LIBDIR%%|${PREFIX}/lib/${MOZILLA}|g" \ ${WRKSRC}/xulrunner/installer/*.pc.in || ${TRUE} .include Index: head/www/libxul/distinfo =================================================================== --- head/www/libxul/distinfo (revision 380089) +++ head/www/libxul/distinfo (revision 380090) @@ -1,2 +1,2 @@ -SHA256 (firefox-31.4.0esr.source.tar.bz2) = c5ad8b588fb1e7690be5da04f627335f6440277dac4bccd46e6687fcf2fbc23b -SIZE (firefox-31.4.0esr.source.tar.bz2) = 147935703 +SHA256 (firefox-31.5.0esr.source.tar.bz2) = d4243bf74a4421b590f5580f71486f8608a1a483d4779b44ab0e39d6bbf64b6a +SIZE (firefox-31.5.0esr.source.tar.bz2) = 147757474 Index: head/www/libxul/files/patch-bug1083461 =================================================================== --- head/www/libxul/files/patch-bug1083461 (revision 380089) +++ head/www/libxul/files/patch-bug1083461 (nonexistent) @@ -1,156 +0,0 @@ -commit c97894b -Author: L. David Baron -Date: Sun Oct 19 23:31:39 2014 -0400 - - Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers. r=bzbarsky approval-mozilla-esr31=bkerensa ---- - layout/style/nsCSSValue.cpp | 28 ++++++++++++++++------------ - layout/style/nsCSSValue.h | 22 ++++++++++++++++------ - layout/style/nsStyleAnimation.cpp | 6 ++++-- - 3 files changed, 36 insertions(+), 20 deletions(-) - -diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp -index 781ef65..4bbc979 100644 ---- layout/style/nsCSSValue.cpp -+++ layout/style/nsCSSValue.cpp -@@ -253,13 +253,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const - return *mValue.mRect == *aOther.mValue.mRect; - } - else if (eCSSUnit_List == mUnit) { -- return *mValue.mList == *aOther.mValue.mList; -+ return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList); - } - else if (eCSSUnit_SharedList == mUnit) { - return *mValue.mSharedList == *aOther.mValue.mSharedList; - } - else if (eCSSUnit_PairList == mUnit) { -- return *mValue.mPairList == *aOther.mValue.mPairList; -+ return nsCSSValuePairList::Equal(mValue.mPairList, -+ aOther.mValue.mPairList); - } - else if (eCSSUnit_GridTemplateAreas == mUnit) { - return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas; -@@ -1740,13 +1741,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult, - } - } - --bool --nsCSSValueList::operator==(const nsCSSValueList& aOther) const -+/* static */ bool -+nsCSSValueList::Equal(const nsCSSValueList* aList1, -+ const nsCSSValueList* aList2) - { -- if (this == &aOther) -+ if (aList1 == aList2) { - return true; -+ } - -- const nsCSSValueList *p1 = this, *p2 = &aOther; -+ const nsCSSValueList *p1 = aList1, *p2 = aList2; - for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) { - if (p1->mValue != p2->mValue) - return false; -@@ -1799,8 +1802,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult - bool - nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const - { -- return !mHead == !aOther.mHead && -- (!mHead || *mHead == *aOther.mHead); -+ return nsCSSValueList::Equal(mHead, aOther.mHead); - } - - size_t -@@ -2010,13 +2012,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty, - } - } - --bool --nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const -+/* static */ bool -+nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1, -+ const nsCSSValuePairList* aList2) - { -- if (this == &aOther) -+ if (aList1 == aList2) { - return true; -+ } - -- const nsCSSValuePairList *p1 = this, *p2 = &aOther; -+ const nsCSSValuePairList *p1 = aList1, *p2 = aList2; - for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) { - if (p1->mXValue != p2->mXValue || - p1->mYValue != p2->mYValue) -diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h -index 753938c..77eeef0 100644 ---- layout/style/nsCSSValue.h -+++ layout/style/nsCSSValue.h -@@ -806,9 +806,8 @@ struct nsCSSValueList { - void AppendToString(nsCSSProperty aProperty, nsAString& aResult, - nsCSSValue::Serialization aValueSerialization) const; - -- bool operator==(nsCSSValueList const& aOther) const; -- bool operator!=(const nsCSSValueList& aOther) const -- { return !(*this == aOther); } -+ static bool Equal(const nsCSSValueList* aList1, -+ const nsCSSValueList* aList2); - - size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; - -@@ -821,6 +820,12 @@ private: - { - MOZ_COUNT_CTOR(nsCSSValueList); - } -+ -+ // We don't want operator== or operator!= because they wouldn't be -+ // null-safe, which is generally what we need. Use |Equal| method -+ // above instead. -+ bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE; -+ bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE; - }; - - // nsCSSValueList_heap differs from nsCSSValueList only in being -@@ -1199,9 +1204,8 @@ struct nsCSSValuePairList { - void AppendToString(nsCSSProperty aProperty, nsAString& aResult, - nsCSSValue::Serialization aValueSerialization) const; - -- bool operator==(const nsCSSValuePairList& aOther) const; -- bool operator!=(const nsCSSValuePairList& aOther) const -- { return !(*this == aOther); } -+ static bool Equal(const nsCSSValuePairList* aList1, -+ const nsCSSValuePairList* aList2); - - size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; - -@@ -1215,6 +1219,12 @@ private: - { - MOZ_COUNT_CTOR(nsCSSValuePairList); - } -+ -+ // We don't want operator== or operator!= because they wouldn't be -+ // null-safe, which is generally what we need. Use |Equal| method -+ // above instead. -+ bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE; -+ bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE; - }; - - // nsCSSValuePairList_heap differs from nsCSSValuePairList only in being -diff --git layout/style/nsStyleAnimation.cpp layout/style/nsStyleAnimation.cpp -index 6c2ccb0..8dbe404 100644 ---- layout/style/nsStyleAnimation.cpp -+++ layout/style/nsStyleAnimation.cpp -@@ -3816,11 +3816,13 @@ nsStyleAnimation::Value::operator==(const Value& aOther) const - case eUnit_Filter: - case eUnit_Shadow: - case eUnit_BackgroundPosition: -- return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList; -+ return nsCSSValueList::Equal(mValue.mCSSValueList, -+ aOther.mValue.mCSSValueList); - case eUnit_Transform: - return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList; - case eUnit_CSSValuePairList: -- return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList; -+ return nsCSSValuePairList::Equal(mValue.mCSSValuePairList, -+ aOther.mValue.mCSSValuePairList); - case eUnit_UnparsedString: - return (NS_strcmp(GetStringBufferValue(), - aOther.GetStringBufferValue()) == 0); Property changes on: head/www/libxul/files/patch-bug1083461 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/libxul/files/patch-bug1021761 =================================================================== --- head/www/libxul/files/patch-bug1021761 (revision 380089) +++ head/www/libxul/files/patch-bug1021761 (revision 380090) @@ -1,1092 +1,1091 @@ diff --git configure.in configure.in index 48e60c0..ec08417 100644 --- configure.in +++ configure.in -@@ -5438,6 +5438,60 @@ fi +@@ -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_DISABLE_BOOL(oss, -+[ --disable-oss Disable OpenSoundSystem support], -+ MOZ_OSS=, -+ MOZ_OSS=1) ++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 -z "$MOZ_OSS_CFLAGS"; then -+ for oss_conf in /etc/oss.conf /usr/local/etc/oss.conf; do -+ if test -e "$oss_conf"; then -+ . "$oss_conf" -+ fi -+ done ++ if test "$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="-I$OSSLIBDIR/include" ++ 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 linux/soundcard.h soundcard.h) ++ MOZ_CHECK_HEADERS(sys/soundcard.h soundcard.h) + + if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \ -+ "$ac_cv_header_linux_soundcard_h" != "yes" -a \ + "$ac_cv_header_soundcard_h" != "yes"; then + AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --disable-ogg --disable-wave --disable-webm.]) + fi + + dnl Assume NetBSD implementation over SunAudio + AC_CHECK_LIB(ossaudio, _oss_ioctl, + [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound") -+ MOZ_OSS_LIBS="-lossaudio"]) ++ 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 ================================== -@@ -5451,12 +5505,23 @@ MOZ_ARG_ENABLE_BOOL(alsa, - MOZ_ALSA=1, - MOZ_ALSA=) - -+MOZ_ARG_DISABLE_BOOL(alsa-dlopen, -+[ --disable-alsa-dlopen Disable runtime linking of libasound.so], -+ DISABLE_LIBASOUND_DLOPEN=1, -+ DISABLE_LIBASOUND_DLOPEN=) -+ - if test -n "$MOZ_ALSA"; then - PKG_CHECK_MODULES(MOZ_ALSA, alsa, , - [echo "$MOZ_ALSA_PKG_ERRORS" - AC_MSG_ERROR([Need alsa for Ogg, Wave or WebM decoding on Linux. Disable with --disable-ogg --disable-wave --disable-webm. (On Ubuntu, you might try installing the package libasound2-dev.)])]) - fi - -+if test -n "$DISABLE_LIBASOUND_DLOPEN"; then -+ AC_DEFINE(DISABLE_LIBASOUND_DLOPEN) -+else -+ MOZ_ALSA_LIBS= -+fi -+ - AC_SUBST(MOZ_ALSA) - - dnl ======================================================== diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS index b441e8a..950d9e5 100644 --- media/libcubeb/AUTHORS +++ media/libcubeb/AUTHORS @@ -4,3 +4,4 @@ Michael Wu 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); @@ -313,10 +360,10 @@ alsa_refill_stream(cubeb_stream * stm) return ERROR; } if (got > 0) { - snd_pcm_sframes_t wrote = snd_pcm_writei(stm->pcm, p, got); + snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); if (wrote == -EPIPE) { - snd_pcm_recover(stm->pcm, wrote, 1); - wrote = snd_pcm_writei(stm->pcm, p, got); + WRAP(snd_pcm_recover)(stm->pcm, wrote, 1); + wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); } assert(wrote >= 0 && wrote == got); stm->write_position += wrote; @@ -342,7 +389,7 @@ alsa_refill_stream(cubeb_stream * stm) /* Fill the remaining buffer with silence to guarantee one full period has been written. */ - snd_pcm_writei(stm->pcm, (char *) p + got, avail - got); + WRAP(snd_pcm_writei)(stm->pcm, (char *) p + got, avail - got); set_timeout(&stm->drain_timeout, buffer_time * 1000); @@ -453,26 +500,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) slave_def = NULL; - r = snd_config_search(root_pcm, "slave", &slave_pcm); + r = WRAP(snd_config_search)(root_pcm, "slave", &slave_pcm); if (r < 0) { return NULL; } - r = snd_config_get_string(slave_pcm, &string); + r = WRAP(snd_config_get_string)(slave_pcm, &string); if (r >= 0) { - r = snd_config_search_definition(lconf, "pcm_slave", string, &slave_def); + r = WRAP(snd_config_search_definition)(lconf, "pcm_slave", string, &slave_def); if (r < 0) { return NULL; } } do { - r = snd_config_search(slave_def ? slave_def : slave_pcm, "pcm", &pcm); + r = WRAP(snd_config_search)(slave_def ? slave_def : slave_pcm, "pcm", &pcm); if (r < 0) { break; } - r = snd_config_get_string(slave_def ? slave_def : slave_pcm, &string); + r = WRAP(snd_config_get_string)(slave_def ? slave_def : slave_pcm, &string); if (r < 0) { break; } @@ -481,7 +528,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) if (r < 0 || r > (int) sizeof(node_name)) { break; } - r = snd_config_search(lconf, node_name, &pcm); + r = WRAP(snd_config_search)(lconf, node_name, &pcm); if (r < 0) { break; } @@ -490,7 +537,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) } while (0); if (slave_def) { - snd_config_delete(slave_def); + WRAP(snd_config_delete)(slave_def); } return NULL; @@ -513,22 +560,22 @@ init_local_config_with_workaround(char const * pcm_name) lconf = NULL; - if (snd_config == NULL) { + if (*WRAP(snd_config) == NULL) { return NULL; } - r = snd_config_copy(&lconf, snd_config); + r = WRAP(snd_config_copy)(&lconf, *WRAP(snd_config)); if (r < 0) { return NULL; } do { - r = snd_config_search_definition(lconf, "pcm", pcm_name, &pcm_node); + r = WRAP(snd_config_search_definition)(lconf, "pcm", pcm_name, &pcm_node); if (r < 0) { break; } - r = snd_config_get_id(pcm_node, &string); + r = WRAP(snd_config_get_id)(pcm_node, &string); if (r < 0) { break; } @@ -537,7 +584,7 @@ init_local_config_with_workaround(char const * pcm_name) if (r < 0 || r > (int) sizeof(node_name)) { break; } - r = snd_config_search(lconf, node_name, &pcm_node); + r = WRAP(snd_config_search)(lconf, node_name, &pcm_node); if (r < 0) { break; } @@ -548,12 +595,12 @@ init_local_config_with_workaround(char const * pcm_name) } /* Fetch the PCM node's type, and bail out if it's not the PulseAudio plugin. */ - r = snd_config_search(pcm_node, "type", &node); + r = WRAP(snd_config_search)(pcm_node, "type", &node); if (r < 0) { break; } - r = snd_config_get_string(node, &string); + r = WRAP(snd_config_get_string)(node, &string); if (r < 0) { break; } @@ -564,18 +611,18 @@ init_local_config_with_workaround(char const * pcm_name) /* Don't clobber an explicit existing handle_underrun value, set it only if it doesn't already exist. */ - r = snd_config_search(pcm_node, "handle_underrun", &node); + r = WRAP(snd_config_search)(pcm_node, "handle_underrun", &node); if (r != -ENOENT) { break; } /* Disable pcm_pulse's asynchronous underrun handling. */ - r = snd_config_imake_integer(&node, "handle_underrun", 0); + r = WRAP(snd_config_imake_integer)(&node, "handle_underrun", 0); if (r < 0) { break; } - r = snd_config_add(pcm_node, node); + r = WRAP(snd_config_add)(pcm_node, node); if (r < 0) { break; } @@ -583,7 +630,7 @@ init_local_config_with_workaround(char const * pcm_name) return lconf; } while (0); - snd_config_delete(lconf); + WRAP(snd_config_delete)(lconf); return NULL; } @@ -595,9 +642,9 @@ alsa_locked_pcm_open(snd_pcm_t ** pcm, snd_pcm_stream_t stream, snd_config_t * l pthread_mutex_lock(&cubeb_alsa_mutex); if (local_config) { - r = snd_pcm_open_lconf(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config); + r = WRAP(snd_pcm_open_lconf)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config); } else { - r = snd_pcm_open(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK); + r = WRAP(snd_pcm_open)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK); } pthread_mutex_unlock(&cubeb_alsa_mutex); @@ -610,7 +657,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm) int r; pthread_mutex_lock(&cubeb_alsa_mutex); - r = snd_pcm_close(pcm); + r = WRAP(snd_pcm_close)(pcm); pthread_mutex_unlock(&cubeb_alsa_mutex); return r; @@ -667,12 +714,65 @@ alsa_init(cubeb ** context, char const * context_name) pthread_attr_t attr; snd_pcm_t * dummy; + void * libasound = NULL; + +#ifndef DISABLE_LIBASOUND_DLOPEN + libasound = dlopen("libasound.so", RTLD_LAZY); + if (!libasound) { + return CUBEB_ERROR; + } + +#define LOAD(x) do { \ + cubeb_##x = dlsym(libasound, #x); \ + if (!cubeb_##x) { \ + dlclose(libasound); \ + return CUBEB_ERROR; \ + } \ + } while(0) + + LOAD(snd_config); + LOAD(snd_config_add); + LOAD(snd_config_copy); + LOAD(snd_config_delete); + LOAD(snd_config_get_id); + LOAD(snd_config_get_string); + LOAD(snd_config_imake_integer); + LOAD(snd_config_search); + LOAD(snd_config_search_definition); + LOAD(snd_lib_error_set_handler); + LOAD(snd_pcm_avail_update); + LOAD(snd_pcm_close); + LOAD(snd_pcm_delay); + LOAD(snd_pcm_drain); + LOAD(snd_pcm_frames_to_bytes); + LOAD(snd_pcm_get_params); + /* snd_pcm_hw_params_alloca is actually a macro */ + /* LOAD(snd_pcm_hw_params_alloca); */ + LOAD(snd_pcm_hw_params_sizeof); + LOAD(snd_pcm_hw_params_any); + LOAD(snd_pcm_hw_params_get_channels_max); + LOAD(snd_pcm_hw_params_get_rate); + LOAD(snd_pcm_hw_params_set_rate_near); + LOAD(snd_pcm_nonblock); + LOAD(snd_pcm_open); + LOAD(snd_pcm_open_lconf); + LOAD(snd_pcm_pause); + LOAD(snd_pcm_poll_descriptors); + LOAD(snd_pcm_poll_descriptors_count); + LOAD(snd_pcm_poll_descriptors_revents); + LOAD(snd_pcm_recover); + LOAD(snd_pcm_set_params); + LOAD(snd_pcm_state); + LOAD(snd_pcm_writei); + +#undef LOAD +#endif assert(context); *context = NULL; pthread_mutex_lock(&cubeb_alsa_mutex); if (!cubeb_alsa_error_handler_set) { - snd_lib_error_set_handler(silent_error_handler); + WRAP(snd_lib_error_set_handler)(silent_error_handler); cubeb_alsa_error_handler_set = 1; } pthread_mutex_unlock(&cubeb_alsa_mutex); @@ -680,6 +780,8 @@ alsa_init(cubeb ** context, char const * context_name) ctx = calloc(1, sizeof(*ctx)); assert(ctx); + ctx->libasound = libasound; + ctx->ops = &alsa_ops; r = pthread_mutex_init(&ctx->mutex, NULL); @@ -729,7 +831,7 @@ alsa_init(cubeb ** context, char const * context_name) config fails with EINVAL, the PA PCM is too old for this workaround. */ if (r == -EINVAL) { pthread_mutex_lock(&cubeb_alsa_mutex); - snd_config_delete(ctx->local_config); + WRAP(snd_config_delete)(ctx->local_config); pthread_mutex_unlock(&cubeb_alsa_mutex); ctx->local_config = NULL; } else if (r >= 0) { @@ -768,9 +870,13 @@ alsa_destroy(cubeb * ctx) pthread_mutex_destroy(&ctx->mutex); free(ctx->fds); + if (ctx->libasound) { + dlclose(ctx->libasound); + } + if (ctx->local_config) { pthread_mutex_lock(&cubeb_alsa_mutex); - snd_config_delete(ctx->local_config); + WRAP(snd_config_delete)(ctx->local_config); pthread_mutex_unlock(&cubeb_alsa_mutex); } @@ -838,7 +944,7 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, return CUBEB_ERROR; } - r = snd_pcm_nonblock(stm->pcm, 1); + r = WRAP(snd_pcm_nonblock)(stm->pcm, 1); assert(r == 0); /* Ugly hack: the PA ALSA plugin allows buffer configurations that can't @@ -848,23 +954,23 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, latency = latency < 500 ? 500 : latency; } - r = snd_pcm_set_params(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, - stm->params.channels, stm->params.rate, 1, - latency * 1000); + r = WRAP(snd_pcm_set_params)(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, + stm->params.channels, stm->params.rate, 1, + latency * 1000); if (r < 0) { alsa_stream_destroy(stm); return CUBEB_ERROR_INVALID_FORMAT; } - r = snd_pcm_get_params(stm->pcm, &stm->buffer_size, &stm->period_size); + r = WRAP(snd_pcm_get_params)(stm->pcm, &stm->buffer_size, &stm->period_size); assert(r == 0); - stm->nfds = snd_pcm_poll_descriptors_count(stm->pcm); + stm->nfds = WRAP(snd_pcm_poll_descriptors_count)(stm->pcm); assert(stm->nfds > 0); stm->saved_fds = calloc(stm->nfds, sizeof(struct pollfd)); assert(stm->saved_fds); - r = snd_pcm_poll_descriptors(stm->pcm, stm->saved_fds, stm->nfds); + r = WRAP(snd_pcm_poll_descriptors)(stm->pcm, stm->saved_fds, stm->nfds); assert((nfds_t) r == stm->nfds); r = pthread_cond_init(&stm->cond, NULL); @@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) return CUBEB_ERROR; } - rv = snd_pcm_hw_params_any(stm->pcm, hw_params); + rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); if (rv < 0) { return CUBEB_ERROR; } - rv = snd_pcm_hw_params_get_channels_max(hw_params, max_channels); + rv = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels); if (rv < 0) { return CUBEB_ERROR; } @@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { /* get a pcm, disabling resampling, so we get a rate the * hardware/dmix/pulse/etc. supports. */ - rv = snd_pcm_open(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); + rv = WRAP(snd_pcm_open)(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); if (rv < 0) { return CUBEB_ERROR; } - rv = snd_pcm_hw_params_any(pcm, hw_params); + rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); if (rv < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - rv = snd_pcm_hw_params_get_rate(hw_params, rate, &dir); + rv = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir); if (rv >= 0) { /* There is a default rate: use it. */ - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */ *rate = 44100; - rv = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL); + rv = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL); if (rv < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } @@ -1013,7 +1119,7 @@ alsa_stream_start(cubeb_stream * stm) ctx = stm->context; pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 0); + WRAP(snd_pcm_pause)(stm->pcm, 0); gettimeofday(&stm->last_activity, NULL); pthread_mutex_unlock(&stm->mutex); @@ -1047,7 +1153,7 @@ alsa_stream_stop(cubeb_stream * stm) pthread_mutex_unlock(&ctx->mutex); pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 1); + WRAP(snd_pcm_pause)(stm->pcm, 1); pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1063,8 +1169,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) pthread_mutex_lock(&stm->mutex); delay = -1; - if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING || - snd_pcm_delay(stm->pcm, &delay) != 0) { + if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING || + WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) { *position = stm->last_position; pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1089,7 +1195,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) snd_pcm_sframes_t delay; /* This function returns the delay in frames until a frame written using snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */ - if (snd_pcm_delay(stm->pcm, &delay)) { + if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) { return CUBEB_ERROR; } diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c new file mode 100644 index 0000000..5e38e27 --- /dev/null +++ media/libcubeb/src/cubeb_oss.c -@@ -0,0 +1,399 @@ +@@ -0,0 +1,397 @@ +/* + * 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 -+#elif defined(HAVE_LINUX_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 +}; 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/Makefile.in media/webrtc/signaling/test/Makefile.in +index 991f03f..3d99eb5 100644 +--- media/webrtc/signaling/test/Makefile.in ++++ media/webrtc/signaling/test/Makefile.in +@@ -26,9 +26,9 @@ ifdef JS_SHARED_LIBRARY + LIBS += $(MOZ_JS_LIBS) + endif + +-ifdef MOZ_ALSA ++ifdef MOZ_OSS + LIBS += \ +- $(MOZ_ALSA_LIBS) \ ++ $(MOZ_OSS_LIBS) \ + $(NULL) + endif + diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk index e191f13..4fb268a 100644 --- toolkit/library/libxul.mk +++ toolkit/library/libxul.mk -@@ -146,6 +146,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32 +@@ -146,9 +146,9 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32 endif endif +-ifdef MOZ_ALSA +-EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS) +-endif +ifdef MOZ_OSS +EXTRA_DSO_LDOPTS += $(MOZ_OSS_LIBS) +endif -+ - ifdef MOZ_ALSA - EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS) - endif + + ifdef HAVE_CLOCK_MONOTONIC + EXTRA_DSO_LDOPTS += $(REALTIME_LIBS) Index: head/www/libxul/files/patch-bug991253 =================================================================== --- head/www/libxul/files/patch-bug991253 (revision 380089) +++ head/www/libxul/files/patch-bug991253 (revision 380090) @@ -1,15 +1,17 @@ --- extensions/spellcheck/hunspell/src/mozHunspell.cpp~ +++ extensions/spellcheck/hunspell/src/mozHunspell.cpp -@@ -400,6 +400,12 @@ mozHunspell::LoadDictionaryList() +@@ -400,6 +400,14 @@ mozHunspell::LoadDictionaryList(bool aNo } } + // load system hunspell dictionaries -+ nsIFile* hunDir; ++ nsCOMPtr hunDir; + NS_NewNativeLocalFile(NS_LITERAL_CSTRING("%%LOCALBASE%%/share/hunspell"), -+ true, &hunDir); -+ LoadDictionariesFromDir(hunDir); ++ true, getter_AddRefs(hunDir)); ++ if (hunDir) { ++ LoadDictionariesFromDir(hunDir); ++ } + // find dictionaries from extensions requiring restart nsCOMPtr dictDirs; rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY_LIST, Index: head/www/linux-firefox/Makefile =================================================================== --- head/www/linux-firefox/Makefile (revision 380089) +++ head/www/linux-firefox/Makefile (revision 380090) @@ -1,21 +1,21 @@ # Created by: voisine # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 35.0 +DISTVERSION= 36.0 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla USES= tar:bzip2 WANT_GTK218= yes PREFS_FILE= ${WRKSRC}/${APP_SUBDIR}defaults/preferences/browser-prefs.js APP_SUBDIR= browser/ # plugins, extensions .include "${.CURDIR}/../linux-seamonkey/Makefile.common" .include Index: head/www/linux-firefox/distinfo =================================================================== --- head/www/linux-firefox/distinfo (revision 380089) +++ head/www/linux-firefox/distinfo (revision 380090) @@ -1,6 +1,6 @@ -SHA256 (firefox-35.0.tar.bz2) = 1ff41809f88f068fc46770ca518851a5188ae936e4a6d0d11c9b8bdc740298a7 -SIZE (firefox-35.0.tar.bz2) = 47069126 +SHA256 (firefox-36.0.tar.bz2) = 05a6af840f766df81151c82ccb348895db80e1946e150d4e10ca1b4ecf9251ab +SIZE (firefox-36.0.tar.bz2) = 47838612 SHA256 (glib2-2.22.2-2.fc12.i686.rpm) = e3b459c245ec14e7248e9de4b506963a4773407f3e58835db5070d0ed02ecc99 SIZE (glib2-2.22.2-2.fc12.i686.rpm) = 1162908 SHA256 (gtk2-2.18.3-19.fc12.i686.rpm) = aea9cf7ffe9c8dae0faa2bf3d2aa1b2117c55dce03da72dcce8c268279ec0a4b SIZE (gtk2-2.18.3-19.fc12.i686.rpm) = 3198708 Index: head/www/linux-firefox/pkg-plist =================================================================== --- head/www/linux-firefox/pkg-plist (revision 380089) +++ head/www/linux-firefox/pkg-plist (revision 380090) @@ -1,76 +1,76 @@ 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}/icon.png lib/%%APP_NAME%%/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf lib/%%APP_NAME%%/browser/icons/mozicon128.png lib/%%APP_NAME%%/browser/omni.ja lib/%%APP_NAME%%/browser/plugins lib/%%APP_NAME%%/browser/searchplugins/amazondotcom.xml lib/%%APP_NAME%%/browser/searchplugins/bing.xml lib/%%APP_NAME%%/browser/searchplugins/ddg.xml lib/%%APP_NAME%%/browser/searchplugins/eBay.xml lib/%%APP_NAME%%/browser/searchplugins/google.xml lib/%%APP_NAME%%/browser/searchplugins/twitter.xml lib/%%APP_NAME%%/browser/searchplugins/wikipedia.xml lib/%%APP_NAME%%/browser/searchplugins/yahoo.xml lib/%%APP_NAME%%/chrome.manifest lib/%%APP_NAME%%/components/components.manifest lib/%%APP_NAME%%/components/libdbusservice.so lib/%%APP_NAME%%/components/libmozgnome.so lib/%%APP_NAME%%/crashreporter lib/%%APP_NAME%%/crashreporter.ini lib/%%APP_NAME%%/defaults/pref/channel-prefs.js lib/%%APP_NAME%%/dependentlibs.list lib/%%APP_NAME%%/dictionaries/en-US.aff lib/%%APP_NAME%%/dictionaries/en-US.dic lib/%%APP_NAME%%/firefox lib/%%APP_NAME%%/firefox-bin +lib/%%APP_NAME%%/gmp-clearkey/0.1/clearkey.info +lib/%%APP_NAME%%/gmp-clearkey/0.1/libclearkey.so lib/%%APP_NAME%%/icons/updater.png lib/%%APP_NAME%%/libfreebl3.chk lib/%%APP_NAME%%/libfreebl3.so %%GTK218%%lib/%%APP_NAME%%/libgdk-x11-2.0.so.0 %%GTK218%%lib/%%APP_NAME%%/libgio-2.0.so.0 %%GTK218%%lib/%%APP_NAME%%/libglib-2.0.so.0 %%GTK218%%lib/%%APP_NAME%%/libgtk-x11-2.0.so.0 lib/%%APP_NAME%%/libmozalloc.so -lib/%%APP_NAME%%/libmozsandbox.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%%/mozilla-xremote-client 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: head/www/linux-seamonkey/Makefile =================================================================== --- head/www/linux-seamonkey/Makefile (revision 380089) +++ head/www/linux-seamonkey/Makefile (revision 380090) @@ -1,17 +1,17 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= seamonkey -DISTVERSION= 2.32.1 +DISTVERSION= 2.33b1 CATEGORIES= www mail news editors irc ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US MAINTAINER= gecko@FreeBSD.org COMMENT= The open source, standards compliant web browser USES= tar:bzip2 WANT_GTK218= yes .include "${.CURDIR}/Makefile.common" .include Index: head/www/linux-seamonkey/distinfo =================================================================== --- head/www/linux-seamonkey/distinfo (revision 380089) +++ head/www/linux-seamonkey/distinfo (revision 380090) @@ -1,6 +1,6 @@ -SHA256 (seamonkey-2.32.1.tar.bz2) = 64754da6aa431b002e121dfe3f13412aea6b01f509138fc8166e994e85edc052 -SIZE (seamonkey-2.32.1.tar.bz2) = 40802642 +SHA256 (seamonkey-2.33b1.tar.bz2) = 58bec4bc4e0b8990b0fbaff9bb0ea50fb6f7f82f064ae46f365d6c17bd60a5a0 +SIZE (seamonkey-2.33b1.tar.bz2) = 41385948 SHA256 (glib2-2.22.2-2.fc12.i686.rpm) = e3b459c245ec14e7248e9de4b506963a4773407f3e58835db5070d0ed02ecc99 SIZE (glib2-2.22.2-2.fc12.i686.rpm) = 1162908 SHA256 (gtk2-2.18.3-19.fc12.i686.rpm) = aea9cf7ffe9c8dae0faa2bf3d2aa1b2117c55dce03da72dcce8c268279ec0a4b SIZE (gtk2-2.18.3-19.fc12.i686.rpm) = 3198708 Index: head/www/linux-seamonkey/pkg-plist =================================================================== --- head/www/linux-seamonkey/pkg-plist (revision 380089) +++ head/www/linux-seamonkey/pkg-plist (revision 380090) @@ -1,127 +1,124 @@ bin/%%APP_NAME%% share/applications/%%APP_NAME%%.desktop lib/%%APP_NAME%%/Throbber-small.gif lib/%%APP_NAME%%/application.ini lib/%%APP_NAME%%/blocklist.xml lib/%%APP_NAME%%/chrome.manifest lib/%%APP_NAME%%/chrome/icons/default/JSConsoleWindow.png lib/%%APP_NAME%%/chrome/icons/default/JSConsoleWindow16.png lib/%%APP_NAME%%/chrome/icons/default/JSConsoleWindow48.png lib/%%APP_NAME%%/chrome/icons/default/abcardWindow.png lib/%%APP_NAME%%/chrome/icons/default/abcardWindow16.png lib/%%APP_NAME%%/chrome/icons/default/abcardWindow48.png lib/%%APP_NAME%%/chrome/icons/default/ablistWindow.png lib/%%APP_NAME%%/chrome/icons/default/ablistWindow16.png lib/%%APP_NAME%%/chrome/icons/default/ablistWindow48.png lib/%%APP_NAME%%/chrome/icons/default/addressbookWindow.png lib/%%APP_NAME%%/chrome/icons/default/addressbookWindow16.png lib/%%APP_NAME%%/chrome/icons/default/addressbookWindow48.png lib/%%APP_NAME%%/chrome/icons/default/bookmarkproperties.png lib/%%APP_NAME%%/chrome/icons/default/bookmarkproperties16.png lib/%%APP_NAME%%/chrome/icons/default/bookmarkproperties48.png lib/%%APP_NAME%%/chrome/icons/default/default.png lib/%%APP_NAME%%/chrome/icons/default/default16.png lib/%%APP_NAME%%/chrome/icons/default/default48.png lib/%%APP_NAME%%/chrome/icons/default/downloadManager.png lib/%%APP_NAME%%/chrome/icons/default/downloadManager16.png lib/%%APP_NAME%%/chrome/icons/default/downloadManager48.png lib/%%APP_NAME%%/chrome/icons/default/editorWindow.png lib/%%APP_NAME%%/chrome/icons/default/editorWindow16.png lib/%%APP_NAME%%/chrome/icons/default/editorWindow48.png lib/%%APP_NAME%%/chrome/icons/default/findBookmarkWindow.png lib/%%APP_NAME%%/chrome/icons/default/findBookmarkWindow16.png lib/%%APP_NAME%%/chrome/icons/default/findBookmarkWindow48.png lib/%%APP_NAME%%/chrome/icons/default/findHistoryWindow.png lib/%%APP_NAME%%/chrome/icons/default/findHistoryWindow16.png lib/%%APP_NAME%%/chrome/icons/default/findHistoryWindow48.png lib/%%APP_NAME%%/chrome/icons/default/history-window.png lib/%%APP_NAME%%/chrome/icons/default/history-window16.png lib/%%APP_NAME%%/chrome/icons/default/history-window48.png lib/%%APP_NAME%%/chrome/icons/default/main-window.png lib/%%APP_NAME%%/chrome/icons/default/main-window16.png lib/%%APP_NAME%%/chrome/icons/default/main-window48.png lib/%%APP_NAME%%/chrome/icons/default/messengerWindow.png lib/%%APP_NAME%%/chrome/icons/default/messengerWindow16.png lib/%%APP_NAME%%/chrome/icons/default/messengerWindow48.png lib/%%APP_NAME%%/chrome/icons/default/msgcomposeWindow.png lib/%%APP_NAME%%/chrome/icons/default/msgcomposeWindow16.png lib/%%APP_NAME%%/chrome/icons/default/msgcomposeWindow48.png lib/%%APP_NAME%%/chrome/icons/default/places.png lib/%%APP_NAME%%/chrome/icons/default/places16.png lib/%%APP_NAME%%/chrome/icons/default/places48.png lib/%%APP_NAME%%/chrome/icons/default/seamonkey.png lib/%%APP_NAME%%/components/components.manifest lib/%%APP_NAME%%/components/libdbusservice.so lib/%%APP_NAME%%/components/libmozgnome.so lib/%%APP_NAME%%/components/libsuite.so lib/%%APP_NAME%%/crashreporter lib/%%APP_NAME%%/crashreporter-override.ini lib/%%APP_NAME%%/crashreporter.ini lib/%%APP_NAME%%/defaults/messenger/mailViews.dat lib/%%APP_NAME%%/defaults/pref/browser-prefs.js lib/%%APP_NAME%%/defaults/pref/channel-prefs.js lib/%%APP_NAME%%/defaults/profile/chrome/userChrome-example.css lib/%%APP_NAME%%/defaults/profile/chrome/userContent-example.css lib/%%APP_NAME%%/defaults/profile/mimeTypes.rdf lib/%%APP_NAME%%/defaults/profile/panels.rdf lib/%%APP_NAME%%/dependentlibs.list lib/%%APP_NAME%%/dictionaries/en-US.aff lib/%%APP_NAME%%/dictionaries/en-US.dic lib/%%APP_NAME%%/distribution/extensions/inspector@mozilla.org.xpi lib/%%APP_NAME%%/distribution/extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}.xpi lib/%%APP_NAME%%/extensions/modern@themes.mozilla.org.xpi lib/%%APP_NAME%%/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}.xpi lib/%%APP_NAME%%/icons/updater.png lib/%%APP_NAME%%/isp/Bogofilter.sfd lib/%%APP_NAME%%/isp/DSPAM.sfd lib/%%APP_NAME%%/isp/POPFile.sfd lib/%%APP_NAME%%/isp/SpamAssassin.sfd lib/%%APP_NAME%%/isp/SpamPal.sfd lib/%%APP_NAME%%/isp/movemail.rdf lib/%%APP_NAME%%/isp/rss.rdf 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%%/libldap60.so lib/%%APP_NAME%%/libldif60.so lib/%%APP_NAME%%/libmozalloc.so -lib/%%APP_NAME%%/libmozsandbox.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%%/libprldap60.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%%/license.txt -lib/%%APP_NAME%%/mozilla-xremote-client lib/%%APP_NAME%%/omni.ja lib/%%APP_NAME%%/platform.ini lib/%%APP_NAME%%/plugin-container lib/%%APP_NAME%%/plugins lib/%%APP_NAME%%/precomplete lib/%%APP_NAME%%/removed-files lib/%%APP_NAME%%/run-mozilla.sh lib/%%APP_NAME%%/seamonkey lib/%%APP_NAME%%/seamonkey-bin -lib/%%APP_NAME%%/searchplugins/creativecommons.xml lib/%%APP_NAME%%/searchplugins/duckduckgo.xml lib/%%APP_NAME%%/searchplugins/google.xml lib/%%APP_NAME%%/searchplugins/wikipedia.xml lib/%%APP_NAME%%/searchplugins/yahoo.xml lib/%%APP_NAME%%/update-settings.ini lib/%%APP_NAME%%/updater lib/%%APP_NAME%%/updater.ini @exec /bin/cp -R %%LOCALBASE%%/lib/xpi/symlinks/%%APP_NAME%%/ %D/lib/%%APP_NAME%%/extensions/ 2>/dev/null || true @unexec /usr/bin/find %D/lib/%%APP_NAME%%/extensions/ -depth 1 -type l -delete 2>/dev/null || true