Browse Source

build fixes and l10n sync

Frank-Rainer Grahl 3 weeks ago
parent
commit
8fa1495291

+ 280 - 0
l10n-release/patches/1902851-l10n-25320.patch

@@ -520,6 +520,31 @@ diff --git a/fr/suite/chrome/common/pref/pref-colors.dtd b/fr/suite/chrome/commo
 +<!ENTITY prefersColorSchemeDisabled.label       "Ne pas spécifier de jeu de couleurs préféré">
 +<!ENTITY prefersColorSchemeDisabled.accesskey   "N">
 +<!ENTITY prefersColorSchemeWarning              "AVERTISSEMENT : ne pas spécifier de jeu de couleurs préféré peut empêcher certains services ou sites web de fonctionner correctement.">
+diff --git a/fr/suite/chrome/common/viewZoomOverlay.properties b/fr/suite/chrome/common/viewZoomOverlay.properties
+--- a/fr/suite/chrome/common/viewZoomOverlay.properties
++++ b/fr/suite/chrome/common/viewZoomOverlay.properties
+@@ -9,19 +9,19 @@
+ 
+ # LOCALIZATION NOTE (fullZoom,textZoom): are never available at the same time
+ fullZoom.label=Zoom (%zoom% %)
+ fullZoom.accesskey=Z
+ textZoom.label=Zoom texte (%zoom% %)
+ textZoom.accesskey=Z
+ 
+ # labels and accesskeys to emphasize the 100 % and 200 % entries
+-zoom.100.label=100 % (taille originale)
++zoom.100.label=100 % (taille originale)
+ zoom.100.accesskey=t
+-zoom.200.label=200 % (taille double)
++zoom.200.label=200 % (taille double)
+ zoom.200.accesskey=d
+ 
+ # labels and accesskeys to emphasize the minimum and maximum boundaries
+ zoom.min.label=%zoom% % (Minimum)
+ zoom.min.accesskey=n
+ zoom.max.label=%zoom% % (Maximum)
+ zoom.max.accesskey=x
+ 
 diff --git a/fr/suite/chrome/mailnews/addressbook/abCardOverlay.dtd b/fr/suite/chrome/mailnews/addressbook/abCardOverlay.dtd
 --- a/fr/suite/chrome/mailnews/addressbook/abCardOverlay.dtd
 +++ b/fr/suite/chrome/mailnews/addressbook/abCardOverlay.dtd
@@ -544,6 +569,220 @@ diff --git a/fr/suite/chrome/mailnews/addressbook/abCardOverlay.dtd b/fr/suite/c
  <!ENTITY Photo.tab                      "Photo">
  <!ENTITY Photo.accesskey                "h">
  <!ENTITY GenericPhoto.label             "Photo générique">
