Index: head/Mk/Uses/gecko.mk =================================================================== --- head/Mk/Uses/gecko.mk (revision 495402) +++ head/Mk/Uses/gecko.mk (revision 495403) @@ -1,112 +1,112 @@ # $FreeBSD$ # # Handle dependency of different gecko based applications # # MAINTAINER: gecko@FreeBSD.org # # Feature: gecko # Usage: USES=gecko or USES=gecko:ARGS # Valid ARGS: firefox, seamonkey, thunderbird # 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 _GECKO_VERSION= ${gecko_ARGS:M[0-9][0-9]*} .if ${gecko_ARGS:Mfirefox} _GECKO_DEFAULT_VERSION= 60 -_GECKO_VERSIONS= 60 65 +_GECKO_VERSIONS= 60 66 _GECKO_TYPE= firefox # Dependence lines for different Firefox versions 60_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox-esr -65_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox +66_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox .if exists(${LOCALBASE}/bin/firefox) _GECKO_INSTALLED_VER!= ${PKG_QUERY} %v firefox firefox-esr _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:C/\..*//} .endif .elif ${gecko_ARGS:Mseamonkey} _GECKO_DEFAULT_VERSION= 49 _GECKO_VERSIONS= 49 _GECKO_TYPE= seamonkey .if exists(${LOCALBASE}/bin/seamonkey) _GECKO_INSTALLED_VER!= ${PKG_QUERY} %v seamonkey _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:C/[0-9]*\.//:C/\..*//} .endif # Dependence lines for different Seamonkey versions 49_DEPENDS= ${LOCALBASE}/lib/seamonkey/seamonkey:www/seamonkey .elif ${gecko_ARGS:Mthunderbird} _GECKO_DEFAULT_VERSION= 60 _GECKO_VERSIONS= 60 _GECKO_TYPE= thunderbird .if exists(${LOCALBASE}/bin/thunderbird) _GECKO_INSTALLED_VER!= ${PKG_QUERY} %v thunderbird _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:C/\..*//} .endif # Dependence lines for different Thunderbird versions 60_DEPENDS= ${LOCALBASE}/lib/thunderbird/thunderbird:mail/thunderbird .else IGNORE= Unknown type of gecko dependency you may specify either firefox, seamonkey or thunderbird .endif .if defined(_GECKO_TYPE) .if ${_GECKO_VERSION:M*+} _GECKO_MIN_VERSION:= ${_GECKO_VERSION:S/+//} _GECKO_WANTED_VERSIONS:= ${_GECKO_DEFAULT_VERSION} .endif .if ${_GECKO_VERSION:M[0-9][0-9]} _GECKO_WANTED_VERSIONS:= ${_GECKO_VERSION:M[0-9][0-9]} .endif _GECKO_WANTED_VERSIONS?= ${_GECKO_DEFAULT_VERSION} .if defined(_GECKO_MIN_VERSION) . for _v in ${_GECKO_VERSIONS} . if ${_GECKO_MIN_VERSION} <= ${_v} _GECKO_WANTED_VERSIONS+= ${_v} . endif . endfor .endif .for _v in ${_GECKO_WANTED_VERSIONS:O:u} _GECKO_HIGHEST_VERSION:= ${_v} .if defined(_GECKO_INSTALLED_VER) && ${_GECKO_INSTALLED_VER} == ${_v} _GECKO_WANTED_VERSION:= ${_v} .endif .endfor .if !defined(_GECKO_WANTED_VERSION) .if defined(_GECKO_INSTALLED_VER) IGNORE= cannot install: ${_GECKO_TYPE} versions mismatch: ${_GECKO_TYPE}-${_GECKO_INSTALLED_VER} is installed and wanted version is ${_GECKO_TYPE}-${_GECKO_VERSION:M[0-9][0-9]} .else _GECKO_WANTED_VERSION:= ${_GECKO_HIGHEST_VERSION} .endif .endif .if ${gecko_ARGS:Mbuild} BUILD_DEPENDS+= ${${_GECKO_WANTED_VERSION}_DEPENDS} .endif RUN_DEPENDS+= ${${_GECKO_WANTED_VERSION}_DEPENDS} .endif .endif Index: head/Mk/bsd.gecko.mk =================================================================== --- head/Mk/bsd.gecko.mk (revision 495402) +++ head/Mk/bsd.gecko.mk (revision 495403) @@ -1,536 +1,536 @@ #-*- 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. # # 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+= compiler:c++17-lang cpe gl gmake iconv localbase perl5 pkgconfig \ python:2.7,build desktop-file-utils CPE_VENDOR?=mozilla USE_GL= gl USE_PERL5= build USE_XORG= x11 xcb xcomposite xdamage xext xfixes xrender xt HAS_CONFIGURE= yes CONFIGURE_OUTSOURCE= yes BUNDLE_LIBS= yes .if ${MOZILLA_VER:R:R} >= 56 BUILD_DEPENDS+= llvm${LLVM_DEFAULT}>0:devel/llvm${LLVM_DEFAULT} MOZ_EXPORT+= LLVM_CONFIG=llvm-config${LLVM_DEFAULT} # Require newer Clang than what's in base system unless user opted out . if ${CC} == cc && ${CXX} == c++ && exists(/usr/lib/libc++.so) BUILD_DEPENDS+= ${LOCALBASE}/bin/clang${LLVM_DEFAULT}:devel/llvm${LLVM_DEFAULT} CPP= ${LOCALBASE}/bin/clang-cpp${LLVM_DEFAULT} CC= ${LOCALBASE}/bin/clang${LLVM_DEFAULT} CXX= ${LOCALBASE}/bin/clang++${LLVM_DEFAULT} USES:= ${USES:Ncompiler\:*} # XXX avoid warnings . endif .endif .if ${MOZILLA_VER:R:R} >= 61 BUILD_DEPENDS+= ${LOCALBASE}/bin/python${PYTHON3_DEFAULT}:lang/python${PYTHON3_DEFAULT:S/.//g} MOZ_EXPORT+= PYTHON3="${LOCALBASE}/bin/python${PYTHON3_DEFAULT}" .endif .if ${MOZILLA_VER:R:R} >= 63 -BUILD_DEPENDS+= rust-cbindgen>=0.6.2:devel/rust-cbindgen \ +BUILD_DEPENDS+= rust-cbindgen>=0.6.8:devel/rust-cbindgen \ node:www/node .endif .if ${MOZILLA_VER:R:R} < 64 MOZ_OPTIONS+= --enable-pie .endif MOZILLA_SUFX?= none MOZSRC?= ${WRKSRC} PLISTF?= ${WRKDIR}/plist_files MOZ_PIS_DIR?= lib/${MOZILLA}/init.d PORT_MOZCONFIG?= ${FILESDIR}/mozconfig.in MOZCONFIG?= ${WRKSRC}/.mozconfig 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 MOZ_EXPORT+= ${CONFIGURE_ENV} \ RUSTFLAGS="${RUSTFLAGS}" \ PERL="${PERL}" \ ac_cv_clock_monotonic= MOZ_OPTIONS+= --prefix="${PREFIX}" MOZ_MK_OPTIONS+=MOZ_OBJDIR="${BUILD_WRKSRC}" LDFLAGS+= -Wl,--as-needed # Adjust -C target-cpu if -march/-mcpu is set by bsd.cpu.mk .if ${ARCH} == amd64 || ${ARCH} == i386 RUSTFLAGS+= ${CFLAGS:M-march=*:S/-march=/-C target-cpu=/} .else RUSTFLAGS+= ${CFLAGS:M-mcpu=*:S/-mcpu=/-C target-cpu=/} .endif # Standard depends _ALL_DEPENDS= event ffi graphite harfbuzz hunspell icu jpeg nspr nss png pixman sqlite vpx webp event_LIB_DEPENDS= libevent.so:devel/libevent event_MOZ_OPTIONS= --with-system-libevent ffi_LIB_DEPENDS= libffi.so:devel/libffi ffi_MOZ_OPTIONS= --enable-system-ffi .if exists(${FILESDIR}/patch-bug847568) graphite_LIB_DEPENDS= libgraphite2.so:graphics/graphite2 graphite_MOZ_OPTIONS= --with-system-graphite2 harfbuzz_LIB_DEPENDS= libharfbuzz.so:print/harfbuzz harfbuzz_MOZ_OPTIONS= --with-system-harfbuzz .endif hunspell_LIB_DEPENDS= libhunspell-1.7.so:textproc/hunspell hunspell_MOZ_OPTIONS= --enable-system-hunspell icu_LIB_DEPENDS= libicui18n.so:devel/icu icu_MOZ_OPTIONS= --with-system-icu --with-intl-api -jpeg_BUILD_DEPENDS=yasm:devel/yasm jpeg_USES= jpeg jpeg_MOZ_OPTIONS= --with-system-jpeg=${LOCALBASE} nspr_LIB_DEPENDS= libnspr4.so:devel/nspr nspr_MOZ_OPTIONS= --with-system-nspr nss_LIB_DEPENDS= libnss3.so:security/nss nss_MOZ_OPTIONS= --with-system-nss pixman_LIB_DEPENDS= libpixman-1.so:x11/pixman pixman_MOZ_OPTIONS= --enable-system-pixman png_LIB_DEPENDS= libpng.so:graphics/png png_MOZ_OPTIONS= --with-system-png=${LOCALBASE} sqlite_LIB_DEPENDS= libsqlite3.so:databases/sqlite3 sqlite_MOZ_OPTIONS= --enable-system-sqlite -vpx_BUILD_DEPENDS= yasm:devel/yasm vpx_LIB_DEPENDS= libvpx.so:multimedia/libvpx vpx_MOZ_OPTIONS= --with-system-libvpx webp_LIB_DEPENDS= libwebp.so:graphics/webp webp_MOZ_OPTIONS= --with-system-webp .for use in ${USE_MOZILLA} ${use:S/-/_WITHOUT_/}= ${TRUE} .endfor LIB_DEPENDS+= libfontconfig.so:x11-fonts/fontconfig \ libfreetype.so:print/freetype2 .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-gtk3 MOZ_CHANNEL?= ${PKGNAMESUFFIX:Urelease:S/^-//} MOZ_OPTIONS+= \ --enable-chrome-format=${MOZ_CHROME} \ --enable-default-toolkit=${MOZ_TOOLKIT} \ --enable-update-channel=${MOZ_CHANNEL} \ --disable-updater # others MOZ_OPTIONS+= --with-system-zlib \ --with-system-bz2 # API keys from www/chromium # http://www.chromium.org/developers/how-tos/api-keys # Note: these are for FreeBSD use ONLY. For your own distribution, # please get your own set of keys. MOZ_EXPORT+= MOZ_GOOGLE_API_KEY=AIzaSyBsp9n41JLW8jCokwn7vhoaMejDFRd1mp8 .if ${PORT_OPTIONS:MGTK2} MOZ_TOOLKIT= cairo-gtk2 .elif ${PORT_OPTIONS:MWAYLAND} MOZ_TOOLKIT= cairo-gtk3-wayland .endif USES+= gnome .if ${MOZ_TOOLKIT:Mcairo-gtk3*} BUILD_DEPENDS+= gtk3>=3.14.6:x11-toolkits/gtk30 USE_GNOME+= gdkpixbuf2 gtk20 gtk30 .else # gtk2, cairo-gtk2 USE_GNOME+= gdkpixbuf2 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 . if ${MOZILLA_VER:R:R} >= 56 . if ${/usr/bin/ld:L:tA} != /usr/bin/ld.lld # ld 2.17 barfs on Stylo built with -C opt-level=0 USE_BINUTILS= yes LDFLAGS+= -B${LOCALBASE}/bin . endif . endif .endif .if ${PORT_OPTIONS:MCANBERRA} RUN_DEPENDS+= libcanberra>0:audio/libcanberra .endif .if ${PORT_OPTIONS:MDBUS} BUILD_DEPENDS+= libnotify>0:devel/libnotify LIB_DEPENDS+= libdbus-1.so:devel/dbus \ libdbus-glib-1.so:devel/dbus-glib \ libstartup-notification-1.so:x11/startup-notification MOZ_OPTIONS+= --enable-startup-notification .else MOZ_OPTIONS+= --disable-dbus .endif .if ${PORT_OPTIONS:MFFMPEG} # dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp RUN_DEPENDS+= ffmpeg>=0.8,1:multimedia/ffmpeg .endif .if ${PORT_OPTIONS:MGCONF} USE_GNOME+= gconf2 MOZ_OPTIONS+= --enable-gconf .else MOZ_OPTIONS+= --disable-gconf .endif .if ${PORT_OPTIONS:MLIBPROXY} LIB_DEPENDS+= libproxy.so:net/libproxy MOZ_OPTIONS+= --enable-libproxy .else MOZ_OPTIONS+= --disable-libproxy .endif .if ${PORT_OPTIONS:MALSA} LIB_DEPENDS+= libasound.so:audio/alsa-lib RUN_DEPENDS+= ${LOCALBASE}/lib/alsa-lib/libasound_module_pcm_oss.so:audio/alsa-plugins RUN_DEPENDS+= alsa-lib>=1.1.1_1:audio/alsa-lib MOZ_OPTIONS+= --enable-alsa .endif .if ${PORT_OPTIONS:MJACK} BUILD_DEPENDS+= ${LOCALBASE}/include/jack/jack.h:audio/jack MOZ_OPTIONS+= --enable-jack .endif .if ${PORT_OPTIONS:MPULSEAUDIO} BUILD_DEPENDS+= ${LOCALBASE}/include/pulse/pulseaudio.h:audio/pulseaudio MOZ_OPTIONS+= --enable-pulseaudio .else MOZ_OPTIONS+= --disable-pulseaudio .endif .if ${PORT_OPTIONS:MSNDIO} LIB_DEPENDS+= libsndio.so:audio/sndio post-patch-SNDIO-on: @${REINPLACE_CMD} -e 's|OpenBSD|${OPSYS}|g' \ ${MOZSRC}/media/libcubeb/src/moz.build \ ${MOZSRC}/toolkit/library/moz.build . for tests in tests gtest @if [ -f "${MOZSRC}/media/libcubeb/${tests}/moz.build" ]; then \ ${REINPLACE_CMD} -e 's|OpenBSD|${OPSYS}|g' \ ${MOZSRC}/media/libcubeb/${tests}/moz.build; \ fi . endfor @if [ -f "${MOZSRC}/media/webrtc/trunk/webrtc/build/common.gypi" ]; then \ ${REINPLACE_CMD} -e 's|OS==\"openbsd\"|OS==\"${OPSYS:tl}\"|g' \ ${MOZSRC}/media/webrtc/trunk/webrtc/build/common.gypi; \ fi @if [ -f "${MOZSRC}/media/webrtc/signaling/test/common.build" ]; then \ ${ECHO_CMD} "OS_LIBS += ['sndio']" >> \ ${MOZSRC}/media/webrtc/signaling/test/common.build; \ fi .endif .if ${PORT_OPTIONS:MRUST} || ${MOZILLA_VER:R:R} >= 54 BUILD_DEPENDS+= ${RUST_DEFAULT}>=1.30:lang/${RUST_DEFAULT} . if ${MOZILLA_VER:R:R} < 54 MOZ_OPTIONS+= --enable-rust . endif .else MOZ_OPTIONS+= --disable-rust .endif .if ${PORT_OPTIONS:MDEBUG} MOZ_OPTIONS+= --enable-debug --disable-release STRIP= # ports/184285 .else MOZ_OPTIONS+= --disable-debug --disable-debug-symbols --enable-release . if ${MOZILLA_VER:R:R} >= 67 && (${ARCH:Maarch64} || ${MACHINE_CPU:Msse2}) MOZ_OPTIONS+= --enable-rust-simd . endif .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@|${PERL}|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%%|${PERL}|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 . endif .elif ${ARCH:Mpowerpc*} . 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 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} ${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 < $$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 @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|/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 .if ${MOZILLA_VER:R:R} < 61 @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${MOZSRC}/extensions/spellcheck/hunspell/*/mozHunspell.cpp .endif # handles mozilla pis scripts. gecko-moz-pis-patch: .for moz in ${MOZ_PIS_SCRIPTS} @${MOZCONFIG_SED} < ${FILESDIR}/${moz} > ${WRKDIR}/${moz} .endfor pre-configure: gecko-pre-configure gecko-pre-configure: .if ${PORT_OPTIONS:MWAYLAND} # .if !exists() evaluates too early before gtk3 has a chance to be installed @if ! pkg-config --exists gtk+-wayland-3.0; then \ ${ECHO_MSG} "${PKGNAME}: Needs gtk3 with WAYLAND support enabled."; \ ${FALSE}; \ fi .endif pre-install: gecko-moz-pis-pre-install post-install-script: gecko-create-plist gecko-create-plist: # Create the plist ${RM} ${PLISTF} .for dir in ${MOZILLA_PLIST_DIRS} @cd ${STAGEDIR}${PREFIX}/${dir} && ${FIND} -H -s * ! -type d | \ ${SED} -e 's|^|${dir}/|' >> ${PLISTF} .endfor ${CAT} ${PLISTF} | ${SORT} >> ${TMPPLIST} gecko-moz-pis-pre-install: .if defined(MOZ_PIS_SCRIPTS) ${MKDIR} ${STAGEDIR}${PREFIX}/${MOZ_PIS_DIR} .for moz in ${MOZ_PIS_SCRIPTS} ${INSTALL_SCRIPT} ${WRKDIR}/${moz} ${STAGEDIR}${PREFIX}/${MOZ_PIS_DIR} .endfor .endif .endif .endif # HERE THERE BE TACOS -- adamw Index: head/www/firefox/Makefile =================================================================== --- head/www/firefox/Makefile (revision 495402) +++ head/www/firefox/Makefile (revision 495403) @@ -1,64 +1,64 @@ # Created by: Alan Eldridge # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 65.0.2 +DISTVERSION= 66.0 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source DISTFILES= ${DISTNAME}.source${EXTRACT_SUFX} MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla BUILD_DEPENDS= nspr>=4.19:devel/nspr \ - nss>=3.41:security/nss \ + nss>=3.42:security/nss \ icu>=59.1,1:devel/icu \ libevent>=2.1.8:devel/libevent \ - harfbuzz>=1.9.0:print/harfbuzz \ - graphite2>=1.3.12:graphics/graphite2 \ - png>=1.6.34:graphics/png \ + harfbuzz>=2.3.1:print/harfbuzz \ + graphite2>=1.3.13:graphics/graphite2 \ + png>=1.6.35:graphics/png \ libvorbis>=1.3.6,3:audio/libvorbis \ libvpx>=1.5.0:multimedia/libvpx \ - sqlite3>=3.25.3:databases/sqlite3 \ + sqlite3>=3.26:databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \ v4l_compat>0:multimedia/v4l_compat \ autoconf-2.13:devel/autoconf213 \ yasm:devel/yasm \ zip:archivers/zip USE_GECKO= gecko CONFLICTS_INSTALL= firefox-esr MOZ_PKGCONFIG_FILES= # empty USE_MOZILLA= -hunspell -vpx USES= tar:xz FIREFOX_ICON= ${MOZILLA}.png FIREFOX_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png FIREFOX_DESKTOP= ${MOZSRC}/taskcluster/docker/${MOZILLA}-snap/${MOZILLA}.desktop MOZ_OPTIONS= --enable-application=browser \ --enable-official-branding OPTIONS_EXCLUDE= WAYLAND .include "${.CURDIR}/../../www/firefox/Makefile.options" post-patch: @${REINPLACE_CMD} -e 's/%u/%U/' -e '/X-MultipleArgs/d' \ -e '/^Icon/s/=.*/=${FIREFOX_ICON:R}/' \ ${FIREFOX_DESKTOP} @${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: ${INSTALL_DATA} ${FIREFOX_DESKTOP} ${STAGEDIR}${PREFIX}/share/applications/ ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps ${LN} -sf ${FIREFOX_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${FIREFOX_ICON} .include Index: head/www/firefox/distinfo =================================================================== --- head/www/firefox/distinfo (revision 495402) +++ head/www/firefox/distinfo (revision 495403) @@ -1,3 +1,3 @@ -TIMESTAMP = 1551305934 -SHA256 (firefox-65.0.2.source.tar.xz) = 7d856a681fd8959f492679d0db3c3b787102665670f57cd9739ba9065702059f -SIZE (firefox-65.0.2.source.tar.xz) = 279607324 +TIMESTAMP = 1552350164 +SHA256 (firefox-66.0.source.tar.xz) = 62a3f6d5efa2a09c5ba2a0a3c91345d02c134f713bb4a515274aa72ebd22b4cf +SIZE (firefox-66.0.source.tar.xz) = 280291128 Index: head/www/firefox/files/patch-bug1511726 =================================================================== --- head/www/firefox/files/patch-bug1511726 (revision 495402) +++ head/www/firefox/files/patch-bug1511726 (nonexistent) @@ -1,32 +0,0 @@ -Don't try to use shader disk cache if disabled - -diff --git gfx/webrender_bindings/RenderThread.cpp gfx/webrender_bindings/RenderThread.cpp -index 1e60a900ff5a..92dc857b8390 100644 ---- gfx/webrender_bindings/RenderThread.cpp -+++ gfx/webrender_bindings/RenderThread.cpp -@@ -768,7 +768,9 @@ WebRenderProgramCache::WebRenderProgramCache(wr::WrThreadPool* aThreadPool) { - path.Append(gfx::gfxVars::ProfDirectory()); - } - mProgramCache = wr_program_cache_new(&path, aThreadPool); -- wr_try_load_shader_from_disk(mProgramCache); -+ if (gfxVars::UseWebRenderProgramBinaryDisk()) { -+ wr_try_load_shader_from_disk(mProgramCache); -+ } - } - - WebRenderProgramCache::~WebRenderProgramCache() { -diff --git gfx/webrender_bindings/src/bindings.rs gfx/webrender_bindings/src/bindings.rs -index 56bebc2882a0..88f7a1827264 100644 ---- gfx/webrender_bindings/src/bindings.rs -+++ gfx/webrender_bindings/src/bindings.rs -@@ -914,9 +914,7 @@ pub unsafe extern "C" fn wr_program_cache_delete(program_cache: *mut WrProgramCa - - #[no_mangle] - pub unsafe extern "C" fn wr_try_load_shader_from_disk(program_cache: *mut WrProgramCache) { -- if !program_cache.is_null() { -- (*program_cache).try_load_from_disk(); -- } -+ (*program_cache).try_load_from_disk(); - } - - #[no_mangle] Property changes on: head/www/firefox/files/patch-bug1511726 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/firefox/files/patch-bug1532851 =================================================================== --- head/www/firefox/files/patch-bug1532851 (revision 495402) +++ head/www/firefox/files/patch-bug1532851 (nonexistent) @@ -1,40 +0,0 @@ -diff --git js/src/wasm/WasmSignalHandlers.cpp js/src/wasm/WasmSignalHandlers.cpp -index fc49f361d82a..636537f84786 100644 ---- js/src/wasm/WasmSignalHandlers.cpp -+++ js/src/wasm/WasmSignalHandlers.cpp -@@ -102,6 +102,11 @@ using mozilla::DebugOnly; - #define EPC_sig(p) ((p)->sc_pc) - #define RFP_sig(p) ((p)->sc_regs[30]) - #endif -+#if defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || \ -+ defined(__PPC64LE__) -+#define R01_sig(p) ((p)->sc_frame.fixreg[1]) -+#define R32_sig(p) ((p)->sc_frame.srr0) -+#endif - #elif defined(__linux__) || defined(__sun) - #if defined(__linux__) - #define EIP_sig(p) ((p)->uc_mcontext.gregs[REG_EIP]) -@@ -169,6 +174,11 @@ using mozilla::DebugOnly; - #define EPC_sig(p) ((p)->uc_mcontext.__gregs[_REG_EPC]) - #define RFP_sig(p) ((p)->uc_mcontext.__gregs[_REG_S8]) - #endif -+#if defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || \ -+ defined(__PPC64LE__) -+#define R01_sig(p) ((p)->uc_mcontext.__gregs[_REG_R1]) -+#define R32_sig(p) ((p)->uc_mcontext.__gregs[_REG_PC]) -+#endif - #elif defined(__DragonFly__) || defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) - #define EIP_sig(p) ((p)->uc_mcontext.mc_eip) -@@ -197,6 +207,11 @@ using mozilla::DebugOnly; - #if defined(__FreeBSD__) && defined(__mips__) - #define EPC_sig(p) ((p)->uc_mcontext.mc_pc) - #define RFP_sig(p) ((p)->uc_mcontext.mc_regs[30]) -+#endif -+#if defined(__FreeBSD__) && (defined(__ppc64__) || defined(__PPC64__) || \ -+ defined(__ppc64le__) || defined(__PPC64LE__)) -+#define R01_sig(p) ((p)->uc_mcontext.mc_gpr[1]) -+#define R32_sig(p) ((p)->uc_mcontext.mc_srr0) - #endif - #elif defined(XP_DARWIN) - #define EIP_sig(p) ((p)->thread.uts.ts32.__eip) Property changes on: head/www/firefox/files/patch-bug1532851 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/firefox/files/patch-bug1519729 =================================================================== --- head/www/firefox/files/patch-bug1519729 (revision 495402) +++ head/www/firefox/files/patch-bug1519729 (nonexistent) @@ -1,131 +0,0 @@ -commit 9bdfa9fecaf1 -Author: Simon Sapin -Date: Fri Jan 11 14:02:28 2019 +0100 - - Bug 1519729 - Remove unused macro. r=emilio - - Cherry-picks a commit from https://github.com/servo/servo/pull/22674 ---- - servo/components/style_traits/values.rs | 18 ------------------ - 1 file changed, 18 deletions(-) - -diff --git servo/components/style_traits/values.rs servo/components/style_traits/values.rs -index 6da235c07b64..2851082c22e0 100644 ---- servo/components/style_traits/values.rs -+++ servo/components/style_traits/values.rs -@@ -158,24 +158,6 @@ where - } - } - --#[macro_export] --macro_rules! serialize_function { -- ($dest: expr, $name: ident($( $arg: expr, )+)) => { -- serialize_function!($dest, $name($($arg),+)) -- }; -- ($dest: expr, $name: ident($first_arg: expr $( , $arg: expr )*)) => { -- { -- $dest.write_str(concat!(stringify!($name), "("))?; -- $first_arg.to_css($dest)?; -- $( -- $dest.write_str(", ")?; -- $arg.to_css($dest)?; -- )* -- $dest.write_char(')') -- } -- } --} -- - /// Convenience wrapper to serialise CSS values separated by a given string. - pub struct SequenceWriter<'a, 'b: 'a, W: 'b> { - inner: &'a mut CssWriter<'b, W>, - -commit 9d5e559547d0 -Author: Simon Sapin -Date: Fri Jan 11 14:03:44 2019 +0100 - - Bug 1519729 - Document public macros. r=emilio - - Undocumented public macros emit warnings in nightly-2019-01-11, - and we #![deny] that warning. - - Cherry-picks a commit from https://github.com/servo/servo/pull/22674 ---- - servo/components/style/properties/properties.mako.rs | 17 ++++++++++++++++- - servo/components/style_traits/values.rs | 2 +- - 2 files changed, 17 insertions(+), 2 deletions(-) - -diff --git servo/components/style/properties/properties.mako.rs servo/components/style/properties/properties.mako.rs -index 2d91273be15a..9220c3b1a665 100644 ---- servo/components/style/properties/properties.mako.rs -+++ servo/components/style/properties/properties.mako.rs -@@ -3821,7 +3821,14 @@ impl AliasId { - } - } - --// NOTE(emilio): Callers are responsible to deal with prefs. -+/// Call the given macro with tokens like this for each longhand and shorthand properties -+/// that is enabled in content: -+/// -+/// ``` -+/// [CamelCaseName, SetCamelCaseName, PropertyId::Longhand(LonghandId::CamelCaseName)], -+/// ``` -+/// -+/// NOTE(emilio): Callers are responsible to deal with prefs. - #[macro_export] - macro_rules! css_properties_accessors { - ($macro_name: ident) => { -@@ -3844,6 +3851,14 @@ macro_rules! css_properties_accessors { - } - } - -+/// Call the given macro with tokens like this for each longhand properties: -+/// -+/// ``` -+/// { snake_case_ident, true } -+/// ``` -+/// -+/// … where the boolean indicates whether the property value type -+/// is wrapped in a `Box<_>` in the corresponding `PropertyDeclaration` variant. - #[macro_export] - macro_rules! longhand_properties_idents { - ($macro_name: ident) => { -diff --git servo/components/style_traits/values.rs servo/components/style_traits/values.rs -index 2851082c22e0..0d7ee3f506ce 100644 ---- servo/components/style_traits/values.rs -+++ servo/components/style_traits/values.rs -@@ -432,7 +432,7 @@ impl_to_css_for_predefined_type!(::cssparser::RGBA); - impl_to_css_for_predefined_type!(::cssparser::Color); - impl_to_css_for_predefined_type!(::cssparser::UnicodeRange); - --#[macro_export] -+/// Define an enum type with unit variants that each corrsepond to a CSS keyword. - macro_rules! define_css_keyword_enum { - (pub enum $name:ident { $($variant:ident = $css:expr,)+ }) => { - #[allow(missing_docs)] - -commit 2b08ae08b260 -Author: lqd -Date: Fri Jan 11 16:35:26 2019 +0100 - - Bug 1519729 - Typo fix in new doc-comment. r=emilio - - Cherry-picks a commit from https://github.com/servo/servo/pull/22674 - - Co-Authored-By: SimonSapin ---- - servo/components/style_traits/values.rs | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git servo/components/style_traits/values.rs servo/components/style_traits/values.rs -index 0d7ee3f506ce..582e34eb3db0 100644 ---- servo/components/style_traits/values.rs -+++ servo/components/style_traits/values.rs -@@ -432,7 +432,7 @@ impl_to_css_for_predefined_type!(::cssparser::RGBA); - impl_to_css_for_predefined_type!(::cssparser::Color); - impl_to_css_for_predefined_type!(::cssparser::UnicodeRange); - --/// Define an enum type with unit variants that each corrsepond to a CSS keyword. -+/// Define an enum type with unit variants that each correspond to a CSS keyword. - macro_rules! define_css_keyword_enum { - (pub enum $name:ident { $($variant:ident = $css:expr,)+ }) => { - #[allow(missing_docs)] Property changes on: head/www/firefox/files/patch-bug1519729 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/firefox/files/patch-bug1519629 =================================================================== --- head/www/firefox/files/patch-bug1519629 (revision 495402) +++ head/www/firefox/files/patch-bug1519629 (nonexistent) @@ -1,35 +0,0 @@ -commit f8f381bf03b5 -Author: Emilio Cobos Álvarez -Date: Sun Jan 13 21:42:38 2019 +0100 - - Bug 1519629 - Document a few more macros. ---- - servo/components/style/gecko/regen_atoms.py | 1 + - servo/components/style/gecko_string_cache/namespace.rs | 2 ++ - 2 files changed, 3 insertions(+) - -diff --git servo/components/style/gecko/regen_atoms.py servo/components/style/gecko/regen_atoms.py -index dfc2252aa899..b6f68fceb7d5 100755 ---- servo/components/style/gecko/regen_atoms.py -+++ servo/components/style/gecko/regen_atoms.py -@@ -203,6 +203,7 @@ RULE_TEMPLATE = ('("{atom}") =>\n ' - - MACRO = ''' - #[macro_export] -+/// Returns a static atom by passing the literal string it represents. - macro_rules! atom {{ - {} - }} -diff --git servo/components/style/gecko_string_cache/namespace.rs servo/components/style/gecko_string_cache/namespace.rs -index 4aa4accaf1d4..725e1da21692 100644 ---- servo/components/style/gecko_string_cache/namespace.rs -+++ servo/components/style/gecko_string_cache/namespace.rs -@@ -11,6 +11,8 @@ use std::borrow::Borrow; - use std::fmt; - use std::ops::Deref; - -+/// In Gecko namespaces are just regular atoms, so this is a simple macro to -+/// forward one macro to the other. - #[macro_export] - macro_rules! ns { - () => { Property changes on: head/www/firefox/files/patch-bug1519629 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/www/firefox/files/patch-bug1514156 =================================================================== --- head/www/firefox/files/patch-bug1514156 (revision 495402) +++ head/www/firefox/files/patch-bug1514156 (revision 495403) @@ -1,588 +1,590 @@ commit 94f519f31849 Author: sotaro Date: Tue Feb 12 16:32:51 2019 +0900 Bug 1514156 - Add GLContextEGL::CreateEGLSurfaceForCompositorWidget() for Wayland r=jgilbert When GDK_BACKEND is wayland, widget is not fully mapped during creating CompositorSession. During CompositorSession creation, GLContextProviderEGL::CreateForCompositorWidget() creates GLContextEGL, but we could not create valid EGLSurface. We could create valid EGLSurface when widget is fully mapped. CreateEGLSurfaceForCompositorWidget() is used for creating valid EGLSurface after widget is fully mapped. Differential Revision: https://phabricator.services.mozilla.com/D18654 --- gfx/gl/GLContextEGL.h | 4 ++++ gfx/gl/GLContextProviderEGL.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git gfx/gl/GLContextEGL.h gfx/gl/GLContextEGL.h index 95d5e0c02e23..adb37e59a9f7 100644 --- gfx/gl/GLContextEGL.h +++ gfx/gl/GLContextEGL.h @@ -91,6 +91,10 @@ class GLContextEGL : public GLContext { CreateContextFlags flags, const gfx::IntSize& size, const SurfaceCaps& minCaps, nsACString* const out_FailureId); +#if defined(MOZ_WAYLAND) + static EGLSurface CreateEGLSurfaceForCompositorWidget( + widget::CompositorWidget* aCompositorWidget, bool aForceAccelerated); +#endif protected: friend class GLContextProviderEGL; friend class GLContextEGLFactory; diff --git gfx/gl/GLContextProviderEGL.cpp gfx/gl/GLContextProviderEGL.cpp index 774eb34a8e87..25aa779a7d64 100644 --- gfx/gl/GLContextProviderEGL.cpp +++ gfx/gl/GLContextProviderEGL.cpp @@ -295,6 +295,33 @@ already_AddRefed GLContextEGLFactory::Create( return gl.forget(); } +#if defined(MOZ_WAYLAND) +/* static */ EGLSurface GLContextEGL::CreateEGLSurfaceForCompositorWidget( + widget::CompositorWidget* aCompositorWidget, bool aForceAccelerated) { + nsCString discardFailureId; + if (!GLLibraryEGL::EnsureInitialized(false, &discardFailureId)) { + gfxCriticalNote << "Failed to load EGL library 6!"; + return EGL_NO_SURFACE; + } + + MOZ_ASSERT(aCompositorWidget); + EGLNativeWindowType window = GET_NATIVE_WINDOW_FROM_COMPOSITOR_WIDGET(aCompositorWidget); + if (!window) { + gfxCriticalNote << "window is null"; + return EGL_NO_SURFACE; + } + const bool useWebRender = aCompositorWidget->GetCompositorOptions().UseWebRender(); + + EGLConfig config; + if (!CreateConfig(&config, useWebRender)) { + gfxCriticalNote << "Failed to create EGLConfig!"; + return EGL_NO_SURFACE; + } + + return mozilla::gl::CreateSurfaceFromNativeWindow(window, config); +} +#endif + GLContextEGL::GLContextEGL(CreateContextFlags flags, const SurfaceCaps& caps, bool isOffscreen, EGLConfig config, EGLSurface surface, EGLContext context) commit 0e2cb6d4e88d Author: sotaro Date: Tue Feb 12 16:33:31 2019 +0900 Bug 1514156 - Add RenderCompositorEGL for wayland r=nical When GDK_BACKEND is wayland, widget is not fully mapped during creating CompositorSession. Needs to create valid EGLSurface after widget is fully mapped. Differential Revision: https://phabricator.services.mozilla.com/D18940 --- gfx/webrender_bindings/RenderCompositor.cpp | 12 +++ gfx/webrender_bindings/RenderCompositorEGL.cpp | 132 +++++++++++++++++++++++++ gfx/webrender_bindings/RenderCompositorEGL.h | 54 ++++++++++ gfx/webrender_bindings/moz.build | 10 ++ widget/gtk/CompositorWidgetChild.cpp | 6 ++ widget/gtk/CompositorWidgetChild.h | 4 +- widget/gtk/CompositorWidgetParent.cpp | 8 ++ widget/gtk/CompositorWidgetParent.h | 2 + widget/gtk/GtkCompositorWidget.cpp | 12 +++ widget/gtk/GtkCompositorWidget.h | 11 +++ widget/gtk/PCompositorWidget.ipdl | 1 + widget/gtk/mozcontainer.cpp | 11 +++ widget/gtk/mozcontainer.h | 2 + widget/gtk/nsWindow.cpp | 16 +++ widget/gtk/nsWindow.h | 1 + 15 files changed, 281 insertions(+), 1 deletion(-) diff --git gfx/webrender_bindings/RenderCompositor.cpp gfx/webrender_bindings/RenderCompositor.cpp index 051482fbabbf..a58268096a89 100644 --- gfx/webrender_bindings/RenderCompositor.cpp +++ gfx/webrender_bindings/RenderCompositor.cpp @@ -16,6 +16,10 @@ - #include "mozilla/webrender/RenderCompositorANGLE.h" + # include "mozilla/webrender/RenderCompositorANGLE.h" #endif +#ifdef MOZ_WAYLAND +#include "mozilla/webrender/RenderCompositorEGL.h" +#endif + namespace mozilla { namespace wr { @@ -26,6 +30,14 @@ namespace wr { return RenderCompositorANGLE::Create(std::move(aWidget)); } #endif + +#ifdef MOZ_WAYLAND + UniquePtr eglCompositor = RenderCompositorEGL::Create(aWidget); + if (eglCompositor) { + return eglCompositor; + } +#endif + return RenderCompositorOGL::Create(std::move(aWidget)); } diff --git gfx/webrender_bindings/RenderCompositorEGL.cpp gfx/webrender_bindings/RenderCompositorEGL.cpp new file mode 100644 index 000000000000..16245f59afbd --- /dev/null +++ gfx/webrender_bindings/RenderCompositorEGL.cpp @@ -0,0 +1,132 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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 "RenderCompositorEGL.h" + +#include "GLContext.h" +#include "GLContextEGL.h" +#include "GLContextProvider.h" +#include "GLLibraryEGL.h" +#include "mozilla/widget/CompositorWidget.h" +#include "mozilla/widget/GtkCompositorWidget.h" + +#include +#include + +namespace mozilla { +namespace wr { + +/* static */ UniquePtr RenderCompositorEGL::Create( + RefPtr aWidget) { + + if (GDK_IS_X11_DISPLAY(gdk_display_get_default())) { + return nullptr; + } + + RefPtr gl; + gl = CreateGLContext(aWidget); + if (!gl) { + return nullptr; + } + return MakeUnique(gl, aWidget); +} + +/* static */ already_AddRefed +RenderCompositorEGL::CreateGLContext(RefPtr aWidget) { + nsCString discardFailureId; + + // Create GLContext with dummy EGLSurface. + RefPtr gl = + //XXX headless context did not work. + gl::GLContextProviderEGL::CreateForCompositorWidget(aWidget, true); + if (!gl) { + gfxCriticalNote << "Failed GL context creation for WebRender: " + << gfx::hexa(gl.get()); + return nullptr; + } + + if (!gl->MakeCurrent()) { + gfxCriticalNote << "Failed GL context creation for WebRender: " + << gfx::hexa(gl.get()); + return nullptr; + } + + return gl.forget(); +} + +/* static */ EGLSurface RenderCompositorEGL::CreateEGLSurface( + widget::CompositorWidget* aWidget) { + EGLSurface surface = EGL_NO_SURFACE; + surface = gl::GLContextEGL::CreateEGLSurfaceForCompositorWidget( + aWidget, /* aForceAccelerated */ true); + if (surface == EGL_NO_SURFACE) { + gfxCriticalNote << "Failed to create EGLSurface"; + } + return surface; +} + +RenderCompositorEGL::RenderCompositorEGL( + RefPtr aGL, RefPtr aWidget) + : RenderCompositor(std::move(aWidget)), mGL(aGL), mEGLSurface(EGL_NO_SURFACE) { + MOZ_ASSERT(mGL); +} + +RenderCompositorEGL::~RenderCompositorEGL() { + DestroyEGLSurface(); +} + +bool RenderCompositorEGL::BeginFrame() { + + if (mWidget->AsX11() && mWidget->AsX11()->WaylandRequestsUpdatingEGLSurface()) { + mEGLSurface = CreateEGLSurface(mWidget); + gl::GLContextEGL::Cast(gl())->SetEGLSurfaceOverride(mEGLSurface); + } + + if (!mGL->MakeCurrent()) { + gfxCriticalNote << "Failed to make render context current, can't draw."; + return false; + } + + return true; +} + +void RenderCompositorEGL::EndFrame() +{ + if (mEGLSurface != EGL_NO_SURFACE) { + mGL->SwapBuffers(); + } +} + +void RenderCompositorEGL::WaitForGPU() {} + +void RenderCompositorEGL::Pause() {} + +bool RenderCompositorEGL::Resume() { + return true; +} + +bool RenderCompositorEGL::MakeCurrent() { + gl::GLContextEGL::Cast(gl())->SetEGLSurfaceOverride(mEGLSurface); + return gl()->MakeCurrent(); +} + +void RenderCompositorEGL::DestroyEGLSurface() { + auto* egl = gl::GLLibraryEGL::Get(); + + // Release EGLSurface of back buffer before calling ResizeBuffers(). + if (mEGLSurface) { + gl::GLContextEGL::Cast(gl())->SetEGLSurfaceOverride(EGL_NO_SURFACE); + egl->fDestroySurface(egl->Display(), mEGLSurface); + mEGLSurface = nullptr; + } +} + +LayoutDeviceIntSize RenderCompositorEGL::GetBufferSize() { + return mWidget->GetClientSize(); +} + +} // namespace wr +} // namespace mozilla diff --git gfx/webrender_bindings/RenderCompositorEGL.h gfx/webrender_bindings/RenderCompositorEGL.h new file mode 100644 index 000000000000..f12e16d974af --- /dev/null +++ gfx/webrender_bindings/RenderCompositorEGL.h @@ -0,0 +1,54 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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 MOZILLA_GFX_RENDERCOMPOSITOR_EGL_H +#define MOZILLA_GFX_RENDERCOMPOSITOR_EGL_H + +#include "GLTypes.h" +#include "mozilla/webrender/RenderCompositor.h" + +namespace mozilla { + +namespace wr { + +class RenderCompositorEGL : public RenderCompositor { + public: + static UniquePtr Create( + RefPtr aWidget); + + RenderCompositorEGL(RefPtr aGL, + RefPtr aWidget); + virtual ~RenderCompositorEGL(); + + bool BeginFrame() override; + void EndFrame() override; + void WaitForGPU() override; + void Pause() override; + bool Resume() override; + + gl::GLContext* gl() const override { return mGL; } + + bool MakeCurrent() override; + + bool UseANGLE() const override { return false; } + + LayoutDeviceIntSize GetBufferSize() override; + + protected: + static already_AddRefed CreateGLContext( + RefPtr aWidget); + static EGLSurface CreateEGLSurface(widget::CompositorWidget* aWidget); + + void DestroyEGLSurface(); + + const RefPtr mGL; + EGLSurface mEGLSurface; +}; + +} // namespace wr +} // namespace mozilla + +#endif // MOZILLA_GFX_RENDERCOMPOSITOR_EGL_H diff --git gfx/webrender_bindings/moz.build gfx/webrender_bindings/moz.build index 4acdfbb817d3..f632bc5d24d9 100644 --- gfx/webrender_bindings/moz.build +++ gfx/webrender_bindings/moz.build @@ -67,6 +67,14 @@ if CONFIG['MOZ_ENABLE_D3D10_LAYER']: 'RenderCompositorANGLE.cpp', ] +if CONFIG['MOZ_WAYLAND']: + EXPORTS.mozilla.webrender += [ + 'RenderCompositorEGL.h', + ] + SOURCES += [ + 'RenderCompositorEGL.cpp', + ] + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('android', 'gtk3'): CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] @@ -75,5 +83,7 @@ include('/ipc/chromium/chromium-config.mozbuild') FINAL_LIBRARY = 'xul' +CXXFLAGS += CONFIG['TK_CFLAGS'] + if CONFIG['CC_TYPE'] == 'clang-cl': AllowCompilerWarnings() # workaround for bug 1090497 diff --git widget/gtk/CompositorWidgetChild.cpp widget/gtk/CompositorWidgetChild.cpp index b746fec0a283..07847a298707 100644 --- widget/gtk/CompositorWidgetChild.cpp +++ widget/gtk/CompositorWidgetChild.cpp @@ -35,5 +35,11 @@ void CompositorWidgetChild::NotifyClientSizeChanged( Unused << SendNotifyClientSizeChanged(aClientSize); } +#ifdef MOZ_WAYLAND +void CompositorWidgetChild::RequestsUpdatingEGLSurface() { + Unused << SendRequestsUpdatingEGLSurface(); +} +#endif + } // namespace widget } // namespace mozilla diff --git widget/gtk/CompositorWidgetChild.h widget/gtk/CompositorWidgetChild.h index fe3285eb6f22..0167dbb051c6 100644 --- widget/gtk/CompositorWidgetChild.h +++ widget/gtk/CompositorWidgetChild.h @@ -24,7 +24,9 @@ class CompositorWidgetChild final : public PCompositorWidgetChild, mozilla::ipc::IPCResult RecvUnobserveVsync() override; void NotifyClientSizeChanged(const LayoutDeviceIntSize& aClientSize) override; - +#ifdef MOZ_WAYLAND + void RequestsUpdatingEGLSurface() override; +#endif private: RefPtr mVsyncDispatcher; RefPtr mVsyncObserver; diff --git widget/gtk/CompositorWidgetParent.cpp widget/gtk/CompositorWidgetParent.cpp index ae49ec9174bc..b4031883d3a8 100644 --- widget/gtk/CompositorWidgetParent.cpp +++ widget/gtk/CompositorWidgetParent.cpp @@ -40,5 +40,13 @@ mozilla::ipc::IPCResult CompositorWidgetParent::RecvNotifyClientSizeChanged( return IPC_OK(); } +mozilla::ipc::IPCResult CompositorWidgetParent::RecvRequestsUpdatingEGLSurface() +{ +#ifdef MOZ_WAYLAND + RequestsUpdatingEGLSurface(); +#endif + return IPC_OK(); +} + } // namespace widget } // namespace mozilla diff --git widget/gtk/CompositorWidgetParent.h widget/gtk/CompositorWidgetParent.h index 5d0ccfcf50f2..8ddd58a8964f 100644 --- widget/gtk/CompositorWidgetParent.h +++ widget/gtk/CompositorWidgetParent.h @@ -27,6 +27,8 @@ class CompositorWidgetParent final : public PCompositorWidgetParent, mozilla::ipc::IPCResult RecvNotifyClientSizeChanged( const LayoutDeviceIntSize& aClientSize) override; + mozilla::ipc::IPCResult RecvRequestsUpdatingEGLSurface() override; + private: RefPtr mVsyncObserver; }; diff --git widget/gtk/GtkCompositorWidget.cpp widget/gtk/GtkCompositorWidget.cpp index bc21d6c4d05e..f787e8c23797 100644 --- widget/gtk/GtkCompositorWidget.cpp +++ widget/gtk/GtkCompositorWidget.cpp @@ -85,6 +85,18 @@ void GtkCompositorWidget::NotifyClientSizeChanged( mClientSize = aClientSize; } +#ifdef MOZ_WAYLAND +void GtkCompositorWidget::RequestsUpdatingEGLSurface() { + mWaylandRequestsUpdatingEGLSurface = true; +} + +bool GtkCompositorWidget::WaylandRequestsUpdatingEGLSurface() { + bool ret = mWaylandRequestsUpdatingEGLSurface; + mWaylandRequestsUpdatingEGLSurface = false; + return ret; +} +#endif + LayoutDeviceIntSize GtkCompositorWidget::GetClientSize() { return mClientSize; } uintptr_t GtkCompositorWidget::GetWidgetKey() { diff --git widget/gtk/GtkCompositorWidget.h widget/gtk/GtkCompositorWidget.h index fd0c71426c18..75e156dffb02 100644 --- widget/gtk/GtkCompositorWidget.h +++ widget/gtk/GtkCompositorWidget.h @@ -20,6 +20,10 @@ class PlatformCompositorWidgetDelegate : public CompositorWidgetDelegate { virtual void NotifyClientSizeChanged( const LayoutDeviceIntSize& aClientSize) = 0; +#ifdef MOZ_WAYLAND + virtual void RequestsUpdatingEGLSurface() = 0; +#endif + // CompositorWidgetDelegate Overrides PlatformCompositorWidgetDelegate* AsPlatformSpecificDelegate() override { @@ -62,11 +66,18 @@ class GtkCompositorWidget : public CompositorWidget, void NotifyClientSizeChanged(const LayoutDeviceIntSize& aClientSize) override; +#ifdef MOZ_WAYLAND + void RequestsUpdatingEGLSurface() override; + bool WaylandRequestsUpdatingEGLSurface(); +#endif protected: nsWindow* mWidget; private: LayoutDeviceIntSize mClientSize; +#ifdef MOZ_WAYLAND + bool mWaylandRequestsUpdatingEGLSurface = false; +#endif Display* mXDisplay; Window mXWindow; diff --git widget/gtk/PCompositorWidget.ipdl widget/gtk/PCompositorWidget.ipdl index 178fe78e4dc2..51390e400649 100644 --- widget/gtk/PCompositorWidget.ipdl +++ widget/gtk/PCompositorWidget.ipdl @@ -19,6 +19,7 @@ parent: async __delete__(); async NotifyClientSizeChanged(LayoutDeviceIntSize aClientSize); + async RequestsUpdatingEGLSurface(); child: diff --git widget/gtk/mozcontainer.cpp widget/gtk/mozcontainer.cpp index 8be1f133d39f..8461e7b9d470 100644 --- widget/gtk/mozcontainer.cpp +++ widget/gtk/mozcontainer.cpp @@ -159,6 +159,7 @@ void moz_container_init(MozContainer *container) { // We can draw to x11 window any time. container->ready_to_draw = GDK_IS_X11_DISPLAY(gdk_display_get_default()); container->surface_needs_clear = true; + container->egl_surface_needs_update = false; #endif } @@ -176,6 +177,9 @@ static void frame_callback_handler(void *data, struct wl_callback *callback, uint32_t time) { MozContainer *container = MOZ_CONTAINER(data); g_clear_pointer(&container->frame_callback_handler, wl_callback_destroy); + if (!container->ready_to_draw) { + container->egl_surface_needs_update = true; + } container->ready_to_draw = true; } @@ -208,6 +212,7 @@ static void moz_container_unmap_wayland(MozContainer *container) { g_clear_pointer(&container->frame_callback_handler, wl_callback_destroy); container->surface_needs_clear = true; + container->egl_surface_needs_update = false; container->ready_to_draw = false; } -@@ -523,4 +528,10 @@ gboolean moz_container_surface_needs_clear(MozContainer *container) { +@@ -555,6 +560,12 @@ gboolean moz_container_surface_needs_clear(MozContainer *container) { container->surface_needs_clear = false; return state; } + +gboolean moz_container_egl_surface_needs_update(MozContainer *container){ + gboolean state = container->egl_surface_needs_update; + container->egl_surface_needs_update = false; + return state; +} #endif + + void moz_container_force_default_visual(MozContainer *container) { diff --git widget/gtk/mozcontainer.h widget/gtk/mozcontainer.h index e9c218c1bc3e..1ed6f439805d 100644 --- widget/gtk/mozcontainer.h +++ widget/gtk/mozcontainer.h @@ -77,6 +77,7 @@ struct _MozContainer { struct wl_egl_window *eglwindow; struct wl_callback *frame_callback_handler; gboolean surface_needs_clear; + gboolean egl_surface_needs_update; gboolean ready_to_draw; #endif - }; -@@ -96,6 +97,7 @@ struct wl_egl_window *moz_container_get_wl_egl_window(MozContainer *container); - - gboolean moz_container_has_wl_egl_window(MozContainer *container); + gboolean force_default_visual; +@@ -100,6 +101,7 @@ gboolean moz_container_has_wl_egl_window(MozContainer *container); gboolean moz_container_surface_needs_clear(MozContainer *container); + void moz_container_scale_changed(MozContainer *container, + GtkAllocation *aAllocation); +gboolean moz_container_egl_surface_needs_update(MozContainer *container); #endif #endif /* __MOZ_CONTAINER_H__ */ diff --git widget/gtk/nsWindow.cpp widget/gtk/nsWindow.cpp index 50e6354ea374..ceabbf583a42 100644 --- widget/gtk/nsWindow.cpp +++ widget/gtk/nsWindow.cpp @@ -1886,6 +1886,11 @@ gboolean nsWindow::OnExposeEvent(cairo_t *cr) { region.ScaleRoundOut(scale, scale); if (GetLayerManager()->AsKnowsCompositor() && mCompositorSession) { +#ifdef MOZ_WAYLAND + if(mCompositorWidgetDelegate && WaylandRequestsUpdatingEGLSurface()) { + mCompositorWidgetDelegate->RequestsUpdatingEGLSurface(); + } +#endif // We need to paint to the screen even if nothing changed, since if we // don't have a compositing window manager, our pixels could be stale. GetLayerManager()->SetNeedsComposite(true); @@ -6599,6 +6604,17 @@ bool nsWindow::WaylandSurfaceNeedsClear() { "nsWindow::WaylandSurfaceNeedsClear(): We don't have any mContainer!"); return false; } + +bool nsWindow::WaylandRequestsUpdatingEGLSurface() { + if (mContainer) { + return moz_container_egl_surface_needs_update(MOZ_CONTAINER(mContainer)); + } + + NS_WARNING( + "nsWindow::WaylandSurfaceNeedsClear(): We don't have any mContainer!"); + return false; +} + #endif #ifdef MOZ_X11 diff --git widget/gtk/nsWindow.h widget/gtk/nsWindow.h index b528ebfdeccb..ea0be70d7eb2 100644 --- widget/gtk/nsWindow.h +++ widget/gtk/nsWindow.h @@ -373,6 +373,7 @@ class nsWindow final : public nsBaseWidget { wl_display* GetWaylandDisplay(); wl_surface* GetWaylandSurface(); bool WaylandSurfaceNeedsClear(); + bool WaylandRequestsUpdatingEGLSurface(); #endif virtual void GetCompositorWidgetInitData( mozilla::widget::CompositorWidgetInitData* aInitData) override; Index: head/www/firefox/files/patch-bug1527804 =================================================================== --- head/www/firefox/files/patch-bug1527804 (revision 495402) +++ head/www/firefox/files/patch-bug1527804 (revision 495403) @@ -1,218 +1,218 @@ commit 1579a88e491f Author: sotaro Date: Mon Feb 25 12:15:50 2019 +0000 Bug 1527804 - Trigger composite from frame_callback_handler() r=stransky Bug 1514156 expects that nsWindow::OnExposeEvent() is called after frame_callback_handler() called. But it did not happen during opening add-ons(gecko profiler). Then we need to trigger rendering directly from frame_callback_handler() call. Differential Revision: https://phabricator.services.mozilla.com/D20272 --HG-- extra : moz-landing-system : lando --- widget/gtk/mozcontainer.cpp | 20 +++++++++---------- widget/gtk/mozcontainer.h | 7 +++++-- widget/gtk/nsWindow.cpp | 48 ++++++++++++++++++++++++++++++--------------- widget/gtk/nsWindow.h | 4 +++- 4 files changed, 50 insertions(+), 29 deletions(-) diff --git widget/gtk/mozcontainer.cpp widget/gtk/mozcontainer.cpp index 77ac02e2a049..efe5f7ba86e3 100644 --- widget/gtk/mozcontainer.cpp +++ widget/gtk/mozcontainer.cpp @@ -160,7 +160,7 @@ void moz_container_init(MozContainer *container) { // We can draw to x11 window any time. container->ready_to_draw = GDK_IS_X11_DISPLAY(gdk_display_get_default()); container->surface_needs_clear = true; - container->egl_surface_needs_update = false; + container->inital_draw_cb = nullptr; #endif } @@ -178,12 +178,18 @@ static void frame_callback_handler(void *data, struct wl_callback *callback, uint32_t time) { MozContainer *container = MOZ_CONTAINER(data); g_clear_pointer(&container->frame_callback_handler, wl_callback_destroy); - if (!container->ready_to_draw) { - container->egl_surface_needs_update = true; + if (!container->ready_to_draw && container->inital_draw_cb) { + container->inital_draw_cb(); } container->ready_to_draw = true; } +void moz_container_set_initial_draw_callback( + MozContainer *container, + std::function inital_draw_cb) { + container->inital_draw_cb = inital_draw_cb; +} + static const struct wl_callback_listener frame_listener = { frame_callback_handler}; @@ -214,8 +220,8 @@ static void moz_container_unmap_wayland(MozContainer *container) { g_clear_pointer(&container->frame_callback_handler, wl_callback_destroy); container->surface_needs_clear = true; - container->egl_surface_needs_update = false; container->ready_to_draw = false; + container->inital_draw_cb = nullptr; } static gint moz_container_get_scale(MozContainer *container) { @@ -560,12 +566,6 @@ gboolean moz_container_surface_needs_clear(MozContainer *container) { container->surface_needs_clear = false; return state; } - -gboolean moz_container_egl_surface_needs_update(MozContainer *container){ - gboolean state = container->egl_surface_needs_update; - container->egl_surface_needs_update = false; - return state; -} #endif void moz_container_force_default_visual(MozContainer *container) { diff --git widget/gtk/mozcontainer.h widget/gtk/mozcontainer.h index ae6d656646c8..51be814ef975 100644 --- widget/gtk/mozcontainer.h +++ widget/gtk/mozcontainer.h @@ -9,6 +9,7 @@ #define __MOZ_CONTAINER_H__ #include +#include /* * MozContainer @@ -77,8 +78,8 @@ struct _MozContainer { struct wl_egl_window *eglwindow; struct wl_callback *frame_callback_handler; gboolean surface_needs_clear; - gboolean egl_surface_needs_update; gboolean ready_to_draw; + std::function inital_draw_cb; #endif gboolean force_default_visual; }; -@@ -97,7 +98,9 @@ struct wl_egl_window *moz_container_get_wl_egl_window( - - gboolean moz_container_has_wl_egl_window(MozContainer *container); +@@ -101,7 +102,9 @@ gboolean moz_container_has_wl_egl_window(MozContainer *container); gboolean moz_container_surface_needs_clear(MozContainer *container); + void moz_container_scale_changed(MozContainer *container, + GtkAllocation *aAllocation); -gboolean moz_container_egl_surface_needs_update(MozContainer *container); +void moz_container_set_initial_draw_callback( + MozContainer *container, + std::function inital_draw_cb); #endif #endif /* __MOZ_CONTAINER_H__ */ diff --git widget/gtk/nsWindow.cpp widget/gtk/nsWindow.cpp index acb957d3fb55..54b121ec5514 100644 --- widget/gtk/nsWindow.cpp +++ widget/gtk/nsWindow.cpp @@ -675,6 +675,12 @@ void nsWindow::Destroy() { gFocusWindow = nullptr; } +#ifdef MOZ_WAYLAND + if (mContainer) { + moz_container_set_initial_draw_callback(mContainer, nullptr); + } +#endif + GtkWidget *owningWidget = GetMozContainerWidget(); if (mShell) { gtk_widget_destroy(mShell); @@ -1860,6 +1866,23 @@ static bool ExtractExposeRegion(LayoutDeviceIntRegion &aRegion, cairo_t *cr) { return true; } +#ifdef MOZ_WAYLAND +void nsWindow::WaylandEGLSurfaceForceRedraw() { + MOZ_RELEASE_ASSERT(NS_IsMainThread()); + + if (mIsDestroyed) { + return; + } + + if (CompositorBridgeChild* remoteRenderer = GetRemoteRenderer()) { + if (mCompositorWidgetDelegate) { + mCompositorWidgetDelegate->RequestsUpdatingEGLSurface(); + } + remoteRenderer->SendForcePresent(); + } +} +#endif + gboolean nsWindow::OnExposeEvent(cairo_t *cr) { // Send any pending resize events so that layout can update. // May run event loop. @@ -1888,11 +1911,6 @@ gboolean nsWindow::OnExposeEvent(cairo_t *cr) { region.ScaleRoundOut(scale, scale); if (GetLayerManager()->AsKnowsCompositor() && mCompositorSession) { -#ifdef MOZ_WAYLAND - if(mCompositorWidgetDelegate && WaylandRequestsUpdatingEGLSurface()) { - mCompositorWidgetDelegate->RequestsUpdatingEGLSurface(); - } -#endif // We need to paint to the screen even if nothing changed, since if we // don't have a compositing window manager, our pixels could be stale. GetLayerManager()->SetNeedsComposite(true); @@ -3454,6 +3472,15 @@ nsresult nsWindow::Create(nsIWidget *aParent, nsNativeWidget aNativeParent, // Create a container to hold child windows and child GtkWidgets. GtkWidget *container = moz_container_new(); mContainer = MOZ_CONTAINER(container); +#ifdef MOZ_WAYLAND + if (!mIsX11Display && ComputeShouldAccelerate()) { + RefPtr self(this); + moz_container_set_initial_draw_callback(mContainer, + [self]() -> void { + self->WaylandEGLSurfaceForceRedraw(); + }); + } +#endif // "csd" style is set when widget is realized so we need to call // it explicitly now. @@ -6564,17 +6591,6 @@ bool nsWindow::WaylandSurfaceNeedsClear() { "nsWindow::WaylandSurfaceNeedsClear(): We don't have any mContainer!"); return false; } - -bool nsWindow::WaylandRequestsUpdatingEGLSurface() { - if (mContainer) { - return moz_container_egl_surface_needs_update(MOZ_CONTAINER(mContainer)); - } - - NS_WARNING( - "nsWindow::WaylandSurfaceNeedsClear(): We don't have any mContainer!"); - return false; -} - #endif #ifdef MOZ_X11 diff --git widget/gtk/nsWindow.h widget/gtk/nsWindow.h index 5d119b4911e1..dbced693be1c 100644 --- widget/gtk/nsWindow.h +++ widget/gtk/nsWindow.h @@ -245,6 +245,9 @@ class nsWindow final : public nsBaseWidget { void DispatchContextMenuEventFromMouseEvent(uint16_t domButton, GdkEventButton* aEvent); +#ifdef MOZ_WAYLAND + void WaylandEGLSurfaceForceRedraw(); +#endif public: void ThemeChanged(void); @@ -342,7 +345,6 @@ class nsWindow final : public nsBaseWidget { wl_display* GetWaylandDisplay(); wl_surface* GetWaylandSurface(); bool WaylandSurfaceNeedsClear(); - bool WaylandRequestsUpdatingEGLSurface(); #endif virtual void GetCompositorWidgetInitData( mozilla::widget::CompositorWidgetInitData* aInitData) override; Index: head/www/firefox/files/patch-bug847568 =================================================================== --- head/www/firefox/files/patch-bug847568 (revision 495402) +++ head/www/firefox/files/patch-bug847568 (revision 495403) @@ -1,259 +1,259 @@ # Allow building against system-wide graphite2/harfbuzz. diff --git config/system-headers.mozbuild config/system-headers.mozbuild index 7620b4d00623..09d3db5ca8c0 100644 --- config/system-headers.mozbuild +++ config/system-headers.mozbuild @@ -1300,6 +1300,19 @@ if CONFIG['MOZ_ENABLE_CONTENTMANAGER']: 'SelectSingleContentItemPage.h', ] +if CONFIG['MOZ_SYSTEM_GRAPHITE2']: + system_headers += [ + 'graphite2/Font.h', + 'graphite2/Segment.h', + ] + +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + system_headers += [ + 'harfbuzz/hb-glib.h', + 'harfbuzz/hb-ot.h', + 'harfbuzz/hb.h', + ] + if CONFIG['MOZ_SYSTEM_LIBVPX']: system_headers += [ 'vpx_mem/vpx_mem.h', diff --git dom/base/moz.build dom/base/moz.build index 8e19020315ae..2fcdbb6f7b42 100644 --- dom/base/moz.build +++ dom/base/moz.build @@ -495,6 +495,9 @@ if CONFIG['MOZ_BUILD_APP'] in ['browser', 'mobile/android', 'xulrunner']: if CONFIG['MOZ_X11']: CXXFLAGS += CONFIG['TK_CFLAGS'] +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + GENERATED_FILES += [ 'PropertyUseCounterMap.inc', 'UseCounterList.h', diff --git gfx/graphite2/moz-gr-update.sh gfx/graphite2/moz-gr-update.sh index faaab1b17971..04eff5f09882 100644 --- gfx/graphite2/moz-gr-update.sh +++ gfx/graphite2/moz-gr-update.sh @@ -1,6 +1,7 @@ #!/bin/bash # Script used to update the Graphite2 library in the mozilla source tree +# and bump version for --with-system-graphite2 # This script lives in gfx/graphite2, along with the library source, # but must be run from the top level of the mozilla-central tree. @@ -37,12 +38,16 @@ echo "See" $0 "for update procedure." >> 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/;" {} \; +# chase version for --with-system-graphite2 +perl -p -i -e "s/[0-9]+\,[0-9]+\,[0-9]+/$RELEASE/ and tr/./,/ \ + if /GR2_VERSION_REQUIRE/" old-configure.in + # summarize what's been touched echo Updated to $RELEASE. echo Here is what changed in the gfx/graphite2 directory: echo -hg stat gfx/graphite2 +hg stat old-configure.in gfx/graphite2 echo echo If gfx/graphite2/src/files.mk has changed, please make corresponding diff --git gfx/harfbuzz/README-mozilla gfx/harfbuzz/README-mozilla index 22c76a7df020..a01490bd49ee 100644 --- gfx/harfbuzz/README-mozilla +++ gfx/harfbuzz/README-mozilla @@ -15,3 +15,8 @@ from within the gfx/harfbuzz directory. If the collection of source files changes, manual updates to moz.build may be needed as we don't use the upstream makefiles. + +The in-tree copy may be omitted during build by --with-system-harfbuzz. +Make sure to keep pkg-config version check within toolkit/moz.configure 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 771f652e837a..3b358d84e384 100644 --- gfx/moz.build +++ gfx/moz.build @@ -10,6 +10,12 @@ with Files('**'): if CONFIG['MOZ_TREE_CAIRO']: DIRS += ['cairo'] +if not CONFIG['MOZ_SYSTEM_GRAPHITE2']: + DIRS += ['graphite2/src' ] + +if not CONFIG['MOZ_SYSTEM_HARFBUZZ']: + DIRS += ['harfbuzz/src'] + DIRS += [ '2d', 'ycbcr', @@ -18,8 +24,6 @@ DIRS += [ 'qcms', 'gl', 'layers', - 'graphite2/src', - 'harfbuzz/src', 'ots/src', 'thebes', 'ipc', diff --git gfx/skia/generate_mozbuild.py gfx/skia/generate_mozbuild.py index e06ae3457a47..93faa61594a3 100755 --- gfx/skia/generate_mozbuild.py +++ gfx/skia/generate_mozbuild.py @@ -148,6 +148,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'clang-cl'): '-Wno-unused-private-field', ] +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk3', 'android'): CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] diff --git gfx/skia/moz.build gfx/skia/moz.build index 2118677ca3a8..e4978b413784 100644 --- gfx/skia/moz.build +++ gfx/skia/moz.build @@ -822,6 +822,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'clang-cl'): '-Wno-unused-private-field', ] +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk3', 'android'): CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] diff --git gfx/thebes/moz.build gfx/thebes/moz.build index 56f1b9fe3f4b..0ac1100b0df3 100644 --- gfx/thebes/moz.build +++ gfx/thebes/moz.build @@ -288,7 +288,13 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk3': LOCAL_INCLUDES += CONFIG['SKIA_INCLUDES'] -DEFINES['GRAPHITE2_STATIC'] = True +if CONFIG['MOZ_SYSTEM_GRAPHITE2']: + CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS'] +else: + DEFINES['GRAPHITE2_STATIC'] = True + +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] if CONFIG['CC_TYPE'] == 'clang': # Suppress warnings from Skia header files. diff --git intl/unicharutil/util/moz.build intl/unicharutil/util/moz.build index cb1233c56d7e..06fb1f9f174b 100644 --- intl/unicharutil/util/moz.build +++ intl/unicharutil/util/moz.build @@ -25,4 +25,7 @@ UNIFIED_SOURCES += [ 'nsUnicodeProperties.cpp', ] +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + FINAL_LIBRARY = 'xul' diff --git netwerk/dns/moz.build netwerk/dns/moz.build index 79c26e3e7001..c4d93bc5f7dc 100644 --- netwerk/dns/moz.build +++ netwerk/dns/moz.build @@ -76,3 +76,6 @@ USE_LIBS += ['icu'] if CONFIG['CC_TYPE'] in ('clang', 'gcc'): CXXFLAGS += ['-Wno-error=shadow'] + +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] diff --git old-configure.in old-configure.in index 95a58b634593..b614eef85c89 100644 --- old-configure.in +++ old-configure.in @@ -3951,6 +3951,27 @@ dnl ======================================================== AC_SUBST(MOZ_LINUX_32_SSE2_STARTUP_ERROR) +dnl ======================================================== +dnl Check for graphite2 +dnl ======================================================== +if test -n "$MOZ_SYSTEM_GRAPHITE2"; then + dnl graphite2.pc has bogus version, check manually + _SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS $MOZ_GRAPHITE2_CFLAGS" + AC_TRY_COMPILE([ #include + #define GR2_VERSION_REQUIRE(major,minor,bugfix) \ + ( GR2_VERSION_MAJOR * 10000 + GR2_VERSION_MINOR \ + * 100 + GR2_VERSION_BUGFIX >= \ + (major) * 10000 + (minor) * 100 + (bugfix) ) + ], [ + #if !GR2_VERSION_REQUIRE(1,3,12) + #error "Insufficient graphite2 version." + #endif + ], [], + [AC_MSG_ERROR([--with-system-graphite2 requested but no working libgraphite2 found])]) + CFLAGS=$_SAVE_CFLAGS +fi + dnl ======================================================== dnl Check for pixman and cairo dnl ======================================================== diff --git toolkit/library/moz.build toolkit/library/moz.build index 24f940e1ed7e..079a575adec3 100644 --- toolkit/library/moz.build +++ toolkit/library/moz.build @@ -226,6 +226,12 @@ if CONFIG['MOZ_SYSTEM_PNG']: if CONFIG['MOZ_SYSTEM_WEBP']: OS_LIBS += CONFIG['MOZ_WEBP_LIBS'] +if CONFIG['MOZ_SYSTEM_GRAPHITE2']: + OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS'] + +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS'] + if CONFIG['MOZ_SYSTEM_LIBEVENT']: OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS'] diff --git toolkit/moz.configure toolkit/moz.configure index 9297e4d6f501..d8e273887e4b 100644 --- toolkit/moz.configure +++ toolkit/moz.configure @@ -894,6 +894,26 @@ add_old_configure_assignment('FT2_LIBS', add_old_configure_assignment('FT2_CFLAGS', ft2_info.cflags) +# Graphite2 +# ============================================================== +option('--with-system-graphite2', + help="Use system graphite2 (located with pkgconfig)") + +system_graphite2 = pkg_check_modules('MOZ_GRAPHITE2', 'graphite2', + when='--with-system-graphite2') + +set_config('MOZ_SYSTEM_GRAPHITE2', depends_if(system_graphite2)(lambda _: True)) + +# HarfBuzz +# ============================================================== +option('--with-system-harfbuzz', + help="Use system harfbuzz (located with pkgconfig)") + -+system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 1.9.0', ++system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 2.3.1', + when='--with-system-harfbuzz') + +set_config('MOZ_SYSTEM_HARFBUZZ', depends_if(system_harfbuzz)(lambda _: True)) + # Marionette remote protocol # ============================================================== # Index: head/www/firefox-i18n/Makefile =================================================================== --- head/www/firefox-i18n/Makefile (revision 495402) +++ head/www/firefox-i18n/Makefile (revision 495403) @@ -1,89 +1,89 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= firefox-i18n -PORTVERSION= 65.0.2 +PORTVERSION= 66.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 +MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-x86_64/xpi \ + MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-x86_64/xpi PKGNAMEPREFIX= DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} MAINTAINER= gecko@FreeBSD.org COMMENT= Localized interface for Firefox EXTRACT_DEPENDS= zip:archivers/zip -USES= zip:infozip gecko:firefox,65,build +USES= zip:infozip gecko:firefox,66,build USE_XPI= firefox NO_ARCH= yes USE_SUBMAKE= yes WDIR= langpack-*@firefox.mozilla.org XPI_DISTNAMES= ${FIREFOX_I18N_} PLIST?= ${WRKDIR}/plist PLISTF?= ${WRKDIR}/plist_files .include "${.CURDIR}/Makefile.option" .include .ifndef WITHOUT_SWITCHER RUN_DEPENDS+= xpi-quick-locale-switcher>=0:www/xpi-quick-locale-switcher .endif .include "${.CURDIR}/Makefile.lang" FIREFOX_I18N_?= ${FIREFOX_I18N} .for dist in ${XPI_DISTNAMES} XPI_ID_${dist}= langpack-${dist}@firefox.mozilla.org .endfor pre-everything:: @${ECHO_CMD} @${ECHO_CMD} "Please define FIREFOX_I18N_ALL to install all languages." @${ECHO_CMD} do-extract: @${MKDIR} ${WRKSRC} @for lang in ${FIREFOX_I18N_}; do \ if ! (${UNZIP_CMD} -qo ${_DISTDIR}/$$lang.xpi -d ${WRKSRC}/langpack-$$lang@firefox.mozilla.org);\ then \ exit 1; \ fi; \ cd ${WRKSRC}/langpack-$$lang@firefox.mozilla.org/; \ ${FIND} -H -s * ! -type d | \ ${SED} -e "s|^|lib/xpi/langpack-$$lang@firefox.mozilla.org/|" >> ${PLISTF}; \ done ${CAT} ${PLISTF} | ${SORT} >> ${PLIST} do-install: @${MKDIR} ${STAGEDIR}${XPI_LIBDIR} cd ${WRKSRC}; ${PAX} -rw . ${STAGEDIR}${XPI_LIBDIR} ${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${WDIR}/ @for e in ${STAGEDIR}${XPI_LIBDIR}/${WDIR}; do \ for _dir in ${XPI_LINKFARMS} ; do \ ${LN} -sf $${_e##*/} ${STAGEDIR}$$_dir/ ${_Q} ; \ done \ done @${ECHO_CMD} '@exec ${INSTALL} -d ${XPI_SLDIRS_ALL:S,^${PREFIX},%D,}' ${_A} @${ECHO_CMD} '@exec for _dir in ${XPI_LINKFARMS} ; { \ ${LN} -sf ${XPI_LIBDIR}/${WDIR} $$_dir/ ${_Q}; }' ${_A} @${ECHO_CMD} '@unexec for _dir in ${XPI_LINKFARMS} ; { ${RM} $$_dir/${WDIR} ; }' ${_A} post-patch: ${FIND} ${WRKSRC} -name install.rdf -print0 | \ ${XARGS} -0L1 ${REINPLACE_CMD} -i '' -e '/ Index: head/www/firefox-i18n/distinfo =================================================================== --- head/www/firefox-i18n/distinfo (revision 495402) +++ head/www/firefox-i18n/distinfo (revision 495403) @@ -1,199 +1,199 @@ -TIMESTAMP = 1551305934 -SHA256 (xpi/firefox-i18n-65.0.2/ach.xpi) = 95c253b48831f49ad9a5b39a0a7e86b257fed940052ddd55b8960194f0d97667 -SIZE (xpi/firefox-i18n-65.0.2/ach.xpi) = 447470 -SHA256 (xpi/firefox-i18n-65.0.2/af.xpi) = c3c0e77c6dc71d9f82ef0ee5ebe5d75e83e7ee1d4d55eedee48e1e2294d26273 -SIZE (xpi/firefox-i18n-65.0.2/af.xpi) = 437795 -SHA256 (xpi/firefox-i18n-65.0.2/an.xpi) = 24f3a72b0c8e48fdcc4b626b0b05f6c93e9ce45be698e1398dff6c6faccb6ed0 -SIZE (xpi/firefox-i18n-65.0.2/an.xpi) = 465018 -SHA256 (xpi/firefox-i18n-65.0.2/ar.xpi) = 5d843b42b62a9d80901f53c74c1f36cba317e30c2b711477614b5519fd5d6fee -SIZE (xpi/firefox-i18n-65.0.2/ar.xpi) = 509028 -SHA256 (xpi/firefox-i18n-65.0.2/as.xpi) = 3648a643d5a4598295927da1d4ef0dd75fe2a216508b423c4566e28872fb5c22 -SIZE (xpi/firefox-i18n-65.0.2/as.xpi) = 472926 -SHA256 (xpi/firefox-i18n-65.0.2/ast.xpi) = 846b801351ad56c3bbdc2733e257fadb2f60c45940219278c448d1ce1acfabc9 -SIZE (xpi/firefox-i18n-65.0.2/ast.xpi) = 462348 -SHA256 (xpi/firefox-i18n-65.0.2/az.xpi) = 68149223d25c62b3a58bf6de37eab2362501fa130bcfc094a329c7a98cdc90eb -SIZE (xpi/firefox-i18n-65.0.2/az.xpi) = 488826 -SHA256 (xpi/firefox-i18n-65.0.2/be.xpi) = cc8c93a98e0a791501a81079be52cd05885defb2f50b0dfef16b728dd0cd0b5e -SIZE (xpi/firefox-i18n-65.0.2/be.xpi) = 539172 -SHA256 (xpi/firefox-i18n-65.0.2/bg.xpi) = 206f9dae0720003d7dc444b466c2d1e3754d6800208411d6e2e766e2232b89b1 -SIZE (xpi/firefox-i18n-65.0.2/bg.xpi) = 521967 -SHA256 (xpi/firefox-i18n-65.0.2/bn-BD.xpi) = b3133aed8b7b0312677248524d377345164e60ee92ad132737631b6c5efb13f7 -SIZE (xpi/firefox-i18n-65.0.2/bn-BD.xpi) = 536547 -SHA256 (xpi/firefox-i18n-65.0.2/bn-IN.xpi) = cfe2e3d844cbbac9691c3b4c817eea75605dfbe6c60dbe04e8f822c3590c2e7f -SIZE (xpi/firefox-i18n-65.0.2/bn-IN.xpi) = 528108 -SHA256 (xpi/firefox-i18n-65.0.2/br.xpi) = 98169b8c0ecf2796ebbecfcbaef10803f0286ceea3d3d12ce47827d8e7c680a9 -SIZE (xpi/firefox-i18n-65.0.2/br.xpi) = 468628 -SHA256 (xpi/firefox-i18n-65.0.2/bs.xpi) = c19d61f8e6a48311334e1ea203b42d2a4ca25e9590458e2ed22589d170cf6df4 -SIZE (xpi/firefox-i18n-65.0.2/bs.xpi) = 463216 -SHA256 (xpi/firefox-i18n-65.0.2/ca.xpi) = ff6c54f3f807ca52b1fbfd32ddb6fca54b10de628d9e0a91e848357f6966482c -SIZE (xpi/firefox-i18n-65.0.2/ca.xpi) = 469766 -SHA256 (xpi/firefox-i18n-65.0.2/cak.xpi) = c9e3da840fb21c0ed1b08ae4583a90d9bca09a8da43bb0dadb9d6fd0b55dcb74 -SIZE (xpi/firefox-i18n-65.0.2/cak.xpi) = 492521 -SHA256 (xpi/firefox-i18n-65.0.2/cs.xpi) = 850b2ac8b0147f759409670563c764d8e77d5b4537869e4cf4d3beb58f868066 -SIZE (xpi/firefox-i18n-65.0.2/cs.xpi) = 482373 -SHA256 (xpi/firefox-i18n-65.0.2/cy.xpi) = abb5c1cf5992fc1215237a65a8b7eb5a5b19e69549b8a1b56b674ff4d288fdce -SIZE (xpi/firefox-i18n-65.0.2/cy.xpi) = 471840 -SHA256 (xpi/firefox-i18n-65.0.2/da.xpi) = 85c53725ffd3789110c1f0ffa4ef543982e7384a51b8f1f43fc71abe9ff98c84 -SIZE (xpi/firefox-i18n-65.0.2/da.xpi) = 474711 -SHA256 (xpi/firefox-i18n-65.0.2/de.xpi) = 26b6e157c82f854d9cf99ae2ef78d5cc8d471f336f1b2edc38ad721ef3f1509e -SIZE (xpi/firefox-i18n-65.0.2/de.xpi) = 482317 -SHA256 (xpi/firefox-i18n-65.0.2/dsb.xpi) = 517d2d2ca3a23f71e2e713e36f8c169cf5f85f861378094d207f74f196f9a053 -SIZE (xpi/firefox-i18n-65.0.2/dsb.xpi) = 491047 -SHA256 (xpi/firefox-i18n-65.0.2/el.xpi) = df04998dcb3d4957c206496a7d73fefc1b6aa556c35b21d3698b0d0ad403319f -SIZE (xpi/firefox-i18n-65.0.2/el.xpi) = 549053 -SHA256 (xpi/firefox-i18n-65.0.2/en-CA.xpi) = e1d764e85d16f1c57ca273507b23bc436a42cf1fc20bf029043ffdd381faa9fc -SIZE (xpi/firefox-i18n-65.0.2/en-CA.xpi) = 442344 -SHA256 (xpi/firefox-i18n-65.0.2/en-GB.xpi) = 42477eff3fff90ac96164c337d4e5ee060c7f0734c10a7ac76f5e3db332b7a50 -SIZE (xpi/firefox-i18n-65.0.2/en-GB.xpi) = 441661 -SHA256 (xpi/firefox-i18n-65.0.2/en-US.xpi) = 3034f9d1b67ec29519d7423ca282ed1144fee96d361d8429abca01d7dfdd562a -SIZE (xpi/firefox-i18n-65.0.2/en-US.xpi) = 409450 -SHA256 (xpi/firefox-i18n-65.0.2/en-ZA.xpi) = abe9c4698d4912f0e92e3a7750b3818bbb6220c3905160032ae588305aed445d -SIZE (xpi/firefox-i18n-65.0.2/en-ZA.xpi) = 421346 -SHA256 (xpi/firefox-i18n-65.0.2/eo.xpi) = 6fa58bdf051e7bd55f726a41b746b5ea74d9a0aa9615443881be74d0d550c51c -SIZE (xpi/firefox-i18n-65.0.2/eo.xpi) = 469168 -SHA256 (xpi/firefox-i18n-65.0.2/es-AR.xpi) = 57aa329ce55c22e9092a443d1248c019d00be7084e07c0842718ec42d9f03f17 -SIZE (xpi/firefox-i18n-65.0.2/es-AR.xpi) = 477378 -SHA256 (xpi/firefox-i18n-65.0.2/es-CL.xpi) = c38ac55cd7c2b811f0abdbb329773d7e857c2fa9c2c118638fd7fc6cfb2ff376 -SIZE (xpi/firefox-i18n-65.0.2/es-CL.xpi) = 476266 -SHA256 (xpi/firefox-i18n-65.0.2/es-ES.xpi) = 3694685920fd5ffffc6944791649cdade08d2f2e75c793da3ea95bd8409543b0 -SIZE (xpi/firefox-i18n-65.0.2/es-ES.xpi) = 437115 -SHA256 (xpi/firefox-i18n-65.0.2/es-MX.xpi) = ec3e6797bfaabd20a350f2efc7ae007455a58452a13695563fb546ce4295242e -SIZE (xpi/firefox-i18n-65.0.2/es-MX.xpi) = 479507 -SHA256 (xpi/firefox-i18n-65.0.2/et.xpi) = 76405a3cc72d304d072b39ee0a55b6b41ebb26ab36a66ee356e0707762f928e5 -SIZE (xpi/firefox-i18n-65.0.2/et.xpi) = 460958 -SHA256 (xpi/firefox-i18n-65.0.2/eu.xpi) = d01bffbe8b156326660cbb99266895b49df25abab717530e65fa4095a2677ea2 -SIZE (xpi/firefox-i18n-65.0.2/eu.xpi) = 468845 -SHA256 (xpi/firefox-i18n-65.0.2/fa.xpi) = 047e4f74f77259eb0ea244b1ba8aba7f346f05872f86ebcd8a9b0f5e7df263d9 -SIZE (xpi/firefox-i18n-65.0.2/fa.xpi) = 520152 -SHA256 (xpi/firefox-i18n-65.0.2/ff.xpi) = adf7f2be1f5d98fed844698bf9a4395b032bcb90da656def0400fdcbe0461b0c -SIZE (xpi/firefox-i18n-65.0.2/ff.xpi) = 461640 -SHA256 (xpi/firefox-i18n-65.0.2/fi.xpi) = 94f69e6a48def5aa6637d20b8b70190446007f93010635ba98b5648883c5eddf -SIZE (xpi/firefox-i18n-65.0.2/fi.xpi) = 459827 -SHA256 (xpi/firefox-i18n-65.0.2/fr.xpi) = 88a0bc9775ca7d21fa2a48e39f2cf6747cbe61624bf03a34560de38ca31e4371 -SIZE (xpi/firefox-i18n-65.0.2/fr.xpi) = 486275 -SHA256 (xpi/firefox-i18n-65.0.2/fy-NL.xpi) = 8ba47f6557fbdd5db0237a3371f7ae22b8546262281759634caeb09de4006551 -SIZE (xpi/firefox-i18n-65.0.2/fy-NL.xpi) = 474528 -SHA256 (xpi/firefox-i18n-65.0.2/ga-IE.xpi) = ee77e6e06ddd05fa577eba530686bb388e7d37b0f5f69789c6e480872391633a -SIZE (xpi/firefox-i18n-65.0.2/ga-IE.xpi) = 468134 -SHA256 (xpi/firefox-i18n-65.0.2/gd.xpi) = 827cc839237516b8f9823b3f17fc7ca07fac6a70ddb1bbcb7b54dca3c8e29180 -SIZE (xpi/firefox-i18n-65.0.2/gd.xpi) = 479084 -SHA256 (xpi/firefox-i18n-65.0.2/gl.xpi) = b8680e9b142a7ff5dd339c19db5c70684ad65b732995a593f2c9c6682cd59d4d -SIZE (xpi/firefox-i18n-65.0.2/gl.xpi) = 463713 -SHA256 (xpi/firefox-i18n-65.0.2/gn.xpi) = d02ca07e99f461f6a33febf0a2502fb2a9e45896c36bc80bb77bc4f2f56853f1 -SIZE (xpi/firefox-i18n-65.0.2/gn.xpi) = 485013 -SHA256 (xpi/firefox-i18n-65.0.2/gu-IN.xpi) = 71477121103857280970ff25c63fa0c6fe95b46e0b1a9517b016c6ab1ce2754f -SIZE (xpi/firefox-i18n-65.0.2/gu-IN.xpi) = 544755 -SHA256 (xpi/firefox-i18n-65.0.2/he.xpi) = 4222e71c97ae5ba48dcc24b3792d7bfcaefb77ea39491ed4e43695b3f8b74e3d -SIZE (xpi/firefox-i18n-65.0.2/he.xpi) = 485650 -SHA256 (xpi/firefox-i18n-65.0.2/hi-IN.xpi) = ab5e98402dd177c4ad3bd35dcb2dec604b6a963a0f026ea7a3d14cdcf80e3761 -SIZE (xpi/firefox-i18n-65.0.2/hi-IN.xpi) = 533028 -SHA256 (xpi/firefox-i18n-65.0.2/hr.xpi) = dac2399aba1ebadcbca53c7aca4567b7fc6b43b9816e9de16d08d15eec1afa0d -SIZE (xpi/firefox-i18n-65.0.2/hr.xpi) = 465060 -SHA256 (xpi/firefox-i18n-65.0.2/hsb.xpi) = 7082442f804a8256166b76a87c157e509c9de746c9f78e27528a0496ad0a3a86 -SIZE (xpi/firefox-i18n-65.0.2/hsb.xpi) = 490629 -SHA256 (xpi/firefox-i18n-65.0.2/hu.xpi) = caac0962c7e12d93ad71feed537527e7e7233ba656b043344ab73905f25205e4 -SIZE (xpi/firefox-i18n-65.0.2/hu.xpi) = 488213 -SHA256 (xpi/firefox-i18n-65.0.2/hy-AM.xpi) = 878439050b62dc1762e07f240e5e98bca365ea6a47b532f9b6e2234809253387 -SIZE (xpi/firefox-i18n-65.0.2/hy-AM.xpi) = 510224 -SHA256 (xpi/firefox-i18n-65.0.2/ia.xpi) = 65d8b437778e080b3a76571a16eab11516f9f2415120a8776d303aad642a0f74 -SIZE (xpi/firefox-i18n-65.0.2/ia.xpi) = 465442 -SHA256 (xpi/firefox-i18n-65.0.2/id.xpi) = a50e1e71ddcdd249e51f50d1a4ce243df15a6b48809748ac44c595764774d4c6 -SIZE (xpi/firefox-i18n-65.0.2/id.xpi) = 459198 -SHA256 (xpi/firefox-i18n-65.0.2/is.xpi) = 584b934c1f65cdd2bf426582aa73412198562f2511d45cb5ffd74e600765540e -SIZE (xpi/firefox-i18n-65.0.2/is.xpi) = 466964 -SHA256 (xpi/firefox-i18n-65.0.2/it.xpi) = ab09f6567362514a5b5e87628d8b3d5df4658a5af74a4a7c3d5400047f62fad0 -SIZE (xpi/firefox-i18n-65.0.2/it.xpi) = 356567 -SHA256 (xpi/firefox-i18n-65.0.2/ja.xpi) = e1283bb2c8ee6f06fdae4f9d6aa9e8d55c6b2045984b2ae1486a2d2642c9de33 -SIZE (xpi/firefox-i18n-65.0.2/ja.xpi) = 504408 -SHA256 (xpi/firefox-i18n-65.0.2/ka.xpi) = 130216ec315392a24a64f66117fa160c177ee388f35620be7cca6189018f5e0d -SIZE (xpi/firefox-i18n-65.0.2/ka.xpi) = 512106 -SHA256 (xpi/firefox-i18n-65.0.2/kab.xpi) = a8011846a517cda2515d83b564aae6097f70d4a16f808d5a8e8dbe90762a6f43 -SIZE (xpi/firefox-i18n-65.0.2/kab.xpi) = 480086 -SHA256 (xpi/firefox-i18n-65.0.2/kk.xpi) = d826ccbf9c73dee9c5b37c0972b8158709e6f2367218279ae5cdb6f81772f6da -SIZE (xpi/firefox-i18n-65.0.2/kk.xpi) = 535916 -SHA256 (xpi/firefox-i18n-65.0.2/km.xpi) = 92db9d22827dbc39d675600e00c33109517fab0ec5a579cff38cce8958f02d83 -SIZE (xpi/firefox-i18n-65.0.2/km.xpi) = 526585 -SHA256 (xpi/firefox-i18n-65.0.2/kn.xpi) = a49c5f7eff204066271a195d6adc2334ba011df6530f6be0e08476534b7bdb5f -SIZE (xpi/firefox-i18n-65.0.2/kn.xpi) = 528135 -SHA256 (xpi/firefox-i18n-65.0.2/ko.xpi) = f1118506c3f9f4c8978a7138305ce2a8986494b9922c9e949b1409084c631901 -SIZE (xpi/firefox-i18n-65.0.2/ko.xpi) = 495312 -SHA256 (xpi/firefox-i18n-65.0.2/lij.xpi) = f6ac98e608edac812341bcfd9ddd5aae3acc1f2cd224ea336f246dff15f41944 -SIZE (xpi/firefox-i18n-65.0.2/lij.xpi) = 465958 -SHA256 (xpi/firefox-i18n-65.0.2/lt.xpi) = 08311eb0773cfb48884fb48d446c7ee0ce4a54805254de7fc74e0868bc1adafa -SIZE (xpi/firefox-i18n-65.0.2/lt.xpi) = 490196 -SHA256 (xpi/firefox-i18n-65.0.2/lv.xpi) = f68ede359cd764615d327d2945b70757c36588476e51bd170caee2cb375584d2 -SIZE (xpi/firefox-i18n-65.0.2/lv.xpi) = 478944 -SHA256 (xpi/firefox-i18n-65.0.2/mai.xpi) = aaf0de53b8705a2019a264dc1911e6722de1db325e4135b75c83b431c198dbcf -SIZE (xpi/firefox-i18n-65.0.2/mai.xpi) = 489189 -SHA256 (xpi/firefox-i18n-65.0.2/mk.xpi) = 4a7b2d543d9212a2f853e848f110a806ee7349b59eb7222ab4c83d1254d44633 -SIZE (xpi/firefox-i18n-65.0.2/mk.xpi) = 464196 -SHA256 (xpi/firefox-i18n-65.0.2/ml.xpi) = f167c648a807f63f37be7e03d19de8171fd4a00684a7f32de8624da2f5001c96 -SIZE (xpi/firefox-i18n-65.0.2/ml.xpi) = 534395 -SHA256 (xpi/firefox-i18n-65.0.2/mr.xpi) = 12c5123891810bdfa59cbd21506d3cd9e64956d6a853d6f86c62b017bcc341b0 -SIZE (xpi/firefox-i18n-65.0.2/mr.xpi) = 528022 -SHA256 (xpi/firefox-i18n-65.0.2/ms.xpi) = f121799f6b4c28ab8e714a6f99d9bed1e3f9fcbea867cc16f849496f3dc69d28 -SIZE (xpi/firefox-i18n-65.0.2/ms.xpi) = 460723 -SHA256 (xpi/firefox-i18n-65.0.2/my.xpi) = 939d0e003ef37ee857e9c7aa14bd0f2f7bc5780e48f41f2cdc59c97eb188845f -SIZE (xpi/firefox-i18n-65.0.2/my.xpi) = 523402 -SHA256 (xpi/firefox-i18n-65.0.2/nb-NO.xpi) = df36c662a4ed25b5faf00a0de36ae819f94962b9cc65ab1692e471b800fb2cae -SIZE (xpi/firefox-i18n-65.0.2/nb-NO.xpi) = 461047 -SHA256 (xpi/firefox-i18n-65.0.2/ne-NP.xpi) = b15e36ad98c131cf8fa8965a7e6be81f1c2f639547766a18dce2db427317307a -SIZE (xpi/firefox-i18n-65.0.2/ne-NP.xpi) = 503835 -SHA256 (xpi/firefox-i18n-65.0.2/nl.xpi) = edfc5ddb00aa12e07b9cd23cefbef57419b39ec0bcbb8b4150732787dc2ca089 -SIZE (xpi/firefox-i18n-65.0.2/nl.xpi) = 458740 -SHA256 (xpi/firefox-i18n-65.0.2/nn-NO.xpi) = 8a4d4b07cbefa25f42c464e678b79f577f1e8e32a1dfa394ac3c456e31e7714c -SIZE (xpi/firefox-i18n-65.0.2/nn-NO.xpi) = 460171 -SHA256 (xpi/firefox-i18n-65.0.2/oc.xpi) = 97013d1021ce47f1c166e3ed48b9b9b16749e836d27737321bbbad4b7733e3d2 -SIZE (xpi/firefox-i18n-65.0.2/oc.xpi) = 476898 -SHA256 (xpi/firefox-i18n-65.0.2/or.xpi) = 1bda37ce37288f66cd75b615cb11b05dfc8d554e38a2fbc53e5f604697353690 -SIZE (xpi/firefox-i18n-65.0.2/or.xpi) = 479095 -SHA256 (xpi/firefox-i18n-65.0.2/pa-IN.xpi) = 2969bc66aaee210086433274fe46b35df21497322cff1887d292cde0a2d351d3 -SIZE (xpi/firefox-i18n-65.0.2/pa-IN.xpi) = 510895 -SHA256 (xpi/firefox-i18n-65.0.2/pl.xpi) = 0835febc1a438c71ccb67d3d0fd7a4823e757b02d79d9822ac53c7138c248a81 -SIZE (xpi/firefox-i18n-65.0.2/pl.xpi) = 378838 -SHA256 (xpi/firefox-i18n-65.0.2/pt-BR.xpi) = 78eada45c6559d57d1b9fadc09b8b6907c2a084976df2cf17ee020f8db509e51 -SIZE (xpi/firefox-i18n-65.0.2/pt-BR.xpi) = 463451 -SHA256 (xpi/firefox-i18n-65.0.2/pt-PT.xpi) = 21b0deff98d0b40a5598341ce4fbabd9e7f35cbdf802db6e35e489cb02314fda -SIZE (xpi/firefox-i18n-65.0.2/pt-PT.xpi) = 475351 -SHA256 (xpi/firefox-i18n-65.0.2/rm.xpi) = 1b96211c6b19c708abd2e2a8e64c6309495b1311525c2158cf0b2ffa00970310 -SIZE (xpi/firefox-i18n-65.0.2/rm.xpi) = 466667 -SHA256 (xpi/firefox-i18n-65.0.2/ro.xpi) = 587083a8a8e6d44471a71210a227b6ae53743324581c3c8adcc1a2a8ad3df19c -SIZE (xpi/firefox-i18n-65.0.2/ro.xpi) = 475448 -SHA256 (xpi/firefox-i18n-65.0.2/ru.xpi) = 4be04400993c5cf09b74950996545b9fadbf1a3f638328d819aac578567bd6f6 -SIZE (xpi/firefox-i18n-65.0.2/ru.xpi) = 542369 -SHA256 (xpi/firefox-i18n-65.0.2/si.xpi) = 1b479350faa28ee4dce8f27f24b17e4426e147f021c4a31cf191320065a207fc -SIZE (xpi/firefox-i18n-65.0.2/si.xpi) = 491187 -SHA256 (xpi/firefox-i18n-65.0.2/sk.xpi) = d080d9be42c31f71369eafba598ad97b14c29e12c6f25d903485034c2de599a7 -SIZE (xpi/firefox-i18n-65.0.2/sk.xpi) = 492590 -SHA256 (xpi/firefox-i18n-65.0.2/sl.xpi) = 5fd34ce6ecbb87764617021fac0c76909b02d3d62db8cd562b2aab46b34ac73a -SIZE (xpi/firefox-i18n-65.0.2/sl.xpi) = 468056 -SHA256 (xpi/firefox-i18n-65.0.2/son.xpi) = 8635d9f892da325c927cd963050cac218310d92b61550a87c7d391a5f07dcf08 -SIZE (xpi/firefox-i18n-65.0.2/son.xpi) = 443513 -SHA256 (xpi/firefox-i18n-65.0.2/sq.xpi) = 0662c19a38d4f11c556184382f58b100d6fd6a5b2b76c5f644f77c29990aacf9 -SIZE (xpi/firefox-i18n-65.0.2/sq.xpi) = 483765 -SHA256 (xpi/firefox-i18n-65.0.2/sr.xpi) = 1911e24b2f03d802ec04afa853bc938747927037a49587372b63dfe6ee30c12c -SIZE (xpi/firefox-i18n-65.0.2/sr.xpi) = 498961 -SHA256 (xpi/firefox-i18n-65.0.2/sv-SE.xpi) = 880c6498ce6d51283be263ea66afcb7d8e8261f8488efa7975ccea4ba40bac4d -SIZE (xpi/firefox-i18n-65.0.2/sv-SE.xpi) = 470823 -SHA256 (xpi/firefox-i18n-65.0.2/ta.xpi) = c9841f5b807ad28da5b4635cdfa27e4e2ea8418423cbf535683443b56a8d76dc -SIZE (xpi/firefox-i18n-65.0.2/ta.xpi) = 522782 -SHA256 (xpi/firefox-i18n-65.0.2/te.xpi) = 6386b6df31d2fecb4389e70ff9d8d2b58c0d149458afbe9cad0cfd9af5a07ce4 -SIZE (xpi/firefox-i18n-65.0.2/te.xpi) = 534599 -SHA256 (xpi/firefox-i18n-65.0.2/th.xpi) = 26ad8fa85b1c4de1c267883954680307bb3e538349766d01656033400ecb0d92 -SIZE (xpi/firefox-i18n-65.0.2/th.xpi) = 507526 -SHA256 (xpi/firefox-i18n-65.0.2/tr.xpi) = 65bc219572e46ef73f39b3a0ab06d58fe933c849c4c2a4442d371901bf0b49e0 -SIZE (xpi/firefox-i18n-65.0.2/tr.xpi) = 481312 -SHA256 (xpi/firefox-i18n-65.0.2/uk.xpi) = 3efbec368bf6645d7702c8c8d21df03fd428104baa653842f9ae2fe6fee9b99d -SIZE (xpi/firefox-i18n-65.0.2/uk.xpi) = 528938 -SHA256 (xpi/firefox-i18n-65.0.2/ur.xpi) = 70553fc910ad0292bbfdffa8a96bf3f973f6c8571ea6818c776d2731d0589ae6 -SIZE (xpi/firefox-i18n-65.0.2/ur.xpi) = 511341 -SHA256 (xpi/firefox-i18n-65.0.2/uz.xpi) = 2e24b8c2b531b250099085f092a0a838ce59b13d0abe905a2957219d6fc4de3e -SIZE (xpi/firefox-i18n-65.0.2/uz.xpi) = 460825 -SHA256 (xpi/firefox-i18n-65.0.2/vi.xpi) = 21729c30481ba2abf35f4a95d2b5ff11e39bd21ac6f7fec9a8d01b0eaeccdea4 -SIZE (xpi/firefox-i18n-65.0.2/vi.xpi) = 486535 -SHA256 (xpi/firefox-i18n-65.0.2/xh.xpi) = a9cae01d51dc31d8fffc65e356905357d424d714ed53dacfcd1b9039597d80a1 -SIZE (xpi/firefox-i18n-65.0.2/xh.xpi) = 455426 -SHA256 (xpi/firefox-i18n-65.0.2/zh-CN.xpi) = 47160f6b219c7e8c4c5efe8ac2c59b17297bbd37afc8c63dcace5986ab21c364 -SIZE (xpi/firefox-i18n-65.0.2/zh-CN.xpi) = 494811 -SHA256 (xpi/firefox-i18n-65.0.2/zh-TW.xpi) = 808b1ba76d1cd1d352fa867684014ce1012cb40330a23f85f2a901cf746b51b9 -SIZE (xpi/firefox-i18n-65.0.2/zh-TW.xpi) = 492982 +TIMESTAMP = 1552350164 +SHA256 (xpi/firefox-i18n-66.0/ach.xpi) = 38bf980ccc65edb2062e8184711ba416dcdf2b99258b3a9bcaabdde9be2a2af2 +SIZE (xpi/firefox-i18n-66.0/ach.xpi) = 463002 +SHA256 (xpi/firefox-i18n-66.0/af.xpi) = a20fff65b31acd17328b0778b70f12e1abc03d4a1e2fb9c081e596ac9d1d05d0 +SIZE (xpi/firefox-i18n-66.0/af.xpi) = 456175 +SHA256 (xpi/firefox-i18n-66.0/an.xpi) = d43208314efcd905afb5b422faf7975b0b0f03098ba32aef23d7fc32c189971b +SIZE (xpi/firefox-i18n-66.0/an.xpi) = 480030 +SHA256 (xpi/firefox-i18n-66.0/ar.xpi) = 0926f5ee3c5b3e7e69af10772d9a98de1e4f99c4548a3487f36f5b21760d0158 +SIZE (xpi/firefox-i18n-66.0/ar.xpi) = 532067 +SHA256 (xpi/firefox-i18n-66.0/as.xpi) = 22e206bbbf4dccaba1b30bd3e08e0c8ffa473f579f0fcf8d4f99ee88aaef1914 +SIZE (xpi/firefox-i18n-66.0/as.xpi) = 492054 +SHA256 (xpi/firefox-i18n-66.0/ast.xpi) = 053334f8acd9ae64a8b6a298b73ba464d6ea79c6cdd48cce4f81ca76761bd320 +SIZE (xpi/firefox-i18n-66.0/ast.xpi) = 479946 +SHA256 (xpi/firefox-i18n-66.0/az.xpi) = f73d59c5c39787ef3afe5772fbd0eec14e0443c5486dcc59c9c721901754c9d1 +SIZE (xpi/firefox-i18n-66.0/az.xpi) = 505702 +SHA256 (xpi/firefox-i18n-66.0/be.xpi) = e738513f9e1ef6a57ec3a3e2918821ff8327baf1961ea5b3a23b26861579c9b7 +SIZE (xpi/firefox-i18n-66.0/be.xpi) = 561455 +SHA256 (xpi/firefox-i18n-66.0/bg.xpi) = 8de26dbc0ed0bf331e19683bd01d153e6f8344c458e3a2f65ca96eec3d5dd85b +SIZE (xpi/firefox-i18n-66.0/bg.xpi) = 542580 +SHA256 (xpi/firefox-i18n-66.0/bn-BD.xpi) = 051c3d0aaf264677f379d602b8f5364a8e211bd666eb40d5d6c8e7a7a29b724e +SIZE (xpi/firefox-i18n-66.0/bn-BD.xpi) = 560288 +SHA256 (xpi/firefox-i18n-66.0/bn-IN.xpi) = 1c5c71ad053f2ae1b60f779ce60aa3e3c31aaee39c99d7f7f29670fa4ca0adae +SIZE (xpi/firefox-i18n-66.0/bn-IN.xpi) = 550403 +SHA256 (xpi/firefox-i18n-66.0/br.xpi) = 80455126fdc45b0c82bfe179ca6dcd855dadb09dd8c98c6d557affa3601705c5 +SIZE (xpi/firefox-i18n-66.0/br.xpi) = 485256 +SHA256 (xpi/firefox-i18n-66.0/bs.xpi) = b9622fedb3c1fdeeb06314065426cd8037b24253be98997f8e055d5365a43c6a +SIZE (xpi/firefox-i18n-66.0/bs.xpi) = 477662 +SHA256 (xpi/firefox-i18n-66.0/ca.xpi) = 784e1bcc6ed815df623266b2dd1373e075138545e6a3edb857807b6fd1aa5f36 +SIZE (xpi/firefox-i18n-66.0/ca.xpi) = 485885 +SHA256 (xpi/firefox-i18n-66.0/cak.xpi) = d8e7226ffc925592de21b6dc9e0510c21010a4ffa5530aa363eef59ea9f84552 +SIZE (xpi/firefox-i18n-66.0/cak.xpi) = 509928 +SHA256 (xpi/firefox-i18n-66.0/cs.xpi) = 74224edd23a5ad060ddfcc92d7309cc816ecfd3446579c17c7b22ad18f6ad000 +SIZE (xpi/firefox-i18n-66.0/cs.xpi) = 500089 +SHA256 (xpi/firefox-i18n-66.0/cy.xpi) = 1467fb89ceb24407f0067039399a688b0269990c633f509a91853f890a3ce582 +SIZE (xpi/firefox-i18n-66.0/cy.xpi) = 487012 +SHA256 (xpi/firefox-i18n-66.0/da.xpi) = 81437a7dcd6c06ff7daf644d4064b20196b433174798f0a65231da989a1af685 +SIZE (xpi/firefox-i18n-66.0/da.xpi) = 498126 +SHA256 (xpi/firefox-i18n-66.0/de.xpi) = d9b8725b4c29368864f727b89dcce7c697ebfbe5b7104f35f32f719df5bab408 +SIZE (xpi/firefox-i18n-66.0/de.xpi) = 497030 +SHA256 (xpi/firefox-i18n-66.0/dsb.xpi) = cafe112406886401e5aaf24a149e95c55cadb6d64944624508043fedd974e84d +SIZE (xpi/firefox-i18n-66.0/dsb.xpi) = 509081 +SHA256 (xpi/firefox-i18n-66.0/el.xpi) = 5516a66b0abe9e32f2d2b100346c793a09152439f94808f7d2cc587dce24ab6f +SIZE (xpi/firefox-i18n-66.0/el.xpi) = 569498 +SHA256 (xpi/firefox-i18n-66.0/en-CA.xpi) = 6323285a78563ce57a6fec8b66482ff689a696f6d439d132494879e428a55c04 +SIZE (xpi/firefox-i18n-66.0/en-CA.xpi) = 459951 +SHA256 (xpi/firefox-i18n-66.0/en-GB.xpi) = eb6fb40a56e306a4aa808e2caee30b01e26f17173004791f24bd652c5cb23156 +SIZE (xpi/firefox-i18n-66.0/en-GB.xpi) = 460011 +SHA256 (xpi/firefox-i18n-66.0/en-US.xpi) = e700997196aad22945f1568147093e12520672f7ad349ac521ba5875ea72a19e +SIZE (xpi/firefox-i18n-66.0/en-US.xpi) = 430799 +SHA256 (xpi/firefox-i18n-66.0/en-ZA.xpi) = 8a435c0309126883a247ed0601e7b34a8468be97650a4cf57084e875f07e0c81 +SIZE (xpi/firefox-i18n-66.0/en-ZA.xpi) = 439196 +SHA256 (xpi/firefox-i18n-66.0/eo.xpi) = c7f3f3f9f54303c7dbabc7c49e451f800259b1705ed33451eda79c80027b16a4 +SIZE (xpi/firefox-i18n-66.0/eo.xpi) = 485981 +SHA256 (xpi/firefox-i18n-66.0/es-AR.xpi) = da33f376658d93de8eeaef01656ea98cfa601a06fd601acd38b96b1dde20b9e7 +SIZE (xpi/firefox-i18n-66.0/es-AR.xpi) = 493493 +SHA256 (xpi/firefox-i18n-66.0/es-CL.xpi) = 6a3fe5c69e8645d3117843dd404738d5d68aeb5903a284e63e76a54907634b9f +SIZE (xpi/firefox-i18n-66.0/es-CL.xpi) = 490039 +SHA256 (xpi/firefox-i18n-66.0/es-ES.xpi) = 88f20d7cde28e92b2c46b7196aa0d54810457f1de2034df0b668dd3217d82417 +SIZE (xpi/firefox-i18n-66.0/es-ES.xpi) = 454239 +SHA256 (xpi/firefox-i18n-66.0/es-MX.xpi) = ab24513ee83412a30a6e2d3cbf4c8b57da1817d7a67b09672cfdd97ca1ff0f1e +SIZE (xpi/firefox-i18n-66.0/es-MX.xpi) = 495059 +SHA256 (xpi/firefox-i18n-66.0/et.xpi) = 99fa2e18489da27671b731be776e6b1941a1d5bb1e1f65865f868adc56bcc1ba +SIZE (xpi/firefox-i18n-66.0/et.xpi) = 476258 +SHA256 (xpi/firefox-i18n-66.0/eu.xpi) = f16ac0536fe52bf9a81aeb50c47384ea80fdbb35f3151352c641fc973adb074d +SIZE (xpi/firefox-i18n-66.0/eu.xpi) = 484333 +SHA256 (xpi/firefox-i18n-66.0/fa.xpi) = f3ff9200a80a55f803489d171e9c29f8ce69cff7c4a8c2e7f3e11029972cd48a +SIZE (xpi/firefox-i18n-66.0/fa.xpi) = 543899 +SHA256 (xpi/firefox-i18n-66.0/ff.xpi) = 0249c2a15b7cdbefe4f2236f574ebb7e5cdb7173ab95094bbf04c8f63029c141 +SIZE (xpi/firefox-i18n-66.0/ff.xpi) = 479840 +SHA256 (xpi/firefox-i18n-66.0/fi.xpi) = 74065d98afc21da6d02062ed566975750db779fe5bdbe5efc6739b8f60fa5df3 +SIZE (xpi/firefox-i18n-66.0/fi.xpi) = 475030 +SHA256 (xpi/firefox-i18n-66.0/fr.xpi) = ec51a8e18f9b9385035c54d69fb44841d3b61376070ab286ed1d589878ea3a90 +SIZE (xpi/firefox-i18n-66.0/fr.xpi) = 501359 +SHA256 (xpi/firefox-i18n-66.0/fy-NL.xpi) = bec59fac51b6e28efdb97616e7e0914d27cfa7ce5c5a080fd89896feaa07d009 +SIZE (xpi/firefox-i18n-66.0/fy-NL.xpi) = 490710 +SHA256 (xpi/firefox-i18n-66.0/ga-IE.xpi) = f3a8cfdf390a3fd964c2650eb7094d47e382ec6cf898c287224cf0e02ac30a3a +SIZE (xpi/firefox-i18n-66.0/ga-IE.xpi) = 484934 +SHA256 (xpi/firefox-i18n-66.0/gd.xpi) = 69fc523c760224a24dec930574c67954875b33d1fefc67d6ab47885905115fbf +SIZE (xpi/firefox-i18n-66.0/gd.xpi) = 494478 +SHA256 (xpi/firefox-i18n-66.0/gl.xpi) = ab54c81973ae674c7e6435c82e4823bc958a83a9e696998148432c3f6f8405a8 +SIZE (xpi/firefox-i18n-66.0/gl.xpi) = 478743 +SHA256 (xpi/firefox-i18n-66.0/gn.xpi) = 612140f60fbe605334434b02c7a2216887e5a7e4078696b32d1fb3158f389e64 +SIZE (xpi/firefox-i18n-66.0/gn.xpi) = 503074 +SHA256 (xpi/firefox-i18n-66.0/gu-IN.xpi) = 88f6ab14b873900feca4f486ae0538179db42ac79864a63d8e8ac9a7bcef2986 +SIZE (xpi/firefox-i18n-66.0/gu-IN.xpi) = 565987 +SHA256 (xpi/firefox-i18n-66.0/he.xpi) = 58dadc2fd3d813e1425a436de9c80bd86369debcd8b14384239178ffef3fd439 +SIZE (xpi/firefox-i18n-66.0/he.xpi) = 504548 +SHA256 (xpi/firefox-i18n-66.0/hi-IN.xpi) = 64b5c8db4c00fa6e393bdb93ef740964c4ef3ba6330c855871ae5227c59c5615 +SIZE (xpi/firefox-i18n-66.0/hi-IN.xpi) = 551427 +SHA256 (xpi/firefox-i18n-66.0/hr.xpi) = 73fa1fc5e0cc481afd5231d6ab3690a7d51d497c4d0dfc78ff9df383055c60b7 +SIZE (xpi/firefox-i18n-66.0/hr.xpi) = 484972 +SHA256 (xpi/firefox-i18n-66.0/hsb.xpi) = 783fb06e35f2d981bfedee626772c443a5cf0bb1e06c5f23dff808384caa23a7 +SIZE (xpi/firefox-i18n-66.0/hsb.xpi) = 508179 +SHA256 (xpi/firefox-i18n-66.0/hu.xpi) = d9412aeaa59893a3dc7936bdbc012e767609c200cb884b80c8971ec9befcead7 +SIZE (xpi/firefox-i18n-66.0/hu.xpi) = 505388 +SHA256 (xpi/firefox-i18n-66.0/hy-AM.xpi) = e458d787f884131e456d4e3de18df468ff1040074c64ab53b482624e78651305 +SIZE (xpi/firefox-i18n-66.0/hy-AM.xpi) = 534502 +SHA256 (xpi/firefox-i18n-66.0/ia.xpi) = 2a1ac83683b5ba7d1319c9da0e76ac699a947dc2959ba45ea178a023c008760a +SIZE (xpi/firefox-i18n-66.0/ia.xpi) = 480587 +SHA256 (xpi/firefox-i18n-66.0/id.xpi) = 287d0432cf16ce86cb2d49cc7fdedc7bf468ddc76d4ec93438861a9f199d10e0 +SIZE (xpi/firefox-i18n-66.0/id.xpi) = 473659 +SHA256 (xpi/firefox-i18n-66.0/is.xpi) = ead7e3371128c9a73644b93b8de66a5cca0b51835f5f190c3079947e4c695284 +SIZE (xpi/firefox-i18n-66.0/is.xpi) = 486559 +SHA256 (xpi/firefox-i18n-66.0/it.xpi) = 69d18ee6a57850a6d4420039c894a85114f269729ffb949f83cc9e031c49f603 +SIZE (xpi/firefox-i18n-66.0/it.xpi) = 373486 +SHA256 (xpi/firefox-i18n-66.0/ja.xpi) = 65c9caefbf633a8387b50e5fad02e67bfb62fb77f9d9c98e81c601907e080443 +SIZE (xpi/firefox-i18n-66.0/ja.xpi) = 520926 +SHA256 (xpi/firefox-i18n-66.0/ka.xpi) = bd1e5048f62d884e710c89f101b4d6b7dc2a0084cbcfb0d1c0267ee0f79953d9 +SIZE (xpi/firefox-i18n-66.0/ka.xpi) = 528975 +SHA256 (xpi/firefox-i18n-66.0/kab.xpi) = 2b3328f68896dd1ab5ed453714a773bdf4295ce33bb4445ca7db8909d7a0e943 +SIZE (xpi/firefox-i18n-66.0/kab.xpi) = 497435 +SHA256 (xpi/firefox-i18n-66.0/kk.xpi) = 044f7a11fc6c76c4d1185db5a7e4da050a42c5f29a9014d905d315d4f54d0b40 +SIZE (xpi/firefox-i18n-66.0/kk.xpi) = 558931 +SHA256 (xpi/firefox-i18n-66.0/km.xpi) = 28b3b92462a78eaf37f3ca266efc14559a931bdc89f0e93f1ee4f5b4ec2e662f +SIZE (xpi/firefox-i18n-66.0/km.xpi) = 550542 +SHA256 (xpi/firefox-i18n-66.0/kn.xpi) = 61ff155b2753fb92e5bcf5a77cc42b7af71b274a430bb081fc969ac0f96d673f +SIZE (xpi/firefox-i18n-66.0/kn.xpi) = 548122 +SHA256 (xpi/firefox-i18n-66.0/ko.xpi) = c356166da266876aa385e6577ac2372148217c82a87559bc318886acfd76cb05 +SIZE (xpi/firefox-i18n-66.0/ko.xpi) = 514315 +SHA256 (xpi/firefox-i18n-66.0/lij.xpi) = 5d691987b93b0719d67872b992dcb7d183e74cb3242d74014e3685a5e6804fd8 +SIZE (xpi/firefox-i18n-66.0/lij.xpi) = 480717 +SHA256 (xpi/firefox-i18n-66.0/lt.xpi) = ea7464f3dd5d6406545ac10d28566d82b17677877cc61f638edc8e962ba6813f +SIZE (xpi/firefox-i18n-66.0/lt.xpi) = 507962 +SHA256 (xpi/firefox-i18n-66.0/lv.xpi) = d9254f6e5ff7a582c888ad3e079f21556063d144b6103d84e06d288df4c6b431 +SIZE (xpi/firefox-i18n-66.0/lv.xpi) = 496413 +SHA256 (xpi/firefox-i18n-66.0/mai.xpi) = d2190a63b9cb13fd120c86b7dcfe2893abcf3476b0474e1feb40740152fddf35 +SIZE (xpi/firefox-i18n-66.0/mai.xpi) = 509290 +SHA256 (xpi/firefox-i18n-66.0/mk.xpi) = 2bbb63c3d6e3a9c89eb0729af2e0a5f107387935beb12546886e637ff7c02c70 +SIZE (xpi/firefox-i18n-66.0/mk.xpi) = 487024 +SHA256 (xpi/firefox-i18n-66.0/ml.xpi) = 26495ace5adf27b0063d8dc308248c5763d9becc43c43adb2e0bb7fd4058bafa +SIZE (xpi/firefox-i18n-66.0/ml.xpi) = 557013 +SHA256 (xpi/firefox-i18n-66.0/mr.xpi) = 59f6142c632155425973a9b77b17986af034d33232e4fd7bafa03b4b62847638 +SIZE (xpi/firefox-i18n-66.0/mr.xpi) = 547283 +SHA256 (xpi/firefox-i18n-66.0/ms.xpi) = e8b332740992aaaac7c34d35141b1b4bbe8660381d033b7fb10dee5646501149 +SIZE (xpi/firefox-i18n-66.0/ms.xpi) = 475655 +SHA256 (xpi/firefox-i18n-66.0/my.xpi) = 4852719d1d5ec5622c410154b9b79aac05636cef4a7c5b7dfbfc844af29b994e +SIZE (xpi/firefox-i18n-66.0/my.xpi) = 552372 +SHA256 (xpi/firefox-i18n-66.0/nb-NO.xpi) = fb8c528e29ab28d69e4d1255456d886e4d53872fc10c1c7b00da915f581dc150 +SIZE (xpi/firefox-i18n-66.0/nb-NO.xpi) = 478646 +SHA256 (xpi/firefox-i18n-66.0/ne-NP.xpi) = c44b5c64b3915a4c81ecfb61c883329c5d14db073ac29ee46108193b3f12ea4a +SIZE (xpi/firefox-i18n-66.0/ne-NP.xpi) = 522989 +SHA256 (xpi/firefox-i18n-66.0/nl.xpi) = b7ef32e1666f7aac012ed5bd55b609a799b5e6ed3a2e19ce010e49a4728170b9 +SIZE (xpi/firefox-i18n-66.0/nl.xpi) = 471291 +SHA256 (xpi/firefox-i18n-66.0/nn-NO.xpi) = 21d1d0a543f19403b13d91504473d1cc1073b32191619ab83a373dde86e88560 +SIZE (xpi/firefox-i18n-66.0/nn-NO.xpi) = 477661 +SHA256 (xpi/firefox-i18n-66.0/oc.xpi) = 5a5cb204af4da30e67b3af412f670aeb7bf1dafe521bc2e40c3fc1cfa002480d +SIZE (xpi/firefox-i18n-66.0/oc.xpi) = 491562 +SHA256 (xpi/firefox-i18n-66.0/or.xpi) = 5ff7ec65f3e47ad61bcca4606aadc288061bcf8433f17b5ed6fae5ad0a15b8bb +SIZE (xpi/firefox-i18n-66.0/or.xpi) = 498550 +SHA256 (xpi/firefox-i18n-66.0/pa-IN.xpi) = d45a6a41423fb93a8adc4f15f466fd702726d51acb446f13dfa3f20513307293 +SIZE (xpi/firefox-i18n-66.0/pa-IN.xpi) = 534245 +SHA256 (xpi/firefox-i18n-66.0/pl.xpi) = 305c385f4c46388dfb201a27287d1bc3245112d452388d340d98f7b75ca1caea +SIZE (xpi/firefox-i18n-66.0/pl.xpi) = 464672 +SHA256 (xpi/firefox-i18n-66.0/pt-BR.xpi) = a164b7629447f06c455f437caa4d05241c19bd5dc3a2a3023f850992863cf307 +SIZE (xpi/firefox-i18n-66.0/pt-BR.xpi) = 480099 +SHA256 (xpi/firefox-i18n-66.0/pt-PT.xpi) = 714f2cc2aefe22255615c61b4010f7192ff2463e76b1874f77a787da630a2741 +SIZE (xpi/firefox-i18n-66.0/pt-PT.xpi) = 489806 +SHA256 (xpi/firefox-i18n-66.0/rm.xpi) = bcc82638a2929504860602887fd694e8eb8b9112500e242c0e3ec1fae3cbaa6c +SIZE (xpi/firefox-i18n-66.0/rm.xpi) = 483415 +SHA256 (xpi/firefox-i18n-66.0/ro.xpi) = 53a236e1b570357e1c7b2b2ddf8f7b119da4710979215a6f4e3d951fc4043bcc +SIZE (xpi/firefox-i18n-66.0/ro.xpi) = 490038 +SHA256 (xpi/firefox-i18n-66.0/ru.xpi) = bc8511116c342ec6abd27e4942a8d7a37f5d108193cd7d26f0aef53c5cd92117 +SIZE (xpi/firefox-i18n-66.0/ru.xpi) = 566303 +SHA256 (xpi/firefox-i18n-66.0/si.xpi) = 00676d4879e9f8cea47018725d99da43efc252b11b0719e39acfae7caae215c4 +SIZE (xpi/firefox-i18n-66.0/si.xpi) = 527424 +SHA256 (xpi/firefox-i18n-66.0/sk.xpi) = cf6795812f8ec21e69a0cdc9753cfc6b1fce878fce20c6161280f8a38a2411f2 +SIZE (xpi/firefox-i18n-66.0/sk.xpi) = 509455 +SHA256 (xpi/firefox-i18n-66.0/sl.xpi) = 50ead6e9af874fb6f3d8a08d8aaedfd0d3637e4ddcdd96b31b523833a0c4f5dd +SIZE (xpi/firefox-i18n-66.0/sl.xpi) = 483716 +SHA256 (xpi/firefox-i18n-66.0/son.xpi) = 19fd2ca143bbae109f0c050d33a86f9ee28111e594d9e7dbdd500bd21050af9f +SIZE (xpi/firefox-i18n-66.0/son.xpi) = 460371 +SHA256 (xpi/firefox-i18n-66.0/sq.xpi) = 0d9a4085421e9ee08dd7276279a3f2579db22e7960e3fcd001909fbc919aef3e +SIZE (xpi/firefox-i18n-66.0/sq.xpi) = 501356 +SHA256 (xpi/firefox-i18n-66.0/sr.xpi) = cedb508440eea5af62468b18de99636f868d679d4f8448879b33727f4072626d +SIZE (xpi/firefox-i18n-66.0/sr.xpi) = 526573 +SHA256 (xpi/firefox-i18n-66.0/sv-SE.xpi) = 873dcfaebe91a45a38b56832fbb28c49c7323816eca127ce1453a5182dc306c7 +SIZE (xpi/firefox-i18n-66.0/sv-SE.xpi) = 487776 +SHA256 (xpi/firefox-i18n-66.0/ta.xpi) = 7480be45847fd0e13230f14bb7500e3cdebb86e3c977f5a1a22a33d8418483a6 +SIZE (xpi/firefox-i18n-66.0/ta.xpi) = 547609 +SHA256 (xpi/firefox-i18n-66.0/te.xpi) = 9b7797d43814e3ccd6ed3e903b4d70a81b9d23ee648085ec87be8c852ea68382 +SIZE (xpi/firefox-i18n-66.0/te.xpi) = 554115 +SHA256 (xpi/firefox-i18n-66.0/th.xpi) = 7a615382d2aa494f1a78153ca28dae4906fc0f7fdf65e6b06dc33a1b2328ae61 +SIZE (xpi/firefox-i18n-66.0/th.xpi) = 532158 +SHA256 (xpi/firefox-i18n-66.0/tr.xpi) = b9626df61808726bca296cca29443ca61ea043a2207f71eb9bda28221861e92a +SIZE (xpi/firefox-i18n-66.0/tr.xpi) = 499010 +SHA256 (xpi/firefox-i18n-66.0/uk.xpi) = efc6fa198ac847689c98a69fb869a2e9518712a87bd441ca74bf7576da9eb685 +SIZE (xpi/firefox-i18n-66.0/uk.xpi) = 545158 +SHA256 (xpi/firefox-i18n-66.0/ur.xpi) = 0737fa85c2ecdc652742b1ce17b25239ba7c0f74e8003b68040513ea508fb1d8 +SIZE (xpi/firefox-i18n-66.0/ur.xpi) = 534462 +SHA256 (xpi/firefox-i18n-66.0/uz.xpi) = 8eb4e5952740694b07001b939ff644744d241fade20754d60b58aadce195fbc4 +SIZE (xpi/firefox-i18n-66.0/uz.xpi) = 480864 +SHA256 (xpi/firefox-i18n-66.0/vi.xpi) = 8d514a1db69118cddf9c255fcb5064a69e22764a68238e76b6989e9b2f964cc7 +SIZE (xpi/firefox-i18n-66.0/vi.xpi) = 507867 +SHA256 (xpi/firefox-i18n-66.0/xh.xpi) = f9dc56363ef7a206785d723fb13de9da5204191394795c52e8bc171d9c21b50c +SIZE (xpi/firefox-i18n-66.0/xh.xpi) = 472184 +SHA256 (xpi/firefox-i18n-66.0/zh-CN.xpi) = 54b47ef9cebe1bae37e8ca53b42ac90a5aeebc9773d389a789ebe24391190d32 +SIZE (xpi/firefox-i18n-66.0/zh-CN.xpi) = 518788 +SHA256 (xpi/firefox-i18n-66.0/zh-TW.xpi) = ffb334bb3f48139fbf62a9c3c73ec946f4b9cc295fa2ef6d1dd0857bc0f8ee4f +SIZE (xpi/firefox-i18n-66.0/zh-TW.xpi) = 516442