Index: head/Mk/Uses/gecko.mk =================================================================== --- head/Mk/Uses/gecko.mk (revision 413156) +++ head/Mk/Uses/gecko.mk (revision 413157) @@ -1,127 +1,127 @@ # $FreeBSD$ # # Handle dependency of different gecko based applications # # MAINTAINER: gecko@FreeBSD.org # # Feature: gecko # Usage: USES=gecko or USES=gecko:ARGS # Valid ARGS: libxul, firefox, seamonkey, thunderbird # in case the first argument is not libxul # The following arguments are available # - build: also add the dependency as a build # dependency # - [0-9][0-9][+]?: a version optionnally # followed by a + # .if !defined(_INCLUDE_USES_GECKO_MK) _INCLUDE_USES_GECKO_MK= yes .if empty(gecko_ARGS) gecko_ARGS= libxul .endif _GECKO_VERSION= ${gecko_ARGS:M[0-9][0-9]*} .if ${gecko_ARGS:Mlibxul} # Compat with older versions GECKO= libxul GECKO_CONFING?= ${LOCALBASE}/bin/${GECKO}-config XPIDL?= ${LOCALBASE}/lib/${GECKO}/xpidl XPIDL_INCL?= `${GECKO_CONFIG} --idlflags` BUILD_DEPENDS+= libxul>=38:www/libxul RUN_DEPENDS+= libxul>=38:www/libxul .elif ${gecko_ARGS:Mfirefox} _GECKO_DEFAULT_VERSION= 38 _GECKO_VERSIONS= 38 45 _GECKO_TYPE= firefox # Dependence lines for different Firefox versions 38_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox-esr 45_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox .if exists(${LOCALBASE}/bin/firefox) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/firefox --version 2>/dev/null _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:M[0-9][0-9]*:C/([0-9][0-9]).*/\1/g} .endif .elif ${gecko_ARGS:Mseamonkey} _GECKO_DEFAULT_VERSION= 39 _GECKO_VERSIONS= 39 _GECKO_TYPE= seamonkey .if exists(${LOCALBASE}/bin/seamonkey) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/seamonkey --version 2>/dev/null _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:M[0-9]*:C/[0-9].([0-9][0-9]).*/\1/g} .endif # Dependence lines for different Seamonkey versions 39_DEPENDS= ${LOCALBASE}/lib/seamonkey/seamonkey:www/seamonkey .elif ${gecko_ARGS:Mthunderbird} -_GECKO_DEFAULT_VERSION= 38 -_GECKO_VERSIONS= 38 +_GECKO_DEFAULT_VERSION= 45 +_GECKO_VERSIONS= 45 _GECKO_TYPE= thunderbird .if exists(${LOCALBASE}/bin/thunderbird) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/thunderbird --version 2>/dev/null _GECKO_INSTALLED_VER:= ${_GECKO_INSTALLED_VER:M[0-9][0-9]*:C/([0-9][0-9]).*/\1/g} .endif # Dependence lines for different Thunderbird versions -38_DEPENDS= ${LOCALBASE}/lib/thunderbird/thunderbird:mail/thunderbird +45_DEPENDS= ${LOCALBASE}/lib/thunderbird/thunderbird:mail/thunderbird .else IGNORE= Unknown type of gecko dependency you may specify either libxul, firefox, seamonkey or thunderbird .endif .if defined(_GECKO_TYPE) .if ${_GECKO_VERSION:M*+} _GECKO_MIN_VERSION:= ${_GECKO_VERSION:S/+//} _GECKO_WANTED_VERSIONS:= ${_GECKO_DEFAULT_VERSION} .endif .if ${_GECKO_VERSION:M[0-9][0-9]} _GECKO_WANTED_VERSIONS:= ${_GECKO_VERSION:M[0-9][0-9]} .endif _GECKO_WANTED_VERSIONS?= ${_GECKO_DEFAULT_VERSION} .if defined(_GECKO_MIN_VERSION) . for _v in ${_GECKO_VERSIONS} . if ${_GECKO_MIN_VERSION} <= ${_v} _GECKO_WANTED_VERSIONS+= ${_v} . endif . endfor .endif .for _v in ${_GECKO_WANTED_VERSIONS:O:u} _GECKO_HIGHEST_VERSION:= ${_v} .if defined(_GECKO_INSTALLED_VER) && ${_GECKO_INSTALLED_VER} == ${_v} _GECKO_WANTED_VERSION:= ${_v} .endif .endfor .if !defined(_GECKO_WANTED_VERSION) .if defined(_GECKO_INSTALLED_VER) IGNORE= cannot install: ${_GECKO_TYPE} versions mismatch: ${_GECKO_TYPE}-${_GECKO_INSTALLED_VER} is installed and wanted version is ${_GECKO_TYPE}-${_GECKO_VERSION:M[0-9][0-9]} .else _GECKO_WANTED_VERSION:= ${_GECKO_HIGHEST_VERSION} .endif .endif .if ${gecko_ARGS:Mbuild} BUILD_DEPENDS+= ${${_GECKO_WANTED_VERSION}_DEPENDS} .endif RUN_DEPENDS+= ${${_GECKO_WANTED_VERSION}_DEPENDS} .endif .endif Index: head/mail/linux-thunderbird/Makefile =================================================================== --- head/mail/linux-thunderbird/Makefile (revision 413156) +++ head/mail/linux-thunderbird/Makefile (revision 413157) @@ -1,18 +1,18 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= thunderbird -DISTVERSION= 38.7.1 +DISTVERSION= 45.0 CATEGORIES= mail news net-im ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US \ MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/linux-i686/en-US MAINTAINER= gecko@FreeBSD.org COMMENT= Mozilla Thunderbird is standalone mail and news that stands above USES= tar:bzip2 WANT_GTK218= yes .include "${.CURDIR}/../../www/linux-seamonkey/Makefile.common" .include Index: head/mail/linux-thunderbird/distinfo =================================================================== --- head/mail/linux-thunderbird/distinfo (revision 413156) +++ head/mail/linux-thunderbird/distinfo (revision 413157) @@ -1,6 +1,6 @@ -SHA256 (thunderbird-38.7.1.tar.bz2) = 205729f0ce14666ef98b7e23dad0882d450a508b568fc1d2c99cdfffd2cc9547 -SIZE (thunderbird-38.7.1.tar.bz2) = 41970748 +SHA256 (thunderbird-45.0.tar.bz2) = c4e1d0a902ab04db666ac90cf1003f8b48ed88e3291fbbf1d6b2606e805a45b0 +SIZE (thunderbird-45.0.tar.bz2) = 44105947 SHA256 (glib2-2.22.2-2.fc12.i686.rpm) = e3b459c245ec14e7248e9de4b506963a4773407f3e58835db5070d0ed02ecc99 SIZE (glib2-2.22.2-2.fc12.i686.rpm) = 1162908 SHA256 (gtk2-2.18.3-19.fc12.i686.rpm) = aea9cf7ffe9c8dae0faa2bf3d2aa1b2117c55dce03da72dcce8c268279ec0a4b SIZE (gtk2-2.18.3-19.fc12.i686.rpm) = 3198708 Index: head/mail/linux-thunderbird/pkg-plist =================================================================== --- head/mail/linux-thunderbird/pkg-plist (revision 413156) +++ head/mail/linux-thunderbird/pkg-plist (revision 413157) @@ -1,169 +1,158 @@ bin/%%APP_NAME%% share/applications/%%APP_NAME%%.desktop lib/%%APP_NAME%%/Throbber-small.gif lib/%%APP_NAME%%/application.ini lib/%%APP_NAME%%/blocklist.xml -lib/%%APP_NAME%%/chrome.manifest lib/%%APP_NAME%%/chrome/icons/default/default16.png lib/%%APP_NAME%%/chrome/icons/default/default22.png lib/%%APP_NAME%%/chrome/icons/default/default24.png lib/%%APP_NAME%%/chrome/icons/default/default256.png lib/%%APP_NAME%%/chrome/icons/default/default32.png lib/%%APP_NAME%%/chrome/icons/default/default48.png -lib/%%APP_NAME%%/components/components.manifest -lib/%%APP_NAME%%/components/libdbusservice.so -lib/%%APP_NAME%%/components/libmozgnome.so lib/%%APP_NAME%%/crashreporter lib/%%APP_NAME%%/crashreporter.ini lib/%%APP_NAME%%/defaults/messenger/mailViews.dat lib/%%APP_NAME%%/defaults/pref/browser-prefs.js lib/%%APP_NAME%%/defaults/pref/channel-prefs.js lib/%%APP_NAME%%/dependentlibs.list lib/%%APP_NAME%%/dictionaries/en-US.aff lib/%%APP_NAME%%/dictionaries/en-US.dic lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/app.ini lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarm.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarmMonitor.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarmService.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAttachment.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAttendee.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calCachedCalendar.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calCalendarManager.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calCalendarSearchService.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calDateTime.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calDateTimeFormatter.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calDavRequestHandlers.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calDeletedItems.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calDuration.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calEvent.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calFilter.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calFreeBusyService.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calHtmlExport.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calICSService-worker.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calICSService.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calIcsImportExport.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calIcsParser.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calIcsSerializer.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calItemBase.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calItipItem.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calListFormatter.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calMonthGridPrinter.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calOutlookCSVImportExport.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calPeriod.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calProtocolHandler.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calRecurrenceDate.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calRecurrenceInfo.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calRecurrenceRule.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calRelation.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calStartupService.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calTimezone.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calTodo.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calTransactionManager.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calUtils.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWcapCalendar.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWcapCalendarItems.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWcapErrors.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWcapRequest.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWcapSession.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWcapUtils.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWeekInfoService.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calWeekPrinter.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome.jar lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome.manifest lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calBackendLoader.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calCompositeCalendar.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDavCalendar.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDefaultACLManager.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICALJSComponents.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICSCalendar.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calImportExportModule.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calItemModule.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calItipEmailTransport.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calItipProtocolHandler.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calMemoryCalendar.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calSleepMonitor.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calStorageCalendar.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calTimezoneService.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calWcapCalendarModule.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/components.manifest lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/icaljs-manifest lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/interfaces.xpt lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/libcalbasecomps.so lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/libical-manifest lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/lightningTextCalendarConverter.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/defaults/preferences/lightning.js lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/install.rdf lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calAlarmUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calAsyncUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calAuthUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calExtract.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calHashedArray.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calItemUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calIteratorUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calItipUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calPrintUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calProviderUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calRecurrenceUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calStorageHelpers.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calStorageUpgrade.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calViewUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/calXMLUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/ical.js +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/ltnInvitationUtils.jsm +lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/modules/ltnUtils.jsm lib/%%APP_NAME%%/distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/timezones/zones.json -lib/%%APP_NAME%%/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/icon.png -lib/%%APP_NAME%%/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/icon64.png -lib/%%APP_NAME%%/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf +lib/%%APP_NAME%%/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}.xpi lib/%%APP_NAME%%/icons/updater.png lib/%%APP_NAME%%/isp/Bogofilter.sfd lib/%%APP_NAME%%/isp/DSPAM.sfd lib/%%APP_NAME%%/isp/POPFile.sfd lib/%%APP_NAME%%/isp/SpamAssassin.sfd lib/%%APP_NAME%%/isp/SpamPal.sfd lib/%%APP_NAME%%/isp/movemail.rdf lib/%%APP_NAME%%/isp/rss.rdf lib/%%APP_NAME%%/libfreebl3.chk lib/%%APP_NAME%%/libfreebl3.so %%GTK218%%lib/%%APP_NAME%%/libgdk-x11-2.0.so.0 %%GTK218%%lib/%%APP_NAME%%/libgio-2.0.so.0 %%GTK218%%lib/%%APP_NAME%%/libglib-2.0.so.0 %%GTK218%%lib/%%APP_NAME%%/libgtk-x11-2.0.so.0 lib/%%APP_NAME%%/libldap60.so lib/%%APP_NAME%%/libldif60.so -lib/%%APP_NAME%%/libmozalloc.so +lib/%%APP_NAME%%/liblgpllibs.so lib/%%APP_NAME%%/libmozsqlite3.so lib/%%APP_NAME%%/libnspr4.so lib/%%APP_NAME%%/libnss3.so lib/%%APP_NAME%%/libnssckbi.so lib/%%APP_NAME%%/libnssdbm3.chk lib/%%APP_NAME%%/libnssdbm3.so lib/%%APP_NAME%%/libnssutil3.so lib/%%APP_NAME%%/libplc4.so lib/%%APP_NAME%%/libplds4.so lib/%%APP_NAME%%/libprldap60.so lib/%%APP_NAME%%/libsmime3.so lib/%%APP_NAME%%/libsoftokn3.chk lib/%%APP_NAME%%/libsoftokn3.so lib/%%APP_NAME%%/libssl3.so lib/%%APP_NAME%%/libxul.so lib/%%APP_NAME%%/omni.ja lib/%%APP_NAME%%/platform.ini lib/%%APP_NAME%%/plugin-container lib/%%APP_NAME%%/plugins lib/%%APP_NAME%%/precomplete lib/%%APP_NAME%%/removed-files lib/%%APP_NAME%%/run-mozilla.sh -lib/%%APP_NAME%%/searchplugins/amazondotcom.xml -lib/%%APP_NAME%%/searchplugins/aol-web-search.xml -lib/%%APP_NAME%%/searchplugins/bing.xml -lib/%%APP_NAME%%/searchplugins/eBay.xml -lib/%%APP_NAME%%/searchplugins/twitter.xml -lib/%%APP_NAME%%/searchplugins/wikipedia.xml -lib/%%APP_NAME%%/searchplugins/yahoo.xml lib/%%APP_NAME%%/thunderbird lib/%%APP_NAME%%/thunderbird-bin lib/%%APP_NAME%%/update-settings.ini lib/%%APP_NAME%%/updater lib/%%APP_NAME%%/updater.ini @exec /bin/cp -R %%LOCALBASE%%/lib/xpi/symlinks/%%APP_NAME%%/ %D/lib/%%APP_NAME%%/extensions/ 2>/dev/null || true @unexec /usr/bin/find %D/lib/%%APP_NAME%%/extensions/ -depth 1 -type l -delete 2>/dev/null || true Index: head/mail/thunderbird/Makefile =================================================================== --- head/mail/thunderbird/Makefile (revision 413156) +++ head/mail/thunderbird/Makefile (revision 413157) @@ -1,168 +1,162 @@ # Created by: Joe Marcus Clarke # $FreeBSD$ PORTNAME= thunderbird -DISTVERSION= 38.7.1 +DISTVERSION= 45.0 CATEGORIES= mail news net-im ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source DISTFILES= ${PORTNAME}-${DISTVERSION}.source${EXTRACT_SUFX} EXTRACT_ONLY= ${PORTNAME}-${DISTVERSION}.source${EXTRACT_SUFX} MAINTAINER= gecko@FreeBSD.org COMMENT= Mozilla Thunderbird is standalone mail and news that stands above -BUILD_DEPENDS= nspr>=4.10.10:devel/nspr \ - nss>=3.19.2.3:security/nss \ +BUILD_DEPENDS= nspr>=4.12:devel/nspr \ + nss>=3.21.1:security/nss \ libevent2>=2.0.21_2:devel/libevent2 \ - soundtouch>=1.8.0:audio/soundtouch \ - harfbuzz>=0.9.34:print/harfbuzz \ - graphite2>=1.2.4:graphics/graphite2 \ + soundtouch>=1.9.0:audio/soundtouch \ + harfbuzz>=1.1.0:print/harfbuzz \ + graphite2>=1.3.7:graphics/graphite2 \ + png>=1.6.19:graphics/png \ libvorbis>=1.3.5,3:audio/libvorbis \ - libvpx>=1.3.0:multimedia/libvpx \ - sqlite3>=3.8.9:databases/sqlite3 \ + libvpx>=1.5.0:multimedia/libvpx \ + sqlite3>=3.9.1:databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3 \ v4l_compat>0:multimedia/v4l_compat \ autoconf-2.13:devel/autoconf213 \ + yasm:devel/yasm \ zip:archivers/zip \ unzip:archivers/unzip -# opus>=1.1:audio/opus \ LIB_DEPENDS= libv4l2.so:multimedia/libv4l EM_VERSION= 1.9.1 -L_VERSION= 4.0.7.1 +L_VERSION= 4.7 SSP_UNSAFE= yes USE_GECKO= gecko -USE_MOZILLA= -opus +USE_MOZILLA= # empty USE_QT5= # empty QT_NONSTANDARD= yes USE_GL= gl -USES= tar:bzip2 +USES= tar:xz MOZ_OPTIONS= --program-transform-name='s/thunderbird/${MOZILLA}/' \ --enable-single-profile --disable-profilesharing \ --enable-application=mail --enable-official-branding MOZ_MK_OPTIONS= MOZ_THUNDERBIRD=1 MAIL_PKG_SHARED=1 MOZ_EXPORT= MOZ_THUNDERBIRD=1 MAIL_PKG_SHARED=1 MOZ_PKGCONFIG_FILES= PORTNAME_ICON= ${MOZILLA}.png PORTNAME_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/chrome/icons/default/default48.png SYSTEM_PREFS= ${FAKEDIR}/lib/${PORTNAME}/defaults/pref/${PORTNAME}.js MOZ_PIS_SCRIPTS=moz_pis_S50cleanhome -OPTIONS_DEFINE= ENIGMAIL LIGHTNING -OPTIONS_DEFAULT=CANBERRA ENIGMAIL LIGHTNING +OPTIONS_EXCLUDE=GSTREAMER LOGGING +OPTIONS_DEFINE= ENIGMAIL LIGHTNING RUST +OPTIONS_SINGLE= TOOLKIT +OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3 +OPTIONS_DEFAULT=BUNDLED_CAIRO CANBERRA ENIGMAIL GTK2 LIGHTNING .include "${.CURDIR}/../../www/firefox/Makefile.options" - -OPTIONS_DEFAULT:=${OPTIONS_DEFAULT:S/GSTREAMER//} - .include -WRKSRC= ${WRKDIR}/comm-esr38 +WRKSRC:= ${WRKDIR}/${PORTNAME}-${DISTVERSION} MOZSRC:= ${WRKSRC}/mozilla XPI_LIBDIR= ${PREFIX}/lib/xpi -.if ${PORTVERSION:R:R} < 33 -CONFIGURE_TARGET:=${CONFIGURE_TARGET:S/portbld/unknown/} -MOZ_OPTIONS:= ${MOZ_OPTIONS:S/${CONFIGURE_TARGET}//} -.endif - .if ${PORT_OPTIONS:MENIGMAIL} MASTER_SITES+= https://www.enigmail.net/download/source/:enigmail DISTFILES+= ${EM_DISTFILE}:enigmail RUN_DEPENDS+= gpg2:security/gnupg EM_DISTNAME= enigmail-${EM_VERSION} EM_DISTFILE= ${EM_DISTNAME}.tar.gz EM_XPI_FILE= ${WRKSRC}/mailnews/extensions/enigmail/build/${EM_DISTNAME}.xpi EM_ORIG_ID= {847b3a00-7ab1-11d4-8f02-006008948af5} EM_ID= ${PORTNAME}@mozilla-enigmail.org EM_ID_RFILES= ${XPI_LIBDIR}/${EM_ID}/install.rdf \ ${XPI_LIBDIR}/${EM_ID}/components/enigmail.js \ ${XPI_LIBDIR}/${EM_ID}/modules/app.jsm .endif .if ${PORT_OPTIONS:MLIGHTNING} MOZ_OPTIONS+= --enable-calendar MOZ_MK_OPTIONS+= MOZ_CO_PROJECT=calendar LIGHTNING_DIR= share/lightning XPI_FILE= ${MOZ_OBJDIR}/dist/xpi-stage/lightning-${L_VERSION}.en-US.${OPSYS:tl}${OSREL}-${ARCH:S/amd64/x86_64/}.xpi XPI_ORIG_ID= {e2fda1a4-762b-4020-b5ad-a41df1933103} XPI_ID= lightning@thunderbird.mozilla.org .else MOZ_OPTIONS+= --disable-calendar .endif post-extract: @${SED} -e 's|@PORTNAME_ICON@|${PORTNAME_ICON}|;s|@MOZILLA@|${MOZILLA}|' \ <${FILESDIR}/thunderbird.desktop.in >${WRKDIR}/${MOZILLA_EXEC_NAME}.desktop .if ${PORT_OPTIONS:MENIGMAIL} @${TAR} -xf ${_DISTDIR}/${EM_DISTFILE} \ -C ${WRKSRC}/mailnews/extensions .endif post-patch: - @${REINPLACE_CMD} -e '/MOZPNG/s/=[0-9]*/=10511/' \ - ${MOZSRC}/configure.in ${WRKSRC}/configure.in @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/mail/app/nsMailApp.cpp .if ${PORT_OPTIONS:MENIGMAIL} @${REINPLACE_CMD} -e 's,/usr/bin/perl,${PERL},' \ ${WRKSRC}/mailnews/extensions/enigmail/util/fixlang.pl \ ${WRKSRC}/mailnews/extensions/enigmail/util/make-lang-xpi.pl @${REINPLACE_CMD} -e '/^xpi/s/$$/ all/' \ -e '/^all/s/ xpi//' \ -e '/^XPI_MODULE_VERS/s/= .*/= ${EM_VERSION}/' \ ${WRKSRC}/mailnews/extensions/enigmail/Makefile @${REINPLACE_CMD} -e '/em:version/s,>[^<]*<,>${EM_VERSION}<,' \ -e '/em:maxVersion/s/pre//' \ ${WRKSRC}/mailnews/extensions/enigmail/package/install.rdf .endif pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${MOZSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${MOZSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) .if ${PORT_OPTIONS:MENIGMAIL} post-configure: cd ${WRKSRC}/mailnews/extensions/enigmail/ && \ ${SETENV} ${CONFIGURE_ENV} ${MAKE_ENV} ./configure post-build: ${DO_MAKE_BUILD:N-j*:S,${MAKEFILE},Makefile,} all xpi \ -C ${WRKSRC}/mailnews/extensions/enigmail .endif port-pre-install: ${MKDIR} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/defaults post-install: ${INSTALL_DATA} ${WRKDIR}/${MOZILLA_EXEC_NAME}.desktop ${STAGEDIR}${PREFIX}/share/applications ${LN} -sf ${PORTNAME_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${PORTNAME_ICON} .if ${PORT_OPTIONS:MLIGHTNING} @${MKDIR} ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/thunderbird @(cd ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID}; ${TAR} -xf ${XPI_FILE}) @${REINPLACE_CMD} -i "" "s/${XPI_ORIG_ID}/${XPI_ID}/" ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID}/install.rdf @${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID} @${LN} -sf ${XPI_LIBDIR}/${XPI_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/thunderbird 2>/dev/null || true @${ECHO_CMD} '@exec ${LN} -sf %D/lib/xpi/${XPI_ID} ${LOCALBASE}/lib/thunderbird/extensions 2>/dev/null || true' >> ${TMPPLIST} @${ECHO_CMD} '@unexec ${RM} -f ${LOCALBASE}/lib/thunderbird/extensions/${XPI_ID}' >> ${TMPPLIST} .endif .if ${PORT_OPTIONS:MENIGMAIL} @${MKDIR} ${STAGEDIR}${XPI_LIBDIR}/${EM_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/${PORTNAME} @(cd ${STAGEDIR}${XPI_LIBDIR}/${EM_ID}; ${TAR} -xf ${EM_XPI_FILE}) @${REINPLACE_CMD} -i "" "s/${EM_ORIG_ID}/${EM_ID}/" ${EM_ID_RFILES:S/^/${STAGEDIR}/} @${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${EM_ID} @${LN} -sf ${XPI_LIBDIR}/${EM_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/${PORTNAME} 2>/dev/null || true @${ECHO_CMD} '@exec ${LN} -sf %D/lib/xpi/${EM_ID} ${LOCALBASE}/lib/${PORTNAME}/extensions 2>/dev/null || true' >> ${TMPPLIST} @${ECHO_CMD} '@unexec ${RM} -f ${LOCALBASE}/lib/${PORTNAME}/extensions/${EM_ID}' >> ${TMPPLIST} .endif .include Index: head/mail/thunderbird/distinfo =================================================================== --- head/mail/thunderbird/distinfo (revision 413156) +++ head/mail/thunderbird/distinfo (revision 413157) @@ -1,4 +1,4 @@ -SHA256 (thunderbird-38.7.1.source.tar.bz2) = 46985ab53f1d1fab9a6c7dd0b34ccf38f8401d507bf686ee56dc28a0555d9328 -SIZE (thunderbird-38.7.1.source.tar.bz2) = 204445791 +SHA256 (thunderbird-45.0.source.tar.xz) = 15693897f1e46cbb5a95932b8c087a53004635415845fb4f50d4edfbba77d667 +SIZE (thunderbird-45.0.source.tar.xz) = 200691996 SHA256 (enigmail-1.9.1.tar.gz) = 0393119725fa5931d9888a2a1c9796d440ee7975ca3d005eb63142768b10f993 SIZE (enigmail-1.9.1.tar.gz) = 1736876 Index: head/mail/thunderbird/files/patch-bug779713 =================================================================== --- head/mail/thunderbird/files/patch-bug779713 (revision 413156) +++ head/mail/thunderbird/files/patch-bug779713 (nonexistent) @@ -1,77 +0,0 @@ -diff --git mfbt/Alignment.h mfbt/Alignment.h -index e0843ca..353ec36 100644 ---- mozilla/mfbt/Alignment.h -+++ mozilla/mfbt/Alignment.h -@@ -9,11 +9,20 @@ - #ifndef mozilla_Alignment_h - #define mozilla_Alignment_h - -+#include "mozilla/Attributes.h" -+ - #include - #include - - namespace mozilla { - -+#if defined(MOZ_HAVE_CXX11_ALIGNAS) -+#define MOZ_ALIGNOF(T) alignof(T) -+#elif defined(__GNUC__) -+#define MOZ_ALIGNOF(T) __alignof__(T) -+#elif defined(_MSC_VER) -+#define MOZ_ALIGNOF(T) __alignof(T) -+#else - /* - * This class, and the corresponding macro MOZ_ALIGNOF, figures out how many - * bytes of alignment a given type needs. -@@ -32,6 +41,7 @@ public: - }; - - #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment -+#endif - - /* - * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. -@@ -43,7 +53,10 @@ public: - * will declare a two-character array |arr| aligned to 8 bytes. - */ - --#if defined(__GNUC__) -+#if defined(MOZ_HAVE_CXX11_ALIGNAS) -+# define MOZ_ALIGNED_DECL(_type, _align) \ -+ alignas(_align) _type -+#elif defined(__GNUC__) - # define MOZ_ALIGNED_DECL(_type, _align) \ - _type __attribute__((aligned(_align))) - #elif defined(_MSC_VER) -diff --git mfbt/Attributes.h mfbt/Attributes.h -index d317766..ddb13da 100644 ---- mozilla/mfbt/Attributes.h -+++ mozilla/mfbt/Attributes.h -@@ -50,6 +50,7 @@ - * don't indicate support for them here, due to - * http://stackoverflow.com/questions/20498142/visual-studio-2013-explicit-keyword-bug - */ -+# define MOZ_HAVE_CXX11_ALIGNAS - # define MOZ_HAVE_NEVER_INLINE __declspec(noinline) - # define MOZ_HAVE_NORETURN __declspec(noreturn) - # ifdef __clang__ -@@ -70,6 +71,9 @@ - # ifndef __has_extension - # define __has_extension __has_feature /* compatibility, for older versions of clang */ - # endif -+# if __has_extension(cxx_alignas) -+# define MOZ_HAVE_CXX11_ALIGNAS -+# endif - # if __has_extension(cxx_constexpr) - # define MOZ_HAVE_CXX11_CONSTEXPR - # endif -@@ -84,6 +88,9 @@ - # endif - #elif defined(__GNUC__) - # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L -+# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) -+# define MOZ_HAVE_CXX11_ALIGNAS -+# endif - # define MOZ_HAVE_CXX11_CONSTEXPR - # define MOZ_HAVE_EXPLICIT_CONVERSION - # endif Property changes on: head/mail/thunderbird/files/patch-bug779713 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-bug962345 =================================================================== --- head/mail/thunderbird/files/patch-bug962345 (revision 413156) +++ head/mail/thunderbird/files/patch-bug962345 (nonexistent) @@ -1,9 +0,0 @@ -diff --git config/system-headers config/system-headers -index 8803150..ae38d68 100644 ---- mozilla/config/system-headers -+++ mozilla/config/system-headers -@@ -1144,3 +1144,4 @@ unicode/utypes.h - #endif - libutil.h - unwind.h -+cairo-qt.h Property changes on: head/mail/thunderbird/files/patch-bug962345 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/extra-patch-bug1125514 =================================================================== --- head/mail/thunderbird/files/extra-patch-bug1125514 (revision 413156) +++ head/mail/thunderbird/files/extra-patch-bug1125514 (nonexistent) @@ -1,36 +0,0 @@ -changeset: 258513:ffbd5f5f46f1 -user: Guilherme Goncalves -date: Thu Aug 20 10:05:29 2015 +0900 -summary: Bug 1125514 - Use jemalloc's metadata statistics to compute bookkeeping. r=glandium - ---- mozilla/memory/build/mozjemalloc_compat.c~ -+++ mozilla/memory/build/mozjemalloc_compat.c -@@ -136,6 +136,7 @@ jemalloc_stats_impl(jemalloc_stats_t *st - { - unsigned narenas; - size_t active, allocated, mapped, page, pdirty; -+ size_t meta, ameta; - size_t lg_chunk; - - // Refresh jemalloc's stats by updating its epoch, see ctl_refresh in -@@ -149,17 +150,19 @@ jemalloc_stats_impl(jemalloc_stats_t *st - CTL_GET("stats.active", active); - CTL_GET("stats.allocated", allocated); - CTL_GET("stats.mapped", mapped); -+ CTL_GET("stats.metadata", meta); - CTL_GET("opt.lg_chunk", lg_chunk); -- CTL_GET("stats.bookkeeping", stats->bookkeeping); - - /* get the summation for all arenas, i == narenas */ - CTL_I_GET("stats.arenas.0.pdirty", pdirty, narenas); -+ CTL_I_GET("stats.arenas.0.metadata.allocated", ameta, narenas); - - stats->chunksize = 1 << lg_chunk; - stats->mapped = mapped; - stats->allocated = allocated; - stats->waste = active - allocated; - stats->page_cache = pdirty * page; -+ stats->bookkeeping = meta - ameta; - stats->bin_unused = compute_bin_unused(narenas); - stats->waste -= stats->bin_unused; - } Property changes on: head/mail/thunderbird/files/extra-patch-bug1125514 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-bug1112904 =================================================================== --- head/mail/thunderbird/files/patch-bug1112904 (revision 413156) +++ head/mail/thunderbird/files/patch-bug1112904 (nonexistent) @@ -1,161 +0,0 @@ -diff --git a/c-sdk/config/FreeBSD.mk b/c-sdk/config/FreeBSD.mk ---- ldap/sdks/c-sdk/config/FreeBSD.mk -+++ ldap/sdks/c-sdk/config/FreeBSD.mk -@@ -79,8 +79,8 @@ DLL_SUFFIX = so.1.0 - endif - - DSO_CFLAGS = -fPIC --DSO_LDOPTS = -Bshareable -+DSO_LDOPTS = -shared -Wl,-soname,$(notdir $@) - --MKSHLIB = $(LD) $(DSO_LDOPTS) -+MKSHLIB = $(CC) $(DSO_LDOPTS) - - G++INCLUDES = -I/usr/include/g++ -diff --git a/c-sdk/configure b/c-sdk/configure ---- ldap/sdks/c-sdk/configure -+++ ldap/sdks/c-sdk/configure -@@ -4241,8 +4241,10 @@ EOF - #define DRAGONFLY 1 - EOF - -+ LD='$(CC)' -+ MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@' - DSO_CFLAGS=-fPIC -- DSO_LDOPTS='-shared' -+ DSO_LDOPTS='-shared -Wl,-soname,$(notdir $@)' - ;; - - *-freebsd*) -@@ -4261,6 +4263,7 @@ EOF - #define HAVE_BSD_FLOCK 1 - EOF - -+ LD='$(CC)' - CFLAGS="$CFLAGS $(DSO_CFLAGS) -ansi -Wall" - MOZ_OBJFORMAT=`test -x /usr/bin/objformat && /usr/bin/objformat || echo elf` - if test "$MOZ_OBJFORMAT" = "elf"; then -@@ -4268,8 +4271,9 @@ EOF - else - DLL_SUFFIX=so.1.0 - fi -+ MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@' - DSO_CFLAGS=-fPIC -- DSO_LDOPTS=-Bshareable -+ DSO_LDOPTS='-shared -Wl,-soname,$(notdir $@)' - ;; - - *-hpux*) -@@ -6512,8 +6516,15 @@ echo "configure:6510: checking whether $ - if test $? -eq 0; then - if test -z "`egrep -i '(unrecognize|unknown)' conftest.out | grep pthread`" && test -z "`egrep -i '(error|incorrect)' conftest.out`" ; then - ac_cv_have_dash_pthread=yes -- CFLAGS="$CFLAGS -pthread" -- CXXFLAGS="$CXXFLAGS -pthread" -+ case "$target_os" in -+ dragonfly*|freebsd*) -+# Freebsd doesn't use -pthread for compiles, it uses them for linking -+ ;; -+ *) -+ CFLAGS="$CFLAGS -pthread" -+ CXXFLAGS="$CXXFLAGS -pthread" -+ ;; -+ esac - fi - fi - rm -f conftest* -@@ -6542,7 +6553,22 @@ echo "configure:6526: checking whether $ - _PTHREAD_LDFLAGS= - fi - ;; -- *-freebsd*|*-openbsd*|*-bsdi*|*-netbsd*) -+ *-dragonfly*|*-freebsd*) -+ cat >> confdefs.h <<\EOF -+#define _REENTRANT 1 -+EOF -+ -+ cat >> confdefs.h <<\EOF -+#define _THREAD_SAFE 1 -+EOF -+ -+ if test "$ac_cv_have_dash_pthread" = "yes"; then -+ _PTHREAD_LDFLAGS="-pthread" -+ else -+ _PTHREAD_LDFLAGS="-lc_r" -+ fi -+ ;; -+ *-openbsd*|*-bsdi*|*-netbsd*) - cat >> confdefs.h <<\EOF - #define _THREAD_SAFE 1 - EOF -diff --git a/c-sdk/configure.in b/c-sdk/configure.in ---- ldap/sdks/c-sdk/configure.in -+++ ldap/sdks/c-sdk/configure.in -@@ -1225,8 +1225,10 @@ tools are selected during the Xcode/Deve - fi - AC_DEFINE(XP_UNIX) - AC_DEFINE(DRAGONFLY) -+ LD='$(CC)' -+ MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@' - DSO_CFLAGS=-fPIC -- DSO_LDOPTS='-shared' -+ DSO_LDOPTS='-shared -Wl,-soname,$(notdir $@)' - ;; - - *-freebsd*) -@@ -1236,6 +1238,7 @@ tools are selected during the Xcode/Deve - AC_DEFINE(XP_UNIX) - AC_DEFINE(FREEBSD) - AC_DEFINE(HAVE_BSD_FLOCK) -+ LD='$(CC)' - CFLAGS="$CFLAGS $(DSO_CFLAGS) -ansi -Wall" - MOZ_OBJFORMAT=`test -x /usr/bin/objformat && /usr/bin/objformat || echo elf` - if test "$MOZ_OBJFORMAT" = "elf"; then -@@ -1243,8 +1246,9 @@ tools are selected during the Xcode/Deve - else - DLL_SUFFIX=so.1.0 - fi -+ MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@' - DSO_CFLAGS=-fPIC -- DSO_LDOPTS=-Bshareable -+ DSO_LDOPTS='-shared -Wl,-soname,$(notdir $@)' - ;; - - *-hpux*) -@@ -2329,8 +2333,15 @@ if test -n "$USE_PTHREADS"; then - if test $? -eq 0; then - if test -z "`egrep -i '(unrecognize|unknown)' conftest.out | grep pthread`" && test -z "`egrep -i '(error|incorrect)' conftest.out`" ; then - ac_cv_have_dash_pthread=yes -- CFLAGS="$CFLAGS -pthread" -- CXXFLAGS="$CXXFLAGS -pthread" -+ case "$target_os" in -+ dragonfly*|freebsd*) -+# Freebsd doesn't use -pthread for compiles, it uses them for linking -+ ;; -+ *) -+ CFLAGS="$CFLAGS -pthread" -+ CXXFLAGS="$CXXFLAGS -pthread" -+ ;; -+ esac - fi - fi - rm -f conftest* -@@ -2361,7 +2372,17 @@ if test -n "$USE_PTHREADS"; then - _PTHREAD_LDFLAGS= - fi - ;; -- *-freebsd*|*-openbsd*|*-bsdi*|*-netbsd*) -+ *-dragonfly*|*-freebsd*) -+ AC_DEFINE(_REENTRANT) -+ AC_DEFINE(_THREAD_SAFE) -+ dnl -pthread links in -lc_r, so don't specify it explicitly. -+ if test "$ac_cv_have_dash_pthread" = "yes"; then -+ _PTHREAD_LDFLAGS="-pthread" -+ else -+ _PTHREAD_LDFLAGS="-lc_r" -+ fi -+ ;; -+ *-openbsd*|*-bsdi*|*-netbsd*) - AC_DEFINE(_THREAD_SAFE) - dnl -pthread links in -lc_r, so don't specify it explicitly. - if test "$ac_cv_have_dash_pthread" = "yes"; then Property changes on: head/mail/thunderbird/files/patch-bug1112904 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-bug1073117 =================================================================== --- head/mail/thunderbird/files/patch-bug1073117 (revision 413156) +++ head/mail/thunderbird/files/patch-bug1073117 (nonexistent) @@ -1,877 +0,0 @@ -diff --git widget/gtk/gtk2drawing.c widget/gtk/gtk2drawing.c -index 34f22af..1b950ab 100644 ---- mozilla/widget/gtk/gtk2drawing.c -+++ mozilla/widget/gtk/gtk2drawing.c -@@ -831,7 +831,7 @@ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) - return MOZ_GTK_SUCCESS; - } - --gint -+static gint - moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, - gint* focus_width, gint* focus_pad) - { -@@ -928,7 +928,7 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) - return MOZ_GTK_SUCCESS; - } - --gint -+static gint - moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) - { - static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; -diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c -index 08a58d6..7fef6fa 100644 ---- mozilla/widget/gtk/gtk3drawing.c -+++ mozilla/widget/gtk/gtk3drawing.c -@@ -65,6 +65,7 @@ static GtkWidget* gScrolledWindowWidget; - static style_prop_t style_prop_func; - static gboolean have_arrow_scaling; - static gboolean checkbox_check_state; -+static gboolean notebook_has_tab_gap; - static gboolean is_initialized; - - #define ARROW_UP 0 -@@ -725,6 +726,14 @@ moz_gtk_init() - else - checkbox_check_state = GTK_STATE_FLAG_ACTIVE; - -+ if(!gtk_check_version(3, 12, 0)) { -+ ensure_tab_widget(); -+ gtk_widget_style_get(gTabWidget, "has-tab-gap", ¬ebook_has_tab_gap, NULL); -+ } -+ else { -+ notebook_has_tab_gap = TRUE; -+ } -+ - /* Add style property to GtkEntry. - * Adding the style property to the normal GtkEntry class means that it - * will work without issues inside GtkComboBox and for Spinbuttons. */ -@@ -762,37 +771,17 @@ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing) - gint - moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width) - { -- gboolean interior_focus; -- gint focus_width = 0; -+ GtkBorder border; -+ GtkBorder padding; -+ GtkStyleContext *style; - - ensure_entry_widget(); -- gtk_widget_style_get(gEntryWidget, -- "interior-focus", &interior_focus, -- "focus-line-width", &focus_width, -- NULL); -- if (interior_focus) { -- GtkBorder border; -- GtkStyleContext *style = gtk_widget_get_style_context(gEntryWidget); -- gtk_style_context_get_border(style, 0, &border); -- *focus_h_width = border.left + focus_width; -- *focus_v_width = border.top + focus_width; -- } else { -- *focus_h_width = focus_width; -- *focus_v_width = focus_width; -- } -- return MOZ_GTK_SUCCESS; --} -- --gint --moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, -- gint* focus_width, gint* focus_pad) --{ -- gtk_widget_style_get (widget, -- "interior-focus", interior_focus, -- "focus-line-width", focus_width, -- "focus-padding", focus_pad, -- NULL); -+ style = gtk_widget_get_style_context(gEntryWidget); - -+ gtk_style_context_get_border(style, 0, &border); -+ gtk_style_context_get_padding(style, 0, &padding); -+ *focus_h_width = border.left + padding.left; -+ *focus_v_width = border.top + padding.top; - return MOZ_GTK_SUCCESS; - } - -@@ -880,24 +860,6 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size) - return MOZ_GTK_SUCCESS; - } - --gint --moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) --{ -- static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; -- GtkBorder *tmp_border; -- -- gtk_widget_style_get (widget, "inner-border", &tmp_border, NULL); -- -- if (tmp_border) { -- *inner_border = *tmp_border; -- gtk_border_free(tmp_border); -- } -- else -- *inner_border = default_inner_border; -- -- return MOZ_GTK_SUCCESS; --} -- - static gint - moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, - GtkWidgetState* state, -@@ -908,19 +870,8 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, - GtkStyleContext* style = gtk_widget_get_style_context(widget); - gint x = rect->x, y=rect->y, width=rect->width, height=rect->height; - -- gboolean interior_focus; -- gint focus_width, focus_pad; -- -- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); - gtk_widget_set_direction(widget, direction); -- -- if (!interior_focus && state->focused) { -- x += focus_width + focus_pad; -- y += focus_width + focus_pad; -- width -= 2 * (focus_width + focus_pad); -- height -= 2 * (focus_width + focus_pad); -- } -- -+ - gtk_style_context_save(style); - gtk_style_context_set_state(style, state_flags); - -@@ -953,20 +904,12 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect, - } - - if (state->focused) { -- if (interior_focus) { -- GtkBorder border; -- gtk_style_context_get_border(style, state_flags, &border); -- x += border.left + focus_pad; -- y += border.top + focus_pad; -- width -= 2 * (border.left + focus_pad); -- height -= 2 * (border.top + focus_pad); -- } else { -- x -= focus_width + focus_pad; -- y -= focus_width + focus_pad; -- width += 2 * (focus_width + focus_pad); -- height += 2 * (focus_width + focus_pad); -- } -- -+ GtkBorder border; -+ gtk_style_context_get_border(style, state_flags, &border); -+ x += border.left; -+ y += border.top; -+ width -= (border.left + border.right); -+ height -= (border.top + border.bottom); - gtk_render_focus(style, cr, x, y, width, height); - } - gtk_style_context_restore(style); -@@ -1056,33 +999,23 @@ calculate_button_inner_rect(GtkWidget* button, GdkRectangle* rect, - GtkTextDirection direction, - gboolean ignore_focus) - { -- GtkBorder inner_border; -- gboolean interior_focus; -- gint focus_width, focus_pad; - GtkStyleContext* style; - GtkBorder border; -+ GtkBorder padding = {0, 0, 0, 0}; - - style = gtk_widget_get_style_context(button); - - /* This mirrors gtkbutton's child positioning */ -- moz_gtk_button_get_inner_border(button, &inner_border); -- moz_gtk_widget_get_focus(button, &interior_focus, -- &focus_width, &focus_pad); -- -- if (ignore_focus) -- focus_width = focus_pad = 0; -- - gtk_style_context_get_border(style, 0, &border); -+ if (!ignore_focus) -+ gtk_style_context_get_padding(style, 0, &padding); - -- inner_rect->x = rect->x + border.left + focus_width + focus_pad; -- inner_rect->x += direction == GTK_TEXT_DIR_LTR ? -- inner_border.left : inner_border.right; -- inner_rect->y = rect->y + inner_border.top + border.top + -- focus_width + focus_pad; -- inner_rect->width = MAX(1, rect->width - inner_border.left - -- inner_border.right - (border.left + focus_pad + focus_width) * 2); -- inner_rect->height = MAX(1, rect->height - inner_border.top - -- inner_border.bottom - (border.top + focus_pad + focus_width) * 2); -+ inner_rect->x = rect->x + border.left + padding.left; -+ inner_rect->y = rect->y + padding.top + border.top; -+ inner_rect->width = MAX(1, rect->width - padding.left - -+ padding.right - border.left * 2); -+ inner_rect->height = MAX(1, rect->height - padding.top - -+ padding.bottom - border.top * 2); - - return MOZ_GTK_SUCCESS; - } -@@ -1457,19 +1390,12 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, - { - gint x = rect->x, y = rect->y, width = rect->width, height = rect->height; - GtkStyleContext* style; -- gboolean interior_focus; -- gint focus_width; - int draw_focus_outline_only = state->depressed; // NS_THEME_FOCUS_OUTLINE - - gtk_widget_set_direction(widget, direction); - - style = gtk_widget_get_style_context(widget); - -- gtk_widget_style_get(widget, -- "interior-focus", &interior_focus, -- "focus-line-width", &focus_width, -- NULL); -- - if (draw_focus_outline_only) { - // Inflate the given 'rect' with the focus outline size. - gint h, v; -@@ -1501,14 +1427,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, - /* This will get us the lit borders that focused textboxes enjoy on - * some themes. */ - gtk_style_context_set_state(style, GTK_STATE_FLAG_FOCUSED); -- if (!interior_focus) { -- /* Indent the border a little bit if we have exterior focus -- (this is what GTK does to draw native entries) */ -- x += focus_width; -- y += focus_width; -- width -= 2 * focus_width; -- height -= 2 * focus_width; -- } - } - - if (state->disabled) { -@@ -1520,11 +1438,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect, - } - gtk_render_frame(style, cr, x, y, width, height); - -- if (state->focused && !state->disabled) { -- if (!interior_focus) { -- gtk_render_focus(style, cr, rect->x, rect->y, rect->width, rect->height); -- } -- } - gtk_style_context_restore(style); - - return MOZ_GTK_SUCCESS; -@@ -1829,8 +1742,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, - GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state); - GtkStyleContext* style; - GtkWidget *widget; -- gboolean interior_focus; -- gint focus_width, focus_pad; - - if (isradio) { - ensure_radiobutton_widget(); -@@ -1843,7 +1754,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, - - style = gtk_widget_get_style_context(widget); - gtk_style_context_save(style); -- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); - gtk_style_context_set_state(style, state_flags); - - /* this is for drawing a prelight box */ -@@ -1852,10 +1762,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect, - rect->x, rect->y, rect->width, rect->height); - } - -- if (state->focused && !interior_focus) { -- gtk_render_focus(style, cr, -- rect->x, rect->y, rect->width, rect->height); -- } - gtk_style_context_restore(style); - - return MOZ_GTK_SUCCESS; -@@ -1868,7 +1774,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, - { - GtkStyleContext *style; - GtkWidget *widget; -- gboolean interior_focus; - - if (!state->focused) - return MOZ_GTK_SUCCESS; -@@ -1889,10 +1794,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect, - } - gtk_widget_set_direction(widget, direction); - -- gtk_widget_style_get(widget, "interior-focus", &interior_focus, NULL); -- if (!interior_focus) -- return MOZ_GTK_SUCCESS; -- - gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state)); - gtk_render_focus(style, cr, - rect->x, rect->y, rect->width, rect->height); -@@ -2105,6 +2015,9 @@ moz_gtk_get_tab_thickness(void) - GtkStyleContext * style; - - ensure_tab_widget(); -+ if (!notebook_has_tab_gap) -+ return 0; /* tabs do not overdraw the tabpanel border with "no gap" style */ -+ - style = gtk_widget_get_style_context(gTabWidget); - gtk_style_context_add_class(style, GTK_STYLE_CLASS_NOTEBOOK); - gtk_style_context_get_border(style, 0, &border); -@@ -2150,7 +2063,7 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, - ensure_tab_widget(); - gtk_widget_set_direction(gTabWidget, direction); - -- style = gtk_widget_get_style_context(gTabWidget); -+ style = gtk_widget_get_style_context(gTabWidget); - gtk_style_context_save(style); - moz_gtk_tab_prepare_style_context(style, flags); - -@@ -2167,143 +2080,155 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect, - - focusRect = backRect = tabRect; - -- if ((flags & MOZ_GTK_TAB_SELECTED) == 0) { -- /* Only draw the tab */ -- gtk_render_extension(style, cr, -- tabRect.x, tabRect.y, tabRect.width, tabRect.height, -- (flags & MOZ_GTK_TAB_BOTTOM) ? -- GTK_POS_TOP : GTK_POS_BOTTOM ); -- } else { -- /* Draw the tab and the gap -- * We want the gap to be positioned exactly on the tabpanel top -- * border; since tabbox.css may set a negative margin so that the tab -- * frame rect already overlaps the tabpanel frame rect, we need to take -- * that into account when drawing. To that effect, nsNativeThemeGTK -- * passes us this negative margin (bmargin in the graphic below) in the -- * lowest bits of |flags|. We use it to set gap_voffset, the distance -- * between the top of the gap and the bottom of the tab (resp. the -- * bottom of the gap and the top of the tab when we draw a bottom tab), -- * while ensuring that the gap always touches the border of the tab, -- * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results -- * with big negative or positive margins. -- * Here is a graphical explanation in the case of top tabs: -- * ___________________________ -- * / \ -- * | T A B | -- * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel -- * : ^ bmargin : ^ -- * : | (-negative margin, : | -- * bottom : v passed in flags) : | gap_height -- * of -> :.............................: | (the size of the -- * the tab . part of the gap . | tabpanel top border) -- * . outside of the tab . v -- * ---------------------------------------------- -- * -- * To draw the gap, we use gtk_paint_box_gap(), see comment in -- * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall, -- * which should suffice to ensure that the only visible border is the -- * pierced one. If the tab is in the middle, we make the box_gap begin -- * a bit to the left of the tab and end a bit to the right, adjusting -- * the gap position so it still is under the tab, because we want the -- * rendering of a gap in the middle of a tabpanel. This is the role of -- * the gints gap_{l,r}_offset. On the contrary, if the tab is the -- * first, we align the start border of the box_gap with the start -- * border of the tab (left if LTR, right if RTL), by setting the -- * appropriate offset to 0.*/ -- gint gap_loffset, gap_roffset, gap_voffset, gap_height; -- -- /* Get height needed by the gap */ -- gap_height = moz_gtk_get_tab_thickness(); -- -- /* Extract gap_voffset from the first bits of flags */ -- gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK; -- if (gap_voffset > gap_height) -- gap_voffset = gap_height; -- -- /* Set gap_{l,r}_offset to appropriate values */ -- gap_loffset = gap_roffset = 20; /* should be enough */ -- if (flags & MOZ_GTK_TAB_FIRST) { -- if (direction == GTK_TEXT_DIR_RTL) -- gap_roffset = initial_gap; -- else -- gap_loffset = initial_gap; -- } -- -- if (flags & MOZ_GTK_TAB_BOTTOM) { -- /* Draw the tab on bottom */ -- focusRect.y += gap_voffset; -- focusRect.height -= gap_voffset; -- -+ if (notebook_has_tab_gap) { -+ if ((flags & MOZ_GTK_TAB_SELECTED) == 0) { -+ /* Only draw the tab */ - gtk_render_extension(style, cr, -- tabRect.x, tabRect.y + gap_voffset, tabRect.width, -- tabRect.height - gap_voffset, GTK_POS_TOP); -- -- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); -- -- backRect.y += (gap_voffset - gap_height); -- backRect.height = gap_height; -- -- /* Draw the gap; erase with background color before painting in -- * case theme does not */ -- gtk_render_background(style, cr, backRect.x, backRect.y, -- backRect.width, backRect.height); -- cairo_save(cr); -- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); -- cairo_clip(cr); -- -- gtk_render_frame_gap(style, cr, -- tabRect.x - gap_loffset, -- tabRect.y + gap_voffset - 3 * gap_height, -- tabRect.width + gap_loffset + gap_roffset, -- 3 * gap_height, GTK_POS_BOTTOM, -- gap_loffset, gap_loffset + tabRect.width); -- cairo_restore(cr); -+ tabRect.x, tabRect.y, tabRect.width, tabRect.height, -+ (flags & MOZ_GTK_TAB_BOTTOM) ? -+ GTK_POS_TOP : GTK_POS_BOTTOM ); - } else { -- /* Draw the tab on top */ -- focusRect.height -= gap_voffset; -- gtk_render_extension(style, cr, -- tabRect.x, tabRect.y, tabRect.width, -- tabRect.height - gap_voffset, GTK_POS_BOTTOM); -- -- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); -- -- backRect.y += (tabRect.height - gap_voffset); -- backRect.height = gap_height; -- -- /* Draw the gap; erase with background color before painting in -- * case theme does not */ -- gtk_render_background(style, cr, backRect.x, backRect.y, -- backRect.width, backRect.height); -- -- cairo_save(cr); -- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); -- cairo_clip(cr); -- -- gtk_render_frame_gap(style, cr, -- tabRect.x - gap_loffset, -- tabRect.y + tabRect.height - gap_voffset, -- tabRect.width + gap_loffset + gap_roffset, -- 3 * gap_height, GTK_POS_TOP, -- gap_loffset, gap_loffset + tabRect.width); -- cairo_restore(cr); -+ /* Draw the tab and the gap -+ * We want the gap to be positioned exactly on the tabpanel top -+ * border; since tabbox.css may set a negative margin so that the tab -+ * frame rect already overlaps the tabpanel frame rect, we need to take -+ * that into account when drawing. To that effect, nsNativeThemeGTK -+ * passes us this negative margin (bmargin in the graphic below) in the -+ * lowest bits of |flags|. We use it to set gap_voffset, the distance -+ * between the top of the gap and the bottom of the tab (resp. the -+ * bottom of the gap and the top of the tab when we draw a bottom tab), -+ * while ensuring that the gap always touches the border of the tab, -+ * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results -+ * with big negative or positive margins. -+ * Here is a graphical explanation in the case of top tabs: -+ * ___________________________ -+ * / \ -+ * | T A B | -+ * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel -+ * : ^ bmargin : ^ -+ * : | (-negative margin, : | -+ * bottom : v passed in flags) : | gap_height -+ * of -> :.............................: | (the size of the -+ * the tab . part of the gap . | tabpanel top border) -+ * . outside of the tab . v -+ * ---------------------------------------------- -+ * -+ * To draw the gap, we use gtk_paint_box_gap(), see comment in -+ * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall, -+ * which should suffice to ensure that the only visible border is the -+ * pierced one. If the tab is in the middle, we make the box_gap begin -+ * a bit to the left of the tab and end a bit to the right, adjusting -+ * the gap position so it still is under the tab, because we want the -+ * rendering of a gap in the middle of a tabpanel. This is the role of -+ * the gints gap_{l,r}_offset. On the contrary, if the tab is the -+ * first, we align the start border of the box_gap with the start -+ * border of the tab (left if LTR, right if RTL), by setting the -+ * appropriate offset to 0.*/ -+ gint gap_loffset, gap_roffset, gap_voffset, gap_height; -+ -+ /* Get height needed by the gap */ -+ gap_height = moz_gtk_get_tab_thickness(); -+ -+ /* Extract gap_voffset from the first bits of flags */ -+ gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK; -+ if (gap_voffset > gap_height) -+ gap_voffset = gap_height; -+ -+ /* Set gap_{l,r}_offset to appropriate values */ -+ gap_loffset = gap_roffset = 20; /* should be enough */ -+ if (flags & MOZ_GTK_TAB_FIRST) { -+ if (direction == GTK_TEXT_DIR_RTL) -+ gap_roffset = initial_gap; -+ else -+ gap_loffset = initial_gap; -+ } -+ -+ if (flags & MOZ_GTK_TAB_BOTTOM) { -+ /* Draw the tab on bottom */ -+ focusRect.y += gap_voffset; -+ focusRect.height -= gap_voffset; -+ -+ gtk_render_extension(style, cr, -+ tabRect.x, tabRect.y + gap_voffset, tabRect.width, -+ tabRect.height - gap_voffset, GTK_POS_TOP); -+ -+ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); -+ -+ backRect.y += (gap_voffset - gap_height); -+ backRect.height = gap_height; -+ -+ /* Draw the gap; erase with background color before painting in -+ * case theme does not */ -+ gtk_render_background(style, cr, backRect.x, backRect.y, -+ backRect.width, backRect.height); -+ cairo_save(cr); -+ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); -+ cairo_clip(cr); -+ -+ gtk_render_frame_gap(style, cr, -+ tabRect.x - gap_loffset, -+ tabRect.y + gap_voffset - 3 * gap_height, -+ tabRect.width + gap_loffset + gap_roffset, -+ 3 * gap_height, GTK_POS_BOTTOM, -+ gap_loffset, gap_loffset + tabRect.width); -+ cairo_restore(cr); -+ } else { -+ /* Draw the tab on top */ -+ focusRect.height -= gap_voffset; -+ gtk_render_extension(style, cr, -+ tabRect.x, tabRect.y, tabRect.width, -+ tabRect.height - gap_voffset, GTK_POS_BOTTOM); -+ -+ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB); -+ -+ backRect.y += (tabRect.height - gap_voffset); -+ backRect.height = gap_height; -+ -+ /* Draw the gap; erase with background color before painting in -+ * case theme does not */ -+ gtk_render_background(style, cr, backRect.x, backRect.y, -+ backRect.width, backRect.height); -+ -+ cairo_save(cr); -+ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height); -+ cairo_clip(cr); -+ -+ gtk_render_frame_gap(style, cr, -+ tabRect.x - gap_loffset, -+ tabRect.y + tabRect.height - gap_voffset, -+ tabRect.width + gap_loffset + gap_roffset, -+ 3 * gap_height, GTK_POS_TOP, -+ gap_loffset, gap_loffset + tabRect.width); -+ cairo_restore(cr); -+ } - } -+ } else { -+ gtk_render_background(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height); -+ gtk_render_frame(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height); - } - -+ gtk_style_context_restore(style); -+ - if (state->focused) { - /* Paint the focus ring */ -- GtkBorder border; -- gtk_style_context_get_border(style, GetStateFlagsFromGtkWidgetState(state), &border); -+ GtkBorder padding; -+ -+ gtk_style_context_save(style); -+ moz_gtk_tab_prepare_style_context(style, flags); - -- focusRect.x += border.left; -- focusRect.width -= (border.left + border.right); -- focusRect.y += border.top; -- focusRect.height -= (border.top + border.bottom); -+ gtk_style_context_get_padding(style, GetStateFlagsFromGtkWidgetState(state), &padding); -+ -+ focusRect.x += padding.left; -+ focusRect.width -= (padding.left + padding.right); -+ focusRect.y += padding.top; -+ focusRect.height -= (padding.top + padding.bottom); - - gtk_render_focus(style, cr, - focusRect.x, focusRect.y, focusRect.width, focusRect.height); -+ -+ gtk_style_context_restore(style); - } - -- gtk_style_context_restore(style); - - return MOZ_GTK_SUCCESS; - } -@@ -2684,26 +2609,18 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - switch (widget) { - case MOZ_GTK_BUTTON: - { -- GtkBorder inner_border; -- gboolean interior_focus; -- gint focus_width, focus_pad; -- - ensure_button_widget(); -+ style = gtk_widget_get_style_context(gButtonWidget); -+ - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget)); - - /* Don't add this padding in HTML, otherwise the buttons will - become too big and stuff the layout. */ - if (!inhtml) { -- moz_gtk_widget_get_focus(gButtonWidget, &interior_focus, &focus_width, &focus_pad); -- moz_gtk_button_get_inner_border(gButtonWidget, &inner_border); -- *left += focus_width + focus_pad + inner_border.left; -- *right += focus_width + focus_pad + inner_border.right; -- *top += focus_width + focus_pad + inner_border.top; -- *bottom += focus_width + focus_pad + inner_border.bottom; -+ moz_gtk_add_style_padding(style, left, top, right, bottom); - } - -- moz_gtk_add_style_border(gtk_widget_get_style_context(gButtonWidget), -- left, top, right, bottom); -+ moz_gtk_add_style_border(style, left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_ENTRY: -@@ -2717,7 +2610,13 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - ensure_entry_widget(); - style = gtk_widget_get_style_context(gEntryWidget); - moz_gtk_add_style_border(style, left, top, right, bottom); -- moz_gtk_add_style_padding(style, left, top, right, bottom); -+ -+ /* Use the document padding in HTML -+ and GTK style padding in XUL. */ -+ if (!inhtml) { -+ moz_gtk_add_style_padding(style, left, top, right, bottom); -+ } -+ - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_TREEVIEW: -@@ -2737,23 +2636,15 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - * assigned. - * That is why the following code is the same as for MOZ_GTK_BUTTON. - * */ -- -- GtkBorder inner_border; -- gboolean interior_focus; -- gint focus_width, focus_pad; -+ GtkStyleContext *style; - - ensure_tree_header_cell_widget(); - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gTreeHeaderCellWidget)); - -- moz_gtk_widget_get_focus(gTreeHeaderCellWidget, &interior_focus, &focus_width, &focus_pad); -- moz_gtk_button_get_inner_border(gTreeHeaderCellWidget, &inner_border); -- *left += focus_width + focus_pad + inner_border.left; -- *right += focus_width + focus_pad + inner_border.right; -- *top += focus_width + focus_pad + inner_border.top; -- *bottom += focus_width + focus_pad + inner_border.bottom; -- -- moz_gtk_add_style_border(gtk_widget_get_style_context(gTreeHeaderCellWidget), -- left, top, right, bottom); -+ style = gtk_widget_get_style_context(gTreeHeaderCellWidget); -+ -+ moz_gtk_add_style_border(style, left, top, right, bottom); -+ moz_gtk_add_style_padding(style, left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_TREE_HEADER_SORTARROW: -@@ -2773,29 +2664,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - /* We need to account for the arrow on the dropdown, so text - * doesn't come too close to the arrow, or in some cases spill - * into the arrow. */ -- gboolean ignored_interior_focus, wide_separators; -- gint focus_width, focus_pad, separator_width; -+ gboolean wide_separators; -+ gint separator_width; - GtkRequisition arrow_req; - GtkBorder border; - - ensure_combo_box_widgets(); - -- *left = gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); -+ *left = *top = *right = *bottom = -+ gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget)); -+ -+ style = gtk_widget_get_style_context(gComboBoxButtonWidget); - - if (!inhtml) { -- moz_gtk_widget_get_focus(gComboBoxButtonWidget, -- &ignored_interior_focus, -- &focus_width, &focus_pad); -- *left += focus_width + focus_pad; -+ moz_gtk_add_style_padding(style, left, top, right, bottom); - } - -- style = gtk_widget_get_style_context(gComboBoxButtonWidget); -- gtk_style_context_get_border(style, 0, &border); -- -- *top = *left + border.top; -- *left += border.left; -- -- *right = *left; *bottom = *top; -+ moz_gtk_add_style_border(style, left, top, right, bottom); - - /* If there is no separator, don't try to count its width. */ - separator_width = 0; -@@ -2847,60 +2732,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - ensure_frame_widget(); - w = gFrameWidget; - break; -- case MOZ_GTK_CHECKBUTTON_LABEL: -- case MOZ_GTK_RADIOBUTTON_LABEL: -- { -- gboolean interior_focus; -- gint focus_width, focus_pad; -- -- /* If the focus is interior, then the label has a border of -- (focus_width + focus_pad). */ -- if (widget == MOZ_GTK_CHECKBUTTON_LABEL) { -- ensure_checkbox_widget(); -- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, -- &focus_width, &focus_pad); -- } -- else { -- ensure_radiobutton_widget(); -- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, -- &focus_width, &focus_pad); -- } -- -- if (interior_focus) -- *left = *top = *right = *bottom = (focus_width + focus_pad); -- -- return MOZ_GTK_SUCCESS; -- } -- - case MOZ_GTK_CHECKBUTTON_CONTAINER: - case MOZ_GTK_RADIOBUTTON_CONTAINER: - { -- gboolean interior_focus; -- gint focus_width, focus_pad; -- -- /* If the focus is _not_ interior, then the container has a border -- of (focus_width + focus_pad). */ - if (widget == MOZ_GTK_CHECKBUTTON_CONTAINER) { - ensure_checkbox_widget(); -- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus, -- &focus_width, &focus_pad); - w = gCheckboxWidget; - } else { - ensure_radiobutton_widget(); -- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus, -- &focus_width, &focus_pad); - w = gRadiobuttonWidget; - } -+ style = gtk_widget_get_style_context(w); - - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w)); -- -- if (!interior_focus) { -- *left += (focus_width + focus_pad); -- *right += (focus_width + focus_pad); -- *top += (focus_width + focus_pad); -- *bottom += (focus_width + focus_pad); -- } -- -+ moz_gtk_add_style_border(style, -+ left, top, right, bottom); -+ moz_gtk_add_style_padding(style, -+ left, top, right, bottom); - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_MENUPOPUP: -@@ -2927,6 +2775,8 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - return MOZ_GTK_SUCCESS; - } - /* These widgets have no borders, since they are not containers. */ -+ case MOZ_GTK_CHECKBUTTON_LABEL: -+ case MOZ_GTK_RADIOBUTTON_LABEL: - case MOZ_GTK_SPLITTER_HORIZONTAL: - case MOZ_GTK_SPLITTER_VERTICAL: - case MOZ_GTK_CHECKBUTTON: -@@ -2975,11 +2849,7 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, - gtk_style_context_save(style); - moz_gtk_tab_prepare_style_context(style, flags); - -- // TODO add_style_border() should be replaced -- // with focus-line-width and focus-padding -- // see Bug 877605 - *left = *top = *right = *bottom = 0; -- moz_gtk_add_style_border(style, left, top, right, bottom); - moz_gtk_add_style_padding(style, left, top, right, bottom); - - gtk_widget_style_get (gTabWidget, "tab-curvature", &tab_curvature, NULL); -@@ -2990,16 +2860,9 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom, - int initial_gap; - gtk_widget_style_get (gTabWidget, "initial-gap", &initial_gap, NULL); - if (direction == GTK_TEXT_DIR_RTL) -- *right += initial_gap; -+ *right += initial_gap; - else -- *left += initial_gap; -- } -- -- // Top tabs have no bottom border, bottom tabs have no top border -- if (flags & MOZ_GTK_TAB_BOTTOM) { -- *top = 0; -- } else { -- *bottom = 0; -+ *left += initial_gap; - } - - gtk_style_context_restore(style); -diff --git widget/gtk/gtkdrawing.h widget/gtk/gtkdrawing.h -index 1938e8f..5f71cfd 100644 ---- mozilla/widget/gtk/gtkdrawing.h -+++ mozilla/widget/gtk/gtkdrawing.h -@@ -293,16 +293,6 @@ moz_gtk_checkbox_get_metrics(gint* indicator_size, gint* indicator_spacing); - gint - moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing); - --/** -- * Get the inner-border value for a GtkButton widget (button or tree header) -- * widget: [IN] the widget to get the border value for -- * inner_border: [OUT] the inner border -- * -- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise -- */ --gint --moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); -- - /** Get the extra size for the focus ring for outline:auto. - * widget: [IN] the widget to get the focus metrics for - * focus_h_width: [OUT] the horizontal width -@@ -313,19 +303,6 @@ moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border); - gint - moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width); - --/** Get the focus metrics for a treeheadercell, button, checkbox, or radio button. -- * widget: [IN] the widget to get the focus metrics for -- * interior_focus: [OUT] whether the focus is drawn around the -- * label (TRUE) or around the whole container (FALSE) -- * focus_width: [OUT] the width of the focus line -- * focus_pad: [OUT] the padding between the focus line and children -- * -- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise -- */ --gint --moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, -- gint* focus_width, gint* focus_pad); -- - /** Get the horizontal padding for the menuitem widget or checkmenuitem widget. - * horizontal_padding: [OUT] The left and right padding of the menuitem or checkmenuitem - * -diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp -index e5e1867..76d28e3 100644 ---- mozilla/widget/gtk/nsNativeThemeGTK.cpp -+++ mozilla/widget/gtk/nsNativeThemeGTK.cpp -@@ -761,6 +761,8 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType, - return false; - - gint gap_height = moz_gtk_get_tab_thickness(); -+ if (!gap_height) -+ return false; - - int32_t extra = gap_height - GetTabMarginPixels(aFrame); - if (extra <= 0) Property changes on: head/mail/thunderbird/files/patch-bug1073117 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-mozilla-dom-events-MessageEvent.h =================================================================== --- head/mail/thunderbird/files/patch-mozilla-dom-events-MessageEvent.h (revision 413156) +++ head/mail/thunderbird/files/patch-mozilla-dom-events-MessageEvent.h (nonexistent) @@ -1,12 +0,0 @@ ---- mozilla/dom/events/MessageEvent.h.orig 2015-12-21 23:33:03.000000000 +0100 -+++ mozilla/dom/events/MessageEvent.h 2016-01-23 23:42:54.823166000 +0100 -@@ -15,9 +15,6 @@ namespace mozilla { - namespace dom { - - struct MessageEventInit; --class MessagePort; --class MessagePortBase; --class MessagePortList; - class OwningWindowProxyOrMessagePort; - - /** Property changes on: head/mail/thunderbird/files/patch-mozilla-dom-events-MessageEvent.h ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-bug1144643 =================================================================== --- head/mail/thunderbird/files/patch-bug1144643 (revision 413156) +++ head/mail/thunderbird/files/patch-bug1144643 (nonexistent) @@ -1,33 +0,0 @@ -commit a0ccc19 -Author: Martin Stransky -Date: Wed Mar 18 07:14:00 2015 -0400 - - Bug 1144643 - Render tooltips as transparent on Gtk3. r=karlt - - --HG-- - extra : rebase_source : 23085532b27350ca71cbe18db071628388003f33 ---- - widget/gtk/nsNativeThemeGTK.cpp | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp -index e5e1867..26d13a5 100644 ---- mozilla/widget/gtk/nsNativeThemeGTK.cpp -+++ mozilla/widget/gtk/nsNativeThemeGTK.cpp -@@ -1528,9 +1528,15 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType) - case NS_THEME_MENUPOPUP: - case NS_THEME_WINDOW: - case NS_THEME_DIALOG: -- // Tooltips use gtk_paint_flat_box(). -+ return eOpaque; -+ // Tooltips use gtk_paint_flat_box() on Gtk2 -+ // but are shaped on Gtk3 - case NS_THEME_TOOLTIP: -+#if (MOZ_WIDGET_GTK == 2) - return eOpaque; -+#else -+ return eTransparent; -+#endif - } - - return eUnknownTransparency; Property changes on: head/mail/thunderbird/files/patch-bug1144643 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-bug1143686 =================================================================== --- head/mail/thunderbird/files/patch-bug1143686 (revision 413156) +++ head/mail/thunderbird/files/patch-bug1143686 (nonexistent) @@ -1,46 +0,0 @@ -commit e50e738 -Author: Martin Stransky -Date: Mon Mar 16 08:00:00 2015 -0400 - - Bug 1143686 - Gtk3 - Render scrollbar thumb with margin. r=karlt ---- - widget/gtk/gtk3drawing.c | 14 ++++++++++---- - 1 file changed, 10 insertions(+), 4 deletions(-) - -diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c -index 17f46ab..08a58d6 100644 ---- mozilla/widget/gtk/gtk3drawing.c -+++ mozilla/widget/gtk/gtk3drawing.c -@@ -1230,6 +1230,7 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, - GtkStyleContext* style; - GtkScrollbar *scrollbar; - GtkAdjustment *adj; -+ GtkBorder margin; - - ensure_scrollbar_widget(); - -@@ -1239,15 +1240,20 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, - scrollbar = GTK_SCROLLBAR(gVertScrollbarWidget); - - gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction); -- -+ - style = gtk_widget_get_style_context(GTK_WIDGET(scrollbar)); - gtk_style_context_save(style); -- -+ - gtk_style_context_add_class(style, GTK_STYLE_CLASS_SLIDER); - gtk_style_context_set_state(style, state_flags); - -- gtk_render_slider(style, cr, rect->x, rect->y, -- rect->width, rect->height, -+ gtk_style_context_get_margin (style, state_flags, &margin); -+ -+ gtk_render_slider(style, cr, -+ rect->x + margin.left, -+ rect->y + margin.top, -+ rect->width - margin.left - margin.right, -+ rect->height - margin.top - margin.bottom, - (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) ? - GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL); - Property changes on: head/mail/thunderbird/files/patch-bug1143686 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-bug1148203 =================================================================== --- head/mail/thunderbird/files/patch-bug1148203 (revision 413156) +++ head/mail/thunderbird/files/patch-bug1148203 (nonexistent) @@ -1,38 +0,0 @@ -# HG changeset patch -# User Chris Double -# Date 1427767594 -46800 -# Tue Mar 31 15:06:34 2015 +1300 -# Node ID 858ea94746eedc4b65734f8ceedfff7021940cb2 -# Parent 1b8f36a7ee321ca62cf87424910d0e2ed6fed076 -Bug 1148203 - Fix build errors with combinations of enable/disable of ffmp4/ffmpeg/eme - r=cpearce,ted - -Fixes build error with all three disabled. Prevents other combinations -that cause build errors by detecting them at configure time and displaying -an error message. - -diff --git a/configure.in b/configure.in ---- mozilla/configure.in -+++ mozilla/configure.in -@@ -5316,6 +5316,10 @@ MOZ_ARG_DISABLE_BOOL(fmp4, - MOZ_FMP4=, - MOZ_FMP4=1) - -+if test -n "$MOZ_FFMPEG" -a -z "$MOZ_FMP4"; then -+ AC_MSG_ERROR([Fragmented MP4 support must be enabled if using FFMPEG]) -+fi -+ - if test -n "$MOZ_FMP4"; then - AC_DEFINE(MOZ_FMP4) - MOZ_EME=1 -diff --git a/media/libstagefright/binding/MoofParser.cpp b/media/libstagefright/binding/MoofParser.cpp ---- mozilla/media/libstagefright/binding/MoofParser.cpp -+++ mozilla/media/libstagefright/binding/MoofParser.cpp -@@ -9,7 +9,7 @@ - - #include "prlog.h" - --#ifdef PR_LOGGING -+#if defined(MOZ_FMP4) && defined(PR_LOGGING) - extern PRLogModuleInfo* GetDemuxerLog(); - - /* Polyfill __func__ on MSVC to pass to the log. */ Property changes on: head/mail/thunderbird/files/patch-bug1148203 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-bug1138845 =================================================================== --- head/mail/thunderbird/files/patch-bug1138845 (revision 413156) +++ head/mail/thunderbird/files/patch-bug1138845 (nonexistent) @@ -1,134 +0,0 @@ -commit 4b5b332 -Author: Mike Hommey -Date: Tue Mar 3 18:41:13 2015 +0900 - - Bug 1138845 - Don't require atk-bridge for gtk+3 builds. r=tbsaunde ---- - accessible/atk/Platform.cpp | 29 +++++++++++++++++++---------- - config/system-headers | 1 - - configure.in | 2 +- - 3 files changed, 20 insertions(+), 12 deletions(-) - -diff --git accessible/atk/Platform.cpp accessible/atk/Platform.cpp -index a2afd96..2ed5e0b 100644 ---- mozilla/accessible/atk/Platform.cpp -+++ mozilla/accessible/atk/Platform.cpp -@@ -18,8 +18,9 @@ - #include - #endif - #include -+ - #if (MOZ_WIDGET_GTK == 3) --#include -+extern "C" __attribute__((weak,visibility("default"))) int atk_bridge_adaptor_init(int*, char **[]); - #endif - - using namespace mozilla; -@@ -46,7 +47,6 @@ static gulong sToplevel_hide_hook = 0; - - GType g_atk_hyperlink_impl_type = G_TYPE_INVALID; - --#if (MOZ_WIDGET_GTK == 2) - struct GnomeAccessibilityModule - { - const char *libName; -@@ -67,11 +67,13 @@ static GnomeAccessibilityModule sAtkBridge = { - "gnome_accessibility_module_shutdown", nullptr - }; - -+#if (MOZ_WIDGET_GTK == 2) - static GnomeAccessibilityModule sGail = { - "libgail.so", nullptr, - "gnome_accessibility_module_init", nullptr, - "gnome_accessibility_module_shutdown", nullptr - }; -+#endif - - static nsresult - LoadGtkModule(GnomeAccessibilityModule& aModule) -@@ -98,7 +100,11 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) - else - subLen = loc2 - loc1; - nsAutoCString sub(Substring(libPath, loc1, subLen)); -+#if (MOZ_WIDGET_GTK == 2) - sub.AppendLiteral("/gtk-2.0/modules/"); -+#else -+ sub.AppendLiteral("/gtk-3.0/modules/"); -+#endif - sub.Append(aModule.libName); - aModule.lib = PR_LoadLibrary(sub.get()); - if (aModule.lib) -@@ -123,7 +129,6 @@ LoadGtkModule(GnomeAccessibilityModule& aModule) - } - return NS_OK; - } --#endif // (MOZ_WIDGET_GTK == 2) - - void - a11y::PlatformInit() -@@ -175,14 +180,17 @@ a11y::PlatformInit() - - // Init atk-bridge now - PR_SetEnv("NO_AT_BRIDGE=0"); --#if (MOZ_WIDGET_GTK == 2) -- rv = LoadGtkModule(sAtkBridge); -- if (NS_SUCCEEDED(rv)) { -- (*sAtkBridge.init)(); -- } --#else -- atk_bridge_adaptor_init(nullptr, nullptr); -+#if (MOZ_WIDGET_GTK == 3) -+ if (atk_bridge_adaptor_init) { -+ atk_bridge_adaptor_init(nullptr, nullptr); -+ } else - #endif -+ { -+ nsresult rv = LoadGtkModule(sAtkBridge); -+ if (NS_SUCCEEDED(rv)) { -+ (*sAtkBridge.init)(); -+ } -+ } - - if (!sToplevel_event_hook_added) { - sToplevel_event_hook_added = true; -@@ -210,7 +218,6 @@ a11y::PlatformShutdown() - sToplevel_hide_hook); - } - --#if (MOZ_WIDGET_GTK == 2) - if (sAtkBridge.lib) { - // Do not shutdown/unload atk-bridge, - // an exit function registered will take care of it -@@ -221,6 +228,7 @@ a11y::PlatformShutdown() - sAtkBridge.init = nullptr; - sAtkBridge.shutdown = nullptr; - } -+#if (MOZ_WIDGET_GTK == 2) - if (sGail.lib) { - // Do not shutdown gail because - // 1) Maybe it's not init-ed by us. e.g. GtkEmbed -diff --git config/system-headers config/system-headers -index 2c94a7d..cf01775 100644 ---- mozilla/config/system-headers -+++ mozilla/config/system-headers -@@ -189,7 +189,6 @@ asm/signal.h - ASRegistry.h - assert.h - atk/atk.h --atk-bridge.h - atlcom.h - atlconv.h - atlctl.cpp -diff --git configure.in configure.in -index 0bd1eb7..f3b3365 100644 ---- mozilla/configure.in -+++ mozilla/configure.in -@@ -4408,7 +4408,7 @@ fi - - if test "$COMPILE_ENVIRONMENT"; then - if test "$MOZ_ENABLE_GTK3"; then -- PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 atk-bridge-2.0 $GDK_PACKAGES) -+ PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 $GDK_PACKAGES) - MOZ_GTK3_CFLAGS="-I${_topsrcdir}/widget/gtk/compat-gtk3 $MOZ_GTK3_CFLAGS" - dnl Contrary to MOZ_GTK2_LIBS, MOZ_GTK3_LIBS needs to be literally added to TK_LIBS instead - dnl of a make reference because of how TK_LIBS is mangled in toolkit/library/moz.build Property changes on: head/mail/thunderbird/files/patch-bug1138845 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-bug1026499 =================================================================== --- head/mail/thunderbird/files/patch-bug1026499 (revision 413156) +++ head/mail/thunderbird/files/patch-bug1026499 (nonexistent) @@ -1,68 +0,0 @@ -commit 8d0efe4 -Author: Martin Husemann -Date: Wed Jun 18 18:12:22 2014 +0200 - - Bug 1026499 - Use MOZ_ALIGNED_DECL to declare union members in ipdl value declarations. r=bsmedberg ---- - ipc/ipdl/ipdl/cxx/ast.py | 7 ++++--- - ipc/ipdl/ipdl/cxx/cgen.py | 5 ++++- - ipc/ipdl/ipdl/lower.py | 2 +- - 4 files changed, 10 insertions(+), 5 deletions(-) - -diff --git ipc/ipdl/ipdl/cxx/ast.py ipc/ipdl/ipdl/cxx/ast.py -index 3180a65..c2d945b 100644 ---- mozilla/ipc/ipdl/ipdl/cxx/ast.py -+++ mozilla/ipc/ipdl/ipdl/cxx/ast.py -@@ -336,12 +336,13 @@ Type.VOID = Type('void') - Type.VOIDPTR = Type('void', ptr=1) - - class TypeArray(Node): -- def __init__(self, basetype, nmemb): -- '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr''' -+ def __init__(self, basetype, nmemb, alignType): -+ '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr, |alignType| is a type''' - self.basetype = basetype - self.nmemb = nmemb -+ self.alignType = alignType - def __deepcopy__(self, memo): -- return TypeArray(deepcopy(self.basetype, memo), nmemb) -+ return TypeArray(deepcopy(self.basetype, memo), nmemb, alignType) - - class TypeEnum(Node): - def __init__(self, name=None): -diff --git ipc/ipdl/ipdl/cxx/cgen.py ipc/ipdl/ipdl/cxx/cgen.py -index 48b0988..bc914cf 100644 ---- mozilla/ipc/ipdl/ipdl/cxx/cgen.py -+++ mozilla/ipc/ipdl/ipdl/cxx/cgen.py -@@ -101,6 +101,7 @@ class CxxCodeGen(CodePrinter, Visitor): - def visitDecl(self, d): - # C-syntax arrays make code generation much more annoying - if isinstance(d.type, TypeArray): -+ self.write('MOZ_ALIGNED_DECL(') - d.type.basetype.accept(self) - else: - d.type.accept(self) -@@ -111,7 +112,9 @@ class CxxCodeGen(CodePrinter, Visitor): - if isinstance(d.type, TypeArray): - self.write('[') - d.type.nmemb.accept(self) -- self.write(']') -+ self.write('], MOZ_ALIGNOF(') -+ d.type.alignType.accept(self) -+ self.write('))') - - def visitParam(self, p): - self.visitDecl(p) -diff --git ipc/ipdl/ipdl/lower.py ipc/ipdl/ipdl/lower.py -index e97a34c..9360f3c 100644 ---- mozilla/ipc/ipdl/ipdl/lower.py -+++ mozilla/ipc/ipdl/ipdl/lower.py -@@ -768,7 +768,7 @@ IPDL union type.""" - if self.recursive: - return self.ptrToType() - else: -- return TypeArray(Type('char'), ExprSizeof(self.internalType())) -+ return TypeArray(Type('char'), ExprSizeof(self.internalType()), self.internalType()) - - def unionValue(self): - # NB: knows that Union's storage C union is named |mValue| Property changes on: head/mail/thunderbird/files/patch-bug1026499 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-memory-jemalloc-Makefile.in =================================================================== --- head/mail/thunderbird/files/patch-memory-jemalloc-Makefile.in (revision 413156) +++ head/mail/thunderbird/files/patch-memory-jemalloc-Makefile.in (nonexistent) @@ -1,10 +0,0 @@ ---- mozilla/memory/jemalloc/Makefile.in~ -+++ mozilla/memory/jemalloc/Makefile.in -@@ -12,3 +12,7 @@ include $(topsrcdir)/config/rules.mk - ifdef GNU_CC - CFLAGS += -std=gnu99 - endif -+ -+# XXX startup crash workaround for gcc47 on amd64 -+jemalloc.$(OBJ_SUFFIX): OS_CFLAGS := $(filter-out -O3 -Ofast,$(OS_CFLAGS)) -+jemalloc.$(OBJ_SUFFIX): MOZ_OPTIMIZE_FLAGS= Property changes on: head/mail/thunderbird/files/patch-memory-jemalloc-Makefile.in ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-bug1021761 =================================================================== --- head/mail/thunderbird/files/patch-bug1021761 (revision 413156) +++ head/mail/thunderbird/files/patch-bug1021761 (revision 413157) @@ -1,1102 +1,1102 @@ diff --git configure.in configure.in index 48e60c0..ec08417 100644 --- mozilla/configure.in +++ mozilla/configure.in @@ -5591,6 +5591,67 @@ fi AC_SUBST(MOZ_WEBM_ENCODER) dnl ================================== +dnl = Check OSS availability +dnl ================================== + +dnl If using Linux, Solaris or BSDs, ensure that OSS is available +case "$OS_TARGET" in +Linux|SunOS|DragonFly|FreeBSD|NetBSD|GNU/kFreeBSD) + MOZ_OSS=1 + ;; +esac + +MOZ_ARG_WITH_STRING(oss, +[ --with-oss[=PFX] Enable OpenSoundSystem support [installed at prefix PFX]], + OSSPREFIX=$withval) + +if test -n "$OSSPREFIX"; then + if test "$OSSPREFIX" != "no"; then + MOZ_OSS=1 + else + MOZ_OSS= + fi +fi + +_SAVE_CFLAGS=$CFLAGS +_SAVE_LIBS=$LIBS +if test -n "$MOZ_OSS"; then + dnl Prefer 4Front implementation + AC_MSG_CHECKING([MOZ_OSS_CFLAGS]) + if test "$OSSPREFIX" != "yes"; then + oss_conf=${OSSPREFIX%/usr}/etc/oss.conf + if test -f "$oss_conf"; then + . "$oss_conf" + else + OSSLIBDIR=$OSSPREFIX/lib/oss + fi + if test -d "$OSSLIBDIR"; then + MOZ_OSS_CFLAGS="$MOZ_OSS_CFLAGS -I$OSSLIBDIR/include" + fi + fi + AC_MSG_RESULT([$MOZ_OSS_CFLAGS]) + + CFLAGS="$CFLAGS $MOZ_OSS_CFLAGS" + MOZ_CHECK_HEADERS(sys/soundcard.h soundcard.h) + + if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \ + "$ac_cv_header_soundcard_h" != "yes"; then + AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --disable-ogg --disable-wave --disable-webm.]) + fi + + dnl Assume NetBSD implementation over SunAudio + AC_CHECK_LIB(ossaudio, _oss_ioctl, + [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound") + MOZ_OSS_LIBS="$MOZ_OSS_LIBS -lossaudio"]) +fi +CFLAGS=$_SAVE_CFLAGS +LIBS=$_SAVE_LIBS + +AC_SUBST(MOZ_OSS) +AC_SUBST_LIST(MOZ_OSS_CFLAGS) +AC_SUBST_LIST(MOZ_OSS_LIBS) + +dnl ================================== dnl = Check alsa availability on Linux dnl ================================== diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS index b441e8a..950d9e5 100644 --- mozilla/media/libcubeb/AUTHORS +++ mozilla/media/libcubeb/AUTHORS @@ -4,3 +4,4 @@ Michael Wu Paul Adenot David Richards Sebastien Alaiwan +Evgeniy Vodolazskiy diff --git media/libcubeb/src/cubeb.c media/libcubeb/src/cubeb.c index 9c3adcc..45d765b 100644 --- mozilla/media/libcubeb/src/cubeb.c +++ mozilla/media/libcubeb/src/cubeb.c @@ -54,6 +54,9 @@ int opensl_init(cubeb ** context, char const * context_name); #if defined(USE_AUDIOTRACK) int audiotrack_init(cubeb ** context, char const * context_name); #endif +#if defined(USE_OSS) +int oss_init(cubeb ** context, char const * context_name); +#endif int validate_stream_params(cubeb_stream_params stream_params) @@ -120,6 +123,9 @@ cubeb_init(cubeb ** context, char const * context_name) #if defined(USE_AUDIOTRACK) audiotrack_init, #endif +#if defined(USE_OSS) + oss_init, +#endif }; int i; diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c index a962553..1f780f4 100644 --- mozilla/media/libcubeb/src/cubeb_alsa.c +++ mozilla/media/libcubeb/src/cubeb_alsa.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -24,6 +25,50 @@ #define ALSA_PA_PLUGIN "ALSA <-> PulseAudio PCM I/O Plugin" +#ifdef DISABLE_LIBASOUND_DLOPEN +#define WRAP(x) x +#else +#define WRAP(x) cubeb_##x +#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x +MAKE_TYPEDEF(snd_config); +MAKE_TYPEDEF(snd_config_add); +MAKE_TYPEDEF(snd_config_copy); +MAKE_TYPEDEF(snd_config_delete); +MAKE_TYPEDEF(snd_config_get_id); +MAKE_TYPEDEF(snd_config_get_string); +MAKE_TYPEDEF(snd_config_imake_integer); +MAKE_TYPEDEF(snd_config_search); +MAKE_TYPEDEF(snd_config_search_definition); +MAKE_TYPEDEF(snd_lib_error_set_handler); +MAKE_TYPEDEF(snd_pcm_avail_update); +MAKE_TYPEDEF(snd_pcm_close); +MAKE_TYPEDEF(snd_pcm_delay); +MAKE_TYPEDEF(snd_pcm_drain); +MAKE_TYPEDEF(snd_pcm_frames_to_bytes); +MAKE_TYPEDEF(snd_pcm_get_params); +/* snd_pcm_hw_params_alloca is actually a macro */ +/* MAKE_TYPEDEF(snd_pcm_hw_params_alloca); */ +MAKE_TYPEDEF(snd_pcm_hw_params_sizeof); +#define snd_pcm_hw_params_sizeof cubeb_snd_pcm_hw_params_sizeof +MAKE_TYPEDEF(snd_pcm_hw_params_any); +MAKE_TYPEDEF(snd_pcm_hw_params_get_channels_max); +MAKE_TYPEDEF(snd_pcm_hw_params_get_rate); +MAKE_TYPEDEF(snd_pcm_hw_params_set_rate_near); +MAKE_TYPEDEF(snd_pcm_nonblock); +MAKE_TYPEDEF(snd_pcm_open); +MAKE_TYPEDEF(snd_pcm_open_lconf); +MAKE_TYPEDEF(snd_pcm_pause); +MAKE_TYPEDEF(snd_pcm_poll_descriptors); +MAKE_TYPEDEF(snd_pcm_poll_descriptors_count); +MAKE_TYPEDEF(snd_pcm_poll_descriptors_revents); +MAKE_TYPEDEF(snd_pcm_recover); +MAKE_TYPEDEF(snd_pcm_set_params); +MAKE_TYPEDEF(snd_pcm_state); +MAKE_TYPEDEF(snd_pcm_writei); + +#undef MAKE_TYPEDEF +#endif + /* ALSA is not thread-safe. snd_pcm_t instances are individually protected by the owning cubeb_stream's mutex. snd_pcm_t creation and destruction is not thread-safe until ALSA 1.0.24 (see alsa-lib.git commit 91c9c8f1), @@ -64,6 +109,8 @@ struct cubeb { workaround is not required. */ snd_config_t * local_config; int is_pa; + + void * libasound; }; enum stream_state { @@ -262,7 +309,7 @@ alsa_refill_stream(cubeb_stream * stm) pthread_mutex_lock(&stm->mutex); - r = snd_pcm_poll_descriptors_revents(stm->pcm, stm->fds, stm->nfds, &revents); + r = WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents); if (r < 0 || revents != POLLOUT) { /* This should be a stream error; it makes no sense for poll(2) to wake for this stream and then have the stream report that it's not ready. @@ -271,10 +318,10 @@ alsa_refill_stream(cubeb_stream * stm) return RUNNING; } - avail = snd_pcm_avail_update(stm->pcm); + avail = WRAP(snd_pcm_avail_update)(stm->pcm); if (avail == -EPIPE) { - snd_pcm_recover(stm->pcm, avail, 1); - avail = snd_pcm_avail_update(stm->pcm); + WRAP(snd_pcm_recover)(stm->pcm, avail, 1); + avail = WRAP(snd_pcm_avail_update)(stm->pcm); } /* Failed to recover from an xrun, this stream must be broken. */ @@ -293,8 +340,8 @@ alsa_refill_stream(cubeb_stream * stm) available to write. If avail is still zero here, the stream must be in a funky state, so recover and try again. */ if (avail == 0) { - snd_pcm_recover(stm->pcm, -EPIPE, 1); - avail = snd_pcm_avail_update(stm->pcm); + WRAP(snd_pcm_recover)(stm->pcm, -EPIPE, 1); + avail = WRAP(snd_pcm_avail_update)(stm->pcm); if (avail <= 0) { pthread_mutex_unlock(&stm->mutex); stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); @@ -302,7 +349,7 @@ alsa_refill_stream(cubeb_stream * stm) } } - p = calloc(1, snd_pcm_frames_to_bytes(stm->pcm, avail)); + p = calloc(1, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, avail)); assert(p); pthread_mutex_unlock(&stm->mutex); @@ -327,10 +374,10 @@ alsa_refill_stream(cubeb_stream * stm) b[i] *= stm->volume; } } - wrote = snd_pcm_writei(stm->pcm, p, got); + wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); if (wrote == -EPIPE) { - snd_pcm_recover(stm->pcm, wrote, 1); - wrote = snd_pcm_writei(stm->pcm, p, got); + WRAP(snd_pcm_recover)(stm->pcm, wrote, 1); + wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got); } assert(wrote >= 0 && wrote == got); stm->write_position += wrote; @@ -342,7 +389,7 @@ alsa_refill_stream(cubeb_stream * stm) /* Fill the remaining buffer with silence to guarantee one full period has been written. */ - snd_pcm_writei(stm->pcm, (char *) p + got, avail - got); + WRAP(snd_pcm_writei)(stm->pcm, (char *) p + got, avail - got); set_timeout(&stm->drain_timeout, buffer_time * 1000); @@ -453,26 +500,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) slave_def = NULL; - r = snd_config_search(root_pcm, "slave", &slave_pcm); + r = WRAP(snd_config_search)(root_pcm, "slave", &slave_pcm); if (r < 0) { return NULL; } - r = snd_config_get_string(slave_pcm, &string); + r = WRAP(snd_config_get_string)(slave_pcm, &string); if (r >= 0) { - r = snd_config_search_definition(lconf, "pcm_slave", string, &slave_def); + r = WRAP(snd_config_search_definition)(lconf, "pcm_slave", string, &slave_def); if (r < 0) { return NULL; } } do { - r = snd_config_search(slave_def ? slave_def : slave_pcm, "pcm", &pcm); + r = WRAP(snd_config_search)(slave_def ? slave_def : slave_pcm, "pcm", &pcm); if (r < 0) { break; } - r = snd_config_get_string(slave_def ? slave_def : slave_pcm, &string); + r = WRAP(snd_config_get_string)(slave_def ? slave_def : slave_pcm, &string); if (r < 0) { break; } @@ -481,7 +528,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) if (r < 0 || r > (int) sizeof(node_name)) { break; } - r = snd_config_search(lconf, node_name, &pcm); + r = WRAP(snd_config_search)(lconf, node_name, &pcm); if (r < 0) { break; } @@ -490,7 +537,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) } while (0); if (slave_def) { - snd_config_delete(slave_def); + WRAP(snd_config_delete)(slave_def); } return NULL; @@ -513,22 +560,22 @@ init_local_config_with_workaround(char const * pcm_name) lconf = NULL; - if (snd_config == NULL) { + if (*WRAP(snd_config) == NULL) { return NULL; } - r = snd_config_copy(&lconf, snd_config); + r = WRAP(snd_config_copy)(&lconf, *WRAP(snd_config)); if (r < 0) { return NULL; } do { - r = snd_config_search_definition(lconf, "pcm", pcm_name, &pcm_node); + r = WRAP(snd_config_search_definition)(lconf, "pcm", pcm_name, &pcm_node); if (r < 0) { break; } - r = snd_config_get_id(pcm_node, &string); + r = WRAP(snd_config_get_id)(pcm_node, &string); if (r < 0) { break; } @@ -537,7 +584,7 @@ init_local_config_with_workaround(char const * pcm_name) if (r < 0 || r > (int) sizeof(node_name)) { break; } - r = snd_config_search(lconf, node_name, &pcm_node); + r = WRAP(snd_config_search)(lconf, node_name, &pcm_node); if (r < 0) { break; } @@ -548,12 +595,12 @@ init_local_config_with_workaround(char const * pcm_name) } /* Fetch the PCM node's type, and bail out if it's not the PulseAudio plugin. */ - r = snd_config_search(pcm_node, "type", &node); + r = WRAP(snd_config_search)(pcm_node, "type", &node); if (r < 0) { break; } - r = snd_config_get_string(node, &string); + r = WRAP(snd_config_get_string)(node, &string); if (r < 0) { break; } @@ -564,18 +611,18 @@ init_local_config_with_workaround(char const * pcm_name) /* Don't clobber an explicit existing handle_underrun value, set it only if it doesn't already exist. */ - r = snd_config_search(pcm_node, "handle_underrun", &node); + r = WRAP(snd_config_search)(pcm_node, "handle_underrun", &node); if (r != -ENOENT) { break; } /* Disable pcm_pulse's asynchronous underrun handling. */ - r = snd_config_imake_integer(&node, "handle_underrun", 0); + r = WRAP(snd_config_imake_integer)(&node, "handle_underrun", 0); if (r < 0) { break; } - r = snd_config_add(pcm_node, node); + r = WRAP(snd_config_add)(pcm_node, node); if (r < 0) { break; } @@ -583,7 +630,7 @@ init_local_config_with_workaround(char const * pcm_name) return lconf; } while (0); - snd_config_delete(lconf); + WRAP(snd_config_delete)(lconf); return NULL; } @@ -595,9 +642,9 @@ alsa_locked_pcm_open(snd_pcm_t ** pcm, snd_pcm_stream_t stream, snd_config_t * l pthread_mutex_lock(&cubeb_alsa_mutex); if (local_config) { - r = snd_pcm_open_lconf(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config); + r = WRAP(snd_pcm_open_lconf)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config); } else { - r = snd_pcm_open(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK); + r = WRAP(snd_pcm_open)(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK); } pthread_mutex_unlock(&cubeb_alsa_mutex); @@ -610,7 +657,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm) int r; pthread_mutex_lock(&cubeb_alsa_mutex); - r = snd_pcm_close(pcm); + r = WRAP(snd_pcm_close)(pcm); pthread_mutex_unlock(&cubeb_alsa_mutex); return r; @@ -667,12 +714,65 @@ alsa_init(cubeb ** context, char const * context_name) pthread_attr_t attr; snd_pcm_t * dummy; + void * libasound = NULL; + +#ifndef DISABLE_LIBASOUND_DLOPEN + libasound = dlopen("libasound.so", RTLD_LAZY); + if (!libasound) { + return CUBEB_ERROR; + } + +#define LOAD(x) do { \ + cubeb_##x = dlsym(libasound, #x); \ + if (!cubeb_##x) { \ + dlclose(libasound); \ + return CUBEB_ERROR; \ + } \ + } while(0) + + LOAD(snd_config); + LOAD(snd_config_add); + LOAD(snd_config_copy); + LOAD(snd_config_delete); + LOAD(snd_config_get_id); + LOAD(snd_config_get_string); + LOAD(snd_config_imake_integer); + LOAD(snd_config_search); + LOAD(snd_config_search_definition); + LOAD(snd_lib_error_set_handler); + LOAD(snd_pcm_avail_update); + LOAD(snd_pcm_close); + LOAD(snd_pcm_delay); + LOAD(snd_pcm_drain); + LOAD(snd_pcm_frames_to_bytes); + LOAD(snd_pcm_get_params); + /* snd_pcm_hw_params_alloca is actually a macro */ + /* LOAD(snd_pcm_hw_params_alloca); */ + LOAD(snd_pcm_hw_params_sizeof); + LOAD(snd_pcm_hw_params_any); + LOAD(snd_pcm_hw_params_get_channels_max); + LOAD(snd_pcm_hw_params_get_rate); + LOAD(snd_pcm_hw_params_set_rate_near); + LOAD(snd_pcm_nonblock); + LOAD(snd_pcm_open); + LOAD(snd_pcm_open_lconf); + LOAD(snd_pcm_pause); + LOAD(snd_pcm_poll_descriptors); + LOAD(snd_pcm_poll_descriptors_count); + LOAD(snd_pcm_poll_descriptors_revents); + LOAD(snd_pcm_recover); + LOAD(snd_pcm_set_params); + LOAD(snd_pcm_state); + LOAD(snd_pcm_writei); + +#undef LOAD +#endif assert(context); *context = NULL; pthread_mutex_lock(&cubeb_alsa_mutex); if (!cubeb_alsa_error_handler_set) { - snd_lib_error_set_handler(silent_error_handler); + WRAP(snd_lib_error_set_handler)(silent_error_handler); cubeb_alsa_error_handler_set = 1; } pthread_mutex_unlock(&cubeb_alsa_mutex); @@ -680,6 +780,8 @@ alsa_init(cubeb ** context, char const * context_name) ctx = calloc(1, sizeof(*ctx)); assert(ctx); + ctx->libasound = libasound; + ctx->ops = &alsa_ops; r = pthread_mutex_init(&ctx->mutex, NULL); @@ -729,7 +831,7 @@ alsa_init(cubeb ** context, char const * context_name) config fails with EINVAL, the PA PCM is too old for this workaround. */ if (r == -EINVAL) { pthread_mutex_lock(&cubeb_alsa_mutex); - snd_config_delete(ctx->local_config); + WRAP(snd_config_delete)(ctx->local_config); pthread_mutex_unlock(&cubeb_alsa_mutex); ctx->local_config = NULL; } else if (r >= 0) { @@ -768,9 +870,13 @@ alsa_destroy(cubeb * ctx) pthread_mutex_destroy(&ctx->mutex); free(ctx->fds); + if (ctx->libasound) { + dlclose(ctx->libasound); + } + if (ctx->local_config) { pthread_mutex_lock(&cubeb_alsa_mutex); - snd_config_delete(ctx->local_config); + WRAP(snd_config_delete)(ctx->local_config); pthread_mutex_unlock(&cubeb_alsa_mutex); } @@ -838,7 +944,7 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, return CUBEB_ERROR; } - r = snd_pcm_nonblock(stm->pcm, 1); + r = WRAP(snd_pcm_nonblock)(stm->pcm, 1); assert(r == 0); /* Ugly hack: the PA ALSA plugin allows buffer configurations that can't @@ -848,23 +954,23 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, latency = latency < 500 ? 500 : latency; } - r = snd_pcm_set_params(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, - stm->params.channels, stm->params.rate, 1, - latency * 1000); + r = WRAP(snd_pcm_set_params)(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, + stm->params.channels, stm->params.rate, 1, + latency * 1000); if (r < 0) { alsa_stream_destroy(stm); return CUBEB_ERROR_INVALID_FORMAT; } - r = snd_pcm_get_params(stm->pcm, &stm->buffer_size, &stm->period_size); + r = WRAP(snd_pcm_get_params)(stm->pcm, &stm->buffer_size, &stm->period_size); assert(r == 0); - stm->nfds = snd_pcm_poll_descriptors_count(stm->pcm); + stm->nfds = WRAP(snd_pcm_poll_descriptors_count)(stm->pcm); assert(stm->nfds > 0); stm->saved_fds = calloc(stm->nfds, sizeof(struct pollfd)); assert(stm->saved_fds); - r = snd_pcm_poll_descriptors(stm->pcm, stm->saved_fds, stm->nfds); + r = WRAP(snd_pcm_poll_descriptors)(stm->pcm, stm->saved_fds, stm->nfds); assert((nfds_t) r == stm->nfds); r = pthread_cond_init(&stm->cond, NULL); @@ -895,7 +1001,7 @@ alsa_stream_destroy(cubeb_stream * stm) pthread_mutex_lock(&stm->mutex); if (stm->pcm) { if (stm->state == DRAINING) { - snd_pcm_drain(stm->pcm); + WRAP(snd_pcm_drain)(stm->pcm); } alsa_locked_pcm_close(stm->pcm); stm->pcm = NULL; @@ -938,12 +1044,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) return CUBEB_ERROR; } - r = snd_pcm_hw_params_any(stm->pcm, hw_params); + r = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); if (r < 0) { return CUBEB_ERROR; } - r = snd_pcm_hw_params_get_channels_max(hw_params, max_channels); + r = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels); if (r < 0) { return CUBEB_ERROR; } @@ -963,34 +1069,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { /* get a pcm, disabling resampling, so we get a rate the * hardware/dmix/pulse/etc. supports. */ -- r = snd_pcm_open(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); -+ r = WRAP(snd_pcm_open)(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); +- r = snd_pcm_open(&pcm, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); ++ r = WRAP(snd_pcm_open)(&pcm, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0); if (r < 0) { return CUBEB_ERROR; } - r = snd_pcm_hw_params_any(pcm, hw_params); + r = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); if (r < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - r = snd_pcm_hw_params_get_rate(hw_params, rate, &dir); + r = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir); if (r >= 0) { /* There is a default rate: use it. */ - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */ *rate = 44100; - r = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL); + r = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL); if (r < 0) { - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_ERROR; } - snd_pcm_close(pcm); + WRAP(snd_pcm_close)(pcm); return CUBEB_OK; } @@ -1013,7 +1119,7 @@ alsa_stream_start(cubeb_stream * stm) ctx = stm->context; pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 0); + WRAP(snd_pcm_pause)(stm->pcm, 0); gettimeofday(&stm->last_activity, NULL); pthread_mutex_unlock(&stm->mutex); @@ -1047,7 +1153,7 @@ alsa_stream_stop(cubeb_stream * stm) pthread_mutex_unlock(&ctx->mutex); pthread_mutex_lock(&stm->mutex); - snd_pcm_pause(stm->pcm, 1); + WRAP(snd_pcm_pause)(stm->pcm, 1); pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1063,8 +1169,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) pthread_mutex_lock(&stm->mutex); delay = -1; - if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING || - snd_pcm_delay(stm->pcm, &delay) != 0) { + if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING || + WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) { *position = stm->last_position; pthread_mutex_unlock(&stm->mutex); return CUBEB_OK; @@ -1089,7 +1195,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) snd_pcm_sframes_t delay; /* This function returns the delay in frames until a frame written using snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */ - if (snd_pcm_delay(stm->pcm, &delay)) { + if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) { return CUBEB_ERROR; } diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c new file mode 100644 index 0000000..5e38e27 --- /dev/null +++ mozilla/media/libcubeb/src/cubeb_oss.c @@ -0,0 +1,402 @@ +/* + * Copyright © 2014 Mozilla Foundation + * + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ +#if defined(HAVE_SYS_SOUNDCARD_H) +#include +#else +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cubeb/cubeb.h" +#include "cubeb-internal.h" + +#ifndef CUBEB_OSS_DEFAULT_OUTPUT +#define CUBEB_OSS_DEFAULT_OUTPUT "/dev/dsp" +#endif + +#define OSS_BUFFER_SIZE 1024 + +struct cubeb { + struct cubeb_ops const * ops; +}; + +struct cubeb_stream { + cubeb * context; + + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; + void * user_ptr; + float volume; + float panning; + + pthread_mutex_t state_mutex; + pthread_cond_t state_cond; + + int running; + int stopped; + int floating; + + /* These two vars are needed to support old versions of OSS */ + unsigned int position_bytes; + unsigned int last_position_bytes; + + uint64_t written_frags; /* The number of fragments written to /dev/dsp */ + uint64_t missed_frags; /* fragments output with stopped stream */ + + cubeb_stream_params params; + int fd; + pthread_t th; +}; + +static struct cubeb_ops const oss_ops; + +int oss_init(cubeb ** context, char const * context_name) +{ + cubeb* ctx = (cubeb*)malloc(sizeof(cubeb)); + ctx->ops = &oss_ops; + *context = ctx; + return CUBEB_OK; +} + +static void oss_destroy(cubeb *ctx) +{ + free(ctx); +} + +static char const * oss_get_backend_id(cubeb * context) +{ + static char oss_name[] = "oss"; + return oss_name; +} + +static int oss_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) +{ + *max_channels = 2; /* Let's support only stereo for now */ + return CUBEB_OK; +} + +static int oss_get_min_latency(cubeb * context, cubeb_stream_params params, + uint32_t * latency_ms) +{ + /* 40ms is a big enough number to work ok */ + *latency_ms = 40; + return CUBEB_OK; +} + +static int oss_get_preferred_sample_rate(cubeb *context, uint32_t * rate) +{ + /* 48000 seems a prefered choice for most audio devices + * and a good choice for OSS */ + *rate = 48000; + return CUBEB_OK; +} + +static void run_state_callback(cubeb_stream *stream, cubeb_state state) +{ + if (stream->state_callback) { + stream->state_callback(stream, stream->user_ptr, state); + } +} + +static long run_data_callback(cubeb_stream *stream, void *buffer, long nframes) +{ + long got = 0; + pthread_mutex_lock(&stream->state_mutex); + if (stream->data_callback && stream->running && !stream->stopped) { + pthread_mutex_unlock(&stream->state_mutex); + got = stream->data_callback(stream, stream->user_ptr, buffer, nframes); + } else { + pthread_mutex_unlock(&stream->state_mutex); + } + return got; +} + +static void apply_volume(int16_t* buffer, unsigned int n, + float volume, float panning) +{ + float left = volume; + float right = volume; + unsigned int i; + int pan[2]; + if (panning<0) { + right *= (1+panning); + } else { + left *= (1-panning); + } + pan[0] = 128.0*left; + pan[1] = 128.0*right; + for(i=0; irunning) { + pthread_mutex_lock(&stream->state_mutex); + if (stream->stopped) { + pthread_mutex_unlock(&stream->state_mutex); + run_state_callback(stream, CUBEB_STATE_STOPPED); + pthread_mutex_lock(&stream->state_mutex); + while (stream->stopped) { + pthread_cond_wait(&stream->state_cond, &stream->state_mutex); + } + pthread_mutex_unlock(&stream->state_mutex); + run_state_callback(stream, CUBEB_STATE_STARTED); + continue; + } + pthread_mutex_unlock(&stream->state_mutex); + if (stream->floating) { + got = run_data_callback(stream, f_buffer, + OSS_BUFFER_SIZE/stream->params.channels); + for (i=0; i<((unsigned long)got)*stream->params.channels; i++) { + buffer[i] = f_buffer[i]*32767.0; + } + } else { + got = run_data_callback(stream, buffer, + OSS_BUFFER_SIZE/stream->params.channels); + } + apply_volume(buffer, got*stream->params.channels, + stream->volume, stream->panning); + if (got<0) { + run_state_callback(stream, CUBEB_STATE_ERROR); + break; + } + if (!got) { + run_state_callback(stream, CUBEB_STATE_DRAINED); + } + if (got) { + size_t i = 0; + size_t s = got*stream->params.channels*sizeof(int16_t); + while (i < s) { + ssize_t n = write(stream->fd, ((char*)buffer) + i, s - i); + if (n<=0) { + run_state_callback(stream, CUBEB_STATE_ERROR); + break; + } + i+=n; + } + stream->written_frags+=got; + } + } + return NULL; +} + +static void oss_try_set_latency(cubeb_stream* stream, unsigned int latency) +{ + unsigned int latency_bytes, n_frag; + int frag; + /* fragment size of 1024 is a good choice with good chances to be accepted */ + unsigned int frag_size=1024; + unsigned int frag_log=10; /* 2^frag_log = frag_size */ + latency_bytes = + latency*stream->params.rate*stream->params.channels*sizeof(uint16_t)/1000; + n_frag = latency_bytes>>frag_log; + frag = (n_frag<<16) | frag_log; + /* Even if this fails we wish to continue, not checking for errors */ + ioctl(stream->fd, SNDCTL_DSP_SETFRAGMENT, &frag); +} + +static int oss_stream_init(cubeb * context, cubeb_stream ** stm, + char const * stream_name, + cubeb_stream_params stream_params, + unsigned int latency, + cubeb_data_callback data_callback, + cubeb_state_callback state_callback, void * user_ptr) +{ + cubeb_stream* stream = (cubeb_stream*)malloc(sizeof(cubeb_stream)); + stream->context = context; + stream->data_callback = data_callback; + stream->state_callback = state_callback; + stream->user_ptr = user_ptr; + + if ((stream->fd = open(CUBEB_OSS_DEFAULT_OUTPUT, O_WRONLY)) == -1) { + free(stream); + return CUBEB_ERROR; + } +#define SET(what, to) do { unsigned int i = to; \ + int j = ioctl(stream->fd, what, &i); \ + if (j == -1 || i != to) { \ + close(stream->fd); \ + free(stream); \ + return CUBEB_ERROR_INVALID_FORMAT; } } while (0) + + stream->params = stream_params; + stream->volume = 1.0; + stream->panning = 0.0; + + oss_try_set_latency(stream, latency); + + stream->floating = 0; + SET(SNDCTL_DSP_CHANNELS, stream_params.channels); + SET(SNDCTL_DSP_SPEED, stream_params.rate); + switch (stream_params.format) { + case CUBEB_SAMPLE_S16LE: + SET(SNDCTL_DSP_SETFMT, AFMT_S16_LE); + break; + case CUBEB_SAMPLE_S16BE: + SET(SNDCTL_DSP_SETFMT, AFMT_S16_BE); + break; + case CUBEB_SAMPLE_FLOAT32LE: + SET(SNDCTL_DSP_SETFMT, AFMT_S16_NE); + stream->floating = 1; + break; + default: + close(stream->fd); + free(stream); + return CUBEB_ERROR; + } + + + pthread_mutex_init(&stream->state_mutex, NULL); + pthread_cond_init(&stream->state_cond, NULL); + + stream->running = 1; + stream->stopped = 1; + stream->position_bytes = 0; + stream->last_position_bytes = 0; + stream->written_frags = 0; + stream->missed_frags = 0; + + pthread_create(&stream->th, NULL, writer, (void*)stream); + + *stm = stream; + + return CUBEB_OK; +} + +static void oss_stream_destroy(cubeb_stream * stream) +{ + pthread_mutex_lock(&stream->state_mutex); + + stream->running = 0; + stream->stopped = 0; + pthread_cond_signal(&stream->state_cond); + + pthread_mutex_unlock(&stream->state_mutex); + + pthread_join(stream->th, NULL); + + pthread_mutex_destroy(&stream->state_mutex); + pthread_cond_destroy(&stream->state_cond); + close(stream->fd); + free(stream); +} + +static int oss_stream_get_latency(cubeb_stream * stream, uint32_t * latency) +{ + if (ioctl(stream->fd, SNDCTL_DSP_GETODELAY, latency)==-1) { + return CUBEB_ERROR; + } + /* Convert latency from bytes to frames */ + *latency /= stream->params.channels*sizeof(int16_t); + return CUBEB_OK; +} + + +static int oss_stream_current_optr(cubeb_stream * stream, uint64_t * position) +{ + count_info ci; + /* Unfortunately, this ioctl is only available in OSS 4.x */ +#ifdef SNDCTL_DSP_CURRENT_OPTR + oss_count_t count; + if (ioctl(stream->fd, SNDCTL_DSP_CURRENT_OPTR, &count) != -1) { + *position = count.samples;// + count.fifo_samples; + return CUBEB_OK; + } +#endif + /* Fall back to this ioctl in case the previous one fails */ + if (ioctl(stream->fd, SNDCTL_DSP_GETOPTR, &ci) == -1) { + return CUBEB_ERROR; + } + /* ci.bytes is only 32 bit and will start to wrap after arithmetic overflow */ + stream->position_bytes += ci.bytes - stream->last_position_bytes; + stream->last_position_bytes = ci.bytes; + *position = stream->position_bytes/stream->params.channels/sizeof(int16_t); + return CUBEB_OK; +} + +static int oss_stream_get_position(cubeb_stream * stream, uint64_t * position) +{ + if ( oss_stream_current_optr(stream, position) == CUBEB_OK ){ + *position -= stream->missed_frags; + return CUBEB_OK; + } + /* If no correct method to get position works we resort to this */ + *position = stream->written_frags; + return CUBEB_OK; +} + + +static int oss_stream_start(cubeb_stream * stream) +{ + pthread_mutex_lock(&stream->state_mutex); + if (stream->stopped) { + uint64_t ptr; + oss_stream_current_optr(stream, &ptr); + stream->missed_frags = ptr - stream->written_frags; + stream->stopped = 0; + pthread_cond_signal(&stream->state_cond); + } + pthread_mutex_unlock(&stream->state_mutex); + return CUBEB_OK; +} + +static int oss_stream_stop(cubeb_stream * stream) +{ + pthread_mutex_lock(&stream->state_mutex); + stream->stopped = 1; + pthread_mutex_unlock(&stream->state_mutex); + return CUBEB_OK; +} + +int oss_stream_set_panning(cubeb_stream * stream, float panning) +{ + if (stream->params.channels == 2) { + stream->panning=panning; + } + return CUBEB_OK; +} + +int oss_stream_set_volume(cubeb_stream * stream, float volume) +{ + stream->volume=volume; + return CUBEB_OK; +} + +static struct cubeb_ops const oss_ops = { + .init = oss_init, + .get_backend_id = oss_get_backend_id, + .get_max_channel_count = oss_get_max_channel_count, + .get_min_latency = oss_get_min_latency, + .get_preferred_sample_rate = oss_get_preferred_sample_rate, + .destroy = oss_destroy, + .stream_init = oss_stream_init, + .stream_destroy = oss_stream_destroy, + .stream_start = oss_stream_start, + .stream_stop = oss_stream_stop, + .stream_get_position = oss_stream_get_position, + .stream_get_latency = oss_stream_get_latency, + .stream_set_volume = oss_stream_set_volume, + .stream_set_panning = oss_stream_set_panning, + .stream_get_current_device = NULL, + .stream_device_destroy = NULL, + .stream_register_device_changed_callback = NULL +}; diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build index 8b7a0dd..31212ce 100644 --- mozilla/media/libcubeb/src/moz.build +++ mozilla/media/libcubeb/src/moz.build @@ -17,6 +17,12 @@ if CONFIG['MOZ_ALSA']: ] DEFINES['USE_ALSA'] = True +if CONFIG['MOZ_OSS']: + SOURCES += [ + 'cubeb_oss.c', + ] + DEFINES['USE_OSS'] = True + if CONFIG['MOZ_PULSEAUDIO']: SOURCES += [ 'cubeb_pulse.c', @@ -75,5 +81,6 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': FAIL_ON_WARNINGS = True +CFLAGS += CONFIG['MOZ_OSS_CFLAGS'] CFLAGS += CONFIG['MOZ_ALSA_CFLAGS'] CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS'] -diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build +diff --git media/webrtc/signaling/test/common.build media/webrtc/signaling/test/common.build index 991f03f..3d99eb5 100644 ---- mozilla/media/webrtc/signaling/test/moz.build -+++ mozilla/media/webrtc/signaling/test/moz.build -@@ -112,8 +112,8 @@ if CONFIG['JS_SHARED_LIBRARY']: +--- mozilla/media/webrtc/signaling/test/common.build ++++ mozilla/media/webrtc/signaling/test/common.build +@@ -102,8 +102,8 @@ USE_LIBS += ['mozglue'] OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] OS_LIBS += CONFIG['REALTIME_LIBS'] -if CONFIG['MOZ_ALSA']: - OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] +if CONFIG['MOZ_OSS']: + OS_LIBS += CONFIG['MOZ_OSS_LIBS'] if CONFIG['MOZ_NATIVE_JPEG']: OS_LIBS += CONFIG['MOZ_JPEG_LIBS'] diff --git toolkit/library/moz.build toolkit/library/moz.build index e191f13..4fb268a 100644 --- mozilla/toolkit/library/moz.build +++ mozilla/toolkit/library/moz.build @@ -234,8 +234,8 @@ if CONFIG['MOZ_NATIVE_LIBVPX']: if not CONFIG['MOZ_TREE_PIXMAN']: OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] -if CONFIG['MOZ_ALSA']: - OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] +if CONFIG['MOZ_OSS']: + OS_LIBS += CONFIG['MOZ_OSS_LIBS'] if CONFIG['HAVE_CLOCK_MONOTONIC']: OS_LIBS += CONFIG['REALTIME_LIBS'] Index: head/mail/thunderbird/files/patch-bug1233275 =================================================================== --- head/mail/thunderbird/files/patch-bug1233275 (revision 413156) +++ head/mail/thunderbird/files/patch-bug1233275 (revision 413157) @@ -1,40 +1,36 @@ # Copy environment for IPC using NSPR to avoid race diff --git a/ipc/chromium/src/base/process_util_bsd.cc b/ipc/chromium/src/base/process_util_bsd.cc --- mozilla/ipc/chromium/src/base/process_util_bsd.cc +++ mozilla/ipc/chromium/src/base/process_util_bsd.cc -@@ -13,6 +13,7 @@ +@@ -12,10 +12,9 @@ #include +#include "nspr.h" #include "base/eintr_wrapper.h" - #include "base/file_util.h" - #include "base/logging.h" -@@ -48,7 +49,6 @@ - #ifdef HAVE_POSIX_SPAWN - #include --extern "C" char **environ __dso_public; - #endif +-extern "C" char **environ __attribute__((__visibility__("default"))); +- + namespace base { - namespace { -@@ -114,6 +114,7 @@ bool LaunchApp(const std::vector + #include "SharedMemoryBasic.h" + #include "mozilla/Atomics.h" +@@ -34,7 +34,7 @@ struct ParamTraits; + namespace mozilla { + #if defined(OS_WIN) + typedef HANDLE CrossProcessMutexHandle; +-#elif defined(OS_LINUX) || defined(OS_MACOSX) ++#elif !defined(OS_NETBSD) && !defined(OS_OPENBSD) + typedef mozilla::ipc::SharedMemoryBasic::Handle CrossProcessMutexHandle; + #else + // Stub for other platforms. We can't use uintptr_t here since different +@@ -100,7 +100,7 @@ private: + + #if defined(OS_WIN) + HANDLE mMutex; +-#elif defined(OS_LINUX) || defined(OS_MACOSX) ++#elif !defined(OS_NETBSD) && !defined(OS_OPENBSD) + RefPtr mSharedBuffer; + pthread_mutex_t* mMutex; + mozilla::Atomic* mCount; +diff --git a/ipc/glue/moz.build b/ipc/glue/moz.build +--- mozilla/ipc/glue/moz.build ++++ mozilla/ipc/glue/moz.build +@@ -61,7 +61,7 @@ if CONFIG['OS_ARCH'] == 'WINNT': + SOURCES += [ + 'CrossProcessMutex_windows.cpp', + ] +-elif CONFIG['OS_ARCH'] in ('Linux', 'Darwin'): ++elif not CONFIG['OS_ARCH'] in ('NetBSD', 'OpenBSD'): + UNIFIED_SOURCES += [ + 'CrossProcessMutex_posix.cpp', + ] Property changes on: head/mail/thunderbird/files/patch-bug1252246 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-bug292127 =================================================================== --- head/mail/thunderbird/files/patch-bug292127 (revision 413156) +++ head/mail/thunderbird/files/patch-bug292127 (revision 413157) @@ -1,232 +1,232 @@ ---- ldap/sdks/c-sdk/ldap/include/ldap.h~ -+++ ldap/sdks/c-sdk/ldap/include/ldap.h +--- ldap/c-sdk/include/ldap.h~ ++++ ldap/c-sdk/include/ldap.h @@ -40,6 +40,229 @@ #ifndef _LDAP_H #define _LDAP_H +/* rename symbols to not clash with openldap (bug 292127) */ +#define ldap_abandon moz_ldap_abandon +#define ldap_abandon_ext moz_ldap_abandon_ext +#define ldap_abandoned moz_ldap_abandoned +#define ldap_add moz_ldap_add +#define ldap_add_ext moz_ldap_add_ext +#define ldap_add_ext_s moz_ldap_add_ext_s +#define ldap_add_result_entry moz_ldap_add_result_entry +#define ldap_add_s moz_ldap_add_s +#define ldap_ber_free moz_ldap_ber_free +#define ldap_bind moz_ldap_bind +#define ldap_bind_s moz_ldap_bind_s +#define ldap_build_filter moz_ldap_build_filter +#define ldap_cache_flush moz_ldap_cache_flush +#define ldap_charray_add moz_ldap_charray_add +#define ldap_charray_dup moz_ldap_charray_dup +#define ldap_charray_free moz_ldap_charray_free +#define ldap_charray_inlist moz_ldap_charray_inlist +#define ldap_charray_merge moz_ldap_charray_merge +#define ldap_charray_position moz_ldap_charray_position +#define ldap_compare moz_ldap_compare +#define ldap_compare_ext moz_ldap_compare_ext +#define ldap_compare_ext_s moz_ldap_compare_ext_s +#define ldap_compare_s moz_ldap_compare_s +#define ldap_control_free moz_ldap_control_free +#define ldap_controls_free moz_ldap_controls_free +#define ldap_count_entries moz_ldap_count_entries +#define ldap_count_messages moz_ldap_count_messages +#define ldap_count_references moz_ldap_count_references +#define ldap_count_values moz_ldap_count_values +#define ldap_count_values_len moz_ldap_count_values_len +#define ldap_create_authzid_control moz_ldap_create_authzid_control +#define ldap_create_filter moz_ldap_create_filter +#define ldap_create_geteffectiveRights_control moz_ldap_create_geteffectiveRights_control +#define ldap_create_passwordpolicy_control moz_ldap_create_passwordpolicy_control +#define ldap_create_passwordpolicy_control_ext moz_ldap_create_passwordpolicy_control_ext +#define ldap_create_persistentsearch_control moz_ldap_create_persistentsearch_control +#define ldap_create_proxiedauth_control moz_ldap_create_proxiedauth_control +#define ldap_create_proxyauth_control moz_ldap_create_proxyauth_control +#define ldap_create_sort_control moz_ldap_create_sort_control +#define ldap_create_sort_keylist moz_ldap_create_sort_keylist +#define ldap_create_userstatus_control moz_ldap_create_userstatus_control +#define ldap_create_virtuallist_control moz_ldap_create_virtuallist_control +#define ldap_delete moz_ldap_delete +#define ldap_delete_ext moz_ldap_delete_ext +#define ldap_delete_ext_s moz_ldap_delete_ext_s +#define ldap_delete_result_entry moz_ldap_delete_result_entry +#define ldap_delete_s moz_ldap_delete_s +#define ldap_dn2ufn moz_ldap_dn2ufn +#define ldap_entry2html moz_ldap_entry2html +#define ldap_entry2html_search moz_ldap_entry2html_search +#define ldap_entry2text moz_ldap_entry2text +#define ldap_entry2text_search moz_ldap_entry2text_search +#define ldap_err2string moz_ldap_err2string +#define ldap_errlist moz_ldap_errlist +#define ldap_explode moz_ldap_explode +#define ldap_explode_dn moz_ldap_explode_dn +#define ldap_explode_dns moz_ldap_explode_dns +#define ldap_explode_rdn moz_ldap_explode_rdn +#define ldap_extended_operation moz_ldap_extended_operation +#define ldap_extended_operation_s moz_ldap_extended_operation_s +#define ldap_find_control moz_ldap_find_control +#define ldap_first_attribute moz_ldap_first_attribute +#define ldap_first_disptmpl moz_ldap_first_disptmpl +#define ldap_first_entry moz_ldap_first_entry +#define ldap_first_message moz_ldap_first_message +#define ldap_first_reference moz_ldap_first_reference +#define ldap_first_searchobj moz_ldap_first_searchobj +#define ldap_first_tmplcol moz_ldap_first_tmplcol +#define ldap_first_tmplrow moz_ldap_first_tmplrow +#define ldap_free_friendlymap moz_ldap_free_friendlymap +#define ldap_free_searchprefs moz_ldap_free_searchprefs +#define ldap_free_sort_keylist moz_ldap_free_sort_keylist +#define ldap_free_templates moz_ldap_free_templates +#define ldap_free_urldesc moz_ldap_free_urldesc +#define ldap_friendly_name moz_ldap_friendly_name +#define ldap_get_dn moz_ldap_get_dn +#define ldap_get_entry_controls moz_ldap_get_entry_controls +#define ldap_get_lang_values moz_ldap_get_lang_values +#define ldap_get_lang_values_len moz_ldap_get_lang_values_len +#define ldap_get_lderrno moz_ldap_get_lderrno +#define ldap_get_option moz_ldap_get_option +#define ldap_get_values moz_ldap_get_values +#define ldap_get_values_len moz_ldap_get_values_len +#define ldap_getfilter_free moz_ldap_getfilter_free +#define ldap_getfirstfilter moz_ldap_getfirstfilter +#define ldap_getnextfilter moz_ldap_getnextfilter +#define ldap_init moz_ldap_init +#define ldap_init_getfilter moz_ldap_init_getfilter +#define ldap_init_getfilter_buf moz_ldap_init_getfilter_buf +#define ldap_init_searchprefs moz_ldap_init_searchprefs +#define ldap_init_searchprefs_buf moz_ldap_init_searchprefs_buf +#define ldap_init_templates moz_ldap_init_templates +#define ldap_init_templates_buf moz_ldap_init_templates_buf +#define ldap_is_dns_dn moz_ldap_is_dns_dn +#define ldap_is_ldap_url moz_ldap_is_ldap_url +#define ldap_keysort_entries moz_ldap_keysort_entries +#define ldap_ld_free moz_ldap_ld_free +#define ldap_memcache_abandon moz_ldap_memcache_abandon +#define ldap_memcache_append moz_ldap_memcache_append +#define ldap_memcache_createkey moz_ldap_memcache_createkey +#define ldap_memcache_destroy moz_ldap_memcache_destroy +#define ldap_memcache_flush moz_ldap_memcache_flush +#define ldap_memcache_flush_results moz_ldap_memcache_flush_results +#define ldap_memcache_get moz_ldap_memcache_get +#define ldap_memcache_init moz_ldap_memcache_init +#define ldap_memcache_new moz_ldap_memcache_new +#define ldap_memcache_result moz_ldap_memcache_result +#define ldap_memcache_set moz_ldap_memcache_set +#define ldap_memcache_update moz_ldap_memcache_update +#define ldap_memfree moz_ldap_memfree +#define ldap_modify moz_ldap_modify +#define ldap_modify_ext moz_ldap_modify_ext +#define ldap_modify_ext_s moz_ldap_modify_ext_s +#define ldap_modify_s moz_ldap_modify_s +#define ldap_modrdn moz_ldap_modrdn +#define ldap_modrdn2 moz_ldap_modrdn2 +#define ldap_modrdn2_s moz_ldap_modrdn2_s +#define ldap_modrdn_s moz_ldap_modrdn_s +#define ldap_mods_free moz_ldap_mods_free +#define ldap_msgdelete moz_ldap_msgdelete +#define ldap_msgfree moz_ldap_msgfree +#define ldap_msgid moz_ldap_msgid +#define ldap_msgtype moz_ldap_msgtype +#define ldap_multisort_entries moz_ldap_multisort_entries +#define ldap_name2template moz_ldap_name2template +#define ldap_next_attribute moz_ldap_next_attribute +#define ldap_next_disptmpl moz_ldap_next_disptmpl +#define ldap_next_entry moz_ldap_next_entry +#define ldap_next_message moz_ldap_next_message +#define ldap_next_reference moz_ldap_next_reference +#define ldap_next_searchobj moz_ldap_next_searchobj +#define ldap_next_tmplcol moz_ldap_next_tmplcol +#define ldap_next_tmplrow moz_ldap_next_tmplrow +#define ldap_oc2template moz_ldap_oc2template +#define ldap_open moz_ldap_open +#define ldap_parse_authzid_control moz_ldap_parse_authzid_control +#define ldap_parse_entrychange_control moz_ldap_parse_entrychange_control +#define ldap_parse_extended_result moz_ldap_parse_extended_result +#define ldap_parse_passwd moz_ldap_parse_passwd +#define ldap_parse_passwordpolicy_control moz_ldap_parse_passwordpolicy_control +#define ldap_parse_passwordpolicy_control_ext moz_ldap_parse_passwordpolicy_control_ext +#define ldap_parse_reference moz_ldap_parse_reference +#define ldap_parse_result moz_ldap_parse_result +#define ldap_parse_sasl_bind_result moz_ldap_parse_sasl_bind_result +#define ldap_parse_sort_control moz_ldap_parse_sort_control +#define ldap_parse_userstatus_control moz_ldap_parse_userstatus_control +#define ldap_parse_virtuallist_control moz_ldap_parse_virtuallist_control +#define ldap_parse_whoami moz_ldap_parse_whoami +#define ldap_passwd moz_ldap_passwd +#define ldap_passwd_s moz_ldap_passwd_s +#define ldap_passwordpolicy_err2txt moz_ldap_passwordpolicy_err2txt +#define ldap_perror moz_ldap_perror +#define ldap_rename moz_ldap_rename +#define ldap_rename_s moz_ldap_rename_s +#define ldap_result moz_ldap_result +#define ldap_result2error moz_ldap_result2error +#define ldap_sasl_bind moz_ldap_sasl_bind +#define ldap_sasl_bind_s moz_ldap_sasl_bind_s +#define ldap_sasl_interactive_bind_ext_s moz_ldap_sasl_interactive_bind_ext_s +#define ldap_sasl_interactive_bind_s moz_ldap_sasl_interactive_bind_s +#define ldap_search moz_ldap_search +#define ldap_search_ext moz_ldap_search_ext +#define ldap_search_ext_s moz_ldap_search_ext_s +#define ldap_search_s moz_ldap_search_s +#define ldap_search_st moz_ldap_search_st +#define ldap_set_filter_additions moz_ldap_set_filter_additions +#define ldap_set_lderrno moz_ldap_set_lderrno +#define ldap_set_option moz_ldap_set_option +#define ldap_set_rebind_proc moz_ldap_set_rebind_proc +#define ldap_setfilteraffixes moz_ldap_setfilteraffixes +#define ldap_simple_bind moz_ldap_simple_bind +#define ldap_simple_bind_s moz_ldap_simple_bind_s +#define ldap_sort_entries moz_ldap_sort_entries +#define ldap_sort_strcasecmp moz_ldap_sort_strcasecmp +#define ldap_sort_values moz_ldap_sort_values +#define ldap_start_tls_s moz_ldap_start_tls_s +#define ldap_str2charray moz_ldap_str2charray +#define ldap_tmplattrs moz_ldap_tmplattrs +#define ldap_tmplerr2string moz_ldap_tmplerr2string +#define ldap_tmplerrlist moz_ldap_tmplerrlist +#define ldap_ufn_search_c moz_ldap_ufn_search_c +#define ldap_ufn_search_ct moz_ldap_ufn_search_ct +#define ldap_ufn_search_ctx moz_ldap_ufn_search_ctx +#define ldap_ufn_search_s moz_ldap_ufn_search_s +#define ldap_ufn_setfilter moz_ldap_ufn_setfilter +#define ldap_ufn_setprefix moz_ldap_ufn_setprefix +#define ldap_ufn_timeout moz_ldap_ufn_timeout +#define ldap_unbind moz_ldap_unbind +#define ldap_unbind_ext moz_ldap_unbind_ext +#define ldap_unbind_s moz_ldap_unbind_s +#define ldap_url_parse moz_ldap_url_parse +#define ldap_url_parse_no_defaults moz_ldap_url_parse_no_defaults +#define ldap_url_search moz_ldap_url_search +#define ldap_url_search_s moz_ldap_url_search_s +#define ldap_url_search_st moz_ldap_url_search_st +#define ldap_utf8characters moz_ldap_utf8characters +#define ldap_utf8copy moz_ldap_utf8copy +#define ldap_utf8getcc moz_ldap_utf8getcc +#define ldap_utf8isalnum moz_ldap_utf8isalnum +#define ldap_utf8isalpha moz_ldap_utf8isalpha +#define ldap_utf8isdigit moz_ldap_utf8isdigit +#define ldap_utf8isspace moz_ldap_utf8isspace +#define ldap_utf8isxdigit moz_ldap_utf8isxdigit +#define ldap_utf8len moz_ldap_utf8len +#define ldap_utf8next moz_ldap_utf8next +#define ldap_utf8prev moz_ldap_utf8prev +#define ldap_utf8strtok_r moz_ldap_utf8strtok_r +#define ldap_vals2html moz_ldap_vals2html +#define ldap_vals2text moz_ldap_vals2text +#define ldap_value_free moz_ldap_value_free +#define ldap_value_free_len moz_ldap_value_free_len +#define ldap_version moz_ldap_version +#define ldap_whoami moz_ldap_whoami +#define ldap_whoami_s moz_ldap_whoami_s +#define ldap_x_calloc moz_ldap_x_calloc +#define ldap_x_free moz_ldap_x_free +#define ldap_x_hostlist_first moz_ldap_x_hostlist_first +#define ldap_x_hostlist_next moz_ldap_x_hostlist_next +#define ldap_x_hostlist_statusfree moz_ldap_x_hostlist_statusfree +#define ldap_x_malloc moz_ldap_x_malloc +#define ldap_x_realloc moz_ldap_x_realloc + /* Standard LDAP API functions and declarations */ #include "ldap-standard.h" Index: head/mail/thunderbird/files/patch-bug702179 =================================================================== --- head/mail/thunderbird/files/patch-bug702179 (revision 413156) +++ head/mail/thunderbird/files/patch-bug702179 (revision 413157) @@ -1,24 +1,13 @@ -commit 6ddaacd -Author: Ginn Chen -Date: Wed Nov 30 07:23:46 2011 +0800 - - Bug 702179 dtrace probes are not installed on Solaris with static js lib r=glandium ---- - js/src/Makefile.in | 3 --- - toolkit/library/moz.build | 5 ----- - 2 files changed, 8 deletions(-) - -diff --git js/src/Makefile.in js/src/Makefile.in -index 62bbfa0..90400cb 100644 ---- mozilla/js/src/Makefile.in -+++ mozilla/js/src/Makefile.in -@@ -17,9 +17,6 @@ TOPLEVEL_BUILD := 1 - run_for_side_effects := $(shell echo 'MAKE: $(MAKE)') - EXTRA_LIBS += $(NSPR_LIBS) +--- mozilla/js/src/moz.build.orig 2015-12-16 12:32:04.574425000 +0100 ++++ mozilla/js/src/moz.build 2015-12-16 12:32:09.032032000 +0100 +@@ -671,10 +671,6 @@ CFLAGS += CONFIG['MOZ_ICU_CFLAGS'] + CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS'] + LOCAL_INCLUDES += CONFIG['MOZ_ICU_INCLUDES'] --DIST_INSTALL = 1 --NO_EXPAND_LIBS = 1 +-NO_EXPAND_LIBS = True - - ifdef JS_HAS_CTYPES - ifdef MOZ_NATIVE_FFI - LOCAL_INCLUDES = $(MOZ_FFI_CFLAGS) +-DIST_INSTALL = True +- + # Prepare self-hosted JS code for embedding + GENERATED_FILES += ['selfhosted.out.h'] + selfhosted = GENERATED_FILES['selfhosted.out.h'] Index: head/mail/thunderbird/files/patch-bug826985 =================================================================== --- head/mail/thunderbird/files/patch-bug826985 (revision 413156) +++ head/mail/thunderbird/files/patch-bug826985 (revision 413157) @@ -1,179 +1,179 @@ commit 8024d93 Author: Henrik Gulbrandsen Date: Fri Jan 4 13:49:22 2013 +0100 Bug 826985 - Support more video formats for WebRTC via libv4l2 on Linux. --- config/system-headers | 1 + configure.in | 7 +++++++ media/webrtc/signaling/test/Makefile.in | 1 + .../modules/video_capture/linux/device_info_linux.cc | 17 +++++++++++++++++ .../modules/video_capture/linux/video_capture_linux.cc | 16 +++++++++++++++- .../webrtc/modules/video_capture/video_capture.gypi | 11 +++++++++++ toolkit/library/Makefile.in | 1 + 6 files changed, 52 insertions(+), 1 deletion(-) diff --git config/system-headers config/system-headers index 55e4cd1..76567b3 100644 --- mozilla/config/system-headers +++ mozilla/config/system-headers -@@ -635,6 +635,7 @@ libgnomevfs/gnome-vfs-mime-handlers.h - libgnomevfs/gnome-vfs-mime-utils.h - libgnomevfs/gnome-vfs-ops.h - libgnomevfs/gnome-vfs-standard-callbacks.h +@@ -627,6 +627,7 @@ libgnome/libgnome.h + libgnomeui/gnome-icon-lookup.h + libgnomeui/gnome-icon-theme.h + libgnomeui/gnome-ui-init.h +libv4l2.h lib$routines.h limits limits.h diff --git configure.in configure.in index 55e4cd1..76567b3 100644 --- mozilla/configure.in +++ mozilla/configure.in @@ -5309,6 +5309,9 @@ if test -n "$MOZ_WEBRTC"; then MOZ_VP8_ENCODER=1 MOZ_VP8_ERROR_CONCEALMENT=1 + dnl with libv4l2 we can support more cameras + PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) + dnl enable once Signaling lands MOZ_WEBRTC_SIGNALING=1 AC_DEFINE(MOZ_WEBRTC_SIGNALING) diff --git build/gyp.mozbuild build/gyp.mozbuild index b483cd1..f1dd1f0 100644 --- mozilla/build/gyp.mozbuild +++ mozilla/build/gyp.mozbuild @@ -11,6 +11,7 @@ gyp_vars = { 'have_ethtool_cmd_speed_hi': 1 if CONFIG['MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI'] else 0, 'include_alsa_audio': 1 if CONFIG['MOZ_ALSA'] else 0, 'include_pulse_audio': 1 if CONFIG['MOZ_PULSEAUDIO'] else 0, + 'use_libv4l2': 1 if CONFIG['MOZ_LIBV4L2_LIBS'] else 0, # basic stuff for everything 'include_internal_video_render': 0, 'clang_use_chrome_plugins': 0, -diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build +diff --git media/webrtc/signaling/test/common.build media/webrtc/signaling/test/common.build index b483cd1..f1dd1f0 100644 ---- mozilla/media/webrtc/signaling/test/moz.build -+++ mozilla/media/webrtc/signaling/test/moz.build -@@ -122,6 +122,7 @@ if CONFIG['JS_SHARED_LIBRARY']: - 'js', - ] +--- mozilla/media/webrtc/signaling/test/common.build ++++ mozilla/media/webrtc/signaling/test/common.build +@@ -99,6 +99,7 @@ if CONFIG['JS_SHARED_LIBRARY']: + USE_LIBS += ['mozglue'] + +OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS'] OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] OS_LIBS += CONFIG['REALTIME_LIBS'] diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc index 239a292..bab496c 100644 --- mozilla/media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc +++ mozilla/media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc @@ -25,10 +25,21 @@ #else #include #endif +#ifdef HAVE_LIBV4L2 +#include +#endif #include "webrtc/system_wrappers/interface/ref_count.h" #include "webrtc/system_wrappers/interface/trace.h" +#ifdef HAVE_LIBV4L2 +#define open v4l2_open +#define close v4l2_close +#define dup v4l2_dup +#define ioctl v4l2_ioctl +#define mmap v4l2_mmap +#define munmap v4l2_munmap +#endif namespace webrtc { @@ -130,6 +142,11 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( memset(deviceNameUTF8, 0, deviceNameLength); memcpy(cameraName, cap.card, sizeof(cap.card)); + if (cameraName[0] == '\0') + { + sprintf(cameraName, "Camera at /dev/video%d", deviceNumber); + } + if (deviceNameLength >= strlen(cameraName)) { memcpy(deviceNameUTF8, cameraName, strlen(cameraName)); diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc index 12df1b3..e9863ba 100644 --- mozilla/media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc +++ mozilla/media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc @@ -25,6 +25,9 @@ #else #include #endif +#ifdef HAVE_LIBV4L2 +#include +#endif #include @@ -26,6 +31,15 @@ #include "critical_section_wrapper.h" #include "video_capture_linux.h" +#ifdef HAVE_LIBV4L2 +#define open v4l2_open +#define close v4l2_close +#define dup v4l2_dup +#define ioctl v4l2_ioctl +#define mmap v4l2_mmap +#define munmap v4l2_munmap +#endif + namespace webrtc { namespace videocapturemodule diff --git media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi index d46b5aa..e452223 100644 --- mozilla/media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi +++ mozilla/media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi @@ -7,6 +7,9 @@ # be found in the AUTHORS file in the root of the source tree. { + 'variables': { + 'use_libv4l2%': 0, + }, 'targets': [ { 'target_name': 'video_capture_module', -@@ -69,6 +72,19 @@ - 'linux/video_capture_linux.cc', - 'linux/video_capture_linux.h', - ], -+ 'conditions': [ -+ ['use_libv4l2==1', { -+ 'defines': [ -+ 'HAVE_LIBV4L2', +@@ -75,6 +78,19 @@ + 'linux/video_capture_linux.cc', + 'linux/video_capture_linux.h', + ], ++ 'conditions': [ ++ ['use_libv4l2==1', { ++ 'defines': [ ++ 'HAVE_LIBV4L2', ++ ], ++ 'cflags_mozilla': [ ++ '$(MOZ_LIBV4L2_CFLAGS)', ++ ], ++ 'libraries': [ ++ '-lv4l2', ++ ], ++ }], + ], -+ 'cflags_mozilla': [ -+ '$(MOZ_LIBV4L2_CFLAGS)', -+ ], -+ 'libraries': [ -+ '-lv4l2', -+ ], -+ }], -+ ], - }], # linux - ['OS=="mac"', { - 'sources': [ + }], # linux + ['OS=="mac"', { + 'sources': [ diff --git toolkit/library/moz.build toolkit/library/moz.build index 9c16ffa..1db3794 100644 --- mozilla/toolkit/library/moz.build +++ mozilla/toolkit/library/moz.build @@ -163,6 +163,7 @@ if CONFIG['OS_ARCH'] == 'Linux' and CONF ] OS_LIBS += CONFIG['MOZ_CAIRO_OSLIBS'] +OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS'] OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS'] OS_LIBS += CONFIG['MOZ_APP_EXTRA_LIBS'] Index: head/mail/thunderbird/files/patch-bug847568 =================================================================== --- head/mail/thunderbird/files/patch-bug847568 (revision 413156) +++ head/mail/thunderbird/files/patch-bug847568 (revision 413157) @@ -1,238 +1,257 @@ # Allow building against system-wide graphite2/harfbuzz. diff --git config/Makefile.in config/Makefile.in index 14bfc0d..5383399 100644 --- mozilla/config/Makefile.in +++ mozilla/config/Makefile.in -@@ -75,6 +75,8 @@ export:: $(export-preqs) +@@ -49,6 +49,8 @@ export:: $(export-preqs) -DMOZ_NATIVE_LIBEVENT=$(MOZ_NATIVE_LIBEVENT) \ -DMOZ_NATIVE_LIBVPX=$(MOZ_NATIVE_LIBVPX) \ -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \ + -DMOZ_NATIVE_GRAPHITE2=$(MOZ_NATIVE_GRAPHITE2) \ + -DMOZ_NATIVE_HARFBUZZ=$(MOZ_NATIVE_HARFBUZZ) \ $(srcdir)/system-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers $(INSTALL) system_wrappers $(DIST) diff --git config/system-headers config/system-headers index 18e8703..bdc5f82 100644 --- mozilla/config/system-headers +++ mozilla/config/system-headers -@@ -1357,3 +1357,11 @@ unicode/utypes.h +@@ -1344,3 +1344,11 @@ unicode/utypes.h #endif libutil.h unwind.h +#if MOZ_NATIVE_GRAPHITE2==1 +graphite2/Font.h +graphite2/Segment.h +#endif +#if MOZ_NATIVE_HARFBUZZ==1 +harfbuzz/hb-ot.h +harfbuzz/hb.h +#endif diff --git configure.in configure.in index ac38f40..87536b7 100644 --- mozilla/configure.in +++ mozilla/configure.in -@@ -7986,6 +7986,49 @@ if test "$USE_FC_FREETYPE"; then +@@ -7989,6 +7989,49 @@ if test "$USE_FC_FREETYPE"; then fi dnl ======================================================== +dnl Check for harfbuzz +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-harfbuzz, +[ --with-system-harfbuzz Use system harfbuzz (located with pkgconfig)], +MOZ_NATIVE_HARFBUZZ=1, +MOZ_NATIVE_HARFBUZZ=) + +if test -n "$MOZ_NATIVE_HARFBUZZ"; then -+ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 0.9.34) ++ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 1.1.0) +fi + +AC_SUBST(MOZ_NATIVE_HARFBUZZ) + +dnl ======================================================== +dnl Check for graphite2 +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-graphite2, +[ --with-system-graphite2 Use system graphite2 (located with pkgconfig)], +MOZ_NATIVE_GRAPHITE2=1, +MOZ_NATIVE_GRAPHITE2=) + +if test -n "$MOZ_NATIVE_GRAPHITE2"; then + PKG_CHECK_MODULES(MOZ_GRAPHITE2, graphite2) + + dnl graphite2.pc has bogus version, check manually + AC_TRY_COMPILE([ #include + #define GR2_VERSION_REQUIRE(major,minor,bugfix) \ + ( GR2_VERSION_MAJOR * 10000 + GR2_VERSION_MINOR \ + * 100 + GR2_VERSION_BUGFIX >= \ + (major) * 10000 + (minor) * 100 + (bugfix) ) + ], [ -+ #if !GR2_VERSION_REQUIRE(1,2,4) ++ #if !GR2_VERSION_REQUIRE(1,3,7) + #error "Insufficient graphite2 version." + #endif + ], [], + [AC_MSG_ERROR([--with-system-graphite2 requested but no working libgraphite2 found])]) +fi + +AC_SUBST(MOZ_NATIVE_GRAPHITE2) + +dnl ======================================================== dnl Check for pixman and cairo dnl ======================================================== diff --git dom/base/moz.build dom/base/moz.build index a660ba4..6b2f602 100644 --- mozilla/dom/base/moz.build +++ mozilla/dom/base/moz.build -@@ -196,6 +196,9 @@ SOURCES += [ - 'nsObjectLoadingContent.cpp', - ] +@@ -397,6 +397,9 @@ if CONFIG['INTEL_ARCHITECTURE']: + SOURCES += ['nsTextFragmentSSE2.cpp'] + SOURCES['nsTextFragmentSSE2.cpp'].flags += CONFIG['SSE2_FLAGS'] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + SOURCES['nsContentUtils.cpp'].flags += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + EXTRA_COMPONENTS += [ - 'contentAreaDropListener.js', - 'contentAreaDropListener.manifest', + 'ConsoleAPI.manifest', + 'ConsoleAPIStorage.js', diff --git gfx/graphite2/moz-gr-update.sh gfx/graphite2/moz-gr-update.sh index f3d76ea..a9e7fb6 100644 --- mozilla/gfx/graphite2/moz-gr-update.sh +++ mozilla/gfx/graphite2/moz-gr-update.sh -@@ -37,6 +37,9 @@ +@@ -1,6 +1,7 @@ + #!/bin/bash + + # Script used to update the Graphite2 library in the mozilla source tree ++# and bump version for --with-system-graphite2 + + # This script lives in gfx/graphite2, along with the library source, + # but must be run from the top level of the mozilla-central tree. +@@ -37,12 +38,16 @@ echo "See" $0 "for update procedure." >> #find gfx/graphite2/ -name "*.cpp" -exec perl -p -i -e "s///;s/Windows.h/windows.h/;" {} \; #find gfx/graphite2/ -name "*.h" -exec perl -p -i -e "s///;s/Windows.h/windows.h/;" {} \; ++# chase version for --with-system-graphite2 +perl -p -i -e "s/[0-9]+\,[0-9]+\,[0-9]+/$RELEASE/ and tr/./,/ \ + if /GR2_VERSION_REQUIRE/" configure.in + # summarize what's been touched echo Updated to $RELEASE. echo Here is what changed in the gfx/graphite2 directory: + echo + +-hg stat gfx/graphite2 ++hg stat configure.in gfx/graphite2 + + echo + echo If gfx/graphite2/src/files.mk has changed, please make corresponding diff --git gfx/harfbuzz/README-mozilla gfx/harfbuzz/README-mozilla index ca57d16..1ce21fe 100644 --- mozilla/gfx/harfbuzz/README-mozilla +++ mozilla/gfx/harfbuzz/README-mozilla -@@ -21,3 +21,8 @@ In addition, the src/Makefile.in file here is NOT from upstream, nor is it +@@ -18,3 +18,8 @@ the mozilla tree. + In addition, the src/Makefile.in file here is NOT from upstream, nor is it generated from src/Makefile.am (the original harfbuzz version); it is a mozilla- - specific makefile that is maintained by hand. It should only need updating when - new source files or exported headers are added in harfbuzz. + specific makefile that is maintained by hand. + +The in-tree copy may be omitted during build by --with-system-harfbuzz. +Make sure to keep pkg-config version check within configure.in in sync +with checkout version or increment latest tag by one if it's not based +on upstream release. diff --git gfx/moz.build gfx/moz.build index 519aa46..6929751 100644 --- mozilla/gfx/moz.build +++ mozilla/gfx/moz.build @@ -7,6 +7,12 @@ if CONFIG['MOZ_TREE_CAIRO']: DIRS += ['cairo'] +if not CONFIG['MOZ_NATIVE_GRAPHITE2']: + DIRS += ['graphite2/src' ] + +if not CONFIG['MOZ_NATIVE_HARFBUZZ']: + DIRS += ['harfbuzz/src'] + DIRS += [ '2d', 'ycbcr', @@ -15,8 +21,6 @@ DIRS += [ 'qcms', 'gl', 'layers', - 'graphite2/src', - 'harfbuzz/src', 'ots/src', 'thebes', 'ipc', diff --git gfx/skia/generate_mozbuild.py gfx/skia/generate_mozbuild.py index 28fa6b5..240dced 100755 --- mozilla/gfx/skia/generate_mozbuild.py +++ mozilla/gfx/skia/generate_mozbuild.py -@@ -140,6 +140,9 @@ if CONFIG['GNU_CXX']: - if not CONFIG['CLANG_CXX']: - CXXFLAGS += ['-Wno-logical-op'] +@@ -134,6 +134,9 @@ if CONFIG['CLANG_CXX'] or CONFIG['CLANG_ + '-Wno-unused-private-field', + ] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android', 'gonk', 'qt'): CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] diff --git gfx/skia/moz.build gfx/skia/moz.build index 1d0c2f9..adb8941 100644 --- mozilla/gfx/skia/moz.build +++ mozilla/gfx/skia/moz.build -@@ -968,6 +968,9 @@ if CONFIG['GNU_CXX']: - if not CONFIG['CLANG_CXX']: - CXXFLAGS += ['-Wno-logical-op'] +@@ -752,6 +752,9 @@ if CONFIG['CLANG_CXX'] or CONFIG['CLANG_ + '-Wno-unused-private-field', + ] +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android', 'gonk', 'qt'): CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] diff --git gfx/thebes/moz.build gfx/thebes/moz.build index d5852fa..aeeab25 100644 --- mozilla/gfx/thebes/moz.build +++ mozilla/gfx/thebes/moz.build -@@ -294,7 +294,13 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'andr - if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'qt'): - CXXFLAGS += CONFIG['MOZ_PANGO_CFLAGS'] +@@ -306,7 +306,13 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk + LOCAL_INCLUDES += CONFIG['SKIA_INCLUDES'] + -DEFINES['GRAPHITE2_STATIC'] = True +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + +if CONFIG['MOZ_NATIVE_GRAPHITE2']: + CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS'] +else: + DEFINES['GRAPHITE2_STATIC'] = True - if CONFIG['GKMEDIAS_SHARED_LIBRARY']: - DEFINES['OTS_DLL'] = True -diff --git intl/unicharutil/util/moz.build intl/unicharutil/util/moz.build + if CONFIG['CLANG_CXX']: + # Suppress warnings from Skia header files. index d736943..41a931f 100644 --- mozilla/intl/unicharutil/util/moz.build +++ mozilla/intl/unicharutil/util/moz.build -@@ -37,3 +37,6 @@ if CONFIG['_MSC_VER']: +@@ -44,4 +44,7 @@ if CONFIG['ENABLE_INTL_API']: + LOCAL_INCLUDES += CONFIG['MOZ_ICU_INCLUDES'] + USE_LIBS += ['icu'] - if CONFIG['ENABLE_INTL_API']: - CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS'] -+ +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] ++ + DIST_INSTALL = True diff --git netwerk/dns/moz.build netwerk/dns/moz.build index 0b0717a..2e665c9 100644 --- mozilla/netwerk/dns/moz.build +++ mozilla/netwerk/dns/moz.build -@@ -64,3 +64,6 @@ GENERATED_FILES = [ - LOCAL_INCLUDES += [ +@@ -66,6 +66,9 @@ LOCAL_INCLUDES += [ '/netwerk/base', ] -+ + +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] ++ + if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['ANDROID_VERSION'] > '19': + LOCAL_INCLUDES += ['%' + '%s/bionic/libc/dns/include' % CONFIG['ANDROID_SOURCE']] + diff --git toolkit/library/moz.build toolkit/library/moz.build index 67f0db9..d42137a 100644 --- mozilla/toolkit/library/moz.build +++ mozilla/toolkit/library/moz.build -@@ -187,6 +187,12 @@ if CONFIG['MOZ_NATIVE_LIBVPX']: +@@ -231,6 +231,12 @@ if CONFIG['MOZ_NATIVE_LIBVPX']: if not CONFIG['MOZ_TREE_PIXMAN']: OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] +if CONFIG['MOZ_NATIVE_GRAPHITE2']: + OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS'] + +if CONFIG['MOZ_NATIVE_HARFBUZZ']: + OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS'] + if CONFIG['MOZ_OSS']: OS_LIBS += CONFIG['MOZ_OSS_LIBS'] Index: head/mail/thunderbird/files/patch-bug981348 =================================================================== --- head/mail/thunderbird/files/patch-bug981348 (revision 413156) +++ head/mail/thunderbird/files/patch-bug981348 (revision 413157) @@ -1,41 +1,41 @@ diff --git dom/system/OSFileConstants.cpp dom/system/OSFileConstants.cpp index 4b21361..cb3be32 100644 --- mozilla/dom/system/OSFileConstants.cpp +++ mozilla/dom/system/OSFileConstants.cpp -@@ -596,7 +596,7 @@ static const dom::ConstantSpec gLibcProperties[] = +@@ -662,7 +662,7 @@ - { "OSFILE_SIZEOF_STATVFS", INT_TO_JSVAL(sizeof (struct statvfs)) }, + { "OSFILE_SIZEOF_STATVFS", JS::Int32Value(sizeof (struct statvfs)) }, -- { "OSFILE_OFFSETOF_STATVFS_F_BSIZE", INT_TO_JSVAL(offsetof (struct statvfs, f_bsize)) }, -+ { "OSFILE_OFFSETOF_STATVFS_F_FRSIZE", INT_TO_JSVAL(offsetof (struct statvfs, f_frsize)) }, - { "OSFILE_OFFSETOF_STATVFS_F_BAVAIL", INT_TO_JSVAL(offsetof (struct statvfs, f_bavail)) }, +- { "OSFILE_OFFSETOF_STATVFS_F_BSIZE", JS::Int32Value(offsetof (struct statvfs, f_bsize)) }, ++ { "OSFILE_OFFSETOF_STATVFS_F_FRSIZE", JS::Int32Value(offsetof (struct statvfs, f_frsize)) }, + { "OSFILE_OFFSETOF_STATVFS_F_BAVAIL", JS::Int32Value(offsetof (struct statvfs, f_bavail)) }, #endif // defined(XP_UNIX) diff --git toolkit/components/osfile/modules/osfile_unix_back.jsm toolkit/components/osfile/modules/osfile_unix_back.jsm index b59fca4..0cf220b 100644 --- mozilla/toolkit/components/osfile/modules/osfile_unix_back.jsm +++ mozilla/toolkit/components/osfile/modules/osfile_unix_back.jsm @@ -228,8 +228,8 @@ let statvfs = new SharedAll.HollowStructure("statvfs", Const.OSFILE_SIZEOF_STATVFS); - statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_BSIZE, - "f_bsize", Type.unsigned_long.implementation); + statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_FRSIZE, + "f_frsize", Type.unsigned_long.implementation); statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_BAVAIL, "f_bavail", Type.fsblkcnt_t.implementation); diff --git toolkit/components/osfile/modules/osfile_unix_front.jsm toolkit/components/osfile/modules/osfile_unix_front.jsm index 99e5e9b..de642c5 100644 --- mozilla/toolkit/components/osfile/modules/osfile_unix_front.jsm +++ mozilla/toolkit/components/osfile/modules/osfile_unix_front.jsm @@ -373,7 +373,7 @@ throw_on_negative("statvfs", UnixFile.statvfs(sourcePath, fileSystemInfoPtr)); let bytes = new Type.uint64_t.implementation( - fileSystemInfo.f_bsize * fileSystemInfo.f_bavail); + fileSystemInfo.f_frsize * fileSystemInfo.f_bavail); return bytes.value; }; Index: head/mail/thunderbird/files/patch-bug991253 =================================================================== --- head/mail/thunderbird/files/patch-bug991253 (revision 413156) +++ head/mail/thunderbird/files/patch-bug991253 (revision 413157) @@ -1,17 +1,17 @@ ---- mozilla/extensions/spellcheck/hunspell/src/mozHunspell.cpp~ -+++ mozilla/extensions/spellcheck/hunspell/src/mozHunspell.cpp -@@ -400,6 +400,14 @@ mozHunspell::LoadDictionaryList(bool aNo +--- mozilla/extensions/spellcheck/hunspell/glue/mozHunspell.cpp~ ++++ mozilla/extensions/spellcheck/hunspell/glue/mozHunspell.cpp +@@ -392,6 +392,14 @@ mozHunspell::LoadDictionaryList(bool aNo } } + // load system hunspell dictionaries + nsCOMPtr hunDir; + NS_NewNativeLocalFile(NS_LITERAL_CSTRING("%%LOCALBASE%%/share/hunspell"), + true, getter_AddRefs(hunDir)); + if (hunDir) { + LoadDictionariesFromDir(hunDir); + } + // find dictionaries from extensions requiring restart nsCOMPtr dictDirs; rv = dirSvc->Get(DICTIONARY_SEARCH_DIRECTORY_LIST, Index: head/mail/thunderbird/files/patch-config-baseconfig.mk =================================================================== --- head/mail/thunderbird/files/patch-config-baseconfig.mk (revision 413156) +++ head/mail/thunderbird/files/patch-config-baseconfig.mk (revision 413157) @@ -1,14 +1,17 @@ --- mozilla/config/baseconfig.mk~ +++ mozilla/config/baseconfig.mk -@@ -1,7 +1,7 @@ +@@ -2,10 +2,10 @@ + # directly in python/mozbuild/mozbuild/base.py for gmake validation. + # We thus use INCLUDED_AUTOCONF_MK to enable/disable some parts depending + # whether a normal build is happening or whether the check is running. -includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) +includedir := $(includedir)/%%MOZILLA%% +idldir = $(datadir)/idl/%%MOZILLA%% +installdir = $(libdir)/%%MOZILLA%% +sdkdir = $(libdir)/%%MOZILLA%% - ifndef TOP_DIST - TOP_DIST = dist - endif + ifeq (.,$(DEPTH)) + DIST = dist + else Index: head/mail/thunderbird/files/patch-ijg-libjpeg =================================================================== --- head/mail/thunderbird/files/patch-ijg-libjpeg (revision 413156) +++ head/mail/thunderbird/files/patch-ijg-libjpeg (revision 413157) @@ -1,382 +1,383 @@ # Partially revert bug 791305 to allow building with system IJG jpeg library diff --git configure.in configure.in index f0aeb5d..1c01010 100644 --- mozilla/configure.in +++ mozilla/configure.in @@ -4027,11 +4027,7 @@ if test "$MOZ_NATIVE_JPEG" = 1; then #include ], [ #if JPEG_LIB_VERSION < $MOZJPEG #error "Insufficient JPEG library version ($MOZJPEG required)." - #endif - #ifndef JCS_EXTENSIONS - #error "libjpeg-turbo JCS_EXTENSIONS required" - #endif - ], + #endif ], MOZ_NATIVE_JPEG=1, AC_MSG_ERROR([Insufficient JPEG library version for --with-system-jpeg])) fi diff --git image/decoders/nsJPEGDecoder.cpp image/decoders/nsJPEGDecoder.cpp index 8fa8200..1d2a259 100644 --- mozilla/image/decoders/nsJPEGDecoder.cpp +++ mozilla/image/decoders/nsJPEGDecoder.cpp @@ -21,13 +21,28 @@ extern "C" { #include "iccjpeg.h" -} +#ifdef JCS_EXTENSIONS #if MOZ_BIG_ENDIAN #define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_XRGB #else #define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_BGRX #endif +#else +/* Colorspace conversion (copied from jpegint.h) */ +struct jpeg_color_deconverter { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, color_convert, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows)); +}; + +METHODDEF(void) +ycc_rgb_convert_argb (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows); +#endif +} static void cmyk_convert_rgb(JSAMPROW row, JDIMENSION width); @@ -367,6 +382,7 @@ nsJPEGDecoder::WriteInternal(const char* case JCS_GRAYSCALE: case JCS_RGB: case JCS_YCbCr: +#ifdef JCS_EXTENSIONS // if we're not color managing we can decode directly to // MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB if (mCMSMode != eCMSMode_All) { @@ -375,6 +391,9 @@ nsJPEGDecoder::WriteInternal(const char* } else { mInfo.out_color_space = JCS_RGB; } +#else + mInfo.out_color_space = JCS_RGB; +#endif break; case JCS_CMYK: case JCS_YCCK: -@@ -433,6 +452,15 @@ nsJPEGDecoder::WriteInternal(const char* +@@ -448,6 +467,16 @@ nsJPEGDecoder::WriteInternal(const char* return; // I/O suspension } +#ifndef JCS_EXTENSIONS + /* Force to use our YCbCr to Packed RGB converter when possible */ + if (!mTransform && (mCMSMode != eCMSMode_All) && + mInfo.jpeg_color_space == JCS_YCbCr && mInfo.out_color_space == JCS_RGB) { + /* Special case for the most common case: transform from YCbCr direct into packed ARGB */ + mInfo.out_color_components = 4; /* Packed ARGB pixels are always 4 bytes...*/ + mInfo.cconvert->color_convert = ycc_rgb_convert_argb; + } +#endif - ++ // If this is a progressive JPEG ... mState = mInfo.buffered_image ? + JPEG_DECOMPRESS_PROGRESSIVE : JPEG_DECOMPRESS_SEQUENTIAL; @@ -605,7 +633,11 @@ nsJPEGDecoder::OutputScanlines(bool* sus uint32_t* imageRow = ((uint32_t*)mImageData) + (mInfo.output_scanline * mInfo.output_width); +#ifdef JCS_EXTENSIONS if (mInfo.out_color_space == MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB) { +#else + if (mInfo.cconvert->color_convert == ycc_rgb_convert_argb) { +#endif // Special case: scanline will be directly converted into packed ARGB if (jpeg_read_scanlines(&mInfo, (JSAMPARRAY)&imageRow, 1) != 1) { *suspend = true; // suspend @@ -920,6 +952,282 @@ term_source (j_decompress_ptr jd) } // namespace mozilla +#ifndef JCS_EXTENSIONS +/**************** YCbCr -> Cairo's RGB24/ARGB32 conversion: most common case **************/ + +/* + * YCbCr is defined per CCIR 601-1, except that Cb and Cr are + * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. + * The conversion equations to be implemented are therefore + * R = Y + 1.40200 * Cr + * G = Y - 0.34414 * Cb - 0.71414 * Cr + * B = Y + 1.77200 * Cb + * where Cb and Cr represent the incoming values less CENTERJSAMPLE. + * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) + * + * To avoid floating-point arithmetic, we represent the fractional constants + * as integers scaled up by 2^16 (about 4 digits precision); we have to divide + * the products by 2^16, with appropriate rounding, to get the correct answer. + * Notice that Y, being an integral input, does not contribute any fraction + * so it need not participate in the rounding. + * + * For even more speed, we avoid doing any multiplications in the inner loop + * by precalculating the constants times Cb and Cr for all possible values. + * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); + * for 12-bit samples it is still acceptable. It's not very reasonable for + * 16-bit samples, but if you want lossless storage you shouldn't be changing + * colorspace anyway. + * The Cr=>R and Cb=>B values can be rounded to integers in advance; the + * values for the G calculation are left scaled up, since we must add them + * together before rounding. + */ + +#define SCALEBITS 16 /* speediest right-shift on some machines */ + +/* Use static tables for color processing. */ +/* Four tables, each 256 entries of 4 bytes totals 4K which is not bad... */ + +const int Cr_r_tab[(MAXJSAMPLE+1) * sizeof(int)] ={ + -0xb3, -0xb2, -0xb1, -0xaf, -0xae, -0xac, + -0xab, -0xaa, -0xa8, -0xa7, -0xa5, -0xa4, + -0xa3, -0xa1, -0xa0, -0x9e, -0x9d, -0x9c, + -0x9a, -0x99, -0x97, -0x96, -0x95, -0x93, + -0x92, -0x90, -0x8f, -0x8e, -0x8c, -0x8b, + -0x89, -0x88, -0x87, -0x85, -0x84, -0x82, + -0x81, -0x80, -0x7e, -0x7d, -0x7b, -0x7a, + -0x79, -0x77, -0x76, -0x74, -0x73, -0x72, + -0x70, -0x6f, -0x6d, -0x6c, -0x6b, -0x69, + -0x68, -0x66, -0x65, -0x64, -0x62, -0x61, + -0x5f, -0x5e, -0x5d, -0x5b, -0x5a, -0x58, + -0x57, -0x56, -0x54, -0x53, -0x51, -0x50, + -0x4f, -0x4d, -0x4c, -0x4a, -0x49, -0x48, + -0x46, -0x45, -0x43, -0x42, -0x40, -0x3f, + -0x3e, -0x3c, -0x3b, -0x39, -0x38, -0x37, + -0x35, -0x34, -0x32, -0x31, -0x30, -0x2e, + -0x2d, -0x2b, -0x2a, -0x29, -0x27, -0x26, + -0x24, -0x23, -0x22, -0x20, -0x1f, -0x1d, + -0x1c, -0x1b, -0x19, -0x18, -0x16, -0x15, + -0x14, -0x12, -0x11, -0x0f, -0x0e, -0x0d, + -0x0b, -0x0a, -0x08, -0x07, -0x06, -0x04, + -0x03, -0x01, 0x00, 0x01, 0x03, 0x04, + 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0d, + 0x0e, 0x0f, 0x11, 0x12, 0x14, 0x15, + 0x16, 0x18, 0x19, 0x1b, 0x1c, 0x1d, + 0x1f, 0x20, 0x22, 0x23, 0x24, 0x26, + 0x27, 0x29, 0x2a, 0x2b, 0x2d, 0x2e, + 0x30, 0x31, 0x32, 0x34, 0x35, 0x37, + 0x38, 0x39, 0x3b, 0x3c, 0x3e, 0x3f, + 0x40, 0x42, 0x43, 0x45, 0x46, 0x48, + 0x49, 0x4a, 0x4c, 0x4d, 0x4f, 0x50, + 0x51, 0x53, 0x54, 0x56, 0x57, 0x58, + 0x5a, 0x5b, 0x5d, 0x5e, 0x5f, 0x61, + 0x62, 0x64, 0x65, 0x66, 0x68, 0x69, + 0x6b, 0x6c, 0x6d, 0x6f, 0x70, 0x72, + 0x73, 0x74, 0x76, 0x77, 0x79, 0x7a, + 0x7b, 0x7d, 0x7e, 0x80, 0x81, 0x82, + 0x84, 0x85, 0x87, 0x88, 0x89, 0x8b, + 0x8c, 0x8e, 0x8f, 0x90, 0x92, 0x93, + 0x95, 0x96, 0x97, 0x99, 0x9a, 0x9c, + 0x9d, 0x9e, 0xa0, 0xa1, 0xa3, 0xa4, + 0xa5, 0xa7, 0xa8, 0xaa, 0xab, 0xac, + 0xae, 0xaf, 0xb1, 0xb2, + }; + +const int Cb_b_tab[(MAXJSAMPLE+1) * sizeof(int)] ={ + -0xe3, -0xe1, -0xdf, -0xde, -0xdc, -0xda, + -0xd8, -0xd6, -0xd5, -0xd3, -0xd1, -0xcf, + -0xce, -0xcc, -0xca, -0xc8, -0xc6, -0xc5, + -0xc3, -0xc1, -0xbf, -0xbe, -0xbc, -0xba, + -0xb8, -0xb7, -0xb5, -0xb3, -0xb1, -0xaf, + -0xae, -0xac, -0xaa, -0xa8, -0xa7, -0xa5, + -0xa3, -0xa1, -0x9f, -0x9e, -0x9c, -0x9a, + -0x98, -0x97, -0x95, -0x93, -0x91, -0x90, + -0x8e, -0x8c, -0x8a, -0x88, -0x87, -0x85, + -0x83, -0x81, -0x80, -0x7e, -0x7c, -0x7a, + -0x78, -0x77, -0x75, -0x73, -0x71, -0x70, + -0x6e, -0x6c, -0x6a, -0x69, -0x67, -0x65, + -0x63, -0x61, -0x60, -0x5e, -0x5c, -0x5a, + -0x59, -0x57, -0x55, -0x53, -0x52, -0x50, + -0x4e, -0x4c, -0x4a, -0x49, -0x47, -0x45, + -0x43, -0x42, -0x40, -0x3e, -0x3c, -0x3a, + -0x39, -0x37, -0x35, -0x33, -0x32, -0x30, + -0x2e, -0x2c, -0x2b, -0x29, -0x27, -0x25, + -0x23, -0x22, -0x20, -0x1e, -0x1c, -0x1b, + -0x19, -0x17, -0x15, -0x13, -0x12, -0x10, + -0x0e, -0x0c, -0x0b, -0x09, -0x07, -0x05, + -0x04, -0x02, 0x00, 0x02, 0x04, 0x05, + 0x07, 0x09, 0x0b, 0x0c, 0x0e, 0x10, + 0x12, 0x13, 0x15, 0x17, 0x19, 0x1b, + 0x1c, 0x1e, 0x20, 0x22, 0x23, 0x25, + 0x27, 0x29, 0x2b, 0x2c, 0x2e, 0x30, + 0x32, 0x33, 0x35, 0x37, 0x39, 0x3a, + 0x3c, 0x3e, 0x40, 0x42, 0x43, 0x45, + 0x47, 0x49, 0x4a, 0x4c, 0x4e, 0x50, + 0x52, 0x53, 0x55, 0x57, 0x59, 0x5a, + 0x5c, 0x5e, 0x60, 0x61, 0x63, 0x65, + 0x67, 0x69, 0x6a, 0x6c, 0x6e, 0x70, + 0x71, 0x73, 0x75, 0x77, 0x78, 0x7a, + 0x7c, 0x7e, 0x80, 0x81, 0x83, 0x85, + 0x87, 0x88, 0x8a, 0x8c, 0x8e, 0x90, + 0x91, 0x93, 0x95, 0x97, 0x98, 0x9a, + 0x9c, 0x9e, 0x9f, 0xa1, 0xa3, 0xa5, + 0xa7, 0xa8, 0xaa, 0xac, 0xae, 0xaf, + 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xba, + 0xbc, 0xbe, 0xbf, 0xc1, 0xc3, 0xc5, + 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xcf, + 0xd1, 0xd3, 0xd5, 0xd6, 0xd8, 0xda, + 0xdc, 0xde, 0xdf, 0xe1, + }; + +const int Cr_g_tab[(MAXJSAMPLE+1) * sizeof(int)] ={ + 0x5b6900, 0x5ab22e, 0x59fb5c, 0x59448a, 0x588db8, 0x57d6e6, + 0x572014, 0x566942, 0x55b270, 0x54fb9e, 0x5444cc, 0x538dfa, + 0x52d728, 0x522056, 0x516984, 0x50b2b2, 0x4ffbe0, 0x4f450e, + 0x4e8e3c, 0x4dd76a, 0x4d2098, 0x4c69c6, 0x4bb2f4, 0x4afc22, + 0x4a4550, 0x498e7e, 0x48d7ac, 0x4820da, 0x476a08, 0x46b336, + 0x45fc64, 0x454592, 0x448ec0, 0x43d7ee, 0x43211c, 0x426a4a, + 0x41b378, 0x40fca6, 0x4045d4, 0x3f8f02, 0x3ed830, 0x3e215e, + 0x3d6a8c, 0x3cb3ba, 0x3bfce8, 0x3b4616, 0x3a8f44, 0x39d872, + 0x3921a0, 0x386ace, 0x37b3fc, 0x36fd2a, 0x364658, 0x358f86, + 0x34d8b4, 0x3421e2, 0x336b10, 0x32b43e, 0x31fd6c, 0x31469a, + 0x308fc8, 0x2fd8f6, 0x2f2224, 0x2e6b52, 0x2db480, 0x2cfdae, + 0x2c46dc, 0x2b900a, 0x2ad938, 0x2a2266, 0x296b94, 0x28b4c2, + 0x27fdf0, 0x27471e, 0x26904c, 0x25d97a, 0x2522a8, 0x246bd6, + 0x23b504, 0x22fe32, 0x224760, 0x21908e, 0x20d9bc, 0x2022ea, + 0x1f6c18, 0x1eb546, 0x1dfe74, 0x1d47a2, 0x1c90d0, 0x1bd9fe, + 0x1b232c, 0x1a6c5a, 0x19b588, 0x18feb6, 0x1847e4, 0x179112, + 0x16da40, 0x16236e, 0x156c9c, 0x14b5ca, 0x13fef8, 0x134826, + 0x129154, 0x11da82, 0x1123b0, 0x106cde, 0x0fb60c, 0x0eff3a, + 0x0e4868, 0x0d9196, 0x0cdac4, 0x0c23f2, 0x0b6d20, 0x0ab64e, + 0x09ff7c, 0x0948aa, 0x0891d8, 0x07db06, 0x072434, 0x066d62, + 0x05b690, 0x04ffbe, 0x0448ec, 0x03921a, 0x02db48, 0x022476, + 0x016da4, 0x00b6d2, 0x000000, -0x00b6d2, -0x016da4, -0x022476, + -0x02db48, -0x03921a, -0x0448ec, -0x04ffbe, -0x05b690, -0x066d62, + -0x072434, -0x07db06, -0x0891d8, -0x0948aa, -0x09ff7c, -0x0ab64e, + -0x0b6d20, -0x0c23f2, -0x0cdac4, -0x0d9196, -0x0e4868, -0x0eff3a, + -0x0fb60c, -0x106cde, -0x1123b0, -0x11da82, -0x129154, -0x134826, + -0x13fef8, -0x14b5ca, -0x156c9c, -0x16236e, -0x16da40, -0x179112, + -0x1847e4, -0x18feb6, -0x19b588, -0x1a6c5a, -0x1b232c, -0x1bd9fe, + -0x1c90d0, -0x1d47a2, -0x1dfe74, -0x1eb546, -0x1f6c18, -0x2022ea, + -0x20d9bc, -0x21908e, -0x224760, -0x22fe32, -0x23b504, -0x246bd6, + -0x2522a8, -0x25d97a, -0x26904c, -0x27471e, -0x27fdf0, -0x28b4c2, + -0x296b94, -0x2a2266, -0x2ad938, -0x2b900a, -0x2c46dc, -0x2cfdae, + -0x2db480, -0x2e6b52, -0x2f2224, -0x2fd8f6, -0x308fc8, -0x31469a, + -0x31fd6c, -0x32b43e, -0x336b10, -0x3421e2, -0x34d8b4, -0x358f86, + -0x364658, -0x36fd2a, -0x37b3fc, -0x386ace, -0x3921a0, -0x39d872, + -0x3a8f44, -0x3b4616, -0x3bfce8, -0x3cb3ba, -0x3d6a8c, -0x3e215e, + -0x3ed830, -0x3f8f02, -0x4045d4, -0x40fca6, -0x41b378, -0x426a4a, + -0x43211c, -0x43d7ee, -0x448ec0, -0x454592, -0x45fc64, -0x46b336, + -0x476a08, -0x4820da, -0x48d7ac, -0x498e7e, -0x4a4550, -0x4afc22, + -0x4bb2f4, -0x4c69c6, -0x4d2098, -0x4dd76a, -0x4e8e3c, -0x4f450e, + -0x4ffbe0, -0x50b2b2, -0x516984, -0x522056, -0x52d728, -0x538dfa, + -0x5444cc, -0x54fb9e, -0x55b270, -0x566942, -0x572014, -0x57d6e6, + -0x588db8, -0x59448a, -0x59fb5c, -0x5ab22e, + }; + +const int Cb_g_tab[(MAXJSAMPLE+1) * sizeof(int)] ={ + 0x2c8d00, 0x2c34e6, 0x2bdccc, 0x2b84b2, 0x2b2c98, 0x2ad47e, + 0x2a7c64, 0x2a244a, 0x29cc30, 0x297416, 0x291bfc, 0x28c3e2, + 0x286bc8, 0x2813ae, 0x27bb94, 0x27637a, 0x270b60, 0x26b346, + 0x265b2c, 0x260312, 0x25aaf8, 0x2552de, 0x24fac4, 0x24a2aa, + 0x244a90, 0x23f276, 0x239a5c, 0x234242, 0x22ea28, 0x22920e, + 0x2239f4, 0x21e1da, 0x2189c0, 0x2131a6, 0x20d98c, 0x208172, + 0x202958, 0x1fd13e, 0x1f7924, 0x1f210a, 0x1ec8f0, 0x1e70d6, + 0x1e18bc, 0x1dc0a2, 0x1d6888, 0x1d106e, 0x1cb854, 0x1c603a, + 0x1c0820, 0x1bb006, 0x1b57ec, 0x1affd2, 0x1aa7b8, 0x1a4f9e, + 0x19f784, 0x199f6a, 0x194750, 0x18ef36, 0x18971c, 0x183f02, + 0x17e6e8, 0x178ece, 0x1736b4, 0x16de9a, 0x168680, 0x162e66, + 0x15d64c, 0x157e32, 0x152618, 0x14cdfe, 0x1475e4, 0x141dca, + 0x13c5b0, 0x136d96, 0x13157c, 0x12bd62, 0x126548, 0x120d2e, + 0x11b514, 0x115cfa, 0x1104e0, 0x10acc6, 0x1054ac, 0x0ffc92, + 0x0fa478, 0x0f4c5e, 0x0ef444, 0x0e9c2a, 0x0e4410, 0x0debf6, + 0x0d93dc, 0x0d3bc2, 0x0ce3a8, 0x0c8b8e, 0x0c3374, 0x0bdb5a, + 0x0b8340, 0x0b2b26, 0x0ad30c, 0x0a7af2, 0x0a22d8, 0x09cabe, + 0x0972a4, 0x091a8a, 0x08c270, 0x086a56, 0x08123c, 0x07ba22, + 0x076208, 0x0709ee, 0x06b1d4, 0x0659ba, 0x0601a0, 0x05a986, + 0x05516c, 0x04f952, 0x04a138, 0x04491e, 0x03f104, 0x0398ea, + 0x0340d0, 0x02e8b6, 0x02909c, 0x023882, 0x01e068, 0x01884e, + 0x013034, 0x00d81a, 0x008000, 0x0027e6, -0x003034, -0x00884e, + -0x00e068, -0x013882, -0x01909c, -0x01e8b6, -0x0240d0, -0x0298ea, + -0x02f104, -0x03491e, -0x03a138, -0x03f952, -0x04516c, -0x04a986, + -0x0501a0, -0x0559ba, -0x05b1d4, -0x0609ee, -0x066208, -0x06ba22, + -0x07123c, -0x076a56, -0x07c270, -0x081a8a, -0x0872a4, -0x08cabe, + -0x0922d8, -0x097af2, -0x09d30c, -0x0a2b26, -0x0a8340, -0x0adb5a, + -0x0b3374, -0x0b8b8e, -0x0be3a8, -0x0c3bc2, -0x0c93dc, -0x0cebf6, + -0x0d4410, -0x0d9c2a, -0x0df444, -0x0e4c5e, -0x0ea478, -0x0efc92, + -0x0f54ac, -0x0facc6, -0x1004e0, -0x105cfa, -0x10b514, -0x110d2e, + -0x116548, -0x11bd62, -0x12157c, -0x126d96, -0x12c5b0, -0x131dca, + -0x1375e4, -0x13cdfe, -0x142618, -0x147e32, -0x14d64c, -0x152e66, + -0x158680, -0x15de9a, -0x1636b4, -0x168ece, -0x16e6e8, -0x173f02, + -0x17971c, -0x17ef36, -0x184750, -0x189f6a, -0x18f784, -0x194f9e, + -0x19a7b8, -0x19ffd2, -0x1a57ec, -0x1ab006, -0x1b0820, -0x1b603a, + -0x1bb854, -0x1c106e, -0x1c6888, -0x1cc0a2, -0x1d18bc, -0x1d70d6, + -0x1dc8f0, -0x1e210a, -0x1e7924, -0x1ed13e, -0x1f2958, -0x1f8172, + -0x1fd98c, -0x2031a6, -0x2089c0, -0x20e1da, -0x2139f4, -0x21920e, + -0x21ea28, -0x224242, -0x229a5c, -0x22f276, -0x234a90, -0x23a2aa, + -0x23fac4, -0x2452de, -0x24aaf8, -0x250312, -0x255b2c, -0x25b346, + -0x260b60, -0x26637a, -0x26bb94, -0x2713ae, -0x276bc8, -0x27c3e2, + -0x281bfc, -0x287416, -0x28cc30, -0x29244a, -0x297c64, -0x29d47e, + -0x2a2c98, -0x2a84b2, -0x2adccc, -0x2b34e6, + }; + + +/* We assume that right shift corresponds to signed division by 2 with + * rounding towards minus infinity. This is correct for typical "arithmetic + * shift" instructions that shift in copies of the sign bit. But some + * C compilers implement >> with an unsigned shift. For these machines you + * must define RIGHT_SHIFT_IS_UNSIGNED. + * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity. + * It is only applied with constant shift counts. SHIFT_TEMPS must be + * included in the variables of any routine using RIGHT_SHIFT. + */ + +#ifdef RIGHT_SHIFT_IS_UNSIGNED +#define SHIFT_TEMPS INT32 shift_temp; +#define RIGHT_SHIFT(x,shft) \ + ((shift_temp = (x)) < 0 ? \ + (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \ + (shift_temp >> (shft))) +#else +#define SHIFT_TEMPS +#define RIGHT_SHIFT(x,shft) ((x) >> (shft)) +#endif + + +METHODDEF(void) +ycc_rgb_convert_argb (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + JDIMENSION num_cols = cinfo->output_width; + JSAMPLE * range_limit = cinfo->sample_range_limit; + + SHIFT_TEMPS + + /* This is used if we don't have SSE2 */ + + while (--num_rows >= 0) { + JSAMPROW inptr0 = input_buf[0][input_row]; + JSAMPROW inptr1 = input_buf[1][input_row]; + JSAMPROW inptr2 = input_buf[2][input_row]; + input_row++; + uint32_t *outptr = (uint32_t *) *output_buf++; + for (JDIMENSION col = 0; col < num_cols; col++) { + int y = GETJSAMPLE(inptr0[col]); + int cb = GETJSAMPLE(inptr1[col]); + int cr = GETJSAMPLE(inptr2[col]); + JSAMPLE * range_limit_y = range_limit + y; + /* Range-limiting is essential due to noise introduced by DCT losses. */ + outptr[col] = 0xFF000000 | + ( range_limit_y[Cr_r_tab[cr]] << 16 ) | + ( range_limit_y[((int) RIGHT_SHIFT(Cb_g_tab[cb] + Cr_g_tab[cr], SCALEBITS))] << 8 ) | + ( range_limit_y[Cb_b_tab[cb]] ); + } + } +} +#endif + + ///*************** Inverted CMYK -> RGB conversion ************************* /// Input is (Inverted) CMYK stored as 4 bytes per pixel. /// Output is RGB stored as 3 bytes per pixel. Index: head/mail/thunderbird/files/patch-modules-libpref-init-all.js =================================================================== --- head/mail/thunderbird/files/patch-modules-libpref-init-all.js (nonexistent) +++ head/mail/thunderbird/files/patch-modules-libpref-init-all.js (revision 413157) @@ -0,0 +1,15 @@ +--- mozilla/modules/libpref/init/all.js.orig 2015-08-06 22:39:34 UTC ++++ mozilla/modules/libpref/init/all.js +@@ -4052,7 +4052,12 @@ pref("layers.max-active", -1); + pref("layers.tiles.adjust", true); + + // Set the default values, and then override per-platform as needed ++#ifdef MOZ_TREE_CAIRO + pref("layers.offmainthreadcomposition.enabled", true); ++#else ++// Disable for system cairo on suspicion of causing random crashes ++pref("layers.offmainthreadcomposition.enabled", false); ++#endif + // Compositor target frame rate. NOTE: If vsync is enabled the compositor + // frame rate will still be capped. + // -1 -> default (match layout.frame_rate or 60 FPS) Property changes on: head/mail/thunderbird/files/patch-modules-libpref-init-all.js ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/mail/thunderbird/files/patch-toolkit_mozapps_installer_packager_mk =================================================================== --- head/mail/thunderbird/files/patch-toolkit_mozapps_installer_packager_mk (revision 413156) +++ head/mail/thunderbird/files/patch-toolkit_mozapps_installer_packager_mk (revision 413157) @@ -1,13 +1,13 @@ $OpenBSD: patch-toolkit_mozapps_installer_packager_mk,v 1.11 2012/06/11 15:29:56 landry Exp $ install headers/idl/sdk libs only if xulrunner --- mozilla/toolkit/mozapps/installer/packager.mk.orig Fri Jun 1 14:04:20 2012 +++ mozilla/toolkit/mozapps/installer/packager.mk Tue Jun 5 07:55:51 2012 -@@ -123,7 +123,7 @@ endif +@@ -127,7 +127,7 @@ endif $(NSINSTALL) -D $(DESTDIR)$(bindir) $(RM) -f $(DESTDIR)$(bindir)/$(MOZ_APP_NAME) ln -s $(installdir)/$(MOZ_APP_NAME) $(DESTDIR)$(bindir) -ifdef INSTALL_SDK # Here comes the hard part +ifeq ($(MOZ_APP_NAME),xulrunner) $(NSINSTALL) -D $(DESTDIR)$(includedir) (cd $(DIST)/include && tar $(TAR_CREATE_FLAGS) - .) | \ (cd $(DESTDIR)$(includedir) && tar -xf -) Index: head/mail/thunderbird/files/patch-z-bug517422 =================================================================== --- head/mail/thunderbird/files/patch-z-bug517422 (revision 413156) +++ head/mail/thunderbird/files/patch-z-bug517422 (revision 413157) @@ -1,582 +1,444 @@ # Allow more config/external/ libs built against system-wide version. diff --git config/Makefile.in config/Makefile.in index 5383399..0410004 100644 --- mozilla/config/Makefile.in +++ mozilla/config/Makefile.in -@@ -77,6 +77,14 @@ export:: $(export-preqs) +@@ -77,6 +77,11 @@ export:: $(export-preqs) -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \ -DMOZ_NATIVE_GRAPHITE2=$(MOZ_NATIVE_GRAPHITE2) \ -DMOZ_NATIVE_HARFBUZZ=$(MOZ_NATIVE_HARFBUZZ) \ + -DMOZ_NATIVE_OGG=$(MOZ_NATIVE_OGG) \ + -DMOZ_NATIVE_THEORA=$(MOZ_NATIVE_THEORA) \ + -DMOZ_NATIVE_VORBIS=$(MOZ_NATIVE_VORBIS) \ + -DMOZ_NATIVE_TREMOR=$(MOZ_NATIVE_TREMOR) \ -+ -DMOZ_NATIVE_CELT=$(MOZ_NATIVE_CELT) \ -+ -DMOZ_NATIVE_OPUS=$(MOZ_NATIVE_OPUS) \ -+ -DMOZ_NATIVE_SPEEX=$(MOZ_NATIVE_SPEEX) \ + -DMOZ_NATIVE_SOUNDTOUCH=$(MOZ_NATIVE_SOUNDTOUCH) \ $(srcdir)/system-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers $(INSTALL) system_wrappers $(DIST) diff --git config/external/moz.build config/external/moz.build index f67c5c7..eb909ce 100644 --- mozilla/config/external/moz.build +++ mozilla/config/external/moz.build -@@ -19,10 +19,19 @@ if CONFIG['MOZ_UPDATER']: +@@ -19,10 +19,16 @@ if CONFIG['MOZ_UPDATER']: # There's no "native brotli" yet, but probably in the future... external_dirs += ['modules/brotli'] -if CONFIG['MOZ_VORBIS']: +if not CONFIG['MOZ_NATIVE_OGG']: + external_dirs += ['media/libogg'] + -+if not CONFIG['MOZ_NATIVE_CELT'] or not CONFIG['MOZ_NATIVE_OPUS']: -+ external_dirs += ['media/libopus'] -+ +if not CONFIG['MOZ_NATIVE_THEORA']: + external_dirs += ['media/libtheora'] + +if CONFIG['MOZ_VORBIS'] and not CONFIG['MOZ_NATIVE_VORBIS']: external_dirs += ['media/libvorbis'] -if CONFIG['MOZ_TREMOR']: +if CONFIG['MOZ_TREMOR'] and not CONFIG['MOZ_NATIVE_TREMOR']: external_dirs += ['media/libtremor'] if CONFIG['MOZ_WEBM']: -@@ -37,15 +46,16 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ +@@ -37,15 +46,15 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ if not CONFIG['MOZ_NATIVE_PNG']: external_dirs += ['media/libpng'] -+if not CONFIG['MOZ_NATIVE_SPEEX']: -+ external_dirs += ['media/libspeex_resampler'] -+ +if not CONFIG['MOZ_NATIVE_SOUNDTOUCH']: + external_dirs += ['media/libsoundtouch'] + external_dirs += [ 'media/kiss_fft', 'media/libcubeb', - 'media/libogg', -- 'media/libopus', + 'media/libopus', - 'media/libtheora', -- 'media/libspeex_resampler', + 'media/libspeex_resampler', 'media/libstagefright', - 'media/libsoundtouch', ] DIRS += ['../../' + i for i in external_dirs] diff --git config/system-headers config/system-headers index bef567c..9807c29 100644 --- mozilla/config/system-headers +++ mozilla/config/system-headers -@@ -1263,7 +1263,6 @@ X11/Xlocale.h - X11/Xos.h - X11/Xutil.h - zmouse.h --soundtouch/SoundTouch.h - #if MOZ_NATIVE_PNG==1 - png.h - #endif -@@ -1325,6 +1324,7 @@ vorbis/codec.h - theora/theoradec.h - tremor/ivorbiscodec.h - speex/speex_resampler.h -+soundtouch/SoundTouch.h - ogg/ogg.h - ogg/os_types.h - nestegg/nestegg.h -@@ -1365,3 +1365,35 @@ graphite2/Segment.h +@@ -1364,3 +1363,17 @@ graphite2/Segment.h harfbuzz/hb-ot.h harfbuzz/hb.h #endif +#if MOZ_NATIVE_OGG==1 +ogg/ogg.h +ogg/os_types.h +#endif +#if MOZ_NATIVE_THEORA==1 +theora/theoradec.h +#endif +#if MOZ_NATIVE_VORBIS==1 +vorbis/codec.h +vorbis/vorbisenc.h +#endif +#if MOZ_NATIVE_TREMOR==1 +tremor/ivorbiscodec.h +#endif -+#if MOZ_NATIVE_CELT==1 -+celt.h -+celt_header.h -+celt/celt.h -+celt/celt_header.h -+#endif -+#if MOZ_NATIVE_OPUS==1 -+opus.h -+opus_multistream.h -+opus/opus.h -+opus/opus_multistream.h -+#endif -+#if MOZ_NATIVE_SPEEX==1 -+speex/speex_resampler.h -+#endif -+#if MOZ_NATIVE_SOUNDTOUCH==1 -+soundtouch/SoundTouch.h -+#endif diff --git configure.in configure.in index 87db361..7947626 100644 --- mozilla/configure.in +++ mozilla/configure.in -@@ -5223,6 +5223,157 @@ if test "${ac_cv_c_attribute_aligned}" ! +@@ -5223,6 +5223,111 @@ if test "${ac_cv_c_attribute_aligned}" ! fi dnl ======================================================== +dnl Check for libogg +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-ogg, +[ --with-system-ogg Use system libogg (located with pkgconfig)], +MOZ_NATIVE_OGG=1, +MOZ_NATIVE_OGG=) + +if test -n "$MOZ_NATIVE_OGG"; then + PKG_CHECK_MODULES(MOZ_OGG, ogg >= 1.2.1) + + _SAVE_LIBS=$LIBS + LIBS="$LIBS $MOZ_OGG_LIBS" + AC_CHECK_FUNC(ogg_set_mem_functions, [], + [AC_DEFINE(MOZ_OGG_NO_MEM_REPORTING)]) + LIBS=$_SAVE_LIBS +fi + +AC_SUBST(MOZ_NATIVE_OGG) + +dnl ======================================================== +dnl Check for libvorbis +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-vorbis, +[ --with-system-vorbis Use system libvorbis (located with pkgconfig)], +MOZ_NATIVE_VORBIS=1, +MOZ_NATIVE_VORBIS=) + +if test -n "$MOZ_NATIVE_VORBIS"; then + PKG_CHECK_MODULES(MOZ_VORBIS, vorbis vorbisenc >= 1.3.5) +fi + +AC_SUBST(MOZ_NATIVE_VORBIS) + +dnl ======================================================== +dnl Check for integer-only libvorbis aka tremor +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-tremor, +[ --with-system-tremor Use system libtremor (located with pkgconfig)], +MOZ_NATIVE_TREMOR=1, +MOZ_NATIVE_TREMOR=) + +if test -n "$MOZ_NATIVE_TREMOR"; then + PKG_CHECK_MODULES(MOZ_TREMOR, vorbisidec >= 1.2.1) +fi + +AC_SUBST(MOZ_NATIVE_TREMOR) + +dnl ======================================================== -+dnl Check for libcelt -+dnl ======================================================== -+ -+MOZ_ARG_WITH_BOOL(system-celt, -+[ --with-system-celt Use system libcelt (located with pkgconfig)], -+MOZ_NATIVE_CELT=1, -+MOZ_NATIVE_CELT=) -+ -+if test -n "$MOZ_NATIVE_CELT"; then -+ PKG_CHECK_MODULES(MOZ_CELT, celt) -+else -+ MOZ_CELT_CFLAGS='-I$(topsrcdir)/media/libopus' -+fi -+ -+AC_SUBST(MOZ_NATIVE_CELT) -+ -+dnl ======================================================== -+dnl Check for libopus -+dnl ======================================================== -+ -+MOZ_ARG_WITH_BOOL(system-opus, -+[ --with-system-opus Use system libopus (located with pkgconfig)], -+MOZ_NATIVE_OPUS=1, -+MOZ_NATIVE_OPUS=) -+ -+if test -n "$MOZ_NATIVE_OPUS"; then -+ PKG_CHECK_MODULES(MOZ_OPUS, opus >= 1.1) -+else -+ MOZ_OPUS_CFLAGS='-I$(topsrcdir)/media/libopus/include' -+fi -+ -+AC_SUBST(MOZ_NATIVE_OPUS) -+ -+dnl ======================================================== +dnl Check for libtheora +dnl ======================================================== + +MOZ_ARG_WITH_BOOL(system-theora, +[ --with-system-theora Use system libtheora (located with pkgconfig)], +MOZ_NATIVE_THEORA=1, +MOZ_NATIVE_THEORA=) + +if test -n "$MOZ_NATIVE_THEORA"; then + PKG_CHECK_MODULES(MOZ_THEORA, theora >= 1.2) +fi + +AC_SUBST(MOZ_NATIVE_THEORA) + +dnl ======================================================== -+dnl Check for libspeex resampler ++dnl Check for libSoundTouch +dnl ======================================================== + -+MOZ_ARG_WITH_BOOL(system-speex, -+[ --with-system-speex Use system libspeex (located with pkgconfig)], -+MOZ_NATIVE_SPEEX=1, -+MOZ_NATIVE_SPEEX=) -+ -+if test -n "$MOZ_NATIVE_SPEEX"; then -+ PKG_CHECK_MODULES(MOZ_SPEEX, speexdsp >= 1.2) -+fi -+ -+AC_SUBST(MOZ_NATIVE_SPEEX) -+ -+dnl ======================================================== -+dnl Check for libsoundtouch -+dnl ======================================================== -+ +MOZ_ARG_WITH_BOOL(system-soundtouch, -+[ --with-system-soundtouch Use system libsoundtouch (located with pkgconfig)], ++[ --with-system-soundtouch Use system libSoundTouch (located with pkgconfig)], +MOZ_NATIVE_SOUNDTOUCH=1, +MOZ_NATIVE_SOUNDTOUCH=) + +if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then -+ PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.8.0) ++ PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.9.0) + + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + _SAVE_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS $MOZ_SOUNDTOUCH_CFLAGS" + AC_CACHE_CHECK(for soundtouch sample type, + ac_cv_soundtouch_sample_type, + [AC_TRY_COMPILE([#include + #ifndef SOUNDTOUCH_INTEGER_SAMPLES + #error soundtouch expects float samples + #endif], + [], + [ac_cv_soundtouch_sample_type=short], + [ac_cv_soundtouch_sample_type=float])]) + CXXFLAGS=$_SAVE_CXXFLAGS + AC_LANG_RESTORE + + if test \( -n "$MOZ_SAMPLE_TYPE_S16" -a "$ac_cv_soundtouch_sample_type" != short \) \ + -o \( -n "$MOZ_SAMPLE_TYPE_FLOAT32" -a "$ac_cv_soundtouch_sample_type" != float \) ; then + AC_MSG_ERROR([SoundTouch library is built with incompatible sample type. Either rebuild the library with/without --enable-integer-samples, chase default Mozilla sample type or remove --with-system-soundtouch.]) + fi +fi + ++if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then ++ AC_DEFINE(MOZ_NATIVE_SOUNDTOUCH) ++fi +AC_SUBST(MOZ_NATIVE_SOUNDTOUCH) + +dnl ======================================================== dnl = Disable VP8 decoder support dnl ======================================================== MOZ_ARG_DISABLE_BOOL(webm, +diff --git dom/media/AudioStream.cpp dom/media/AudioStream.cpp +index 2127256..1ec09fe 100644 +--- mozilla/dom/media/AudioStream.cpp ++++ mozilla/dom/media/AudioStream.cpp +@@ -129,7 +129,9 @@ AudioStream::AudioStream() + , mOutChannels(0) + , mWritten(0) + , mAudioClock(this) ++#ifndef MOZ_NATIVE_SOUNDTOUCH + , mTimeStretcher(nullptr) ++#endif + , mDumpFile(nullptr) + , mBytesPerFrame(0) + , mState(INITIALIZED) +@@ -152,9 +154,11 @@ AudioStream::~AudioStream() + if (mDumpFile) { + fclose(mDumpFile); + } ++#ifndef MOZ_NATIVE_SOUNDTOUCH + if (mTimeStretcher) { + soundtouch::destroySoundTouchObj(mTimeStretcher); + } ++#endif + } + + size_t +@@ -177,7 +181,11 @@ nsresult AudioStream::EnsureTimeStretcherInitializedUnlocked() + { + mMonitor.AssertCurrentThreadOwns(); + if (!mTimeStretcher) { ++#ifdef MOZ_NATIVE_SOUNDTOUCH ++ mTimeStretcher = new soundtouch::SoundTouch(); ++#else + mTimeStretcher = soundtouch::createSoundTouchObj(); ++#endif + mTimeStretcher->setSampleRate(mInRate); + mTimeStretcher->setChannels(mOutChannels); + mTimeStretcher->setPitch(1.0); diff --git dom/media/AudioStream.h dom/media/AudioStream.h -index 085676d..00c54fb 100644 +index a552e3e..02b80b1 100644 --- mozilla/dom/media/AudioStream.h +++ mozilla/dom/media/AudioStream.h -@@ -17,7 +17,7 @@ +@@ -15,7 +15,11 @@ + #include "mozilla/RefPtr.h" + #include "mozilla/UniquePtr.h" #include "CubebUtils.h" ++#ifdef MOZ_NATIVE_SOUNDTOUCH ++#include "soundtouch/SoundTouch.h" ++#else + #include "soundtouch/SoundTouchFactory.h" ++#endif - namespace soundtouch { --class SoundTouch; -+class MOZ_IMPORT_API SoundTouch; - } - namespace mozilla { + +@@ -277,7 +277,11 @@ private: + // Number of frames written to the buffers. + int64_t mWritten; + AudioClock mAudioClock; ++#ifdef MOZ_NATIVE_SOUNDTOUCH ++ nsAutoPtr mTimeStretcher; ++#else + soundtouch::SoundTouch* mTimeStretcher; ++#endif + + // Stream start time for stream open delay telemetry. + TimeStamp mStartTime; diff --git dom/media/moz.build dom/media/moz.build index 7526cff..e0a0ca0 100644 --- mozilla/dom/media/moz.build +++ mozilla/dom/media/moz.build -@@ -212,3 +212,24 @@ if CONFIG['ANDROID_VERSION'] > '15': +@@ -212,3 +212,18 @@ if CONFIG['ANDROID_VERSION'] > '15': CFLAGS += CONFIG['GSTREAMER_CFLAGS'] CXXFLAGS += CONFIG['GSTREAMER_CFLAGS'] + +if CONFIG['MOZ_NATIVE_OGG']: + CXXFLAGS += CONFIG['MOZ_OGG_CFLAGS'] + +if CONFIG['MOZ_NATIVE_THEORA']: + CXXFLAGS += CONFIG['MOZ_THEORA_CFLAGS'] + +if CONFIG['MOZ_NATIVE_VORBIS']: + CXXFLAGS += CONFIG['MOZ_VORBIS_CFLAGS'] + +if CONFIG['MOZ_NATIVE_TREMOR']: + CXXFLAGS += CONFIG['MOZ_TREMOR_CFLAGS'] + -+if CONFIG['MOZ_NATIVE_OPUS']: -+ CXXFLAGS += CONFIG['MOZ_OPUS_CFLAGS'] -+ -+if CONFIG['MOZ_NATIVE_SPEEX']: -+ CXXFLAGS += CONFIG['MOZ_SPEEX_CFLAGS'] -+ +if CONFIG['MOZ_NATIVE_SOUNDTOUCH']: + CXXFLAGS += CONFIG['MOZ_SOUNDTOUCH_CFLAGS'] -diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build -index 944744d..9a7c8c0 100644 ---- mozilla/media/libcubeb/src/moz.build -+++ mozilla/media/libcubeb/src/moz.build -@@ -65,6 +65,9 @@ if CONFIG['GKMEDIAS_SHARED_LIBRARY']: - - FINAL_LIBRARY = 'gkmedias' - -+if CONFIG['MOZ_NATIVE_SPEEX']: -+ SOURCES['cubeb_resampler.cpp'].flags += CONFIG['MOZ_SPEEX_CFLAGS'] -+ - if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': - CFLAGS += [ - '-I%s/%s' % (CONFIG['ANDROID_SOURCE'], d) for d in [ diff --git media/libogg/README_MOZILLA media/libogg/README_MOZILLA index 0833e4d..7ece97b 100644 --- mozilla/media/libogg/README_MOZILLA +++ mozilla/media/libogg/README_MOZILLA @@ -6,3 +6,6 @@ The svn revision number used was r17287. The int-types.patch address a bug that config_types.h generated from Linux platform can't be used on OpenSolaris directly see Mozilla bug 449754 + +The in-tree copy may be omitted during build by --with-system-ogg. +Keep version in configure.in in sync on updates. -diff --git media/libopus/README_MOZILLA media/libopus/README_MOZILLA -index 2d85c9f..d3fb9f8 100644 ---- mozilla/media/libopus/README_MOZILLA -+++ mozilla/media/libopus/README_MOZILLA -@@ -9,3 +9,6 @@ files after the copy step. - The upstream repository is https://git.xiph.org/opus.git - - The git tag/revision used was v1.1. -+ -+The in-tree copy may be omitted during build by --with-system-opus. -+So, keep its pkg-config version check within configure.in in sync on updates. diff --git media/libsoundtouch/README_MOZILLA media/libsoundtouch/README_MOZILLA index bfd4b1a..15b158d 100644 --- mozilla/media/libsoundtouch/README_MOZILLA +++ mozilla/media/libsoundtouch/README_MOZILLA @@ -6,3 +6,5 @@ The whole library is not used, only the relevant files are imported in the tree, using the script `update.sh`. Some changes have been made to the files, using the patch `moz-libsoundtouch.patch`. We also use a custom soundtouch_config.h. +The in-tree copy may be omitted during build by --with-system-soundtouch. +Keep version in configure.in in sync on updates. -diff --git media/libspeex_resampler/README_MOZILLA media/libspeex_resampler/README_MOZILLA -index 7f6b1bb..e830300 100644 ---- mozilla/media/libspeex_resampler/README_MOZILLA -+++ mozilla/media/libspeex_resampler/README_MOZILLA -@@ -3,3 +3,6 @@ This source is from the Speex DSP library +diff --git media/libsoundtouch/src/soundtouch_perms.h media/libsoundtouch/src/soundtouch_perms.h +index 0af2fe6..d80c145 100644 +--- mozilla/media/libsoundtouch/src/soundtouch_perms.h ++++ mozilla/media/libsoundtouch/src/soundtouch_perms.h +@@ -12,7 +12,9 @@ - It consists in the audio resampling code (resampler.c) and its header files - dependancies, imported into the tree using the update.sh script. -+ -+The in-tree copy may be omitted during build by --with-system-speex. -+Keep version in configure.in in sync on updates. + #pragma GCC visibility push(default) + #include "SoundTouch.h" ++#ifndef MOZ_NATIVE_SOUNDTOUCH + #include "SoundTouchFactory.h" ++#endif + #pragma GCC visibility pop + + #endif // MOZILLA_SOUNDTOUCH_PERMS_H diff --git media/libtheora/README_MOZILLA media/libtheora/README_MOZILLA index d48dbfa..f08a2ed 100644 --- mozilla/media/libtheora/README_MOZILLA +++ mozilla/media/libtheora/README_MOZILLA @@ -3,3 +3,6 @@ using the update.sh script. The changes made were those applied by update.sh, the addition/update of Makefile.in files for the Mozilla build system. The subversion revision used was r17578. + +The in-tree copy may be omitted during build by --with-system-theora. +Keep version in configure.in in sync on updates. diff --git media/libtheora/moz.build media/libtheora/moz.build index 14265b1..3069e99 100644 --- mozilla/media/libtheora/moz.build +++ mozilla/media/libtheora/moz.build -@@ -93,3 +93,5 @@ if CONFIG['GNU_AS']: - if CONFIG['OS_TARGET'] == 'Android': - DEFINES['__linux__'] = True +@@ -21,6 +21,9 @@ if CONFIG['GKMEDIAS_SHARED_LIBRARY']: + # The encoder is currently not included. + DEFINES['THEORA_DISABLE_ENCODE'] = True +if CONFIG['MOZ_NATIVE_OGG']: + CFLAGS += CONFIG['MOZ_OGG_CFLAGS'] ++ + # Suppress warnings in third-party code. + if CONFIG['GNU_CC']: + CFLAGS += ['-Wno-type-limits'] diff --git media/libtremor/README_MOZILLA media/libtremor/README_MOZILLA index ee67b53..3f34a09 100644 --- mozilla/media/libtremor/README_MOZILLA +++ mozilla/media/libtremor/README_MOZILLA @@ -5,3 +5,6 @@ Makefile.in files for the Mozilla build system. The upstream release used was http://svn.xiph.org/trunk/Tremor/ The subversion revision used was r17547. + +The in-tree copy may be omitted during build by --with-system-tremor. +Keep version in configure.in in sync on updates. diff --git media/libtremor/moz.build media/libtremor/moz.build index 31831ba..a03d576 100644 --- mozilla/media/libtremor/moz.build +++ mozilla/media/libtremor/moz.build @@ -6,3 +6,5 @@ DIRS += ['include/tremor', 'lib'] +if CONFIG['MOZ_NATIVE_OGG']: + CFLAGS += CONFIG['MOZ_OGG_CFLAGS'] diff --git media/libvorbis/README_MOZILLA media/libvorbis/README_MOZILLA index 7c7454c..55baedd 100644 --- mozilla/media/libvorbis/README_MOZILLA +++ mozilla/media/libvorbis/README_MOZILLA @@ -8,3 +8,6 @@ https://svn.xiph.org/tags/vorbis/libvorbis-1.3.4@19059 Some files are renamed during the copy to prevent clashes with object file names with other Mozilla libraries. + +The in-tree copy may be omitted during build by --with-system-vorbis. +Keep version in configure.in in sync on updates. diff --git media/libvorbis/moz.build media/libvorbis/moz.build index 919b99e..cc776f7 100644 --- mozilla/media/libvorbis/moz.build +++ mozilla/media/libvorbis/moz.build @@ -55,3 +55,6 @@ FINAL_LIBRARY = 'gkmedias' # Suppress warnings in third-party code. if CONFIG['GNU_CC']: CFLAGS += ['-Wno-uninitialized'] + +if CONFIG['MOZ_NATIVE_OGG']: + CFLAGS += CONFIG['MOZ_OGG_CFLAGS'] -diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build -index bbc971c..6ed7e41 100644 ---- mozilla/media/webrtc/signaling/test/moz.build -+++ mozilla/media/webrtc/signaling/test/moz.build -@@ -127,6 +127,9 @@ if CONFIG['MOZ_ALSA']: - if CONFIG['MOZ_NATIVE_JPEG']: - OS_LIBS += CONFIG['MOZ_JPEG_LIBS'] - -+if CONFIG['MOZ_NATIVE_OPUS']: -+ OS_LIBS += CONFIG['MOZ_OPUS_LIBS'] -+ - if CONFIG['MOZ_NATIVE_LIBVPX']: - OS_LIBS += CONFIG['MOZ_LIBVPX_LIBS'] - -diff --git media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi -index 00e77e7..55f48ab 100644 ---- mozilla/media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi -+++ mozilla/media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi -@@ -17,18 +17,11 @@ - 'conditions': [ - ['build_with_mozilla==1', { - # Mozilla provides its own build of the opus library. -- 'include_dirs': [ -- '/media/libopus/include', -- '/media/libopus/src', -- '/media/libopus/celt', -+ 'cflags_mozilla': [ -+ '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt', -+ '$(MOZ_OPUS_CFLAGS)', -+ '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src', - ], -- 'direct_dependent_settings': { -- 'include_dirs': [ -- '/media/libopus/include', -- '/media/libopus/src', -- '/media/libopus/celt', -- ], -- }, - }, { - 'dependencies': [ - '<(DEPTH)/third_party/opus/opus.gyp:opus' -diff --git media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi -index 00e77e7..55f48ab 100644 ---- mozilla/media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi -+++ mozilla/media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi -@@ -84,19 +84,11 @@ - ], - }], - ['build_with_mozilla==1', { -- 'include_dirs': [ -- # Need Opus header files for the audio classifier. -- '<(DEPTH)/../../../media/opus/celt', --# '<(DEPTH)/third_party/opus/src/src', -+ 'cflags_mozilla': [ -+ '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt', -+ '$(MOZ_OPUS_CFLAGS)', -+ '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src', - ], -- 'direct_dependent_settings': { -- 'include_dirs': [ -- '../../../../../../media/opus/celt', -- # Need Opus header files for the audio classifier. -- '<(DEPTH)/../../../media/opus/celt', --# '<(DEPTH)/third_party/opus/src/src', -- ], -- }, - }], - ], - 'sources': [ diff --git toolkit/library/moz.build toolkit/library/moz.build index d42137a..695e75a8 100644 --- mozilla/toolkit/library/moz.build +++ mozilla/toolkit/library/moz.build -@@ -178,6 +178,30 @@ if CONFIG['MOZ_NATIVE_PNG']: +@@ -178,6 +178,21 @@ if CONFIG['MOZ_NATIVE_PNG']: if CONFIG['MOZ_NATIVE_HUNSPELL']: OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS'] +if CONFIG['MOZ_NATIVE_OGG']: + OS_LIBS += CONFIG['MOZ_OGG_LIBS'] + +if CONFIG['MOZ_NATIVE_THEORA']: + OS_LIBS += CONFIG['MOZ_THEORA_LIBS'] + +if CONFIG['MOZ_NATIVE_VORBIS']: + OS_LIBS += CONFIG['MOZ_VORBIS_LIBS'] + +if CONFIG['MOZ_NATIVE_TREMOR']: + OS_LIBS += CONFIG['MOZ_TREMOR_LIBS'] -+ -+if CONFIG['MOZ_NATIVE_CELT']: -+ OS_LIBS += CONFIG['MOZ_CELT_LIBS'] -+ -+if CONFIG['MOZ_NATIVE_OPUS']: -+ OS_LIBS += CONFIG['MOZ_OPUS_LIBS'] -+ -+if CONFIG['MOZ_NATIVE_SPEEX']: -+ OS_LIBS += CONFIG['MOZ_SPEEX_LIBS'] + +if CONFIG['MOZ_NATIVE_SOUNDTOUCH']: + OS_LIBS += CONFIG['MOZ_SOUNDTOUCH_LIBS'] + if CONFIG['MOZ_NATIVE_LIBEVENT']: OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS'] diff --git xpcom/build/XPCOMInit.cpp xpcom/build/XPCOMInit.cpp index 2cf281e..6d7af0e 100644 --- mozilla/xpcom/build/XPCOMInit.cpp +++ mozilla/xpcom/build/XPCOMInit.cpp @@ -138,7 +138,9 @@ extern nsresult nsStringInputStreamConstructor(nsISupports*, REFNSIID, void**); #include "mozilla/VisualEventTracer.h" #endif +#ifndef MOZ_OGG_NO_MEM_REPORTING #include "ogg/ogg.h" +#endif #if defined(MOZ_VPX) && !defined(MOZ_VPX_NO_MEM_REPORTING) #include "vpx_mem/vpx_mem.h" #endif @@ -651,11 +653,13 @@ NS_InitXPCOM2(nsIServiceManager** aResult, // this oddness. mozilla::SetICUMemoryFunctions(); +#ifndef MOZ_OGG_NO_MEM_REPORTING // Do the same for libogg. ogg_set_mem_functions(OggReporter::CountingMalloc, OggReporter::CountingCalloc, OggReporter::CountingRealloc, OggReporter::CountingFree); +#endif #if defined(MOZ_VPX) && !defined(MOZ_VPX_NO_MEM_REPORTING) // And for VPX. Index: head/mail/thunderbird-i18n/Makefile =================================================================== --- head/mail/thunderbird-i18n/Makefile (revision 413156) +++ head/mail/thunderbird-i18n/Makefile (revision 413157) @@ -1,85 +1,85 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= thunderbird-i18n -PORTVERSION= 38.7.1 +PORTVERSION= 45.0 CATEGORIES= mail news net-im MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \ MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi PKGNAMEPREFIX= DISTFILES= ${THUNDERBIRD_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} MAINTAINER= gecko@FreeBSD.org COMMENT= Localized interface for Thunderbird USES= gecko:thunderbird,build zip USE_XPI= thunderbird NO_BUILD= yes NO_ARCH= yes USE_SUBMAKE= yes WDIR= langpack-*@thunderbird.mozilla.org XPI_DISTNAMES= ${THUNDERBIRD_I18N_} PLIST?= ${WRKDIR}/plist PLISTF?= ${WRKDIR}/plist_files .include "${.CURDIR}/Makefile.option" .include .ifndef WITHOUT_SWITCHER RUN_DEPENDS+= xpi-quick-locale-switcher>=0:www/xpi-quick-locale-switcher .endif .include "${.CURDIR}/Makefile.lang" THUNDERBIRD_I18N_?= ${THUNDERBIRD_I18N} .for dist in ${XPI_DISTNAMES} XPI_ID_${dist}= langpack-${dist}@thunderbird.mozilla.org .endfor do-extract: @${RM} -rf ${WRKDIR} @${MKDIR} ${WRKDIR} ${WRKSRC} @for lang in ${THUNDERBIRD_I18N_}; do \ if ! (${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${_DISTDIR}/$$lang.xpi -d ${WRKSRC}/langpack-$$lang@thunderbird.mozilla.org);\ then \ exit 1; \ fi; \ cd ${WRKSRC}/langpack-$$lang@thunderbird.mozilla.org/; \ ${FIND} -H -s * ! -type d | \ ${SED} -e "s|^|lib/xpi/langpack-$$lang@thunderbird.mozilla.org/|" >> ${PLISTF}; \ done ${CAT} ${PLISTF} | ${SORT} >> ${PLIST} do-install: @${MKDIR} ${STAGEDIR}${XPI_LIBDIR} ${XPI_SLDIRS_ALL:S,^,${STAGEDIR},} cd ${WRKSRC}; ${PAX} -rw . ${STAGEDIR}${XPI_LIBDIR} ${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${WDIR}/ @for e in ${STAGEDIR}${XPI_LIBDIR}/${WDIR}; do \ for _dir in ${XPI_LINKFARMS} ; do \ ${LN} -sf $${_e##*/} ${STAGEDIR}$$_dir/ ${_Q} ; \ done \ done @${ECHO_CMD} '@exec ${INSTALL} -d ${XPI_SLDIRS_ALL:S,^${PREFIX},%D,}' ${_A} @${ECHO_CMD} '@exec for _dir in ${XPI_LINKFARMS} ; { \ ${LN} -sf ${XPI_LIBDIR}/${WDIR} $$_dir/ ${_Q}; }' ${_A} @${ECHO_CMD} '@unexec for _dir in ${XPI_LINKFARMS} ${XPI_LIBDIR}; { ${RM} -f $$_dir/${WDIR} ; }' ${_A} post-patch: ${FIND} ${WRKSRC} -name install.rdf -print0 | \ ${XARGS} -0L1 ${REINPLACE_CMD} -i '' -e '/ Index: head/mail/thunderbird-i18n/distinfo =================================================================== --- head/mail/thunderbird-i18n/distinfo (revision 413156) +++ head/mail/thunderbird-i18n/distinfo (revision 413157) @@ -1,116 +1,116 @@ -SHA256 (xpi/thunderbird-i18n-38.7.1/ar.xpi) = 7195e3361456016a93af844c3e13829090e684b33b7a5eba883d6723ee3f1e0b -SIZE (xpi/thunderbird-i18n-38.7.1/ar.xpi) = 475296 -SHA256 (xpi/thunderbird-i18n-38.7.1/ast.xpi) = 3280aa131a743172b24669d3cec7998d226df879b9752487c33224f7820623d8 -SIZE (xpi/thunderbird-i18n-38.7.1/ast.xpi) = 405873 -SHA256 (xpi/thunderbird-i18n-38.7.1/be.xpi) = 55580675d83a663874ad0747329944369b2ba1afe09f92f55cb42082e5a57d26 -SIZE (xpi/thunderbird-i18n-38.7.1/be.xpi) = 442452 -SHA256 (xpi/thunderbird-i18n-38.7.1/bg.xpi) = 53b6085720d7cbe9ba959f3569c5e70b02ddcff1e56931da3d762367335d0791 -SIZE (xpi/thunderbird-i18n-38.7.1/bg.xpi) = 506129 -SHA256 (xpi/thunderbird-i18n-38.7.1/bn-BD.xpi) = 670beb9301471022d9c72a118e6270685a16c1d6e0e9e0e7c6e883ce84060fa5 -SIZE (xpi/thunderbird-i18n-38.7.1/bn-BD.xpi) = 560626 -SHA256 (xpi/thunderbird-i18n-38.7.1/br.xpi) = 76a4e3b0195c41de3141e14fab7d7740d307ea997b0f76317db09f7ed0894a19 -SIZE (xpi/thunderbird-i18n-38.7.1/br.xpi) = 449766 -SHA256 (xpi/thunderbird-i18n-38.7.1/ca.xpi) = 3e3f9e15d223b61bf29dc392d904ffa3fd125659064e1ebd465ffc6b7f228c93 -SIZE (xpi/thunderbird-i18n-38.7.1/ca.xpi) = 450325 -SHA256 (xpi/thunderbird-i18n-38.7.1/cs.xpi) = 84051bc067e2bf0047904cbf911aac76cb4d72adefd24d9cf0100faf26222475 -SIZE (xpi/thunderbird-i18n-38.7.1/cs.xpi) = 448724 -SHA256 (xpi/thunderbird-i18n-38.7.1/cy.xpi) = 6149288309f5e3de512234ac51caf33e77b48a0b22e8d8d3a7b6f8f39a035568 -SIZE (xpi/thunderbird-i18n-38.7.1/cy.xpi) = 434848 -SHA256 (xpi/thunderbird-i18n-38.7.1/da.xpi) = 052c34f1e777b7bc77c222b91140a75ef078ac470d9050639636f21e6976f3ba -SIZE (xpi/thunderbird-i18n-38.7.1/da.xpi) = 425828 -SHA256 (xpi/thunderbird-i18n-38.7.1/de.xpi) = 2e2601496ef6bfe806fddc14662447489379e8fecc8a445bb4710ce0fcc9a96e -SIZE (xpi/thunderbird-i18n-38.7.1/de.xpi) = 429877 -SHA256 (xpi/thunderbird-i18n-38.7.1/dsb.xpi) = fc073d21c908444cf5b7b74b715c6ae1b968406ecae6b4892f4f2147757467d6 -SIZE (xpi/thunderbird-i18n-38.7.1/dsb.xpi) = 458487 -SHA256 (xpi/thunderbird-i18n-38.7.1/el.xpi) = d384c99f2300ab6bc74062da47aeea58bd85a29c3de2169bc897a20d343564b9 -SIZE (xpi/thunderbird-i18n-38.7.1/el.xpi) = 493490 -SHA256 (xpi/thunderbird-i18n-38.7.1/en-GB.xpi) = 4c7886f13e564bfbbbdb87fef47dbb1be7a603168f54413ff12f14c4288d9ec0 -SIZE (xpi/thunderbird-i18n-38.7.1/en-GB.xpi) = 416572 -SHA256 (xpi/thunderbird-i18n-38.7.1/en-US.xpi) = ba73342371a53b2db14fa4b118c78a21b8c9dbec10a814347f70b1517b3f9f42 -SIZE (xpi/thunderbird-i18n-38.7.1/en-US.xpi) = 416619 -SHA256 (xpi/thunderbird-i18n-38.7.1/es-AR.xpi) = 48a511afa481179219bb8086d1450c7887cea5e4858ecc4e7f08ab6afec21e68 -SIZE (xpi/thunderbird-i18n-38.7.1/es-AR.xpi) = 442641 -SHA256 (xpi/thunderbird-i18n-38.7.1/es-ES.xpi) = fff0472287354ffe527a95288b94482ded67e8a47526832e3446009f2bde889b -SIZE (xpi/thunderbird-i18n-38.7.1/es-ES.xpi) = 376066 -SHA256 (xpi/thunderbird-i18n-38.7.1/et.xpi) = 34ff6722cf592936108c4a1da8dcd5ad8a19ecc138c9916035c8775d358cac0f -SIZE (xpi/thunderbird-i18n-38.7.1/et.xpi) = 438262 -SHA256 (xpi/thunderbird-i18n-38.7.1/eu.xpi) = 507deded0cf0865423ad622d3c1245c80ced6398b31433cf4c3e2b96bb012a7f -SIZE (xpi/thunderbird-i18n-38.7.1/eu.xpi) = 434838 -SHA256 (xpi/thunderbird-i18n-38.7.1/fi.xpi) = 62aeb5591f267620ac90b8776146f344f23413587e15e47c5b6a12a9bf2d20b8 -SIZE (xpi/thunderbird-i18n-38.7.1/fi.xpi) = 438889 -SHA256 (xpi/thunderbird-i18n-38.7.1/fr.xpi) = 8d5194f8def094540340d838e8f7d22bc850d3c0447afc20ed9a5a073882e176 -SIZE (xpi/thunderbird-i18n-38.7.1/fr.xpi) = 448227 -SHA256 (xpi/thunderbird-i18n-38.7.1/fy-NL.xpi) = c00afdd5efcee615da606aa9589e03e705586d9956703af0646a2e7ebece1d63 -SIZE (xpi/thunderbird-i18n-38.7.1/fy-NL.xpi) = 442161 -SHA256 (xpi/thunderbird-i18n-38.7.1/ga-IE.xpi) = 957f58dd52fac4b11202541353a8ef0516c33c5a551e6d845100f53212d09141 -SIZE (xpi/thunderbird-i18n-38.7.1/ga-IE.xpi) = 457412 -SHA256 (xpi/thunderbird-i18n-38.7.1/gd.xpi) = 9a4c5a74f6dddefef15f22104a18a8b7f8102101b66846dbe06ad1f0eb830c5c -SIZE (xpi/thunderbird-i18n-38.7.1/gd.xpi) = 456317 -SHA256 (xpi/thunderbird-i18n-38.7.1/gl.xpi) = 024f9ca85276eb8f54a4746106a526ba5aa84a544fa2cd7e3ec6277fa5d615f9 -SIZE (xpi/thunderbird-i18n-38.7.1/gl.xpi) = 457839 -SHA256 (xpi/thunderbird-i18n-38.7.1/he.xpi) = 6851737d6c70a2ba4808247142593e509bff2ba143a44a02a0e5575302a31cb9 -SIZE (xpi/thunderbird-i18n-38.7.1/he.xpi) = 485867 -SHA256 (xpi/thunderbird-i18n-38.7.1/hr.xpi) = 714ad6af4445808a4c07910ac8eb8994464b356c1b369d3199bdc1c3e77e5e47 -SIZE (xpi/thunderbird-i18n-38.7.1/hr.xpi) = 440423 -SHA256 (xpi/thunderbird-i18n-38.7.1/hu.xpi) = 3fa6fc417ebeac6791566da44aedae8bc4f86b60cdf018b46e7a83801948a79f -SIZE (xpi/thunderbird-i18n-38.7.1/hu.xpi) = 457988 -SHA256 (xpi/thunderbird-i18n-38.7.1/hsb.xpi) = 5052842466b59418f77bfd1dc35a9440493eba423c2a1b8f8b97a264df89f045 -SIZE (xpi/thunderbird-i18n-38.7.1/hsb.xpi) = 456453 -SHA256 (xpi/thunderbird-i18n-38.7.1/hy-AM.xpi) = b6e37de04d71361c40e41cedf5eb3202b7e47d3b0cabef89daf129628884e621 -SIZE (xpi/thunderbird-i18n-38.7.1/hy-AM.xpi) = 500358 -SHA256 (xpi/thunderbird-i18n-38.7.1/id.xpi) = 1b2b5c1b80d0d693c906eb98c40fa33d8b705148c055e6a303b514d3fb9e2f61 -SIZE (xpi/thunderbird-i18n-38.7.1/id.xpi) = 483188 -SHA256 (xpi/thunderbird-i18n-38.7.1/is.xpi) = dee656222d46f9532f7b94088ec70d8e6570aed60f5613bf959838cf07728880 -SIZE (xpi/thunderbird-i18n-38.7.1/is.xpi) = 443009 -SHA256 (xpi/thunderbird-i18n-38.7.1/it.xpi) = 488481552b8f448cfa8a8edc57ae848bce6b70eb8547beec377d1c9d9e8aef0b -SIZE (xpi/thunderbird-i18n-38.7.1/it.xpi) = 369024 -SHA256 (xpi/thunderbird-i18n-38.7.1/ja.xpi) = 33b886b079bb9cdb444bf25300157dac292237f328ec9f7f2cb5013e5129e662 -SIZE (xpi/thunderbird-i18n-38.7.1/ja.xpi) = 492861 -SHA256 (xpi/thunderbird-i18n-38.7.1/ko.xpi) = f36e61c7cd1f1d94d8da3e3cfe8ee6dcf937749c243368c632a3edf599d9c747 -SIZE (xpi/thunderbird-i18n-38.7.1/ko.xpi) = 454853 -SHA256 (xpi/thunderbird-i18n-38.7.1/lt.xpi) = 1745e254b1bf60025d717cdafbf2248fe2fa6a9a7d2128674178967b36338f95 -SIZE (xpi/thunderbird-i18n-38.7.1/lt.xpi) = 454571 -SHA256 (xpi/thunderbird-i18n-38.7.1/nb-NO.xpi) = e83db8bca5d5554456afdb05f37bc4bb8a592e7db6f1b55da44b665e453011bb -SIZE (xpi/thunderbird-i18n-38.7.1/nb-NO.xpi) = 434340 -SHA256 (xpi/thunderbird-i18n-38.7.1/nl.xpi) = 97b293393f5b70a00f04d88085599361b860fea7c3cbb9326479ad555f7b45df -SIZE (xpi/thunderbird-i18n-38.7.1/nl.xpi) = 435108 -SHA256 (xpi/thunderbird-i18n-38.7.1/nn-NO.xpi) = 66734465ec5093727ae71de6a36a4af77ea673b96787b4d3587e37a00b878d90 -SIZE (xpi/thunderbird-i18n-38.7.1/nn-NO.xpi) = 436623 -SHA256 (xpi/thunderbird-i18n-38.7.1/pa-IN.xpi) = ef1622591337f90ce8a37dd02446f868541d67dc1538325a36958a28f7cc32d8 -SIZE (xpi/thunderbird-i18n-38.7.1/pa-IN.xpi) = 530462 -SHA256 (xpi/thunderbird-i18n-38.7.1/pl.xpi) = e7e84a334775419a547236fcccb7276936d3948007bf24b4e4cc67464ab58ebe -SIZE (xpi/thunderbird-i18n-38.7.1/pl.xpi) = 411509 -SHA256 (xpi/thunderbird-i18n-38.7.1/pt-BR.xpi) = 64a68a4ae6057a915a33eb0c2ba293d36d304a9fca7b6668364962fa10503a59 -SIZE (xpi/thunderbird-i18n-38.7.1/pt-BR.xpi) = 443752 -SHA256 (xpi/thunderbird-i18n-38.7.1/pt-PT.xpi) = e2e84fc58cf4ec61559446a78b951fd9b76a51e34be0b9bc8c345e1f976be661 -SIZE (xpi/thunderbird-i18n-38.7.1/pt-PT.xpi) = 442064 -SHA256 (xpi/thunderbird-i18n-38.7.1/rm.xpi) = 5f24a81001ddd0d933b9ac13aab0178335a87d6a7bac091a4816e308036dc19d -SIZE (xpi/thunderbird-i18n-38.7.1/rm.xpi) = 442112 -SHA256 (xpi/thunderbird-i18n-38.7.1/ro.xpi) = e36cd4c00613039ca998f3c5167835d42c00d0b39c62da3291e17e283e412774 -SIZE (xpi/thunderbird-i18n-38.7.1/ro.xpi) = 448349 -SHA256 (xpi/thunderbird-i18n-38.7.1/ru.xpi) = 21e3b2fad82d5e6efc8e8398410196b14e2dc834bf824ac0d4df7bfdcc62d184 -SIZE (xpi/thunderbird-i18n-38.7.1/ru.xpi) = 437592 -SHA256 (xpi/thunderbird-i18n-38.7.1/si.xpi) = cf44f53cbf1a561cf3b1fc7df5a84bc0bddb5a154dfa78b73393033d9a18ca6b -SIZE (xpi/thunderbird-i18n-38.7.1/si.xpi) = 535341 -SHA256 (xpi/thunderbird-i18n-38.7.1/sk.xpi) = 0ee327bd9c6b54c56726bb0e079be875fed97f727315522454e41e9a282687b9 -SIZE (xpi/thunderbird-i18n-38.7.1/sk.xpi) = 456606 -SHA256 (xpi/thunderbird-i18n-38.7.1/sl.xpi) = 1470606a7b723e61403a8fe9f1a293affce6d20d5b8648739fee11ed492f97ad -SIZE (xpi/thunderbird-i18n-38.7.1/sl.xpi) = 437847 -SHA256 (xpi/thunderbird-i18n-38.7.1/sq.xpi) = bbb49ccfac3d3967cb2c0df3330894900d117575f29764afec9bb2d258ecae25 -SIZE (xpi/thunderbird-i18n-38.7.1/sq.xpi) = 446897 -SHA256 (xpi/thunderbird-i18n-38.7.1/sr.xpi) = 25028d49311456a3970310b44f0c66d346e215b32aea116a76bec9371f1ab016 -SIZE (xpi/thunderbird-i18n-38.7.1/sr.xpi) = 543315 -SHA256 (xpi/thunderbird-i18n-38.7.1/sv-SE.xpi) = e301468c618084fb1b1b342a75a5e242af0327b13f4f345395b5ff1a0a078915 -SIZE (xpi/thunderbird-i18n-38.7.1/sv-SE.xpi) = 439634 -SHA256 (xpi/thunderbird-i18n-38.7.1/ta-LK.xpi) = 8ed37d62a883a65221cd5f1928d915545ad4f4987a89f9c097f07788d772e183 -SIZE (xpi/thunderbird-i18n-38.7.1/ta-LK.xpi) = 558737 -SHA256 (xpi/thunderbird-i18n-38.7.1/tr.xpi) = aa8aff97b1dfe81491285feffa3edc98ad5914e5e6e0dd7a49f595975c9cefcb -SIZE (xpi/thunderbird-i18n-38.7.1/tr.xpi) = 447799 -SHA256 (xpi/thunderbird-i18n-38.7.1/uk.xpi) = e8eaddfda4d0897417d004da24a58bbb2904b2b95a40f2137ce47261650fb26b -SIZE (xpi/thunderbird-i18n-38.7.1/uk.xpi) = 509601 -SHA256 (xpi/thunderbird-i18n-38.7.1/vi.xpi) = 27300ff5b00541501fe6524bebc3de05b2ae70b25132240aa421871b344ce322 -SIZE (xpi/thunderbird-i18n-38.7.1/vi.xpi) = 519843 -SHA256 (xpi/thunderbird-i18n-38.7.1/zh-CN.xpi) = 26a231f0d6e938bb8453eef3aa14ce9c70dccdf2305ac36677faa11fafcc1472 -SIZE (xpi/thunderbird-i18n-38.7.1/zh-CN.xpi) = 466412 -SHA256 (xpi/thunderbird-i18n-38.7.1/zh-TW.xpi) = 17e4fb9414e4774acbdfb0690ce1eb8a68e888bb8f328b3d6fc79b0bb54dcb13 -SIZE (xpi/thunderbird-i18n-38.7.1/zh-TW.xpi) = 466661 +SHA256 (xpi/thunderbird-i18n-45.0/ar.xpi) = fb2149bf73d5ac70ed902634eb30171835dabaa1a320aa0761057d5a1833bef9 +SIZE (xpi/thunderbird-i18n-45.0/ar.xpi) = 490773 +SHA256 (xpi/thunderbird-i18n-45.0/ast.xpi) = aa00a32977f5f6181f7a5e7d97c5e7518e69ab7d4babd93c2e60e3d34a5b849f +SIZE (xpi/thunderbird-i18n-45.0/ast.xpi) = 428057 +SHA256 (xpi/thunderbird-i18n-45.0/be.xpi) = 76fd0ca0105b899b136499eca33910a8a769e0cf2b87ad5c63024b4fadd22313 +SIZE (xpi/thunderbird-i18n-45.0/be.xpi) = 469094 +SHA256 (xpi/thunderbird-i18n-45.0/bg.xpi) = 9496be1bddc7739269880d2add7ba14e7a82c7a51bbd158f54f5a86a17d2b030 +SIZE (xpi/thunderbird-i18n-45.0/bg.xpi) = 524297 +SHA256 (xpi/thunderbird-i18n-45.0/bn-BD.xpi) = 9960e4a3900b7fa58e9b23260519c14cd13c57c7613a46d67192070d8a6066cb +SIZE (xpi/thunderbird-i18n-45.0/bn-BD.xpi) = 581437 +SHA256 (xpi/thunderbird-i18n-45.0/br.xpi) = b0a32d8f1a587417624c2710433d004a3a8cf7df6614b47af7eda3a7c49aee9c +SIZE (xpi/thunderbird-i18n-45.0/br.xpi) = 465998 +SHA256 (xpi/thunderbird-i18n-45.0/ca.xpi) = 0cc24edb880a8d956854edf9162c5066f4159b7389d0764024e6b721c9d7d664 +SIZE (xpi/thunderbird-i18n-45.0/ca.xpi) = 467978 +SHA256 (xpi/thunderbird-i18n-45.0/cs.xpi) = dea9eab64d80ea8f1f190cb534e15e138a03707932398f74be4419f543734eaa +SIZE (xpi/thunderbird-i18n-45.0/cs.xpi) = 474326 +SHA256 (xpi/thunderbird-i18n-45.0/cy.xpi) = be109dd5fa1c73afbada379a7f09c85088c4caaf0ecfbc34ed9a6a76ce5bbbc6 +SIZE (xpi/thunderbird-i18n-45.0/cy.xpi) = 456119 +SHA256 (xpi/thunderbird-i18n-45.0/da.xpi) = a2582eb709e1eda1d1d790d3e825f1de874216be86dc69bf09216ff2e3cc1bee +SIZE (xpi/thunderbird-i18n-45.0/da.xpi) = 445593 +SHA256 (xpi/thunderbird-i18n-45.0/de.xpi) = c7415d7d2d7add3d0a99d9b8503291bf012b0a0e8628fe779365a19cd0a00105 +SIZE (xpi/thunderbird-i18n-45.0/de.xpi) = 451954 +SHA256 (xpi/thunderbird-i18n-45.0/dsb.xpi) = 689655b8f8916eeecf1e966d342e6772500fd872f9ebb688e7344d19b1debdc5 +SIZE (xpi/thunderbird-i18n-45.0/dsb.xpi) = 481646 +SHA256 (xpi/thunderbird-i18n-45.0/el.xpi) = 7e5badcfa2bab9c87abaab82c1b05f29727cbc851383a64792690554776eadd9 +SIZE (xpi/thunderbird-i18n-45.0/el.xpi) = 514355 +SHA256 (xpi/thunderbird-i18n-45.0/en-GB.xpi) = 5d268a207232ecae0b2cea61d4cc8bb40334f21d200443778bad617ff1b25f23 +SIZE (xpi/thunderbird-i18n-45.0/en-GB.xpi) = 437602 +SHA256 (xpi/thunderbird-i18n-45.0/en-US.xpi) = 1260c20185c3252b25488c0d3b463937078ae481456b35f1926473049dd442ff +SIZE (xpi/thunderbird-i18n-45.0/en-US.xpi) = 435471 +SHA256 (xpi/thunderbird-i18n-45.0/es-AR.xpi) = b70cfa37a653f0a8968006e108721729173f80270e29bac1a53d21e052c626c1 +SIZE (xpi/thunderbird-i18n-45.0/es-AR.xpi) = 464682 +SHA256 (xpi/thunderbird-i18n-45.0/es-ES.xpi) = 106ddf25bc9a62d54f943df770ed2650d2f500c7abbd5868af455f3eae3bd3fd +SIZE (xpi/thunderbird-i18n-45.0/es-ES.xpi) = 387998 +SHA256 (xpi/thunderbird-i18n-45.0/et.xpi) = 62f42758f751f506805f7e876a6a17ff93eb6e322a4d5fac4d012d018250ea40 +SIZE (xpi/thunderbird-i18n-45.0/et.xpi) = 458416 +SHA256 (xpi/thunderbird-i18n-45.0/eu.xpi) = abac313e1ae3a2bae9ff5c56e4b207a6ba71a77db2cfcf5cd459c8c9cb6e7979 +SIZE (xpi/thunderbird-i18n-45.0/eu.xpi) = 456706 +SHA256 (xpi/thunderbird-i18n-45.0/fi.xpi) = afb758875d3935c2a06205965d69300f6a0f63ac2f1ed50b0ab6338139a1362d +SIZE (xpi/thunderbird-i18n-45.0/fi.xpi) = 458334 +SHA256 (xpi/thunderbird-i18n-45.0/fr.xpi) = 15bd3883903231914d8acebed9593f00137826f59dc45943354f2feb9cca5621 +SIZE (xpi/thunderbird-i18n-45.0/fr.xpi) = 475464 +SHA256 (xpi/thunderbird-i18n-45.0/fy-NL.xpi) = 03af0e3471172abd34d62c4d8f28b59a3c16ec7b93d66b831d0faa853c80358b +SIZE (xpi/thunderbird-i18n-45.0/fy-NL.xpi) = 464755 +SHA256 (xpi/thunderbird-i18n-45.0/ga-IE.xpi) = 3bd85a997f6c020e6c814a7895d431aa6df1b5392dec65a6ce809c557538b137 +SIZE (xpi/thunderbird-i18n-45.0/ga-IE.xpi) = 480315 +SHA256 (xpi/thunderbird-i18n-45.0/gd.xpi) = 96ab01f5658b6f3f774c6f754acdf9731c3a64c462d72b4514035e426fcefb05 +SIZE (xpi/thunderbird-i18n-45.0/gd.xpi) = 478295 +SHA256 (xpi/thunderbird-i18n-45.0/gl.xpi) = 6cae6fc66d2a3a8de17985bdf15c6ea559d54656c5238ba76d1e80312a9e5d32 +SIZE (xpi/thunderbird-i18n-45.0/gl.xpi) = 478578 +SHA256 (xpi/thunderbird-i18n-45.0/he.xpi) = af1d9f6b687773bf671012b73a16be1511d71661d9b47ebbf6b715449ba8e8db +SIZE (xpi/thunderbird-i18n-45.0/he.xpi) = 497960 +SHA256 (xpi/thunderbird-i18n-45.0/hr.xpi) = a6379f9aa6b2420bad3e03de51744fda3f281360d32fb20393458cb91d3e6dc1 +SIZE (xpi/thunderbird-i18n-45.0/hr.xpi) = 463957 +SHA256 (xpi/thunderbird-i18n-45.0/hsb.xpi) = 353987805a44f12e896ae2035956d5270f1d878a3882f7473c593dd7bb5dfc0b +SIZE (xpi/thunderbird-i18n-45.0/hsb.xpi) = 479412 +SHA256 (xpi/thunderbird-i18n-45.0/hu.xpi) = cf3833bfe2ba2629aea229cba992e47e2f44ba67dbc417c5356cbf1b8fe8326f +SIZE (xpi/thunderbird-i18n-45.0/hu.xpi) = 479583 +SHA256 (xpi/thunderbird-i18n-45.0/hy-AM.xpi) = 5d10aee8ee42e2c191844f3195b81e9bddd0f409957415f8f7bd0d527a6ded13 +SIZE (xpi/thunderbird-i18n-45.0/hy-AM.xpi) = 518881 +SHA256 (xpi/thunderbird-i18n-45.0/id.xpi) = 21397c9ccb1c8a19873ee621affaa2eadc0d48e43baa590476d0c7394ad7e1cd +SIZE (xpi/thunderbird-i18n-45.0/id.xpi) = 499980 +SHA256 (xpi/thunderbird-i18n-45.0/is.xpi) = c4a78c55eff843258ca45a81437fa350453f1344ce704960965e1bef2a43aab8 +SIZE (xpi/thunderbird-i18n-45.0/is.xpi) = 462189 +SHA256 (xpi/thunderbird-i18n-45.0/it.xpi) = ce3182539224f6d7ab6b3f5aab0c60c2552f91b8836c20b523f1bc1faf77043a +SIZE (xpi/thunderbird-i18n-45.0/it.xpi) = 376887 +SHA256 (xpi/thunderbird-i18n-45.0/ja.xpi) = 4dbec26b6449bcc803442fa78b90386296f548631481a738339f6125a39cfc0f +SIZE (xpi/thunderbird-i18n-45.0/ja.xpi) = 519550 +SHA256 (xpi/thunderbird-i18n-45.0/ko.xpi) = 50f7ecd392dfce7fc35882d9c1c0962f51a729dd7dae128d53969c85b8f2dacf +SIZE (xpi/thunderbird-i18n-45.0/ko.xpi) = 487416 +SHA256 (xpi/thunderbird-i18n-45.0/lt.xpi) = 7b59810bad64dc6b02ec9d1cc9a22b639ec8c35f17394147d75088e326ced3e0 +SIZE (xpi/thunderbird-i18n-45.0/lt.xpi) = 477734 +SHA256 (xpi/thunderbird-i18n-45.0/nb-NO.xpi) = f1f395d73066d37823a3520ef09d8bc781bbb308555daff3d82208d4c9fa10cb +SIZE (xpi/thunderbird-i18n-45.0/nb-NO.xpi) = 460010 +SHA256 (xpi/thunderbird-i18n-45.0/nl.xpi) = 8df61ee2940defbad67442cbdc4cd30e4cb9364b7188066933b1d867216fc96e +SIZE (xpi/thunderbird-i18n-45.0/nl.xpi) = 456662 +SHA256 (xpi/thunderbird-i18n-45.0/nn-NO.xpi) = bf89fbd5015da7c4e327e3959085788e735aab93f85dc891b9ee7609797a797b +SIZE (xpi/thunderbird-i18n-45.0/nn-NO.xpi) = 460878 +SHA256 (xpi/thunderbird-i18n-45.0/pa-IN.xpi) = 90cef5c55d1d9428e908e52921214cb89022db22d20324cda571f5067ce6adc2 +SIZE (xpi/thunderbird-i18n-45.0/pa-IN.xpi) = 551066 +SHA256 (xpi/thunderbird-i18n-45.0/pl.xpi) = 5ca001ceb3b6fa049c7d369ef6feca0ca635ffdd3fc602058e48cf7547ebfb58 +SIZE (xpi/thunderbird-i18n-45.0/pl.xpi) = 423865 +SHA256 (xpi/thunderbird-i18n-45.0/pt-BR.xpi) = 9551e881a82960df63b47744d14a9dd10c544e275e1198fdad47202efb827e74 +SIZE (xpi/thunderbird-i18n-45.0/pt-BR.xpi) = 464681 +SHA256 (xpi/thunderbird-i18n-45.0/pt-PT.xpi) = 9774d7df25cbdea8214789990eca45b2a6b3afb4db95090b0b6749fafeb63fa0 +SIZE (xpi/thunderbird-i18n-45.0/pt-PT.xpi) = 463749 +SHA256 (xpi/thunderbird-i18n-45.0/rm.xpi) = f5d87085b9a730d0737b27fde6407dce7b90957d4e373a747e3379e1c16ff5e0 +SIZE (xpi/thunderbird-i18n-45.0/rm.xpi) = 462648 +SHA256 (xpi/thunderbird-i18n-45.0/ro.xpi) = d975b76899782465673dbb1c4174b28c017342ca3d38f6fa3a2973a5b8817ca0 +SIZE (xpi/thunderbird-i18n-45.0/ro.xpi) = 468516 +SHA256 (xpi/thunderbird-i18n-45.0/ru.xpi) = 7e61145bb880e12c1205f8235f4f78c6e11e6e1c83e57d9fff440e1730da6e29 +SIZE (xpi/thunderbird-i18n-45.0/ru.xpi) = 463889 +SHA256 (xpi/thunderbird-i18n-45.0/si.xpi) = a35e7115b8c11c5f043905e2b911bc4e7a831b3be2adb8f1f77e1d24c9cb6f01 +SIZE (xpi/thunderbird-i18n-45.0/si.xpi) = 555993 +SHA256 (xpi/thunderbird-i18n-45.0/sk.xpi) = b3ef0caeeb8b388b5a5141cd1cf2022f0446a4de7548a80454932533f2d5c09c +SIZE (xpi/thunderbird-i18n-45.0/sk.xpi) = 481490 +SHA256 (xpi/thunderbird-i18n-45.0/sl.xpi) = 83aa064ecc7d667d9a718d2c91ee3588093e7df9c4a81b84cca11d88301c5458 +SIZE (xpi/thunderbird-i18n-45.0/sl.xpi) = 462779 +SHA256 (xpi/thunderbird-i18n-45.0/sq.xpi) = f27cbf31f7077e8f23094519f18b1fdb47dc4c2daad61d3c948df42a33fb043f +SIZE (xpi/thunderbird-i18n-45.0/sq.xpi) = 469533 +SHA256 (xpi/thunderbird-i18n-45.0/sr.xpi) = f243ac51c842acdbd2d2b8f6ffbd11c637e859604de87c45ff483c177ae7c45c +SIZE (xpi/thunderbird-i18n-45.0/sr.xpi) = 565463 +SHA256 (xpi/thunderbird-i18n-45.0/sv-SE.xpi) = c486c44b0eae6f930cf65322fa80ab5980275fe4e8c40a96df6e4fa7e5be48cc +SIZE (xpi/thunderbird-i18n-45.0/sv-SE.xpi) = 465432 +SHA256 (xpi/thunderbird-i18n-45.0/ta-LK.xpi) = d8acc86335f62cc0a51ac7021696c26ad78b4776e9069b12dbc80ef5affd45a4 +SIZE (xpi/thunderbird-i18n-45.0/ta-LK.xpi) = 579217 +SHA256 (xpi/thunderbird-i18n-45.0/tr.xpi) = fc84b4a72222b0bf9bd0f0dd22b8aefaade996a6a3a73aac2e378ad92edbb780 +SIZE (xpi/thunderbird-i18n-45.0/tr.xpi) = 467620 +SHA256 (xpi/thunderbird-i18n-45.0/uk.xpi) = dc05607f77ceed5e07b7d0432d149e420edb955b72ebc3c6465a19b98799e7af +SIZE (xpi/thunderbird-i18n-45.0/uk.xpi) = 536436 +SHA256 (xpi/thunderbird-i18n-45.0/vi.xpi) = 91fa505c9eaf6fd7c0139cfbe2358595078114767d0220f33309442e2e37fada +SIZE (xpi/thunderbird-i18n-45.0/vi.xpi) = 540496 +SHA256 (xpi/thunderbird-i18n-45.0/zh-CN.xpi) = 3f5bc2c5d4c21d2856591dd1de864e53105ae6a2decaee58ed27a66a52188e21 +SIZE (xpi/thunderbird-i18n-45.0/zh-CN.xpi) = 489208 +SHA256 (xpi/thunderbird-i18n-45.0/zh-TW.xpi) = 2e78b6ef421619df69edde19e1995a2d54c8726539ba38b3afe22b96267008ea +SIZE (xpi/thunderbird-i18n-45.0/zh-TW.xpi) = 490848