+diff --git a/fr/suite/chrome/mailnews/localMsgs.properties b/fr/suite/chrome/mailnews/localMsgs.properties
+--- a/fr/suite/chrome/mailnews/localMsgs.properties
++++ b/fr/suite/chrome/mailnews/localMsgs.properties
+@@ -131,17 +131,17 @@ pop3MoveFolderToTrash=Voulez-vous vraiment supprimer le dossier « %S » ?
+ pop3DeleteFolderDialogTitle=Supprimer le dossier
+ 
+ pop3DeleteFolderButtonLabel=&Supprimer le dossier
+ 
+ pop3AuthInternalError=Une erreur interne est survenue durant l’authentification au serveur POP3. C’est une erreur interne et inattendue de l’application. Veuillez signaler ce bug.
+ 
+ pop3AuthChangeEncryptToPlainNoSSL=Ce serveur POP3 ne semble pas gérer les mots de passe chiffrés. Si vous venez juste de configurer ce compte, veuillez modifier la « Méthode d’authentification » pour « Mot de passe, transmission non sécurisée » dans le menu « Paramètres des comptes | Paramètres serveur ». Si cela fonctionnait auparavant et que cela échoue à présent, il se pourrait que quelqu’un ait dérobé votre mot de passe.
+ 
+-pop3AuthChangeEncryptToPlainSSL=Ce serveur POP3 ne semble pas gérer les mots de passe chiffrés. Si vous venez juste de configurer ce compte, veuillez modifier la « Méthode d’authentification » pour « Mot de passe normal » dans le menu « Paramètres des comptes | Paramètres serveur ». Si cela fonctionnait auparavant et que cela échoue à présent, veuillez contacter votre administrateur de messagerie ou votre fournisseur.
++pop3AuthChangeEncryptToPlainSSL=Ce serveur POP3 ne semble pas gérer les mots de passe chiffrés. Si vous venez juste de configurer ce compte, veuillez modifier la « Méthode d’authentification » pour « Mot de passe normal » dans le menu « Paramètres des comptes | Paramètres serveur ». Si cela fonctionnait auparavant et que cela échoue à présent, veuillez contacter votre administrateur de messagerie ou votre fournisseur.
+ 
+ pop3AuthChangePlainToEncrypt=Ce serveur POP3 n’autorise pas les mots de passe non chiffrés. Veuillez modifier la « Méthode d’authentification » pour « Mot de passe chiffré » dans le menu « Paramètres des comptes | Paramètres serveur ».
+ 
+ # Authentication server caps and pref don't match
+ pop3AuthMechNotSupported=Le serveur ne gère pas la méthode d’authentification sélectionnée. Veuillez modifier la « Méthode d’authentification » dans le menu « Paramètres des comptes | Paramètres serveur ».
+ 
+ # Status - Could not log in to GSSAPI, and it was the only method
+ pop3GssapiFailure=Le ticket Kerberos/GSSAPI n’a pas été accepté par le serveur POP. Veuillez vérifier que vous êtes connecté dans le flux Kerberos/GSSAPI.
+diff --git a/fr/suite/extensions/irc/chrome/about.dtd b/fr/suite/extensions/irc/chrome/about.dtd
+--- a/fr/suite/extensions/irc/chrome/about.dtd
++++ b/fr/suite/extensions/irc/chrome/about.dtd
+@@ -4,14 +4,14 @@
+ 
+ <!ENTITY window.title  "À propos de ChatZilla">
+ 
+ <!ENTITY chatzilla.label       "ChatZilla">
+ <!ENTITY version.unknown.label "Version inconnue">
+ <!ENTITY version.known.label   "Version &#37;S">
+ <!ENTITY description.label     "Un client IRC (Internet Relay Chat) simple, facile d’utilisation et hautement personnalisable.">
+ 
+-<!ENTITY homepage.label    "Visitez le site Web de ChatZilla">
++<!ENTITY homepage.label    "Visitez le site web de ChatZilla">
+ <!ENTITY copyversion.label "Détails de la version">
+ 
+ <!ENTITY section.core.label    "Équipe de développement :">
+ <!ENTITY section.locale.label  "Localisation :">
+ <!ENTITY section.contrib.label "Contributeurs :">
+diff --git a/fr/suite/extensions/irc/chrome/chatzilla.properties b/fr/suite/extensions/irc/chrome/chatzilla.properties
+--- a/fr/suite/extensions/irc/chrome/chatzilla.properties
++++ b/fr/suite/extensions/irc/chrome/chatzilla.properties
+@@ -41,17 +41,17 @@ msg.confirm = Confirmation
+ #     foo.bar = Some text used in &brandFullName;!
+ #
+ ### End of notes ###
+ 
+ cmd.about.label = À propos de ChatZilla
+ cmd.about.help  = Affiche les notes de version de ChatZilla.
+ 
+ cmd.alias.helpUsage = [<alias-name> [<command-list>]]
+-cmd.alias.help   = Définit <alias-name> comme un alias de la liste de commandes spécifiées par <command-list> et séparées par des point-virgules (« ; »). Si <command-list> est un moins (« - »), l’alias sera supprimé ; s’il est omis, l’alias sera affiché. Si <alias-name> n’est pas renseigné, la liste des alias sera affichée.
++cmd.alias.help   = Définit <alias-name> comme un alias de la liste de commandes spécifiées par <command-list> et séparées par des point-virgules (« ; »). Si <command-list> est un moins (« - »), l’alias sera supprimé ; s’il est omis, l’alias sera affiché. Si <alias-name> n’est pas renseigné, la liste des alias sera affichée.
+ 
+ cmd.attach.helpUsage = <irc-url>
+ cmd.attach.help   = Connexion au serveur ou réseau IRC spécifié par <url>. Si vous y étiez déjà connecté, l’onglet correspondant sera affiché ou recréé s’il avait été supprimé. irc:// n’est pas nécessaire dans <url>. Exemples : /attach moznet, /attach moznet/chatzilla, et /attach irc.mozilla.org/mozbot,isnick.
+ 
+ cmd.away.label  = Indisponible (défaut)
+ # LOCALIZATION NOTE (cmd.away.format):
+ # Do not localize $reason
+ cmd.away.format = Indisponible ($reason)
+@@ -160,28 +160,28 @@ cmd.dcc-show-file.helpUsage = <file>
+ cmd.dcc-show-file.help   = Ouvre le dossier contenant le fichier téléchargé.
+ 
+ cmd.delete-view.key    = accel W
+ cmd.delete-view.label  = &Fermer l’onglet
+ cmd.delete-view.helpUsage = [<view>]
+ cmd.delete-view.help   = Supprime *toute trace* de l’onglet courant. Si une vue de salon est supprimée de cette façon, vous quittez également le salon.
+ 
+ cmd.dehop.label  = Retirer le statut Half-Op
+-cmd.dehop.helpUsage = <nickname> [<...>]
++cmd.dehop.helpUsage = <nickname> [<…>]
+ cmd.dehop.help   = Retire le statut Half-Op à l’utilisateur <nickname> dans le salon courant. Nécessite le statut Opérateur.
+ 
+ cmd.deop.label  = Retirer le statut Opérateur
+-cmd.deop.helpUsage = <nickname> [<...>]
++cmd.deop.helpUsage = <nickname> [<…>]
+ cmd.deop.help   = Retire le statut Opérateur à l’utilisateur <nickname> dans le salon courant. Nécessite le statut Opérateur. L’omission de <description>, affiche la description actuelle.
+ 
+ cmd.desc.helpUsage = [<description>]
+ cmd.desc.help   = Change la ligne « ircname » qui est renvoyée lors d’un /whois sur vous. À spécifier *avant* de se connecter à un serveur. Si vous omettez <description>, la description courante est affichée.
+ 
+ cmd.devoice.label  = Retirer le statut Voice
+-cmd.devoice.helpUsage = <nickname> [<...>]
++cmd.devoice.helpUsage = <nickname> [<…>]
+ cmd.devoice.help   = Retire le statut Voice à l’utilisateur <nickname> dans le salon courant. Nécessite le statut Opérateur (ou le statut Half-Op).
+ 
+ # LOCALIZATION NOTE (cmd.disconnect.format):
+ # Do not localize $networkName
+ cmd.disconnect.format = Déconnexion du serveur $networkName
+ cmd.disconnect.label  = &Déconnexion
+ cmd.disconnect.helpUsage = [<reason>]
+ cmd.disconnect.help   = Vous déconnecte du serveur associé à l’onglet actif en donnant la raison <reason> si elle est spécifiée.
+@@ -268,17 +268,17 @@ cmd.help.help   = Affiche une aide sur toutes les commandes contenant <pattern>. Si <pattern> n’est pas renseigné, affiche toutes les commandes.
+ 
+ cmd.hide-view.label  = Cac&her l’onglet
+ cmd.hide-view.helpUsage = [<view>]
+ cmd.hide-view.help   = Cache l’onglet correspondant (ou l’onglet courant si <view> est omis). L’onglet réapparaîtra avec son contenu dès qu’il y aura de l’activité.
+ 
+ cmd.homepage.label = Page d’accueil de ChatZilla
+ 
+ cmd.hop.label  = Donner le statut Half-op
+-cmd.hop.helpUsage = <nickname> [<...>]
++cmd.hop.helpUsage = <nickname> [<…>]
+ cmd.hop.help   = Donne le statut de Half-Op à l’utilisateur <nickname> dans le salon courant. Nécessite le statut Opérateur.
+ 
+ # LOCALIZATION NOTE (cmd.reconnect.format):
+ # Do not localize $networkName
+ cmd.reconnect.format = Reconnexion sur $networkName
+ cmd.reconnect.label  = &Reconnexion
+ cmd.reconnect.helpUsage = [<reason>]
+ cmd.reconnect.help   = Reconnecte ChatZilla au réseau de l’onglet actuel si la commande est exécutée en fournissant une raison <reason> lors de la déconnexion ou la raison par défaut si <reason> n’est pas spécifié.
+@@ -408,17 +408,17 @@ cmd.map.help = Cette commande est similaire à /links, mais elle fournis une cartographie du réseau d’un réseau IRC. Son utilisation se limite principalement à ce qui a trait au routage.
+ cmd.match-users.helpUsage = <mask>
+ cmd.match-users.help   = Affiche la liste de tous les utilisateurs dont le masque d’hôte correspond à <mask>.
+ 
+ cmd.me.helpUsage = <action>
+ cmd.me.help   = Envoie le texte contenu dans <action> comme une affirmation à la troisième personne.
+ 
+ cmd.motd.help   = Affiche le « Message du jour » (Message of the Day) qui contient habituellement tant des informations à propos du serveur et du réseau que des règles d’utilisation.
+ 
+-cmd.mode.helpUsage = [<target>] [<modestr> [<param> [<...>]]]
++cmd.mode.helpUsage = [<target>] [<modestr> [<param> [<…>]]]
+ cmd.mode.help   = Change le mode de l’utilisateur ou le salon pointé par <target>, en utilisant <modestr> ainsi que les éventuels paramètres spécifiés dans <param>. Si la commande est utilisée depuis l’onglet d’un salon, <target> être omis. Pour connaître la liste des modes, voyez http://irchelp.org.
+ 
+ cmd.motif.helpUsage = [<motif>]
+ cmd.motif.help   = Définit la feuille de style à utiliser. <motif> peut représenter une adresse URL, une adresse de fichier local ou un raccourci parmi : « default », « light » ou « dark ». Consultez le site de ChatZilla <http://www.mozilla.org/projects/rt-messaging/chatzilla/> pour plus d’informations sur la création de styles pour ChatZilla. Voir aussi |network-motif|, |channel-motif| et |user-motif|.
+ 
+ cmd.motif-dark.label = Style sombre
+ cmd.motif-light.label = Style clair
+ 
+@@ -441,24 +441,24 @@ cmd.network-motif.help   = Spécifie la feuille de style à utiliser pour l’onglet du réseau <network>. <motif> peut être une adresse pointant sur une feuille de style .css ou un des raccourcis suivant : « dark » ou « light ». Si <motif> est un moins (« - »), le style sera remplacé par le style par défaut. Si <network> est omis, la commande s’appliquera au réseau courant. Consultez le site de ChatZilla <http://www.mozilla.org/projects/rt-messaging/chatzilla/> pour plus d’informations sur la création de styles pour ChatZilla. Voir aussi |motif|.
+ 
+ cmd.network-pref.helpUsage = [<pref-name> [<pref-value>]]
+ cmd.network-pref.help    = Spécifie la valeur de la préférence nommée <pref-name> à la valeur <pref-value> sur le réseau en cours. Si <pref-value> est omis, la valeur actuelle de <pref-name> sera affichée. Si <pref-name> commence avec un moins (« - »), alors la préférence sera ramenée à sa valeur par défaut.
+ 
+ cmd.nick.label  = Changer le pseudonyme…
+ cmd.nick.helpUsage = [<nickname>]
+ cmd.nick.help   = Change votre nom utilisateur. Si |nickname| est omis, un avertissement s’affiche.
+ 
+-cmd.notify.helpUsage = [<nickname> [<...>]]
++cmd.notify.helpUsage = [<nickname> [<…>]]
+ cmd.notify.help   = Sans paramètre, /notify vous informe sur l’état de connexion des utilisateurs de votre liste de notification. Si un ou plusieurs pseudonymes <nickname> sont spécifiés, ils seront ajoutés à la liste, et s’ils sont déjà présents, ils seront supprimés.
+ 
+ cmd.notice.helpUsage = <nickname> <message>
+ cmd.notice.help   = Envoie <message> à <nickname>.
+ 
+ cmd.op.label  = Donner le statut Opérateur
+-cmd.op.helpUsage = <nickname> [<...>]
++cmd.op.helpUsage = <nickname> [<…>]
+ cmd.op.help   = Donne le statut Opérateur à <nickname> sur le salon courant. Nécessite le statut Opérateur.
+ 
+ cmd.open-at-startup.helpUsage = [<toggle>]
+ cmd.open-at-startup.help   = Utilisez-le pour ajouter l’onglet courant à la liste des onglets à ouvrir au démarrage. Si <toggle> est omis, le statut de l’onglet actuel sera affiché. <toggle> peut prendre les valeurs suivantes : yes, on, true, 1, no, off, false, 0 ou toggle pour modifier l’état actuel.
+ 
+ cmd.oper.helpUsage = <opername> [<password>]
+ cmd.oper.help   = Demande les droits opérateur IRC (IRCOp) sur le serveur. Si <password> n’est pas précisé, il vous sera demandé en privé (et personne ne pourra le voir quand vous le saisirez, pas même vous).
+ 
+@@ -563,20 +563,20 @@ cmd.uninstall-plugin.helpUsage = <plugin
+ cmd.uninstall-plugin.help   = Désinstalle un plugin ChatZilla pour vous.
+ 
+ cmd.unstalk.helpUsage = <text>
+ cmd.unstalk.help   = Supprime un mot de la liste des mots pour lesquels vous recevez une alerte.
+ 
+ cmd.urls.helpUsage = [<number>]
+ cmd.urls.help   = Affiche les dernières adresses vues par ChatZilla. Spécifier <number> permet de choisir le nombre d’adresses à afficher, par défaut 10.
+ 
+-cmd.userhost.helpUsage = <nickname> [<...>]
++cmd.userhost.helpUsage = <nickname> [<…>]
+ cmd.userhost.help   = Demande le masque d’hôte pour chaque <nickname> donné.
+ 
+-cmd.userip.helpUsage = <nickname> [<...>]
++cmd.userip.helpUsage = <nickname> [<…>]
+ cmd.userip.help   = Demande l’adresse IP pour chaque <nickname> donné.
+ 
+ cmd.disable-plugin.helpUsage = <plugin>
+ cmd.disable-plugin.help   = Cette commande appelle la fonction disablePlugin. Il n’y a aucune garantie que le plugin se désactivera correctement.
+ 
+ cmd.usermode.helpUsage = [<new-mode>]
+ cmd.usermode.help   = Change ou affiche le mode utilisateur courant.
+ 
+@@ -593,27 +593,27 @@ cmd.websearch.helpUsage = <selected-text
+ cmd.websearch.format = Rechercher « $selectedText » sur le Web
+ cmd.websearch.label  = Rechercher sur le Web
+ 
+ cmd.version.label  = Connaître la version
+ cmd.version.helpUsage = [<nickname>]
+ cmd.version.help   = Demande à <nickname> quel client IRC il utilise. Certains clients IRC avertissent l’utilisateur de vos manœuvres, ChatZilla ne le fait pas. Si vous ne spécifiez pas <nickname>, ChatZilla interrogera le serveur IRC pour connaître la version du logiciel IRCserver utilisée.
+ 
+ cmd.voice.label  = Donner le statut Voice
+-cmd.voice.helpUsage = <nickname> [<...>]
++cmd.voice.helpUsage = <nickname> [<…>]
+ cmd.voice.help   = Donne le statut Voice à <nickname> sur le salon courant. Requiert le statut Opérateur (ou le statut Half-Op).
+ 
+ cmd.who.helpUsage = <rest>
+ cmd.who.help   = Liste les utilisateurs dont le pseudonyme, le nom d’utilisateur ou l’hôte contient <rest>.
+ 
+ cmd.whois.label  = Whois
+-cmd.whois.helpUsage = <nickname> [<...>]
++cmd.whois.helpUsage = <nickname> [<…>]
+ cmd.whois.help   = Donne des informations à propos de l’utilisateur <nickname>, par exemple le « nom réel », le serveur auquel il est connecté, le temps d’inactivité et le temps de connexion. Certains serveurs renvoient un temps d’inactivité erroné. L’utilisation de |wii| au lieu de |whois| permet d’outrepasser ce problème.
+ 
+-cmd.wii.helpUsage = <nickname> [<...>]
++cmd.wii.helpUsage = <nickname> [<…>]
+ cmd.wii.help   = Affiche les mêmes informations que |whois|, mais récupère la vraie durée d’inactivité.
+ 
+ cmd.whowas.label  = Who was
+ cmd.whowas.helpUsage = <nickname> [<limit>]
+ cmd.whowas.help   = Affiche les dernières informations connues sur l’utilisateur <nickname>, notamment son « real name » (nom réel), pour un utilisateur qui a quitté le serveur.
+ 
+ ## dispatch-related error messages ##
+ msg.err.internal.dispatch = Erreur interne lors de l’envoi de la commande « %1$S ».
 diff --git a/hu/suite/chrome/browser/pageInfo.dtd b/hu/suite/chrome/browser/pageInfo.dtd
 --- a/hu/suite/chrome/browser/pageInfo.dtd
 +++ b/hu/suite/chrome/browser/pageInfo.dtd
