Index: branches/2015Q3/Mk/Uses/gecko.mk =================================================================== --- branches/2015Q3/Mk/Uses/gecko.mk (revision 392766) +++ branches/2015Q3/Mk/Uses/gecko.mk (revision 392767) @@ -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 +BUILD_DEPENDS+= libxul>=38:${PORTSDIR}/www/libxul +RUN_DEPENDS+= libxul>=38:${PORTSDIR}/www/libxul .elif ${gecko_ARGS:Mfirefox} -_GECKO_DEFAULT_VERSION= 31 -_GECKO_VERSIONS= 31 38 +_GECKO_DEFAULT_VERSION= 38 +_GECKO_VERSIONS= 38 39 _GECKO_TYPE= firefox # Dependence lines for different Firefox versions -31_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox-esr -38_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox +38_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox-esr +39_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox .if exists(${LOCALBASE}/bin/firefox) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/firefox --version 2>/dev/null _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:M[0-9][0-9]*:C/([0-9][0-9]).*/\1/g} .endif .elif ${gecko_ARGS:Mseamonkey} _GECKO_DEFAULT_VERSION= 33 _GECKO_VERSIONS= 33 _GECKO_TYPE= seamonkey .if exists(${LOCALBASE}/bin/seamonkey) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/seamonkey --version 2>/dev/null _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:M[0-9]*:C/[0-9].([0-9][0-9]).*/\1/g} .endif # Dependence lines for different Seamonkey versions 33_DEPENDS= ${LOCALBASE}/lib/seamonkey/seamonkey:${PORTSDIR}/www/seamonkey .elif ${gecko_ARGS:Mthunderbird} -_GECKO_DEFAULT_VERSION= 31 -_GECKO_VERSIONS= 31 +_GECKO_DEFAULT_VERSION= 38 +_GECKO_VERSIONS= 38 _GECKO_TYPE= thunderbird .if exists(${LOCALBASE}/bin/thunderbird) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/thunderbird --version 2>/dev/null _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:M[0-9][0-9]*:C/([0-9][0-9]).*/\1/g} .endif # Dependence lines for different Thunderbird versions -31_DEPENDS= ${LOCALBASE}/lib/thunderbird/thunderbird:${PORTSDIR}/mail/thunderbird +38_DEPENDS= ${LOCALBASE}/lib/thunderbird/thunderbird:${PORTSDIR}/mail/thunderbird .else IGNORE= Unknown type of gecko dependency you may specify either libxul, firefox, seamonkey or thunderbird .endif .if defined(_GECKO_TYPE) .if ${_GECKO_VERSION:M*+} _GECKO_MIN_VERSION:= ${_GECKO_VERSION:S/+//} _GECKO_WANTED_VERSIONS:= ${_GECKO_DEFAULT_VERSION} .endif .if ${_GECKO_VERSION:M[0-9][0-9]} _GECKO_WANTED_VERSIONS:= ${_GECKO_VERSION:M[0-9][0-9]} .endif _GECKO_WANTED_VERSIONS?= ${_GECKO_DEFAULT_VERSION} .if defined(_GECKO_MIN_VERSION) . for _v in ${_GECKO_VERSIONS} . if ${_GECKO_MIN_VERSION} <= ${_v} _GECKO_WANTED_VERSIONS+= ${_v} . endif . endfor .endif .for _v in ${_GECKO_WANTED_VERSIONS:O:u} _GECKO_HIGHEST_VERSION:= ${_v} .if defined(_GECKO_INSTALLED_VER) && ${_GECKO_INSTALLED_VER} == ${_v} _GECKO_WANTED_VERSION:= ${_v} .endif .endfor .if !defined(_GECKO_WANTED_VERSION) .if defined(_GECKO_INSTALLED_VER) IGNORE= cannot install: ${_GECKO_TYPE} versions mismatch: ${_GECKO_TYPE}-${_GECKO_INSTALLED_VER} is installed and wanted version is ${_GECKO_TYPE}-${_GECKO_VERSION:M[0-9][0-9]} .else _GECKO_WANTED_VERSION:= ${_GECKO_HIGHEST_VERSION} .endif .endif .if ${gecko_ARGS:Mbuild} BUILD_DEPENDS+= ${${_GECKO_WANTED_VERSION}_DEPENDS} .endif RUN_DEPENDS+= ${${_GECKO_WANTED_VERSION}_DEPENDS} .endif .endif Index: branches/2015Q3/Mk/bsd.gecko.mk =================================================================== --- branches/2015Q3/Mk/bsd.gecko.mk (revision 392766) +++ branches/2015Q3/Mk/bsd.gecko.mk (revision 392767) @@ -1,602 +1,602 @@ #-*- 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) 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 +# XXX JCS_EXTENSIONS API is currently disabled by r371283 +# XXX Remove files/patch-ijg-libjpeg once -turbo is default jpeg_USES= 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) 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) 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) # 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} USES+= ${${dep}_USES} 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:MCANBERRA} RUN_DEPENDS+= libcanberra>0:${PORTSDIR}/audio/libcanberra .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(DISABLE_MAKE_JOBS) || defined(MAKE_JOBS_UNSAFE) MAKE_JOBS_NUMBER= 1 .endif .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*} . 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|g ; \ s|-l?pthread|-pthread|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: branches/2015Q3/mail/linux-thunderbird/Makefile =================================================================== --- branches/2015Q3/mail/linux-thunderbird/Makefile (revision 392766) +++ branches/2015Q3/mail/linux-thunderbird/Makefile (revision 392767) @@ -1,18 +1,18 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= thunderbird -DISTVERSION= 31.7.0 +DISTVERSION= 38.1.0 CATEGORIES= mail news net-im ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US \ MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/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: branches/2015Q3/mail/linux-thunderbird/distinfo =================================================================== --- branches/2015Q3/mail/linux-thunderbird/distinfo (revision 392766) +++ branches/2015Q3/mail/linux-thunderbird/distinfo (revision 392767) @@ -1,6 +1,6 @@ -SHA256 (thunderbird-31.7.0.tar.bz2) = 0a9b17c479e9673130d03bb38371013f2caa987690ca36318d32b934d54a5fb0 -SIZE (thunderbird-31.7.0.tar.bz2) = 36880203 +SHA256 (thunderbird-38.1.0.tar.bz2) = 3ef348d181d5a8ef35dd2781ac468e365878139e67a9c34fa817055928b95b3c +SIZE (thunderbird-38.1.0.tar.bz2) = 41827825 SHA256 (glib2-2.22.2-2.fc12.i686.rpm) = e3b459c245ec14e7248e9de4b506963a4773407f3e58835db5070d0ed02ecc99 SIZE (glib2-2.22.2-2.fc12.i686.rpm) = 1162908 SHA256 (gtk2-2.18.3-19.fc12.i686.rpm) = aea9cf7ffe9c8dae0faa2bf3d2aa1b2117c55dce03da72dcce8c268279ec0a4b SIZE (gtk2-2.18.3-19.fc12.i686.rpm) = 3198708 Index: branches/2015Q3/mail/linux-thunderbird/pkg-plist =================================================================== --- branches/2015Q3/mail/linux-thunderbird/pkg-plist (revision 392766) +++ branches/2015Q3/mail/linux-thunderbird/pkg-plist (revision 392767) @@ -1,80 +1,169 @@ 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/default16.png lib/%%APP_NAME%%/chrome/icons/default/default22.png lib/%%APP_NAME%%/chrome/icons/default/default24.png lib/%%APP_NAME%%/chrome/icons/default/default256.png lib/%%APP_NAME%%/chrome/icons/default/default32.png lib/%%APP_NAME%%/chrome/icons/default/default48.png 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/messenger/mailViews.dat lib/%%APP_NAME%%/defaults/pref/browser-prefs.js 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%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/application.ini +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarm.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarmMonitor.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarmService.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAttachment.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAttendee.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calCachedCalendar.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calCalendarManager.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calCalendarSearchService.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calDateTime.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calDateTimeFormatter.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calDavRequestHandlers.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calDeletedItems.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calDuration.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calEvent.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calFilter.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calFreeBusyService.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calHtmlExport.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calICSService-worker.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calICSService.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calIcsImportExport.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calIcsParser.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calIcsSerializer.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calItemBase.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calItipItem.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calListFormatter.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calMonthGridPrinter.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calOutlookCSVImportExport.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calPeriod.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calProtocolHandler.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calRecurrenceDate.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calRecurrenceInfo.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calRecurrenceRule.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calRelation.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calStartupService.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calTimezone.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calTodo.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calTransactionManager.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calUtils.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWcapCalendar.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWcapCalendarItems.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWcapErrors.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWcapRequest.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWcapSession.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWcapUtils.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWeekInfoService.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWeekPrinter.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome.jar +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome.manifest +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calBackendLoader.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calCompositeCalendar.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDavCalendar.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDefaultACLManager.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICALJSComponents.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICSCalendar.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calImportExportModule.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calItemModule.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calItipEmailTransport.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calItipProtocolHandler.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calMemoryCalendar.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calSleepMonitor.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calStorageCalendar.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calTimezoneService.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calWcapCalendarModule.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/components.manifest +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/icaljs-manifest +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/interfaces.xpt +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/libcalbasecomps.so +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/libical-manifest +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/lightningTextCalendarConverter.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/defaults/preferences/lightning.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/install.rdf +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calAlarmUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calAsyncUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calAuthUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calExtract.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calHashedArray.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calItemUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calIteratorUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calItipUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calPrintUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calProviderUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calRecurrenceUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calStorageHelpers.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calStorageUpgrade.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calViewUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calXMLUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/ical.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/timezones/zones.json lib/%%APP_NAME%%/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/icon.png +lib/%%APP_NAME%%/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/icon64.png lib/%%APP_NAME%%/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf -lib/%%APP_NAME%%/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/preview.png 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%%/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%%/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%%/searchplugins/amazondotcom.xml lib/%%APP_NAME%%/searchplugins/aol-web-search.xml lib/%%APP_NAME%%/searchplugins/bing.xml lib/%%APP_NAME%%/searchplugins/eBay.xml lib/%%APP_NAME%%/searchplugins/twitter.xml lib/%%APP_NAME%%/searchplugins/wikipedia.xml lib/%%APP_NAME%%/searchplugins/yahoo.xml lib/%%APP_NAME%%/thunderbird lib/%%APP_NAME%%/thunderbird-bin 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 Index: branches/2015Q3/mail/thunderbird/Makefile =================================================================== --- branches/2015Q3/mail/thunderbird/Makefile (revision 392766) +++ branches/2015Q3/mail/thunderbird/Makefile (revision 392767) @@ -1,179 +1,179 @@ # Created by: Joe Marcus Clarke # $FreeBSD$ PORTNAME= thunderbird -DISTVERSION= 31.7.0 -PORTREVISION= 1 +DISTVERSION= 38.1.0 CATEGORIES= mail news net-im ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ MOZILLA/${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.2.3:${PORTSDIR}/security/nss \ +BUILD_DEPENDS= nspr>=4.10.8:${PORTSDIR}/devel/nspr \ + nss>=3.19.2:${PORTSDIR}/security/nss \ libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \ cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \ soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \ - harfbuzz>=0.9.25:${PORTSDIR}/print/harfbuzz \ + harfbuzz>=0.9.34:${PORTSDIR}/print/harfbuzz \ graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \ libvorbis>=1.3.5:${PORTSDIR}/audio/libvorbis \ opus>=1.1:${PORTSDIR}/audio/opus \ libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \ - sqlite3>=3.8.4.2:${PORTSDIR}/databases/sqlite3 \ + sqlite3>=3.8.9:${PORTSDIR}/databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \ v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \ autoconf-2.13:${PORTSDIR}/devel/autoconf213 \ zip:${PORTSDIR}/archivers/zip \ unzip:${PORTSDIR}/archivers/unzip +# opus>=1.1:${PORTSDIR}/audio/opus \ LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l EM_VERSION= 1.8.2 -L_VERSION= 3.3.7 +L_VERSION= 4.0.1 SSP_UNSAFE= yes USE_GECKO= gecko -USE_MOZILLA= # empty +USE_MOZILLA= -opus 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=CANBERRA ENIGMAIL LIGHTNING .include "${.CURDIR}/../../www/firefox/Makefile.options" OPTIONS_DEFAULT:=${OPTIONS_DEFAULT:S/GSTREAMER//} .include -WRKSRC= ${WRKDIR}/comm-esr31 +WRKSRC= ${WRKDIR}/comm-esr38 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/:S/powerpc/ppc/}-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_FILE= ${MOZ_OBJDIR}/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: branches/2015Q3/mail/thunderbird/distinfo =================================================================== --- branches/2015Q3/mail/thunderbird/distinfo (revision 392766) +++ branches/2015Q3/mail/thunderbird/distinfo (revision 392767) @@ -1,4 +1,4 @@ -SHA256 (thunderbird-31.7.0.source.tar.bz2) = dc3a6afaab486ba09745898f55986f98cc9bf7647cd992849f9c7ead563479b7 -SIZE (thunderbird-31.7.0.source.tar.bz2) = 171059989 +SHA256 (thunderbird-38.1.0.source.tar.bz2) = ddf1fd6048f07370bb0375eac76e687c19d29100c19e9f86fc04bb88d4409787 +SIZE (thunderbird-38.1.0.source.tar.bz2) = 204161689 SHA256 (enigmail-1.8.2.tar.gz) = 1d2700799bc52aaa8e8c9f7a0f5111281ff9fbdffc093cdff070657d574eb2a6 SIZE (enigmail-1.8.2.tar.gz) = 1604159 Index: branches/2015Q3/mail/thunderbird/files/patch-mozilla-media-mtransport-third_party-nICEr-src-util-mbslen.c =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-mozilla-media-mtransport-third_party-nICEr-src-util-mbslen.c (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-mozilla-media-mtransport-third_party-nICEr-src-util-mbslen.c (nonexistent) @@ -1,16 +0,0 @@ ---- mozilla/media/mtransport/third_party/nICEr/src/util/mbslen.c~ -+++ mozilla/media/mtransport/third_party/nICEr/src/util/mbslen.c -@@ -54,6 +54,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - # endif - #endif - -+#ifdef __DragonFly__ -+#include -+# if __DragonFly_version > 300502 -+# define HAVE_XLOCALE -+# endif -+#endif -+ - #ifdef HAVE_XLOCALE - #include - #endif /* HAVE_XLOCALE */ Property changes on: branches/2015Q3/mail/thunderbird/files/patch-mozilla-media-mtransport-third_party-nICEr-src-util-mbslen.c ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug961264 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug961264 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug961264 (nonexistent) @@ -1,266 +0,0 @@ -commit d099acd -Author: Trevor Saunders -Date: Fri Jan 17 15:08:00 2014 -0800 - - Bug 961264 - Remove obsolete checks for gcc visibility stuff. ---- - configure.in | 115 +++------------------------------------------------- - js/src/configure.in | 111 ++------------------------------------------------ - 2 files changed, 8 insertions(+), 218 deletions(-) - -diff --git configure.in configure.in -index dfb8193..33d71b3 100644 ---- mozilla/configure.in -+++ mozilla/configure.in -@@ -2507,118 +2507,15 @@ MOZ_CXX11 - - AC_LANG_C - --dnl Check for .hidden assembler directive and visibility attribute. --dnl Borrowed from glibc configure.in -+dnl Setup default hidden visibility and wrapped system headers. - dnl =============================================================== - if test "$GNU_CC"; then -- AC_CACHE_CHECK(for visibility(hidden) attribute, -- ac_cv_visibility_hidden, -- [cat > conftest.c </dev/null 2>&1; then -- if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then -- ac_cv_visibility_hidden=yes -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_hidden" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -- -- AC_CACHE_CHECK(for visibility(default) attribute, -- ac_cv_visibility_default, -- [cat > conftest.c </dev/null 2>&1; then -- if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then -- ac_cv_visibility_default=yes -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_default" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -- -- AC_CACHE_CHECK(for visibility pragma support, -- ac_cv_visibility_pragma, -- [cat > conftest.c </dev/null 2>&1; then -- if egrep '\.(hidden|private_extern).*foo_hidden' conftest.s >/dev/null; then -- if ! egrep '\.(hidden|private_extern).*foo_default' conftest.s > /dev/null; then -- ac_cv_visibility_pragma=yes -- fi -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_pragma" = "yes"; then -- AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905), -- ac_cv_have_visibility_class_bug, -- [cat > conftest.c < /dev/null 2>&1 ; then -- ac_cv_have_visibility_class_bug=yes -- else -- if test `egrep -c '@PLT|\\$stub' conftest.S` = 0; then -- ac_cv_have_visibility_class_bug=yes -- fi -- fi -- rm -rf conftest.{c,S} -- ]) -- -- AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297), -- ac_cv_have_visibility_builtin_bug, -- [cat > conftest.c < --#pragma GCC visibility pop -- --__attribute__ ((visibility ("default"))) void Func() { -- char c[[100]]; -- memset(c, 0, sizeof(c)); --} --EOF -- ac_cv_have_visibility_builtin_bug=no -- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then -- ac_cv_have_visibility_builtin_bug=yes -- else -- if test `grep -c "@PLT" conftest.S` = 0; then -- ac_cv_visibility_builtin_bug=yes -- fi -- fi -- rm -f conftest.{c,S} -- ]) -- if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \ -- "$ac_cv_have_visibility_class_bug" = "no"; then -- VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -- WRAP_SYSTEM_INCLUDES=1 -- STL_FLAGS='-I$(DIST)/stl_wrappers' -- WRAP_STL_INCLUDES=1 -- else -- VISIBILITY_FLAGS='-fvisibility=hidden' -- fi # have visibility pragma bug -- fi # have visibility pragma -- fi # have visibility(default) attribute -- fi # have visibility(hidden) attribute -+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -+ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -+ WRAP_SYSTEM_INCLUDES=1 -+ STL_FLAGS='-I$(DIST)/stl_wrappers' -+ WRAP_STL_INCLUDES=1 - fi # GNU_CC - - # visibility hidden flag for Sun Studio on Solaris -diff --git js/src/configure.in js/src/configure.in -index bddd46d..d4b522e 100644 ---- mozilla/js/src/configure.in -+++ mozilla/js/src/configure.in -@@ -2077,116 +2077,13 @@ AC_LANG_CPLUSPLUS - - MOZ_CXX11 - --dnl Check for .hidden assembler directive and visibility attribute. --dnl Borrowed from glibc configure.in -+dnl Setup default hidden visibility and wrapped system headers. - dnl =============================================================== - if test "$GNU_CC"; then -- AC_CACHE_CHECK(for visibility(hidden) attribute, -- ac_cv_visibility_hidden, -- [cat > conftest.c </dev/null 2>&1; then -- if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then -- ac_cv_visibility_hidden=yes -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_hidden" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -- -- AC_CACHE_CHECK(for visibility(default) attribute, -- ac_cv_visibility_default, -- [cat > conftest.c </dev/null 2>&1; then -- if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then -- ac_cv_visibility_default=yes -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_default" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -- -- AC_CACHE_CHECK(for visibility pragma support, -- ac_cv_visibility_pragma, -- [cat > conftest.c </dev/null 2>&1; then -- if egrep '\.(hidden|private_extern).*foo_hidden' conftest.s >/dev/null; then -- if ! egrep '\.(hidden|private_extern).*foo_default' conftest.s > /dev/null; then -- ac_cv_visibility_pragma=yes -- fi -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_pragma" = "yes"; then -- AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905), -- ac_cv_have_visibility_class_bug, -- [cat > conftest.c < /dev/null 2>&1 ; then -- ac_cv_have_visibility_class_bug=yes -- else -- if test `egrep -c '@PLT|\\$stub' conftest.S` = 0; then -- ac_cv_have_visibility_class_bug=yes -- fi -- fi -- rm -rf conftest.{c,S} -- ]) -- -- AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297), -- ac_cv_have_visibility_builtin_bug, -- [cat > conftest.c < --#pragma GCC visibility pop -- --__attribute__ ((visibility ("default"))) void Func() { -- char c[[100]]; -- memset(c, 0, sizeof(c)); --} --EOF -- ac_cv_have_visibility_builtin_bug=no -- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then -- ac_cv_have_visibility_builtin_bug=yes -- else -- if test `grep -c "@PLT" conftest.S` = 0; then -- ac_cv_visibility_builtin_bug=yes -- fi -- fi -- rm -f conftest.{c,S} -- ]) -- if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \ -- "$ac_cv_have_visibility_class_bug" = "no"; then -- VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -- WRAP_SYSTEM_INCLUDES=1 -- else -- VISIBILITY_FLAGS='-fvisibility=hidden' -- fi # have visibility pragma bug -- fi # have visibility pragma -- fi # have visibility(default) attribute -- fi # have visibility(hidden) attribute -+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -+ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -+ WRAP_SYSTEM_INCLUDES=1 - fi # GNU_CC - - # visibility hidden flag for Sun Studio on Solaris Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug961264 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug858919 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug858919 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug858919 (nonexistent) @@ -1,391 +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 ---- mozilla/toolkit/components/alerts/nsAlertsService.cpp -+++ mozilla/toolkit/components/alerts/nsAlertsService.cpp -@@ -100,9 +100,11 @@ 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, IPC::Principal(aPrincipal)); -+ rv = sysAlerts->ShowAlertNotification(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable, -+ aAlertCookie, aAlertListener, aAlertName, -+ aBidi, aLang, 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 ---- mozilla/toolkit/system/gnome/moz.build -+++ mozilla/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 ---- mozilla/toolkit/system/gnome/nsAlertsIconListener.cpp -+++ mozilla/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 -+++ mozilla/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 ---- mozilla/toolkit/system/gnome/nsGnomeModule.cpp -+++ mozilla/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 -+++ mozilla/toolkit/system/gnome/nsSystemAlertsService.cpp -@@ -0,0 +1,53 @@ -+/* -*- 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, -+ 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 -+++ mozilla/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: branches/2015Q3/mail/thunderbird/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: branches/2015Q3/mail/thunderbird/files/patch-mozilla-media-webrtc-trunk-src-system_wrappers-source-spreadsortlib-spreadsort.hpp =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-mozilla-media-webrtc-trunk-src-system_wrappers-source-spreadsortlib-spreadsort.hpp (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-mozilla-media-webrtc-trunk-src-system_wrappers-source-spreadsortlib-spreadsort.hpp (nonexistent) @@ -1,16 +0,0 @@ ---- mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp~ -+++ mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp -@@ -21,6 +21,13 @@ Scott McMurray - #include "constants.hpp" - #include - -+#ifdef __FreeBSD__ -+# include -+# if __FreeBSD_version < 900506 -+# define getchar boost_getchar -+# endif -+#endif -+ - namespace boost { - namespace detail { - //This only works on unsigned data types Property changes on: branches/2015Q3/mail/thunderbird/files/patch-mozilla-media-webrtc-trunk-src-system_wrappers-source-spreadsortlib-spreadsort.hpp ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1073709 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1073709 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1073709 (nonexistent) @@ -1,18 +0,0 @@ -diff --git mfbt/Atomics.h mfbt/Atomics.h -index 495a9d3..c7f7601 100644 ---- mozilla/mfbt/Atomics.h -+++ mozilla/mfbt/Atomics.h -@@ -34,10 +34,12 @@ - * loose typing of the atomic builtins. GCC 4.5 and 4.6 lacks inline - * definitions for unspecialized std::atomic and causes linking errors. - * Therefore, we require at least 4.7.0 for using libstdc++. -+ * -+ * libc++ is only functional with clang. - */ - # if MOZ_USING_LIBSTDCXX && MOZ_LIBSTDCXX_VERSION_AT_LEAST(4, 7, 0) - # define MOZ_HAVE_CXX11_ATOMICS --# elif MOZ_USING_LIBCXX -+# elif MOZ_USING_LIBCXX && defined(__clang__) - # define MOZ_HAVE_CXX11_ATOMICS - # endif - /* Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1073709 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-mozilla_toolkit_mozapps_installer_packager_mk =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-mozilla_toolkit_mozapps_installer_packager_mk (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-mozilla_toolkit_mozapps_installer_packager_mk (nonexistent) @@ -1,13 +0,0 @@ -$OpenBSD: patch-toolkit_mozapps_installer_packager_mk,v 1.11 2012/06/11 15:29:56 landry Exp $ -install headers/idl/sdk libs only if xulrunner ---- mozilla/toolkit/mozapps/installer/packager.mk.orig Fri Jun 1 14:04:20 2012 -+++ mozilla/toolkit/mozapps/installer/packager.mk Tue Jun 5 07:55:51 2012 -@@ -886,7 +886,7 @@ endif - $(NSINSTALL) -D $(DESTDIR)$(bindir) - $(RM) -f $(DESTDIR)$(bindir)/$(MOZ_APP_NAME) - ln -s $(installdir)/$(MOZ_APP_NAME) $(DESTDIR)$(bindir) --ifdef INSTALL_SDK # Here comes the hard part -+ifeq ($(MOZ_APP_NAME),xulrunner) - $(NSINSTALL) -D $(DESTDIR)$(includedir) - (cd $(DIST)/include && tar $(TAR_CREATE_FLAGS) - .) | \ - (cd $(DESTDIR)$(includedir) && tar -xf -) Property changes on: branches/2015Q3/mail/thunderbird/files/patch-mozilla_toolkit_mozapps_installer_packager_mk ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1021171 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1021171 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1021171 (nonexistent) @@ -1,193 +0,0 @@ -commit dd19f59 -Author: Trevor Saunders -Date: Fri Jun 6 15:31:30 2014 -0400 - - bug 1021171 - don't return nulllptr in functions returning bool r=bz,waldo ---- - js/src/builtin/TypedObject.cpp | 32 ++++++++++++++++---------------- - js/src/frontend/BytecodeCompiler.cpp | 2 +- - js/xpconnect/wrappers/XrayWrapper.cpp | 2 +- - netwerk/ipc/NeckoParent.cpp | 2 +- - 4 files changed, 19 insertions(+), 19 deletions(-) - -diff --git js/src/builtin/TypedObject.cpp js/src/builtin/TypedObject.cpp -index 9e284b9..7a0a7fc 100644 ---- mozilla/js/src/builtin/TypedObject.cpp -+++ mozilla/js/src/builtin/TypedObject.cpp -@@ -710,12 +710,12 @@ ArrayMetaTypeDescr::construct(JSContext *cx, unsigned argc, Value *vp) - contents.append(")"); - RootedAtom stringRepr(cx, contents.finishAtom()); - if (!stringRepr) -- return nullptr; -+ return false; - - // Extract ArrayType.prototype - RootedObject arrayTypePrototype(cx, GetPrototype(cx, arrayTypeGlobal)); - if (!arrayTypePrototype) -- return nullptr; -+ return false; - - // Create the instance of ArrayType - Rooted obj(cx); -@@ -728,7 +728,7 @@ ArrayMetaTypeDescr::construct(JSContext *cx, unsigned argc, Value *vp) - if (!JSObject::defineProperty(cx, obj, cx->names().length, - UndefinedHandleValue, nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - args.rval().setObject(*obj); - return true; -@@ -762,7 +762,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp) - if (!size.isValid()) { - JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, - JSMSG_TYPEDOBJECT_TOO_BIG); -- return nullptr; -+ return false; - } - - // Construct a canonical string `new ArrayType().dimension(N)`: -@@ -775,7 +775,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp) - contents.append(")"); - RootedAtom stringRepr(cx, contents.finishAtom()); - if (!stringRepr) -- return nullptr; -+ return false; - - // Create the sized type object. - Rooted obj(cx); -@@ -793,7 +793,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp) - if (!JSObject::defineProperty(cx, obj, cx->names().length, - lengthVal, nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - // Add `unsized` property, which is a link from the sized - // array to the unsized array. -@@ -801,7 +801,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp) - if (!JSObject::defineProperty(cx, obj, cx->names().unsized, - unsizedTypeDescrValue, nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - args.rval().setObject(*obj); - return true; -@@ -1253,7 +1253,7 @@ DefineSimpleTypeDescr(JSContext *cx, - Rooted proto(cx); - proto = NewObjectWithProto(cx, objProto, nullptr, TenuredObject); - if (!proto) -- return nullptr; -+ return false; - proto->initTypeDescrSlot(*descr); - descr->initReservedSlot(JS_DESCR_SLOT_TYPROTO, ObjectValue(*proto)); - -@@ -1358,14 +1358,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle global) - #define BINARYDATA_SCALAR_DEFINE(constant_, type_, name_) \ - if (!DefineSimpleTypeDescr(cx, global, module, constant_, \ - cx->names().name_)) \ -- return nullptr; -+ return false; - JS_FOR_EACH_SCALAR_TYPE_REPR(BINARYDATA_SCALAR_DEFINE) - #undef BINARYDATA_SCALAR_DEFINE - - #define BINARYDATA_REFERENCE_DEFINE(constant_, type_, name_) \ - if (!DefineSimpleTypeDescr(cx, global, module, constant_, \ - cx->names().name_)) \ -- return nullptr; -+ return false; - JS_FOR_EACH_REFERENCE_TYPE_REPR(BINARYDATA_REFERENCE_DEFINE) - #undef BINARYDATA_REFERENCE_DEFINE - -@@ -1375,14 +1375,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle global) - arrayType = DefineMetaTypeDescr( - cx, global, module, TypedObjectModuleObject::ArrayTypePrototype); - if (!arrayType) -- return nullptr; -+ return false; - - RootedValue arrayTypeValue(cx, ObjectValue(*arrayType)); - if (!JSObject::defineProperty(cx, module, cx->names().ArrayType, - arrayTypeValue, - nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - // StructType. - -@@ -1390,14 +1390,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle global) - structType = DefineMetaTypeDescr( - cx, global, module, TypedObjectModuleObject::StructTypePrototype); - if (!structType) -- return nullptr; -+ return false; - - RootedValue structTypeValue(cx, ObjectValue(*structType)); - if (!JSObject::defineProperty(cx, module, cx->names().StructType, - structTypeValue, - nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - // Everything is setup, install module on the global object: - RootedValue moduleValue(cx, ObjectValue(*module)); -@@ -1407,7 +1407,7 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle global) - nullptr, nullptr, - 0)) - { -- return nullptr; -+ return false; - } - - return module; -@@ -2449,7 +2449,7 @@ TypedObject::constructUnsized(JSContext *cx, unsigned int argc, Value *vp) - if (length < 0) { - JS_ReportErrorNumber(cx, js_GetErrorMessage, - nullptr, JSMSG_TYPEDOBJECT_BAD_ARGS); -- return nullptr; -+ return false; - } - Rooted obj(cx, createZeroed(cx, callee, length)); - if (!obj) -diff --git js/src/frontend/BytecodeCompiler.cpp js/src/frontend/BytecodeCompiler.cpp -index 5aacc23..aed45ca 100644 ---- mozilla/js/src/frontend/BytecodeCompiler.cpp -+++ mozilla/js/src/frontend/BytecodeCompiler.cpp -@@ -544,7 +544,7 @@ CompileFunctionBody(JSContext *cx, MutableHandleFunction fun, const ReadOnlyComp - - RootedScriptSource sourceObject(cx, CreateScriptSourceObject(cx, options)); - if (!sourceObject) -- return nullptr; -+ return false; - ScriptSource* ss = sourceObject->source(); - - SourceCompressionTask sct(cx); -diff --git js/xpconnect/wrappers/XrayWrapper.cpp js/xpconnect/wrappers/XrayWrapper.cpp -index fd6458b..ab48770 100644 ---- mozilla/js/xpconnect/wrappers/XrayWrapper.cpp -+++ mozilla/js/xpconnect/wrappers/XrayWrapper.cpp -@@ -363,7 +363,7 @@ public: - { - JSAutoCompartment ac(cx, target); - if (!JS_GetClassPrototype(cx, key, protop)) -- return nullptr; -+ return false; - } - return JS_WrapObject(cx, protop); - } -diff --git netwerk/ipc/NeckoParent.cpp netwerk/ipc/NeckoParent.cpp -index 96dbb1d..ef3293b 100644 ---- mozilla/netwerk/ipc/NeckoParent.cpp -+++ mozilla/netwerk/ipc/NeckoParent.cpp -@@ -365,7 +365,7 @@ NeckoParent::RecvPRtspChannelConstructor( - RtspChannelParent* p = static_cast(aActor); - return p->Init(aConnectArgs); - #else -- return nullptr; -+ return false; - #endif - } - Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1021171 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1041795 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1041795 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1041795 (nonexistent) @@ -1,48 +0,0 @@ -diff --git config/rules.mk config/rules.mk -index 4d67eda..783942f 100644 ---- mozilla/config/rules.mk -+++ mozilla/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 ---- mozilla/js/src/Makefile.in -+++ mozilla/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 ---- mozilla/probes/Makefile.in -+++ mozilla/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: branches/2015Q3/mail/thunderbird/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: branches/2015Q3/mail/thunderbird/files/patch-bug1103858 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1103858 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1103858 (nonexistent) @@ -1,42 +0,0 @@ -diff --git configure.in configure.in -index b2b45e7..dcfdfb7 100644 ---- mozilla/configure.in -+++ mozilla/configure.in -@@ -8346,7 +8346,7 @@ case "$OS_TARGET" in - NECKO_WIFI=1 - fi - ;; -- Darwin|FreeBSD|SunOS|WINNT) -+ Darwin|DragonFly|FreeBSD|SunOS|WINNT) - NECKO_WIFI=1 - ;; - Linux) -diff --git netwerk/wifi/moz.build netwerk/wifi/moz.build -index d4de063..3949380 100644 ---- mozilla/netwerk/wifi/moz.build -+++ mozilla/netwerk/wifi/moz.build -@@ -35,7 +35,7 @@ if CONFIG['OS_ARCH'] == 'Darwin': - UNIFIED_SOURCES += [ - 'osx_corewlan.mm', - ] --elif CONFIG['OS_ARCH'] == 'FreeBSD': -+elif CONFIG['OS_ARCH'] in ('DragonFly', 'FreeBSD'): - UNIFIED_SOURCES += [ - 'nsWifiScannerFreeBSD.cpp', - ] -diff --git netwerk/wifi/nsWifiScannerFreeBSD.cpp netwerk/wifi/nsWifiScannerFreeBSD.cpp -index bdf171e..4185d69 100644 ---- mozilla/netwerk/wifi/nsWifiScannerFreeBSD.cpp -+++ mozilla/netwerk/wifi/nsWifiScannerFreeBSD.cpp -@@ -13,7 +13,11 @@ - #include - #include - #include -+#ifdef __DragonFly__ -+#include -+#else - #include -+#endif - - #include - #include Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1103858 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1013675 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1013675 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1013675 (nonexistent) @@ -1,88 +0,0 @@ -diff --git xpcom/base/nsDebugImpl.cpp xpcom/base/nsDebugImpl.cpp -index 13a286f..293bd73 100644 ---- mozilla/xpcom/base/nsDebugImpl.cpp -+++ mozilla/xpcom/base/nsDebugImpl.cpp -@@ -45,12 +45,43 @@ - #endif - #endif - --#if defined(XP_MACOSX) -+#if defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \ -+ || defined(__NetBSD__) || defined(__OpenBSD__) - #include - #include -+#include - #include - #endif - -+#if defined(__OpenBSD__) -+#include -+#endif -+ -+#if defined(__DragonFly__) || defined(__FreeBSD__) -+#include -+#endif -+ -+#if defined(__NetBSD__) -+#undef KERN_PROC -+#define KERN_PROC KERN_PROC2 -+#define KINFO_PROC struct kinfo_proc2 -+#else -+#define KINFO_PROC struct kinfo_proc -+#endif -+ -+#if defined(XP_MACOSX) -+#define KP_FLAGS kp_proc.p_flag -+#elif defined(__DragonFly__) -+#define KP_FLAGS kp_flags -+#elif defined(__FreeBSD__) -+#define KP_FLAGS ki_flag -+#elif defined(__OpenBSD__) && !defined(_P_TRACED) -+#define KP_FLAGS p_psflags -+#define P_TRACED PS_TRACED -+#else -+#define KP_FLAGS p_flag -+#endif -+ - #include "mozilla/mozalloc_abort.h" - - static void -@@ -144,16 +175,22 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult) - - #if defined(XP_WIN) - *aResult = ::IsDebuggerPresent(); --#elif defined(XP_MACOSX) -+#elif defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \ -+ || defined(__NetBSD__) || defined(__OpenBSD__) - // Specify the info we're looking for -- int mib[4]; -- mib[0] = CTL_KERN; -- mib[1] = KERN_PROC; -- mib[2] = KERN_PROC_PID; -- mib[3] = getpid(); -+ int mib[] = { -+ CTL_KERN, -+ KERN_PROC, -+ KERN_PROC_PID, -+ getpid(), -+#if defined(__NetBSD__) || defined(__OpenBSD__) -+ sizeof(KINFO_PROC), -+ 1, -+#endif -+ }; - size_t mibSize = sizeof(mib) / sizeof(int); - -- struct kinfo_proc info; -+ KINFO_PROC info; - size_t infoSize = sizeof(info); - memset(&info, 0, infoSize); - -@@ -163,7 +200,7 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult) - return NS_OK; - } - -- if (info.kp_proc.p_flag & P_TRACED) { -+ if (info.KP_FLAGS & P_TRACED) { - *aResult = true; - } - #endif Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1013675 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1082199 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1082199 (revision 392766) +++ branches/2015Q3/mail/thunderbird/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 ---- mozilla/memory/build/mozjemalloc_compat.c -+++ mozilla/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: branches/2015Q3/mail/thunderbird/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: branches/2015Q3/mail/thunderbird/files/patch-bug1015547 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1015547 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1015547 (nonexistent) @@ -1,95 +0,0 @@ -diff --git configure.in configure.in -index 7bed45f..053de17 100644 ---- mozilla/configure.in -+++ mozilla/configure.in -@@ -2950,7 +2950,7 @@ dnl Checks for library functions. - dnl ======================================================== - AC_PROG_GCC_TRADITIONAL - AC_FUNC_MEMCMP --AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r) -+AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r arc4random arc4random_buf) - - dnl check for clock_gettime(), the CLOCK_MONOTONIC clock - AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC), -diff --git xpcom/base/nsUUIDGenerator.cpp xpcom/base/nsUUIDGenerator.cpp -index 0687344..ca3ff8b 100644 ---- mozilla/xpcom/base/nsUUIDGenerator.cpp -+++ mozilla/xpcom/base/nsUUIDGenerator.cpp -@@ -15,6 +15,10 @@ - - #include "nsUUIDGenerator.h" - -+#ifdef ANDROID -+extern "C" NS_EXPORT void arc4random_buf(void *, size_t); -+#endif -+ - using namespace mozilla; - - NS_IMPL_ISUPPORTS1(nsUUIDGenerator, nsIUUIDGenerator) -@@ -34,7 +38,7 @@ nsUUIDGenerator::Init() - // We're a service, so we're guaranteed that Init() is not going - // to be reentered while we're inside Init(). - --#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID) -+#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM) - /* initialize random number generator using NSPR random noise */ - unsigned int seed; - -@@ -67,7 +71,7 @@ nsUUIDGenerator::Init() - return NS_ERROR_FAILURE; - #endif - --#endif /* non XP_WIN and non XP_MACOSX */ -+#endif /* non XP_WIN and non XP_MACOSX and non ARC4RANDOM */ - - return NS_OK; - } -@@ -114,13 +118,16 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id) - * back to it; instead, we use the value returned when we called - * initstate, since older glibc's have broken setstate() return values - */ --#ifndef ANDROID -+#ifndef HAVE_ARC4RANDOM - setstate(mState); - #endif - -+#ifdef HAVE_ARC4RANDOM_BUF -+ arc4random_buf(id, sizeof(nsID)); -+#else /* HAVE_ARC4RANDOM_BUF */ - size_t bytesLeft = sizeof(nsID); - while (bytesLeft > 0) { --#ifdef ANDROID -+#ifdef HAVE_ARC4RANDOM - long rval = arc4random(); - const size_t mRBytes = 4; - #else -@@ -141,6 +148,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id) - - bytesLeft -= toWrite; - } -+#endif /* HAVE_ARC4RANDOM_BUF */ - - /* Put in the version */ - id->m2 &= 0x0fff; -@@ -150,7 +158,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id) - id->m3[0] &= 0x3f; - id->m3[0] |= 0x80; - --#ifndef ANDROID -+#ifndef HAVE_ARC4RANDOM - /* Restore the previous RNG state */ - setstate(mSavedState); - #endif -diff --git xpcom/base/nsUUIDGenerator.h xpcom/base/nsUUIDGenerator.h -index 6a24212..68ed6f2 100644 ---- mozilla/xpcom/base/nsUUIDGenerator.h -+++ mozilla/xpcom/base/nsUUIDGenerator.h -@@ -27,7 +27,7 @@ private: - protected: - - mozilla::Mutex mLock; --#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID) -+#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM) - char mState[128]; - char *mSavedState; - uint8_t mRBytes; Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1015547 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1026828 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1026828 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1026828 (nonexistent) @@ -1,20 +0,0 @@ -diff --git storage/src/moz.build storage/src/moz.build -index 4cd2551..5c40536 100644 ---- mozilla/storage/src/moz.build -+++ mozilla/storage/src/moz.build -@@ -50,11 +50,14 @@ FINAL_LIBRARY = 'storagecomps' - # (such as NSS) might trigger an initialization of sqlite and allocation - # of memory using the default allocator, prior to the storage service - # registering its allocator, causing memory management failures (bug 938730). -+# However, this is not an issue if both the jemalloc allocator and the default -+# allocator are the same thing. - # - # Note: On Windows our sqlite build assumes we use jemalloc. If you disable - # MOZ_STORAGE_MEMORY on Windows, you will also need to change the "ifdef - # MOZ_MEMORY" options in db/sqlite3/src/Makefile.in. --if CONFIG['MOZ_MEMORY'] and not CONFIG['MOZ_NATIVE_SQLITE']: -+if CONFIG['MOZ_MEMORY'] and (not CONFIG['MOZ_NATIVE_SQLITE'] -+ or CONFIG['MOZ_NATIVE_JEMALLOC']): - if CONFIG['OS_TARGET'] != 'Android': - DEFINES['MOZ_STORAGE_MEMORY'] = True - Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1026828 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1046224 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1046224 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1046224 (nonexistent) @@ -1,26 +0,0 @@ -diff --git configure.in configure.in -index 1853029..559bd45 100644 ---- mozilla/configure.in -+++ mozilla/configure.in -@@ -2651,7 +2651,7 @@ if test "$ac_cv_sockaddr_sa_len" = true ; then - AC_DEFINE(HAVE_SA_LEN) - fi - --AC_ARG_ENABLE(dtrace, -+MOZ_ARG_ENABLE_BOOL(dtrace, - [ --enable-dtrace build with dtrace support if available (default=no)], - [enable_dtrace="yes"],) - if test "x$enable_dtrace" = "xyes"; then -diff --git js/src/configure.in js/src/configure.in -index 134dfd3..682c1fb 100644 ---- mozilla/js/src/configure.in -+++ mozilla/js/src/configure.in -@@ -2153,7 +2153,7 @@ dnl Quota support - MOZ_CHECK_HEADERS(sys/quota.h) - MOZ_CHECK_HEADERS(linux/quota.h) - --AC_ARG_ENABLE(dtrace, -+MOZ_ARG_ENABLE_BOOL(dtrace, - [ --enable-dtrace build with dtrace support if available (default=no)], - [enable_dtrace="yes"],) - if test "x$enable_dtrace" = "xyes"; then Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1046224 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1125579 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1125579 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1125579 (nonexistent) @@ -1,14 +0,0 @@ ---- mozilla/js/src/assembler/jit/ExecutableAllocator.h~ -+++ mozilla/js/src/assembler/jit/ExecutableAllocator.h -@@ -454,6 +454,11 @@ public: - { - User::IMB_Range(code, static_cast(code) + size); - } -+#elif WTF_CPU_ARM_TRADITIONAL && (WTF_OS_FREEBSD || WTF_OS_NETBSD) -+ static void cacheFlush(void* code, size_t size) -+ { -+ __clear_cache(code, reinterpret_cast(code) + size); -+ } - #elif WTF_CPU_ARM_TRADITIONAL && WTF_OS_LINUX && WTF_COMPILER_RVCT - static __asm void cacheFlush(void* code, size_t size); - #elif WTF_CPU_ARM_TRADITIONAL && (WTF_OS_LINUX || WTF_OS_ANDROID) && WTF_COMPILER_GCC Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1125579 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1125580 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1125580 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1125580 (nonexistent) @@ -1,11 +0,0 @@ ---- mozilla/js/src/jit/arm/Architecture-arm.cpp~ -+++ mozilla/js/src/jit/arm/Architecture-arm.cpp -@@ -17,7 +17,7 @@ - - #define HWCAP_USE_HARDFP_ABI (1 << 28) - --#if !(defined(ANDROID) || defined(MOZ_B2G)) && !defined(JS_ARM_SIMULATOR) -+#if defined(__linux__) && !defined(ANDROID) && !defined(MOZ_B2G) && !defined(JS_ARM_SIMULATOR) - #define HWCAP_ARMv7 (1 << 29) - #include - #else Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1125580 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1067377 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1067377 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1067377 (nonexistent) @@ -1,78 +0,0 @@ -diff --git content/media/encoder/VP8TrackEncoder.cpp content/media/encoder/VP8TrackEncoder.cpp -index 452821c..ede21c5 100644 ---- mozilla/content/media/encoder/VP8TrackEncoder.cpp -+++ mozilla/content/media/encoder/VP8TrackEncoder.cpp -@@ -84,7 +84,7 @@ VP8TrackEncoder::Init(int32_t aWidth, int32_t aHeight, int32_t aDisplayWidth, - // Creating a wrapper to the image - setting image data to NULL. Actual - // pointer will be set in encode. Setting align to 1, as it is meaningless - // (actual memory is not allocated). -- vpx_img_wrap(mVPXImageWrapper, IMG_FMT_I420, -+ vpx_img_wrap(mVPXImageWrapper, VPX_IMG_FMT_I420, - mFrameWidth, mFrameHeight, 1, nullptr); - - config.g_w = mFrameWidth; -@@ -239,9 +239,9 @@ void VP8TrackEncoder::PrepareMutedFrame() - uint8_t *cb = mMuteFrame.Elements() + yPlaneSize; - uint8_t *cr = mMuteFrame.Elements() + yPlaneSize + uvPlaneSize; - -- mVPXImageWrapper->planes[PLANE_Y] = y; -- mVPXImageWrapper->planes[PLANE_U] = cb; -- mVPXImageWrapper->planes[PLANE_V] = cr; -+ mVPXImageWrapper->planes[VPX_PLANE_Y] = y; -+ mVPXImageWrapper->planes[VPX_PLANE_U] = cb; -+ mVPXImageWrapper->planes[VPX_PLANE_V] = cr; - mVPXImageWrapper->stride[VPX_PLANE_Y] = mFrameWidth; - mVPXImageWrapper->stride[VPX_PLANE_U] = halfWidth; - mVPXImageWrapper->stride[VPX_PLANE_V] = halfWidth; -@@ -297,9 +297,9 @@ nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk) - const PlanarYCbCrImage::Data *data = yuv->GetData(); - - if (isYUV420(data) && !data->mCbSkip) { // 420 planar -- mVPXImageWrapper->planes[PLANE_Y] = data->mYChannel; -- mVPXImageWrapper->planes[PLANE_U] = data->mCbChannel; -- mVPXImageWrapper->planes[PLANE_V] = data->mCrChannel; -+ mVPXImageWrapper->planes[VPX_PLANE_Y] = data->mYChannel; -+ mVPXImageWrapper->planes[VPX_PLANE_U] = data->mCbChannel; -+ mVPXImageWrapper->planes[VPX_PLANE_V] = data->mCrChannel; - mVPXImageWrapper->stride[VPX_PLANE_Y] = data->mYStride; - mVPXImageWrapper->stride[VPX_PLANE_U] = data->mCbCrStride; - mVPXImageWrapper->stride[VPX_PLANE_V] = data->mCbCrStride; -@@ -355,9 +355,9 @@ nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk) - return NS_ERROR_NOT_IMPLEMENTED; - } - -- mVPXImageWrapper->planes[PLANE_Y] = y; -- mVPXImageWrapper->planes[PLANE_U] = cb; -- mVPXImageWrapper->planes[PLANE_V] = cr; -+ mVPXImageWrapper->planes[VPX_PLANE_Y] = y; -+ mVPXImageWrapper->planes[VPX_PLANE_U] = cb; -+ mVPXImageWrapper->planes[VPX_PLANE_V] = cr; - mVPXImageWrapper->stride[VPX_PLANE_Y] = mFrameWidth; - mVPXImageWrapper->stride[VPX_PLANE_U] = halfWidth; - mVPXImageWrapper->stride[VPX_PLANE_V] = halfWidth; -diff --git media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc -index d9c3a22..75195ae 100644 ---- mozilla/media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc -+++ mozilla/media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc -@@ -180,7 +180,7 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst, - // Creating a wrapper to the image - setting image data to NULL. Actual - // pointer will be set in encode. Setting align to 1, as it is meaningless - // (actual memory is not allocated). -- raw_ = vpx_img_wrap(NULL, IMG_FMT_I420, codec_.width, codec_.height, -+ raw_ = vpx_img_wrap(NULL, VPX_IMG_FMT_I420, codec_.width, codec_.height, - 1, NULL); - // populate encoder configuration with default values - if (vpx_codec_enc_config_default(vpx_codec_vp8_cx(), config_, 0)) { -@@ -349,9 +349,9 @@ int VP8EncoderImpl::Encode(const I420VideoFrame& input_image, - } - // Image in vpx_image_t format. - // Input image is const. VP8's raw image is not defined as const. -- raw_->planes[PLANE_Y] = const_cast(input_image.buffer(kYPlane)); -- raw_->planes[PLANE_U] = const_cast(input_image.buffer(kUPlane)); -- raw_->planes[PLANE_V] = const_cast(input_image.buffer(kVPlane)); -+ raw_->planes[VPX_PLANE_Y] = const_cast(input_image.buffer(kYPlane)); -+ raw_->planes[VPX_PLANE_U] = const_cast(input_image.buffer(kUPlane)); -+ raw_->planes[VPX_PLANE_V] = const_cast(input_image.buffer(kVPlane)); - // TODO(mikhal): Stride should be set in initialization. - raw_->stride[VPX_PLANE_Y] = input_image.stride(kYPlane); - raw_->stride[VPX_PLANE_U] = input_image.stride(kUPlane); Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1067377 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-mozilla-memory-jemalloc-Makefile.in =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-mozilla-memory-jemalloc-Makefile.in (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-mozilla-memory-jemalloc-Makefile.in (nonexistent) @@ -1,10 +0,0 @@ ---- mozilla/memory/jemalloc/Makefile.in~ -+++ mozilla/memory/jemalloc/Makefile.in -@@ -12,3 +12,7 @@ include $(topsrcdir)/config/rules.mk - ifdef GNU_CC - CFLAGS += -std=gnu99 - endif -+ -+# XXX startup crash workaround for gcc47 on amd64 -+jemalloc.$(OBJ_SUFFIX): OS_CFLAGS := $(filter-out -O3 -Ofast,$(OS_CFLAGS)) -+jemalloc.$(OBJ_SUFFIX): MOZ_OPTIMIZE_FLAGS= Property changes on: branches/2015Q3/mail/thunderbird/files/patch-mozilla-memory-jemalloc-Makefile.in ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1021761 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1021761 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1021761 (revision 392767) @@ -1,1091 +1,1102 @@ diff --git configure.in configure.in index 48e60c0..ec08417 100644 --- mozilla/configure.in +++ mozilla/configure.in @@ -5591,6 +5591,67 @@ fi AC_SUBST(MOZ_WEBM_ENCODER) dnl ================================== +dnl = Check OSS availability +dnl ================================== + +dnl If using Linux, Solaris or BSDs, ensure that OSS is available +case "$OS_TARGET" in +Linux|SunOS|DragonFly|FreeBSD|NetBSD|GNU/kFreeBSD) + MOZ_OSS=1 + ;; +esac + +MOZ_ARG_WITH_STRING(oss, +[ --with-oss[=PFX] Enable OpenSoundSystem support [installed at prefix PFX]], + OSSPREFIX=$withval) + +if test -n "$OSSPREFIX"; then + if test "$OSSPREFIX" != "no"; then + MOZ_OSS=1 + else + MOZ_OSS= + fi +fi + +_SAVE_CFLAGS=$CFLAGS +_SAVE_LIBS=$LIBS +if test -n "$MOZ_OSS"; then + dnl Prefer 4Front implementation + AC_MSG_CHECKING([MOZ_OSS_CFLAGS]) + if test "$OSSPREFIX" != "yes"; then + oss_conf=${OSSPREFIX%/usr}/etc/oss.conf + if test -f "$oss_conf"; then + . "$oss_conf" + else + OSSLIBDIR=$OSSPREFIX/lib/oss + fi + if test -d "$OSSLIBDIR"; then + MOZ_OSS_CFLAGS="$MOZ_OSS_CFLAGS -I$OSSLIBDIR/include" + fi + fi + AC_MSG_RESULT([$MOZ_OSS_CFLAGS]) + + CFLAGS="$CFLAGS $MOZ_OSS_CFLAGS" + MOZ_CHECK_HEADERS(sys/soundcard.h soundcard.h) + + if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \ + "$ac_cv_header_soundcard_h" != "yes"; then + AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --disable-ogg --disable-wave --disable-webm.]) + fi + + dnl Assume NetBSD implementation over SunAudio + AC_CHECK_LIB(ossaudio, _oss_ioctl, + [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound") + MOZ_OSS_LIBS="$MOZ_OSS_LIBS -lossaudio"]) +fi +CFLAGS=$_SAVE_CFLAGS +LIBS=$_SAVE_LIBS + +AC_SUBST(MOZ_OSS) +AC_SUBST_LIST(MOZ_OSS_CFLAGS) +AC_SUBST_LIST(MOZ_OSS_LIBS) + +dnl ================================== dnl = Check alsa availability on Linux dnl ================================== diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS index b441e8a..950d9e5 100644 --- 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); +@@ -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); -@@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) +@@ -895,7 +1001,7 @@ alsa_stream_destroy(cubeb_stream * stm) + pthread_mutex_lock(&stm->mutex); + if (stm->pcm) { + if (stm->state == DRAINING) { +- snd_pcm_drain(stm->pcm); ++ WRAP(snd_pcm_drain)(stm->pcm); + } + alsa_locked_pcm_close(stm->pcm); + stm->pcm = NULL; +@@ -938,12 +1044,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) return CUBEB_ERROR; } -- rv = snd_pcm_hw_params_any(stm->pcm, hw_params); -+ rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); - if (rv < 0) { +- r = snd_pcm_hw_params_any(stm->pcm, hw_params); ++ r = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); + if (r < 0) { return CUBEB_ERROR; } -- 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) { +- r = snd_pcm_hw_params_get_channels_max(hw_params, max_channels); ++ r = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels); + if (r < 0) { return CUBEB_ERROR; } -@@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { +@@ -963,34 +1069,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { /* get a pcm, disabling resampling, so we get a rate the * hardware/dmix/pulse/etc. supports. */ -- 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) { +- r = snd_pcm_open(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); ++ r = WRAP(snd_pcm_open)(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); + if (r < 0) { return CUBEB_ERROR; } -- rv = snd_pcm_hw_params_any(pcm, hw_params); -+ rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); - if (rv < 0) { +- r = snd_pcm_hw_params_any(pcm, hw_params); ++ r = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); + if (r < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } -- 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) { +- r = snd_pcm_hw_params_get_rate(hw_params, rate, &dir); ++ r = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir); + if (r >= 0) { /* There is a default rate: use it. */ - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */ *rate = 44100; -- 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) { +- r = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL); ++ r = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL); + if (r < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } @@ -1013,7 +1119,7 @@ alsa_stream_start(cubeb_stream * stm) ctx = stm->context; pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 0); + WRAP(snd_pcm_pause)(stm->pcm, 0); gettimeofday(&stm->last_activity, NULL); pthread_mutex_unlock(&stm->mutex); @@ -1047,7 +1153,7 @@ alsa_stream_stop(cubeb_stream * stm) pthread_mutex_unlock(&ctx->mutex); pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 1); + WRAP(snd_pcm_pause)(stm->pcm, 1); pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1063,8 +1169,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) pthread_mutex_lock(&stm->mutex); delay = -1; - if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING || - snd_pcm_delay(stm->pcm, &delay) != 0) { + if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING || + WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) { *position = stm->last_position; pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1089,7 +1195,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) snd_pcm_sframes_t delay; /* This function returns the delay in frames until a frame written using snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */ - if (snd_pcm_delay(stm->pcm, &delay)) { + if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) { return CUBEB_ERROR; } diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c new file mode 100644 index 0000000..5e38e27 --- /dev/null +++ mozilla/media/libcubeb/src/cubeb_oss.c -@@ -0,0 +1,397 @@ +@@ -0,0 +1,402 @@ +/* + * Copyright © 2014 Mozilla Foundation + * + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ +#if defined(HAVE_SYS_SOUNDCARD_H) +#include +#else +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cubeb/cubeb.h" +#include "cubeb-internal.h" + +#ifndef CUBEB_OSS_DEFAULT_OUTPUT +#define CUBEB_OSS_DEFAULT_OUTPUT "/dev/dsp" +#endif + +#define OSS_BUFFER_SIZE 1024 + +struct cubeb { + struct cubeb_ops const * ops; +}; + +struct cubeb_stream { + cubeb * context; + + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; + void * user_ptr; + float volume; + float panning; + + pthread_mutex_t state_mutex; + pthread_cond_t state_cond; + + int running; + int stopped; + int floating; + + /* These two vars are needed to support old versions of OSS */ + unsigned int position_bytes; + unsigned int last_position_bytes; + + uint64_t written_frags; /* The number of fragments written to /dev/dsp */ + uint64_t missed_frags; /* fragments output with stopped stream */ + + cubeb_stream_params params; + int fd; + pthread_t th; +}; + +static struct cubeb_ops const oss_ops; + +int oss_init(cubeb ** context, char const * context_name) +{ + cubeb* ctx = (cubeb*)malloc(sizeof(cubeb)); + ctx->ops = &oss_ops; + *context = ctx; + return CUBEB_OK; +} + +static void oss_destroy(cubeb *ctx) +{ + free(ctx); +} + +static char const * oss_get_backend_id(cubeb * context) +{ + static char oss_name[] = "oss"; + return oss_name; +} + +static int oss_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) +{ + *max_channels = 2; /* Let's support only stereo for now */ + return CUBEB_OK; +} + +static int oss_get_min_latency(cubeb * context, cubeb_stream_params params, + uint32_t * latency_ms) +{ + /* 40ms is a big enough number to work ok */ + *latency_ms = 40; + return CUBEB_OK; +} + +static int oss_get_preferred_sample_rate(cubeb *context, uint32_t * rate) +{ + /* 48000 seems a prefered choice for most audio devices + * and a good choice for OSS */ + *rate = 48000; + return CUBEB_OK; +} + +static void run_state_callback(cubeb_stream *stream, cubeb_state state) +{ + if (stream->state_callback) { + stream->state_callback(stream, stream->user_ptr, state); + } +} + +static long run_data_callback(cubeb_stream *stream, void *buffer, long nframes) +{ + long got = 0; + pthread_mutex_lock(&stream->state_mutex); + if (stream->data_callback && stream->running && !stream->stopped) { + pthread_mutex_unlock(&stream->state_mutex); + got = stream->data_callback(stream, stream->user_ptr, buffer, nframes); + } else { + pthread_mutex_unlock(&stream->state_mutex); + } + return got; +} + +static void apply_volume(int16_t* buffer, unsigned int n, + float volume, float panning) +{ + float left = volume; + float right = volume; + unsigned int i; + int pan[2]; + if (panning<0) { + right *= (1+panning); + } else { + left *= (1-panning); + } + pan[0] = 128.0*left; + pan[1] = 128.0*right; + for(i=0; irunning) { + pthread_mutex_lock(&stream->state_mutex); + if (stream->stopped) { + pthread_mutex_unlock(&stream->state_mutex); + run_state_callback(stream, CUBEB_STATE_STOPPED); + pthread_mutex_lock(&stream->state_mutex); + while (stream->stopped) { + pthread_cond_wait(&stream->state_cond, &stream->state_mutex); + } + pthread_mutex_unlock(&stream->state_mutex); + run_state_callback(stream, CUBEB_STATE_STARTED); + continue; + } + pthread_mutex_unlock(&stream->state_mutex); + if (stream->floating) { + got = run_data_callback(stream, f_buffer, + OSS_BUFFER_SIZE/stream->params.channels); + for (i=0; i<((unsigned long)got)*stream->params.channels; i++) { + buffer[i] = f_buffer[i]*32767.0; + } + } else { + got = run_data_callback(stream, buffer, + OSS_BUFFER_SIZE/stream->params.channels); + } + apply_volume(buffer, got*stream->params.channels, + stream->volume, stream->panning); + if (got<0) { + run_state_callback(stream, CUBEB_STATE_ERROR); + break; + } + if (!got) { + run_state_callback(stream, CUBEB_STATE_DRAINED); + } + if (got) { + size_t i = 0; + size_t s = got*stream->params.channels*sizeof(int16_t); + while (i < s) { + ssize_t n = write(stream->fd, ((char*)buffer) + i, s - i); + if (n<=0) { + run_state_callback(stream, CUBEB_STATE_ERROR); + break; + } + i+=n; + } + stream->written_frags+=got; + } + } + return NULL; +} + +static void oss_try_set_latency(cubeb_stream* stream, unsigned int latency) +{ + unsigned int latency_bytes, n_frag; + int frag; + /* fragment size of 1024 is a good choice with good chances to be accepted */ + unsigned int frag_size=1024; + unsigned int frag_log=10; /* 2^frag_log = frag_size */ + latency_bytes = + latency*stream->params.rate*stream->params.channels*sizeof(uint16_t)/1000; + n_frag = latency_bytes>>frag_log; + frag = (n_frag<<16) | frag_log; + /* Even if this fails we wish to continue, not checking for errors */ + ioctl(stream->fd, SNDCTL_DSP_SETFRAGMENT, &frag); +} + +static int oss_stream_init(cubeb * context, cubeb_stream ** stm, + char const * stream_name, + cubeb_stream_params stream_params, + unsigned int latency, + cubeb_data_callback data_callback, + cubeb_state_callback state_callback, void * user_ptr) +{ + cubeb_stream* stream = (cubeb_stream*)malloc(sizeof(cubeb_stream)); + stream->context = context; + stream->data_callback = data_callback; + stream->state_callback = state_callback; + stream->user_ptr = user_ptr; + + if ((stream->fd = open(CUBEB_OSS_DEFAULT_OUTPUT, O_WRONLY)) == -1) { + free(stream); + return CUBEB_ERROR; + } +#define SET(what, to) do { unsigned int i = to; \ + int j = ioctl(stream->fd, what, &i); \ + if (j == -1 || i != to) { \ + close(stream->fd); \ + free(stream); \ + return CUBEB_ERROR_INVALID_FORMAT; } } while (0) + + stream->params = stream_params; + stream->volume = 1.0; + stream->panning = 0.0; + + oss_try_set_latency(stream, latency); + + stream->floating = 0; + SET(SNDCTL_DSP_CHANNELS, stream_params.channels); + SET(SNDCTL_DSP_SPEED, stream_params.rate); + switch (stream_params.format) { + case CUBEB_SAMPLE_S16LE: + SET(SNDCTL_DSP_SETFMT, AFMT_S16_LE); + break; + case CUBEB_SAMPLE_S16BE: + SET(SNDCTL_DSP_SETFMT, AFMT_S16_BE); + break; + case CUBEB_SAMPLE_FLOAT32LE: + SET(SNDCTL_DSP_SETFMT, AFMT_S16_NE); + stream->floating = 1; + break; + default: + close(stream->fd); + free(stream); + return CUBEB_ERROR; + } + + + pthread_mutex_init(&stream->state_mutex, NULL); + pthread_cond_init(&stream->state_cond, NULL); + + stream->running = 1; + stream->stopped = 1; + stream->position_bytes = 0; + stream->last_position_bytes = 0; + stream->written_frags = 0; + stream->missed_frags = 0; + + pthread_create(&stream->th, NULL, writer, (void*)stream); + + *stm = stream; + + return CUBEB_OK; +} + +static void oss_stream_destroy(cubeb_stream * stream) +{ + pthread_mutex_lock(&stream->state_mutex); + + stream->running = 0; + stream->stopped = 0; + pthread_cond_signal(&stream->state_cond); + + pthread_mutex_unlock(&stream->state_mutex); + + pthread_join(stream->th, NULL); + + pthread_mutex_destroy(&stream->state_mutex); + pthread_cond_destroy(&stream->state_cond); + close(stream->fd); + free(stream); +} + +static int oss_stream_get_latency(cubeb_stream * stream, uint32_t * latency) +{ + if (ioctl(stream->fd, SNDCTL_DSP_GETODELAY, latency)==-1) { + return CUBEB_ERROR; + } + /* Convert latency from bytes to frames */ + *latency /= stream->params.channels*sizeof(int16_t); + return CUBEB_OK; +} + + +static int oss_stream_current_optr(cubeb_stream * stream, uint64_t * position) +{ + count_info ci; + /* Unfortunately, this ioctl is only available in OSS 4.x */ +#ifdef SNDCTL_DSP_CURRENT_OPTR + oss_count_t count; + if (ioctl(stream->fd, SNDCTL_DSP_CURRENT_OPTR, &count) != -1) { + *position = count.samples;// + count.fifo_samples; + return CUBEB_OK; + } +#endif + /* Fall back to this ioctl in case the previous one fails */ + if (ioctl(stream->fd, SNDCTL_DSP_GETOPTR, &ci) == -1) { + return CUBEB_ERROR; + } + /* ci.bytes is only 32 bit and will start to wrap after arithmetic overflow */ + stream->position_bytes += ci.bytes - stream->last_position_bytes; + stream->last_position_bytes = ci.bytes; + *position = stream->position_bytes/stream->params.channels/sizeof(int16_t); + return CUBEB_OK; +} + +static int oss_stream_get_position(cubeb_stream * stream, uint64_t * position) +{ + if ( oss_stream_current_optr(stream, position) == CUBEB_OK ){ + *position -= stream->missed_frags; + return CUBEB_OK; + } + /* If no correct method to get position works we resort to this */ + *position = stream->written_frags; + return CUBEB_OK; +} + + +static int oss_stream_start(cubeb_stream * stream) +{ + pthread_mutex_lock(&stream->state_mutex); + if (stream->stopped) { + uint64_t ptr; + oss_stream_current_optr(stream, &ptr); + stream->missed_frags = ptr - stream->written_frags; + stream->stopped = 0; + pthread_cond_signal(&stream->state_cond); + } + pthread_mutex_unlock(&stream->state_mutex); + return CUBEB_OK; +} + +static int oss_stream_stop(cubeb_stream * stream) +{ + pthread_mutex_lock(&stream->state_mutex); + stream->stopped = 1; + pthread_mutex_unlock(&stream->state_mutex); + return CUBEB_OK; +} + +int oss_stream_set_panning(cubeb_stream * stream, float panning) +{ + if (stream->params.channels == 2) { + stream->panning=panning; + } + return CUBEB_OK; +} + +int oss_stream_set_volume(cubeb_stream * stream, float volume) +{ + stream->volume=volume; + return CUBEB_OK; +} + +static struct cubeb_ops const oss_ops = { + .init = oss_init, + .get_backend_id = oss_get_backend_id, + .get_max_channel_count = oss_get_max_channel_count, + .get_min_latency = oss_get_min_latency, + .get_preferred_sample_rate = oss_get_preferred_sample_rate, + .destroy = oss_destroy, + .stream_init = oss_stream_init, + .stream_destroy = oss_stream_destroy, + .stream_start = oss_stream_start, + .stream_stop = oss_stream_stop, + .stream_get_position = oss_stream_get_position, -+ .stream_get_latency = oss_stream_get_latency ++ .stream_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 --- 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 +diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build 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 +--- mozilla/media/webrtc/signaling/test/moz.build ++++ mozilla/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'] --ifdef MOZ_ALSA -+ifdef MOZ_OSS - LIBS += \ -- $(MOZ_ALSA_LIBS) \ -+ $(MOZ_OSS_LIBS) \ - $(NULL) - endif +-if CONFIG['MOZ_ALSA']: +- OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] ++if CONFIG['MOZ_OSS']: ++ OS_LIBS += CONFIG['MOZ_OSS_LIBS'] -diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk + 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 ---- mozilla/toolkit/library/libxul.mk -+++ mozilla/toolkit/library/libxul.mk -@@ -146,9 +146,9 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32 - endif - endif +--- mozilla/toolkit/library/moz.build ++++ mozilla/toolkit/library/moz.build +@@ -234,8 +234,8 @@ if CONFIG['MOZ_NATIVE_LIBVPX']: + if not CONFIG['MOZ_TREE_PIXMAN']: + OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] --ifdef MOZ_ALSA --EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS) --endif -+ifdef MOZ_OSS -+EXTRA_DSO_LDOPTS += $(MOZ_OSS_LIBS) -+endif +-if CONFIG['MOZ_ALSA']: +- OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] ++if CONFIG['MOZ_OSS']: ++ OS_LIBS += CONFIG['MOZ_OSS_LIBS'] - ifdef HAVE_CLOCK_MONOTONIC - EXTRA_DSO_LDOPTS += $(REALTIME_LIBS) + if CONFIG['HAVE_CLOCK_MONOTONIC']: + OS_LIBS += CONFIG['REALTIME_LIBS'] Index: branches/2015Q3/mail/thunderbird/files/patch-bug1041268 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1041268 (nonexistent) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1041268 (revision 392767) @@ -0,0 +1,26 @@ +diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc +index 97f69d3..77a50b3 100644 +--- mozilla/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc ++++ mozilla/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc +@@ -18,7 +18,7 @@ ScreenCapturer* ScreenCapturer::Create() { + return Create(DesktopCaptureOptions::CreateDefault()); + } + +-#if defined(WEBRTC_LINUX) ++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) + ScreenCapturer* ScreenCapturer::CreateWithXDamage( + bool use_update_notifications) { + DesktopCaptureOptions options; +diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h +index a8d40a7..177a6c1 100644 +--- mozilla/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h ++++ mozilla/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h +@@ -74,7 +74,7 @@ class ScreenCapturer : public DesktopCapturer { + static ScreenCapturer* Create(const DesktopCaptureOptions& options); + static ScreenCapturer* Create(); + +-#if defined(WEBRTC_LINUX) ++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) + // Creates platform-specific capturer and instructs it whether it should use + // X DAMAGE support. + static ScreenCapturer* CreateWithXDamage(bool use_x_damage); Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1041268 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1073117 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1073117 (nonexistent) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1073117 (revision 392767) @@ -0,0 +1,877 @@ +diff --git widget/gtk/gtk2drawing.c widget/gtk/gtk2drawing.c +index 34f22af..1b950ab 100644 +--- mozilla/widget/gtk/gtk2drawing.c ++++ mozilla/widget/gtk/gtk2drawing.c +@@ -831,7 +831,7 @@ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) + return MOZ_GTK_SUCCESS; + } + +-gint ++static gint + moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, + gint* focus_width, gint* focus_pad) + { +@@ -928,7 +928,7 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) + return MOZ_GTK_SUCCESS; + } + +-gint ++static gint + moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) + { + static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; +diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c +index 08a58d6..7fef6fa 100644 +--- mozilla/widget/gtk/gtk3drawing.c ++++ mozilla/widget/gtk/gtk3drawing.c +@@ -65,6 +65,7 @@ static GtkWidget* gScrolledWindowWidget; + static style_prop_t style_prop_func; + static gboolean have_arrow_scaling; + static gboolean checkbox_check_state; ++static gboolean notebook_has_tab_gap; + static gboolean is_initialized; + + #define ARROW_UP 0 +@@ -725,6 +726,14 @@ moz_gtk_init() + else + checkbox_check_state = GTK_STATE_FLAG_ACTIVE; + ++ if(!gtk_check_version(3, 12, 0)) { ++ ensure_tab_widget(); ++ gtk_widget_style_get(gTabWidget, "has-tab-gap", ¬ebook_has_tab_gap, NULL); ++ } ++ else { ++ notebook_has_tab_gap = TRUE; ++ } ++ + /* Add style property to GtkEntry. + * Adding the style property to the normal GtkEntry class means that it + * will work without issues inside GtkComboBox and for Spinbuttons. */ +@@ -762,37 +771,17 @@ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing) + gint + moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) + { +- gboolean interior_focus; +- gint focus_width = 0; ++ GtkBorder border; ++ GtkBorder padding; ++ GtkStyleContext *style; + + ensure_entry_widget(); +- gtk_widget_style_get(gEntryWidget, +- "interior-focus", &interior_focus, +- "focus-line-width", &focus_width, +- NULL); +- if (interior_focus) { +- GtkBorder border; +- GtkStyleContext *style = gtk_widget_get_style_context(gEntryWidget); +- gtk_style_context_get_border(style, 0, &border); +- *focus_h_width = border.left + focus_width; +- *focus_v_width = border.top + focus_width; +- } else { +- *focus_h_width = focus_width; +- *focus_v_width = focus_width; +- } +- return MOZ_GTK_SUCCESS; +-} +- +-gint +-moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, +- gint* focus_width, gint* focus_pad) +-{ +- gtk_widget_style_get (widget, +- "interior-focus", interior_focus, +- "focus-line-width", focus_width, +- "focus-padding", focus_pad, +- NULL); ++ style = gtk_widget_get_style_context(gEntryWidget); + ++ gtk_style_context_get_border(style, 0, &border); ++ gtk_style_context_get_padding(style, 0, &padding); ++ *focus_h_width = border.left + padding.left; ++ *focus_v_width = border.top + padding.top; + return MOZ_GTK_SUCCESS; + } + +@@ -880,24 +860,6 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) + return MOZ_GTK_SUCCESS; + } + +-gint +-moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) +-{ +- static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; +- GtkBorder *tmp_border; +- +- gtk_widget_style_get (widget, "inner-border", &tmp_border, NULL); +- +- if (tmp_border) { +- *inner_border = *tmp_border; +- gtk_border_free(tmp_border); +- } +- else +- *inner_border = default_inner_border; +- +- return MOZ_GTK_SUCCESS; +-} +- + static gint + moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, + GtkWidgetState* state, +@@ -908,19 +870,8 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, + GtkStyleContext* style = gtk_widget_get_style_context(widget); + gint x = rect->x, y=rect->y, width=rect->width, height=rect->height; + +- gboolean interior_focus; +- gint focus_width, focus_pad; +- +- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); + gtk_widget_set_direction(widget, direction); +- +- if (!interior_focus && state->focused) { +- x += focus_width + focus_pad; +- y += focus_width + focus_pad; +- width -= 2 * (focus_width + focus_pad); +- height -= 2 * (focus_width + focus_pad); +- } +- ++ + gtk_style_context_save(style); + gtk_style_context_set_state(style, state_flags); + +@@ -953,20 +904,12 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, + } + + if (state->focused) { +- if (interior_focus) { +- GtkBorder border; +- gtk_style_context_get_border(style, state_flags, &border); +- x += border.left + focus_pad; +- y += border.top + focus_pad; +- width -= 2 * (border.left + focus_pad); +- height -= 2 * (border.top + focus_pad); +- } else { +- x -= focus_width + focus_pad; +- y -= focus_width + focus_pad; +- width += 2 * (focus_width + focus_pad); +- height += 2 * (focus_width + focus_pad); +- } +- ++ GtkBorder border; ++ gtk_style_context_get_border(style, state_flags, &border); ++ x += border.left; ++ y += border.top; ++ width -= (border.left + border.right); ++ height -= (border.top + border.bottom); + gtk_render_focus(style, cr, x, y, width, height); + } + gtk_style_context_restore(style); +@@ -1056,33 +999,23 @@ calculate_button_inner_rect(GtkWidget* button, GdkRectangle* rect, + GtkTextDirection direction, + gboolean ignore_focus) + { +- GtkBorder inner_border; +- gboolean interior_focus; +- gint focus_width, focus_pad; + GtkStyleContext* style; + GtkBorder border; ++ GtkBorder padding = {0, 0, 0, 0}; + + style = gtk_widget_get_style_context(button); + + /* This mirrors gtkbutton's child positioning */ +- moz_gtk_button_get_inner_border(button, &inner_border); +- moz_gtk_widget_get_focus(button, &interior_focus, +- &focus_width, &focus_pad); +- +- if (ignore_focus) +- focus_width = focus_pad = 0; +- + gtk_style_context_get_border(style, 0, &border); ++ if (!ignore_focus) ++ gtk_style_context_get_padding(style, 0, &padding); + +- inner_rect->x = rect->x + border.left + focus_width + focus_pad; +- inner_rect->x += direction == GTK_TEXT_DIR_LTR ? +- inner_border.left : inner_border.right; +- inner_rect->y = rect->y + inner_border.top + border.top + +- focus_width + focus_pad; +- inner_rect->width = MAX(1, rect->width - inner_border.left - +- inner_border.right - (border.left + focus_pad + focus_width) * 2); +- inner_rect->height = MAX(1, rect->height - inner_border.top - +- inner_border.bottom - (border.top + focus_pad + focus_width) * 2); ++ inner_rect->x = rect->x + border.left + padding.left; ++ inner_rect->y = rect->y + padding.top + border.top; ++ inner_rect->width = MAX(1, rect->width - padding.left - ++ padding.right - border.left * 2); ++ inner_rect->height = MAX(1, rect->height - padding.top - ++ padding.bottom - border.top * 2); + + return MOZ_GTK_SUCCESS; + } +@@ -1457,19 +1390,12 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, + { + gint x = rect->x, y = rect->y, width = rect->width, height = rect->height; + GtkStyleContext* style; +- gboolean interior_focus; +- gint focus_width; + int draw_focus_outline_only = state->depressed; // NS_THEME_FOCUS_OUTLINE + + gtk_widget_set_direction(widget, direction); + + style = gtk_widget_get_style_context(widget); + +- gtk_widget_style_get(widget, +- "interior-focus", &interior_focus, +- "focus-line-width", &focus_width, +- NULL); +- + if (draw_focus_outline_only) { + // Inflate the given 'rect' with the focus outline size. + gint h, v; +@@ -1501,14 +1427,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, + /* This will get us the lit borders that focused textboxes enjoy on + * some themes. */ + gtk_style_context_set_state(style, GTK_STATE_FLAG_FOCUSED); +- if (!interior_focus) { +- /* Indent the border a little bit if we have exterior focus +- (this is what GTK does to draw native entries) */ +- x += focus_width; +- y += focus_width; +- width -= 2 * focus_width; +- height -= 2 * focus_width; +- } + } + + if (state->disabled) { +@@ -1520,11 +1438,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, + } + gtk_render_frame(style, cr, x, y, width, height); + +- if (state->focused && !state->disabled) { +- if (!interior_focus) { +- gtk_render_focus(style, cr, rect->x, rect->y, rect->width, rect->height); +- } +- } + gtk_style_context_restore(style); + + return MOZ_GTK_SUCCESS; +@@ -1829,8 +1742,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, + GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); + GtkStyleContext* style; + GtkWidget *widget; +- gboolean interior_focus; +- gint focus_width, focus_pad; + + if (isradio) { + ensure_radiobutton_widget(); +@@ -1843,7 +1754,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, + + style = gtk_widget_get_style_context(widget); + gtk_style_context_save(style); +- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); + gtk_style_context_set_state(style, state_flags); + + /* this is for drawing a prelight box */ +@@ -1852,10 +1762,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, + rect->x, rect->y, rect->width, rect->height); + } + +- if (state->focused && !interior_focus) { +- gtk_render_focus(style, cr, +- rect->x, rect->y, rect->width, rect->height); +- } + gtk_style_context_restore(style); + + return MOZ_GTK_SUCCESS; +@@ -1868,7 +1774,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, + { + GtkStyleContext *style; + GtkWidget *widget; +- gboolean interior_focus; + + if (!state->focused) + return MOZ_GTK_SUCCESS; +@@ -1889,10 +1794,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, + } + gtk_widget_set_direction(widget, direction); + +- gtk_widget_style_get(widget, "interior-focus", &interior_focus, NULL); +- if (!interior_focus) +- return MOZ_GTK_SUCCESS; +- + gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state)); + gtk_render_focus(style, cr, + rect->x, rect->y, rect->width, rect->height); +@@ -2105,6 +2015,9 @@ moz_gtk_get_tab_thickness(void) + GtkStyleContext * style; + + ensure_tab_widget(); ++ if (!notebook_has_tab_gap) ++ return 0; /* tabs do not overdraw the tabpanel border with "no gap" style */ ++ + style = gtk_widget_get_style_context(gTabWidget); + gtk_style_context_add_class(style, GTK_STYLE_CLASS_NOTEBOOK); + gtk_style_context_get_border(style, 0, &border); +@@ -2150,7 +2063,7 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, + ensure_tab_widget(); + gtk_widget_set_direction(gTabWidget, direction); + +- style = gtk_widget_get_style_context(gTabWidget); ++ style = gtk_widget_get_style_context(gTabWidget); + gtk_style_context_save(style); + moz_gtk_tab_prepare_style_context(style, flags); + +@@ -2167,143 +2080,155 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, + + focusRect = backRect = tabRect; + +- if ((flags & MOZ_GTK_TAB_SELECTED) == 0) { +- /* Only draw the tab */ +- gtk_render_extension(style, cr, +- tabRect.x, tabRect.y, tabRect.width, tabRect.height, +- (flags & MOZ_GTK_TAB_BOTTOM) ? +- GTK_POS_TOP : GTK_POS_BOTTOM ); +- } else { +- /* Draw the tab and the gap +- * We want the gap to be positioned exactly on the tabpanel top +- * border; since tabbox.css may set a negative margin so that the tab +- * frame rect already overlaps the tabpanel frame rect, we need to take +- * that into account when drawing. To that effect, nsNativeThemeGTK +- * passes us this negative margin (bmargin in the graphic below) in the +- * lowest bits of |flags|. We use it to set gap_voffset, the distance +- * between the top of the gap and the bottom of the tab (resp. the +- * bottom of the gap and the top of the tab when we draw a bottom tab), +- * while ensuring that the gap always touches the border of the tab, +- * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results +- * with big negative or positive margins. +- * Here is a graphical explanation in the case of top tabs: +- * ___________________________ +- * / \ +- * | T A B | +- * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel +- * : ^ bmargin : ^ +- * : | (-negative margin, : | +- * bottom : v passed in flags) : | gap_height +- * of -> :.............................: | (the size of the +- * the tab . part of the gap . | tabpanel top border) +- * . outside of the tab . v +- * ---------------------------------------------- +- * +- * To draw the gap, we use gtk_paint_box_gap(), see comment in +- * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall, +- * which should suffice to ensure that the only visible border is the +- * pierced one. If the tab is in the middle, we make the box_gap begin +- * a bit to the left of the tab and end a bit to the right, adjusting +- * the gap position so it still is under the tab, because we want the +- * rendering of a gap in the middle of a tabpanel. This is the role of +- * the gints gap_{l,r}_offset. On the contrary, if the tab is the +- * first, we align the start border of the box_gap with the start +- * border of the tab (left if LTR, right if RTL), by setting the +- * appropriate offset to 0.*/ +- gint gap_loffset, gap_roffset, gap_voffset, gap_height; +- +- /* Get height needed by the gap */ +- gap_height = moz_gtk_get_tab_thickness(); +- +- /* Extract gap_voffset from the first bits of flags */ +- gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK; +- if (gap_voffset > gap_height) +- gap_voffset = gap_height; +- +- /* Set gap_{l,r}_offset to appropriate values */ +- gap_loffset = gap_roffset = 20; /* should be enough */ +- if (flags & MOZ_GTK_TAB_FIRST) { +- if (direction == GTK_TEXT_DIR_RTL) +- gap_roffset = initial_gap; +- else +- gap_loffset = initial_gap; +- } +- +- if (flags & MOZ_GTK_TAB_BOTTOM) { +- /* Draw the tab on bottom */ +- focusRect.y += gap_voffset; +- focusRect.height -= gap_voffset; +- ++ if (notebook_has_tab_gap) { ++ if ((flags & MOZ_GTK_TAB_SELECTED) == 0) { ++ /* Only draw the tab */ + gtk_render_extension(style, cr, +- tabRect.x, tabRect.y + gap_voffset, tabRect.width, +- tabRect.height - gap_voffset, GTK_POS_TOP); +- +- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); +- +- backRect.y += (gap_voffset - gap_height); +- backRect.height = gap_height; +- +- /* Draw the gap; erase with background color before painting in +- * case theme does not */ +- gtk_render_background(style, cr, backRect.x, backRect.y, +- backRect.width, backRect.height); +- cairo_save(cr); +- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); +- cairo_clip(cr); +- +- gtk_render_frame_gap(style, cr, +- tabRect.x - gap_loffset, +- tabRect.y + gap_voffset - 3 * gap_height, +- tabRect.width + gap_loffset + gap_roffset, +- 3 * gap_height, GTK_POS_BOTTOM, +- gap_loffset, gap_loffset + tabRect.width); +- cairo_restore(cr); ++ tabRect.x, tabRect.y, tabRect.width, tabRect.height, ++ (flags & MOZ_GTK_TAB_BOTTOM) ? ++ GTK_POS_TOP : GTK_POS_BOTTOM ); + } else { +- /* Draw the tab on top */ +- focusRect.height -= gap_voffset; +- gtk_render_extension(style, cr, +- tabRect.x, tabRect.y, tabRect.width, +- tabRect.height - gap_voffset, GTK_POS_BOTTOM); +- +- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); +- +- backRect.y += (tabRect.height - gap_voffset); +- backRect.height = gap_height; +- +- /* Draw the gap; erase with background color before painting in +- * case theme does not */ +- gtk_render_background(style, cr, backRect.x, backRect.y, +- backRect.width, backRect.height); +- +- cairo_save(cr); +- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); +- cairo_clip(cr); +- +- gtk_render_frame_gap(style, cr, +- tabRect.x - gap_loffset, +- tabRect.y + tabRect.height - gap_voffset, +- tabRect.width + gap_loffset + gap_roffset, +- 3 * gap_height, GTK_POS_TOP, +- gap_loffset, gap_loffset + tabRect.width); +- cairo_restore(cr); ++ /* Draw the tab and the gap ++ * We want the gap to be positioned exactly on the tabpanel top ++ * border; since tabbox.css may set a negative margin so that the tab ++ * frame rect already overlaps the tabpanel frame rect, we need to take ++ * that into account when drawing. To that effect, nsNativeThemeGTK ++ * passes us this negative margin (bmargin in the graphic below) in the ++ * lowest bits of |flags|. We use it to set gap_voffset, the distance ++ * between the top of the gap and the bottom of the tab (resp. the ++ * bottom of the gap and the top of the tab when we draw a bottom tab), ++ * while ensuring that the gap always touches the border of the tab, ++ * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results ++ * with big negative or positive margins. ++ * Here is a graphical explanation in the case of top tabs: ++ * ___________________________ ++ * / \ ++ * | T A B | ++ * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel ++ * : ^ bmargin : ^ ++ * : | (-negative margin, : | ++ * bottom : v passed in flags) : | gap_height ++ * of -> :.............................: | (the size of the ++ * the tab . part of the gap . | tabpanel top border) ++ * . outside of the tab . v ++ * ---------------------------------------------- ++ * ++ * To draw the gap, we use gtk_paint_box_gap(), see comment in ++ * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall, ++ * which should suffice to ensure that the only visible border is the ++ * pierced one. If the tab is in the middle, we make the box_gap begin ++ * a bit to the left of the tab and end a bit to the right, adjusting ++ * the gap position so it still is under the tab, because we want the ++ * rendering of a gap in the middle of a tabpanel. This is the role of ++ * the gints gap_{l,r}_offset. On the contrary, if the tab is the ++ * first, we align the start border of the box_gap with the start ++ * border of the tab (left if LTR, right if RTL), by setting the ++ * appropriate offset to 0.*/ ++ gint gap_loffset, gap_roffset, gap_voffset, gap_height; ++ ++ /* Get height needed by the gap */ ++ gap_height = moz_gtk_get_tab_thickness(); ++ ++ /* Extract gap_voffset from the first bits of flags */ ++ gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK; ++ if (gap_voffset > gap_height) ++ gap_voffset = gap_height; ++ ++ /* Set gap_{l,r}_offset to appropriate values */ ++ gap_loffset = gap_roffset = 20; /* should be enough */ ++ if (flags & MOZ_GTK_TAB_FIRST) { ++ if (direction == GTK_TEXT_DIR_RTL) ++ gap_roffset = initial_gap; ++ else ++ gap_loffset = initial_gap; ++ } ++ ++ if (flags & MOZ_GTK_TAB_BOTTOM) { ++ /* Draw the tab on bottom */ ++ focusRect.y += gap_voffset; ++ focusRect.height -= gap_voffset; ++ ++ gtk_render_extension(style, cr, ++ tabRect.x, tabRect.y + gap_voffset, tabRect.width, ++ tabRect.height - gap_voffset, GTK_POS_TOP); ++ ++ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); ++ ++ backRect.y += (gap_voffset - gap_height); ++ backRect.height = gap_height; ++ ++ /* Draw the gap; erase with background color before painting in ++ * case theme does not */ ++ gtk_render_background(style, cr, backRect.x, backRect.y, ++ backRect.width, backRect.height); ++ cairo_save(cr); ++ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); ++ cairo_clip(cr); ++ ++ gtk_render_frame_gap(style, cr, ++ tabRect.x - gap_loffset, ++ tabRect.y + gap_voffset - 3 * gap_height, ++ tabRect.width + gap_loffset + gap_roffset, ++ 3 * gap_height, GTK_POS_BOTTOM, ++ gap_loffset, gap_loffset + tabRect.width); ++ cairo_restore(cr); ++ } else { ++ /* Draw the tab on top */ ++ focusRect.height -= gap_voffset; ++ gtk_render_extension(style, cr, ++ tabRect.x, tabRect.y, tabRect.width, ++ tabRect.height - gap_voffset, GTK_POS_BOTTOM); ++ ++ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); ++ ++ backRect.y += (tabRect.height - gap_voffset); ++ backRect.height = gap_height; ++ ++ /* Draw the gap; erase with background color before painting in ++ * case theme does not */ ++ gtk_render_background(style, cr, backRect.x, backRect.y, ++ backRect.width, backRect.height); ++ ++ cairo_save(cr); ++ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); ++ cairo_clip(cr); ++ ++ gtk_render_frame_gap(style, cr, ++ tabRect.x - gap_loffset, ++ tabRect.y + tabRect.height - gap_voffset, ++ tabRect.width + gap_loffset + gap_roffset, ++ 3 * gap_height, GTK_POS_TOP, ++ gap_loffset, gap_loffset + tabRect.width); ++ cairo_restore(cr); ++ } + } ++ } else { ++ gtk_render_background(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height); ++ gtk_render_frame(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height); + } + ++ gtk_style_context_restore(style); ++ + if (state->focused) { + /* Paint the focus ring */ +- GtkBorder border; +- gtk_style_context_get_border(style, GetStateFlagsFromGtkWidgetState(state), &border); ++ GtkBorder padding; ++ ++ gtk_style_context_save(style); ++ moz_gtk_tab_prepare_style_context(style, flags); + +- focusRect.x += border.left; +- focusRect.width -= (border.left + border.right); +- focusRect.y += border.top; +- focusRect.height -= (border.top + border.bottom); ++ gtk_style_context_get_padding(style, GetStateFlagsFromGtkWidgetState(state), &padding); ++ ++ focusRect.x += padding.left; ++ focusRect.width -= (padding.left + padding.right); ++ focusRect.y += padding.top; ++ focusRect.height -= (padding.top + padding.bottom); + + gtk_render_focus(style, cr, + focusRect.x, focusRect.y, focusRect.width, focusRect.height); ++ ++ gtk_style_context_restore(style); + } + +- gtk_style_context_restore(style); + + return MOZ_GTK_SUCCESS; + } +@@ -2684,26 +2609,18 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + switch (widget) { + case MOZ_GTK_BUTTON: + { +- GtkBorder inner_border; +- gboolean interior_focus; +- gint focus_width, focus_pad; +- + ensure_button_widget(); ++ style = gtk_widget_get_style_context(gButtonWidget); ++ + *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget)); + + /* Don't add this padding in HTML, otherwise the buttons will + become too big and stuff the layout. */ + if (!inhtml) { +- moz_gtk_widget_get_focus(gButtonWidget, &interior_focus, &focus_width, &focus_pad); +- moz_gtk_button_get_inner_border(gButtonWidget, &inner_border); +- *left += focus_width + focus_pad + inner_border.left; +- *right += focus_width + focus_pad + inner_border.right; +- *top += focus_width + focus_pad + inner_border.top; +- *bottom += focus_width + focus_pad + inner_border.bottom; ++ moz_gtk_add_style_padding(style, left, top, right, bottom); + } + +- moz_gtk_add_style_border(gtk_widget_get_style_context(gButtonWidget), +- left, top, right, bottom); ++ moz_gtk_add_style_border(style, left, top, right, bottom); + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_ENTRY: +@@ -2717,7 +2610,13 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + ensure_entry_widget(); + style = gtk_widget_get_style_context(gEntryWidget); + moz_gtk_add_style_border(style, left, top, right, bottom); +- moz_gtk_add_style_padding(style, left, top, right, bottom); ++ ++ /* Use the document padding in HTML ++ and GTK style padding in XUL. */ ++ if (!inhtml) { ++ moz_gtk_add_style_padding(style, left, top, right, bottom); ++ } ++ + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_TREEVIEW: +@@ -2737,23 +2636,15 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + * assigned. + * That is why the following code is the same as for MOZ_GTK_BUTTON. + * */ +- +- GtkBorder inner_border; +- gboolean interior_focus; +- gint focus_width, focus_pad; ++ GtkStyleContext *style; + + ensure_tree_header_cell_widget(); + *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gTreeHeaderCellWidget)); + +- moz_gtk_widget_get_focus(gTreeHeaderCellWidget, &interior_focus, &focus_width, &focus_pad); +- moz_gtk_button_get_inner_border(gTreeHeaderCellWidget, &inner_border); +- *left += focus_width + focus_pad + inner_border.left; +- *right += focus_width + focus_pad + inner_border.right; +- *top += focus_width + focus_pad + inner_border.top; +- *bottom += focus_width + focus_pad + inner_border.bottom; +- +- moz_gtk_add_style_border(gtk_widget_get_style_context(gTreeHeaderCellWidget), +- left, top, right, bottom); ++ style = gtk_widget_get_style_context(gTreeHeaderCellWidget); ++ ++ moz_gtk_add_style_border(style, left, top, right, bottom); ++ moz_gtk_add_style_padding(style, left, top, right, bottom); + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_TREE_HEADER_SORTARROW: +@@ -2773,29 +2664,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + /* We need to account for the arrow on the dropdown, so text + * doesn't come too close to the arrow, or in some cases spill + * into the arrow. */ +- gboolean ignored_interior_focus, wide_separators; +- gint focus_width, focus_pad, separator_width; ++ gboolean wide_separators; ++ gint separator_width; + GtkRequisition arrow_req; + GtkBorder border; + + ensure_combo_box_widgets(); + +- *left = gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); ++ *left = *top = *right = *bottom = ++ gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); ++ ++ style = gtk_widget_get_style_context(gComboBoxButtonWidget); + + if (!inhtml) { +- moz_gtk_widget_get_focus(gComboBoxButtonWidget, +- &ignored_interior_focus, +- &focus_width, &focus_pad); +- *left += focus_width + focus_pad; ++ moz_gtk_add_style_padding(style, left, top, right, bottom); + } + +- style = gtk_widget_get_style_context(gComboBoxButtonWidget); +- gtk_style_context_get_border(style, 0, &border); +- +- *top = *left + border.top; +- *left += border.left; +- +- *right = *left; *bottom = *top; ++ moz_gtk_add_style_border(style, left, top, right, bottom); + + /* If there is no separator, don't try to count its width. */ + separator_width = 0; +@@ -2847,60 +2732,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + ensure_frame_widget(); + w = gFrameWidget; + break; +- case MOZ_GTK_CHECKBUTTON_LABEL: +- case MOZ_GTK_RADIOBUTTON_LABEL: +- { +- gboolean interior_focus; +- gint focus_width, focus_pad; +- +- /* If the focus is interior, then the label has a border of +- (focus_width + focus_pad). */ +- if (widget == MOZ_GTK_CHECKBUTTON_LABEL) { +- ensure_checkbox_widget(); +- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, +- &focus_width, &focus_pad); +- } +- else { +- ensure_radiobutton_widget(); +- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, +- &focus_width, &focus_pad); +- } +- +- if (interior_focus) +- *left = *top = *right = *bottom = (focus_width + focus_pad); +- +- return MOZ_GTK_SUCCESS; +- } +- + case MOZ_GTK_CHECKBUTTON_CONTAINER: + case MOZ_GTK_RADIOBUTTON_CONTAINER: + { +- gboolean interior_focus; +- gint focus_width, focus_pad; +- +- /* If the focus is _not_ interior, then the container has a border +- of (focus_width + focus_pad). */ + if (widget == MOZ_GTK_CHECKBUTTON_CONTAINER) { + ensure_checkbox_widget(); +- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, +- &focus_width, &focus_pad); + w = gCheckboxWidget; + } else { + ensure_radiobutton_widget(); +- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, +- &focus_width, &focus_pad); + w = gRadiobuttonWidget; + } ++ style = gtk_widget_get_style_context(w); + + *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w)); +- +- if (!interior_focus) { +- *left += (focus_width + focus_pad); +- *right += (focus_width + focus_pad); +- *top += (focus_width + focus_pad); +- *bottom += (focus_width + focus_pad); +- } +- ++ moz_gtk_add_style_border(style, ++ left, top, right, bottom); ++ moz_gtk_add_style_padding(style, ++ left, top, right, bottom); + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_MENUPOPUP: +@@ -2927,6 +2775,8 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + return MOZ_GTK_SUCCESS; + } + /* These widgets have no borders, since they are not containers. */ ++ case MOZ_GTK_CHECKBUTTON_LABEL: ++ case MOZ_GTK_RADIOBUTTON_LABEL: + case MOZ_GTK_SPLITTER_HORIZONTAL: + case MOZ_GTK_SPLITTER_VERTICAL: + case MOZ_GTK_CHECKBUTTON: +@@ -2975,11 +2849,7 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, + gtk_style_context_save(style); + moz_gtk_tab_prepare_style_context(style, flags); + +- // TODO add_style_border() should be replaced +- // with focus-line-width and focus-padding +- // see Bug 877605 + *left = *top = *right = *bottom = 0; +- moz_gtk_add_style_border(style, left, top, right, bottom); + moz_gtk_add_style_padding(style, left, top, right, bottom); + + gtk_widget_style_get (gTabWidget, "tab-curvature", &tab_curvature, NULL); +@@ -2990,16 +2860,9 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, + int initial_gap; + gtk_widget_style_get (gTabWidget, "initial-gap", &initial_gap, NULL); + if (direction == GTK_TEXT_DIR_RTL) +- *right += initial_gap; ++ *right += initial_gap; + else +- *left += initial_gap; +- } +- +- // Top tabs have no bottom border, bottom tabs have no top border +- if (flags & MOZ_GTK_TAB_BOTTOM) { +- *top = 0; +- } else { +- *bottom = 0; ++ *left += initial_gap; + } + + gtk_style_context_restore(style); +diff --git widget/gtk/gtkdrawing.h widget/gtk/gtkdrawing.h +index 1938e8f..5f71cfd 100644 +--- mozilla/widget/gtk/gtkdrawing.h ++++ mozilla/widget/gtk/gtkdrawing.h +@@ -293,16 +293,6 @@ moz_gtk_checkbox_get_metrics(gint* indicator_size, gint* indicator_spacing); + gint + moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing); + +-/** +- * Get the inner-border value for a GtkButton widget (button or tree header) +- * widget: [IN] the widget to get the border value for +- * inner_border: [OUT] the inner border +- * +- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise +- */ +-gint +-moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); +- + /** Get the extra size for the focus ring for outline:auto. + * widget: [IN] the widget to get the focus metrics for + * focus_h_width: [OUT] the horizontal width +@@ -313,19 +303,6 @@ moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); + gint + moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width); + +-/** Get the focus metrics for a treeheadercell, button, checkbox, or radio button. +- * widget: [IN] the widget to get the focus metrics for +- * interior_focus: [OUT] whether the focus is drawn around the +- * label (TRUE) or around the whole container (FALSE) +- * focus_width: [OUT] the width of the focus line +- * focus_pad: [OUT] the padding between the focus line and children +- * +- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise +- */ +-gint +-moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, +- gint* focus_width, gint* focus_pad); +- + /** Get the horizontal padding for the menuitem widget or checkmenuitem widget. + * horizontal_padding: [OUT] The left and right padding of the menuitem or checkmenuitem + * +diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp +index e5e1867..76d28e3 100644 +--- mozilla/widget/gtk/nsNativeThemeGTK.cpp ++++ mozilla/widget/gtk/nsNativeThemeGTK.cpp +@@ -761,6 +761,8 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType, + return false; + + gint gap_height = moz_gtk_get_tab_thickness(); ++ if (!gap_height) ++ return false; + + int32_t extra = gap_height - GetTabMarginPixels(aFrame); + if (extra <= 0) Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1073117 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1130155 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1130155 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1130155 (revision 392767) @@ -1,172 +1,179 @@ commit eab3e3a Author: Mikhail Teterin Date: Tue Dec 16 19:34:02 2014 -0800 Bug 1130155 - Avoid assert failures when consuming only part of buffer. --- media/libcubeb/src/cubeb_alsa.c | 112 ++++++++++++++++++++++++++++++---------- 1 file changed, 85 insertions(+), 27 deletions(-) diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c index 9bbc129..e72944a 100644 --- mozilla/media/libcubeb/src/cubeb_alsa.c +++ mozilla/media/libcubeb/src/cubeb_alsa.c @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include #include #include "cubeb/cubeb.h" @@ -45,6 +47,7 @@ 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_forward); MAKE_TYPEDEF(snd_pcm_frames_to_bytes); MAKE_TYPEDEF(snd_pcm_get_params); /* snd_pcm_hw_params_alloca is actually a macro */ @@ -305,32 +308,35 @@ alsa_refill_stream(cubeb_stream * stm) long got; void * p; int draining; + unsigned pipefailures, againfailures; draining = 0; pthread_mutex_lock(&stm->mutex); - 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. - Unfortunately, this does happen, so just bail out and try again. */ - pthread_mutex_unlock(&stm->mutex); - return RUNNING; - } + for (pipefailures = 0;;) { + r = WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents); + if (r < 0 || revents != POLLOUT || + (avail = WRAP(snd_pcm_avail_update)(stm->pcm)) == 0) { + /* 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. + Unfortunately, this does happen, so just bail out and try again. */ + pthread_mutex_unlock(&stm->mutex); + return RUNNING; + } - avail = WRAP(snd_pcm_avail_update)(stm->pcm); - if (avail == -EPIPE) { + if (avail > 0) + break; + if (pipefailures++ > 11) { + fprintf(stderr, "%s: repeated failures from snd_pcm_avail_update, " + "giving up\n", __func__); + pthread_mutex_unlock(&stm->mutex); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + return ERROR; + } 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. */ - if (avail < 0) { - pthread_mutex_unlock(&stm->mutex); - stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); - return ERROR; } + pipefailures = againfailures = 0; /* This should never happen. */ if ((unsigned int) avail > stm->buffer_size) { -@@ -355,17 +361,67 @@ alsa_refill_stream(cubeb_stream * stm) +@@ -359,10 +365,11 @@ alsa_refill_stream(cubeb_stream * stm) if (got < 0) { pthread_mutex_unlock(&stm->mutex); stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + free(p); return ERROR; } if (got > 0) { -- snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); +- snd_pcm_sframes_t wrote; ++ snd_pcm_sframes_t wrote, towrite = got; + + if (stm->params.format == CUBEB_SAMPLE_FLOAT32NE) { + float * b = (float *) p; +@@ -375,14 +382,62 @@ alsa_refill_stream(cubeb_stream * stm) + b[i] *= stm->volume; + } + } +- wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); - if (wrote == -EPIPE) { - 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; -- gettimeofday(&stm->last_activity, NULL); -+ snd_pcm_sframes_t wrote, towrite = got; + for (;;) { + wrote = WRAP(snd_pcm_writei)(stm->pcm, p, + towrite > avail ? avail : towrite); + switch(wrote) { + case -EPIPE: + if (pipefailures++ > 3) { + fprintf(stderr, "%s: Too many underflows, giving up\n", __func__); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + free(p); + return ERROR; + } + WRAP(snd_pcm_recover)(stm->pcm, wrote, 1); + continue; + case -EAGAIN: + if (againfailures++ > 3) { + fprintf(stderr, "%s: Too many -EAGAIN errors from snd_pcm_writei, " + "giving up\n", __func__); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + free(p); + return ERROR; + } + continue; + case -EBADFD: + fprintf(stderr, "%s: snc_pcm_writei returned -%s, giving up\n", + __func__, "EBADFD"); + free(p); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + return ERROR; + } + if (wrote < 0) { + fprintf(stderr, "%s: snc_pcm_writei returned unexpected error %lld, " + "giving up\n", __func__, (long long)wrote); + free(p); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + return ERROR; + } + pipefailures = againfailures = 0; + stm->write_position += wrote; + gettimeofday(&stm->last_activity, NULL); + if (wrote > towrite) { + fprintf(stderr, "%s: snc_pcm_writei wrote %lld frames, which was more " + "than we requested (%lld). This should not happen, giving up\n", + __func__, (long long)wrote, (long long)towrite); + free(p); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + return ERROR; + } + if (towrite == wrote) + break; + towrite -= wrote; -+ } + } +- assert(wrote >= 0 && wrote == got); +- stm->write_position += wrote; +- gettimeofday(&stm->last_activity, NULL); } if (got != avail) { long buffer_fill = stm->buffer_size - (avail - got); @@ -1177,7 +1232,10 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) return CUBEB_OK; } - assert(delay >= 0); + if (delay < 0) { + WRAP(snd_pcm_forward)(stm->pcm, -delay); + delay = 0; + } *position = 0; if (stm->write_position >= (snd_pcm_uframes_t) delay) { Index: branches/2015Q3/mail/thunderbird/files/patch-bug1138845 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1138845 (nonexistent) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1138845 (revision 392767) @@ -0,0 +1,134 @@ +commit 4b5b332 +Author: Mike Hommey +Date: Tue Mar 3 18:41:13 2015 +0900 + + Bug 1138845 - Don't require atk-bridge for gtk+3 builds. r=tbsaunde +--- + accessible/atk/Platform.cpp | 29 +++++++++++++++++++---------- + config/system-headers | 1 - + configure.in | 2 +- + 3 files changed, 20 insertions(+), 12 deletions(-) + +diff --git accessible/atk/Platform.cpp accessible/atk/Platform.cpp +index a2afd96..2ed5e0b 100644 +--- mozilla/accessible/atk/Platform.cpp ++++ mozilla/accessible/atk/Platform.cpp +@@ -18,8 +18,9 @@ + #include + #endif + #include ++ + #if (MOZ_WIDGET_GTK == 3) +-#include ++extern "C" __attribute__((weak,visibility("default"))) int atk_bridge_adaptor_init(int*, char **[]); + #endif + + using namespace mozilla; +@@ -46,7 +47,6 @@ static gulong sToplevel_hide_hook = 0; + + GType g_atk_hyperlink_impl_type = G_TYPE_INVALID; + +-#if (MOZ_WIDGET_GTK == 2) + struct GnomeAccessibilityModule + { + const char *libName; +@@ -67,11 +67,13 @@ static GnomeAccessibilityModule sAtkBridge = { + "gnome_accessibility_module_shutdown", nullptr + }; + ++#if (MOZ_WIDGET_GTK == 2) + static GnomeAccessibilityModule sGail = { + "libgail.so", nullptr, + "gnome_accessibility_module_init", nullptr, + "gnome_accessibility_module_shutdown", nullptr + }; ++#endif + + static nsresult + LoadGtkModule(GnomeAccessibilityModule& aModule) +@@ -98,7 +100,11 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) + else + subLen = loc2 - loc1; + nsAutoCString sub(Substring(libPath, loc1, subLen)); ++#if (MOZ_WIDGET_GTK == 2) + sub.AppendLiteral("/gtk-2.0/modules/"); ++#else ++ sub.AppendLiteral("/gtk-3.0/modules/"); ++#endif + sub.Append(aModule.libName); + aModule.lib = PR_LoadLibrary(sub.get()); + if (aModule.lib) +@@ -123,7 +129,6 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) + } + return NS_OK; + } +-#endif // (MOZ_WIDGET_GTK == 2) + + void + a11y::PlatformInit() +@@ -175,14 +180,17 @@ a11y::PlatformInit() + + // Init atk-bridge now + PR_SetEnv("NO_AT_BRIDGE=0"); +-#if (MOZ_WIDGET_GTK == 2) +- rv = LoadGtkModule(sAtkBridge); +- if (NS_SUCCEEDED(rv)) { +- (*sAtkBridge.init)(); +- } +-#else +- atk_bridge_adaptor_init(nullptr, nullptr); ++#if (MOZ_WIDGET_GTK == 3) ++ if (atk_bridge_adaptor_init) { ++ atk_bridge_adaptor_init(nullptr, nullptr); ++ } else + #endif ++ { ++ nsresult rv = LoadGtkModule(sAtkBridge); ++ if (NS_SUCCEEDED(rv)) { ++ (*sAtkBridge.init)(); ++ } ++ } + + if (!sToplevel_event_hook_added) { + sToplevel_event_hook_added = true; +@@ -210,7 +218,6 @@ a11y::PlatformShutdown() + sToplevel_hide_hook); + } + +-#if (MOZ_WIDGET_GTK == 2) + if (sAtkBridge.lib) { + // Do not shutdown/unload atk-bridge, + // an exit function registered will take care of it +@@ -221,6 +228,7 @@ a11y::PlatformShutdown() + sAtkBridge.init = nullptr; + sAtkBridge.shutdown = nullptr; + } ++#if (MOZ_WIDGET_GTK == 2) + if (sGail.lib) { + // Do not shutdown gail because + // 1) Maybe it's not init-ed by us. e.g. GtkEmbed +diff --git config/system-headers config/system-headers +index 2c94a7d..cf01775 100644 +--- mozilla/config/system-headers ++++ mozilla/config/system-headers +@@ -189,7 +189,6 @@ asm/signal.h + ASRegistry.h + assert.h + atk/atk.h +-atk-bridge.h + atlcom.h + atlconv.h + atlctl.cpp +diff --git configure.in configure.in +index 0bd1eb7..f3b3365 100644 +--- mozilla/configure.in ++++ mozilla/configure.in +@@ -4408,7 +4408,7 @@ fi + + if test "$COMPILE_ENVIRONMENT"; then + if test "$MOZ_ENABLE_GTK3"; then +- PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 atk-bridge-2.0 $GDK_PACKAGES) ++ PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 $GDK_PACKAGES) + MOZ_GTK3_CFLAGS="-I${_topsrcdir}/widget/gtk/compat-gtk3 $MOZ_GTK3_CFLAGS" + dnl Contrary to MOZ_GTK2_LIBS, MOZ_GTK3_LIBS needs to be literally added to TK_LIBS instead + dnl of a make reference because of how TK_LIBS is mangled in toolkit/library/moz.build Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1138845 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1143686 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1143686 (nonexistent) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1143686 (revision 392767) @@ -0,0 +1,46 @@ +commit e50e738 +Author: Martin Stransky +Date: Mon Mar 16 08:00:00 2015 -0400 + + Bug 1143686 - Gtk3 - Render scrollbar thumb with margin. r=karlt +--- + widget/gtk/gtk3drawing.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c +index 17f46ab..08a58d6 100644 +--- mozilla/widget/gtk/gtk3drawing.c ++++ mozilla/widget/gtk/gtk3drawing.c +@@ -1230,6 +1230,7 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, + GtkStyleContext* style; + GtkScrollbar *scrollbar; + GtkAdjustment *adj; ++ GtkBorder margin; + + ensure_scrollbar_widget(); + +@@ -1239,15 +1240,20 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, + scrollbar = GTK_SCROLLBAR(gVertScrollbarWidget); + + gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction); +- ++ + style = gtk_widget_get_style_context(GTK_WIDGET(scrollbar)); + gtk_style_context_save(style); +- ++ + gtk_style_context_add_class(style, GTK_STYLE_CLASS_SLIDER); + gtk_style_context_set_state(style, state_flags); + +- gtk_render_slider(style, cr, rect->x, rect->y, +- rect->width, rect->height, ++ gtk_style_context_get_margin (style, state_flags, &margin); ++ ++ gtk_render_slider(style, cr, ++ rect->x + margin.left, ++ rect->y + margin.top, ++ rect->width - margin.left - margin.right, ++ rect->height - margin.top - margin.bottom, + (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) ? + GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL); + Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1143686 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug1144643 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug1144643 (nonexistent) +++ branches/2015Q3/mail/thunderbird/files/patch-bug1144643 (revision 392767) @@ -0,0 +1,33 @@ +commit a0ccc19 +Author: Martin Stransky +Date: Wed Mar 18 07:14:00 2015 -0400 + + Bug 1144643 - Render tooltips as transparent on Gtk3. r=karlt + + --HG-- + extra : rebase_source : 23085532b27350ca71cbe18db071628388003f33 +--- + widget/gtk/nsNativeThemeGTK.cpp | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp +index e5e1867..26d13a5 100644 +--- mozilla/widget/gtk/nsNativeThemeGTK.cpp ++++ mozilla/widget/gtk/nsNativeThemeGTK.cpp +@@ -1528,9 +1528,15 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType) + case NS_THEME_MENUPOPUP: + case NS_THEME_WINDOW: + case NS_THEME_DIALOG: +- // Tooltips use gtk_paint_flat_box(). ++ return eOpaque; ++ // Tooltips use gtk_paint_flat_box() on Gtk2 ++ // but are shaped on Gtk3 + case NS_THEME_TOOLTIP: ++#if (MOZ_WIDGET_GTK == 2) + return eOpaque; ++#else ++ return eTransparent; ++#endif + } + + return eUnknownTransparency; Property changes on: branches/2015Q3/mail/thunderbird/files/patch-bug1144643 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-bug702179 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug702179 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug702179 (revision 392767) @@ -1,36 +1,24 @@ commit 6ddaacd Author: Ginn Chen Date: Wed Nov 30 07:23:46 2011 +0800 Bug 702179 dtrace probes are not installed on Solaris with static js lib r=glandium --- - configure.in | 2 +- - js/src/Makefile.in | 2 -- - 2 files changed, 1 insertion(+), 3 deletions(-) + js/src/Makefile.in | 3 --- + toolkit/library/moz.build | 5 ----- + 2 files changed, 8 deletions(-) -diff --git configure.in configure.in -index 66549c1..75b848d 100644 ---- mozilla/configure.in -+++ mozilla/configure.in -@@ -966,7 +966,7 @@ MOZ_BZ2_LIBS='$(call EXPAND_LIBNAME_PATH,bz2,$(DEPTH)/modules/libbz2/src)' - MOZ_PNG_CFLAGS="-I$_objdir/dist/include" # needed for freetype compilation - MOZ_PNG_LIBS='$(call EXPAND_LIBNAME_PATH,mozpng,$(DEPTH)/media/libpng)' - --MOZ_JS_STATIC_LIBS='$(call EXPAND_LIBNAME_PATH,js_static,$(LIBXUL_DIST)/lib)' -+MOZ_JS_STATIC_LIBS='$(call EXPAND_LIBNAME_PATH,js_static,$(DEPTH)/js/src)' - MOZ_JS_SHARED_LIBS='$(call EXPAND_LIBNAME_PATH,mozjs,$(LIBXUL_DIST)/lib)' - MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(LIBXUL_DIST)/bin -Wl,-rpath-link,$(prefix)/lib' - XPCOM_FROZEN_LDOPTS='$(call EXPAND_LIBNAME_PATH,xul mozalloc,$(LIBXUL_DIST)/bin)' diff --git js/src/Makefile.in js/src/Makefile.in -index e28160a..28ca5e8 100644 +index 62bbfa0..90400cb 100644 --- mozilla/js/src/Makefile.in +++ mozilla/js/src/Makefile.in -@@ -18,8 +18,6 @@ run_for_side_effects := $(shell echo 'MAKE: $(MAKE)') - STATIC_LIBRARY_NAME = js_static - LIBS = $(NSPR_LIBS) +@@ -17,9 +17,6 @@ TOPLEVEL_BUILD := 1 + run_for_side_effects := $(shell echo 'MAKE: $(MAKE)') + EXTRA_LIBS += $(NSPR_LIBS) -DIST_INSTALL = 1 +-NO_EXPAND_LIBS = 1 - - ifdef JS_STANDALONE - SHARED_LIBRARY_LIBS += $(call EXPAND_LIBNAME_PATH,mfbt,$(DEPTH)/mfbt) - ifndef MOZ_NATIVE_ZLIB + ifdef JS_HAS_CTYPES + ifdef MOZ_NATIVE_FFI + LOCAL_INCLUDES = $(MOZ_FFI_CFLAGS) Index: branches/2015Q3/mail/thunderbird/files/patch-bug779713 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug779713 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug779713 (revision 392767) @@ -1,75 +1,77 @@ +diff --git mfbt/Alignment.h mfbt/Alignment.h +index e0843ca..353ec36 100644 --- mozilla/mfbt/Alignment.h +++ mozilla/mfbt/Alignment.h @@ -9,11 +9,20 @@ #ifndef mozilla_Alignment_h #define mozilla_Alignment_h +#include "mozilla/Attributes.h" + #include #include namespace mozilla { +#if defined(MOZ_HAVE_CXX11_ALIGNAS) +#define MOZ_ALIGNOF(T) alignof(T) +#elif defined(__GNUC__) +#define MOZ_ALIGNOF(T) __alignof__(T) +#elif defined(_MSC_VER) +#define MOZ_ALIGNOF(T) __alignof(T) +#else /* * This class, and the corresponding macro MOZ_ALIGNOF, figures out how many * bytes of alignment a given type needs. @@ -32,6 +41,7 @@ public: }; #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment +#endif /* * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. @@ -43,7 +53,10 @@ public: * will declare a two-character array |arr| aligned to 8 bytes. */ -#if defined(__GNUC__) +#if defined(MOZ_HAVE_CXX11_ALIGNAS) +# define MOZ_ALIGNED_DECL(_type, _align) \ + alignas(_align) _type +#elif defined(__GNUC__) # define MOZ_ALIGNED_DECL(_type, _align) \ _type __attribute__((aligned(_align))) #elif defined(_MSC_VER) diff --git mfbt/Attributes.h mfbt/Attributes.h index d317766..ddb13da 100644 --- mozilla/mfbt/Attributes.h +++ mozilla/mfbt/Attributes.h -@@ -54,6 +54,9 @@ +@@ -50,6 +50,7 @@ + * don't indicate support for them here, due to + * http://stackoverflow.com/questions/20498142/visual-studio-2013-explicit-keyword-bug + */ ++# define MOZ_HAVE_CXX11_ALIGNAS + # define MOZ_HAVE_NEVER_INLINE __declspec(noinline) + # define MOZ_HAVE_NORETURN __declspec(noreturn) + # ifdef __clang__ +@@ -70,6 +71,9 @@ # ifndef __has_extension # define __has_extension __has_feature /* compatibility, for older versions of clang */ # endif +# if __has_extension(cxx_alignas) +# define MOZ_HAVE_CXX11_ALIGNAS +# endif # if __has_extension(cxx_constexpr) # define MOZ_HAVE_CXX11_CONSTEXPR # endif -@@ -75,6 +78,9 @@ +@@ -84,6 +88,9 @@ # endif #elif defined(__GNUC__) # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L +# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) +# define MOZ_HAVE_CXX11_ALIGNAS +# endif - # if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0) - # define MOZ_HAVE_CXX11_OVERRIDE - # define MOZ_HAVE_CXX11_FINAL final -@@ -96,6 +102,7 @@ - # define MOZ_HAVE_NORETURN __attribute__((noreturn)) - #elif defined(_MSC_VER) - # if _MSC_VER >= 1800 -+# define MOZ_HAVE_CXX11_ALIGNAS - # define MOZ_HAVE_CXX11_DELETE + # define MOZ_HAVE_CXX11_CONSTEXPR + # define MOZ_HAVE_EXPLICIT_CONVERSION # endif - # if _MSC_VER >= 1700 Index: branches/2015Q3/mail/thunderbird/files/patch-bug826985 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug826985 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug826985 (revision 392767) @@ -1,179 +1,179 @@ commit 8024d93 Author: Henrik Gulbrandsen Date: Fri Jan 4 13:49:22 2013 +0100 Bug 826985 - Support more video formats for WebRTC via libv4l2 on Linux. --- config/system-headers | 1 + configure.in | 7 +++++++ media/webrtc/signaling/test/Makefile.in | 1 + .../modules/video_capture/linux/device_info_linux.cc | 17 +++++++++++++++++ .../modules/video_capture/linux/video_capture_linux.cc | 16 +++++++++++++++- .../webrtc/modules/video_capture/video_capture.gypi | 11 +++++++++++ toolkit/library/Makefile.in | 1 + 6 files changed, 52 insertions(+), 1 deletion(-) diff --git config/system-headers config/system-headers index 55e4cd1..76567b3 100644 --- mozilla/config/system-headers +++ mozilla/config/system-headers @@ -635,6 +635,7 @@ libgnomevfs/gnome-vfs-mime-handlers.h libgnomevfs/gnome-vfs-mime-utils.h libgnomevfs/gnome-vfs-ops.h libgnomevfs/gnome-vfs-standard-callbacks.h +libv4l2.h lib$routines.h limits limits.h diff --git configure.in configure.in index 55e4cd1..76567b3 100644 --- mozilla/configure.in +++ mozilla/configure.in @@ -5309,6 +5309,9 @@ if test -n "$MOZ_WEBRTC"; then MOZ_VP8_ENCODER=1 MOZ_VP8_ERROR_CONCEALMENT=1 + dnl with libv4l2 we can support more cameras + PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) + dnl enable once Signaling lands MOZ_WEBRTC_SIGNALING=1 AC_DEFINE(MOZ_WEBRTC_SIGNALING) diff --git build/gyp.mozbuild build/gyp.mozbuild index b483cd1..f1dd1f0 100644 --- mozilla/build/gyp.mozbuild +++ mozilla/build/gyp.mozbuild @@ -11,6 +11,7 @@ gyp_vars = { 'have_ethtool_cmd_speed_hi': 1 if CONFIG['MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI'] else 0, 'include_alsa_audio': 1 if CONFIG['MOZ_ALSA'] else 0, 'include_pulse_audio': 1 if CONFIG['MOZ_PULSEAUDIO'] else 0, + 'use_libv4l2': 1 if CONFIG['MOZ_LIBV4L2_LIBS'] else 0, # basic stuff for everything 'include_internal_video_render': 0, 'clang_use_chrome_plugins': 0, -diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in +diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build index b483cd1..f1dd1f0 100644 ---- mozilla/media/webrtc/signaling/test/Makefile.in -+++ mozilla/media/webrtc/signaling/test/Makefile.in -@@ -7,6 +7,7 @@ LIBS = \ - $(NSPR_LIBS) \ - $(NSS_LIBS) \ - $(REALTIME_LIBS) \ -+ $(MOZ_LIBV4L2_LIBS) \ - $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \ - $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \ - $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \ +--- mozilla/media/webrtc/signaling/test/moz.build ++++ mozilla/media/webrtc/signaling/test/moz.build +@@ -122,6 +122,7 @@ if CONFIG['JS_SHARED_LIBRARY']: + 'js', + ] + ++OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS'] + OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] + OS_LIBS += CONFIG['REALTIME_LIBS'] + diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc index 239a292..bab496c 100644 --- mozilla/media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc +++ mozilla/media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc @@ -25,10 +25,21 @@ #else #include #endif +#ifdef HAVE_LIBV4L2 +#include +#endif #include "webrtc/system_wrappers/interface/ref_count.h" #include "webrtc/system_wrappers/interface/trace.h" +#ifdef HAVE_LIBV4L2 +#define open v4l2_open +#define close v4l2_close +#define dup v4l2_dup +#define ioctl v4l2_ioctl +#define mmap v4l2_mmap +#define munmap v4l2_munmap +#endif namespace webrtc { @@ -130,6 +142,11 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( memset(deviceNameUTF8, 0, deviceNameLength); memcpy(cameraName, cap.card, sizeof(cap.card)); + if (cameraName[0] == '\0') + { + sprintf(cameraName, "Camera at /dev/video%d", deviceNumber); + } + if (deviceNameLength >= strlen(cameraName)) { memcpy(deviceNameUTF8, cameraName, strlen(cameraName)); diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc index 12df1b3..e9863ba 100644 --- mozilla/media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc +++ mozilla/media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc @@ -25,6 +25,9 @@ #else #include #endif +#ifdef HAVE_LIBV4L2 +#include +#endif #include @@ -26,6 +31,15 @@ #include "critical_section_wrapper.h" #include "video_capture_linux.h" +#ifdef HAVE_LIBV4L2 +#define open v4l2_open +#define close v4l2_close +#define dup v4l2_dup +#define ioctl v4l2_ioctl +#define mmap v4l2_mmap +#define munmap v4l2_munmap +#endif + namespace webrtc { namespace videocapturemodule diff --git media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi index d46b5aa..e452223 100644 --- mozilla/media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi +++ mozilla/media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi @@ -7,6 +7,9 @@ # be found in the AUTHORS file in the root of the source tree. { + 'variables': { + 'use_libv4l2%': 0, + }, 'targets': [ { 'target_name': 'video_capture_module', -@@ -49,6 +52,16 @@ - }, { # include_internal_video_capture == 1 - 'conditions': [ - ['include_v4l2_video_capture==1', { -+ 'conditions': [ -+ ['use_libv4l2==1', { -+ 'defines': [ -+ 'HAVE_LIBV4L2', -+ ], -+ 'libraries': [ -+ '-lv4l2', -+ ], -+ }], +@@ -69,6 +72,19 @@ + 'linux/video_capture_linux.cc', + 'linux/video_capture_linux.h', + ], ++ 'conditions': [ ++ ['use_libv4l2==1', { ++ 'defines': [ ++ 'HAVE_LIBV4L2', + ], - 'include_dirs': [ - 'linux', - ], -diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in ++ 'cflags_mozilla': [ ++ '$(MOZ_LIBV4L2_CFLAGS)', ++ ], ++ 'libraries': [ ++ '-lv4l2', ++ ], ++ }], ++ ], + }], # linux + ['OS=="mac"', { + 'sources': [ +diff --git toolkit/library/moz.build toolkit/library/moz.build index 9c16ffa..1db3794 100644 ---- mozilla/toolkit/library/libxul.mk -+++ mozilla/toolkit/library/libxul.mk -@@ -182,6 +182,10 @@ endif +--- mozilla/toolkit/library/moz.build ++++ mozilla/toolkit/library/moz.build +@@ -163,6 +163,7 @@ if CONFIG['OS_ARCH'] == 'Linux' and CONF + ] - EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib) + OS_LIBS += CONFIG['MOZ_CAIRO_OSLIBS'] ++OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS'] + OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] + OS_LIBS += CONFIG['MOZ_APP_EXTRA_LIBS'] -+ifdef MOZ_LIBV4L2_LIBS -+EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS) -+endif -+ - ifdef MOZ_WEBRTC - ifeq (WINNT,$(OS_TARGET)) - EXTRA_DSO_LDOPTS += \ Index: branches/2015Q3/mail/thunderbird/files/patch-bug847568 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-bug847568 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-bug847568 (revision 392767) @@ -1,208 +1,242 @@ # Allow building against system-wide graphite2/harfbuzz. diff --git config/Makefile.in config/Makefile.in index 14bfc0d..5383399 100644 --- mozilla/config/Makefile.in +++ mozilla/config/Makefile.in -@@ -77,6 +77,8 @@ export:: $(export-preqs) +@@ -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 --- mozilla/config/system-headers +++ mozilla/config/system-headers -@@ -1145,3 +1145,11 @@ unicode/utypes.h +@@ -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 --- mozilla/configure.in +++ mozilla/configure.in -@@ -8032,6 +8032,52 @@ if test "$USE_FC_FREETYPE"; then +@@ -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) ++ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 0.9.34) +fi + +AC_SUBST(MOZ_NATIVE_HARFBUZZ) -+AC_SUBST(MOZ_HARFBUZZ_CFLAGS) -+AC_SUBST(MOZ_HARFBUZZ_LIBS) + +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) -+AC_SUBST(MOZ_GRAPHITE2_CFLAGS) -+AC_SUBST(MOZ_GRAPHITE2_LIBS) + +dnl ======================================================== dnl Check for pixman and cairo dnl ======================================================== -diff --git content/base/src/moz.build content/base/src/moz.build -index d4f6380..0ee55df 100644 ---- mozilla/content/base/src/moz.build -+++ mozilla/content/base/src/moz.build -@@ -179,6 +179,9 @@ SOURCES += [ +diff --git dom/base/moz.build dom/base/moz.build +index a660ba4..6b2f602 100644 +--- mozilla/dom/base/moz.build ++++ mozilla/dom/base/moz.build +@@ -196,6 +196,9 @@ SOURCES += [ 'nsObjectLoadingContent.cpp', ] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: -+ SOURCES['nsContentUtils.cpp'].flags += [CONFIG['MOZ_HARFBUZZ_CFLAGS']] ++ 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 +--- mozilla/gfx/graphite2/moz-gr-update.sh ++++ mozilla/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 +--- mozilla/gfx/harfbuzz/README-mozilla ++++ 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 --- mozilla/gfx/moz.build +++ mozilla/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/Makefile.in gfx/skia/Makefile.in -index ee0efb2..98e169d6f 100644 ---- mozilla/gfx/skia/Makefile.in -+++ mozilla/gfx/skia/Makefile.in -@@ -15,6 +15,10 @@ ifeq (qt,$(MOZ_WIDGET_TOOLKIT)) - OS_CXXFLAGS += $(MOZ_CAIRO_CFLAGS) $(MOZ_PANGO_CFLAGS) $(CAIRO_FT_CFLAGS) - endif +diff --git gfx/skia/generate_mozbuild.py gfx/skia/generate_mozbuild.py +index 28fa6b5..240dced 100755 +--- mozilla/gfx/skia/generate_mozbuild.py ++++ mozilla/gfx/skia/generate_mozbuild.py +@@ -140,6 +140,9 @@ if CONFIG['GNU_CXX']: + if not CONFIG['CLANG_CXX']: + CXXFLAGS += ['-Wno-logical-op'] -+ifdef MOZ_NATIVE_HARFBUZZ -+OS_CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_HARFBUZZ']: ++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + - include $(topsrcdir)/config/rules.mk + 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 +--- mozilla/gfx/skia/moz.build ++++ mozilla/gfx/skia/moz.build +@@ -968,6 +968,9 @@ if CONFIG['GNU_CXX']: + if not CONFIG['CLANG_CXX']: + CXXFLAGS += ['-Wno-logical-op'] - ifeq ($(CPU_ARCH)_$(GNU_CC),arm_1) -diff --git gfx/thebes/Makefile.in gfx/thebes/Makefile.in -index 45c36ae..79d32cf 100644 ---- mozilla/gfx/thebes/Makefile.in -+++ mozilla/gfx/thebes/Makefile.in -@@ -13,6 +13,14 @@ DEFINES := $(filter-out -DUNICODE,$(DEFINES)) - CXXFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS) - CFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS) ++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 +--- mozilla/gfx/thebes/moz.build ++++ mozilla/gfx/thebes/moz.build +@@ -278,6 +278,12 @@ CXXFLAGS += CONFIG['TK_CFLAGS'] + CFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] + CFLAGS += CONFIG['TK_CFLAGS'] -+ifdef MOZ_NATIVE_GRAPHITE2 -+CXXFLAGS += $(MOZ_GRAPHITE2_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_HARFBUZZ']: ++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + -+ifdef MOZ_NATIVE_HARFBUZZ -+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_GRAPHITE2']: ++ CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS'] + - ifeq ($(MOZ_WIDGET_TOOLKIT),android) - CXXFLAGS += $(CAIRO_FT_CFLAGS) - endif -diff --git intl/unicharutil/util/Makefile.in intl/unicharutil/util/Makefile.in -index f6b9f7c..60863f4 100644 ---- mozilla/intl/unicharutil/util/Makefile.in -+++ mozilla/intl/unicharutil/util/Makefile.in -@@ -21,3 +21,7 @@ ifdef _MSC_VER - OS_COMPILE_CXXFLAGS += -Zl - OS_COMPILE_CFLAGS += -Zl - endif -+ -+ifdef MOZ_NATIVE_HARFBUZZ -+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS) -+endif -diff --git netwerk/dns/Makefile.in netwerk/dns/Makefile.in -index 1cacbd7..f5d72bb 100644 ---- mozilla/netwerk/dns/Makefile.in -+++ mozilla/netwerk/dns/Makefile.in -@@ -5,6 +5,10 @@ + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('android', 'gonk', 'qt'): + CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] - include $(topsrcdir)/config/rules.mk +diff --git intl/unicharutil/util/moz.build intl/unicharutil/util/moz.build +index d736943..41a931f 100644 +--- mozilla/intl/unicharutil/util/moz.build ++++ mozilla/intl/unicharutil/util/moz.build +@@ -37,3 +37,6 @@ if CONFIG['_MSC_VER']: -+ifdef MOZ_NATIVE_HARFBUZZ -+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS) -+endif + if CONFIG['ENABLE_INTL_API']: + CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS'] + - # Generate the include file containing compact, static definitions - # for effective TLD data. - etld_data.inc: $(srcdir)/prepare_tlds.py $(srcdir)/effective_tld_names.dat -diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk ++if CONFIG['MOZ_NATIVE_HARFBUZZ']: ++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] +diff --git netwerk/dns/moz.build netwerk/dns/moz.build +index 0b0717a..2e665c9 100644 +--- mozilla/netwerk/dns/moz.build ++++ mozilla/netwerk/dns/moz.build +@@ -64,3 +64,6 @@ GENERATED_FILES = [ + LOCAL_INCLUDES += [ + '/netwerk/base', + ] ++ ++if CONFIG['MOZ_NATIVE_HARFBUZZ']: ++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] +diff --git toolkit/library/moz.build toolkit/library/moz.build index 67f0db9..d42137a 100644 ---- mozilla/toolkit/library/libxul.mk -+++ mozilla/toolkit/library/libxul.mk -@@ -89,6 +89,14 @@ ifndef MOZ_TREE_PIXMAN - EXTRA_DSO_LDOPTS += $(MOZ_PIXMAN_LIBS) - endif +--- mozilla/toolkit/library/moz.build ++++ mozilla/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'] -+ifdef MOZ_NATIVE_GRAPHITE2 -+EXTRA_DSO_LDOPTS += $(MOZ_GRAPHITE2_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_GRAPHITE2']: ++ OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS'] + -+ifdef MOZ_NATIVE_HARFBUZZ -+EXTRA_DSO_LDOPTS += $(MOZ_HARFBUZZ_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_HARFBUZZ']: ++ OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS'] + - ifdef MOZ_DMD - EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,dmd,$(DIST)/lib) - endif + if CONFIG['MOZ_OSS']: + OS_LIBS += CONFIG['MOZ_OSS_LIBS'] + Index: branches/2015Q3/mail/thunderbird/files/patch-config-baseconfig.mk =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-config-baseconfig.mk (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-config-baseconfig.mk (revision 392767) @@ -1,14 +1,14 @@ ---- config/baseconfig.mk~ -+++ config/baseconfig.mk +--- mozilla/config/baseconfig.mk~ ++++ mozilla/config/baseconfig.mk @@ -1,7 +1,7 @@ -includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) +includedir := $(includedir)/%%MOZILLA%% +idldir = $(datadir)/idl/%%MOZILLA%% +installdir = $(libdir)/%%MOZILLA%% +sdkdir = $(libdir)/%%MOZILLA%% - MOZILLA_SRCDIR = $(topsrcdir)/mozilla - MOZDEPTH = $(DEPTH)/mozilla - DIST = $(MOZDEPTH)/dist + ifndef TOP_DIST + TOP_DIST = dist + endif Index: branches/2015Q3/mail/thunderbird/files/patch-ijg-libjpeg =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-ijg-libjpeg (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-ijg-libjpeg (revision 392767) @@ -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 --- mozilla/configure.in +++ mozilla/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 mozilla/image/decoders/nsJPEGDecoder.cpp mozilla/image/decoders/nsJPEGDecoder.cpp +diff --git image/decoders/nsJPEGDecoder.cpp image/decoders/nsJPEGDecoder.cpp index 8fa8200..1d2a259 100644 --- mozilla/image/decoders/nsJPEGDecoder.cpp +++ mozilla/image/decoders/nsJPEGDecoder.cpp @@ -21,13 +21,28 @@ extern "C" { #include "iccjpeg.h" -} +#ifdef JCS_EXTENSIONS - #if defined(IS_BIG_ENDIAN) + #if MOZ_BIG_ENDIAN #define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_XRGB #else #define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_BGRX #endif +#else +/* Colorspace conversion (copied from jpegint.h) */ +struct jpeg_color_deconverter { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, color_convert, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows)); +}; + +METHODDEF(void) +ycc_rgb_convert_argb (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows); +#endif +} static void cmyk_convert_rgb(JSAMPROW row, JDIMENSION width); -@@ -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: branches/2015Q3/mail/thunderbird/files/patch-mail-app-nsMailApp.cpp =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-mail-app-nsMailApp.cpp (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-mail-app-nsMailApp.cpp (revision 392767) @@ -1,10 +1,10 @@ --- mail/app/nsMailApp.cpp~ +++ mail/app/nsMailApp.cpp -@@ -154,6 +154,7 @@ int main(int argc, char* argv[]) +@@ -320,6 +320,7 @@ int main(int argc, char* argv[]) TriggerQuirks(); #endif + setenv("MOZ_PLUGIN_PATH", "%%LOCALBASE%%/lib/browser_plugins/symlinks/gecko", 0); - nsresult rv = mozilla::BinaryPath::Get(argv[0], exePath); - if (NS_FAILED(rv)) { - Output("Couldn't calculate the application directory.\n"); + int gotCounters; + #if defined(XP_UNIX) + struct rusage initialRUsage; Index: branches/2015Q3/mail/thunderbird/files/patch-media-libstagefright-foundation-AString.cpp =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-media-libstagefright-foundation-AString.cpp (nonexistent) +++ branches/2015Q3/mail/thunderbird/files/patch-media-libstagefright-foundation-AString.cpp (revision 392767) @@ -0,0 +1,16 @@ +--- mozilla/media/libstagefright/frameworks/av/media/libstagefright/foundation/AString.cpp~ ++++ mozilla/media/libstagefright/frameworks/av/media/libstagefright/foundation/AString.cpp +@@ -23,6 +23,13 @@ + #include "ADebug.h" + #include "AString.h" + ++#ifdef __FreeBSD__ ++# include ++# if __FreeBSD_version < 900506 ++# undef tolower ++# endif ++#endif ++ + namespace stagefright { + + // static Property changes on: branches/2015Q3/mail/thunderbird/files/patch-media-libstagefright-foundation-AString.cpp ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-media-mtransport-third_party-nICEr-src-util-mbslen.c =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-media-mtransport-third_party-nICEr-src-util-mbslen.c (nonexistent) +++ branches/2015Q3/mail/thunderbird/files/patch-media-mtransport-third_party-nICEr-src-util-mbslen.c (revision 392767) @@ -0,0 +1,16 @@ +--- mozilla/media/mtransport/third_party/nICEr/src/util/mbslen.c~ ++++ mozilla/media/mtransport/third_party/nICEr/src/util/mbslen.c +@@ -54,6 +54,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # endif + #endif + ++#ifdef __DragonFly__ ++#include ++# if __DragonFly_version > 300502 ++# define HAVE_XLOCALE ++# endif ++#endif ++ + #ifdef HAVE_XLOCALE + #include + #endif /* HAVE_XLOCALE */ Property changes on: branches/2015Q3/mail/thunderbird/files/patch-media-mtransport-third_party-nICEr-src-util-mbslen.c ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-media-webrtc-trunk-src-system_wrappers-source-spreadsortlib-spreadsort.hpp =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-media-webrtc-trunk-src-system_wrappers-source-spreadsortlib-spreadsort.hpp (nonexistent) +++ branches/2015Q3/mail/thunderbird/files/patch-media-webrtc-trunk-src-system_wrappers-source-spreadsortlib-spreadsort.hpp (revision 392767) @@ -0,0 +1,16 @@ +--- mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp~ ++++ mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp +@@ -21,6 +21,13 @@ Scott McMurray + #include "constants.hpp" + #include + ++#ifdef __FreeBSD__ ++# include ++# if __FreeBSD_version < 900506 ++# define getchar boost_getchar ++# endif ++#endif ++ + namespace boost { + namespace detail { + //This only works on unsigned data types Property changes on: branches/2015Q3/mail/thunderbird/files/patch-media-webrtc-trunk-src-system_wrappers-source-spreadsortlib-spreadsort.hpp ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-memory-jemalloc-Makefile.in =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-memory-jemalloc-Makefile.in (nonexistent) +++ branches/2015Q3/mail/thunderbird/files/patch-memory-jemalloc-Makefile.in (revision 392767) @@ -0,0 +1,10 @@ +--- mozilla/memory/jemalloc/Makefile.in~ ++++ mozilla/memory/jemalloc/Makefile.in +@@ -12,3 +12,7 @@ include $(topsrcdir)/config/rules.mk + ifdef GNU_CC + CFLAGS += -std=gnu99 + endif ++ ++# XXX startup crash workaround for gcc47 on amd64 ++jemalloc.$(OBJ_SUFFIX): OS_CFLAGS := $(filter-out -O3 -Ofast,$(OS_CFLAGS)) ++jemalloc.$(OBJ_SUFFIX): MOZ_OPTIMIZE_FLAGS= Property changes on: branches/2015Q3/mail/thunderbird/files/patch-memory-jemalloc-Makefile.in ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-system-openh264 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-system-openh264 (nonexistent) +++ branches/2015Q3/mail/thunderbird/files/patch-system-openh264 (revision 392767) @@ -0,0 +1,239 @@ +# Revert bug 1045209 to allow using absolute path + +diff --git dom/media/gmp/GMPChild.cpp dom/media/gmp/GMPChild.cpp +index 1dde3ac..12c88cf 100644 +--- mozilla/dom/media/gmp/GMPChild.cpp ++++ mozilla/dom/media/gmp/GMPChild.cpp +@@ -76,21 +76,14 @@ GetFileBase(const std::string& aPluginPa + } + #endif + +- nsCOMPtr parent; +- rv = aFileBase->GetParent(getter_AddRefs(parent)); +- if (NS_FAILED(rv)) { +- return false; +- } +- +- nsAutoString parentLeafName; +- rv = parent->GetLeafName(parentLeafName); +- if (NS_FAILED(rv)) { ++ nsAutoString leafName; ++ if (NS_FAILED(aFileBase->GetLeafName(leafName))) { + return false; + } + +- aBaseName = Substring(parentLeafName, ++ aBaseName = Substring(leafName, + 4, +- parentLeafName.Length() - 1); ++ leafName.Length() - 1); + return true; + } + +diff --git dom/media/gmp/GMPParent.cpp dom/media/gmp/GMPParent.cpp +index aa60acf..90878ca 100644 +--- mozilla/dom/media/gmp/GMPParent.cpp ++++ mozilla/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 +--- mozilla/toolkit/modules/GMPInstallManager.jsm ++++ mozilla/toolkit/modules/GMPInstallManager.jsm +@@ -888,9 +889,7 @@ + let gmpAddon = this._gmpAddon; + let installToDirPath = Cc["@mozilla.org/file/local;1"]. + createInstance(Ci.nsIFile); +- let path = OS.Path.join(OS.Constants.Path.profileDir, +- gmpAddon.id, +- gmpAddon.version); ++ let path = OS.Path.join(OS.Constants.Path.profileDir, gmpAddon.id); + installToDirPath.initWithPath(path); + log.info("install to directory path: " + installToDirPath.path); + let gmpInstaller = new GMPExtractor(zipPath, installToDirPath.path); +@@ -885,10 +883,12 @@ + // Success, set the prefs + let now = Math.round(Date.now() / 1000); + GMPPrefs.set(GMPPrefs.KEY_PLUGIN_LAST_UPDATE, now, gmpAddon.id); +- // Setting the version pref signals installation completion to consumers, +- // if you need to set other prefs etc. do it before this. ++ // Setting the path pref signals installation completion to consumers, ++ // so set the version and potential other information they use first. + GMPPrefs.set(GMPPrefs.KEY_PLUGIN_VERSION, gmpAddon.version, + gmpAddon.id); ++ GMPPrefs.set(GMPPrefs.KEY_PLUGIN_PATH, ++ installToDirPath.path, gmpAddon.id); + this._deferred.resolve(extractedPaths); + }, err => { + this._deferred.reject(err); +diff --git toolkit/modules/GMPUtils.jsm toolkit/modules/GMPUtils.jsm +index 1f3a0b1..93517be 100644 +--- mozilla/toolkit/modules/GMPUtils.jsm ++++ mozilla/toolkit/modules/GMPUtils.jsm +@@ -70,6 +70,7 @@ this.GMPPrefs = { + KEY_EME_ENABLED: "media.eme.enabled", + KEY_PLUGIN_ENABLED: "media.{0}.enabled", + KEY_PLUGIN_LAST_UPDATE: "media.{0}.lastUpdate", ++ KEY_PLUGIN_PATH: "media.{0}.path", + KEY_PLUGIN_VERSION: "media.{0}.version", + KEY_PLUGIN_AUTOUPDATE: "media.{0}.autoupdate", + KEY_PLUGIN_FORCEVISIBLE: "media.{0}.forcevisible", +diff --git toolkit/mozapps/extensions/internal/GMPProvider.jsm toolkit/mozapps/extensions/internal/GMPProvider.jsm +index 1f3a0b1..93517be 100644 +--- mozilla/toolkit/mozapps/extensions/internal/GMPProvider.jsm ++++ mozilla/toolkit/mozapps/extensions/internal/GMPProvider.jsm +@@ -100,12 +100,11 @@ + Log.repository.getLoggerWithMessagePrefix("Toolkit.GMP", + "GMPWrapper(" + + this._plugin.id + ") "); +- Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, +- this._plugin.id), ++ Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, this._plugin.id), + this.onPrefEnabledChanged, this); +- Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION, ++ Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH, + this._plugin.id), +- this.onPrefVersionChanged, this); ++ this.onPrefPathChanged, this); + if (this._plugin.isEME) { + Preferences.observe(GMPPrefs.KEY_EME_ENABLED, + this.onPrefEMEGlobalEnabledChanged, this); +@@ -120,17 +119,14 @@ + optionsType: AddonManager.OPTIONS_TYPE_INLINE, + get optionsURL() { return this._plugin.optionsURL; }, + ++ + set gmpPath(aPath) { this._gmpPath = aPath; }, + get gmpPath() { +- if (!this._gmpPath && this.isInstalled) { +- this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir, +- this._plugin.id, +- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, +- null, this._plugin.id)); ++ if (!this._gmpPath) { ++ this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); + } + return this._gmpPath; + }, +- + get id() { return this._plugin.id; }, + get type() { return "plugin"; }, + get isGMPlugin() { return true; }, +@@ -141,8 +137,13 @@ + get description() { return this._plugin.description; }, + get fullDescription() { return this._plugin.fullDescription; }, + +- get version() { return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null, +- this._plugin.id); }, ++ get version() { ++ if (this.isInstalled) { ++ return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null, ++ this._plugin.id); ++ } ++ return null; ++ }, + + get isActive() { return !this.appDisabled && !this.userDisabled; }, + get appDisabled() { +@@ -289,24 +290,17 @@ + + get pluginMimeTypes() { return []; }, + get pluginLibraries() { +- if (this.isInstalled) { +- let path = this.version; +- return [path]; +- } +- return []; ++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); ++ return path && path.length ? [OS.Path.basename(path)] : []; + }, + get pluginFullpath() { +- if (this.isInstalled) { +- let path = OS.Path.join(OS.Constants.Path.profileDir, +- this._plugin.id, +- this.version); +- return [path]; +- } +- return []; ++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); ++ return path && path.length ? [path] : []; + }, + + get isInstalled() { +- return this.version && this.version.length > 0; ++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); ++ return path && path.length > 0; + }, + + _handleEnabledChanged: function() { +@@ -362,10 +356,10 @@ + } + }, + +- onPrefVersionChanged: function() { ++ onPrefPathChanged: function() { + AddonManagerPrivate.callAddonListeners("onUninstalling", this, false); + if (this._gmpPath) { +- this._log.info("onPrefVersionChanged() - unregistering gmp directory " + ++ this._log.info("onPrefPathChanged() - unregistering gmp directory " + + this._gmpPath); + gmpService.removePluginDirectory(this._gmpPath); + } +@@ -374,15 +368,10 @@ + AddonManagerPrivate.callInstallListeners("onExternalInstall", null, this, + null, false); + AddonManagerPrivate.callAddonListeners("onInstalling", this, false); +- this._gmpPath = null; +- if (this.isInstalled) { +- this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir, +- this._plugin.id, +- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, +- null, this._plugin.id)); +- } ++ this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, ++ null, this._plugin.id); + if (this._gmpPath && this.isActive) { +- this._log.info("onPrefVersionChanged() - registering gmp directory " + ++ this._log.info("onPrefPathChanged() - registering gmp directory " + + this._gmpPath); + gmpService.addPluginDirectory(this._gmpPath); + } +@@ -393,9 +382,9 @@ + Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, + this._plugin.id), + this.onPrefEnabledChanged, this); +- Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION, ++ Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH, + this._plugin.id), +- this.onPrefVersionChanged, this); ++ this.onPrefPathChanged, this); + if (this._plugin.isEME) { + Preferences.ignore(GMPPrefs.KEY_EME_ENABLED, + this.onPrefEMEGlobalEnabledChanged, this); Property changes on: branches/2015Q3/mail/thunderbird/files/patch-system-openh264 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-toolkit_mozapps_installer_packager_mk =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-toolkit_mozapps_installer_packager_mk (nonexistent) +++ branches/2015Q3/mail/thunderbird/files/patch-toolkit_mozapps_installer_packager_mk (revision 392767) @@ -0,0 +1,13 @@ +$OpenBSD: patch-toolkit_mozapps_installer_packager_mk,v 1.11 2012/06/11 15:29:56 landry Exp $ +install headers/idl/sdk libs only if xulrunner +--- mozilla/toolkit/mozapps/installer/packager.mk.orig Fri Jun 1 14:04:20 2012 ++++ mozilla/toolkit/mozapps/installer/packager.mk Tue Jun 5 07:55:51 2012 +@@ -886,7 +886,7 @@ endif + $(NSINSTALL) -D $(DESTDIR)$(bindir) + $(RM) -f $(DESTDIR)$(bindir)/$(MOZ_APP_NAME) + ln -s $(installdir)/$(MOZ_APP_NAME) $(DESTDIR)$(bindir) +-ifdef INSTALL_SDK # Here comes the hard part ++ifeq ($(MOZ_APP_NAME),xulrunner) + $(NSINSTALL) -D $(DESTDIR)$(includedir) + (cd $(DIST)/include && tar $(TAR_CREATE_FLAGS) - .) | \ + (cd $(DESTDIR)$(includedir) && tar -xf -) Property changes on: branches/2015Q3/mail/thunderbird/files/patch-toolkit_mozapps_installer_packager_mk ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/mail/thunderbird/files/patch-z-bug517422 =================================================================== --- branches/2015Q3/mail/thunderbird/files/patch-z-bug517422 (revision 392766) +++ branches/2015Q3/mail/thunderbird/files/patch-z-bug517422 (revision 392767) @@ -1,492 +1,582 @@ # Allow more config/external/ libs built against system-wide version. diff --git config/Makefile.in config/Makefile.in index 5383399..0410004 100644 --- mozilla/config/Makefile.in +++ mozilla/config/Makefile.in -@@ -79,6 +79,13 @@ export:: $(export-preqs) +@@ -77,6 +77,14 @@ export:: $(export-preqs) -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \ -DMOZ_NATIVE_GRAPHITE2=$(MOZ_NATIVE_GRAPHITE2) \ -DMOZ_NATIVE_HARFBUZZ=$(MOZ_NATIVE_HARFBUZZ) \ + -DMOZ_NATIVE_OGG=$(MOZ_NATIVE_OGG) \ + -DMOZ_NATIVE_THEORA=$(MOZ_NATIVE_THEORA) \ + -DMOZ_NATIVE_VORBIS=$(MOZ_NATIVE_VORBIS) \ + -DMOZ_NATIVE_TREMOR=$(MOZ_NATIVE_TREMOR) \ ++ -DMOZ_NATIVE_CELT=$(MOZ_NATIVE_CELT) \ + -DMOZ_NATIVE_OPUS=$(MOZ_NATIVE_OPUS) \ + -DMOZ_NATIVE_SPEEX=$(MOZ_NATIVE_SPEEX) \ + -DMOZ_NATIVE_SOUNDTOUCH=$(MOZ_NATIVE_SOUNDTOUCH) \ $(srcdir)/system-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers $(INSTALL) system_wrappers $(DIST) diff --git config/external/moz.build config/external/moz.build index f67c5c7..eb909ce 100644 --- mozilla/config/external/moz.build +++ mozilla/config/external/moz.build -@@ -15,13 +15,19 @@ if CONFIG['MOZ_UPDATER']: - if not CONFIG['MOZ_NATIVE_BZ2']: - external_dirs += ['modules/libbz2'] +@@ -19,10 +19,19 @@ if CONFIG['MOZ_UPDATER']: + # There's no "native brotli" yet, but probably in the future... + external_dirs += ['modules/brotli'] -if CONFIG['MOZ_VORBIS']: +if not CONFIG['MOZ_NATIVE_OGG']: + external_dirs += ['media/libogg'] + ++if not CONFIG['MOZ_NATIVE_CELT'] or not CONFIG['MOZ_NATIVE_OPUS']: ++ external_dirs += ['media/libopus'] ++ +if not CONFIG['MOZ_NATIVE_THEORA']: + external_dirs += ['media/libtheora'] + +if CONFIG['MOZ_VORBIS'] and not CONFIG['MOZ_NATIVE_VORBIS']: external_dirs += ['media/libvorbis'] -if CONFIG['MOZ_TREMOR']: +if CONFIG['MOZ_TREMOR'] and not CONFIG['MOZ_NATIVE_TREMOR']: external_dirs += ['media/libtremor'] --if CONFIG['MOZ_OPUS']: -+if CONFIG['MOZ_OPUS'] and not CONFIG['MOZ_NATIVE_OPUS']: - external_dirs += ['media/libopus'] - if CONFIG['MOZ_WEBM']: -@@ -36,13 +42,15 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ_NATIVE_LIBVPX']: +@@ -37,15 +46,16 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ if not CONFIG['MOZ_NATIVE_PNG']: external_dirs += ['media/libpng'] +if not CONFIG['MOZ_NATIVE_SPEEX']: + external_dirs += ['media/libspeex_resampler'] + +if not CONFIG['MOZ_NATIVE_SOUNDTOUCH']: + external_dirs += ['media/libsoundtouch'] + external_dirs += [ 'media/kiss_fft', 'media/libcubeb', - 'media/libogg', +- 'media/libopus', - 'media/libtheora', - 'media/libspeex_resampler', + 'media/libstagefright', - 'media/libsoundtouch', ] - PARALLEL_DIRS += ['../../' + i for i in external_dirs] + DIRS += ['../../' + i for i in external_dirs] diff --git config/system-headers config/system-headers index bef567c..9807c29 100644 --- mozilla/config/system-headers +++ mozilla/config/system-headers -@@ -1050,8 +1050,6 @@ X11/Xutil.h - xpt_struct.h - xpt_xdr.h +@@ -1263,7 +1263,6 @@ X11/Xlocale.h + X11/Xos.h + X11/Xutil.h zmouse.h --speex/speex_resampler.h -soundtouch/SoundTouch.h #if MOZ_NATIVE_PNG==1 png.h #endif -@@ -1119,6 +1117,8 @@ ogg/ogg.h +@@ -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 - cubeb/cubeb.h -+speex/speex_resampler.h -+soundtouch/SoundTouch.h - #endif - gst/gst.h - gst/app/gstappsink.h -@@ -1155,3 +1155,29 @@ graphite2/Segment.h +@@ -1365,3 +1365,35 @@ graphite2/Segment.h harfbuzz/hb-ot.h harfbuzz/hb.h #endif +#if MOZ_NATIVE_OGG==1 +ogg/ogg.h +ogg/os_types.h +#endif +#if MOZ_NATIVE_THEORA==1 +theora/theoradec.h +#endif +#if MOZ_NATIVE_VORBIS==1 +vorbis/codec.h +vorbis/vorbisenc.h +#endif +#if MOZ_NATIVE_TREMOR==1 +tremor/ivorbiscodec.h +#endif ++#if MOZ_NATIVE_CELT==1 ++celt.h ++celt_header.h ++celt/celt.h ++celt/celt_header.h ++#endif +#if MOZ_NATIVE_OPUS==1 +opus.h +opus_multistream.h +opus/opus.h +opus/opus_multistream.h +#endif +#if MOZ_NATIVE_SPEEX==1 +speex/speex_resampler.h +#endif +#if MOZ_NATIVE_SOUNDTOUCH==1 +soundtouch/SoundTouch.h +#endif diff --git configure.in configure.in index 87db361..7947626 100644 --- mozilla/configure.in +++ mozilla/configure.in -@@ -5211,6 +5211,63 @@ if test "${ac_cv_c_attribute_aligned}" != "0"; then +@@ -5223,6 +5223,157 @@ if test "${ac_cv_c_attribute_aligned}" ! fi dnl ======================================================== +dnl Check for libogg +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-ogg, +[ --with-system-ogg Use system libogg (located with pkgconfig)], +MOZ_NATIVE_OGG=1, +MOZ_NATIVE_OGG=) + +if test -n "$MOZ_NATIVE_OGG"; then + PKG_CHECK_MODULES(MOZ_OGG, ogg >= 1.2.1) + + _SAVE_LIBS=$LIBS + LIBS="$LIBS $MOZ_OGG_LIBS" + AC_CHECK_FUNC(ogg_set_mem_functions, [], + [AC_DEFINE(MOZ_OGG_NO_MEM_REPORTING)]) + LIBS=$_SAVE_LIBS +fi + +AC_SUBST(MOZ_NATIVE_OGG) -+AC_SUBST(MOZ_OGG_CFLAGS) -+AC_SUBST(MOZ_OGG_LIBS) + +dnl ======================================================== +dnl Check for libvorbis +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-vorbis, +[ --with-system-vorbis Use system libvorbis (located with pkgconfig)], +MOZ_NATIVE_VORBIS=1, +MOZ_NATIVE_VORBIS=) + +if test -n "$MOZ_NATIVE_VORBIS"; then + PKG_CHECK_MODULES(MOZ_VORBIS, vorbis vorbisenc >= 1.3.5) +fi + +AC_SUBST(MOZ_NATIVE_VORBIS) -+AC_SUBST(MOZ_VORBIS_CFLAGS) -+AC_SUBST(MOZ_VORBIS_LIBS) + +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) -+AC_SUBST(MOZ_TREMOR_CFLAGS) -+AC_SUBST(MOZ_TREMOR_LIBS) + +dnl ======================================================== - dnl = Disable Opus audio codec support - dnl ======================================================== - MOZ_ARG_DISABLE_BOOL(opus, -@@ -5219,6 +5274,97 @@ MOZ_ARG_DISABLE_BOOL(opus, - MOZ_OPUS=1) - - dnl ======================================================== ++dnl Check for libcelt ++dnl ======================================================== ++ ++MOZ_ARG_WITH_BOOL(system-celt, ++[ --with-system-celt Use system libcelt (located with pkgconfig)], ++MOZ_NATIVE_CELT=1, ++MOZ_NATIVE_CELT=) ++ ++if test -n "$MOZ_NATIVE_CELT"; then ++ PKG_CHECK_MODULES(MOZ_CELT, celt) ++else ++ MOZ_CELT_CFLAGS='-I$(topsrcdir)/media/libopus' ++fi ++ ++AC_SUBST(MOZ_NATIVE_CELT) ++ ++dnl ======================================================== +dnl Check for libopus +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-opus, +[ --with-system-opus Use system libopus (located with pkgconfig)], +MOZ_NATIVE_OPUS=1, +MOZ_NATIVE_OPUS=) + +if test -n "$MOZ_NATIVE_OPUS"; then + PKG_CHECK_MODULES(MOZ_OPUS, opus >= 1.1) +else + MOZ_OPUS_CFLAGS='-I$(topsrcdir)/media/libopus/include' +fi + +AC_SUBST(MOZ_NATIVE_OPUS) -+AC_SUBST(MOZ_OPUS_CFLAGS) -+AC_SUBST(MOZ_OPUS_LIBS) + +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) -+AC_SUBST(MOZ_THEORA_CFLAGS) -+AC_SUBST(MOZ_THEORA_LIBS) + +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) -+AC_SUBST(MOZ_SPEEX_CFLAGS) -+AC_SUBST(MOZ_SPEEX_LIBS) + +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) -+AC_SUBST(MOZ_SOUNDTOUCH_CFLAGS) -+AC_SUBST(MOZ_SOUNDTOUCH_LIBS) + +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 ---- mozilla/content/media/AudioStream.h -+++ mozilla/content/media/AudioStream.h -@@ -26,7 +26,7 @@ public: - }; +--- mozilla/dom/media/AudioStream.h ++++ mozilla/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/Makefile.in content/media/Makefile.in -index fd34449..c6c42c8 100644 ---- mozilla/content/media/Makefile.in -+++ mozilla/content/media/Makefile.in -@@ -6,3 +6,31 @@ include $(topsrcdir)/config/rules.mk +diff --git dom/media/moz.build dom/media/moz.build +index 7526cff..e0a0ca0 100644 +--- mozilla/dom/media/moz.build ++++ mozilla/dom/media/moz.build +@@ -212,3 +212,24 @@ if CONFIG['ANDROID_VERSION'] > '15': - CFLAGS += $(GSTREAMER_CFLAGS) - CXXFLAGS += $(GSTREAMER_CFLAGS) + CFLAGS += CONFIG['GSTREAMER_CFLAGS'] + CXXFLAGS += CONFIG['GSTREAMER_CFLAGS'] + -+ifdef MOZ_NATIVE_OGG -+CXXFLAGS += $(MOZ_OGG_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_OGG']: ++ CXXFLAGS += CONFIG['MOZ_OGG_CFLAGS'] + -+ifdef MOZ_NATIVE_THEORA -+CXXFLAGS += $(MOZ_THEORA_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_THEORA']: ++ CXXFLAGS += CONFIG['MOZ_THEORA_CFLAGS'] + -+ifdef MOZ_NATIVE_VORBIS -+CXXFLAGS += $(MOZ_VORBIS_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_VORBIS']: ++ CXXFLAGS += CONFIG['MOZ_VORBIS_CFLAGS'] + -+ifdef MOZ_NATIVE_TREMOR -+CXXFLAGS += $(MOZ_TREMOR_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_TREMOR']: ++ CXXFLAGS += CONFIG['MOZ_TREMOR_CFLAGS'] + -+ifdef MOZ_NATIVE_OPUS -+CXXFLAGS += $(MOZ_OPUS_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_OPUS']: ++ CXXFLAGS += CONFIG['MOZ_OPUS_CFLAGS'] + -+ifdef MOZ_NATIVE_SPEEX -+CXXFLAGS += $(MOZ_SPEEX_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_SPEEX']: ++ CXXFLAGS += CONFIG['MOZ_SPEEX_CFLAGS'] + -+ifdef MOZ_NATIVE_SOUNDTOUCH -+CXXFLAGS += $(MOZ_SOUNDTOUCH_CFLAGS) -+endif -diff --git media/libcubeb/src/Makefile.in media/libcubeb/src/Makefile.in -index 4c14494..1cb98e2 100644 ---- mozilla/media/libcubeb/src/Makefile.in -+++ mozilla/media/libcubeb/src/Makefile.in -@@ -9,3 +9,7 @@ CFLAGS += \ - $(MOZ_ALSA_CFLAGS) \ - $(MOZ_PULSEAUDIO_CFLAGS) \ - $(NULL) ++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 +--- mozilla/media/libcubeb/src/moz.build ++++ mozilla/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'] + -+ifdef MOZ_NATIVE_SPEEX -+CFLAGS += $(MOZ_SPEEX_CFLAGS) -+endif -diff --git media/libtheora/Makefile.in media/libtheora/Makefile.in -new file mode 100644 -index 0000000..1f02dc0 ---- /dev/null -+++ mozilla/media/libtheora/Makefile.in -@@ -0,0 +1,9 @@ -+# This Source Code Form is subject to the terms of the Mozilla Public -+# License, v. 2.0. If a copy of the MPL was not distributed with this -+# file, You can obtain one at http://mozilla.org/MPL/2.0/. + 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 +--- mozilla/media/libogg/README_MOZILLA ++++ 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 + -+include $(topsrcdir)/config/rules.mk ++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 +--- mozilla/media/libopus/README_MOZILLA ++++ 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. + -+ifdef MOZ_NATIVE_OGG -+CFLAGS += $(MOZ_OGG_CFLAGS) -+endif -diff --git media/libtremor/Makefile.in media/libtremor/Makefile.in -new file mode 100644 -index 0000000..1f02dc0 ---- /dev/null -+++ mozilla/media/libtremor/Makefile.in -@@ -0,0 +1,9 @@ -+# This Source Code Form is subject to the terms of the Mozilla Public -+# License, v. 2.0. If a copy of the MPL was not distributed with this -+# file, You can obtain one at http://mozilla.org/MPL/2.0/. ++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 +--- mozilla/media/libsoundtouch/README_MOZILLA ++++ 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 +--- mozilla/media/libspeex_resampler/README_MOZILLA ++++ 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. + -+include $(topsrcdir)/config/rules.mk ++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 +--- mozilla/media/libtheora/README_MOZILLA ++++ 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. + -+ifdef MOZ_NATIVE_OGG -+CFLAGS += $(MOZ_OGG_CFLAGS) -+endif -diff --git media/libvorbis/Makefile.in media/libvorbis/Makefile.in -new file mode 100644 -index 0000000..1f02dc0 ---- /dev/null -+++ mozilla/media/libvorbis/Makefile.in -@@ -0,0 +1,9 @@ -+# This Source Code Form is subject to the terms of the Mozilla Public -+# License, v. 2.0. If a copy of the MPL was not distributed with this -+# file, You can obtain one at http://mozilla.org/MPL/2.0/. ++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 +--- mozilla/media/libtheora/moz.build ++++ mozilla/media/libtheora/moz.build +@@ -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 +--- mozilla/media/libtremor/README_MOZILLA ++++ 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. + -+include $(topsrcdir)/config/rules.mk ++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 +--- mozilla/media/libtremor/moz.build ++++ mozilla/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 +--- mozilla/media/libvorbis/README_MOZILLA ++++ 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. + -+ifdef MOZ_NATIVE_OGG -+CFLAGS += $(MOZ_OGG_CFLAGS) -+endif -diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in ++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 +--- mozilla/media/libvorbis/moz.build ++++ mozilla/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 ---- mozilla/media/webrtc/signaling/test/Makefile.in -+++ mozilla/media/webrtc/signaling/test/Makefile.in -@@ -48,6 +48,12 @@ LIBS += \ - $(NULL) - endif +--- mozilla/media/webrtc/signaling/test/moz.build ++++ mozilla/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'] -+ifdef MOZ_NATIVE_OPUS -+LIBS += \ -+ $(MOZ_OPUS_LIBS) \ -+ $(NULL) -+endif ++if CONFIG['MOZ_NATIVE_OPUS']: ++ OS_LIBS += CONFIG['MOZ_OPUS_LIBS'] + - ifdef MOZ_NATIVE_LIBVPX - LIBS += \ - $(MOZ_LIBVPX_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 --- mozilla/media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi +++ mozilla/media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi -@@ -14,9 +14,9 @@ +@@ -17,18 +17,11 @@ 'conditions': [ ['build_with_mozilla==1', { # Mozilla provides its own build of the opus library. - 'include_dirs': [ - '/media/libopus/include', -- ] +- '/media/libopus/src', +- '/media/libopus/celt', + 'cflags_mozilla': [ ++ '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt', + '$(MOZ_OPUS_CFLAGS)', -+ ], ++ '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src', + ], +- 'direct_dependent_settings': { +- 'include_dirs': [ +- '/media/libopus/include', +- '/media/libopus/src', +- '/media/libopus/celt', +- ], +- }, }, { 'dependencies': [ '<(DEPTH)/third_party/opus/opus.gyp:opus' -diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk +diff --git media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi +index 00e77e7..55f48ab 100644 +--- mozilla/media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi ++++ mozilla/media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi +@@ -84,19 +84,11 @@ + ], + }], + ['build_with_mozilla==1', { +- 'include_dirs': [ +- # Need Opus header files for the audio classifier. +- '<(DEPTH)/../../../media/opus/celt', +-# '<(DEPTH)/third_party/opus/src/src', ++ 'cflags_mozilla': [ ++ '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt', ++ '$(MOZ_OPUS_CFLAGS)', ++ '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src', + ], +- 'direct_dependent_settings': { +- 'include_dirs': [ +- '../../../../../../media/opus/celt', +- # Need Opus header files for the audio classifier. +- '<(DEPTH)/../../../media/opus/celt', +-# '<(DEPTH)/third_party/opus/src/src', +- ], +- }, + }], + ], + 'sources': [ +diff --git toolkit/library/moz.build toolkit/library/moz.build index d42137a..695e75a8 100644 ---- mozilla/toolkit/library/libxul.mk -+++ mozilla/toolkit/library/libxul.mk -@@ -77,6 +77,34 @@ ifdef MOZ_NATIVE_HUNSPELL - EXTRA_DSO_LDOPTS += $(MOZ_HUNSPELL_LIBS) - endif +--- mozilla/toolkit/library/moz.build ++++ mozilla/toolkit/library/moz.build +@@ -178,6 +178,30 @@ if CONFIG['MOZ_NATIVE_PNG']: + if CONFIG['MOZ_NATIVE_HUNSPELL']: + OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS'] -+ifdef MOZ_NATIVE_OGG -+EXTRA_DSO_LDOPTS += $(MOZ_OGG_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_OGG']: ++ OS_LIBS += CONFIG['MOZ_OGG_LIBS'] + -+ifdef MOZ_NATIVE_THEORA -+EXTRA_DSO_LDOPTS += $(MOZ_THEORA_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_THEORA']: ++ OS_LIBS += CONFIG['MOZ_THEORA_LIBS'] + -+ifdef MOZ_NATIVE_VORBIS -+EXTRA_DSO_LDOPTS += $(MOZ_VORBIS_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_VORBIS']: ++ OS_LIBS += CONFIG['MOZ_VORBIS_LIBS'] + -+ifdef MOZ_NATIVE_TREMOR -+EXTRA_DSO_LDOPTS += $(MOZ_TREMOR_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_TREMOR']: ++ OS_LIBS += CONFIG['MOZ_TREMOR_LIBS'] + -+ifdef MOZ_NATIVE_OPUS -+EXTRA_DSO_LDOPTS += $(MOZ_OPUS_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_CELT']: ++ OS_LIBS += CONFIG['MOZ_CELT_LIBS'] + -+ifdef MOZ_NATIVE_SPEEX -+EXTRA_DSO_LDOPTS += $(MOZ_SPEEX_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_OPUS']: ++ OS_LIBS += CONFIG['MOZ_OPUS_LIBS'] + -+ifdef MOZ_NATIVE_SOUNDTOUCH -+EXTRA_DSO_LDOPTS += $(MOZ_SOUNDTOUCH_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_SPEEX']: ++ OS_LIBS += CONFIG['MOZ_SPEEX_LIBS'] + - ifdef MOZ_NATIVE_LIBEVENT - EXTRA_DSO_LDOPTS += $(MOZ_LIBEVENT_LIBS) - endif -diff --git xpcom/build/nsXPComInit.cpp xpcom/build/nsXPComInit.cpp ++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 ---- mozilla/xpcom/build/nsXPComInit.cpp -+++ mozilla/xpcom/build/nsXPComInit.cpp -@@ -130,7 +130,9 @@ extern nsresult nsStringInputStreamConstructor(nsISupports *, REFNSIID, void **) +--- mozilla/xpcom/build/XPCOMInit.cpp ++++ mozilla/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 -@@ -571,11 +573,13 @@ NS_InitXPCOM2(nsIServiceManager* *result, - // this oddness. - mozilla::SetICUMemoryFunctions(); +@@ -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); + // 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. + // And for VPX. Index: branches/2015Q3/mail/thunderbird-i18n/Makefile =================================================================== --- branches/2015Q3/mail/thunderbird-i18n/Makefile (revision 392766) +++ branches/2015Q3/mail/thunderbird-i18n/Makefile (revision 392767) @@ -1,85 +1,85 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= thunderbird-i18n -PORTVERSION= 31.7.0 +PORTVERSION= 38.1.0 CATEGORIES= mail news net-im MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \ MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/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: branches/2015Q3/mail/thunderbird-i18n/Makefile.lang =================================================================== --- branches/2015Q3/mail/thunderbird-i18n/Makefile.lang (revision 392766) +++ branches/2015Q3/mail/thunderbird-i18n/Makefile.lang (revision 392767) @@ -1,179 +1,189 @@ # $FreeBSD$ -THUNDERBIRD_I18N_ALL_= ar ast be bg bn-BD br ca cs da de el en-GB en-US es-AR \ - es-ES et eu fi fr fy-NL ga-IE gd gl he hr hu hy-AM id \ - is it ja ko lt nb-NO nl nn-NO pa-IN pl pt-BR pt-PT rm \ - ro ru si sk sl sq sr sv-SE ta-LK tr uk vi zh-CN zh-TW +THUNDERBIRD_I18N_ALL_= ar ast be bg bn-BD br ca cs cy da de dsb el en-GB \ + en-US es-AR es-ES et eu fi fr fy-NL ga-IE gd gl he \ + hr hsb hu hy-AM id is it ja ko lt nb-NO nl nn-NO \ + pa-IN pl pt-BR pt-PT rm ro ru si sk sl sq sr sv-SE \ + ta-LK tr uk vi zh-CN zh-TW .if defined(THUNDERBIRD_I18N_ALL) || defined(PACKAGE_BUILDING) || target(package) THUNDERBIRD_I18N= ${THUNDERBIRD_I18N_ALL_} .else .if ${PORT_OPTIONS:MLANG_AR} THUNDERBIRD_I18N+= ar .endif .if ${PORT_OPTIONS:MLANG_AST} THUNDERBIRD_I18N+= ast .endif .if ${PORT_OPTIONS:MLANG_BE} THUNDERBIRD_I18N+= be .endif .if ${PORT_OPTIONS:MLANG_BG} THUNDERBIRD_I18N+= bg .endif .if ${PORT_OPTIONS:MLANG_BB} THUNDERBIRD_I18N+= bn-BD .endif .if ${PORT_OPTIONS:MLANG_BR} THUNDERBIRD_I18N+= br .endif .if ${PORT_OPTIONS:MLANG_CA} THUNDERBIRD_I18N+= ca .endif .if ${PORT_OPTIONS:MLANG_CS} THUNDERBIRD_I18N+= cs .endif +.if ${PORT_OPTIONS:MLANG_CY} +THUNDERBIRD_I18N+= cy +.endif .if ${PORT_OPTIONS:MLANG_DA} THUNDERBIRD_I18N+= da .endif .if ${PORT_OPTIONS:MLANG_DE} THUNDERBIRD_I18N+= de .endif +.if ${PORT_OPTIONS:MLANG_DSB} +THUNDERBIRD_I18N+= dsb +.endif .if ${PORT_OPTIONS:MLANG_EL} THUNDERBIRD_I18N+= el .endif .if ${PORT_OPTIONS:MLANG_GB} THUNDERBIRD_I18N+= en-GB .endif .if ${PORT_OPTIONS:MLANG_US} THUNDERBIRD_I18N+= en-US .endif .if ${PORT_OPTIONS:MLANG_SA} THUNDERBIRD_I18N+= es-AR .endif .if ${PORT_OPTIONS:MLANG_ES} THUNDERBIRD_I18N+= es-ES .endif .if ${PORT_OPTIONS:MLANG_ET} THUNDERBIRD_I18N+= et .endif .if ${PORT_OPTIONS:MLANG_EU} THUNDERBIRD_I18N+= eu .endif .if ${PORT_OPTIONS:MLANG_FI} THUNDERBIRD_I18N+= fi .endif .if ${PORT_OPTIONS:MLANG_FR} THUNDERBIRD_I18N+= fr .endif .if ${PORT_OPTIONS:MLANG_FY} THUNDERBIRD_I18N+= fy-NL .endif .if ${PORT_OPTIONS:MLANG_GA} THUNDERBIRD_I18N+= ga-IE .endif .if ${PORT_OPTIONS:MLANG_GD} THUNDERBIRD_I18N+= gd .endif .if ${PORT_OPTIONS:MLANG_GL} THUNDERBIRD_I18N+= gl .endif .if ${PORT_OPTIONS:MLANG_HE} THUNDERBIRD_I18N+= he .endif .if ${PORT_OPTIONS:MLANG_HR} THUNDERBIRD_I18N+= hr .endif .if ${PORT_OPTIONS:MLANG_HU} THUNDERBIRD_I18N+= hu +.endif +.if ${PORT_OPTIONS:MLANG_HSB} +THUNDERBIRD_I18N+= hsb .endif .if ${PORT_OPTIONS:MLANG_AM} THUNDERBIRD_I18N+= hy-AM .endif .if ${PORT_OPTIONS:MLANG_ID} THUNDERBIRD_I18N+= id .endif .if ${PORT_OPTIONS:MLANG_IS} THUNDERBIRD_I18N+= is .endif .if ${PORT_OPTIONS:MLANG_IT} THUNDERBIRD_I18N+= it .endif .if ${PORT_OPTIONS:MLANG_JA} THUNDERBIRD_I18N+= ja .endif .if ${PORT_OPTIONS:MLANG_KO} THUNDERBIRD_I18N+= ko .endif .if ${PORT_OPTIONS:MLANG_LT} THUNDERBIRD_I18N+= lt .endif .if ${PORT_OPTIONS:MLANG_LV} THUNDERBIRD_I18N+= lv .endif .if ${PORT_OPTIONS:MLANG_NB} THUNDERBIRD_I18N+= nb-NO .endif .if ${PORT_OPTIONS:MLANG_NL} THUNDERBIRD_I18N+= nl .endif .if ${PORT_OPTIONS:MLANG_NN} THUNDERBIRD_I18N+= nn-NO .endif .if ${PORT_OPTIONS:MLANG_PA} THUNDERBIRD_I18N+= pa-IN .endif .if ${PORT_OPTIONS:MLANG_PL} THUNDERBIRD_I18N+= pl .endif .if ${PORT_OPTIONS:MLANG_PBR} THUNDERBIRD_I18N+= pt-BR .endif .if ${PORT_OPTIONS:MLANG_PT} THUNDERBIRD_I18N+= pt-PT .endif .if ${PORT_OPTIONS:MLANG_RM} THUNDERBIRD_I18N+= rm .endif .if ${PORT_OPTIONS:MLANG_RO} THUNDERBIRD_I18N+= ro .endif .if ${PORT_OPTIONS:MLANG_RU} THUNDERBIRD_I18N+= ru .endif .if ${PORT_OPTIONS:MLANG_SI} THUNDERBIRD_I18N+= si .endif .if ${PORT_OPTIONS:MLANG_SK} THUNDERBIRD_I18N+= sk .endif .if ${PORT_OPTIONS:MLANG_SL} THUNDERBIRD_I18N+= sl .endif .if ${PORT_OPTIONS:MLANG_SQ} THUNDERBIRD_I18N+= sq .endif .if ${PORT_OPTIONS:MLANG_SR} THUNDERBIRD_I18N+= sr .endif .if ${PORT_OPTIONS:MLANG_SV} THUNDERBIRD_I18N+= sv-SE .endif .if ${PORT_OPTIONS:MLANG_LK} THUNDERBIRD_I18N+= ta-LK .endif .if ${PORT_OPTIONS:MLANG_TR} THUNDERBIRD_I18N+= tr .endif .if ${PORT_OPTIONS:MLANG_UK} THUNDERBIRD_I18N+= uk .endif .if ${PORT_OPTIONS:MLANG_VI} THUNDERBIRD_I18N+= vi .endif .if ${PORT_OPTIONS:MLANG_CN} THUNDERBIRD_I18N+= zh-CN .endif .if ${PORT_OPTIONS:MLANG_TW} THUNDERBIRD_I18N+= zh-TW .endif .endif Index: branches/2015Q3/mail/thunderbird-i18n/Makefile.option =================================================================== --- branches/2015Q3/mail/thunderbird-i18n/Makefile.option (revision 392766) +++ branches/2015Q3/mail/thunderbird-i18n/Makefile.option (revision 392767) @@ -1,61 +1,67 @@ # $FreeBSD$ OPTIONS_DEFINE= LANG_AR \ LANG_AST \ LANG_BE \ LANG_BG \ LANG_BB \ LANG_BR \ LANG_CA \ LANG_CN \ LANG_CS \ + LANG_CY \ LANG_DA \ LANG_DE \ + LANG_DSB \ LANG_EL \ LANG_GB \ LANG_US \ LANG_SA \ LANG_ES \ LANG_ET \ LANG_EU \ LANG_FI \ LANG_FR \ LANG_FY \ LANG_GA \ LANG_GD \ LANG_GL \ LANG_HE \ + LANG_HSB \ LANG_HU \ LANG_AM \ LANG_ID \ LANG_HR \ LANG_IS \ LANG_IT \ LANG_JA \ LANG_KO \ LANG_LT \ LANG_LV \ LANG_NB \ LANG_NL \ LANG_NN \ LANG_PA \ LANG_PL \ LANG_PBR \ LANG_PT \ LANG_RM \ LANG_RO \ LANG_RU \ LANG_SI \ LANG_SK \ LANG_SL \ LANG_SQ \ LANG_SR \ LANG_SV \ LANG_LK \ LANG_TR \ LANG_UK \ LANG_VI \ LANG_TW OPTIONS_DEFAULT=LANG_CN LANG_ES LANG_PBR LANG_RU LANG_JA LANG_DE LANG_FR \ LANG_KO LANG_IT LANG_PA + +LANG_DSB_DESC?= Lower Sorbian language support +LANG_HSB_DESC?= Upper Sorbian language support Index: branches/2015Q3/mail/thunderbird-i18n/distinfo =================================================================== --- branches/2015Q3/mail/thunderbird-i18n/distinfo (revision 392766) +++ branches/2015Q3/mail/thunderbird-i18n/distinfo (revision 392767) @@ -1,110 +1,116 @@ -SHA256 (xpi/thunderbird-i18n-31.7.0/ar.xpi) = fac353e1067852ccac7bc23a958c54fdebd2aad30ad9551a07deb23811046d79 -SIZE (xpi/thunderbird-i18n-31.7.0/ar.xpi) = 472812 -SHA256 (xpi/thunderbird-i18n-31.7.0/ast.xpi) = 4e39fb7792c7fe787bb9d9f3a03ac57da15e9b353a51f1602afcffc3e0e0ffa8 -SIZE (xpi/thunderbird-i18n-31.7.0/ast.xpi) = 393049 -SHA256 (xpi/thunderbird-i18n-31.7.0/be.xpi) = 8be5b81c0a747d89ff9f586d726706718711a01ffd70ecbed9fe00352fb795dd -SIZE (xpi/thunderbird-i18n-31.7.0/be.xpi) = 427488 -SHA256 (xpi/thunderbird-i18n-31.7.0/bg.xpi) = 7ab3641502204c37108430f5be2f78a161b1aa5a63561c8edcf0186a7f509df6 -SIZE (xpi/thunderbird-i18n-31.7.0/bg.xpi) = 493734 -SHA256 (xpi/thunderbird-i18n-31.7.0/bn-BD.xpi) = 51cf109e8416775e656a1431630f3f4a6b0bde3e44744449283d0666284698bf -SIZE (xpi/thunderbird-i18n-31.7.0/bn-BD.xpi) = 555613 -SHA256 (xpi/thunderbird-i18n-31.7.0/br.xpi) = 97bbaea547340a56f528d8675b04a596369fb9b63245e20acd76d74211f7a668 -SIZE (xpi/thunderbird-i18n-31.7.0/br.xpi) = 441445 -SHA256 (xpi/thunderbird-i18n-31.7.0/ca.xpi) = 49d3df068e9edcf17ed99754bd45c7d00c50f4bacd7a5484ab86018197258523 -SIZE (xpi/thunderbird-i18n-31.7.0/ca.xpi) = 441713 -SHA256 (xpi/thunderbird-i18n-31.7.0/cs.xpi) = d491ebf429f56ad21632bc476f9364857ee838a330ff1b966cae2e8ec5a944e8 -SIZE (xpi/thunderbird-i18n-31.7.0/cs.xpi) = 444701 -SHA256 (xpi/thunderbird-i18n-31.7.0/da.xpi) = c95a6ce7d22eca56f365f05805393a1b52a5427af02a447f9dba1cd1559dd7c7 -SIZE (xpi/thunderbird-i18n-31.7.0/da.xpi) = 422052 -SHA256 (xpi/thunderbird-i18n-31.7.0/de.xpi) = 0debd56af6d8872d525e62ae8fd609620c3a66a425817dec83d701346fd766ba -SIZE (xpi/thunderbird-i18n-31.7.0/de.xpi) = 424665 -SHA256 (xpi/thunderbird-i18n-31.7.0/el.xpi) = 9b3ca0a7df6b8bc91274b2b757dfb909beb04815cf51b377b22755114776b536 -SIZE (xpi/thunderbird-i18n-31.7.0/el.xpi) = 484855 -SHA256 (xpi/thunderbird-i18n-31.7.0/en-GB.xpi) = d8d4dc74889792dc9b434f11a8934d5363dafb07aada75068809f1d3ceba7d66 -SIZE (xpi/thunderbird-i18n-31.7.0/en-GB.xpi) = 412515 -SHA256 (xpi/thunderbird-i18n-31.7.0/en-US.xpi) = c4e5def480042a55d8532129f3bd5226004b98f5dd3991eeb429a35152f4391e -SIZE (xpi/thunderbird-i18n-31.7.0/en-US.xpi) = 413660 -SHA256 (xpi/thunderbird-i18n-31.7.0/es-AR.xpi) = e0bf50d99447934d0f9865329469559308ab54c32d2d64321a9742b3aa4be063 -SIZE (xpi/thunderbird-i18n-31.7.0/es-AR.xpi) = 438531 -SHA256 (xpi/thunderbird-i18n-31.7.0/es-ES.xpi) = 162a5c3879bb4d826b8cfea0dd68cf13f29d417bac79cc2482dd78d76cc0a8f7 -SIZE (xpi/thunderbird-i18n-31.7.0/es-ES.xpi) = 374979 -SHA256 (xpi/thunderbird-i18n-31.7.0/et.xpi) = 9f5846d2147eeb8a834a282abc80ef1cd58389faaf4a0dfedfc4e91cd28faaf5 -SIZE (xpi/thunderbird-i18n-31.7.0/et.xpi) = 434364 -SHA256 (xpi/thunderbird-i18n-31.7.0/eu.xpi) = bba78265515862435a7aa19345460c0bdd192be207550f6a9ac0cdb7de535ac8 -SIZE (xpi/thunderbird-i18n-31.7.0/eu.xpi) = 431449 -SHA256 (xpi/thunderbird-i18n-31.7.0/fi.xpi) = bdf3d4bf05bc66951c9d861af635c791fd3513f578fe32a9ccc150aa81ba6304 -SIZE (xpi/thunderbird-i18n-31.7.0/fi.xpi) = 435632 -SHA256 (xpi/thunderbird-i18n-31.7.0/fr.xpi) = 5700997d79942d74db684fddb255ee1e5a1b10b0c7c0df875b917dbba91f9607 -SIZE (xpi/thunderbird-i18n-31.7.0/fr.xpi) = 444144 -SHA256 (xpi/thunderbird-i18n-31.7.0/fy-NL.xpi) = ed3f3e4bbba12218a0025747257cdaefceb4f37ce65fbf8e3ec1746cacf62d62 -SIZE (xpi/thunderbird-i18n-31.7.0/fy-NL.xpi) = 438544 -SHA256 (xpi/thunderbird-i18n-31.7.0/ga-IE.xpi) = 788127820d6404540b698794a9008990f77005056ec1f15da05785087729c178 -SIZE (xpi/thunderbird-i18n-31.7.0/ga-IE.xpi) = 449362 -SHA256 (xpi/thunderbird-i18n-31.7.0/gd.xpi) = f688f29b6e4032d6f6fd9b3e7ae20d2f94f7ae34e977bcb1ea1e9b4393ac9f4d -SIZE (xpi/thunderbird-i18n-31.7.0/gd.xpi) = 453172 -SHA256 (xpi/thunderbird-i18n-31.7.0/gl.xpi) = 52ba67336de4d8d19ac1d29d22df362af9e8b43a2cb800a0303b51e0b6d4c4fb -SIZE (xpi/thunderbird-i18n-31.7.0/gl.xpi) = 446788 -SHA256 (xpi/thunderbird-i18n-31.7.0/he.xpi) = 39519209cf6c19208e8c677439b3cad194d9d14f7ff3814c189890d6285b7af7 -SIZE (xpi/thunderbird-i18n-31.7.0/he.xpi) = 476111 -SHA256 (xpi/thunderbird-i18n-31.7.0/hr.xpi) = 7abab0668491b42dff80e8b656407b9489f8a133a58f0ca42f8c83a1973efd77 -SIZE (xpi/thunderbird-i18n-31.7.0/hr.xpi) = 436980 -SHA256 (xpi/thunderbird-i18n-31.7.0/hu.xpi) = ec4d3c63698bc825fee4a2dedde66a7796fef0efee8df307d8f233f382ba784a -SIZE (xpi/thunderbird-i18n-31.7.0/hu.xpi) = 454542 -SHA256 (xpi/thunderbird-i18n-31.7.0/hy-AM.xpi) = f22b7f8a56d6b92448d4b1cf471fdad56cef13e8668a472e833a8efc8400b53f -SIZE (xpi/thunderbird-i18n-31.7.0/hy-AM.xpi) = 492766 -SHA256 (xpi/thunderbird-i18n-31.7.0/id.xpi) = 40c62742c10f08f1b93e68b026b48b849dcf323f99987720be19c0bc0f4fbb7f -SIZE (xpi/thunderbird-i18n-31.7.0/id.xpi) = 475876 -SHA256 (xpi/thunderbird-i18n-31.7.0/is.xpi) = 1007cd1f3f72deecdbfbb3ec54837955f53235de4b39405158eec9dd74750246 -SIZE (xpi/thunderbird-i18n-31.7.0/is.xpi) = 437959 -SHA256 (xpi/thunderbird-i18n-31.7.0/it.xpi) = 6de47224c4342a1fc1c81d8ec0bab90cdacb4b4e54709e9590c2bd341fbfbae7 -SIZE (xpi/thunderbird-i18n-31.7.0/it.xpi) = 368001 -SHA256 (xpi/thunderbird-i18n-31.7.0/ja.xpi) = 4e3f6637cccafab04d665bb66b2d808797384c3b322a4375efcb9a3be480fe7f -SIZE (xpi/thunderbird-i18n-31.7.0/ja.xpi) = 489267 -SHA256 (xpi/thunderbird-i18n-31.7.0/ko.xpi) = 6c962ee2ce9051223897ace9fa6d7c60ffb7e95b103a52bad0f17803efcfeaf2 -SIZE (xpi/thunderbird-i18n-31.7.0/ko.xpi) = 448920 -SHA256 (xpi/thunderbird-i18n-31.7.0/lt.xpi) = 9dbde5ddc20a9512320490318f5f6278d5626357f3b17401482a439a4f6be654 -SIZE (xpi/thunderbird-i18n-31.7.0/lt.xpi) = 456352 -SHA256 (xpi/thunderbird-i18n-31.7.0/nb-NO.xpi) = 51a38f39dfc18d945a0985a23d0b7770f8fe3cebf8a28f22fd92bb288345a9b0 -SIZE (xpi/thunderbird-i18n-31.7.0/nb-NO.xpi) = 430942 -SHA256 (xpi/thunderbird-i18n-31.7.0/nl.xpi) = 784ba5505afef70f492a85651c632da974c01bf1c5a945ff132df40b077304d7 -SIZE (xpi/thunderbird-i18n-31.7.0/nl.xpi) = 431888 -SHA256 (xpi/thunderbird-i18n-31.7.0/nn-NO.xpi) = cfd312de7632a96facd36acdc00a04bc571101d655c5c8f70300d3f982b58366 -SIZE (xpi/thunderbird-i18n-31.7.0/nn-NO.xpi) = 433198 -SHA256 (xpi/thunderbird-i18n-31.7.0/pa-IN.xpi) = e444889660a60b44a3e5e6fc94972e2b8a2b97e0fa8959b41bcacacfc8be931d -SIZE (xpi/thunderbird-i18n-31.7.0/pa-IN.xpi) = 525323 -SHA256 (xpi/thunderbird-i18n-31.7.0/pl.xpi) = 3ef71ff4f72e28f15ea76764be9179cefdbf92a2270e87dad557cbf6d6c44f36 -SIZE (xpi/thunderbird-i18n-31.7.0/pl.xpi) = 410873 -SHA256 (xpi/thunderbird-i18n-31.7.0/pt-BR.xpi) = 298f9a4a205a77e471f96e38d12dbba00b6fb9ddf89b496e8b5eb106d1f33c97 -SIZE (xpi/thunderbird-i18n-31.7.0/pt-BR.xpi) = 450477 -SHA256 (xpi/thunderbird-i18n-31.7.0/pt-PT.xpi) = e01d684612fd224536e9cb21f44ace5cab81bf8fd15e8e5265847df1b2407a59 -SIZE (xpi/thunderbird-i18n-31.7.0/pt-PT.xpi) = 439603 -SHA256 (xpi/thunderbird-i18n-31.7.0/rm.xpi) = 0d2606836428595232daf0aedbafea4935e641658712fd99e34668e686c0d2e7 -SIZE (xpi/thunderbird-i18n-31.7.0/rm.xpi) = 439185 -SHA256 (xpi/thunderbird-i18n-31.7.0/ro.xpi) = 7de4b8e3ffcf3ac7ced5aeae0ca84d1e9c8603646e54473665505e1f1ac66925 -SIZE (xpi/thunderbird-i18n-31.7.0/ro.xpi) = 479749 -SHA256 (xpi/thunderbird-i18n-31.7.0/ru.xpi) = 38b372432b02c42703e3f425946cee6a42918d574f7bff7df5f9997ddb076f64 -SIZE (xpi/thunderbird-i18n-31.7.0/ru.xpi) = 436156 -SHA256 (xpi/thunderbird-i18n-31.7.0/si.xpi) = 3441d57aeedf15c5a29800e8f544b8571d41e5ed5a381d8bb2087cda97074970 -SIZE (xpi/thunderbird-i18n-31.7.0/si.xpi) = 528812 -SHA256 (xpi/thunderbird-i18n-31.7.0/sk.xpi) = dcd56d713daa7b6fb03d64219797e159eab8bef2e7eb9bd7999c0b285a24d153 -SIZE (xpi/thunderbird-i18n-31.7.0/sk.xpi) = 452995 -SHA256 (xpi/thunderbird-i18n-31.7.0/sl.xpi) = 7e7fb8287b9255aa8988bf63677e0bed8ae30c0da5ac7d83ba1300ba2bca41d3 -SIZE (xpi/thunderbird-i18n-31.7.0/sl.xpi) = 433874 -SHA256 (xpi/thunderbird-i18n-31.7.0/sq.xpi) = b9270889a4905233e450be25d61e4a1359a057bc6c021d5aba23a941cde56123 -SIZE (xpi/thunderbird-i18n-31.7.0/sq.xpi) = 454695 -SHA256 (xpi/thunderbird-i18n-31.7.0/sr.xpi) = 0ef471cf54c052214d5169189a72efc0e8d65801e482aeff413ffc7c822c1651 -SIZE (xpi/thunderbird-i18n-31.7.0/sr.xpi) = 537335 -SHA256 (xpi/thunderbird-i18n-31.7.0/sv-SE.xpi) = 803529203aded6bf1194a6d5d575f5e16f8a4a249a68878650c5469e92512923 -SIZE (xpi/thunderbird-i18n-31.7.0/sv-SE.xpi) = 436106 -SHA256 (xpi/thunderbird-i18n-31.7.0/ta-LK.xpi) = 3529d8a55ea5458edf24059d55178b6c4935aa82b604bc1c46e4b4bffb88234b -SIZE (xpi/thunderbird-i18n-31.7.0/ta-LK.xpi) = 553509 -SHA256 (xpi/thunderbird-i18n-31.7.0/tr.xpi) = e83e64f528b12b1550efb28ba4dea51e7912ab2af470c1382d78e01d9dc3a3ff -SIZE (xpi/thunderbird-i18n-31.7.0/tr.xpi) = 457360 -SHA256 (xpi/thunderbird-i18n-31.7.0/uk.xpi) = 12c2001834af439d1a0f95ed3f416788672d41c5b02481d26e54f66e721c83a6 -SIZE (xpi/thunderbird-i18n-31.7.0/uk.xpi) = 499656 -SHA256 (xpi/thunderbird-i18n-31.7.0/vi.xpi) = 7a20d9842117105f4ac641d602977cf20d4149564593adba0f3415976fd7b52d -SIZE (xpi/thunderbird-i18n-31.7.0/vi.xpi) = 513835 -SHA256 (xpi/thunderbird-i18n-31.7.0/zh-CN.xpi) = f582fac503f385ceb59761134ed24170ded9f65861106ff77219040b169e6a37 -SIZE (xpi/thunderbird-i18n-31.7.0/zh-CN.xpi) = 462668 -SHA256 (xpi/thunderbird-i18n-31.7.0/zh-TW.xpi) = 3b60993a3c85f61ef57b02334d3a71d864e9e6609ec29f398c1f60094cad43a3 -SIZE (xpi/thunderbird-i18n-31.7.0/zh-TW.xpi) = 463408 +SHA256 (xpi/thunderbird-i18n-38.1.0/ar.xpi) = 8bc4384ede05efcb02e67a8888651a81f22cbaea3bbf6072e156d707e2a9ad49 +SIZE (xpi/thunderbird-i18n-38.1.0/ar.xpi) = 475295 +SHA256 (xpi/thunderbird-i18n-38.1.0/ast.xpi) = 2a8b35fb65014cc2789e38a396a9c153b8726f5cc5c50ec042e29d9c7972b4fb +SIZE (xpi/thunderbird-i18n-38.1.0/ast.xpi) = 405893 +SHA256 (xpi/thunderbird-i18n-38.1.0/be.xpi) = 0bd3e4dcc65e44d62127fb1832803f75a0bad4cd179135375460327363e81864 +SIZE (xpi/thunderbird-i18n-38.1.0/be.xpi) = 442473 +SHA256 (xpi/thunderbird-i18n-38.1.0/bg.xpi) = 806a7f2d151db0f5334b2791dbd708b3f631b2ec214b2f6edfa7aa95abe0b59a +SIZE (xpi/thunderbird-i18n-38.1.0/bg.xpi) = 506149 +SHA256 (xpi/thunderbird-i18n-38.1.0/bn-BD.xpi) = 5f16873ea47e84fb01a263f7ab59a90188ad6c5b57ab13b90c925b4a8d0bf06a +SIZE (xpi/thunderbird-i18n-38.1.0/bn-BD.xpi) = 560648 +SHA256 (xpi/thunderbird-i18n-38.1.0/br.xpi) = c976d2fdb520e178df568a5824f4416b043f9ebbe436ddbfb81ef5b5f972d6e9 +SIZE (xpi/thunderbird-i18n-38.1.0/br.xpi) = 449788 +SHA256 (xpi/thunderbird-i18n-38.1.0/ca.xpi) = 82a2eef48fefe335f1f8d53d21861a45f7b73b4ad8b65c912f9820bf69273309 +SIZE (xpi/thunderbird-i18n-38.1.0/ca.xpi) = 450347 +SHA256 (xpi/thunderbird-i18n-38.1.0/cs.xpi) = a1e0b882b599705e1150a66139fee97dc009be2a8e64e6a7c2b1158373bfd3ca +SIZE (xpi/thunderbird-i18n-38.1.0/cs.xpi) = 448723 +SHA256 (xpi/thunderbird-i18n-38.1.0/cy.xpi) = 877cbe5d9dba3f90c2754788baaa137fb45bf9e2d071a50df69e970f341a6365 +SIZE (xpi/thunderbird-i18n-38.1.0/cy.xpi) = 434848 +SHA256 (xpi/thunderbird-i18n-38.1.0/da.xpi) = fad0fc825311a1b546eb117c8cc838f542485ff87cb71c5a656c449366a71526 +SIZE (xpi/thunderbird-i18n-38.1.0/da.xpi) = 425828 +SHA256 (xpi/thunderbird-i18n-38.1.0/de.xpi) = bc900b8f0f2db4c0e5527780db826789d61bf5b265ccf62033909fbb4f21e12e +SIZE (xpi/thunderbird-i18n-38.1.0/de.xpi) = 429876 +SHA256 (xpi/thunderbird-i18n-38.1.0/dsb.xpi) = 06ebda860118ac5833c6d8884a4e94bab7265622a48978c0e1b472055f784314 +SIZE (xpi/thunderbird-i18n-38.1.0/dsb.xpi) = 458486 +SHA256 (xpi/thunderbird-i18n-38.1.0/el.xpi) = d6df1e34d17723f2b52aecea1fab9af964bd936816f51e5dc0f335bbf59a9a6c +SIZE (xpi/thunderbird-i18n-38.1.0/el.xpi) = 493511 +SHA256 (xpi/thunderbird-i18n-38.1.0/en-GB.xpi) = 07e443159860c85c82f01dbc57e0c83904fa7788dd69fb234970ef0484afdc81 +SIZE (xpi/thunderbird-i18n-38.1.0/en-GB.xpi) = 416571 +SHA256 (xpi/thunderbird-i18n-38.1.0/en-US.xpi) = ef68841d061f743ab199e087ab45c12a2f1c4b481d2017f535bcadab2e8902ad +SIZE (xpi/thunderbird-i18n-38.1.0/en-US.xpi) = 416640 +SHA256 (xpi/thunderbird-i18n-38.1.0/es-AR.xpi) = c5b0d927e51ef06414cc14a64ab84d0d4e3b86f2833dd0bc1211a056507d425d +SIZE (xpi/thunderbird-i18n-38.1.0/es-AR.xpi) = 442640 +SHA256 (xpi/thunderbird-i18n-38.1.0/es-ES.xpi) = 79bb32e02108f6f8971c6504adc39ff45a202cb91b6e7daca286a3b0aaa6e1b0 +SIZE (xpi/thunderbird-i18n-38.1.0/es-ES.xpi) = 376066 +SHA256 (xpi/thunderbird-i18n-38.1.0/et.xpi) = 9fe401fa441232dd29fee49d26fcb65af34ccffc2666bf2fb09546a947d91e9d +SIZE (xpi/thunderbird-i18n-38.1.0/et.xpi) = 438262 +SHA256 (xpi/thunderbird-i18n-38.1.0/eu.xpi) = 0d54de9beec9e2f232a016d93d0b626bf8be86a1966ad6fb02c8d1cfe531a3f0 +SIZE (xpi/thunderbird-i18n-38.1.0/eu.xpi) = 434837 +SHA256 (xpi/thunderbird-i18n-38.1.0/fi.xpi) = cc7bf6325bf7d4c914cb7958687c776db8e2444cd969ac16e91d6a67be0ab729 +SIZE (xpi/thunderbird-i18n-38.1.0/fi.xpi) = 438889 +SHA256 (xpi/thunderbird-i18n-38.1.0/fr.xpi) = 56dbffbc5e1286f71eeb33961e209a6c6a9dd3916c4b3432733baf8f10c10e77 +SIZE (xpi/thunderbird-i18n-38.1.0/fr.xpi) = 448227 +SHA256 (xpi/thunderbird-i18n-38.1.0/fy-NL.xpi) = 00ec21c0bab139981ab81902051d7c59a5fa3a6ae7865e9613ebd95c0fe1bf87 +SIZE (xpi/thunderbird-i18n-38.1.0/fy-NL.xpi) = 442161 +SHA256 (xpi/thunderbird-i18n-38.1.0/ga-IE.xpi) = 76384620c71115c8ebb3afcc4b30de9de45d1230e44983b4bd3d1473bb9c144e +SIZE (xpi/thunderbird-i18n-38.1.0/ga-IE.xpi) = 457412 +SHA256 (xpi/thunderbird-i18n-38.1.0/gd.xpi) = 1da8565cafbb009abb0b0424fc15e0dc2bcf2c3048e14f7e1cf5e62bb5618835 +SIZE (xpi/thunderbird-i18n-38.1.0/gd.xpi) = 456317 +SHA256 (xpi/thunderbird-i18n-38.1.0/gl.xpi) = ff3d29d1a050b74e64e0a4450b65edb247a5eb36a1b8df6b57dc3851b1658fd3 +SIZE (xpi/thunderbird-i18n-38.1.0/gl.xpi) = 457860 +SHA256 (xpi/thunderbird-i18n-38.1.0/he.xpi) = aab3240dca233f9e6ec9077be40a3d0033d75ccbd196a9ccce2726261c9d4c41 +SIZE (xpi/thunderbird-i18n-38.1.0/he.xpi) = 485888 +SHA256 (xpi/thunderbird-i18n-38.1.0/hr.xpi) = f368ccd53d7d405c07149b351f56d391142b40e8774d9d7fa623ff3318428b6a +SIZE (xpi/thunderbird-i18n-38.1.0/hr.xpi) = 440419 +SHA256 (xpi/thunderbird-i18n-38.1.0/hsb.xpi) = f47a8a2ff662acef03541ead6caf3e900706ce348b7577cd656222e9dcc2c47a +SIZE (xpi/thunderbird-i18n-38.1.0/hsb.xpi) = 456454 +SHA256 (xpi/thunderbird-i18n-38.1.0/hu.xpi) = c8393cb2f5c8aab62fec71e53f19791e7ce4d3acc37814a4796e7b390a4e1fcf +SIZE (xpi/thunderbird-i18n-38.1.0/hu.xpi) = 457987 +SHA256 (xpi/thunderbird-i18n-38.1.0/hy-AM.xpi) = 56454db77528fd2bc02abd4f4ecde69adbe278cbe807842e3e92d709d5df526c +SIZE (xpi/thunderbird-i18n-38.1.0/hy-AM.xpi) = 500379 +SHA256 (xpi/thunderbird-i18n-38.1.0/id.xpi) = 913db42b7530f55a8f3836d4dd493cf45df86509c77cfc64aca28c4bf60c6321 +SIZE (xpi/thunderbird-i18n-38.1.0/id.xpi) = 483209 +SHA256 (xpi/thunderbird-i18n-38.1.0/is.xpi) = 0a0194046282ea36e3c48238f08bfa9ffff07531d473b9a800628b6fb22b4970 +SIZE (xpi/thunderbird-i18n-38.1.0/is.xpi) = 443008 +SHA256 (xpi/thunderbird-i18n-38.1.0/it.xpi) = 2b7659c9a0c57e608d05f64bff90b3f6e631ce089ed1135465e89a133482fca7 +SIZE (xpi/thunderbird-i18n-38.1.0/it.xpi) = 369023 +SHA256 (xpi/thunderbird-i18n-38.1.0/ja.xpi) = c790816d9a735d0ff3e3d82516b6c10076a94c6e278fdea05f04d52615984257 +SIZE (xpi/thunderbird-i18n-38.1.0/ja.xpi) = 492860 +SHA256 (xpi/thunderbird-i18n-38.1.0/ko.xpi) = 42a147ac06a0cd7995a78f014259464db2e51391aec4ea16a548e0d5f156d951 +SIZE (xpi/thunderbird-i18n-38.1.0/ko.xpi) = 454852 +SHA256 (xpi/thunderbird-i18n-38.1.0/lt.xpi) = bbdb182ae21c8b8da1175b5a936e8563250838e538004a45b7847d27a0b192ad +SIZE (xpi/thunderbird-i18n-38.1.0/lt.xpi) = 454571 +SHA256 (xpi/thunderbird-i18n-38.1.0/nb-NO.xpi) = e4b10c9cfd80c6f9b683880e454cc3dcd2e9eb01acdc0090e73b6c6b6b71a7d3 +SIZE (xpi/thunderbird-i18n-38.1.0/nb-NO.xpi) = 434340 +SHA256 (xpi/thunderbird-i18n-38.1.0/nl.xpi) = 032f473e1fce313d8d9cdcc49cdaf390711c266069c45df4dbee2e9c81e19b0d +SIZE (xpi/thunderbird-i18n-38.1.0/nl.xpi) = 435107 +SHA256 (xpi/thunderbird-i18n-38.1.0/nn-NO.xpi) = 361710679e3229b98aa5785b1cf36afa493e5ded84353a69574e4cbe7f5bbe29 +SIZE (xpi/thunderbird-i18n-38.1.0/nn-NO.xpi) = 436622 +SHA256 (xpi/thunderbird-i18n-38.1.0/pa-IN.xpi) = 53afb6a6ff09df13b97ffc88f95a527d860e751fd79e873a78be2e7bd977a15e +SIZE (xpi/thunderbird-i18n-38.1.0/pa-IN.xpi) = 530483 +SHA256 (xpi/thunderbird-i18n-38.1.0/pl.xpi) = d9c770408d6b8cc52df4113ccfeb339fc7e34ca45a62df49ee5f24e70a5e3503 +SIZE (xpi/thunderbird-i18n-38.1.0/pl.xpi) = 411508 +SHA256 (xpi/thunderbird-i18n-38.1.0/pt-BR.xpi) = 8160379e9ff6319939e7a9e2d37c0a7f66f436796f16c0c3ef8a70f1a2e17ea0 +SIZE (xpi/thunderbird-i18n-38.1.0/pt-BR.xpi) = 443773 +SHA256 (xpi/thunderbird-i18n-38.1.0/pt-PT.xpi) = d6354d745df58c48d15792c35aa8f4874d11bff0980df6b567de58f659357efe +SIZE (xpi/thunderbird-i18n-38.1.0/pt-PT.xpi) = 442063 +SHA256 (xpi/thunderbird-i18n-38.1.0/rm.xpi) = fbc4bb3603cd5927c98e82ca83e830bd0c0807cc63ee0215f60e1cea66cc4400 +SIZE (xpi/thunderbird-i18n-38.1.0/rm.xpi) = 442112 +SHA256 (xpi/thunderbird-i18n-38.1.0/ro.xpi) = 2e768e1a2e9ae04bafea1948c19b2b6e83f436f3a2841a94550f95bde7b30b42 +SIZE (xpi/thunderbird-i18n-38.1.0/ro.xpi) = 448347 +SHA256 (xpi/thunderbird-i18n-38.1.0/ru.xpi) = 85ab5454186b1a35c1268a8854b2407f1a260857a092de2cdc1c0fb84e278104 +SIZE (xpi/thunderbird-i18n-38.1.0/ru.xpi) = 437591 +SHA256 (xpi/thunderbird-i18n-38.1.0/si.xpi) = 8df4c4ca6dbb901f419b69b37da8b0762483e080513b6cebe0d4424444f6ce25 +SIZE (xpi/thunderbird-i18n-38.1.0/si.xpi) = 535362 +SHA256 (xpi/thunderbird-i18n-38.1.0/sk.xpi) = 8b34d932a49e56cc47b9dae57f7a515b40bcc1ae4efa50f1dd275855abb30659 +SIZE (xpi/thunderbird-i18n-38.1.0/sk.xpi) = 456606 +SHA256 (xpi/thunderbird-i18n-38.1.0/sl.xpi) = 7d2bbe2b04052165bde61b4e24f2c928460f914a57c8bec36d3496de67d5dd66 +SIZE (xpi/thunderbird-i18n-38.1.0/sl.xpi) = 437847 +SHA256 (xpi/thunderbird-i18n-38.1.0/sq.xpi) = 0e41b9ab3ec7853e3c8d19ad6380598ccc4d04884426f64be577a045f876cdd6 +SIZE (xpi/thunderbird-i18n-38.1.0/sq.xpi) = 446896 +SHA256 (xpi/thunderbird-i18n-38.1.0/sr.xpi) = c2d6d4a751580f2107aaeec7f23584ca7a8803cd15289fbf863d124a1801ffee +SIZE (xpi/thunderbird-i18n-38.1.0/sr.xpi) = 543336 +SHA256 (xpi/thunderbird-i18n-38.1.0/sv-SE.xpi) = 59cfe9b9ee411b92e288d0050ba3baddd5bc7bb779ed4fbff7681ae252053133 +SIZE (xpi/thunderbird-i18n-38.1.0/sv-SE.xpi) = 439633 +SHA256 (xpi/thunderbird-i18n-38.1.0/ta-LK.xpi) = 891b12e9f7722c570189c0c47a814e96ac3ef9e16b2d50625a4766085649d16f +SIZE (xpi/thunderbird-i18n-38.1.0/ta-LK.xpi) = 558759 +SHA256 (xpi/thunderbird-i18n-38.1.0/tr.xpi) = 5b42a203b0a6938a9967ce982fb800bd4db8ef0d2def1b9966e1352e843729fc +SIZE (xpi/thunderbird-i18n-38.1.0/tr.xpi) = 447799 +SHA256 (xpi/thunderbird-i18n-38.1.0/uk.xpi) = e32214709147900c4336af83dce5445614b72d4059dad67b6f703a0853ec2ad1 +SIZE (xpi/thunderbird-i18n-38.1.0/uk.xpi) = 509621 +SHA256 (xpi/thunderbird-i18n-38.1.0/vi.xpi) = 6d9b056f1d13e7dd95b79780c65e202c5c428f87e206370a5264644579a41626 +SIZE (xpi/thunderbird-i18n-38.1.0/vi.xpi) = 519864 +SHA256 (xpi/thunderbird-i18n-38.1.0/zh-CN.xpi) = 9d00bbc2f01c6974877923f9d770e16112b5e859788a728a7244052361f1ea7b +SIZE (xpi/thunderbird-i18n-38.1.0/zh-CN.xpi) = 466411 +SHA256 (xpi/thunderbird-i18n-38.1.0/zh-TW.xpi) = 65dd33db3a18a4f8eeb54b953650a3a592a8821765e44888849f15531bcf88ca +SIZE (xpi/thunderbird-i18n-38.1.0/zh-TW.xpi) = 466660 Index: branches/2015Q3/multimedia/gmp-api/Makefile =================================================================== --- branches/2015Q3/multimedia/gmp-api/Makefile (revision 392766) +++ branches/2015Q3/multimedia/gmp-api/Makefile (revision 392767) @@ -1,24 +1,23 @@ # $FreeBSD$ PORTNAME= gmp-api DISTVERSIONPREFIX= Firefox -DISTVERSION= 38 # tracking www/firefox -PORTREVISION= 1 +DISTVERSION= 39 # tracking www/firefox CATEGORIES= multimedia MAINTAINER= gecko@FreeBSD.org COMMENT= Gecko Media Plugins API from mozilla-release LICENSE= APACHE20 USE_GITHUB= yes GH_ACCOUNT= mozilla NO_BUILD= yes NO_ARCH= yes do-install: ${MKDIR} ${STAGEDIR}${PREFIX}/include/${PORTNAME} ${INSTALL_DATA} ${WRKSRC}/*.h ${STAGEDIR}${PREFIX}/include/${PORTNAME} .include Index: branches/2015Q3/multimedia/gmp-api/distinfo =================================================================== --- branches/2015Q3/multimedia/gmp-api/distinfo (revision 392766) +++ branches/2015Q3/multimedia/gmp-api/distinfo (revision 392767) @@ -1,2 +1,2 @@ -SHA256 (mozilla-gmp-api-Firefox38_GH0.tar.gz) = 6b156afe850c0d6faf0492ca5feeff4358e50ddc5ce3022ddcc6905a5bd21c80 -SIZE (mozilla-gmp-api-Firefox38_GH0.tar.gz) = 16209 +SHA256 (mozilla-gmp-api-Firefox39_GH0.tar.gz) = ecb461af06f4d8f1c16330e78e73775f5656767ced77ac2b5e4bb9413ca86ec4 +SIZE (mozilla-gmp-api-Firefox39_GH0.tar.gz) = 16363 Index: branches/2015Q3/multimedia/openh264/Makefile =================================================================== --- branches/2015Q3/multimedia/openh264/Makefile (revision 392766) +++ branches/2015Q3/multimedia/openh264/Makefile (revision 392767) @@ -1,72 +1,72 @@ # $FreeBSD$ PORTNAME= openh264 PORTVERSION= 1.4.0 DISTVERSIONPREFIX=v -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= multimedia MAINTAINER= gecko@FreeBSD.org COMMENT= Cisco implementation of H.264 codec LICENSE= BSD2CLAUSE USE_GITHUB= yes GH_ACCOUNT= cisco USES= cpe gmake CPE_VENDOR= cisco USE_LDCONFIG= yes MAKE_ARGS= OS=freebsd ARCH="${ARCH:S/amd64/x86_64/}" \ CFLAGS_OPT="" CFLAGS_DEBUG="" ALL_TARGET= all OPTIONS_DEFINE= DEBUG PLUGINS TEST OPTIONS_DEFAULT=PLUGINS OPTIONS_SUB= yes DEBUG_MAKE_ARGS=BUILDTYPE=Debug PLUGINS_BUILD_DEPENDS=gmp-api>=34.0:${PORTSDIR}/multimedia/gmp-api # gmp-api<36.0:${PORTSDIR}/multimedia/gmp-api PLUGINS_CFLAGS= -I${LOCALBASE}/include/gmp-api PLUGINS_MAKE_ARGS=HAVE_GMP_API=Yes PLUGINS_ALL_TARGET=plugin PLUGINS_USES= webplugin:gecko WEBPLUGIN_NAME= gmp-gmp${PORTNAME} WEBPLUGIN_FILES=gmp${PORTNAME}.info libgmp${PORTNAME}.so SUB_FILES+= gmp${PORTNAME}.js SUB_LIST+= PORTVERSION=${PORTVERSION} WEBPLUGIN_DIR="${WEBPLUGIN_DIR}" TEST_BUILD_DEPENDS=googletest>=1.6.0:${PORTSDIR}/devel/googletest TEST_CFLAGS= -I${LOCALBASE}/include TEST_MAKE_ARGS= HAVE_GTEST=Yes TEST_ALL_TARGET=test .include .if ! ${PORT_OPTIONS:MDEBUG} . if ${ARCH} == amd64 || ${ARCH} == arm || ${ARCH} == i386 BUILD_DEPENDS+= nasm:${PORTSDIR}/devel/nasm . endif .endif post-patch: ${REINPLACE_CMD} -e '/gtest-targets\.mk/d' \ -e '/pkgconfig/s/lib/libdata/' \ ${WRKSRC}/Makefile ${REINPLACE_CMD} -e 's,@prefix@,${PREFIX},' \ ${WRKSRC}/${PORTNAME}.pc.in pre-build: ${LN} -sf ${LOCALBASE}/lib/libgtest.so ${WRKSRC}/libgtest.a post-install: ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/lib${PORTNAME}.so.0 .if ${PORT_OPTIONS:MPLUGINS} ${MKDIR} ${STAGEDIR}${WEBPLUGIN_DIR} ${INSTALL_DATA} ${WRKSRC}/gmp${PORTNAME}.info ${STAGEDIR}${WEBPLUGIN_DIR} ${INSTALL_LIB} ${WRKSRC}/libgmp${PORTNAME}.so ${STAGEDIR}${WEBPLUGIN_DIR} ${INSTALL_DATA} ${WRKDIR}/gmp${PORTNAME}.js ${STAGEDIR}${WEBPLUGIN_DIR} .endif .include Index: branches/2015Q3/security/ca_root_nss/Makefile =================================================================== --- branches/2015Q3/security/ca_root_nss/Makefile (revision 392766) +++ branches/2015Q3/security/ca_root_nss/Makefile (revision 392767) @@ -1,72 +1,71 @@ # $FreeBSD$ PORTNAME= ca_root_nss PORTVERSION= ${VERSION_NSS} -PORTREVISION= 1 CATEGORIES= security MASTER_SITES= MOZILLA/security/nss/releases/${DISTNAME:tu:C/[-.]/_/g}_RTM/src DISTNAME= nss-${VERSION_NSS}${NSS_SUFFIX} MAINTAINER= gecko@FreeBSD.org COMMENT= Root certificate bundle from the Mozilla Project LICENSE= MPL OPTIONS_DEFINE= ETCSYMLINK OPTIONS_DEFAULT= ETCSYMLINK OPTIONS_SUB= yes ETCSYMLINK_DESC= Add symlink to /etc/ssl/cert.pem -ETCSYMLINK_CONFLICTS= ca-roots-[0-9]* +ETCSYMLINK_CONFLICTS_INSTALL= ca-roots-[0-9]* USES= perl5 USE_PERL5= build NO_ARCH= yes NO_WRKSUBDIR= yes CERTDIR?= share/certs PLIST_SUB+= CERTDIR=${CERTDIR} # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # !!! These versions are intended to track security/nss. !!! # !!! Please DO NOT submit patches for new version until it has !!! # !!! been committed there first. !!! # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -VERSION_NSS= 3.19.1 +VERSION_NSS= 3.19.2 #NSS_SUFFIX= .with.ckbi.1.98 CERTDATA_TXT_PATH= nss-${VERSION_NSS}/nss/lib/ckfw/builtins/certdata.txt BUNDLE_PROCESSOR= MAca-bundle.pl SUB_FILES= MAca-bundle.pl pkg-message SUB_LIST= VERSION_NSS=${VERSION_NSS} .include do-extract: @${MKDIR} ${WRKDIR} @${TAR} -C ${WRKDIR} -xf ${DISTDIR}/nss-${VERSION_NSS}${NSS_SUFFIX}${EXTRACT_SUFX} \ ${CERTDATA_TXT_PATH} @${CP} ${WRKDIR}/${CERTDATA_TXT_PATH} ${WRKDIR} @${RM} -rf ${WRKDIR}/nss-${VERSION_NSS} do-build: apply-slist @${PERL} ${WRKDIR}/${BUNDLE_PROCESSOR} \ < ${WRKDIR}/certdata.txt > \ ${WRKDIR}/ca-root-nss.crt do-install: ${MKDIR} ${STAGEDIR}${PREFIX}/${CERTDIR} ${INSTALL_DATA} ${WRKDIR}/ca-root-nss.crt ${STAGEDIR}${PREFIX}/${CERTDIR} post-install: .if ${PORT_OPTIONS:METCSYMLINK} ${MKDIR} ${STAGEDIR}/etc/ssl ${LN} -sf ${PREFIX}/${CERTDIR}/ca-root-nss.crt ${STAGEDIR}/etc/ssl/cert.pem .endif ${MKDIR} ${STAGEDIR}${PREFIX}/etc/ssl ${LN} -sf ${PREFIX}/${CERTDIR}/ca-root-nss.crt ${STAGEDIR}${PREFIX}/etc/ssl/cert.pem.sample ${MKDIR} ${STAGEDIR}${PREFIX}/openssl ${LN} -sf ${PREFIX}/${CERTDIR}/ca-root-nss.crt ${STAGEDIR}${PREFIX}/openssl/cert.pem.sample .include Index: branches/2015Q3/security/ca_root_nss/distinfo =================================================================== --- branches/2015Q3/security/ca_root_nss/distinfo (revision 392766) +++ branches/2015Q3/security/ca_root_nss/distinfo (revision 392767) @@ -1,2 +1,2 @@ -SHA256 (nss-3.19.1.tar.gz) = b7be709551ec13206d8e3e8c065b894fa981c11573115e9478fa051029c52fff -SIZE (nss-3.19.1.tar.gz) = 6953537 +SHA256 (nss-3.19.2.tar.gz) = 1306663e8f61d8449ad8cbcffab743a604dcd9f6f34232c210847c51dce2c9ae +SIZE (nss-3.19.2.tar.gz) = 6953657 Index: branches/2015Q3/security/nss/Makefile =================================================================== --- branches/2015Q3/security/nss/Makefile (revision 392766) +++ branches/2015Q3/security/nss/Makefile (revision 392767) @@ -1,100 +1,100 @@ # Created by: Maxim Sobolev # $FreeBSD$ PORTNAME= nss -PORTVERSION= 3.19.1 +PORTVERSION= 3.19.2 #DISTVERSIONSUFFIX= .with.ckbi.1.93 CATEGORIES= security MASTER_SITES= MOZILLA/security/${PORTNAME}/releases/${DISTNAME:tu:C/[-.]/_/g}_RTM/src MAINTAINER= gecko@FreeBSD.org COMMENT= Libraries to support development of security-enabled applications BUILD_DEPENDS= zip:${PORTSDIR}/archivers/zip \ nspr>=4.10.5:${PORTSDIR}/devel/nspr \ sqlite3>=3.7.15:${PORTSDIR}/databases/sqlite3 LIB_DEPENDS= libnspr4.so:${PORTSDIR}/devel/nspr \ libsqlite3.so:${PORTSDIR}/databases/sqlite3 WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}/nss MAKE_JOBS_UNSAFE= yes USE_LDCONFIG= ${PREFIX}/lib/nss USES= cpe gmake perl5 CPE_VENDOR= mozilla CPE_PRODUCT= network_security_services USE_PERL5= build MAKE_ENV= LIBRARY_PATH="${LOCALBASE}/lib" \ SQLITE_INCLUDE_DIR="${LOCALBASE}/include" \ NSS_USE_SYSTEM_SQLITE=1 CFLAGS+= -I${LOCALBASE}/include/nspr SUB_FILES= nss-config nss.pc SUB_LIST= PORTVERSION=${PORTVERSION} DIST= ${WRKSRC:H}/dist EXTRACT_AFTER_ARGS=--exclude */lib/zlib --exclude */lib/dbm --exclude */lib/sqlite INSTALL_BINS= certcgi certutil checkcert cmsutil crlutil derdump makepqg \ mangle modutil ocspclnt oidcalc p7content p7env p7sign \ p7verify pk12util rsaperf shlibsign signtool signver \ ssltap strsclnt symkeyutil vfychain vfyserv OPTIONS_DEFINE= DEBUG .include .if ! ${PORT_OPTIONS:MDEBUG} MAKE_ENV+= BUILD_OPT=1 BINS= ${DIST}/${OPSYS}${OSREL}_OPT.OBJ .else BINS= ${DIST}/${OPSYS}${OSREL}_DBG.OBJ .endif .if ${ARCH} == amd64 USE_BINUTILS= # intel-gcm.s CFLAGS+= -B${LOCALBASE}/bin .endif check regression-test test: cd ${WRKSRC}/tests; \ ${SETENV} PATH="${BINS}/bin:${PATH}" \ LD_LIBRARY_PATH="${BINS}/lib" \ ${MAKE_ENV} \ ./all.sh @if ${GREP} -Fh '>Failed<' \ ${WRKSRC:H}/tests_results/security/*/results.html; then \ echo "Some tests have failed. Let ${MAINTAINER} know."; \ exit 1; \ else \ echo "All tests succeeded. Good news."; \ fi post-patch: @${REINPLACE_CMD} '/NSS_DEFAULT_SYSTEM/s,/etc,${PREFIX}&,' \ ${WRKSRC}/lib/sysinit/nsssysinit.c @cd ${WRKSRC} && \ ${FIND} . -name "*.c" -o -name "*.h" | \ ${XARGS} ${REINPLACE_CMD} -e 's|"nspr.h"||' ${FIND} ${WRKSRC}/tests -name '*.sh' | ${XARGS} ${GREP} -l -F '/bin/bash' | \ ${XARGS} ${REINPLACE_CMD} -e 's|#! */bin/bash|#!${SH}|' do-install: ${MKDIR} ${STAGEDIR}${PREFIX}/include/nss/nss ${STAGEDIR}${PREFIX}/lib/nss ${FIND} ${DIST}/public/nss -type l \ -exec ${INSTALL_DATA} {} ${STAGEDIR}${PREFIX}/include/nss/nss \; ${INSTALL_LIB} ${BINS}/lib/*.so.1 \ ${STAGEDIR}${PREFIX}/lib/nss ${INSTALL_DATA} ${BINS}/lib/libcrmf.a \ ${STAGEDIR}${PREFIX}/lib/nss .for bin in ${INSTALL_BINS} ${INSTALL_PROGRAM} ${BINS}/bin/${bin} \ ${STAGEDIR}${PREFIX}/bin .endfor cd ${BINS}/lib && \ ${TAR} -cf - *.so | ${TAR} --unlink -C ${STAGEDIR}${PREFIX}/lib/nss -xf - ${INSTALL_SCRIPT} ${WRKDIR}/nss-config ${STAGEDIR}${PREFIX}/bin ${INSTALL_DATA} ${WRKDIR}/nss.pc ${STAGEDIR}${PREFIX}/libdata/pkgconfig .include Index: branches/2015Q3/security/nss/distinfo =================================================================== --- branches/2015Q3/security/nss/distinfo (revision 392766) +++ branches/2015Q3/security/nss/distinfo (revision 392767) @@ -1,2 +1,2 @@ -SHA256 (nss-3.19.1.tar.gz) = b7be709551ec13206d8e3e8c065b894fa981c11573115e9478fa051029c52fff -SIZE (nss-3.19.1.tar.gz) = 6953537 +SHA256 (nss-3.19.2.tar.gz) = 1306663e8f61d8449ad8cbcffab743a604dcd9f6f34232c210847c51dce2c9ae +SIZE (nss-3.19.2.tar.gz) = 6953657 Index: branches/2015Q3/www/firefox/Makefile =================================================================== --- branches/2015Q3/www/firefox/Makefile (revision 392766) +++ branches/2015Q3/www/firefox/Makefile (revision 392767) @@ -1,94 +1,94 @@ # Created by: Alan Eldridge # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 38.0.6 +DISTVERSION= 39.0 DISTVERSIONSUFFIX=.source PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build6/source MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla BUILD_DEPENDS= nspr>=4.10.8:${PORTSDIR}/devel/nspr \ - nss>=3.18.1:${PORTSDIR}/security/nss \ + nss>=3.19.2:${PORTSDIR}/security/nss \ libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \ cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \ soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \ - harfbuzz>=0.9.25:${PORTSDIR}/print/harfbuzz \ + harfbuzz>=0.9.34:${PORTSDIR}/print/harfbuzz \ graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \ - libvorbis>=1.3.4:${PORTSDIR}/audio/libvorbis \ + libvorbis>=1.3.5:${PORTSDIR}/audio/libvorbis \ libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \ sqlite3>=3.8.9:${PORTSDIR}/databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \ v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \ autoconf-2.13:${PORTSDIR}/devel/autoconf213 \ zip:${PORTSDIR}/archivers/zip \ unzip:${PORTSDIR}/archivers/unzip # opus>=1.1:${PORTSDIR}/audio/opus \ LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l USE_GECKO= gecko -CONFLICTS= firefox-esr-31.* firefox-esr-24.* firefox-esr-17.* +CONFLICTS_INSTALL= firefox-esr-31.* firefox-esr-24.* firefox-esr-17.* MOZ_PKGCONFIG_FILES= # empty USE_MOZILLA= -opus MOZILLA_NAME= Firefox USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl USES= dos2unix tar:bzip2 DOS2UNIX_FILES= media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp FIREFOX_ICON= ${MOZILLA}.png FIREFOX_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png MOZ_OPTIONS= --program-transform-name='s/firefox/${MOZILLA}/' \ --enable-application=browser \ --enable-official-branding OPTIONS_DEFAULT= GTK2 OPTIONS_SINGLE+= TOOLKIT OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3 .include "${.CURDIR}/../../www/firefox/Makefile.options" .include WRKSRC:= ${WRKDIR}/mozilla-release .if ${PORT_OPTIONS:MALSA} RUN_DEPENDS+= alsa-lib>=1.0.27.2_1:${PORTSDIR}/audio/alsa-lib .endif .if ${PORT_OPTIONS:MGSTREAMER} RUN_DEPENDS+= gstreamer1-libav>=1.2.4_1:${PORTSDIR}/multimedia/gstreamer1-libav .endif .if ${PORT_OPTIONS:MGTK3} BUILD_DEPENDS+= gtk3>=3.14.6:${PORTSDIR}/x11-toolkits/gtk30 .endif post-extract: @${SED} -e 's|@FIREFOX_ICON@|${FIREFOX_ICON}|' -e 's|@MOZILLA@|${MOZILLA}|' \ -e 's|@MOZILLA_NAME@|${MOZILLA_NAME}|' \ <${FILESDIR}/firefox.desktop.in >${WRKDIR}/${MOZILLA}.desktop post-patch: @${REINPLACE_CMD} -e '/MOZPNG/s/=[0-9]*/=10511/' \ ${WRKSRC}/configure.in @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/browser/app/nsBrowserApp.cpp pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${WRKSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) post-install: ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps ${INSTALL_DATA} ${WRKDIR}/${MOZILLA}.desktop ${STAGEDIR}${PREFIX}/share/applications/ ${LN} -sf ${FIREFOX_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${FIREFOX_ICON} .include Index: branches/2015Q3/www/firefox/distinfo =================================================================== --- branches/2015Q3/www/firefox/distinfo (revision 392766) +++ branches/2015Q3/www/firefox/distinfo (revision 392767) @@ -1,2 +1,2 @@ -SHA256 (firefox-38.0.6.source.tar.bz2) = 379a83c45c606aa046bf543a95f806024089e8794ee3001efd1ba2f7067e2c4d -SIZE (firefox-38.0.6.source.tar.bz2) = 180322743 +SHA256 (firefox-39.0.source.tar.bz2) = 7e25014deb926df9220c3ab40ac6816c13a04c4cf7bd89b08fc1743307df1096 +SIZE (firefox-39.0.source.tar.bz2) = 182881881 Index: branches/2015Q3/www/firefox/files/patch-bug1144643 =================================================================== --- branches/2015Q3/www/firefox/files/patch-bug1144643 (revision 392766) +++ branches/2015Q3/www/firefox/files/patch-bug1144643 (nonexistent) @@ -1,33 +0,0 @@ -commit a0ccc19 -Author: Martin Stransky -Date: Wed Mar 18 07:14:00 2015 -0400 - - Bug 1144643 - Render tooltips as transparent on Gtk3. r=karlt - - --HG-- - extra : rebase_source : 23085532b27350ca71cbe18db071628388003f33 ---- - widget/gtk/nsNativeThemeGTK.cpp | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp -index e5e1867..26d13a5 100644 ---- widget/gtk/nsNativeThemeGTK.cpp -+++ widget/gtk/nsNativeThemeGTK.cpp -@@ -1528,9 +1528,15 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType) - case NS_THEME_MENUPOPUP: - case NS_THEME_WINDOW: - case NS_THEME_DIALOG: -- // Tooltips use gtk_paint_flat_box(). -+ return eOpaque; -+ // Tooltips use gtk_paint_flat_box() on Gtk2 -+ // but are shaped on Gtk3 - case NS_THEME_TOOLTIP: -+#if (MOZ_WIDGET_GTK == 2) - return eOpaque; -+#else -+ return eTransparent; -+#endif - } - - return eUnknownTransparency; Property changes on: branches/2015Q3/www/firefox/files/patch-bug1144643 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox/files/patch-bug1143686 =================================================================== --- branches/2015Q3/www/firefox/files/patch-bug1143686 (revision 392766) +++ branches/2015Q3/www/firefox/files/patch-bug1143686 (nonexistent) @@ -1,46 +0,0 @@ -commit e50e738 -Author: Martin Stransky -Date: Mon Mar 16 08:00:00 2015 -0400 - - Bug 1143686 - Gtk3 - Render scrollbar thumb with margin. r=karlt ---- - widget/gtk/gtk3drawing.c | 14 ++++++++++---- - 1 file changed, 10 insertions(+), 4 deletions(-) - -diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c -index 17f46ab..08a58d6 100644 ---- widget/gtk/gtk3drawing.c -+++ widget/gtk/gtk3drawing.c -@@ -1230,6 +1230,7 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, - GtkStyleContext* style; - GtkScrollbar *scrollbar; - GtkAdjustment *adj; -+ GtkBorder margin; - - ensure_scrollbar_widget(); - -@@ -1239,15 +1240,20 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, - scrollbar = GTK_SCROLLBAR(gVertScrollbarWidget); - - gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction); -- -+ - style = gtk_widget_get_style_context(GTK_WIDGET(scrollbar)); - gtk_style_context_save(style); -- -+ - gtk_style_context_add_class(style, GTK_STYLE_CLASS_SLIDER); - gtk_style_context_set_state(style, state_flags); - -- gtk_render_slider(style, cr, rect->x, rect->y, -- rect->width, rect->height, -+ gtk_style_context_get_margin (style, state_flags, &margin); -+ -+ gtk_render_slider(style, cr, -+ rect->x + margin.left, -+ rect->y + margin.top, -+ rect->width - margin.left - margin.right, -+ rect->height - margin.top - margin.bottom, - (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) ? - GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL); - Property changes on: branches/2015Q3/www/firefox/files/patch-bug1143686 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox/files/patch-bug1138845 =================================================================== --- branches/2015Q3/www/firefox/files/patch-bug1138845 (revision 392766) +++ branches/2015Q3/www/firefox/files/patch-bug1138845 (nonexistent) @@ -1,134 +0,0 @@ -commit 4b5b332 -Author: Mike Hommey -Date: Tue Mar 3 18:41:13 2015 +0900 - - Bug 1138845 - Don't require atk-bridge for gtk+3 builds. r=tbsaunde ---- - accessible/atk/Platform.cpp | 29 +++++++++++++++++++---------- - config/system-headers | 1 - - configure.in | 2 +- - 3 files changed, 20 insertions(+), 12 deletions(-) - -diff --git accessible/atk/Platform.cpp accessible/atk/Platform.cpp -index a2afd96..2ed5e0b 100644 ---- accessible/atk/Platform.cpp -+++ accessible/atk/Platform.cpp -@@ -18,8 +18,9 @@ - #include - #endif - #include -+ - #if (MOZ_WIDGET_GTK == 3) --#include -+extern "C" __attribute__((weak,visibility("default"))) int atk_bridge_adaptor_init(int*, char **[]); - #endif - - using namespace mozilla; -@@ -46,7 +47,6 @@ static gulong sToplevel_hide_hook = 0; - - GType g_atk_hyperlink_impl_type = G_TYPE_INVALID; - --#if (MOZ_WIDGET_GTK == 2) - struct GnomeAccessibilityModule - { - const char *libName; -@@ -67,11 +67,13 @@ static GnomeAccessibilityModule sAtkBridge = { - "gnome_accessibility_module_shutdown", nullptr - }; - -+#if (MOZ_WIDGET_GTK == 2) - static GnomeAccessibilityModule sGail = { - "libgail.so", nullptr, - "gnome_accessibility_module_init", nullptr, - "gnome_accessibility_module_shutdown", nullptr - }; -+#endif - - static nsresult - LoadGtkModule(GnomeAccessibilityModule& aModule) -@@ -98,7 +100,11 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) - else - subLen = loc2 - loc1; - nsAutoCString sub(Substring(libPath, loc1, subLen)); -+#if (MOZ_WIDGET_GTK == 2) - sub.AppendLiteral("/gtk-2.0/modules/"); -+#else -+ sub.AppendLiteral("/gtk-3.0/modules/"); -+#endif - sub.Append(aModule.libName); - aModule.lib = PR_LoadLibrary(sub.get()); - if (aModule.lib) -@@ -123,7 +129,6 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) - } - return NS_OK; - } --#endif // (MOZ_WIDGET_GTK == 2) - - void - a11y::PlatformInit() -@@ -175,14 +180,17 @@ a11y::PlatformInit() - - // Init atk-bridge now - PR_SetEnv("NO_AT_BRIDGE=0"); --#if (MOZ_WIDGET_GTK == 2) -- rv = LoadGtkModule(sAtkBridge); -- if (NS_SUCCEEDED(rv)) { -- (*sAtkBridge.init)(); -- } --#else -- atk_bridge_adaptor_init(nullptr, nullptr); -+#if (MOZ_WIDGET_GTK == 3) -+ if (atk_bridge_adaptor_init) { -+ atk_bridge_adaptor_init(nullptr, nullptr); -+ } else - #endif -+ { -+ nsresult rv = LoadGtkModule(sAtkBridge); -+ if (NS_SUCCEEDED(rv)) { -+ (*sAtkBridge.init)(); -+ } -+ } - - if (!sToplevel_event_hook_added) { - sToplevel_event_hook_added = true; -@@ -210,7 +218,6 @@ a11y::PlatformShutdown() - sToplevel_hide_hook); - } - --#if (MOZ_WIDGET_GTK == 2) - if (sAtkBridge.lib) { - // Do not shutdown/unload atk-bridge, - // an exit function registered will take care of it -@@ -221,6 +228,7 @@ a11y::PlatformShutdown() - sAtkBridge.init = nullptr; - sAtkBridge.shutdown = nullptr; - } -+#if (MOZ_WIDGET_GTK == 2) - if (sGail.lib) { - // Do not shutdown gail because - // 1) Maybe it's not init-ed by us. e.g. GtkEmbed -diff --git config/system-headers config/system-headers -index 2c94a7d..cf01775 100644 ---- config/system-headers -+++ config/system-headers -@@ -189,7 +189,6 @@ asm/signal.h - ASRegistry.h - assert.h - atk/atk.h --atk-bridge.h - atlcom.h - atlconv.h - atlctl.cpp -diff --git configure.in configure.in -index 0bd1eb7..f3b3365 100644 ---- configure.in -+++ configure.in -@@ -4408,7 +4408,7 @@ fi - - if test "$COMPILE_ENVIRONMENT"; then - if test "$MOZ_ENABLE_GTK3"; then -- PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 atk-bridge-2.0 $GDK_PACKAGES) -+ PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 $GDK_PACKAGES) - MOZ_GTK3_CFLAGS="-I${_topsrcdir}/widget/gtk/compat-gtk3 $MOZ_GTK3_CFLAGS" - dnl Contrary to MOZ_GTK2_LIBS, MOZ_GTK3_LIBS needs to be literally added to TK_LIBS instead - dnl of a make reference because of how TK_LIBS is mangled in toolkit/library/moz.build Property changes on: branches/2015Q3/www/firefox/files/patch-bug1138845 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox/files/patch-bug1013882 =================================================================== --- branches/2015Q3/www/firefox/files/patch-bug1013882 (revision 392766) +++ branches/2015Q3/www/firefox/files/patch-bug1013882 (revision 392767) @@ -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 +@@ -660,7 +660,7 @@ + @RESPATH@/components/EngineeringModeAPI.js + @RESPATH@/components/EngineeringModeService.js -#ifdef MOZ_DEBUG +#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG) - @BINPATH@/components/TestInterfaceJS.js - @BINPATH@/components/TestInterfaceJS.manifest + @RESPATH@/components/TestInterfaceJS.js + @RESPATH@/components/TestInterfaceJS.manifest #endif diff --git browser/installer/package-manifest.in browser/installer/package-manifest.in index b509fd4..195345c 100644 --- browser/installer/package-manifest.in +++ browser/installer/package-manifest.in @@ -608,7 +608,7 @@ @RESPATH@/components/MozKeyboard.js @RESPATH@/components/InputMethod.manifest -#ifdef MOZ_DEBUG +#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG) @RESPATH@/components/TestInterfaceJS.js @RESPATH@/components/TestInterfaceJS.manifest #endif diff --git mobile/android/installer/Makefile.in mobile/android/installer/Makefile.in index 96dceab..3528ad6 100644 --- mobile/android/installer/Makefile.in +++ mobile/android/installer/Makefile.in @@ -41,6 +41,10 @@ BINPATH = bin endif DEFINES += -DBINPATH=$(BINPATH) +ifdef MOZ_DEBUG +DEFINES += -DMOZ_DEBUG=1 +endif + ifdef ENABLE_MARIONETTE DEFINES += -DENABLE_MARIONETTE=1 endif diff --git mobile/android/installer/package-manifest.in mobile/android/installer/package-manifest.in index 994580b..cf142df 100644 --- mobile/android/installer/package-manifest.in +++ mobile/android/installer/package-manifest.in @@ -440,7 +440,7 @@ @BINPATH@/components/dom_webspeechsynth.xpt #endif -#ifdef MOZ_DEBUG +#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG) @BINPATH@/components/TestInterfaceJS.js @BINPATH@/components/TestInterfaceJS.manifest #endif Index: branches/2015Q3/www/firefox/files/patch-bug1073117 =================================================================== --- branches/2015Q3/www/firefox/files/patch-bug1073117 (revision 392766) +++ branches/2015Q3/www/firefox/files/patch-bug1073117 (revision 392767) @@ -1,877 +1,383 @@ -diff --git widget/gtk/gtk2drawing.c widget/gtk/gtk2drawing.c -index 34f22af..1b950ab 100644 ---- widget/gtk/gtk2drawing.c -+++ widget/gtk/gtk2drawing.c -@@ -831,7 +831,7 @@ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) - return MOZ_GTK_SUCCESS; - } - --gint -+static gint - moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, - gint* focus_width, gint* focus_pad) - { -@@ -928,7 +928,7 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) - return MOZ_GTK_SUCCESS; - } - --gint -+static gint - moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) - { - static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; +commit 27ead4e +Author: Martin Stransky +Date: Thu Apr 30 01:31:00 2015 -0400 + + Bug 1073117 - Add support for has_tab_gap notebook style. r=karlt + + --HG-- + extra : rebase_source : 1755623794079eb9fa8b4c7a17bd07f6f10a0dfe +--- + widget/gtk/gtk3drawing.c | 289 +++++++++++++++++++++------------------- + widget/gtk/nsNativeThemeGTK.cpp | 2 + + 2 files changed, 153 insertions(+), 138 deletions(-) + diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c -index 08a58d6..7fef6fa 100644 +index 7fef6fa..a691316 100644 --- widget/gtk/gtk3drawing.c +++ widget/gtk/gtk3drawing.c @@ -65,6 +65,7 @@ static GtkWidget* gScrolledWindowWidget; static style_prop_t style_prop_func; static gboolean have_arrow_scaling; static gboolean checkbox_check_state; +static gboolean notebook_has_tab_gap; static gboolean is_initialized; #define ARROW_UP 0 @@ -725,6 +726,14 @@ moz_gtk_init() else checkbox_check_state = GTK_STATE_FLAG_ACTIVE; + if(!gtk_check_version(3, 12, 0)) { + ensure_tab_widget(); + gtk_widget_style_get(gTabWidget, "has-tab-gap", ¬ebook_has_tab_gap, NULL); + } + else { + notebook_has_tab_gap = TRUE; + } + /* Add style property to GtkEntry. * Adding the style property to the normal GtkEntry class means that it * will work without issues inside GtkComboBox and for Spinbuttons. */ -@@ -762,37 +771,17 @@ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing) - gint - moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) - { -- gboolean interior_focus; -- gint focus_width = 0; -+ GtkBorder border; -+ GtkBorder padding; -+ GtkStyleContext *style; - - ensure_entry_widget(); -- gtk_widget_style_get(gEntryWidget, -- "interior-focus", &interior_focus, -- "focus-line-width", &focus_width, -- NULL); -- if (interior_focus) { -- GtkBorder border; -- GtkStyleContext *style = gtk_widget_get_style_context(gEntryWidget); -- gtk_style_context_get_border(style, 0, &border); -- *focus_h_width = border.left + focus_width; -- *focus_v_width = border.top + focus_width; -- } else { -- *focus_h_width = focus_width; -- *focus_v_width = focus_width; -- } -- return MOZ_GTK_SUCCESS; --} -- --gint --moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, -- gint* focus_width, gint* focus_pad) --{ -- gtk_widget_style_get (widget, -- "interior-focus", interior_focus, -- "focus-line-width", focus_width, -- "focus-padding", focus_pad, -- NULL); -+ style = gtk_widget_get_style_context(gEntryWidget); - -+ gtk_style_context_get_border(style, 0, &border); -+ gtk_style_context_get_padding(style, 0, &padding); -+ *focus_h_width = border.left + padding.left; -+ *focus_v_width = border.top + padding.top; - return MOZ_GTK_SUCCESS; - } - -@@ -880,24 +860,6 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) - return MOZ_GTK_SUCCESS; - } - --gint --moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) --{ -- static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; -- GtkBorder *tmp_border; -- -- gtk_widget_style_get (widget, "inner-border", &tmp_border, NULL); -- -- if (tmp_border) { -- *inner_border = *tmp_border; -- gtk_border_free(tmp_border); -- } -- else -- *inner_border = default_inner_border; -- -- return MOZ_GTK_SUCCESS; --} -- - static gint - moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, - GtkWidgetState* state, -@@ -908,19 +870,8 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, - GtkStyleContext* style = gtk_widget_get_style_context(widget); - gint x = rect->x, y=rect->y, width=rect->width, height=rect->height; - -- gboolean interior_focus; -- gint focus_width, focus_pad; -- -- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); - gtk_widget_set_direction(widget, direction); -- -- if (!interior_focus && state->focused) { -- x += focus_width + focus_pad; -- y += focus_width + focus_pad; -- width -= 2 * (focus_width + focus_pad); -- height -= 2 * (focus_width + focus_pad); -- } -- -+ - gtk_style_context_save(style); - gtk_style_context_set_state(style, state_flags); - -@@ -953,20 +904,12 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, - } - - if (state->focused) { -- if (interior_focus) { -- GtkBorder border; -- gtk_style_context_get_border(style, state_flags, &border); -- x += border.left + focus_pad; -- y += border.top + focus_pad; -- width -= 2 * (border.left + focus_pad); -- height -= 2 * (border.top + focus_pad); -- } else { -- x -= focus_width + focus_pad; -- y -= focus_width + focus_pad; -- width += 2 * (focus_width + focus_pad); -- height += 2 * (focus_width + focus_pad); -- } -- -+ GtkBorder border; -+ gtk_style_context_get_border(style, state_flags, &border); -+ x += border.left; -+ y += border.top; -+ width -= (border.left + border.right); -+ height -= (border.top + border.bottom); - gtk_render_focus(style, cr, x, y, width, height); - } - gtk_style_context_restore(style); -@@ -1056,33 +999,23 @@ calculate_button_inner_rect(GtkWidget* button, GdkRectangle* rect, - GtkTextDirection direction, - gboolean ignore_focus) - { -- GtkBorder inner_border; -- gboolean interior_focus; -- gint focus_width, focus_pad; - GtkStyleContext* style; - GtkBorder border; -+ GtkBorder padding = {0, 0, 0, 0}; - - style = gtk_widget_get_style_context(button); - - /* This mirrors gtkbutton's child positioning */ -- moz_gtk_button_get_inner_border(button, &inner_border); -- moz_gtk_widget_get_focus(button, &interior_focus, -- &focus_width, &focus_pad); -- -- if (ignore_focus) -- focus_width = focus_pad = 0; -- - gtk_style_context_get_border(style, 0, &border); -+ if (!ignore_focus) -+ gtk_style_context_get_padding(style, 0, &padding); - -- inner_rect->x = rect->x + border.left + focus_width + focus_pad; -- inner_rect->x += direction == GTK_TEXT_DIR_LTR ? -- inner_border.left : inner_border.right; -- inner_rect->y = rect->y + inner_border.top + border.top + -- focus_width + focus_pad; -- inner_rect->width = MAX(1, rect->width - inner_border.left - -- inner_border.right - (border.left + focus_pad + focus_width) * 2); -- inner_rect->height = MAX(1, rect->height - inner_border.top - -- inner_border.bottom - (border.top + focus_pad + focus_width) * 2); -+ inner_rect->x = rect->x + border.left + padding.left; -+ inner_rect->y = rect->y + padding.top + border.top; -+ inner_rect->width = MAX(1, rect->width - padding.left - -+ padding.right - border.left * 2); -+ inner_rect->height = MAX(1, rect->height - padding.top - -+ padding.bottom - border.top * 2); - - return MOZ_GTK_SUCCESS; - } -@@ -1457,19 +1390,12 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, - { - gint x = rect->x, y = rect->y, width = rect->width, height = rect->height; - GtkStyleContext* style; -- gboolean interior_focus; -- gint focus_width; - int draw_focus_outline_only = state->depressed; // NS_THEME_FOCUS_OUTLINE - - gtk_widget_set_direction(widget, direction); - - style = gtk_widget_get_style_context(widget); - -- gtk_widget_style_get(widget, -- "interior-focus", &interior_focus, -- "focus-line-width", &focus_width, -- NULL); -- - if (draw_focus_outline_only) { - // Inflate the given 'rect' with the focus outline size. - gint h, v; -@@ -1501,14 +1427,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, - /* This will get us the lit borders that focused textboxes enjoy on - * some themes. */ - gtk_style_context_set_state(style, GTK_STATE_FLAG_FOCUSED); -- if (!interior_focus) { -- /* Indent the border a little bit if we have exterior focus -- (this is what GTK does to draw native entries) */ -- x += focus_width; -- y += focus_width; -- width -= 2 * focus_width; -- height -= 2 * focus_width; -- } - } - - if (state->disabled) { -@@ -1520,11 +1438,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, - } - gtk_render_frame(style, cr, x, y, width, height); - -- if (state->focused && !state->disabled) { -- if (!interior_focus) { -- gtk_render_focus(style, cr, rect->x, rect->y, rect->width, rect->height); -- } -- } - gtk_style_context_restore(style); - - return MOZ_GTK_SUCCESS; -@@ -1829,8 +1742,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, - GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); - GtkStyleContext* style; - GtkWidget *widget; -- gboolean interior_focus; -- gint focus_width, focus_pad; - - if (isradio) { - ensure_radiobutton_widget(); -@@ -1843,7 +1754,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, - - style = gtk_widget_get_style_context(widget); - gtk_style_context_save(style); -- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); - gtk_style_context_set_state(style, state_flags); - - /* this is for drawing a prelight box */ -@@ -1852,10 +1762,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, - rect->x, rect->y, rect->width, rect->height); - } - -- if (state->focused && !interior_focus) { -- gtk_render_focus(style, cr, -- rect->x, rect->y, rect->width, rect->height); -- } - gtk_style_context_restore(style); - - return MOZ_GTK_SUCCESS; -@@ -1868,7 +1774,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, - { - GtkStyleContext *style; - GtkWidget *widget; -- gboolean interior_focus; - - if (!state->focused) - return MOZ_GTK_SUCCESS; -@@ -1889,10 +1794,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, - } - gtk_widget_set_direction(widget, direction); - -- gtk_widget_style_get(widget, "interior-focus", &interior_focus, NULL); -- if (!interior_focus) -- return MOZ_GTK_SUCCESS; -- - gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state)); - gtk_render_focus(style, cr, - rect->x, rect->y, rect->width, rect->height); -@@ -2105,6 +2015,9 @@ moz_gtk_get_tab_thickness(void) +@@ -2012,6 +2021,9 @@ moz_gtk_get_tab_thickness(void) GtkStyleContext * style; ensure_tab_widget(); + if (!notebook_has_tab_gap) + return 0; /* tabs do not overdraw the tabpanel border with "no gap" style */ + style = gtk_widget_get_style_context(gTabWidget); gtk_style_context_add_class(style, GTK_STYLE_CLASS_NOTEBOOK); gtk_style_context_get_border(style, 0, &border); -@@ -2150,7 +2063,7 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, +@@ -2057,7 +2069,7 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, ensure_tab_widget(); gtk_widget_set_direction(gTabWidget, direction); - style = gtk_widget_get_style_context(gTabWidget); + style = gtk_widget_get_style_context(gTabWidget); gtk_style_context_save(style); moz_gtk_tab_prepare_style_context(style, flags); -@@ -2167,143 +2080,155 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, +@@ -2074,143 +2086,155 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, focusRect = backRect = tabRect; - if ((flags & MOZ_GTK_TAB_SELECTED) == 0) { - /* Only draw the tab */ - gtk_render_extension(style, cr, - tabRect.x, tabRect.y, tabRect.width, tabRect.height, - (flags & MOZ_GTK_TAB_BOTTOM) ? - GTK_POS_TOP : GTK_POS_BOTTOM ); - } else { - /* Draw the tab and the gap - * We want the gap to be positioned exactly on the tabpanel top - * border; since tabbox.css may set a negative margin so that the tab - * frame rect already overlaps the tabpanel frame rect, we need to take - * that into account when drawing. To that effect, nsNativeThemeGTK - * passes us this negative margin (bmargin in the graphic below) in the - * lowest bits of |flags|. We use it to set gap_voffset, the distance - * between the top of the gap and the bottom of the tab (resp. the - * bottom of the gap and the top of the tab when we draw a bottom tab), - * while ensuring that the gap always touches the border of the tab, - * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results - * with big negative or positive margins. - * Here is a graphical explanation in the case of top tabs: - * ___________________________ - * / \ - * | T A B | - * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel - * : ^ bmargin : ^ - * : | (-negative margin, : | - * bottom : v passed in flags) : | gap_height - * of -> :.............................: | (the size of the - * the tab . part of the gap . | tabpanel top border) - * . outside of the tab . v - * ---------------------------------------------- - * - * To draw the gap, we use gtk_paint_box_gap(), see comment in - * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall, - * which should suffice to ensure that the only visible border is the - * pierced one. If the tab is in the middle, we make the box_gap begin - * a bit to the left of the tab and end a bit to the right, adjusting - * the gap position so it still is under the tab, because we want the - * rendering of a gap in the middle of a tabpanel. This is the role of - * the gints gap_{l,r}_offset. On the contrary, if the tab is the - * first, we align the start border of the box_gap with the start - * border of the tab (left if LTR, right if RTL), by setting the - * appropriate offset to 0.*/ - gint gap_loffset, gap_roffset, gap_voffset, gap_height; - - /* Get height needed by the gap */ - gap_height = moz_gtk_get_tab_thickness(); - - /* Extract gap_voffset from the first bits of flags */ - gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK; - if (gap_voffset > gap_height) - gap_voffset = gap_height; - - /* Set gap_{l,r}_offset to appropriate values */ - gap_loffset = gap_roffset = 20; /* should be enough */ - if (flags & MOZ_GTK_TAB_FIRST) { - if (direction == GTK_TEXT_DIR_RTL) - gap_roffset = initial_gap; - else - gap_loffset = initial_gap; - } - - if (flags & MOZ_GTK_TAB_BOTTOM) { - /* Draw the tab on bottom */ - focusRect.y += gap_voffset; - focusRect.height -= gap_voffset; - + if (notebook_has_tab_gap) { + if ((flags & MOZ_GTK_TAB_SELECTED) == 0) { + /* Only draw the tab */ gtk_render_extension(style, cr, - tabRect.x, tabRect.y + gap_voffset, tabRect.width, - tabRect.height - gap_voffset, GTK_POS_TOP); - - gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); - - backRect.y += (gap_voffset - gap_height); - backRect.height = gap_height; - - /* Draw the gap; erase with background color before painting in - * case theme does not */ - gtk_render_background(style, cr, backRect.x, backRect.y, - backRect.width, backRect.height); - cairo_save(cr); - cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); - cairo_clip(cr); - - gtk_render_frame_gap(style, cr, - tabRect.x - gap_loffset, - tabRect.y + gap_voffset - 3 * gap_height, - tabRect.width + gap_loffset + gap_roffset, - 3 * gap_height, GTK_POS_BOTTOM, - gap_loffset, gap_loffset + tabRect.width); - cairo_restore(cr); + tabRect.x, tabRect.y, tabRect.width, tabRect.height, + (flags & MOZ_GTK_TAB_BOTTOM) ? + GTK_POS_TOP : GTK_POS_BOTTOM ); } else { - /* Draw the tab on top */ - focusRect.height -= gap_voffset; - gtk_render_extension(style, cr, - tabRect.x, tabRect.y, tabRect.width, - tabRect.height - gap_voffset, GTK_POS_BOTTOM); - - gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); - - backRect.y += (tabRect.height - gap_voffset); - backRect.height = gap_height; - - /* Draw the gap; erase with background color before painting in - * case theme does not */ - gtk_render_background(style, cr, backRect.x, backRect.y, - backRect.width, backRect.height); - - cairo_save(cr); - cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); - cairo_clip(cr); - - gtk_render_frame_gap(style, cr, - tabRect.x - gap_loffset, - tabRect.y + tabRect.height - gap_voffset, - tabRect.width + gap_loffset + gap_roffset, - 3 * gap_height, GTK_POS_TOP, - gap_loffset, gap_loffset + tabRect.width); - cairo_restore(cr); + /* Draw the tab and the gap + * We want the gap to be positioned exactly on the tabpanel top + * border; since tabbox.css may set a negative margin so that the tab + * frame rect already overlaps the tabpanel frame rect, we need to take + * that into account when drawing. To that effect, nsNativeThemeGTK + * passes us this negative margin (bmargin in the graphic below) in the + * lowest bits of |flags|. We use it to set gap_voffset, the distance + * between the top of the gap and the bottom of the tab (resp. the + * bottom of the gap and the top of the tab when we draw a bottom tab), + * while ensuring that the gap always touches the border of the tab, + * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results + * with big negative or positive margins. + * Here is a graphical explanation in the case of top tabs: + * ___________________________ + * / \ + * | T A B | + * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel + * : ^ bmargin : ^ + * : | (-negative margin, : | + * bottom : v passed in flags) : | gap_height + * of -> :.............................: | (the size of the + * the tab . part of the gap . | tabpanel top border) + * . outside of the tab . v + * ---------------------------------------------- + * + * To draw the gap, we use gtk_paint_box_gap(), see comment in + * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall, + * which should suffice to ensure that the only visible border is the + * pierced one. If the tab is in the middle, we make the box_gap begin + * a bit to the left of the tab and end a bit to the right, adjusting + * the gap position so it still is under the tab, because we want the + * rendering of a gap in the middle of a tabpanel. This is the role of + * the gints gap_{l,r}_offset. On the contrary, if the tab is the + * first, we align the start border of the box_gap with the start + * border of the tab (left if LTR, right if RTL), by setting the + * appropriate offset to 0.*/ + gint gap_loffset, gap_roffset, gap_voffset, gap_height; + + /* Get height needed by the gap */ + gap_height = moz_gtk_get_tab_thickness(); + + /* Extract gap_voffset from the first bits of flags */ + gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK; + if (gap_voffset > gap_height) + gap_voffset = gap_height; + + /* Set gap_{l,r}_offset to appropriate values */ + gap_loffset = gap_roffset = 20; /* should be enough */ + if (flags & MOZ_GTK_TAB_FIRST) { + if (direction == GTK_TEXT_DIR_RTL) + gap_roffset = initial_gap; + else + gap_loffset = initial_gap; + } + + if (flags & MOZ_GTK_TAB_BOTTOM) { + /* Draw the tab on bottom */ + focusRect.y += gap_voffset; + focusRect.height -= gap_voffset; + + gtk_render_extension(style, cr, + tabRect.x, tabRect.y + gap_voffset, tabRect.width, + tabRect.height - gap_voffset, GTK_POS_TOP); + + gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); + + backRect.y += (gap_voffset - gap_height); + backRect.height = gap_height; + + /* Draw the gap; erase with background color before painting in + * case theme does not */ + gtk_render_background(style, cr, backRect.x, backRect.y, + backRect.width, backRect.height); + cairo_save(cr); + cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); + cairo_clip(cr); + + gtk_render_frame_gap(style, cr, + tabRect.x - gap_loffset, + tabRect.y + gap_voffset - 3 * gap_height, + tabRect.width + gap_loffset + gap_roffset, + 3 * gap_height, GTK_POS_BOTTOM, + gap_loffset, gap_loffset + tabRect.width); + cairo_restore(cr); + } else { + /* Draw the tab on top */ + focusRect.height -= gap_voffset; + gtk_render_extension(style, cr, + tabRect.x, tabRect.y, tabRect.width, + tabRect.height - gap_voffset, GTK_POS_BOTTOM); + + gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); + + backRect.y += (tabRect.height - gap_voffset); + backRect.height = gap_height; + + /* Draw the gap; erase with background color before painting in + * case theme does not */ + gtk_render_background(style, cr, backRect.x, backRect.y, + backRect.width, backRect.height); + + cairo_save(cr); + cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); + cairo_clip(cr); + + gtk_render_frame_gap(style, cr, + tabRect.x - gap_loffset, + tabRect.y + tabRect.height - gap_voffset, + tabRect.width + gap_loffset + gap_roffset, + 3 * gap_height, GTK_POS_TOP, + gap_loffset, gap_loffset + tabRect.width); + cairo_restore(cr); + } } + } else { + gtk_render_background(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height); + gtk_render_frame(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height); } + gtk_style_context_restore(style); + if (state->focused) { /* Paint the focus ring */ - GtkBorder border; - gtk_style_context_get_border(style, GetStateFlagsFromGtkWidgetState(state), &border); + GtkBorder padding; -+ -+ gtk_style_context_save(style); -+ moz_gtk_tab_prepare_style_context(style, flags); - focusRect.x += border.left; - focusRect.width -= (border.left + border.right); - focusRect.y += border.top; - focusRect.height -= (border.top + border.bottom); ++ gtk_style_context_save(style); ++ moz_gtk_tab_prepare_style_context(style, flags); ++ + gtk_style_context_get_padding(style, GetStateFlagsFromGtkWidgetState(state), &padding); + + focusRect.x += padding.left; + focusRect.width -= (padding.left + padding.right); + focusRect.y += padding.top; + focusRect.height -= (padding.top + padding.bottom); gtk_render_focus(style, cr, focusRect.x, focusRect.y, focusRect.width, focusRect.height); + + gtk_style_context_restore(style); } - gtk_style_context_restore(style); return MOZ_GTK_SUCCESS; } -@@ -2684,26 +2609,18 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - switch (widget) { - case MOZ_GTK_BUTTON: - { -- GtkBorder inner_border; -- gboolean interior_focus; -- gint focus_width, focus_pad; -- - ensure_button_widget(); -+ style = gtk_widget_get_style_context(gButtonWidget); -+ - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget)); - - /* Don't add this padding in HTML, otherwise the buttons will - become too big and stuff the layout. */ - if (!inhtml) { -- moz_gtk_widget_get_focus(gButtonWidget, &interior_focus, &focus_width, &focus_pad); -- moz_gtk_button_get_inner_border(gButtonWidget, &inner_border); -- *left += focus_width + focus_pad + inner_border.left; -- *right += focus_width + focus_pad + inner_border.right; -- *top += focus_width + focus_pad + inner_border.top; -- *bottom += focus_width + focus_pad + inner_border.bottom; -+ moz_gtk_add_style_padding(style, left, top, right, bottom); - } - -- moz_gtk_add_style_border(gtk_widget_get_style_context(gButtonWidget), -- left, top, right, bottom); -+ moz_gtk_add_style_border(style, left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_ENTRY: -@@ -2717,7 +2610,13 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - ensure_entry_widget(); - style = gtk_widget_get_style_context(gEntryWidget); - moz_gtk_add_style_border(style, left, top, right, bottom); -- moz_gtk_add_style_padding(style, left, top, right, bottom); -+ -+ /* Use the document padding in HTML -+ and GTK style padding in XUL. */ -+ if (!inhtml) { -+ moz_gtk_add_style_padding(style, left, top, right, bottom); -+ } -+ - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_TREEVIEW: -@@ -2737,23 +2636,15 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - * assigned. - * That is why the following code is the same as for MOZ_GTK_BUTTON. - * */ -- -- GtkBorder inner_border; -- gboolean interior_focus; -- gint focus_width, focus_pad; -+ GtkStyleContext *style; - - ensure_tree_header_cell_widget(); - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gTreeHeaderCellWidget)); - -- moz_gtk_widget_get_focus(gTreeHeaderCellWidget, &interior_focus, &focus_width, &focus_pad); -- moz_gtk_button_get_inner_border(gTreeHeaderCellWidget, &inner_border); -- *left += focus_width + focus_pad + inner_border.left; -- *right += focus_width + focus_pad + inner_border.right; -- *top += focus_width + focus_pad + inner_border.top; -- *bottom += focus_width + focus_pad + inner_border.bottom; -- -- moz_gtk_add_style_border(gtk_widget_get_style_context(gTreeHeaderCellWidget), -- left, top, right, bottom); -+ style = gtk_widget_get_style_context(gTreeHeaderCellWidget); -+ -+ moz_gtk_add_style_border(style, left, top, right, bottom); -+ moz_gtk_add_style_padding(style, left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_TREE_HEADER_SORTARROW: -@@ -2773,29 +2664,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - /* We need to account for the arrow on the dropdown, so text - * doesn't come too close to the arrow, or in some cases spill - * into the arrow. */ -- gboolean ignored_interior_focus, wide_separators; -- gint focus_width, focus_pad, separator_width; -+ gboolean wide_separators; -+ gint separator_width; - GtkRequisition arrow_req; - GtkBorder border; - - ensure_combo_box_widgets(); - -- *left = gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); -+ *left = *top = *right = *bottom = -+ gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); -+ -+ style = gtk_widget_get_style_context(gComboBoxButtonWidget); - - if (!inhtml) { -- moz_gtk_widget_get_focus(gComboBoxButtonWidget, -- &ignored_interior_focus, -- &focus_width, &focus_pad); -- *left += focus_width + focus_pad; -+ moz_gtk_add_style_padding(style, left, top, right, bottom); - } - -- style = gtk_widget_get_style_context(gComboBoxButtonWidget); -- gtk_style_context_get_border(style, 0, &border); -- -- *top = *left + border.top; -- *left += border.left; -- -- *right = *left; *bottom = *top; -+ moz_gtk_add_style_border(style, left, top, right, bottom); - - /* If there is no separator, don't try to count its width. */ - separator_width = 0; -@@ -2847,60 +2732,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - ensure_frame_widget(); - w = gFrameWidget; - break; -- case MOZ_GTK_CHECKBUTTON_LABEL: -- case MOZ_GTK_RADIOBUTTON_LABEL: -- { -- gboolean interior_focus; -- gint focus_width, focus_pad; -- -- /* If the focus is interior, then the label has a border of -- (focus_width + focus_pad). */ -- if (widget == MOZ_GTK_CHECKBUTTON_LABEL) { -- ensure_checkbox_widget(); -- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, -- &focus_width, &focus_pad); -- } -- else { -- ensure_radiobutton_widget(); -- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, -- &focus_width, &focus_pad); -- } -- -- if (interior_focus) -- *left = *top = *right = *bottom = (focus_width + focus_pad); -- -- return MOZ_GTK_SUCCESS; -- } -- - case MOZ_GTK_CHECKBUTTON_CONTAINER: - case MOZ_GTK_RADIOBUTTON_CONTAINER: - { -- gboolean interior_focus; -- gint focus_width, focus_pad; -- -- /* If the focus is _not_ interior, then the container has a border -- of (focus_width + focus_pad). */ - if (widget == MOZ_GTK_CHECKBUTTON_CONTAINER) { - ensure_checkbox_widget(); -- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, -- &focus_width, &focus_pad); - w = gCheckboxWidget; - } else { - ensure_radiobutton_widget(); -- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, -- &focus_width, &focus_pad); - w = gRadiobuttonWidget; - } -+ style = gtk_widget_get_style_context(w); - - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w)); -- -- if (!interior_focus) { -- *left += (focus_width + focus_pad); -- *right += (focus_width + focus_pad); -- *top += (focus_width + focus_pad); -- *bottom += (focus_width + focus_pad); -- } -- -+ moz_gtk_add_style_border(style, -+ left, top, right, bottom); -+ moz_gtk_add_style_padding(style, -+ left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_MENUPOPUP: -@@ -2927,6 +2775,8 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - return MOZ_GTK_SUCCESS; - } - /* These widgets have no borders, since they are not containers. */ -+ case MOZ_GTK_CHECKBUTTON_LABEL: -+ case MOZ_GTK_RADIOBUTTON_LABEL: - case MOZ_GTK_SPLITTER_HORIZONTAL: - case MOZ_GTK_SPLITTER_VERTICAL: - case MOZ_GTK_CHECKBUTTON: -@@ -2975,11 +2849,7 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, +@@ -2831,11 +2855,7 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, gtk_style_context_save(style); moz_gtk_tab_prepare_style_context(style, flags); - // TODO add_style_border() should be replaced - // with focus-line-width and focus-padding - // see Bug 877605 *left = *top = *right = *bottom = 0; - moz_gtk_add_style_border(style, left, top, right, bottom); moz_gtk_add_style_padding(style, left, top, right, bottom); gtk_widget_style_get (gTabWidget, "tab-curvature", &tab_curvature, NULL); -@@ -2990,16 +2860,9 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, +@@ -2846,16 +2866,9 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, int initial_gap; gtk_widget_style_get (gTabWidget, "initial-gap", &initial_gap, NULL); if (direction == GTK_TEXT_DIR_RTL) - *right += initial_gap; + *right += initial_gap; else - *left += initial_gap; - } - - // Top tabs have no bottom border, bottom tabs have no top border - if (flags & MOZ_GTK_TAB_BOTTOM) { - *top = 0; - } else { - *bottom = 0; + *left += initial_gap; } gtk_style_context_restore(style); -diff --git widget/gtk/gtkdrawing.h widget/gtk/gtkdrawing.h -index 1938e8f..5f71cfd 100644 ---- widget/gtk/gtkdrawing.h -+++ widget/gtk/gtkdrawing.h -@@ -293,16 +293,6 @@ moz_gtk_checkbox_get_metrics(gint* indicator_size, gint* indicator_spacing); - gint - moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing); - --/** -- * Get the inner-border value for a GtkButton widget (button or tree header) -- * widget: [IN] the widget to get the border value for -- * inner_border: [OUT] the inner border -- * -- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise -- */ --gint --moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); -- - /** Get the extra size for the focus ring for outline:auto. - * widget: [IN] the widget to get the focus metrics for - * focus_h_width: [OUT] the horizontal width -@@ -313,19 +303,6 @@ moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); - gint - moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width); - --/** Get the focus metrics for a treeheadercell, button, checkbox, or radio button. -- * widget: [IN] the widget to get the focus metrics for -- * interior_focus: [OUT] whether the focus is drawn around the -- * label (TRUE) or around the whole container (FALSE) -- * focus_width: [OUT] the width of the focus line -- * focus_pad: [OUT] the padding between the focus line and children -- * -- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise -- */ --gint --moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, -- gint* focus_width, gint* focus_pad); -- - /** Get the horizontal padding for the menuitem widget or checkmenuitem widget. - * horizontal_padding: [OUT] The left and right padding of the menuitem or checkmenuitem - * diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp -index e5e1867..76d28e3 100644 +index 9dedd76..779eceb 100644 --- widget/gtk/nsNativeThemeGTK.cpp +++ widget/gtk/nsNativeThemeGTK.cpp -@@ -761,6 +761,8 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType, +@@ -765,6 +765,8 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType, return false; gint gap_height = moz_gtk_get_tab_thickness(); + if (!gap_height) + return false; int32_t extra = gap_height - GetTabMarginPixels(aFrame); if (extra <= 0) Index: branches/2015Q3/www/firefox/files/patch-bug779713 =================================================================== --- branches/2015Q3/www/firefox/files/patch-bug779713 (revision 392766) +++ branches/2015Q3/www/firefox/files/patch-bug779713 (revision 392767) @@ -1,77 +1,75 @@ diff --git mfbt/Alignment.h mfbt/Alignment.h index e0843ca..353ec36 100644 --- mfbt/Alignment.h +++ mfbt/Alignment.h @@ -9,11 +9,20 @@ #ifndef mozilla_Alignment_h #define mozilla_Alignment_h +#include "mozilla/Attributes.h" + #include #include namespace mozilla { +#if defined(MOZ_HAVE_CXX11_ALIGNAS) +#define MOZ_ALIGNOF(T) alignof(T) +#elif defined(__GNUC__) +#define MOZ_ALIGNOF(T) __alignof__(T) +#elif defined(_MSC_VER) +#define MOZ_ALIGNOF(T) __alignof(T) +#else /* * This class, and the corresponding macro MOZ_ALIGNOF, figures out how many * bytes of alignment a given type needs. @@ -32,6 +41,7 @@ public: }; #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment +#endif /* * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. @@ -43,7 +53,10 @@ public: * will declare a two-character array |arr| aligned to 8 bytes. */ -#if defined(__GNUC__) +#if defined(MOZ_HAVE_CXX11_ALIGNAS) +# define MOZ_ALIGNED_DECL(_type, _align) \ + alignas(_align) _type +#elif defined(__GNUC__) # define MOZ_ALIGNED_DECL(_type, _align) \ _type __attribute__((aligned(_align))) #elif defined(_MSC_VER) diff --git mfbt/Attributes.h mfbt/Attributes.h index d317766..ddb13da 100644 --- mfbt/Attributes.h +++ mfbt/Attributes.h @@ -50,6 +50,7 @@ * don't indicate support for them here, due to * http://stackoverflow.com/questions/20498142/visual-studio-2013-explicit-keyword-bug */ +# define MOZ_HAVE_CXX11_ALIGNAS # define MOZ_HAVE_NEVER_INLINE __declspec(noinline) # define MOZ_HAVE_NORETURN __declspec(noreturn) # ifdef __clang__ @@ -70,6 +71,9 @@ # ifndef __has_extension # define __has_extension __has_feature /* compatibility, for older versions of clang */ # endif +# if __has_extension(cxx_alignas) +# define MOZ_HAVE_CXX11_ALIGNAS +# endif # if __has_extension(cxx_constexpr) # define MOZ_HAVE_CXX11_CONSTEXPR # endif -@@ -84,6 +88,9 @@ - # endif - #elif defined(__GNUC__) +@@ -86,6 +90,7 @@ # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L -+# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) + # define MOZ_HAVE_CXX11_CONSTEXPR + # if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) +# define MOZ_HAVE_CXX11_ALIGNAS -+# endif - # define MOZ_HAVE_CXX11_CONSTEXPR - # define MOZ_HAVE_EXPLICIT_CONVERSION - # endif + # define MOZ_HAVE_CXX11_CONSTEXPR_IN_TEMPLATES + # endif + # define MOZ_HAVE_EXPLICIT_CONVERSION Index: branches/2015Q3/www/firefox/files/patch-bug826985 =================================================================== --- branches/2015Q3/www/firefox/files/patch-bug826985 (revision 392766) +++ branches/2015Q3/www/firefox/files/patch-bug826985 (revision 392767) @@ -1,179 +1,179 @@ commit 8024d93 Author: Henrik Gulbrandsen Date: Fri Jan 4 13:49:22 2013 +0100 Bug 826985 - Support more video formats for WebRTC via libv4l2 on Linux. --- config/system-headers | 1 + configure.in | 7 +++++++ media/webrtc/signaling/test/Makefile.in | 1 + .../modules/video_capture/linux/device_info_linux.cc | 17 +++++++++++++++++ .../modules/video_capture/linux/video_capture_linux.cc | 16 +++++++++++++++- .../webrtc/modules/video_capture/video_capture.gypi | 11 +++++++++++ toolkit/library/Makefile.in | 1 + 6 files changed, 52 insertions(+), 1 deletion(-) diff --git config/system-headers config/system-headers index 55e4cd1..76567b3 100644 --- config/system-headers +++ config/system-headers -@@ -635,6 +635,7 @@ libgnomevfs/gnome-vfs-mime-handlers.h - libgnomevfs/gnome-vfs-mime-utils.h - libgnomevfs/gnome-vfs-ops.h - libgnomevfs/gnome-vfs-standard-callbacks.h +@@ -627,6 +627,7 @@ libgnome/libgnome.h + libgnomeui/gnome-icon-lookup.h + libgnomeui/gnome-icon-theme.h + libgnomeui/gnome-ui-init.h +libv4l2.h lib$routines.h limits limits.h diff --git configure.in configure.in index 55e4cd1..76567b3 100644 --- configure.in +++ configure.in @@ -5309,6 +5309,9 @@ if test -n "$MOZ_WEBRTC"; then MOZ_VP8_ENCODER=1 MOZ_VP8_ERROR_CONCEALMENT=1 + dnl with libv4l2 we can support more cameras + PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) + dnl enable once Signaling lands MOZ_WEBRTC_SIGNALING=1 AC_DEFINE(MOZ_WEBRTC_SIGNALING) diff --git build/gyp.mozbuild build/gyp.mozbuild index b483cd1..f1dd1f0 100644 --- build/gyp.mozbuild +++ build/gyp.mozbuild @@ -11,6 +11,7 @@ gyp_vars = { 'have_ethtool_cmd_speed_hi': 1 if CONFIG['MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI'] else 0, 'include_alsa_audio': 1 if CONFIG['MOZ_ALSA'] else 0, 'include_pulse_audio': 1 if CONFIG['MOZ_PULSEAUDIO'] else 0, + 'use_libv4l2': 1 if CONFIG['MOZ_LIBV4L2_LIBS'] else 0, # basic stuff for everything 'include_internal_video_render': 0, 'clang_use_chrome_plugins': 0, diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build index b483cd1..f1dd1f0 100644 --- media/webrtc/signaling/test/moz.build +++ media/webrtc/signaling/test/moz.build @@ -122,6 +122,7 @@ if CONFIG['JS_SHARED_LIBRARY']: 'js', ] +OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS'] OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] OS_LIBS += CONFIG['REALTIME_LIBS'] diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc index 239a292..bab496c 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc +++ media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc @@ -25,10 +25,21 @@ #else #include #endif +#ifdef HAVE_LIBV4L2 +#include +#endif #include "webrtc/system_wrappers/interface/ref_count.h" #include "webrtc/system_wrappers/interface/trace.h" +#ifdef HAVE_LIBV4L2 +#define open v4l2_open +#define close v4l2_close +#define dup v4l2_dup +#define ioctl v4l2_ioctl +#define mmap v4l2_mmap +#define munmap v4l2_munmap +#endif namespace webrtc { @@ -130,6 +142,11 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( memset(deviceNameUTF8, 0, deviceNameLength); memcpy(cameraName, cap.card, sizeof(cap.card)); + if (cameraName[0] == '\0') + { + sprintf(cameraName, "Camera at /dev/video%d", deviceNumber); + } + if (deviceNameLength >= strlen(cameraName)) { memcpy(deviceNameUTF8, cameraName, strlen(cameraName)); diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc index 12df1b3..e9863ba 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc +++ media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc @@ -25,6 +25,9 @@ #else #include #endif +#ifdef HAVE_LIBV4L2 +#include +#endif #include @@ -26,6 +31,15 @@ #include "critical_section_wrapper.h" #include "video_capture_linux.h" +#ifdef HAVE_LIBV4L2 +#define open v4l2_open +#define close v4l2_close +#define dup v4l2_dup +#define ioctl v4l2_ioctl +#define mmap v4l2_mmap +#define munmap v4l2_munmap +#endif + namespace webrtc { namespace videocapturemodule diff --git media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi index d46b5aa..e452223 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi +++ media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi @@ -7,6 +7,9 @@ # be found in the AUTHORS file in the root of the source tree. { + 'variables': { + 'use_libv4l2%': 0, + }, 'targets': [ { 'target_name': 'video_capture_module', @@ -69,6 +72,19 @@ 'linux/video_capture_linux.cc', 'linux/video_capture_linux.h', ], + 'conditions': [ + ['use_libv4l2==1', { + 'defines': [ + 'HAVE_LIBV4L2', + ], + 'cflags_mozilla': [ + '$(MOZ_LIBV4L2_CFLAGS)', + ], + 'libraries': [ + '-lv4l2', + ], + }], + ], }], # linux ['OS=="mac"', { 'sources': [ diff --git toolkit/library/moz.build toolkit/library/moz.build index 9c16ffa..1db3794 100644 --- toolkit/library/moz.build +++ toolkit/library/moz.build @@ -163,6 +163,7 @@ if CONFIG['OS_ARCH'] == 'Linux' and CONF ] OS_LIBS += CONFIG['MOZ_CAIRO_OSLIBS'] +OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS'] OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] OS_LIBS += CONFIG['MOZ_APP_EXTRA_LIBS'] Index: branches/2015Q3/www/firefox/files/patch-system-openh264 =================================================================== --- branches/2015Q3/www/firefox/files/patch-system-openh264 (revision 392766) +++ branches/2015Q3/www/firefox/files/patch-system-openh264 (revision 392767) @@ -1,239 +1,238 @@ # Revert bug 1045209 to allow using absolute path diff --git dom/media/gmp/GMPChild.cpp dom/media/gmp/GMPChild.cpp index 1dde3ac..12c88cf 100644 --- dom/media/gmp/GMPChild.cpp +++ dom/media/gmp/GMPChild.cpp @@ -76,21 +76,14 @@ GetFileBase(const std::string& aPluginPa } #endif - nsCOMPtr parent; - rv = aFileBase->GetParent(getter_AddRefs(parent)); - if (NS_FAILED(rv)) { - return false; - } - - nsAutoString parentLeafName; - rv = parent->GetLeafName(parentLeafName); - if (NS_FAILED(rv)) { + nsAutoString leafName; + if (NS_FAILED(aFileBase->GetLeafName(leafName))) { return false; } - aBaseName = Substring(parentLeafName, + aBaseName = Substring(leafName, 4, - parentLeafName.Length() - 1); + leafName.Length() - 1); return true; } diff --git dom/media/gmp/GMPParent.cpp dom/media/gmp/GMPParent.cpp index aa60acf..90878ca 100644 --- dom/media/gmp/GMPParent.cpp +++ dom/media/gmp/GMPParent.cpp -@@ -90,23 +90,16 @@ +@@ -93,22 +93,15 @@ 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())); +- nsAutoString parentLeafName; +- rv = parent->GetLeafName(parentLeafName); +- if (NS_FAILED(rv)) { +- return rv; +- } +- LOGD("%s: for %s", __FUNCTION__, NS_LossyConvertUTF16toASCII(parentLeafName).get()); ++ LOGD("%s: for %s", __FUNCTION__, NS_LossyConvertUTF16toASCII(leafname).get()); - MOZ_ASSERT(parentLeafName.Length() > 4); - mName = Substring(parentLeafName, 4); + MOZ_ASSERT(leafname.Length() > 4); + mName = Substring(leafname, 4); return ReadGMPMetaData(); } diff --git toolkit/modules/GMPInstallManager.jsm toolkit/modules/GMPInstallManager.jsm index 9593492..470384b 100644 --- toolkit/modules/GMPInstallManager.jsm +++ toolkit/modules/GMPInstallManager.jsm @@ -888,9 +889,7 @@ let gmpAddon = this._gmpAddon; let installToDirPath = Cc["@mozilla.org/file/local;1"]. createInstance(Ci.nsIFile); - let path = OS.Path.join(OS.Constants.Path.profileDir, - gmpAddon.id, - gmpAddon.version); + let path = OS.Path.join(OS.Constants.Path.profileDir, gmpAddon.id); installToDirPath.initWithPath(path); log.info("install to directory path: " + installToDirPath.path); let gmpInstaller = new GMPExtractor(zipPath, installToDirPath.path); @@ -885,10 +883,12 @@ // Success, set the prefs let now = Math.round(Date.now() / 1000); GMPPrefs.set(GMPPrefs.KEY_PLUGIN_LAST_UPDATE, now, gmpAddon.id); - // Setting the version pref signals installation completion to consumers, - // if you need to set other prefs etc. do it before this. + // Setting the path pref signals installation completion to consumers, + // so set the version and potential other information they use first. GMPPrefs.set(GMPPrefs.KEY_PLUGIN_VERSION, gmpAddon.version, gmpAddon.id); + GMPPrefs.set(GMPPrefs.KEY_PLUGIN_PATH, + installToDirPath.path, gmpAddon.id); this._deferred.resolve(extractedPaths); }, err => { this._deferred.reject(err); diff --git toolkit/modules/GMPUtils.jsm toolkit/modules/GMPUtils.jsm index 1f3a0b1..93517be 100644 --- toolkit/modules/GMPUtils.jsm +++ toolkit/modules/GMPUtils.jsm @@ -70,6 +70,7 @@ this.GMPPrefs = { KEY_EME_ENABLED: "media.eme.enabled", KEY_PLUGIN_ENABLED: "media.{0}.enabled", KEY_PLUGIN_LAST_UPDATE: "media.{0}.lastUpdate", + KEY_PLUGIN_PATH: "media.{0}.path", KEY_PLUGIN_VERSION: "media.{0}.version", KEY_PLUGIN_AUTOUPDATE: "media.{0}.autoupdate", KEY_PLUGIN_FORCEVISIBLE: "media.{0}.forcevisible", diff --git toolkit/mozapps/extensions/internal/GMPProvider.jsm toolkit/mozapps/extensions/internal/GMPProvider.jsm index 1f3a0b1..93517be 100644 --- toolkit/mozapps/extensions/internal/GMPProvider.jsm +++ toolkit/mozapps/extensions/internal/GMPProvider.jsm @@ -100,12 +100,11 @@ Log.repository.getLoggerWithMessagePrefix("Toolkit.GMP", "GMPWrapper(" + this._plugin.id + ") "); - Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, - this._plugin.id), + Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, this._plugin.id), this.onPrefEnabledChanged, this); - Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION, + Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH, this._plugin.id), - this.onPrefVersionChanged, this); + this.onPrefPathChanged, this); if (this._plugin.isEME) { Preferences.observe(GMPPrefs.KEY_EME_ENABLED, this.onPrefEMEGlobalEnabledChanged, this); -@@ -120,17 +119,14 @@ +@@ -134,17 +133,14 @@ optionsType: AddonManager.OPTIONS_TYPE_INLINE, get optionsURL() { return this._plugin.optionsURL; }, + set gmpPath(aPath) { this._gmpPath = aPath; }, get gmpPath() { - if (!this._gmpPath && this.isInstalled) { - this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir, - this._plugin.id, - GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, - null, this._plugin.id)); + if (!this._gmpPath) { + this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); } return this._gmpPath; }, - - get id() { return this._plugin.id; }, - get type() { return "plugin"; }, - get isGMPlugin() { return true; }, + get missingKey() { + return this._plugin.missingKey; + }, @@ -141,8 +137,13 @@ get description() { return this._plugin.description; }, get fullDescription() { return this._plugin.fullDescription; }, - get version() { return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null, - this._plugin.id); }, + get version() { + if (this.isInstalled) { + return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null, + this._plugin.id); + } + return null; + }, get isActive() { return !this.appDisabled && !this.userDisabled; }, get appDisabled() { @@ -289,24 +290,17 @@ get pluginMimeTypes() { return []; }, get pluginLibraries() { - if (this.isInstalled) { - let path = this.version; - return [path]; - } - return []; + let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); + return path && path.length ? [OS.Path.basename(path)] : []; }, get pluginFullpath() { - if (this.isInstalled) { - let path = OS.Path.join(OS.Constants.Path.profileDir, - this._plugin.id, - this.version); - return [path]; - } - return []; + let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); + return path && path.length ? [path] : []; }, get isInstalled() { - return this.version && this.version.length > 0; + let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); + return path && path.length > 0; }, _handleEnabledChanged: function() { @@ -362,10 +356,10 @@ } }, - onPrefVersionChanged: function() { + onPrefPathChanged: function() { AddonManagerPrivate.callAddonListeners("onUninstalling", this, false); if (this._gmpPath) { - this._log.info("onPrefVersionChanged() - unregistering gmp directory " + + this._log.info("onPrefPathChanged() - unregistering gmp directory " + this._gmpPath); gmpService.removePluginDirectory(this._gmpPath); } @@ -374,15 +368,10 @@ AddonManagerPrivate.callInstallListeners("onExternalInstall", null, this, null, false); AddonManagerPrivate.callAddonListeners("onInstalling", this, false); - this._gmpPath = null; - if (this.isInstalled) { - this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir, - this._plugin.id, - GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, - null, this._plugin.id)); - } + this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, + null, this._plugin.id); if (this._gmpPath && this.isActive) { - this._log.info("onPrefVersionChanged() - registering gmp directory " + + this._log.info("onPrefPathChanged() - registering gmp directory " + this._gmpPath); gmpService.addPluginDirectory(this._gmpPath); } @@ -393,9 +382,9 @@ Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, this._plugin.id), this.onPrefEnabledChanged, this); - Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION, + Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH, this._plugin.id), - this.onPrefVersionChanged, this); + this.onPrefPathChanged, this); if (this._plugin.isEME) { Preferences.ignore(GMPPrefs.KEY_EME_ENABLED, this.onPrefEMEGlobalEnabledChanged, this); Index: branches/2015Q3/www/firefox-esr/Makefile =================================================================== --- branches/2015Q3/www/firefox-esr/Makefile (revision 392766) +++ branches/2015Q3/www/firefox-esr/Makefile (revision 392767) @@ -1,88 +1,96 @@ # Created by: Alan Eldridge # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 31.7.0 +DISTVERSION= 38.1.0 DISTVERSIONSUFFIX=esr.source -PORTREVISION= 1 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}esr/source \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}esr-candidates/build2/source + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}esr-candidates/build1/source PKGNAMESUFFIX= -esr MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla -BUILD_DEPENDS= nspr>=4.10.6:${PORTSDIR}/devel/nspr \ - nss>=3.16.2.3:${PORTSDIR}/security/nss \ +BUILD_DEPENDS= nspr>=4.10.8:${PORTSDIR}/devel/nspr \ + nss>=3.19.2:${PORTSDIR}/security/nss \ libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \ cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \ soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \ - harfbuzz>=0.9.25:${PORTSDIR}/print/harfbuzz \ + harfbuzz>=0.9.34:${PORTSDIR}/print/harfbuzz \ graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \ libvorbis>=1.3.5:${PORTSDIR}/audio/libvorbis \ - opus>=1.1:${PORTSDIR}/audio/opus \ libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \ - sqlite3>=3.8.4.2:${PORTSDIR}/databases/sqlite3 \ + sqlite3>=3.8.9:${PORTSDIR}/databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \ v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \ autoconf-2.13:${PORTSDIR}/devel/autoconf213 \ zip:${PORTSDIR}/archivers/zip \ unzip:${PORTSDIR}/archivers/unzip +# opus>=1.1:${PORTSDIR}/audio/opus \ LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l USE_GECKO= gecko CPE_PRODUCT= ${PORTNAME}_esr -CONFLICTS= firefox-3[02-9].* firefox-2[0-35-9].* +CONFLICTS_INSTALL= firefox-4[0-4].* firefox-3[02-9].* firefox-2[0-35-9].* MOZ_PKGCONFIG_FILES= # empty -USE_MOZILLA= # empty +USE_MOZILLA= -opus MOZILLA_NAME= Firefox USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl USES= dos2unix tar:bzip2 DOS2UNIX_FILES= media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp FIREFOX_ICON= ${MOZILLA}.png FIREFOX_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png MOZ_OPTIONS= --program-transform-name='s/firefox/${MOZILLA}/' \ --enable-application=browser \ --enable-official-branding +OPTIONS_DEFAULT= GTK2 + +OPTIONS_SINGLE+= TOOLKIT +OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3 + .include "${.CURDIR}/../../www/firefox/Makefile.options" .include -WRKSRC:= ${WRKDIR}/mozilla-esr31 +WRKSRC:= ${WRKDIR}/mozilla-esr38 .if ${PORT_OPTIONS:MALSA} RUN_DEPENDS+= alsa-lib>=1.0.27.2_1:${PORTSDIR}/audio/alsa-lib .endif .if ${PORT_OPTIONS:MGSTREAMER} RUN_DEPENDS+= gstreamer1-libav>=1.2.4_1:${PORTSDIR}/multimedia/gstreamer1-libav +.endif + +.if ${PORT_OPTIONS:MGTK3} +BUILD_DEPENDS+= gtk3>=3.14.6:${PORTSDIR}/x11-toolkits/gtk30 .endif post-extract: @${SED} -e 's|@FIREFOX_ICON@|${FIREFOX_ICON}|' -e 's|@MOZILLA@|${MOZILLA}|' \ -e 's|@MOZILLA_NAME@|${MOZILLA_NAME}|' \ <${FILESDIR}/firefox.desktop.in >${WRKDIR}/${MOZILLA}.desktop post-patch: @${REINPLACE_CMD} -e '/MOZPNG/s/=[0-9]*/=10511/' \ ${WRKSRC}/configure.in @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/browser/app/nsBrowserApp.cpp pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${WRKSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) post-install: ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps ${INSTALL_DATA} ${WRKDIR}/${MOZILLA}.desktop ${STAGEDIR}${PREFIX}/share/applications/ ${LN} -sf ${FIREFOX_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${FIREFOX_ICON} .include Index: branches/2015Q3/www/firefox-esr/distinfo =================================================================== --- branches/2015Q3/www/firefox-esr/distinfo (revision 392766) +++ branches/2015Q3/www/firefox-esr/distinfo (revision 392767) @@ -1,2 +1,2 @@ -SHA256 (firefox-31.7.0esr.source.tar.bz2) = 8523c10ecb318f278a251d90e2161c07c7431796d4387fe9091dfa4e633474b6 -SIZE (firefox-31.7.0esr.source.tar.bz2) = 147772244 +SHA256 (firefox-38.1.0esr.source.tar.bz2) = 85eb5f916aa47a92cf50803dcb35e7fa3a9da29abf5fc91cbb6a70bbbc2618ff +SIZE (firefox-38.1.0esr.source.tar.bz2) = 180392775 Index: branches/2015Q3/www/firefox-esr/files/patch-bug961264 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug961264 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug961264 (nonexistent) @@ -1,266 +0,0 @@ -commit d099acd -Author: Trevor Saunders -Date: Fri Jan 17 15:08:00 2014 -0800 - - Bug 961264 - Remove obsolete checks for gcc visibility stuff. ---- - configure.in | 115 +++------------------------------------------------- - js/src/configure.in | 111 ++------------------------------------------------ - 2 files changed, 8 insertions(+), 218 deletions(-) - -diff --git configure.in configure.in -index dfb8193..33d71b3 100644 ---- configure.in -+++ configure.in -@@ -2507,118 +2507,15 @@ MOZ_CXX11 - - AC_LANG_C - --dnl Check for .hidden assembler directive and visibility attribute. --dnl Borrowed from glibc configure.in -+dnl Setup default hidden visibility and wrapped system headers. - dnl =============================================================== - if test "$GNU_CC"; then -- AC_CACHE_CHECK(for visibility(hidden) attribute, -- ac_cv_visibility_hidden, -- [cat > conftest.c </dev/null 2>&1; then -- if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then -- ac_cv_visibility_hidden=yes -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_hidden" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -- -- AC_CACHE_CHECK(for visibility(default) attribute, -- ac_cv_visibility_default, -- [cat > conftest.c </dev/null 2>&1; then -- if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then -- ac_cv_visibility_default=yes -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_default" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -- -- AC_CACHE_CHECK(for visibility pragma support, -- ac_cv_visibility_pragma, -- [cat > conftest.c </dev/null 2>&1; then -- if egrep '\.(hidden|private_extern).*foo_hidden' conftest.s >/dev/null; then -- if ! egrep '\.(hidden|private_extern).*foo_default' conftest.s > /dev/null; then -- ac_cv_visibility_pragma=yes -- fi -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_pragma" = "yes"; then -- AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905), -- ac_cv_have_visibility_class_bug, -- [cat > conftest.c < /dev/null 2>&1 ; then -- ac_cv_have_visibility_class_bug=yes -- else -- if test `egrep -c '@PLT|\\$stub' conftest.S` = 0; then -- ac_cv_have_visibility_class_bug=yes -- fi -- fi -- rm -rf conftest.{c,S} -- ]) -- -- AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297), -- ac_cv_have_visibility_builtin_bug, -- [cat > conftest.c < --#pragma GCC visibility pop -- --__attribute__ ((visibility ("default"))) void Func() { -- char c[[100]]; -- memset(c, 0, sizeof(c)); --} --EOF -- ac_cv_have_visibility_builtin_bug=no -- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then -- ac_cv_have_visibility_builtin_bug=yes -- else -- if test `grep -c "@PLT" conftest.S` = 0; then -- ac_cv_visibility_builtin_bug=yes -- fi -- fi -- rm -f conftest.{c,S} -- ]) -- if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \ -- "$ac_cv_have_visibility_class_bug" = "no"; then -- VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -- WRAP_SYSTEM_INCLUDES=1 -- STL_FLAGS='-I$(DIST)/stl_wrappers' -- WRAP_STL_INCLUDES=1 -- else -- VISIBILITY_FLAGS='-fvisibility=hidden' -- fi # have visibility pragma bug -- fi # have visibility pragma -- fi # have visibility(default) attribute -- fi # have visibility(hidden) attribute -+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -+ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -+ WRAP_SYSTEM_INCLUDES=1 -+ STL_FLAGS='-I$(DIST)/stl_wrappers' -+ WRAP_STL_INCLUDES=1 - fi # GNU_CC - - # visibility hidden flag for Sun Studio on Solaris -diff --git js/src/configure.in js/src/configure.in -index bddd46d..d4b522e 100644 ---- js/src/configure.in -+++ js/src/configure.in -@@ -2077,116 +2077,13 @@ AC_LANG_CPLUSPLUS - - MOZ_CXX11 - --dnl Check for .hidden assembler directive and visibility attribute. --dnl Borrowed from glibc configure.in -+dnl Setup default hidden visibility and wrapped system headers. - dnl =============================================================== - if test "$GNU_CC"; then -- AC_CACHE_CHECK(for visibility(hidden) attribute, -- ac_cv_visibility_hidden, -- [cat > conftest.c </dev/null 2>&1; then -- if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then -- ac_cv_visibility_hidden=yes -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_hidden" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -- -- AC_CACHE_CHECK(for visibility(default) attribute, -- ac_cv_visibility_default, -- [cat > conftest.c </dev/null 2>&1; then -- if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then -- ac_cv_visibility_default=yes -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_default" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -- -- AC_CACHE_CHECK(for visibility pragma support, -- ac_cv_visibility_pragma, -- [cat > conftest.c </dev/null 2>&1; then -- if egrep '\.(hidden|private_extern).*foo_hidden' conftest.s >/dev/null; then -- if ! egrep '\.(hidden|private_extern).*foo_default' conftest.s > /dev/null; then -- ac_cv_visibility_pragma=yes -- fi -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_pragma" = "yes"; then -- AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905), -- ac_cv_have_visibility_class_bug, -- [cat > conftest.c < /dev/null 2>&1 ; then -- ac_cv_have_visibility_class_bug=yes -- else -- if test `egrep -c '@PLT|\\$stub' conftest.S` = 0; then -- ac_cv_have_visibility_class_bug=yes -- fi -- fi -- rm -rf conftest.{c,S} -- ]) -- -- AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297), -- ac_cv_have_visibility_builtin_bug, -- [cat > conftest.c < --#pragma GCC visibility pop -- --__attribute__ ((visibility ("default"))) void Func() { -- char c[[100]]; -- memset(c, 0, sizeof(c)); --} --EOF -- ac_cv_have_visibility_builtin_bug=no -- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then -- ac_cv_have_visibility_builtin_bug=yes -- else -- if test `grep -c "@PLT" conftest.S` = 0; then -- ac_cv_visibility_builtin_bug=yes -- fi -- fi -- rm -f conftest.{c,S} -- ]) -- if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \ -- "$ac_cv_have_visibility_class_bug" = "no"; then -- VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -- WRAP_SYSTEM_INCLUDES=1 -- else -- VISIBILITY_FLAGS='-fvisibility=hidden' -- fi # have visibility pragma bug -- fi # have visibility pragma -- fi # have visibility(default) attribute -- fi # have visibility(hidden) attribute -+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -+ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -+ WRAP_SYSTEM_INCLUDES=1 - fi # GNU_CC - - # visibility hidden flag for Sun Studio on Solaris Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug961264 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug858919 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug858919 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug858919 (nonexistent) @@ -1,391 +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,9 +100,11 @@ 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, IPC::Principal(aPrincipal)); -+ rv = sysAlerts->ShowAlertNotification(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable, -+ aAlertCookie, aAlertListener, aAlertName, -+ aBidi, aLang, 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,53 @@ -+/* -*- 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, -+ 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: branches/2015Q3/www/firefox-esr/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: branches/2015Q3/www/firefox-esr/files/patch-bug1061736 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1061736 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1061736 (nonexistent) @@ -1,50 +0,0 @@ -commit a7add79 -Author: Gavin Sharp -Date: Mon Oct 27 18:43:51 2014 -0700 - - Bug 1061736: add DuckDuckGo as a search engine option in Firefox. r=dolske ---- - browser/locales/Makefile.in | 2 +- - browser/locales/en-US/searchplugins/ddg.xml | 21 +++++++++++++++++++++ - 2 files changed, 22 insertions(+), 1 deletion(-) - -diff --git browser/locales/Makefile.in browser/locales/Makefile.in -index eb3c30b..b172876 100644 ---- browser/locales/Makefile.in -+++ browser/locales/Makefile.in -@@ -71,7 +71,7 @@ endif - ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro) - SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/metrolist.txt)) - else --SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt)) -+SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt)) ddg - endif - SEARCHPLUGINS_PATH := $(FINAL_TARGET)/searchplugins - SEARCHPLUGINS := $(addsuffix .xml,$(SEARCHPLUGINS_NAMES)) -diff --git browser/locales/en-US/searchplugins/ddg.xml browser/locales/en-US/searchplugins/ddg.xml -new file mode 100644 -index 0000000..d68deb4 ---- /dev/null -+++ browser/locales/en-US/searchplugins/ddg.xml -@@ -0,0 +1,21 @@ -+ -+ -+ DuckDuckGo -+ Search DuckDuckGo -+ UTF-8 -+ data:image/icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA11RgALs6oACbQ9wAj0v8AI9L/ACfQ9wAu0agANdUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzzN4CNdL/oK/z//////////////////////+jsPv/BDXX/wAz0t4AAAAAAAAAAAAAAAAAAAAAAAAAAAAyzvNSduD//////8jK/v+P+Lf/IbQL/17RPP+J3Y//wOKX//////9YeuX/ADLO8wAAAAAAAAAAAAAAAAAw091piOX/8/X9/1Fx5P9xhu//WOWZ/0W9Lv9Lwjn/J8BB/xyDAP9bdfL/9fP//2mI5v8AMNPdAAAAAAc610YRQ9f//////0Zr4P8AGdD/sb32////////////wrv//wAh1/8MPab/ACPc/05r4///////EkPX/wc610YANtWkrr/y/6S48P8AJ9L/AB3R/+/w/v///////////3+D7f8AQeL/AYTw/wFr5/8AMNb/p7Tv/6698v8AM9WkADLW//////8yXt//AC3V/wAw1/////////////z///8A0P7/AKb1/wWI7P8AuPf/AJ3w/zZW3P//////ADHV/wAx2P//////AzrZ/wAu1/84ZOL////////////e////AND//wC1+f8Atff/AZbv/wY62f8ELNf//////wAw1/8AMtn//////wAw2f8ALNn/kKrz////+//cwbH////////////R////Rcb8/wDO/f8A/P//AHzo//////8AMNj/ADXa//////8vXuL/ACna/4yq9///79T/jUkg/9i+r///////r2Q0/7Cozv8BKdr/AirY/zdZ4P//////ADTa/wI72tOuv/T/prr0/wAl2v+JqPb//7yW/+bUxv/9+/n////u//W+n/+Op/L/ADPd/wAv2v+ru/T/r7/0/wI72tMLQd1DEEjg//////9Cbef/ADng///////////////////////R3///AC3g/wAy3v9SeOn//////xFI4P8LQd1DAAAAAAM64PNmiuz/9/j//2mN7f/m7P3///////////9Cb+n/ACXd/wAt3v9rju3//////2iL7P8DOuDzAAAAAAAAAAAAAAAAAT3g/0p16f//////3OT8/3OS7v8AKt3/ACPc/zhn5/+xw/b//////0956v8CPeD/AAAAAAAAAAAAAAAAAAAAAAAAAAAEPODzBUDh/5uz8//7/f7/////////////////prz0/wtF4v8FQeDzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtF5kYDQOOkADrj/wA44v8AOeP/ADzk/wVB46QPReZGAAAAAAAAAAAAAAAAAAAAAPAPAADgBwAAwAMAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAADAAwAA4AcAAPAPAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChIzyAnRNFwJ0TQryND0d8nRNH/J0TR/ydE0f8nRNH/I0PR3ydE0K8nRNFwKEjPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChE00AlRdK/J0XS/ydF0v8nRdL/XXPd/11z3f94i+P/k6Lp/5Oi6f9rf+D/NVDV/ydF0v8nRdL/JUXSvyhE00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAzxAnRNOvJ0XT/ydF0/8lRdK/KEXSYOvu+6/+/v6//v7+v/39/c////////////7+/r/J0fOAKEXSYCVF0r8nRdP/J0XT/ydE068gQM8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlRdUwJ0bT7ydG0/8nRtHPKETTQAAAAADHx8dA2vHhn5TYpN/o9+z/////////////////8PL83ydG0o8lRdUwAAAAAChE00AnRtHPJ0bT/ydG0+8lRdUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKEXVYCdG1P8nRtT/KEbTgAAAAAAmRtZQI0PU38jIyP/F6s//Rrtk/0a7ZP9/yIr/c796/4vLkv+JpNf/M3Kq/zyWh/8zeKTfJkbWUAAAAAAoRtOAJ0bU/ydG1P8oRdVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVF1TAnR9X/J0fV/yhF1WAgQM8QJ0fTrydH1f9CW8//2tra/6Pdsv9Gu2T/Rrtk/0WzWv9Gu2T/Rrtk/0a7ZP9Gu2T/Rrtk/z6egP8nR9X/J0fTryBAzxAoRdVgJ0fV/ydH1f8lRdUwAAAAAAAAAAAAAAAAAAAAAAAAAAAgQM8QJ0fV7ydH1f8oSNVgIEDPECdH1c8nR9X/J0fV/1xwyf/t7e3/o92y/0a7ZP9Gu2T/Ra5U/0a7ZP9Gu2T/Rrtk/0a7ZP9Gu2T/Pp6A/ydH1f8nR9X/J0fVzyBAzxAoSNVgJ0fV/ydH1e8gQM8QAAAAAAAAAAAAAAAAAAAAACdH1q8nR9b/KEjVgCBQzxAnR9bPJ0fW/ydH1v8nR9b/gIzB//r6+v+j3bL/Rrtk/13Ed/+i26//ruG7/z6egf8+noH/Rrtk/0a7ZP86kI//J0fW/ydH1v8nR9b/J0fWzyBQzxAoSNWAJ0fW/ydH1q8AAAAAAAAAAAAAAAAoSNdAJkjW/yZH1s8AAAAAJEfWryZI1v8mSNb/JkjW/yZI1v+jqsT//////+j37P/R7tj////////////W3ff/JkjW/yZI1v8uZbr/PJeI/zJzrP8mSNb/JkjW/yZI1v8mSNb/JEfWrwAAAAAmR9bPJkjW/yhI10AAAAAAAAAAACVI1r8mSNf/KEjXQCZJ1lAmSNf/JkjX/yZI1/8mSNf/JkjX/9HR0f///////////////////////////5Ok6/8mSNf/JkjX/yZI1/8mSNf/JkjX/yZI1/8mSNf/JkjX/yZI1/8mSNf/JknWUChI10AmSNf/JUjWvwAAAAAoSNcgJknY/yZH2M8AAAAAI0nY3yZJ2P8mSdj/JknY/yZJ2P9KZM//39/f////////////////////////////XHfi/yZJ2P8mSdj/JknY/yZJ2P8mSdj/JknY/yZJ2P8mSdj/JknY/yZJ2P8jSdjfAAAAACZH2M8mSdj/KEjXICdJ2HAmSdj/JUjXYCVK2jAmSdj/JknY/yZJ2P8mSdj/JknY/2V4yf/t7e3///////////////////////////9cd+L/HXTj/xSf7/8Nwfj/CdL8/wnS/P8J0vz/ELDz/xt85v8mSdj/JknY/yZJ2P8lStowJUjXYCZJ2P8nSdhwJErZryZK2f8oSNcgJUnajyZK2f8mStn/JkrZ/yZK2f8mStn/iJPA////////////////////////////0ff+/xjV/P8J0vz/Drn1/xiO6/8Yjuv/GI7r/xCw8/8Lyvr/CdL8/xmF6P8mStn/JkrZ/yVJ2o8oSNcgJkrZ/yRK2a8jStrfI0rZ3wAAAAAlSdq/Jkra/yZK2v8mStr/Jkra/yZK2v+xtsf///////////////////////////8o2Pz/CdL8/wvK+v8mStr/Jkra/yZK2v8mStr/Jkra/yZK2v8iW97/Jkra/yZK2v8mStr/JUnavwAAAAAjStnfI0ra3yZK2v8lSdq/AAAAACZH2O8mStr/Jkra/yZK2v8mStr/L1HY/9HR0f///////////////////////////yjY/P8J0vz/CdL8/xCw9P8QsPT/ELD0/xSf7/8ddeX/Jkra/yZK2v8mStr/Jkra/yZK2v8mR9jvAAAAACVJ2r8mStr/Jkvb/yVJ2r8AAAAAJkvb/yZL2/8mS9v/Jkvb/yZL2/9KZtL/4+Pj////////////////////////////4Pn//0fd/f8J0vz/CdL8/wnS/P8J0vz/CdL8/wnS/P8Lyvr/Fpfu/yJc3/8mS9v/Jkvb/yZL2/8AAAAAJUnavyZL2/8mS9z/JUncvwAAAAAmS9z/Jkvc/yZL3P8mS9z/Jkvc/26AyP/x8fH//////////////////////////////////////9H3/v/C9P7/o+7+/2fa+/8Oufb/CdL8/wnS/P8J0vz/CdL8/xiP7P8mS9z/Jkvc/wAAAAAlSdy/Jkvc/yZM3P8lTNy/AAAAACZJ2e8mTNz/Jkzc/yZM3P8mTNz/iJTB////////////qnth/5VaOf/x6eX///////////////////////Hp5f/x6eX/ydL2/yZM3P8kVN7/G37o/xKo8v8QsfT/HXbm/yZM3P8mSdnvAAAAACVM3L8mTNz/I0vc3yZJ2u8AAAAAJUzevyZM3f8mTN3/Jkzd/yZM3f+fqc3///////////+VWjn/v5yI/+re1///////////////////////jk8s/7iRe//J0vb/Jkzd/yZM3f8mTN3/Jkzd/yZM3f8mTN3/Jkzd/yVM3r8AAAAAI0vc3yNL3N8kTd2vJk3d/yhQ3yAlTd2PJk3d/yZN3f8mTd3/Jk3d/6St0v////////////Hp5f/q3tf///////////////////////////+xhm7/49PK/6Cx8P8mTd3/Jk3d/yZN3f8mTd3/Jk3d/yZN3f8mTd3/JU3djyhQ3yAmTd3/JE3drydN33AmTd7/J03fcCVK3zAmTd7/Jk3e/yZN3v8mTd7/pK7S///////Sp5r/////////////////////////////////////////////////T27k/yZN3v8mTd7/Jk3e/yZN3v8mTd7/Jk3e/yZN3v8lSt8wJ03fcCZN3v8nTd9wKFDfICZO3/8mTt3PAAAAACVN3r8mTt//Jk7f/yZO3/+EltX//////+fRyv/SqaD/59LO///////////////////////at63/vIBy/7Glxf8mTt//Jk7f/yZO3/8mTt//Jk7f/yZO3/8mTt//JU3evwAAAAAmTt3PJk7f/yhQ3yAAAAAAJE/dryZO3/8oUN9AKFDfQCZO3/8mTt//Jk7f/zhb2v/o6/T/////////////////////////////////////////////////XHrn/yZO3/8mTt//Jk7f/yZO3/8mTt//Jk7f/yZO3/8oUN9AKFDfQCZO3/8kT92vAAAAAAAAAAAoUN9AJk7g/yZO4M8AAAAAJk/hnyZO4P8mTuD/Jk7g/05v5v/k6fv//////////////////////////////////////3eR7P8mTuD/Jk7g/yZO4P8mTuD/Jk7g/yZO4P8mTuD/Jk/hnwAAAAAmTuDPJk7g/yhQ30AAAAAAAAAAAAAAAAAjT+GfJU/h/yVO4Y8gUN8QIk7gzyVP4f8lT+H/SWnW/0lp1v+bq+H/8fHx/////////////////6Cy8v9OcOb/JU/h/yVP4f8lT+H/JU/h/yVP4f8lT+H/JU/h/yJO4M8gUN8QJU7hjyVP4f8jT+GfAAAAAAAAAAAAAAAAAAAAACBQ3xAlTOHvJU/h/yVQ4mAgUN8QIk7hzyVP4f+ktOv///////////////////////H0/f9phur/JU/h/yVP4f8lT+H/JU/h/yVP4f8lT+H/JU/h/yVP4f8iTuHPIFDfECVQ4mAlT+H/JUzh7yBQ3xAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ3zAlUOLvJVDi/yVQ4mAgUN8QI1Din4mb2//J0/j/ydP4/6299P93ku3/M1vk/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/I1DinyBQ3xAlUOJgJVDi/yVQ4u8lUN8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ5DAlUOLvJVDi/yVQ4o8AAAAAJFDjQCVQ4r8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDivyRQ40AAAAAAJVDijyVQ4v8lUOLvJVDkMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ5DAjUeTfJVHj/yNR5N8kUONAAAAAACVQ5DAmUuOAJVHivyNR5N8lUeP/JVHj/yNR5N8lUeK/JlLjgCVQ5DAAAAAAJFDjQCNR5N8lUeP/I1Hk3yVQ5DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBQ3xAjUuSfJVHk/yVR5P8jUeTfJFLkcChQ5yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoUOcgJFLkcCNR5N8lUeT/JVHk/yNS5J8gUN8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkUONAI1LknyVS5P8lUuT/JVLk/yVS5O8lUeS/JVHkvyVR5L8lUeS/JVLk7yVS5P8lUuT/JVLk/yRS468kUONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFDfECVS5GAjUuWfIlPlzyVS5f8lUuX/JVLl/yVS5f8iU+XPI1LlnyVS5GAgUN8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AA///AAD//AAAP/ggBB/wgAEP4AAAB8AAAAPAAAADiAAAEYAAAAEQAAAIAAAAAAAAAAAgAAAEIAAABCAAAAQgAAAEIAAABCAAAAQAAAAAAAAAABAAAAiAAAABiAAAEcAAAAPAAAAD4AAAB/CAAQ/4IAQf/AfgP/8AAP//wAP/ -+ data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAaCAYAAADovjFxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNTg5QTM3RjNCMjA2ODExODIyQUVEOUNBRDIxQzhDMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxRTYyNzYzMzFBQUUxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxRTYyNzYzMjFBQUUxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDE4MDExNzQwNzIwNjgxMTg3MUZCQUIxMEI4RjU1NzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTU4OUEzN0YzQjIwNjgxMTgyMkFFRDlDQUQyMUM4QzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7hxyCFAAAF4UlEQVR42tSZa2wUVRTH/3dmp92+tnRpCiUgxFoKCDQplsRIfZSgCEHSapBGBCURQvCLWkkQg9GYGNDwTYlGUCMoCA2EtEpEq1KjRJCA9EEElba2FajbN213d+b6vzOzZZfi99mb/DJ3d/aczD33vO6skFLCq6O9YubYXChE4n1+LublaVJO5hLDvRUhjaSefMolno+XU0uOX7WG5BxLSBsXc448Qo6SFWSuywr3O3XvnPqtK3PbkWxGUL5whHzN7WyAZeWQRZBWFz+v4v6+w3sKztFFFpEc0mDLOLJinNIkCocMXppJLhdcCssMw4zu5fOX2XGi6RAa91Rot8aNMsB6kkJOk24yh6seSjZPEHzoZmlfZaaU1pqR/Dsv+XfVlQXf/QbZ67dBz5sKKzxK20TpGBbU5qrtJWXkEllDMqWrK94jPG0ESzpwPTUkl8yQFvZL09oaLlqIG1LDQFoA6Y9vxJQ9Dch+bjus4WEaIwxpmjSGdJKgw1ay39bh6KqJ6U8GTyjnc1aQheQ1UqV2Of3LPTBPfI40RkVsEdmVGzClphmZy9bAitAQlhnvEbBlHR1KV4VbVbydE66sLFI+e8mN5e1Qc7o6IqMIr3sVhVUb/le2e1c1Bk8cgvAxFWjj9rqQvA7HGIVeN4LqA1SJm0iOci/LQDc3aZrg4RZkpBgYHY4iK8OXIHetz4RPi6K/ao4b9PrtkuVKElL9hafDgfuzjrQQk5QxH9hxPphfgAy/gYHByDgDqJGXrSOYlYrAo1WQUTc32LJj+aHM1dlEnvK2EYClpIasiotrmL5URE2JiQEDuw+ewunGjgS5hrNtWLp5P/QHKhk9lh1BDuKmIYAnyWGyxNuJUWI2+ZncG5/djKF+DA45ZX7Hh9/j2HdNCWKzC/JRsXg+sgrmQ4aFjS/LQvqsYejpqiTYepTOn8g8n8c9QQ21zdPiDxD+620IhULIC2TiYl01/CmJy8jNNrCxMh/hjiMIVvYioziK1BlRQJcIHc1B6KscqpLTXN2pPo/nhNjwxR2jIFgdBtouAzPuSDSAZLPUXgX0HYFgLjRIcLnO3sFAb33AJnLdYFNp9w/6Lco97Qm57o7dbKC5wpHffgHuL09srjo22AYY/tOPoQsBiFRgtJ3zljQqo/HoCfbSnULR6eq2vJ4TWskCcnYsJ9hGYIz/1YQR65bTYOARe5FW2EDfqQD+rQ1iqDkN/qlhTHhwAJnFQ6oxiuUWpfMe0uzpPuH3ZUV7eZlFVpPWsRjh+WA4OAV579UiPzghQaajuhgZc1qRWTIKnQ4g0i27N77RlI5rXwQR/seI9cnTyWfkvNfDYR8v35K/iSoBd8eSY8r1doR6escZYfRqLvrPDEDsM+ALWNADJiLdBttoYXuJEPamK13t5D6y1evNUj3pJzvIJqfRYV5XyZGFf/CPlnEy6UXzoLEZYDqEHBCIdBpsmFSsODEgHb1K105Xd4PnD1B86M2kmjSSA/Yi6AlSaBhtPG3/5mTXcTT3nLPnwYcq4KP7X52cgvc3TcWvpQFVDu1UIoWt74CrS+nc7P3qIO00rkLiBfcQdReZCamVqAqRcuUiolzJDx11aO4+gxxjOnqtbmhvzITO+6Yh0DthhF4jYmeHs4Q1FJfd+T6ZLC9VpHOcnk7qyQJSqzzB39WKnr5h+HhS1DUfOvs64RNRVgATlnDawoghYoWl1pWtd3WVJ0WfEDf6pGqhnTdCTGqihCw3urt2h0LdecH0ydB1Aw8XLkfPjRGUTixB4JUtuDDXj0nXokMmsJbyddJJiOoYPZuO0ZdsRlDjsnTa5x/JCDTxEnPfpIH6Y28uXvHYttUFzyNb1cTY+4TyC8ezD37wltT1k5YmXmRkjbhhMI2BcTVpXrS2LJ011jmO/VfgPO7L/GKnfSQ0zU+EaR2SlnWGN53FaRpdw1cKTX+Cxlrr5oMt5G2713Kq7NhLxmQ1gpPvpXyWs2f4oSz+oHHznxrRwOvHnHwkYpK3McJ/AgwADmrfhvtTyFYAAAAASUVORK5CYII= -+ data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAAA0CAYAAABGkOCVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNTg5QTM3RjNCMjA2ODExODIyQUVEOUNBRDIxQzhDMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo4RTdBNDY4ODFBQUQxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4RTdBNDY4NzFBQUQxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTE3MzgzQ0I2QjIwNjgxMTgyMkFFRDlDQUQyMUM4QzMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTU4OUEzN0YzQjIwNjgxMTgyMkFFRDlDQUQyMUM4QzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7NVVBAAAAO30lEQVR42uxdCXRU1Rn+3nszk5nJhmEJAYKyJJJAWFyqUqwWwaJi0aKA9bh0USwunEo9UGmrHG0Vj3LUUoEqFQGXciqgiFCoVtsKeBAJS9JWtrAmIUxmkpnJJDNv6X/fu5O8mUwmkwkoPef9Od/cN/ct9593v/vf//73vhdB0zRY0nU5dktxuzxBMG3zD6GD84XYHYMI1xMuJZQQ2MWzCS6+P0TwE74i/Juwi7CFcCR6gY6qUeMf5t2JjhUsInxjRBhJyUOEewn2NNWIEFYQFlM17rWI8P9FhJsILxGGdHDpOsJ+wmlCA8/LJfQhjCD07uC8Q4TZhI3pEMFmVenXJqMJ7xIGx+UfJawivEf4IsVrXUaYQriLcCHPY8T6gHCYMJVQ3hXlLIvw9ViE1wg/iTt8JeFpuvsHYs4BehLKCAWEHnyXj1BN2EfwmGuMzimi5FeEu+Ouv5zwU6trOD+IUEif/zS1WiZvEWZSzQT4gQ5WYbwVj0+x+I+5dXmNrhPm18miz6WEO+OszdV0zHGLCN8cEZj53mnaXUO4ke72blYTArRS+r6QMLnVFggmu5C6sO5gLl23kp/NuqBNhL6mYy7XTN1OoioXrSo9JzKJ7vVOjTtrhLWEAoMEag5UZaMmyxVqJDKZAFUmKDJBpd0EqinTuZ1hMqGCV34ObZfzstaajmGEnGT5CF+vRbg0zul7krCAN8Ufa6K0vLnkCmSXXQ5nuBmavx6qtw4t+3dC9p6GIJH/LkkQRMm4oNBlC8F8kT/x7Sd4+WYnc5c1ajj3UhBHgofppi/mdbmGmHA75DDC9afh63cxSr4zMeZk+Uw1Au+/jsCGN6C2NEGw2clmk9EWumS4l/PWP43KXkBle2j793wf060fdzwti3CuLAIfy0eHhwtMrZE5jONAZl+lSrUvXI/+w0qTXF1D/Su/QeP65RDsDrISkkGGrlmHf+mOYptVeoJvH04Uw7CIkKYcjSMCVdESSh7gX1lM4JYYEuj1qyKU1w/eUdcC3jPQMnNh65UP9+Dh6FFUin79+8e4ioG/vYszCx80uguyDkLUOqROCDMZ1vPYA5OlVOs/s4hw9onAmncF32YRwXy+/TZhRsy4TVWoD4gAkTA0RYHjuh/Adc0tyBhcAme/iyDGVXLk5GE0bfsr/NRlsK7DIITUFTK8Q7iDb9fCiFAyGQ4+0rCIcPaIUMHJwORb0ISddGfv4kGj2AE8jQ4QaUFkwh3o9/OFcNtSd9M8L8+D/8PVeneBrpHhbtJpFelkHtJWcjJYw8duiSZEMYFQyrfX8BudQ9srTceQJaBclYgQURCc/hiGPPZCl0jApOcjzyJz3GRodA39WubrJ8dKXSfmLDIdjbxSrrt+jGUR0pSqKRdHN9msXxnfvgBGOHiDESgyE4eYIMvwFw5D8bJNyOiOozrjEiiNXmNUkbpVYIGnm2GErb08j4WsR1oWoftSbCLBW5wERe1IYOoW5HseT4sEClmAWk8zzgQ19H7kd5RBfoaqInYWIalM5rr5uK7guhdbROhOz6DpmMVThqd5usiUZ4AqUVNUBHsVIm9oiX5+U4uCpavLsWTVbmz6+FCn5R2vDuhRR7+vCdLYSbAVFpHfqeiGpl15HSOq21OmPP03WF1DmnLk+3rXECS4eYCGBWokFhdKxBqBRgqnR30Xg+e/jF7ZWXjng68wdkwBBvbPTqt8/+a3UbdoLgQHdxxTF+aYkJOBk1xn9huyLIuQvhRyEjB5jaf3dRQgYmi5oC8k0bjl024qSpsETLIn3UHugabPS6BrjTmq43KeZjJCWERIt2sAbjBN6mzSjDn/25JNEKk2B+RIxBiumZw8D5n7lKJDX1bhqjtfwUtvbde/u0aPNSapgK7gNq7rJlPe9RYR0mfCVaa7u53nXZesBgRNQSgUirnM4y9uxogpi/DE4q3kN0SSFrlszQ4cPeXFF/tOwNcCOMuuNBxGVTOxLQFi9biO67rdlHe5RYT0ZQRP63jap+NDBR32gA/+QDBmz5sby2G3iThe68O2L48mLXDGDaPhsElgk9Q9aOiRMbi0HQk0VSDHlCBzqEIbGdqkd5zupRYR0u8ahvH7X8HTkUlNMnUFTs8peLz1Mde5+doShGVVb+VXjipMWuZN1wxD1dZ5WP3MNCPDmWUYBBZfokpXIoJelnt0ED1vrUfeFC/cw5uIK0K8PqN4up+nxdY0dPqSxdNTPO2X3CAQEWqP4nhDY8yuxfOnYM49V2NA3x66ZehSbMHfAi0iwd5XRmZJE1zDQ3BfHIJg582fzU/ZNNQsy0dwj8u8+KmApyd5mmsRoRtxBC7RJec5yboGtjjNUX8aQpMfTeEI3I62RxkGDchLrVD5DJl9sihyNYRwBSTtVQx64RRsubrJIZ2MmmZdgyBqeur7KAeBclfb4IVXPE+jrMy0iNB9CfO0k4dUBDZU0K2C1+uDO793aldXybSfmgOt/nWqyBazywFHL2Mlk6aIrfmMAEqTiMbPcuH9KBtqQNIjB2yoaRJ7nO7WCqWzID2jMZ7OeMC6B3dtFbw+H/qnQAQtuA3q4QlEhpCxUkm00SWiC12FVnLprZ9FKytdaNyejWC522j9ktE1RIljjkfF6R62iJC+syjzhtQjzgPvmAmCCFcNWYQGX+cFRKqhHvi2UYGiHYIkEh9ERBpt1BUokHIUqC0iQv/JgH93JoJ73VACkk4K3TcQDAJoieekorpGdQ9YREifCWzJF5uwGcZzKjpjDqsZZ3UVTsQ5jAkPD+3h/DGWqWmyiCO/LtTNfusSRr2la8Z3xjNJayssebAxqmsJT49Yw8f0ZR9Ph/L0YHKDYKxIdjTUQQg2ItjSkvzw7Al6VwBB1U9Vmw2LIHBz3wqJE4JVvMIcRUKExxJYDCExIQ7G6V5pESH9rqHcNC4fzPMqk4aY2ehBZN1Dle4wJmeCDeKgNYaJFxXYesgYMKcGrqJmvuJN0GMHKlU6iBDOoc3oMaERBffXYcjCEyhaUgV7fjiRHpVc18GmvL1W15A+EzbT51P8G5t3+AOMBaKlnfkKTt1PaMCAvvmdWIVbUbtxKpwFW5B9WRiZpSEdbFpb9lHVUYsX3Sokl9o6nNV9SOoiGj/LRrjWET9aYLKe59xgyttqESF9i2B+fmE6DCK8Sni8U4eRRg6eem9K5QT/G0T9h70hrpaQNaoZWWVNcBc3w5EvG6Fj3qoZAeSAiACNGLyf5KD5uIMZlUTyqknnqOyxiNA9YUvS2PIvtmScRW2qYDzdXJRsCOk8dRgn/P6UChAzaMRgU/WxIKtk/263bgmkbBkZ/WXYsmSoYQGR03a0kAWIOo+6/9B+2HiA6+hC2zL3DXo5Vl12S5aYtmdz8zw3uUUQYPd7IQYa4G8KdVqAY8CFdJaqDwtZ5Yp2Sh0qOY8SQgdp6FhOQ8dKN8Ieux5a1vdLbSOJOJnLdZwd/xssIqTbNRjrQdg6hObo8i+ev45woqPlYvoEkMAdRl/n8QTn0BFQ2VI30ySj4QtorYCoz3HraHUA25fNdFrHdYwuVWvmv8EiwlmQ+Txl3eyjWvv+N8EwUtS7B6+vodOLZ44Za0wv8poz6p1aPpFD4hBTW6A0nR/2KNoiyvNbuyCrHtN2FqNYxKKMfPsF3v9uo+1VyaakXdWH4fF27jA6i8tgc+eyZcwspABBocqn0o4OdOKP9w/A+1P6UL4Wr1M82Kt5tjHdmI48T+a668dYRDg7Yl6ruJbPArJX2RxP5CYYRKhCYyDQmv3+oZX44ear8NwXj2JX7T9iTuk5/lbYI0QAIoFiF7B2al+svKc/avpm4MBQt24dhI7XLTId7uY6re1AZ2vSKX2TEOOJreAmlz0nwB5Jn0k3fhkdMYa2T7CGHTt0oBbY1AS7tw4NgSbkZrnpcmTiaWSw37ML+zw70dPZB9cXTseO2h04ekkl1CuK4WzW4AxrCGRJsMlGxbNtmU1IaUg0sdBMGKMZpc6k/ZNMUdEVMaMTq0bPWlcx0WSK2buMLtOMF1+VEVpiuwaCaMw71PPuQSC/QRSogkU7HGIGGsM+vLhjCU4E9xA9FDhY2MAmoMkt6pbBsAKGjxhyiom6gxZetofrstS0b2K7YapVhWdN2JPGU03f2TOQF9FdP6inxhNGsYEl8hPq+cjBJbn5HoEIQZVNpBA0I5XYs4m84hPNHdjldpm+uLLN73KaynW1iHAOZS3d/CdNzZLNUJZR911D23mEv7eNAUVknGwbOWTY3K0ntf7RiSp7uQb/kwUFClt4IpF1IIuish5BbGcKWBl5epmsq9JwyLTvyTg/wSLCOZQFdM+Xta5gNx6SncKH8+MJP6IGrqj6GsZjCAQNh7GXKx+qpkIhyKqMiBpGVoYbh2tCOF4XQq1Xw3TvtXjouUMY94kXeZ4wIuQ4OshnsBPoeop+baMMjZe5l0cZWMYyRN/llEAsZzFNUZOP3R/g5jkaZVzPI3iz6LQVZOhXkFPwjBCJzHOcqYbPH0J+1kDI9McmlAbmFGFG8QMY1etK1ARrdZ8hz2WsITn05gaM++g0vkNk8OfY0ewSmWV4lnb9UmsLJrJ5j1kmfdhr/OZFX76JBD2M9exjmlLxvWGpOJCzeKVExasHmzRsNcKMMjzjb19aMO2+mcVFQ7Du2EqUXDAGw7LLOrxmw5b1OPbb2RBtjs8FUWTkekN/a6Mxr8CcwD/DeDw/Kg/Srlc609UiwrklAvtgD8J8SjAvVd5LRHiE8Gn0NTqZKz692aGq853ZOSMycnIzJWcGbHx5e0RWEGluQaTB63H7z7ztfe/Nh71b1vE3ruk24BrCy+DvOuBSr+cL2J/KGxQsIpx7IkTlecKc2AO0esJiqMrrUJQq5hgyS2HUidY+EiUK+pPPomRjaxgH0cjjXhiv+o9fD88inL9oHaBYRDiviMA22aNMiwi3xRGCgU0oUJehB3vY01M0xNP4ZITAnkPIp8Y/nLZHkhWYqAce2stfWGBLMEc0LSKcl0SISj5vsewVd5ndVCXIHdHno/EBIc6QWEQ4f4nQaghIriDcCOMfelyaYvHsX/mwf9DxIeHz+NcopUOE/wkwAAeR3z4C+zelAAAAAElFTkSuQmCC -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1061736 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1073709 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1073709 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1073709 (nonexistent) @@ -1,18 +0,0 @@ -diff --git mfbt/Atomics.h mfbt/Atomics.h -index 495a9d3..c7f7601 100644 ---- mfbt/Atomics.h -+++ mfbt/Atomics.h -@@ -34,10 +34,12 @@ - * loose typing of the atomic builtins. GCC 4.5 and 4.6 lacks inline - * definitions for unspecialized std::atomic and causes linking errors. - * Therefore, we require at least 4.7.0 for using libstdc++. -+ * -+ * libc++ is only functional with clang. - */ - # if MOZ_USING_LIBSTDCXX && MOZ_LIBSTDCXX_VERSION_AT_LEAST(4, 7, 0) - # define MOZ_HAVE_CXX11_ATOMICS --# elif MOZ_USING_LIBCXX -+# elif MOZ_USING_LIBCXX && defined(__clang__) - # define MOZ_HAVE_CXX11_ATOMICS - # endif - /* Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1073709 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1021171 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1021171 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1021171 (nonexistent) @@ -1,193 +0,0 @@ -commit dd19f59 -Author: Trevor Saunders -Date: Fri Jun 6 15:31:30 2014 -0400 - - bug 1021171 - don't return nulllptr in functions returning bool r=bz,waldo ---- - js/src/builtin/TypedObject.cpp | 32 ++++++++++++++++---------------- - js/src/frontend/BytecodeCompiler.cpp | 2 +- - js/xpconnect/wrappers/XrayWrapper.cpp | 2 +- - netwerk/ipc/NeckoParent.cpp | 2 +- - 4 files changed, 19 insertions(+), 19 deletions(-) - -diff --git js/src/builtin/TypedObject.cpp js/src/builtin/TypedObject.cpp -index 9e284b9..7a0a7fc 100644 ---- js/src/builtin/TypedObject.cpp -+++ js/src/builtin/TypedObject.cpp -@@ -710,12 +710,12 @@ ArrayMetaTypeDescr::construct(JSContext *cx, unsigned argc, Value *vp) - contents.append(")"); - RootedAtom stringRepr(cx, contents.finishAtom()); - if (!stringRepr) -- return nullptr; -+ return false; - - // Extract ArrayType.prototype - RootedObject arrayTypePrototype(cx, GetPrototype(cx, arrayTypeGlobal)); - if (!arrayTypePrototype) -- return nullptr; -+ return false; - - // Create the instance of ArrayType - Rooted obj(cx); -@@ -728,7 +728,7 @@ ArrayMetaTypeDescr::construct(JSContext *cx, unsigned argc, Value *vp) - if (!JSObject::defineProperty(cx, obj, cx->names().length, - UndefinedHandleValue, nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - args.rval().setObject(*obj); - return true; -@@ -762,7 +762,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp) - if (!size.isValid()) { - JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, - JSMSG_TYPEDOBJECT_TOO_BIG); -- return nullptr; -+ return false; - } - - // Construct a canonical string `new ArrayType().dimension(N)`: -@@ -775,7 +775,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp) - contents.append(")"); - RootedAtom stringRepr(cx, contents.finishAtom()); - if (!stringRepr) -- return nullptr; -+ return false; - - // Create the sized type object. - Rooted obj(cx); -@@ -793,7 +793,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp) - if (!JSObject::defineProperty(cx, obj, cx->names().length, - lengthVal, nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - // Add `unsized` property, which is a link from the sized - // array to the unsized array. -@@ -801,7 +801,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp) - if (!JSObject::defineProperty(cx, obj, cx->names().unsized, - unsizedTypeDescrValue, nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - args.rval().setObject(*obj); - return true; -@@ -1253,7 +1253,7 @@ DefineSimpleTypeDescr(JSContext *cx, - Rooted proto(cx); - proto = NewObjectWithProto(cx, objProto, nullptr, TenuredObject); - if (!proto) -- return nullptr; -+ return false; - proto->initTypeDescrSlot(*descr); - descr->initReservedSlot(JS_DESCR_SLOT_TYPROTO, ObjectValue(*proto)); - -@@ -1358,14 +1358,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle global) - #define BINARYDATA_SCALAR_DEFINE(constant_, type_, name_) \ - if (!DefineSimpleTypeDescr(cx, global, module, constant_, \ - cx->names().name_)) \ -- return nullptr; -+ return false; - JS_FOR_EACH_SCALAR_TYPE_REPR(BINARYDATA_SCALAR_DEFINE) - #undef BINARYDATA_SCALAR_DEFINE - - #define BINARYDATA_REFERENCE_DEFINE(constant_, type_, name_) \ - if (!DefineSimpleTypeDescr(cx, global, module, constant_, \ - cx->names().name_)) \ -- return nullptr; -+ return false; - JS_FOR_EACH_REFERENCE_TYPE_REPR(BINARYDATA_REFERENCE_DEFINE) - #undef BINARYDATA_REFERENCE_DEFINE - -@@ -1375,14 +1375,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle global) - arrayType = DefineMetaTypeDescr( - cx, global, module, TypedObjectModuleObject::ArrayTypePrototype); - if (!arrayType) -- return nullptr; -+ return false; - - RootedValue arrayTypeValue(cx, ObjectValue(*arrayType)); - if (!JSObject::defineProperty(cx, module, cx->names().ArrayType, - arrayTypeValue, - nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - // StructType. - -@@ -1390,14 +1390,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle global) - structType = DefineMetaTypeDescr( - cx, global, module, TypedObjectModuleObject::StructTypePrototype); - if (!structType) -- return nullptr; -+ return false; - - RootedValue structTypeValue(cx, ObjectValue(*structType)); - if (!JSObject::defineProperty(cx, module, cx->names().StructType, - structTypeValue, - nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - // Everything is setup, install module on the global object: - RootedValue moduleValue(cx, ObjectValue(*module)); -@@ -1407,7 +1407,7 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle global) - nullptr, nullptr, - 0)) - { -- return nullptr; -+ return false; - } - - return module; -@@ -2449,7 +2449,7 @@ TypedObject::constructUnsized(JSContext *cx, unsigned int argc, Value *vp) - if (length < 0) { - JS_ReportErrorNumber(cx, js_GetErrorMessage, - nullptr, JSMSG_TYPEDOBJECT_BAD_ARGS); -- return nullptr; -+ return false; - } - Rooted obj(cx, createZeroed(cx, callee, length)); - if (!obj) -diff --git js/src/frontend/BytecodeCompiler.cpp js/src/frontend/BytecodeCompiler.cpp -index 5aacc23..aed45ca 100644 ---- js/src/frontend/BytecodeCompiler.cpp -+++ js/src/frontend/BytecodeCompiler.cpp -@@ -544,7 +544,7 @@ CompileFunctionBody(JSContext *cx, MutableHandleFunction fun, const ReadOnlyComp - - RootedScriptSource sourceObject(cx, CreateScriptSourceObject(cx, options)); - if (!sourceObject) -- return nullptr; -+ return false; - ScriptSource* ss = sourceObject->source(); - - SourceCompressionTask sct(cx); -diff --git js/xpconnect/wrappers/XrayWrapper.cpp js/xpconnect/wrappers/XrayWrapper.cpp -index fd6458b..ab48770 100644 ---- js/xpconnect/wrappers/XrayWrapper.cpp -+++ js/xpconnect/wrappers/XrayWrapper.cpp -@@ -363,7 +363,7 @@ public: - { - JSAutoCompartment ac(cx, target); - if (!JS_GetClassPrototype(cx, key, protop)) -- return nullptr; -+ return false; - } - return JS_WrapObject(cx, protop); - } -diff --git netwerk/ipc/NeckoParent.cpp netwerk/ipc/NeckoParent.cpp -index 96dbb1d..ef3293b 100644 ---- netwerk/ipc/NeckoParent.cpp -+++ netwerk/ipc/NeckoParent.cpp -@@ -365,7 +365,7 @@ NeckoParent::RecvPRtspChannelConstructor( - RtspChannelParent* p = static_cast(aActor); - return p->Init(aConnectArgs); - #else -- return nullptr; -+ return false; - #endif - } - Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1021171 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1103858 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1103858 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1103858 (nonexistent) @@ -1,42 +0,0 @@ -diff --git configure.in configure.in -index b2b45e7..dcfdfb7 100644 ---- configure.in -+++ configure.in -@@ -8346,7 +8346,7 @@ case "$OS_TARGET" in - NECKO_WIFI=1 - fi - ;; -- Darwin|FreeBSD|SunOS|WINNT) -+ Darwin|DragonFly|FreeBSD|SunOS|WINNT) - NECKO_WIFI=1 - ;; - Linux) -diff --git netwerk/wifi/moz.build netwerk/wifi/moz.build -index d4de063..3949380 100644 ---- netwerk/wifi/moz.build -+++ netwerk/wifi/moz.build -@@ -35,7 +35,7 @@ if CONFIG['OS_ARCH'] == 'Darwin': - UNIFIED_SOURCES += [ - 'osx_corewlan.mm', - ] --elif CONFIG['OS_ARCH'] == 'FreeBSD': -+elif CONFIG['OS_ARCH'] in ('DragonFly', 'FreeBSD'): - UNIFIED_SOURCES += [ - 'nsWifiScannerFreeBSD.cpp', - ] -diff --git netwerk/wifi/nsWifiScannerFreeBSD.cpp netwerk/wifi/nsWifiScannerFreeBSD.cpp -index bdf171e..4185d69 100644 ---- netwerk/wifi/nsWifiScannerFreeBSD.cpp -+++ netwerk/wifi/nsWifiScannerFreeBSD.cpp -@@ -13,7 +13,11 @@ - #include - #include - #include -+#ifdef __DragonFly__ -+#include -+#else - #include -+#endif - - #include - #include Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1103858 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1041381 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1041381 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1041381 (nonexistent) @@ -1,12 +0,0 @@ -diff --git config/rules.mk config/rules.mk -index 1dee8c3..4d67eda 100644 ---- config/rules.mk -+++ config/rules.mk -@@ -822,6 +822,7 @@ endif - ifdef DTRACE_PROBE_OBJ - EXTRA_DEPS += $(DTRACE_PROBE_OBJ) - OBJS += $(DTRACE_PROBE_OBJ) -+EXCLUDED_OBJS += $(DTRACE_PROBE_OBJ) - endif - - $(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS) Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1041381 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1041795 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1041795 (revision 392766) +++ branches/2015Q3/www/firefox-esr/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: branches/2015Q3/www/firefox-esr/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: branches/2015Q3/www/firefox-esr/files/patch-bug1013675 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1013675 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1013675 (nonexistent) @@ -1,88 +0,0 @@ -diff --git xpcom/base/nsDebugImpl.cpp xpcom/base/nsDebugImpl.cpp -index 13a286f..293bd73 100644 ---- xpcom/base/nsDebugImpl.cpp -+++ xpcom/base/nsDebugImpl.cpp -@@ -45,12 +45,43 @@ - #endif - #endif - --#if defined(XP_MACOSX) -+#if defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \ -+ || defined(__NetBSD__) || defined(__OpenBSD__) - #include - #include -+#include - #include - #endif - -+#if defined(__OpenBSD__) -+#include -+#endif -+ -+#if defined(__DragonFly__) || defined(__FreeBSD__) -+#include -+#endif -+ -+#if defined(__NetBSD__) -+#undef KERN_PROC -+#define KERN_PROC KERN_PROC2 -+#define KINFO_PROC struct kinfo_proc2 -+#else -+#define KINFO_PROC struct kinfo_proc -+#endif -+ -+#if defined(XP_MACOSX) -+#define KP_FLAGS kp_proc.p_flag -+#elif defined(__DragonFly__) -+#define KP_FLAGS kp_flags -+#elif defined(__FreeBSD__) -+#define KP_FLAGS ki_flag -+#elif defined(__OpenBSD__) && !defined(_P_TRACED) -+#define KP_FLAGS p_psflags -+#define P_TRACED PS_TRACED -+#else -+#define KP_FLAGS p_flag -+#endif -+ - #include "mozilla/mozalloc_abort.h" - - static void -@@ -144,16 +175,22 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult) - - #if defined(XP_WIN) - *aResult = ::IsDebuggerPresent(); --#elif defined(XP_MACOSX) -+#elif defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \ -+ || defined(__NetBSD__) || defined(__OpenBSD__) - // Specify the info we're looking for -- int mib[4]; -- mib[0] = CTL_KERN; -- mib[1] = KERN_PROC; -- mib[2] = KERN_PROC_PID; -- mib[3] = getpid(); -+ int mib[] = { -+ CTL_KERN, -+ KERN_PROC, -+ KERN_PROC_PID, -+ getpid(), -+#if defined(__NetBSD__) || defined(__OpenBSD__) -+ sizeof(KINFO_PROC), -+ 1, -+#endif -+ }; - size_t mibSize = sizeof(mib) / sizeof(int); - -- struct kinfo_proc info; -+ KINFO_PROC info; - size_t infoSize = sizeof(info); - memset(&info, 0, infoSize); - -@@ -163,7 +200,7 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult) - return NS_OK; - } - -- if (info.kp_proc.p_flag & P_TRACED) { -+ if (info.KP_FLAGS & P_TRACED) { - *aResult = true; - } - #endif Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1013675 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1082199 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1082199 (revision 392766) +++ branches/2015Q3/www/firefox-esr/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: branches/2015Q3/www/firefox-esr/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: branches/2015Q3/www/firefox-esr/files/patch-bug1015547 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1015547 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1015547 (nonexistent) @@ -1,95 +0,0 @@ -diff --git configure.in configure.in -index 7bed45f..053de17 100644 ---- configure.in -+++ configure.in -@@ -2950,7 +2950,7 @@ dnl Checks for library functions. - dnl ======================================================== - AC_PROG_GCC_TRADITIONAL - AC_FUNC_MEMCMP --AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r) -+AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r arc4random arc4random_buf) - - dnl check for clock_gettime(), the CLOCK_MONOTONIC clock - AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC), -diff --git xpcom/base/nsUUIDGenerator.cpp xpcom/base/nsUUIDGenerator.cpp -index 0687344..ca3ff8b 100644 ---- xpcom/base/nsUUIDGenerator.cpp -+++ xpcom/base/nsUUIDGenerator.cpp -@@ -15,6 +15,10 @@ - - #include "nsUUIDGenerator.h" - -+#ifdef ANDROID -+extern "C" NS_EXPORT void arc4random_buf(void *, size_t); -+#endif -+ - using namespace mozilla; - - NS_IMPL_ISUPPORTS1(nsUUIDGenerator, nsIUUIDGenerator) -@@ -34,7 +38,7 @@ nsUUIDGenerator::Init() - // We're a service, so we're guaranteed that Init() is not going - // to be reentered while we're inside Init(). - --#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID) -+#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM) - /* initialize random number generator using NSPR random noise */ - unsigned int seed; - -@@ -67,7 +71,7 @@ nsUUIDGenerator::Init() - return NS_ERROR_FAILURE; - #endif - --#endif /* non XP_WIN and non XP_MACOSX */ -+#endif /* non XP_WIN and non XP_MACOSX and non ARC4RANDOM */ - - return NS_OK; - } -@@ -114,13 +118,16 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id) - * back to it; instead, we use the value returned when we called - * initstate, since older glibc's have broken setstate() return values - */ --#ifndef ANDROID -+#ifndef HAVE_ARC4RANDOM - setstate(mState); - #endif - -+#ifdef HAVE_ARC4RANDOM_BUF -+ arc4random_buf(id, sizeof(nsID)); -+#else /* HAVE_ARC4RANDOM_BUF */ - size_t bytesLeft = sizeof(nsID); - while (bytesLeft > 0) { --#ifdef ANDROID -+#ifdef HAVE_ARC4RANDOM - long rval = arc4random(); - const size_t mRBytes = 4; - #else -@@ -141,6 +148,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id) - - bytesLeft -= toWrite; - } -+#endif /* HAVE_ARC4RANDOM_BUF */ - - /* Put in the version */ - id->m2 &= 0x0fff; -@@ -150,7 +158,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id) - id->m3[0] &= 0x3f; - id->m3[0] |= 0x80; - --#ifndef ANDROID -+#ifndef HAVE_ARC4RANDOM - /* Restore the previous RNG state */ - setstate(mSavedState); - #endif -diff --git xpcom/base/nsUUIDGenerator.h xpcom/base/nsUUIDGenerator.h -index 6a24212..68ed6f2 100644 ---- xpcom/base/nsUUIDGenerator.h -+++ xpcom/base/nsUUIDGenerator.h -@@ -27,7 +27,7 @@ private: - protected: - - mozilla::Mutex mLock; --#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID) -+#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM) - char mState[128]; - char *mSavedState; - uint8_t mRBytes; Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1015547 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1026828 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1026828 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1026828 (nonexistent) @@ -1,20 +0,0 @@ -diff --git storage/src/moz.build storage/src/moz.build -index 4cd2551..5c40536 100644 ---- storage/src/moz.build -+++ storage/src/moz.build -@@ -50,11 +50,14 @@ FINAL_LIBRARY = 'storagecomps' - # (such as NSS) might trigger an initialization of sqlite and allocation - # of memory using the default allocator, prior to the storage service - # registering its allocator, causing memory management failures (bug 938730). -+# However, this is not an issue if both the jemalloc allocator and the default -+# allocator are the same thing. - # - # Note: On Windows our sqlite build assumes we use jemalloc. If you disable - # MOZ_STORAGE_MEMORY on Windows, you will also need to change the "ifdef - # MOZ_MEMORY" options in db/sqlite3/src/Makefile.in. --if CONFIG['MOZ_MEMORY'] and not CONFIG['MOZ_NATIVE_SQLITE']: -+if CONFIG['MOZ_MEMORY'] and (not CONFIG['MOZ_NATIVE_SQLITE'] -+ or CONFIG['MOZ_NATIVE_JEMALLOC']): - if CONFIG['OS_TARGET'] != 'Android': - DEFINES['MOZ_STORAGE_MEMORY'] = True - Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1026828 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1046224 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1046224 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1046224 (nonexistent) @@ -1,26 +0,0 @@ -diff --git configure.in configure.in -index 1853029..559bd45 100644 ---- configure.in -+++ configure.in -@@ -2651,7 +2651,7 @@ if test "$ac_cv_sockaddr_sa_len" = true ; then - AC_DEFINE(HAVE_SA_LEN) - fi - --AC_ARG_ENABLE(dtrace, -+MOZ_ARG_ENABLE_BOOL(dtrace, - [ --enable-dtrace build with dtrace support if available (default=no)], - [enable_dtrace="yes"],) - if test "x$enable_dtrace" = "xyes"; then -diff --git js/src/configure.in js/src/configure.in -index 134dfd3..682c1fb 100644 ---- js/src/configure.in -+++ js/src/configure.in -@@ -2153,7 +2153,7 @@ dnl Quota support - MOZ_CHECK_HEADERS(sys/quota.h) - MOZ_CHECK_HEADERS(linux/quota.h) - --AC_ARG_ENABLE(dtrace, -+MOZ_ARG_ENABLE_BOOL(dtrace, - [ --enable-dtrace build with dtrace support if available (default=no)], - [enable_dtrace="yes"],) - if test "x$enable_dtrace" = "xyes"; then Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1046224 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1125579 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1125579 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1125579 (nonexistent) @@ -1,14 +0,0 @@ ---- js/src/assembler/jit/ExecutableAllocator.h~ -+++ js/src/assembler/jit/ExecutableAllocator.h -@@ -454,6 +454,11 @@ public: - { - User::IMB_Range(code, static_cast(code) + size); - } -+#elif WTF_CPU_ARM_TRADITIONAL && (WTF_OS_FREEBSD || WTF_OS_NETBSD) -+ static void cacheFlush(void* code, size_t size) -+ { -+ __clear_cache(code, reinterpret_cast(code) + size); -+ } - #elif WTF_CPU_ARM_TRADITIONAL && WTF_OS_LINUX && WTF_COMPILER_RVCT - static __asm void cacheFlush(void* code, size_t size); - #elif WTF_CPU_ARM_TRADITIONAL && (WTF_OS_LINUX || WTF_OS_ANDROID) && WTF_COMPILER_GCC Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1125579 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1125580 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1125580 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1125580 (nonexistent) @@ -1,11 +0,0 @@ ---- js/src/jit/arm/Architecture-arm.cpp~ -+++ js/src/jit/arm/Architecture-arm.cpp -@@ -17,7 +17,7 @@ - - #define HWCAP_USE_HARDFP_ABI (1 << 28) - --#if !(defined(ANDROID) || defined(MOZ_B2G)) && !defined(JS_ARM_SIMULATOR) -+#if defined(__linux__) && !defined(ANDROID) && !defined(MOZ_B2G) && !defined(JS_ARM_SIMULATOR) - #define HWCAP_ARMv7 (1 << 29) - #include - #else Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1125580 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1067377 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1067377 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1067377 (nonexistent) @@ -1,78 +0,0 @@ -diff --git content/media/encoder/VP8TrackEncoder.cpp content/media/encoder/VP8TrackEncoder.cpp -index 452821c..ede21c5 100644 ---- content/media/encoder/VP8TrackEncoder.cpp -+++ content/media/encoder/VP8TrackEncoder.cpp -@@ -84,7 +84,7 @@ VP8TrackEncoder::Init(int32_t aWidth, int32_t aHeight, int32_t aDisplayWidth, - // Creating a wrapper to the image - setting image data to NULL. Actual - // pointer will be set in encode. Setting align to 1, as it is meaningless - // (actual memory is not allocated). -- vpx_img_wrap(mVPXImageWrapper, IMG_FMT_I420, -+ vpx_img_wrap(mVPXImageWrapper, VPX_IMG_FMT_I420, - mFrameWidth, mFrameHeight, 1, nullptr); - - config.g_w = mFrameWidth; -@@ -239,9 +239,9 @@ void VP8TrackEncoder::PrepareMutedFrame() - uint8_t *cb = mMuteFrame.Elements() + yPlaneSize; - uint8_t *cr = mMuteFrame.Elements() + yPlaneSize + uvPlaneSize; - -- mVPXImageWrapper->planes[PLANE_Y] = y; -- mVPXImageWrapper->planes[PLANE_U] = cb; -- mVPXImageWrapper->planes[PLANE_V] = cr; -+ mVPXImageWrapper->planes[VPX_PLANE_Y] = y; -+ mVPXImageWrapper->planes[VPX_PLANE_U] = cb; -+ mVPXImageWrapper->planes[VPX_PLANE_V] = cr; - mVPXImageWrapper->stride[VPX_PLANE_Y] = mFrameWidth; - mVPXImageWrapper->stride[VPX_PLANE_U] = halfWidth; - mVPXImageWrapper->stride[VPX_PLANE_V] = halfWidth; -@@ -297,9 +297,9 @@ nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk) - const PlanarYCbCrImage::Data *data = yuv->GetData(); - - if (isYUV420(data) && !data->mCbSkip) { // 420 planar -- mVPXImageWrapper->planes[PLANE_Y] = data->mYChannel; -- mVPXImageWrapper->planes[PLANE_U] = data->mCbChannel; -- mVPXImageWrapper->planes[PLANE_V] = data->mCrChannel; -+ mVPXImageWrapper->planes[VPX_PLANE_Y] = data->mYChannel; -+ mVPXImageWrapper->planes[VPX_PLANE_U] = data->mCbChannel; -+ mVPXImageWrapper->planes[VPX_PLANE_V] = data->mCrChannel; - mVPXImageWrapper->stride[VPX_PLANE_Y] = data->mYStride; - mVPXImageWrapper->stride[VPX_PLANE_U] = data->mCbCrStride; - mVPXImageWrapper->stride[VPX_PLANE_V] = data->mCbCrStride; -@@ -355,9 +355,9 @@ nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk) - return NS_ERROR_NOT_IMPLEMENTED; - } - -- mVPXImageWrapper->planes[PLANE_Y] = y; -- mVPXImageWrapper->planes[PLANE_U] = cb; -- mVPXImageWrapper->planes[PLANE_V] = cr; -+ mVPXImageWrapper->planes[VPX_PLANE_Y] = y; -+ mVPXImageWrapper->planes[VPX_PLANE_U] = cb; -+ mVPXImageWrapper->planes[VPX_PLANE_V] = cr; - mVPXImageWrapper->stride[VPX_PLANE_Y] = mFrameWidth; - mVPXImageWrapper->stride[VPX_PLANE_U] = halfWidth; - mVPXImageWrapper->stride[VPX_PLANE_V] = halfWidth; -diff --git media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc -index d9c3a22..75195ae 100644 ---- media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc -+++ media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc -@@ -180,7 +180,7 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst, - // Creating a wrapper to the image - setting image data to NULL. Actual - // pointer will be set in encode. Setting align to 1, as it is meaningless - // (actual memory is not allocated). -- raw_ = vpx_img_wrap(NULL, IMG_FMT_I420, codec_.width, codec_.height, -+ raw_ = vpx_img_wrap(NULL, VPX_IMG_FMT_I420, codec_.width, codec_.height, - 1, NULL); - // populate encoder configuration with default values - if (vpx_codec_enc_config_default(vpx_codec_vp8_cx(), config_, 0)) { -@@ -349,9 +349,9 @@ int VP8EncoderImpl::Encode(const I420VideoFrame& input_image, - } - // Image in vpx_image_t format. - // Input image is const. VP8's raw image is not defined as const. -- raw_->planes[PLANE_Y] = const_cast(input_image.buffer(kYPlane)); -- raw_->planes[PLANE_U] = const_cast(input_image.buffer(kUPlane)); -- raw_->planes[PLANE_V] = const_cast(input_image.buffer(kVPlane)); -+ raw_->planes[VPX_PLANE_Y] = const_cast(input_image.buffer(kYPlane)); -+ raw_->planes[VPX_PLANE_U] = const_cast(input_image.buffer(kUPlane)); -+ raw_->planes[VPX_PLANE_V] = const_cast(input_image.buffer(kVPlane)); - // TODO(mikhal): Stride should be set in initialization. - raw_->stride[VPX_PLANE_Y] = input_image.stride(kYPlane); - raw_->stride[VPX_PLANE_U] = input_image.stride(kUPlane); Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1067377 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1013882 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1013882 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1013882 (revision 392767) @@ -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: branches/2015Q3/www/firefox-esr/files/patch-bug1021761 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1021761 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1021761 (revision 392767) @@ -1,1091 +1,1102 @@ diff --git configure.in configure.in index 48e60c0..ec08417 100644 --- configure.in +++ configure.in @@ -5591,6 +5591,67 @@ fi AC_SUBST(MOZ_WEBM_ENCODER) dnl ================================== +dnl = Check OSS availability +dnl ================================== + +dnl If using Linux, Solaris or BSDs, ensure that OSS is available +case "$OS_TARGET" in +Linux|SunOS|DragonFly|FreeBSD|NetBSD|GNU/kFreeBSD) + MOZ_OSS=1 + ;; +esac + +MOZ_ARG_WITH_STRING(oss, +[ --with-oss[=PFX] Enable OpenSoundSystem support [installed at prefix PFX]], + OSSPREFIX=$withval) + +if test -n "$OSSPREFIX"; then + if test "$OSSPREFIX" != "no"; then + MOZ_OSS=1 + else + MOZ_OSS= + fi +fi + +_SAVE_CFLAGS=$CFLAGS +_SAVE_LIBS=$LIBS +if test -n "$MOZ_OSS"; then + dnl Prefer 4Front implementation + AC_MSG_CHECKING([MOZ_OSS_CFLAGS]) + if test "$OSSPREFIX" != "yes"; then + oss_conf=${OSSPREFIX%/usr}/etc/oss.conf + if test -f "$oss_conf"; then + . "$oss_conf" + else + OSSLIBDIR=$OSSPREFIX/lib/oss + fi + if test -d "$OSSLIBDIR"; then + MOZ_OSS_CFLAGS="$MOZ_OSS_CFLAGS -I$OSSLIBDIR/include" + fi + fi + AC_MSG_RESULT([$MOZ_OSS_CFLAGS]) + + CFLAGS="$CFLAGS $MOZ_OSS_CFLAGS" + MOZ_CHECK_HEADERS(sys/soundcard.h soundcard.h) + + if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \ + "$ac_cv_header_soundcard_h" != "yes"; then + AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --disable-ogg --disable-wave --disable-webm.]) + fi + + dnl Assume NetBSD implementation over SunAudio + AC_CHECK_LIB(ossaudio, _oss_ioctl, + [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound") + MOZ_OSS_LIBS="$MOZ_OSS_LIBS -lossaudio"]) +fi +CFLAGS=$_SAVE_CFLAGS +LIBS=$_SAVE_LIBS + +AC_SUBST(MOZ_OSS) +AC_SUBST_LIST(MOZ_OSS_CFLAGS) +AC_SUBST_LIST(MOZ_OSS_LIBS) + +dnl ================================== dnl = Check alsa availability on Linux dnl ================================== diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS index b441e8a..950d9e5 100644 --- media/libcubeb/AUTHORS +++ media/libcubeb/AUTHORS @@ -4,3 +4,4 @@ Michael Wu Paul Adenot David Richards Sebastien Alaiwan +Evgeniy Vodolazskiy diff --git media/libcubeb/src/cubeb.c media/libcubeb/src/cubeb.c index 9c3adcc..45d765b 100644 --- media/libcubeb/src/cubeb.c +++ media/libcubeb/src/cubeb.c @@ -54,6 +54,9 @@ int opensl_init(cubeb ** context, char const * context_name); #if defined(USE_AUDIOTRACK) int audiotrack_init(cubeb ** context, char const * context_name); #endif +#if defined(USE_OSS) +int oss_init(cubeb ** context, char const * context_name); +#endif int validate_stream_params(cubeb_stream_params stream_params) @@ -120,6 +123,9 @@ cubeb_init(cubeb ** context, char const * context_name) #if defined(USE_AUDIOTRACK) audiotrack_init, #endif +#if defined(USE_OSS) + oss_init, +#endif }; int i; diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c index a962553..1f780f4 100644 --- media/libcubeb/src/cubeb_alsa.c +++ media/libcubeb/src/cubeb_alsa.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -24,6 +25,50 @@ #define ALSA_PA_PLUGIN "ALSA <-> PulseAudio PCM I/O Plugin" +#ifdef DISABLE_LIBASOUND_DLOPEN +#define WRAP(x) x +#else +#define WRAP(x) cubeb_##x +#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x +MAKE_TYPEDEF(snd_config); +MAKE_TYPEDEF(snd_config_add); +MAKE_TYPEDEF(snd_config_copy); +MAKE_TYPEDEF(snd_config_delete); +MAKE_TYPEDEF(snd_config_get_id); +MAKE_TYPEDEF(snd_config_get_string); +MAKE_TYPEDEF(snd_config_imake_integer); +MAKE_TYPEDEF(snd_config_search); +MAKE_TYPEDEF(snd_config_search_definition); +MAKE_TYPEDEF(snd_lib_error_set_handler); +MAKE_TYPEDEF(snd_pcm_avail_update); +MAKE_TYPEDEF(snd_pcm_close); +MAKE_TYPEDEF(snd_pcm_delay); +MAKE_TYPEDEF(snd_pcm_drain); +MAKE_TYPEDEF(snd_pcm_frames_to_bytes); +MAKE_TYPEDEF(snd_pcm_get_params); +/* snd_pcm_hw_params_alloca is actually a macro */ +/* MAKE_TYPEDEF(snd_pcm_hw_params_alloca); */ +MAKE_TYPEDEF(snd_pcm_hw_params_sizeof); +#define snd_pcm_hw_params_sizeof cubeb_snd_pcm_hw_params_sizeof +MAKE_TYPEDEF(snd_pcm_hw_params_any); +MAKE_TYPEDEF(snd_pcm_hw_params_get_channels_max); +MAKE_TYPEDEF(snd_pcm_hw_params_get_rate); +MAKE_TYPEDEF(snd_pcm_hw_params_set_rate_near); +MAKE_TYPEDEF(snd_pcm_nonblock); +MAKE_TYPEDEF(snd_pcm_open); +MAKE_TYPEDEF(snd_pcm_open_lconf); +MAKE_TYPEDEF(snd_pcm_pause); +MAKE_TYPEDEF(snd_pcm_poll_descriptors); +MAKE_TYPEDEF(snd_pcm_poll_descriptors_count); +MAKE_TYPEDEF(snd_pcm_poll_descriptors_revents); +MAKE_TYPEDEF(snd_pcm_recover); +MAKE_TYPEDEF(snd_pcm_set_params); +MAKE_TYPEDEF(snd_pcm_state); +MAKE_TYPEDEF(snd_pcm_writei); + +#undef MAKE_TYPEDEF +#endif + /* ALSA is not thread-safe. snd_pcm_t instances are individually protected by the owning cubeb_stream's mutex. snd_pcm_t creation and destruction is not thread-safe until ALSA 1.0.24 (see alsa-lib.git commit 91c9c8f1), @@ -64,6 +109,8 @@ struct cubeb { workaround is not required. */ snd_config_t * local_config; int is_pa; + + void * libasound; }; enum stream_state { @@ -262,7 +309,7 @@ alsa_refill_stream(cubeb_stream * stm) pthread_mutex_lock(&stm->mutex); - r = snd_pcm_poll_descriptors_revents(stm->pcm, stm->fds, stm->nfds, &revents); + r = WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents); if (r < 0 || revents != POLLOUT) { /* This should be a stream error; it makes no sense for poll(2) to wake for this stream and then have the stream report that it's not ready. @@ -271,10 +318,10 @@ alsa_refill_stream(cubeb_stream * stm) return RUNNING; } - avail = snd_pcm_avail_update(stm->pcm); + avail = WRAP(snd_pcm_avail_update)(stm->pcm); if (avail == -EPIPE) { - snd_pcm_recover(stm->pcm, avail, 1); - avail = snd_pcm_avail_update(stm->pcm); + WRAP(snd_pcm_recover)(stm->pcm, avail, 1); + avail = WRAP(snd_pcm_avail_update)(stm->pcm); } /* Failed to recover from an xrun, this stream must be broken. */ @@ -293,8 +340,8 @@ alsa_refill_stream(cubeb_stream * stm) available to write. If avail is still zero here, the stream must be in a funky state, so recover and try again. */ if (avail == 0) { - snd_pcm_recover(stm->pcm, -EPIPE, 1); - avail = snd_pcm_avail_update(stm->pcm); + WRAP(snd_pcm_recover)(stm->pcm, -EPIPE, 1); + avail = WRAP(snd_pcm_avail_update)(stm->pcm); if (avail <= 0) { pthread_mutex_unlock(&stm->mutex); stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); @@ -302,7 +349,7 @@ alsa_refill_stream(cubeb_stream * stm) } } - p = calloc(1, snd_pcm_frames_to_bytes(stm->pcm, avail)); + p = calloc(1, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, avail)); assert(p); pthread_mutex_unlock(&stm->mutex); -@@ -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); +@@ -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); -@@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) +@@ -895,7 +1001,7 @@ alsa_stream_destroy(cubeb_stream * stm) + pthread_mutex_lock(&stm->mutex); + if (stm->pcm) { + if (stm->state == DRAINING) { +- snd_pcm_drain(stm->pcm); ++ WRAP(snd_pcm_drain)(stm->pcm); + } + alsa_locked_pcm_close(stm->pcm); + stm->pcm = NULL; +@@ -938,12 +1044,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) return CUBEB_ERROR; } -- rv = snd_pcm_hw_params_any(stm->pcm, hw_params); -+ rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); - if (rv < 0) { +- r = snd_pcm_hw_params_any(stm->pcm, hw_params); ++ r = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); + if (r < 0) { return CUBEB_ERROR; } -- 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) { +- r = snd_pcm_hw_params_get_channels_max(hw_params, max_channels); ++ r = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels); + if (r < 0) { return CUBEB_ERROR; } -@@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { +@@ -963,34 +1069,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { /* get a pcm, disabling resampling, so we get a rate the * hardware/dmix/pulse/etc. supports. */ -- 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) { +- r = snd_pcm_open(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); ++ r = WRAP(snd_pcm_open)(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); + if (r < 0) { return CUBEB_ERROR; } -- rv = snd_pcm_hw_params_any(pcm, hw_params); -+ rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); - if (rv < 0) { +- r = snd_pcm_hw_params_any(pcm, hw_params); ++ r = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); + if (r < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } -- 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) { +- r = snd_pcm_hw_params_get_rate(hw_params, rate, &dir); ++ r = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir); + if (r >= 0) { /* There is a default rate: use it. */ - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */ *rate = 44100; -- 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) { +- r = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL); ++ r = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL); + if (r < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } @@ -1013,7 +1119,7 @@ alsa_stream_start(cubeb_stream * stm) ctx = stm->context; pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 0); + WRAP(snd_pcm_pause)(stm->pcm, 0); gettimeofday(&stm->last_activity, NULL); pthread_mutex_unlock(&stm->mutex); @@ -1047,7 +1153,7 @@ alsa_stream_stop(cubeb_stream * stm) pthread_mutex_unlock(&ctx->mutex); pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 1); + WRAP(snd_pcm_pause)(stm->pcm, 1); pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1063,8 +1169,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) pthread_mutex_lock(&stm->mutex); delay = -1; - if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING || - snd_pcm_delay(stm->pcm, &delay) != 0) { + if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING || + WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) { *position = stm->last_position; pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1089,7 +1195,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) snd_pcm_sframes_t delay; /* This function returns the delay in frames until a frame written using snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */ - if (snd_pcm_delay(stm->pcm, &delay)) { + if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) { return CUBEB_ERROR; } diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c new file mode 100644 index 0000000..5e38e27 --- /dev/null +++ media/libcubeb/src/cubeb_oss.c -@@ -0,0 +1,397 @@ +@@ -0,0 +1,402 @@ +/* + * Copyright © 2014 Mozilla Foundation + * + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ +#if defined(HAVE_SYS_SOUNDCARD_H) +#include +#else +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cubeb/cubeb.h" +#include "cubeb-internal.h" + +#ifndef CUBEB_OSS_DEFAULT_OUTPUT +#define CUBEB_OSS_DEFAULT_OUTPUT "/dev/dsp" +#endif + +#define OSS_BUFFER_SIZE 1024 + +struct cubeb { + struct cubeb_ops const * ops; +}; + +struct cubeb_stream { + cubeb * context; + + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; + void * user_ptr; + float volume; + float panning; + + pthread_mutex_t state_mutex; + pthread_cond_t state_cond; + + int running; + int stopped; + int floating; + + /* These two vars are needed to support old versions of OSS */ + unsigned int position_bytes; + unsigned int last_position_bytes; + + uint64_t written_frags; /* The number of fragments written to /dev/dsp */ + uint64_t missed_frags; /* fragments output with stopped stream */ + + cubeb_stream_params params; + int fd; + pthread_t th; +}; + +static struct cubeb_ops const oss_ops; + +int oss_init(cubeb ** context, char const * context_name) +{ + cubeb* ctx = (cubeb*)malloc(sizeof(cubeb)); + ctx->ops = &oss_ops; + *context = ctx; + return CUBEB_OK; +} + +static void oss_destroy(cubeb *ctx) +{ + free(ctx); +} + +static char const * oss_get_backend_id(cubeb * context) +{ + static char oss_name[] = "oss"; + return oss_name; +} + +static int oss_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) +{ + *max_channels = 2; /* Let's support only stereo for now */ + return CUBEB_OK; +} + +static int oss_get_min_latency(cubeb * context, cubeb_stream_params params, + uint32_t * latency_ms) +{ + /* 40ms is a big enough number to work ok */ + *latency_ms = 40; + return CUBEB_OK; +} + +static int oss_get_preferred_sample_rate(cubeb *context, uint32_t * rate) +{ + /* 48000 seems a prefered choice for most audio devices + * and a good choice for OSS */ + *rate = 48000; + return CUBEB_OK; +} + +static void run_state_callback(cubeb_stream *stream, cubeb_state state) +{ + if (stream->state_callback) { + stream->state_callback(stream, stream->user_ptr, state); + } +} + +static long run_data_callback(cubeb_stream *stream, void *buffer, long nframes) +{ + long got = 0; + pthread_mutex_lock(&stream->state_mutex); + if (stream->data_callback && stream->running && !stream->stopped) { + pthread_mutex_unlock(&stream->state_mutex); + got = stream->data_callback(stream, stream->user_ptr, buffer, nframes); + } else { + pthread_mutex_unlock(&stream->state_mutex); + } + return got; +} + +static void apply_volume(int16_t* buffer, unsigned int n, + float volume, float panning) +{ + float left = volume; + float right = volume; + unsigned int i; + int pan[2]; + if (panning<0) { + right *= (1+panning); + } else { + left *= (1-panning); + } + pan[0] = 128.0*left; + pan[1] = 128.0*right; + for(i=0; irunning) { + pthread_mutex_lock(&stream->state_mutex); + if (stream->stopped) { + pthread_mutex_unlock(&stream->state_mutex); + run_state_callback(stream, CUBEB_STATE_STOPPED); + pthread_mutex_lock(&stream->state_mutex); + while (stream->stopped) { + pthread_cond_wait(&stream->state_cond, &stream->state_mutex); + } + pthread_mutex_unlock(&stream->state_mutex); + run_state_callback(stream, CUBEB_STATE_STARTED); + continue; + } + pthread_mutex_unlock(&stream->state_mutex); + if (stream->floating) { + got = run_data_callback(stream, f_buffer, + OSS_BUFFER_SIZE/stream->params.channels); + for (i=0; i<((unsigned long)got)*stream->params.channels; i++) { + buffer[i] = f_buffer[i]*32767.0; + } + } else { + got = run_data_callback(stream, buffer, + OSS_BUFFER_SIZE/stream->params.channels); + } + apply_volume(buffer, got*stream->params.channels, + stream->volume, stream->panning); + if (got<0) { + run_state_callback(stream, CUBEB_STATE_ERROR); + break; + } + if (!got) { + run_state_callback(stream, CUBEB_STATE_DRAINED); + } + if (got) { + size_t i = 0; + size_t s = got*stream->params.channels*sizeof(int16_t); + while (i < s) { + ssize_t n = write(stream->fd, ((char*)buffer) + i, s - i); + if (n<=0) { + run_state_callback(stream, CUBEB_STATE_ERROR); + break; + } + i+=n; + } + stream->written_frags+=got; + } + } + return NULL; +} + +static void oss_try_set_latency(cubeb_stream* stream, unsigned int latency) +{ + unsigned int latency_bytes, n_frag; + int frag; + /* fragment size of 1024 is a good choice with good chances to be accepted */ + unsigned int frag_size=1024; + unsigned int frag_log=10; /* 2^frag_log = frag_size */ + latency_bytes = + latency*stream->params.rate*stream->params.channels*sizeof(uint16_t)/1000; + n_frag = latency_bytes>>frag_log; + frag = (n_frag<<16) | frag_log; + /* Even if this fails we wish to continue, not checking for errors */ + ioctl(stream->fd, SNDCTL_DSP_SETFRAGMENT, &frag); +} + +static int oss_stream_init(cubeb * context, cubeb_stream ** stm, + char const * stream_name, + cubeb_stream_params stream_params, + unsigned int latency, + cubeb_data_callback data_callback, + cubeb_state_callback state_callback, void * user_ptr) +{ + cubeb_stream* stream = (cubeb_stream*)malloc(sizeof(cubeb_stream)); + stream->context = context; + stream->data_callback = data_callback; + stream->state_callback = state_callback; + stream->user_ptr = user_ptr; + + if ((stream->fd = open(CUBEB_OSS_DEFAULT_OUTPUT, O_WRONLY)) == -1) { + free(stream); + return CUBEB_ERROR; + } +#define SET(what, to) do { unsigned int i = to; \ + int j = ioctl(stream->fd, what, &i); \ + if (j == -1 || i != to) { \ + close(stream->fd); \ + free(stream); \ + return CUBEB_ERROR_INVALID_FORMAT; } } while (0) + + stream->params = stream_params; + stream->volume = 1.0; + stream->panning = 0.0; + + oss_try_set_latency(stream, latency); + + stream->floating = 0; + SET(SNDCTL_DSP_CHANNELS, stream_params.channels); + SET(SNDCTL_DSP_SPEED, stream_params.rate); + switch (stream_params.format) { + case CUBEB_SAMPLE_S16LE: + SET(SNDCTL_DSP_SETFMT, AFMT_S16_LE); + break; + case CUBEB_SAMPLE_S16BE: + SET(SNDCTL_DSP_SETFMT, AFMT_S16_BE); + break; + case CUBEB_SAMPLE_FLOAT32LE: + SET(SNDCTL_DSP_SETFMT, AFMT_S16_NE); + stream->floating = 1; + break; + default: + close(stream->fd); + free(stream); + return CUBEB_ERROR; + } + + + pthread_mutex_init(&stream->state_mutex, NULL); + pthread_cond_init(&stream->state_cond, NULL); + + stream->running = 1; + stream->stopped = 1; + stream->position_bytes = 0; + stream->last_position_bytes = 0; + stream->written_frags = 0; + stream->missed_frags = 0; + + pthread_create(&stream->th, NULL, writer, (void*)stream); + + *stm = stream; + + return CUBEB_OK; +} + +static void oss_stream_destroy(cubeb_stream * stream) +{ + pthread_mutex_lock(&stream->state_mutex); + + stream->running = 0; + stream->stopped = 0; + pthread_cond_signal(&stream->state_cond); + + pthread_mutex_unlock(&stream->state_mutex); + + pthread_join(stream->th, NULL); + + pthread_mutex_destroy(&stream->state_mutex); + pthread_cond_destroy(&stream->state_cond); + close(stream->fd); + free(stream); +} + +static int oss_stream_get_latency(cubeb_stream * stream, uint32_t * latency) +{ + if (ioctl(stream->fd, SNDCTL_DSP_GETODELAY, latency)==-1) { + return CUBEB_ERROR; + } + /* Convert latency from bytes to frames */ + *latency /= stream->params.channels*sizeof(int16_t); + return CUBEB_OK; +} + + +static int oss_stream_current_optr(cubeb_stream * stream, uint64_t * position) +{ + count_info ci; + /* Unfortunately, this ioctl is only available in OSS 4.x */ +#ifdef SNDCTL_DSP_CURRENT_OPTR + oss_count_t count; + if (ioctl(stream->fd, SNDCTL_DSP_CURRENT_OPTR, &count) != -1) { + *position = count.samples;// + count.fifo_samples; + return CUBEB_OK; + } +#endif + /* Fall back to this ioctl in case the previous one fails */ + if (ioctl(stream->fd, SNDCTL_DSP_GETOPTR, &ci) == -1) { + return CUBEB_ERROR; + } + /* ci.bytes is only 32 bit and will start to wrap after arithmetic overflow */ + stream->position_bytes += ci.bytes - stream->last_position_bytes; + stream->last_position_bytes = ci.bytes; + *position = stream->position_bytes/stream->params.channels/sizeof(int16_t); + return CUBEB_OK; +} + +static int oss_stream_get_position(cubeb_stream * stream, uint64_t * position) +{ + if ( oss_stream_current_optr(stream, position) == CUBEB_OK ){ + *position -= stream->missed_frags; + return CUBEB_OK; + } + /* If no correct method to get position works we resort to this */ + *position = stream->written_frags; + return CUBEB_OK; +} + + +static int oss_stream_start(cubeb_stream * stream) +{ + pthread_mutex_lock(&stream->state_mutex); + if (stream->stopped) { + uint64_t ptr; + oss_stream_current_optr(stream, &ptr); + stream->missed_frags = ptr - stream->written_frags; + stream->stopped = 0; + pthread_cond_signal(&stream->state_cond); + } + pthread_mutex_unlock(&stream->state_mutex); + return CUBEB_OK; +} + +static int oss_stream_stop(cubeb_stream * stream) +{ + pthread_mutex_lock(&stream->state_mutex); + stream->stopped = 1; + pthread_mutex_unlock(&stream->state_mutex); + return CUBEB_OK; +} + +int oss_stream_set_panning(cubeb_stream * stream, float panning) +{ + if (stream->params.channels == 2) { + stream->panning=panning; + } + return CUBEB_OK; +} + +int oss_stream_set_volume(cubeb_stream * stream, float volume) +{ + stream->volume=volume; + return CUBEB_OK; +} + +static struct cubeb_ops const oss_ops = { + .init = oss_init, + .get_backend_id = oss_get_backend_id, + .get_max_channel_count = oss_get_max_channel_count, + .get_min_latency = oss_get_min_latency, + .get_preferred_sample_rate = oss_get_preferred_sample_rate, + .destroy = oss_destroy, + .stream_init = oss_stream_init, + .stream_destroy = oss_stream_destroy, + .stream_start = oss_stream_start, + .stream_stop = oss_stream_stop, + .stream_get_position = oss_stream_get_position, -+ .stream_get_latency = oss_stream_get_latency ++ .stream_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/Makefile.in media/webrtc/signaling/test/Makefile.in +diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build 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 +--- 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'] --ifdef MOZ_ALSA -+ifdef MOZ_OSS - LIBS += \ -- $(MOZ_ALSA_LIBS) \ -+ $(MOZ_OSS_LIBS) \ - $(NULL) - endif +-if CONFIG['MOZ_ALSA']: +- OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] ++if CONFIG['MOZ_OSS']: ++ OS_LIBS += CONFIG['MOZ_OSS_LIBS'] -diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk + 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/libxul.mk -+++ toolkit/library/libxul.mk -@@ -146,9 +146,9 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32 - endif - endif +--- toolkit/library/moz.build ++++ toolkit/library/moz.build +@@ -234,8 +234,8 @@ if CONFIG['MOZ_NATIVE_LIBVPX']: + if not CONFIG['MOZ_TREE_PIXMAN']: + OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] --ifdef MOZ_ALSA --EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS) --endif -+ifdef MOZ_OSS -+EXTRA_DSO_LDOPTS += $(MOZ_OSS_LIBS) -+endif +-if CONFIG['MOZ_ALSA']: +- OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] ++if CONFIG['MOZ_OSS']: ++ OS_LIBS += CONFIG['MOZ_OSS_LIBS'] - ifdef HAVE_CLOCK_MONOTONIC - EXTRA_DSO_LDOPTS += $(REALTIME_LIBS) + if CONFIG['HAVE_CLOCK_MONOTONIC']: + OS_LIBS += CONFIG['REALTIME_LIBS'] Index: branches/2015Q3/www/firefox-esr/files/patch-bug1041268 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1041268 (nonexistent) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1041268 (revision 392767) @@ -0,0 +1,26 @@ +diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc +index 97f69d3..77a50b3 100644 +--- media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc ++++ media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc +@@ -18,7 +18,7 @@ ScreenCapturer* ScreenCapturer::Create() { + return Create(DesktopCaptureOptions::CreateDefault()); + } + +-#if defined(WEBRTC_LINUX) ++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) + ScreenCapturer* ScreenCapturer::CreateWithXDamage( + bool use_update_notifications) { + DesktopCaptureOptions options; +diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h +index a8d40a7..177a6c1 100644 +--- media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h ++++ media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h +@@ -74,7 +74,7 @@ class ScreenCapturer : public DesktopCapturer { + static ScreenCapturer* Create(const DesktopCaptureOptions& options); + static ScreenCapturer* Create(); + +-#if defined(WEBRTC_LINUX) ++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) + // Creates platform-specific capturer and instructs it whether it should use + // X DAMAGE support. + static ScreenCapturer* CreateWithXDamage(bool use_x_damage); Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1041268 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1073117 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1073117 (nonexistent) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1073117 (revision 392767) @@ -0,0 +1,877 @@ +diff --git widget/gtk/gtk2drawing.c widget/gtk/gtk2drawing.c +index 34f22af..1b950ab 100644 +--- widget/gtk/gtk2drawing.c ++++ widget/gtk/gtk2drawing.c +@@ -831,7 +831,7 @@ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) + return MOZ_GTK_SUCCESS; + } + +-gint ++static gint + moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, + gint* focus_width, gint* focus_pad) + { +@@ -928,7 +928,7 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) + return MOZ_GTK_SUCCESS; + } + +-gint ++static gint + moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) + { + static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; +diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c +index 08a58d6..7fef6fa 100644 +--- widget/gtk/gtk3drawing.c ++++ widget/gtk/gtk3drawing.c +@@ -65,6 +65,7 @@ static GtkWidget* gScrolledWindowWidget; + static style_prop_t style_prop_func; + static gboolean have_arrow_scaling; + static gboolean checkbox_check_state; ++static gboolean notebook_has_tab_gap; + static gboolean is_initialized; + + #define ARROW_UP 0 +@@ -725,6 +726,14 @@ moz_gtk_init() + else + checkbox_check_state = GTK_STATE_FLAG_ACTIVE; + ++ if(!gtk_check_version(3, 12, 0)) { ++ ensure_tab_widget(); ++ gtk_widget_style_get(gTabWidget, "has-tab-gap", ¬ebook_has_tab_gap, NULL); ++ } ++ else { ++ notebook_has_tab_gap = TRUE; ++ } ++ + /* Add style property to GtkEntry. + * Adding the style property to the normal GtkEntry class means that it + * will work without issues inside GtkComboBox and for Spinbuttons. */ +@@ -762,37 +771,17 @@ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing) + gint + moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) + { +- gboolean interior_focus; +- gint focus_width = 0; ++ GtkBorder border; ++ GtkBorder padding; ++ GtkStyleContext *style; + + ensure_entry_widget(); +- gtk_widget_style_get(gEntryWidget, +- "interior-focus", &interior_focus, +- "focus-line-width", &focus_width, +- NULL); +- if (interior_focus) { +- GtkBorder border; +- GtkStyleContext *style = gtk_widget_get_style_context(gEntryWidget); +- gtk_style_context_get_border(style, 0, &border); +- *focus_h_width = border.left + focus_width; +- *focus_v_width = border.top + focus_width; +- } else { +- *focus_h_width = focus_width; +- *focus_v_width = focus_width; +- } +- return MOZ_GTK_SUCCESS; +-} +- +-gint +-moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, +- gint* focus_width, gint* focus_pad) +-{ +- gtk_widget_style_get (widget, +- "interior-focus", interior_focus, +- "focus-line-width", focus_width, +- "focus-padding", focus_pad, +- NULL); ++ style = gtk_widget_get_style_context(gEntryWidget); + ++ gtk_style_context_get_border(style, 0, &border); ++ gtk_style_context_get_padding(style, 0, &padding); ++ *focus_h_width = border.left + padding.left; ++ *focus_v_width = border.top + padding.top; + return MOZ_GTK_SUCCESS; + } + +@@ -880,24 +860,6 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) + return MOZ_GTK_SUCCESS; + } + +-gint +-moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) +-{ +- static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; +- GtkBorder *tmp_border; +- +- gtk_widget_style_get (widget, "inner-border", &tmp_border, NULL); +- +- if (tmp_border) { +- *inner_border = *tmp_border; +- gtk_border_free(tmp_border); +- } +- else +- *inner_border = default_inner_border; +- +- return MOZ_GTK_SUCCESS; +-} +- + static gint + moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, + GtkWidgetState* state, +@@ -908,19 +870,8 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, + GtkStyleContext* style = gtk_widget_get_style_context(widget); + gint x = rect->x, y=rect->y, width=rect->width, height=rect->height; + +- gboolean interior_focus; +- gint focus_width, focus_pad; +- +- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); + gtk_widget_set_direction(widget, direction); +- +- if (!interior_focus && state->focused) { +- x += focus_width + focus_pad; +- y += focus_width + focus_pad; +- width -= 2 * (focus_width + focus_pad); +- height -= 2 * (focus_width + focus_pad); +- } +- ++ + gtk_style_context_save(style); + gtk_style_context_set_state(style, state_flags); + +@@ -953,20 +904,12 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, + } + + if (state->focused) { +- if (interior_focus) { +- GtkBorder border; +- gtk_style_context_get_border(style, state_flags, &border); +- x += border.left + focus_pad; +- y += border.top + focus_pad; +- width -= 2 * (border.left + focus_pad); +- height -= 2 * (border.top + focus_pad); +- } else { +- x -= focus_width + focus_pad; +- y -= focus_width + focus_pad; +- width += 2 * (focus_width + focus_pad); +- height += 2 * (focus_width + focus_pad); +- } +- ++ GtkBorder border; ++ gtk_style_context_get_border(style, state_flags, &border); ++ x += border.left; ++ y += border.top; ++ width -= (border.left + border.right); ++ height -= (border.top + border.bottom); + gtk_render_focus(style, cr, x, y, width, height); + } + gtk_style_context_restore(style); +@@ -1056,33 +999,23 @@ calculate_button_inner_rect(GtkWidget* button, GdkRectangle* rect, + GtkTextDirection direction, + gboolean ignore_focus) + { +- GtkBorder inner_border; +- gboolean interior_focus; +- gint focus_width, focus_pad; + GtkStyleContext* style; + GtkBorder border; ++ GtkBorder padding = {0, 0, 0, 0}; + + style = gtk_widget_get_style_context(button); + + /* This mirrors gtkbutton's child positioning */ +- moz_gtk_button_get_inner_border(button, &inner_border); +- moz_gtk_widget_get_focus(button, &interior_focus, +- &focus_width, &focus_pad); +- +- if (ignore_focus) +- focus_width = focus_pad = 0; +- + gtk_style_context_get_border(style, 0, &border); ++ if (!ignore_focus) ++ gtk_style_context_get_padding(style, 0, &padding); + +- inner_rect->x = rect->x + border.left + focus_width + focus_pad; +- inner_rect->x += direction == GTK_TEXT_DIR_LTR ? +- inner_border.left : inner_border.right; +- inner_rect->y = rect->y + inner_border.top + border.top + +- focus_width + focus_pad; +- inner_rect->width = MAX(1, rect->width - inner_border.left - +- inner_border.right - (border.left + focus_pad + focus_width) * 2); +- inner_rect->height = MAX(1, rect->height - inner_border.top - +- inner_border.bottom - (border.top + focus_pad + focus_width) * 2); ++ inner_rect->x = rect->x + border.left + padding.left; ++ inner_rect->y = rect->y + padding.top + border.top; ++ inner_rect->width = MAX(1, rect->width - padding.left - ++ padding.right - border.left * 2); ++ inner_rect->height = MAX(1, rect->height - padding.top - ++ padding.bottom - border.top * 2); + + return MOZ_GTK_SUCCESS; + } +@@ -1457,19 +1390,12 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, + { + gint x = rect->x, y = rect->y, width = rect->width, height = rect->height; + GtkStyleContext* style; +- gboolean interior_focus; +- gint focus_width; + int draw_focus_outline_only = state->depressed; // NS_THEME_FOCUS_OUTLINE + + gtk_widget_set_direction(widget, direction); + + style = gtk_widget_get_style_context(widget); + +- gtk_widget_style_get(widget, +- "interior-focus", &interior_focus, +- "focus-line-width", &focus_width, +- NULL); +- + if (draw_focus_outline_only) { + // Inflate the given 'rect' with the focus outline size. + gint h, v; +@@ -1501,14 +1427,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, + /* This will get us the lit borders that focused textboxes enjoy on + * some themes. */ + gtk_style_context_set_state(style, GTK_STATE_FLAG_FOCUSED); +- if (!interior_focus) { +- /* Indent the border a little bit if we have exterior focus +- (this is what GTK does to draw native entries) */ +- x += focus_width; +- y += focus_width; +- width -= 2 * focus_width; +- height -= 2 * focus_width; +- } + } + + if (state->disabled) { +@@ -1520,11 +1438,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, + } + gtk_render_frame(style, cr, x, y, width, height); + +- if (state->focused && !state->disabled) { +- if (!interior_focus) { +- gtk_render_focus(style, cr, rect->x, rect->y, rect->width, rect->height); +- } +- } + gtk_style_context_restore(style); + + return MOZ_GTK_SUCCESS; +@@ -1829,8 +1742,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, + GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); + GtkStyleContext* style; + GtkWidget *widget; +- gboolean interior_focus; +- gint focus_width, focus_pad; + + if (isradio) { + ensure_radiobutton_widget(); +@@ -1843,7 +1754,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, + + style = gtk_widget_get_style_context(widget); + gtk_style_context_save(style); +- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); + gtk_style_context_set_state(style, state_flags); + + /* this is for drawing a prelight box */ +@@ -1852,10 +1762,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, + rect->x, rect->y, rect->width, rect->height); + } + +- if (state->focused && !interior_focus) { +- gtk_render_focus(style, cr, +- rect->x, rect->y, rect->width, rect->height); +- } + gtk_style_context_restore(style); + + return MOZ_GTK_SUCCESS; +@@ -1868,7 +1774,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, + { + GtkStyleContext *style; + GtkWidget *widget; +- gboolean interior_focus; + + if (!state->focused) + return MOZ_GTK_SUCCESS; +@@ -1889,10 +1794,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, + } + gtk_widget_set_direction(widget, direction); + +- gtk_widget_style_get(widget, "interior-focus", &interior_focus, NULL); +- if (!interior_focus) +- return MOZ_GTK_SUCCESS; +- + gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state)); + gtk_render_focus(style, cr, + rect->x, rect->y, rect->width, rect->height); +@@ -2105,6 +2015,9 @@ moz_gtk_get_tab_thickness(void) + GtkStyleContext * style; + + ensure_tab_widget(); ++ if (!notebook_has_tab_gap) ++ return 0; /* tabs do not overdraw the tabpanel border with "no gap" style */ ++ + style = gtk_widget_get_style_context(gTabWidget); + gtk_style_context_add_class(style, GTK_STYLE_CLASS_NOTEBOOK); + gtk_style_context_get_border(style, 0, &border); +@@ -2150,7 +2063,7 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, + ensure_tab_widget(); + gtk_widget_set_direction(gTabWidget, direction); + +- style = gtk_widget_get_style_context(gTabWidget); ++ style = gtk_widget_get_style_context(gTabWidget); + gtk_style_context_save(style); + moz_gtk_tab_prepare_style_context(style, flags); + +@@ -2167,143 +2080,155 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, + + focusRect = backRect = tabRect; + +- if ((flags & MOZ_GTK_TAB_SELECTED) == 0) { +- /* Only draw the tab */ +- gtk_render_extension(style, cr, +- tabRect.x, tabRect.y, tabRect.width, tabRect.height, +- (flags & MOZ_GTK_TAB_BOTTOM) ? +- GTK_POS_TOP : GTK_POS_BOTTOM ); +- } else { +- /* Draw the tab and the gap +- * We want the gap to be positioned exactly on the tabpanel top +- * border; since tabbox.css may set a negative margin so that the tab +- * frame rect already overlaps the tabpanel frame rect, we need to take +- * that into account when drawing. To that effect, nsNativeThemeGTK +- * passes us this negative margin (bmargin in the graphic below) in the +- * lowest bits of |flags|. We use it to set gap_voffset, the distance +- * between the top of the gap and the bottom of the tab (resp. the +- * bottom of the gap and the top of the tab when we draw a bottom tab), +- * while ensuring that the gap always touches the border of the tab, +- * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results +- * with big negative or positive margins. +- * Here is a graphical explanation in the case of top tabs: +- * ___________________________ +- * / \ +- * | T A B | +- * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel +- * : ^ bmargin : ^ +- * : | (-negative margin, : | +- * bottom : v passed in flags) : | gap_height +- * of -> :.............................: | (the size of the +- * the tab . part of the gap . | tabpanel top border) +- * . outside of the tab . v +- * ---------------------------------------------- +- * +- * To draw the gap, we use gtk_paint_box_gap(), see comment in +- * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall, +- * which should suffice to ensure that the only visible border is the +- * pierced one. If the tab is in the middle, we make the box_gap begin +- * a bit to the left of the tab and end a bit to the right, adjusting +- * the gap position so it still is under the tab, because we want the +- * rendering of a gap in the middle of a tabpanel. This is the role of +- * the gints gap_{l,r}_offset. On the contrary, if the tab is the +- * first, we align the start border of the box_gap with the start +- * border of the tab (left if LTR, right if RTL), by setting the +- * appropriate offset to 0.*/ +- gint gap_loffset, gap_roffset, gap_voffset, gap_height; +- +- /* Get height needed by the gap */ +- gap_height = moz_gtk_get_tab_thickness(); +- +- /* Extract gap_voffset from the first bits of flags */ +- gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK; +- if (gap_voffset > gap_height) +- gap_voffset = gap_height; +- +- /* Set gap_{l,r}_offset to appropriate values */ +- gap_loffset = gap_roffset = 20; /* should be enough */ +- if (flags & MOZ_GTK_TAB_FIRST) { +- if (direction == GTK_TEXT_DIR_RTL) +- gap_roffset = initial_gap; +- else +- gap_loffset = initial_gap; +- } +- +- if (flags & MOZ_GTK_TAB_BOTTOM) { +- /* Draw the tab on bottom */ +- focusRect.y += gap_voffset; +- focusRect.height -= gap_voffset; +- ++ if (notebook_has_tab_gap) { ++ if ((flags & MOZ_GTK_TAB_SELECTED) == 0) { ++ /* Only draw the tab */ + gtk_render_extension(style, cr, +- tabRect.x, tabRect.y + gap_voffset, tabRect.width, +- tabRect.height - gap_voffset, GTK_POS_TOP); +- +- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); +- +- backRect.y += (gap_voffset - gap_height); +- backRect.height = gap_height; +- +- /* Draw the gap; erase with background color before painting in +- * case theme does not */ +- gtk_render_background(style, cr, backRect.x, backRect.y, +- backRect.width, backRect.height); +- cairo_save(cr); +- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); +- cairo_clip(cr); +- +- gtk_render_frame_gap(style, cr, +- tabRect.x - gap_loffset, +- tabRect.y + gap_voffset - 3 * gap_height, +- tabRect.width + gap_loffset + gap_roffset, +- 3 * gap_height, GTK_POS_BOTTOM, +- gap_loffset, gap_loffset + tabRect.width); +- cairo_restore(cr); ++ tabRect.x, tabRect.y, tabRect.width, tabRect.height, ++ (flags & MOZ_GTK_TAB_BOTTOM) ? ++ GTK_POS_TOP : GTK_POS_BOTTOM ); + } else { +- /* Draw the tab on top */ +- focusRect.height -= gap_voffset; +- gtk_render_extension(style, cr, +- tabRect.x, tabRect.y, tabRect.width, +- tabRect.height - gap_voffset, GTK_POS_BOTTOM); +- +- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); +- +- backRect.y += (tabRect.height - gap_voffset); +- backRect.height = gap_height; +- +- /* Draw the gap; erase with background color before painting in +- * case theme does not */ +- gtk_render_background(style, cr, backRect.x, backRect.y, +- backRect.width, backRect.height); +- +- cairo_save(cr); +- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); +- cairo_clip(cr); +- +- gtk_render_frame_gap(style, cr, +- tabRect.x - gap_loffset, +- tabRect.y + tabRect.height - gap_voffset, +- tabRect.width + gap_loffset + gap_roffset, +- 3 * gap_height, GTK_POS_TOP, +- gap_loffset, gap_loffset + tabRect.width); +- cairo_restore(cr); ++ /* Draw the tab and the gap ++ * We want the gap to be positioned exactly on the tabpanel top ++ * border; since tabbox.css may set a negative margin so that the tab ++ * frame rect already overlaps the tabpanel frame rect, we need to take ++ * that into account when drawing. To that effect, nsNativeThemeGTK ++ * passes us this negative margin (bmargin in the graphic below) in the ++ * lowest bits of |flags|. We use it to set gap_voffset, the distance ++ * between the top of the gap and the bottom of the tab (resp. the ++ * bottom of the gap and the top of the tab when we draw a bottom tab), ++ * while ensuring that the gap always touches the border of the tab, ++ * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results ++ * with big negative or positive margins. ++ * Here is a graphical explanation in the case of top tabs: ++ * ___________________________ ++ * / \ ++ * | T A B | ++ * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel ++ * : ^ bmargin : ^ ++ * : | (-negative margin, : | ++ * bottom : v passed in flags) : | gap_height ++ * of -> :.............................: | (the size of the ++ * the tab . part of the gap . | tabpanel top border) ++ * . outside of the tab . v ++ * ---------------------------------------------- ++ * ++ * To draw the gap, we use gtk_paint_box_gap(), see comment in ++ * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall, ++ * which should suffice to ensure that the only visible border is the ++ * pierced one. If the tab is in the middle, we make the box_gap begin ++ * a bit to the left of the tab and end a bit to the right, adjusting ++ * the gap position so it still is under the tab, because we want the ++ * rendering of a gap in the middle of a tabpanel. This is the role of ++ * the gints gap_{l,r}_offset. On the contrary, if the tab is the ++ * first, we align the start border of the box_gap with the start ++ * border of the tab (left if LTR, right if RTL), by setting the ++ * appropriate offset to 0.*/ ++ gint gap_loffset, gap_roffset, gap_voffset, gap_height; ++ ++ /* Get height needed by the gap */ ++ gap_height = moz_gtk_get_tab_thickness(); ++ ++ /* Extract gap_voffset from the first bits of flags */ ++ gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK; ++ if (gap_voffset > gap_height) ++ gap_voffset = gap_height; ++ ++ /* Set gap_{l,r}_offset to appropriate values */ ++ gap_loffset = gap_roffset = 20; /* should be enough */ ++ if (flags & MOZ_GTK_TAB_FIRST) { ++ if (direction == GTK_TEXT_DIR_RTL) ++ gap_roffset = initial_gap; ++ else ++ gap_loffset = initial_gap; ++ } ++ ++ if (flags & MOZ_GTK_TAB_BOTTOM) { ++ /* Draw the tab on bottom */ ++ focusRect.y += gap_voffset; ++ focusRect.height -= gap_voffset; ++ ++ gtk_render_extension(style, cr, ++ tabRect.x, tabRect.y + gap_voffset, tabRect.width, ++ tabRect.height - gap_voffset, GTK_POS_TOP); ++ ++ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); ++ ++ backRect.y += (gap_voffset - gap_height); ++ backRect.height = gap_height; ++ ++ /* Draw the gap; erase with background color before painting in ++ * case theme does not */ ++ gtk_render_background(style, cr, backRect.x, backRect.y, ++ backRect.width, backRect.height); ++ cairo_save(cr); ++ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); ++ cairo_clip(cr); ++ ++ gtk_render_frame_gap(style, cr, ++ tabRect.x - gap_loffset, ++ tabRect.y + gap_voffset - 3 * gap_height, ++ tabRect.width + gap_loffset + gap_roffset, ++ 3 * gap_height, GTK_POS_BOTTOM, ++ gap_loffset, gap_loffset + tabRect.width); ++ cairo_restore(cr); ++ } else { ++ /* Draw the tab on top */ ++ focusRect.height -= gap_voffset; ++ gtk_render_extension(style, cr, ++ tabRect.x, tabRect.y, tabRect.width, ++ tabRect.height - gap_voffset, GTK_POS_BOTTOM); ++ ++ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); ++ ++ backRect.y += (tabRect.height - gap_voffset); ++ backRect.height = gap_height; ++ ++ /* Draw the gap; erase with background color before painting in ++ * case theme does not */ ++ gtk_render_background(style, cr, backRect.x, backRect.y, ++ backRect.width, backRect.height); ++ ++ cairo_save(cr); ++ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); ++ cairo_clip(cr); ++ ++ gtk_render_frame_gap(style, cr, ++ tabRect.x - gap_loffset, ++ tabRect.y + tabRect.height - gap_voffset, ++ tabRect.width + gap_loffset + gap_roffset, ++ 3 * gap_height, GTK_POS_TOP, ++ gap_loffset, gap_loffset + tabRect.width); ++ cairo_restore(cr); ++ } + } ++ } else { ++ gtk_render_background(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height); ++ gtk_render_frame(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height); + } + ++ gtk_style_context_restore(style); ++ + if (state->focused) { + /* Paint the focus ring */ +- GtkBorder border; +- gtk_style_context_get_border(style, GetStateFlagsFromGtkWidgetState(state), &border); ++ GtkBorder padding; ++ ++ gtk_style_context_save(style); ++ moz_gtk_tab_prepare_style_context(style, flags); + +- focusRect.x += border.left; +- focusRect.width -= (border.left + border.right); +- focusRect.y += border.top; +- focusRect.height -= (border.top + border.bottom); ++ gtk_style_context_get_padding(style, GetStateFlagsFromGtkWidgetState(state), &padding); ++ ++ focusRect.x += padding.left; ++ focusRect.width -= (padding.left + padding.right); ++ focusRect.y += padding.top; ++ focusRect.height -= (padding.top + padding.bottom); + + gtk_render_focus(style, cr, + focusRect.x, focusRect.y, focusRect.width, focusRect.height); ++ ++ gtk_style_context_restore(style); + } + +- gtk_style_context_restore(style); + + return MOZ_GTK_SUCCESS; + } +@@ -2684,26 +2609,18 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + switch (widget) { + case MOZ_GTK_BUTTON: + { +- GtkBorder inner_border; +- gboolean interior_focus; +- gint focus_width, focus_pad; +- + ensure_button_widget(); ++ style = gtk_widget_get_style_context(gButtonWidget); ++ + *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget)); + + /* Don't add this padding in HTML, otherwise the buttons will + become too big and stuff the layout. */ + if (!inhtml) { +- moz_gtk_widget_get_focus(gButtonWidget, &interior_focus, &focus_width, &focus_pad); +- moz_gtk_button_get_inner_border(gButtonWidget, &inner_border); +- *left += focus_width + focus_pad + inner_border.left; +- *right += focus_width + focus_pad + inner_border.right; +- *top += focus_width + focus_pad + inner_border.top; +- *bottom += focus_width + focus_pad + inner_border.bottom; ++ moz_gtk_add_style_padding(style, left, top, right, bottom); + } + +- moz_gtk_add_style_border(gtk_widget_get_style_context(gButtonWidget), +- left, top, right, bottom); ++ moz_gtk_add_style_border(style, left, top, right, bottom); + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_ENTRY: +@@ -2717,7 +2610,13 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + ensure_entry_widget(); + style = gtk_widget_get_style_context(gEntryWidget); + moz_gtk_add_style_border(style, left, top, right, bottom); +- moz_gtk_add_style_padding(style, left, top, right, bottom); ++ ++ /* Use the document padding in HTML ++ and GTK style padding in XUL. */ ++ if (!inhtml) { ++ moz_gtk_add_style_padding(style, left, top, right, bottom); ++ } ++ + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_TREEVIEW: +@@ -2737,23 +2636,15 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + * assigned. + * That is why the following code is the same as for MOZ_GTK_BUTTON. + * */ +- +- GtkBorder inner_border; +- gboolean interior_focus; +- gint focus_width, focus_pad; ++ GtkStyleContext *style; + + ensure_tree_header_cell_widget(); + *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gTreeHeaderCellWidget)); + +- moz_gtk_widget_get_focus(gTreeHeaderCellWidget, &interior_focus, &focus_width, &focus_pad); +- moz_gtk_button_get_inner_border(gTreeHeaderCellWidget, &inner_border); +- *left += focus_width + focus_pad + inner_border.left; +- *right += focus_width + focus_pad + inner_border.right; +- *top += focus_width + focus_pad + inner_border.top; +- *bottom += focus_width + focus_pad + inner_border.bottom; +- +- moz_gtk_add_style_border(gtk_widget_get_style_context(gTreeHeaderCellWidget), +- left, top, right, bottom); ++ style = gtk_widget_get_style_context(gTreeHeaderCellWidget); ++ ++ moz_gtk_add_style_border(style, left, top, right, bottom); ++ moz_gtk_add_style_padding(style, left, top, right, bottom); + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_TREE_HEADER_SORTARROW: +@@ -2773,29 +2664,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + /* We need to account for the arrow on the dropdown, so text + * doesn't come too close to the arrow, or in some cases spill + * into the arrow. */ +- gboolean ignored_interior_focus, wide_separators; +- gint focus_width, focus_pad, separator_width; ++ gboolean wide_separators; ++ gint separator_width; + GtkRequisition arrow_req; + GtkBorder border; + + ensure_combo_box_widgets(); + +- *left = gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); ++ *left = *top = *right = *bottom = ++ gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); ++ ++ style = gtk_widget_get_style_context(gComboBoxButtonWidget); + + if (!inhtml) { +- moz_gtk_widget_get_focus(gComboBoxButtonWidget, +- &ignored_interior_focus, +- &focus_width, &focus_pad); +- *left += focus_width + focus_pad; ++ moz_gtk_add_style_padding(style, left, top, right, bottom); + } + +- style = gtk_widget_get_style_context(gComboBoxButtonWidget); +- gtk_style_context_get_border(style, 0, &border); +- +- *top = *left + border.top; +- *left += border.left; +- +- *right = *left; *bottom = *top; ++ moz_gtk_add_style_border(style, left, top, right, bottom); + + /* If there is no separator, don't try to count its width. */ + separator_width = 0; +@@ -2847,60 +2732,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + ensure_frame_widget(); + w = gFrameWidget; + break; +- case MOZ_GTK_CHECKBUTTON_LABEL: +- case MOZ_GTK_RADIOBUTTON_LABEL: +- { +- gboolean interior_focus; +- gint focus_width, focus_pad; +- +- /* If the focus is interior, then the label has a border of +- (focus_width + focus_pad). */ +- if (widget == MOZ_GTK_CHECKBUTTON_LABEL) { +- ensure_checkbox_widget(); +- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, +- &focus_width, &focus_pad); +- } +- else { +- ensure_radiobutton_widget(); +- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, +- &focus_width, &focus_pad); +- } +- +- if (interior_focus) +- *left = *top = *right = *bottom = (focus_width + focus_pad); +- +- return MOZ_GTK_SUCCESS; +- } +- + case MOZ_GTK_CHECKBUTTON_CONTAINER: + case MOZ_GTK_RADIOBUTTON_CONTAINER: + { +- gboolean interior_focus; +- gint focus_width, focus_pad; +- +- /* If the focus is _not_ interior, then the container has a border +- of (focus_width + focus_pad). */ + if (widget == MOZ_GTK_CHECKBUTTON_CONTAINER) { + ensure_checkbox_widget(); +- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, +- &focus_width, &focus_pad); + w = gCheckboxWidget; + } else { + ensure_radiobutton_widget(); +- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, +- &focus_width, &focus_pad); + w = gRadiobuttonWidget; + } ++ style = gtk_widget_get_style_context(w); + + *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w)); +- +- if (!interior_focus) { +- *left += (focus_width + focus_pad); +- *right += (focus_width + focus_pad); +- *top += (focus_width + focus_pad); +- *bottom += (focus_width + focus_pad); +- } +- ++ moz_gtk_add_style_border(style, ++ left, top, right, bottom); ++ moz_gtk_add_style_padding(style, ++ left, top, right, bottom); + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_MENUPOPUP: +@@ -2927,6 +2775,8 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + return MOZ_GTK_SUCCESS; + } + /* These widgets have no borders, since they are not containers. */ ++ case MOZ_GTK_CHECKBUTTON_LABEL: ++ case MOZ_GTK_RADIOBUTTON_LABEL: + case MOZ_GTK_SPLITTER_HORIZONTAL: + case MOZ_GTK_SPLITTER_VERTICAL: + case MOZ_GTK_CHECKBUTTON: +@@ -2975,11 +2849,7 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, + gtk_style_context_save(style); + moz_gtk_tab_prepare_style_context(style, flags); + +- // TODO add_style_border() should be replaced +- // with focus-line-width and focus-padding +- // see Bug 877605 + *left = *top = *right = *bottom = 0; +- moz_gtk_add_style_border(style, left, top, right, bottom); + moz_gtk_add_style_padding(style, left, top, right, bottom); + + gtk_widget_style_get (gTabWidget, "tab-curvature", &tab_curvature, NULL); +@@ -2990,16 +2860,9 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, + int initial_gap; + gtk_widget_style_get (gTabWidget, "initial-gap", &initial_gap, NULL); + if (direction == GTK_TEXT_DIR_RTL) +- *right += initial_gap; ++ *right += initial_gap; + else +- *left += initial_gap; +- } +- +- // Top tabs have no bottom border, bottom tabs have no top border +- if (flags & MOZ_GTK_TAB_BOTTOM) { +- *top = 0; +- } else { +- *bottom = 0; ++ *left += initial_gap; + } + + gtk_style_context_restore(style); +diff --git widget/gtk/gtkdrawing.h widget/gtk/gtkdrawing.h +index 1938e8f..5f71cfd 100644 +--- widget/gtk/gtkdrawing.h ++++ widget/gtk/gtkdrawing.h +@@ -293,16 +293,6 @@ moz_gtk_checkbox_get_metrics(gint* indicator_size, gint* indicator_spacing); + gint + moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing); + +-/** +- * Get the inner-border value for a GtkButton widget (button or tree header) +- * widget: [IN] the widget to get the border value for +- * inner_border: [OUT] the inner border +- * +- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise +- */ +-gint +-moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); +- + /** Get the extra size for the focus ring for outline:auto. + * widget: [IN] the widget to get the focus metrics for + * focus_h_width: [OUT] the horizontal width +@@ -313,19 +303,6 @@ moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); + gint + moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width); + +-/** Get the focus metrics for a treeheadercell, button, checkbox, or radio button. +- * widget: [IN] the widget to get the focus metrics for +- * interior_focus: [OUT] whether the focus is drawn around the +- * label (TRUE) or around the whole container (FALSE) +- * focus_width: [OUT] the width of the focus line +- * focus_pad: [OUT] the padding between the focus line and children +- * +- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise +- */ +-gint +-moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, +- gint* focus_width, gint* focus_pad); +- + /** Get the horizontal padding for the menuitem widget or checkmenuitem widget. + * horizontal_padding: [OUT] The left and right padding of the menuitem or checkmenuitem + * +diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp +index e5e1867..76d28e3 100644 +--- widget/gtk/nsNativeThemeGTK.cpp ++++ widget/gtk/nsNativeThemeGTK.cpp +@@ -761,6 +761,8 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType, + return false; + + gint gap_height = moz_gtk_get_tab_thickness(); ++ if (!gap_height) ++ return false; + + int32_t extra = gap_height - GetTabMarginPixels(aFrame); + if (extra <= 0) Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1073117 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1130155 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1130155 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1130155 (revision 392767) @@ -1,172 +1,179 @@ commit eab3e3a Author: Mikhail Teterin Date: Tue Dec 16 19:34:02 2014 -0800 Bug 1130155 - Avoid assert failures when consuming only part of buffer. --- media/libcubeb/src/cubeb_alsa.c | 112 ++++++++++++++++++++++++++++++---------- 1 file changed, 85 insertions(+), 27 deletions(-) diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c index 9bbc129..e72944a 100644 --- media/libcubeb/src/cubeb_alsa.c +++ media/libcubeb/src/cubeb_alsa.c @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include #include #include "cubeb/cubeb.h" @@ -45,6 +47,7 @@ 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_forward); MAKE_TYPEDEF(snd_pcm_frames_to_bytes); MAKE_TYPEDEF(snd_pcm_get_params); /* snd_pcm_hw_params_alloca is actually a macro */ @@ -305,32 +308,35 @@ alsa_refill_stream(cubeb_stream * stm) long got; void * p; int draining; + unsigned pipefailures, againfailures; draining = 0; pthread_mutex_lock(&stm->mutex); - 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. - Unfortunately, this does happen, so just bail out and try again. */ - pthread_mutex_unlock(&stm->mutex); - return RUNNING; - } + for (pipefailures = 0;;) { + r = WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents); + if (r < 0 || revents != POLLOUT || + (avail = WRAP(snd_pcm_avail_update)(stm->pcm)) == 0) { + /* 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. + Unfortunately, this does happen, so just bail out and try again. */ + pthread_mutex_unlock(&stm->mutex); + return RUNNING; + } - avail = WRAP(snd_pcm_avail_update)(stm->pcm); - if (avail == -EPIPE) { + if (avail > 0) + break; + if (pipefailures++ > 11) { + fprintf(stderr, "%s: repeated failures from snd_pcm_avail_update, " + "giving up\n", __func__); + pthread_mutex_unlock(&stm->mutex); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + return ERROR; + } 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. */ - if (avail < 0) { - pthread_mutex_unlock(&stm->mutex); - stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); - return ERROR; } + pipefailures = againfailures = 0; /* This should never happen. */ if ((unsigned int) avail > stm->buffer_size) { -@@ -355,17 +361,67 @@ alsa_refill_stream(cubeb_stream * stm) +@@ -359,10 +365,11 @@ alsa_refill_stream(cubeb_stream * stm) if (got < 0) { pthread_mutex_unlock(&stm->mutex); stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + free(p); return ERROR; } if (got > 0) { -- snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); +- snd_pcm_sframes_t wrote; ++ snd_pcm_sframes_t wrote, towrite = got; + + if (stm->params.format == CUBEB_SAMPLE_FLOAT32NE) { + float * b = (float *) p; +@@ -375,14 +382,62 @@ alsa_refill_stream(cubeb_stream * stm) + b[i] *= stm->volume; + } + } +- wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); - if (wrote == -EPIPE) { - 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; -- gettimeofday(&stm->last_activity, NULL); -+ snd_pcm_sframes_t wrote, towrite = got; + for (;;) { + wrote = WRAP(snd_pcm_writei)(stm->pcm, p, + towrite > avail ? avail : towrite); + switch(wrote) { + case -EPIPE: + if (pipefailures++ > 3) { + fprintf(stderr, "%s: Too many underflows, giving up\n", __func__); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + free(p); + return ERROR; + } + WRAP(snd_pcm_recover)(stm->pcm, wrote, 1); + continue; + case -EAGAIN: + if (againfailures++ > 3) { + fprintf(stderr, "%s: Too many -EAGAIN errors from snd_pcm_writei, " + "giving up\n", __func__); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + free(p); + return ERROR; + } + continue; + case -EBADFD: + fprintf(stderr, "%s: snc_pcm_writei returned -%s, giving up\n", + __func__, "EBADFD"); + free(p); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + return ERROR; + } + if (wrote < 0) { + fprintf(stderr, "%s: snc_pcm_writei returned unexpected error %lld, " + "giving up\n", __func__, (long long)wrote); + free(p); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + return ERROR; + } + pipefailures = againfailures = 0; + stm->write_position += wrote; + gettimeofday(&stm->last_activity, NULL); + if (wrote > towrite) { + fprintf(stderr, "%s: snc_pcm_writei wrote %lld frames, which was more " + "than we requested (%lld). This should not happen, giving up\n", + __func__, (long long)wrote, (long long)towrite); + free(p); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + return ERROR; + } + if (towrite == wrote) + break; + towrite -= wrote; -+ } + } +- assert(wrote >= 0 && wrote == got); +- stm->write_position += wrote; +- gettimeofday(&stm->last_activity, NULL); } if (got != avail) { long buffer_fill = stm->buffer_size - (avail - got); @@ -1177,7 +1232,10 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) return CUBEB_OK; } - assert(delay >= 0); + if (delay < 0) { + WRAP(snd_pcm_forward)(stm->pcm, -delay); + delay = 0; + } *position = 0; if (stm->write_position >= (snd_pcm_uframes_t) delay) { Index: branches/2015Q3/www/firefox-esr/files/patch-bug1138845 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1138845 (nonexistent) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1138845 (revision 392767) @@ -0,0 +1,134 @@ +commit 4b5b332 +Author: Mike Hommey +Date: Tue Mar 3 18:41:13 2015 +0900 + + Bug 1138845 - Don't require atk-bridge for gtk+3 builds. r=tbsaunde +--- + accessible/atk/Platform.cpp | 29 +++++++++++++++++++---------- + config/system-headers | 1 - + configure.in | 2 +- + 3 files changed, 20 insertions(+), 12 deletions(-) + +diff --git accessible/atk/Platform.cpp accessible/atk/Platform.cpp +index a2afd96..2ed5e0b 100644 +--- accessible/atk/Platform.cpp ++++ accessible/atk/Platform.cpp +@@ -18,8 +18,9 @@ + #include + #endif + #include ++ + #if (MOZ_WIDGET_GTK == 3) +-#include ++extern "C" __attribute__((weak,visibility("default"))) int atk_bridge_adaptor_init(int*, char **[]); + #endif + + using namespace mozilla; +@@ -46,7 +47,6 @@ static gulong sToplevel_hide_hook = 0; + + GType g_atk_hyperlink_impl_type = G_TYPE_INVALID; + +-#if (MOZ_WIDGET_GTK == 2) + struct GnomeAccessibilityModule + { + const char *libName; +@@ -67,11 +67,13 @@ static GnomeAccessibilityModule sAtkBridge = { + "gnome_accessibility_module_shutdown", nullptr + }; + ++#if (MOZ_WIDGET_GTK == 2) + static GnomeAccessibilityModule sGail = { + "libgail.so", nullptr, + "gnome_accessibility_module_init", nullptr, + "gnome_accessibility_module_shutdown", nullptr + }; ++#endif + + static nsresult + LoadGtkModule(GnomeAccessibilityModule& aModule) +@@ -98,7 +100,11 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) + else + subLen = loc2 - loc1; + nsAutoCString sub(Substring(libPath, loc1, subLen)); ++#if (MOZ_WIDGET_GTK == 2) + sub.AppendLiteral("/gtk-2.0/modules/"); ++#else ++ sub.AppendLiteral("/gtk-3.0/modules/"); ++#endif + sub.Append(aModule.libName); + aModule.lib = PR_LoadLibrary(sub.get()); + if (aModule.lib) +@@ -123,7 +129,6 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) + } + return NS_OK; + } +-#endif // (MOZ_WIDGET_GTK == 2) + + void + a11y::PlatformInit() +@@ -175,14 +180,17 @@ a11y::PlatformInit() + + // Init atk-bridge now + PR_SetEnv("NO_AT_BRIDGE=0"); +-#if (MOZ_WIDGET_GTK == 2) +- rv = LoadGtkModule(sAtkBridge); +- if (NS_SUCCEEDED(rv)) { +- (*sAtkBridge.init)(); +- } +-#else +- atk_bridge_adaptor_init(nullptr, nullptr); ++#if (MOZ_WIDGET_GTK == 3) ++ if (atk_bridge_adaptor_init) { ++ atk_bridge_adaptor_init(nullptr, nullptr); ++ } else + #endif ++ { ++ nsresult rv = LoadGtkModule(sAtkBridge); ++ if (NS_SUCCEEDED(rv)) { ++ (*sAtkBridge.init)(); ++ } ++ } + + if (!sToplevel_event_hook_added) { + sToplevel_event_hook_added = true; +@@ -210,7 +218,6 @@ a11y::PlatformShutdown() + sToplevel_hide_hook); + } + +-#if (MOZ_WIDGET_GTK == 2) + if (sAtkBridge.lib) { + // Do not shutdown/unload atk-bridge, + // an exit function registered will take care of it +@@ -221,6 +228,7 @@ a11y::PlatformShutdown() + sAtkBridge.init = nullptr; + sAtkBridge.shutdown = nullptr; + } ++#if (MOZ_WIDGET_GTK == 2) + if (sGail.lib) { + // Do not shutdown gail because + // 1) Maybe it's not init-ed by us. e.g. GtkEmbed +diff --git config/system-headers config/system-headers +index 2c94a7d..cf01775 100644 +--- config/system-headers ++++ config/system-headers +@@ -189,7 +189,6 @@ asm/signal.h + ASRegistry.h + assert.h + atk/atk.h +-atk-bridge.h + atlcom.h + atlconv.h + atlctl.cpp +diff --git configure.in configure.in +index 0bd1eb7..f3b3365 100644 +--- configure.in ++++ configure.in +@@ -4408,7 +4408,7 @@ fi + + if test "$COMPILE_ENVIRONMENT"; then + if test "$MOZ_ENABLE_GTK3"; then +- PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 atk-bridge-2.0 $GDK_PACKAGES) ++ PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 $GDK_PACKAGES) + MOZ_GTK3_CFLAGS="-I${_topsrcdir}/widget/gtk/compat-gtk3 $MOZ_GTK3_CFLAGS" + dnl Contrary to MOZ_GTK2_LIBS, MOZ_GTK3_LIBS needs to be literally added to TK_LIBS instead + dnl of a make reference because of how TK_LIBS is mangled in toolkit/library/moz.build Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1138845 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1143686 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1143686 (nonexistent) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1143686 (revision 392767) @@ -0,0 +1,46 @@ +commit e50e738 +Author: Martin Stransky +Date: Mon Mar 16 08:00:00 2015 -0400 + + Bug 1143686 - Gtk3 - Render scrollbar thumb with margin. r=karlt +--- + widget/gtk/gtk3drawing.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c +index 17f46ab..08a58d6 100644 +--- widget/gtk/gtk3drawing.c ++++ widget/gtk/gtk3drawing.c +@@ -1230,6 +1230,7 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, + GtkStyleContext* style; + GtkScrollbar *scrollbar; + GtkAdjustment *adj; ++ GtkBorder margin; + + ensure_scrollbar_widget(); + +@@ -1239,15 +1240,20 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, + scrollbar = GTK_SCROLLBAR(gVertScrollbarWidget); + + gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction); +- ++ + style = gtk_widget_get_style_context(GTK_WIDGET(scrollbar)); + gtk_style_context_save(style); +- ++ + gtk_style_context_add_class(style, GTK_STYLE_CLASS_SLIDER); + gtk_style_context_set_state(style, state_flags); + +- gtk_render_slider(style, cr, rect->x, rect->y, +- rect->width, rect->height, ++ gtk_style_context_get_margin (style, state_flags, &margin); ++ ++ gtk_render_slider(style, cr, ++ rect->x + margin.left, ++ rect->y + margin.top, ++ rect->width - margin.left - margin.right, ++ rect->height - margin.top - margin.bottom, + (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) ? + GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL); + Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1143686 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug1144643 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug1144643 (nonexistent) +++ branches/2015Q3/www/firefox-esr/files/patch-bug1144643 (revision 392767) @@ -0,0 +1,33 @@ +commit a0ccc19 +Author: Martin Stransky +Date: Wed Mar 18 07:14:00 2015 -0400 + + Bug 1144643 - Render tooltips as transparent on Gtk3. r=karlt + + --HG-- + extra : rebase_source : 23085532b27350ca71cbe18db071628388003f33 +--- + widget/gtk/nsNativeThemeGTK.cpp | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp +index e5e1867..26d13a5 100644 +--- widget/gtk/nsNativeThemeGTK.cpp ++++ widget/gtk/nsNativeThemeGTK.cpp +@@ -1528,9 +1528,15 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType) + case NS_THEME_MENUPOPUP: + case NS_THEME_WINDOW: + case NS_THEME_DIALOG: +- // Tooltips use gtk_paint_flat_box(). ++ return eOpaque; ++ // Tooltips use gtk_paint_flat_box() on Gtk2 ++ // but are shaped on Gtk3 + case NS_THEME_TOOLTIP: ++#if (MOZ_WIDGET_GTK == 2) + return eOpaque; ++#else ++ return eTransparent; ++#endif + } + + return eUnknownTransparency; Property changes on: branches/2015Q3/www/firefox-esr/files/patch-bug1144643 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-bug702179 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug702179 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug702179 (revision 392767) @@ -1,36 +1,24 @@ commit 6ddaacd Author: Ginn Chen Date: Wed Nov 30 07:23:46 2011 +0800 Bug 702179 dtrace probes are not installed on Solaris with static js lib r=glandium --- - configure.in | 2 +- - js/src/Makefile.in | 2 -- - 2 files changed, 1 insertion(+), 3 deletions(-) + js/src/Makefile.in | 3 --- + toolkit/library/moz.build | 5 ----- + 2 files changed, 8 deletions(-) -diff --git configure.in configure.in -index 66549c1..75b848d 100644 ---- configure.in -+++ configure.in -@@ -966,7 +966,7 @@ MOZ_BZ2_LIBS='$(call EXPAND_LIBNAME_PATH,bz2,$(DEPTH)/modules/libbz2/src)' - MOZ_PNG_CFLAGS="-I$_objdir/dist/include" # needed for freetype compilation - MOZ_PNG_LIBS='$(call EXPAND_LIBNAME_PATH,mozpng,$(DEPTH)/media/libpng)' - --MOZ_JS_STATIC_LIBS='$(call EXPAND_LIBNAME_PATH,js_static,$(LIBXUL_DIST)/lib)' -+MOZ_JS_STATIC_LIBS='$(call EXPAND_LIBNAME_PATH,js_static,$(DEPTH)/js/src)' - MOZ_JS_SHARED_LIBS='$(call EXPAND_LIBNAME_PATH,mozjs,$(LIBXUL_DIST)/lib)' - MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(LIBXUL_DIST)/bin -Wl,-rpath-link,$(prefix)/lib' - XPCOM_FROZEN_LDOPTS='$(call EXPAND_LIBNAME_PATH,xul mozalloc,$(LIBXUL_DIST)/bin)' diff --git js/src/Makefile.in js/src/Makefile.in -index e28160a..28ca5e8 100644 +index 62bbfa0..90400cb 100644 --- js/src/Makefile.in +++ js/src/Makefile.in -@@ -18,8 +18,6 @@ run_for_side_effects := $(shell echo 'MAKE: $(MAKE)') - STATIC_LIBRARY_NAME = js_static - LIBS = $(NSPR_LIBS) +@@ -17,9 +17,6 @@ TOPLEVEL_BUILD := 1 + run_for_side_effects := $(shell echo 'MAKE: $(MAKE)') + EXTRA_LIBS += $(NSPR_LIBS) -DIST_INSTALL = 1 +-NO_EXPAND_LIBS = 1 - - ifdef JS_STANDALONE - SHARED_LIBRARY_LIBS += $(call EXPAND_LIBNAME_PATH,mfbt,$(DEPTH)/mfbt) - ifndef MOZ_NATIVE_ZLIB + ifdef JS_HAS_CTYPES + ifdef MOZ_NATIVE_FFI + LOCAL_INCLUDES = $(MOZ_FFI_CFLAGS) Index: branches/2015Q3/www/firefox-esr/files/patch-bug779713 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug779713 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug779713 (revision 392767) @@ -1,77 +1,77 @@ diff --git mfbt/Alignment.h mfbt/Alignment.h index e0843ca..353ec36 100644 --- mfbt/Alignment.h +++ mfbt/Alignment.h @@ -9,11 +9,20 @@ #ifndef mozilla_Alignment_h #define mozilla_Alignment_h +#include "mozilla/Attributes.h" + #include #include namespace mozilla { +#if defined(MOZ_HAVE_CXX11_ALIGNAS) +#define MOZ_ALIGNOF(T) alignof(T) +#elif defined(__GNUC__) +#define MOZ_ALIGNOF(T) __alignof__(T) +#elif defined(_MSC_VER) +#define MOZ_ALIGNOF(T) __alignof(T) +#else /* * This class, and the corresponding macro MOZ_ALIGNOF, figures out how many * bytes of alignment a given type needs. @@ -32,6 +41,7 @@ public: }; #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment +#endif /* * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. @@ -43,7 +53,10 @@ public: * will declare a two-character array |arr| aligned to 8 bytes. */ -#if defined(__GNUC__) +#if defined(MOZ_HAVE_CXX11_ALIGNAS) +# define MOZ_ALIGNED_DECL(_type, _align) \ + alignas(_align) _type +#elif defined(__GNUC__) # define MOZ_ALIGNED_DECL(_type, _align) \ _type __attribute__((aligned(_align))) #elif defined(_MSC_VER) diff --git mfbt/Attributes.h mfbt/Attributes.h index d317766..ddb13da 100644 --- mfbt/Attributes.h +++ mfbt/Attributes.h -@@ -54,6 +54,9 @@ +@@ -50,6 +50,7 @@ + * don't indicate support for them here, due to + * http://stackoverflow.com/questions/20498142/visual-studio-2013-explicit-keyword-bug + */ ++# define MOZ_HAVE_CXX11_ALIGNAS + # define MOZ_HAVE_NEVER_INLINE __declspec(noinline) + # define MOZ_HAVE_NORETURN __declspec(noreturn) + # ifdef __clang__ +@@ -70,6 +71,9 @@ # ifndef __has_extension # define __has_extension __has_feature /* compatibility, for older versions of clang */ # endif +# if __has_extension(cxx_alignas) +# define MOZ_HAVE_CXX11_ALIGNAS +# endif # if __has_extension(cxx_constexpr) # define MOZ_HAVE_CXX11_CONSTEXPR # endif -@@ -75,6 +78,9 @@ +@@ -84,6 +88,9 @@ # endif #elif defined(__GNUC__) # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L +# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) +# define MOZ_HAVE_CXX11_ALIGNAS +# endif - # if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0) - # define MOZ_HAVE_CXX11_OVERRIDE - # define MOZ_HAVE_CXX11_FINAL final -@@ -96,6 +102,7 @@ - # define MOZ_HAVE_NORETURN __attribute__((noreturn)) - #elif defined(_MSC_VER) - # if _MSC_VER >= 1800 -+# define MOZ_HAVE_CXX11_ALIGNAS - # define MOZ_HAVE_CXX11_DELETE + # define MOZ_HAVE_CXX11_CONSTEXPR + # define MOZ_HAVE_EXPLICIT_CONVERSION # endif - # if _MSC_VER >= 1700 Index: branches/2015Q3/www/firefox-esr/files/patch-bug826985 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug826985 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug826985 (revision 392767) @@ -1,179 +1,179 @@ commit 8024d93 Author: Henrik Gulbrandsen Date: Fri Jan 4 13:49:22 2013 +0100 Bug 826985 - Support more video formats for WebRTC via libv4l2 on Linux. --- config/system-headers | 1 + configure.in | 7 +++++++ media/webrtc/signaling/test/Makefile.in | 1 + .../modules/video_capture/linux/device_info_linux.cc | 17 +++++++++++++++++ .../modules/video_capture/linux/video_capture_linux.cc | 16 +++++++++++++++- .../webrtc/modules/video_capture/video_capture.gypi | 11 +++++++++++ toolkit/library/Makefile.in | 1 + 6 files changed, 52 insertions(+), 1 deletion(-) diff --git config/system-headers config/system-headers index 55e4cd1..76567b3 100644 --- config/system-headers +++ config/system-headers @@ -635,6 +635,7 @@ libgnomevfs/gnome-vfs-mime-handlers.h libgnomevfs/gnome-vfs-mime-utils.h libgnomevfs/gnome-vfs-ops.h libgnomevfs/gnome-vfs-standard-callbacks.h +libv4l2.h lib$routines.h limits limits.h diff --git configure.in configure.in index 55e4cd1..76567b3 100644 --- configure.in +++ configure.in @@ -5309,6 +5309,9 @@ if test -n "$MOZ_WEBRTC"; then MOZ_VP8_ENCODER=1 MOZ_VP8_ERROR_CONCEALMENT=1 + dnl with libv4l2 we can support more cameras + PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) + dnl enable once Signaling lands MOZ_WEBRTC_SIGNALING=1 AC_DEFINE(MOZ_WEBRTC_SIGNALING) diff --git build/gyp.mozbuild build/gyp.mozbuild index b483cd1..f1dd1f0 100644 --- build/gyp.mozbuild +++ build/gyp.mozbuild @@ -11,6 +11,7 @@ gyp_vars = { 'have_ethtool_cmd_speed_hi': 1 if CONFIG['MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI'] else 0, 'include_alsa_audio': 1 if CONFIG['MOZ_ALSA'] else 0, 'include_pulse_audio': 1 if CONFIG['MOZ_PULSEAUDIO'] else 0, + 'use_libv4l2': 1 if CONFIG['MOZ_LIBV4L2_LIBS'] else 0, # basic stuff for everything 'include_internal_video_render': 0, 'clang_use_chrome_plugins': 0, -diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in +diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build index b483cd1..f1dd1f0 100644 ---- media/webrtc/signaling/test/Makefile.in -+++ media/webrtc/signaling/test/Makefile.in -@@ -7,6 +7,7 @@ LIBS = \ - $(NSPR_LIBS) \ - $(NSS_LIBS) \ - $(REALTIME_LIBS) \ -+ $(MOZ_LIBV4L2_LIBS) \ - $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \ - $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \ - $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \ +--- media/webrtc/signaling/test/moz.build ++++ media/webrtc/signaling/test/moz.build +@@ -122,6 +122,7 @@ if CONFIG['JS_SHARED_LIBRARY']: + 'js', + ] + ++OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS'] + OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] + OS_LIBS += CONFIG['REALTIME_LIBS'] + diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc index 239a292..bab496c 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc +++ media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc @@ -25,10 +25,21 @@ #else #include #endif +#ifdef HAVE_LIBV4L2 +#include +#endif #include "webrtc/system_wrappers/interface/ref_count.h" #include "webrtc/system_wrappers/interface/trace.h" +#ifdef HAVE_LIBV4L2 +#define open v4l2_open +#define close v4l2_close +#define dup v4l2_dup +#define ioctl v4l2_ioctl +#define mmap v4l2_mmap +#define munmap v4l2_munmap +#endif namespace webrtc { @@ -130,6 +142,11 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( memset(deviceNameUTF8, 0, deviceNameLength); memcpy(cameraName, cap.card, sizeof(cap.card)); + if (cameraName[0] == '\0') + { + sprintf(cameraName, "Camera at /dev/video%d", deviceNumber); + } + if (deviceNameLength >= strlen(cameraName)) { memcpy(deviceNameUTF8, cameraName, strlen(cameraName)); diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc index 12df1b3..e9863ba 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc +++ media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc @@ -25,6 +25,9 @@ #else #include #endif +#ifdef HAVE_LIBV4L2 +#include +#endif #include @@ -26,6 +31,15 @@ #include "critical_section_wrapper.h" #include "video_capture_linux.h" +#ifdef HAVE_LIBV4L2 +#define open v4l2_open +#define close v4l2_close +#define dup v4l2_dup +#define ioctl v4l2_ioctl +#define mmap v4l2_mmap +#define munmap v4l2_munmap +#endif + namespace webrtc { namespace videocapturemodule diff --git media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi index d46b5aa..e452223 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi +++ media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi @@ -7,6 +7,9 @@ # be found in the AUTHORS file in the root of the source tree. { + 'variables': { + 'use_libv4l2%': 0, + }, 'targets': [ { 'target_name': 'video_capture_module', -@@ -49,6 +52,16 @@ - }, { # include_internal_video_capture == 1 - 'conditions': [ - ['include_v4l2_video_capture==1', { -+ 'conditions': [ -+ ['use_libv4l2==1', { -+ 'defines': [ -+ 'HAVE_LIBV4L2', -+ ], -+ 'libraries': [ -+ '-lv4l2', -+ ], -+ }], +@@ -69,6 +72,19 @@ + 'linux/video_capture_linux.cc', + 'linux/video_capture_linux.h', + ], ++ 'conditions': [ ++ ['use_libv4l2==1', { ++ 'defines': [ ++ 'HAVE_LIBV4L2', + ], - 'include_dirs': [ - 'linux', - ], -diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in ++ 'cflags_mozilla': [ ++ '$(MOZ_LIBV4L2_CFLAGS)', ++ ], ++ 'libraries': [ ++ '-lv4l2', ++ ], ++ }], ++ ], + }], # linux + ['OS=="mac"', { + 'sources': [ +diff --git toolkit/library/moz.build toolkit/library/moz.build index 9c16ffa..1db3794 100644 ---- toolkit/library/libxul.mk -+++ toolkit/library/libxul.mk -@@ -182,6 +182,10 @@ endif +--- toolkit/library/moz.build ++++ toolkit/library/moz.build +@@ -163,6 +163,7 @@ if CONFIG['OS_ARCH'] == 'Linux' and CONF + ] - EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib) + OS_LIBS += CONFIG['MOZ_CAIRO_OSLIBS'] ++OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS'] + OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] + OS_LIBS += CONFIG['MOZ_APP_EXTRA_LIBS'] -+ifdef MOZ_LIBV4L2_LIBS -+EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS) -+endif -+ - ifdef MOZ_WEBRTC - ifeq (WINNT,$(OS_TARGET)) - EXTRA_DSO_LDOPTS += \ Index: branches/2015Q3/www/firefox-esr/files/patch-bug847568 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-bug847568 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-bug847568 (revision 392767) @@ -1,208 +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 -@@ -77,6 +77,8 @@ export:: $(export-preqs) +@@ -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 -@@ -1145,3 +1145,11 @@ unicode/utypes.h +@@ -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 -@@ -8032,6 +8032,52 @@ if test "$USE_FC_FREETYPE"; then +@@ -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) ++ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 0.9.34) +fi + +AC_SUBST(MOZ_NATIVE_HARFBUZZ) -+AC_SUBST(MOZ_HARFBUZZ_CFLAGS) -+AC_SUBST(MOZ_HARFBUZZ_LIBS) + +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) -+AC_SUBST(MOZ_GRAPHITE2_CFLAGS) -+AC_SUBST(MOZ_GRAPHITE2_LIBS) + +dnl ======================================================== dnl Check for pixman and cairo dnl ======================================================== -diff --git content/base/src/moz.build content/base/src/moz.build -index d4f6380..0ee55df 100644 ---- content/base/src/moz.build -+++ content/base/src/moz.build -@@ -179,6 +179,9 @@ SOURCES += [ +diff --git dom/base/moz.build dom/base/moz.build +index a660ba4..6b2f602 100644 +--- dom/base/moz.build ++++ dom/base/moz.build +@@ -196,6 +196,9 @@ SOURCES += [ 'nsObjectLoadingContent.cpp', ] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: -+ SOURCES['nsContentUtils.cpp'].flags += [CONFIG['MOZ_HARFBUZZ_CFLAGS']] ++ 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/Makefile.in gfx/skia/Makefile.in -index ee0efb2..98e169d6f 100644 ---- gfx/skia/Makefile.in -+++ gfx/skia/Makefile.in -@@ -15,6 +15,10 @@ ifeq (qt,$(MOZ_WIDGET_TOOLKIT)) - OS_CXXFLAGS += $(MOZ_CAIRO_CFLAGS) $(MOZ_PANGO_CFLAGS) $(CAIRO_FT_CFLAGS) - endif +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'] -+ifdef MOZ_NATIVE_HARFBUZZ -+OS_CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_HARFBUZZ']: ++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + - include $(topsrcdir)/config/rules.mk + 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'] - ifeq ($(CPU_ARCH)_$(GNU_CC),arm_1) -diff --git gfx/thebes/Makefile.in gfx/thebes/Makefile.in -index 45c36ae..79d32cf 100644 ---- gfx/thebes/Makefile.in -+++ gfx/thebes/Makefile.in -@@ -13,6 +13,14 @@ DEFINES := $(filter-out -DUNICODE,$(DEFINES)) - CXXFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS) - CFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS) ++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'] -+ifdef MOZ_NATIVE_GRAPHITE2 -+CXXFLAGS += $(MOZ_GRAPHITE2_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_HARFBUZZ']: ++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + -+ifdef MOZ_NATIVE_HARFBUZZ -+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_GRAPHITE2']: ++ CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS'] + - ifeq ($(MOZ_WIDGET_TOOLKIT),android) - CXXFLAGS += $(CAIRO_FT_CFLAGS) - endif -diff --git intl/unicharutil/util/Makefile.in intl/unicharutil/util/Makefile.in -index f6b9f7c..60863f4 100644 ---- intl/unicharutil/util/Makefile.in -+++ intl/unicharutil/util/Makefile.in -@@ -21,3 +21,7 @@ ifdef _MSC_VER - OS_COMPILE_CXXFLAGS += -Zl - OS_COMPILE_CFLAGS += -Zl - endif -+ -+ifdef MOZ_NATIVE_HARFBUZZ -+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS) -+endif -diff --git netwerk/dns/Makefile.in netwerk/dns/Makefile.in -index 1cacbd7..f5d72bb 100644 ---- netwerk/dns/Makefile.in -+++ netwerk/dns/Makefile.in -@@ -5,6 +5,10 @@ + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('android', 'gonk', 'qt'): + CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] - include $(topsrcdir)/config/rules.mk +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']: -+ifdef MOZ_NATIVE_HARFBUZZ -+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS) -+endif + if CONFIG['ENABLE_INTL_API']: + CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS'] + - # Generate the include file containing compact, static definitions - # for effective TLD data. - etld_data.inc: $(srcdir)/prepare_tlds.py $(srcdir)/effective_tld_names.dat -diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk ++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 +@@ -64,3 +64,6 @@ GENERATED_FILES = [ + LOCAL_INCLUDES += [ + '/netwerk/base', + ] ++ ++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/libxul.mk -+++ toolkit/library/libxul.mk -@@ -89,6 +89,14 @@ ifndef MOZ_TREE_PIXMAN - EXTRA_DSO_LDOPTS += $(MOZ_PIXMAN_LIBS) - endif +--- 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'] -+ifdef MOZ_NATIVE_GRAPHITE2 -+EXTRA_DSO_LDOPTS += $(MOZ_GRAPHITE2_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_GRAPHITE2']: ++ OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS'] + -+ifdef MOZ_NATIVE_HARFBUZZ -+EXTRA_DSO_LDOPTS += $(MOZ_HARFBUZZ_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_HARFBUZZ']: ++ OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS'] + - ifdef MOZ_DMD - EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,dmd,$(DIST)/lib) - endif + if CONFIG['MOZ_OSS']: + OS_LIBS += CONFIG['MOZ_OSS_LIBS'] + Index: branches/2015Q3/www/firefox-esr/files/patch-ijg-libjpeg =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-ijg-libjpeg (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-ijg-libjpeg (revision 392767) @@ -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) + #if MOZ_BIG_ENDIAN #define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_XRGB #else #define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_BGRX #endif +#else +/* Colorspace conversion (copied from jpegint.h) */ +struct jpeg_color_deconverter { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, color_convert, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows)); +}; + +METHODDEF(void) +ycc_rgb_convert_argb (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows); +#endif +} static void cmyk_convert_rgb(JSAMPROW row, JDIMENSION width); -@@ -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: branches/2015Q3/www/firefox-esr/files/patch-media-libstagefright-foundation-AString.cpp =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-media-libstagefright-foundation-AString.cpp (nonexistent) +++ branches/2015Q3/www/firefox-esr/files/patch-media-libstagefright-foundation-AString.cpp (revision 392767) @@ -0,0 +1,16 @@ +--- media/libstagefright/frameworks/av/media/libstagefright/foundation/AString.cpp~ ++++ media/libstagefright/frameworks/av/media/libstagefright/foundation/AString.cpp +@@ -23,6 +23,13 @@ + #include "ADebug.h" + #include "AString.h" + ++#ifdef __FreeBSD__ ++# include ++# if __FreeBSD_version < 900506 ++# undef tolower ++# endif ++#endif ++ + namespace stagefright { + + // static Property changes on: branches/2015Q3/www/firefox-esr/files/patch-media-libstagefright-foundation-AString.cpp ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-system-openh264 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-system-openh264 (nonexistent) +++ branches/2015Q3/www/firefox-esr/files/patch-system-openh264 (revision 392767) @@ -0,0 +1,239 @@ +# Revert bug 1045209 to allow using absolute path + +diff --git dom/media/gmp/GMPChild.cpp dom/media/gmp/GMPChild.cpp +index 1dde3ac..12c88cf 100644 +--- dom/media/gmp/GMPChild.cpp ++++ dom/media/gmp/GMPChild.cpp +@@ -76,21 +76,14 @@ GetFileBase(const std::string& aPluginPa + } + #endif + +- nsCOMPtr parent; +- rv = aFileBase->GetParent(getter_AddRefs(parent)); +- if (NS_FAILED(rv)) { +- return false; +- } +- +- nsAutoString parentLeafName; +- rv = parent->GetLeafName(parentLeafName); +- if (NS_FAILED(rv)) { ++ nsAutoString leafName; ++ if (NS_FAILED(aFileBase->GetLeafName(leafName))) { + return false; + } + +- aBaseName = Substring(parentLeafName, ++ aBaseName = Substring(leafName, + 4, +- parentLeafName.Length() - 1); ++ leafName.Length() - 1); + return true; + } + +diff --git dom/media/gmp/GMPParent.cpp dom/media/gmp/GMPParent.cpp +index aa60acf..90878ca 100644 +--- dom/media/gmp/GMPParent.cpp ++++ dom/media/gmp/GMPParent.cpp +@@ -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 +@@ -888,9 +889,7 @@ + let gmpAddon = this._gmpAddon; + let installToDirPath = Cc["@mozilla.org/file/local;1"]. + createInstance(Ci.nsIFile); +- let path = OS.Path.join(OS.Constants.Path.profileDir, +- gmpAddon.id, +- gmpAddon.version); ++ let path = OS.Path.join(OS.Constants.Path.profileDir, gmpAddon.id); + installToDirPath.initWithPath(path); + log.info("install to directory path: " + installToDirPath.path); + let gmpInstaller = new GMPExtractor(zipPath, installToDirPath.path); +@@ -885,10 +883,12 @@ + // Success, set the prefs + let now = Math.round(Date.now() / 1000); + GMPPrefs.set(GMPPrefs.KEY_PLUGIN_LAST_UPDATE, now, gmpAddon.id); +- // Setting the version pref signals installation completion to consumers, +- // if you need to set other prefs etc. do it before this. ++ // Setting the path pref signals installation completion to consumers, ++ // so set the version and potential other information they use first. + GMPPrefs.set(GMPPrefs.KEY_PLUGIN_VERSION, gmpAddon.version, + gmpAddon.id); ++ GMPPrefs.set(GMPPrefs.KEY_PLUGIN_PATH, ++ installToDirPath.path, gmpAddon.id); + this._deferred.resolve(extractedPaths); + }, err => { + this._deferred.reject(err); +diff --git toolkit/modules/GMPUtils.jsm toolkit/modules/GMPUtils.jsm +index 1f3a0b1..93517be 100644 +--- toolkit/modules/GMPUtils.jsm ++++ toolkit/modules/GMPUtils.jsm +@@ -70,6 +70,7 @@ this.GMPPrefs = { + KEY_EME_ENABLED: "media.eme.enabled", + KEY_PLUGIN_ENABLED: "media.{0}.enabled", + KEY_PLUGIN_LAST_UPDATE: "media.{0}.lastUpdate", ++ KEY_PLUGIN_PATH: "media.{0}.path", + KEY_PLUGIN_VERSION: "media.{0}.version", + KEY_PLUGIN_AUTOUPDATE: "media.{0}.autoupdate", + KEY_PLUGIN_FORCEVISIBLE: "media.{0}.forcevisible", +diff --git toolkit/mozapps/extensions/internal/GMPProvider.jsm toolkit/mozapps/extensions/internal/GMPProvider.jsm +index 1f3a0b1..93517be 100644 +--- toolkit/mozapps/extensions/internal/GMPProvider.jsm ++++ toolkit/mozapps/extensions/internal/GMPProvider.jsm +@@ -100,12 +100,11 @@ + Log.repository.getLoggerWithMessagePrefix("Toolkit.GMP", + "GMPWrapper(" + + this._plugin.id + ") "); +- Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, +- this._plugin.id), ++ Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, this._plugin.id), + this.onPrefEnabledChanged, this); +- Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION, ++ Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH, + this._plugin.id), +- this.onPrefVersionChanged, this); ++ this.onPrefPathChanged, this); + if (this._plugin.isEME) { + Preferences.observe(GMPPrefs.KEY_EME_ENABLED, + this.onPrefEMEGlobalEnabledChanged, this); +@@ -120,17 +119,14 @@ + optionsType: AddonManager.OPTIONS_TYPE_INLINE, + get optionsURL() { return this._plugin.optionsURL; }, + ++ + set gmpPath(aPath) { this._gmpPath = aPath; }, + get gmpPath() { +- if (!this._gmpPath && this.isInstalled) { +- this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir, +- this._plugin.id, +- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, +- null, this._plugin.id)); ++ if (!this._gmpPath) { ++ this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); + } + return this._gmpPath; + }, +- + get id() { return this._plugin.id; }, + get type() { return "plugin"; }, + get isGMPlugin() { return true; }, +@@ -141,8 +137,13 @@ + get description() { return this._plugin.description; }, + get fullDescription() { return this._plugin.fullDescription; }, + +- get version() { return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null, +- this._plugin.id); }, ++ get version() { ++ if (this.isInstalled) { ++ return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null, ++ this._plugin.id); ++ } ++ return null; ++ }, + + get isActive() { return !this.appDisabled && !this.userDisabled; }, + get appDisabled() { +@@ -289,24 +290,17 @@ + + get pluginMimeTypes() { return []; }, + get pluginLibraries() { +- if (this.isInstalled) { +- let path = this.version; +- return [path]; +- } +- return []; ++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); ++ return path && path.length ? [OS.Path.basename(path)] : []; + }, + get pluginFullpath() { +- if (this.isInstalled) { +- let path = OS.Path.join(OS.Constants.Path.profileDir, +- this._plugin.id, +- this.version); +- return [path]; +- } +- return []; ++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); ++ return path && path.length ? [path] : []; + }, + + get isInstalled() { +- return this.version && this.version.length > 0; ++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); ++ return path && path.length > 0; + }, + + _handleEnabledChanged: function() { +@@ -362,10 +356,10 @@ + } + }, + +- onPrefVersionChanged: function() { ++ onPrefPathChanged: function() { + AddonManagerPrivate.callAddonListeners("onUninstalling", this, false); + if (this._gmpPath) { +- this._log.info("onPrefVersionChanged() - unregistering gmp directory " + ++ this._log.info("onPrefPathChanged() - unregistering gmp directory " + + this._gmpPath); + gmpService.removePluginDirectory(this._gmpPath); + } +@@ -374,15 +368,10 @@ + AddonManagerPrivate.callInstallListeners("onExternalInstall", null, this, + null, false); + AddonManagerPrivate.callAddonListeners("onInstalling", this, false); +- this._gmpPath = null; +- if (this.isInstalled) { +- this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir, +- this._plugin.id, +- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, +- null, this._plugin.id)); +- } ++ this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, ++ null, this._plugin.id); + if (this._gmpPath && this.isActive) { +- this._log.info("onPrefVersionChanged() - registering gmp directory " + ++ this._log.info("onPrefPathChanged() - registering gmp directory " + + this._gmpPath); + gmpService.addPluginDirectory(this._gmpPath); + } +@@ -393,9 +382,9 @@ + Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, + this._plugin.id), + this.onPrefEnabledChanged, this); +- Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION, ++ Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH, + this._plugin.id), +- this.onPrefVersionChanged, this); ++ this.onPrefPathChanged, this); + if (this._plugin.isEME) { + Preferences.ignore(GMPPrefs.KEY_EME_ENABLED, + this.onPrefEMEGlobalEnabledChanged, this); Property changes on: branches/2015Q3/www/firefox-esr/files/patch-system-openh264 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/firefox-esr/files/patch-z-bug517422 =================================================================== --- branches/2015Q3/www/firefox-esr/files/patch-z-bug517422 (revision 392766) +++ branches/2015Q3/www/firefox-esr/files/patch-z-bug517422 (revision 392767) @@ -1,492 +1,582 @@ # 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 -@@ -79,6 +79,13 @@ export:: $(export-preqs) +@@ -77,6 +77,14 @@ export:: $(export-preqs) -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \ -DMOZ_NATIVE_GRAPHITE2=$(MOZ_NATIVE_GRAPHITE2) \ -DMOZ_NATIVE_HARFBUZZ=$(MOZ_NATIVE_HARFBUZZ) \ + -DMOZ_NATIVE_OGG=$(MOZ_NATIVE_OGG) \ + -DMOZ_NATIVE_THEORA=$(MOZ_NATIVE_THEORA) \ + -DMOZ_NATIVE_VORBIS=$(MOZ_NATIVE_VORBIS) \ + -DMOZ_NATIVE_TREMOR=$(MOZ_NATIVE_TREMOR) \ ++ -DMOZ_NATIVE_CELT=$(MOZ_NATIVE_CELT) \ + -DMOZ_NATIVE_OPUS=$(MOZ_NATIVE_OPUS) \ + -DMOZ_NATIVE_SPEEX=$(MOZ_NATIVE_SPEEX) \ + -DMOZ_NATIVE_SOUNDTOUCH=$(MOZ_NATIVE_SOUNDTOUCH) \ $(srcdir)/system-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers $(INSTALL) system_wrappers $(DIST) diff --git config/external/moz.build config/external/moz.build index f67c5c7..eb909ce 100644 --- config/external/moz.build +++ config/external/moz.build -@@ -15,13 +15,19 @@ if CONFIG['MOZ_UPDATER']: - if not CONFIG['MOZ_NATIVE_BZ2']: - external_dirs += ['modules/libbz2'] +@@ -19,10 +19,19 @@ if CONFIG['MOZ_UPDATER']: + # There's no "native brotli" yet, but probably in the future... + external_dirs += ['modules/brotli'] -if CONFIG['MOZ_VORBIS']: +if not CONFIG['MOZ_NATIVE_OGG']: + external_dirs += ['media/libogg'] + ++if not CONFIG['MOZ_NATIVE_CELT'] or not CONFIG['MOZ_NATIVE_OPUS']: ++ external_dirs += ['media/libopus'] ++ +if not CONFIG['MOZ_NATIVE_THEORA']: + external_dirs += ['media/libtheora'] + +if CONFIG['MOZ_VORBIS'] and not CONFIG['MOZ_NATIVE_VORBIS']: external_dirs += ['media/libvorbis'] -if CONFIG['MOZ_TREMOR']: +if CONFIG['MOZ_TREMOR'] and not CONFIG['MOZ_NATIVE_TREMOR']: external_dirs += ['media/libtremor'] --if CONFIG['MOZ_OPUS']: -+if CONFIG['MOZ_OPUS'] and not CONFIG['MOZ_NATIVE_OPUS']: - external_dirs += ['media/libopus'] - if CONFIG['MOZ_WEBM']: -@@ -36,13 +42,15 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ_NATIVE_LIBVPX']: +@@ -37,15 +46,16 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ if not CONFIG['MOZ_NATIVE_PNG']: external_dirs += ['media/libpng'] +if not CONFIG['MOZ_NATIVE_SPEEX']: + external_dirs += ['media/libspeex_resampler'] + +if not CONFIG['MOZ_NATIVE_SOUNDTOUCH']: + external_dirs += ['media/libsoundtouch'] + external_dirs += [ 'media/kiss_fft', 'media/libcubeb', - 'media/libogg', +- 'media/libopus', - 'media/libtheora', - 'media/libspeex_resampler', + 'media/libstagefright', - 'media/libsoundtouch', ] - PARALLEL_DIRS += ['../../' + i for i in external_dirs] + 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 -@@ -1050,8 +1050,6 @@ X11/Xutil.h - xpt_struct.h - xpt_xdr.h +@@ -1263,7 +1263,6 @@ X11/Xlocale.h + X11/Xos.h + X11/Xutil.h zmouse.h --speex/speex_resampler.h -soundtouch/SoundTouch.h #if MOZ_NATIVE_PNG==1 png.h #endif -@@ -1119,6 +1117,8 @@ ogg/ogg.h +@@ -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 - cubeb/cubeb.h -+speex/speex_resampler.h -+soundtouch/SoundTouch.h - #endif - gst/gst.h - gst/app/gstappsink.h -@@ -1155,3 +1155,29 @@ graphite2/Segment.h +@@ -1365,3 +1365,35 @@ graphite2/Segment.h harfbuzz/hb-ot.h harfbuzz/hb.h #endif +#if MOZ_NATIVE_OGG==1 +ogg/ogg.h +ogg/os_types.h +#endif +#if MOZ_NATIVE_THEORA==1 +theora/theoradec.h +#endif +#if MOZ_NATIVE_VORBIS==1 +vorbis/codec.h +vorbis/vorbisenc.h +#endif +#if MOZ_NATIVE_TREMOR==1 +tremor/ivorbiscodec.h +#endif ++#if MOZ_NATIVE_CELT==1 ++celt.h ++celt_header.h ++celt/celt.h ++celt/celt_header.h ++#endif +#if MOZ_NATIVE_OPUS==1 +opus.h +opus_multistream.h +opus/opus.h +opus/opus_multistream.h +#endif +#if MOZ_NATIVE_SPEEX==1 +speex/speex_resampler.h +#endif +#if MOZ_NATIVE_SOUNDTOUCH==1 +soundtouch/SoundTouch.h +#endif diff --git configure.in configure.in index 87db361..7947626 100644 --- configure.in +++ configure.in -@@ -5211,6 +5211,63 @@ if test "${ac_cv_c_attribute_aligned}" != "0"; then +@@ -5223,6 +5223,157 @@ if test "${ac_cv_c_attribute_aligned}" ! fi dnl ======================================================== +dnl Check for libogg +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-ogg, +[ --with-system-ogg Use system libogg (located with pkgconfig)], +MOZ_NATIVE_OGG=1, +MOZ_NATIVE_OGG=) + +if test -n "$MOZ_NATIVE_OGG"; then + PKG_CHECK_MODULES(MOZ_OGG, ogg >= 1.2.1) + + _SAVE_LIBS=$LIBS + LIBS="$LIBS $MOZ_OGG_LIBS" + AC_CHECK_FUNC(ogg_set_mem_functions, [], + [AC_DEFINE(MOZ_OGG_NO_MEM_REPORTING)]) + LIBS=$_SAVE_LIBS +fi + +AC_SUBST(MOZ_NATIVE_OGG) -+AC_SUBST(MOZ_OGG_CFLAGS) -+AC_SUBST(MOZ_OGG_LIBS) + +dnl ======================================================== +dnl Check for libvorbis +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-vorbis, +[ --with-system-vorbis Use system libvorbis (located with pkgconfig)], +MOZ_NATIVE_VORBIS=1, +MOZ_NATIVE_VORBIS=) + +if test -n "$MOZ_NATIVE_VORBIS"; then + PKG_CHECK_MODULES(MOZ_VORBIS, vorbis vorbisenc >= 1.3.5) +fi + +AC_SUBST(MOZ_NATIVE_VORBIS) -+AC_SUBST(MOZ_VORBIS_CFLAGS) -+AC_SUBST(MOZ_VORBIS_LIBS) + +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) -+AC_SUBST(MOZ_TREMOR_CFLAGS) -+AC_SUBST(MOZ_TREMOR_LIBS) + +dnl ======================================================== - dnl = Disable Opus audio codec support - dnl ======================================================== - MOZ_ARG_DISABLE_BOOL(opus, -@@ -5219,6 +5274,97 @@ MOZ_ARG_DISABLE_BOOL(opus, - MOZ_OPUS=1) - - dnl ======================================================== ++dnl Check for libcelt ++dnl ======================================================== ++ ++MOZ_ARG_WITH_BOOL(system-celt, ++[ --with-system-celt Use system libcelt (located with pkgconfig)], ++MOZ_NATIVE_CELT=1, ++MOZ_NATIVE_CELT=) ++ ++if test -n "$MOZ_NATIVE_CELT"; then ++ PKG_CHECK_MODULES(MOZ_CELT, celt) ++else ++ MOZ_CELT_CFLAGS='-I$(topsrcdir)/media/libopus' ++fi ++ ++AC_SUBST(MOZ_NATIVE_CELT) ++ ++dnl ======================================================== +dnl Check for libopus +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-opus, +[ --with-system-opus Use system libopus (located with pkgconfig)], +MOZ_NATIVE_OPUS=1, +MOZ_NATIVE_OPUS=) + +if test -n "$MOZ_NATIVE_OPUS"; then + PKG_CHECK_MODULES(MOZ_OPUS, opus >= 1.1) +else + MOZ_OPUS_CFLAGS='-I$(topsrcdir)/media/libopus/include' +fi + +AC_SUBST(MOZ_NATIVE_OPUS) -+AC_SUBST(MOZ_OPUS_CFLAGS) -+AC_SUBST(MOZ_OPUS_LIBS) + +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) -+AC_SUBST(MOZ_THEORA_CFLAGS) -+AC_SUBST(MOZ_THEORA_LIBS) + +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) -+AC_SUBST(MOZ_SPEEX_CFLAGS) -+AC_SUBST(MOZ_SPEEX_LIBS) + +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) -+AC_SUBST(MOZ_SOUNDTOUCH_CFLAGS) -+AC_SUBST(MOZ_SOUNDTOUCH_LIBS) + +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 -@@ -26,7 +26,7 @@ public: - }; +--- 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/Makefile.in content/media/Makefile.in -index fd34449..c6c42c8 100644 ---- content/media/Makefile.in -+++ content/media/Makefile.in -@@ -6,3 +6,31 @@ include $(topsrcdir)/config/rules.mk +diff --git dom/media/moz.build dom/media/moz.build +index 7526cff..e0a0ca0 100644 +--- dom/media/moz.build ++++ dom/media/moz.build +@@ -212,3 +212,24 @@ if CONFIG['ANDROID_VERSION'] > '15': - CFLAGS += $(GSTREAMER_CFLAGS) - CXXFLAGS += $(GSTREAMER_CFLAGS) + CFLAGS += CONFIG['GSTREAMER_CFLAGS'] + CXXFLAGS += CONFIG['GSTREAMER_CFLAGS'] + -+ifdef MOZ_NATIVE_OGG -+CXXFLAGS += $(MOZ_OGG_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_OGG']: ++ CXXFLAGS += CONFIG['MOZ_OGG_CFLAGS'] + -+ifdef MOZ_NATIVE_THEORA -+CXXFLAGS += $(MOZ_THEORA_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_THEORA']: ++ CXXFLAGS += CONFIG['MOZ_THEORA_CFLAGS'] + -+ifdef MOZ_NATIVE_VORBIS -+CXXFLAGS += $(MOZ_VORBIS_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_VORBIS']: ++ CXXFLAGS += CONFIG['MOZ_VORBIS_CFLAGS'] + -+ifdef MOZ_NATIVE_TREMOR -+CXXFLAGS += $(MOZ_TREMOR_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_TREMOR']: ++ CXXFLAGS += CONFIG['MOZ_TREMOR_CFLAGS'] + -+ifdef MOZ_NATIVE_OPUS -+CXXFLAGS += $(MOZ_OPUS_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_OPUS']: ++ CXXFLAGS += CONFIG['MOZ_OPUS_CFLAGS'] + -+ifdef MOZ_NATIVE_SPEEX -+CXXFLAGS += $(MOZ_SPEEX_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_SPEEX']: ++ CXXFLAGS += CONFIG['MOZ_SPEEX_CFLAGS'] + -+ifdef MOZ_NATIVE_SOUNDTOUCH -+CXXFLAGS += $(MOZ_SOUNDTOUCH_CFLAGS) -+endif -diff --git media/libcubeb/src/Makefile.in media/libcubeb/src/Makefile.in -index 4c14494..1cb98e2 100644 ---- media/libcubeb/src/Makefile.in -+++ media/libcubeb/src/Makefile.in -@@ -9,3 +9,7 @@ CFLAGS += \ - $(MOZ_ALSA_CFLAGS) \ - $(MOZ_PULSEAUDIO_CFLAGS) \ - $(NULL) ++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'] + -+ifdef MOZ_NATIVE_SPEEX -+CFLAGS += $(MOZ_SPEEX_CFLAGS) -+endif -diff --git media/libtheora/Makefile.in media/libtheora/Makefile.in -new file mode 100644 -index 0000000..1f02dc0 ---- /dev/null -+++ media/libtheora/Makefile.in -@@ -0,0 +1,9 @@ -+# This Source Code Form is subject to the terms of the Mozilla Public -+# License, v. 2.0. If a copy of the MPL was not distributed with this -+# file, You can obtain one at http://mozilla.org/MPL/2.0/. + 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 + -+include $(topsrcdir)/config/rules.mk ++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. + -+ifdef MOZ_NATIVE_OGG -+CFLAGS += $(MOZ_OGG_CFLAGS) -+endif -diff --git media/libtremor/Makefile.in media/libtremor/Makefile.in -new file mode 100644 -index 0000000..1f02dc0 ---- /dev/null -+++ media/libtremor/Makefile.in -@@ -0,0 +1,9 @@ -+# This Source Code Form is subject to the terms of the Mozilla Public -+# License, v. 2.0. If a copy of the MPL was not distributed with this -+# file, You can obtain one at http://mozilla.org/MPL/2.0/. ++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. + -+include $(topsrcdir)/config/rules.mk ++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. + -+ifdef MOZ_NATIVE_OGG -+CFLAGS += $(MOZ_OGG_CFLAGS) -+endif -diff --git media/libvorbis/Makefile.in media/libvorbis/Makefile.in -new file mode 100644 -index 0000000..1f02dc0 ---- /dev/null -+++ media/libvorbis/Makefile.in -@@ -0,0 +1,9 @@ -+# This Source Code Form is subject to the terms of the Mozilla Public -+# License, v. 2.0. If a copy of the MPL was not distributed with this -+# file, You can obtain one at http://mozilla.org/MPL/2.0/. ++The in-tree copy may be omitted during build by --with-system-theora. ++Keep version in configure.in in sync on updates. +diff --git media/libtheora/moz.build media/libtheora/moz.build +index 14265b1..3069e99 100644 +--- media/libtheora/moz.build ++++ media/libtheora/moz.build +@@ -93,3 +93,5 @@ if CONFIG['GNU_AS']: + if CONFIG['OS_TARGET'] == 'Android': + DEFINES['__linux__'] = True + ++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. + -+include $(topsrcdir)/config/rules.mk ++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. + -+ifdef MOZ_NATIVE_OGG -+CFLAGS += $(MOZ_OGG_CFLAGS) -+endif -diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in ++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/Makefile.in -+++ media/webrtc/signaling/test/Makefile.in -@@ -48,6 +48,12 @@ LIBS += \ - $(NULL) - endif +--- 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'] -+ifdef MOZ_NATIVE_OPUS -+LIBS += \ -+ $(MOZ_OPUS_LIBS) \ -+ $(NULL) -+endif ++if CONFIG['MOZ_NATIVE_OPUS']: ++ OS_LIBS += CONFIG['MOZ_OPUS_LIBS'] + - ifdef MOZ_NATIVE_LIBVPX - LIBS += \ - $(MOZ_LIBVPX_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 -@@ -14,9 +14,9 @@ +@@ -17,18 +17,11 @@ 'conditions': [ ['build_with_mozilla==1', { # Mozilla provides its own build of the opus library. - 'include_dirs': [ - '/media/libopus/include', -- ] +- '/media/libopus/src', +- '/media/libopus/celt', + 'cflags_mozilla': [ ++ '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt', + '$(MOZ_OPUS_CFLAGS)', -+ ], ++ '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src', + ], +- 'direct_dependent_settings': { +- 'include_dirs': [ +- '/media/libopus/include', +- '/media/libopus/src', +- '/media/libopus/celt', +- ], +- }, }, { 'dependencies': [ '<(DEPTH)/third_party/opus/opus.gyp:opus' -diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk +diff --git media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi +index 00e77e7..55f48ab 100644 +--- media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi ++++ media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi +@@ -84,19 +84,11 @@ + ], + }], + ['build_with_mozilla==1', { +- 'include_dirs': [ +- # Need Opus header files for the audio classifier. +- '<(DEPTH)/../../../media/opus/celt', +-# '<(DEPTH)/third_party/opus/src/src', ++ 'cflags_mozilla': [ ++ '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt', ++ '$(MOZ_OPUS_CFLAGS)', ++ '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src', + ], +- 'direct_dependent_settings': { +- 'include_dirs': [ +- '../../../../../../media/opus/celt', +- # Need Opus header files for the audio classifier. +- '<(DEPTH)/../../../media/opus/celt', +-# '<(DEPTH)/third_party/opus/src/src', +- ], +- }, + }], + ], + 'sources': [ +diff --git toolkit/library/moz.build toolkit/library/moz.build index d42137a..695e75a8 100644 ---- toolkit/library/libxul.mk -+++ toolkit/library/libxul.mk -@@ -77,6 +77,34 @@ ifdef MOZ_NATIVE_HUNSPELL - EXTRA_DSO_LDOPTS += $(MOZ_HUNSPELL_LIBS) - endif +--- toolkit/library/moz.build ++++ toolkit/library/moz.build +@@ -178,6 +178,30 @@ if CONFIG['MOZ_NATIVE_PNG']: + if CONFIG['MOZ_NATIVE_HUNSPELL']: + OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS'] -+ifdef MOZ_NATIVE_OGG -+EXTRA_DSO_LDOPTS += $(MOZ_OGG_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_OGG']: ++ OS_LIBS += CONFIG['MOZ_OGG_LIBS'] + -+ifdef MOZ_NATIVE_THEORA -+EXTRA_DSO_LDOPTS += $(MOZ_THEORA_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_THEORA']: ++ OS_LIBS += CONFIG['MOZ_THEORA_LIBS'] + -+ifdef MOZ_NATIVE_VORBIS -+EXTRA_DSO_LDOPTS += $(MOZ_VORBIS_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_VORBIS']: ++ OS_LIBS += CONFIG['MOZ_VORBIS_LIBS'] + -+ifdef MOZ_NATIVE_TREMOR -+EXTRA_DSO_LDOPTS += $(MOZ_TREMOR_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_TREMOR']: ++ OS_LIBS += CONFIG['MOZ_TREMOR_LIBS'] + -+ifdef MOZ_NATIVE_OPUS -+EXTRA_DSO_LDOPTS += $(MOZ_OPUS_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_CELT']: ++ OS_LIBS += CONFIG['MOZ_CELT_LIBS'] + -+ifdef MOZ_NATIVE_SPEEX -+EXTRA_DSO_LDOPTS += $(MOZ_SPEEX_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_OPUS']: ++ OS_LIBS += CONFIG['MOZ_OPUS_LIBS'] + -+ifdef MOZ_NATIVE_SOUNDTOUCH -+EXTRA_DSO_LDOPTS += $(MOZ_SOUNDTOUCH_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_SPEEX']: ++ OS_LIBS += CONFIG['MOZ_SPEEX_LIBS'] + - ifdef MOZ_NATIVE_LIBEVENT - EXTRA_DSO_LDOPTS += $(MOZ_LIBEVENT_LIBS) - endif -diff --git xpcom/build/nsXPComInit.cpp xpcom/build/nsXPComInit.cpp ++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/nsXPComInit.cpp -+++ xpcom/build/nsXPComInit.cpp -@@ -130,7 +130,9 @@ extern nsresult nsStringInputStreamConstructor(nsISupports *, REFNSIID, void **) +--- 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 -@@ -571,11 +573,13 @@ NS_InitXPCOM2(nsIServiceManager* *result, - // this oddness. - mozilla::SetICUMemoryFunctions(); +@@ -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); + // 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. + // And for VPX. Index: branches/2015Q3/www/firefox-esr-i18n/Makefile =================================================================== --- branches/2015Q3/www/firefox-esr-i18n/Makefile (revision 392766) +++ branches/2015Q3/www/firefox-esr-i18n/Makefile (revision 392767) @@ -1,90 +1,91 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= firefox -PORTVERSION= 31.7.0 +PORTVERSION= 38.1.0 +PORTREVISION= 1 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}esr/linux-i686/xpi \ - MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}esr-candidates/build2/linux-i686/xpi + MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}esr-candidates/build1/linux-i686/xpi PKGNAMEPREFIX= PKGNAMESUFFIX= -esr-i18n DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} MAINTAINER= gecko@FreeBSD.org COMMENT= Localized interface for Firefox EXTRACT_DEPENDS= zip:${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: branches/2015Q3/www/firefox-esr-i18n/Makefile.lang =================================================================== --- branches/2015Q3/www/firefox-esr-i18n/Makefile.lang (revision 392766) +++ branches/2015Q3/www/firefox-esr-i18n/Makefile.lang (revision 392767) @@ -1,285 +1,291 @@ # Created by: Koji Yokota # $FreeBSD$ -FIREFOX_I18N_ALL_= ach af an ar as ast be bg bn-BD bn-IN br bs ca cs \ - csb cy da de el en-GB en-US en-ZA eo es-AR es-CL \ +FIREFOX_I18N_ALL_= ach af an ar as ast az be bg bn-BD bn-IN br bs ca cs \ + cy da de dsb el en-GB en-US en-ZA eo es-AR es-CL \ es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl \ gu-IN he hi-IN hr hsb hu hy-AM id is it ja kk km \ - kn ko ku lij lt lv mai mk ml mr ms nb-NO nl nn-NO \ + kn ko lij lt lv mai mk ml mr ms nb-NO nl nn-NO \ or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son sq \ - sr sv-SE ta te th tr uk vi xh zh-CN zh-TW zu + sr sv-SE ta te th tr uk vi xh zh-CN zh-TW .if defined(FIREFOX_I18N_ALL) || defined(PACKAGE_BUILDING) || target(package) FIREFOX_I18N= ${FIREFOX_I18N_ALL_} .else .if ${PORT_OPTIONS:MLANG_ACH} FIREFOX_I18N+= ach .endif .if ${PORT_OPTIONS:MLANG_AF} FIREFOX_I18N+= af .endif .if ${PORT_OPTIONS:MLANG_AN} FIREFOX_I18N+= an .endif .if ${PORT_OPTIONS:MLANG_AR} FIREFOX_I18N+= ar .endif .if ${PORT_OPTIONS:MLANG_AS} FIREFOX_I18N+= as .endif .if ${PORT_OPTIONS:MLANG_AST} FIREFOX_I18N+= ast .endif +.if ${PORT_OPTIONS:MLANG_AZ} +FIREFOX_I18N+= az +.endif .if ${PORT_OPTIONS:MLANG_BE} FIREFOX_I18N+= be .endif .if ${PORT_OPTIONS:MLANG_BG} FIREFOX_I18N+= bg .endif .if ${PORT_OPTIONS:MLANG_BB} FIREFOX_I18N+= bn-BD .endif .if ${PORT_OPTIONS:MLANG_BN} FIREFOX_I18N+= bn-IN .endif .if ${PORT_OPTIONS:MLANG_BR} FIREFOX_I18N+= br .endif .if ${PORT_OPTIONS:MLANG_BS} FIREFOX_I18N+= bs .endif .if ${PORT_OPTIONS:MLANG_CA} FIREFOX_I18N+= ca .endif .if ${PORT_OPTIONS:MLANG_CS} FIREFOX_I18N+= cs .endif .if ${PORT_OPTIONS:MLANG_CSB} FIREFOX_I18N+= csb .endif .if ${PORT_OPTIONS:MLANG_CY} FIREFOX_I18N+= cy .endif .if ${PORT_OPTIONS:MLANG_DA} FIREFOX_I18N+= da .endif .if ${PORT_OPTIONS:MLANG_DE} FIREFOX_I18N+= de +.endif +.if ${PORT_OPTIONS:MLANG_DSB} +FIREFOX_I18N+= dsb .endif .if ${PORT_OPTIONS:MLANG_EL} FIREFOX_I18N+= el .endif .if ${PORT_OPTIONS:MLANG_GB} FIREFOX_I18N+= en-GB .endif .if ${PORT_OPTIONS:MLANG_US} FIREFOX_I18N+= en-US .endif .if ${PORT_OPTIONS:MLANG_ZA} FIREFOX_I18N+= en-ZA .endif .if ${PORT_OPTIONS:MLANG_EO} FIREFOX_I18N+= eo .endif .if ${PORT_OPTIONS:MLANG_SA} FIREFOX_I18N+= es-AR .endif .if ${PORT_OPTIONS:MLANG_SC} FIREFOX_I18N+= es-CL .endif .if ${PORT_OPTIONS:MLANG_ES} FIREFOX_I18N+= es-ES .endif .if ${PORT_OPTIONS:MLANG_SM} FIREFOX_I18N+= es-MX .endif .if ${PORT_OPTIONS:MLANG_ET} FIREFOX_I18N+= et .endif .if ${PORT_OPTIONS:MLANG_EU} FIREFOX_I18N+= eu .endif .if ${PORT_OPTIONS:MLANG_FA} FIREFOX_I18N+= fa .endif .if ${PORT_OPTIONS:MLANG_FF} FIREFOX_I18N+= ff .endif .if ${PORT_OPTIONS:MLANG_FI} FIREFOX_I18N+= fi .endif .if ${PORT_OPTIONS:MLANG_FR} FIREFOX_I18N+= fr .endif .if ${PORT_OPTIONS:MLANG_FY} FIREFOX_I18N+= fy-NL .endif .if ${PORT_OPTIONS:MLANG_GA} FIREFOX_I18N+= ga-IE .endif .if ${PORT_OPTIONS:MLANG_GD} FIREFOX_I18N+= gd .endif .if ${PORT_OPTIONS:MLANG_GL} FIREFOX_I18N+= gl .endif .if ${PORT_OPTIONS:MLANG_GU} FIREFOX_I18N+= gu-IN .endif .if ${PORT_OPTIONS:MLANG_HE} FIREFOX_I18N+= he .endif .if ${PORT_OPTIONS:MLANG_HI} FIREFOX_I18N+= hi-IN .endif .if ${PORT_OPTIONS:MLANG_HR} FIREFOX_I18N+= hr .endif .if ${PORT_OPTIONS:MLANG_HSB} FIREFOX_I18N+= hsb .endif .if ${PORT_OPTIONS:MLANG_HU} FIREFOX_I18N+= hu .endif .if ${PORT_OPTIONS:MLANG_AM} FIREFOX_I18N+= hy-AM .endif .if ${PORT_OPTIONS:MLANG_ID} FIREFOX_I18N+= id .endif .if ${PORT_OPTIONS:MLANG_IS} FIREFOX_I18N+= is .endif .if ${PORT_OPTIONS:MLANG_IT} FIREFOX_I18N+= it .endif .if ${PORT_OPTIONS:MLANG_JA} FIREFOX_I18N+= ja .endif .if ${PORT_OPTIONS:MLANG_KK} FIREFOX_I18N+= kk .endif .if ${PORT_OPTIONS:MLANG_KM} FIREFOX_I18N+= km .endif .if ${PORT_OPTIONS:MLANG_KN} FIREFOX_I18N+= kn .endif .if ${PORT_OPTIONS:MLANG_KO} FIREFOX_I18N+= ko .endif .if ${PORT_OPTIONS:MLANG_KU} FIREFOX_I18N+= ku .endif .if ${PORT_OPTIONS:MLANG_LIJ} FIREFOX_I18N+= lij .endif .if ${PORT_OPTIONS:MLANG_LT} FIREFOX_I18N+= lt .endif .if ${PORT_OPTIONS:MLANG_LV} FIREFOX_I18N+= lv .endif .if ${PORT_OPTIONS:MLANG_MAI} FIREFOX_I18N+= mai .endif .if ${PORT_OPTIONS:MLANG_MK} FIREFOX_I18N+= mk .endif .if ${PORT_OPTIONS:MLANG_ML} FIREFOX_I18N+= ml .endif .if ${PORT_OPTIONS:MLANG_MR} FIREFOX_I18N+= mr .endif .if ${PORT_OPTIONS:MLANG_MS} FIREFOX_I18N+= ms .endif .if ${PORT_OPTIONS:MLANG_NB} FIREFOX_I18N+= nb-NO .endif .if ${PORT_OPTIONS:MLANG_NL} FIREFOX_I18N+= nl .endif .if ${PORT_OPTIONS:MLANG_NN} FIREFOX_I18N+= nn-NO .endif .if ${PORT_OPTIONS:MLANG_OR} FIREFOX_I18N+= or .endif .if ${PORT_OPTIONS:MLANG_PA} FIREFOX_I18N+= pa-IN .endif .if ${PORT_OPTIONS:MLANG_PL} FIREFOX_I18N+= pl .endif .if ${PORT_OPTIONS:MLANG_PBR} FIREFOX_I18N+= pt-BR .endif .if ${PORT_OPTIONS:MLANG_PT} FIREFOX_I18N+= pt-PT .endif .if ${PORT_OPTIONS:MLANG_RM} FIREFOX_I18N+= rm .endif .if ${PORT_OPTIONS:MLANG_RO} FIREFOX_I18N+= ro .endif .if ${PORT_OPTIONS:MLANG_RU} FIREFOX_I18N+= ru .endif .if ${PORT_OPTIONS:MLANG_SI} FIREFOX_I18N+= si .endif .if ${PORT_OPTIONS:MLANG_SK} FIREFOX_I18N+= sk .endif .if ${PORT_OPTIONS:MLANG_SON} FIREFOX_I18N+= son .endif .if ${PORT_OPTIONS:MLANG_SL} FIREFOX_I18N+= sl .endif .if ${PORT_OPTIONS:MLANG_SQ} FIREFOX_I18N+= sq .endif .if ${PORT_OPTIONS:MLANG_SR} FIREFOX_I18N+= sr .endif .if ${PORT_OPTIONS:MLANG_SV} FIREFOX_I18N+= sv-SE .endif .if ${PORT_OPTIONS:MLANG_SW} FIREFOX_I18N+= sw .endif .if ${PORT_OPTIONS:MLANG_TA} FIREFOX_I18N+= ta .endif .if ${PORT_OPTIONS:MLANG_TE} FIREFOX_I18N+= te .endif .if ${PORT_OPTIONS:MLANG_TH} FIREFOX_I18N+= th .endif .if ${PORT_OPTIONS:MLANG_TR} FIREFOX_I18N+= tr .endif .if ${PORT_OPTIONS:MLANG_UK} FIREFOX_I18N+= uk .endif .if ${PORT_OPTIONS:MLANG_VI} FIREFOX_I18N+= vi .endif .if ${PORT_OPTIONS:MLANG_XH} FIREFOX_I18N+= xh .endif .if ${PORT_OPTIONS:MLANG_CN} FIREFOX_I18N+= zh-CN .endif .if ${PORT_OPTIONS:MLANG_TW} FIREFOX_I18N+= zh-TW .endif .if ${PORT_OPTIONS:MLANG_ZU} FIREFOX_I18N+= zu .endif .endif Index: branches/2015Q3/www/firefox-esr-i18n/Makefile.option =================================================================== --- branches/2015Q3/www/firefox-esr-i18n/Makefile.option (revision 392766) +++ branches/2015Q3/www/firefox-esr-i18n/Makefile.option (revision 392767) @@ -1,109 +1,111 @@ # Created by: Koji Yokota # $FreeBSD$ OPTIONS_DEFINE= LANG_ACH \ LANG_AF \ LANG_AN \ LANG_SQ \ LANG_AR \ LANG_AS \ LANG_AM \ LANG_AST \ + LANG_AZ \ LANG_EU \ LANG_BN \ LANG_BB \ LANG_BS \ LANG_BR \ LANG_BG \ LANG_BE \ LANG_CA \ LANG_CN \ LANG_CS \ - LANG_CSB \ LANG_DA \ LANG_NL \ LANG_GB \ LANG_US \ LANG_EO \ LANG_ET \ LANG_GL \ LANG_DE \ + LANG_DSB \ LANG_EL \ LANG_GU \ LANG_FF \ LANG_FI \ LANG_FR \ LANG_FY \ LANG_GA \ LANG_GD \ LANG_HE \ LANG_HI \ LANG_HR \ LANG_HSB \ LANG_HU \ LANG_IS \ LANG_ID \ LANG_IT \ LANG_JA \ LANG_KN \ LANG_KK \ LANG_KM \ LANG_KO \ - LANG_KU \ LANG_LV \ LANG_LT \ LANG_LIJ \ LANG_MK \ LANG_MAI \ LANG_ML \ LANG_MR \ LANG_MN \ LANG_MS \ LANG_NB \ LANG_NN \ LANG_OR \ LANG_FA \ LANG_PL \ LANG_PT \ LANG_PBR\ LANG_PA \ LANG_RO \ LANG_RM \ LANG_RU \ LANG_SR \ LANG_SI \ LANG_ES \ LANG_SON \ LANG_SA \ LANG_SC \ LANG_SM \ LANG_SK \ LANG_SL \ LANG_SV \ LANG_TW \ LANG_TA \ LANG_TE \ LANG_TH \ LANG_TR \ LANG_UK \ LANG_VI \ LANG_CY \ LANG_XH \ LANG_ZA \ LANG_ZU OPTIONS_DEFAULT=LANG_AR LANG_BN LANG_BR LANG_CN LANG_ET LANG_DE LANG_FR \ LANG_HI LANG_ID LANG_IT LANG_JA LANG_KO LANG_MK LANG_MR \ LANG_MN LANG_PBR LANG_PA LANG_RU LANG_ES LANG_SON LANG_TE LANG_ACH_DESC?= Acholi language support LANG_AN_DESC?= Aragonese language support LANG_AS_DESC?= Assamese language support +LANG_AZ_DESC?= Azerbaijani language support LANG_CSB_DESC?= Kashubian language support +LANG_DSB_DESC?= Lower Sorbian language support LANG_FF_DESC?= Fulah language support LANG_HSB_DESC?= Upper Sorbian language support LANG_KM_DESC?= Khmer language support LANG_LIJ_DESC?= Ligurian (Genoa) language support LANG_MS_DESC?= Malay language support LANG_SW_DESC?= Swahili language support LANG_XH_DESC?= Xhosa language support Index: branches/2015Q3/www/firefox-esr-i18n/distinfo =================================================================== --- branches/2015Q3/www/firefox-esr-i18n/distinfo (revision 392766) +++ branches/2015Q3/www/firefox-esr-i18n/distinfo (revision 392767) @@ -1,178 +1,176 @@ -SHA256 (xpi/firefox-31.7.0/ach.xpi) = a46aab04cc4f8e7c310d18f25b281e618e318c3c42c664e0801fc8dfd7d7c448 -SIZE (xpi/firefox-31.7.0/ach.xpi) = 445326 -SHA256 (xpi/firefox-31.7.0/af.xpi) = 9b90171ca31d767403cf874b96895e49ba71114bcef4f0f48125ef8062bf1ad8 -SIZE (xpi/firefox-31.7.0/af.xpi) = 431089 -SHA256 (xpi/firefox-31.7.0/an.xpi) = 4a0ba3d16c1ea336297d19ec810b74427744ff49dd9eed790594e7e2948ff638 -SIZE (xpi/firefox-31.7.0/an.xpi) = 407151 -SHA256 (xpi/firefox-31.7.0/ar.xpi) = a2c08b2724a2582e432bc3442b650a30491efed3b434d790bfd03af66f1182fb -SIZE (xpi/firefox-31.7.0/ar.xpi) = 459824 -SHA256 (xpi/firefox-31.7.0/as.xpi) = 837e0bbb261f288d765d64a5ba320cebb53d6b85fc64e4a5cb5866cec6d393dc -SIZE (xpi/firefox-31.7.0/as.xpi) = 448568 -SHA256 (xpi/firefox-31.7.0/ast.xpi) = 53182a51b3b39f14af5742eb23a2d6392c8982e99baf2fd874ff5f592c536c72 -SIZE (xpi/firefox-31.7.0/ast.xpi) = 352340 -SHA256 (xpi/firefox-31.7.0/be.xpi) = a9fbbbe0f55e3a66b23f39a607caa86cc3a2d75618bf421049ce8a0fc989b0f1 -SIZE (xpi/firefox-31.7.0/be.xpi) = 378668 -SHA256 (xpi/firefox-31.7.0/bg.xpi) = a5b3ca6b806c7fd3abc2012a54d7a711dc4b5dc0e74feee7db64d4d12a9f090b -SIZE (xpi/firefox-31.7.0/bg.xpi) = 438061 -SHA256 (xpi/firefox-31.7.0/bn-BD.xpi) = 35ec629d0252a452689e2081013d47ef472e8d690c6d400489adca943a816028 -SIZE (xpi/firefox-31.7.0/bn-BD.xpi) = 472626 -SHA256 (xpi/firefox-31.7.0/bn-IN.xpi) = 74e81096becea929294b831ca9ae5d27885873ce0c1fc55ac10bd3e7c898c67a -SIZE (xpi/firefox-31.7.0/bn-IN.xpi) = 462593 -SHA256 (xpi/firefox-31.7.0/br.xpi) = 787d8460434e0404d3b41aec55874433a1b62393ceda146c12ca69e3e08de1e0 -SIZE (xpi/firefox-31.7.0/br.xpi) = 389704 -SHA256 (xpi/firefox-31.7.0/bs.xpi) = 55c147fb777304da501c93c5f9118eecf96a355b112bce2b7d1d481a7246718a -SIZE (xpi/firefox-31.7.0/bs.xpi) = 429014 -SHA256 (xpi/firefox-31.7.0/ca.xpi) = 98442d2eca73b4e49a2316b1229c245e95d9e44c1548a2dd59967da9a2ca1d12 -SIZE (xpi/firefox-31.7.0/ca.xpi) = 403575 -SHA256 (xpi/firefox-31.7.0/cs.xpi) = d5a667efd1b3ae7f7f019c60d9783c2df7ccc31b26d192a0dd6135f1ddd53002 -SIZE (xpi/firefox-31.7.0/cs.xpi) = 390979 -SHA256 (xpi/firefox-31.7.0/csb.xpi) = 244cb21b264752c1c51d3b633822a409854e7805ebf3238d64505f9a9ea07de3 -SIZE (xpi/firefox-31.7.0/csb.xpi) = 383695 -SHA256 (xpi/firefox-31.7.0/cy.xpi) = 894d27928c7c8be1889a400d950e6cfd750612256d48523a16ab78cc3a62705a -SIZE (xpi/firefox-31.7.0/cy.xpi) = 390727 -SHA256 (xpi/firefox-31.7.0/da.xpi) = 2c04601b1a1927d70cf08429d641f056b7cd9bc5a0b0b4af2cf41da39fbab056 -SIZE (xpi/firefox-31.7.0/da.xpi) = 397747 -SHA256 (xpi/firefox-31.7.0/de.xpi) = 0942a9e3108c73904248f5883031db8c9b1533ad7d1fb99b56278c10412252a5 -SIZE (xpi/firefox-31.7.0/de.xpi) = 395165 -SHA256 (xpi/firefox-31.7.0/el.xpi) = 9338bd6441506040fbf43dde73751010a897117850da56a7f74eafb49ecae868 -SIZE (xpi/firefox-31.7.0/el.xpi) = 442982 -SHA256 (xpi/firefox-31.7.0/en-GB.xpi) = 62a0eab5307fd1bf8edeb650f88e2b5583bc97d3ad09d055fcceded267f70e16 -SIZE (xpi/firefox-31.7.0/en-GB.xpi) = 390119 -SHA256 (xpi/firefox-31.7.0/en-US.xpi) = b465b5352d1598225a9d2bc84e54db540e5965618cc4cdaab88fe1c1ef2e8058 -SIZE (xpi/firefox-31.7.0/en-US.xpi) = 422788 -SHA256 (xpi/firefox-31.7.0/en-ZA.xpi) = 5402bbc92fb8b7953acf7ff9a2a4bb92d7113e94d92c782687825c303325a0d3 -SIZE (xpi/firefox-31.7.0/en-ZA.xpi) = 388527 -SHA256 (xpi/firefox-31.7.0/eo.xpi) = 37793b813547b052751b18cbd8413644d98753bef9cc9de9ce0c319b996300e3 -SIZE (xpi/firefox-31.7.0/eo.xpi) = 431831 -SHA256 (xpi/firefox-31.7.0/es-AR.xpi) = 6c5865f4d479449a0a9b825231c859df0d6a275c81afb39a6d8ecbc12b24a462 -SIZE (xpi/firefox-31.7.0/es-AR.xpi) = 399937 -SHA256 (xpi/firefox-31.7.0/es-CL.xpi) = 936f49302395973a8fccf344ab121e5d3caf6a9a4713ea28fa74b2e3475d2172 -SIZE (xpi/firefox-31.7.0/es-CL.xpi) = 342808 -SHA256 (xpi/firefox-31.7.0/es-ES.xpi) = 16930441fccf01cb56f74e847820374203ee10e3621e0bc727b60faf647b1ea7 -SIZE (xpi/firefox-31.7.0/es-ES.xpi) = 335880 -SHA256 (xpi/firefox-31.7.0/es-MX.xpi) = 19e1c14ea4b2964b2c482be44444864be37e7afbb25347b2c61b6a73aea46205 -SIZE (xpi/firefox-31.7.0/es-MX.xpi) = 402672 -SHA256 (xpi/firefox-31.7.0/et.xpi) = 7b3aabcd02422a86e990cf3d122fa833493275d433cab826b062ad0c389ddbae -SIZE (xpi/firefox-31.7.0/et.xpi) = 390360 -SHA256 (xpi/firefox-31.7.0/eu.xpi) = 08da23a46160d70f1f267176c367ab42e7d9309a3694aab127f02092846d4032 -SIZE (xpi/firefox-31.7.0/eu.xpi) = 412999 -SHA256 (xpi/firefox-31.7.0/fa.xpi) = 9f320fb90856afeda61ed6ef231c7f08a5f286cc1a3e1ccb648e00bc83b9ca0d -SIZE (xpi/firefox-31.7.0/fa.xpi) = 460857 -SHA256 (xpi/firefox-31.7.0/ff.xpi) = 186e83c5d270013ece23c060db9b688d86d5fa411e1e43180147964344a4fa08 -SIZE (xpi/firefox-31.7.0/ff.xpi) = 400143 -SHA256 (xpi/firefox-31.7.0/fi.xpi) = a735827f8b51d44d2dbf06dc60694e5c495120d2cd30a06a141f265c6e2a5559 -SIZE (xpi/firefox-31.7.0/fi.xpi) = 392740 -SHA256 (xpi/firefox-31.7.0/fr.xpi) = c87f0a11b32b0d9232aebed8c8db11653b7a1f6e4cff349cd55605c984b5e353 -SIZE (xpi/firefox-31.7.0/fr.xpi) = 406462 -SHA256 (xpi/firefox-31.7.0/fy-NL.xpi) = 06f65abe1aad68faf55dffbe60b8cec4c6dbf9ed49a8e0b6e829bc35cdae668f -SIZE (xpi/firefox-31.7.0/fy-NL.xpi) = 401930 -SHA256 (xpi/firefox-31.7.0/ga-IE.xpi) = c2d7f32ffa5f7a4eb0f9fd793c5ce2bd4dae08f7fba57b0bfc9f9a5c276db1b9 -SIZE (xpi/firefox-31.7.0/ga-IE.xpi) = 410077 -SHA256 (xpi/firefox-31.7.0/gd.xpi) = d6507eaefcf693abdf44df8ab8ff31af1453064543e41324fd535f77792fa3b8 -SIZE (xpi/firefox-31.7.0/gd.xpi) = 403014 -SHA256 (xpi/firefox-31.7.0/gl.xpi) = 7492fa58143cb2e31377165e0f62a31ba5a6d6b93f44dbea7a196c1fe6c35117 -SIZE (xpi/firefox-31.7.0/gl.xpi) = 390599 -SHA256 (xpi/firefox-31.7.0/gu-IN.xpi) = 09b503b94a67ee8b7f031375f6e3247544e6e58f47b1077931f6022117f12eca -SIZE (xpi/firefox-31.7.0/gu-IN.xpi) = 423504 -SHA256 (xpi/firefox-31.7.0/he.xpi) = fc459d3c9b7c4989b78f9f9ef3f56b7a3130b04ddcf4af199e63f531ff3369ef -SIZE (xpi/firefox-31.7.0/he.xpi) = 427629 -SHA256 (xpi/firefox-31.7.0/hi-IN.xpi) = 1fe8ffc2781376657a2190ce67c3cb0f8d661a941ff14d2a11360feb898963da -SIZE (xpi/firefox-31.7.0/hi-IN.xpi) = 441402 -SHA256 (xpi/firefox-31.7.0/hr.xpi) = 7233b1981e2b4333c4d92fc1b354e29abd426b5c2cad8157ceae9836e874f0e7 -SIZE (xpi/firefox-31.7.0/hr.xpi) = 424371 -SHA256 (xpi/firefox-31.7.0/hsb.xpi) = 78f17b9699469f7aa33adb332e6a86865d78a4bb41e61aaaf9632de06d6c93fc -SIZE (xpi/firefox-31.7.0/hsb.xpi) = 413076 -SHA256 (xpi/firefox-31.7.0/hu.xpi) = 98d7f3c03c8c0e25ac904edc9b7744adaf1b7001b887c496cf731b66e4da30f4 -SIZE (xpi/firefox-31.7.0/hu.xpi) = 398644 -SHA256 (xpi/firefox-31.7.0/hy-AM.xpi) = be183e444d88a9d84c7f7d9f8f39805036f90cbd33cdb1157cf0a620dc510d5f -SIZE (xpi/firefox-31.7.0/hy-AM.xpi) = 478743 -SHA256 (xpi/firefox-31.7.0/id.xpi) = c059b5bca06f2073dc68f7068f99b6d3d52291f07bdb2a5527c62d64f787d40e -SIZE (xpi/firefox-31.7.0/id.xpi) = 378301 -SHA256 (xpi/firefox-31.7.0/is.xpi) = ff432dd9cda5aa362806be2b93a44ae343860e56ad871c12b808eab3ce95e4b2 -SIZE (xpi/firefox-31.7.0/is.xpi) = 427327 -SHA256 (xpi/firefox-31.7.0/it.xpi) = 63b7031dc95cb7938f796f8273aca84959dc4c1b06457186d39d2314437135d9 -SIZE (xpi/firefox-31.7.0/it.xpi) = 330905 -SHA256 (xpi/firefox-31.7.0/ja.xpi) = c6e5d30f36831608bbb001a30dd20d36357a8f812208caef3b3672f15d03869d -SIZE (xpi/firefox-31.7.0/ja.xpi) = 421664 -SHA256 (xpi/firefox-31.7.0/kk.xpi) = 4134807f0682c4e3b531050d6152c95a3cd207bbf6266ae668e40af5a404b44d -SIZE (xpi/firefox-31.7.0/kk.xpi) = 439116 -SHA256 (xpi/firefox-31.7.0/km.xpi) = 425742f17f805c4fb8bcffe2f634687a4430e9a0a97af14e3e66d81930349d86 -SIZE (xpi/firefox-31.7.0/km.xpi) = 506476 -SHA256 (xpi/firefox-31.7.0/kn.xpi) = 21dde9bc0907a3f3d6eccb62209512c4e923e9578f99d3cfa38b9fc0f5749166 -SIZE (xpi/firefox-31.7.0/kn.xpi) = 458891 -SHA256 (xpi/firefox-31.7.0/ko.xpi) = d1815717ff979a4f4d752860d7584afddc8598c5870e9827866b0ab5ef8ec6c5 -SIZE (xpi/firefox-31.7.0/ko.xpi) = 402815 -SHA256 (xpi/firefox-31.7.0/ku.xpi) = fbae0d3034d27f604dadc2f1f9d47faa919429951ef0fddc3acb27cc54c761fb -SIZE (xpi/firefox-31.7.0/ku.xpi) = 420260 -SHA256 (xpi/firefox-31.7.0/lij.xpi) = 64b6cbc1afed4d403e1dc138adb00ee5a0d9f510aeb0203ee5a55ae0c12a54df -SIZE (xpi/firefox-31.7.0/lij.xpi) = 385864 -SHA256 (xpi/firefox-31.7.0/lt.xpi) = e427e278896af7049be1a2ba0921fe040a0f28ea6db88b9776e61c9aa1f7c1f2 -SIZE (xpi/firefox-31.7.0/lt.xpi) = 435431 -SHA256 (xpi/firefox-31.7.0/lv.xpi) = 808561e54dcbcfc2c5d4340b8981c26c32ffaaff41981c24987985b3e5237836 -SIZE (xpi/firefox-31.7.0/lv.xpi) = 398576 -SHA256 (xpi/firefox-31.7.0/mai.xpi) = c0028b9cb674795770485754d827e33d326c7b088faa07ae0533eedb4c4b0a98 -SIZE (xpi/firefox-31.7.0/mai.xpi) = 444885 -SHA256 (xpi/firefox-31.7.0/mk.xpi) = 9e2b8adbe49312fff3f4f4f466253c55ff475d77ee621ed1ec90d3f6db132f21 -SIZE (xpi/firefox-31.7.0/mk.xpi) = 475483 -SHA256 (xpi/firefox-31.7.0/ml.xpi) = 7c84d8089f4a191597ba04043f1ed06b495afa8493db7b9069b3b8e8431f1019 -SIZE (xpi/firefox-31.7.0/ml.xpi) = 466254 -SHA256 (xpi/firefox-31.7.0/mr.xpi) = 8fde662d065db623971f5ca3259edbda653b269a85089d7da61b59a2ac1028bf -SIZE (xpi/firefox-31.7.0/mr.xpi) = 451292 -SHA256 (xpi/firefox-31.7.0/ms.xpi) = cf842b609e2c0196e38ef566cb6cd440d9d98aa406ee19e73ba9be199b3e5137 -SIZE (xpi/firefox-31.7.0/ms.xpi) = 436230 -SHA256 (xpi/firefox-31.7.0/nb-NO.xpi) = 614e4819e7542455d53f5fa1d477e7bbaca34f9a60f381f310f469f8eb7a6585 -SIZE (xpi/firefox-31.7.0/nb-NO.xpi) = 392006 -SHA256 (xpi/firefox-31.7.0/nl.xpi) = 25fa21b6f5b9226bc98b564c6ea4597def332bf45287245b946406901176c85c -SIZE (xpi/firefox-31.7.0/nl.xpi) = 390885 -SHA256 (xpi/firefox-31.7.0/nn-NO.xpi) = 1da9ed892eef144fc24f36d8d357e909bebf1add25f39bc18d9eb3b3752676e6 -SIZE (xpi/firefox-31.7.0/nn-NO.xpi) = 386281 -SHA256 (xpi/firefox-31.7.0/or.xpi) = c6609d74a5ad5c26f47557431f284ec22218f6482a1da09e6a82a5be81ff6746 -SIZE (xpi/firefox-31.7.0/or.xpi) = 464749 -SHA256 (xpi/firefox-31.7.0/pa-IN.xpi) = b190e43dc00acb59269a64ef34871d326296b526b3ebc4efbdf6a7d2d9cd35ae -SIZE (xpi/firefox-31.7.0/pa-IN.xpi) = 439326 -SHA256 (xpi/firefox-31.7.0/pl.xpi) = 594ad2d1bc2ad972da2e1b6a04cff08d31664293c766bfaeac5339efc85b57e3 -SIZE (xpi/firefox-31.7.0/pl.xpi) = 374747 -SHA256 (xpi/firefox-31.7.0/pt-BR.xpi) = b5713f2dfe91eee8eaa6628592165eaa134bfa0f61b741bfe31fd9b321d309b9 -SIZE (xpi/firefox-31.7.0/pt-BR.xpi) = 405565 -SHA256 (xpi/firefox-31.7.0/pt-PT.xpi) = abb6214eca83b79f83b042597d222e06474acc6252d389d5ba2c651a9e5ce03a -SIZE (xpi/firefox-31.7.0/pt-PT.xpi) = 386344 -SHA256 (xpi/firefox-31.7.0/rm.xpi) = 14812365a8427dacc135cbedd51aa9f05cdeae79ae534e733c90156871bdce44 -SIZE (xpi/firefox-31.7.0/rm.xpi) = 399285 -SHA256 (xpi/firefox-31.7.0/ro.xpi) = 37101737210648a141e39bdd45b6a09d6bd1c7c91921fce6e18e06c960786a75 -SIZE (xpi/firefox-31.7.0/ro.xpi) = 439388 -SHA256 (xpi/firefox-31.7.0/ru.xpi) = f26cd9d88445e805ad9001e64c6fc090e4e2a9a38a6a1a3a4db16d4d2f86af85 -SIZE (xpi/firefox-31.7.0/ru.xpi) = 367898 -SHA256 (xpi/firefox-31.7.0/si.xpi) = 9b65abd0a84e28cd02fec01f57601dec37e62ee79364ee1e9afcf56c051e872f -SIZE (xpi/firefox-31.7.0/si.xpi) = 463224 -SHA256 (xpi/firefox-31.7.0/sk.xpi) = 79af6394fb242a2381c22d530661c8e4aa49f79072547270d1666623cd234376 -SIZE (xpi/firefox-31.7.0/sk.xpi) = 413802 -SHA256 (xpi/firefox-31.7.0/sl.xpi) = 5adbabcf3f9df45ece596da1866551abd308f93a14d4c2d2872cb93b3d00a365 -SIZE (xpi/firefox-31.7.0/sl.xpi) = 387134 -SHA256 (xpi/firefox-31.7.0/son.xpi) = f6fe46997da6c63a2622df2ae8fcd162df761cc13f02f12e19a5827bd5b3d5d9 -SIZE (xpi/firefox-31.7.0/son.xpi) = 395144 -SHA256 (xpi/firefox-31.7.0/sq.xpi) = 4b11e3c0f1b709193df7ac617f09502224fa90891c64456bf3b09f64081f7366 -SIZE (xpi/firefox-31.7.0/sq.xpi) = 431136 -SHA256 (xpi/firefox-31.7.0/sr.xpi) = 7cec3903511642d0f18d681f9c8db88d7a515a0d4bc41c3b47b639f900888394 -SIZE (xpi/firefox-31.7.0/sr.xpi) = 425903 -SHA256 (xpi/firefox-31.7.0/sv-SE.xpi) = e90efaef588b44c2aa8ed7243930fe749c8804ac29f27505cdb4f16578c47ece -SIZE (xpi/firefox-31.7.0/sv-SE.xpi) = 399026 -SHA256 (xpi/firefox-31.7.0/ta.xpi) = 1eb3703416367ca99e10779fc9cdbfd2b521c33d841cdc5e37a780c8995ffeab -SIZE (xpi/firefox-31.7.0/ta.xpi) = 447685 -SHA256 (xpi/firefox-31.7.0/te.xpi) = 6e8b188de46947a0021db9bea2f559d00c2fed6c6fdd359d3c6ed43ae9e672c8 -SIZE (xpi/firefox-31.7.0/te.xpi) = 462591 -SHA256 (xpi/firefox-31.7.0/th.xpi) = c5f507998c17c120af9659fabdb0573e807784fb482c86d559cd3001cfb584c4 -SIZE (xpi/firefox-31.7.0/th.xpi) = 478126 -SHA256 (xpi/firefox-31.7.0/tr.xpi) = 846f9802aacfb0d6a873a9cfbc7854fce33b2f59311f1c85d91d7a929bab2255 -SIZE (xpi/firefox-31.7.0/tr.xpi) = 417370 -SHA256 (xpi/firefox-31.7.0/uk.xpi) = 5e988550f6722b30362f1e69675e18259e8bb20439747ce37a4fde9fd429a5d8 -SIZE (xpi/firefox-31.7.0/uk.xpi) = 428002 -SHA256 (xpi/firefox-31.7.0/vi.xpi) = 3e6aa2a99aef4613d6dcc5b912ebe2a017d2f7cae3494429484441a0d501b319 -SIZE (xpi/firefox-31.7.0/vi.xpi) = 413375 -SHA256 (xpi/firefox-31.7.0/xh.xpi) = fe7fbc65ab6d572a7bb9c3133ddd6ea1772171ac3e1ce43528c07ebc78a2f8b5 -SIZE (xpi/firefox-31.7.0/xh.xpi) = 397875 -SHA256 (xpi/firefox-31.7.0/zh-CN.xpi) = 20aa5d265b0d275c63fceea28257e100ce788598b4e18e448083ce02d50f8dff -SIZE (xpi/firefox-31.7.0/zh-CN.xpi) = 419630 -SHA256 (xpi/firefox-31.7.0/zh-TW.xpi) = 5752bf1f8f6618bfd039cfd378d43a29d37270e4deb26474ee86b4cd4275e993 -SIZE (xpi/firefox-31.7.0/zh-TW.xpi) = 412520 -SHA256 (xpi/firefox-31.7.0/zu.xpi) = 012bb28adb83356fc8367556f8cc397c2d0fbcd552ff56c5e146cb48653c822b -SIZE (xpi/firefox-31.7.0/zu.xpi) = 433216 +SHA256 (xpi/firefox-38.1.0/ach.xpi) = d8d0439db26597a0d869e5467bb849bc77c1786b0c2df3a16cf91801523cbebb +SIZE (xpi/firefox-38.1.0/ach.xpi) = 477969 +SHA256 (xpi/firefox-38.1.0/af.xpi) = 1a4c6835db2ba384767f6ceddf021a30b61c1d29f17577cf2f7330e3358c9ff7 +SIZE (xpi/firefox-38.1.0/af.xpi) = 483325 +SHA256 (xpi/firefox-38.1.0/an.xpi) = dbecee3b6d22ff49680d412a338a8e94d6f759c62110cb55ed6aa21f11537a0a +SIZE (xpi/firefox-38.1.0/an.xpi) = 461422 +SHA256 (xpi/firefox-38.1.0/ar.xpi) = 47eef2d1bfa6e5594cd8835bddca7bfd5019aac1553b54b05c1c749fad659dda +SIZE (xpi/firefox-38.1.0/ar.xpi) = 516495 +SHA256 (xpi/firefox-38.1.0/as.xpi) = 1628e61d5bb7e7c4cbdff288ca2e6d8623578ccf12797e63b27864e68be21c1c +SIZE (xpi/firefox-38.1.0/as.xpi) = 509574 +SHA256 (xpi/firefox-38.1.0/ast.xpi) = bfe8b26cffb80f7cc0824dc08546f31d54da190bf8fd342b12204ecdc85977e7 +SIZE (xpi/firefox-38.1.0/ast.xpi) = 397202 +SHA256 (xpi/firefox-38.1.0/az.xpi) = a29a1f0362aa53c7ea42e500478d2218e6e3e356c7305b249c65f078218fb272 +SIZE (xpi/firefox-38.1.0/az.xpi) = 489152 +SHA256 (xpi/firefox-38.1.0/be.xpi) = ff7583b04c4e57128f0165ecd94488bca77cf4a84bf0284f313f9aca2c885faf +SIZE (xpi/firefox-38.1.0/be.xpi) = 441056 +SHA256 (xpi/firefox-38.1.0/bg.xpi) = 5096d0dc1ff5e547fb07906e0a3183b3117a6453311fb28afa991db5c34c95d1 +SIZE (xpi/firefox-38.1.0/bg.xpi) = 487819 +SHA256 (xpi/firefox-38.1.0/bn-BD.xpi) = 2ca791e8a573f76f60698b3b634cf9c0768eee657ba6e99f65c0f8979e152216 +SIZE (xpi/firefox-38.1.0/bn-BD.xpi) = 528688 +SHA256 (xpi/firefox-38.1.0/bn-IN.xpi) = b664469d76782fe549f582b79cb88d8350d439038ee1eaa7a7388fd5b3cb1eff +SIZE (xpi/firefox-38.1.0/bn-IN.xpi) = 527927 +SHA256 (xpi/firefox-38.1.0/br.xpi) = 57ee679bb3532a0e9289827d4fb421598683ea8168656889edddcff1e21bb6b9 +SIZE (xpi/firefox-38.1.0/br.xpi) = 441962 +SHA256 (xpi/firefox-38.1.0/bs.xpi) = 92b42a21fdd59775f65f13316e875f93f7478695aa70ab02016f3145c79a3aea +SIZE (xpi/firefox-38.1.0/bs.xpi) = 485305 +SHA256 (xpi/firefox-38.1.0/ca.xpi) = 53c42f1501f90ddd9259ca255baae8a7ea6a1055fa88acc0cd1de9d8a20db2b9 +SIZE (xpi/firefox-38.1.0/ca.xpi) = 458091 +SHA256 (xpi/firefox-38.1.0/cs.xpi) = a23e9ea357bd08c5029d31d6865516efc5ff3aa8504dae8dc316af5efc859fa9 +SIZE (xpi/firefox-38.1.0/cs.xpi) = 446725 +SHA256 (xpi/firefox-38.1.0/cy.xpi) = 464c9b57d03fbaff4a6241dfa492623a338018a609e2289defeba196ab454b95 +SIZE (xpi/firefox-38.1.0/cy.xpi) = 444384 +SHA256 (xpi/firefox-38.1.0/da.xpi) = 2b339c9a73067076f4ca8b28d9d8543064be5616dd4db50cf0bf1ed0e4cea3c2 +SIZE (xpi/firefox-38.1.0/da.xpi) = 450762 +SHA256 (xpi/firefox-38.1.0/de.xpi) = bb0aca584ae740caa4cd2adeab2de09670c38ec8dd0241512318201b3ed6d761 +SIZE (xpi/firefox-38.1.0/de.xpi) = 451628 +SHA256 (xpi/firefox-38.1.0/dsb.xpi) = 921ff1abd17da602be91dcd9ddf7f0655bb97231840ac72f964252bacfdcfcf9 +SIZE (xpi/firefox-38.1.0/dsb.xpi) = 470923 +SHA256 (xpi/firefox-38.1.0/el.xpi) = 96e8b36888ccadce8d576208a76ab6522c3148c501bc35549e25bce545c11a01 +SIZE (xpi/firefox-38.1.0/el.xpi) = 498369 +SHA256 (xpi/firefox-38.1.0/en-GB.xpi) = 3f80590f27a73d5cb50b56b7658c38f4378f0bb1b84d3da4c2e0cd9a7b8f4120 +SIZE (xpi/firefox-38.1.0/en-GB.xpi) = 437845 +SHA256 (xpi/firefox-38.1.0/en-US.xpi) = 36fe4e6fc9b319f65b81ab0f9f8eda2b185ff175b6d4999799489365154142e6 +SIZE (xpi/firefox-38.1.0/en-US.xpi) = 469718 +SHA256 (xpi/firefox-38.1.0/en-ZA.xpi) = 6d3a854cffcb9a6ff37a6ae4b2b9a91da3fd16914ea4cd70f69ad3039b960ceb +SIZE (xpi/firefox-38.1.0/en-ZA.xpi) = 439925 +SHA256 (xpi/firefox-38.1.0/eo.xpi) = ac159c4a6b9dfb3b838dd757350cdfa92d7322c772e46bf79fbfce8d7e03b433 +SIZE (xpi/firefox-38.1.0/eo.xpi) = 488369 +SHA256 (xpi/firefox-38.1.0/es-AR.xpi) = 7410081864264d57267ffb4795aac402a72d30e369e4aa6ec2df6501c77ead8f +SIZE (xpi/firefox-38.1.0/es-AR.xpi) = 453982 +SHA256 (xpi/firefox-38.1.0/es-CL.xpi) = f5979bcfc6576cd6796a555617966c4f7c42d90bba52dc281824d09f7ca2ba01 +SIZE (xpi/firefox-38.1.0/es-CL.xpi) = 384678 +SHA256 (xpi/firefox-38.1.0/es-ES.xpi) = 87e28415879608af646ab9a531108c74b18a8b94f7a472439841ed7b79240537 +SIZE (xpi/firefox-38.1.0/es-ES.xpi) = 374072 +SHA256 (xpi/firefox-38.1.0/es-MX.xpi) = aa8e47ac74821a900eac826459e9fefb0eb8c0de77ee1b5246a55e23a369f4b8 +SIZE (xpi/firefox-38.1.0/es-MX.xpi) = 457049 +SHA256 (xpi/firefox-38.1.0/et.xpi) = 76e0e0480e62cc5187e6cf97845d61d835a16b883582cd8a27ef2b6e74c3d69c +SIZE (xpi/firefox-38.1.0/et.xpi) = 443228 +SHA256 (xpi/firefox-38.1.0/eu.xpi) = ecac2d452d2a4e4165970a1aed2a0ae6bff8212c0d6dc0687e5782758d5d72d9 +SIZE (xpi/firefox-38.1.0/eu.xpi) = 466554 +SHA256 (xpi/firefox-38.1.0/fa.xpi) = 90bbd088bff3a41dfc752f695f0184e68d5621ffdaa17536a989067bc2f4f7de +SIZE (xpi/firefox-38.1.0/fa.xpi) = 518281 +SHA256 (xpi/firefox-38.1.0/ff.xpi) = cb840656488d9044aa2042805f95458720fbcbb19e6fbd8beca197a9101817d1 +SIZE (xpi/firefox-38.1.0/ff.xpi) = 454586 +SHA256 (xpi/firefox-38.1.0/fi.xpi) = 6d1a14149420b2d851673c58308cff8b5218a4e9835b60d5a5274d2edf367635 +SIZE (xpi/firefox-38.1.0/fi.xpi) = 444852 +SHA256 (xpi/firefox-38.1.0/fr.xpi) = 8e416c8c930e09adb020ede16d420fd94a4e0e169d3a40213e33db94dee44d6b +SIZE (xpi/firefox-38.1.0/fr.xpi) = 461401 +SHA256 (xpi/firefox-38.1.0/fy-NL.xpi) = f6f06bac70b7edd570510deed989e3184d08a42a7e49a7e7960ed1f6a705e0a0 +SIZE (xpi/firefox-38.1.0/fy-NL.xpi) = 455537 +SHA256 (xpi/firefox-38.1.0/ga-IE.xpi) = 39ae1a583ac7be57fb3631e98734008823fe735ac679a173efe8729ef66e295c +SIZE (xpi/firefox-38.1.0/ga-IE.xpi) = 469623 +SHA256 (xpi/firefox-38.1.0/gd.xpi) = c38b1152552c91e0531eb4536b2727bc72c1c9397679d8b42003dbf7dab1be7d +SIZE (xpi/firefox-38.1.0/gd.xpi) = 454616 +SHA256 (xpi/firefox-38.1.0/gl.xpi) = d8ad198ce7afef708e7974384cac5b646efa58c1b914c0e58a0c19569276ac9d +SIZE (xpi/firefox-38.1.0/gl.xpi) = 448924 +SHA256 (xpi/firefox-38.1.0/gu-IN.xpi) = dc03e9021e27b9c5d41be2c9e569da7165176f2139872fc5694500edd71e7102 +SIZE (xpi/firefox-38.1.0/gu-IN.xpi) = 477980 +SHA256 (xpi/firefox-38.1.0/he.xpi) = 4d67723435a899817745f8141c7671fd8c0ed899db6b9fc040a7cf77a997113a +SIZE (xpi/firefox-38.1.0/he.xpi) = 486784 +SHA256 (xpi/firefox-38.1.0/hi-IN.xpi) = 3404e4a912049d583508619d92fb37663629cddc09f91f2c6f6e007fcbd1a281 +SIZE (xpi/firefox-38.1.0/hi-IN.xpi) = 508166 +SHA256 (xpi/firefox-38.1.0/hr.xpi) = 98487a75721efbb651b30d94fc00edac8962ca4aa0f356c714aae1761ed1650b +SIZE (xpi/firefox-38.1.0/hr.xpi) = 478271 +SHA256 (xpi/firefox-38.1.0/hsb.xpi) = b36779a40c56839cb9b6a78eca688704dcc5c202921493726640805580b7bf6e +SIZE (xpi/firefox-38.1.0/hsb.xpi) = 468719 +SHA256 (xpi/firefox-38.1.0/hu.xpi) = 93ace7ddee6b87c2a3cdfeedce151ced7354d3504d0d7e1aee8f2368094cabc0 +SIZE (xpi/firefox-38.1.0/hu.xpi) = 453554 +SHA256 (xpi/firefox-38.1.0/hy-AM.xpi) = 8c6a5918df7c1bdd36cdf9a5fe44400c53e2e8998dc910ad71ff29178299d63b +SIZE (xpi/firefox-38.1.0/hy-AM.xpi) = 534264 +SHA256 (xpi/firefox-38.1.0/id.xpi) = f37f250ba26bdf7cdb1f3d47a6bf7f7feb90ebd82da1a55ff4f11932af1da1e5 +SIZE (xpi/firefox-38.1.0/id.xpi) = 431488 +SHA256 (xpi/firefox-38.1.0/is.xpi) = fa4eca6ec46e110683178b282f4bd3cc6b47b315e4ddbd34cd99b8c00676b297 +SIZE (xpi/firefox-38.1.0/is.xpi) = 485128 +SHA256 (xpi/firefox-38.1.0/it.xpi) = 42948d7424e1554ce71e34d34c63b1bd3b94bf067845b8826576591aeeba3bb9 +SIZE (xpi/firefox-38.1.0/it.xpi) = 368409 +SHA256 (xpi/firefox-38.1.0/ja.xpi) = 456e16ba61c0bb904cbfb3d05b184d6fc9d7cac7f346c7b38d9fe230af96e96d +SIZE (xpi/firefox-38.1.0/ja.xpi) = 479113 +SHA256 (xpi/firefox-38.1.0/kk.xpi) = 0c10adeca506e653e464285b1feaf049d79dbcb45e1820dfe6cbb13198422c5a +SIZE (xpi/firefox-38.1.0/kk.xpi) = 503567 +SHA256 (xpi/firefox-38.1.0/km.xpi) = b94aff6d6093856b1726b1aa8d6ffa0ad2db3a897ea9ad6a5589fbffac6580a9 +SIZE (xpi/firefox-38.1.0/km.xpi) = 565673 +SHA256 (xpi/firefox-38.1.0/kn.xpi) = 72d4b3da5a920975904ba4f17b55826685ec71ffc4e952a946142210e2ae95eb +SIZE (xpi/firefox-38.1.0/kn.xpi) = 533464 +SHA256 (xpi/firefox-38.1.0/ko.xpi) = 4caa6c2e11b1c0d9184cc688fcb5f9534ab74a1d87c2d7624a83c0fc1ea4699d +SIZE (xpi/firefox-38.1.0/ko.xpi) = 460853 +SHA256 (xpi/firefox-38.1.0/lij.xpi) = 75c704a30c99d4bd6b0a99945709dd88c86b8859ffe448ed59b0b9af51c76c7b +SIZE (xpi/firefox-38.1.0/lij.xpi) = 444237 +SHA256 (xpi/firefox-38.1.0/lt.xpi) = 0a4c45516ba00ab84b2744690ff4e70ef624825238fa4c4cd6345db68be158e5 +SIZE (xpi/firefox-38.1.0/lt.xpi) = 486451 +SHA256 (xpi/firefox-38.1.0/lv.xpi) = 3f88098b580f7591a9a435ba93f06e73f6adb312d9a19ad4b756768b93bd3b1b +SIZE (xpi/firefox-38.1.0/lv.xpi) = 467197 +SHA256 (xpi/firefox-38.1.0/mai.xpi) = 27473c24c7f66a9ed31ccda36d04bf98cc81f699bdfe4c5958de0abd9c5c6824 +SIZE (xpi/firefox-38.1.0/mai.xpi) = 514665 +SHA256 (xpi/firefox-38.1.0/mk.xpi) = 6e2d2ac3b859eedc499041e2961cc1bf4b92316dd59526f14ff694fb4c2067b4 +SIZE (xpi/firefox-38.1.0/mk.xpi) = 529204 +SHA256 (xpi/firefox-38.1.0/ml.xpi) = f4d488f0207854450945af1230b70db6773bd94bad6804fdba4215bba921734f +SIZE (xpi/firefox-38.1.0/ml.xpi) = 528919 +SHA256 (xpi/firefox-38.1.0/mr.xpi) = dd9caa414cc4ba76ec4161b246612cb008585b5662b4c911d1ca7058e86a54a5 +SIZE (xpi/firefox-38.1.0/mr.xpi) = 505961 +SHA256 (xpi/firefox-38.1.0/ms.xpi) = 00c98155bc447385340e2c1b08ecfac7f4405b8b843c0603ab39a65b037f49e3 +SIZE (xpi/firefox-38.1.0/ms.xpi) = 489872 +SHA256 (xpi/firefox-38.1.0/nb-NO.xpi) = 9b17997524d839b610e60b42cae25c512ea93f3fedad473e723a91289f839ca5 +SIZE (xpi/firefox-38.1.0/nb-NO.xpi) = 444176 +SHA256 (xpi/firefox-38.1.0/nl.xpi) = 8d1532bbbb2a843babfd5b46909f0af1457fc8c9c14145b693ad0ff91b3e90ef +SIZE (xpi/firefox-38.1.0/nl.xpi) = 443993 +SHA256 (xpi/firefox-38.1.0/nn-NO.xpi) = 732a5be1501711e2aed2a5073dd6a3726095b8d3940765e4b368c74c2ad32c59 +SIZE (xpi/firefox-38.1.0/nn-NO.xpi) = 438451 +SHA256 (xpi/firefox-38.1.0/or.xpi) = 1297c29d98f2b1952d05f50417ba383c28505dd316ab8fd7179be6f6805ba892 +SIZE (xpi/firefox-38.1.0/or.xpi) = 527048 +SHA256 (xpi/firefox-38.1.0/pa-IN.xpi) = d3ee939b7914194a87f5ea3b24e569c3c9486ca3d0b997e8303c2c9c42b3bf76 +SIZE (xpi/firefox-38.1.0/pa-IN.xpi) = 493722 +SHA256 (xpi/firefox-38.1.0/pl.xpi) = 8b88410da0376d2c14ccc3e3c0eb8a0031d60d048aebba176100854a17bc16b4 +SIZE (xpi/firefox-38.1.0/pl.xpi) = 406566 +SHA256 (xpi/firefox-38.1.0/pt-BR.xpi) = f1b89e40d210497e3a7ef45b7acbf42c9d0b0b7990efd35d94f04fd0247dfc53 +SIZE (xpi/firefox-38.1.0/pt-BR.xpi) = 459812 +SHA256 (xpi/firefox-38.1.0/pt-PT.xpi) = 23e456c3550b31d7596956dd9739ef317ae742137419d426a4326f277e1c0206 +SIZE (xpi/firefox-38.1.0/pt-PT.xpi) = 439974 +SHA256 (xpi/firefox-38.1.0/rm.xpi) = f305e7a119c349ec71d4000517f315867f8174147dbbf6178a715e27e9aca29b +SIZE (xpi/firefox-38.1.0/rm.xpi) = 446286 +SHA256 (xpi/firefox-38.1.0/ro.xpi) = cd38ec29af9fbbc27ad61330d2804d57f999c98cebccf6333aa58d55c4e1db87 +SIZE (xpi/firefox-38.1.0/ro.xpi) = 494078 +SHA256 (xpi/firefox-38.1.0/ru.xpi) = b2c612a33a7e7126343644b3931749cd9de1421f8bb1aad283087f0ede074c31 +SIZE (xpi/firefox-38.1.0/ru.xpi) = 414418 +SHA256 (xpi/firefox-38.1.0/si.xpi) = 02de4fd1753d33e6b0c1d81dce2beec09dd01c1bff2c0e82864ec0700971bb68 +SIZE (xpi/firefox-38.1.0/si.xpi) = 537392 +SHA256 (xpi/firefox-38.1.0/sk.xpi) = 2fb1510e200824e455dee3492c8de7c0dd6bc4925307c5069d454fdc9513ca9b +SIZE (xpi/firefox-38.1.0/sk.xpi) = 469436 +SHA256 (xpi/firefox-38.1.0/sl.xpi) = d5f5ae891561d7ea891f9eaeee4a417e76159f8ee2b6402580d71e155de5bf23 +SIZE (xpi/firefox-38.1.0/sl.xpi) = 441593 +SHA256 (xpi/firefox-38.1.0/son.xpi) = 9fa1b158b3ca08335ca6c9bcf70fd76e6b4baab6cfdb667475188aaacc2f2193 +SIZE (xpi/firefox-38.1.0/son.xpi) = 449266 +SHA256 (xpi/firefox-38.1.0/sq.xpi) = 94d82f9dcf552f6e696e14d17ea9da388de8f5231e72bed6a0eef8b7426f6097 +SIZE (xpi/firefox-38.1.0/sq.xpi) = 486075 +SHA256 (xpi/firefox-38.1.0/sr.xpi) = f63271245f4919db7b86e9740a5128f50db750fe747e98343b1641291e7be1d3 +SIZE (xpi/firefox-38.1.0/sr.xpi) = 479418 +SHA256 (xpi/firefox-38.1.0/sv-SE.xpi) = 724e6ed7ad69ea5a612185851d1bcc39eb46e9cdaaee9032609637516b2fb4fc +SIZE (xpi/firefox-38.1.0/sv-SE.xpi) = 452631 +SHA256 (xpi/firefox-38.1.0/ta.xpi) = f0fc43a9cfde17cb71a3c1adef1ec4ae53201d0246528216f7c62fa93d5ca621 +SIZE (xpi/firefox-38.1.0/ta.xpi) = 506605 +SHA256 (xpi/firefox-38.1.0/te.xpi) = 47024b3c034826560b19281b5346d3c79b46b86c308d15c98acc5898545c47a5 +SIZE (xpi/firefox-38.1.0/te.xpi) = 526252 +SHA256 (xpi/firefox-38.1.0/th.xpi) = f99a2d738ee379bde70fc472626611365054eb25165c613824180d8ee7d53454 +SIZE (xpi/firefox-38.1.0/th.xpi) = 534269 +SHA256 (xpi/firefox-38.1.0/tr.xpi) = c7eac37f05b3a4afc073e85c9a065f343cc40b0cdba17fb8dd7219bc175c7723 +SIZE (xpi/firefox-38.1.0/tr.xpi) = 481075 +SHA256 (xpi/firefox-38.1.0/uk.xpi) = 6c68750ac5d4dab03b6c93d7694d8a8c430e95d9ad103a86c2477089fd678d99 +SIZE (xpi/firefox-38.1.0/uk.xpi) = 493312 +SHA256 (xpi/firefox-38.1.0/vi.xpi) = 874f22b8c19d7fe417496c6916b150c7d51a7021e5e73809a542799238c194fd +SIZE (xpi/firefox-38.1.0/vi.xpi) = 467503 +SHA256 (xpi/firefox-38.1.0/xh.xpi) = 53aca9e35a77091be291a3d2246ada0110d71e0451018c20d9a8c1f40dd2b2ae +SIZE (xpi/firefox-38.1.0/xh.xpi) = 450241 +SHA256 (xpi/firefox-38.1.0/zh-CN.xpi) = 0dbc3ac200290bdb5514c2076f5a1459442b4e3ee235ef29216384f2ad06d61f +SIZE (xpi/firefox-38.1.0/zh-CN.xpi) = 488276 +SHA256 (xpi/firefox-38.1.0/zh-TW.xpi) = e3ec89fe112a80d424e25934d21de61efbde5e6680ce2aece0c37a04d96be91c +SIZE (xpi/firefox-38.1.0/zh-TW.xpi) = 467843 Index: branches/2015Q3/www/firefox-i18n/Makefile =================================================================== --- branches/2015Q3/www/firefox-i18n/Makefile (revision 392766) +++ branches/2015Q3/www/firefox-i18n/Makefile (revision 392767) @@ -1,89 +1,89 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= firefox-i18n -PORTVERSION= 38.0.6 +PORTVERSION= 39.0 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \ - MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi + MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build6/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,38,build +USES= zip:infozip gecko:firefox,39,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: branches/2015Q3/www/firefox-i18n/distinfo =================================================================== --- branches/2015Q3/www/firefox-i18n/distinfo (revision 392766) +++ branches/2015Q3/www/firefox-i18n/distinfo (revision 392767) @@ -1,176 +1,176 @@ -SHA256 (xpi/firefox-i18n-38.0.6/ach.xpi) = ad03bf377edcae7b45510eb16a558d18f217ab7d13f11c1f4aeef436952ebfa4 -SIZE (xpi/firefox-i18n-38.0.6/ach.xpi) = 477966 -SHA256 (xpi/firefox-i18n-38.0.6/af.xpi) = 4a67a99198d01a1a35f57840826d331d4712e0dec4c9e990e9111d9301353130 -SIZE (xpi/firefox-i18n-38.0.6/af.xpi) = 483325 -SHA256 (xpi/firefox-i18n-38.0.6/an.xpi) = 986abe42419028e34b72b40ca2ffc04b43d649603c9be41ff08b29ad60f4c759 -SIZE (xpi/firefox-i18n-38.0.6/an.xpi) = 461421 -SHA256 (xpi/firefox-i18n-38.0.6/ar.xpi) = 6ce1cdb6d9f36569f8116dc02af552ecfdc5cdcd16a982ea3cf55f072db9a2d0 -SIZE (xpi/firefox-i18n-38.0.6/ar.xpi) = 516494 -SHA256 (xpi/firefox-i18n-38.0.6/as.xpi) = 3236019f46171baa694cdc8a51eb254ade7b9a258b9e62476b6ff4f356e9af0b -SIZE (xpi/firefox-i18n-38.0.6/as.xpi) = 509573 -SHA256 (xpi/firefox-i18n-38.0.6/ast.xpi) = 00f59397ebd0cb4e2156e003d4cb60b27b78e9566f1bab35df44138f1b23d2f2 -SIZE (xpi/firefox-i18n-38.0.6/ast.xpi) = 397199 -SHA256 (xpi/firefox-i18n-38.0.6/az.xpi) = 5c2087ab6c45e2c0389d1536ec6a1754dbfa0eebb5b861acc813728b17b29ac9 -SIZE (xpi/firefox-i18n-38.0.6/az.xpi) = 489151 -SHA256 (xpi/firefox-i18n-38.0.6/be.xpi) = 61d28f0411eb230eb54aef1bb3c6f7ffe08328bf2e741f05287351119e9b39ec -SIZE (xpi/firefox-i18n-38.0.6/be.xpi) = 441055 -SHA256 (xpi/firefox-i18n-38.0.6/bg.xpi) = 96c7741513bb4b8642282bb4decf14b658c774d578d904d07b58a8d57aab3612 -SIZE (xpi/firefox-i18n-38.0.6/bg.xpi) = 487818 -SHA256 (xpi/firefox-i18n-38.0.6/bn-BD.xpi) = 8c3110a71f7ceaea205893c0b288b136eeda4549911055a22d0c888d43ff1534 -SIZE (xpi/firefox-i18n-38.0.6/bn-BD.xpi) = 528687 -SHA256 (xpi/firefox-i18n-38.0.6/bn-IN.xpi) = 335c583bec0972452df86fca36cbb849fc4f46cb760440973c6344e8a4ee8b3e -SIZE (xpi/firefox-i18n-38.0.6/bn-IN.xpi) = 527925 -SHA256 (xpi/firefox-i18n-38.0.6/br.xpi) = b570b15f0f18b17a490597a94e23bb2bb7c03fb1dd70aa871c64ef1c05336392 -SIZE (xpi/firefox-i18n-38.0.6/br.xpi) = 441959 -SHA256 (xpi/firefox-i18n-38.0.6/bs.xpi) = 991ba341335f56ab353410845c07177ce3eadbfdef0e10cb7c58f2d9f1930d96 -SIZE (xpi/firefox-i18n-38.0.6/bs.xpi) = 485304 -SHA256 (xpi/firefox-i18n-38.0.6/ca.xpi) = e02c04afea8d98fc8ded6f42903111d5a901fb33f6288819f91b77f7fad7abca -SIZE (xpi/firefox-i18n-38.0.6/ca.xpi) = 458090 -SHA256 (xpi/firefox-i18n-38.0.6/cs.xpi) = cc320e6c1509064da1b8cc434b2bf9bc4612fdb08007350f5678e6998f5aac95 -SIZE (xpi/firefox-i18n-38.0.6/cs.xpi) = 446723 -SHA256 (xpi/firefox-i18n-38.0.6/cy.xpi) = f65d940cda171f64a0866f4752ae8f9b18e4476b03ab113897eb9ba0247cfcca -SIZE (xpi/firefox-i18n-38.0.6/cy.xpi) = 444384 -SHA256 (xpi/firefox-i18n-38.0.6/da.xpi) = 3ab38b1b89c518f86538ab4d712bad207fe7626283447591bd1585b6b28520f3 -SIZE (xpi/firefox-i18n-38.0.6/da.xpi) = 450760 -SHA256 (xpi/firefox-i18n-38.0.6/de.xpi) = bc504b1e20bf363bf3986893b01010bb3219683ee7a388cb507f5fe484ca55bf -SIZE (xpi/firefox-i18n-38.0.6/de.xpi) = 451627 -SHA256 (xpi/firefox-i18n-38.0.6/dsb.xpi) = fd7299b58486b248f202c18c60b58ac66fcc799dc04d2909fff1ee2321439d35 -SIZE (xpi/firefox-i18n-38.0.6/dsb.xpi) = 470920 -SHA256 (xpi/firefox-i18n-38.0.6/el.xpi) = 77fd49c032ec0ca8ac2f5f69b9fb2b16c5f81c94cace7454d7715328a6d77fb8 -SIZE (xpi/firefox-i18n-38.0.6/el.xpi) = 498368 -SHA256 (xpi/firefox-i18n-38.0.6/en-GB.xpi) = 08ac16196ad9457775ffeb9922cf9e999add5d166f77f14e1f17a393d5a77583 -SIZE (xpi/firefox-i18n-38.0.6/en-GB.xpi) = 437843 -SHA256 (xpi/firefox-i18n-38.0.6/en-US.xpi) = 0d12db115fd157afa712d7598543b843fcca54df6f5af1e802058d87b3d3f289 -SIZE (xpi/firefox-i18n-38.0.6/en-US.xpi) = 469717 -SHA256 (xpi/firefox-i18n-38.0.6/en-ZA.xpi) = 50453a3cdb2d35ff221d02c6d8c09e942dab3f26bc87d0c6f0754c8a38ae3822 -SIZE (xpi/firefox-i18n-38.0.6/en-ZA.xpi) = 439924 -SHA256 (xpi/firefox-i18n-38.0.6/eo.xpi) = b65484b22a62daea5add7b1aae6c623387d9dfde5b4d53b65005bfb6856c4923 -SIZE (xpi/firefox-i18n-38.0.6/eo.xpi) = 488369 -SHA256 (xpi/firefox-i18n-38.0.6/es-AR.xpi) = 7210a8fbce905a45dcb89900c12c5299a8c084474ca6373afc880e313a54ec65 -SIZE (xpi/firefox-i18n-38.0.6/es-AR.xpi) = 453982 -SHA256 (xpi/firefox-i18n-38.0.6/es-CL.xpi) = c9620fb8854c65d7f6c2f5786f4a16bbc0d587ea54f6599a12415396f6abf345 -SIZE (xpi/firefox-i18n-38.0.6/es-CL.xpi) = 384677 -SHA256 (xpi/firefox-i18n-38.0.6/es-ES.xpi) = c9f0499f5648eac4c130e2e199cf179eccae9825d787cf7b66c6e7e8ff2d1586 -SIZE (xpi/firefox-i18n-38.0.6/es-ES.xpi) = 374071 -SHA256 (xpi/firefox-i18n-38.0.6/es-MX.xpi) = be9bbd645ecbab53dd983ac5937758681ec290888eb58e321220ceb6e4f70699 -SIZE (xpi/firefox-i18n-38.0.6/es-MX.xpi) = 457048 -SHA256 (xpi/firefox-i18n-38.0.6/et.xpi) = 744e3f241869017b49dcd11143707989f206dbf20280da0c32b3069985e1f528 -SIZE (xpi/firefox-i18n-38.0.6/et.xpi) = 443227 -SHA256 (xpi/firefox-i18n-38.0.6/eu.xpi) = e25df9b0f74169e3875ef0ff1a4c44c6b99ab6f7c0a434f62fe84a3fa56daa1d -SIZE (xpi/firefox-i18n-38.0.6/eu.xpi) = 466554 -SHA256 (xpi/firefox-i18n-38.0.6/fa.xpi) = 9149cfb8348a2ef24fa03e8df38eef85b823a064c0b12d0a9b0178b67928a1c0 -SIZE (xpi/firefox-i18n-38.0.6/fa.xpi) = 518281 -SHA256 (xpi/firefox-i18n-38.0.6/ff.xpi) = 5b83491ea0808483da19e1b72fea76be33eb0ba30bb96d2e087b880d26eb1642 -SIZE (xpi/firefox-i18n-38.0.6/ff.xpi) = 454586 -SHA256 (xpi/firefox-i18n-38.0.6/fi.xpi) = 4f96df107967f4c86680ff578114ff579a255e8819942ce10889b6575d75e37b -SIZE (xpi/firefox-i18n-38.0.6/fi.xpi) = 444851 -SHA256 (xpi/firefox-i18n-38.0.6/fr.xpi) = 08409d4f3f9c0d5939baed76b280e56cd34293d5b43ac41b5349f3e097907125 -SIZE (xpi/firefox-i18n-38.0.6/fr.xpi) = 461400 -SHA256 (xpi/firefox-i18n-38.0.6/fy-NL.xpi) = 38e15ac51c475dc9d9e2920ee32d73f0c4ddfde3ad60918ad14b88f92605a543 -SIZE (xpi/firefox-i18n-38.0.6/fy-NL.xpi) = 455539 -SHA256 (xpi/firefox-i18n-38.0.6/ga-IE.xpi) = 5ce5484701d0a385e1bc788c7cd868371af34d6463c8de8d4a7b9775fc5cbd35 -SIZE (xpi/firefox-i18n-38.0.6/ga-IE.xpi) = 469621 -SHA256 (xpi/firefox-i18n-38.0.6/gd.xpi) = 11395a42abd6e115814d6a32e52378ee5b527ed4c24fb62b9e5f2e4f073864f7 -SIZE (xpi/firefox-i18n-38.0.6/gd.xpi) = 454614 -SHA256 (xpi/firefox-i18n-38.0.6/gl.xpi) = d1b26401fbb17762a077bd81f92ca5f43dbaa6a404c346c17ef171ec43758f58 -SIZE (xpi/firefox-i18n-38.0.6/gl.xpi) = 448923 -SHA256 (xpi/firefox-i18n-38.0.6/gu-IN.xpi) = b9e250ed62ee139dc793df6f5f29af4dba7492fe4d83ed07c95f6c8e1e0296bd -SIZE (xpi/firefox-i18n-38.0.6/gu-IN.xpi) = 477978 -SHA256 (xpi/firefox-i18n-38.0.6/he.xpi) = 98fd16c813a98f7096b78867699b8620093154005d129c0d2e11817643b1baec -SIZE (xpi/firefox-i18n-38.0.6/he.xpi) = 486784 -SHA256 (xpi/firefox-i18n-38.0.6/hi-IN.xpi) = 0cd3ccba2eb3c9dd6661e7f3232c66aac5a323aec72a8e15e942f3e9e949a57d -SIZE (xpi/firefox-i18n-38.0.6/hi-IN.xpi) = 508165 -SHA256 (xpi/firefox-i18n-38.0.6/hr.xpi) = 5fea5c7a4ba74e21d4332ff8daeeaaef51886778bc404c8bfadc61220fd65fba -SIZE (xpi/firefox-i18n-38.0.6/hr.xpi) = 478269 -SHA256 (xpi/firefox-i18n-38.0.6/hsb.xpi) = 99c285afb9db815cbda1f2a5a9cae9df769a36e268e7cf69806ed78fa9ff63f1 -SIZE (xpi/firefox-i18n-38.0.6/hsb.xpi) = 468716 -SHA256 (xpi/firefox-i18n-38.0.6/hu.xpi) = cb78a15e8cfcd7d280aff17bdf20d04ea103211045fc994e20cc9811a5cfc045 -SIZE (xpi/firefox-i18n-38.0.6/hu.xpi) = 453553 -SHA256 (xpi/firefox-i18n-38.0.6/hy-AM.xpi) = aeea11527c732548ea4b5b07ca9ef17aa97348dc60e25cfad6bd398459e75bd7 -SIZE (xpi/firefox-i18n-38.0.6/hy-AM.xpi) = 534262 -SHA256 (xpi/firefox-i18n-38.0.6/id.xpi) = c58a8f7246c9548f756b5c5567178a4fa8a9e56f201735cc60e4693dbd05ee19 -SIZE (xpi/firefox-i18n-38.0.6/id.xpi) = 431487 -SHA256 (xpi/firefox-i18n-38.0.6/is.xpi) = c99dd4ea2ecbea8ce28fa5abe5124fdf4f857bf6af614e9174978d8359c9244a -SIZE (xpi/firefox-i18n-38.0.6/is.xpi) = 485131 -SHA256 (xpi/firefox-i18n-38.0.6/it.xpi) = 27636262046d9b27c3d4222d4bab4c6700bc728be1770ff5f3d067d83e22b6e7 -SIZE (xpi/firefox-i18n-38.0.6/it.xpi) = 368408 -SHA256 (xpi/firefox-i18n-38.0.6/ja.xpi) = 62051b473ee82ef5a9460ee4ce6045efe1b96cbc67bdee9747d6a642f724736a -SIZE (xpi/firefox-i18n-38.0.6/ja.xpi) = 479113 -SHA256 (xpi/firefox-i18n-38.0.6/kk.xpi) = 9e47fc85b769d46b51d69c6baefc15f78263e3941e414f2513ccabe05fabd634 -SIZE (xpi/firefox-i18n-38.0.6/kk.xpi) = 503567 -SHA256 (xpi/firefox-i18n-38.0.6/km.xpi) = 5f174f400458fc099e0680e02ac70048fecd2ef5472cd9dba0f77c2ff1e8cda1 -SIZE (xpi/firefox-i18n-38.0.6/km.xpi) = 565672 -SHA256 (xpi/firefox-i18n-38.0.6/kn.xpi) = 067ebc125f3d970d1f058b5e6a4296e3382bde2ff045bacc39f96607591b3f66 -SIZE (xpi/firefox-i18n-38.0.6/kn.xpi) = 533463 -SHA256 (xpi/firefox-i18n-38.0.6/ko.xpi) = d2b04bc71e665511c5ad889ba1237a67c916bff88628a605d8522323973e3b62 -SIZE (xpi/firefox-i18n-38.0.6/ko.xpi) = 460853 -SHA256 (xpi/firefox-i18n-38.0.6/lij.xpi) = d1b0d22c8fc623971ff83c6041b33148ffc451504698f5300798805ede2e1f68 -SIZE (xpi/firefox-i18n-38.0.6/lij.xpi) = 444240 -SHA256 (xpi/firefox-i18n-38.0.6/lt.xpi) = 6c2a8b2b7960f17342ba9eb006bf72d30193e258e9e891a59ec5cd9bae98d1e6 -SIZE (xpi/firefox-i18n-38.0.6/lt.xpi) = 486450 -SHA256 (xpi/firefox-i18n-38.0.6/lv.xpi) = b6d7bd3f6461aa94b2f05dea855f4ea93e8cdce385b496da159348d97b6f9083 -SIZE (xpi/firefox-i18n-38.0.6/lv.xpi) = 467197 -SHA256 (xpi/firefox-i18n-38.0.6/mai.xpi) = 7aa1e27a38f970ce42a6f676d4b2f111fba7e1394ce4f09d8b8c72bf9a0b182e -SIZE (xpi/firefox-i18n-38.0.6/mai.xpi) = 514662 -SHA256 (xpi/firefox-i18n-38.0.6/mk.xpi) = 1cdbbb79e8da9da9e6c340e3a03bf38a4ddb44a29d9eb5990b5838abc4748c3a -SIZE (xpi/firefox-i18n-38.0.6/mk.xpi) = 529204 -SHA256 (xpi/firefox-i18n-38.0.6/ml.xpi) = 6c34207509307dd721fd117029062c63fee3dbf06d4dee46709a4aca3937a49a -SIZE (xpi/firefox-i18n-38.0.6/ml.xpi) = 528918 -SHA256 (xpi/firefox-i18n-38.0.6/mr.xpi) = eea26382b292dd8c53f1a84b3f78c675ae8240f96f61d00b250cb4863b4e70af -SIZE (xpi/firefox-i18n-38.0.6/mr.xpi) = 505960 -SHA256 (xpi/firefox-i18n-38.0.6/ms.xpi) = 36d29a890bff94d7a6940e386568b9ef6ad92d5d7f0cafe271983a8c7960fee0 -SIZE (xpi/firefox-i18n-38.0.6/ms.xpi) = 489871 -SHA256 (xpi/firefox-i18n-38.0.6/nb-NO.xpi) = 16a1180df801e875aa095b6d0daaf027b5673ba288f24d6f8775b1c16d153813 -SIZE (xpi/firefox-i18n-38.0.6/nb-NO.xpi) = 444174 -SHA256 (xpi/firefox-i18n-38.0.6/nl.xpi) = e867e26f49a49080b3fac318d99417d1ad6b208f56f60884e88db5e19a11b7a1 -SIZE (xpi/firefox-i18n-38.0.6/nl.xpi) = 443993 -SHA256 (xpi/firefox-i18n-38.0.6/nn-NO.xpi) = 2abffbac72b1b6e59d97caaa042ef3f91d4a1a3f91ecaf2d892228797c5b710a -SIZE (xpi/firefox-i18n-38.0.6/nn-NO.xpi) = 438450 -SHA256 (xpi/firefox-i18n-38.0.6/or.xpi) = f73f7eaaf55a82f339acc2233c229dd9f0455b29ece08d6038b50f88dcfc6956 -SIZE (xpi/firefox-i18n-38.0.6/or.xpi) = 527047 -SHA256 (xpi/firefox-i18n-38.0.6/pa-IN.xpi) = aa5e54b73218401ea0270a1327d02abd78ea6e69f9ac035238cd0a604769ec88 -SIZE (xpi/firefox-i18n-38.0.6/pa-IN.xpi) = 493720 -SHA256 (xpi/firefox-i18n-38.0.6/pl.xpi) = 21c31bbe1c470d03b397449ba7398179699ec1eccaccc626802f858106526f2b -SIZE (xpi/firefox-i18n-38.0.6/pl.xpi) = 406565 -SHA256 (xpi/firefox-i18n-38.0.6/pt-BR.xpi) = c2205e1e4df75550693da64b550a82ad1005f598b1dcd48067299358d6e94562 -SIZE (xpi/firefox-i18n-38.0.6/pt-BR.xpi) = 459808 -SHA256 (xpi/firefox-i18n-38.0.6/pt-PT.xpi) = 61b5d42ca06d79750d46206b6e30ace3d5044f32b330aa9167bd6c5732b43bfd -SIZE (xpi/firefox-i18n-38.0.6/pt-PT.xpi) = 439973 -SHA256 (xpi/firefox-i18n-38.0.6/rm.xpi) = 30d2be77260bf38a2309b40998dd6e32221b680e7dd0ff7d0862c941fd2b026a -SIZE (xpi/firefox-i18n-38.0.6/rm.xpi) = 446286 -SHA256 (xpi/firefox-i18n-38.0.6/ro.xpi) = 251fae3b096a4432a2d88cfe15d5b74a9228ffb5772c240fb0ea6555ff671b13 -SIZE (xpi/firefox-i18n-38.0.6/ro.xpi) = 494078 -SHA256 (xpi/firefox-i18n-38.0.6/ru.xpi) = 103c44712b30992296109adf2b0bdf192ed574a311b0f5ffcb688f78ac2e576e -SIZE (xpi/firefox-i18n-38.0.6/ru.xpi) = 414416 -SHA256 (xpi/firefox-i18n-38.0.6/si.xpi) = eec65f71f9b13c5ceb7cd64bab48e840533ce4f26e4342b132a1e0874e695c79 -SIZE (xpi/firefox-i18n-38.0.6/si.xpi) = 537393 -SHA256 (xpi/firefox-i18n-38.0.6/sk.xpi) = 00ae369f2f03c1664e06a52f9b199252ff960d5ec7f1306a3e5d5978bc315e35 -SIZE (xpi/firefox-i18n-38.0.6/sk.xpi) = 469435 -SHA256 (xpi/firefox-i18n-38.0.6/sl.xpi) = cc82c94bb39d60062f33f97a6bf9a93f39f0c37a92cb3b9bf79d82481fd9b8d5 -SIZE (xpi/firefox-i18n-38.0.6/sl.xpi) = 441592 -SHA256 (xpi/firefox-i18n-38.0.6/son.xpi) = 30def4ba3ffa1fa527fb47049d340a0023f06fc7840816fdf6486d2525ff67d1 -SIZE (xpi/firefox-i18n-38.0.6/son.xpi) = 449266 -SHA256 (xpi/firefox-i18n-38.0.6/sq.xpi) = 67e5c36cf9b0f65b275f61e8c0195e554f2cb4238fbd23799d06cc2bb76f9c47 -SIZE (xpi/firefox-i18n-38.0.6/sq.xpi) = 486074 -SHA256 (xpi/firefox-i18n-38.0.6/sr.xpi) = 23e8175609b8bb888070fe021f0c9a8f11047116a09c3ab5e5977e39e99f2ec3 -SIZE (xpi/firefox-i18n-38.0.6/sr.xpi) = 479418 -SHA256 (xpi/firefox-i18n-38.0.6/sv-SE.xpi) = bb656fd49de6588498c13efa5f669d8f1cfdbf1fb8b9897d19bacfbca27c7ec4 -SIZE (xpi/firefox-i18n-38.0.6/sv-SE.xpi) = 452629 -SHA256 (xpi/firefox-i18n-38.0.6/ta.xpi) = 2ab44c9b48febe2ad0de250b14ced4eb6ab8048e1258e4fb3c026a31ebb3700d -SIZE (xpi/firefox-i18n-38.0.6/ta.xpi) = 506606 -SHA256 (xpi/firefox-i18n-38.0.6/te.xpi) = 042e377434bf2d963973b35bb0ee0d0ad289129a1a18f66dfe25dc8b5666b10e -SIZE (xpi/firefox-i18n-38.0.6/te.xpi) = 526249 -SHA256 (xpi/firefox-i18n-38.0.6/th.xpi) = e08aabc3c902acd5c760d17973f626e09333e9fbf1f29ab7af52fc357badccf9 -SIZE (xpi/firefox-i18n-38.0.6/th.xpi) = 534269 -SHA256 (xpi/firefox-i18n-38.0.6/tr.xpi) = e2df78f1a82a4bd93da352494f12148112f8bb0c499c7d4df7f000d1f41161ae -SIZE (xpi/firefox-i18n-38.0.6/tr.xpi) = 481074 -SHA256 (xpi/firefox-i18n-38.0.6/uk.xpi) = 925aa49d1a9c3512c50b1d7034a805117b71c015b82a2e8430bae91f147f47bb -SIZE (xpi/firefox-i18n-38.0.6/uk.xpi) = 493312 -SHA256 (xpi/firefox-i18n-38.0.6/vi.xpi) = 64e870c9f44263d0d76563602c70ed6ae714cdca10d6c42279f8a1d0b5845c4a -SIZE (xpi/firefox-i18n-38.0.6/vi.xpi) = 467503 -SHA256 (xpi/firefox-i18n-38.0.6/xh.xpi) = a14fd8ae6cdaf3221ce90f9e4a91dc3b6081aa74a303ada92d8d60afc3d3c3dc -SIZE (xpi/firefox-i18n-38.0.6/xh.xpi) = 450241 -SHA256 (xpi/firefox-i18n-38.0.6/zh-CN.xpi) = 98206ef4ef8b1da1894dfcc9fba6be38137132fece48ada1f6666082ed7dc563 -SIZE (xpi/firefox-i18n-38.0.6/zh-CN.xpi) = 488274 -SHA256 (xpi/firefox-i18n-38.0.6/zh-TW.xpi) = 43e5c886de9ee6c2a5a3e83e0cfac404b76583eaac634b04c2652e92ae81dc5d -SIZE (xpi/firefox-i18n-38.0.6/zh-TW.xpi) = 467843 +SHA256 (xpi/firefox-i18n-39.0/ach.xpi) = c922e238ef7201cb0b0c2a9da00164c350b440a3d02c838daa45b17713bf3eab +SIZE (xpi/firefox-i18n-39.0/ach.xpi) = 483041 +SHA256 (xpi/firefox-i18n-39.0/af.xpi) = 3653816368acb76e6773826db81c6473bdd923f7d61ca5ef24e9144d38c3752e +SIZE (xpi/firefox-i18n-39.0/af.xpi) = 487310 +SHA256 (xpi/firefox-i18n-39.0/an.xpi) = c0bf2029255947a5c1fcb681fdb4ad0522a0b9941f5862046c45a70d04b68609 +SIZE (xpi/firefox-i18n-39.0/an.xpi) = 465359 +SHA256 (xpi/firefox-i18n-39.0/ar.xpi) = 1607562dafe4274ed7eb74e8d993baa70162c91de265bb2ac1dd8a63bdc1a3b3 +SIZE (xpi/firefox-i18n-39.0/ar.xpi) = 520323 +SHA256 (xpi/firefox-i18n-39.0/as.xpi) = 653ee076f738a7365dd75da4899032f31ac73451e9a2b26a1ec5e4621547f443 +SIZE (xpi/firefox-i18n-39.0/as.xpi) = 514544 +SHA256 (xpi/firefox-i18n-39.0/ast.xpi) = 1fde38dbd96c86bc523d8524472c0de157d58d07e963a1a9bb6794fb6db484d4 +SIZE (xpi/firefox-i18n-39.0/ast.xpi) = 387702 +SHA256 (xpi/firefox-i18n-39.0/az.xpi) = 6bdd0663efa56eebaa67edabee1630147b051181ad993c14241ba7a7b4ccaad0 +SIZE (xpi/firefox-i18n-39.0/az.xpi) = 494213 +SHA256 (xpi/firefox-i18n-39.0/be.xpi) = 8a2278c789a06cc5b27ccfff3731ed8c534529d67e9c5cc42a2e3b6d8613c858 +SIZE (xpi/firefox-i18n-39.0/be.xpi) = 445945 +SHA256 (xpi/firefox-i18n-39.0/bg.xpi) = 24d6285a03ee495b928be4f221f49af8a1f9a07f4ce5be14beff6ebc531f7687 +SIZE (xpi/firefox-i18n-39.0/bg.xpi) = 491422 +SHA256 (xpi/firefox-i18n-39.0/bn-BD.xpi) = 67d9759ac8d22b976ede194fd4c03b72411aa8bb7f733d13ea034119b0a086e5 +SIZE (xpi/firefox-i18n-39.0/bn-BD.xpi) = 533076 +SHA256 (xpi/firefox-i18n-39.0/bn-IN.xpi) = ec20ec3b29b5c7c8827fdbe78e7081ba20ae7d840ed7181b80bd983e19e26dc0 +SIZE (xpi/firefox-i18n-39.0/bn-IN.xpi) = 532548 +SHA256 (xpi/firefox-i18n-39.0/br.xpi) = b2cb99df9e051e3f625b99f8e929a2cddfea5252e41be0064d6ca3d782b1f592 +SIZE (xpi/firefox-i18n-39.0/br.xpi) = 445830 +SHA256 (xpi/firefox-i18n-39.0/bs.xpi) = 9b85eb51785eafdd7467baba89fec2ad72596e56ca7c955f809b23076467853e +SIZE (xpi/firefox-i18n-39.0/bs.xpi) = 489604 +SHA256 (xpi/firefox-i18n-39.0/ca.xpi) = e4302b4babac9b90600ef142bf9d1060a596ac64f91481b23c4884d10f69183f +SIZE (xpi/firefox-i18n-39.0/ca.xpi) = 461923 +SHA256 (xpi/firefox-i18n-39.0/cs.xpi) = 26de879be7e96d6c8020a46ba73049ed13344c1943ea0128ffdcce356cd02f95 +SIZE (xpi/firefox-i18n-39.0/cs.xpi) = 450723 +SHA256 (xpi/firefox-i18n-39.0/cy.xpi) = 91cb0a9d93c5214e0e42ec9fa19c318209635975f7da6849e0b3ccd3a95c5951 +SIZE (xpi/firefox-i18n-39.0/cy.xpi) = 448065 +SHA256 (xpi/firefox-i18n-39.0/da.xpi) = 64748e6b957775bb3ac42bb35f227c88092afb11afce62b425b4c0747fbe285f +SIZE (xpi/firefox-i18n-39.0/da.xpi) = 454611 +SHA256 (xpi/firefox-i18n-39.0/de.xpi) = 56bb69de98fc46442e3aa2c09f95ebd0723f3c73fd890a013450c88225f9a80f +SIZE (xpi/firefox-i18n-39.0/de.xpi) = 456189 +SHA256 (xpi/firefox-i18n-39.0/dsb.xpi) = 802fcc3a4a30b7b899bdceb5a45878b48da89a9048e4a295784c07b45198cd7a +SIZE (xpi/firefox-i18n-39.0/dsb.xpi) = 474911 +SHA256 (xpi/firefox-i18n-39.0/el.xpi) = 22f7185683d08b186ca0022663f1c822b865683f913e8411ebd50408dc91bd2f +SIZE (xpi/firefox-i18n-39.0/el.xpi) = 502653 +SHA256 (xpi/firefox-i18n-39.0/en-GB.xpi) = 2cf069f9da826329c5e5a22aadc4ea5a08ab0e25470b43c358e4ea14edebe88a +SIZE (xpi/firefox-i18n-39.0/en-GB.xpi) = 441232 +SHA256 (xpi/firefox-i18n-39.0/en-US.xpi) = 0e89eb7cbe1fb84203d0217200dcea154a7422d1a7e6049f564796576a732762 +SIZE (xpi/firefox-i18n-39.0/en-US.xpi) = 473134 +SHA256 (xpi/firefox-i18n-39.0/en-ZA.xpi) = 73a7c02e116e86db894266147770124e6627a82c8a3cfe8e336526215fd50444 +SIZE (xpi/firefox-i18n-39.0/en-ZA.xpi) = 444467 +SHA256 (xpi/firefox-i18n-39.0/eo.xpi) = 972ddf4c1acffd1f46b7fe3d7926994a8be0bfccc8589466c26490cc97d06a3d +SIZE (xpi/firefox-i18n-39.0/eo.xpi) = 489005 +SHA256 (xpi/firefox-i18n-39.0/es-AR.xpi) = 1f6fefebe9901763b950de6bbe6aa85bb948673d976f47814b907507274f0766 +SIZE (xpi/firefox-i18n-39.0/es-AR.xpi) = 457407 +SHA256 (xpi/firefox-i18n-39.0/es-CL.xpi) = 03bd03f60a298295a975252629c8ff9362430d15b650f5bcd82ce6604d0cf514 +SIZE (xpi/firefox-i18n-39.0/es-CL.xpi) = 386702 +SHA256 (xpi/firefox-i18n-39.0/es-ES.xpi) = a096fc6c58a2959bf8471830040351feddfac0555150af9409540cec10685afe +SIZE (xpi/firefox-i18n-39.0/es-ES.xpi) = 376299 +SHA256 (xpi/firefox-i18n-39.0/es-MX.xpi) = 56793b19b75c7c1e9692f3b3d415e572439800e288f8e0227bcf690466a064fa +SIZE (xpi/firefox-i18n-39.0/es-MX.xpi) = 462390 +SHA256 (xpi/firefox-i18n-39.0/et.xpi) = 0aaa0ccc0568456adbc0401acceb97983a7045405f4972058b60606fedc19c79 +SIZE (xpi/firefox-i18n-39.0/et.xpi) = 446725 +SHA256 (xpi/firefox-i18n-39.0/eu.xpi) = 7d04e5b11906f474d4096cb496514f8f370eada489739d31742128c7aaebcc91 +SIZE (xpi/firefox-i18n-39.0/eu.xpi) = 470410 +SHA256 (xpi/firefox-i18n-39.0/fa.xpi) = 605d95815fe0c77a4fc5df46d670d4e8e5b35924729a3a640210a0581d3330a1 +SIZE (xpi/firefox-i18n-39.0/fa.xpi) = 520579 +SHA256 (xpi/firefox-i18n-39.0/ff.xpi) = 30e3f30a775f38cb5663a707a1a85ee59f91007fbc229e47401a753702772d89 +SIZE (xpi/firefox-i18n-39.0/ff.xpi) = 459433 +SHA256 (xpi/firefox-i18n-39.0/fi.xpi) = 59d56595435d52e334cb3f388f711ced61075cf0026ba7d4e2cd04527d689ca7 +SIZE (xpi/firefox-i18n-39.0/fi.xpi) = 448585 +SHA256 (xpi/firefox-i18n-39.0/fr.xpi) = 59f1fc070ab7b7f65bab0c475f8fe894fa5c4e924d4f78b97cec8268d2359c41 +SIZE (xpi/firefox-i18n-39.0/fr.xpi) = 465588 +SHA256 (xpi/firefox-i18n-39.0/fy-NL.xpi) = 4812b3fae6bd6083fc0520487403c95f6104d7838e7edc450f05bce495832e3c +SIZE (xpi/firefox-i18n-39.0/fy-NL.xpi) = 459611 +SHA256 (xpi/firefox-i18n-39.0/ga-IE.xpi) = 75f737af71ef7cb19ef4bcd99fa63c6c5d5b77b2d2b96c526b46faa375c2c6db +SIZE (xpi/firefox-i18n-39.0/ga-IE.xpi) = 473547 +SHA256 (xpi/firefox-i18n-39.0/gd.xpi) = 792a7907e5eeb1486a404b9a3a8d88d7eecca87d87a2646d9a11cdaefe01a78c +SIZE (xpi/firefox-i18n-39.0/gd.xpi) = 458521 +SHA256 (xpi/firefox-i18n-39.0/gl.xpi) = fa21c7bcc4989c6c0c0c459f46f7bd716cb7d19ad37861d57389177e7b1e143a +SIZE (xpi/firefox-i18n-39.0/gl.xpi) = 453846 +SHA256 (xpi/firefox-i18n-39.0/gu-IN.xpi) = 189995f89fa441a743354e708d9e8a87d346625881ffaad7bff528de90ba1206 +SIZE (xpi/firefox-i18n-39.0/gu-IN.xpi) = 482866 +SHA256 (xpi/firefox-i18n-39.0/he.xpi) = 70984a01b309959bcbe1d693cba3d92b51a65c3e71535ec015c4b3f950a53f62 +SIZE (xpi/firefox-i18n-39.0/he.xpi) = 486474 +SHA256 (xpi/firefox-i18n-39.0/hi-IN.xpi) = a340651af88b6437a9c04e0c7186f928b730475550a383ac8387714f7a40f1a9 +SIZE (xpi/firefox-i18n-39.0/hi-IN.xpi) = 513451 +SHA256 (xpi/firefox-i18n-39.0/hr.xpi) = 48ab8729d65620b8ccb3e866a4d3eb57bb4e9d4e363491a0c61f1eea122e0c24 +SIZE (xpi/firefox-i18n-39.0/hr.xpi) = 482071 +SHA256 (xpi/firefox-i18n-39.0/hsb.xpi) = f87894bd9d003e9a62548ac82608dbb4b24f36eea8d776872c490a576b4c80e7 +SIZE (xpi/firefox-i18n-39.0/hsb.xpi) = 472665 +SHA256 (xpi/firefox-i18n-39.0/hu.xpi) = e1388ec88077f8a3111d8011b7e8e8773580a1e2b71d6432baff09fa08ee54a8 +SIZE (xpi/firefox-i18n-39.0/hu.xpi) = 457441 +SHA256 (xpi/firefox-i18n-39.0/hy-AM.xpi) = 1ab7dbb561103d9ac32e55c273ebf738480567a9882c9957f9e29829814dc766 +SIZE (xpi/firefox-i18n-39.0/hy-AM.xpi) = 538192 +SHA256 (xpi/firefox-i18n-39.0/id.xpi) = 41ec6c7ea5015d879600675359a21e160a6fc940e1ff634949c759a076da9c06 +SIZE (xpi/firefox-i18n-39.0/id.xpi) = 435240 +SHA256 (xpi/firefox-i18n-39.0/is.xpi) = 68651c22d74e0133a82eab94e8734bfded3bc219b1de7489180835573cb81ba6 +SIZE (xpi/firefox-i18n-39.0/is.xpi) = 488859 +SHA256 (xpi/firefox-i18n-39.0/it.xpi) = 7a681ca2928e3e2154ca190cc06d015144afffd9669b938410e8d48980a1c959 +SIZE (xpi/firefox-i18n-39.0/it.xpi) = 370614 +SHA256 (xpi/firefox-i18n-39.0/ja.xpi) = e510ba604a63b8cb6caf1e24500cb5cfb6a07a90ff22f111b501e847523ff2d0 +SIZE (xpi/firefox-i18n-39.0/ja.xpi) = 483150 +SHA256 (xpi/firefox-i18n-39.0/kk.xpi) = 5ff684dc2245de82a8edda2d02ee20dfbef7db6165060b20e6e3d229437968ef +SIZE (xpi/firefox-i18n-39.0/kk.xpi) = 507527 +SHA256 (xpi/firefox-i18n-39.0/km.xpi) = 27d62503232240cd92508ce3d724f351d5ff8ad99a52d3cf962cf948829a9162 +SIZE (xpi/firefox-i18n-39.0/km.xpi) = 571219 +SHA256 (xpi/firefox-i18n-39.0/kn.xpi) = 342165fe3c5060bb15f6a889e4be80653731012be8d694e8ef817b447230cc46 +SIZE (xpi/firefox-i18n-39.0/kn.xpi) = 537653 +SHA256 (xpi/firefox-i18n-39.0/ko.xpi) = 348a8c4cd0f26b244fc2bc8467a8e6a8285bb7228e6deb6288fc7b464152ebe5 +SIZE (xpi/firefox-i18n-39.0/ko.xpi) = 465013 +SHA256 (xpi/firefox-i18n-39.0/lij.xpi) = 1870af5218e7223a83f935bbe58415e95a278dd1191db1c7b9f2e3446ae12285 +SIZE (xpi/firefox-i18n-39.0/lij.xpi) = 448691 +SHA256 (xpi/firefox-i18n-39.0/lt.xpi) = c49a0538443d77e1fbaf6660fdc15bc76181723af2f8b07af6579b408bc24370 +SIZE (xpi/firefox-i18n-39.0/lt.xpi) = 490579 +SHA256 (xpi/firefox-i18n-39.0/lv.xpi) = 8ac08b4ac3ae70dd7bbe090f0b0f984ebefef03c6d1d20cc4ba3527605c921be +SIZE (xpi/firefox-i18n-39.0/lv.xpi) = 471166 +SHA256 (xpi/firefox-i18n-39.0/mai.xpi) = 561890d80e0162a7e2f3ba5e46ecc07f2ea681005f6f3bae6810fb8acf9408e0 +SIZE (xpi/firefox-i18n-39.0/mai.xpi) = 520123 +SHA256 (xpi/firefox-i18n-39.0/mk.xpi) = e91f81eb8b68e7a2af87d5c82577bc713e4c163a0a64b9a80a99ee6b0830dc56 +SIZE (xpi/firefox-i18n-39.0/mk.xpi) = 533582 +SHA256 (xpi/firefox-i18n-39.0/ml.xpi) = 9fecda84807976d1b320c0070b4f87eff5813f4965aec60e27df8f64e0f08622 +SIZE (xpi/firefox-i18n-39.0/ml.xpi) = 533592 +SHA256 (xpi/firefox-i18n-39.0/mr.xpi) = 511dcdbdb0d0fa919acf81879544d32e066e435bdda14a991f86d0c4999aae4c +SIZE (xpi/firefox-i18n-39.0/mr.xpi) = 510890 +SHA256 (xpi/firefox-i18n-39.0/ms.xpi) = 29494a97c34ed72ca533bec56481eb1baf75d48cc956e13030ff573d4434476e +SIZE (xpi/firefox-i18n-39.0/ms.xpi) = 494765 +SHA256 (xpi/firefox-i18n-39.0/nb-NO.xpi) = 4070b2df0eec4f1f2176c382759c1be4742a12313c01c3bd77ff80bfad0f7100 +SIZE (xpi/firefox-i18n-39.0/nb-NO.xpi) = 447825 +SHA256 (xpi/firefox-i18n-39.0/nl.xpi) = a99f7645bfb669f3a1e6d70ed6401f6492d1ac426757ca8c40683ecb3166ab19 +SIZE (xpi/firefox-i18n-39.0/nl.xpi) = 447540 +SHA256 (xpi/firefox-i18n-39.0/nn-NO.xpi) = 3481260f436473f8b4fa4116faece6a12472b022bd59e477bdec5d85edf211bd +SIZE (xpi/firefox-i18n-39.0/nn-NO.xpi) = 442076 +SHA256 (xpi/firefox-i18n-39.0/or.xpi) = 0a0fdb72e6ee2481fd0f6057021a03dd8c150b428cce05029649f72c8c308cc1 +SIZE (xpi/firefox-i18n-39.0/or.xpi) = 532004 +SHA256 (xpi/firefox-i18n-39.0/pa-IN.xpi) = 4f1359b27b7131ddc944b5746adb2af2b5c319d19151447075db512359f7f084 +SIZE (xpi/firefox-i18n-39.0/pa-IN.xpi) = 497420 +SHA256 (xpi/firefox-i18n-39.0/pl.xpi) = ca291faf583e5b53d5ac607d6e0a6eec13fdedddbf1a003158edf75d475c007d +SIZE (xpi/firefox-i18n-39.0/pl.xpi) = 408063 +SHA256 (xpi/firefox-i18n-39.0/pt-BR.xpi) = 55fbd2f5e4081394fa79b51935f809b5d5ed283f3c5d08597eb8aafdf1f012b4 +SIZE (xpi/firefox-i18n-39.0/pt-BR.xpi) = 463600 +SHA256 (xpi/firefox-i18n-39.0/pt-PT.xpi) = a41b6fc5b5791a596184b5226e3bb8d6185ad97a58bedcb8589afae849a6c40e +SIZE (xpi/firefox-i18n-39.0/pt-PT.xpi) = 444720 +SHA256 (xpi/firefox-i18n-39.0/rm.xpi) = 451394fad795daae087c5bd2d80d9afdc1b0eae52b73a66f97cb3bae61e1419d +SIZE (xpi/firefox-i18n-39.0/rm.xpi) = 449713 +SHA256 (xpi/firefox-i18n-39.0/ro.xpi) = a81a237f50f2aed3186029a1a63556d2ca6ed5c6b6b95c5b9137c94a88a1496c +SIZE (xpi/firefox-i18n-39.0/ro.xpi) = 497997 +SHA256 (xpi/firefox-i18n-39.0/ru.xpi) = 5b3ccfb721175424e567da7071ad3a3fd4f7ac1aaddea5106cd57f306014e1c4 +SIZE (xpi/firefox-i18n-39.0/ru.xpi) = 417166 +SHA256 (xpi/firefox-i18n-39.0/si.xpi) = bc0f7a5bdd857cc7bccec42aeaa87ebb50f3e6be515b91c1465de602ec4ba907 +SIZE (xpi/firefox-i18n-39.0/si.xpi) = 542367 +SHA256 (xpi/firefox-i18n-39.0/sk.xpi) = 749217670c0ab1bc40c5cf19380185ad77a9ab95b130a7d47bd71f5110303073 +SIZE (xpi/firefox-i18n-39.0/sk.xpi) = 473458 +SHA256 (xpi/firefox-i18n-39.0/sl.xpi) = 3c5807b2e4a150dcd625e227fa09414ac6e35f81c02984727681ce70158fdc35 +SIZE (xpi/firefox-i18n-39.0/sl.xpi) = 445483 +SHA256 (xpi/firefox-i18n-39.0/son.xpi) = c23ee1f72b1bdbaa2e9ead73dd8513413ed775d1f10ff3d73d17f10e0eba8267 +SIZE (xpi/firefox-i18n-39.0/son.xpi) = 453638 +SHA256 (xpi/firefox-i18n-39.0/sq.xpi) = 570609619b1850037303663b9bc27e1670b1248bd054a93d9d671e32dc9e037a +SIZE (xpi/firefox-i18n-39.0/sq.xpi) = 489758 +SHA256 (xpi/firefox-i18n-39.0/sr.xpi) = 0c559cc85f990b2759baf9cec96554e3e8c062ee5a0ab571e408aa888e6495b7 +SIZE (xpi/firefox-i18n-39.0/sr.xpi) = 483401 +SHA256 (xpi/firefox-i18n-39.0/sv-SE.xpi) = 88fa20f03e1c9f9ec7b8db45c1fbe3fd4eb89c10f52f0352b6e922352e986fa6 +SIZE (xpi/firefox-i18n-39.0/sv-SE.xpi) = 456397 +SHA256 (xpi/firefox-i18n-39.0/ta.xpi) = b1c71f7c30456bd20cc670cc976ca419257f15b01776be7095276d42e39f78ba +SIZE (xpi/firefox-i18n-39.0/ta.xpi) = 511678 +SHA256 (xpi/firefox-i18n-39.0/te.xpi) = 245cbea46dbbe581a728262a3bff4bdad410fc447c1dfcfc5ab68825f0685d6b +SIZE (xpi/firefox-i18n-39.0/te.xpi) = 531784 +SHA256 (xpi/firefox-i18n-39.0/th.xpi) = 1222f9eebb48c02abcac8e0f064e23bdb7b4c5288211816a51e598d2135aee90 +SIZE (xpi/firefox-i18n-39.0/th.xpi) = 539248 +SHA256 (xpi/firefox-i18n-39.0/tr.xpi) = 712b98ad2a0cf4b059554fe76d798a76ec3aa10ce2e95af0796dd9d46fa120b0 +SIZE (xpi/firefox-i18n-39.0/tr.xpi) = 484956 +SHA256 (xpi/firefox-i18n-39.0/uk.xpi) = 5b06984dc2d539dab5d3b83ec915b02a498d41185a2d3bfb7e465ef139fd605b +SIZE (xpi/firefox-i18n-39.0/uk.xpi) = 498395 +SHA256 (xpi/firefox-i18n-39.0/vi.xpi) = a44f0486939c81e86e2aaf255cfe70d17e2ec42b8cc400ec2d699c3a1a951044 +SIZE (xpi/firefox-i18n-39.0/vi.xpi) = 471789 +SHA256 (xpi/firefox-i18n-39.0/xh.xpi) = 8d66c08160c6a2e3860bca6cc7d9c87b653c97c70994beb45bfc8fad9afb4f03 +SIZE (xpi/firefox-i18n-39.0/xh.xpi) = 454916 +SHA256 (xpi/firefox-i18n-39.0/zh-CN.xpi) = a7e959d6aba6f67b880b9ebcc1d1c2e253f01e079475191dc3eef978a9d9b2b5 +SIZE (xpi/firefox-i18n-39.0/zh-CN.xpi) = 492380 +SHA256 (xpi/firefox-i18n-39.0/zh-TW.xpi) = ec30c554c57aa27835723253f4c0dfc4fc75ca591f9a64fbd65f7622d7b212dd +SIZE (xpi/firefox-i18n-39.0/zh-TW.xpi) = 471887 Index: branches/2015Q3/www/libxul/Makefile =================================================================== --- branches/2015Q3/www/libxul/Makefile (revision 392766) +++ branches/2015Q3/www/libxul/Makefile (revision 392767) @@ -1,90 +1,98 @@ # Created by: Michael Johnson # $FreeBSD$ PORTNAME= libxul -DISTVERSION= 31.7.0 -PORTREVISION= 1 +DISTVERSION= 38.1.0 CATEGORIES?= www devel MASTER_SITES= MOZILLA/firefox/releases/${DISTVERSION}esr/source \ - MOZILLA/firefox/candidates/${DISTVERSION}esr-candidates/build2/source + MOZILLA/firefox/candidates/${DISTVERSION}esr-candidates/build1/source DISTNAME= firefox-${DISTVERSION}esr.source MAINTAINER?= gecko@FreeBSD.org COMMENT?= Mozilla runtime package that can be used to bootstrap XUL+XPCOM apps -BUILD_DEPENDS= nspr>=4.10.6:${PORTSDIR}/devel/nspr \ - nss>=3.16.2.3:${PORTSDIR}/security/nss \ +BUILD_DEPENDS= nspr>=4.10.8:${PORTSDIR}/devel/nspr \ + nss>=3.19.2:${PORTSDIR}/security/nss \ libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \ cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \ soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \ - harfbuzz>=0.9.25:${PORTSDIR}/print/harfbuzz \ + harfbuzz>=0.9.34:${PORTSDIR}/print/harfbuzz \ graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \ libvorbis>=1.3.5:${PORTSDIR}/audio/libvorbis \ - opus>=1.1:${PORTSDIR}/audio/opus \ libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \ - sqlite3>=3.8.4.2:${PORTSDIR}/databases/sqlite3 \ + sqlite3>=3.8.9:${PORTSDIR}/databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \ v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \ autoconf-2.13:${PORTSDIR}/devel/autoconf213 \ zip:${PORTSDIR}/archivers/zip \ unzip:${PORTSDIR}/archivers/unzip +# opus>=1.1:${PORTSDIR}/audio/opus \ LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l -WRKSRC= ${WRKDIR}/mozilla-esr31 -CONFLICTS= libxul-1.9.* +WRKSRC= ${WRKDIR}/mozilla-esr38 +CONFLICTS_INSTALL= libxul-1.9.* USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl USES= dos2unix pathfix tar:bzip2 DOS2UNIX_FILES= media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp MAKE_ENV= SKIP_GRE_REGISTRATION=1 mozappdir=${PREFIX}/lib/${MOZILLA} LDFLAGS+= -Wl,-rpath,${PREFIX}/lib/${MOZ_RPATH} USE_LDCONFIG= ${PREFIX}/lib/${MOZILLA} MOZ_OPTIONS?= --enable-application=xulrunner USE_GECKO= gecko CPE_PRODUCT= firefox_esr MOZILLA_EXEC_NAME=xulrunner -USE_MOZILLA= # empty +USE_MOZILLA= -opus MOZILLA_PLIST_DIRS= bin include lib share/idl libdata MOZ_PKGCONFIG_FILES= libxul-embedding libxul mozilla-js \ mozilla-plugin +OPTIONS_DEFAULT= GTK2 + +OPTIONS_SINGLE+= TOOLKIT +OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3 + .include "${.CURDIR}/../../www/firefox/Makefile.options" .include .if ${USE_MOZILLA:M-nss} MOZ_PKGCONFIG_FILES+= mozilla-nss .endif .if ${PORT_OPTIONS:MALSA} RUN_DEPENDS+= alsa-lib>=1.0.27.2_1:${PORTSDIR}/audio/alsa-lib .endif .if ${PORT_OPTIONS:MGSTREAMER} RUN_DEPENDS+= gstreamer1-libav>=1.2.4_1:${PORTSDIR}/multimedia/gstreamer1-libav +.endif + +.if ${PORT_OPTIONS:MGTK3} +BUILD_DEPENDS+= gtk3>=3.14.6:${PORTSDIR}/x11-toolkits/gtk30 .endif .if ${PORT_OPTIONS:MTEST} BROKEN= stage-package fails with ValueError: no path specified .endif post-patch: @${REINPLACE_CMD} -e '/MOZPNG/s/=[0-9]*/=10511/' \ ${WRKSRC}/configure.in @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/xulrunner/stub/nsXULStub.cpp pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${WRKSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) post-build: @${REINPLACE_CMD} -e "s|\(Libs:.*\)\($$\)|\1 -Wl,-rpath,${PREFIX}/lib/${MOZ_RPATH}\2| ; \ s|%sdkdir%|%sdkdir%/sdk|g ; \ s|%%MOZ_LIBDIR%%|${PREFIX}/lib/${MOZILLA}|g" \ ${WRKSRC}/xulrunner/installer/*.pc.in || ${TRUE} .include Index: branches/2015Q3/www/libxul/distinfo =================================================================== --- branches/2015Q3/www/libxul/distinfo (revision 392766) +++ branches/2015Q3/www/libxul/distinfo (revision 392767) @@ -1,2 +1,2 @@ -SHA256 (firefox-31.7.0esr.source.tar.bz2) = 8523c10ecb318f278a251d90e2161c07c7431796d4387fe9091dfa4e633474b6 -SIZE (firefox-31.7.0esr.source.tar.bz2) = 147772244 +SHA256 (firefox-38.1.0esr.source.tar.bz2) = 85eb5f916aa47a92cf50803dcb35e7fa3a9da29abf5fc91cbb6a70bbbc2618ff +SIZE (firefox-38.1.0esr.source.tar.bz2) = 180392775 Index: branches/2015Q3/www/libxul/files/patch-bug961264 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug961264 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug961264 (nonexistent) @@ -1,266 +0,0 @@ -commit d099acd -Author: Trevor Saunders -Date: Fri Jan 17 15:08:00 2014 -0800 - - Bug 961264 - Remove obsolete checks for gcc visibility stuff. ---- - configure.in | 115 +++------------------------------------------------- - js/src/configure.in | 111 ++------------------------------------------------ - 2 files changed, 8 insertions(+), 218 deletions(-) - -diff --git configure.in configure.in -index dfb8193..33d71b3 100644 ---- configure.in -+++ configure.in -@@ -2507,118 +2507,15 @@ MOZ_CXX11 - - AC_LANG_C - --dnl Check for .hidden assembler directive and visibility attribute. --dnl Borrowed from glibc configure.in -+dnl Setup default hidden visibility and wrapped system headers. - dnl =============================================================== - if test "$GNU_CC"; then -- AC_CACHE_CHECK(for visibility(hidden) attribute, -- ac_cv_visibility_hidden, -- [cat > conftest.c </dev/null 2>&1; then -- if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then -- ac_cv_visibility_hidden=yes -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_hidden" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -- -- AC_CACHE_CHECK(for visibility(default) attribute, -- ac_cv_visibility_default, -- [cat > conftest.c </dev/null 2>&1; then -- if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then -- ac_cv_visibility_default=yes -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_default" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -- -- AC_CACHE_CHECK(for visibility pragma support, -- ac_cv_visibility_pragma, -- [cat > conftest.c </dev/null 2>&1; then -- if egrep '\.(hidden|private_extern).*foo_hidden' conftest.s >/dev/null; then -- if ! egrep '\.(hidden|private_extern).*foo_default' conftest.s > /dev/null; then -- ac_cv_visibility_pragma=yes -- fi -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_pragma" = "yes"; then -- AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905), -- ac_cv_have_visibility_class_bug, -- [cat > conftest.c < /dev/null 2>&1 ; then -- ac_cv_have_visibility_class_bug=yes -- else -- if test `egrep -c '@PLT|\\$stub' conftest.S` = 0; then -- ac_cv_have_visibility_class_bug=yes -- fi -- fi -- rm -rf conftest.{c,S} -- ]) -- -- AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297), -- ac_cv_have_visibility_builtin_bug, -- [cat > conftest.c < --#pragma GCC visibility pop -- --__attribute__ ((visibility ("default"))) void Func() { -- char c[[100]]; -- memset(c, 0, sizeof(c)); --} --EOF -- ac_cv_have_visibility_builtin_bug=no -- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then -- ac_cv_have_visibility_builtin_bug=yes -- else -- if test `grep -c "@PLT" conftest.S` = 0; then -- ac_cv_visibility_builtin_bug=yes -- fi -- fi -- rm -f conftest.{c,S} -- ]) -- if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \ -- "$ac_cv_have_visibility_class_bug" = "no"; then -- VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -- WRAP_SYSTEM_INCLUDES=1 -- STL_FLAGS='-I$(DIST)/stl_wrappers' -- WRAP_STL_INCLUDES=1 -- else -- VISIBILITY_FLAGS='-fvisibility=hidden' -- fi # have visibility pragma bug -- fi # have visibility pragma -- fi # have visibility(default) attribute -- fi # have visibility(hidden) attribute -+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -+ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -+ WRAP_SYSTEM_INCLUDES=1 -+ STL_FLAGS='-I$(DIST)/stl_wrappers' -+ WRAP_STL_INCLUDES=1 - fi # GNU_CC - - # visibility hidden flag for Sun Studio on Solaris -diff --git js/src/configure.in js/src/configure.in -index bddd46d..d4b522e 100644 ---- js/src/configure.in -+++ js/src/configure.in -@@ -2077,116 +2077,13 @@ AC_LANG_CPLUSPLUS - - MOZ_CXX11 - --dnl Check for .hidden assembler directive and visibility attribute. --dnl Borrowed from glibc configure.in -+dnl Setup default hidden visibility and wrapped system headers. - dnl =============================================================== - if test "$GNU_CC"; then -- AC_CACHE_CHECK(for visibility(hidden) attribute, -- ac_cv_visibility_hidden, -- [cat > conftest.c </dev/null 2>&1; then -- if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then -- ac_cv_visibility_hidden=yes -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_hidden" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -- -- AC_CACHE_CHECK(for visibility(default) attribute, -- ac_cv_visibility_default, -- [cat > conftest.c </dev/null 2>&1; then -- if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then -- ac_cv_visibility_default=yes -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_default" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -- -- AC_CACHE_CHECK(for visibility pragma support, -- ac_cv_visibility_pragma, -- [cat > conftest.c </dev/null 2>&1; then -- if egrep '\.(hidden|private_extern).*foo_hidden' conftest.s >/dev/null; then -- if ! egrep '\.(hidden|private_extern).*foo_default' conftest.s > /dev/null; then -- ac_cv_visibility_pragma=yes -- fi -- fi -- fi -- rm -f conftest.[cs] -- ]) -- if test "$ac_cv_visibility_pragma" = "yes"; then -- AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905), -- ac_cv_have_visibility_class_bug, -- [cat > conftest.c < /dev/null 2>&1 ; then -- ac_cv_have_visibility_class_bug=yes -- else -- if test `egrep -c '@PLT|\\$stub' conftest.S` = 0; then -- ac_cv_have_visibility_class_bug=yes -- fi -- fi -- rm -rf conftest.{c,S} -- ]) -- -- AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297), -- ac_cv_have_visibility_builtin_bug, -- [cat > conftest.c < --#pragma GCC visibility pop -- --__attribute__ ((visibility ("default"))) void Func() { -- char c[[100]]; -- memset(c, 0, sizeof(c)); --} --EOF -- ac_cv_have_visibility_builtin_bug=no -- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then -- ac_cv_have_visibility_builtin_bug=yes -- else -- if test `grep -c "@PLT" conftest.S` = 0; then -- ac_cv_visibility_builtin_bug=yes -- fi -- fi -- rm -f conftest.{c,S} -- ]) -- if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \ -- "$ac_cv_have_visibility_class_bug" = "no"; then -- VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -- WRAP_SYSTEM_INCLUDES=1 -- else -- VISIBILITY_FLAGS='-fvisibility=hidden' -- fi # have visibility pragma bug -- fi # have visibility pragma -- fi # have visibility(default) attribute -- fi # have visibility(hidden) attribute -+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -+ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -+ WRAP_SYSTEM_INCLUDES=1 - fi # GNU_CC - - # visibility hidden flag for Sun Studio on Solaris Property changes on: branches/2015Q3/www/libxul/files/patch-bug961264 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug858919 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug858919 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug858919 (nonexistent) @@ -1,391 +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,9 +100,11 @@ 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, IPC::Principal(aPrincipal)); -+ rv = sysAlerts->ShowAlertNotification(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable, -+ aAlertCookie, aAlertListener, aAlertName, -+ aBidi, aLang, 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,53 @@ -+/* -*- 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, -+ 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: branches/2015Q3/www/libxul/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: branches/2015Q3/www/libxul/files/patch-bug1061736 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1061736 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1061736 (nonexistent) @@ -1,50 +0,0 @@ -commit a7add79 -Author: Gavin Sharp -Date: Mon Oct 27 18:43:51 2014 -0700 - - Bug 1061736: add DuckDuckGo as a search engine option in Firefox. r=dolske ---- - browser/locales/Makefile.in | 2 +- - browser/locales/en-US/searchplugins/ddg.xml | 21 +++++++++++++++++++++ - 2 files changed, 22 insertions(+), 1 deletion(-) - -diff --git browser/locales/Makefile.in browser/locales/Makefile.in -index eb3c30b..b172876 100644 ---- browser/locales/Makefile.in -+++ browser/locales/Makefile.in -@@ -71,7 +71,7 @@ endif - ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro) - SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/metrolist.txt)) - else --SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt)) -+SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt)) ddg - endif - SEARCHPLUGINS_PATH := $(FINAL_TARGET)/searchplugins - SEARCHPLUGINS := $(addsuffix .xml,$(SEARCHPLUGINS_NAMES)) -diff --git browser/locales/en-US/searchplugins/ddg.xml browser/locales/en-US/searchplugins/ddg.xml -new file mode 100644 -index 0000000..d68deb4 ---- /dev/null -+++ browser/locales/en-US/searchplugins/ddg.xml -@@ -0,0 +1,21 @@ -+ -+ -+ DuckDuckGo -+ Search DuckDuckGo -+ UTF-8 -+ data:image/icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA11RgALs6oACbQ9wAj0v8AI9L/ACfQ9wAu0agANdUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzzN4CNdL/oK/z//////////////////////+jsPv/BDXX/wAz0t4AAAAAAAAAAAAAAAAAAAAAAAAAAAAyzvNSduD//////8jK/v+P+Lf/IbQL/17RPP+J3Y//wOKX//////9YeuX/ADLO8wAAAAAAAAAAAAAAAAAw091piOX/8/X9/1Fx5P9xhu//WOWZ/0W9Lv9Lwjn/J8BB/xyDAP9bdfL/9fP//2mI5v8AMNPdAAAAAAc610YRQ9f//////0Zr4P8AGdD/sb32////////////wrv//wAh1/8MPab/ACPc/05r4///////EkPX/wc610YANtWkrr/y/6S48P8AJ9L/AB3R/+/w/v///////////3+D7f8AQeL/AYTw/wFr5/8AMNb/p7Tv/6698v8AM9WkADLW//////8yXt//AC3V/wAw1/////////////z///8A0P7/AKb1/wWI7P8AuPf/AJ3w/zZW3P//////ADHV/wAx2P//////AzrZ/wAu1/84ZOL////////////e////AND//wC1+f8Atff/AZbv/wY62f8ELNf//////wAw1/8AMtn//////wAw2f8ALNn/kKrz////+//cwbH////////////R////Rcb8/wDO/f8A/P//AHzo//////8AMNj/ADXa//////8vXuL/ACna/4yq9///79T/jUkg/9i+r///////r2Q0/7Cozv8BKdr/AirY/zdZ4P//////ADTa/wI72tOuv/T/prr0/wAl2v+JqPb//7yW/+bUxv/9+/n////u//W+n/+Op/L/ADPd/wAv2v+ru/T/r7/0/wI72tMLQd1DEEjg//////9Cbef/ADng///////////////////////R3///AC3g/wAy3v9SeOn//////xFI4P8LQd1DAAAAAAM64PNmiuz/9/j//2mN7f/m7P3///////////9Cb+n/ACXd/wAt3v9rju3//////2iL7P8DOuDzAAAAAAAAAAAAAAAAAT3g/0p16f//////3OT8/3OS7v8AKt3/ACPc/zhn5/+xw/b//////0956v8CPeD/AAAAAAAAAAAAAAAAAAAAAAAAAAAEPODzBUDh/5uz8//7/f7/////////////////prz0/wtF4v8FQeDzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtF5kYDQOOkADrj/wA44v8AOeP/ADzk/wVB46QPReZGAAAAAAAAAAAAAAAAAAAAAPAPAADgBwAAwAMAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAADAAwAA4AcAAPAPAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChIzyAnRNFwJ0TQryND0d8nRNH/J0TR/ydE0f8nRNH/I0PR3ydE0K8nRNFwKEjPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChE00AlRdK/J0XS/ydF0v8nRdL/XXPd/11z3f94i+P/k6Lp/5Oi6f9rf+D/NVDV/ydF0v8nRdL/JUXSvyhE00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAzxAnRNOvJ0XT/ydF0/8lRdK/KEXSYOvu+6/+/v6//v7+v/39/c////////////7+/r/J0fOAKEXSYCVF0r8nRdP/J0XT/ydE068gQM8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlRdUwJ0bT7ydG0/8nRtHPKETTQAAAAADHx8dA2vHhn5TYpN/o9+z/////////////////8PL83ydG0o8lRdUwAAAAAChE00AnRtHPJ0bT/ydG0+8lRdUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKEXVYCdG1P8nRtT/KEbTgAAAAAAmRtZQI0PU38jIyP/F6s//Rrtk/0a7ZP9/yIr/c796/4vLkv+JpNf/M3Kq/zyWh/8zeKTfJkbWUAAAAAAoRtOAJ0bU/ydG1P8oRdVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVF1TAnR9X/J0fV/yhF1WAgQM8QJ0fTrydH1f9CW8//2tra/6Pdsv9Gu2T/Rrtk/0WzWv9Gu2T/Rrtk/0a7ZP9Gu2T/Rrtk/z6egP8nR9X/J0fTryBAzxAoRdVgJ0fV/ydH1f8lRdUwAAAAAAAAAAAAAAAAAAAAAAAAAAAgQM8QJ0fV7ydH1f8oSNVgIEDPECdH1c8nR9X/J0fV/1xwyf/t7e3/o92y/0a7ZP9Gu2T/Ra5U/0a7ZP9Gu2T/Rrtk/0a7ZP9Gu2T/Pp6A/ydH1f8nR9X/J0fVzyBAzxAoSNVgJ0fV/ydH1e8gQM8QAAAAAAAAAAAAAAAAAAAAACdH1q8nR9b/KEjVgCBQzxAnR9bPJ0fW/ydH1v8nR9b/gIzB//r6+v+j3bL/Rrtk/13Ed/+i26//ruG7/z6egf8+noH/Rrtk/0a7ZP86kI//J0fW/ydH1v8nR9b/J0fWzyBQzxAoSNWAJ0fW/ydH1q8AAAAAAAAAAAAAAAAoSNdAJkjW/yZH1s8AAAAAJEfWryZI1v8mSNb/JkjW/yZI1v+jqsT//////+j37P/R7tj////////////W3ff/JkjW/yZI1v8uZbr/PJeI/zJzrP8mSNb/JkjW/yZI1v8mSNb/JEfWrwAAAAAmR9bPJkjW/yhI10AAAAAAAAAAACVI1r8mSNf/KEjXQCZJ1lAmSNf/JkjX/yZI1/8mSNf/JkjX/9HR0f///////////////////////////5Ok6/8mSNf/JkjX/yZI1/8mSNf/JkjX/yZI1/8mSNf/JkjX/yZI1/8mSNf/JknWUChI10AmSNf/JUjWvwAAAAAoSNcgJknY/yZH2M8AAAAAI0nY3yZJ2P8mSdj/JknY/yZJ2P9KZM//39/f////////////////////////////XHfi/yZJ2P8mSdj/JknY/yZJ2P8mSdj/JknY/yZJ2P8mSdj/JknY/yZJ2P8jSdjfAAAAACZH2M8mSdj/KEjXICdJ2HAmSdj/JUjXYCVK2jAmSdj/JknY/yZJ2P8mSdj/JknY/2V4yf/t7e3///////////////////////////9cd+L/HXTj/xSf7/8Nwfj/CdL8/wnS/P8J0vz/ELDz/xt85v8mSdj/JknY/yZJ2P8lStowJUjXYCZJ2P8nSdhwJErZryZK2f8oSNcgJUnajyZK2f8mStn/JkrZ/yZK2f8mStn/iJPA////////////////////////////0ff+/xjV/P8J0vz/Drn1/xiO6/8Yjuv/GI7r/xCw8/8Lyvr/CdL8/xmF6P8mStn/JkrZ/yVJ2o8oSNcgJkrZ/yRK2a8jStrfI0rZ3wAAAAAlSdq/Jkra/yZK2v8mStr/Jkra/yZK2v+xtsf///////////////////////////8o2Pz/CdL8/wvK+v8mStr/Jkra/yZK2v8mStr/Jkra/yZK2v8iW97/Jkra/yZK2v8mStr/JUnavwAAAAAjStnfI0ra3yZK2v8lSdq/AAAAACZH2O8mStr/Jkra/yZK2v8mStr/L1HY/9HR0f///////////////////////////yjY/P8J0vz/CdL8/xCw9P8QsPT/ELD0/xSf7/8ddeX/Jkra/yZK2v8mStr/Jkra/yZK2v8mR9jvAAAAACVJ2r8mStr/Jkvb/yVJ2r8AAAAAJkvb/yZL2/8mS9v/Jkvb/yZL2/9KZtL/4+Pj////////////////////////////4Pn//0fd/f8J0vz/CdL8/wnS/P8J0vz/CdL8/wnS/P8Lyvr/Fpfu/yJc3/8mS9v/Jkvb/yZL2/8AAAAAJUnavyZL2/8mS9z/JUncvwAAAAAmS9z/Jkvc/yZL3P8mS9z/Jkvc/26AyP/x8fH//////////////////////////////////////9H3/v/C9P7/o+7+/2fa+/8Oufb/CdL8/wnS/P8J0vz/CdL8/xiP7P8mS9z/Jkvc/wAAAAAlSdy/Jkvc/yZM3P8lTNy/AAAAACZJ2e8mTNz/Jkzc/yZM3P8mTNz/iJTB////////////qnth/5VaOf/x6eX///////////////////////Hp5f/x6eX/ydL2/yZM3P8kVN7/G37o/xKo8v8QsfT/HXbm/yZM3P8mSdnvAAAAACVM3L8mTNz/I0vc3yZJ2u8AAAAAJUzevyZM3f8mTN3/Jkzd/yZM3f+fqc3///////////+VWjn/v5yI/+re1///////////////////////jk8s/7iRe//J0vb/Jkzd/yZM3f8mTN3/Jkzd/yZM3f8mTN3/Jkzd/yVM3r8AAAAAI0vc3yNL3N8kTd2vJk3d/yhQ3yAlTd2PJk3d/yZN3f8mTd3/Jk3d/6St0v////////////Hp5f/q3tf///////////////////////////+xhm7/49PK/6Cx8P8mTd3/Jk3d/yZN3f8mTd3/Jk3d/yZN3f8mTd3/JU3djyhQ3yAmTd3/JE3drydN33AmTd7/J03fcCVK3zAmTd7/Jk3e/yZN3v8mTd7/pK7S///////Sp5r/////////////////////////////////////////////////T27k/yZN3v8mTd7/Jk3e/yZN3v8mTd7/Jk3e/yZN3v8lSt8wJ03fcCZN3v8nTd9wKFDfICZO3/8mTt3PAAAAACVN3r8mTt//Jk7f/yZO3/+EltX//////+fRyv/SqaD/59LO///////////////////////at63/vIBy/7Glxf8mTt//Jk7f/yZO3/8mTt//Jk7f/yZO3/8mTt//JU3evwAAAAAmTt3PJk7f/yhQ3yAAAAAAJE/dryZO3/8oUN9AKFDfQCZO3/8mTt//Jk7f/zhb2v/o6/T/////////////////////////////////////////////////XHrn/yZO3/8mTt//Jk7f/yZO3/8mTt//Jk7f/yZO3/8oUN9AKFDfQCZO3/8kT92vAAAAAAAAAAAoUN9AJk7g/yZO4M8AAAAAJk/hnyZO4P8mTuD/Jk7g/05v5v/k6fv//////////////////////////////////////3eR7P8mTuD/Jk7g/yZO4P8mTuD/Jk7g/yZO4P8mTuD/Jk/hnwAAAAAmTuDPJk7g/yhQ30AAAAAAAAAAAAAAAAAjT+GfJU/h/yVO4Y8gUN8QIk7gzyVP4f8lT+H/SWnW/0lp1v+bq+H/8fHx/////////////////6Cy8v9OcOb/JU/h/yVP4f8lT+H/JU/h/yVP4f8lT+H/JU/h/yJO4M8gUN8QJU7hjyVP4f8jT+GfAAAAAAAAAAAAAAAAAAAAACBQ3xAlTOHvJU/h/yVQ4mAgUN8QIk7hzyVP4f+ktOv///////////////////////H0/f9phur/JU/h/yVP4f8lT+H/JU/h/yVP4f8lT+H/JU/h/yVP4f8iTuHPIFDfECVQ4mAlT+H/JUzh7yBQ3xAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ3zAlUOLvJVDi/yVQ4mAgUN8QI1Din4mb2//J0/j/ydP4/6299P93ku3/M1vk/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/I1DinyBQ3xAlUOJgJVDi/yVQ4u8lUN8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ5DAlUOLvJVDi/yVQ4o8AAAAAJFDjQCVQ4r8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDivyRQ40AAAAAAJVDijyVQ4v8lUOLvJVDkMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ5DAjUeTfJVHj/yNR5N8kUONAAAAAACVQ5DAmUuOAJVHivyNR5N8lUeP/JVHj/yNR5N8lUeK/JlLjgCVQ5DAAAAAAJFDjQCNR5N8lUeP/I1Hk3yVQ5DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBQ3xAjUuSfJVHk/yVR5P8jUeTfJFLkcChQ5yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoUOcgJFLkcCNR5N8lUeT/JVHk/yNS5J8gUN8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkUONAI1LknyVS5P8lUuT/JVLk/yVS5O8lUeS/JVHkvyVR5L8lUeS/JVLk7yVS5P8lUuT/JVLk/yRS468kUONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFDfECVS5GAjUuWfIlPlzyVS5f8lUuX/JVLl/yVS5f8iU+XPI1LlnyVS5GAgUN8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AA///AAD//AAAP/ggBB/wgAEP4AAAB8AAAAPAAAADiAAAEYAAAAEQAAAIAAAAAAAAAAAgAAAEIAAABCAAAAQgAAAEIAAABCAAAAQAAAAAAAAAABAAAAiAAAABiAAAEcAAAAPAAAAD4AAAB/CAAQ/4IAQf/AfgP/8AAP//wAP/ -+ data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAaCAYAAADovjFxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNTg5QTM3RjNCMjA2ODExODIyQUVEOUNBRDIxQzhDMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxRTYyNzYzMzFBQUUxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxRTYyNzYzMjFBQUUxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDE4MDExNzQwNzIwNjgxMTg3MUZCQUIxMEI4RjU1NzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTU4OUEzN0YzQjIwNjgxMTgyMkFFRDlDQUQyMUM4QzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7hxyCFAAAF4UlEQVR42tSZa2wUVRTH/3dmp92+tnRpCiUgxFoKCDQplsRIfZSgCEHSapBGBCURQvCLWkkQg9GYGNDwTYlGUCMoCA2EtEpEq1KjRJCA9EEElba2FajbN213d+b6vzOzZZfi99mb/DJ3d/aczD33vO6skFLCq6O9YubYXChE4n1+LublaVJO5hLDvRUhjaSefMolno+XU0uOX7WG5BxLSBsXc448Qo6SFWSuywr3O3XvnPqtK3PbkWxGUL5whHzN7WyAZeWQRZBWFz+v4v6+w3sKztFFFpEc0mDLOLJinNIkCocMXppJLhdcCssMw4zu5fOX2XGi6RAa91Rot8aNMsB6kkJOk24yh6seSjZPEHzoZmlfZaaU1pqR/Dsv+XfVlQXf/QbZ67dBz5sKKzxK20TpGBbU5qrtJWXkEllDMqWrK94jPG0ESzpwPTUkl8yQFvZL09oaLlqIG1LDQFoA6Y9vxJQ9Dch+bjus4WEaIwxpmjSGdJKgw1ay39bh6KqJ6U8GTyjnc1aQheQ1UqV2Of3LPTBPfI40RkVsEdmVGzClphmZy9bAitAQlhnvEbBlHR1KV4VbVbydE66sLFI+e8mN5e1Qc7o6IqMIr3sVhVUb/le2e1c1Bk8cgvAxFWjj9rqQvA7HGIVeN4LqA1SJm0iOci/LQDc3aZrg4RZkpBgYHY4iK8OXIHetz4RPi6K/ao4b9PrtkuVKElL9hafDgfuzjrQQk5QxH9hxPphfgAy/gYHByDgDqJGXrSOYlYrAo1WQUTc32LJj+aHM1dlEnvK2EYClpIasiotrmL5URE2JiQEDuw+ewunGjgS5hrNtWLp5P/QHKhk9lh1BDuKmIYAnyWGyxNuJUWI2+ZncG5/djKF+DA45ZX7Hh9/j2HdNCWKzC/JRsXg+sgrmQ4aFjS/LQvqsYejpqiTYepTOn8g8n8c9QQ21zdPiDxD+620IhULIC2TiYl01/CmJy8jNNrCxMh/hjiMIVvYioziK1BlRQJcIHc1B6KscqpLTXN2pPo/nhNjwxR2jIFgdBtouAzPuSDSAZLPUXgX0HYFgLjRIcLnO3sFAb33AJnLdYFNp9w/6Lco97Qm57o7dbKC5wpHffgHuL09srjo22AYY/tOPoQsBiFRgtJ3zljQqo/HoCfbSnULR6eq2vJ4TWskCcnYsJ9hGYIz/1YQR65bTYOARe5FW2EDfqQD+rQ1iqDkN/qlhTHhwAJnFQ6oxiuUWpfMe0uzpPuH3ZUV7eZlFVpPWsRjh+WA4OAV579UiPzghQaajuhgZc1qRWTIKnQ4g0i27N77RlI5rXwQR/seI9cnTyWfkvNfDYR8v35K/iSoBd8eSY8r1doR6escZYfRqLvrPDEDsM+ALWNADJiLdBttoYXuJEPamK13t5D6y1evNUj3pJzvIJqfRYV5XyZGFf/CPlnEy6UXzoLEZYDqEHBCIdBpsmFSsODEgHb1K105Xd4PnD1B86M2kmjSSA/Yi6AlSaBhtPG3/5mTXcTT3nLPnwYcq4KP7X52cgvc3TcWvpQFVDu1UIoWt74CrS+nc7P3qIO00rkLiBfcQdReZCamVqAqRcuUiolzJDx11aO4+gxxjOnqtbmhvzITO+6Yh0DthhF4jYmeHs4Q1FJfd+T6ZLC9VpHOcnk7qyQJSqzzB39WKnr5h+HhS1DUfOvs64RNRVgATlnDawoghYoWl1pWtd3WVJ0WfEDf6pGqhnTdCTGqihCw3urt2h0LdecH0ydB1Aw8XLkfPjRGUTixB4JUtuDDXj0nXokMmsJbyddJJiOoYPZuO0ZdsRlDjsnTa5x/JCDTxEnPfpIH6Y28uXvHYttUFzyNb1cTY+4TyC8ezD37wltT1k5YmXmRkjbhhMI2BcTVpXrS2LJ011jmO/VfgPO7L/GKnfSQ0zU+EaR2SlnWGN53FaRpdw1cKTX+Cxlrr5oMt5G2713Kq7NhLxmQ1gpPvpXyWs2f4oSz+oHHznxrRwOvHnHwkYpK3McJ/AgwADmrfhvtTyFYAAAAASUVORK5CYII= -+ data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAAA0CAYAAABGkOCVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNTg5QTM3RjNCMjA2ODExODIyQUVEOUNBRDIxQzhDMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo4RTdBNDY4ODFBQUQxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4RTdBNDY4NzFBQUQxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTE3MzgzQ0I2QjIwNjgxMTgyMkFFRDlDQUQyMUM4QzMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTU4OUEzN0YzQjIwNjgxMTgyMkFFRDlDQUQyMUM4QzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7NVVBAAAAO30lEQVR42uxdCXRU1Rn+3nszk5nJhmEJAYKyJJJAWFyqUqwWwaJi0aKA9bh0USwunEo9UGmrHG0Vj3LUUoEqFQGXciqgiFCoVtsKeBAJS9JWtrAmIUxmkpnJJDNv6X/fu5O8mUwmkwkoPef9Od/cN/ct9593v/vf//73vhdB0zRY0nU5dktxuzxBMG3zD6GD84XYHYMI1xMuJZQQ2MWzCS6+P0TwE74i/Juwi7CFcCR6gY6qUeMf5t2JjhUsInxjRBhJyUOEewn2NNWIEFYQFlM17rWI8P9FhJsILxGGdHDpOsJ+wmlCA8/LJfQhjCD07uC8Q4TZhI3pEMFmVenXJqMJ7xIGx+UfJawivEf4IsVrXUaYQriLcCHPY8T6gHCYMJVQ3hXlLIvw9ViE1wg/iTt8JeFpuvsHYs4BehLKCAWEHnyXj1BN2EfwmGuMzimi5FeEu+Ouv5zwU6trOD+IUEif/zS1WiZvEWZSzQT4gQ5WYbwVj0+x+I+5dXmNrhPm18miz6WEO+OszdV0zHGLCN8cEZj53mnaXUO4ke72blYTArRS+r6QMLnVFggmu5C6sO5gLl23kp/NuqBNhL6mYy7XTN1OoioXrSo9JzKJ7vVOjTtrhLWEAoMEag5UZaMmyxVqJDKZAFUmKDJBpd0EqinTuZ1hMqGCV34ObZfzstaajmGEnGT5CF+vRbg0zul7krCAN8Ufa6K0vLnkCmSXXQ5nuBmavx6qtw4t+3dC9p6GIJH/LkkQRMm4oNBlC8F8kT/x7Sd4+WYnc5c1ajj3UhBHgofppi/mdbmGmHA75DDC9afh63cxSr4zMeZk+Uw1Au+/jsCGN6C2NEGw2clmk9EWumS4l/PWP43KXkBle2j793wf060fdzwti3CuLAIfy0eHhwtMrZE5jONAZl+lSrUvXI/+w0qTXF1D/Su/QeP65RDsDrISkkGGrlmHf+mOYptVeoJvH04Uw7CIkKYcjSMCVdESSh7gX1lM4JYYEuj1qyKU1w/eUdcC3jPQMnNh65UP9+Dh6FFUin79+8e4ioG/vYszCx80uguyDkLUOqROCDMZ1vPYA5OlVOs/s4hw9onAmncF32YRwXy+/TZhRsy4TVWoD4gAkTA0RYHjuh/Adc0tyBhcAme/iyDGVXLk5GE0bfsr/NRlsK7DIITUFTK8Q7iDb9fCiFAyGQ4+0rCIcPaIUMHJwORb0ISddGfv4kGj2AE8jQ4QaUFkwh3o9/OFcNtSd9M8L8+D/8PVeneBrpHhbtJpFelkHtJWcjJYw8duiSZEMYFQyrfX8BudQ9srTceQJaBclYgQURCc/hiGPPZCl0jApOcjzyJz3GRodA39WubrJ8dKXSfmLDIdjbxSrrt+jGUR0pSqKRdHN9msXxnfvgBGOHiDESgyE4eYIMvwFw5D8bJNyOiOozrjEiiNXmNUkbpVYIGnm2GErb08j4WsR1oWoftSbCLBW5wERe1IYOoW5HseT4sEClmAWk8zzgQ19H7kd5RBfoaqInYWIalM5rr5uK7guhdbROhOz6DpmMVThqd5usiUZ4AqUVNUBHsVIm9oiX5+U4uCpavLsWTVbmz6+FCn5R2vDuhRR7+vCdLYSbAVFpHfqeiGpl15HSOq21OmPP03WF1DmnLk+3rXECS4eYCGBWokFhdKxBqBRgqnR30Xg+e/jF7ZWXjng68wdkwBBvbPTqt8/+a3UbdoLgQHdxxTF+aYkJOBk1xn9huyLIuQvhRyEjB5jaf3dRQgYmi5oC8k0bjl024qSpsETLIn3UHugabPS6BrjTmq43KeZjJCWERIt2sAbjBN6mzSjDn/25JNEKk2B+RIxBiumZw8D5n7lKJDX1bhqjtfwUtvbde/u0aPNSapgK7gNq7rJlPe9RYR0mfCVaa7u53nXZesBgRNQSgUirnM4y9uxogpi/DE4q3kN0SSFrlszQ4cPeXFF/tOwNcCOMuuNBxGVTOxLQFi9biO67rdlHe5RYT0ZQRP63jap+NDBR32gA/+QDBmz5sby2G3iThe68O2L48mLXDGDaPhsElgk9Q9aOiRMbi0HQk0VSDHlCBzqEIbGdqkd5zupRYR0u8ahvH7X8HTkUlNMnUFTs8peLz1Mde5+doShGVVb+VXjipMWuZN1wxD1dZ5WP3MNCPDmWUYBBZfokpXIoJelnt0ED1vrUfeFC/cw5uIK0K8PqN4up+nxdY0dPqSxdNTPO2X3CAQEWqP4nhDY8yuxfOnYM49V2NA3x66ZehSbMHfAi0iwd5XRmZJE1zDQ3BfHIJg582fzU/ZNNQsy0dwj8u8+KmApyd5mmsRoRtxBC7RJec5yboGtjjNUX8aQpMfTeEI3I62RxkGDchLrVD5DJl9sihyNYRwBSTtVQx64RRsubrJIZ2MmmZdgyBqeur7KAeBclfb4IVXPE+jrMy0iNB9CfO0k4dUBDZU0K2C1+uDO793aldXybSfmgOt/nWqyBazywFHL2Mlk6aIrfmMAEqTiMbPcuH9KBtqQNIjB2yoaRJ7nO7WCqWzID2jMZ7OeMC6B3dtFbw+H/qnQAQtuA3q4QlEhpCxUkm00SWiC12FVnLprZ9FKytdaNyejWC522j9ktE1RIljjkfF6R62iJC+syjzhtQjzgPvmAmCCFcNWYQGX+cFRKqhHvi2UYGiHYIkEh9ERBpt1BUokHIUqC0iQv/JgH93JoJ73VACkk4K3TcQDAJoieekorpGdQ9YREifCWzJF5uwGcZzKjpjDqsZZ3UVTsQ5jAkPD+3h/DGWqWmyiCO/LtTNfusSRr2la8Z3xjNJayssebAxqmsJT49Yw8f0ZR9Ph/L0YHKDYKxIdjTUQQg2ItjSkvzw7Al6VwBB1U9Vmw2LIHBz3wqJE4JVvMIcRUKExxJYDCExIQ7G6V5pESH9rqHcNC4fzPMqk4aY2ehBZN1Dle4wJmeCDeKgNYaJFxXYesgYMKcGrqJmvuJN0GMHKlU6iBDOoc3oMaERBffXYcjCEyhaUgV7fjiRHpVc18GmvL1W15A+EzbT51P8G5t3+AOMBaKlnfkKTt1PaMCAvvmdWIVbUbtxKpwFW5B9WRiZpSEdbFpb9lHVUYsX3Sokl9o6nNV9SOoiGj/LRrjWET9aYLKe59xgyttqESF9i2B+fmE6DCK8Sni8U4eRRg6eem9K5QT/G0T9h70hrpaQNaoZWWVNcBc3w5EvG6Fj3qoZAeSAiACNGLyf5KD5uIMZlUTyqknnqOyxiNA9YUvS2PIvtmScRW2qYDzdXJRsCOk8dRgn/P6UChAzaMRgU/WxIKtk/263bgmkbBkZ/WXYsmSoYQGR03a0kAWIOo+6/9B+2HiA6+hC2zL3DXo5Vl12S5aYtmdz8zw3uUUQYPd7IQYa4G8KdVqAY8CFdJaqDwtZ5Yp2Sh0qOY8SQgdp6FhOQ8dKN8Ieux5a1vdLbSOJOJnLdZwd/xssIqTbNRjrQdg6hObo8i+ev45woqPlYvoEkMAdRl/n8QTn0BFQ2VI30ySj4QtorYCoz3HraHUA25fNdFrHdYwuVWvmv8EiwlmQ+Txl3eyjWvv+N8EwUtS7B6+vodOLZ44Za0wv8poz6p1aPpFD4hBTW6A0nR/2KNoiyvNbuyCrHtN2FqNYxKKMfPsF3v9uo+1VyaakXdWH4fF27jA6i8tgc+eyZcwspABBocqn0o4OdOKP9w/A+1P6UL4Wr1M82Kt5tjHdmI48T+a668dYRDg7Yl6ruJbPArJX2RxP5CYYRKhCYyDQmv3+oZX44ear8NwXj2JX7T9iTuk5/lbYI0QAIoFiF7B2al+svKc/avpm4MBQt24dhI7XLTId7uY6re1AZ2vSKX2TEOOJreAmlz0nwB5Jn0k3fhkdMYa2T7CGHTt0oBbY1AS7tw4NgSbkZrnpcmTiaWSw37ML+zw70dPZB9cXTseO2h04ekkl1CuK4WzW4AxrCGRJsMlGxbNtmU1IaUg0sdBMGKMZpc6k/ZNMUdEVMaMTq0bPWlcx0WSK2buMLtOMF1+VEVpiuwaCaMw71PPuQSC/QRSogkU7HGIGGsM+vLhjCU4E9xA9FDhY2MAmoMkt6pbBsAKGjxhyiom6gxZetofrstS0b2K7YapVhWdN2JPGU03f2TOQF9FdP6inxhNGsYEl8hPq+cjBJbn5HoEIQZVNpBA0I5XYs4m84hPNHdjldpm+uLLN73KaynW1iHAOZS3d/CdNzZLNUJZR911D23mEv7eNAUVknGwbOWTY3K0ntf7RiSp7uQb/kwUFClt4IpF1IIuish5BbGcKWBl5epmsq9JwyLTvyTg/wSLCOZQFdM+Xta5gNx6SncKH8+MJP6IGrqj6GsZjCAQNh7GXKx+qpkIhyKqMiBpGVoYbh2tCOF4XQq1Xw3TvtXjouUMY94kXeZ4wIuQ4OshnsBPoeop+baMMjZe5l0cZWMYyRN/llEAsZzFNUZOP3R/g5jkaZVzPI3iz6LQVZOhXkFPwjBCJzHOcqYbPH0J+1kDI9McmlAbmFGFG8QMY1etK1ARrdZ8hz2WsITn05gaM++g0vkNk8OfY0ewSmWV4lnb9UmsLJrJ5j1kmfdhr/OZFX76JBD2M9exjmlLxvWGpOJCzeKVExasHmzRsNcKMMjzjb19aMO2+mcVFQ7Du2EqUXDAGw7LLOrxmw5b1OPbb2RBtjs8FUWTkekN/a6Mxr8CcwD/DeDw/Kg/Srlc609UiwrklAvtgD8J8SjAvVd5LRHiE8Gn0NTqZKz692aGq853ZOSMycnIzJWcGbHx5e0RWEGluQaTB63H7z7ztfe/Nh71b1vE3ruk24BrCy+DvOuBSr+cL2J/KGxQsIpx7IkTlecKc2AO0esJiqMrrUJQq5hgyS2HUidY+EiUK+pPPomRjaxgH0cjjXhiv+o9fD88inL9oHaBYRDiviMA22aNMiwi3xRGCgU0oUJehB3vY01M0xNP4ZITAnkPIp8Y/nLZHkhWYqAce2stfWGBLMEc0LSKcl0SISj5vsewVd5ndVCXIHdHno/EBIc6QWEQ4f4nQaghIriDcCOMfelyaYvHsX/mwf9DxIeHz+NcopUOE/wkwAAeR3z4C+zelAAAAAElFTkSuQmCC -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Property changes on: branches/2015Q3/www/libxul/files/patch-bug1061736 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1073709 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1073709 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1073709 (nonexistent) @@ -1,18 +0,0 @@ -diff --git mfbt/Atomics.h mfbt/Atomics.h -index 495a9d3..c7f7601 100644 ---- mfbt/Atomics.h -+++ mfbt/Atomics.h -@@ -34,10 +34,12 @@ - * loose typing of the atomic builtins. GCC 4.5 and 4.6 lacks inline - * definitions for unspecialized std::atomic and causes linking errors. - * Therefore, we require at least 4.7.0 for using libstdc++. -+ * -+ * libc++ is only functional with clang. - */ - # if MOZ_USING_LIBSTDCXX && MOZ_LIBSTDCXX_VERSION_AT_LEAST(4, 7, 0) - # define MOZ_HAVE_CXX11_ATOMICS --# elif MOZ_USING_LIBCXX -+# elif MOZ_USING_LIBCXX && defined(__clang__) - # define MOZ_HAVE_CXX11_ATOMICS - # endif - /* Property changes on: branches/2015Q3/www/libxul/files/patch-bug1073709 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1021171 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1021171 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1021171 (nonexistent) @@ -1,193 +0,0 @@ -commit dd19f59 -Author: Trevor Saunders -Date: Fri Jun 6 15:31:30 2014 -0400 - - bug 1021171 - don't return nulllptr in functions returning bool r=bz,waldo ---- - js/src/builtin/TypedObject.cpp | 32 ++++++++++++++++---------------- - js/src/frontend/BytecodeCompiler.cpp | 2 +- - js/xpconnect/wrappers/XrayWrapper.cpp | 2 +- - netwerk/ipc/NeckoParent.cpp | 2 +- - 4 files changed, 19 insertions(+), 19 deletions(-) - -diff --git js/src/builtin/TypedObject.cpp js/src/builtin/TypedObject.cpp -index 9e284b9..7a0a7fc 100644 ---- js/src/builtin/TypedObject.cpp -+++ js/src/builtin/TypedObject.cpp -@@ -710,12 +710,12 @@ ArrayMetaTypeDescr::construct(JSContext *cx, unsigned argc, Value *vp) - contents.append(")"); - RootedAtom stringRepr(cx, contents.finishAtom()); - if (!stringRepr) -- return nullptr; -+ return false; - - // Extract ArrayType.prototype - RootedObject arrayTypePrototype(cx, GetPrototype(cx, arrayTypeGlobal)); - if (!arrayTypePrototype) -- return nullptr; -+ return false; - - // Create the instance of ArrayType - Rooted obj(cx); -@@ -728,7 +728,7 @@ ArrayMetaTypeDescr::construct(JSContext *cx, unsigned argc, Value *vp) - if (!JSObject::defineProperty(cx, obj, cx->names().length, - UndefinedHandleValue, nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - args.rval().setObject(*obj); - return true; -@@ -762,7 +762,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp) - if (!size.isValid()) { - JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, - JSMSG_TYPEDOBJECT_TOO_BIG); -- return nullptr; -+ return false; - } - - // Construct a canonical string `new ArrayType().dimension(N)`: -@@ -775,7 +775,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp) - contents.append(")"); - RootedAtom stringRepr(cx, contents.finishAtom()); - if (!stringRepr) -- return nullptr; -+ return false; - - // Create the sized type object. - Rooted obj(cx); -@@ -793,7 +793,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp) - if (!JSObject::defineProperty(cx, obj, cx->names().length, - lengthVal, nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - // Add `unsized` property, which is a link from the sized - // array to the unsized array. -@@ -801,7 +801,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp) - if (!JSObject::defineProperty(cx, obj, cx->names().unsized, - unsizedTypeDescrValue, nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - args.rval().setObject(*obj); - return true; -@@ -1253,7 +1253,7 @@ DefineSimpleTypeDescr(JSContext *cx, - Rooted proto(cx); - proto = NewObjectWithProto(cx, objProto, nullptr, TenuredObject); - if (!proto) -- return nullptr; -+ return false; - proto->initTypeDescrSlot(*descr); - descr->initReservedSlot(JS_DESCR_SLOT_TYPROTO, ObjectValue(*proto)); - -@@ -1358,14 +1358,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle global) - #define BINARYDATA_SCALAR_DEFINE(constant_, type_, name_) \ - if (!DefineSimpleTypeDescr(cx, global, module, constant_, \ - cx->names().name_)) \ -- return nullptr; -+ return false; - JS_FOR_EACH_SCALAR_TYPE_REPR(BINARYDATA_SCALAR_DEFINE) - #undef BINARYDATA_SCALAR_DEFINE - - #define BINARYDATA_REFERENCE_DEFINE(constant_, type_, name_) \ - if (!DefineSimpleTypeDescr(cx, global, module, constant_, \ - cx->names().name_)) \ -- return nullptr; -+ return false; - JS_FOR_EACH_REFERENCE_TYPE_REPR(BINARYDATA_REFERENCE_DEFINE) - #undef BINARYDATA_REFERENCE_DEFINE - -@@ -1375,14 +1375,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle global) - arrayType = DefineMetaTypeDescr( - cx, global, module, TypedObjectModuleObject::ArrayTypePrototype); - if (!arrayType) -- return nullptr; -+ return false; - - RootedValue arrayTypeValue(cx, ObjectValue(*arrayType)); - if (!JSObject::defineProperty(cx, module, cx->names().ArrayType, - arrayTypeValue, - nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - // StructType. - -@@ -1390,14 +1390,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle global) - structType = DefineMetaTypeDescr( - cx, global, module, TypedObjectModuleObject::StructTypePrototype); - if (!structType) -- return nullptr; -+ return false; - - RootedValue structTypeValue(cx, ObjectValue(*structType)); - if (!JSObject::defineProperty(cx, module, cx->names().StructType, - structTypeValue, - nullptr, nullptr, - JSPROP_READONLY | JSPROP_PERMANENT)) -- return nullptr; -+ return false; - - // Everything is setup, install module on the global object: - RootedValue moduleValue(cx, ObjectValue(*module)); -@@ -1407,7 +1407,7 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle global) - nullptr, nullptr, - 0)) - { -- return nullptr; -+ return false; - } - - return module; -@@ -2449,7 +2449,7 @@ TypedObject::constructUnsized(JSContext *cx, unsigned int argc, Value *vp) - if (length < 0) { - JS_ReportErrorNumber(cx, js_GetErrorMessage, - nullptr, JSMSG_TYPEDOBJECT_BAD_ARGS); -- return nullptr; -+ return false; - } - Rooted obj(cx, createZeroed(cx, callee, length)); - if (!obj) -diff --git js/src/frontend/BytecodeCompiler.cpp js/src/frontend/BytecodeCompiler.cpp -index 5aacc23..aed45ca 100644 ---- js/src/frontend/BytecodeCompiler.cpp -+++ js/src/frontend/BytecodeCompiler.cpp -@@ -544,7 +544,7 @@ CompileFunctionBody(JSContext *cx, MutableHandleFunction fun, const ReadOnlyComp - - RootedScriptSource sourceObject(cx, CreateScriptSourceObject(cx, options)); - if (!sourceObject) -- return nullptr; -+ return false; - ScriptSource* ss = sourceObject->source(); - - SourceCompressionTask sct(cx); -diff --git js/xpconnect/wrappers/XrayWrapper.cpp js/xpconnect/wrappers/XrayWrapper.cpp -index fd6458b..ab48770 100644 ---- js/xpconnect/wrappers/XrayWrapper.cpp -+++ js/xpconnect/wrappers/XrayWrapper.cpp -@@ -363,7 +363,7 @@ public: - { - JSAutoCompartment ac(cx, target); - if (!JS_GetClassPrototype(cx, key, protop)) -- return nullptr; -+ return false; - } - return JS_WrapObject(cx, protop); - } -diff --git netwerk/ipc/NeckoParent.cpp netwerk/ipc/NeckoParent.cpp -index 96dbb1d..ef3293b 100644 ---- netwerk/ipc/NeckoParent.cpp -+++ netwerk/ipc/NeckoParent.cpp -@@ -365,7 +365,7 @@ NeckoParent::RecvPRtspChannelConstructor( - RtspChannelParent* p = static_cast(aActor); - return p->Init(aConnectArgs); - #else -- return nullptr; -+ return false; - #endif - } - Property changes on: branches/2015Q3/www/libxul/files/patch-bug1021171 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1041381 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1041381 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1041381 (nonexistent) @@ -1,12 +0,0 @@ -diff --git config/rules.mk config/rules.mk -index 1dee8c3..4d67eda 100644 ---- config/rules.mk -+++ config/rules.mk -@@ -822,6 +822,7 @@ endif - ifdef DTRACE_PROBE_OBJ - EXTRA_DEPS += $(DTRACE_PROBE_OBJ) - OBJS += $(DTRACE_PROBE_OBJ) -+EXCLUDED_OBJS += $(DTRACE_PROBE_OBJ) - endif - - $(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS) Property changes on: branches/2015Q3/www/libxul/files/patch-bug1041381 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1041795 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1041795 (revision 392766) +++ branches/2015Q3/www/libxul/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: branches/2015Q3/www/libxul/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: branches/2015Q3/www/libxul/files/patch-bug1103858 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1103858 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1103858 (nonexistent) @@ -1,42 +0,0 @@ -diff --git configure.in configure.in -index b2b45e7..dcfdfb7 100644 ---- configure.in -+++ configure.in -@@ -8346,7 +8346,7 @@ case "$OS_TARGET" in - NECKO_WIFI=1 - fi - ;; -- Darwin|FreeBSD|SunOS|WINNT) -+ Darwin|DragonFly|FreeBSD|SunOS|WINNT) - NECKO_WIFI=1 - ;; - Linux) -diff --git netwerk/wifi/moz.build netwerk/wifi/moz.build -index d4de063..3949380 100644 ---- netwerk/wifi/moz.build -+++ netwerk/wifi/moz.build -@@ -35,7 +35,7 @@ if CONFIG['OS_ARCH'] == 'Darwin': - UNIFIED_SOURCES += [ - 'osx_corewlan.mm', - ] --elif CONFIG['OS_ARCH'] == 'FreeBSD': -+elif CONFIG['OS_ARCH'] in ('DragonFly', 'FreeBSD'): - UNIFIED_SOURCES += [ - 'nsWifiScannerFreeBSD.cpp', - ] -diff --git netwerk/wifi/nsWifiScannerFreeBSD.cpp netwerk/wifi/nsWifiScannerFreeBSD.cpp -index bdf171e..4185d69 100644 ---- netwerk/wifi/nsWifiScannerFreeBSD.cpp -+++ netwerk/wifi/nsWifiScannerFreeBSD.cpp -@@ -13,7 +13,11 @@ - #include - #include - #include -+#ifdef __DragonFly__ -+#include -+#else - #include -+#endif - - #include - #include Property changes on: branches/2015Q3/www/libxul/files/patch-bug1103858 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1013675 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1013675 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1013675 (nonexistent) @@ -1,88 +0,0 @@ -diff --git xpcom/base/nsDebugImpl.cpp xpcom/base/nsDebugImpl.cpp -index 13a286f..293bd73 100644 ---- xpcom/base/nsDebugImpl.cpp -+++ xpcom/base/nsDebugImpl.cpp -@@ -45,12 +45,43 @@ - #endif - #endif - --#if defined(XP_MACOSX) -+#if defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \ -+ || defined(__NetBSD__) || defined(__OpenBSD__) - #include - #include -+#include - #include - #endif - -+#if defined(__OpenBSD__) -+#include -+#endif -+ -+#if defined(__DragonFly__) || defined(__FreeBSD__) -+#include -+#endif -+ -+#if defined(__NetBSD__) -+#undef KERN_PROC -+#define KERN_PROC KERN_PROC2 -+#define KINFO_PROC struct kinfo_proc2 -+#else -+#define KINFO_PROC struct kinfo_proc -+#endif -+ -+#if defined(XP_MACOSX) -+#define KP_FLAGS kp_proc.p_flag -+#elif defined(__DragonFly__) -+#define KP_FLAGS kp_flags -+#elif defined(__FreeBSD__) -+#define KP_FLAGS ki_flag -+#elif defined(__OpenBSD__) && !defined(_P_TRACED) -+#define KP_FLAGS p_psflags -+#define P_TRACED PS_TRACED -+#else -+#define KP_FLAGS p_flag -+#endif -+ - #include "mozilla/mozalloc_abort.h" - - static void -@@ -144,16 +175,22 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult) - - #if defined(XP_WIN) - *aResult = ::IsDebuggerPresent(); --#elif defined(XP_MACOSX) -+#elif defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \ -+ || defined(__NetBSD__) || defined(__OpenBSD__) - // Specify the info we're looking for -- int mib[4]; -- mib[0] = CTL_KERN; -- mib[1] = KERN_PROC; -- mib[2] = KERN_PROC_PID; -- mib[3] = getpid(); -+ int mib[] = { -+ CTL_KERN, -+ KERN_PROC, -+ KERN_PROC_PID, -+ getpid(), -+#if defined(__NetBSD__) || defined(__OpenBSD__) -+ sizeof(KINFO_PROC), -+ 1, -+#endif -+ }; - size_t mibSize = sizeof(mib) / sizeof(int); - -- struct kinfo_proc info; -+ KINFO_PROC info; - size_t infoSize = sizeof(info); - memset(&info, 0, infoSize); - -@@ -163,7 +200,7 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult) - return NS_OK; - } - -- if (info.kp_proc.p_flag & P_TRACED) { -+ if (info.KP_FLAGS & P_TRACED) { - *aResult = true; - } - #endif Property changes on: branches/2015Q3/www/libxul/files/patch-bug1013675 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1082199 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1082199 (revision 392766) +++ branches/2015Q3/www/libxul/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: branches/2015Q3/www/libxul/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: branches/2015Q3/www/libxul/files/patch-bug1015547 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1015547 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1015547 (nonexistent) @@ -1,95 +0,0 @@ -diff --git configure.in configure.in -index 7bed45f..053de17 100644 ---- configure.in -+++ configure.in -@@ -2950,7 +2950,7 @@ dnl Checks for library functions. - dnl ======================================================== - AC_PROG_GCC_TRADITIONAL - AC_FUNC_MEMCMP --AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r) -+AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r arc4random arc4random_buf) - - dnl check for clock_gettime(), the CLOCK_MONOTONIC clock - AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC), -diff --git xpcom/base/nsUUIDGenerator.cpp xpcom/base/nsUUIDGenerator.cpp -index 0687344..ca3ff8b 100644 ---- xpcom/base/nsUUIDGenerator.cpp -+++ xpcom/base/nsUUIDGenerator.cpp -@@ -15,6 +15,10 @@ - - #include "nsUUIDGenerator.h" - -+#ifdef ANDROID -+extern "C" NS_EXPORT void arc4random_buf(void *, size_t); -+#endif -+ - using namespace mozilla; - - NS_IMPL_ISUPPORTS1(nsUUIDGenerator, nsIUUIDGenerator) -@@ -34,7 +38,7 @@ nsUUIDGenerator::Init() - // We're a service, so we're guaranteed that Init() is not going - // to be reentered while we're inside Init(). - --#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID) -+#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM) - /* initialize random number generator using NSPR random noise */ - unsigned int seed; - -@@ -67,7 +71,7 @@ nsUUIDGenerator::Init() - return NS_ERROR_FAILURE; - #endif - --#endif /* non XP_WIN and non XP_MACOSX */ -+#endif /* non XP_WIN and non XP_MACOSX and non ARC4RANDOM */ - - return NS_OK; - } -@@ -114,13 +118,16 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id) - * back to it; instead, we use the value returned when we called - * initstate, since older glibc's have broken setstate() return values - */ --#ifndef ANDROID -+#ifndef HAVE_ARC4RANDOM - setstate(mState); - #endif - -+#ifdef HAVE_ARC4RANDOM_BUF -+ arc4random_buf(id, sizeof(nsID)); -+#else /* HAVE_ARC4RANDOM_BUF */ - size_t bytesLeft = sizeof(nsID); - while (bytesLeft > 0) { --#ifdef ANDROID -+#ifdef HAVE_ARC4RANDOM - long rval = arc4random(); - const size_t mRBytes = 4; - #else -@@ -141,6 +148,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id) - - bytesLeft -= toWrite; - } -+#endif /* HAVE_ARC4RANDOM_BUF */ - - /* Put in the version */ - id->m2 &= 0x0fff; -@@ -150,7 +158,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id) - id->m3[0] &= 0x3f; - id->m3[0] |= 0x80; - --#ifndef ANDROID -+#ifndef HAVE_ARC4RANDOM - /* Restore the previous RNG state */ - setstate(mSavedState); - #endif -diff --git xpcom/base/nsUUIDGenerator.h xpcom/base/nsUUIDGenerator.h -index 6a24212..68ed6f2 100644 ---- xpcom/base/nsUUIDGenerator.h -+++ xpcom/base/nsUUIDGenerator.h -@@ -27,7 +27,7 @@ private: - protected: - - mozilla::Mutex mLock; --#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID) -+#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM) - char mState[128]; - char *mSavedState; - uint8_t mRBytes; Property changes on: branches/2015Q3/www/libxul/files/patch-bug1015547 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1026828 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1026828 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1026828 (nonexistent) @@ -1,20 +0,0 @@ -diff --git storage/src/moz.build storage/src/moz.build -index 4cd2551..5c40536 100644 ---- storage/src/moz.build -+++ storage/src/moz.build -@@ -50,11 +50,14 @@ FINAL_LIBRARY = 'storagecomps' - # (such as NSS) might trigger an initialization of sqlite and allocation - # of memory using the default allocator, prior to the storage service - # registering its allocator, causing memory management failures (bug 938730). -+# However, this is not an issue if both the jemalloc allocator and the default -+# allocator are the same thing. - # - # Note: On Windows our sqlite build assumes we use jemalloc. If you disable - # MOZ_STORAGE_MEMORY on Windows, you will also need to change the "ifdef - # MOZ_MEMORY" options in db/sqlite3/src/Makefile.in. --if CONFIG['MOZ_MEMORY'] and not CONFIG['MOZ_NATIVE_SQLITE']: -+if CONFIG['MOZ_MEMORY'] and (not CONFIG['MOZ_NATIVE_SQLITE'] -+ or CONFIG['MOZ_NATIVE_JEMALLOC']): - if CONFIG['OS_TARGET'] != 'Android': - DEFINES['MOZ_STORAGE_MEMORY'] = True - Property changes on: branches/2015Q3/www/libxul/files/patch-bug1026828 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1046224 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1046224 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1046224 (nonexistent) @@ -1,26 +0,0 @@ -diff --git configure.in configure.in -index 1853029..559bd45 100644 ---- configure.in -+++ configure.in -@@ -2651,7 +2651,7 @@ if test "$ac_cv_sockaddr_sa_len" = true ; then - AC_DEFINE(HAVE_SA_LEN) - fi - --AC_ARG_ENABLE(dtrace, -+MOZ_ARG_ENABLE_BOOL(dtrace, - [ --enable-dtrace build with dtrace support if available (default=no)], - [enable_dtrace="yes"],) - if test "x$enable_dtrace" = "xyes"; then -diff --git js/src/configure.in js/src/configure.in -index 134dfd3..682c1fb 100644 ---- js/src/configure.in -+++ js/src/configure.in -@@ -2153,7 +2153,7 @@ dnl Quota support - MOZ_CHECK_HEADERS(sys/quota.h) - MOZ_CHECK_HEADERS(linux/quota.h) - --AC_ARG_ENABLE(dtrace, -+MOZ_ARG_ENABLE_BOOL(dtrace, - [ --enable-dtrace build with dtrace support if available (default=no)], - [enable_dtrace="yes"],) - if test "x$enable_dtrace" = "xyes"; then Property changes on: branches/2015Q3/www/libxul/files/patch-bug1046224 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1125579 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1125579 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1125579 (nonexistent) @@ -1,14 +0,0 @@ ---- js/src/assembler/jit/ExecutableAllocator.h~ -+++ js/src/assembler/jit/ExecutableAllocator.h -@@ -454,6 +454,11 @@ public: - { - User::IMB_Range(code, static_cast(code) + size); - } -+#elif WTF_CPU_ARM_TRADITIONAL && (WTF_OS_FREEBSD || WTF_OS_NETBSD) -+ static void cacheFlush(void* code, size_t size) -+ { -+ __clear_cache(code, reinterpret_cast(code) + size); -+ } - #elif WTF_CPU_ARM_TRADITIONAL && WTF_OS_LINUX && WTF_COMPILER_RVCT - static __asm void cacheFlush(void* code, size_t size); - #elif WTF_CPU_ARM_TRADITIONAL && (WTF_OS_LINUX || WTF_OS_ANDROID) && WTF_COMPILER_GCC Property changes on: branches/2015Q3/www/libxul/files/patch-bug1125579 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1125580 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1125580 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1125580 (nonexistent) @@ -1,11 +0,0 @@ ---- js/src/jit/arm/Architecture-arm.cpp~ -+++ js/src/jit/arm/Architecture-arm.cpp -@@ -17,7 +17,7 @@ - - #define HWCAP_USE_HARDFP_ABI (1 << 28) - --#if !(defined(ANDROID) || defined(MOZ_B2G)) && !defined(JS_ARM_SIMULATOR) -+#if defined(__linux__) && !defined(ANDROID) && !defined(MOZ_B2G) && !defined(JS_ARM_SIMULATOR) - #define HWCAP_ARMv7 (1 << 29) - #include - #else Property changes on: branches/2015Q3/www/libxul/files/patch-bug1125580 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1067377 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1067377 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1067377 (nonexistent) @@ -1,78 +0,0 @@ -diff --git content/media/encoder/VP8TrackEncoder.cpp content/media/encoder/VP8TrackEncoder.cpp -index 452821c..ede21c5 100644 ---- content/media/encoder/VP8TrackEncoder.cpp -+++ content/media/encoder/VP8TrackEncoder.cpp -@@ -84,7 +84,7 @@ VP8TrackEncoder::Init(int32_t aWidth, int32_t aHeight, int32_t aDisplayWidth, - // Creating a wrapper to the image - setting image data to NULL. Actual - // pointer will be set in encode. Setting align to 1, as it is meaningless - // (actual memory is not allocated). -- vpx_img_wrap(mVPXImageWrapper, IMG_FMT_I420, -+ vpx_img_wrap(mVPXImageWrapper, VPX_IMG_FMT_I420, - mFrameWidth, mFrameHeight, 1, nullptr); - - config.g_w = mFrameWidth; -@@ -239,9 +239,9 @@ void VP8TrackEncoder::PrepareMutedFrame() - uint8_t *cb = mMuteFrame.Elements() + yPlaneSize; - uint8_t *cr = mMuteFrame.Elements() + yPlaneSize + uvPlaneSize; - -- mVPXImageWrapper->planes[PLANE_Y] = y; -- mVPXImageWrapper->planes[PLANE_U] = cb; -- mVPXImageWrapper->planes[PLANE_V] = cr; -+ mVPXImageWrapper->planes[VPX_PLANE_Y] = y; -+ mVPXImageWrapper->planes[VPX_PLANE_U] = cb; -+ mVPXImageWrapper->planes[VPX_PLANE_V] = cr; - mVPXImageWrapper->stride[VPX_PLANE_Y] = mFrameWidth; - mVPXImageWrapper->stride[VPX_PLANE_U] = halfWidth; - mVPXImageWrapper->stride[VPX_PLANE_V] = halfWidth; -@@ -297,9 +297,9 @@ nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk) - const PlanarYCbCrImage::Data *data = yuv->GetData(); - - if (isYUV420(data) && !data->mCbSkip) { // 420 planar -- mVPXImageWrapper->planes[PLANE_Y] = data->mYChannel; -- mVPXImageWrapper->planes[PLANE_U] = data->mCbChannel; -- mVPXImageWrapper->planes[PLANE_V] = data->mCrChannel; -+ mVPXImageWrapper->planes[VPX_PLANE_Y] = data->mYChannel; -+ mVPXImageWrapper->planes[VPX_PLANE_U] = data->mCbChannel; -+ mVPXImageWrapper->planes[VPX_PLANE_V] = data->mCrChannel; - mVPXImageWrapper->stride[VPX_PLANE_Y] = data->mYStride; - mVPXImageWrapper->stride[VPX_PLANE_U] = data->mCbCrStride; - mVPXImageWrapper->stride[VPX_PLANE_V] = data->mCbCrStride; -@@ -355,9 +355,9 @@ nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk) - return NS_ERROR_NOT_IMPLEMENTED; - } - -- mVPXImageWrapper->planes[PLANE_Y] = y; -- mVPXImageWrapper->planes[PLANE_U] = cb; -- mVPXImageWrapper->planes[PLANE_V] = cr; -+ mVPXImageWrapper->planes[VPX_PLANE_Y] = y; -+ mVPXImageWrapper->planes[VPX_PLANE_U] = cb; -+ mVPXImageWrapper->planes[VPX_PLANE_V] = cr; - mVPXImageWrapper->stride[VPX_PLANE_Y] = mFrameWidth; - mVPXImageWrapper->stride[VPX_PLANE_U] = halfWidth; - mVPXImageWrapper->stride[VPX_PLANE_V] = halfWidth; -diff --git media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc -index d9c3a22..75195ae 100644 ---- media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc -+++ media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc -@@ -180,7 +180,7 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst, - // Creating a wrapper to the image - setting image data to NULL. Actual - // pointer will be set in encode. Setting align to 1, as it is meaningless - // (actual memory is not allocated). -- raw_ = vpx_img_wrap(NULL, IMG_FMT_I420, codec_.width, codec_.height, -+ raw_ = vpx_img_wrap(NULL, VPX_IMG_FMT_I420, codec_.width, codec_.height, - 1, NULL); - // populate encoder configuration with default values - if (vpx_codec_enc_config_default(vpx_codec_vp8_cx(), config_, 0)) { -@@ -349,9 +349,9 @@ int VP8EncoderImpl::Encode(const I420VideoFrame& input_image, - } - // Image in vpx_image_t format. - // Input image is const. VP8's raw image is not defined as const. -- raw_->planes[PLANE_Y] = const_cast(input_image.buffer(kYPlane)); -- raw_->planes[PLANE_U] = const_cast(input_image.buffer(kUPlane)); -- raw_->planes[PLANE_V] = const_cast(input_image.buffer(kVPlane)); -+ raw_->planes[VPX_PLANE_Y] = const_cast(input_image.buffer(kYPlane)); -+ raw_->planes[VPX_PLANE_U] = const_cast(input_image.buffer(kUPlane)); -+ raw_->planes[VPX_PLANE_V] = const_cast(input_image.buffer(kVPlane)); - // TODO(mikhal): Stride should be set in initialization. - raw_->stride[VPX_PLANE_Y] = input_image.stride(kYPlane); - raw_->stride[VPX_PLANE_U] = input_image.stride(kUPlane); Property changes on: branches/2015Q3/www/libxul/files/patch-bug1067377 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1013882 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1013882 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1013882 (revision 392767) @@ -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: branches/2015Q3/www/libxul/files/patch-bug1021761 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1021761 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1021761 (revision 392767) @@ -1,1091 +1,1102 @@ diff --git configure.in configure.in index 48e60c0..ec08417 100644 --- configure.in +++ configure.in @@ -5591,6 +5591,67 @@ fi AC_SUBST(MOZ_WEBM_ENCODER) dnl ================================== +dnl = Check OSS availability +dnl ================================== + +dnl If using Linux, Solaris or BSDs, ensure that OSS is available +case "$OS_TARGET" in +Linux|SunOS|DragonFly|FreeBSD|NetBSD|GNU/kFreeBSD) + MOZ_OSS=1 + ;; +esac + +MOZ_ARG_WITH_STRING(oss, +[ --with-oss[=PFX] Enable OpenSoundSystem support [installed at prefix PFX]], + OSSPREFIX=$withval) + +if test -n "$OSSPREFIX"; then + if test "$OSSPREFIX" != "no"; then + MOZ_OSS=1 + else + MOZ_OSS= + fi +fi + +_SAVE_CFLAGS=$CFLAGS +_SAVE_LIBS=$LIBS +if test -n "$MOZ_OSS"; then + dnl Prefer 4Front implementation + AC_MSG_CHECKING([MOZ_OSS_CFLAGS]) + if test "$OSSPREFIX" != "yes"; then + oss_conf=${OSSPREFIX%/usr}/etc/oss.conf + if test -f "$oss_conf"; then + . "$oss_conf" + else + OSSLIBDIR=$OSSPREFIX/lib/oss + fi + if test -d "$OSSLIBDIR"; then + MOZ_OSS_CFLAGS="$MOZ_OSS_CFLAGS -I$OSSLIBDIR/include" + fi + fi + AC_MSG_RESULT([$MOZ_OSS_CFLAGS]) + + CFLAGS="$CFLAGS $MOZ_OSS_CFLAGS" + MOZ_CHECK_HEADERS(sys/soundcard.h soundcard.h) + + if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \ + "$ac_cv_header_soundcard_h" != "yes"; then + AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --disable-ogg --disable-wave --disable-webm.]) + fi + + dnl Assume NetBSD implementation over SunAudio + AC_CHECK_LIB(ossaudio, _oss_ioctl, + [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound") + MOZ_OSS_LIBS="$MOZ_OSS_LIBS -lossaudio"]) +fi +CFLAGS=$_SAVE_CFLAGS +LIBS=$_SAVE_LIBS + +AC_SUBST(MOZ_OSS) +AC_SUBST_LIST(MOZ_OSS_CFLAGS) +AC_SUBST_LIST(MOZ_OSS_LIBS) + +dnl ================================== dnl = Check alsa availability on Linux dnl ================================== diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS index b441e8a..950d9e5 100644 --- media/libcubeb/AUTHORS +++ media/libcubeb/AUTHORS @@ -4,3 +4,4 @@ Michael Wu Paul Adenot David Richards Sebastien Alaiwan +Evgeniy Vodolazskiy diff --git media/libcubeb/src/cubeb.c media/libcubeb/src/cubeb.c index 9c3adcc..45d765b 100644 --- media/libcubeb/src/cubeb.c +++ media/libcubeb/src/cubeb.c @@ -54,6 +54,9 @@ int opensl_init(cubeb ** context, char const * context_name); #if defined(USE_AUDIOTRACK) int audiotrack_init(cubeb ** context, char const * context_name); #endif +#if defined(USE_OSS) +int oss_init(cubeb ** context, char const * context_name); +#endif int validate_stream_params(cubeb_stream_params stream_params) @@ -120,6 +123,9 @@ cubeb_init(cubeb ** context, char const * context_name) #if defined(USE_AUDIOTRACK) audiotrack_init, #endif +#if defined(USE_OSS) + oss_init, +#endif }; int i; diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c index a962553..1f780f4 100644 --- media/libcubeb/src/cubeb_alsa.c +++ media/libcubeb/src/cubeb_alsa.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -24,6 +25,50 @@ #define ALSA_PA_PLUGIN "ALSA <-> PulseAudio PCM I/O Plugin" +#ifdef DISABLE_LIBASOUND_DLOPEN +#define WRAP(x) x +#else +#define WRAP(x) cubeb_##x +#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x +MAKE_TYPEDEF(snd_config); +MAKE_TYPEDEF(snd_config_add); +MAKE_TYPEDEF(snd_config_copy); +MAKE_TYPEDEF(snd_config_delete); +MAKE_TYPEDEF(snd_config_get_id); +MAKE_TYPEDEF(snd_config_get_string); +MAKE_TYPEDEF(snd_config_imake_integer); +MAKE_TYPEDEF(snd_config_search); +MAKE_TYPEDEF(snd_config_search_definition); +MAKE_TYPEDEF(snd_lib_error_set_handler); +MAKE_TYPEDEF(snd_pcm_avail_update); +MAKE_TYPEDEF(snd_pcm_close); +MAKE_TYPEDEF(snd_pcm_delay); +MAKE_TYPEDEF(snd_pcm_drain); +MAKE_TYPEDEF(snd_pcm_frames_to_bytes); +MAKE_TYPEDEF(snd_pcm_get_params); +/* snd_pcm_hw_params_alloca is actually a macro */ +/* MAKE_TYPEDEF(snd_pcm_hw_params_alloca); */ +MAKE_TYPEDEF(snd_pcm_hw_params_sizeof); +#define snd_pcm_hw_params_sizeof cubeb_snd_pcm_hw_params_sizeof +MAKE_TYPEDEF(snd_pcm_hw_params_any); +MAKE_TYPEDEF(snd_pcm_hw_params_get_channels_max); +MAKE_TYPEDEF(snd_pcm_hw_params_get_rate); +MAKE_TYPEDEF(snd_pcm_hw_params_set_rate_near); +MAKE_TYPEDEF(snd_pcm_nonblock); +MAKE_TYPEDEF(snd_pcm_open); +MAKE_TYPEDEF(snd_pcm_open_lconf); +MAKE_TYPEDEF(snd_pcm_pause); +MAKE_TYPEDEF(snd_pcm_poll_descriptors); +MAKE_TYPEDEF(snd_pcm_poll_descriptors_count); +MAKE_TYPEDEF(snd_pcm_poll_descriptors_revents); +MAKE_TYPEDEF(snd_pcm_recover); +MAKE_TYPEDEF(snd_pcm_set_params); +MAKE_TYPEDEF(snd_pcm_state); +MAKE_TYPEDEF(snd_pcm_writei); + +#undef MAKE_TYPEDEF +#endif + /* ALSA is not thread-safe. snd_pcm_t instances are individually protected by the owning cubeb_stream's mutex. snd_pcm_t creation and destruction is not thread-safe until ALSA 1.0.24 (see alsa-lib.git commit 91c9c8f1), @@ -64,6 +109,8 @@ struct cubeb { workaround is not required. */ snd_config_t * local_config; int is_pa; + + void * libasound; }; enum stream_state { @@ -262,7 +309,7 @@ alsa_refill_stream(cubeb_stream * stm) pthread_mutex_lock(&stm->mutex); - r = snd_pcm_poll_descriptors_revents(stm->pcm, stm->fds, stm->nfds, &revents); + r = WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents); if (r < 0 || revents != POLLOUT) { /* This should be a stream error; it makes no sense for poll(2) to wake for this stream and then have the stream report that it's not ready. @@ -271,10 +318,10 @@ alsa_refill_stream(cubeb_stream * stm) return RUNNING; } - avail = snd_pcm_avail_update(stm->pcm); + avail = WRAP(snd_pcm_avail_update)(stm->pcm); if (avail == -EPIPE) { - snd_pcm_recover(stm->pcm, avail, 1); - avail = snd_pcm_avail_update(stm->pcm); + WRAP(snd_pcm_recover)(stm->pcm, avail, 1); + avail = WRAP(snd_pcm_avail_update)(stm->pcm); } /* Failed to recover from an xrun, this stream must be broken. */ @@ -293,8 +340,8 @@ alsa_refill_stream(cubeb_stream * stm) available to write. If avail is still zero here, the stream must be in a funky state, so recover and try again. */ if (avail == 0) { - snd_pcm_recover(stm->pcm, -EPIPE, 1); - avail = snd_pcm_avail_update(stm->pcm); + WRAP(snd_pcm_recover)(stm->pcm, -EPIPE, 1); + avail = WRAP(snd_pcm_avail_update)(stm->pcm); if (avail <= 0) { pthread_mutex_unlock(&stm->mutex); stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); @@ -302,7 +349,7 @@ alsa_refill_stream(cubeb_stream * stm) } } - p = calloc(1, snd_pcm_frames_to_bytes(stm->pcm, avail)); + p = calloc(1, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, avail)); assert(p); pthread_mutex_unlock(&stm->mutex); -@@ -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); +@@ -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); -@@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) +@@ -895,7 +1001,7 @@ alsa_stream_destroy(cubeb_stream * stm) + pthread_mutex_lock(&stm->mutex); + if (stm->pcm) { + if (stm->state == DRAINING) { +- snd_pcm_drain(stm->pcm); ++ WRAP(snd_pcm_drain)(stm->pcm); + } + alsa_locked_pcm_close(stm->pcm); + stm->pcm = NULL; +@@ -938,12 +1044,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) return CUBEB_ERROR; } -- rv = snd_pcm_hw_params_any(stm->pcm, hw_params); -+ rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); - if (rv < 0) { +- r = snd_pcm_hw_params_any(stm->pcm, hw_params); ++ r = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); + if (r < 0) { return CUBEB_ERROR; } -- 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) { +- r = snd_pcm_hw_params_get_channels_max(hw_params, max_channels); ++ r = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels); + if (r < 0) { return CUBEB_ERROR; } -@@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { +@@ -963,34 +1069,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { /* get a pcm, disabling resampling, so we get a rate the * hardware/dmix/pulse/etc. supports. */ -- 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) { +- r = snd_pcm_open(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); ++ r = WRAP(snd_pcm_open)(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); + if (r < 0) { return CUBEB_ERROR; } -- rv = snd_pcm_hw_params_any(pcm, hw_params); -+ rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); - if (rv < 0) { +- r = snd_pcm_hw_params_any(pcm, hw_params); ++ r = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); + if (r < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } -- 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) { +- r = snd_pcm_hw_params_get_rate(hw_params, rate, &dir); ++ r = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir); + if (r >= 0) { /* There is a default rate: use it. */ - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */ *rate = 44100; -- 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) { +- r = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL); ++ r = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL); + if (r < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } @@ -1013,7 +1119,7 @@ alsa_stream_start(cubeb_stream * stm) ctx = stm->context; pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 0); + WRAP(snd_pcm_pause)(stm->pcm, 0); gettimeofday(&stm->last_activity, NULL); pthread_mutex_unlock(&stm->mutex); @@ -1047,7 +1153,7 @@ alsa_stream_stop(cubeb_stream * stm) pthread_mutex_unlock(&ctx->mutex); pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 1); + WRAP(snd_pcm_pause)(stm->pcm, 1); pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1063,8 +1169,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) pthread_mutex_lock(&stm->mutex); delay = -1; - if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING || - snd_pcm_delay(stm->pcm, &delay) != 0) { + if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING || + WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) { *position = stm->last_position; pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1089,7 +1195,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) snd_pcm_sframes_t delay; /* This function returns the delay in frames until a frame written using snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */ - if (snd_pcm_delay(stm->pcm, &delay)) { + if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) { return CUBEB_ERROR; } diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c new file mode 100644 index 0000000..5e38e27 --- /dev/null +++ media/libcubeb/src/cubeb_oss.c -@@ -0,0 +1,397 @@ +@@ -0,0 +1,402 @@ +/* + * Copyright © 2014 Mozilla Foundation + * + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ +#if defined(HAVE_SYS_SOUNDCARD_H) +#include +#else +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cubeb/cubeb.h" +#include "cubeb-internal.h" + +#ifndef CUBEB_OSS_DEFAULT_OUTPUT +#define CUBEB_OSS_DEFAULT_OUTPUT "/dev/dsp" +#endif + +#define OSS_BUFFER_SIZE 1024 + +struct cubeb { + struct cubeb_ops const * ops; +}; + +struct cubeb_stream { + cubeb * context; + + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; + void * user_ptr; + float volume; + float panning; + + pthread_mutex_t state_mutex; + pthread_cond_t state_cond; + + int running; + int stopped; + int floating; + + /* These two vars are needed to support old versions of OSS */ + unsigned int position_bytes; + unsigned int last_position_bytes; + + uint64_t written_frags; /* The number of fragments written to /dev/dsp */ + uint64_t missed_frags; /* fragments output with stopped stream */ + + cubeb_stream_params params; + int fd; + pthread_t th; +}; + +static struct cubeb_ops const oss_ops; + +int oss_init(cubeb ** context, char const * context_name) +{ + cubeb* ctx = (cubeb*)malloc(sizeof(cubeb)); + ctx->ops = &oss_ops; + *context = ctx; + return CUBEB_OK; +} + +static void oss_destroy(cubeb *ctx) +{ + free(ctx); +} + +static char const * oss_get_backend_id(cubeb * context) +{ + static char oss_name[] = "oss"; + return oss_name; +} + +static int oss_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) +{ + *max_channels = 2; /* Let's support only stereo for now */ + return CUBEB_OK; +} + +static int oss_get_min_latency(cubeb * context, cubeb_stream_params params, + uint32_t * latency_ms) +{ + /* 40ms is a big enough number to work ok */ + *latency_ms = 40; + return CUBEB_OK; +} + +static int oss_get_preferred_sample_rate(cubeb *context, uint32_t * rate) +{ + /* 48000 seems a prefered choice for most audio devices + * and a good choice for OSS */ + *rate = 48000; + return CUBEB_OK; +} + +static void run_state_callback(cubeb_stream *stream, cubeb_state state) +{ + if (stream->state_callback) { + stream->state_callback(stream, stream->user_ptr, state); + } +} + +static long run_data_callback(cubeb_stream *stream, void *buffer, long nframes) +{ + long got = 0; + pthread_mutex_lock(&stream->state_mutex); + if (stream->data_callback && stream->running && !stream->stopped) { + pthread_mutex_unlock(&stream->state_mutex); + got = stream->data_callback(stream, stream->user_ptr, buffer, nframes); + } else { + pthread_mutex_unlock(&stream->state_mutex); + } + return got; +} + +static void apply_volume(int16_t* buffer, unsigned int n, + float volume, float panning) +{ + float left = volume; + float right = volume; + unsigned int i; + int pan[2]; + if (panning<0) { + right *= (1+panning); + } else { + left *= (1-panning); + } + pan[0] = 128.0*left; + pan[1] = 128.0*right; + for(i=0; irunning) { + pthread_mutex_lock(&stream->state_mutex); + if (stream->stopped) { + pthread_mutex_unlock(&stream->state_mutex); + run_state_callback(stream, CUBEB_STATE_STOPPED); + pthread_mutex_lock(&stream->state_mutex); + while (stream->stopped) { + pthread_cond_wait(&stream->state_cond, &stream->state_mutex); + } + pthread_mutex_unlock(&stream->state_mutex); + run_state_callback(stream, CUBEB_STATE_STARTED); + continue; + } + pthread_mutex_unlock(&stream->state_mutex); + if (stream->floating) { + got = run_data_callback(stream, f_buffer, + OSS_BUFFER_SIZE/stream->params.channels); + for (i=0; i<((unsigned long)got)*stream->params.channels; i++) { + buffer[i] = f_buffer[i]*32767.0; + } + } else { + got = run_data_callback(stream, buffer, + OSS_BUFFER_SIZE/stream->params.channels); + } + apply_volume(buffer, got*stream->params.channels, + stream->volume, stream->panning); + if (got<0) { + run_state_callback(stream, CUBEB_STATE_ERROR); + break; + } + if (!got) { + run_state_callback(stream, CUBEB_STATE_DRAINED); + } + if (got) { + size_t i = 0; + size_t s = got*stream->params.channels*sizeof(int16_t); + while (i < s) { + ssize_t n = write(stream->fd, ((char*)buffer) + i, s - i); + if (n<=0) { + run_state_callback(stream, CUBEB_STATE_ERROR); + break; + } + i+=n; + } + stream->written_frags+=got; + } + } + return NULL; +} + +static void oss_try_set_latency(cubeb_stream* stream, unsigned int latency) +{ + unsigned int latency_bytes, n_frag; + int frag; + /* fragment size of 1024 is a good choice with good chances to be accepted */ + unsigned int frag_size=1024; + unsigned int frag_log=10; /* 2^frag_log = frag_size */ + latency_bytes = + latency*stream->params.rate*stream->params.channels*sizeof(uint16_t)/1000; + n_frag = latency_bytes>>frag_log; + frag = (n_frag<<16) | frag_log; + /* Even if this fails we wish to continue, not checking for errors */ + ioctl(stream->fd, SNDCTL_DSP_SETFRAGMENT, &frag); +} + +static int oss_stream_init(cubeb * context, cubeb_stream ** stm, + char const * stream_name, + cubeb_stream_params stream_params, + unsigned int latency, + cubeb_data_callback data_callback, + cubeb_state_callback state_callback, void * user_ptr) +{ + cubeb_stream* stream = (cubeb_stream*)malloc(sizeof(cubeb_stream)); + stream->context = context; + stream->data_callback = data_callback; + stream->state_callback = state_callback; + stream->user_ptr = user_ptr; + + if ((stream->fd = open(CUBEB_OSS_DEFAULT_OUTPUT, O_WRONLY)) == -1) { + free(stream); + return CUBEB_ERROR; + } +#define SET(what, to) do { unsigned int i = to; \ + int j = ioctl(stream->fd, what, &i); \ + if (j == -1 || i != to) { \ + close(stream->fd); \ + free(stream); \ + return CUBEB_ERROR_INVALID_FORMAT; } } while (0) + + stream->params = stream_params; + stream->volume = 1.0; + stream->panning = 0.0; + + oss_try_set_latency(stream, latency); + + stream->floating = 0; + SET(SNDCTL_DSP_CHANNELS, stream_params.channels); + SET(SNDCTL_DSP_SPEED, stream_params.rate); + switch (stream_params.format) { + case CUBEB_SAMPLE_S16LE: + SET(SNDCTL_DSP_SETFMT, AFMT_S16_LE); + break; + case CUBEB_SAMPLE_S16BE: + SET(SNDCTL_DSP_SETFMT, AFMT_S16_BE); + break; + case CUBEB_SAMPLE_FLOAT32LE: + SET(SNDCTL_DSP_SETFMT, AFMT_S16_NE); + stream->floating = 1; + break; + default: + close(stream->fd); + free(stream); + return CUBEB_ERROR; + } + + + pthread_mutex_init(&stream->state_mutex, NULL); + pthread_cond_init(&stream->state_cond, NULL); + + stream->running = 1; + stream->stopped = 1; + stream->position_bytes = 0; + stream->last_position_bytes = 0; + stream->written_frags = 0; + stream->missed_frags = 0; + + pthread_create(&stream->th, NULL, writer, (void*)stream); + + *stm = stream; + + return CUBEB_OK; +} + +static void oss_stream_destroy(cubeb_stream * stream) +{ + pthread_mutex_lock(&stream->state_mutex); + + stream->running = 0; + stream->stopped = 0; + pthread_cond_signal(&stream->state_cond); + + pthread_mutex_unlock(&stream->state_mutex); + + pthread_join(stream->th, NULL); + + pthread_mutex_destroy(&stream->state_mutex); + pthread_cond_destroy(&stream->state_cond); + close(stream->fd); + free(stream); +} + +static int oss_stream_get_latency(cubeb_stream * stream, uint32_t * latency) +{ + if (ioctl(stream->fd, SNDCTL_DSP_GETODELAY, latency)==-1) { + return CUBEB_ERROR; + } + /* Convert latency from bytes to frames */ + *latency /= stream->params.channels*sizeof(int16_t); + return CUBEB_OK; +} + + +static int oss_stream_current_optr(cubeb_stream * stream, uint64_t * position) +{ + count_info ci; + /* Unfortunately, this ioctl is only available in OSS 4.x */ +#ifdef SNDCTL_DSP_CURRENT_OPTR + oss_count_t count; + if (ioctl(stream->fd, SNDCTL_DSP_CURRENT_OPTR, &count) != -1) { + *position = count.samples;// + count.fifo_samples; + return CUBEB_OK; + } +#endif + /* Fall back to this ioctl in case the previous one fails */ + if (ioctl(stream->fd, SNDCTL_DSP_GETOPTR, &ci) == -1) { + return CUBEB_ERROR; + } + /* ci.bytes is only 32 bit and will start to wrap after arithmetic overflow */ + stream->position_bytes += ci.bytes - stream->last_position_bytes; + stream->last_position_bytes = ci.bytes; + *position = stream->position_bytes/stream->params.channels/sizeof(int16_t); + return CUBEB_OK; +} + +static int oss_stream_get_position(cubeb_stream * stream, uint64_t * position) +{ + if ( oss_stream_current_optr(stream, position) == CUBEB_OK ){ + *position -= stream->missed_frags; + return CUBEB_OK; + } + /* If no correct method to get position works we resort to this */ + *position = stream->written_frags; + return CUBEB_OK; +} + + +static int oss_stream_start(cubeb_stream * stream) +{ + pthread_mutex_lock(&stream->state_mutex); + if (stream->stopped) { + uint64_t ptr; + oss_stream_current_optr(stream, &ptr); + stream->missed_frags = ptr - stream->written_frags; + stream->stopped = 0; + pthread_cond_signal(&stream->state_cond); + } + pthread_mutex_unlock(&stream->state_mutex); + return CUBEB_OK; +} + +static int oss_stream_stop(cubeb_stream * stream) +{ + pthread_mutex_lock(&stream->state_mutex); + stream->stopped = 1; + pthread_mutex_unlock(&stream->state_mutex); + return CUBEB_OK; +} + +int oss_stream_set_panning(cubeb_stream * stream, float panning) +{ + if (stream->params.channels == 2) { + stream->panning=panning; + } + return CUBEB_OK; +} + +int oss_stream_set_volume(cubeb_stream * stream, float volume) +{ + stream->volume=volume; + return CUBEB_OK; +} + +static struct cubeb_ops const oss_ops = { + .init = oss_init, + .get_backend_id = oss_get_backend_id, + .get_max_channel_count = oss_get_max_channel_count, + .get_min_latency = oss_get_min_latency, + .get_preferred_sample_rate = oss_get_preferred_sample_rate, + .destroy = oss_destroy, + .stream_init = oss_stream_init, + .stream_destroy = oss_stream_destroy, + .stream_start = oss_stream_start, + .stream_stop = oss_stream_stop, + .stream_get_position = oss_stream_get_position, -+ .stream_get_latency = oss_stream_get_latency ++ .stream_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/Makefile.in media/webrtc/signaling/test/Makefile.in +diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build 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 +--- 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'] --ifdef MOZ_ALSA -+ifdef MOZ_OSS - LIBS += \ -- $(MOZ_ALSA_LIBS) \ -+ $(MOZ_OSS_LIBS) \ - $(NULL) - endif +-if CONFIG['MOZ_ALSA']: +- OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] ++if CONFIG['MOZ_OSS']: ++ OS_LIBS += CONFIG['MOZ_OSS_LIBS'] -diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk + 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/libxul.mk -+++ toolkit/library/libxul.mk -@@ -146,9 +146,9 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32 - endif - endif +--- toolkit/library/moz.build ++++ toolkit/library/moz.build +@@ -234,8 +234,8 @@ if CONFIG['MOZ_NATIVE_LIBVPX']: + if not CONFIG['MOZ_TREE_PIXMAN']: + OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] --ifdef MOZ_ALSA --EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS) --endif -+ifdef MOZ_OSS -+EXTRA_DSO_LDOPTS += $(MOZ_OSS_LIBS) -+endif +-if CONFIG['MOZ_ALSA']: +- OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] ++if CONFIG['MOZ_OSS']: ++ OS_LIBS += CONFIG['MOZ_OSS_LIBS'] - ifdef HAVE_CLOCK_MONOTONIC - EXTRA_DSO_LDOPTS += $(REALTIME_LIBS) + if CONFIG['HAVE_CLOCK_MONOTONIC']: + OS_LIBS += CONFIG['REALTIME_LIBS'] Index: branches/2015Q3/www/libxul/files/patch-bug1041268 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1041268 (nonexistent) +++ branches/2015Q3/www/libxul/files/patch-bug1041268 (revision 392767) @@ -0,0 +1,26 @@ +diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc +index 97f69d3..77a50b3 100644 +--- media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc ++++ media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc +@@ -18,7 +18,7 @@ ScreenCapturer* ScreenCapturer::Create() { + return Create(DesktopCaptureOptions::CreateDefault()); + } + +-#if defined(WEBRTC_LINUX) ++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) + ScreenCapturer* ScreenCapturer::CreateWithXDamage( + bool use_update_notifications) { + DesktopCaptureOptions options; +diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h +index a8d40a7..177a6c1 100644 +--- media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h ++++ media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h +@@ -74,7 +74,7 @@ class ScreenCapturer : public DesktopCapturer { + static ScreenCapturer* Create(const DesktopCaptureOptions& options); + static ScreenCapturer* Create(); + +-#if defined(WEBRTC_LINUX) ++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) + // Creates platform-specific capturer and instructs it whether it should use + // X DAMAGE support. + static ScreenCapturer* CreateWithXDamage(bool use_x_damage); Property changes on: branches/2015Q3/www/libxul/files/patch-bug1041268 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1073117 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1073117 (nonexistent) +++ branches/2015Q3/www/libxul/files/patch-bug1073117 (revision 392767) @@ -0,0 +1,877 @@ +diff --git widget/gtk/gtk2drawing.c widget/gtk/gtk2drawing.c +index 34f22af..1b950ab 100644 +--- widget/gtk/gtk2drawing.c ++++ widget/gtk/gtk2drawing.c +@@ -831,7 +831,7 @@ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) + return MOZ_GTK_SUCCESS; + } + +-gint ++static gint + moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, + gint* focus_width, gint* focus_pad) + { +@@ -928,7 +928,7 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) + return MOZ_GTK_SUCCESS; + } + +-gint ++static gint + moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) + { + static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; +diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c +index 08a58d6..7fef6fa 100644 +--- widget/gtk/gtk3drawing.c ++++ widget/gtk/gtk3drawing.c +@@ -65,6 +65,7 @@ static GtkWidget* gScrolledWindowWidget; + static style_prop_t style_prop_func; + static gboolean have_arrow_scaling; + static gboolean checkbox_check_state; ++static gboolean notebook_has_tab_gap; + static gboolean is_initialized; + + #define ARROW_UP 0 +@@ -725,6 +726,14 @@ moz_gtk_init() + else + checkbox_check_state = GTK_STATE_FLAG_ACTIVE; + ++ if(!gtk_check_version(3, 12, 0)) { ++ ensure_tab_widget(); ++ gtk_widget_style_get(gTabWidget, "has-tab-gap", ¬ebook_has_tab_gap, NULL); ++ } ++ else { ++ notebook_has_tab_gap = TRUE; ++ } ++ + /* Add style property to GtkEntry. + * Adding the style property to the normal GtkEntry class means that it + * will work without issues inside GtkComboBox and for Spinbuttons. */ +@@ -762,37 +771,17 @@ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing) + gint + moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) + { +- gboolean interior_focus; +- gint focus_width = 0; ++ GtkBorder border; ++ GtkBorder padding; ++ GtkStyleContext *style; + + ensure_entry_widget(); +- gtk_widget_style_get(gEntryWidget, +- "interior-focus", &interior_focus, +- "focus-line-width", &focus_width, +- NULL); +- if (interior_focus) { +- GtkBorder border; +- GtkStyleContext *style = gtk_widget_get_style_context(gEntryWidget); +- gtk_style_context_get_border(style, 0, &border); +- *focus_h_width = border.left + focus_width; +- *focus_v_width = border.top + focus_width; +- } else { +- *focus_h_width = focus_width; +- *focus_v_width = focus_width; +- } +- return MOZ_GTK_SUCCESS; +-} +- +-gint +-moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, +- gint* focus_width, gint* focus_pad) +-{ +- gtk_widget_style_get (widget, +- "interior-focus", interior_focus, +- "focus-line-width", focus_width, +- "focus-padding", focus_pad, +- NULL); ++ style = gtk_widget_get_style_context(gEntryWidget); + ++ gtk_style_context_get_border(style, 0, &border); ++ gtk_style_context_get_padding(style, 0, &padding); ++ *focus_h_width = border.left + padding.left; ++ *focus_v_width = border.top + padding.top; + return MOZ_GTK_SUCCESS; + } + +@@ -880,24 +860,6 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) + return MOZ_GTK_SUCCESS; + } + +-gint +-moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) +-{ +- static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; +- GtkBorder *tmp_border; +- +- gtk_widget_style_get (widget, "inner-border", &tmp_border, NULL); +- +- if (tmp_border) { +- *inner_border = *tmp_border; +- gtk_border_free(tmp_border); +- } +- else +- *inner_border = default_inner_border; +- +- return MOZ_GTK_SUCCESS; +-} +- + static gint + moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, + GtkWidgetState* state, +@@ -908,19 +870,8 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, + GtkStyleContext* style = gtk_widget_get_style_context(widget); + gint x = rect->x, y=rect->y, width=rect->width, height=rect->height; + +- gboolean interior_focus; +- gint focus_width, focus_pad; +- +- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); + gtk_widget_set_direction(widget, direction); +- +- if (!interior_focus && state->focused) { +- x += focus_width + focus_pad; +- y += focus_width + focus_pad; +- width -= 2 * (focus_width + focus_pad); +- height -= 2 * (focus_width + focus_pad); +- } +- ++ + gtk_style_context_save(style); + gtk_style_context_set_state(style, state_flags); + +@@ -953,20 +904,12 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, + } + + if (state->focused) { +- if (interior_focus) { +- GtkBorder border; +- gtk_style_context_get_border(style, state_flags, &border); +- x += border.left + focus_pad; +- y += border.top + focus_pad; +- width -= 2 * (border.left + focus_pad); +- height -= 2 * (border.top + focus_pad); +- } else { +- x -= focus_width + focus_pad; +- y -= focus_width + focus_pad; +- width += 2 * (focus_width + focus_pad); +- height += 2 * (focus_width + focus_pad); +- } +- ++ GtkBorder border; ++ gtk_style_context_get_border(style, state_flags, &border); ++ x += border.left; ++ y += border.top; ++ width -= (border.left + border.right); ++ height -= (border.top + border.bottom); + gtk_render_focus(style, cr, x, y, width, height); + } + gtk_style_context_restore(style); +@@ -1056,33 +999,23 @@ calculate_button_inner_rect(GtkWidget* button, GdkRectangle* rect, + GtkTextDirection direction, + gboolean ignore_focus) + { +- GtkBorder inner_border; +- gboolean interior_focus; +- gint focus_width, focus_pad; + GtkStyleContext* style; + GtkBorder border; ++ GtkBorder padding = {0, 0, 0, 0}; + + style = gtk_widget_get_style_context(button); + + /* This mirrors gtkbutton's child positioning */ +- moz_gtk_button_get_inner_border(button, &inner_border); +- moz_gtk_widget_get_focus(button, &interior_focus, +- &focus_width, &focus_pad); +- +- if (ignore_focus) +- focus_width = focus_pad = 0; +- + gtk_style_context_get_border(style, 0, &border); ++ if (!ignore_focus) ++ gtk_style_context_get_padding(style, 0, &padding); + +- inner_rect->x = rect->x + border.left + focus_width + focus_pad; +- inner_rect->x += direction == GTK_TEXT_DIR_LTR ? +- inner_border.left : inner_border.right; +- inner_rect->y = rect->y + inner_border.top + border.top + +- focus_width + focus_pad; +- inner_rect->width = MAX(1, rect->width - inner_border.left - +- inner_border.right - (border.left + focus_pad + focus_width) * 2); +- inner_rect->height = MAX(1, rect->height - inner_border.top - +- inner_border.bottom - (border.top + focus_pad + focus_width) * 2); ++ inner_rect->x = rect->x + border.left + padding.left; ++ inner_rect->y = rect->y + padding.top + border.top; ++ inner_rect->width = MAX(1, rect->width - padding.left - ++ padding.right - border.left * 2); ++ inner_rect->height = MAX(1, rect->height - padding.top - ++ padding.bottom - border.top * 2); + + return MOZ_GTK_SUCCESS; + } +@@ -1457,19 +1390,12 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, + { + gint x = rect->x, y = rect->y, width = rect->width, height = rect->height; + GtkStyleContext* style; +- gboolean interior_focus; +- gint focus_width; + int draw_focus_outline_only = state->depressed; // NS_THEME_FOCUS_OUTLINE + + gtk_widget_set_direction(widget, direction); + + style = gtk_widget_get_style_context(widget); + +- gtk_widget_style_get(widget, +- "interior-focus", &interior_focus, +- "focus-line-width", &focus_width, +- NULL); +- + if (draw_focus_outline_only) { + // Inflate the given 'rect' with the focus outline size. + gint h, v; +@@ -1501,14 +1427,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, + /* This will get us the lit borders that focused textboxes enjoy on + * some themes. */ + gtk_style_context_set_state(style, GTK_STATE_FLAG_FOCUSED); +- if (!interior_focus) { +- /* Indent the border a little bit if we have exterior focus +- (this is what GTK does to draw native entries) */ +- x += focus_width; +- y += focus_width; +- width -= 2 * focus_width; +- height -= 2 * focus_width; +- } + } + + if (state->disabled) { +@@ -1520,11 +1438,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, + } + gtk_render_frame(style, cr, x, y, width, height); + +- if (state->focused && !state->disabled) { +- if (!interior_focus) { +- gtk_render_focus(style, cr, rect->x, rect->y, rect->width, rect->height); +- } +- } + gtk_style_context_restore(style); + + return MOZ_GTK_SUCCESS; +@@ -1829,8 +1742,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, + GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); + GtkStyleContext* style; + GtkWidget *widget; +- gboolean interior_focus; +- gint focus_width, focus_pad; + + if (isradio) { + ensure_radiobutton_widget(); +@@ -1843,7 +1754,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, + + style = gtk_widget_get_style_context(widget); + gtk_style_context_save(style); +- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); + gtk_style_context_set_state(style, state_flags); + + /* this is for drawing a prelight box */ +@@ -1852,10 +1762,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, + rect->x, rect->y, rect->width, rect->height); + } + +- if (state->focused && !interior_focus) { +- gtk_render_focus(style, cr, +- rect->x, rect->y, rect->width, rect->height); +- } + gtk_style_context_restore(style); + + return MOZ_GTK_SUCCESS; +@@ -1868,7 +1774,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, + { + GtkStyleContext *style; + GtkWidget *widget; +- gboolean interior_focus; + + if (!state->focused) + return MOZ_GTK_SUCCESS; +@@ -1889,10 +1794,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, + } + gtk_widget_set_direction(widget, direction); + +- gtk_widget_style_get(widget, "interior-focus", &interior_focus, NULL); +- if (!interior_focus) +- return MOZ_GTK_SUCCESS; +- + gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state)); + gtk_render_focus(style, cr, + rect->x, rect->y, rect->width, rect->height); +@@ -2105,6 +2015,9 @@ moz_gtk_get_tab_thickness(void) + GtkStyleContext * style; + + ensure_tab_widget(); ++ if (!notebook_has_tab_gap) ++ return 0; /* tabs do not overdraw the tabpanel border with "no gap" style */ ++ + style = gtk_widget_get_style_context(gTabWidget); + gtk_style_context_add_class(style, GTK_STYLE_CLASS_NOTEBOOK); + gtk_style_context_get_border(style, 0, &border); +@@ -2150,7 +2063,7 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, + ensure_tab_widget(); + gtk_widget_set_direction(gTabWidget, direction); + +- style = gtk_widget_get_style_context(gTabWidget); ++ style = gtk_widget_get_style_context(gTabWidget); + gtk_style_context_save(style); + moz_gtk_tab_prepare_style_context(style, flags); + +@@ -2167,143 +2080,155 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, + + focusRect = backRect = tabRect; + +- if ((flags & MOZ_GTK_TAB_SELECTED) == 0) { +- /* Only draw the tab */ +- gtk_render_extension(style, cr, +- tabRect.x, tabRect.y, tabRect.width, tabRect.height, +- (flags & MOZ_GTK_TAB_BOTTOM) ? +- GTK_POS_TOP : GTK_POS_BOTTOM ); +- } else { +- /* Draw the tab and the gap +- * We want the gap to be positioned exactly on the tabpanel top +- * border; since tabbox.css may set a negative margin so that the tab +- * frame rect already overlaps the tabpanel frame rect, we need to take +- * that into account when drawing. To that effect, nsNativeThemeGTK +- * passes us this negative margin (bmargin in the graphic below) in the +- * lowest bits of |flags|. We use it to set gap_voffset, the distance +- * between the top of the gap and the bottom of the tab (resp. the +- * bottom of the gap and the top of the tab when we draw a bottom tab), +- * while ensuring that the gap always touches the border of the tab, +- * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results +- * with big negative or positive margins. +- * Here is a graphical explanation in the case of top tabs: +- * ___________________________ +- * / \ +- * | T A B | +- * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel +- * : ^ bmargin : ^ +- * : | (-negative margin, : | +- * bottom : v passed in flags) : | gap_height +- * of -> :.............................: | (the size of the +- * the tab . part of the gap . | tabpanel top border) +- * . outside of the tab . v +- * ---------------------------------------------- +- * +- * To draw the gap, we use gtk_paint_box_gap(), see comment in +- * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall, +- * which should suffice to ensure that the only visible border is the +- * pierced one. If the tab is in the middle, we make the box_gap begin +- * a bit to the left of the tab and end a bit to the right, adjusting +- * the gap position so it still is under the tab, because we want the +- * rendering of a gap in the middle of a tabpanel. This is the role of +- * the gints gap_{l,r}_offset. On the contrary, if the tab is the +- * first, we align the start border of the box_gap with the start +- * border of the tab (left if LTR, right if RTL), by setting the +- * appropriate offset to 0.*/ +- gint gap_loffset, gap_roffset, gap_voffset, gap_height; +- +- /* Get height needed by the gap */ +- gap_height = moz_gtk_get_tab_thickness(); +- +- /* Extract gap_voffset from the first bits of flags */ +- gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK; +- if (gap_voffset > gap_height) +- gap_voffset = gap_height; +- +- /* Set gap_{l,r}_offset to appropriate values */ +- gap_loffset = gap_roffset = 20; /* should be enough */ +- if (flags & MOZ_GTK_TAB_FIRST) { +- if (direction == GTK_TEXT_DIR_RTL) +- gap_roffset = initial_gap; +- else +- gap_loffset = initial_gap; +- } +- +- if (flags & MOZ_GTK_TAB_BOTTOM) { +- /* Draw the tab on bottom */ +- focusRect.y += gap_voffset; +- focusRect.height -= gap_voffset; +- ++ if (notebook_has_tab_gap) { ++ if ((flags & MOZ_GTK_TAB_SELECTED) == 0) { ++ /* Only draw the tab */ + gtk_render_extension(style, cr, +- tabRect.x, tabRect.y + gap_voffset, tabRect.width, +- tabRect.height - gap_voffset, GTK_POS_TOP); +- +- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); +- +- backRect.y += (gap_voffset - gap_height); +- backRect.height = gap_height; +- +- /* Draw the gap; erase with background color before painting in +- * case theme does not */ +- gtk_render_background(style, cr, backRect.x, backRect.y, +- backRect.width, backRect.height); +- cairo_save(cr); +- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); +- cairo_clip(cr); +- +- gtk_render_frame_gap(style, cr, +- tabRect.x - gap_loffset, +- tabRect.y + gap_voffset - 3 * gap_height, +- tabRect.width + gap_loffset + gap_roffset, +- 3 * gap_height, GTK_POS_BOTTOM, +- gap_loffset, gap_loffset + tabRect.width); +- cairo_restore(cr); ++ tabRect.x, tabRect.y, tabRect.width, tabRect.height, ++ (flags & MOZ_GTK_TAB_BOTTOM) ? ++ GTK_POS_TOP : GTK_POS_BOTTOM ); + } else { +- /* Draw the tab on top */ +- focusRect.height -= gap_voffset; +- gtk_render_extension(style, cr, +- tabRect.x, tabRect.y, tabRect.width, +- tabRect.height - gap_voffset, GTK_POS_BOTTOM); +- +- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); +- +- backRect.y += (tabRect.height - gap_voffset); +- backRect.height = gap_height; +- +- /* Draw the gap; erase with background color before painting in +- * case theme does not */ +- gtk_render_background(style, cr, backRect.x, backRect.y, +- backRect.width, backRect.height); +- +- cairo_save(cr); +- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); +- cairo_clip(cr); +- +- gtk_render_frame_gap(style, cr, +- tabRect.x - gap_loffset, +- tabRect.y + tabRect.height - gap_voffset, +- tabRect.width + gap_loffset + gap_roffset, +- 3 * gap_height, GTK_POS_TOP, +- gap_loffset, gap_loffset + tabRect.width); +- cairo_restore(cr); ++ /* Draw the tab and the gap ++ * We want the gap to be positioned exactly on the tabpanel top ++ * border; since tabbox.css may set a negative margin so that the tab ++ * frame rect already overlaps the tabpanel frame rect, we need to take ++ * that into account when drawing. To that effect, nsNativeThemeGTK ++ * passes us this negative margin (bmargin in the graphic below) in the ++ * lowest bits of |flags|. We use it to set gap_voffset, the distance ++ * between the top of the gap and the bottom of the tab (resp. the ++ * bottom of the gap and the top of the tab when we draw a bottom tab), ++ * while ensuring that the gap always touches the border of the tab, ++ * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results ++ * with big negative or positive margins. ++ * Here is a graphical explanation in the case of top tabs: ++ * ___________________________ ++ * / \ ++ * | T A B | ++ * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel ++ * : ^ bmargin : ^ ++ * : | (-negative margin, : | ++ * bottom : v passed in flags) : | gap_height ++ * of -> :.............................: | (the size of the ++ * the tab . part of the gap . | tabpanel top border) ++ * . outside of the tab . v ++ * ---------------------------------------------- ++ * ++ * To draw the gap, we use gtk_paint_box_gap(), see comment in ++ * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall, ++ * which should suffice to ensure that the only visible border is the ++ * pierced one. If the tab is in the middle, we make the box_gap begin ++ * a bit to the left of the tab and end a bit to the right, adjusting ++ * the gap position so it still is under the tab, because we want the ++ * rendering of a gap in the middle of a tabpanel. This is the role of ++ * the gints gap_{l,r}_offset. On the contrary, if the tab is the ++ * first, we align the start border of the box_gap with the start ++ * border of the tab (left if LTR, right if RTL), by setting the ++ * appropriate offset to 0.*/ ++ gint gap_loffset, gap_roffset, gap_voffset, gap_height; ++ ++ /* Get height needed by the gap */ ++ gap_height = moz_gtk_get_tab_thickness(); ++ ++ /* Extract gap_voffset from the first bits of flags */ ++ gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK; ++ if (gap_voffset > gap_height) ++ gap_voffset = gap_height; ++ ++ /* Set gap_{l,r}_offset to appropriate values */ ++ gap_loffset = gap_roffset = 20; /* should be enough */ ++ if (flags & MOZ_GTK_TAB_FIRST) { ++ if (direction == GTK_TEXT_DIR_RTL) ++ gap_roffset = initial_gap; ++ else ++ gap_loffset = initial_gap; ++ } ++ ++ if (flags & MOZ_GTK_TAB_BOTTOM) { ++ /* Draw the tab on bottom */ ++ focusRect.y += gap_voffset; ++ focusRect.height -= gap_voffset; ++ ++ gtk_render_extension(style, cr, ++ tabRect.x, tabRect.y + gap_voffset, tabRect.width, ++ tabRect.height - gap_voffset, GTK_POS_TOP); ++ ++ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); ++ ++ backRect.y += (gap_voffset - gap_height); ++ backRect.height = gap_height; ++ ++ /* Draw the gap; erase with background color before painting in ++ * case theme does not */ ++ gtk_render_background(style, cr, backRect.x, backRect.y, ++ backRect.width, backRect.height); ++ cairo_save(cr); ++ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); ++ cairo_clip(cr); ++ ++ gtk_render_frame_gap(style, cr, ++ tabRect.x - gap_loffset, ++ tabRect.y + gap_voffset - 3 * gap_height, ++ tabRect.width + gap_loffset + gap_roffset, ++ 3 * gap_height, GTK_POS_BOTTOM, ++ gap_loffset, gap_loffset + tabRect.width); ++ cairo_restore(cr); ++ } else { ++ /* Draw the tab on top */ ++ focusRect.height -= gap_voffset; ++ gtk_render_extension(style, cr, ++ tabRect.x, tabRect.y, tabRect.width, ++ tabRect.height - gap_voffset, GTK_POS_BOTTOM); ++ ++ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); ++ ++ backRect.y += (tabRect.height - gap_voffset); ++ backRect.height = gap_height; ++ ++ /* Draw the gap; erase with background color before painting in ++ * case theme does not */ ++ gtk_render_background(style, cr, backRect.x, backRect.y, ++ backRect.width, backRect.height); ++ ++ cairo_save(cr); ++ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); ++ cairo_clip(cr); ++ ++ gtk_render_frame_gap(style, cr, ++ tabRect.x - gap_loffset, ++ tabRect.y + tabRect.height - gap_voffset, ++ tabRect.width + gap_loffset + gap_roffset, ++ 3 * gap_height, GTK_POS_TOP, ++ gap_loffset, gap_loffset + tabRect.width); ++ cairo_restore(cr); ++ } + } ++ } else { ++ gtk_render_background(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height); ++ gtk_render_frame(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height); + } + ++ gtk_style_context_restore(style); ++ + if (state->focused) { + /* Paint the focus ring */ +- GtkBorder border; +- gtk_style_context_get_border(style, GetStateFlagsFromGtkWidgetState(state), &border); ++ GtkBorder padding; ++ ++ gtk_style_context_save(style); ++ moz_gtk_tab_prepare_style_context(style, flags); + +- focusRect.x += border.left; +- focusRect.width -= (border.left + border.right); +- focusRect.y += border.top; +- focusRect.height -= (border.top + border.bottom); ++ gtk_style_context_get_padding(style, GetStateFlagsFromGtkWidgetState(state), &padding); ++ ++ focusRect.x += padding.left; ++ focusRect.width -= (padding.left + padding.right); ++ focusRect.y += padding.top; ++ focusRect.height -= (padding.top + padding.bottom); + + gtk_render_focus(style, cr, + focusRect.x, focusRect.y, focusRect.width, focusRect.height); ++ ++ gtk_style_context_restore(style); + } + +- gtk_style_context_restore(style); + + return MOZ_GTK_SUCCESS; + } +@@ -2684,26 +2609,18 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + switch (widget) { + case MOZ_GTK_BUTTON: + { +- GtkBorder inner_border; +- gboolean interior_focus; +- gint focus_width, focus_pad; +- + ensure_button_widget(); ++ style = gtk_widget_get_style_context(gButtonWidget); ++ + *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget)); + + /* Don't add this padding in HTML, otherwise the buttons will + become too big and stuff the layout. */ + if (!inhtml) { +- moz_gtk_widget_get_focus(gButtonWidget, &interior_focus, &focus_width, &focus_pad); +- moz_gtk_button_get_inner_border(gButtonWidget, &inner_border); +- *left += focus_width + focus_pad + inner_border.left; +- *right += focus_width + focus_pad + inner_border.right; +- *top += focus_width + focus_pad + inner_border.top; +- *bottom += focus_width + focus_pad + inner_border.bottom; ++ moz_gtk_add_style_padding(style, left, top, right, bottom); + } + +- moz_gtk_add_style_border(gtk_widget_get_style_context(gButtonWidget), +- left, top, right, bottom); ++ moz_gtk_add_style_border(style, left, top, right, bottom); + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_ENTRY: +@@ -2717,7 +2610,13 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + ensure_entry_widget(); + style = gtk_widget_get_style_context(gEntryWidget); + moz_gtk_add_style_border(style, left, top, right, bottom); +- moz_gtk_add_style_padding(style, left, top, right, bottom); ++ ++ /* Use the document padding in HTML ++ and GTK style padding in XUL. */ ++ if (!inhtml) { ++ moz_gtk_add_style_padding(style, left, top, right, bottom); ++ } ++ + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_TREEVIEW: +@@ -2737,23 +2636,15 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + * assigned. + * That is why the following code is the same as for MOZ_GTK_BUTTON. + * */ +- +- GtkBorder inner_border; +- gboolean interior_focus; +- gint focus_width, focus_pad; ++ GtkStyleContext *style; + + ensure_tree_header_cell_widget(); + *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gTreeHeaderCellWidget)); + +- moz_gtk_widget_get_focus(gTreeHeaderCellWidget, &interior_focus, &focus_width, &focus_pad); +- moz_gtk_button_get_inner_border(gTreeHeaderCellWidget, &inner_border); +- *left += focus_width + focus_pad + inner_border.left; +- *right += focus_width + focus_pad + inner_border.right; +- *top += focus_width + focus_pad + inner_border.top; +- *bottom += focus_width + focus_pad + inner_border.bottom; +- +- moz_gtk_add_style_border(gtk_widget_get_style_context(gTreeHeaderCellWidget), +- left, top, right, bottom); ++ style = gtk_widget_get_style_context(gTreeHeaderCellWidget); ++ ++ moz_gtk_add_style_border(style, left, top, right, bottom); ++ moz_gtk_add_style_padding(style, left, top, right, bottom); + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_TREE_HEADER_SORTARROW: +@@ -2773,29 +2664,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + /* We need to account for the arrow on the dropdown, so text + * doesn't come too close to the arrow, or in some cases spill + * into the arrow. */ +- gboolean ignored_interior_focus, wide_separators; +- gint focus_width, focus_pad, separator_width; ++ gboolean wide_separators; ++ gint separator_width; + GtkRequisition arrow_req; + GtkBorder border; + + ensure_combo_box_widgets(); + +- *left = gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); ++ *left = *top = *right = *bottom = ++ gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); ++ ++ style = gtk_widget_get_style_context(gComboBoxButtonWidget); + + if (!inhtml) { +- moz_gtk_widget_get_focus(gComboBoxButtonWidget, +- &ignored_interior_focus, +- &focus_width, &focus_pad); +- *left += focus_width + focus_pad; ++ moz_gtk_add_style_padding(style, left, top, right, bottom); + } + +- style = gtk_widget_get_style_context(gComboBoxButtonWidget); +- gtk_style_context_get_border(style, 0, &border); +- +- *top = *left + border.top; +- *left += border.left; +- +- *right = *left; *bottom = *top; ++ moz_gtk_add_style_border(style, left, top, right, bottom); + + /* If there is no separator, don't try to count its width. */ + separator_width = 0; +@@ -2847,60 +2732,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + ensure_frame_widget(); + w = gFrameWidget; + break; +- case MOZ_GTK_CHECKBUTTON_LABEL: +- case MOZ_GTK_RADIOBUTTON_LABEL: +- { +- gboolean interior_focus; +- gint focus_width, focus_pad; +- +- /* If the focus is interior, then the label has a border of +- (focus_width + focus_pad). */ +- if (widget == MOZ_GTK_CHECKBUTTON_LABEL) { +- ensure_checkbox_widget(); +- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, +- &focus_width, &focus_pad); +- } +- else { +- ensure_radiobutton_widget(); +- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, +- &focus_width, &focus_pad); +- } +- +- if (interior_focus) +- *left = *top = *right = *bottom = (focus_width + focus_pad); +- +- return MOZ_GTK_SUCCESS; +- } +- + case MOZ_GTK_CHECKBUTTON_CONTAINER: + case MOZ_GTK_RADIOBUTTON_CONTAINER: + { +- gboolean interior_focus; +- gint focus_width, focus_pad; +- +- /* If the focus is _not_ interior, then the container has a border +- of (focus_width + focus_pad). */ + if (widget == MOZ_GTK_CHECKBUTTON_CONTAINER) { + ensure_checkbox_widget(); +- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, +- &focus_width, &focus_pad); + w = gCheckboxWidget; + } else { + ensure_radiobutton_widget(); +- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, +- &focus_width, &focus_pad); + w = gRadiobuttonWidget; + } ++ style = gtk_widget_get_style_context(w); + + *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w)); +- +- if (!interior_focus) { +- *left += (focus_width + focus_pad); +- *right += (focus_width + focus_pad); +- *top += (focus_width + focus_pad); +- *bottom += (focus_width + focus_pad); +- } +- ++ moz_gtk_add_style_border(style, ++ left, top, right, bottom); ++ moz_gtk_add_style_padding(style, ++ left, top, right, bottom); + return MOZ_GTK_SUCCESS; + } + case MOZ_GTK_MENUPOPUP: +@@ -2927,6 +2775,8 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, + return MOZ_GTK_SUCCESS; + } + /* These widgets have no borders, since they are not containers. */ ++ case MOZ_GTK_CHECKBUTTON_LABEL: ++ case MOZ_GTK_RADIOBUTTON_LABEL: + case MOZ_GTK_SPLITTER_HORIZONTAL: + case MOZ_GTK_SPLITTER_VERTICAL: + case MOZ_GTK_CHECKBUTTON: +@@ -2975,11 +2849,7 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, + gtk_style_context_save(style); + moz_gtk_tab_prepare_style_context(style, flags); + +- // TODO add_style_border() should be replaced +- // with focus-line-width and focus-padding +- // see Bug 877605 + *left = *top = *right = *bottom = 0; +- moz_gtk_add_style_border(style, left, top, right, bottom); + moz_gtk_add_style_padding(style, left, top, right, bottom); + + gtk_widget_style_get (gTabWidget, "tab-curvature", &tab_curvature, NULL); +@@ -2990,16 +2860,9 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, + int initial_gap; + gtk_widget_style_get (gTabWidget, "initial-gap", &initial_gap, NULL); + if (direction == GTK_TEXT_DIR_RTL) +- *right += initial_gap; ++ *right += initial_gap; + else +- *left += initial_gap; +- } +- +- // Top tabs have no bottom border, bottom tabs have no top border +- if (flags & MOZ_GTK_TAB_BOTTOM) { +- *top = 0; +- } else { +- *bottom = 0; ++ *left += initial_gap; + } + + gtk_style_context_restore(style); +diff --git widget/gtk/gtkdrawing.h widget/gtk/gtkdrawing.h +index 1938e8f..5f71cfd 100644 +--- widget/gtk/gtkdrawing.h ++++ widget/gtk/gtkdrawing.h +@@ -293,16 +293,6 @@ moz_gtk_checkbox_get_metrics(gint* indicator_size, gint* indicator_spacing); + gint + moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing); + +-/** +- * Get the inner-border value for a GtkButton widget (button or tree header) +- * widget: [IN] the widget to get the border value for +- * inner_border: [OUT] the inner border +- * +- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise +- */ +-gint +-moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); +- + /** Get the extra size for the focus ring for outline:auto. + * widget: [IN] the widget to get the focus metrics for + * focus_h_width: [OUT] the horizontal width +@@ -313,19 +303,6 @@ moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); + gint + moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width); + +-/** Get the focus metrics for a treeheadercell, button, checkbox, or radio button. +- * widget: [IN] the widget to get the focus metrics for +- * interior_focus: [OUT] whether the focus is drawn around the +- * label (TRUE) or around the whole container (FALSE) +- * focus_width: [OUT] the width of the focus line +- * focus_pad: [OUT] the padding between the focus line and children +- * +- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise +- */ +-gint +-moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, +- gint* focus_width, gint* focus_pad); +- + /** Get the horizontal padding for the menuitem widget or checkmenuitem widget. + * horizontal_padding: [OUT] The left and right padding of the menuitem or checkmenuitem + * +diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp +index e5e1867..76d28e3 100644 +--- widget/gtk/nsNativeThemeGTK.cpp ++++ widget/gtk/nsNativeThemeGTK.cpp +@@ -761,6 +761,8 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType, + return false; + + gint gap_height = moz_gtk_get_tab_thickness(); ++ if (!gap_height) ++ return false; + + int32_t extra = gap_height - GetTabMarginPixels(aFrame); + if (extra <= 0) Property changes on: branches/2015Q3/www/libxul/files/patch-bug1073117 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1130155 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1130155 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug1130155 (revision 392767) @@ -1,172 +1,179 @@ commit eab3e3a Author: Mikhail Teterin Date: Tue Dec 16 19:34:02 2014 -0800 Bug 1130155 - Avoid assert failures when consuming only part of buffer. --- media/libcubeb/src/cubeb_alsa.c | 112 ++++++++++++++++++++++++++++++---------- 1 file changed, 85 insertions(+), 27 deletions(-) diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c index 9bbc129..e72944a 100644 --- media/libcubeb/src/cubeb_alsa.c +++ media/libcubeb/src/cubeb_alsa.c @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include #include #include "cubeb/cubeb.h" @@ -45,6 +47,7 @@ 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_forward); MAKE_TYPEDEF(snd_pcm_frames_to_bytes); MAKE_TYPEDEF(snd_pcm_get_params); /* snd_pcm_hw_params_alloca is actually a macro */ @@ -305,32 +308,35 @@ alsa_refill_stream(cubeb_stream * stm) long got; void * p; int draining; + unsigned pipefailures, againfailures; draining = 0; pthread_mutex_lock(&stm->mutex); - 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. - Unfortunately, this does happen, so just bail out and try again. */ - pthread_mutex_unlock(&stm->mutex); - return RUNNING; - } + for (pipefailures = 0;;) { + r = WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents); + if (r < 0 || revents != POLLOUT || + (avail = WRAP(snd_pcm_avail_update)(stm->pcm)) == 0) { + /* 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. + Unfortunately, this does happen, so just bail out and try again. */ + pthread_mutex_unlock(&stm->mutex); + return RUNNING; + } - avail = WRAP(snd_pcm_avail_update)(stm->pcm); - if (avail == -EPIPE) { + if (avail > 0) + break; + if (pipefailures++ > 11) { + fprintf(stderr, "%s: repeated failures from snd_pcm_avail_update, " + "giving up\n", __func__); + pthread_mutex_unlock(&stm->mutex); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + return ERROR; + } 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. */ - if (avail < 0) { - pthread_mutex_unlock(&stm->mutex); - stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); - return ERROR; } + pipefailures = againfailures = 0; /* This should never happen. */ if ((unsigned int) avail > stm->buffer_size) { -@@ -355,17 +361,67 @@ alsa_refill_stream(cubeb_stream * stm) +@@ -359,10 +365,11 @@ alsa_refill_stream(cubeb_stream * stm) if (got < 0) { pthread_mutex_unlock(&stm->mutex); stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + free(p); return ERROR; } if (got > 0) { -- snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); +- snd_pcm_sframes_t wrote; ++ snd_pcm_sframes_t wrote, towrite = got; + + if (stm->params.format == CUBEB_SAMPLE_FLOAT32NE) { + float * b = (float *) p; +@@ -375,14 +382,62 @@ alsa_refill_stream(cubeb_stream * stm) + b[i] *= stm->volume; + } + } +- wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); - if (wrote == -EPIPE) { - 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; -- gettimeofday(&stm->last_activity, NULL); -+ snd_pcm_sframes_t wrote, towrite = got; + for (;;) { + wrote = WRAP(snd_pcm_writei)(stm->pcm, p, + towrite > avail ? avail : towrite); + switch(wrote) { + case -EPIPE: + if (pipefailures++ > 3) { + fprintf(stderr, "%s: Too many underflows, giving up\n", __func__); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + free(p); + return ERROR; + } + WRAP(snd_pcm_recover)(stm->pcm, wrote, 1); + continue; + case -EAGAIN: + if (againfailures++ > 3) { + fprintf(stderr, "%s: Too many -EAGAIN errors from snd_pcm_writei, " + "giving up\n", __func__); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + free(p); + return ERROR; + } + continue; + case -EBADFD: + fprintf(stderr, "%s: snc_pcm_writei returned -%s, giving up\n", + __func__, "EBADFD"); + free(p); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + return ERROR; + } + if (wrote < 0) { + fprintf(stderr, "%s: snc_pcm_writei returned unexpected error %lld, " + "giving up\n", __func__, (long long)wrote); + free(p); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + return ERROR; + } + pipefailures = againfailures = 0; + stm->write_position += wrote; + gettimeofday(&stm->last_activity, NULL); + if (wrote > towrite) { + fprintf(stderr, "%s: snc_pcm_writei wrote %lld frames, which was more " + "than we requested (%lld). This should not happen, giving up\n", + __func__, (long long)wrote, (long long)towrite); + free(p); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + pthread_mutex_unlock(&stm->mutex); + return ERROR; + } + if (towrite == wrote) + break; + towrite -= wrote; -+ } + } +- assert(wrote >= 0 && wrote == got); +- stm->write_position += wrote; +- gettimeofday(&stm->last_activity, NULL); } if (got != avail) { long buffer_fill = stm->buffer_size - (avail - got); @@ -1177,7 +1232,10 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) return CUBEB_OK; } - assert(delay >= 0); + if (delay < 0) { + WRAP(snd_pcm_forward)(stm->pcm, -delay); + delay = 0; + } *position = 0; if (stm->write_position >= (snd_pcm_uframes_t) delay) { Index: branches/2015Q3/www/libxul/files/patch-bug1138845 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1138845 (nonexistent) +++ branches/2015Q3/www/libxul/files/patch-bug1138845 (revision 392767) @@ -0,0 +1,134 @@ +commit 4b5b332 +Author: Mike Hommey +Date: Tue Mar 3 18:41:13 2015 +0900 + + Bug 1138845 - Don't require atk-bridge for gtk+3 builds. r=tbsaunde +--- + accessible/atk/Platform.cpp | 29 +++++++++++++++++++---------- + config/system-headers | 1 - + configure.in | 2 +- + 3 files changed, 20 insertions(+), 12 deletions(-) + +diff --git accessible/atk/Platform.cpp accessible/atk/Platform.cpp +index a2afd96..2ed5e0b 100644 +--- accessible/atk/Platform.cpp ++++ accessible/atk/Platform.cpp +@@ -18,8 +18,9 @@ + #include + #endif + #include ++ + #if (MOZ_WIDGET_GTK == 3) +-#include ++extern "C" __attribute__((weak,visibility("default"))) int atk_bridge_adaptor_init(int*, char **[]); + #endif + + using namespace mozilla; +@@ -46,7 +47,6 @@ static gulong sToplevel_hide_hook = 0; + + GType g_atk_hyperlink_impl_type = G_TYPE_INVALID; + +-#if (MOZ_WIDGET_GTK == 2) + struct GnomeAccessibilityModule + { + const char *libName; +@@ -67,11 +67,13 @@ static GnomeAccessibilityModule sAtkBridge = { + "gnome_accessibility_module_shutdown", nullptr + }; + ++#if (MOZ_WIDGET_GTK == 2) + static GnomeAccessibilityModule sGail = { + "libgail.so", nullptr, + "gnome_accessibility_module_init", nullptr, + "gnome_accessibility_module_shutdown", nullptr + }; ++#endif + + static nsresult + LoadGtkModule(GnomeAccessibilityModule& aModule) +@@ -98,7 +100,11 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) + else + subLen = loc2 - loc1; + nsAutoCString sub(Substring(libPath, loc1, subLen)); ++#if (MOZ_WIDGET_GTK == 2) + sub.AppendLiteral("/gtk-2.0/modules/"); ++#else ++ sub.AppendLiteral("/gtk-3.0/modules/"); ++#endif + sub.Append(aModule.libName); + aModule.lib = PR_LoadLibrary(sub.get()); + if (aModule.lib) +@@ -123,7 +129,6 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) + } + return NS_OK; + } +-#endif // (MOZ_WIDGET_GTK == 2) + + void + a11y::PlatformInit() +@@ -175,14 +180,17 @@ a11y::PlatformInit() + + // Init atk-bridge now + PR_SetEnv("NO_AT_BRIDGE=0"); +-#if (MOZ_WIDGET_GTK == 2) +- rv = LoadGtkModule(sAtkBridge); +- if (NS_SUCCEEDED(rv)) { +- (*sAtkBridge.init)(); +- } +-#else +- atk_bridge_adaptor_init(nullptr, nullptr); ++#if (MOZ_WIDGET_GTK == 3) ++ if (atk_bridge_adaptor_init) { ++ atk_bridge_adaptor_init(nullptr, nullptr); ++ } else + #endif ++ { ++ nsresult rv = LoadGtkModule(sAtkBridge); ++ if (NS_SUCCEEDED(rv)) { ++ (*sAtkBridge.init)(); ++ } ++ } + + if (!sToplevel_event_hook_added) { + sToplevel_event_hook_added = true; +@@ -210,7 +218,6 @@ a11y::PlatformShutdown() + sToplevel_hide_hook); + } + +-#if (MOZ_WIDGET_GTK == 2) + if (sAtkBridge.lib) { + // Do not shutdown/unload atk-bridge, + // an exit function registered will take care of it +@@ -221,6 +228,7 @@ a11y::PlatformShutdown() + sAtkBridge.init = nullptr; + sAtkBridge.shutdown = nullptr; + } ++#if (MOZ_WIDGET_GTK == 2) + if (sGail.lib) { + // Do not shutdown gail because + // 1) Maybe it's not init-ed by us. e.g. GtkEmbed +diff --git config/system-headers config/system-headers +index 2c94a7d..cf01775 100644 +--- config/system-headers ++++ config/system-headers +@@ -189,7 +189,6 @@ asm/signal.h + ASRegistry.h + assert.h + atk/atk.h +-atk-bridge.h + atlcom.h + atlconv.h + atlctl.cpp +diff --git configure.in configure.in +index 0bd1eb7..f3b3365 100644 +--- configure.in ++++ configure.in +@@ -4408,7 +4408,7 @@ fi + + if test "$COMPILE_ENVIRONMENT"; then + if test "$MOZ_ENABLE_GTK3"; then +- PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 atk-bridge-2.0 $GDK_PACKAGES) ++ PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 $GDK_PACKAGES) + MOZ_GTK3_CFLAGS="-I${_topsrcdir}/widget/gtk/compat-gtk3 $MOZ_GTK3_CFLAGS" + dnl Contrary to MOZ_GTK2_LIBS, MOZ_GTK3_LIBS needs to be literally added to TK_LIBS instead + dnl of a make reference because of how TK_LIBS is mangled in toolkit/library/moz.build Property changes on: branches/2015Q3/www/libxul/files/patch-bug1138845 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1143686 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1143686 (nonexistent) +++ branches/2015Q3/www/libxul/files/patch-bug1143686 (revision 392767) @@ -0,0 +1,46 @@ +commit e50e738 +Author: Martin Stransky +Date: Mon Mar 16 08:00:00 2015 -0400 + + Bug 1143686 - Gtk3 - Render scrollbar thumb with margin. r=karlt +--- + widget/gtk/gtk3drawing.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c +index 17f46ab..08a58d6 100644 +--- widget/gtk/gtk3drawing.c ++++ widget/gtk/gtk3drawing.c +@@ -1230,6 +1230,7 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, + GtkStyleContext* style; + GtkScrollbar *scrollbar; + GtkAdjustment *adj; ++ GtkBorder margin; + + ensure_scrollbar_widget(); + +@@ -1239,15 +1240,20 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, + scrollbar = GTK_SCROLLBAR(gVertScrollbarWidget); + + gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction); +- ++ + style = gtk_widget_get_style_context(GTK_WIDGET(scrollbar)); + gtk_style_context_save(style); +- ++ + gtk_style_context_add_class(style, GTK_STYLE_CLASS_SLIDER); + gtk_style_context_set_state(style, state_flags); + +- gtk_render_slider(style, cr, rect->x, rect->y, +- rect->width, rect->height, ++ gtk_style_context_get_margin (style, state_flags, &margin); ++ ++ gtk_render_slider(style, cr, ++ rect->x + margin.left, ++ rect->y + margin.top, ++ rect->width - margin.left - margin.right, ++ rect->height - margin.top - margin.bottom, + (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) ? + GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL); + Property changes on: branches/2015Q3/www/libxul/files/patch-bug1143686 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug1144643 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug1144643 (nonexistent) +++ branches/2015Q3/www/libxul/files/patch-bug1144643 (revision 392767) @@ -0,0 +1,33 @@ +commit a0ccc19 +Author: Martin Stransky +Date: Wed Mar 18 07:14:00 2015 -0400 + + Bug 1144643 - Render tooltips as transparent on Gtk3. r=karlt + + --HG-- + extra : rebase_source : 23085532b27350ca71cbe18db071628388003f33 +--- + widget/gtk/nsNativeThemeGTK.cpp | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp +index e5e1867..26d13a5 100644 +--- widget/gtk/nsNativeThemeGTK.cpp ++++ widget/gtk/nsNativeThemeGTK.cpp +@@ -1528,9 +1528,15 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType) + case NS_THEME_MENUPOPUP: + case NS_THEME_WINDOW: + case NS_THEME_DIALOG: +- // Tooltips use gtk_paint_flat_box(). ++ return eOpaque; ++ // Tooltips use gtk_paint_flat_box() on Gtk2 ++ // but are shaped on Gtk3 + case NS_THEME_TOOLTIP: ++#if (MOZ_WIDGET_GTK == 2) + return eOpaque; ++#else ++ return eTransparent; ++#endif + } + + return eUnknownTransparency; Property changes on: branches/2015Q3/www/libxul/files/patch-bug1144643 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-bug702179 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug702179 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug702179 (revision 392767) @@ -1,36 +1,24 @@ commit 6ddaacd Author: Ginn Chen Date: Wed Nov 30 07:23:46 2011 +0800 Bug 702179 dtrace probes are not installed on Solaris with static js lib r=glandium --- - configure.in | 2 +- - js/src/Makefile.in | 2 -- - 2 files changed, 1 insertion(+), 3 deletions(-) + js/src/Makefile.in | 3 --- + toolkit/library/moz.build | 5 ----- + 2 files changed, 8 deletions(-) -diff --git configure.in configure.in -index 66549c1..75b848d 100644 ---- configure.in -+++ configure.in -@@ -966,7 +966,7 @@ MOZ_BZ2_LIBS='$(call EXPAND_LIBNAME_PATH,bz2,$(DEPTH)/modules/libbz2/src)' - MOZ_PNG_CFLAGS="-I$_objdir/dist/include" # needed for freetype compilation - MOZ_PNG_LIBS='$(call EXPAND_LIBNAME_PATH,mozpng,$(DEPTH)/media/libpng)' - --MOZ_JS_STATIC_LIBS='$(call EXPAND_LIBNAME_PATH,js_static,$(LIBXUL_DIST)/lib)' -+MOZ_JS_STATIC_LIBS='$(call EXPAND_LIBNAME_PATH,js_static,$(DEPTH)/js/src)' - MOZ_JS_SHARED_LIBS='$(call EXPAND_LIBNAME_PATH,mozjs,$(LIBXUL_DIST)/lib)' - MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(LIBXUL_DIST)/bin -Wl,-rpath-link,$(prefix)/lib' - XPCOM_FROZEN_LDOPTS='$(call EXPAND_LIBNAME_PATH,xul mozalloc,$(LIBXUL_DIST)/bin)' diff --git js/src/Makefile.in js/src/Makefile.in -index e28160a..28ca5e8 100644 +index 62bbfa0..90400cb 100644 --- js/src/Makefile.in +++ js/src/Makefile.in -@@ -18,8 +18,6 @@ run_for_side_effects := $(shell echo 'MAKE: $(MAKE)') - STATIC_LIBRARY_NAME = js_static - LIBS = $(NSPR_LIBS) +@@ -17,9 +17,6 @@ TOPLEVEL_BUILD := 1 + run_for_side_effects := $(shell echo 'MAKE: $(MAKE)') + EXTRA_LIBS += $(NSPR_LIBS) -DIST_INSTALL = 1 +-NO_EXPAND_LIBS = 1 - - ifdef JS_STANDALONE - SHARED_LIBRARY_LIBS += $(call EXPAND_LIBNAME_PATH,mfbt,$(DEPTH)/mfbt) - ifndef MOZ_NATIVE_ZLIB + ifdef JS_HAS_CTYPES + ifdef MOZ_NATIVE_FFI + LOCAL_INCLUDES = $(MOZ_FFI_CFLAGS) Index: branches/2015Q3/www/libxul/files/patch-bug779713 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug779713 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug779713 (revision 392767) @@ -1,77 +1,77 @@ diff --git mfbt/Alignment.h mfbt/Alignment.h index e0843ca..353ec36 100644 --- mfbt/Alignment.h +++ mfbt/Alignment.h @@ -9,11 +9,20 @@ #ifndef mozilla_Alignment_h #define mozilla_Alignment_h +#include "mozilla/Attributes.h" + #include #include namespace mozilla { +#if defined(MOZ_HAVE_CXX11_ALIGNAS) +#define MOZ_ALIGNOF(T) alignof(T) +#elif defined(__GNUC__) +#define MOZ_ALIGNOF(T) __alignof__(T) +#elif defined(_MSC_VER) +#define MOZ_ALIGNOF(T) __alignof(T) +#else /* * This class, and the corresponding macro MOZ_ALIGNOF, figures out how many * bytes of alignment a given type needs. @@ -32,6 +41,7 @@ public: }; #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment +#endif /* * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. @@ -43,7 +53,10 @@ public: * will declare a two-character array |arr| aligned to 8 bytes. */ -#if defined(__GNUC__) +#if defined(MOZ_HAVE_CXX11_ALIGNAS) +# define MOZ_ALIGNED_DECL(_type, _align) \ + alignas(_align) _type +#elif defined(__GNUC__) # define MOZ_ALIGNED_DECL(_type, _align) \ _type __attribute__((aligned(_align))) #elif defined(_MSC_VER) diff --git mfbt/Attributes.h mfbt/Attributes.h index d317766..ddb13da 100644 --- mfbt/Attributes.h +++ mfbt/Attributes.h -@@ -54,6 +54,9 @@ +@@ -50,6 +50,7 @@ + * don't indicate support for them here, due to + * http://stackoverflow.com/questions/20498142/visual-studio-2013-explicit-keyword-bug + */ ++# define MOZ_HAVE_CXX11_ALIGNAS + # define MOZ_HAVE_NEVER_INLINE __declspec(noinline) + # define MOZ_HAVE_NORETURN __declspec(noreturn) + # ifdef __clang__ +@@ -70,6 +71,9 @@ # ifndef __has_extension # define __has_extension __has_feature /* compatibility, for older versions of clang */ # endif +# if __has_extension(cxx_alignas) +# define MOZ_HAVE_CXX11_ALIGNAS +# endif # if __has_extension(cxx_constexpr) # define MOZ_HAVE_CXX11_CONSTEXPR # endif -@@ -75,6 +78,9 @@ +@@ -84,6 +88,9 @@ # endif #elif defined(__GNUC__) # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L +# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) +# define MOZ_HAVE_CXX11_ALIGNAS +# endif - # if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0) - # define MOZ_HAVE_CXX11_OVERRIDE - # define MOZ_HAVE_CXX11_FINAL final -@@ -96,6 +102,7 @@ - # define MOZ_HAVE_NORETURN __attribute__((noreturn)) - #elif defined(_MSC_VER) - # if _MSC_VER >= 1800 -+# define MOZ_HAVE_CXX11_ALIGNAS - # define MOZ_HAVE_CXX11_DELETE + # define MOZ_HAVE_CXX11_CONSTEXPR + # define MOZ_HAVE_EXPLICIT_CONVERSION # endif - # if _MSC_VER >= 1700 Index: branches/2015Q3/www/libxul/files/patch-bug826985 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug826985 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug826985 (revision 392767) @@ -1,179 +1,179 @@ commit 8024d93 Author: Henrik Gulbrandsen Date: Fri Jan 4 13:49:22 2013 +0100 Bug 826985 - Support more video formats for WebRTC via libv4l2 on Linux. --- config/system-headers | 1 + configure.in | 7 +++++++ media/webrtc/signaling/test/Makefile.in | 1 + .../modules/video_capture/linux/device_info_linux.cc | 17 +++++++++++++++++ .../modules/video_capture/linux/video_capture_linux.cc | 16 +++++++++++++++- .../webrtc/modules/video_capture/video_capture.gypi | 11 +++++++++++ toolkit/library/Makefile.in | 1 + 6 files changed, 52 insertions(+), 1 deletion(-) diff --git config/system-headers config/system-headers index 55e4cd1..76567b3 100644 --- config/system-headers +++ config/system-headers @@ -635,6 +635,7 @@ libgnomevfs/gnome-vfs-mime-handlers.h libgnomevfs/gnome-vfs-mime-utils.h libgnomevfs/gnome-vfs-ops.h libgnomevfs/gnome-vfs-standard-callbacks.h +libv4l2.h lib$routines.h limits limits.h diff --git configure.in configure.in index 55e4cd1..76567b3 100644 --- configure.in +++ configure.in @@ -5309,6 +5309,9 @@ if test -n "$MOZ_WEBRTC"; then MOZ_VP8_ENCODER=1 MOZ_VP8_ERROR_CONCEALMENT=1 + dnl with libv4l2 we can support more cameras + PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) + dnl enable once Signaling lands MOZ_WEBRTC_SIGNALING=1 AC_DEFINE(MOZ_WEBRTC_SIGNALING) diff --git build/gyp.mozbuild build/gyp.mozbuild index b483cd1..f1dd1f0 100644 --- build/gyp.mozbuild +++ build/gyp.mozbuild @@ -11,6 +11,7 @@ gyp_vars = { 'have_ethtool_cmd_speed_hi': 1 if CONFIG['MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI'] else 0, 'include_alsa_audio': 1 if CONFIG['MOZ_ALSA'] else 0, 'include_pulse_audio': 1 if CONFIG['MOZ_PULSEAUDIO'] else 0, + 'use_libv4l2': 1 if CONFIG['MOZ_LIBV4L2_LIBS'] else 0, # basic stuff for everything 'include_internal_video_render': 0, 'clang_use_chrome_plugins': 0, -diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in +diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build index b483cd1..f1dd1f0 100644 ---- media/webrtc/signaling/test/Makefile.in -+++ media/webrtc/signaling/test/Makefile.in -@@ -7,6 +7,7 @@ LIBS = \ - $(NSPR_LIBS) \ - $(NSS_LIBS) \ - $(REALTIME_LIBS) \ -+ $(MOZ_LIBV4L2_LIBS) \ - $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \ - $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \ - $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \ +--- media/webrtc/signaling/test/moz.build ++++ media/webrtc/signaling/test/moz.build +@@ -122,6 +122,7 @@ if CONFIG['JS_SHARED_LIBRARY']: + 'js', + ] + ++OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS'] + OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] + OS_LIBS += CONFIG['REALTIME_LIBS'] + diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc index 239a292..bab496c 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc +++ media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc @@ -25,10 +25,21 @@ #else #include #endif +#ifdef HAVE_LIBV4L2 +#include +#endif #include "webrtc/system_wrappers/interface/ref_count.h" #include "webrtc/system_wrappers/interface/trace.h" +#ifdef HAVE_LIBV4L2 +#define open v4l2_open +#define close v4l2_close +#define dup v4l2_dup +#define ioctl v4l2_ioctl +#define mmap v4l2_mmap +#define munmap v4l2_munmap +#endif namespace webrtc { @@ -130,6 +142,11 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( memset(deviceNameUTF8, 0, deviceNameLength); memcpy(cameraName, cap.card, sizeof(cap.card)); + if (cameraName[0] == '\0') + { + sprintf(cameraName, "Camera at /dev/video%d", deviceNumber); + } + if (deviceNameLength >= strlen(cameraName)) { memcpy(deviceNameUTF8, cameraName, strlen(cameraName)); diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc index 12df1b3..e9863ba 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc +++ media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc @@ -25,6 +25,9 @@ #else #include #endif +#ifdef HAVE_LIBV4L2 +#include +#endif #include @@ -26,6 +31,15 @@ #include "critical_section_wrapper.h" #include "video_capture_linux.h" +#ifdef HAVE_LIBV4L2 +#define open v4l2_open +#define close v4l2_close +#define dup v4l2_dup +#define ioctl v4l2_ioctl +#define mmap v4l2_mmap +#define munmap v4l2_munmap +#endif + namespace webrtc { namespace videocapturemodule diff --git media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi index d46b5aa..e452223 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi +++ media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi @@ -7,6 +7,9 @@ # be found in the AUTHORS file in the root of the source tree. { + 'variables': { + 'use_libv4l2%': 0, + }, 'targets': [ { 'target_name': 'video_capture_module', -@@ -49,6 +52,16 @@ - }, { # include_internal_video_capture == 1 - 'conditions': [ - ['include_v4l2_video_capture==1', { -+ 'conditions': [ -+ ['use_libv4l2==1', { -+ 'defines': [ -+ 'HAVE_LIBV4L2', -+ ], -+ 'libraries': [ -+ '-lv4l2', -+ ], -+ }], +@@ -69,6 +72,19 @@ + 'linux/video_capture_linux.cc', + 'linux/video_capture_linux.h', + ], ++ 'conditions': [ ++ ['use_libv4l2==1', { ++ 'defines': [ ++ 'HAVE_LIBV4L2', + ], - 'include_dirs': [ - 'linux', - ], -diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in ++ 'cflags_mozilla': [ ++ '$(MOZ_LIBV4L2_CFLAGS)', ++ ], ++ 'libraries': [ ++ '-lv4l2', ++ ], ++ }], ++ ], + }], # linux + ['OS=="mac"', { + 'sources': [ +diff --git toolkit/library/moz.build toolkit/library/moz.build index 9c16ffa..1db3794 100644 ---- toolkit/library/libxul.mk -+++ toolkit/library/libxul.mk -@@ -182,6 +182,10 @@ endif +--- toolkit/library/moz.build ++++ toolkit/library/moz.build +@@ -163,6 +163,7 @@ if CONFIG['OS_ARCH'] == 'Linux' and CONF + ] - EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib) + OS_LIBS += CONFIG['MOZ_CAIRO_OSLIBS'] ++OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS'] + OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] + OS_LIBS += CONFIG['MOZ_APP_EXTRA_LIBS'] -+ifdef MOZ_LIBV4L2_LIBS -+EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS) -+endif -+ - ifdef MOZ_WEBRTC - ifeq (WINNT,$(OS_TARGET)) - EXTRA_DSO_LDOPTS += \ Index: branches/2015Q3/www/libxul/files/patch-bug847568 =================================================================== --- branches/2015Q3/www/libxul/files/patch-bug847568 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-bug847568 (revision 392767) @@ -1,208 +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 -@@ -77,6 +77,8 @@ export:: $(export-preqs) +@@ -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 -@@ -1145,3 +1145,11 @@ unicode/utypes.h +@@ -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 -@@ -8032,6 +8032,52 @@ if test "$USE_FC_FREETYPE"; then +@@ -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) ++ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 0.9.34) +fi + +AC_SUBST(MOZ_NATIVE_HARFBUZZ) -+AC_SUBST(MOZ_HARFBUZZ_CFLAGS) -+AC_SUBST(MOZ_HARFBUZZ_LIBS) + +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) -+AC_SUBST(MOZ_GRAPHITE2_CFLAGS) -+AC_SUBST(MOZ_GRAPHITE2_LIBS) + +dnl ======================================================== dnl Check for pixman and cairo dnl ======================================================== -diff --git content/base/src/moz.build content/base/src/moz.build -index d4f6380..0ee55df 100644 ---- content/base/src/moz.build -+++ content/base/src/moz.build -@@ -179,6 +179,9 @@ SOURCES += [ +diff --git dom/base/moz.build dom/base/moz.build +index a660ba4..6b2f602 100644 +--- dom/base/moz.build ++++ dom/base/moz.build +@@ -196,6 +196,9 @@ SOURCES += [ 'nsObjectLoadingContent.cpp', ] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: -+ SOURCES['nsContentUtils.cpp'].flags += [CONFIG['MOZ_HARFBUZZ_CFLAGS']] ++ 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/Makefile.in gfx/skia/Makefile.in -index ee0efb2..98e169d6f 100644 ---- gfx/skia/Makefile.in -+++ gfx/skia/Makefile.in -@@ -15,6 +15,10 @@ ifeq (qt,$(MOZ_WIDGET_TOOLKIT)) - OS_CXXFLAGS += $(MOZ_CAIRO_CFLAGS) $(MOZ_PANGO_CFLAGS) $(CAIRO_FT_CFLAGS) - endif +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'] -+ifdef MOZ_NATIVE_HARFBUZZ -+OS_CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_HARFBUZZ']: ++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + - include $(topsrcdir)/config/rules.mk + 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'] - ifeq ($(CPU_ARCH)_$(GNU_CC),arm_1) -diff --git gfx/thebes/Makefile.in gfx/thebes/Makefile.in -index 45c36ae..79d32cf 100644 ---- gfx/thebes/Makefile.in -+++ gfx/thebes/Makefile.in -@@ -13,6 +13,14 @@ DEFINES := $(filter-out -DUNICODE,$(DEFINES)) - CXXFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS) - CFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS) ++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'] -+ifdef MOZ_NATIVE_GRAPHITE2 -+CXXFLAGS += $(MOZ_GRAPHITE2_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_HARFBUZZ']: ++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + -+ifdef MOZ_NATIVE_HARFBUZZ -+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_GRAPHITE2']: ++ CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS'] + - ifeq ($(MOZ_WIDGET_TOOLKIT),android) - CXXFLAGS += $(CAIRO_FT_CFLAGS) - endif -diff --git intl/unicharutil/util/Makefile.in intl/unicharutil/util/Makefile.in -index f6b9f7c..60863f4 100644 ---- intl/unicharutil/util/Makefile.in -+++ intl/unicharutil/util/Makefile.in -@@ -21,3 +21,7 @@ ifdef _MSC_VER - OS_COMPILE_CXXFLAGS += -Zl - OS_COMPILE_CFLAGS += -Zl - endif -+ -+ifdef MOZ_NATIVE_HARFBUZZ -+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS) -+endif -diff --git netwerk/dns/Makefile.in netwerk/dns/Makefile.in -index 1cacbd7..f5d72bb 100644 ---- netwerk/dns/Makefile.in -+++ netwerk/dns/Makefile.in -@@ -5,6 +5,10 @@ + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('android', 'gonk', 'qt'): + CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] - include $(topsrcdir)/config/rules.mk +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']: -+ifdef MOZ_NATIVE_HARFBUZZ -+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS) -+endif + if CONFIG['ENABLE_INTL_API']: + CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS'] + - # Generate the include file containing compact, static definitions - # for effective TLD data. - etld_data.inc: $(srcdir)/prepare_tlds.py $(srcdir)/effective_tld_names.dat -diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk ++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 +@@ -64,3 +64,6 @@ GENERATED_FILES = [ + LOCAL_INCLUDES += [ + '/netwerk/base', + ] ++ ++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/libxul.mk -+++ toolkit/library/libxul.mk -@@ -89,6 +89,14 @@ ifndef MOZ_TREE_PIXMAN - EXTRA_DSO_LDOPTS += $(MOZ_PIXMAN_LIBS) - endif +--- 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'] -+ifdef MOZ_NATIVE_GRAPHITE2 -+EXTRA_DSO_LDOPTS += $(MOZ_GRAPHITE2_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_GRAPHITE2']: ++ OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS'] + -+ifdef MOZ_NATIVE_HARFBUZZ -+EXTRA_DSO_LDOPTS += $(MOZ_HARFBUZZ_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_HARFBUZZ']: ++ OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS'] + - ifdef MOZ_DMD - EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,dmd,$(DIST)/lib) - endif + if CONFIG['MOZ_OSS']: + OS_LIBS += CONFIG['MOZ_OSS_LIBS'] + Index: branches/2015Q3/www/libxul/files/patch-ijg-libjpeg =================================================================== --- branches/2015Q3/www/libxul/files/patch-ijg-libjpeg (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-ijg-libjpeg (revision 392767) @@ -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) + #if MOZ_BIG_ENDIAN #define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_XRGB #else #define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_BGRX #endif +#else +/* Colorspace conversion (copied from jpegint.h) */ +struct jpeg_color_deconverter { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, color_convert, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows)); +}; + +METHODDEF(void) +ycc_rgb_convert_argb (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows); +#endif +} static void cmyk_convert_rgb(JSAMPROW row, JDIMENSION width); -@@ -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: branches/2015Q3/www/libxul/files/patch-media-libstagefright-foundation-AString.cpp =================================================================== --- branches/2015Q3/www/libxul/files/patch-media-libstagefright-foundation-AString.cpp (nonexistent) +++ branches/2015Q3/www/libxul/files/patch-media-libstagefright-foundation-AString.cpp (revision 392767) @@ -0,0 +1,16 @@ +--- media/libstagefright/frameworks/av/media/libstagefright/foundation/AString.cpp~ ++++ media/libstagefright/frameworks/av/media/libstagefright/foundation/AString.cpp +@@ -23,6 +23,13 @@ + #include "ADebug.h" + #include "AString.h" + ++#ifdef __FreeBSD__ ++# include ++# if __FreeBSD_version < 900506 ++# undef tolower ++# endif ++#endif ++ + namespace stagefright { + + // static Property changes on: branches/2015Q3/www/libxul/files/patch-media-libstagefright-foundation-AString.cpp ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-system-openh264 =================================================================== --- branches/2015Q3/www/libxul/files/patch-system-openh264 (nonexistent) +++ branches/2015Q3/www/libxul/files/patch-system-openh264 (revision 392767) @@ -0,0 +1,239 @@ +# Revert bug 1045209 to allow using absolute path + +diff --git dom/media/gmp/GMPChild.cpp dom/media/gmp/GMPChild.cpp +index 1dde3ac..12c88cf 100644 +--- dom/media/gmp/GMPChild.cpp ++++ dom/media/gmp/GMPChild.cpp +@@ -76,21 +76,14 @@ GetFileBase(const std::string& aPluginPa + } + #endif + +- nsCOMPtr parent; +- rv = aFileBase->GetParent(getter_AddRefs(parent)); +- if (NS_FAILED(rv)) { +- return false; +- } +- +- nsAutoString parentLeafName; +- rv = parent->GetLeafName(parentLeafName); +- if (NS_FAILED(rv)) { ++ nsAutoString leafName; ++ if (NS_FAILED(aFileBase->GetLeafName(leafName))) { + return false; + } + +- aBaseName = Substring(parentLeafName, ++ aBaseName = Substring(leafName, + 4, +- parentLeafName.Length() - 1); ++ leafName.Length() - 1); + return true; + } + +diff --git dom/media/gmp/GMPParent.cpp dom/media/gmp/GMPParent.cpp +index aa60acf..90878ca 100644 +--- dom/media/gmp/GMPParent.cpp ++++ dom/media/gmp/GMPParent.cpp +@@ -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 +@@ -888,9 +889,7 @@ + let gmpAddon = this._gmpAddon; + let installToDirPath = Cc["@mozilla.org/file/local;1"]. + createInstance(Ci.nsIFile); +- let path = OS.Path.join(OS.Constants.Path.profileDir, +- gmpAddon.id, +- gmpAddon.version); ++ let path = OS.Path.join(OS.Constants.Path.profileDir, gmpAddon.id); + installToDirPath.initWithPath(path); + log.info("install to directory path: " + installToDirPath.path); + let gmpInstaller = new GMPExtractor(zipPath, installToDirPath.path); +@@ -885,10 +883,12 @@ + // Success, set the prefs + let now = Math.round(Date.now() / 1000); + GMPPrefs.set(GMPPrefs.KEY_PLUGIN_LAST_UPDATE, now, gmpAddon.id); +- // Setting the version pref signals installation completion to consumers, +- // if you need to set other prefs etc. do it before this. ++ // Setting the path pref signals installation completion to consumers, ++ // so set the version and potential other information they use first. + GMPPrefs.set(GMPPrefs.KEY_PLUGIN_VERSION, gmpAddon.version, + gmpAddon.id); ++ GMPPrefs.set(GMPPrefs.KEY_PLUGIN_PATH, ++ installToDirPath.path, gmpAddon.id); + this._deferred.resolve(extractedPaths); + }, err => { + this._deferred.reject(err); +diff --git toolkit/modules/GMPUtils.jsm toolkit/modules/GMPUtils.jsm +index 1f3a0b1..93517be 100644 +--- toolkit/modules/GMPUtils.jsm ++++ toolkit/modules/GMPUtils.jsm +@@ -70,6 +70,7 @@ this.GMPPrefs = { + KEY_EME_ENABLED: "media.eme.enabled", + KEY_PLUGIN_ENABLED: "media.{0}.enabled", + KEY_PLUGIN_LAST_UPDATE: "media.{0}.lastUpdate", ++ KEY_PLUGIN_PATH: "media.{0}.path", + KEY_PLUGIN_VERSION: "media.{0}.version", + KEY_PLUGIN_AUTOUPDATE: "media.{0}.autoupdate", + KEY_PLUGIN_FORCEVISIBLE: "media.{0}.forcevisible", +diff --git toolkit/mozapps/extensions/internal/GMPProvider.jsm toolkit/mozapps/extensions/internal/GMPProvider.jsm +index 1f3a0b1..93517be 100644 +--- toolkit/mozapps/extensions/internal/GMPProvider.jsm ++++ toolkit/mozapps/extensions/internal/GMPProvider.jsm +@@ -100,12 +100,11 @@ + Log.repository.getLoggerWithMessagePrefix("Toolkit.GMP", + "GMPWrapper(" + + this._plugin.id + ") "); +- Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, +- this._plugin.id), ++ Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, this._plugin.id), + this.onPrefEnabledChanged, this); +- Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION, ++ Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH, + this._plugin.id), +- this.onPrefVersionChanged, this); ++ this.onPrefPathChanged, this); + if (this._plugin.isEME) { + Preferences.observe(GMPPrefs.KEY_EME_ENABLED, + this.onPrefEMEGlobalEnabledChanged, this); +@@ -120,17 +119,14 @@ + optionsType: AddonManager.OPTIONS_TYPE_INLINE, + get optionsURL() { return this._plugin.optionsURL; }, + ++ + set gmpPath(aPath) { this._gmpPath = aPath; }, + get gmpPath() { +- if (!this._gmpPath && this.isInstalled) { +- this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir, +- this._plugin.id, +- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, +- null, this._plugin.id)); ++ if (!this._gmpPath) { ++ this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); + } + return this._gmpPath; + }, +- + get id() { return this._plugin.id; }, + get type() { return "plugin"; }, + get isGMPlugin() { return true; }, +@@ -141,8 +137,13 @@ + get description() { return this._plugin.description; }, + get fullDescription() { return this._plugin.fullDescription; }, + +- get version() { return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null, +- this._plugin.id); }, ++ get version() { ++ if (this.isInstalled) { ++ return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null, ++ this._plugin.id); ++ } ++ return null; ++ }, + + get isActive() { return !this.appDisabled && !this.userDisabled; }, + get appDisabled() { +@@ -289,24 +290,17 @@ + + get pluginMimeTypes() { return []; }, + get pluginLibraries() { +- if (this.isInstalled) { +- let path = this.version; +- return [path]; +- } +- return []; ++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); ++ return path && path.length ? [OS.Path.basename(path)] : []; + }, + get pluginFullpath() { +- if (this.isInstalled) { +- let path = OS.Path.join(OS.Constants.Path.profileDir, +- this._plugin.id, +- this.version); +- return [path]; +- } +- return []; ++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); ++ return path && path.length ? [path] : []; + }, + + get isInstalled() { +- return this.version && this.version.length > 0; ++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id); ++ return path && path.length > 0; + }, + + _handleEnabledChanged: function() { +@@ -362,10 +356,10 @@ + } + }, + +- onPrefVersionChanged: function() { ++ onPrefPathChanged: function() { + AddonManagerPrivate.callAddonListeners("onUninstalling", this, false); + if (this._gmpPath) { +- this._log.info("onPrefVersionChanged() - unregistering gmp directory " + ++ this._log.info("onPrefPathChanged() - unregistering gmp directory " + + this._gmpPath); + gmpService.removePluginDirectory(this._gmpPath); + } +@@ -374,15 +368,10 @@ + AddonManagerPrivate.callInstallListeners("onExternalInstall", null, this, + null, false); + AddonManagerPrivate.callAddonListeners("onInstalling", this, false); +- this._gmpPath = null; +- if (this.isInstalled) { +- this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir, +- this._plugin.id, +- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, +- null, this._plugin.id)); +- } ++ this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, ++ null, this._plugin.id); + if (this._gmpPath && this.isActive) { +- this._log.info("onPrefVersionChanged() - registering gmp directory " + ++ this._log.info("onPrefPathChanged() - registering gmp directory " + + this._gmpPath); + gmpService.addPluginDirectory(this._gmpPath); + } +@@ -393,9 +382,9 @@ + Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, + this._plugin.id), + this.onPrefEnabledChanged, this); +- Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION, ++ Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH, + this._plugin.id), +- this.onPrefVersionChanged, this); ++ this.onPrefPathChanged, this); + if (this._plugin.isEME) { + Preferences.ignore(GMPPrefs.KEY_EME_ENABLED, + this.onPrefEMEGlobalEnabledChanged, this); Property changes on: branches/2015Q3/www/libxul/files/patch-system-openh264 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2015Q3/www/libxul/files/patch-z-bug517422 =================================================================== --- branches/2015Q3/www/libxul/files/patch-z-bug517422 (revision 392766) +++ branches/2015Q3/www/libxul/files/patch-z-bug517422 (revision 392767) @@ -1,492 +1,582 @@ # 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 -@@ -79,6 +79,13 @@ export:: $(export-preqs) +@@ -77,6 +77,14 @@ export:: $(export-preqs) -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \ -DMOZ_NATIVE_GRAPHITE2=$(MOZ_NATIVE_GRAPHITE2) \ -DMOZ_NATIVE_HARFBUZZ=$(MOZ_NATIVE_HARFBUZZ) \ + -DMOZ_NATIVE_OGG=$(MOZ_NATIVE_OGG) \ + -DMOZ_NATIVE_THEORA=$(MOZ_NATIVE_THEORA) \ + -DMOZ_NATIVE_VORBIS=$(MOZ_NATIVE_VORBIS) \ + -DMOZ_NATIVE_TREMOR=$(MOZ_NATIVE_TREMOR) \ ++ -DMOZ_NATIVE_CELT=$(MOZ_NATIVE_CELT) \ + -DMOZ_NATIVE_OPUS=$(MOZ_NATIVE_OPUS) \ + -DMOZ_NATIVE_SPEEX=$(MOZ_NATIVE_SPEEX) \ + -DMOZ_NATIVE_SOUNDTOUCH=$(MOZ_NATIVE_SOUNDTOUCH) \ $(srcdir)/system-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers $(INSTALL) system_wrappers $(DIST) diff --git config/external/moz.build config/external/moz.build index f67c5c7..eb909ce 100644 --- config/external/moz.build +++ config/external/moz.build -@@ -15,13 +15,19 @@ if CONFIG['MOZ_UPDATER']: - if not CONFIG['MOZ_NATIVE_BZ2']: - external_dirs += ['modules/libbz2'] +@@ -19,10 +19,19 @@ if CONFIG['MOZ_UPDATER']: + # There's no "native brotli" yet, but probably in the future... + external_dirs += ['modules/brotli'] -if CONFIG['MOZ_VORBIS']: +if not CONFIG['MOZ_NATIVE_OGG']: + external_dirs += ['media/libogg'] + ++if not CONFIG['MOZ_NATIVE_CELT'] or not CONFIG['MOZ_NATIVE_OPUS']: ++ external_dirs += ['media/libopus'] ++ +if not CONFIG['MOZ_NATIVE_THEORA']: + external_dirs += ['media/libtheora'] + +if CONFIG['MOZ_VORBIS'] and not CONFIG['MOZ_NATIVE_VORBIS']: external_dirs += ['media/libvorbis'] -if CONFIG['MOZ_TREMOR']: +if CONFIG['MOZ_TREMOR'] and not CONFIG['MOZ_NATIVE_TREMOR']: external_dirs += ['media/libtremor'] --if CONFIG['MOZ_OPUS']: -+if CONFIG['MOZ_OPUS'] and not CONFIG['MOZ_NATIVE_OPUS']: - external_dirs += ['media/libopus'] - if CONFIG['MOZ_WEBM']: -@@ -36,13 +42,15 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ_NATIVE_LIBVPX']: +@@ -37,15 +46,16 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ if not CONFIG['MOZ_NATIVE_PNG']: external_dirs += ['media/libpng'] +if not CONFIG['MOZ_NATIVE_SPEEX']: + external_dirs += ['media/libspeex_resampler'] + +if not CONFIG['MOZ_NATIVE_SOUNDTOUCH']: + external_dirs += ['media/libsoundtouch'] + external_dirs += [ 'media/kiss_fft', 'media/libcubeb', - 'media/libogg', +- 'media/libopus', - 'media/libtheora', - 'media/libspeex_resampler', + 'media/libstagefright', - 'media/libsoundtouch', ] - PARALLEL_DIRS += ['../../' + i for i in external_dirs] + 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 -@@ -1050,8 +1050,6 @@ X11/Xutil.h - xpt_struct.h - xpt_xdr.h +@@ -1263,7 +1263,6 @@ X11/Xlocale.h + X11/Xos.h + X11/Xutil.h zmouse.h --speex/speex_resampler.h -soundtouch/SoundTouch.h #if MOZ_NATIVE_PNG==1 png.h #endif -@@ -1119,6 +1117,8 @@ ogg/ogg.h +@@ -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 - cubeb/cubeb.h -+speex/speex_resampler.h -+soundtouch/SoundTouch.h - #endif - gst/gst.h - gst/app/gstappsink.h -@@ -1155,3 +1155,29 @@ graphite2/Segment.h +@@ -1365,3 +1365,35 @@ graphite2/Segment.h harfbuzz/hb-ot.h harfbuzz/hb.h #endif +#if MOZ_NATIVE_OGG==1 +ogg/ogg.h +ogg/os_types.h +#endif +#if MOZ_NATIVE_THEORA==1 +theora/theoradec.h +#endif +#if MOZ_NATIVE_VORBIS==1 +vorbis/codec.h +vorbis/vorbisenc.h +#endif +#if MOZ_NATIVE_TREMOR==1 +tremor/ivorbiscodec.h +#endif ++#if MOZ_NATIVE_CELT==1 ++celt.h ++celt_header.h ++celt/celt.h ++celt/celt_header.h ++#endif +#if MOZ_NATIVE_OPUS==1 +opus.h +opus_multistream.h +opus/opus.h +opus/opus_multistream.h +#endif +#if MOZ_NATIVE_SPEEX==1 +speex/speex_resampler.h +#endif +#if MOZ_NATIVE_SOUNDTOUCH==1 +soundtouch/SoundTouch.h +#endif diff --git configure.in configure.in index 87db361..7947626 100644 --- configure.in +++ configure.in -@@ -5211,6 +5211,63 @@ if test "${ac_cv_c_attribute_aligned}" != "0"; then +@@ -5223,6 +5223,157 @@ if test "${ac_cv_c_attribute_aligned}" ! fi dnl ======================================================== +dnl Check for libogg +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-ogg, +[ --with-system-ogg Use system libogg (located with pkgconfig)], +MOZ_NATIVE_OGG=1, +MOZ_NATIVE_OGG=) + +if test -n "$MOZ_NATIVE_OGG"; then + PKG_CHECK_MODULES(MOZ_OGG, ogg >= 1.2.1) + + _SAVE_LIBS=$LIBS + LIBS="$LIBS $MOZ_OGG_LIBS" + AC_CHECK_FUNC(ogg_set_mem_functions, [], + [AC_DEFINE(MOZ_OGG_NO_MEM_REPORTING)]) + LIBS=$_SAVE_LIBS +fi + +AC_SUBST(MOZ_NATIVE_OGG) -+AC_SUBST(MOZ_OGG_CFLAGS) -+AC_SUBST(MOZ_OGG_LIBS) + +dnl ======================================================== +dnl Check for libvorbis +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-vorbis, +[ --with-system-vorbis Use system libvorbis (located with pkgconfig)], +MOZ_NATIVE_VORBIS=1, +MOZ_NATIVE_VORBIS=) + +if test -n "$MOZ_NATIVE_VORBIS"; then + PKG_CHECK_MODULES(MOZ_VORBIS, vorbis vorbisenc >= 1.3.5) +fi + +AC_SUBST(MOZ_NATIVE_VORBIS) -+AC_SUBST(MOZ_VORBIS_CFLAGS) -+AC_SUBST(MOZ_VORBIS_LIBS) + +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) -+AC_SUBST(MOZ_TREMOR_CFLAGS) -+AC_SUBST(MOZ_TREMOR_LIBS) + +dnl ======================================================== - dnl = Disable Opus audio codec support - dnl ======================================================== - MOZ_ARG_DISABLE_BOOL(opus, -@@ -5219,6 +5274,97 @@ MOZ_ARG_DISABLE_BOOL(opus, - MOZ_OPUS=1) - - dnl ======================================================== ++dnl Check for libcelt ++dnl ======================================================== ++ ++MOZ_ARG_WITH_BOOL(system-celt, ++[ --with-system-celt Use system libcelt (located with pkgconfig)], ++MOZ_NATIVE_CELT=1, ++MOZ_NATIVE_CELT=) ++ ++if test -n "$MOZ_NATIVE_CELT"; then ++ PKG_CHECK_MODULES(MOZ_CELT, celt) ++else ++ MOZ_CELT_CFLAGS='-I$(topsrcdir)/media/libopus' ++fi ++ ++AC_SUBST(MOZ_NATIVE_CELT) ++ ++dnl ======================================================== +dnl Check for libopus +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-opus, +[ --with-system-opus Use system libopus (located with pkgconfig)], +MOZ_NATIVE_OPUS=1, +MOZ_NATIVE_OPUS=) + +if test -n "$MOZ_NATIVE_OPUS"; then + PKG_CHECK_MODULES(MOZ_OPUS, opus >= 1.1) +else + MOZ_OPUS_CFLAGS='-I$(topsrcdir)/media/libopus/include' +fi + +AC_SUBST(MOZ_NATIVE_OPUS) -+AC_SUBST(MOZ_OPUS_CFLAGS) -+AC_SUBST(MOZ_OPUS_LIBS) + +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) -+AC_SUBST(MOZ_THEORA_CFLAGS) -+AC_SUBST(MOZ_THEORA_LIBS) + +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) -+AC_SUBST(MOZ_SPEEX_CFLAGS) -+AC_SUBST(MOZ_SPEEX_LIBS) + +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) -+AC_SUBST(MOZ_SOUNDTOUCH_CFLAGS) -+AC_SUBST(MOZ_SOUNDTOUCH_LIBS) + +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 -@@ -26,7 +26,7 @@ public: - }; +--- 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/Makefile.in content/media/Makefile.in -index fd34449..c6c42c8 100644 ---- content/media/Makefile.in -+++ content/media/Makefile.in -@@ -6,3 +6,31 @@ include $(topsrcdir)/config/rules.mk +diff --git dom/media/moz.build dom/media/moz.build +index 7526cff..e0a0ca0 100644 +--- dom/media/moz.build ++++ dom/media/moz.build +@@ -212,3 +212,24 @@ if CONFIG['ANDROID_VERSION'] > '15': - CFLAGS += $(GSTREAMER_CFLAGS) - CXXFLAGS += $(GSTREAMER_CFLAGS) + CFLAGS += CONFIG['GSTREAMER_CFLAGS'] + CXXFLAGS += CONFIG['GSTREAMER_CFLAGS'] + -+ifdef MOZ_NATIVE_OGG -+CXXFLAGS += $(MOZ_OGG_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_OGG']: ++ CXXFLAGS += CONFIG['MOZ_OGG_CFLAGS'] + -+ifdef MOZ_NATIVE_THEORA -+CXXFLAGS += $(MOZ_THEORA_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_THEORA']: ++ CXXFLAGS += CONFIG['MOZ_THEORA_CFLAGS'] + -+ifdef MOZ_NATIVE_VORBIS -+CXXFLAGS += $(MOZ_VORBIS_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_VORBIS']: ++ CXXFLAGS += CONFIG['MOZ_VORBIS_CFLAGS'] + -+ifdef MOZ_NATIVE_TREMOR -+CXXFLAGS += $(MOZ_TREMOR_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_TREMOR']: ++ CXXFLAGS += CONFIG['MOZ_TREMOR_CFLAGS'] + -+ifdef MOZ_NATIVE_OPUS -+CXXFLAGS += $(MOZ_OPUS_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_OPUS']: ++ CXXFLAGS += CONFIG['MOZ_OPUS_CFLAGS'] + -+ifdef MOZ_NATIVE_SPEEX -+CXXFLAGS += $(MOZ_SPEEX_CFLAGS) -+endif ++if CONFIG['MOZ_NATIVE_SPEEX']: ++ CXXFLAGS += CONFIG['MOZ_SPEEX_CFLAGS'] + -+ifdef MOZ_NATIVE_SOUNDTOUCH -+CXXFLAGS += $(MOZ_SOUNDTOUCH_CFLAGS) -+endif -diff --git media/libcubeb/src/Makefile.in media/libcubeb/src/Makefile.in -index 4c14494..1cb98e2 100644 ---- media/libcubeb/src/Makefile.in -+++ media/libcubeb/src/Makefile.in -@@ -9,3 +9,7 @@ CFLAGS += \ - $(MOZ_ALSA_CFLAGS) \ - $(MOZ_PULSEAUDIO_CFLAGS) \ - $(NULL) ++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'] + -+ifdef MOZ_NATIVE_SPEEX -+CFLAGS += $(MOZ_SPEEX_CFLAGS) -+endif -diff --git media/libtheora/Makefile.in media/libtheora/Makefile.in -new file mode 100644 -index 0000000..1f02dc0 ---- /dev/null -+++ media/libtheora/Makefile.in -@@ -0,0 +1,9 @@ -+# This Source Code Form is subject to the terms of the Mozilla Public -+# License, v. 2.0. If a copy of the MPL was not distributed with this -+# file, You can obtain one at http://mozilla.org/MPL/2.0/. + 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 + -+include $(topsrcdir)/config/rules.mk ++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. + -+ifdef MOZ_NATIVE_OGG -+CFLAGS += $(MOZ_OGG_CFLAGS) -+endif -diff --git media/libtremor/Makefile.in media/libtremor/Makefile.in -new file mode 100644 -index 0000000..1f02dc0 ---- /dev/null -+++ media/libtremor/Makefile.in -@@ -0,0 +1,9 @@ -+# This Source Code Form is subject to the terms of the Mozilla Public -+# License, v. 2.0. If a copy of the MPL was not distributed with this -+# file, You can obtain one at http://mozilla.org/MPL/2.0/. ++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. + -+include $(topsrcdir)/config/rules.mk ++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. + -+ifdef MOZ_NATIVE_OGG -+CFLAGS += $(MOZ_OGG_CFLAGS) -+endif -diff --git media/libvorbis/Makefile.in media/libvorbis/Makefile.in -new file mode 100644 -index 0000000..1f02dc0 ---- /dev/null -+++ media/libvorbis/Makefile.in -@@ -0,0 +1,9 @@ -+# This Source Code Form is subject to the terms of the Mozilla Public -+# License, v. 2.0. If a copy of the MPL was not distributed with this -+# file, You can obtain one at http://mozilla.org/MPL/2.0/. ++The in-tree copy may be omitted during build by --with-system-theora. ++Keep version in configure.in in sync on updates. +diff --git media/libtheora/moz.build media/libtheora/moz.build +index 14265b1..3069e99 100644 +--- media/libtheora/moz.build ++++ media/libtheora/moz.build +@@ -93,3 +93,5 @@ if CONFIG['GNU_AS']: + if CONFIG['OS_TARGET'] == 'Android': + DEFINES['__linux__'] = True + ++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. + -+include $(topsrcdir)/config/rules.mk ++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. + -+ifdef MOZ_NATIVE_OGG -+CFLAGS += $(MOZ_OGG_CFLAGS) -+endif -diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in ++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/Makefile.in -+++ media/webrtc/signaling/test/Makefile.in -@@ -48,6 +48,12 @@ LIBS += \ - $(NULL) - endif +--- 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'] -+ifdef MOZ_NATIVE_OPUS -+LIBS += \ -+ $(MOZ_OPUS_LIBS) \ -+ $(NULL) -+endif ++if CONFIG['MOZ_NATIVE_OPUS']: ++ OS_LIBS += CONFIG['MOZ_OPUS_LIBS'] + - ifdef MOZ_NATIVE_LIBVPX - LIBS += \ - $(MOZ_LIBVPX_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 -@@ -14,9 +14,9 @@ +@@ -17,18 +17,11 @@ 'conditions': [ ['build_with_mozilla==1', { # Mozilla provides its own build of the opus library. - 'include_dirs': [ - '/media/libopus/include', -- ] +- '/media/libopus/src', +- '/media/libopus/celt', + 'cflags_mozilla': [ ++ '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt', + '$(MOZ_OPUS_CFLAGS)', -+ ], ++ '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src', + ], +- 'direct_dependent_settings': { +- 'include_dirs': [ +- '/media/libopus/include', +- '/media/libopus/src', +- '/media/libopus/celt', +- ], +- }, }, { 'dependencies': [ '<(DEPTH)/third_party/opus/opus.gyp:opus' -diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk +diff --git media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi +index 00e77e7..55f48ab 100644 +--- media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi ++++ media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi +@@ -84,19 +84,11 @@ + ], + }], + ['build_with_mozilla==1', { +- 'include_dirs': [ +- # Need Opus header files for the audio classifier. +- '<(DEPTH)/../../../media/opus/celt', +-# '<(DEPTH)/third_party/opus/src/src', ++ 'cflags_mozilla': [ ++ '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt', ++ '$(MOZ_OPUS_CFLAGS)', ++ '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src', + ], +- 'direct_dependent_settings': { +- 'include_dirs': [ +- '../../../../../../media/opus/celt', +- # Need Opus header files for the audio classifier. +- '<(DEPTH)/../../../media/opus/celt', +-# '<(DEPTH)/third_party/opus/src/src', +- ], +- }, + }], + ], + 'sources': [ +diff --git toolkit/library/moz.build toolkit/library/moz.build index d42137a..695e75a8 100644 ---- toolkit/library/libxul.mk -+++ toolkit/library/libxul.mk -@@ -77,6 +77,34 @@ ifdef MOZ_NATIVE_HUNSPELL - EXTRA_DSO_LDOPTS += $(MOZ_HUNSPELL_LIBS) - endif +--- toolkit/library/moz.build ++++ toolkit/library/moz.build +@@ -178,6 +178,30 @@ if CONFIG['MOZ_NATIVE_PNG']: + if CONFIG['MOZ_NATIVE_HUNSPELL']: + OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS'] -+ifdef MOZ_NATIVE_OGG -+EXTRA_DSO_LDOPTS += $(MOZ_OGG_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_OGG']: ++ OS_LIBS += CONFIG['MOZ_OGG_LIBS'] + -+ifdef MOZ_NATIVE_THEORA -+EXTRA_DSO_LDOPTS += $(MOZ_THEORA_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_THEORA']: ++ OS_LIBS += CONFIG['MOZ_THEORA_LIBS'] + -+ifdef MOZ_NATIVE_VORBIS -+EXTRA_DSO_LDOPTS += $(MOZ_VORBIS_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_VORBIS']: ++ OS_LIBS += CONFIG['MOZ_VORBIS_LIBS'] + -+ifdef MOZ_NATIVE_TREMOR -+EXTRA_DSO_LDOPTS += $(MOZ_TREMOR_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_TREMOR']: ++ OS_LIBS += CONFIG['MOZ_TREMOR_LIBS'] + -+ifdef MOZ_NATIVE_OPUS -+EXTRA_DSO_LDOPTS += $(MOZ_OPUS_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_CELT']: ++ OS_LIBS += CONFIG['MOZ_CELT_LIBS'] + -+ifdef MOZ_NATIVE_SPEEX -+EXTRA_DSO_LDOPTS += $(MOZ_SPEEX_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_OPUS']: ++ OS_LIBS += CONFIG['MOZ_OPUS_LIBS'] + -+ifdef MOZ_NATIVE_SOUNDTOUCH -+EXTRA_DSO_LDOPTS += $(MOZ_SOUNDTOUCH_LIBS) -+endif ++if CONFIG['MOZ_NATIVE_SPEEX']: ++ OS_LIBS += CONFIG['MOZ_SPEEX_LIBS'] + - ifdef MOZ_NATIVE_LIBEVENT - EXTRA_DSO_LDOPTS += $(MOZ_LIBEVENT_LIBS) - endif -diff --git xpcom/build/nsXPComInit.cpp xpcom/build/nsXPComInit.cpp ++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/nsXPComInit.cpp -+++ xpcom/build/nsXPComInit.cpp -@@ -130,7 +130,9 @@ extern nsresult nsStringInputStreamConstructor(nsISupports *, REFNSIID, void **) +--- 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 -@@ -571,11 +573,13 @@ NS_InitXPCOM2(nsIServiceManager* *result, - // this oddness. - mozilla::SetICUMemoryFunctions(); +@@ -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); + // 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. + // And for VPX. Index: branches/2015Q3/www/linux-firefox/Makefile =================================================================== --- branches/2015Q3/www/linux-firefox/Makefile (revision 392766) +++ branches/2015Q3/www/linux-firefox/Makefile (revision 392767) @@ -1,22 +1,22 @@ # Created by: voisine # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 38.0.6 +DISTVERSION= 39.0 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/linux-i686/en-US + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build6/linux-i686/en-US MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla USES= tar:bzip2 WANT_GTK218= yes PREFS_FILE= ${WRKSRC}/${APP_SUBDIR}defaults/preferences/browser-prefs.js APP_SUBDIR= browser/ # plugins, extensions .include "${.CURDIR}/../linux-seamonkey/Makefile.common" .include Index: branches/2015Q3/www/linux-firefox/distinfo =================================================================== --- branches/2015Q3/www/linux-firefox/distinfo (revision 392766) +++ branches/2015Q3/www/linux-firefox/distinfo (revision 392767) @@ -1,6 +1,6 @@ -SHA256 (firefox-38.0.6.tar.bz2) = b4a61d14618514678279ebdeec148e6d99dd2557cb47d0a387d42bbe7711dc51 -SIZE (firefox-38.0.6.tar.bz2) = 47706918 +SHA256 (firefox-39.0.tar.bz2) = b612185276ec1e3f60165ee274854c0244611b27076a29ca899d6e84a93e0983 +SIZE (firefox-39.0.tar.bz2) = 48620957 SHA256 (glib2-2.22.2-2.fc12.i686.rpm) = e3b459c245ec14e7248e9de4b506963a4773407f3e58835db5070d0ed02ecc99 SIZE (glib2-2.22.2-2.fc12.i686.rpm) = 1162908 SHA256 (gtk2-2.18.3-19.fc12.i686.rpm) = aea9cf7ffe9c8dae0faa2bf3d2aa1b2117c55dce03da72dcce8c268279ec0a4b SIZE (gtk2-2.18.3-19.fc12.i686.rpm) = 3198708 Index: branches/2015Q3/www/linux-firefox/pkg-plist =================================================================== --- branches/2015Q3/www/linux-firefox/pkg-plist (revision 392766) +++ branches/2015Q3/www/linux-firefox/pkg-plist (revision 392767) @@ -1,76 +1,75 @@ 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%%/libmozsqlite3.so lib/%%APP_NAME%%/libnspr4.so lib/%%APP_NAME%%/libnss3.so lib/%%APP_NAME%%/libnssckbi.so lib/%%APP_NAME%%/libnssdbm3.chk lib/%%APP_NAME%%/libnssdbm3.so lib/%%APP_NAME%%/libnssutil3.so lib/%%APP_NAME%%/libplc4.so lib/%%APP_NAME%%/libplds4.so lib/%%APP_NAME%%/libsmime3.so lib/%%APP_NAME%%/libsoftokn3.chk lib/%%APP_NAME%%/libsoftokn3.so lib/%%APP_NAME%%/libssl3.so lib/%%APP_NAME%%/libxul.so lib/%%APP_NAME%%/omni.ja lib/%%APP_NAME%%/platform.ini lib/%%APP_NAME%%/plugin-container lib/%%APP_NAME%%/precomplete lib/%%APP_NAME%%/removed-files lib/%%APP_NAME%%/run-mozilla.sh lib/%%APP_NAME%%/update-settings.ini lib/%%APP_NAME%%/updater lib/%%APP_NAME%%/updater.ini lib/%%APP_NAME%%/webapprt-stub lib/%%APP_NAME%%/webapprt/omni.ja lib/%%APP_NAME%%/webapprt/webapprt.ini @exec /bin/cp -R %%LOCALBASE%%/lib/xpi/symlinks/%%APP_NAME%%/ %D/lib/%%APP_NAME%%/browser/extensions/ 2>/dev/null || true @unexec /usr/bin/find %D/lib/%%APP_NAME%%/browser/extensions/ -depth 1 -type l -delete 2>/dev/null || true Index: branches/2015Q3 =================================================================== --- branches/2015Q3 (revision 392766) +++ branches/2015Q3 (revision 392767) Property changes on: branches/2015Q3 ___________________________________________________________________ Modified: svn:mergeinfo ## -0,0 +0,1 ## Merged /head:r392273,392758-392759,392761