@@ -1638,6 +1877,28 @@ diff --git a/ka/suite/chrome/mailnews/addressbook/abCardOverlay.dtd b/ka/suite/c
  <!ENTITY Photo.tab                      "ფოტო">
  <!ENTITY Photo.accesskey                "ო">
  <!ENTITY GenericPhoto.label             "საერთო ფოტო">
+diff --git a/nb-NO/suite/chrome/browser/tabbrowser.properties b/nb-NO/suite/chrome/browser/tabbrowser.properties
+--- a/nb-NO/suite/chrome/browser/tabbrowser.properties
++++ b/nb-NO/suite/chrome/browser/tabbrowser.properties
+@@ -6,17 +6,17 @@ tabs.loading=Laster …
+ tabs.untitled=Ingen tittel
+ tabs.closeWarningTitle=Bekreft lukking
+ # LOCALIZATION NOTE (tabs.closeWarningOther):
+ # Semicolon-separated list of plural forms. See:
+ # http://developer.mozilla.org/en/docs/Localization_and_Plurals
+ # The singular form is not considered since this string is used only for
+ # multiple tabs.
+ tabs.closeWarningOther=;Du vil nå lukke #1 andre faner. Er du sikker på at du vil fortsette?
+-tabs.closeButton=Lukk faner
++tabs.closeButton=Lukk andre faner
+ tabs.closeWarningPromptMe=Advar når jeg lukker flere faner
+ tabs.closeWarningTitleAll=Bekreft lukking
+ # LOCALIZATION NOTE (tabs.closeWarningAll):
+ # Semicolon-separated list of plural forms. See:
+ # http://developer.mozilla.org/en/docs/Localization_and_Plurals
+ # The singular form is not considered since this string is used only for
+ # multiple tabs.
+ tabs.closeWarningAll=;Dette nettleservinduet har #1 åpne faner. Er du sikker på at du vil lukke det og alle fanene?
 diff --git a/nb-NO/suite/chrome/common/aboutSeaMonkey.dtd b/nb-NO/suite/chrome/common/aboutSeaMonkey.dtd
 --- a/nb-NO/suite/chrome/common/aboutSeaMonkey.dtd
 +++ b/nb-NO/suite/chrome/common/aboutSeaMonkey.dtd
@@ -2544,6 +2805,25 @@ diff --git a/zh-CN/suite/chrome/mailnews/addressbook/abCardOverlay.dtd b/zh-CN/s
  <!ENTITY Photo.tab                      "照片">
  <!ENTITY Photo.accesskey                "o">
  <!ENTITY GenericPhoto.label             "一般照片">
+diff --git a/zh-CN/suite/crashreporter/crashreporter-override.ini b/zh-CN/suite/crashreporter/crashreporter-override.ini
+--- a/zh-CN/suite/crashreporter/crashreporter-override.ini
++++ b/zh-CN/suite/crashreporter/crashreporter-override.ini
+@@ -1,8 +1,9 @@
+-; This Source Code Form is subject to the terms of the Mozilla Public
+-; License, v. 2.0. If a copy of the MPL was not distributed with this
+-; file, You can obtain one at http://mozilla.org/MPL/2.0/.
+-; This file is in the UTF-8 encoding
++# This Source Code Form is subject to the terms of the Mozilla Public
++# License, v. 2.0. If a copy of the MPL was not distributed with this
++# file, You can obtain one at http://mozilla.org/MPL/2.0/.
++
++# This file is in the UTF-8 encoding
+ [Strings]
+-; LOCALIZATION NOTE (CrashReporterProductErrorText2): The %s is replaced with a string containing detailed information.
++# LOCALIZATION NOTE (CrashReporterProductErrorText2): The %s is replaced with a string containing detailed information.
+ CrashReporterProductErrorText2=SeaMonkey 因一个问题已崩溃。我们将在它重新启动时尝试恢复您的标签页和窗口。\n\n不幸的是,崩溃报告器无法提交崩溃报告。\n\n详情:%s
+-CrashReporterDescriptionText2=SeaMonkey 因一个问题已崩溃。我们将在它重新启动时尝试恢复您的标签页和窗口。\n\n为了帮助我们判断和解决问题,您可以发送给我们一个崩溃报告。
++CrashReporterDescriptionText2=SeaMonkey 因一个问题已崩溃。我们将在它重新启动时尝试恢复您的标签页和窗口。\n\n为了帮助我们判断和解决问题,您可以向我们发送崩溃报告。
 diff --git a/zh-TW/suite/chrome/common/aboutSeaMonkey.dtd b/zh-TW/suite/chrome/common/aboutSeaMonkey.dtd
 --- a/zh-TW/suite/chrome/common/aboutSeaMonkey.dtd
 +++ b/zh-TW/suite/chrome/common/aboutSeaMonkey.dtd

+ 514 - 0
mozilla-release/patches/1563403-2-73a1.patch

@@ -0,0 +1,514 @@
+# HG changeset patch
+# User Mike Shal <mshal@mozilla.com>
+# Date 1575594452 0
+# Node ID ad679d570e5283c1375791dc8b1f84f43e535ad4
+# Parent  33ee50767117992f2b72b1f737f4fcb890a43110
+Bug 1563403 - Use 3-tier PGO for local MOZ_PGO=1 builds; r=firefox-build-system-reviewers,dmajor,chmanchester
+
+Local PGO builds now use 3-tier machinery under the hood. Instead of a
+single object directory that gets cleaned in between the instrumented
+and profile-use builds, now the instrumented build uses a separate
+'${objdir}/instrumented' directory. This makes it easier to handle
+within mach since we can drive the two builds with environment variables
+and keep all build artifacts separate, without needing to do manual
+cleanup in between.
+
+Differential Revision: https://phabricator.services.mozilla.com/D50098
+
+diff --git a/Makefile.in b/Makefile.in
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -122,21 +122,18 @@ endif
+ install-tests: install-test-files
+ 
+ .PHONY: install-test-files
+ install-test-files:
+ 	$(call py3_action,process_install_manifest,--track install__test_files.track _tests _build_manifests/install/_test_files)
+ 
+ include $(topsrcdir)/build/moz-automation.mk
+ 
+-# dist and _tests should be purged during cleaning. However, we don't want them
+-# purged during PGO builds because they contain some auto-generated files.
+-ifneq ($(filter-out maybe_clobber_profiledbuild,$(MAKECMDGOALS)),)
++# dist and _tests should be purged during cleaning.
+ GARBAGE_DIRS += dist _tests
+-endif
+ 
+ # Dummy rule for the cases below where we don't depend on dist/include
+ recurse_pre-export::
+ 
+ # Windows PGO builds don't perform a clean before the 2nd pass. So, we want
+ # to preserve content for the 2nd pass on Windows. Everywhere else, we always
+ # process the install manifests as part of export.
+ # For the binaries rule, not all the install manifests matter, so force only
+@@ -163,41 +160,16 @@ ifdef ENABLE_TESTS
+ # Additional makefile targets to call automated test suites
+ include $(topsrcdir)/testing/testsuite-targets.mk
+ endif
+ endif
+ 
+ default all::
+ 	$(call BUILDSTATUS,TIERS $(TIERS) $(if $(MOZ_AUTOMATION),$(MOZ_AUTOMATION_TIERS)))
+ 
+-# PGO build target.
+-profiledbuild::
+-	$(call BUILDSTATUS,TIERS pgo_profile_generate pgo_package pgo_profile pgo_clobber pgo_profile_use)
+-	$(call BUILDSTATUS,TIER_START pgo_profile_generate)
+-	$(MAKE) default MOZ_PROFILE_GENERATE=1 MOZ_LTO=
+-	$(call BUILDSTATUS,TIER_FINISH pgo_profile_generate)
+-	$(call BUILDSTATUS,TIER_START pgo_package)
+-	$(MAKE) package MOZ_INTERNAL_SIGNING_FORMAT= MOZ_EXTERNAL_SIGNING_FORMAT=
+-	rm -f jarlog/en-US.log
+-	$(call BUILDSTATUS,TIER_FINISH pgo_package)
+-	$(call BUILDSTATUS,TIER_START pgo_profile)
+-	JARLOG_FILE=jarlog/en-US.log $(PYTHON) $(topsrcdir)/build/pgo/profileserver.py 10
+-	$(call BUILDSTATUS,TIER_FINISH pgo_profile)
+-	$(call BUILDSTATUS,TIER_START pgo_clobber)
+-	$(MAKE) maybe_clobber_profiledbuild
+-	$(call BUILDSTATUS,TIER_FINISH pgo_clobber)
+-	$(call BUILDSTATUS,TIER_START pgo_profile_use)
+-	$(MAKE) default MOZ_PROFILE_USE=1
+-	$(call BUILDSTATUS,TIER_FINISH pgo_profile_use)
+-
+-# Change default target to PGO build if PGO is enabled.
+-ifdef MOZ_PGO
+-OVERRIDE_DEFAULT_GOAL := profiledbuild
+-endif
+-
+ include $(topsrcdir)/config/rules.mk
+ 
+ ifdef SCCACHE_VERBOSE_STATS
+ default::
+ 	-$(CCACHE) --show-stats --stats-format=json > sccache-stats.json
+ 	@echo "===SCCACHE STATS==="
+ 	-$(CCACHE) --show-stats
+ 	@echo "==================="
+@@ -252,41 +224,16 @@ endif
+ .PHONY: update-packaging
+ update-packaging:
+ 	$(MAKE) -C tools/update-packaging
+ 
+ .PHONY: package-generated-sources
+ package-generated-sources:
+ 	$(call py3_action,package_generated_sources,'$(DIST)/$(PKG_PATH)$(GENERATED_SOURCE_FILE_PACKAGE)')
+ 
+-#XXX: this is a hack, since we don't want to clobber for MSVC
+-# PGO support, but we can't do this test in client.mk
+-ifneq ($(OS_ARCH)_$(GNU_CC), WINNT_)
+-# No point in clobbering if PGO has been explicitly disabled.
+-ifndef NO_PROFILE_GUIDED_OPTIMIZE
+-maybe_clobber_profiledbuild: clean
+-else
+-maybe_clobber_profiledbuild:
+-endif
+-else
+-ifdef CLANG_CL
+-maybe_clobber_profiledbuild: clean
+-# 32-bit PGO is currently blocked by bug 1479800
+-ifeq ($(CPU_ARCH),x86_64)
+-	$(LLVM_PROFDATA) merge -o $(DEPTH)/merged.profdata $(DEPTH)/*.profraw
+-endif
+-else
+-maybe_clobber_profiledbuild:
+-	$(RM) $(DIST)/bin/*.pgc
+-	find $(DIST)/$(MOZ_APP_NAME) -name '*.pgc' -exec mv {} $(DIST)/bin \;
+-endif # CLANG_CL
+-endif
+-
+-.PHONY: maybe_clobber_profiledbuild
+-
+ # Look for R_386_PC32 relocations in shared libs, these
+ # break x86_64 builds and SELinux users.
+ ifeq ($(OS_TARGET)_$(TARGET_XPCOM_ABI),Linux_x86-gcc3)
+ check::
+ 	@relcount=`find $(DIST)/bin -name '*.so' | xargs objdump -R | grep R_386_PC32 | wc -l` && if test $$relcount -gt 0; then echo 'FAILED: R_386_PC32 relocations detected in a shared library.  Did you use a system header without adding it to config/system-headers?'; exit 1; else echo 'PASSED'; fi
+ endif
+ 
+ ifdef JS_STANDALONE
+diff --git a/build/docs/pgo.rst b/build/docs/pgo.rst
+--- a/build/docs/pgo.rst
++++ b/build/docs/pgo.rst
+@@ -18,22 +18,11 @@ configure flags and then build. e.g. in 
+     ac_add_options MOZ_PGO=1
+ 
+ Then::
+ 
+     $ ./mach build
+ 
+ This is roughly equivalent to::
+ 
+-#. Perform a build with *MOZ_PROFILE_GENERATE=1*
+-#. Performing a run of the instrumented binaries
+-#. $ make maybe_clobber_profiledbuild
+-#. Perform a build with *MOZ_PROFILE_USE=1*
+-
+-Differences between toolchains
+-==============================
+-
+-There are some implementation differences depending on the compiler
+-toolchain being used.
+-
+-The *maybe_clobber_profiledbuild* step gets its name because of a
+-difference. On Windows, this step merely moves some *.pgc* files around.
+-Using GCC or Clang, it is equivalent to a *make clean*.
++#. Perform a build with *--enable-profile-generate* in $topobjdir/instrumented
++#. Perform a run of the instrumented binaries with build/pgo/profileserver.py
++#. Perform a build with *--enable-profile-use* in $topobjdir
+diff --git a/build/moz.configure/lto-pgo.configure.1563403.later b/build/moz.configure/lto-pgo.configure.1563403.later
+new file mode 100644
+--- /dev/null
++++ b/build/moz.configure/lto-pgo.configure.1563403.later
+@@ -0,0 +1,54 @@
++--- lto-pgo.configure
+++++ lto-pgo.configure
++@@ -6,30 +6,32 @@
++ 
++ # PGO
++ # ==============================================================
++ llvm_profdata = check_prog('LLVM_PROFDATA', ['llvm-profdata'],
++                            allow_missing=True,
++                            paths=toolchain_search_path)
++ 
++ js_option('--enable-profile-generate',
+++          env='MOZ_PROFILE_GENERATE',
++           nargs='?',
++           choices=('cross',),
++           help='Build a PGO instrumented binary')
++ 
++ imply_option('MOZ_PGO',
++              depends_if('--enable-profile-generate')(lambda _: True))
++ 
++ set_config('MOZ_PROFILE_GENERATE',
++            depends_if('--enable-profile-generate')(lambda _: True))
++ 
++ set_define('MOZ_PROFILE_GENERATE',
++            depends_if('--enable-profile-generate')(lambda _: True))
++ 
++ js_option('--enable-profile-use',
+++          env='MOZ_PROFILE_USE',
++           nargs='?',
++           choices=('cross',),
++           help='Use a generated profile during the build')
++ 
++ js_option('--with-pgo-profile-path',
++           help='Path to the directory with unmerged profile data to use during the build',
++           nargs=1)
++ 
++@@ -46,17 +48,17 @@ set_config('MOZ_PROFILE_USE',
++ @depends('--with-pgo-profile-path', '--enable-profile-use', llvm_profdata, check_build_environment)
++ @imports('os')
++ def pgo_profile_path(path, pgo_use, profdata, build_env):
++     topobjdir = build_env.topobjdir
++     if topobjdir.endswith('/js/src'):
++         topobjdir = topobjdir[:-7]
++ 
++     if not path:
++-        return os.path.join(topobjdir, 'merged.profdata')
+++        return os.path.join(topobjdir,  'instrumented', 'merged.profdata')
++     if path and not pgo_use:
++         die('Pass --enable-profile-use to use --with-pgo-profile-path.')
++     if path and not profdata:
++         die('LLVM_PROFDATA must be set to process the pgo profile.')
++     if not os.path.isfile(path[0]):
++         die('Argument to --with-pgo-profile-path must be a file.')
++     if not os.path.isabs(path[0]):
++         die('Argument to --with-pgo-profile-path must be an absolute path.')
+diff --git a/build/pgo/profileserver.py b/build/pgo/profileserver.py
+--- a/build/pgo/profileserver.py
++++ b/build/pgo/profileserver.py
+@@ -33,16 +33,20 @@ if __name__ == '__main__':
+                      docroot=os.path.join(build.topsrcdir, "build", "pgo"))
+     httpd.start(block=False)
+ 
+     locations = ServerLocations()
+     locations.add_host(host='127.0.0.1',
+                        port=PORT,
+                        options='primary,privileged')
+ 
++    old_profraw_files = glob.glob('*.profraw')
++    for f in old_profraw_files:
++        os.remove(f)
++
+     with TemporaryDirectory() as profilePath:
+         # TODO: refactor this into mozprofile
+         profile_data_dir = os.path.join(build.topsrcdir, 'testing', 'profiles')
+         with open(os.path.join(profile_data_dir, 'profiles.json'), 'r') as fh:
+             base_profiles = json.load(fh)['profileserver']
+ 
+         prefpaths = [os.path.join(profile_data_dir, profile, 'user.js')
+                      for profile in base_profiles]
+@@ -79,16 +83,18 @@ if __name__ == '__main__':
+                   % ret)
+             httpd.stop()
+             sys.exit(ret)
+ 
+         jarlog = os.getenv("JARLOG_FILE")
+         if jarlog:
+             env["MOZ_JAR_LOG_FILE"] = os.path.abspath(jarlog)
+             print("jarlog: %s" % env["MOZ_JAR_LOG_FILE"])
++            if os.path.exists(jarlog):
++                os.remove(jarlog)
+ 
+         cmdargs = ["http://localhost:%d/index.html" % PORT]
+         runner = FirefoxRunner(profile=profile,
+                                binary=binary,
+                                cmdargs=cmdargs,
+                                env=env)
+         runner.start(debug_args=debug_args, interactive=interactive)
+         ret = runner.wait()
+diff --git a/python/mozbuild/mozbuild/build_commands.py b/python/mozbuild/mozbuild/build_commands.py
+--- a/python/mozbuild/mozbuild/build_commands.py
++++ b/python/mozbuild/mozbuild/build_commands.py
+@@ -1,24 +1,28 @@
+ # This Source Code Form is subject to the terms of the Mozilla Public
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
+ # file, # You can obtain one at http://mozilla.org/MPL/2.0/.
+ 
+ from __future__ import absolute_import, print_function, unicode_literals
+ 
+ import argparse
+ import os
++import subprocess
+ 
+ from mach.decorators import (
+     CommandArgument,
+     CommandProvider,
+     Command,
+ )
+ 
+ from mozbuild.base import MachCommandBase
++from mozbuild.util import ensure_subprocess_env
++from mozbuild.mozconfig import MozconfigLoader
++import mozpack.path as mozpath
+ 
+ from mozbuild.backend import (
+     backends,
+ )
+ 
+ BUILD_WHAT_HELP = '''
+ What to build. Can be a top-level make target or a relative directory. If
+ multiple options are provided, they will be built serially. Takes dependency
+@@ -68,25 +72,74 @@ class Build(MachCommandBase):
+         be rebuilding, perform a vanilla `mach build` to rebuild the world.
+         """
+         from mozbuild.controller.building import (
+             BuildDriver,
+         )
+ 
+         self.log_manager.enable_all_structured_loggers()
+ 
++        loader = MozconfigLoader(self.topsrcdir)
++        mozconfig = loader.read_mozconfig(loader.AUTODETECT)
++        doing_pgo = 'MOZ_PGO=1' in mozconfig['configure_args']
++        append_env = None
++
++        if doing_pgo:
++            if what:
++                raise Exception('Cannot specify targets (%s) in MOZ_PGO=1 builds' %
++                                what)
++            instr = self._spawn(BuildDriver)
++            orig_topobjdir = instr._topobjdir
++            instr._topobjdir = mozpath.join(instr._topobjdir, 'instrumented')
++
++            append_env = {'MOZ_PROFILE_GENERATE': '1'}
++            status = instr.build(
++                what=what,
++                disable_extra_make_dependencies=disable_extra_make_dependencies,
++                jobs=jobs,
++                directory=directory,
++                verbose=verbose,
++                keep_going=keep_going,
++                mach_context=self._mach_context,
++                append_env=append_env)
++            if status != 0:
++                return status
++
++            # Packaging the instrumented build is required to get the jarlog
++            # data.
++            status = instr._run_make(
++                directory=".", target='package',
++                silent=not verbose, ensure_exit_code=False,
++                append_env=append_env)
++            if status != 0:
++                return status
++
++            pgo_env = os.environ.copy()
++            pgo_env['LLVM_PROFDATA'] = instr.config_environment.substs.get('LLVM_PROFDATA')
++            pgo_env['JARLOG_FILE'] = mozpath.join(orig_topobjdir, 'jarlog/en-US.log')
++            pgo_cmd = [
++                instr.virtualenv_manager.python_path,
++                mozpath.join(self.topsrcdir, 'build/pgo/profileserver.py'),
++            ]
++            subprocess.check_call(pgo_cmd, cwd=instr.topobjdir,
++                                  env=ensure_subprocess_env(pgo_env))
++
++            # Set the default build to MOZ_PROFILE_USE
++            append_env = {'MOZ_PROFILE_USE': '1'}
++
+         driver = self._spawn(BuildDriver)
+         return driver.build(
+             what=what,
+             disable_extra_make_dependencies=disable_extra_make_dependencies,
+             jobs=jobs,
+             directory=directory,
+             verbose=verbose,
+             keep_going=keep_going,
+-            mach_context=self._mach_context)
++            mach_context=self._mach_context,
++            append_env=append_env)
+ 
+     @Command('configure', category='build',
+              description='Configure the tree (run configure and config.status).')
+     @CommandArgument('options', default=None, nargs=argparse.REMAINDER,
+                      help='Configure options')
+     def configure(self, options=None, buildstatus_messages=False, line_handler=None):
+         from mozbuild.controller.building import (
+             BuildDriver,
+diff --git a/python/mozbuild/mozbuild/controller/building.py b/python/mozbuild/mozbuild/controller/building.py
+--- a/python/mozbuild/mozbuild/controller/building.py
++++ b/python/mozbuild/mozbuild/controller/building.py
+@@ -1069,17 +1069,18 @@ class CCacheStats(object):
+ class BuildDriver(MozbuildObject):
+     """Provides a high-level API for build actions."""
+ 
+     def __init__(self, *args, **kwargs):
+         MozbuildObject.__init__(self, *args, **kwargs)
+         self.mach_context = None
+ 
+     def build(self, what=None, disable_extra_make_dependencies=None, jobs=0,
+-              directory=None, verbose=False, keep_going=False, mach_context=None):
++              directory=None, verbose=False, keep_going=False, mach_context=None,
++              append_env=None):
+         """Invoke the build backend.
+ 
+         ``what`` defines the thing to build. If not defined, the default
+         target is used.
+         """
+         self.mach_context = mach_context
+         warnings_path = self._get_state_filename('warnings.json')
+         monitor = self._spawn(BuildMonitor)
+@@ -1137,17 +1138,18 @@ class BuildDriver(MozbuildObject):
+                                                                      'config_status_deps.in')):
+                 if previous_backend and 'Make' not in previous_backend:
+                     clobber_requested = self._clobber_configure()
+ 
+                 if config is None:
+                     print(" Config object not found by mach.")
+ 
+                 config_rc = self.configure(buildstatus_messages=True,
+-                                           line_handler=output.on_line)
++                                           line_handler=output.on_line,
++                                           append_env=append_env)
+ 
+                 if config_rc != 0:
+                     return config_rc
+ 
+                 config = self.reload_config_environment()
+ 
+             if config.substs.get("MOZ_USING_CCACHE"):
+                 ccache = config.substs.get("CCACHE")
+@@ -1236,34 +1238,36 @@ class BuildDriver(MozbuildObject):
+ 
+                 # Build target pairs.
+                 for make_dir, make_target in target_pairs:
+                     # We don't display build status messages during partial
+                     # tree builds because they aren't reliable there. This
+                     # could potentially be fixed if the build monitor were more
+                     # intelligent about encountering undefined state.
+                     no_build_status = '1' if make_dir is not None else ''
++                    tgt_env = dict(append_env or {})
++                    tgt_env['NO_BUILDSTATUS_MESSAGES'] = no_build_status
+                     status = self._run_make(
+                         directory=make_dir, target=make_target,
+                         line_handler=output.on_line, log=False, print_directory=False,
+                         ensure_exit_code=False, num_jobs=jobs, silent=not verbose,
+-                        append_env={
+-                            b'NO_BUILDSTATUS_MESSAGES': no_build_status},
++                        append_env=tgt_env,
+                         keep_going=keep_going)
+ 
+                     if status != 0:
+                         break
+ 
+             elif status is None:
+                 # If the backend doesn't specify a build() method, then just
+                 # call client.mk directly.
+                 status = self._run_client_mk(line_handler=output.on_line,
+                                              jobs=jobs,
+                                              verbose=verbose,
+-                                             keep_going=keep_going)
++                                             keep_going=keep_going,
++                                             append_env=append_env)
+ 
+             self.log(logging.WARNING, 'warning_summary',
+                      {'count': len(monitor.warnings_database)},
+                      '{count} compiler warnings present.')
+ 
+             # Try to run the active build backend's post-build step, if possible.
+             try:
+                 active_backend = config.substs.get('BUILD_BACKENDS', [None])[0]
+@@ -1416,34 +1420,35 @@ class BuildDriver(MozbuildObject):
+             except Exception:
+                 # Ignore Exceptions in case we can't find config.status (such
+                 # as when doing OSX Universal builds)
+                 pass
+ 
+         return status
+ 
+     def configure(self, options=None, buildstatus_messages=False,
+-                  line_handler=None):
++                  line_handler=None, append_env=None):
+         # Disable indexing in objdir because it is not necessary and can slow
+         # down builds.
+         mkdir(self.topobjdir, not_indexed=True)
+         self._write_mozconfig_json()
+ 
+         def on_line(line):
+             self.log(logging.INFO, 'build_output', {'line': line}, '{line}')
+ 
+         line_handler = line_handler or on_line
+ 
+         options = ' '.join(shell_quote(o) for o in options or ())
+-        append_env = {b'CONFIGURE_ARGS': options.encode('utf-8')}
++        append_env = dict(append_env or {})
++        append_env['CONFIGURE_ARGS'] = options
+ 
+         # Only print build status messages when we have an active
+         # monitor.
+         if not buildstatus_messages:
+-            append_env['NO_BUILDSTATUS_MESSAGES'] = '1'
++            append_env['NO_BUILDSTATUS_MESSAGES'] = b'1'
+         status = self._run_client_mk(target='configure',
+                                      line_handler=line_handler,
+                                      append_env=append_env)
+ 
+         if not status:
+             print('Configure complete!')
+             print('Be sure to run |mach build| to pick up any changes')
+ 
+diff --git a/python/mozbuild/mozbuild/mozconfig.py b/python/mozbuild/mozbuild/mozconfig.py
+--- a/python/mozbuild/mozbuild/mozconfig.py
++++ b/python/mozbuild/mozbuild/mozconfig.py
+@@ -226,16 +226,22 @@ class MozconfigLoader(object):
+             name, value = match.group('var'), match.group('value')
+ 
+             if name == 'MOZ_MAKE_FLAGS':
+                 result['make_flags'] = value.split()
+                 continue
+ 
+             if name == 'MOZ_OBJDIR':
+                 result['topobjdir'] = value
++                if parsed['env_before'].get('MOZ_PROFILE_GENERATE') == '1':
++                    # If MOZ_OBJDIR is specified in the mozconfig, we need to
++                    # make sure that the '/instrumented' directory gets appended
++                    # for the first build to avoid an objdir mismatch when
++                    # running 'mach package' on Windows.
++                    result['topobjdir'] = mozpath.join(result['topobjdir'], 'instrumented')
+                 continue
+ 
+             result['make_extra'].append(o)
+ 
+         return result
+ 
+     def _parse_loader_output(self, output):
+         mk_options = []

+ 33 - 0
mozilla-release/patches/1601872-73a1.patch

@@ -0,0 +1,33 @@
+# HG changeset patch
+# User David Major <dmajor@mozilla.com>
+# Date 1575654070 0
+# Node ID 0bd674c3129589974b4c86ea9486f0fa1ff2ca5f
+# Parent  d67b8549cb5e4a751b1212f32d05c82e5958e696
+Bug 1601872 - Handle the case when the mozconfig has no configure_args r=firefox-build-system-reviewers,chmanchester
+
+Differential Revision: https://phabricator.services.mozilla.com/D56207
+
+diff --git a/python/mozbuild/mozbuild/build_commands.py b/python/mozbuild/mozbuild/build_commands.py
+--- a/python/mozbuild/mozbuild/build_commands.py
++++ b/python/mozbuild/mozbuild/build_commands.py
+@@ -74,17 +74,18 @@ class Build(MachCommandBase):
+         from mozbuild.controller.building import (
+             BuildDriver,
+         )
+ 
+         self.log_manager.enable_all_structured_loggers()
+ 
+         loader = MozconfigLoader(self.topsrcdir)
+         mozconfig = loader.read_mozconfig(loader.AUTODETECT)
+-        doing_pgo = 'MOZ_PGO=1' in mozconfig['configure_args']
++        configure_args = mozconfig['configure_args']
++        doing_pgo = configure_args and 'MOZ_PGO=1' in configure_args
+         append_env = None
+ 
+         if doing_pgo:
+             if what:
+                 raise Exception('Cannot specify targets (%s) in MOZ_PGO=1 builds' %
+                                 what)
+             instr = self._spawn(BuildDriver)
+             orig_topobjdir = instr._topobjdir
+

+ 325 - 0
mozilla-release/patches/1671424-84a1.patch

@@ -0,0 +1,325 @@
+# HG changeset patch
+# User Mike Hommey <mh+mozilla@glandium.org>
+# Date 1603226512 0
+# Node ID 8af2e5440a95a8147b8e9122ef80ca34141e66c3
+# Parent  7afa252b4e30d7bc1ae15ac167fd1d3c0c347273
+Bug 1671424 - Move configure execution from client.mk to `mach configure`. r=firefox-build-system-reviewers,rstewart
+
+`mach configure` currently runs the equivalent to `make -f client.mk`.
+This is history, and essentially does the following:
+- Create `configure` and `js/src/configure` from `configure.in` and
+`js/src/configure.in` respectively.
+- Create the objdir.
+- Run `configure` from the objdir.
+
+The `configure` script is, nowadays, only really used as a means to set
+OLD_CONFIGURE (and also for people who want to run `configure`,
+literally, as in the `configure; make` workflow). `mach configure`
+actually doesn't need it. Neither does recursing into `js/src` require
+`js/src/configure`, since bug 1520340 (and now as of bug 1669633, we
+don't even recurse).
+
+Because configure.py can actually derive OLD_CONFIGURE on its own
+(except for `js/src/configure`, but `mach configure` doesn't run that),
+we don't really need `configure` for `mach configure`.
+
+So all in all, we're at a point in history where it's straightforward to
+just initiate configure.py from mach configure, so we just do that.
+
+And in the hypothetical case where the `mach configure` code is somehow
+running in python2, we get the mach virtualenv python3 and use it to
+execute `configure.py`.
+
+Differential Revision: https://phabricator.services.mozilla.com/D93741
+
+diff --git a/client.mk b/client.mk
+--- a/client.mk
++++ b/client.mk
+@@ -53,20 +53,16 @@ endif
+ ifdef MOZ_AUTOMATION
+ ifeq (4.0,$(firstword $(sort 4.0 $(MAKE_VERSION))))
+ MOZ_MAKE_FLAGS += --output-sync=line
+ endif
+ endif
+ 
+ MOZ_MAKE = $(MAKE) $(MOZ_MAKE_FLAGS) -C $(OBJDIR)
+ 
+-# 'configure' scripts generated by autoconf.
+-CONFIGURES := $(TOPSRCDIR)/configure
+-CONFIGURES += $(TOPSRCDIR)/js/src/configure
+-
+ #######################################################################
+ # Rules
+ 
+ # The default rule is build
+ build::
+ 
+ ifndef MACH
+ $(error client.mk must be used via `mach`. Try running \
+@@ -81,48 +77,16 @@ build::
+ 	-$(MOZBUILD_MANAGE_SCCACHE_DAEMON) --stop-server > /dev/null 2>&1
+ 	# Start a new server, ensuring it gets the jobserver file descriptors
+ 	# from make (but don't use the + prefix when make -n is used, so that
+ 	# the command doesn't run in that case)
+ 	$(if $(findstring n,$(filter-out --%, $(MAKEFLAGS))),,+)env RUST_LOG=sccache::compiler=debug SCCACHE_ERROR_LOG=$(OBJDIR)/dist/sccache.log $(MOZBUILD_MANAGE_SCCACHE_DAEMON) --start-server
+ endif
+ 
+ ####################################
+-# Configure
+-
+-$(CONFIGURES): %: %.in
+-	@echo Generating $@
+-	cp -f $< $@
+-	chmod +x $@
+-
+-CONFIGURE_ENV_ARGS += \
+-  MAKE='$(MAKE)' \
+-  $(NULL)
+-
+-# configure uses the program name to determine @srcdir@. Calling it without
+-#   $(TOPSRCDIR) will set @srcdir@ to "."; otherwise, it is set to the full
+-#   path of $(TOPSRCDIR).
+-ifeq ($(TOPSRCDIR),$(OBJDIR))
+-  CONFIGURE = ./configure
+-else
+-  CONFIGURE = $(TOPSRCDIR)/configure
+-endif
+-
+-configure:: $(CONFIGURES)
+-	$(call BUILDSTATUS,TIERS configure)
+-	$(call BUILDSTATUS,TIER_START configure)
+-	@echo cd $(OBJDIR);
+-	@echo $(CONFIGURE) $(CONFIGURE_ARGS)
+-	@cd $(OBJDIR) && $(CONFIGURE_ENV_ARGS) $(CONFIGURE) $(CONFIGURE_ARGS) \
+-	  || ( echo '*** Fix above errors and then restart with\
+-               "./mach build"' && exit 1 )
+-	@touch $(OBJDIR)/Makefile
+-	$(call BUILDSTATUS,TIER_FINISH configure)
+-
+-####################################
+ # Build it
+ 
+ build::
+ 	+$(MOZ_MAKE)
+ 
+ ifdef MOZ_AUTOMATION
+ build::
+ 	+$(MOZ_MAKE) automation/build
+@@ -135,10 +99,9 @@ build::
+ endif
+ 
+ # This makefile doesn't support parallel execution. It does pass
+ # MOZ_MAKE_FLAGS to sub-make processes, so they will correctly execute
+ # in parallel.
+ .NOTPARALLEL:
+ 
+ .PHONY: \
+-    build \
+-    configure
++    build
+diff --git a/configure.in b/configure.in
+--- a/configure.in
++++ b/configure.in
+@@ -15,11 +15,10 @@
+ # "manually", this file is actually an m4 file that is processed by
+ # autoconf, but doesn't call any autoconf macros. The `divert` line
+ # below ensures the script that follows is output by autoconf.
+ : "divert(0)dnl"
+ #!/bin/sh
+ 
+ SRCDIR=$(dirname $0)
+ TOPSRCDIR="$SRCDIR"
+-export OLD_CONFIGURE="$SRCDIR"/old-configure
+ 
+ exec python3 "$TOPSRCDIR/configure.py" "$@"
+diff --git a/configure.py b/configure.py
+--- a/configure.py
++++ b/configure.py
+@@ -29,16 +29,19 @@ from mozbuild.util import (
+ )
+ import mozpack.path as mozpath
+ import six
+ 
+ 
+ def main(argv):
+     config = {}
+ 
++    if 'OLD_CONFIGURE' not in os.environ:
++        os.environ['OLD_CONFIGURE'] = os.path.join(base_dir, 'old-configure')
++
+     sandbox = ConfigureSandbox(config, os.environ, argv)
+ 
+     if os.environ.get('MOZ_CONFIGURE_TRACE'):
+         sandbox._logger.setLevel(TRACE)
+ 
+     sandbox.run(os.path.join(os.path.dirname(__file__), 'moz.configure'))
+ 
+     if sandbox._help:
+diff --git a/moz.configure b/moz.configure
+--- a/moz.configure
++++ b/moz.configure
+@@ -645,18 +645,16 @@ def config_status_deps(build_env, build_
+             os.path.join(topsrcdir, build_project, 'confvars.sh'),
+             os.path.join(topobjdir, '.mozconfig.json'),
+         ]
+     else:
+         # mozconfig changes may impact js configure.
+         extra_deps = [os.path.join(topobjdir[:-7], '.mozconfig.json')]
+ 
+     return list(__sandbox__._all_paths) + extra_deps + [
+-        os.path.join(topsrcdir, 'configure'),
+-        os.path.join(topsrcdir, 'js', 'src', 'configure'),
+         os.path.join(topsrcdir, 'configure.in'),
+         os.path.join(topsrcdir, 'js', 'src', 'configure.in'),
+         os.path.join(topsrcdir, 'nsprpub', 'configure'),
+         os.path.join(topsrcdir, 'config', 'milestone.txt'),
+         os.path.join(topsrcdir, 'browser', 'config', 'version.txt'),
+         os.path.join(topsrcdir, 'browser', 'config', 'version_display.txt'),
+         os.path.join(topsrcdir, 'build', 'build_virtualenv_packages.txt'),
+         os.path.join(topsrcdir, 'build', 'common_virtualenv_packages.txt'),
+diff --git a/python/mozbuild/mozbuild/base.py b/python/mozbuild/mozbuild/base.py
+--- a/python/mozbuild/mozbuild/base.py
++++ b/python/mozbuild/mozbuild/base.py
+@@ -657,17 +657,17 @@ class MozbuildObject(ProcessExecutionMix
+         srcdir -- If True, invoke make from the source directory tree.
+             Otherwise, make will be invoked from the object directory.
+         silent -- If True (the default), run make in silent mode.
+         print_directory -- If True (the default), have make print directories
+         while doing traversal.
+         """
+         self._ensure_objdir_exists()
+ 
+-        args = self._make_path()
++        args = [self._make_path()]
+ 
+         if directory:
+             args.extend(['-C', directory.replace(os.sep, '/')])
+ 
+         if filename:
+             args.extend(['-f', filename])
+ 
+         if num_jobs == 0 and self.mozconfig['make_flags']:
+@@ -781,17 +781,17 @@ class MozbuildObject(ProcessExecutionMix
+             if os.path.isabs(test):
+                 make = test
+             else:
+                 make = which(test)
+                 if not make:
+                     continue
+             result, xcode_lisense_error_tmp = validate_make(make)
+             if result:
+-                return [make]
++                return make
+             if xcode_lisense_error_tmp:
+                 xcode_lisense_error = True
+ 
+         if xcode_lisense_error:
+             raise Exception('Xcode requires accepting to the license agreement.\n'
+                             'Please run Xcode and accept the license agreement.')
+ 
+         if self._is_windows():
+diff --git a/python/mozbuild/mozbuild/controller/building.py b/python/mozbuild/mozbuild/controller/building.py
+--- a/python/mozbuild/mozbuild/controller/building.py
++++ b/python/mozbuild/mozbuild/controller/building.py
+@@ -26,16 +26,17 @@ from textwrap import (
+ )
+ 
+ try:
+     import psutil
+ except Exception:
+     psutil = None
+ 
+ from mach.mixin.logging import LoggingMixin
++from mozboot.util import get_mach_virtualenv_binary
+ import mozfile
+ from mozsystemmonitor.resourcemonitor import SystemResourceMonitor
+ from mozterm.widgets import Footer
+ 
+ import mozpack.path as mozpath
+ 
+ from .clobber import (
+     Clobberer,
+@@ -48,19 +49,16 @@ from ..backend import (
+ )
+ from ..testing import (
+     install_test_files,
+ )
+ from ..compilation.warnings import (
+     WarningsCollector,
+     WarningsDatabase,
+ )
+-from ..shellutil import (
+-    quote as shell_quote,
+-)
+ from ..util import (
+     FileAvoidWrite,
+     mkdir,
+     resolve_target_to_make,
+ )
+ 
+ 
+ FINDER_SLOW_MESSAGE = '''
+@@ -1431,29 +1429,53 @@ class BuildDriver(MozbuildObject):
+         mkdir(self.topobjdir, not_indexed=True)
+         self._write_mozconfig_json()
+ 
+         def on_line(line):
+             self.log(logging.INFO, 'build_output', {'line': line}, '{line}')
+ 
+         line_handler = line_handler or on_line
+ 
+-        options = ' '.join(shell_quote(o) for o in options or ())
+         append_env = dict(append_env or {})
+-        append_env['CONFIGURE_ARGS'] = options
++        append_env['MAKE'] = self._make_path()
++
++        # Back when client.mk was used, `mk_add_options "export ..."` lines
++        # from the mozconfig would spill into the configure environment, so
++        # add that for backwards compatibility.
++        for line in self.mozconfig['make_extra'] or []:
++            if line.startswith('export '):
++                k, eq, v = line[len('export '):].partition('=')
++                if eq == '=':
++                    append_env[k] = v
+ 
+-        # Only print build status messages when we have an active
+-        # monitor.
+-        if not buildstatus_messages:
+-            append_env['NO_BUILDSTATUS_MESSAGES'] = b'1'
+-        status = self._run_client_mk(target='configure',
+-                                     line_handler=line_handler,
+-                                     append_env=append_env)
++        if six.PY3:
++            python = sys.executable
++        else:
++            # Try to get the mach virtualenv Python if we can.
++            python = get_mach_virtualenv_binary()
++            if not os.path.exists(python):
++                python = 'python3'
++
++        command = [python, os.path.join(self.topsrcdir, 'configure.py')]
++        if options:
++            command.extend(options)
+ 
+-        if not status:
++        if buildstatus_messages:
++            line_handler('BUILDSTATUS TIERS configure')
++            line_handler('BUILDSTATUS TIER_START configure')
++        status = self._run_command_in_objdir(
++            args=command,
++            line_handler=line_handler,
++            append_env=append_env,
++        )
++        if buildstatus_messages:
++            line_handler('BUILDSTATUS TIER_FINISH configure')
++        if status:
++            print('*** Fix above errors and then restart with "./mach build"')
++        else:
+             print('Configure complete!')
+             print('Be sure to run |mach build| to pick up any changes')
+ 
+         return status
+ 
+     def install_tests(self, test_objs):
+         """Install test files."""
+ 

+ 7 - 16
mozilla-release/patches/1683797-1-88a1.patch

@@ -2,7 +2,7 @@
 # User Mitchell Hentges <mhentges@mozilla.com>
 # Date 1615301124 0
 # Node ID 3457334cbaf9f6afac6c5e8e9e2d46b988e9ff9f
-# Parent  e2bcb16778f78bef1bda5639abeac792884dcf22
+# Parent  47c711ee6f3d43ae69e776cc1d7392c3a86972dc
 Bug 1683797: Removes unnecessary lines from client.mk r=sheehan,firefox-build-system-reviewers,glandium
 
 CWD and BUILDSTATUS are never used.
@@ -12,7 +12,7 @@ Differential Revision: https://phabricator.services.mozilla.com/D102661
 diff --git a/client.mk b/client.mk
 --- a/client.mk
 +++ b/client.mk
-@@ -9,75 +9,51 @@
+@@ -9,86 +9,62 @@
  # This make file should not be invoked directly. Instead, use
  # `mach` (likely `mach build`) for invoking the build system.
  #
@@ -22,7 +22,7 @@ diff --git a/client.mk b/client.mk
  #
  #######################################################################
 -# Defines
--
+ 
 -ifdef MACH
 -ifndef NO_BUILDSTATUS_MESSAGES
 -define BUILDSTATUS
@@ -71,15 +71,11 @@ diff --git a/client.mk b/client.mk
  
  MOZ_MAKE = $(MAKE) $(MOZ_MAKE_FLAGS) -C $(OBJDIR)
  
- # 'configure' scripts generated by autoconf.
- CONFIGURES := $(TOPSRCDIR)/configure
- CONFIGURES += $(TOPSRCDIR)/js/src/configure
- 
 -#######################################################################
 -# Rules
 -
--# The default rule is build
 +### Rules
+ # The default rule is build
  build::
  
 -ifndef MACH
@@ -95,14 +91,9 @@ diff --git a/client.mk b/client.mk
  	-$(MOZBUILD_MANAGE_SCCACHE_DAEMON) --stop-server > /dev/null 2>&1
  	# Start a new server, ensuring it gets the jobserver file descriptors
  	# from make (but don't use the + prefix when make -n is used, so that
-@@ -112,19 +88,17 @@ configure:: $(CONFIGURES)
- 	@echo cd $(OBJDIR);
- 	@echo $(CONFIGURE) $(CONFIGURE_ARGS)
- 	@cd $(OBJDIR) && $(CONFIGURE_ENV_ARGS) $(CONFIGURE) $(CONFIGURE_ARGS) \
- 	  || ( echo '*** Fix above errors and then restart with\
-                "./mach build"' && exit 1 )
- 	@touch $(OBJDIR)/Makefile
- 	$(call BUILDSTATUS,TIER_FINISH configure)
+ 	# the command doesn't run in that case)
+ 	$(if $(findstring n,$(filter-out --%, $(MAKEFLAGS))),,+)env RUST_LOG=sccache::compiler=debug SCCACHE_ERROR_LOG=$(OBJDIR)/dist/sccache.log $(MOZBUILD_MANAGE_SCCACHE_DAEMON) --start-server
+ endif
  
 -####################################
 -# Build it

+ 3 - 0
mozilla-release/patches/series

@@ -7616,7 +7616,10 @@ TOP-NOBUG-fixnasmcheck-25320.patch
 1902935-seamonkey-credits-25320.patch
 1862395-incorrect-version-resistfingerprinting-v2-25320.patch
 1737436-use-mozilla-compat-version-define-25320.patch
+1563403-2-73a1.patch
+1601872-73a1.patch
 1664083-82a1.patch
+1671424-84a1.patch
 1683797-1-88a1.patch
 1683797-2-88a1.patch
 1683797-4-88a1.patch