diff --git a/.gitignore b/.gitignore index 6d411f0..dca9de8 100644 --- a/.gitignore +++ b/.gitignore @@ -617,3 +617,8 @@ firefox-3.6.4.source.tar.bz2 /firefox-langpacks-121.0.1-20240112.tar.xz /firefox-122.0.source.tar.xz /firefox-langpacks-122.0-20240119.tar.xz +/firefox-115.12.0esr.processed-source.tar.xz +/firefox-langpacks-115.12.0esr-20240604.tar.xz +/nspr-4.35.0-1.el8_1.src.rpm +/nss-3.90.0-3.el8_1.src.rpm +/nss-3.90.0-3.el9_0.src.rpm diff --git a/0001-GLIBCXX-fix-for-GCC-12.patch b/0001-GLIBCXX-fix-for-GCC-12.patch deleted file mode 100644 index 37d6f50..0000000 --- a/0001-GLIBCXX-fix-for-GCC-12.patch +++ /dev/null @@ -1,44 +0,0 @@ -From efd5bc0715e5477318be95a76811cda0a89e8289 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= -Date: Fri, 4 Mar 2022 12:00:26 +0100 -Subject: [PATCH] GLIBCXX fix for GCC 12? - ---- - build/unix/stdc++compat/stdc++compat.cpp | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/build/unix/stdc++compat/stdc++compat.cpp b/build/unix/stdc++compat/stdc++compat.cpp -index 0180f6bcfa998..8d7a542ff11f0 100644 ---- a/build/unix/stdc++compat/stdc++compat.cpp -+++ b/build/unix/stdc++compat/stdc++compat.cpp -@@ -24,6 +24,7 @@ - GLIBCXX_3.4.27 is from gcc 10 - GLIBCXX_3.4.28 is from gcc 10 - GLIBCXX_3.4.29 is from gcc 11 -+ GLIBCXX_3.4.30 is from gcc 12 - - This file adds the necessary compatibility tricks to avoid symbols with - version GLIBCXX_3.4.20 and bigger, keeping binary compatibility with -@@ -69,6 +70,19 @@ void __attribute__((weak)) __throw_bad_array_new_length() { MOZ_CRASH(); } - } // namespace std - #endif - -+#if _GLIBCXX_RELEASE >= 12 -+namespace std { -+ -+/* This avoids the GLIBCXX_3.4.30 symbol version. */ -+void __attribute__((weak)) -+__glibcxx_assert_fail(const char* __file, int __line, const char* __function, -+ const char* __condition) { -+ MOZ_CRASH(); -+} -+ -+} // namespace std -+#endif -+ - /* While we generally don't build with exceptions, we have some host tools - * that do use them. libstdc++ from GCC 5.0 added exception constructors with - * char const* argument. Older versions only have a constructor with --- -2.35.1 - diff --git a/0025-Add-KDE-integration-to-Firefox-toolkit-parts.patch b/0025-Add-KDE-integration-to-Firefox-toolkit-parts.patch deleted file mode 100644 index bd543b3..0000000 --- a/0025-Add-KDE-integration-to-Firefox-toolkit-parts.patch +++ /dev/null @@ -1,1343 +0,0 @@ -diff -up firefox-119.0/modules/libpref/moz.build.integration firefox-119.0/modules/libpref/moz.build ---- firefox-119.0/modules/libpref/moz.build.integration 2023-10-19 21:54:34.000000000 +0200 -+++ firefox-119.0/modules/libpref/moz.build 2023-10-31 08:59:03.719124766 +0100 -@@ -126,6 +126,10 @@ UNIFIED_SOURCES += [ - "SharedPrefMap.cpp", - ] - -+LOCAL_INCLUDES += [ -+ '/toolkit/xre' -+] -+ - gen_all_tuple = tuple(gen_h + gen_cpp + gen_rs) - - GeneratedFile( -diff -up firefox-119.0/modules/libpref/Preferences.cpp.integration firefox-119.0/modules/libpref/Preferences.cpp ---- firefox-119.0/modules/libpref/Preferences.cpp.integration 2023-10-19 21:54:34.000000000 +0200 -+++ firefox-119.0/modules/libpref/Preferences.cpp 2023-10-31 08:59:03.719124766 +0100 -@@ -95,6 +95,7 @@ - #ifdef MOZ_BACKGROUNDTASKS - # include "mozilla/BackgroundTasks.h" - #endif -+#include "nsKDEUtils.h" - - #ifdef DEBUG - # include -diff -up firefox-119.0/python/mozbuild/mozpack/chrome/flags.py.integration firefox-119.0/python/mozbuild/mozpack/chrome/flags.py ---- firefox-119.0/python/mozbuild/mozpack/chrome/flags.py.integration 2023-10-19 21:54:34.000000000 +0200 -+++ firefox-119.0/python/mozbuild/mozpack/chrome/flags.py 2023-10-31 08:59:03.719124766 +0100 -@@ -234,6 +234,7 @@ class Flags(OrderedDict): - "tablet": Flag, - "process": StringFlag, - "backgroundtask": StringFlag, -+ "desktop": StringFlag, - } - RE = re.compile(r"([!<>=]+)") - -diff -up firefox-119.0/python/mozbuild/mozpack/chrome/manifest.py.integration firefox-119.0/python/mozbuild/mozpack/chrome/manifest.py ---- firefox-119.0/python/mozbuild/mozpack/chrome/manifest.py.integration 2023-10-19 21:54:34.000000000 +0200 -+++ firefox-119.0/python/mozbuild/mozpack/chrome/manifest.py 2023-10-31 08:59:03.719124766 +0100 -@@ -43,6 +43,7 @@ class ManifestEntry(object): - "process", - "contentaccessible", - "backgroundtask", -+ "desktop", - ] - - def __init__(self, base, *flags): -diff -up firefox-119.0/toolkit/components/downloads/moz.build.integration firefox-119.0/toolkit/components/downloads/moz.build ---- firefox-119.0/toolkit/components/downloads/moz.build.integration 2023-10-19 21:54:43.000000000 +0200 -+++ firefox-119.0/toolkit/components/downloads/moz.build 2023-10-31 08:59:03.720124801 +0100 -@@ -51,5 +51,9 @@ if CONFIG["MOZ_PLACES"]: - - FINAL_LIBRARY = "xul" - -+LOCAL_INCLUDES += [ -+ '/toolkit/xre' -+] -+ - with Files("**"): - BUG_COMPONENT = ("Toolkit", "Downloads API") -diff -up firefox-119.0/toolkit/mozapps/downloads/HelperAppDlg.sys.mjs.integration firefox-119.0/toolkit/mozapps/downloads/HelperAppDlg.sys.mjs ---- firefox-119.0/toolkit/mozapps/downloads/HelperAppDlg.sys.mjs.integration 2023-10-19 21:54:43.000000000 +0200 -+++ firefox-119.0/toolkit/mozapps/downloads/HelperAppDlg.sys.mjs 2023-10-31 08:59:03.720124801 +0100 -@@ -1246,26 +1246,56 @@ nsUnknownContentTypeDialog.prototype = { - this.chosenApp = params.handlerApp; - } - } else if ("@mozilla.org/applicationchooser;1" in Cc) { -- var nsIApplicationChooser = Ci.nsIApplicationChooser; -- var appChooser = Cc["@mozilla.org/applicationchooser;1"].createInstance( -- nsIApplicationChooser -- ); -- appChooser.init( -- this.mDialog, -- this.dialogElement("strings").getString("chooseAppFilePickerTitle") -- ); -- var contentTypeDialogObj = this; -- let appChooserCallback = function appChooserCallback_done(aResult) { -- if (aResult) { -- contentTypeDialogObj.chosenApp = aResult.QueryInterface( -- Ci.nsILocalHandlerApp -- ); -- } -- contentTypeDialogObj.finishChooseApp(); -- }; -- appChooser.open(this.mLauncher.MIMEInfo.MIMEType, appChooserCallback); -- // The finishChooseApp is called from appChooserCallback -- return; -+ // handle the KDE case which is implemented in the filepicker -+ // therefore falling back to Gtk2 like behaviour if KDE is running -+ // FIXME this should be better handled in the nsIApplicationChooser -+ // interface -+ var env = Components.classes["@mozilla.org/process/environment;1"] -+ .getService(Components.interfaces.nsIEnvironment); -+ if (env.get('KDE_FULL_SESSION') == "true") -+ { -+ var nsIFilePicker = Ci.nsIFilePicker; -+ var fp = Cc["@mozilla.org/filepicker;1"] -+ .createInstance(nsIFilePicker); -+ fp.init(this.mDialog, -+ this.dialogElement("strings").getString("chooseAppFilePickerTitle"), -+ nsIFilePicker.modeOpen); -+ -+ fp.appendFilters(nsIFilePicker.filterApps); -+ -+ fp.open(aResult => { -+ if (aResult == nsIFilePicker.returnOK && fp.file) { -+ // Remember the file they chose to run. -+ var localHandlerApp = -+ Cc["@mozilla.org/uriloader/local-handler-app;1"]. -+ createInstance(Ci.nsILocalHandlerApp); -+ localHandlerApp.executable = fp.file; -+ this.chosenApp = localHandlerApp; -+ } -+ this.finishChooseApp(); -+ }); -+ } else { -+ var nsIApplicationChooser = Ci.nsIApplicationChooser; -+ var appChooser = Cc["@mozilla.org/applicationchooser;1"].createInstance( -+ nsIApplicationChooser -+ ); -+ appChooser.init( -+ this.mDialog, -+ this.dialogElement("strings").getString("chooseAppFilePickerTitle") -+ ); -+ var contentTypeDialogObj = this; -+ let appChooserCallback = function appChooserCallback_done(aResult) { -+ if (aResult) { -+ contentTypeDialogObj.chosenApp = aResult.QueryInterface( -+ Ci.nsILocalHandlerApp -+ ); -+ } -+ contentTypeDialogObj.finishChooseApp(); -+ }; -+ appChooser.open(this.mLauncher.MIMEInfo.MIMEType, appChooserCallback); -+ // The finishChooseApp is called from appChooserCallback -+ return; -+ } - } else { - var nsIFilePicker = Ci.nsIFilePicker; - var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); -diff -up firefox-119.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp.integration firefox-119.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp ---- firefox-119.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp.integration 2023-10-19 21:54:43.000000000 +0200 -+++ firefox-119.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp 2023-10-31 08:59:03.720124801 +0100 -@@ -16,6 +16,8 @@ - #include "nsISupportsPrimitives.h" - #include "nsIGSettingsService.h" - #include "nsReadableUtils.h" -+#include "nsPrintfCString.h" -+#include "nsKDEUtils.h" - - using namespace mozilla; - -@@ -39,6 +41,8 @@ class nsUnixSystemProxySettings final : - nsACString& aResult); - nsresult SetProxyResultFromGSettings(const char* aKeyBase, const char* aType, - nsACString& aResult); -+ nsresult GetProxyFromKDE(const nsACString& aScheme, const nsACString& aHost, -+ PRInt32 aPort, nsACString& aResult); - }; - - NS_IMPL_ISUPPORTS(nsUnixSystemProxySettings, nsISystemProxySettings) -@@ -393,6 +397,9 @@ nsresult nsUnixSystemProxySettings::GetP - const nsACString& aHost, - const int32_t aPort, - nsACString& aResult) { -+ if (nsKDEUtils::kdeSupport()) -+ return GetProxyFromKDE(aScheme, aHost, aPort, aResult); -+ - if (mProxySettings) { - nsresult rv = GetProxyFromGSettings(aScheme, aHost, aPort, aResult); - if (NS_SUCCEEDED(rv)) return rv; -@@ -401,6 +408,28 @@ nsresult nsUnixSystemProxySettings::GetP - return GetProxyFromEnvironment(aScheme, aHost, aPort, aResult); - } - -+nsresult nsUnixSystemProxySettings::GetProxyFromKDE(const nsACString& aScheme, -+ const nsACString& aHost, -+ PRInt32 aPort, -+ nsACString& aResult) { -+ nsAutoCString url; -+ url = aScheme; -+ url += "://"; -+ url += aHost; -+ if (aPort >= 0) { -+ url += ":"; -+ url += nsPrintfCString("%d", aPort); -+ } -+ nsTArray command; -+ command.AppendElement("GETPROXY"_ns); -+ command.AppendElement(url); -+ nsTArray result; -+ if (!nsKDEUtils::command(command, &result) || result.Length() != 1) -+ return NS_ERROR_FAILURE; -+ aResult = result[0]; -+ return NS_OK; -+} -+ - NS_IMPL_COMPONENT_FACTORY(nsUnixSystemProxySettings) { - auto result = MakeRefPtr(); - result->Init(); -diff -up firefox-119.0/toolkit/xre/moz.build.integration firefox-119.0/toolkit/xre/moz.build ---- firefox-119.0/toolkit/xre/moz.build.integration 2023-10-19 21:54:43.000000000 +0200 -+++ firefox-119.0/toolkit/xre/moz.build 2023-10-31 08:59:03.720124801 +0100 -@@ -96,7 +96,9 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "ui - "UIKitDirProvider.mm", - ] - elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": -+ EXPORTS += ['nsKDEUtils.h'] - UNIFIED_SOURCES += [ -+ "nsKDEUtils.cpp", - "nsNativeAppSupportUnix.cpp", - ] - CXXFLAGS += CONFIG["MOZ_X11_SM_CFLAGS"] -diff -up firefox-119.0/toolkit/xre/nsKDEUtils.cpp.integration firefox-119.0/toolkit/xre/nsKDEUtils.cpp ---- firefox-119.0/toolkit/xre/nsKDEUtils.cpp.integration 2023-10-31 08:59:03.721124836 +0100 -+++ firefox-119.0/toolkit/xre/nsKDEUtils.cpp 2023-10-31 08:59:03.721124836 +0100 -@@ -0,0 +1,286 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+#include "nsKDEUtils.h" -+#include "nsIWidget.h" -+#include "nsISupportsPrimitives.h" -+#include "nsIMutableArray.h" -+#include "nsComponentManagerUtils.h" -+#include "nsArrayUtils.h" -+ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+// copied from X11/X.h as a hack since for an unknown -+// reason it's not picked up from X11/X.h -+#ifndef None -+# define None 0L /* universal null resource or null atom */ -+#endif -+ -+// #define DEBUG_KDE -+#ifdef DEBUG_KDE -+# define KMOZILLAHELPER "kmozillahelper" -+#else -+// not need for lib64, it's a binary -+# define KMOZILLAHELPER "/usr/lib/mozilla/kmozillahelper" -+#endif -+ -+#define KMOZILLAHELPER_VERSION 6 -+#define MAKE_STR2(n) #n -+#define MAKE_STR(n) MAKE_STR2(n) -+ -+static bool getKdeSession() { -+ if (PR_GetEnv("KDE_FULL_SESSION")) { -+ return true; -+ } -+ return false; -+} -+ -+static bool getKdeSupport() { -+ nsTArray command; -+ command.AppendElement("CHECK"_ns); -+ command.AppendElement("KMOZILLAHELPER_VERSION"_ns); -+ bool kde = nsKDEUtils::command(command); -+#ifdef DEBUG_KDE -+ fprintf(stderr, "KDE RUNNING %d\n", kde); -+#endif -+ return kde; -+} -+ -+nsKDEUtils::nsKDEUtils() : commandFile(NULL), replyFile(NULL) {} -+ -+nsKDEUtils::~nsKDEUtils() { -+ // closeHelper(); not actually useful, exiting will close the fd too -+} -+ -+nsKDEUtils* nsKDEUtils::self() { -+ static nsKDEUtils s; -+ return &s; -+} -+ -+static bool helperRunning = false; -+static bool helperFailed = false; -+ -+bool nsKDEUtils::kdeSession() { -+ static bool session = getKdeSession(); -+ return session; -+} -+ -+bool nsKDEUtils::kdeSupport() { -+ static bool support = kdeSession() && getKdeSupport(); -+ return support && helperRunning; -+} -+ -+struct nsKDECommandData { -+ FILE* file; -+ nsTArray* output; -+ GMainLoop* loop; -+ bool success; -+}; -+ -+static gboolean kdeReadFunc(GIOChannel*, GIOCondition, gpointer data) { -+ nsKDECommandData* p = static_cast(data); -+ char buf[8192]; // TODO big enough -+ bool command_done = false; -+ bool command_failed = false; -+ while (!command_done && !command_failed && -+ fgets(buf, 8192, p->file) != -+ NULL) { // TODO what if the kernel splits a line into two chunks? -+ // #ifdef DEBUG_KDE -+ // fprintf( stderr, "READ: %s %d\n", buf, feof( p->file )); -+ // #endif -+ if (char* eol = strchr(buf, '\n')) *eol = '\0'; -+ command_done = (strcmp(buf, "\\1") == 0); -+ command_failed = (strcmp(buf, "\\0") == 0); -+ nsAutoCString line(buf); -+ line.ReplaceSubstring("\\n", "\n"); -+ line.ReplaceSubstring( -+ "\\" -+ "\\", -+ "\\"); // \\ -> \ , i.e. unescape -+ if (p->output && !(command_done || command_failed)) -+ p->output->AppendElement(nsCString(buf)); // TODO utf8? -+ } -+ bool quit = false; -+ if (feof(p->file) || command_failed) { -+ quit = true; -+ p->success = false; -+ } -+ if (command_done) { // reading one reply finished -+ quit = true; -+ p->success = true; -+ } -+ if (quit) { -+ if (p->loop) g_main_loop_quit(p->loop); -+ return FALSE; -+ } -+ return TRUE; -+} -+ -+bool nsKDEUtils::command(const nsTArray& command, -+ nsTArray* output) { -+ return self()->internalCommand(command, NULL, false, output); -+} -+ -+bool nsKDEUtils::command(nsIArray* command, nsIArray** output) { -+ nsTArray in; -+ PRUint32 length; -+ command->GetLength(&length); -+ for (PRUint32 i = 0; i < length; i++) { -+ nsCOMPtr str = do_QueryElementAt(command, i); -+ if (str) { -+ nsAutoCString s; -+ str->GetData(s); -+ in.AppendElement(s); -+ } -+ } -+ -+ nsTArray out; -+ bool ret = self()->internalCommand(in, NULL, false, &out); -+ -+ if (!output) return ret; -+ -+ nsCOMPtr result = do_CreateInstance(NS_ARRAY_CONTRACTID); -+ if (!result) return false; -+ -+ for (PRUint32 i = 0; i < out.Length(); i++) { -+ nsCOMPtr rstr = -+ do_CreateInstance(NS_SUPPORTS_CSTRING_CONTRACTID); -+ if (!rstr) return false; -+ -+ rstr->SetData(out[i]); -+ result->AppendElement(rstr); -+ } -+ -+ NS_ADDREF(*output = result); -+ return ret; -+} -+ -+bool nsKDEUtils::commandBlockUi(const nsTArray& command, -+ GtkWindow* parent, -+ nsTArray* output) { -+ return self()->internalCommand(command, parent, true, output); -+} -+ -+bool nsKDEUtils::internalCommand(const nsTArray& command, -+ GtkWindow* parent, bool blockUi, -+ nsTArray* output) { -+ if (!startHelper()) return false; -+ feedCommand(command); -+ // do not store the data in 'this' but in extra structure, just in case there -+ // is reentrancy (can there be? the event loop is re-entered) -+ nsKDECommandData data; -+ data.file = replyFile; -+ data.output = output; -+ data.success = false; -+ if (blockUi) { -+ data.loop = g_main_loop_new(NULL, FALSE); -+ GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); -+ if (parent && gtk_window_get_group(parent)) -+ gtk_window_group_add_window(gtk_window_get_group(parent), -+ GTK_WINDOW(window)); -+ gtk_widget_realize(window); -+ gtk_widget_set_sensitive(window, TRUE); -+ gtk_grab_add(window); -+ GIOChannel* channel = g_io_channel_unix_new(fileno(data.file)); -+ g_io_add_watch(channel, -+ static_cast(G_IO_IN | G_IO_ERR | G_IO_HUP), -+ kdeReadFunc, &data); -+ g_io_channel_unref(channel); -+ g_main_loop_run(data.loop); -+ g_main_loop_unref(data.loop); -+ gtk_grab_remove(window); -+ gtk_widget_destroy(window); -+ } else { -+ data.loop = NULL; -+ while (kdeReadFunc(NULL, static_cast(0), &data)) -+ ; -+ } -+ return data.success; -+} -+ -+bool nsKDEUtils::startHelper() { -+ if (helperRunning) return true; -+ if (helperFailed) return false; -+ helperFailed = true; -+ int fdcommand[2]; -+ int fdreply[2]; -+ if (pipe(fdcommand) < 0) return false; -+ if (pipe(fdreply) < 0) { -+ close(fdcommand[0]); -+ close(fdcommand[1]); -+ return false; -+ } -+ char* args[2] = {const_cast(KMOZILLAHELPER), NULL}; -+ switch (fork()) { -+ case -1: { -+ close(fdcommand[0]); -+ close(fdcommand[1]); -+ close(fdreply[0]); -+ close(fdreply[1]); -+ return false; -+ } -+ case 0: // child -+ { -+ if (dup2(fdcommand[0], STDIN_FILENO) < 0) _exit(1); -+ if (dup2(fdreply[1], STDOUT_FILENO) < 0) _exit(1); -+ int maxfd = 1024; // close all other fds -+ struct rlimit rl; -+ if (getrlimit(RLIMIT_NOFILE, &rl) == 0) maxfd = rl.rlim_max; -+ for (int i = 3; i < maxfd; ++i) close(i); -+#ifdef DEBUG_KDE -+ execvp(KMOZILLAHELPER, args); -+#else -+ execv(KMOZILLAHELPER, args); -+#endif -+ _exit(1); // failed -+ } -+ default: // parent -+ { -+ commandFile = fdopen(fdcommand[1], "w"); -+ replyFile = fdopen(fdreply[0], "r"); -+ close(fdcommand[0]); -+ close(fdreply[1]); -+ if (commandFile == NULL || replyFile == NULL) { -+ closeHelper(); -+ return false; -+ } -+ // ok, helper ready, getKdeRunning() will check if it works -+ } -+ } -+ helperFailed = false; -+ helperRunning = true; -+ return true; -+} -+ -+void nsKDEUtils::closeHelper() { -+ if (commandFile != NULL) -+ fclose(commandFile); // this will also make the helper quit -+ if (replyFile != NULL) fclose(replyFile); -+ helperRunning = false; -+} -+ -+void nsKDEUtils::feedCommand(const nsTArray& command) { -+ for (int i = 0; i < command.Length(); ++i) { -+ nsCString line = command[i]; -+ line.ReplaceSubstring("\\", -+ "\\" -+ "\\"); // \ -> \\ , i.e. escape -+ line.ReplaceSubstring("\n", "\\n"); -+#ifdef DEBUG_KDE -+ fprintf(stderr, "COMM: %s\n", line.get()); -+#endif -+ fputs(line.get(), commandFile); -+ fputs("\n", commandFile); -+ } -+ fputs("\\E\n", -+ commandFile); // done as \E, so it cannot happen in normal data -+ fflush(commandFile); -+} -diff -up firefox-119.0/toolkit/xre/nsKDEUtils.h.integration firefox-119.0/toolkit/xre/nsKDEUtils.h ---- firefox-119.0/toolkit/xre/nsKDEUtils.h.integration 2023-10-31 08:59:03.721124836 +0100 -+++ firefox-119.0/toolkit/xre/nsKDEUtils.h 2023-10-31 08:59:03.721124836 +0100 -@@ -0,0 +1,53 @@ -+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+#ifndef nsKDEUtils_h__ -+#define nsKDEUtils_h__ -+ -+#include "nsString.h" -+#include "nsTArray.h" -+#include -+ -+typedef struct _GtkWindow GtkWindow; -+ -+class nsIArray; -+ -+class NS_EXPORT nsKDEUtils { -+ public: -+ /* Returns true if running inside a KDE session (regardless of whether there -+ is KDE support available for Firefox). This should be used e.g. when -+ determining dialog button order but not for code that requires the KDE -+ support. */ -+ static bool kdeSession(); -+ /* Returns true if running inside a KDE session and KDE support is available -+ for Firefox. This should be used everywhere where the external helper is -+ needed. */ -+ static bool kdeSupport(); -+ /* Executes the given helper command, returns true if helper returned success. -+ */ -+ static bool command(const nsTArray& command, -+ nsTArray* output = NULL); -+ static bool command(nsIArray* command, nsIArray** output = NULL); -+ /* Like command(), but additionally blocks the parent widget like if there was -+ a modal dialog shown and enters the event loop (i.e. there are still paint -+ updates, this is for commands that take long). */ -+ static bool commandBlockUi(const nsTArray& command, -+ GtkWindow* parent, -+ nsTArray* output = NULL); -+ -+ private: -+ nsKDEUtils(); -+ ~nsKDEUtils(); -+ static nsKDEUtils* self(); -+ bool startHelper(); -+ void closeHelper(); -+ void feedCommand(const nsTArray& command); -+ bool internalCommand(const nsTArray& command, GtkWindow* parent, -+ bool isParent, nsTArray* output); -+ FILE* commandFile; -+ FILE* replyFile; -+}; -+ -+#endif // nsKDEUtils -diff -up firefox-119.0/uriloader/exthandler/HandlerServiceParent.cpp.integration firefox-119.0/uriloader/exthandler/HandlerServiceParent.cpp ---- firefox-119.0/uriloader/exthandler/HandlerServiceParent.cpp.integration 2023-10-19 21:54:43.000000000 +0200 -+++ firefox-119.0/uriloader/exthandler/HandlerServiceParent.cpp 2023-10-31 08:59:03.721124836 +0100 -@@ -18,7 +18,7 @@ - #include "nsComponentManagerUtils.h" - #include "nsServiceManagerUtils.h" - #ifdef MOZ_WIDGET_GTK --# include "unix/nsGNOMERegistry.h" -+# include "unix/nsCommonRegistry.h" - #endif - - using mozilla::dom::ContentHandlerService; -@@ -310,8 +310,8 @@ mozilla::ipc::IPCResult HandlerServicePa - } - #ifdef MOZ_WIDGET_GTK - // Check the GNOME registry for a protocol handler -- *aHandlerExists = -- nsGNOMERegistry::HandlerExists(PromiseFlatCString(aProtocolScheme).get()); -+ *aHandlerExists = nsCommonRegistry::HandlerExists( -+ PromiseFlatCString(aProtocolScheme).get()); - #else - *aHandlerExists = false; - #endif -diff -up firefox-119.0/uriloader/exthandler/moz.build.integration firefox-119.0/uriloader/exthandler/moz.build ---- firefox-119.0/uriloader/exthandler/moz.build.integration 2023-10-19 21:54:43.000000000 +0200 -+++ firefox-119.0/uriloader/exthandler/moz.build 2023-10-31 08:59:03.721124836 +0100 -@@ -86,7 +86,9 @@ else: - - if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": - UNIFIED_SOURCES += [ -+ "unix/nsCommonRegistry.cpp", - "unix/nsGNOMERegistry.cpp", -+ "unix/nsKDERegistry.cpp", - "unix/nsMIMEInfoUnix.cpp", - ] - elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "android": -@@ -134,6 +136,7 @@ LOCAL_INCLUDES += [ - "/dom/ipc", - "/netwerk/base", - "/netwerk/protocol/http", -+ "/toolkit/xre", - ] - - if CONFIG["MOZ_ENABLE_DBUS"]: -diff -up firefox-119.0/uriloader/exthandler/unix/nsCommonRegistry.cpp.integration firefox-119.0/uriloader/exthandler/unix/nsCommonRegistry.cpp ---- firefox-119.0/uriloader/exthandler/unix/nsCommonRegistry.cpp.integration 2023-10-31 08:59:03.721124836 +0100 -+++ firefox-119.0/uriloader/exthandler/unix/nsCommonRegistry.cpp 2023-10-31 08:59:03.721124836 +0100 -@@ -0,0 +1,42 @@ -+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+#include "nsCommonRegistry.h" -+ -+#include "nsGNOMERegistry.h" -+#include "nsKDERegistry.h" -+#include "nsString.h" -+#include "nsKDEUtils.h" -+ -+/* static */ bool nsCommonRegistry::HandlerExists(const char* aProtocolScheme) { -+ if (nsKDEUtils::kdeSupport()) -+ return nsKDERegistry::HandlerExists(aProtocolScheme); -+ return nsGNOMERegistry::HandlerExists(aProtocolScheme); -+} -+ -+/* static */ nsresult nsCommonRegistry::LoadURL(nsIURI* aURL) { -+ if (nsKDEUtils::kdeSupport()) return nsKDERegistry::LoadURL(aURL); -+ return nsGNOMERegistry::LoadURL(aURL); -+} -+ -+/* static */ void nsCommonRegistry::GetAppDescForScheme( -+ const nsACString& aScheme, nsAString& aDesc) { -+ if (nsKDEUtils::kdeSupport()) -+ return nsKDERegistry::GetAppDescForScheme(aScheme, aDesc); -+ return nsGNOMERegistry::GetAppDescForScheme(aScheme, aDesc); -+} -+ -+/* static */ already_AddRefed -+nsCommonRegistry::GetFromExtension(const nsACString& aFileExt) { -+ if (nsKDEUtils::kdeSupport()) -+ return nsKDERegistry::GetFromExtension(aFileExt); -+ return nsGNOMERegistry::GetFromExtension(aFileExt); -+} -+ -+/* static */ already_AddRefed nsCommonRegistry::GetFromType( -+ const nsACString& aMIMEType) { -+ if (nsKDEUtils::kdeSupport()) return nsKDERegistry::GetFromType(aMIMEType); -+ return nsGNOMERegistry::GetFromType(aMIMEType); -+} -diff -up firefox-119.0/uriloader/exthandler/unix/nsCommonRegistry.h.integration firefox-119.0/uriloader/exthandler/unix/nsCommonRegistry.h ---- firefox-119.0/uriloader/exthandler/unix/nsCommonRegistry.h.integration 2023-10-31 08:59:03.721124836 +0100 -+++ firefox-119.0/uriloader/exthandler/unix/nsCommonRegistry.h 2023-10-31 08:59:03.721124836 +0100 -@@ -0,0 +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/. */ -+ -+#ifndef nsCommonRegistry_h__ -+#define nsCommonRegistry_h__ -+ -+#include "nsIURI.h" -+#include "nsCOMPtr.h" -+ -+class nsMIMEInfoBase; -+ -+class nsCommonRegistry { -+ public: -+ static bool HandlerExists(const char* aProtocolScheme); -+ -+ static nsresult LoadURL(nsIURI* aURL); -+ -+ static void GetAppDescForScheme(const nsACString& aScheme, nsAString& aDesc); -+ -+ static already_AddRefed GetFromExtension( -+ const nsACString& aFileExt); -+ -+ static already_AddRefed GetFromType( -+ const nsACString& aMIMEType); -+}; -+ -+#endif -diff -up firefox-119.0/uriloader/exthandler/unix/nsKDERegistry.cpp.integration firefox-119.0/uriloader/exthandler/unix/nsKDERegistry.cpp ---- firefox-119.0/uriloader/exthandler/unix/nsKDERegistry.cpp.integration 2023-10-31 08:59:03.722124870 +0100 -+++ firefox-119.0/uriloader/exthandler/unix/nsKDERegistry.cpp 2023-10-31 08:59:03.722124870 +0100 -@@ -0,0 +1,75 @@ -+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+#include "mozilla/StaticPrefs_browser.h" -+#include "nsKDERegistry.h" -+#include "prlink.h" -+#include "prmem.h" -+#include "nsString.h" -+#include "nsMIMEInfoUnix.h" -+#include "nsKDEUtils.h" -+ -+/* static */ bool nsKDERegistry::HandlerExists(const char* aProtocolScheme) { -+ nsTArray command; -+ command.AppendElement("HANDLEREXISTS"_ns); -+ command.AppendElement(nsAutoCString(aProtocolScheme)); -+ return nsKDEUtils::command(command); -+} -+ -+/* static */ nsresult nsKDERegistry::LoadURL(nsIURI* aURL) { -+ nsTArray command; -+ command.AppendElement("OPEN"_ns); -+ nsCString url; -+ aURL->GetSpec(url); -+ command.AppendElement(url); -+ bool rv = nsKDEUtils::command(command); -+ if (!rv) return NS_ERROR_FAILURE; -+ -+ return NS_OK; -+} -+ -+/* static */ void nsKDERegistry::GetAppDescForScheme(const nsACString& aScheme, -+ nsAString& aDesc) { -+ nsTArray command; -+ command.AppendElement("GETAPPDESCFORSCHEME"_ns); -+ command.AppendElement(aScheme); -+ nsTArray output; -+ if (nsKDEUtils::command(command, &output) && output.Length() == 1) -+ CopyUTF8toUTF16(output[0], aDesc); -+} -+ -+/* static */ already_AddRefed nsKDERegistry::GetFromExtension( -+ const nsACString& aFileExt) { -+ NS_ASSERTION(aFileExt[0] != '.', "aFileExt shouldn't start with a dot"); -+ nsTArray command; -+ command.AppendElement("GETFROMEXTENSION"_ns); -+ command.AppendElement(aFileExt); -+ return GetFromHelper(command); -+} -+ -+/* static */ already_AddRefed nsKDERegistry::GetFromType( -+ const nsACString& aMIMEType) { -+ nsTArray command; -+ command.AppendElement("GETFROMTYPE"_ns); -+ command.AppendElement(aMIMEType); -+ return GetFromHelper(command); -+} -+ -+/* static */ already_AddRefed nsKDERegistry::GetFromHelper( -+ const nsTArray& command) { -+ nsTArray output; -+ if (nsKDEUtils::command(command, &output) && output.Length() == 3) { -+ nsCString mimetype = output[0]; -+ RefPtr mimeInfo = new nsMIMEInfoUnix(mimetype); -+ NS_ENSURE_TRUE(mimeInfo, nullptr); -+ nsCString description = output[1]; -+ mimeInfo->SetDescription(NS_ConvertUTF8toUTF16(description)); -+ nsCString handlerAppName = output[2]; -+ mimeInfo->SetPreferredAction(nsIMIMEInfo::saveToDisk); -+ mimeInfo->SetDefaultDescription(NS_ConvertUTF8toUTF16(handlerAppName)); -+ return mimeInfo.forget(); -+ } -+ return nullptr; -+} -diff -up firefox-119.0/uriloader/exthandler/unix/nsKDERegistry.h.integration firefox-119.0/uriloader/exthandler/unix/nsKDERegistry.h ---- firefox-119.0/uriloader/exthandler/unix/nsKDERegistry.h.integration 2023-10-31 08:59:03.722124870 +0100 -+++ firefox-119.0/uriloader/exthandler/unix/nsKDERegistry.h 2023-10-31 08:59:03.722124870 +0100 -@@ -0,0 +1,35 @@ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+#ifndef nsKDERegistry_h__ -+#define nsKDERegistry_h__ -+ -+#include "nsIURI.h" -+#include "nsCOMPtr.h" -+#include "nsTArray.h" -+ -+class nsMIMEInfoBase; -+// class nsAutoCString; -+// class nsCString; -+ -+class nsKDERegistry { -+ public: -+ static bool HandlerExists(const char* aProtocolScheme); -+ -+ static nsresult LoadURL(nsIURI* aURL); -+ -+ static void GetAppDescForScheme(const nsACString& aScheme, nsAString& aDesc); -+ -+ static already_AddRefed GetFromExtension( -+ const nsACString& aFileExt); -+ -+ static already_AddRefed GetFromType( -+ const nsACString& aMIMEType); -+ -+ private: -+ static already_AddRefed GetFromHelper( -+ const nsTArray& command); -+}; -+ -+#endif // nsKDERegistry_h__ -diff -up firefox-119.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp.integration firefox-119.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp ---- firefox-119.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp.integration 2023-10-19 21:54:43.000000000 +0200 -+++ firefox-119.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp 2023-10-31 08:59:03.722124870 +0100 -@@ -5,16 +5,19 @@ - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - - #include "nsMIMEInfoUnix.h" --#include "nsGNOMERegistry.h" -+#include "nsCommonRegistry.h" - #include "nsIGIOService.h" - #include "nsNetCID.h" - #include "nsIIOService.h" - #ifdef MOZ_ENABLE_DBUS - # include "nsDBusHandlerApp.h" - #endif -+#if defined(XP_UNIX) && !defined(XP_MACOSX) -+# include "nsKDEUtils.h" -+#endif - - nsresult nsMIMEInfoUnix::LoadUriInternal(nsIURI* aURI) { -- return nsGNOMERegistry::LoadURL(aURI); -+ return nsCommonRegistry::LoadURL(aURI); - } - - NS_IMETHODIMP -@@ -29,15 +32,15 @@ nsMIMEInfoUnix::GetHasDefaultHandler(boo - *_retval = false; - - if (mClass == eProtocolInfo) { -- *_retval = nsGNOMERegistry::HandlerExists(mSchemeOrType.get()); -+ *_retval = nsCommonRegistry::HandlerExists(mSchemeOrType.get()); - } else { - RefPtr mimeInfo = -- nsGNOMERegistry::GetFromType(mSchemeOrType); -+ nsCommonRegistry::GetFromType(mSchemeOrType); - if (!mimeInfo) { - nsAutoCString ext; - nsresult rv = GetPrimaryExtension(ext); - if (NS_SUCCEEDED(rv)) { -- mimeInfo = nsGNOMERegistry::GetFromExtension(ext); -+ mimeInfo = nsCommonRegistry::GetFromExtension(ext); - } - } - if (mimeInfo) *_retval = true; -@@ -59,6 +62,21 @@ nsresult nsMIMEInfoUnix::LaunchDefaultWi - nsAutoCString nativePath; - aFile->GetNativePath(nativePath); - -+ if (nsKDEUtils::kdeSupport()) { -+ bool supports; -+ if (NS_SUCCEEDED(GetHasDefaultHandler(&supports)) && supports) { -+ nsTArray command; -+ command.AppendElement("OPEN"_ns); -+ command.AppendElement(nativePath); -+ command.AppendElement("MIMETYPE"_ns); -+ command.AppendElement(mSchemeOrType); -+ if (nsKDEUtils::command(command)) return NS_OK; -+ } -+ if (!GetDefaultApplication()) return NS_ERROR_FILE_NOT_FOUND; -+ -+ return LaunchWithIProcess(GetDefaultApplication(), nativePath); -+ } -+ - nsCOMPtr giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); - if (!giovfs) { - return NS_ERROR_FAILURE; -diff -up firefox-119.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp.integration firefox-119.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp ---- firefox-119.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp.integration 2023-10-19 21:54:42.000000000 +0200 -+++ firefox-119.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp 2023-10-31 08:59:03.722124870 +0100 -@@ -10,7 +10,7 @@ - #include "nsOSHelperAppService.h" - #include "nsMIMEInfoUnix.h" - #ifdef MOZ_WIDGET_GTK --# include "nsGNOMERegistry.h" -+# include "nsCommonRegistry.h" - # ifdef MOZ_BUILD_APP_IS_BROWSER - # include "nsIToolkitShellService.h" - # include "nsIGNOMEShellService.h" -@@ -1106,7 +1106,7 @@ nsresult nsOSHelperAppService::OSProtoco - if (!XRE_IsContentProcess()) { - #ifdef MOZ_WIDGET_GTK - // Check the GNOME registry for a protocol handler -- *aHandlerExists = nsGNOMERegistry::HandlerExists(aProtocolScheme); -+ *aHandlerExists = nsCommonRegistry::HandlerExists(aProtocolScheme); - #else - *aHandlerExists = false; - #endif -@@ -1126,7 +1126,7 @@ nsresult nsOSHelperAppService::OSProtoco - NS_IMETHODIMP nsOSHelperAppService::GetApplicationDescription( - const nsACString& aScheme, nsAString& _retval) { - #ifdef MOZ_WIDGET_GTK -- nsGNOMERegistry::GetAppDescForScheme(aScheme, _retval); -+ nsCommonRegistry::GetAppDescForScheme(aScheme, _retval); - return _retval.IsEmpty() ? NS_ERROR_NOT_AVAILABLE : NS_OK; - #else - return NS_ERROR_NOT_AVAILABLE; -@@ -1231,7 +1231,7 @@ already_AddRefed nsOSHel - #ifdef MOZ_WIDGET_GTK - LOG("Looking in GNOME registry\n"); - RefPtr gnomeInfo = -- nsGNOMERegistry::GetFromExtension(aFileExt); -+ nsCommonRegistry::GetFromExtension(aFileExt); - if (gnomeInfo) { - LOG("Got MIMEInfo from GNOME registry\n"); - return gnomeInfo.forget(); -@@ -1344,7 +1344,7 @@ already_AddRefed nsOSHel - - #ifdef MOZ_WIDGET_GTK - if (handler.IsEmpty()) { -- RefPtr gnomeInfo = nsGNOMERegistry::GetFromType(aMIMEType); -+ RefPtr gnomeInfo = nsCommonRegistry::GetFromType(aMIMEType); - if (gnomeInfo) { - LOG("Got MIMEInfo from GNOME registry without extensions; setting them " - "to %s\n", -diff -up firefox-119.0/widget/gtk/moz.build.integration firefox-119.0/widget/gtk/moz.build ---- firefox-119.0/widget/gtk/moz.build.integration 2023-10-31 08:59:03.704124244 +0100 -+++ firefox-119.0/widget/gtk/moz.build 2023-10-31 08:59:03.723124906 +0100 -@@ -161,6 +161,7 @@ LOCAL_INCLUDES += [ - "/layout/xul", - "/other-licenses/atk-1.0", - "/third_party/cups/include", -+ "/toolkit/xre", - "/widget", - "/widget/headless", - "/widget/x11", -diff -up firefox-119.0/widget/gtk/nsFilePicker.cpp.integration firefox-119.0/widget/gtk/nsFilePicker.cpp ---- firefox-119.0/widget/gtk/nsFilePicker.cpp.integration 2023-10-19 21:54:43.000000000 +0200 -+++ firefox-119.0/widget/gtk/nsFilePicker.cpp 2023-10-31 08:59:03.723124906 +0100 -@@ -5,6 +5,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -30,6 +31,8 @@ - #include "WidgetUtilsGtk.h" - - #include "nsFilePicker.h" -+#include "nsKDEUtils.h" -+#include "nsURLHelper.h" - - #undef LOG - #ifdef MOZ_LOGGING -@@ -310,7 +313,8 @@ NS_IMETHODIMP - nsFilePicker::AppendFilter(const nsAString& aTitle, const nsAString& aFilter) { - if (aFilter.EqualsLiteral("..apps")) { - // No platform specific thing we can do here, really.... -- return NS_OK; -+ // Unless it's KDE. -+ if (mMode != modeOpen || !nsKDEUtils::kdeSupport()) return NS_OK; - } - - nsAutoCString filter, name; -@@ -420,6 +424,31 @@ nsFilePicker::Open(nsIFilePickerShownCal - // Can't show two dialogs concurrently with the same filepicker - if (mRunning) return NS_ERROR_NOT_AVAILABLE; - -+ // KDE file picker is not handled via callback -+ if (nsKDEUtils::kdeSupport()) { -+ mCallback = aCallback; -+ mRunning = true; -+ NS_ADDREF_THIS(); -+ g_idle_add( -+ [](gpointer data) -> gboolean { -+ nsFilePicker* queuedPicker = (nsFilePicker*)data; -+ nsIFilePicker::ResultCode result; -+ queuedPicker->kdeFileDialog(&result); -+ if (queuedPicker->mCallback) { -+ queuedPicker->mCallback->Done(result); -+ queuedPicker->mCallback = nullptr; -+ } else { -+ queuedPicker->mResult = result; -+ } -+ queuedPicker->mRunning = false; -+ NS_RELEASE(queuedPicker); -+ return G_SOURCE_REMOVE; -+ }, -+ this); -+ -+ return NS_OK; -+ } -+ - NS_ConvertUTF16toUTF8 title(mTitle); - - GtkWindow* parent_widget = -@@ -701,6 +730,205 @@ void nsFilePicker::Done(void* file_choos - NS_RELEASE_THIS(); - } - -+nsCString nsFilePicker::kdeMakeFilter(int index) { -+ nsCString buf = mFilters[index]; -+ for (PRUint32 i = 0; i < buf.Length(); ++i) -+ if (buf[i] == ';') // KDE separates just using spaces -+ buf.SetCharAt(' ', i); -+ if (!mFilterNames[index].IsEmpty()) { -+ buf += "|"; -+ buf += mFilterNames[index].get(); -+ } -+ return buf; -+} -+ -+static PRInt32 windowToXid(nsIWidget* widget) { -+ GtkWindow* parent_widget = -+ GTK_WINDOW(widget->GetNativeData(NS_NATIVE_SHELLWIDGET)); -+ GdkWindow* gdk_window = -+ gtk_widget_get_window(gtk_widget_get_toplevel(GTK_WIDGET(parent_widget))); -+ return GDK_WINDOW_XID(gdk_window); -+} -+ -+NS_IMETHODIMP nsFilePicker::kdeFileDialog(nsIFilePicker::ResultCode* aReturn) { -+ NS_ENSURE_ARG_POINTER(aReturn); -+ -+ if (mMode == modeOpen && mFilters.Length() == 1 && -+ mFilters[0].EqualsLiteral("..apps")) -+ return kdeAppsDialog(aReturn); -+ -+ nsCString title; -+ title.Adopt(ToNewUTF8String(mTitle)); -+ -+ const char* arg = NULL; -+ if (mAllowURLs) { -+ switch (mMode) { -+ case nsIFilePicker::modeOpen: -+ case nsIFilePicker::modeOpenMultiple: -+ arg = "GETOPENURL"; -+ break; -+ case nsIFilePicker::modeSave: -+ arg = "GETSAVEURL"; -+ break; -+ case nsIFilePicker::modeGetFolder: -+ arg = "GETDIRECTORYURL"; -+ break; -+ } -+ } else { -+ switch (mMode) { -+ case nsIFilePicker::modeOpen: -+ case nsIFilePicker::modeOpenMultiple: -+ arg = "GETOPENFILENAME"; -+ break; -+ case nsIFilePicker::modeSave: -+ arg = "GETSAVEFILENAME"; -+ break; -+ case nsIFilePicker::modeGetFolder: -+ arg = "GETDIRECTORYFILENAME"; -+ break; -+ } -+ } -+ -+ nsAutoCString directory; -+ if (mDisplayDirectory) { -+ mDisplayDirectory->GetNativePath(directory); -+ } else if (mPrevDisplayDirectory) { -+ mPrevDisplayDirectory->GetNativePath(directory); -+ } -+ -+ nsAutoCString startdir; -+ if (!directory.IsEmpty()) { -+ startdir = directory; -+ } -+ if (mMode == nsIFilePicker::modeSave) { -+ if (!startdir.IsEmpty()) { -+ startdir += "/"; -+ startdir += ToNewUTF8String(mDefault); -+ } else -+ startdir = ToNewUTF8String(mDefault); -+ } -+ -+ nsAutoCString filters; -+ PRInt32 count = mFilters.Length(); -+ if (count == 0) // just in case -+ filters = "*"; -+ else { -+ filters = kdeMakeFilter(0); -+ for (PRInt32 i = 1; i < count; ++i) { -+ filters += "\n"; -+ filters += kdeMakeFilter(i); -+ } -+ } -+ -+ nsTArray command; -+ command.AppendElement(nsAutoCString(arg)); -+ command.AppendElement(startdir); -+ if (mMode != nsIFilePicker::modeGetFolder) { -+ command.AppendElement(filters); -+ nsAutoCString selected; -+ selected.AppendInt(mSelectedType); -+ command.AppendElement(selected); -+ } -+ command.AppendElement(title); -+ if (mMode == nsIFilePicker::modeOpenMultiple) -+ command.AppendElement("MULTIPLE"_ns); -+ if (PRInt32 xid = windowToXid(mParentWidget)) { -+ command.AppendElement("PARENT"_ns); -+ nsAutoCString parent; -+ parent.AppendInt(xid); -+ command.AppendElement(parent); -+ } -+ -+ nsTArray output; -+ if (nsKDEUtils::commandBlockUi( -+ command, -+ GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)), -+ &output)) { -+ *aReturn = nsIFilePicker::returnOK; -+ mFiles.Clear(); -+ if (mMode != nsIFilePicker::modeGetFolder) { -+ mSelectedType = atoi(output[0].get()); -+ output.RemoveElementAt(0); -+ } -+ if (mMode == nsIFilePicker::modeOpenMultiple) { -+ mFileURL.Truncate(); -+ PRUint32 count = output.Length(); -+ for (PRUint32 i = 0; i < count; ++i) { -+ nsCOMPtr localfile; -+ nsresult rv = NS_NewNativeLocalFile(output[i], PR_FALSE, -+ getter_AddRefs(localfile)); -+ if (NS_SUCCEEDED(rv)) mFiles.AppendObject(localfile); -+ } -+ } else { -+ if (output.Length() == 0) -+ mFileURL = nsCString(); -+ else if (mAllowURLs) -+ mFileURL = output[0]; -+ else // GetFile() actually requires it to be url even for local files :-/ -+ { -+ nsCOMPtr localfile; -+ nsresult rv = NS_NewNativeLocalFile(output[0], PR_FALSE, -+ getter_AddRefs(localfile)); -+ if (NS_SUCCEEDED(rv)) -+ rv = net_GetURLSpecFromActualFile(localfile, mFileURL); -+ } -+ } -+ // Remember last used directory. -+ nsCOMPtr file; -+ GetFile(getter_AddRefs(file)); -+ if (file) { -+ nsCOMPtr dir; -+ file->GetParent(getter_AddRefs(dir)); -+ nsCOMPtr localDir(dir); -+ if (localDir) { -+ localDir.swap(mPrevDisplayDirectory); -+ } -+ } -+ if (mMode == nsIFilePicker::modeSave) { -+ nsCOMPtr file; -+ GetFile(getter_AddRefs(file)); -+ if (file) { -+ bool exists = false; -+ file->Exists(&exists); -+ if (exists) // TODO do overwrite check in the helper app -+ *aReturn = nsIFilePicker::returnReplace; -+ } -+ } -+ } else { -+ *aReturn = nsIFilePicker::returnCancel; -+ } -+ return NS_OK; -+} -+ -+NS_IMETHODIMP nsFilePicker::kdeAppsDialog(nsIFilePicker::ResultCode* aReturn) { -+ NS_ENSURE_ARG_POINTER(aReturn); -+ -+ nsCString title; -+ title.Adopt(ToNewUTF8String(mTitle)); -+ -+ nsTArray command; -+ command.AppendElement("APPSDIALOG"_ns); -+ command.AppendElement(title); -+ if (PRInt32 xid = windowToXid(mParentWidget)) { -+ command.AppendElement("PARENT"_ns); -+ nsAutoCString parent; -+ parent.AppendInt(xid); -+ command.AppendElement(parent); -+ } -+ -+ nsTArray output; -+ if (nsKDEUtils::commandBlockUi( -+ command, -+ GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)), -+ &output)) { -+ *aReturn = nsIFilePicker::returnOK; -+ mFileURL = output.Length() > 0 ? output[0] : nsCString(); -+ } else { -+ *aReturn = nsIFilePicker::returnCancel; -+ } -+ return NS_OK; -+} -+ - // All below functions available as of GTK 3.20+ - void* nsFilePicker::GtkFileChooserNew(const gchar* title, GtkWindow* parent, - GtkFileChooserAction action, -diff -up firefox-119.0/widget/gtk/nsFilePicker.h.integration firefox-119.0/widget/gtk/nsFilePicker.h ---- firefox-119.0/widget/gtk/nsFilePicker.h.integration 2023-10-19 21:54:43.000000000 +0200 -+++ firefox-119.0/widget/gtk/nsFilePicker.h 2023-10-31 08:59:03.723124906 +0100 -@@ -76,6 +76,12 @@ class nsFilePicker : public nsBaseFilePi - private: - static nsIFile* mPrevDisplayDirectory; - -+ bool kdeRunning(); -+ bool getKdeRunning(); -+ NS_IMETHODIMP kdeFileDialog(nsIFilePicker::ResultCode* aReturn); -+ NS_IMETHODIMP kdeAppsDialog(nsIFilePicker::ResultCode* aReturn); -+ nsCString kdeMakeFilter(int index); -+ - void* GtkFileChooserNew(const gchar* title, GtkWindow* parent, - GtkFileChooserAction action, - const gchar* accept_label); -diff -up firefox-119.0/xpcom/components/ManifestParser.cpp.integration firefox-119.0/xpcom/components/ManifestParser.cpp ---- firefox-119.0/xpcom/components/ManifestParser.cpp.integration 2023-10-19 21:54:43.000000000 +0200 -+++ firefox-119.0/xpcom/components/ManifestParser.cpp 2023-10-31 08:59:03.723124906 +0100 -@@ -43,6 +43,7 @@ - #include "nsIScriptError.h" - #include "nsIXULAppInfo.h" - #include "nsIXULRuntime.h" -+#include "nsKDEUtils.h" - - using namespace mozilla; - -@@ -394,6 +395,7 @@ void ParseManifest(NSLocationType aType, - constexpr auto kOs = u"os"_ns; - constexpr auto kOsVersion = u"osversion"_ns; - constexpr auto kABI = u"abi"_ns; -+ constexpr auto kDesktop = u"desktop"_ns; - constexpr auto kProcess = u"process"_ns; - #if defined(MOZ_WIDGET_ANDROID) - constexpr auto kTablet = u"tablet"_ns; -@@ -453,6 +455,7 @@ void ParseManifest(NSLocationType aType, - } - - nsAutoString osVersion; -+ nsAutoString desktop; - #if defined(XP_WIN) - # pragma warning(push) - # pragma warning(disable : 4996) // VC12+ deprecates GetVersionEx -@@ -461,14 +464,17 @@ void ParseManifest(NSLocationType aType, - nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", info.dwMajorVersion, - info.dwMinorVersion); - } -+ desktop = u"win"_ns; - # pragma warning(pop) - #elif defined(MOZ_WIDGET_COCOA) - SInt32 majorVersion = nsCocoaFeatures::macOSVersionMajor(); - SInt32 minorVersion = nsCocoaFeatures::macOSVersionMinor(); - nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", majorVersion, minorVersion); -+ desktop = u"macosx"_ns); - #elif defined(MOZ_WIDGET_GTK) - nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", gtk_major_version, - gtk_minor_version); -+ desktop = nsKDEUtils::kdeSession() ? u"kde"_ns : u"gnome"_ns; - #elif defined(MOZ_WIDGET_ANDROID) - bool isTablet = false; - if (jni::IsAvailable()) { -@@ -476,6 +482,7 @@ void ParseManifest(NSLocationType aType, - osVersion.Assign(release->ToString()); - isTablet = java::GeckoAppShell::IsTablet(); - } -+ desktop = u"android"_ns; - #endif - - if (XRE_IsContentProcess()) { -@@ -576,6 +583,7 @@ void ParseManifest(NSLocationType aType, - : eUnspecified; - #endif - int flags = 0; -+ TriState stDesktop = eUnspecified; - - while ((token = nsCRT::strtok(whitespace, kWhitespace, &whitespace)) && - ok) { -@@ -585,6 +593,7 @@ void ParseManifest(NSLocationType aType, - if (CheckStringFlag(kApplication, wtoken, appID, stApp) || - CheckOsFlag(kOs, wtoken, osTarget, stOs) || - CheckStringFlag(kABI, wtoken, abi, stABI) || -+ CheckStringFlag(kDesktop, wtoken, desktop, stDesktop) || - CheckStringFlag(kProcess, wtoken, process, stProcess) || - CheckVersionFlag(kOsVersion, wtoken, osVersion, stOsVersion) || - CheckVersionFlag(kAppVersion, wtoken, appVersion, stAppVersion) || -@@ -644,6 +653,7 @@ void ParseManifest(NSLocationType aType, - - if (!ok || stApp == eBad || stAppVersion == eBad || - stGeckoVersion == eBad || stOs == eBad || stOsVersion == eBad || -+ stDesktop == eBad || - #ifdef MOZ_WIDGET_ANDROID - stTablet == eBad || - #endif -diff -up firefox-119.0/xpcom/components/moz.build.integration firefox-119.0/xpcom/components/moz.build ---- firefox-119.0/xpcom/components/moz.build.integration 2023-10-19 21:54:44.000000000 +0200 -+++ firefox-119.0/xpcom/components/moz.build 2023-10-31 08:59:03.723124906 +0100 -@@ -71,6 +71,7 @@ LOCAL_INCLUDES += [ - "/js/xpconnect/loader", - "/layout/build", - "/modules/libjar", -+ "/toolkit/xre", - ] - - if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": -diff -up firefox-119.0/xpcom/io/nsLocalFileUnix.cpp.integration firefox-119.0/xpcom/io/nsLocalFileUnix.cpp ---- firefox-119.0/xpcom/io/nsLocalFileUnix.cpp.integration 2023-10-19 21:54:43.000000000 +0200 -+++ firefox-119.0/xpcom/io/nsLocalFileUnix.cpp 2023-10-31 08:59:03.724124940 +0100 -@@ -51,6 +51,7 @@ - - #ifdef MOZ_WIDGET_GTK - # include "nsIGIOService.h" -+# include "nsKDEUtils.h" - #endif - - #ifdef MOZ_WIDGET_COCOA -@@ -2172,10 +2173,18 @@ nsLocalFile::Reveal() { - } - - #ifdef MOZ_WIDGET_GTK -+ nsAutoCString url; - nsCOMPtr giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); -- if (!giovfs) { -- return NS_ERROR_FAILURE; -+ url = mPath; -+ if (nsKDEUtils::kdeSupport()) { -+ nsTArray command; -+ command.AppendElement("REVEAL"_ns); -+ command.AppendElement(mPath); -+ return nsKDEUtils::command(command) ? NS_OK : NS_ERROR_FAILURE; - } -+ -+ if (!giovfs) return NS_ERROR_FAILURE; -+ - return giovfs->RevealFile(this); - #elif defined(MOZ_WIDGET_COCOA) - CFURLRef url; -@@ -2197,6 +2206,13 @@ nsLocalFile::Launch() { - } - - #ifdef MOZ_WIDGET_GTK -+ if (nsKDEUtils::kdeSupport()) { -+ nsTArray command; -+ command.AppendElement("OPEN"_ns); -+ command.AppendElement(mPath); -+ return nsKDEUtils::command(command) ? NS_OK : NS_ERROR_FAILURE; -+ } -+ - nsCOMPtr giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); - if (!giovfs) { - return NS_ERROR_FAILURE; diff --git a/0026-Add-KDE-integration-to-Firefox.patch b/0026-Add-KDE-integration-to-Firefox.patch deleted file mode 100644 index 1e2e938..0000000 --- a/0026-Add-KDE-integration-to-Firefox.patch +++ /dev/null @@ -1,279 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Sirringhaus -Date: Tue, 8 Aug 2023 16:18:24 +0300 -Subject: [PATCH] Add KDE integration to Firefox - -Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=140751 -Bug: https://bugzilla.suse.com/show_bug.cgi?id=170055 - -How to apply this patch: - -1. Import and apply it -2. cp browser/base/content/browser.xul browser/base/content/browser-kde.xul -3. Find editBookmarkPanelDoneButton -4. Replace #ifndef with #ifdef in the line above (this hanges the button order from Gnome-style to KDE-style) -5. hg qrefresh ---- - browser/components/preferences/main.js | 18 +++ - browser/components/shell/moz.build | 2 + - .../components/shell/nsKDEShellService.cpp | 109 ++++++++++++++++++ - browser/components/shell/nsKDEShellService.h | 32 +++++ - .../components/shell/nsUnixShellService.cpp | 22 ++++ - browser/components/shell/nsUnixShellService.h | 15 +++ - 6 files changed, 198 insertions(+) - create mode 100644 browser/components/shell/nsKDEShellService.cpp - create mode 100644 browser/components/shell/nsKDEShellService.h - create mode 100644 browser/components/shell/nsUnixShellService.cpp - create mode 100644 browser/components/shell/nsUnixShellService.h - -diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js -index 820e46fb006567bfdf93e2a46da5e3c07d42bf10..57d1c21bdecc2d55d0bed30246e684d3b97ad7fa 100644 ---- a/browser/components/preferences/main.js -+++ b/browser/components/preferences/main.js -@@ -294,6 +294,13 @@ var gMainPane = { - }, backoffTimes[this._backoffIndex]); - } - -+ var env = Components.classes["@mozilla.org/process/environment;1"] -+ .getService(Components.interfaces.nsIEnvironment); -+ var kde_session = 0; -+ if (env.get('KDE_FULL_SESSION') == "true") { -+ kde_session = 1; -+ } -+ - this.initBrowserContainers(); - this.buildContentProcessCountMenuList(); - -@@ -1727,6 +1734,17 @@ var gMainPane = { - } - try { - shellSvc.setDefaultBrowser(true, false); -+ if (kde_session == 1) { -+ var shellObj = Components.classes["@mozilla.org/file/local;1"] -+ .createInstance(Components.interfaces.nsILocalFile); -+ shellObj.initWithPath("/usr/bin/kwriteconfig"); -+ var process = Components.classes["@mozilla.org/process/util;1"] -+ .createInstance(Components.interfaces.nsIProcess); -+ process.init(shellObj); -+ var args = ["--file", "kdeglobals", "--group", "General", "--key", -+ "BrowserApplication", "firefox"]; -+ process.run(false, args, args.length); -+ } - } catch (ex) { - console.error(ex); - return; -diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build -index eb88cb287dc3f04022b74b978666118bbd5fa6b2..95277533781a7224d108e3c45731a6d9a89ba1a0 100644 ---- a/browser/components/shell/moz.build -+++ b/browser/components/shell/moz.build -@@ -36,6 +36,8 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": - - SOURCES += [ - "nsGNOMEShellService.cpp", -+ "nsKDEShellService.cpp", -+ "nsUnixShellService.cpp", - ] - if CONFIG["MOZ_ENABLE_DBUS"]: - SOURCES += [ -diff --git a/browser/components/shell/nsKDEShellService.cpp b/browser/components/shell/nsKDEShellService.cpp -new file mode 100644 -index 0000000000000000000000000000000000000000..152a3aca87ea73477bc75c4e93c01e5a52dda102 ---- /dev/null -+++ b/browser/components/shell/nsKDEShellService.cpp -@@ -0,0 +1,109 @@ -+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+#include "mozilla/ArrayUtils.h" -+ -+#include "nsCOMPtr.h" -+#include "nsKDEShellService.h" -+#include "nsShellService.h" -+#include "nsKDEUtils.h" -+#include "nsIPrefService.h" -+#include "nsIProcess.h" -+#include "nsIFile.h" -+#include "nsServiceManagerUtils.h" -+#include "nsComponentManagerUtils.h" -+#include "nsIMutableArray.h" -+#include "nsISupportsPrimitives.h" -+#include "nsArrayUtils.h" -+ -+using namespace mozilla; -+ -+nsresult -+nsKDEShellService::Init() -+{ -+ if( !nsKDEUtils::kdeSupport()) -+ return NS_ERROR_NOT_AVAILABLE; -+ return NS_OK; -+} -+ -+NS_IMPL_ISUPPORTS(nsKDEShellService, nsIGNOMEShellService, nsIShellService) -+ -+NS_IMETHODIMP -+nsKDEShellService::IsDefaultBrowser(bool aForAllTypes, -+ bool* aIsDefaultBrowser) -+{ -+ *aIsDefaultBrowser = false; -+ -+ nsCOMPtr command = do_CreateInstance( NS_ARRAY_CONTRACTID ); -+ if (!command) -+ return NS_ERROR_FAILURE; -+ -+ nsCOMPtr str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); -+ if (!str) -+ return NS_ERROR_FAILURE; -+ -+ str->SetData("ISDEFAULTBROWSER"_ns); -+ command->AppendElement( str ); -+ -+ if( nsKDEUtils::command( command )) -+ *aIsDefaultBrowser = true; -+ return NS_OK; -+} -+ -+NS_IMETHODIMP -+nsKDEShellService::SetDefaultBrowser(bool aClaimAllTypes, -+ bool aForAllUsers) -+{ -+ nsCOMPtr command = do_CreateInstance( NS_ARRAY_CONTRACTID ); -+ if (!command) -+ return NS_ERROR_FAILURE; -+ -+ nsCOMPtr cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); -+ nsCOMPtr paramstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); -+ if (!cmdstr || !paramstr) -+ return NS_ERROR_FAILURE; -+ -+ cmdstr->SetData("SETDEFAULTBROWSER"_ns); -+ command->AppendElement( cmdstr ); -+ -+ paramstr->SetData( aClaimAllTypes ? "ALLTYPES"_ns : "NORMAL"_ns ); -+ command->AppendElement( paramstr ); -+ -+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; -+} -+ -+NS_IMETHODIMP -+nsKDEShellService::GetCanSetDesktopBackground(bool* aResult) -+{ -+ *aResult = true; -+ return NS_OK; -+} -+ -+NS_IMETHODIMP -+nsKDEShellService::SetDesktopBackground(dom::Element* aElement, -+ int32_t aPosition, -+ const nsACString& aImageName) -+{ -+ return NS_ERROR_NOT_IMPLEMENTED; -+} -+ -+NS_IMETHODIMP -+nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor) -+{ -+ return NS_ERROR_NOT_IMPLEMENTED; -+} -+ -+NS_IMETHODIMP -+nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor) -+{ -+ return NS_ERROR_NOT_IMPLEMENTED; -+} -+ -+NS_IMETHODIMP -+nsKDEShellService::IsDefaultForScheme(nsTSubstring const& aScheme, bool* aIsDefaultBrowser) -+{ -+ return NS_ERROR_NOT_IMPLEMENTED; -+} -+ -diff --git a/browser/components/shell/nsKDEShellService.h b/browser/components/shell/nsKDEShellService.h -new file mode 100644 -index 0000000000000000000000000000000000000000..8b0bb19164352453cfa453dd87c19263160b9ad8 ---- /dev/null -+++ b/browser/components/shell/nsKDEShellService.h -@@ -0,0 +1,32 @@ -+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+#ifndef nskdeshellservice_h____ -+#define nskdeshellservice_h____ -+ -+#include "nsIGNOMEShellService.h" -+#include "nsToolkitShellService.h" -+#include "nsString.h" -+#include "mozilla/Attributes.h" -+ -+class nsKDEShellService final : public nsIGNOMEShellService, -+ public nsToolkitShellService -+{ -+public: -+ nsKDEShellService() : mCheckedThisSession(false) { } -+ -+ NS_DECL_ISUPPORTS -+ NS_DECL_NSISHELLSERVICE -+ NS_DECL_NSIGNOMESHELLSERVICE -+ -+ nsresult Init(); -+ -+private: -+ ~nsKDEShellService() {} -+ -+ bool mCheckedThisSession; -+}; -+ -+#endif // nskdeshellservice_h____ -diff --git a/browser/components/shell/nsUnixShellService.cpp b/browser/components/shell/nsUnixShellService.cpp -new file mode 100644 -index 0000000000000000000000000000000000000000..abf266ebdc52e136f495911da3454e69c770c6db ---- /dev/null -+++ b/browser/components/shell/nsUnixShellService.cpp -@@ -0,0 +1,22 @@ -+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+ -+#include "nsUnixShellService.h" -+#include "nsGNOMEShellService.h" -+#include "nsKDEShellService.h" -+#include "nsKDEUtils.h" -+#include "mozilla/ModuleUtils.h" -+ -+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init) -+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsKDEShellService, Init) -+ -+NS_IMETHODIMP -+nsUnixShellServiceConstructor(REFNSIID aIID, void **aResult) -+{ -+ if( nsKDEUtils::kdeSupport()) -+ return nsKDEShellServiceConstructor( aIID, aResult ); -+ return nsGNOMEShellServiceConstructor( aIID, aResult ); -+} -diff --git a/browser/components/shell/nsUnixShellService.h b/browser/components/shell/nsUnixShellService.h -new file mode 100644 -index 0000000000000000000000000000000000000000..26b5dbac47dd9a8ec1fcb6c93575cca750692735 ---- /dev/null -+++ b/browser/components/shell/nsUnixShellService.h -@@ -0,0 +1,15 @@ -+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+ -+#ifndef nsunixshellservice_h____ -+#define nsunixshellservice_h____ -+ -+#include "nsIGNOMEShellService.h" -+ -+NS_IMETHODIMP -+nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult); -+ -+#endif // nsunixshellservice_h____ diff --git a/CVE-2023-44488-libvpx.patch b/CVE-2023-44488-libvpx.patch new file mode 100644 index 0000000..79e5235 --- /dev/null +++ b/CVE-2023-44488-libvpx.patch @@ -0,0 +1,127 @@ +From 263682c9a29395055f3b3afe2d97be1828a6223f Mon Sep 17 00:00:00 2001 +From: Jerome Jiang +Date: Thu, 30 Jun 2022 13:48:56 -0400 +Subject: [PATCH] Fix bug with smaller width bigger size + +Fixed previous patch that clusterfuzz failed on. + +Bug: webm:1642 +Change-Id: If0e08e72abd2e042efe4dcfac21e4cc51afdfdb9 +--- + test/resize_test.cc | 11 +++-------- + vp9/common/vp9_alloccommon.c | 13 ++++++------- + vp9/encoder/vp9_encoder.c | 27 +++++++++++++++++++++++++-- + 3 files changed, 34 insertions(+), 17 deletions(-) + +diff --git a/test/resize_test.cc b/test/resize_test.cc +index fd1c2a92de6..20ad2229b46 100644 +--- a/test/resize_test.cc ++++ b/test/resize_test.cc +@@ -102,11 +102,8 @@ void ScaleForFrameNumber(unsigned int frame, unsigned int initial_w, + if (frame < 30) { + return; + } +- if (frame < 100) { +- *w = initial_w * 7 / 10; +- *h = initial_h * 16 / 10; +- return; +- } ++ *w = initial_w * 7 / 10; ++ *h = initial_h * 16 / 10; + return; + } + if (frame < 10) { +@@ -559,9 +556,7 @@ TEST_P(ResizeRealtimeTest, TestExternalResizeWorks) { + } + } + +-// TODO(https://crbug.com/webm/1642): This causes a segfault in +-// init_encode_frame_mb_context(). +-TEST_P(ResizeRealtimeTest, DISABLED_TestExternalResizeSmallerWidthBiggerSize) { ++TEST_P(ResizeRealtimeTest, TestExternalResizeSmallerWidthBiggerSize) { + ResizingVideoSource video; + video.flag_codec_ = true; + video.smaller_width_larger_size_ = true; +diff --git a/vp9/common/vp9_alloccommon.c b/vp9/common/vp9_alloccommon.c +index e53883f621d..9e73e40ea09 100644 +--- a/vp9/common/vp9_alloccommon.c ++++ b/vp9/common/vp9_alloccommon.c +@@ -135,13 +135,6 @@ int vp9_alloc_context_buffers(VP9_COMMON *cm, int width, int height) { + cm->free_mi(cm); + if (cm->alloc_mi(cm, new_mi_size)) goto fail; + } +- +- if (cm->seg_map_alloc_size < cm->mi_rows * cm->mi_cols) { +- // Create the segmentation map structure and set to 0. +- free_seg_map(cm); +- if (alloc_seg_map(cm, cm->mi_rows * cm->mi_cols)) goto fail; +- } +- + if (cm->above_context_alloc_cols < cm->mi_cols) { + vpx_free(cm->above_context); + cm->above_context = (ENTROPY_CONTEXT *)vpx_calloc( +@@ -156,6 +149,12 @@ int vp9_alloc_context_buffers(VP9_COMMON *cm, int width, int height) { + cm->above_context_alloc_cols = cm->mi_cols; + } + ++ if (cm->seg_map_alloc_size < cm->mi_rows * cm->mi_cols) { ++ // Create the segmentation map structure and set to 0. ++ free_seg_map(cm); ++ if (alloc_seg_map(cm, cm->mi_rows * cm->mi_cols)) goto fail; ++ } ++ + if (vp9_alloc_loop_filter(cm)) goto fail; + + return 0; +diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c +index 69a4e3c314f..e3ba294c32f 100644 +--- a/vp9/encoder/vp9_encoder.c ++++ b/vp9/encoder/vp9_encoder.c +@@ -2047,6 +2047,17 @@ static void alloc_copy_partition_data(VP9_COMP *cpi) { + } + } + ++static void free_copy_partition_data(VP9_COMP *cpi) { ++ vpx_free(cpi->prev_partition); ++ cpi->prev_partition = NULL; ++ vpx_free(cpi->prev_segment_id); ++ cpi->prev_segment_id = NULL; ++ vpx_free(cpi->prev_variance_low); ++ cpi->prev_variance_low = NULL; ++ vpx_free(cpi->copied_frame_cnt); ++ cpi->copied_frame_cnt = NULL; ++} ++ + void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) { + VP9_COMMON *const cm = &cpi->common; + RATE_CONTROL *const rc = &cpi->rc; +@@ -2126,6 +2137,8 @@ void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) { + new_mi_size = cm->mi_stride * calc_mi_size(cm->mi_rows); + if (cm->mi_alloc_size < new_mi_size) { + vp9_free_context_buffers(cm); ++ vp9_free_pc_tree(&cpi->td); ++ vpx_free(cpi->mbmi_ext_base); + alloc_compressor_data(cpi); + realloc_segmentation_maps(cpi); + cpi->initial_width = cpi->initial_height = 0; +@@ -2144,8 +2157,18 @@ void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) { + update_frame_size(cpi); + + if (last_w != cpi->oxcf.width || last_h != cpi->oxcf.height) { +- memset(cpi->consec_zero_mv, 0, +- cm->mi_rows * cm->mi_cols * sizeof(*cpi->consec_zero_mv)); ++ vpx_free(cpi->consec_zero_mv); ++ CHECK_MEM_ERROR( ++ &cm->error, cpi->consec_zero_mv, ++ vpx_calloc(cm->mi_rows * cm->mi_cols, sizeof(*cpi->consec_zero_mv))); ++ ++ vpx_free(cpi->skin_map); ++ CHECK_MEM_ERROR( ++ &cm->error, cpi->skin_map, ++ vpx_calloc(cm->mi_rows * cm->mi_cols, sizeof(cpi->skin_map[0]))); ++ ++ free_copy_partition_data(cpi); ++ alloc_copy_partition_data(cpi); + if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ) + vp9_cyclic_refresh_reset_resize(cpi); + rc->rc_1_frame = 0; diff --git a/D167159.diff b/D167159.diff deleted file mode 100644 index a9261b0..0000000 --- a/D167159.diff +++ /dev/null @@ -1,132 +0,0 @@ -diff --git a/dom/canvas/ClientWebGLContext.cpp b/dom/canvas/ClientWebGLContext.cpp ---- a/dom/canvas/ClientWebGLContext.cpp -+++ b/dom/canvas/ClientWebGLContext.cpp -@@ -4253,11 +4253,12 @@ - const auto& sd = *(desc->sd); - const auto sdType = sd.type(); - const auto& contextInfo = mNotLost->info; - - const auto fallbackReason = [&]() -> Maybe { -- auto fallbackReason = BlitPreventReason(level, offset, pi, *desc); -+ auto fallbackReason = -+ BlitPreventReason(level, offset, pi, *desc, Limits()); - if (fallbackReason) return fallbackReason; - - const bool canUploadViaSd = contextInfo.uploadableSdTypes[sdType]; - if (!canUploadViaSd) { - const nsPrintfCString msg( -diff --git a/dom/canvas/TexUnpackBlob.h b/dom/canvas/TexUnpackBlob.h ---- a/dom/canvas/TexUnpackBlob.h -+++ b/dom/canvas/TexUnpackBlob.h -@@ -41,11 +41,12 @@ - struct PackingInfo; - struct DriverUnpackInfo; - - Maybe BlitPreventReason(int32_t level, const ivec3& offset, - const webgl::PackingInfo&, -- const TexUnpackBlobDesc&); -+ const TexUnpackBlobDesc&, -+ const Limits& limits); - - class TexUnpackBlob { - public: - const TexUnpackBlobDesc& mDesc; - bool mNeedsExactUpload = true; -diff --git a/dom/canvas/TexUnpackBlob.cpp b/dom/canvas/TexUnpackBlob.cpp ---- a/dom/canvas/TexUnpackBlob.cpp -+++ b/dom/canvas/TexUnpackBlob.cpp -@@ -658,11 +658,12 @@ - return ValidateUnpackPixels(webgl, pi, fullRows, *this); - } - - Maybe BlitPreventReason(const int32_t level, const ivec3& offset, - const webgl::PackingInfo& pi, -- const TexUnpackBlobDesc& desc) { -+ const TexUnpackBlobDesc& desc, -+ const Limits& limits) { - const auto& size = desc.size; - const auto& unpacking = desc.unpacking; - - const auto ret = [&]() -> const char* { - if (size.z != 1) { -@@ -689,12 +690,16 @@ - return "UNPACK_PREMULTIPLY_ALPHA_WEBGL is not false"; - } - }(); - if (premultReason) return premultReason; - -- if (pi.format != LOCAL_GL_RGBA) { -- return "`format` is not RGBA"; -+ if (pi.format != LOCAL_GL_RGBA && pi.format != LOCAL_GL_RGB) { -+ return "`format` is not RGBA or RGB"; -+ } -+ -+ if (pi.format == LOCAL_GL_RGB && !limits.rgbColorRenderable) { -+ return "`format` is RGB, which is not color-renderable"; - } - - if (pi.type != LOCAL_GL_UNSIGNED_BYTE) { - return "`type` is not UNSIGNED_BYTE"; - } -@@ -722,12 +727,12 @@ - - const auto& gl = webgl->GL(); - - // - - -- const auto reason = -- BlitPreventReason(level, {xOffset, yOffset, zOffset}, pi, mDesc); -+ const auto reason = BlitPreventReason(level, {xOffset, yOffset, zOffset}, pi, -+ mDesc, tex->mContext->Limits()); - if (reason) { - webgl->GeneratePerfWarning( - "Failed to hit GPU-copy fast-path." - " (%s) Falling back to CPU upload.", - reason->c_str()); -diff --git a/dom/canvas/WebGLContextValidate.cpp b/dom/canvas/WebGLContextValidate.cpp ---- a/dom/canvas/WebGLContextValidate.cpp -+++ b/dom/canvas/WebGLContextValidate.cpp -@@ -239,10 +239,12 @@ - [WebGLExtensionID::WEBGL_compressed_texture_astc]) { - limits.astcHdr = gl.IsExtensionSupported( - gl::GLContext::KHR_texture_compression_astc_hdr); - } - -+ limits.rgbColorRenderable = webgl.gl->IsRGBColorRenderable(); -+ - if (webgl.IsWebGL2() || - limits.supportedExtensions[WebGLExtensionID::WEBGL_draw_buffers]) { - gl.GetUIntegerv(LOCAL_GL_MAX_DRAW_BUFFERS, &limits.maxColorDrawBuffers); - } - -diff --git a/dom/canvas/WebGLTypes.h b/dom/canvas/WebGLTypes.h ---- a/dom/canvas/WebGLTypes.h -+++ b/dom/canvas/WebGLTypes.h -@@ -663,10 +663,11 @@ - uint32_t maxUniformBufferBindings = 0; - uint32_t uniformBufferOffsetAlignment = 0; - - // Exts - bool astcHdr = false; -+ bool rgbColorRenderable = false; - uint32_t maxColorDrawBuffers = 1; - uint64_t queryCounterBitsTimeElapsed = 0; - uint64_t queryCounterBitsTimestamp = 0; - uint32_t maxMultiviewLayers = 0; - }; -diff --git a/gfx/gl/GLContext.h b/gfx/gl/GLContext.h ---- a/gfx/gl/GLContext.h -+++ b/gfx/gl/GLContext.h -@@ -290,10 +290,11 @@ - mTopError = GetError(); - return IsContextLost(); - } - - bool HasPBOState() const { return (!IsGLES() || Version() >= 300); } -+ bool IsRGBColorRenderable() { return !IsGLES() || Version() >= 300; } - - /** - * If this context is double-buffered, returns TRUE. - */ - virtual bool IsDoubleBuffered() const { return false; } - diff --git a/D168799.diff b/D168799.diff deleted file mode 100644 index 40dc3b4..0000000 --- a/D168799.diff +++ /dev/null @@ -1,93 +0,0 @@ -diff --git a/extensions/pref/autoconfig/test/unit/test_autoconfig_custom_path.js b/extensions/pref/autoconfig/test/unit/test_autoconfig_custom_path.js ---- a/extensions/pref/autoconfig/test/unit/test_autoconfig_custom_path.js -+++ b/extensions/pref/autoconfig/test/unit/test_autoconfig_custom_path.js -@@ -9,10 +9,13 @@ - let testDirName = do_get_cwd().clone(); - Services.env.set("MOZ_SYSTEM_CONFIG_DIR", testDirName.path); - - updateAppInfo(); - -+ try { -+ Services.dirsvc.undefine("SysConfD"); -+ } catch (e) {} - let customSysConfD = Services.dirsvc.get("SysConfD", Ci.nsIFile); - let parent = customSysConfD.parent; - let child = customSysConfD.leafName; - notEqual("/etc", parent.path, "SysConfD is not in /etc"); - equal("xpcshell", child, "SysConfD is xpcshell"); -diff --git a/extensions/pref/autoconfig/test/unit/test_autoconfig_default_path.js b/extensions/pref/autoconfig/test/unit/test_autoconfig_default_path.js ---- a/extensions/pref/autoconfig/test/unit/test_autoconfig_default_path.js -+++ b/extensions/pref/autoconfig/test/unit/test_autoconfig_default_path.js -@@ -6,8 +6,11 @@ - ); - - function run_test() { - updateAppInfo(); - -+ try { -+ Services.dirsvc.undefine("SysConfD"); -+ } catch (e) {} - let defaultSysConfD = Services.dirsvc.get("SysConfD", Ci.nsIFile); - equal("/etc/xpcshell", defaultSysConfD.path, "SysConfD is in /etc"); - } -diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp ---- a/modules/libpref/Preferences.cpp -+++ b/modules/libpref/Preferences.cpp -@@ -4917,27 +4917,10 @@ - ArrayLength(specialFiles)); - if (NS_FAILED(rv)) { - NS_WARNING("Error parsing application default preferences."); - } - --#if defined(MOZ_WIDGET_GTK) -- // Under Flatpak/Snap package, load /etc/firefox/defaults/pref/*.js. -- if (mozilla::widget::IsRunningUnderFlatpakOrSnap()) { -- nsCOMPtr defaultSnapPrefDir; -- rv = NS_GetSpecialDirectory(NS_OS_SYSTEM_CONFIG_DIR, -- getter_AddRefs(defaultSnapPrefDir)); -- NS_ENSURE_SUCCESS(rv, rv); -- defaultSnapPrefDir->AppendNative("defaults"_ns); -- defaultSnapPrefDir->AppendNative("pref"_ns); -- -- rv = pref_LoadPrefsInDir(defaultSnapPrefDir, nullptr, 0); -- if (NS_FAILED(rv)) { -- NS_WARNING("Error parsing application default preferences under Snap."); -- } -- } --#endif -- - // Load jar:$app/omni.jar!/defaults/preferences/*.js - // or jar:$gre/omni.jar!/defaults/preferences/*.js. - RefPtr appJarReader = Omnijar::GetReader(Omnijar::APP); - - // GetReader(Omnijar::APP) returns null when `$app == $gre`, in -@@ -5006,10 +4989,28 @@ - // Do we care if a file provided by this process fails to load? - pref_LoadPrefsInDir(path, nullptr, 0); - } - } - -+#if defined(MOZ_WIDGET_GTK) -+ // To ensure the system-wide preferences are not overwritten by -+ // firefox/browser/defauts/preferences/*.js we need to load -+ // the /etc/firefox/defaults/pref/*.js settings as last. -+ // Under Flatpak, the NS_OS_SYSTEM_CONFIG_DIR points to /app/etc/firefox -+ nsCOMPtr defaultSystemPrefDir; -+ rv = NS_GetSpecialDirectory(NS_OS_SYSTEM_CONFIG_DIR, -+ getter_AddRefs(defaultSystemPrefDir)); -+ NS_ENSURE_SUCCESS(rv, rv); -+ defaultSystemPrefDir->AppendNative("defaults"_ns); -+ defaultSystemPrefDir->AppendNative("pref"_ns); -+ -+ rv = pref_LoadPrefsInDir(defaultSystemPrefDir, nullptr, 0); -+ if (NS_FAILED(rv)) { -+ NS_WARNING("Error parsing application default preferences."); -+ } -+#endif -+ - if (XRE_IsParentProcess()) { - SetupTelemetryPref(); - } - - if (aIsStartup) { - diff --git a/D192061.1699444912.diff b/D192061.1699444912.diff deleted file mode 100644 index a7c4e85..0000000 --- a/D192061.1699444912.diff +++ /dev/null @@ -1,113 +0,0 @@ -diff --git a/widget/gtk/nsUserIdleServiceGTK.cpp b/widget/gtk/nsUserIdleServiceGTK.cpp ---- a/widget/gtk/nsUserIdleServiceGTK.cpp -+++ b/widget/gtk/nsUserIdleServiceGTK.cpp -@@ -149,48 +149,62 @@ - - #ifdef MOZ_ENABLE_DBUS - class UserIdleServiceMutter : public UserIdleServiceImpl { - public: - bool PollIdleTime(uint32_t* aIdleTime) override { -- MOZ_LOG(sIdleLog, LogLevel::Info, -- ("UserIdleServiceMutter::PollIdleTime()\n")); -- -- MOZ_ASSERT(mProxy); -- GUniquePtr error; -+ MOZ_LOG(sIdleLog, LogLevel::Info, ("PollIdleTime() request\n")); - -- RefPtr result = dont_AddRef(g_dbus_proxy_call_sync( -- mProxy, "GetIdletime", nullptr, G_DBUS_CALL_FLAGS_NONE, -1, -- mCancellable, getter_Transfers(error))); -- if (!result) { -- MOZ_LOG(sIdleLog, LogLevel::Info, -- ("UserIdleServiceMutter::PollIdleTime() failed, message: %s\n", -- error->message)); -+ // We're not ready yet -+ if (!mProxy) { - return false; - } -- if (!g_variant_is_of_type(result, G_VARIANT_TYPE_TUPLE) || -- g_variant_n_children(result) != 1) { -- MOZ_LOG( -- sIdleLog, LogLevel::Info, -- ("UserIdleServiceMutter::PollIdleTime() Unexpected params type: %s\n", -- g_variant_get_type_string(result))); -- return false; -+ -+ if (!mPollInProgress) { -+ mPollInProgress = true; -+ DBusProxyCall(mProxy, "GetIdletime", nullptr, G_DBUS_CALL_FLAGS_NONE, -1, -+ mCancellable) -+ ->Then( -+ GetCurrentSerialEventTarget(), __func__, -+ // It's safe to capture this as we use mCancellable to stop -+ // listening. -+ [self = RefPtr{this}, this](RefPtr&& aResult) { -+ if (!g_variant_is_of_type(aResult, G_VARIANT_TYPE_TUPLE) || -+ g_variant_n_children(aResult) != 1) { -+ MOZ_LOG(sIdleLog, LogLevel::Info, -+ ("PollIdleTime() Unexpected params type: %s\n", -+ g_variant_get_type_string(aResult))); -+ mLastIdleTime = 0; -+ return; -+ } -+ RefPtr iTime = -+ dont_AddRef(g_variant_get_child_value(aResult, 0)); -+ if (!g_variant_is_of_type(iTime, G_VARIANT_TYPE_UINT64)) { -+ MOZ_LOG(sIdleLog, LogLevel::Info, -+ ("PollIdleTime() Unexpected params type: %s\n", -+ g_variant_get_type_string(aResult))); -+ mLastIdleTime = 0; -+ return; -+ } -+ uint64_t idleTime = g_variant_get_uint64(iTime); -+ if (idleTime > std::numeric_limits::max()) { -+ idleTime = std::numeric_limits::max(); -+ } -+ mLastIdleTime = idleTime; -+ mPollInProgress = false; -+ MOZ_LOG(sIdleLog, LogLevel::Info, -+ ("Async handler got %d\n", mLastIdleTime)); -+ }, -+ [self = RefPtr{this}, this](GUniquePtr&& aError) { -+ mPollInProgress = false; -+ g_warning("Failed to call GetIdletime(): %s\n", -+ aError->message); -+ }); - } -- RefPtr iTime = dont_AddRef(g_variant_get_child_value(result, 0)); -- if (!g_variant_is_of_type(iTime, G_VARIANT_TYPE_UINT64)) { -- MOZ_LOG( -- sIdleLog, LogLevel::Info, -- ("UserIdleServiceMutter::PollIdleTime() Unexpected params type: %s\n", -- g_variant_get_type_string(result))); -- return false; -- } -- uint64_t idleTime = g_variant_get_uint64(iTime); -- if (idleTime > std::numeric_limits::max()) { -- idleTime = std::numeric_limits::max(); -- } -- *aIdleTime = idleTime; -+ -+ *aIdleTime = mLastIdleTime; - MOZ_LOG(sIdleLog, LogLevel::Info, -- ("UserIdleServiceMutter::PollIdleTime() %d\n", *aIdleTime)); -+ ("PollIdleTime() returns %d\n", *aIdleTime)); - return true; - } - - bool ProbeImplementation( - RefPtr aUserIdleServiceGTK) override { -@@ -229,10 +243,12 @@ - } - - private: - RefPtr mProxy; - RefPtr mCancellable; -+ uint32_t mLastIdleTime = 0; -+ bool mPollInProgress = false; - }; - #endif - - void nsUserIdleServiceGTK::ProbeService() { - MOZ_LOG(sIdleLog, LogLevel::Info, - diff --git a/D192208.1699444906.diff b/D192208.1699444906.diff deleted file mode 100644 index f77a357..0000000 --- a/D192208.1699444906.diff +++ /dev/null @@ -1,201 +0,0 @@ -diff --git a/widget/gtk/nsUserIdleServiceGTK.h b/widget/gtk/nsUserIdleServiceGTK.h ---- a/widget/gtk/nsUserIdleServiceGTK.h -+++ b/widget/gtk/nsUserIdleServiceGTK.h -@@ -14,18 +14,20 @@ - - class nsUserIdleServiceGTK; - - class UserIdleServiceImpl { - public: -- NS_INLINE_DECL_REFCOUNTING(UserIdleServiceImpl); -+ explicit UserIdleServiceImpl(nsUserIdleServiceGTK* aUserIdleService) -+ : mUserIdleServiceGTK(aUserIdleService){}; - - virtual bool PollIdleTime(uint32_t* aIdleTime) = 0; -- virtual bool ProbeImplementation( -- RefPtr aUserIdleServiceGTK) = 0; -+ virtual bool ProbeImplementation() = 0; -+ -+ virtual ~UserIdleServiceImpl() = default; - - protected: -- virtual ~UserIdleServiceImpl() = default; -+ nsUserIdleServiceGTK* mUserIdleServiceGTK; - }; - - #define IDLE_SERVICE_MUTTER 0 - #define IDLE_SERVICE_XSCREENSAVER 1 - #define IDLE_SERVICE_NONE 2 -@@ -61,11 +63,11 @@ - nsUserIdleServiceGTK() = default; - - private: - ~nsUserIdleServiceGTK() = default; - -- RefPtr mIdleService; -+ mozilla::UniquePtr mIdleService; - #ifdef MOZ_ENABLE_DBUS - int mIdleServiceType = IDLE_SERVICE_MUTTER; - #else - int mIdleServiceType = IDLE_SERVICE_XSCREENSAVER; - #endif -diff --git a/widget/gtk/nsUserIdleServiceGTK.cpp b/widget/gtk/nsUserIdleServiceGTK.cpp ---- a/widget/gtk/nsUserIdleServiceGTK.cpp -+++ b/widget/gtk/nsUserIdleServiceGTK.cpp -@@ -74,12 +74,11 @@ - MOZ_LOG(sIdleLog, LogLevel::Warning, - ("XSSQueryExtension returned false!\n")); - return false; - } - -- bool ProbeImplementation( -- RefPtr aUserIdleServiceGTK) override { -+ bool ProbeImplementation() override { - MOZ_LOG(sIdleLog, LogLevel::Info, - ("UserIdleServiceX11::UserIdleServiceX11()\n")); - - if (!mozilla::widget::GdkIsX11Display()) { - return false; -@@ -114,15 +113,17 @@ - // We're missing X11 symbols - return false; - } - - // UserIdleServiceX11 uses sync init, confirm it now. -- aUserIdleServiceGTK->AcceptServiceCallback(); -+ mUserIdleServiceGTK->AcceptServiceCallback(); - return true; - } - -- protected: -+ explicit UserIdleServiceX11(nsUserIdleServiceGTK* aUserIdleService) -+ : UserIdleServiceImpl(aUserIdleService){}; -+ - ~UserIdleServiceX11() { - # ifdef MOZ_X11 - if (mXssInfo) { - XFree(mXssInfo); - } -@@ -164,11 +165,11 @@ - mCancellable) - ->Then( - GetCurrentSerialEventTarget(), __func__, - // It's safe to capture this as we use mCancellable to stop - // listening. -- [self = RefPtr{this}, this](RefPtr&& aResult) { -+ [this](RefPtr&& aResult) { - if (!g_variant_is_of_type(aResult, G_VARIANT_TYPE_TUPLE) || - g_variant_n_children(aResult) != 1) { - MOZ_LOG(sIdleLog, LogLevel::Info, - ("PollIdleTime() Unexpected params type: %s\n", - g_variant_get_type_string(aResult))); -@@ -191,25 +192,25 @@ - mLastIdleTime = idleTime; - mPollInProgress = false; - MOZ_LOG(sIdleLog, LogLevel::Info, - ("Async handler got %d\n", mLastIdleTime)); - }, -- [self = RefPtr{this}, this](GUniquePtr&& aError) { -+ [this](GUniquePtr&& aError) { - mPollInProgress = false; - g_warning("Failed to call GetIdletime(): %s\n", - aError->message); -+ mUserIdleServiceGTK->RejectAndTryNextServiceCallback(); - }); - } - - *aIdleTime = mLastIdleTime; - MOZ_LOG(sIdleLog, LogLevel::Info, - ("PollIdleTime() returns %d\n", *aIdleTime)); - return true; - } - -- bool ProbeImplementation( -- RefPtr aUserIdleServiceGTK) override { -+ bool ProbeImplementation() override { - MOZ_LOG(sIdleLog, LogLevel::Info, - ("UserIdleServiceMutter::UserIdleServiceMutter()\n")); - - mCancellable = dont_AddRef(g_cancellable_new()); - CreateDBusProxyForBus( -@@ -219,23 +220,23 @@ - nullptr, "org.gnome.Mutter.IdleMonitor", - "/org/gnome/Mutter/IdleMonitor/Core", "org.gnome.Mutter.IdleMonitor", - mCancellable) - ->Then( - GetCurrentSerialEventTarget(), __func__, -- [self = RefPtr{this}, service = RefPtr{aUserIdleServiceGTK}]( -- RefPtr&& aProxy) { -- self->mProxy = std::move(aProxy); -- service->AcceptServiceCallback(); -+ [this](RefPtr&& aProxy) { -+ mProxy = std::move(aProxy); -+ mUserIdleServiceGTK->AcceptServiceCallback(); - }, -- [self = RefPtr{this}, service = RefPtr{aUserIdleServiceGTK}]( -- GUniquePtr&& aError) { -- service->RejectAndTryNextServiceCallback(); -+ [this](GUniquePtr&& aError) { -+ mUserIdleServiceGTK->RejectAndTryNextServiceCallback(); - }); - return true; - } - -- protected: -+ explicit UserIdleServiceMutter(nsUserIdleServiceGTK* aUserIdleService) -+ : UserIdleServiceImpl(aUserIdleService){}; -+ - ~UserIdleServiceMutter() { - if (mCancellable) { - g_cancellable_cancel(mCancellable); - mCancellable = nullptr; - } -@@ -257,23 +258,23 @@ - MOZ_ASSERT(!mIdleService); - - switch (mIdleServiceType) { - #ifdef MOZ_ENABLE_DBUS - case IDLE_SERVICE_MUTTER: -- mIdleService = new UserIdleServiceMutter(); -+ mIdleService = MakeUnique(this); - break; - #endif - #ifdef MOZ_X11 - case IDLE_SERVICE_XSCREENSAVER: -- mIdleService = new UserIdleServiceX11(); -+ mIdleService = MakeUnique(this); - break; - #endif - default: - return; - } - -- if (!mIdleService->ProbeImplementation(this)) { -+ if (!mIdleService->ProbeImplementation()) { - RejectAndTryNextServiceCallback(); - } - } - - void nsUserIdleServiceGTK::AcceptServiceCallback() { -@@ -289,19 +290,19 @@ - mIdleServiceType)); - - // Delete recent non-working service - MOZ_ASSERT(mIdleService, "Nothing to reject?"); - mIdleService = nullptr; -+ mIdleServiceInitialized = false; - - mIdleServiceType++; - if (mIdleServiceType < IDLE_SERVICE_NONE) { - MOZ_LOG(sIdleLog, LogLevel::Info, - ("nsUserIdleServiceGTK try next idle service\n")); - ProbeService(); - } else { - MOZ_LOG(sIdleLog, LogLevel::Info, ("nsUserIdleServiceGTK failed\n")); -- mIdleServiceInitialized = false; - } - } - - bool nsUserIdleServiceGTK::PollIdleTime(uint32_t* aIdleTime) { - if (!mIdleServiceInitialized) { - diff --git a/bmo-1559213-Support-system-av1.patch b/bmo-1559213-Support-system-av1.patch deleted file mode 100644 index 1d50290..0000000 --- a/bmo-1559213-Support-system-av1.patch +++ /dev/null @@ -1,91 +0,0 @@ -diff -up firefox-122.0/config/external/moz.build.system-av1 firefox-122.0/config/external/moz.build ---- firefox-122.0/config/external/moz.build.system-av1 2024-01-18 21:41:20.000000000 +0100 -+++ firefox-122.0/config/external/moz.build 2024-01-19 18:27:03.512034790 +0100 -@@ -40,8 +40,9 @@ if not CONFIG["MOZ_SYSTEM_LIBVPX"]: - external_dirs += ["media/libvpx"] - - if CONFIG["MOZ_AV1"]: -- external_dirs += ["media/libaom"] -- external_dirs += ["media/libdav1d"] -+ if not CONFIG["MOZ_SYSTEM_AV1"]: -+ external_dirs += ["media/libaom"] -+ external_dirs += ["media/libdav1d"] - - if not CONFIG["MOZ_SYSTEM_PNG"]: - external_dirs += ["media/libpng"] -diff -up firefox-122.0/config/system-headers.mozbuild.system-av1 firefox-122.0/config/system-headers.mozbuild ---- firefox-122.0/config/system-headers.mozbuild.system-av1 2024-01-19 18:27:03.513034826 +0100 -+++ firefox-122.0/config/system-headers.mozbuild 2024-01-19 19:02:54.515493457 +0100 -@@ -1304,6 +1304,14 @@ if CONFIG["MOZ_ENABLE_LIBPROXY"]: - "proxy.h", - ] - -+if CONFIG['MOZ_SYSTEM_AV1']: -+ system_headers += [ -+ 'aom/aom_decoder.h', -+ 'aom/aomdx.h', -+ 'aom/aom_image.h', -+ 'dav1d/dav1d.h', -+ ] -+ - if CONFIG["MOZ_SYSTEM_ICU"]: - system_headers += [ - "unicode/calendar.h", -diff -up firefox-122.0/dom/media/platforms/moz.build.system-av1 firefox-122.0/dom/media/platforms/moz.build ---- firefox-122.0/dom/media/platforms/moz.build.system-av1 2024-01-18 21:41:21.000000000 +0100 -+++ firefox-122.0/dom/media/platforms/moz.build 2024-01-19 18:27:03.513034826 +0100 -@@ -81,6 +81,11 @@ if CONFIG["MOZ_AV1"]: - "agnostic/AOMDecoder.cpp", - "agnostic/DAV1DDecoder.cpp", - ] -+ if CONFIG["MOZ_SYSTEM_AV1"]: -+ CXXFLAGS += CONFIG["MOZ_SYSTEM_LIBAOM_CFLAGS"] -+ OS_LIBS += CONFIG["MOZ_SYSTEM_LIBAOM_LIBS"] -+ CXXFLAGS += CONFIG["MOZ_SYSTEM_LIBDAV1D_CFLAGS"] -+ OS_LIBS += CONFIG["MOZ_SYSTEM_LIBDAV1D_LIBS"] - - if CONFIG["MOZ_OMX"]: - EXPORTS += [ -diff -up firefox-122.0/toolkit/moz.configure.system-av1 firefox-122.0/toolkit/moz.configure ---- firefox-122.0/toolkit/moz.configure.system-av1 2024-01-19 18:27:03.495034173 +0100 -+++ firefox-122.0/toolkit/moz.configure 2024-01-19 18:27:03.514034863 +0100 -@@ -743,14 +743,29 @@ def av1(value): - if value: - return True - -+option("--with-system-av1", help="Use system av1 (located with pkg-config)") - --@depends(target, when=av1 & compile_environment) -+system_libaom_info = pkg_check_modules('MOZ_SYSTEM_LIBAOM', 'aom >= 1.0.0', -+ when='--with-system-av1') -+ -+system_libdav1d_info = pkg_check_modules('MOZ_SYSTEM_LIBDAV1D', 'dav1d >= 0.1.1', -+ when='--with-system-av1') -+ -+@depends(system_libaom_info, system_libdav1d_info) -+def system_av1(system_libaom_info, system_libdav1d_info): -+ has_av1_libs = False -+ if system_libaom_info and system_libdav1d_info: -+ has_av1_libs = True -+ return has_av1_libs -+ -+ -+@depends(target, when=av1 & depends(system_av1)(lambda v: not v) & compile_environment) - def dav1d_asm(target): - if target.cpu in ("aarch64", "x86", "x86_64"): - return True - - --@depends(target, when=av1 & compile_environment) -+@depends(target, when=av1 & depends(system_av1)(lambda v: not v) & compile_environment) - def dav1d_nasm(target): - if target.cpu in ("x86", "x86_64"): - return namespace(version="2.14", what="AV1") -@@ -760,6 +775,7 @@ set_config("MOZ_DAV1D_ASM", dav1d_asm) - set_define("MOZ_DAV1D_ASM", dav1d_asm) - set_config("MOZ_AV1", av1) - set_define("MOZ_AV1", av1) -+set_config("MOZ_SYSTEM_AV1", depends_if(system_av1)(lambda _: True)) - - # JXL Image Codec Support - # ============================================================== diff --git a/bmo-1559213-fix-system-av1-libs.patch b/bmo-1559213-fix-system-av1-libs.patch deleted file mode 100644 index d687e8f..0000000 --- a/bmo-1559213-fix-system-av1-libs.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff -Naur a/media/ffvpx/libavcodec/moz.build b/media/ffvpx/libavcodec/moz.build ---- a/media/ffvpx/libavcodec/moz.build 2023-08-01 09:34:20.242044722 +0300 -+++ b/media/ffvpx/libavcodec/moz.build 2023-08-01 09:36:01.445808739 +0300 -@@ -109,10 +109,14 @@ - 'vp9recon.c', - 'vpx_rac.c', - ] -- USE_LIBS += [ -- 'dav1d', -- 'media_libdav1d_asm', -- ] -+ if CONFIG["MOZ_SYSTEM_AV1"]: -+ CFLAGS += CONFIG['MOZ_SYSTEM_LIBDAV1D_CFLAGS'] -+ OS_LIBS += CONFIG['MOZ_SYSTEM_LIBDAV1D_LIBS'] -+ else: -+ USE_LIBS += [ -+ 'dav1d', -+ 'media_libdav1d_asm', -+ ] - if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": - LOCAL_INCLUDES += ['/media/mozva'] - SOURCES += [ diff --git a/build-aarch64-skia.patch b/build-aarch64-skia.patch deleted file mode 100644 index 342836f..0000000 --- a/build-aarch64-skia.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff -up firefox-114.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h.aarch64-skia firefox-114.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h ---- firefox-114.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h.aarch64-skia 2023-06-02 03:15:22.000000000 +0200 -+++ firefox-114.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h 2023-06-05 10:18:46.942777997 +0200 -@@ -189,8 +189,6 @@ SI F F_from_Half(U16 half) { - SI U16 Half_from_F(F f) { - #if defined(USING_NEON_FP16) - return bit_pun(f); --#elif defined(USING_NEON_F16C) -- return (U16)vcvt_f16_f32(f); - #elif defined(USING_AVX512F) - return (U16)_mm512_cvtps_ph((__m512 )f, _MM_FROUND_CUR_DIRECTION ); - #elif defined(USING_AVX_F16C) -diff -up firefox-114.0/gfx/skia/skia/src/base/SkHalf.h.aarch64-skia firefox-114.0/gfx/skia/skia/src/base/SkHalf.h -diff -up firefox-114.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.aarch64-skia firefox-114.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h ---- firefox-114.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.aarch64-skia 2023-06-05 10:18:46.941777963 +0200 -+++ firefox-114.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h 2023-06-05 10:20:44.924843847 +0200 -@@ -1128,7 +1128,7 @@ SI F from_half(U16 h) { - } - - SI U16 to_half(F f) { --#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) \ -+#if 0 //defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) \ - && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds. - return sk_bit_cast(vcvt_f16_f32(f)); - diff --git a/build-arm-libopus.patch b/build-arm-libopus.patch deleted file mode 100644 index 1b3f31b..0000000 --- a/build-arm-libopus.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up firefox-66.0/media/libopus/silk/arm/arm_silk_map.c.old firefox-66.0/media/libopus/silk/arm/arm_silk_map.c ---- firefox-66.0/media/libopus/silk/arm/arm_silk_map.c.old 2019-03-12 21:07:35.356677522 +0100 -+++ firefox-66.0/media/libopus/silk/arm/arm_silk_map.c 2019-03-12 21:07:42.937693394 +0100 -@@ -28,7 +28,7 @@ POSSIBILITY OF SUCH DAMAGE. - # include "config.h" - #endif - --#include "main_FIX.h" -+#include "fixed/main_FIX.h" - #include "NSQ.h" - #include "SigProc_FIX.h" - diff --git a/build-big-endian-errors.patch b/build-big-endian-errors.patch new file mode 100644 index 0000000..b4bcb38 --- /dev/null +++ b/build-big-endian-errors.patch @@ -0,0 +1,57 @@ +diff -up firefox-102.0/third_party/libwebrtc/common_audio/wav_file.cc.big-endian-errors firefox-102.0/third_party/libwebrtc/common_audio/wav_file.cc +--- firefox-102.0/third_party/libwebrtc/common_audio/wav_file.cc.big-endian-errors 2022-08-17 13:19:53.056891028 +0200 ++++ firefox-102.0/third_party/libwebrtc/common_audio/wav_file.cc 2022-08-17 13:19:57.251879556 +0200 +@@ -89,9 +89,6 @@ void WavReader::Reset() { + + size_t WavReader::ReadSamples(const size_t num_samples, + int16_t* const samples) { +-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN +-#error "Need to convert samples to big-endian when reading from WAV file" +-#endif + + size_t num_samples_left_to_read = num_samples; + size_t next_chunk_start = 0; +@@ -129,9 +126,6 @@ size_t WavReader::ReadSamples(const size + } + + size_t WavReader::ReadSamples(const size_t num_samples, float* const samples) { +-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN +-#error "Need to convert samples to big-endian when reading from WAV file" +-#endif + + size_t num_samples_left_to_read = num_samples; + size_t next_chunk_start = 0; +@@ -213,9 +207,6 @@ WavWriter::WavWriter(FileWrapper file, + } + + void WavWriter::WriteSamples(const int16_t* samples, size_t num_samples) { +-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN +-#error "Need to convert samples to little-endian when writing to WAV file" +-#endif + + for (size_t i = 0; i < num_samples; i += kMaxChunksize) { + const size_t num_remaining_samples = num_samples - i; +@@ -243,9 +234,6 @@ void WavWriter::WriteSamples(const int16 + } + + void WavWriter::WriteSamples(const float* samples, size_t num_samples) { +-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN +-#error "Need to convert samples to little-endian when writing to WAV file" +-#endif + + for (size_t i = 0; i < num_samples; i += kMaxChunksize) { + const size_t num_remaining_samples = num_samples - i; +diff -up firefox-102.0/third_party/libwebrtc/common_audio/wav_header.cc.big-endian-errors firefox-102.0/third_party/libwebrtc/common_audio/wav_header.cc +--- firefox-102.0/third_party/libwebrtc/common_audio/wav_header.cc.big-endian-errors 2022-08-17 13:18:04.688187393 +0200 ++++ firefox-102.0/third_party/libwebrtc/common_audio/wav_header.cc 2022-08-17 13:18:22.451138816 +0200 +@@ -26,10 +26,6 @@ + namespace webrtc { + namespace { + +-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN +-#error "Code not working properly for big endian platforms." +-#endif +- + #pragma pack(2) + struct ChunkHeader { + uint32_t ID; diff --git a/build-cacheFlush-missing.patch b/build-cacheFlush-missing.patch deleted file mode 100644 index 51c368c..0000000 --- a/build-cacheFlush-missing.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -up firefox-55.0.3/js/src/jit/ExecutableAllocator.h.wasm firefox-55.0.3/js/src/jit/ExecutableAllocator.h ---- firefox-55.0.3/js/src/jit/ExecutableAllocator.h.wasm 2017-09-05 11:32:12.235909468 +0200 -+++ firefox-55.0.3/js/src/jit/ExecutableAllocator.h 2017-09-05 11:32:46.157916575 +0200 -@@ -219,7 +219,7 @@ class ExecutableAllocator - - static void poisonCode(JSRuntime* rt, JitPoisonRangeVector& ranges); - --#if defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64) || defined(JS_SIMULATOR_ARM64) -+#if defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64) || defined(JS_SIMULATOR_ARM64) || defined(JS_CODEGEN_NONE) - static void cacheFlush(void*, size_t) - { - } -diff -up firefox-55.0.3/js/src/jit-test/tests/wasm/bench/wasm_box2d.wasm firefox-55.0.3/js/src/jit-test/tests/wasm/bench/wasm_box2d diff --git a/build-disable-elfhack.patch b/build-disable-elfhack.patch new file mode 100644 index 0000000..859c50f --- /dev/null +++ b/build-disable-elfhack.patch @@ -0,0 +1,12 @@ +diff -up firefox-115.2.0/toolkit/moz.configure.disable-elfhack firefox-115.2.0/toolkit/moz.configure +--- firefox-115.2.0/toolkit/moz.configure.disable-elfhack 2023-09-20 21:55:41.002788320 +0200 ++++ firefox-115.2.0/toolkit/moz.configure 2023-09-20 21:56:37.343757245 +0200 +@@ -1511,7 +1511,7 @@ with only_when("--enable-compile-environ + "Cannot enable elfhack with lld." + " Use --enable-linker=bfd, --enable-linker=gold, or --disable-elf-hack" + ) +- return True ++ return False + + set_config("USE_ELF_HACK", use_elf_hack) + diff --git a/build-ppc-jit.patch b/build-ppc-jit.patch deleted file mode 100644 index a9dc6d1..0000000 --- a/build-ppc-jit.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff -up firefox-55.0/js/src/jit/MIR.h.old firefox-55.0/js/src/jit/MIR.h ---- firefox-55.0/js/src/jit/MIR.h.old 2017-08-08 14:04:44.528460099 +0200 -+++ firefox-55.0/js/src/jit/MIR.h 2017-08-08 14:05:11.045364831 +0200 -@@ -12434,7 +12434,7 @@ class MNearbyInt - TRIVIAL_NEW_WRAPPERS - - static bool HasAssemblerSupport(RoundingMode mode) { -- return Assembler::HasRoundInstruction(mode); -+ return false; - } - - RoundingMode roundingMode() const { return roundingMode_; } -diff -up firefox-55.0/js/src/jit/ExecutableAllocator.h.old firefox-55.0/js/src/jit/ExecutableAllocator.h ---- firefox-55.0/js/src/jit/ExecutableAllocator.h.old 2017-08-09 09:24:18.784983505 +0200 -+++ firefox-55.0/js/src/jit/ExecutableAllocator.h 2017-08-09 09:28:01.471100075 +0200 -@@ -307,6 +307,10 @@ class ExecutableAllocator - { - sync_instruction_memory((caddr_t)code, size); - } -+#else -+ static void cacheFlush(void*, size_t) -+ { -+ } - #endif - - private: -diff -up firefox-55.0/js/src/wasm/WasmBuiltins.cpp.old firefox-55.0/js/src/wasm/WasmBuiltins.cpp ---- firefox-55.0/js/src/wasm/WasmBuiltins.cpp.old 2017-08-09 12:50:46.877450765 +0200 -+++ firefox-55.0/js/src/wasm/WasmBuiltins.cpp 2017-08-09 12:50:59.725406974 +0200 -@@ -881,7 +881,6 @@ wasm::EnsureBuiltinThunksInitialized() - MOZ_ASSERT(!masm.numSymbolicAccesses()); - #endif - -- ExecutableAllocator::cacheFlush(thunks->codeBase, thunks->codeSize); - if (!ExecutableAllocator::makeExecutable(thunks->codeBase, thunks->codeSize)) - return false; - -diff -up firefox-55.0/js/src/wasm/WasmCode.cpp.old firefox-55.0/js/src/wasm/WasmCode.cpp ---- firefox-55.0/js/src/wasm/WasmCode.cpp.old 2017-08-09 12:50:37.205483731 +0200 -+++ firefox-55.0/js/src/wasm/WasmCode.cpp 2017-08-09 12:51:10.365370708 +0200 -@@ -287,8 +287,6 @@ CodeSegment::initialize(Tier tier, - if (!StaticallyLink(*this, linkData)) - return false; - -- ExecutableAllocator::cacheFlush(bytes_.get(), RoundupCodeLength(codeLength)); -- - // Reprotect the whole region to avoid having separate RW and RX mappings. - if (!ExecutableAllocator::makeExecutable(bytes_.get(), RoundupCodeLength(codeLength))) - return false; -diff -up firefox-55.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-55.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium -diff -up firefox-55.0/media/webrtc/trunk/Makefile.old firefox-55.0/media/webrtc/trunk/Makefile diff --git a/build-ppc64-abiv2.patch b/build-ppc64-abiv2.patch new file mode 100644 index 0000000..7a68390 --- /dev/null +++ b/build-ppc64-abiv2.patch @@ -0,0 +1,12 @@ +diff -up firefox-115.0.2/security/nss/lib/freebl/sha512-p8.s.ppc-abiv2 firefox-115.0.2/security/nss/lib/freebl/sha512-p8.s +--- firefox-115.0.2/security/nss/lib/freebl/sha512-p8.s.ppc-abiv2 2023-07-25 09:01:42.602375809 +0200 ++++ firefox-115.0.2/security/nss/lib/freebl/sha512-p8.s 2023-07-25 09:01:48.273373924 +0200 +@@ -3,7 +3,7 @@ + # See the full LICENSE under scripts/. + + .machine "any" +-.abiversion 2 ++.abiversion 1 + .text + + .globl sha512_block_p8 diff --git a/build-rhel7-lower-node-min-version.patch b/build-rhel7-lower-node-min-version.patch new file mode 100644 index 0000000..398cbc3 --- /dev/null +++ b/build-rhel7-lower-node-min-version.patch @@ -0,0 +1,11 @@ +--- firefox-115.8.0/python/mozbuild/mozbuild/nodeutil.py.lower-node-min-version 2024-02-12 21:53:56.000000000 +0200 ++++ firefox-115.8.0/python/mozbuild/mozbuild/nodeutil.py 2024-02-14 16:48:12.476182627 +0200 +@@ -13,7 +13,7 @@ from mozboot.util import get_tools_dir + from packaging.version import Version + from six import PY3 + +-NODE_MIN_VERSION = Version("12.22.12") ++NODE_MIN_VERSION = Version("10.24.0") + NPM_MIN_VERSION = Version("6.14.16") + + diff --git a/build-rhel7-nasm-dwarf.patch b/build-rhel7-nasm-dwarf.patch new file mode 100644 index 0000000..5e2ba4a --- /dev/null +++ b/build-rhel7-nasm-dwarf.patch @@ -0,0 +1,12 @@ +diff -up firefox-91.0.1/python/mozbuild/mozbuild/frontend/context.py.rhel7-nasm firefox-91.0.1/python/mozbuild/mozbuild/frontend/context.py +--- firefox-91.0.1/python/mozbuild/mozbuild/frontend/context.py.rhel7-nasm 2021-08-31 08:02:10.814740774 +0200 ++++ firefox-91.0.1/python/mozbuild/mozbuild/frontend/context.py 2021-08-31 08:04:03.967146994 +0200 +@@ -420,7 +420,7 @@ class AsmFlags(BaseCompileFlags): + if self._context.config.substs.get("OS_ARCH") == "WINNT": + debug_flags += ["-F", "cv8"] + elif self._context.config.substs.get("OS_ARCH") != "Darwin": +- debug_flags += ["-F", "dwarf"] ++ debug_flags += ["-f", "elf32"] + elif ( + self._context.config.substs.get("OS_ARCH") == "WINNT" + and self._context.config.substs.get("CPU_ARCH") == "aarch64" diff --git a/build-rust-ppc64le.patch b/build-rust-ppc64le.patch deleted file mode 100644 index 2474c35..0000000 --- a/build-rust-ppc64le.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff -up firefox-55.0/build/moz.configure/rust.configure.rust-ppc64le firefox-55.0/build/moz.configure/rust.configure ---- firefox-55.0/build/moz.configure/rust.configure.rust-ppc64le 2017-07-31 18:20:49.000000000 +0200 -+++ firefox-55.0/build/moz.configure/rust.configure 2017-08-02 10:19:03.254220003 +0200 -@@ -151,6 +151,9 @@ def rust_triple_alias(host_or_target): - ('sparc64', 'Linux'): 'sparc64-unknown-linux-gnu', - ('x86', 'Linux'): 'i686-unknown-linux-gnu', - ('x86_64', 'Linux'): 'x86_64-unknown-linux-gnu', -+ ('ppc64le', 'Linux'): 'powerpc64le-unknown-linux-gnu', -+ ('ppc64', 'Linux'): 'powerpc64-unknown-linux-gnu', -+ ('s390x', 'Linux'): 's390x-unknown-linux-gnu', - # OS X - ('x86', 'OSX'): 'i686-apple-darwin', - ('x86_64', 'OSX'): 'x86_64-apple-darwin', -@@ -174,8 +177,10 @@ def rust_triple_alias(host_or_target): - ('sparc64', 'SunOS'): 'sparcv9-sun-solaris', - }.get((host_or_target.cpu, os_or_kernel), None) - -+ if (rustc_target == 'powerpc64-unknown-linux-gnu' and host_or_target.endianness == 'little'): -+ rustc_target = 'powerpc64le-unknown-linux-gnu' - if rustc_target is None: -- die("Don't know how to translate {} for rustc".format(host_or_target.alias)) -+ die("Don't know how to translate {} for rustc, cpu: {}, os: {}".format(target.alias, target.cpu, os_or_kernel)) - - # Check to see whether our rustc has a reasonably functional stdlib - # for our chosen target. diff --git a/disable-openh264-download.patch b/disable-openh264-download.patch deleted file mode 100644 index 0631850..0000000 --- a/disable-openh264-download.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff -up firefox-121.0/toolkit/content/jar.mn.disable-openh264-download firefox-121.0/toolkit/content/jar.mn ---- firefox-121.0/toolkit/content/jar.mn.disable-openh264-download 2023-12-18 20:15:04.352014249 +0100 -+++ firefox-121.0/toolkit/content/jar.mn 2023-12-18 20:19:26.857929200 +0100 -@@ -130,7 +130,6 @@ toolkit.jar: - #ifdef XP_MACOSX - content/global/macWindowMenu.js - #endif -- content/global/gmp-sources/openh264.json (gmp-sources/openh264.json) - content/global/gmp-sources/widevinecdm.json (gmp-sources/widevinecdm.json) - content/global/gmp-sources/widevinecdm_l1.json (gmp-sources/widevinecdm_l1.json) - -diff -up firefox-121.0/toolkit/modules/GMPInstallManager.sys.mjs.disable-openh264-download firefox-121.0/toolkit/modules/GMPInstallManager.sys.mjs ---- firefox-121.0/toolkit/modules/GMPInstallManager.sys.mjs.disable-openh264-download 2023-12-11 21:42:21.000000000 +0100 -+++ firefox-121.0/toolkit/modules/GMPInstallManager.sys.mjs 2023-12-18 20:18:52.665768579 +0100 -@@ -35,11 +35,6 @@ function getScopedLogger(prefix) { - - const LOCAL_GMP_SOURCES = [ - { -- id: "gmp-gmpopenh264", -- src: "chrome://global/content/gmp-sources/openh264.json", -- installByDefault: true, -- }, -- { - id: "gmp-widevinecdm", - src: "chrome://global/content/gmp-sources/widevinecdm.json", - installByDefault: true, -@@ -421,6 +416,9 @@ GMPInstallManager.prototype = { - * downloaderr, verifyerr or previouserrorencountered - */ - installAddon(gmpAddon) { -+ if (gmpAddon.isOpenH264) { -+ return Promise.reject({ type: "disabled" }); -+ } - if (this._deferred) { - let log = getScopedLogger("GMPInstallManager.installAddon"); - log.error("previous error encountered"); diff --git a/disable-pipewire.patch b/disable-pipewire.patch new file mode 100644 index 0000000..cea6b68 --- /dev/null +++ b/disable-pipewire.patch @@ -0,0 +1,242 @@ +diff --git a/dom/media/webrtc/third_party_build/webrtc.mozbuild b/dom/media/webrtc/third_party_build/webrtc.mozbuild +index 30169c36c2..335e3cb1a1 100644 +--- a/dom/media/webrtc/third_party_build/webrtc.mozbuild ++++ b/dom/media/webrtc/third_party_build/webrtc.mozbuild +@@ -35,6 +35,3 @@ if CONFIG['MOZ_WEBRTC']: + + if CONFIG['MOZ_X11']: + DEFINES['WEBRTC_USE_X11'] = True +- +- if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": +- DEFINES['WEBRTC_USE_PIPEWIRE'] = True +diff --git a/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn/moz.build b/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn/moz.build +index 8c56b6b8e5..eaf8d7087a 100644 +--- a/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn/moz.build ++++ b/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn/moz.build +@@ -232,102 +232,6 @@ if CONFIG["CPU_ARCH"] == "aarch64": + DEFINES["WEBRTC_ARCH_ARM64"] = True + DEFINES["WEBRTC_HAS_NEON"] = True + +-if CONFIG["CPU_ARCH"] == "arm": +- +- CXXFLAGS += [ +- "-mfpu=neon" +- ] +- +- DEFINES["WEBRTC_ARCH_ARM"] = True +- DEFINES["WEBRTC_ARCH_ARM_V7"] = True +- DEFINES["WEBRTC_HAS_NEON"] = True +- DEFINES["WEBRTC_USE_PIPEWIRE"] = True +- DEFINES["_GNU_SOURCE"] = True +- +- LOCAL_INCLUDES += [ +- "/gfx/angle/checkout/include/", +- "/third_party/drm/drm/", +- "/third_party/drm/drm/include/", +- "/third_party/drm/drm/include/libdrm/", +- "/third_party/gbm/gbm/", +- "/third_party/libepoxy/libepoxy/include/", +- "/third_party/pipewire/" +- ] +- +- SOURCES += [ +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc" +- ] +- +- UNIFIED_SOURCES += [ +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/mouse_cursor_monitor_pipewire.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/restore_token_manager.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screen_capture_portal_interface.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_portal.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_stream_utils.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc" +- ] +- +-if CONFIG["CPU_ARCH"] == "mips32": +- +- DEFINES["MIPS32_LE"] = True +- DEFINES["MIPS_FPU_LE"] = True +- DEFINES["WEBRTC_USE_PIPEWIRE"] = True +- DEFINES["_GNU_SOURCE"] = True +- +- LOCAL_INCLUDES += [ +- "/gfx/angle/checkout/include/", +- "/third_party/drm/drm/", +- "/third_party/drm/drm/include/", +- "/third_party/drm/drm/include/libdrm/", +- "/third_party/gbm/gbm/", +- "/third_party/libepoxy/libepoxy/include/", +- "/third_party/pipewire/" +- ] +- +- SOURCES += [ +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc" +- ] +- +- UNIFIED_SOURCES += [ +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/mouse_cursor_monitor_pipewire.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/restore_token_manager.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screen_capture_portal_interface.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_portal.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_stream_utils.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc" +- ] +- +-if CONFIG["CPU_ARCH"] == "mips64": +- +- DEFINES["WEBRTC_USE_PIPEWIRE"] = True +- DEFINES["_GNU_SOURCE"] = True +- +- LOCAL_INCLUDES += [ +- "/gfx/angle/checkout/include/", +- "/third_party/drm/drm/", +- "/third_party/drm/drm/include/", +- "/third_party/drm/drm/include/libdrm/", +- "/third_party/gbm/gbm/", +- "/third_party/libepoxy/libepoxy/include/", +- "/third_party/pipewire/" +- ] +- +- SOURCES += [ +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc" +- ] +- +- UNIFIED_SOURCES += [ +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/mouse_cursor_monitor_pipewire.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/restore_token_manager.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screen_capture_portal_interface.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_portal.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_stream_utils.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc" +- ] +- + if CONFIG["CPU_ARCH"] == "ppc64": + + DEFINES["USE_X11"] = "1" +@@ -410,97 +314,6 @@ if CONFIG["MOZ_DEBUG"] == "1" and CONFIG["OS_TARGET"] == "WINNT": + + DEFINES["_HAS_ITERATOR_DEBUGGING"] = "0" + +-if CONFIG["CPU_ARCH"] == "aarch64" and CONFIG["OS_TARGET"] == "Linux": +- +- DEFINES["WEBRTC_USE_PIPEWIRE"] = True +- DEFINES["_GNU_SOURCE"] = True +- +- LOCAL_INCLUDES += [ +- "/gfx/angle/checkout/include/", +- "/third_party/drm/drm/", +- "/third_party/drm/drm/include/", +- "/third_party/drm/drm/include/libdrm/", +- "/third_party/gbm/gbm/", +- "/third_party/libepoxy/libepoxy/include/", +- "/third_party/pipewire/" +- ] +- +- SOURCES += [ +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc" +- ] +- +- UNIFIED_SOURCES += [ +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/mouse_cursor_monitor_pipewire.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/restore_token_manager.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screen_capture_portal_interface.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_portal.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_stream_utils.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc" +- ] +- +-if CONFIG["CPU_ARCH"] == "x86" and CONFIG["OS_TARGET"] == "Linux": +- +- CXXFLAGS += [ +- "-msse2" +- ] +- +- DEFINES["WEBRTC_USE_PIPEWIRE"] = True +- DEFINES["_GNU_SOURCE"] = True +- +- LOCAL_INCLUDES += [ +- "/gfx/angle/checkout/include/", +- "/third_party/drm/drm/", +- "/third_party/drm/drm/include/", +- "/third_party/drm/drm/include/libdrm/", +- "/third_party/gbm/gbm/", +- "/third_party/libepoxy/libepoxy/include/", +- "/third_party/pipewire/" +- ] +- +- SOURCES += [ +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc" +- ] +- +- UNIFIED_SOURCES += [ +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/mouse_cursor_monitor_pipewire.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/restore_token_manager.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screen_capture_portal_interface.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_portal.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_stream_utils.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc" +- ] +- +-if CONFIG["CPU_ARCH"] == "x86_64" and CONFIG["OS_TARGET"] == "Linux": +- +- DEFINES["WEBRTC_USE_PIPEWIRE"] = True +- DEFINES["_GNU_SOURCE"] = True +- +- LOCAL_INCLUDES += [ +- "/gfx/angle/checkout/include/", +- "/third_party/drm/drm/", +- "/third_party/drm/drm/include/", +- "/third_party/drm/drm/include/libdrm/", +- "/third_party/gbm/gbm/", +- "/third_party/libepoxy/libepoxy/include/", +- "/third_party/pipewire/" +- ] +- +- SOURCES += [ +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc" +- ] +- +- UNIFIED_SOURCES += [ +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/mouse_cursor_monitor_pipewire.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/restore_token_manager.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screen_capture_portal_interface.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_portal.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_stream_utils.cc", +- "/third_party/libwebrtc/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc" +- ] +- + if CONFIG["CPU_ARCH"] == "aarch64" and CONFIG["MOZ_X11"] == "1" and CONFIG["OS_TARGET"] == "Linux": + + DEFINES["USE_X11"] = "1" +diff --git a/third_party/libwebrtc/modules/portal/portal_gn/moz.build b/third_party/libwebrtc/modules/portal/portal_gn/moz.build +index 77603c780b..e6f2c9e724 100644 +--- a/third_party/libwebrtc/modules/portal/portal_gn/moz.build ++++ b/third_party/libwebrtc/modules/portal/portal_gn/moz.build +@@ -26,7 +26,7 @@ DEFINES["WEBRTC_MOZILLA_BUILD"] = True + DEFINES["WEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS"] = "0" + DEFINES["WEBRTC_POSIX"] = True + DEFINES["WEBRTC_STRICT_FIELD_TRIALS"] = "0" +-DEFINES["WEBRTC_USE_PIPEWIRE"] = True ++DEFINES["WEBRTC_USE_PIPEWIRE"] = False + DEFINES["_FILE_OFFSET_BITS"] = "64" + DEFINES["_GNU_SOURCE"] = True + DEFINES["_LARGEFILE64_SOURCE"] = True +diff --git a/third_party/libwebrtc/third_party/pipewire/pipewire_gn/moz.build b/third_party/libwebrtc/third_party/pipewire/pipewire_gn/moz.build +index 86a0daf8fa..e895f2eb15 100644 +--- a/third_party/libwebrtc/third_party/pipewire/pipewire_gn/moz.build ++++ b/third_party/libwebrtc/third_party/pipewire/pipewire_gn/moz.build +@@ -24,7 +24,7 @@ DEFINES["WEBRTC_MOZILLA_BUILD"] = True + DEFINES["WEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS"] = "0" + DEFINES["WEBRTC_POSIX"] = True + DEFINES["WEBRTC_STRICT_FIELD_TRIALS"] = "0" +-DEFINES["WEBRTC_USE_PIPEWIRE"] = True ++DEFINES["WEBRTC_USE_PIPEWIRE"] = False + DEFINES["_FILE_OFFSET_BITS"] = "64" + DEFINES["_GNU_SOURCE"] = True + DEFINES["_LARGEFILE64_SOURCE"] = True diff --git a/fedora-customization.patch b/fedora-customization.patch deleted file mode 100644 index e1d54b0..0000000 --- a/fedora-customization.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff -up firefox-120.0/toolkit/xre/nsAppRunner.cpp.fedora-customization firefox-120.0/toolkit/xre/nsAppRunner.cpp ---- firefox-120.0/toolkit/xre/nsAppRunner.cpp.fedora-customization 2023-11-13 21:48:38.000000000 +0100 -+++ firefox-120.0/toolkit/xre/nsAppRunner.cpp 2023-11-14 10:39:13.001603081 +0100 -@@ -5765,6 +5765,12 @@ int XREMain::XRE_main(int argc, char* ar - if (!mAppData->remotingName) { - mAppData->remotingName = mAppData->name; - } -+ -+ const char* appRemotingName = getenv("MOZ_APP_REMOTINGNAME"); -+ if (appRemotingName) { -+ mAppData->remotingName = strdup(appRemotingName); -+ } -+ - // used throughout this file - gAppData = mAppData.get(); - -diff -up firefox-120.0/widget/gtk/nsWindow.cpp.fedora-customization firefox-120.0/widget/gtk/nsWindow.cpp ---- firefox-120.0/widget/gtk/nsWindow.cpp.fedora-customization 2023-11-14 10:39:13.003603150 +0100 -+++ firefox-120.0/widget/gtk/nsWindow.cpp 2023-11-14 10:41:06.339532735 +0100 -@@ -3457,6 +3457,11 @@ void* nsWindow::GetNativeData(uint32_t a - nsresult nsWindow::SetTitle(const nsAString& aTitle) { - if (!mShell) return NS_OK; - -+ const char* appTitle = getenv("MOZ_APP_TITLE"); -+ if (appTitle) { -+ gtk_window_set_title(GTK_WINDOW(mShell), appTitle); -+ return NS_OK; -+ } - // convert the string into utf8 and set the title. - #define UTF8_FOLLOWBYTE(ch) (((ch) & 0xC0) == 0x80) - NS_ConvertUTF16toUTF8 titleUTF8(aTitle); diff --git a/firefox-112.0-commasplit.patch b/firefox-112.0-commasplit.patch deleted file mode 100644 index a56aec4..0000000 --- a/firefox-112.0-commasplit.patch +++ /dev/null @@ -1,76 +0,0 @@ ---- firefox-111.0.1/build/moz.configure/rust.configure 2023-03-21 06:16:03.000000000 -0700 -+++ firefox-111.0.1/build/moz.configure/rust.configure.new 2023-04-05 08:57:29.403219120 -0700 -@@ -593,7 +593,7 @@ - - # ============================================================== - --option(env="RUSTFLAGS", nargs=1, help="Rust compiler flags") -+option(env="RUSTFLAGS", nargs=1, help="Rust compiler flags", comma_split=False) - set_config("RUSTFLAGS", depends("RUSTFLAGS")(lambda flags: flags)) - - ---- firefox-111.0.1/python/mozbuild/mozbuild/configure/options.py 2023-03-21 06:16:09.000000000 -0700 -+++ firefox-111.0.1/python/mozbuild/mozbuild/configure/options.py.new 2023-04-05 08:57:31.270193468 -0700 -@@ -191,6 +191,10 @@ - to instantiate an option indirectly. Set this to a positive integer to - force the script to look into a deeper stack frame when inferring the - `category`. -+ - `comma_split` specifies whether the value string should be split on -+ commas. The default is True. Setting it False is necessary for things -+ like compiler flags which should be a single string that may contain -+ commas. - """ - - __slots__ = ( -@@ -205,6 +209,7 @@ - "possible_origins", - "category", - "define_depth", -+ "comma_split", - ) - - def __init__( -@@ -218,6 +223,7 @@ - category=None, - help=None, - define_depth=0, -+ comma_split=True, - ): - if not name and not env: - raise InvalidOptionError( -@@ -335,9 +341,10 @@ - self.choices = choices - self.help = help - self.category = category or _infer_option_category(define_depth) -+ self.comma_split = comma_split - - @staticmethod -- def split_option(option): -+ def split_option(option, comma_split=True): - """Split a flag or variable into a prefix, a name and values - - Variables come in the form NAME=values (no prefix). -@@ -350,7 +357,13 @@ - - elements = option.split("=", 1) - name = elements[0] -- values = tuple(elements[1].split(",")) if len(elements) == 2 else () -+ if len(elements) == 2: -+ if comma_split: -+ values = tuple(elements[1].split(",")) -+ else: -+ values = (elements[1],) -+ else: -+ values = () - if name.startswith("--"): - name = name[2:] - if not name.islower(): -@@ -426,7 +439,7 @@ - % (option, origin, ", ".join(self.possible_origins)) - ) - -- prefix, name, values = self.split_option(option) -+ prefix, name, values = self.split_option(option, self.comma_split) - option = self._join_option(prefix, name) - - assert name in (self.name, self.env) diff --git a/firefox-enable-vaapi.patch b/firefox-enable-vaapi.patch deleted file mode 100644 index 5f25bc1..0000000 --- a/firefox-enable-vaapi.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff -up firefox-117.0/widget/gtk/GfxInfo.cpp.firefox-enable-vaapi firefox-117.0/widget/gtk/GfxInfo.cpp ---- firefox-117.0/widget/gtk/GfxInfo.cpp.firefox-enable-vaapi 2023-08-28 11:20:54.324211945 +0200 -+++ firefox-117.0/widget/gtk/GfxInfo.cpp 2023-08-28 11:24:01.700666843 +0200 -@@ -1095,14 +1095,6 @@ const nsTArray& GfxInfo:: - nsIGfxInfo::FEATURE_BLOCKED_DEVICE, DRIVER_LESS_THAN, V(23, 1, 1, 0), - "FEATURE_HARDWARE_VIDEO_DECODING_AMD_DISABLE", "Mesa 23.1.1.0"); - -- // Disable on Release/late Beta on AMD --#if !defined(EARLY_BETA_OR_EARLIER) -- APPEND_TO_DRIVER_BLOCKLIST(OperatingSystem::Linux, DeviceFamily::AtiAll, -- nsIGfxInfo::FEATURE_HARDWARE_VIDEO_DECODING, -- nsIGfxInfo::FEATURE_BLOCKED_DEVICE, -- DRIVER_COMPARISON_IGNORED, V(0, 0, 0, 0), -- "FEATURE_HARDWARE_VIDEO_DECODING_DISABLE", ""); --#endif - //////////////////////////////////// - // FEATURE_HW_DECODED_VIDEO_ZERO_COPY - ALLOWLIST - APPEND_TO_DRIVER_BLOCKLIST2(OperatingSystem::Linux, DeviceFamily::All, diff --git a/firefox-gcc-13-build.patch b/firefox-gcc-13-build.patch deleted file mode 100644 index 8512b76..0000000 --- a/firefox-gcc-13-build.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- firefox-109.0.1/gfx/2d/Rect.h.old 2023-02-07 09:44:24.946279843 +0100 -+++ firefox-109.0.1/gfx/2d/Rect.h 2023-02-07 09:44:47.969032049 +0100 -@@ -324,8 +324,8 @@ IntRectTyped RoundedToInt(const R - - template - bool RectIsInt32Safe(const RectTyped& aRect) { -- float min = (float)std::numeric_limits::min(); -- float max = (float)std::numeric_limits::max(); -+ float min = (float)std::numeric_limits::min(); -+ float max = (float)std::numeric_limits::max(); - return aRect.x > min && aRect.y > min && aRect.width < max && - aRect.height < max && aRect.XMost() < max && aRect.YMost() < max; - } -diff -up firefox-109.0.1/toolkit/components/telemetry/pingsender/pingsender.cpp.old firefox-109.0.1/toolkit/components/telemetry/pingsender/pingsender.cpp ---- firefox-109.0.1/toolkit/components/telemetry/pingsender/pingsender.cpp.old 2023-02-07 11:03:41.788720090 +0100 -+++ firefox-109.0.1/toolkit/components/telemetry/pingsender/pingsender.cpp 2023-02-07 11:04:29.195345659 +0100 -@@ -10,6 +10,7 @@ - #include - #include - #include -+#include - - #include - diff --git a/firefox-gcc-always-inline.patch b/firefox-gcc-always-inline.patch deleted file mode 100644 index d7af60f..0000000 --- a/firefox-gcc-always-inline.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -up firefox-114.0.2/gfx/wr/swgl/src/gl.cc.inline firefox-114.0.2/gfx/wr/swgl/src/gl.cc ---- firefox-114.0.2/gfx/wr/swgl/src/gl.cc.inline 2023-06-22 11:08:53.294593327 +0200 -+++ firefox-114.0.2/gfx/wr/swgl/src/gl.cc 2023-06-22 11:12:43.663486734 +0200 -@@ -58,9 +58,7 @@ WINBASEAPI BOOL WINAPI QueryPerformanceF - } - - #else --// GCC is slower when dealing with always_inline, especially in debug builds. --// When using Clang, use always_inline more aggressively. --# if defined(__clang__) || defined(NDEBUG) -+# if defined(__clang__) || defined (__GNUC__) || defined(NDEBUG) - # define ALWAYS_INLINE __attribute__((always_inline)) inline - # else - # define ALWAYS_INLINE inline diff --git a/firefox-glibc-dynstack.patch b/firefox-glibc-dynstack.patch deleted file mode 100644 index b0487d7..0000000 --- a/firefox-glibc-dynstack.patch +++ /dev/null @@ -1,64 +0,0 @@ -diff -ur firefox-90.0.orig/js/xpconnect/src/XPCJSContext.cpp firefox-90.0/js/xpconnect/src/XPCJSContext.cpp ---- firefox-90.0.orig/js/xpconnect/src/XPCJSContext.cpp 2021-07-05 21:16:02.000000000 +0200 -+++ firefox-90.0/js/xpconnect/src/XPCJSContext.cpp 2021-07-19 15:01:24.083460460 +0200 -@@ -85,14 +85,6 @@ - using namespace xpc; - using namespace JS; - --// The watchdog thread loop is pretty trivial, and should not require much stack --// space to do its job. So only give it 32KiB or the platform minimum. --#if !defined(PTHREAD_STACK_MIN) --# define PTHREAD_STACK_MIN 0 --#endif --static constexpr size_t kWatchdogStackSize = -- PTHREAD_STACK_MIN < 32 * 1024 ? 32 * 1024 : PTHREAD_STACK_MIN; -- - static void WatchdogMain(void* arg); - class Watchdog; - class WatchdogManager; -@@ -163,7 +155,7 @@ - // watchdog, we need to join it on shutdown. - mThread = PR_CreateThread(PR_USER_THREAD, WatchdogMain, this, - PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, -- PR_JOINABLE_THREAD, kWatchdogStackSize); -+ PR_JOINABLE_THREAD, 0); - if (!mThread) { - MOZ_CRASH("PR_CreateThread failed!"); - } -Only in firefox-90.0/js/xpconnect/src: XPCJSContext.cpp.firefox-glibc-dynstack -diff -ur firefox-90.0.orig/security/sandbox/linux/launch/SandboxLaunch.cpp firefox-90.0/security/sandbox/linux/launch/SandboxLaunch.cpp ---- firefox-90.0.orig/security/sandbox/linux/launch/SandboxLaunch.cpp 2021-07-05 18:20:36.000000000 +0200 -+++ firefox-90.0/security/sandbox/linux/launch/SandboxLaunch.cpp 2021-07-20 08:39:17.272136982 +0200 -@@ -501,8 +501,7 @@ - MOZ_NEVER_INLINE MOZ_ASAN_BLACKLIST static pid_t DoClone(int aFlags, - jmp_buf* aCtx) { - static constexpr size_t kStackAlignment = 16; -- uint8_t miniStack[PTHREAD_STACK_MIN] -- __attribute__((aligned(kStackAlignment))); -+ uint8_t miniStack[4096] __attribute__((aligned(kStackAlignment))); - #ifdef __hppa__ - void* stackPtr = miniStack; - #else -@@ -523,13 +522,19 @@ - CLONE_CHILD_CLEARTID; - MOZ_RELEASE_ASSERT((aFlags & kBadFlags) == 0); - -+ // Block signals due to small stack in DoClone. -+ sigset_t oldSigs; -+ BlockAllSignals(&oldSigs); -+ -+ int ret = 0; - jmp_buf ctx; - if (setjmp(ctx) == 0) { - // In the parent and just called setjmp: -- return DoClone(aFlags | SIGCHLD, &ctx); -+ ret = DoClone(aFlags | SIGCHLD, &ctx); - } -+ RestoreSignals(&oldSigs); - // In the child and have longjmp'ed: -- return 0; -+ return ret; - } - - static bool WriteStringToFile(const char* aPath, const char* aStr, -Only in firefox-90.0/security/sandbox/linux/launch: SandboxLaunch.cpp~ diff --git a/firefox-i686-build.patch b/firefox-i686-build.patch deleted file mode 100644 index 320199f..0000000 --- a/firefox-i686-build.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up firefox-105.0/mozglue/misc/SIMD_avx2.cpp.old firefox-105.0/mozglue/misc/SIMD_avx2.cpp ---- firefox-105.0/mozglue/misc/SIMD_avx2.cpp.old 2022-09-22 21:35:07.006221995 +0200 -+++ firefox-105.0/mozglue/misc/SIMD_avx2.cpp 2022-09-22 21:36:12.972480517 +0200 -@@ -55,7 +55,7 @@ __m256i CmpEq256(__m256i a, __m256i b) { - return _mm256_cmpeq_epi64(a, b); - } - --# if defined(__GNUC__) && !defined(__clang__) -+# if 0 - - // See the comment in SIMD.cpp over Load32BitsIntoXMM. This is just adapted - // from that workaround. Testing this, it also yields the correct instructions diff --git a/firefox-mozconfig b/firefox-mozconfig index 676a0e0..952a799 100644 --- a/firefox-mozconfig +++ b/firefox-mozconfig @@ -1,25 +1,29 @@ . $topsrcdir/browser/config/mozconfig -ac_add_options --with-system-zlib -ac_add_options --disable-strip -ac_add_options --enable-necko-wifi -ac_add_options --disable-updater -ac_add_options --enable-chrome-format=omni -ac_add_options --enable-pulseaudio -ac_add_options --enable-av1 -ac_add_options --without-system-icu -ac_add_options --enable-release -ac_add_options --update-channel=release ac_add_options --allow-addon-sideload -ac_add_options --with-system-fdk-aac +ac_add_options --disable-crashreporter +ac_add_options --disable-strip +ac_add_options --disable-updater +ac_add_options --enable-av1 +ac_add_options --enable-chrome-format=omni ac_add_options --enable-js-shell -ac_add_options --with-unsigned-addon-scopes=app,system +ac_add_options --enable-necko-wifi +ac_add_options --enable-official-branding +ac_add_options --enable-pulseaudio +ac_add_options --enable-release +ac_add_options --enable-system-ffi ac_add_options --without-sysroot +ac_add_options --without-system-icu ac_add_options --without-wasm-sandboxed-libraries +ac_add_options --with-system-jpeg +ac_add_options --with-system-zlib +ac_add_options --with-unsigned-addon-scopes=app,system export BUILD_OFFICIAL=1 export MOZILLA_OFFICIAL=1 export MOZ_TELEMETRY_REPORTING=1 +export MOZ_UPDATE_CHANNEL=release +export MOZ_APP_REMOTINGNAME=firefox mk_add_options BUILD_OFFICIAL=1 mk_add_options MOZILLA_OFFICIAL=1 mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir diff --git a/firefox-nss-version.patch b/firefox-nss-version.patch deleted file mode 100644 index 21985d1..0000000 --- a/firefox-nss-version.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up firefox-84.0.1/build/moz.configure/nss.configure.nss-version firefox-84.0.1/build/moz.configure/nss.configure ---- firefox-84.0.1/build/moz.configure/nss.configure.nss-version 2020-12-21 20:07:33.000000000 +0100 -+++ firefox-84.0.1/build/moz.configure/nss.configure 2020-12-22 10:23:02.156625919 +0100 -@@ -9,7 +9,7 @@ option("--with-system-nss", help="Use sy - imply_option("--with-system-nspr", True, when="--with-system-nss") - - nss_pkg = pkg_check_modules( -- "NSS", "nss >= 3.59.1", when="--with-system-nss", config=False -+ "NSS", "nss >= 3.59", when="--with-system-nss", config=False - ) - - set_config("MOZ_SYSTEM_NSS", True, when="--with-system-nss") diff --git a/firefox-redhat-default-prefs.js b/firefox-redhat-default-prefs.js index 6fcee25..cdb98dd 100644 --- a/firefox-redhat-default-prefs.js +++ b/firefox-redhat-default-prefs.js @@ -14,11 +14,10 @@ pref("browser.shell.checkDefaultBrowser", false); pref("network.manage-offline-status", true); pref("extensions.shownSelectionUI", true); pref("ui.SpellCheckerUnderlineStyle", 1); -pref("startup.homepage_override_url", ""); -pref("browser.startup.homepage", "data:text/plain,browser.startup.homepage=https://start.fedoraproject.org/"); -pref("browser.newtabpage.pinned", '[{"url":"https://start.fedoraproject.org/","title":"Fedora Project - Start Page"}]'); -pref("media.gmp-gmpopenh264.provider.enabled",false); -pref("media.gmp-gmpopenh264.autoupdate",false); +pref("startup.homepage_override_url", "%HOMEPAGE%"); +pref("startup.homepage_welcome_url", "%HOMEPAGE%"); +pref("browser.startup.homepage", "data:text/plain,browser.startup.homepage=file:///%PREFIX%/share/doc/HTML/index.html"); +pref("media.gmp-gmpopenh264.autoupdate",true); pref("media.gmp-gmpopenh264.enabled",false); pref("media.gmp.decoder.enabled", true); pref("plugins.notifyMissingFlash", false); @@ -26,7 +25,8 @@ pref("plugins.notifyMissingFlash", false); pref("browser.display.use_system_colors", false); /* Allow sending credetials to all https:// sites */ pref("network.negotiate-auth.trusted-uris", "https://"); -pref("spellchecker.dictionary_path","/usr/share/hunspell"); +pref("security.use_sqldb", false); +pref("spellchecker.dictionary_path","/usr/share/myspell"); /* Disable DoH by default */ pref("network.trr.mode", 5); /* Enable per-user policy dir, see mozbz#1583466 */ @@ -34,3 +34,5 @@ pref("browser.policies.perUserDir", true); pref("browser.gnome-search-provider.enabled",true); /* Enable ffvpx playback for WebRTC */ pref("media.navigator.mediadatadecoder_vpx_enabled", true); +/* See https://bugzilla.redhat.com/show_bug.cgi?id=1672424 */ +pref("storage.nfs_filesystem", true); diff --git a/firefox-search-provider.ini b/firefox-search-provider.ini new file mode 100644 index 0000000..3868e3d --- /dev/null +++ b/firefox-search-provider.ini @@ -0,0 +1,5 @@ +[Shell Search Provider] +DesktopId=firefox.desktop +BusName=org.mozilla.Firefox.SearchProvider +ObjectPath=/org/mozilla/Firefox/SearchProvider +Version=2 diff --git a/firefox-testing.patch b/firefox-testing.patch deleted file mode 100644 index d380b48..0000000 --- a/firefox-testing.patch +++ /dev/null @@ -1,69 +0,0 @@ -diff -up firefox-96.0.1/docshell/base/crashtests/crashtests.list.testing firefox-96.0.1/docshell/base/crashtests/crashtests.list ---- firefox-96.0.1/docshell/base/crashtests/crashtests.list.testing 2022-01-13 20:26:02.000000000 +0100 -+++ firefox-96.0.1/docshell/base/crashtests/crashtests.list 2022-01-18 10:42:02.642971427 +0100 -@@ -13,7 +13,6 @@ load 614499-1.html - load 678872-1.html - skip-if(Android) pref(dom.disable_open_during_load,false) load 914521.html # Android bug 1584562 - pref(browser.send_pings,true) asserts(0-2) load 1257730-1.html # bug 566159 --load 1331295.html - load 1341657.html - load 1584467.html - load 1614211-1.html -diff -up firefox-96.0.1/dom/media/tests/crashtests/crashtests.list.testing firefox-96.0.1/dom/media/tests/crashtests/crashtests.list ---- firefox-96.0.1/dom/media/tests/crashtests/crashtests.list.testing 2022-01-13 20:26:03.000000000 +0100 -+++ firefox-96.0.1/dom/media/tests/crashtests/crashtests.list 2022-01-18 10:42:02.642971427 +0100 -@@ -25,7 +25,6 @@ asserts-if(Android,0-1) pref(browser.lin - load 1443212.html - asserts-if(Android,0-2) load 1453030.html - load 1468451.html --skip-if(Android) load 1490700.html # No screenshare on Android - load 1505957.html - load 1509442.html - load 1511130.html -diff -up firefox-96.0.1/testing/marionette/harness/marionette_harness/tests/unit/test_marionette.py.testing firefox-96.0.1/testing/marionette/harness/marionette_harness/tests/unit/test_marionette.py ---- firefox-96.0.1/testing/marionette/harness/marionette_harness/tests/unit/test_marionette.py.testing 2022-01-13 20:26:09.000000000 +0100 -+++ firefox-96.0.1/testing/marionette/harness/marionette_harness/tests/unit/test_marionette.py 2022-01-18 10:42:02.642971427 +0100 -@@ -98,15 +98,7 @@ class TestMarionette(MarionetteTestCase) - - def test_application_update_disabled(self): - # Updates of the application should always be disabled by default -- with self.marionette.using_context("chrome"): -- update_allowed = self.marionette.execute_script( -- """ -- let aus = Cc['@mozilla.org/updates/update-service;1'] -- .getService(Ci.nsIApplicationUpdateService); -- return aus.canCheckForUpdates; -- """ -- ) -- -+ update_allowed = False - self.assertFalse(update_allowed) - - -diff -up firefox-96.0.1/testing/tools/websocketprocessbridge/websocketprocessbridge_requirements_3.txt.testing firefox-96.0.1/testing/tools/websocketprocessbridge/websocketprocessbridge_requirements_3.txt ---- firefox-96.0.1/testing/tools/websocketprocessbridge/websocketprocessbridge_requirements_3.txt.testing 2022-01-13 23:26:17.000000000 +0100 -+++ firefox-96.0.1/testing/tools/websocketprocessbridge/websocketprocessbridge_requirements_3.txt 2022-01-18 10:42:02.642971427 +0100 -@@ -1,6 +1,7 @@ - # This file is the websocketprocess requirements.txt used with python 3. - - six -+pyrsistent - vcversioner==2.16.0.0 - twisted>=18.7.0 - -diff -up firefox-96.0.1/toolkit/crashreporter/test/unit/xpcshell.ini.testing firefox-96.0.1/toolkit/crashreporter/test/unit/xpcshell.ini ---- firefox-96.0.1/toolkit/crashreporter/test/unit/xpcshell.ini.testing 2022-01-13 23:26:17.000000000 +0100 -+++ firefox-96.0.1/toolkit/crashreporter/test/unit/xpcshell.ini 2022-01-18 10:58:40.574277255 +0100 -@@ -37,7 +37,6 @@ skip-if = (os != 'win' && os != 'linux') - - [test_crash_AsyncShutdown.js] - [test_event_files.js] --[test_crash_terminator.js] - - [test_crash_backgroundtask_moz_crash.js] - skip-if = os == 'win' -@@ -123,4 +122,3 @@ head = head_crashreporter.js head_win64c - skip-if = !(os == 'win' && bits == 64 && processor == 'x86_64') - reason = Windows test specific to the x86-64 architecture - support-files = test_crash_win64cfi_not_a_pe.exe -- diff --git a/firefox-tests-reftest.patch b/firefox-tests-reftest.patch deleted file mode 100644 index 6800721..0000000 --- a/firefox-tests-reftest.patch +++ /dev/null @@ -1,514 +0,0 @@ -diff -U0 firefox-92.0/dom/canvas/test/reftest/filters/reftest.list.firefox-tests-reftest firefox-92.0/dom/canvas/test/reftest/filters/reftest.list ---- firefox-92.0/dom/canvas/test/reftest/filters/reftest.list.firefox-tests-reftest 2021-09-01 19:14:40.000000000 +0200 -+++ firefox-92.0/dom/canvas/test/reftest/filters/reftest.list 2021-09-03 18:44:02.933897050 +0200 -@@ -21 +21 @@ --== units-ex.html ref.html -+fuzzy-if(gtkWidget,0-255,0-100) == units-ex.html ref.html -diff -U0 firefox-92.0/dom/html/reftests/autofocus/reftest.list.firefox-tests-reftest firefox-92.0/dom/html/reftests/autofocus/reftest.list ---- firefox-92.0/dom/html/reftests/autofocus/reftest.list.firefox-tests-reftest 2021-09-01 19:14:40.000000000 +0200 -+++ firefox-92.0/dom/html/reftests/autofocus/reftest.list 2021-09-03 18:44:02.933897050 +0200 -@@ -7 +7 @@ --fuzzy-if(gtkWidget,0-18,0-1) needs-focus == textarea-load.html textarea-ref.html # One anti-aliased corner. -+fuzzy-if(gtkWidget,0-56,0-2) needs-focus == textarea-load.html textarea-ref.html # One anti-aliased corner. -diff -U0 firefox-92.0/dom/html/reftests/reftest.list.firefox-tests-reftest firefox-92.0/dom/html/reftests/reftest.list ---- firefox-92.0/dom/html/reftests/reftest.list.firefox-tests-reftest 2021-09-01 19:14:40.000000000 +0200 -+++ firefox-92.0/dom/html/reftests/reftest.list 2021-09-03 18:44:02.933897050 +0200 -@@ -46 +45,0 @@ --skip-if(isCoverageBuild) fuzzy(0-2,0-830) random-if(useDrawSnapshot) == bug917595-iframe-1.html bug917595-1-ref.html -diff -U0 firefox-92.0/dom/media/test/reftest/reftest.list.firefox-tests-reftest firefox-92.0/dom/media/test/reftest/reftest.list ---- firefox-92.0/dom/media/test/reftest/reftest.list.firefox-tests-reftest 2021-09-01 19:14:40.000000000 +0200 -+++ firefox-92.0/dom/media/test/reftest/reftest.list 2021-09-03 18:50:43.693907440 +0200 -@@ -0,0 +1,9 @@ -+skip-if(Android) fuzzy-if(OSX,0-80,0-76800) fuzzy-if(appleSilicon,92-92,76799-76799) fuzzy-if(winWidget,0-62,0-76799) fuzzy-if(gtkWidget&&layersGPUAccelerated,0-70,0-2032) fuzzy-if(swgl,62-69,588-76737) HTTP(..) == short.mp4.firstframe.html short.mp4.firstframe-ref.html -+skip-if(Android) fuzzy-if(OSX,0-87,0-76797) fuzzy-if(appleSilicon,83-83,76797-76797) fuzzy-if(winWidget,0-60,0-76797) fuzzy-if(gtkWidget&&layersGPUAccelerated,0-60,0-6070) fuzzy-if(swgl,52-76,1698-76545) HTTP(..) == short.mp4.lastframe.html short.mp4.lastframe-ref.html -+skip-if(Android) skip-if(cocoaWidget) skip-if(winWidget) fuzzy-if(gtkWidget&&layersGPUAccelerated,0-57,0-4282) fuzzy-if(OSX,55-80,4173-4417) fuzzy-if(swgl,54-54,3653-3653) HTTP(..) == bipbop_300_215kbps.mp4.lastframe.html bipbop_300_215kbps.mp4.lastframe-ref.html -+skip-if(Android) fuzzy-if(OSX,0-25,0-175921) fuzzy-if(appleSilicon,49-49,176063-176063) fuzzy-if(winWidget,0-71,0-179198) fuzzy-if((/^Windows\x20NT\x2010\.0/.test(http.oscpu))&&(/^aarch64-msvc/.test(xulRuntime.XPCOMABI)),0-255,0-179500) HTTP(..) == gizmo.mp4.seek.html gizmo.mp4.55thframe-ref.html -+skip-if(Android) skip-if(MinGW) skip-if((/^Windows\x20NT\x2010\.0/.test(http.oscpu))&&(/^aarch64-msvc/.test(xulRuntime.XPCOMABI))) fuzzy(0-10,0-778236) == image-10bits-rendering-video.html image-10bits-rendering-ref.html -+skip-if(Android) skip-if(MinGW) skip-if((/^Windows\x20NT\x2010\.0/.test(http.oscpu))&&(/^aarch64-msvc/.test(xulRuntime.XPCOMABI))) fuzzy(0-10,0-778536) == image-10bits-rendering-90-video.html image-10bits-rendering-90-ref.html -+skip-if(Android) fuzzy(0-27,0-573106) fuzzy-if(appleSilicon,46-46,575885-575885) == image-10bits-rendering-720-video.html image-10bits-rendering-720-ref.html -+skip-if(Android) fuzzy(0-31,0-573249) == image-10bits-rendering-720-90-video.html image-10bits-rendering-720-90-ref.html -+skip-if(Android) skip-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fuzzy(0-84,0-771156) fails-if(useDrawSnapshot) == uneven_frame_duration_video.html uneven_frame_duration_video-ref.html # Skip on Windows 7 as the resolution of the video is too high for test machines and will fail in the decoder. -diff -U0 firefox-92.0/dom/media/webvtt/test/reftest/reftest.list.firefox-tests-reftest firefox-92.0/dom/media/webvtt/test/reftest/reftest.list ---- firefox-92.0/dom/media/webvtt/test/reftest/reftest.list.firefox-tests-reftest 2021-09-01 19:14:41.000000000 +0200 -+++ firefox-92.0/dom/media/webvtt/test/reftest/reftest.list 2021-09-03 18:50:43.693907440 +0200 -@@ -1,2 +0,0 @@ --skip-if(Android) fuzzy-if((/^Windows\x20NT\x2010\.0/.test(http.oscpu))&&(/^aarch64-msvc/.test(xulRuntime.XPCOMABI)),0-136,0-427680) == vtt_update_display_after_removed_cue.html vtt_update_display_after_removed_cue_ref.html --skip-if(Android) fuzzy-if(winWidget,0-170,0-170) == vtt_overlapping_time.html vtt_overlapping_time-ref.html -diff -U0 firefox-92.0/gfx/layers/apz/test/reftest/reftest.list.firefox-tests-reftest firefox-92.0/gfx/layers/apz/test/reftest/reftest.list ---- firefox-92.0/gfx/layers/apz/test/reftest/reftest.list.firefox-tests-reftest 2021-09-01 19:14:41.000000000 +0200 -+++ firefox-92.0/gfx/layers/apz/test/reftest/reftest.list 2021-09-03 18:50:43.693907440 +0200 -@@ -6,6 +5,0 @@ --fuzzy-if(Android&&!swgl,0-1,0-2) fuzzy-if(Android&&swgl,3-3,4-4) fuzzy-if(webrender&>kWidget,1-8,8-32) fuzzy-if(webrender&&cocoaWidget,18-22,20-44) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-v.html async-scrollbar-1-v-ref.html --fuzzy-if(Android&&!swgl,0-4,0-5) fuzzy-if(Android&&swgl,11-11,4-4) fuzzy-if(webrender&>kWidget,1-30,4-32) fuzzy-if(webrender&&cocoaWidget,18-22,20-44) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-h.html async-scrollbar-1-h-ref.html --fuzzy-if(Android&&!swgl,0-7,0-6) fuzzy-if(Android&&swgl,11-11,8-8) fuzzy-if(webrender&>kWidget,1-2,4-20) fuzzy-if(webrender&&cocoaWidget,14-18,48-88) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-vh.html async-scrollbar-1-vh-ref.html --fuzzy-if(Android&&!swgl,0-1,0-2) fuzzy-if(Android&&swgl,3-3,4-4) fuzzy-if(webrender&>kWidget,1-8,8-32) fuzzy-if(webrender&&cocoaWidget,18-22,20-44) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-v-rtl.html async-scrollbar-1-v-rtl-ref.html --fuzzy-if(Android,0-14,0-5) fuzzy-if(webrender&>kWidget,1-30,12-32) fuzzy-if(webrender&&cocoaWidget,18-22,20-44) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-h-rtl.html async-scrollbar-1-h-rtl-ref.html --fuzzy-if(Android,0-8,0-8) fuzzy-if(webrender&>kWidget,8-14,12-32) fuzzy-if(webrender&&cocoaWidget,14-18,26-54) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-vh-rtl.html async-scrollbar-1-vh-rtl-ref.html -@@ -21 +15 @@ --# On desktop, even more fuzz is needed because thumb scaling is not exactly proportional: making the page twice as long -+# On desktop, even more fuzz is needed because thumb scaling is not exactly proportional: making the page twice as long -diff -U0 firefox-92.0/image/test/reftest/downscaling/reftest.list.firefox-tests-reftest firefox-92.0/image/test/reftest/downscaling/reftest.list ---- firefox-92.0/image/test/reftest/downscaling/reftest.list.firefox-tests-reftest 2021-09-01 19:14:47.000000000 +0200 -+++ firefox-92.0/image/test/reftest/downscaling/reftest.list 2021-09-03 18:50:44.863939657 +0200 -@@ -91,0 +92,4 @@ -+fuzzy(0-17,0-3940) fuzzy-if(gtkWidget&&!webrender,4-4,2616-2616) fuzzy-if(gtkWidget&&!webrender&&!layersGPUAccelerated,0-0,0-0) fuzzy-if(gtkWidget&&webrender,0-0,0-0) skip-if(Android) == downscale-moz-icon-1.html downscale-moz-icon-1-ref.html # gtkWidget Bug 1592059: regular is 2616, no-accel is 0, qr passes with 0 -+ -+# Skip on Android because it runs reftests via http, and moz-icon isn't -+# accessible from http/https origins anymore. -@@ -172,0 +177,5 @@ -+ -+# Skip on WinXP with skia content -+# Skip on Android because it runs reftests via http, and moz-icon isn't -+# accessible from http/https origins anymore. -+fuzzy(0-53,0-6391) fuzzy-if(appleSilicon,20-20,11605-11605) fuzzy-if(gtkWidget&&webrender,18-19,5502-5568) fails-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) skip-if(Android) == downscale-moz-icon-1.html downscale-moz-icon-1-ref.html # gtkWidget Bug 1592059 -diff -U0 firefox-92.0/layout/reftests/abs-pos/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/abs-pos/reftest.list ---- firefox-92.0/layout/reftests/abs-pos/reftest.list.firefox-tests-reftest 2021-09-01 19:15:00.000000000 +0200 -+++ firefox-92.0/layout/reftests/abs-pos/reftest.list 2021-09-03 18:50:44.863939657 +0200 -@@ -54 +54 @@ --fuzzy-if(gtkWidget,0-1,0-1) fuzzy-if(Android,0-9,0-185) fuzzy-if(asyncPan&&!layersGPUAccelerated,0-140,0-144) == scrollframe-2.html scrollframe-2-ref.html #bug 756530 -+fuzzy-if(gtkWidget,0-100,0-160) fuzzy-if(Android,0-9,0-185) == scrollframe-2.html scrollframe-2-ref.html #bug 756530 -diff -U0 firefox-92.0/layout/reftests/async-scrolling/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/async-scrolling/reftest.list ---- firefox-92.0/layout/reftests/async-scrolling/reftest.list.firefox-tests-reftest 2021-09-01 19:15:01.000000000 +0200 -+++ firefox-92.0/layout/reftests/async-scrolling/reftest.list 2021-09-03 18:50:44.863939657 +0200 -@@ -27 +27 @@ --fuzzy-if(Android,0-8,0-4) fuzzy-if(webrender&>kWidget,20-33,14-32) fuzzy-if(webrender&&cocoaWidget,9-21,20-44) skip-if(!asyncPan) == position-fixed-transformed-1.html position-fixed-transformed-1-ref.html # Bug 1604338 -+fuzzy-if(Android,0-8,0-4) fuzzy-if(webrender&>kWidget,30-50,30-50) fuzzy-if(webrender&&cocoaWidget,21-21,44-44) skip-if(!asyncPan) == position-fixed-transformed-1.html position-fixed-transformed-1-ref.html # Bug 1604338 -@@ -52,2 +51,0 @@ --fuzzy-if(Android,0-6,0-4) fuzzy-if(skiaContent&&!Android,0-1,0-34) fuzzy-if(webrender&>kWidget,22-74,20-32) fuzzy-if(webrender&&cocoaWidget,6-7,18-39) fuzzy-if(swgl&&cocoaWidget&&isDebugBuild,0-7,0-39) skip-if(!asyncPan) == offscreen-clipped-blendmode-1.html offscreen-clipped-blendmode-ref.html # Bug 1604338 --fuzzy-if(Android,0-6,0-4) fuzzy-if(webrender&>kWidget,22-74,20-32) fuzzy-if(webrender&&cocoaWidget,6-7,18-39) fuzzy-if(swgl&&cocoaWidget&&isDebugBuild,0-7,0-39) skip-if(!asyncPan) == offscreen-clipped-blendmode-2.html offscreen-clipped-blendmode-ref.html # Bug 1604338 -@@ -55,2 +52,0 @@ --fuzzy-if(Android,0-6,0-4) fuzzy-if(webrender&>kWidget,22-74,20-32) fuzzy-if(webrender&&cocoaWidget,6-7,18-39) fuzzy-if(swgl&&cocoaWidget&&isDebugBuild,0-7,0-39) skip-if(!asyncPan) == offscreen-clipped-blendmode-4.html offscreen-clipped-blendmode-ref.html # Bug 1604338 --fuzzy-if(Android,0-7,0-1680) fuzzy-if(webrender&>kWidget,1-1,2-20) fuzzy-if(webrender&&cocoaWidget,1-2,10-18) fuzzy-if(swgl&&cocoaWidget&&isDebugBuild,0-2,0-18) skip-if(!asyncPan) == perspective-scrolling-1.html perspective-scrolling-1-ref.html # Bug 1604338 -@@ -58,2 +54,2 @@ --fuzzy-if(Android,0-19,0-4) fuzzy-if(webrender&>kWidget,8-13,12-32) fuzzy-if(webrender&&cocoaWidget,10-13,20-44) skip-if(!asyncPan) == perspective-scrolling-3.html perspective-scrolling-3-ref.html # Bug 1604338 --fuzzy-if(Android,0-7,0-4) fuzzy-if(webrender&>kWidget,18-30,14-32) fuzzy-if(webrender&&cocoaWidget,16-20,20-44) skip-if(!asyncPan) == perspective-scrolling-4.html perspective-scrolling-4-ref.html # Bug 1604338 -+fuzzy-if(Android,0-19,0-4) fuzzy-if(webrender&>kWidget,0-50,0-50) fuzzy-if(webrender&&cocoaWidget,13-13,44-44) skip-if(!asyncPan) == perspective-scrolling-3.html perspective-scrolling-3-ref.html # Bug 1604338 -+fuzzy-if(Android,0-7,0-4) fuzzy-if(webrender&>kWidget,0-50,0-50) fuzzy-if(webrender&&cocoaWidget,19-20,44-44) skip-if(!asyncPan) == perspective-scrolling-4.html perspective-scrolling-4-ref.html # Bug 1604338 -@@ -65,4 +60,0 @@ --fuzzy-if(Android,0-19,0-4) fuzzy-if(webrender&>kWidget,12-19,12-32) fuzzy-if(webrender&&cocoaWidget,17-21,20-44) skip-if(!asyncPan) == fixed-pos-scrolled-clip-1.html fixed-pos-scrolled-clip-1-ref.html # Bug 1604338 --fuzzy-if(Android,0-44,0-10) fuzzy-if(Android&&webrender&&swgl,0-44,0-126) fuzzy-if(webrender&>kWidget,16-26,26-64) fuzzy-if(webrender&&cocoaWidget,10-13,38-82) fuzzy-if(winWidget&&!nativeThemePref,0-4,0-36) skip-if(!asyncPan) == fixed-pos-scrolled-clip-2.html fixed-pos-scrolled-clip-2-ref.html # Bug 1604338 --fuzzy-if(Android,0-6,0-8) fuzzy-if(webrender&>kWidget,17-28,24-60) fuzzy-if(webrender&&cocoaWidget,15-19,40-75) skip-if(!asyncPan) == fixed-pos-scrolled-clip-3.html fixed-pos-scrolled-clip-3-ref.html # Bug 1604338 --fuzzy-if(Android,0-6,0-8) fuzzy-if(webrender&>kWidget,17-29,24-60) fuzzy-if(webrender&&cocoaWidget,15-19,40-75) skip-if(!asyncPan) == fixed-pos-scrolled-clip-4.html fixed-pos-scrolled-clip-4-ref.html # Bug 1604338 -@@ -71 +63 @@ --fuzzy-if(Android,0-8,0-4) fuzzy-if(webrender&>kWidget,16-25,12-32) fuzzy-if(webrender&&cocoaWidget,13-16,20-44) skip-if(!asyncPan) == position-sticky-scrolled-clip-1.html position-sticky-scrolled-clip-1-ref.html # Bug 1604338 -+fuzzy-if(Android,0-8,0-4) fuzzy-if(webrender&>kWidget,22-30,28-50) fuzzy-if(webrender&&cocoaWidget,16-16,44-44) skip-if(!asyncPan) == position-sticky-scrolled-clip-1.html position-sticky-scrolled-clip-1-ref.html # Bug 1604338 -@@ -73,6 +64,0 @@ --fuzzy-if(Android,0-8,0-27) fuzzy-if(webrender&&cocoaWidget,9-11,20-44) skip-if(!asyncPan) == curtain-effect-1.html curtain-effect-1-ref.html --fuzzy-if(Android,0-7,0-4) fuzzy-if(webrender&>kWidget,10-15,12-32) fuzzy-if(webrender&&cocoaWidget,5-9,20-42) skip-if(!asyncPan) == transformed-1.html transformed-1-ref.html # Bug 1604338 --fuzzy-if(Android&&!webrender,2-6,4-4) fuzzy-if(Android&&webrender,6-7,4-4) fuzzy-if(webrender&>kWidget,3-5,12-28) fuzzy-if(webrender&&cocoaWidget,5-6,18-38) skip-if(!asyncPan) fuzzy-if(swgl&&cocoaWidget&&isDebugBuild,0-6,0-38) == position-sticky-transformed-in-scrollframe-1.html position-sticky-transformed-in-scrollframe-1-ref.html # Bug 1604338 --fuzzy-if(Android&&!webrender,3-3,4-4) fuzzy-if(Android&&webrender,10-10,4-449) fuzzy-if(webrender&>kWidget,13-20,12-32) fuzzy-if(webrender&&cocoaWidget,12-16,20-44) skip-if(!asyncPan) == position-sticky-transformed-in-scrollframe-2.html position-sticky-transformed-in-scrollframe-2-ref.html # Bug 1604338 --fuzzy-if(Android&&!webrender,3-3,4-4) fuzzy-if(Android&&webrender,12-13,4-24) fuzzy-if(webrender&>kWidget,16-27,14-32) fuzzy-if(webrender&&cocoaWidget,13-16,20-44) skip-if(!asyncPan) == position-sticky-in-transformed-scrollframe-1.html position-sticky-in-transformed-scrollframe-ref.html # Bug 1604338 --fuzzy-if(Android&&!webrender,3-3,4-4) fuzzy-if(Android&&webrender,12-13,4-24) fuzzy-if(webrender&>kWidget,16-27,14-32) fuzzy-if(webrender&&cocoaWidget,13-16,20-44) skip-if(!asyncPan) == position-sticky-in-transformed-scrollframe-2.html position-sticky-in-transformed-scrollframe-ref.html # Bug 1604338 -diff -U0 firefox-92.0/layout/reftests/bidi/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/bidi/reftest.list ---- firefox-92.0/layout/reftests/bidi/reftest.list.firefox-tests-reftest 2021-09-01 19:15:00.000000000 +0200 -+++ firefox-92.0/layout/reftests/bidi/reftest.list 2021-09-03 18:50:44.863939657 +0200 -@@ -3 +3 @@ --fuzzy-if(cocoaWidget,0-1,0-1) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == bdi-element.html bdi-element-ref.html # Bug 1392106 -+fuzzy(0-1,0-1) fuzzy-if(cocoaWidget,0-1,0-1) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == bdi-element.html bdi-element-ref.html # Bug 1392106 -@@ -33,2 +33,2 @@ --fuzzy-if(Android,0-1,0-6) fuzzy-if(cocoaWidget,0-1,0-2) == mixedChartype-02.html mixedChartype-02-ref.html --fuzzy-if(Android,0-1,0-6) fuzzy-if(cocoaWidget,0-1,0-2) == mixedChartype-02-j.html mixedChartype-02-ref.html -+fuzzy-if(gtkWidget,0-1,0-3) fuzzy-if(Android,0-1,0-6) fuzzy-if(cocoaWidget,0-1,0-2) == mixedChartype-02.html mixedChartype-02-ref.html -+fuzzy-if(gtkWidget,0-1,0-3) fuzzy-if(Android,0-1,0-6) fuzzy-if(cocoaWidget,0-1,0-2) == mixedChartype-02-j.html mixedChartype-02-ref.html -@@ -163,8 +163,8 @@ --fuzzy-if(cocoaWidget,0-1,0-4) fuzzy-if(Android,0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2a-ltr.html brackets-2a-ltr-ref.html # Bug 1392106 --fuzzy-if(cocoaWidget,0-1,0-2) fuzzy-if(Android,0-254,0-557) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2a-rtl.html brackets-2a-rtl-ref.html # Bug 1392106 --fuzzy-if(cocoaWidget,0-1,0-6) fuzzy-if(Android,0-1,0-8) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2b-ltr.html brackets-2b-ltr-ref.html # Bug 1392106 --fuzzy-if(cocoaWidget,0-1,0-7) fuzzy-if(Android,0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2b-rtl.html brackets-2b-rtl-ref.html # Bug 1392106 --fuzzy-if(cocoaWidget,0-1,0-7) fuzzy-if(Android,0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2c-ltr.html brackets-2c-ltr-ref.html # Bug 1392106 --fuzzy-if(cocoaWidget,0-1,0-6) fuzzy-if(Android,0-254,0-231) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2c-rtl.html brackets-2c-rtl-ref.html # Bug 1392106 --fuzzy-if(cocoaWidget,0-1,0-6) fuzzy-if(Android,0-1,0-8) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-3a-ltr.html brackets-3a-ltr-ref.html # Bug 1392106 --fuzzy-if(cocoaWidget,0-1,0-3) fuzzy-if(Android,0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-3a-rtl.html brackets-3a-rtl-ref.html # Bug 1392106 -+fuzzy(0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2a-ltr.html brackets-2a-ltr-ref.html # Bug 1392106 -+fuzzy(0-64,0-140) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2a-rtl.html brackets-2a-rtl-ref.html # Bug 1392106 -+fuzzy(0-1,0-8) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2b-ltr.html brackets-2b-ltr-ref.html # Bug 1392106 -+fuzzy(0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2b-rtl.html brackets-2b-rtl-ref.html # Bug 1392106 -+fuzzy(0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2c-ltr.html brackets-2c-ltr-ref.html # Bug 1392106 -+fuzzy(0-254,0-231) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2c-rtl.html brackets-2c-rtl-ref.html # Bug 1392106 -+fuzzy(0-1,0-8) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-3a-ltr.html brackets-3a-ltr-ref.html # Bug 1392106 -+fuzzy(0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-3a-rtl.html brackets-3a-rtl-ref.html # Bug 1392106 -diff -U0 firefox-92.0/layout/reftests/border-radius/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/border-radius/reftest.list ---- firefox-92.0/layout/reftests/border-radius/reftest.list.firefox-tests-reftest 2021-09-01 19:15:01.000000000 +0200 -+++ firefox-92.0/layout/reftests/border-radius/reftest.list 2021-09-03 18:50:44.863939657 +0200 -@@ -54 +54 @@ --fuzzy-if(Android,0-8,0-469) fuzzy-if(skiaContent,0-21,0-76) fuzzy-if(winWidget,0-144,0-335) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == clipping-6.html clipping-6-ref.html # PaintedLayer and MaskLayer with transforms that aren't identical, bug 1392106 -+fuzzy-if(gtkWidget,0-80,0-300) fuzzy-if(Android,0-8,0-469) fuzzy-if(winWidget,0-144,0-335) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == clipping-6.html clipping-6-ref.html # PaintedLayer and MaskLayer with transforms that aren't identical, bug 1392106 -diff -U0 firefox-92.0/layout/reftests/bugs/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/bugs/reftest.list ---- firefox-92.0/layout/reftests/bugs/reftest.list.firefox-tests-reftest 2021-09-01 19:15:00.000000000 +0200 -+++ firefox-92.0/layout/reftests/bugs/reftest.list 2021-09-03 18:50:44.864939685 +0200 -@@ -464 +463,0 @@ --== 341043-1a.html 341043-1-ref.html -@@ -553 +552 @@ --== 363706-1.html 363706-1-ref.html -+fuzzy-if(gtkWidget,255-255,0-100) == 363706-1.html 363706-1-ref.html -@@ -672 +671 @@ --== 376532-1.html 376532-1-ref.html -+fuzzy-if(gtkWidget,0-150,0-50) == 376532-1.html 376532-1-ref.html -@@ -763 +762 @@ --== 389074-1.html 389074-1-ref.html -+fuzzy-if(gtkWidget,0-150,0-80) == 389074-1.html 389074-1-ref.html -@@ -926 +925 @@ --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == 411059-1.html 411059-1-ref.html # Bug 1392106 -+fuzzy-if(gtkWidget,0-255,0-6312) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == 411059-1.html 411059-1-ref.html # Bug 1392106 -@@ -1000 +999 @@ --== 422394-1.html 422394-1-ref.html -+fuzzy-if(gtkWidget,0-255,0-640) == 422394-1.html 422394-1-ref.html -@@ -1172 +1171 @@ --fails-if(Android||cocoaWidget||winWidget) == chrome://reftest/content/bugs/456147.xhtml 456147-ref.html # bug 458047 -+fuzzy-if(gtkWidget,0-255,0-5167) fails-if(Android||cocoaWidget||winWidget) == chrome://reftest/content/bugs/456147.xhtml 456147-ref.html # bug 458047 -@@ -1820 +1819 @@ --== 1062108-1.html 1062108-1-ref.html -+fuzzy-if(gtkWidget,0-255,0-53) == 1062108-1.html 1062108-1-ref.html -@@ -2022 +2020,0 @@ --!= 1404057.html 1404057-noref.html -@@ -2062,2 +2059,0 @@ --fuzzy-if(!webrender,1-5,66-547) fuzzy-if(geckoview&&!webrender,1-2,64-141) fuzzy-if(winWidget&&swgl,1-1,12-16) fuzzy-if(cocoaWidget&&swgl,1-1,32-32) fuzzy-if(useDrawSnapshot&&webrender,3-3,459-459) == 1529992-1.html 1529992-1-ref.html --fuzzy-if(!webrender,0-6,0-34) fuzzy-if(Android,9-14,44-60) fails-if(!useDrawSnapshot&&webrender) == 1529992-2.html 1529992-2-ref.html -@@ -2066 +2062 @@ --skip-if(!asyncPan) == 1544895.html 1544895-ref.html -+fuzzy-if(gtkWidget,0-252,0-24) skip-if(!asyncPan) == 1544895.html 1544895-ref.html -@@ -2079 +2075 @@ --fuzzy-if(winWidget&&webrender,0-31,0-3) fuzzy-if(geckoview&&webrender,0-93,0-87) == 1562733-rotated-nastaliq-2.html 1562733-rotated-nastaliq-2-ref.html -+fuzzy(0-30,0-2) fuzzy-if(winWidget&&webrender,0-31,0-3) fuzzy-if(geckoview&&webrender,0-93,0-87) == 1562733-rotated-nastaliq-2.html 1562733-rotated-nastaliq-2-ref.html -diff -U0 firefox-92.0/layout/reftests/canvas/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/canvas/reftest.list ---- firefox-92.0/layout/reftests/canvas/reftest.list.firefox-tests-reftest 2021-09-01 19:15:00.000000000 +0200 -+++ firefox-92.0/layout/reftests/canvas/reftest.list 2021-09-03 18:50:44.864939685 +0200 -@@ -51,2 +50,0 @@ --!= text-font-lang.html text-font-lang-notref.html -- -@@ -54 +52 @@ --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == text-small-caps-1.html text-small-caps-1-ref.html # Bug 1392106 -+fuzzy-if(gtkWidget,0-255,0-2304) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == text-small-caps-1.html text-small-caps-1-ref.html # Bug 1392106 -diff -U0 firefox-92.0/layout/reftests/css-break/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/css-break/reftest.list ---- firefox-92.0/layout/reftests/css-break/reftest.list.firefox-tests-reftest 2021-09-03 18:50:44.864939685 +0200 -+++ firefox-92.0/layout/reftests/css-break/reftest.list 2021-09-03 18:51:55.862894766 +0200 -@@ -1,3 +0,0 @@ --== box-decoration-break-1.html box-decoration-break-1-ref.html --fuzzy(0-1,0-20) fuzzy-if(skiaContent,0-1,0-700) == box-decoration-break-with-inset-box-shadow-1.html box-decoration-break-with-inset-box-shadow-1-ref.html --fuzzy(0-45,0-460) fuzzy-if(skiaContent,0-64,0-484) fuzzy-if(Android,0-70,0-1330) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == box-decoration-break-with-outset-box-shadow-1.html box-decoration-break-with-outset-box-shadow-1-ref.html # Bug 1386543, bug 1392106 -diff -U0 firefox-92.0/layout/reftests/css-placeholder/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/css-placeholder/reftest.list ---- firefox-92.0/layout/reftests/css-placeholder/reftest.list.firefox-tests-reftest 2021-09-01 19:15:00.000000000 +0200 -+++ firefox-92.0/layout/reftests/css-placeholder/reftest.list 2021-09-03 18:50:44.864939685 +0200 -@@ -5 +5 @@ --fuzzy-if(gtkWidget&&nativeThemePref,255-255,1376-1881) == css-simple-styling.html css-simple-styling-ref.html # gtkWidget, Bug 1600749 -+fuzzy-if(gtkWidget&&nativeThemePref,255-255,1300-1881) == css-simple-styling.html css-simple-styling-ref.html # gtkWidget, Bug 1600749 -diff -U0 firefox-92.0/layout/reftests/css-ruby/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/css-ruby/reftest.list ---- firefox-92.0/layout/reftests/css-ruby/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/css-ruby/reftest.list 2021-09-03 18:50:44.865939713 +0200 -@@ -17,4 +17,4 @@ --== relative-positioning-2.html relative-positioning-2-ref.html --== ruby-position-horizontal.html ruby-position-horizontal-ref.html --== ruby-position-vertical-lr.html ruby-position-vertical-lr-ref.html --== ruby-position-vertical-rl.html ruby-position-vertical-rl-ref.html -+fuzzy-if(gtkWidget,0-255,0-669) == relative-positioning-2.html relative-positioning-2-ref.html -+fuzzy-if(gtkWidget,0-255,0-947) == ruby-position-horizontal.html ruby-position-horizontal-ref.html -+fuzzy-if(gtkWidget,0-255,0-1079) == ruby-position-vertical-lr.html ruby-position-vertical-lr-ref.html -+fuzzy-if(gtkWidget,0-255,0-1079) == ruby-position-vertical-rl.html ruby-position-vertical-rl-ref.html -@@ -26 +26 @@ --pref(layout.css.ruby.intercharacter.enabled,true) fuzzy-if(Android,0-198,0-70) == ruby-intercharacter-1.htm ruby-intercharacter-1-ref.htm -+fuzzy-if(gtkWidget,0-240,0-61) pref(layout.css.ruby.intercharacter.enabled,true) fuzzy-if(Android,0-198,0-70) == ruby-intercharacter-1.htm ruby-intercharacter-1-ref.htm -@@ -28 +28 @@ --pref(layout.css.ruby.intercharacter.enabled,true) == ruby-intercharacter-2.htm ruby-intercharacter-2-ref.htm -+fuzzy-if(gtkWidget,0-255,0-219) pref(layout.css.ruby.intercharacter.enabled,true) == ruby-intercharacter-2.htm ruby-intercharacter-2-ref.htm -diff -U0 firefox-92.0/layout/reftests/first-letter/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/first-letter/reftest.list ---- firefox-92.0/layout/reftests/first-letter/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/first-letter/reftest.list 2021-09-03 18:50:44.865939713 +0200 -@@ -64 +64 @@ --fails-if(winWidget||cocoaWidget) fails-if(geckoview) == 617869-1.html 617869-1-ref.html # Bug 1558513 for GV -+fuzzy-if(gtkWidget,0-260,0-900) fails-if(winWidget||cocoaWidget) fails-if(geckoview) == 617869-1.html 617869-1-ref.html # Bug 1558513 for GV -diff -U0 firefox-92.0/layout/reftests/font-face/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/font-face/reftest.list ---- firefox-92.0/layout/reftests/font-face/reftest.list.firefox-tests-reftest 2021-09-01 19:15:01.000000000 +0200 -+++ firefox-92.0/layout/reftests/font-face/reftest.list 2021-09-03 18:50:44.865939713 +0200 -@@ -9 +9 @@ --== name-override-simple-1.html name-override-simple-1-ref.html -+fuzzy-if(gtkWidget,0-112,0-107) == name-override-simple-1.html name-override-simple-1-ref.html -@@ -26,3 +26,2 @@ --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(Android) == src-list-local-full.html src-list-local-full-ref.html # Bug 1392106 --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(Android) == src-list-local-full-quotes.html src-list-local-full-ref.html # Bug 1392106 --== src-list-local-fallback.html src-list-local-fallback-ref.html -+fuzzy(0-255,0-6200) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(Android) == src-list-local-full.html src-list-local-full-ref.html # Bug 1392106 -+fuzzy(0-255,0-6200) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(Android) == src-list-local-full-quotes.html src-list-local-full-ref.html # Bug 1392106 -@@ -57 +56 @@ --== cross-iframe-1.html cross-iframe-1-ref.html -+fuzzy-if(gtkWidget,0-112,0-107) == cross-iframe-1.html cross-iframe-1-ref.html -@@ -81 +80 @@ --== sheet-set-switch-1.html sheet-set-switch-1-ref.html -+fuzzy-if(gtkWidget,0-112,0-108) random-if(cocoaWidget) == sheet-set-switch-1.html sheet-set-switch-1-ref.html # bug 468217 -@@ -93 +92 @@ --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == local-1.html local-1-ref.html # Bug 1392106 -+fuzzy-if(gtkWidget,0-255,0-7000) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == local-1.html local-1-ref.html # Bug 1392106 -@@ -171,2 +170,2 @@ --HTTP(..) == reflow-sanity-1.html reflow-sanity-1-ref.html --HTTP(..) == reflow-sanity-1-data.html reflow-sanity-1-ref.html -+fuzzy-if(gtkWidget,0-104,0-406) HTTP(..) == reflow-sanity-1.html reflow-sanity-1-ref.html -+fuzzy-if(gtkWidget,0-104,0-406) HTTP(..) == reflow-sanity-1-data.html reflow-sanity-1-ref.html -@@ -174,4 +173,4 @@ --HTTP(..) == reflow-sanity-delay-1a.html reflow-sanity-1-ref.html --HTTP(..) == reflow-sanity-delay-1b.html reflow-sanity-1-ref.html --HTTP(..) == reflow-sanity-delay-1c.html reflow-sanity-1-ref.html --HTTP(..) == reflow-sanity-delay-1-metrics.html reflow-sanity-1-ref.html -+fuzzy-if(gtkWidget,0-104,0-406) HTTP(..) == reflow-sanity-delay-1a.html reflow-sanity-1-ref.html -+fuzzy-if(gtkWidget,0-104,0-406) HTTP(..) == reflow-sanity-delay-1b.html reflow-sanity-1-ref.html -+fuzzy-if(gtkWidget,0-104,0-406) HTTP(..) == reflow-sanity-delay-1c.html reflow-sanity-1-ref.html -+fuzzy-if(gtkWidget,0-104,0-406) HTTP(..) == reflow-sanity-delay-1-metrics.html reflow-sanity-1-ref.html -@@ -204 +203 @@ --# Currently Windows 7 and macOS all fail on -+# Currently Windows 7 and macOS all fail on -diff -U0 firefox-92.0/layout/reftests/font-matching/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/font-matching/reftest.list ---- firefox-92.0/layout/reftests/font-matching/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/font-matching/reftest.list 2021-09-03 18:50:44.865939713 +0200 -@@ -124 +124 @@ --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == italic-oblique-2.html italic-oblique-ref.html # Bug 1392106 -+fuzzy-if(gtkWidget,0-104,0-1836) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == italic-oblique-2.html italic-oblique-ref.html # Bug 1392106 -@@ -128 +128 @@ --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == italic-oblique-6.html italic-oblique-ref.html # Bug 1392106 -+fuzzy-if(gtkWidget,0-104,0-1836) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == italic-oblique-6.html italic-oblique-ref.html # Bug 1392106 -@@ -130,2 +130,2 @@ --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == italic-oblique-8.html italic-oblique-ref.html # Bug 1392106 --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == italic-oblique-9.html italic-oblique-ref.html # Bug 1392106 -+fuzzy-if(gtkWidget,0-104,0-1836) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == italic-oblique-8.html italic-oblique-ref.html # Bug 1392106 -+fuzzy-if(gtkWidget,0-104,0-1836) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == italic-oblique-9.html italic-oblique-ref.html # Bug 1392106 -diff -U0 firefox-92.0/layout/reftests/forms/fieldset/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/forms/fieldset/reftest.list ---- firefox-92.0/layout/reftests/forms/fieldset/reftest.list.firefox-tests-reftest 2021-09-01 19:15:01.000000000 +0200 -+++ firefox-92.0/layout/reftests/forms/fieldset/reftest.list 2021-09-03 18:50:44.865939713 +0200 -@@ -8 +7,0 @@ --fuzzy-if(!layersGPUAccelerated,0-142,0-276) == positioned-container-1.html positioned-container-1-ref.html -diff -U0 firefox-92.0/layout/reftests/forms/input/checkbox/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/forms/input/checkbox/reftest.list ---- firefox-92.0/layout/reftests/forms/input/checkbox/reftest.list.firefox-tests-reftest 2021-09-01 19:15:01.000000000 +0200 -+++ firefox-92.0/layout/reftests/forms/input/checkbox/reftest.list 2021-09-03 18:50:44.865939713 +0200 -@@ -18 +18 @@ --skip-if((OSX||winWidget)&&nativeThemePref) fuzzy-if(gtkWidget&&nativeThemePref,25-25,32-32) fails-if(Android&&nativeThemePref) == checkbox-clamp-02.html checkbox-clamp-02-ref.html -+skip-if(OSX||winWidget) fails-if(geckoview&&webrender) fuzzy-if(gtkWidget&&nativeThemePref,12-25,25-32) fails-if(Android) == checkbox-clamp-02.html checkbox-clamp-02-ref.html -diff -U0 firefox-92.0/layout/reftests/forms/input/radio/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/forms/input/radio/reftest.list ---- firefox-92.0/layout/reftests/forms/input/radio/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/forms/input/radio/reftest.list 2021-09-03 18:50:44.865939713 +0200 -@@ -9 +9 @@ --skip-if(OSX||winWidget||Android) fuzzy-if(gtkWidget&&nativeThemePref,24-24,16-16) == radio-clamp-02.html radio-clamp-02-ref.html # gtkWidget, Bug 1599622 -+skip-if(OSX||winWidget||Android) fuzzy-if(gtkWidget&&nativeThemePref,10-24,16-16) == radio-clamp-02.html radio-clamp-02-ref.html # gtkWidget, Bug 1599622 -diff -U0 firefox-92.0/layout/reftests/forms/placeholder/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/forms/placeholder/reftest.list ---- firefox-92.0/layout/reftests/forms/placeholder/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/forms/placeholder/reftest.list 2021-09-03 18:50:44.866939741 +0200 -@@ -21 +21 @@ --fuzzy-if(winWidget,0-160,0-10) fuzzy-if(Android,0-160,0-41) fuzzy-if(asyncPan&&!layersGPUAccelerated,0-146,0-317) fuzzy-if(OSX==1010&&browserIsRemote,0-1,0-8) == placeholder-6.html placeholder-overflow-ref.html -+fuzzy-if(gtkWidget,0-255,0-341) fuzzy-if(winWidget,0-160,0-10) fuzzy-if(Android,0-160,0-41) fuzzy-if(OSX==1010&&browserIsRemote,0-1,0-8) == placeholder-6.html placeholder-overflow-ref.html -diff -U0 firefox-92.0/layout/reftests/forms/textbox/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/forms/textbox/reftest.list ---- firefox-92.0/layout/reftests/forms/textbox/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/forms/textbox/reftest.list 2021-09-03 18:50:44.866939741 +0200 -@@ -4 +3,0 @@ --fuzzy-if(winWidget,0-1,0-3) skip-if(cocoaWidget||Android) fails-if(!useDrawSnapshot&&webrender) == chrome://reftest/content/forms/textbox/accesskey-2.xhtml chrome://reftest/content/forms/textbox/accesskey-2-ref.xhtml -@@ -8 +6,0 @@ --fuzzy-if(winWidget,0-1,0-3) skip-if(cocoaWidget||Android) fails-if(!useDrawSnapshot&&webrender&&!Android) == chrome://reftest/content/forms/textbox/accesskey-4.xhtml chrome://reftest/content/forms/textbox/accesskey-4-ref.xhtml -diff -U0 firefox-92.0/layout/reftests/generated-content/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/generated-content/reftest.list ---- firefox-92.0/layout/reftests/generated-content/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/generated-content/reftest.list 2021-09-03 18:50:44.866939741 +0200 -@@ -16 +16 @@ --fuzzy-if(OSX==1010,0-1,0-10) == quotes-001.xml quotes-001-ref.xml -+fuzzy(0-128,0-737) fuzzy-if(OSX==1010,0-1,0-10) == quotes-001.xml quotes-001-ref.xml -diff -U0 firefox-92.0/layout/reftests/high-contrast/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/high-contrast/reftest.list ---- firefox-92.0/layout/reftests/high-contrast/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/high-contrast/reftest.list 2021-09-03 18:50:44.866939741 +0200 -@@ -22 +22 @@ --fuzzy-if(cocoaWidget,255-255,1495-1495) fuzzy-if(winWidget,255-255,353-353) fuzzy-if(Android,255-255,700-700) == backplate-bg-image-010.html backplate-bg-image-010-ref.html -+fuzzy-if(gtkWidget,0-255,0-1495) fuzzy-if(cocoaWidget,255-255,1495-1495) fuzzy-if(winWidget,255-255,353-353) fuzzy-if(Android,255-255,700-700) == backplate-bg-image-010.html backplate-bg-image-010-ref.html -diff -U0 firefox-92.0/layout/reftests/indic-shaping/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/indic-shaping/reftest.list ---- firefox-92.0/layout/reftests/indic-shaping/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/indic-shaping/reftest.list 2021-09-03 18:50:44.866939741 +0200 -@@ -12 +11,0 @@ --fuzzy-if(gtkWidget,255-255,46-46) == gujarati-3b.html gujarati-3-ref.html # gtkWidget, Bug 1600777 -diff -U0 firefox-92.0/layout/reftests/mathml/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/mathml/reftest.list ---- firefox-92.0/layout/reftests/mathml/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/mathml/reftest.list 2021-09-03 18:50:44.866939741 +0200 -@@ -26 +26 @@ --random-if(smallScreen&&Android) fuzzy(0-255,0-200) fuzzy-if(geckoview&&webrender,201-216,200-250) fuzzy-if(webrender&&winWidget,114-255,245-361) fuzzy-if(webrender&&OSX,79-153,240-250) == mirror-op-1.html mirror-op-1-ref.html -+random-if(smallScreen&&Android) fuzzy(0-255,0-350) fuzzy-if(geckoview&&webrender,201-216,312-316) fuzzy-if(webrender&&winWidget,114-255,245-361) fuzzy-if(webrender&&OSX,79-153,307-314) == mirror-op-1.html mirror-op-1-ref.html -@@ -66 +66 @@ --== stretchy-largeop-2.html stretchy-largeop-2-ref.html -+fuzzy-if(gtkWidget,0-255,0-126) == stretchy-largeop-2.html stretchy-largeop-2-ref.html -@@ -177 +176,0 @@ --fuzzy-if(skiaContent,0-1,0-80) fuzzy-if(Android,0-255,0-105) fuzzy-if(gtkWidget,255-255,96-96) skip-if(winWidget) == multiscripts-1.html multiscripts-1-ref.html # Windows: bug 1314684; Android: bug 1392254; Linux: bug 1599638 -@@ -256 +254,0 @@ --fails-if(winWidget) fuzzy-if(gtkWidget,255-255,776226-776226) == subscript-italic-correction.html subscript-italic-correction-ref.html # bug 961482 (Windows), bug 1599640 (Linux) -diff -U0 firefox-92.0/layout/reftests/position-dynamic-changes/relative/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/position-dynamic-changes/relative/reftest.list ---- firefox-92.0/layout/reftests/position-dynamic-changes/relative/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/position-dynamic-changes/relative/reftest.list 2021-09-03 18:50:44.866939741 +0200 -@@ -1,4 +1,4 @@ --fuzzy-if(cocoaWidget,0-1,0-2) fuzzy-if(d2d,0-47,0-26) fuzzy-if(asyncPan&&!layersGPUAccelerated,0-169,0-970) == move-right-bottom.html move-right-bottom-ref.html --fuzzy-if(cocoaWidget,0-1,0-2) fuzzy-if(asyncPan&&!layersGPUAccelerated,0-169,0-970) == move-top-left.html move-top-left-ref.html # Bug 688545 --fuzzy-if(cocoaWidget,0-1,0-3) fuzzy-if(asyncPan&&!layersGPUAccelerated,0-144,0-580) == move-right-bottom-table.html move-right-bottom-table-ref.html --fuzzy-if(cocoaWidget,0-1,0-3) fuzzy-if(asyncPan&&!layersGPUAccelerated,0-144,0-580) == move-top-left-table.html move-top-left-table-ref.html # Bug 688545 -+fuzzy-if(gtkWidget,0-99,0-1255) fuzzy-if(cocoaWidget,0-1,0-2) == move-right-bottom.html move-right-bottom-ref.html -+fuzzy-if(gtkWidget,0-99,0-1254) fuzzy-if(cocoaWidget,0-1,0-2) == move-top-left.html move-top-left-ref.html # Bug 688545 -+fuzzy-if(gtkWidget,0-103,0-637) fuzzy-if(cocoaWidget,0-1,0-3) == move-right-bottom-table.html move-right-bottom-table-ref.html -+fuzzy-if(gtkWidget,0-103,0-637) fuzzy-if(cocoaWidget,0-1,0-3) == move-top-left-table.html move-top-left-table-ref.html # Bug 688545 -diff -U0 firefox-92.0/layout/reftests/position-sticky/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/position-sticky/reftest.list ---- firefox-92.0/layout/reftests/position-sticky/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/position-sticky/reftest.list 2021-09-03 18:50:44.866939741 +0200 -@@ -53,3 +52,0 @@ --fuzzy-if(Android,0-5,0-4) fuzzy-if(webrender&>kWidget,10-17,12-32) fuzzy-if(webrender&&cocoaWidget,7-8,18-42) skip-if(!asyncPan) fails-if(useDrawSnapshot) == transformed-2.html transformed-2-ref.html # Bug 1604644 --skip-if(!asyncPan) fuzzy-if(Android,0-10,0-4) fuzzy-if(webrender&>kWidget,19-30,12-32) fuzzy-if(webrender&&cocoaWidget,13-16,20-44) fails-if(useDrawSnapshot) == nested-sticky-1.html nested-sticky-1-ref.html # Bug 1604644 --skip-if(!asyncPan) fuzzy-if(Android,0-10,0-4) fuzzy-if(webrender&>kWidget,19-30,12-32) fuzzy-if(webrender&&cocoaWidget,13-16,20-44) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu),0-4,0-104) fails-if(useDrawSnapshot) == nested-sticky-2.html nested-sticky-2-ref.html # Bug 1604644 -diff -U0 firefox-92.0/layout/reftests/reftest-sanity/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/reftest-sanity/reftest.list ---- firefox-92.0/layout/reftests/reftest-sanity/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/reftest-sanity/reftest.list 2021-09-03 18:50:44.867939768 +0200 -@@ -131,6 +131,6 @@ --pref(font.default.x-western,"serif") == font-serif.html font-default.html --pref(font.default.x-western,"serif") != font-sans-serif.html font-default.html --pref(font.default.x-western,"sans-serif") == font-sans-serif.html font-default.html --pref(font.default.x-western,"sans-serif") != font-serif.html font-default.html --fails pref(font.default.x-western,true) == font-serif.html font-default.html --fails pref(font.default.x-western,0) == font-serif.html font-default.html -+#pref(font.default.x-western,"serif") == font-serif.html font-default.html -+#pref(font.default.x-western,"serif") != font-sans-serif.html font-default.html -+#pref(font.default.x-western,"sans-serif") == font-sans-serif.html font-default.html -+#pref(font.default.x-western,"sans-serif") != font-serif.html font-default.html -+#fails pref(font.default.x-western,true) == font-serif.html font-default.html -+#fails pref(font.default.x-western,0) == font-serif.html font-default.html -diff -U0 firefox-92.0/layout/reftests/svg/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/svg/reftest.list ---- firefox-92.0/layout/reftests/svg/reftest.list.firefox-tests-reftest 2021-09-01 19:15:00.000000000 +0200 -+++ firefox-92.0/layout/reftests/svg/reftest.list 2021-09-03 18:50:44.867939768 +0200 -@@ -475 +475 @@ --random-if(winWidget) fuzzy-if(Android,0-10,0-2) == text-gradient-02.svg text-gradient-02-ref.svg # see bug 590101 -+random-if(winWidget) fuzzy-if(gtkWidget,0-20,0-10) fuzzy-if(Android,0-10,0-2) == text-gradient-02.svg text-gradient-02-ref.svg # see bug 590101 -@@ -482 +481,0 @@ --!= text-language-00.xhtml text-language-00-ref.xhtml -@@ -484 +483 @@ --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == text-layout-01.svg text-layout-01-ref.svg # Bug 1392106 -+fuzzy-if(gtkWidget,0-255,0-1769) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == text-layout-01.svg text-layout-01-ref.svg # Bug 1392106 -@@ -492 +491 @@ --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == text-layout-09.svg pass.svg # Bug 1392106 -+fuzzy(0-255,0-237) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == text-layout-09.svg pass.svg # Bug 1392106 -diff -U0 firefox-92.0/layout/reftests/svg/smil/style/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/svg/smil/style/reftest.list ---- firefox-92.0/layout/reftests/svg/smil/style/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/svg/smil/style/reftest.list 2021-09-03 18:50:44.867939768 +0200 -@@ -70 +70 @@ --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fuzzy-if(gtkWidget,255-255,1520-1520) == anim-css-font-1.svg anim-css-font-1-ref.svg # Windows: Bug 1392106 Linux: Bug 1599619 -+random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == anim-css-font-1.svg anim-css-font-1-ref.svg # Windows: Bug 1392106 Linux: Bug 1599619 -diff -U0 firefox-92.0/layout/reftests/svg/svg-integration/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/svg/svg-integration/reftest.list ---- firefox-92.0/layout/reftests/svg/svg-integration/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/svg/svg-integration/reftest.list 2021-09-03 18:50:44.867939768 +0200 -@@ -50 +50 @@ --fuzzy-if(Android,0-4,0-10) == box-decoration-break-01.xhtml box-decoration-break-01-ref.xhtml -+fuzzy-if(gtkWidget,0-5,0-11) fuzzy-if(Android,0-4,0-10) == box-decoration-break-01.xhtml box-decoration-break-01-ref.xhtml -@@ -52 +52 @@ --fuzzy(0-67,0-238) == box-decoration-break-03.xhtml box-decoration-break-01-ref.xhtml -+fuzzy(0-67,0-254) == box-decoration-break-03.xhtml box-decoration-break-01-ref.xhtml -diff -U0 firefox-92.0/layout/reftests/svg/text/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/svg/text/reftest.list ---- firefox-92.0/layout/reftests/svg/text/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/svg/text/reftest.list 2021-09-03 18:50:44.867939768 +0200 -@@ -203,2 +202,0 @@ --fuzzy-if(skiaContent,0-1,0-100) needs-focus fuzzy-if(webrender&&winWidget,55-148,200-318) == simple-bidi-selection.svg simple-bidi-selection-ref.html --fuzzy-if(skiaContent,0-1,0-50) needs-focus fuzzy-if(webrender&&winWidget,55-148,200-254) fuzzy-if(webrender&&OSX,1-65,19-196) == simple-fill-color-selection.svg simple-fill-color-selection-ref.html -diff -U0 firefox-92.0/layout/reftests/tab-size/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/tab-size/reftest.list ---- firefox-92.0/layout/reftests/tab-size/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/tab-size/reftest.list 2021-09-03 18:50:44.867939768 +0200 -@@ -2,6 +2,6 @@ --== tab-size-8.html spaces-8.html --== tab-size-4.html spaces-4.html --== tab-size-4-span.html spaces-4.html --== tab-size-4-spanoffset.html spaces-4-offset.html --== tab-size-4-multiple.html spaces-4-multiple.html --== tab-size-1.html spaces-1.html -+fuzzy-if(gtkWidget,0-255,0-70) == tab-size-8.html spaces-8.html -+fuzzy-if(gtkWidget,0-255,0-70) == tab-size-4.html spaces-4.html -+fuzzy-if(gtkWidget,0-255,0-70) == tab-size-4-span.html spaces-4.html -+fuzzy-if(gtkWidget,0-255,0-371) == tab-size-4-spanoffset.html spaces-4-offset.html -+fuzzy-if(gtkWidget,0-255,0-410) == tab-size-4-multiple.html spaces-4-multiple.html -+fuzzy-if(gtkWidget,0-255,0-63) == tab-size-1.html spaces-1.html -diff -U0 firefox-92.0/layout/reftests/text-decoration/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/text-decoration/reftest.list ---- firefox-92.0/layout/reftests/text-decoration/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/text-decoration/reftest.list 2021-09-03 18:50:44.867939768 +0200 -@@ -1,2 +1,2 @@ --fuzzy-if(webrender&>kWidget,0-208,0-12) == complex-decoration-style-quirks.html complex-decoration-style-quirks-ref.html --fuzzy-if(webrender&>kWidget,0-208,0-12) == complex-decoration-style-standards.html complex-decoration-style-standards-ref.html -+fuzzy-if(gtkWidget,0-255,0-40) == complex-decoration-style-quirks.html complex-decoration-style-quirks-ref.html -+fuzzy-if(gtkWidget,0-255,0-40) == complex-decoration-style-standards.html complex-decoration-style-standards-ref.html -diff -U0 firefox-92.0/layout/reftests/text-overflow/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/text-overflow/reftest.list ---- firefox-92.0/layout/reftests/text-overflow/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/text-overflow/reftest.list 2021-09-03 18:50:44.868939795 +0200 -@@ -6 +6 @@ --skip-if(!gtkWidget) fuzzy-if(gtkWidget,0-124,0-289) == bidi-simple-scrolled.html bidi-simple-scrolled-ref.html # Fails on Windows and OSX due to anti-aliasing -+skip-if(!gtkWidget) fuzzy-if(gtkWidget,0-255,0-400) == bidi-simple-scrolled.html bidi-simple-scrolled-ref.html # Fails on Windows and OSX due to anti-aliasing -@@ -28 +28 @@ --== float-edges-1.html float-edges-1-ref.html -+fuzzy-if(gtkWidget,0-255,0-294) == float-edges-1.html float-edges-1-ref.html -diff -U0 firefox-92.0/layout/reftests/text/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/text/reftest.list ---- firefox-92.0/layout/reftests/text/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/text/reftest.list 2021-09-03 18:50:44.868939795 +0200 -@@ -190 +190 @@ --fails-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == 1320665-cmap-format-13.html 1320665-cmap-format-13-ref.html # see bug 1320665 comments 8-9 -+fuzzy-if(gtkWidget,0-255,0-1071) fails-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == 1320665-cmap-format-13.html 1320665-cmap-format-13-ref.html # see bug 1320665 comments 8-9 -@@ -193,2 +193,2 @@ --fuzzy-if(Android,0-128,0-233) == 1463020-letter-spacing-text-transform-1.html 1463020-letter-spacing-text-transform-1-ref.html --fails-if(Android) == 1463020-letter-spacing-text-transform-2.html 1463020-letter-spacing-text-transform-2-ref.html # missing font coverage on Android -+fuzzy-if(gtkWidget,0-255,0-800) fails-if(/^^Windows\x20NT\x2010\.0/.test(http.oscpu)) fuzzy-if(Android,0-128,0-233) == 1463020-letter-spacing-text-transform-1.html 1463020-letter-spacing-text-transform-1-ref.html -+fuzzy-if(gtkWidget,0-255,0-1600) fails-if(Android) == 1463020-letter-spacing-text-transform-2.html 1463020-letter-spacing-text-transform-2-ref.html # missing font coverage on Android -@@ -198 +197,0 @@ --fuzzy-if(useDrawSnapshot&&webrender,255-255,50-50) fuzzy-if(!webrender,0-42,0-1590) fuzzy-if(gtkWidget&&!webrender,0-255,0-50) == 1655364-1.html 1655364-1-ref.html -@@ -366 +365 @@ --== color-opacity-rtl-1.html color-opacity-rtl-1-ref.html -+fuzzy-if(gtkWidget,0-5,0-5) == color-opacity-rtl-1.html color-opacity-rtl-1-ref.html -diff -U0 firefox-92.0/layout/reftests/text-transform/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/text-transform/reftest.list ---- firefox-92.0/layout/reftests/text-transform/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/text-transform/reftest.list 2021-09-03 18:50:44.868939795 +0200 -@@ -15 +15 @@ --random-if(winWidget) == small-caps-1.html small-caps-1-ref.html # fails if default font supports 'smcp' -+fuzzy-if(gtkWidget,0-255,0-571) random-if(winWidget) == small-caps-1.html small-caps-1-ref.html # fails if default font supports 'smcp' -diff -U0 firefox-92.0/layout/reftests/transform-3d/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/transform-3d/reftest.list ---- firefox-92.0/layout/reftests/transform-3d/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/transform-3d/reftest.list 2021-09-03 18:50:44.868939795 +0200 -@@ -14 +13,0 @@ --fuzzy-if(gtkWidget||winWidget,0-8,0-376) fuzzy-if(Android,0-8,0-441) fuzzy-if(skiaContent,0-16,0-346) fuzzy-if(webrender&&cocoaWidget,0-200,0-310) fuzzy-if(webrender&&winWidget,0-175,0-250) == preserve3d-1a.html preserve3d-1-ref.html -@@ -27,2 +26,2 @@ --fuzzy-if(winWidget,0-143,0-689) fuzzy-if(OSX,0-224,0-924) fuzzy-if(winWidget,0-154,0-644) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == scale3d-all.html scale3d-1-ref.html # subpixel AA --fuzzy-if(winWidget,0-143,0-689) fuzzy-if(OSX,0-224,0-924) fuzzy-if(winWidget,0-154,0-644) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == scale3d-all-separate.html scale3d-1-ref.html # subpixel AA -+fuzzy-if(gtkWidget,0-100,0-628) fuzzy-if(winWidget,0-143,0-689) fuzzy-if(OSX,0-224,0-924) fuzzy-if(winWidget,0-154,0-644) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == scale3d-all.html scale3d-1-ref.html # subpixel AA -+fuzzy-if(gtkWidget,0-100,0-628) fuzzy-if(winWidget,0-143,0-689) fuzzy-if(OSX,0-224,0-924) fuzzy-if(winWidget,0-154,0-644) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == scale3d-all-separate.html scale3d-1-ref.html # subpixel AA -@@ -75,2 +74,2 @@ --fuzzy-if(skiaContent,0-1,0-4) fuzzy-if(cocoaWidget,0-128,0-9) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == animate-preserve3d-parent.html animate-preserve3d-ref.html # intermittently fuzzy on Mac --fuzzy-if(skiaContent,0-1,0-4) fuzzy-if(cocoaWidget,0-128,0-9) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == animate-preserve3d-child.html animate-preserve3d-ref.html # intermittently fuzzy on Mac, bug 1461311 for Android -+fuzzy(0-1,0-9) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == animate-preserve3d-parent.html animate-preserve3d-ref.html # intermittently fuzzy on Mac -+fuzzy(0-1,0-6) fuzzy-if(cocoaWidget,0-128,0-9) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == animate-preserve3d-child.html animate-preserve3d-ref.html # intermittently fuzzy on Mac, bug 1461311 for Android -@@ -102 +100,0 @@ --fuzzy-if(webrender,0-6,0-3117) fuzzy-if(useDrawSnapshot,4-4,13-13) == 1637067-1.html 1637067-1-ref.html -diff -U0 firefox-92.0/layout/reftests/writing-mode/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/writing-mode/reftest.list ---- firefox-92.0/layout/reftests/writing-mode/reftest.list.firefox-tests-reftest 2021-09-01 19:15:01.000000000 +0200 -+++ firefox-92.0/layout/reftests/writing-mode/reftest.list 2021-09-03 18:50:44.868939795 +0200 -@@ -20 +20 @@ --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == 1091058-1.html 1091058-1-ref.html # Bug 1392106 -+fuzzy(0-255,0-315) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == 1091058-1.html 1091058-1-ref.html # Bug 1392106 -@@ -34 +34 @@ --fuzzy-if(Android,0-128,0-94) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == 1111944-1-list-marker.html 1111944-1-list-marker-ref.html # Bug 1392106 -+fuzzy-if(gtkWidget,0-72,0-47) fuzzy-if(Android,0-128,0-94) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == 1111944-1-list-marker.html 1111944-1-list-marker-ref.html # Bug 1392106 -@@ -114 +114 @@ --fails-if(geckoview) == 1135361-ruby-justify-1.html 1135361-ruby-justify-1-ref.html # Bug 1558513 for GV -+fuzzy-if(gtkWidget,0-255,0-2323) fails-if(geckoview) == 1135361-ruby-justify-1.html 1135361-ruby-justify-1-ref.html # Bug 1558513 for GV -@@ -154 +154 @@ --fuzzy-if(winWidget,0-3,0-84) == 1193519-sideways-lr-3.html 1193519-sideways-lr-3-ref.html -+fuzzy(0-255,0-610) fuzzy-if(winWidget,0-3,0-84) fails-if(webrender&&winWidget&&!swgl) == 1193519-sideways-lr-3.html 1193519-sideways-lr-3-ref.html -@@ -185 +185 @@ --== 1395926-vertical-upright-gpos-1.html 1395926-vertical-upright-gpos-1-ref.html -+fuzzy-if(gtkWidget,0-248,0-8) == 1395926-vertical-upright-gpos-1.html 1395926-vertical-upright-gpos-1-ref.html -diff -U0 firefox-92.0/layout/reftests/writing-mode/tables/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/writing-mode/tables/reftest.list ---- firefox-92.0/layout/reftests/writing-mode/tables/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/writing-mode/tables/reftest.list 2021-09-03 18:50:44.868939795 +0200 -@@ -34 +34 @@ --== fixed-table-layout-027-vlr.html fixed-table-layout-025-ref.html -+fuzzy-if(gtkWidget,0-260,0-250) == fixed-table-layout-027-vlr.html fixed-table-layout-025-ref.html -@@ -60 +60 @@ --== fixed-table-layout-027-vrl.html fixed-table-layout-025-ref.html -+fuzzy-if(gtkWidget,0-260,0-250) == fixed-table-layout-027-vrl.html fixed-table-layout-025-ref.html -@@ -77,2 +76,0 @@ --fuzzy-if(Android,0-255,0-38) == table-caption-top-1.html table-caption-top-1-ref.html --fuzzy-if(Android,0-255,0-38) pref(layout.css.caption-side-non-standard.enabled,true) == table-caption-bottom-1.html table-caption-bottom-1-ref.html -diff -U0 firefox-92.0/layout/reftests/xul/reftest.list.firefox-tests-reftest firefox-92.0/layout/reftests/xul/reftest.list ---- firefox-92.0/layout/reftests/xul/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/reftests/xul/reftest.list 2021-09-03 18:50:44.869939823 +0200 -@@ -15 +15 @@ --random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == chrome://reftest/content/xul/text-small-caps-1.xhtml chrome://reftest/content/xul/text-small-caps-1-ref.xhtml -+fuzzy-if(gtkWidget,0-255,0-5159) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == chrome://reftest/content/xul/text-small-caps-1.xhtml chrome://reftest/content/xul/text-small-caps-1-ref.xhtml -diff -U0 firefox-92.0/layout/xul/reftest/reftest.list.firefox-tests-reftest firefox-92.0/layout/xul/reftest/reftest.list ---- firefox-92.0/layout/xul/reftest/reftest.list.firefox-tests-reftest 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/layout/xul/reftest/reftest.list 2021-09-03 18:50:44.869939823 +0200 -@@ -13,2 +12,0 @@ --# This test is fuzzy as the marks cannot be positioned exactly as the real ones are measured in dev pixels. --fuzzy(0-10,0-102) fuzzy-if(winWidget&&isDebugBuild&&layersGPUAccelerated&&!is64Bit,1-1,102-102) == chrome://reftest/content/xul/reftest/scrollbar-marks-overlay.html chrome://reftest/content/xul/reftest/scrollbar-marks-overlay-ref.html diff --git a/firefox-tests-xpcshell.patch b/firefox-tests-xpcshell.patch deleted file mode 100644 index a342668..0000000 --- a/firefox-tests-xpcshell.patch +++ /dev/null @@ -1,147 +0,0 @@ -diff -U0 firefox-92.0/browser/components/enterprisepolicies/tests/xpcshell/xpcshell.ini.firefox-tests-xpcshell firefox-92.0/browser/components/enterprisepolicies/tests/xpcshell/xpcshell.ini ---- firefox-92.0/browser/components/enterprisepolicies/tests/xpcshell/xpcshell.ini.firefox-tests-xpcshell 2021-09-01 19:14:33.000000000 +0200 -+++ firefox-92.0/browser/components/enterprisepolicies/tests/xpcshell/xpcshell.ini 2021-09-03 18:39:17.386058157 +0200 -@@ -9 +8,0 @@ --[test_appupdateurl.js] -@@ -27 +25,0 @@ --[test_sorted_alphabetically.js] -diff -U0 firefox-92.0/netwerk/test/unit_ipc/xpcshell.ini.firefox-tests-xpcshell firefox-92.0/netwerk/test/unit_ipc/xpcshell.ini ---- firefox-92.0/netwerk/test/unit_ipc/xpcshell.ini.firefox-tests-xpcshell 2021-09-01 19:15:11.000000000 +0200 -+++ firefox-92.0/netwerk/test/unit_ipc/xpcshell.ini 2021-09-03 18:41:07.754088004 +0200 -@@ -73 +72,0 @@ --[test_dns_service_wrap.js] -@@ -114 +112,0 @@ --[test_trr_httpssvc_wrap.js] -diff -U0 firefox-92.0/netwerk/test/unit/xpcshell.ini.firefox-tests-xpcshell firefox-92.0/netwerk/test/unit/xpcshell.ini ---- firefox-92.0/netwerk/test/unit/xpcshell.ini.firefox-tests-xpcshell 2021-09-01 19:15:11.000000000 +0200 -+++ firefox-92.0/netwerk/test/unit/xpcshell.ini 2021-09-03 18:41:58.545482327 +0200 -@@ -205 +204,0 @@ --[test_dns_service.js] -@@ -221 +219,0 @@ --[test_file_protocol.js] -@@ -328 +325,0 @@ --[test_unix_domain.js] -@@ -340 +336,0 @@ --[test_udp_multicast.js] -@@ -390,2 +385,0 @@ --[test_tls_flags.js] --skip-if = (os == "android" && processor == "x86_64") -@@ -406 +399,0 @@ --[test_network_connectivity_service.js] -@@ -503 +495,0 @@ --[test_httpssvc_retry_with_ech.js] -@@ -513 +504,0 @@ --[test_odoh.js] -diff -U0 firefox-92.0/security/manager/ssl/tests/unit/xpcshell.ini.firefox-tests-xpcshell firefox-92.0/security/manager/ssl/tests/unit/xpcshell.ini ---- firefox-92.0/security/manager/ssl/tests/unit/xpcshell.ini.firefox-tests-xpcshell 2021-09-01 19:15:06.000000000 +0200 -+++ firefox-92.0/security/manager/ssl/tests/unit/xpcshell.ini 2021-09-03 18:41:07.755088031 +0200 -@@ -115,4 +114,0 @@ --[test_encrypted_client_hello.js] --run-sequentially = hardcoded ports --[test_encrypted_client_hello_client_only.js] --run-sequentially = hardcoded ports -@@ -180 +175,0 @@ --[test_oskeystore.js] -diff -U0 firefox-92.0/security/manager/ssl/tests/unit/xpcshell-smartcards.ini.firefox-tests-xpcshell firefox-92.0/security/manager/ssl/tests/unit/xpcshell-smartcards.ini ---- firefox-92.0/security/manager/ssl/tests/unit/xpcshell-smartcards.ini.firefox-tests-xpcshell 2021-09-01 19:15:18.000000000 +0200 -+++ firefox-92.0/security/manager/ssl/tests/unit/xpcshell-smartcards.ini 2021-09-03 18:41:07.755088031 +0200 -@@ -10 +9,0 @@ --[test_pkcs11_module.js] -diff -U0 firefox-92.0/toolkit/components/antitracking/test/xpcshell/xpcshell.ini.firefox-tests-xpcshell firefox-92.0/toolkit/components/antitracking/test/xpcshell/xpcshell.ini ---- firefox-92.0/toolkit/components/antitracking/test/xpcshell/xpcshell.ini.firefox-tests-xpcshell 2021-09-01 19:15:34.000000000 +0200 -+++ firefox-92.0/toolkit/components/antitracking/test/xpcshell/xpcshell.ini 2021-09-03 18:41:07.755088031 +0200 -@@ -11 +10,0 @@ --[test_staticPartition_font.js] -diff -U0 firefox-92.0/toolkit/components/commandlines/test/unit/xpcshell.ini.firefox-tests-xpcshell firefox-92.0/toolkit/components/commandlines/test/unit/xpcshell.ini ---- firefox-92.0/toolkit/components/commandlines/test/unit/xpcshell.ini.firefox-tests-xpcshell 2021-09-01 19:16:05.000000000 +0200 -+++ firefox-92.0/toolkit/components/commandlines/test/unit/xpcshell.ini 2021-09-03 18:41:07.755088031 +0200 -@@ -10 +9,0 @@ --[test_resolvefile.js] -diff -U0 firefox-92.0/toolkit/components/corroborator/test/xpcshell/test_verify_jar.js.firefox-tests-xpcshell firefox-92.0/toolkit/components/corroborator/test/xpcshell/test_verify_jar.js ---- firefox-92.0/toolkit/components/corroborator/test/xpcshell/test_verify_jar.js.firefox-tests-xpcshell 2021-09-01 19:16:00.000000000 +0200 -+++ firefox-92.0/toolkit/components/corroborator/test/xpcshell/test_verify_jar.js 2021-09-03 18:41:07.755088031 +0200 -@@ -30,5 +29,0 @@ -- -- result = await Corroborate.verifyJar( -- do_get_file("data/signed-components.xpi") -- ); -- equal(result, true, "Components signed files do verify"); -diff -U0 firefox-92.0/toolkit/components/extensions/test/xpcshell/xpcshell-common.ini.firefox-tests-xpcshell firefox-92.0/toolkit/components/extensions/test/xpcshell/xpcshell-common.ini ---- firefox-92.0/toolkit/components/extensions/test/xpcshell/xpcshell-common.ini.firefox-tests-xpcshell 2021-09-01 19:16:05.000000000 +0200 -+++ firefox-92.0/toolkit/components/extensions/test/xpcshell/xpcshell-common.ini 2021-09-03 18:41:07.755088031 +0200 -@@ -97,10 +96,0 @@ --skip-if = appname == "thunderbird" || os == "android" || tsan # tsan: bug 1612707 --[test_ext_downloads_misc.js] --skip-if = -- os == "android" -- os == 'linux' && bits == 32 # bug 1324870 -- tsan # bug 1612707 -- os == "win" && bits == 32 # bug 1559476 --[test_ext_downloads_partitionKey.js] --skip-if = os == "android" --[test_ext_downloads_private.js] -@@ -288,2 +277,0 @@ --[test_proxy_listener.js] --skip-if = appname == "thunderbird" -diff -U0 firefox-92.0/toolkit/components/search/tests/xpcshell/xpcshell.ini.firefox-tests-xpcshell firefox-92.0/toolkit/components/search/tests/xpcshell/xpcshell.ini ---- firefox-92.0/toolkit/components/search/tests/xpcshell/xpcshell.ini.firefox-tests-xpcshell 2021-09-01 19:16:05.000000000 +0200 -+++ firefox-92.0/toolkit/components/search/tests/xpcshell/xpcshell.ini 2021-09-03 18:41:07.755088031 +0200 -@@ -124 +123,0 @@ --[test_reload_engines.js] -@@ -131 +129,0 @@ --[test_searchSuggest.js] -@@ -142,2 +139,0 @@ --[test_settings.js] --[test_sort_orders-no-hints.js] -diff -U0 firefox-92.0/toolkit/components/telemetry/tests/unit/test_TelemetrySession.js.firefox-tests-xpcshell firefox-92.0/toolkit/components/telemetry/tests/unit/test_TelemetrySession.js ---- firefox-92.0/toolkit/components/telemetry/tests/unit/test_TelemetrySession.js.firefox-tests-xpcshell 2021-09-01 19:16:00.000000000 +0200 -+++ firefox-92.0/toolkit/components/telemetry/tests/unit/test_TelemetrySession.js 2021-09-03 18:41:07.755088031 +0200 -@@ -594,20 +593,0 @@ -- Assert.ok( -- withSuspend - withoutSuspend <= max_delta_ms, -- "In test condition, the two uptimes should be close to each other" -- ); -- -- // This however should always hold, except on Windows < 10, where the two -- // clocks are from different system calls, and it can fail in test condition -- // because the machine has not been suspended. -- if ( -- AppConstants.platform != "win" || -- AppConstants.isPlatformAndVersionAtLeast("win", "10.0") -- ) { -- Assert.greaterOrEqual( -- withSuspend, -- withoutSuspend, -- `The uptime with suspend must always been greater or equal to the uptime -- without suspend` -- ); -- } -- -diff -U0 firefox-92.0/toolkit/mozapps/downloads/tests/unit/xpcshell.ini.firefox-tests-xpcshell firefox-92.0/toolkit/mozapps/downloads/tests/unit/xpcshell.ini ---- firefox-92.0/toolkit/mozapps/downloads/tests/unit/xpcshell.ini.firefox-tests-xpcshell 2021-09-01 19:16:01.000000000 +0200 -+++ firefox-92.0/toolkit/mozapps/downloads/tests/unit/xpcshell.ini 2021-09-03 18:41:07.755088031 +0200 -@@ -4 +3,0 @@ --[test_DownloadUtils.js] -diff -U0 firefox-92.0/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini.firefox-tests-xpcshell firefox-92.0/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini ---- firefox-92.0/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini.firefox-tests-xpcshell 2021-09-01 19:16:01.000000000 +0200 -+++ firefox-92.0/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini 2021-09-03 18:41:07.756088058 +0200 -@@ -91 +90,0 @@ --[test_sideloads_after_rebuild.js] -@@ -106 +104,0 @@ --[test_startup_scan.js] -@@ -187,2 +184,0 @@ --tags = webextensions --[test_webextension_theme.js] -diff -U0 firefox-92.0/toolkit/profile/xpcshell/xpcshell.ini.firefox-tests-xpcshell firefox-92.0/toolkit/profile/xpcshell/xpcshell.ini ---- firefox-92.0/toolkit/profile/xpcshell/xpcshell.ini.firefox-tests-xpcshell 2021-09-01 19:15:35.000000000 +0200 -+++ firefox-92.0/toolkit/profile/xpcshell/xpcshell.ini 2021-09-03 18:41:07.756088058 +0200 -@@ -32,3 +31,0 @@ --[test_snatch_environment.js] --[test_skip_locked_environment.js] --[test_snatch_environment_default.js] -diff -U0 firefox-92.0/uriloader/exthandler/tests/unit/test_handlerService.js.firefox-tests-xpcshell firefox-92.0/uriloader/exthandler/tests/unit/test_handlerService.js ---- firefox-92.0/uriloader/exthandler/tests/unit/test_handlerService.js.firefox-tests-xpcshell 2021-09-01 19:16:05.000000000 +0200 -+++ firefox-92.0/uriloader/exthandler/tests/unit/test_handlerService.js 2021-09-03 18:41:07.756088058 +0200 -@@ -145 +145 @@ -- Assert.ok(!protoInfo.alwaysAskBeforeHandling); -+ //Assert.ok(!protoInfo.alwaysAskBeforeHandling); diff --git a/firefox-wayland.desktop b/firefox-wayland.desktop deleted file mode 100644 index cd2dd61..0000000 --- a/firefox-wayland.desktop +++ /dev/null @@ -1,235 +0,0 @@ -[Desktop Entry] -Version=1.0 -Name=Firefox on Wayland -GenericName=Web Browser -Comment=Browse the Web -Exec=firefox-wayland --name firefox-wayland %u -Icon=firefox -Terminal=false -Type=Application -MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https; -StartupNotify=true -Categories=Network;WebBrowser; -Keywords=web;browser;internet; -Actions=new-window;new-private-window;profile-manager-window; - -[Desktop Action new-window] -Name=Open a New Window -Name[ach]=Dirica manyen -Name[af]=Nuwe venster -Name[an]=Nueva finestra -Name[ar]=نافذة جديدة -Name[as]=নতুন উইন্ডো -Name[ast]=Ventana nueva -Name[az]=Yeni Pəncərə -Name[be]=Новае акно -Name[bg]=Нов прозорец -Name[bn_BD]=নতুন উইন্ডো (N) -Name[bn_IN]=নতুন উইন্ডো -Name[br]=Prenestr nevez -Name[brx]=गोदान उइन्ड'(N) -Name[bs]=Novi prozor -Name[ca]=Finestra nova -Name[cak]=K'ak'a' tzuwäch -Name[cs]=Nové okno -Name[cy]=Ffenestr Newydd -Name[da]=Nyt vindue -Name[de]=Neues Fenster -Name[dsb]=Nowe wokno -Name[el]=Νέο παράθυρο -Name[en_GB]=New Window -Name[en_US]=New Window -Name[en_ZA]=New Window -Name[eo]=Nova fenestro -Name[es_AR]=Nueva ventana -Name[es_CL]=Nueva ventana -Name[es_ES]=Nueva ventana -Name[es_MX]=Nueva ventana -Name[et]=Uus aken -Name[eu]=Leiho berria -Name[fa]=پنجره جدید‌ -Name[ff]=Henorde Hesere -Name[fi]=Uusi ikkuna -Name[fr]=Nouvelle fenêtre -Name[fy_NL]=Nij finster -Name[ga_IE]=Fuinneog Nua -Name[gd]=Uinneag ùr -Name[gl]=Nova xanela -Name[gn]=Ovetã pyahu -Name[gu_IN]=નવી વિન્ડો -Name[he]=חלון חדש -Name[hi_IN]=नया विंडो -Name[hr]=Novi prozor -Name[hsb]=Nowe wokno -Name[hu]=Új ablak -Name[hy_AM]=Նոր Պատուհան -Name[id]=Jendela Baru -Name[is]=Nýr gluggi -Name[it]=Nuova finestra -Name[ja]=新しいウィンドウ -Name[ja_JP-mac]=新規ウインドウ -Name[ka]=ახალი ფანჯარა -Name[kk]=Жаңа терезе -Name[km]=បង្អួច​​​ថ្មី -Name[kn]=ಹೊಸ ಕಿಟಕಿ -Name[ko]=새 창 -Name[kok]=नवें जनेल -Name[ks]=نئئ وِنڈو -Name[lij]=Neuvo barcon -Name[lo]=ຫນ້າຕ່າງໃຫມ່ -Name[lt]=Naujas langas -Name[ltg]=Jauns lūgs -Name[lv]=Jauns logs -Name[mai]=नव विंडो -Name[mk]=Нов прозорец -Name[ml]=പുതിയ ജാലകം -Name[mr]=नवीन पटल -Name[ms]=Tetingkap Baru -Name[my]=ဝင်းဒိုးအသစ် -Name[nb_NO]=Nytt vindu -Name[ne_NP]=नयाँ सञ्झ्याल -Name[nl]=Nieuw venster -Name[nn_NO]=Nytt vindauge -Name[or]=ନୂତନ ୱିଣ୍ଡୋ -Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ -Name[pl]=Nowe okno -Name[pt_BR]=Nova janela -Name[pt_PT]=Nova janela -Name[rm]=Nova fanestra -Name[ro]=Fereastră nouă -Name[ru]=Новое окно -Name[sat]=नावा विंडो (N) -Name[si]=නව කවුළුවක් -Name[sk]=Nové okno -Name[sl]=Novo okno -Name[son]=Zanfun taaga -Name[sq]=Dritare e Re -Name[sr]=Нови прозор -Name[sv_SE]=Nytt fönster -Name[ta]=புதிய சாளரம் -Name[te]=కొత్త విండో -Name[th]=หน้าต่างใหม่ -Name[tr]=Yeni pencere -Name[tsz]=Eraatarakua jimpani -Name[uk]=Нове вікно -Name[ur]=نیا دریچہ -Name[uz]=Yangi oyna -Name[vi]=Cửa sổ mới -Name[wo]=Palanteer bu bees -Name[xh]=Ifestile entsha -Name[zh_CN]=新建窗口 -Name[zh_TW]=開新視窗 -Exec=firefox-wayland --name firefox-wayland --new-window %u - -[Desktop Action new-private-window] -Name=Open a New Private Window -Name[ach]=Dirica manyen me mung -Name[af]=Nuwe privaatvenster -Name[an]=Nueva finestra privada -Name[ar]=نافذة خاصة جديدة -Name[as]=নতুন ব্যক্তিগত উইন্ডো -Name[ast]=Ventana privada nueva -Name[az]=Yeni Məxfi Pəncərə -Name[be]=Новае акно адасаблення -Name[bg]=Нов прозорец за поверително сърфиране -Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো -Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো -Name[br]=Prenestr merdeiñ prevez nevez -Name[brx]=गोदान प्राइभेट उइन्ड' -Name[bs]=Novi privatni prozor -Name[ca]=Finestra privada nova -Name[cak]=K'ak'a' ichinan tzuwäch -Name[cs]=Nové anonymní okno -Name[cy]=Ffenestr Breifat Newydd -Name[da]=Nyt privat vindue -Name[de]=Neues privates Fenster -Name[dsb]=Nowe priwatne wokno -Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης -Name[en_GB]=New Private Window -Name[en_US]=New Private Window -Name[en_ZA]=New Private Window -Name[eo]=Nova privata fenestro -Name[es_AR]=Nueva ventana privada -Name[es_CL]=Nueva ventana privada -Name[es_ES]=Nueva ventana privada -Name[es_MX]=Nueva ventana privada -Name[et]=Uus privaatne aken -Name[eu]=Leiho pribatu berria -Name[fa]=پنجره ناشناس جدید -Name[ff]=Henorde Suturo Hesere -Name[fi]=Uusi yksityinen ikkuna -Name[fr]=Nouvelle fenêtre de navigation privée -Name[fy_NL]=Nij priveefinster -Name[ga_IE]=Fuinneog Nua Phríobháideach -Name[gd]=Uinneag phrìobhaideach ùr -Name[gl]=Nova xanela privada -Name[gn]=Ovetã ñemi pyahu -Name[gu_IN]=નવી ખાનગી વિન્ડો -Name[he]=חלון פרטי חדש -Name[hi_IN]=नयी निजी विंडो -Name[hr]=Novi privatni prozor -Name[hsb]=Nowe priwatne wokno -Name[hu]=Új privát ablak -Name[hy_AM]=Սկսել Գաղտնի դիտարկում -Name[id]=Jendela Mode Pribadi Baru -Name[is]=Nýr huliðsgluggi -Name[it]=Nuova finestra anonima -Name[ja]=新しいプライベートウィンドウ -Name[ja_JP-mac]=新規プライベートウインドウ -Name[ka]=ახალი პირადი ფანჯარა -Name[kk]=Жаңа жекелік терезе -Name[km]=បង្អួច​ឯកជន​ថ្មី -Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ -Name[ko]=새 사생활 보호 모드 -Name[kok]=नवो खाजगी विंडो -Name[ks]=نْو پرایوٹ وینڈو& -Name[lij]=Neuvo barcon privou -Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່ -Name[lt]=Naujas privataus naršymo langas -Name[ltg]=Jauns privatais lūgs -Name[lv]=Jauns privātais logs -Name[mai]=नया निज विंडो (W) -Name[mk]=Нов приватен прозорец -Name[ml]=പുതിയ സ്വകാര്യ ജാലകം -Name[mr]=नवीन वैयक्तिक पटल -Name[ms]=Tetingkap Persendirian Baharu -Name[my]=New Private Window -Name[nb_NO]=Nytt privat vindu -Name[ne_NP]=नयाँ निजी सञ्झ्याल -Name[nl]=Nieuw privévenster -Name[nn_NO]=Nytt privat vindauge -Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ -Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ -Name[pl]=Nowe okno prywatne -Name[pt_BR]=Nova janela privativa -Name[pt_PT]=Nova janela privada -Name[rm]=Nova fanestra privata -Name[ro]=Fereastră privată nouă -Name[ru]=Новое приватное окно -Name[sat]=नावा निजेराक् विंडो (W ) -Name[si]=නව පුද්ගලික කවුළුව (W) -Name[sk]=Nové okno v režime Súkromné prehliadanie -Name[sl]=Novo zasebno okno -Name[son]=Sutura zanfun taaga -Name[sq]=Dritare e Re Private -Name[sr]=Нови приватан прозор -Name[sv_SE]=Nytt privat fönster -Name[ta]=புதிய தனிப்பட்ட சாளரம் -Name[te]=కొత్త ఆంతరంగిక విండో -Name[th]=หน้าต่างส่วนตัวใหม่ -Name[tr]=Yeni gizli pencere -Name[tsz]=Juchiiti eraatarakua jimpani -Name[uk]=Приватне вікно -Name[ur]=نیا نجی دریچہ -Name[uz]=Yangi maxfiy oyna -Name[vi]=Cửa sổ riêng tư mới -Name[wo]=Panlanteeru biir bu bees -Name[xh]=Ifestile yangasese entsha -Name[zh_CN]=新建隐私浏览窗口 -Name[zh_TW]=新增隱私視窗 -Exec=firefox-wayland --private-window --name firefox-wayland %u - -[Desktop Action profile-manager-window] -Name=Open the Profile Manager -Name[cs]=Správa profilů -Exec=firefox-wayland --name firefox-wayland --ProfileManager diff --git a/firefox-wayland.sh.in b/firefox-wayland.sh.in deleted file mode 100644 index bd68068..0000000 --- a/firefox-wayland.sh.in +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/bash -# -# Run Firefox under Wayland -# - -export MOZ_ENABLE_WAYLAND=1 -exec /__PREFIX__/bin/firefox "$@" diff --git a/firefox.1 b/firefox.1 index 9228231..556cf07 100644 --- a/firefox.1 +++ b/firefox.1 @@ -1,4 +1,4 @@ -.TH FIREFOX 1 "July 10, 2019" firefox "Linux User's Manual" +.TH FIREFOX 1 "November 30, 2017" firefox "Linux User's Manual" .SH NAME firefox \- a Web browser for X11 derived from the Mozilla browser @@ -33,10 +33,10 @@ Make all warnings fatal .SS "Firefox options" .TP -.B \-h, \--help +.B \-h, \-help Show summary of options. .TP -.B \-v, \--version +.B \-v, \-version Print Firefox version. .TP \fB\-P\fR \fIprofile\fR @@ -63,22 +63,11 @@ Start with \fIlocale\fR resources as UI Locale. \fB\-\-safe\-mode\fR Disables extensions and themes for this session. .TP -\fB\--allow-downgrade\fR -Allows downgrading a profile. -.TP -\fB\--MOZ_LOG\fR=\fImodules\fR -Treated as \fBMOZ_LOG\fR=\fImodules\fR environment variable, overrides it. -.TP -\fB\--MOZ_LOG_FILE\fR=\fIfile\fR -Treated as \fBMOZ_LOG_FILE\fR=\fIfile\fR environment variable, overrides it. If -MOZ_LOG_FILE is not specified as an argument or as an environment variable, -logging will be written to stdout. -.TP \fB\-\-headless\fR Run without a GUI. .TP -\fB\-\-save-recordings\fR -Save recordings for all content processes to a directory. +\fB\-\-marionette\fR +Enable remote control server. .TP \fB\-\-browser\fR Open a browser window. @@ -104,9 +93,8 @@ Width and optionally height of screenshot. \fB\-\-search\fR \fIterm\fR Search \fIterm\fR with your default search engine. .TP -\fB\-\-setDefaultBrowser\fR -Set this app as the default browser. -.TP + + \fB\-\-jsconsole\fR Open the Browser Console. .TP @@ -127,6 +115,9 @@ Record drawing for a given URL. .TP \fB\-\-recording-output\fR \fIfile\fR Specify destination file for a drawing recording. +.TP +\fB\-\-setDefaultBrowser\fR +Set this app as the default browser. .SH FILES \fI/usr/bin/firefox\fR - shell script wrapping @@ -136,7 +127,7 @@ Specify destination file for a drawing recording. executable .SH VERSION -68.0 +57.0 .SH BUGS To report a bug, please visit \fIhttp://bugzilla.mozilla.org/\fR diff --git a/firefox.desktop b/firefox.desktop index 566c8d9..a152ed4 100644 --- a/firefox.desktop +++ b/firefox.desktop @@ -37,7 +37,7 @@ Comment[nb]=Surf på nettet Comment[nl]=Verken het internet Comment[nn]=Surf på nettet Comment[no]=Surf på nettet -Comment[pl]=Przeglądanie stron WWW +Comment[pl]=Przeglądanie stron WWW Comment[pt]=Navegue na Internet Comment[pt_BR]=Navegue na Internet Comment[sk]=Prehliadanie internetu @@ -51,8 +51,6 @@ StartupNotify=true Categories=Network;WebBrowser; Keywords=web;browser;internet; Actions=new-window;new-private-window;profile-manager-window; -# Activable desktop file crashes KDE so remove it for now -# DBusActivatable=true [Desktop Action new-window] Name=Open a New Window @@ -274,5 +272,4 @@ Exec=firefox --private-window %u Name=Open the Profile Manager Name[cs]=Správa profilů Name[de]=Profilverwaltung öffnen -Name[fr]=Ouvrir le gestionnaire de profils Exec=firefox --ProfileManager diff --git a/firefox.sh.in b/firefox.sh.in index 286f1aa..6a3f6e4 100644 --- a/firefox.sh.in +++ b/firefox.sh.in @@ -17,10 +17,10 @@ # Copyright (C) 1998 Netscape Communications Corporation. All # Rights Reserved. # -# Contributor(s): +# Contributor(s): # -## +## ## Usage: ## ## $ firefox @@ -67,6 +67,22 @@ MOZ_PROGRAM="$MOZ_DIST_BIN/$MOZ_FIREFOX_FILE" MOZ_LAUNCHER="$MOZ_DIST_BIN/run-mozilla.sh" GETENFORCE_FILE="/usr/sbin/getenforce" +## +## Enable Wayland backend? +## +%DISABLE_WAYLAND_PLACEHOLDER% + +if ! [ $MOZ_DISABLE_WAYLAND ] && [ "$WAYLAND_DISPLAY" ]; then + if [ "$XDG_CURRENT_DESKTOP" == "GNOME" ]; then + export MOZ_ENABLE_WAYLAND=1 + fi +## Enable Wayland on KDE/Sway +## + if [ "$XDG_SESSION_TYPE" == "wayland" ]; then + export MOZ_ENABLE_WAYLAND=1 + fi +fi + ## ## Use D-Bus remote exclusively when there's Wayland display. ## @@ -115,19 +131,14 @@ FONTCONFIG_PATH="/etc/fonts:${MOZILLA_FIVE_HOME}/res/Xft" export FONTCONFIG_PATH ## -## We want Firefox to use Openh264 provided by Fedora. -## -## We used to configure it here but It's set by /etc/profile.d/gmpopenh264.sh -## script from mozilla-openh264 package now. Let's keep it here just -## for the record. -## -## export MOZ_GMP_PATH=$MOZ_LIB_DIR/mozilla/plugins/gmp-gmpopenh264/system-installed +## We want Firefox to use Openh264 provided by Fedora ## +export MOZ_GMP_PATH=$MOZ_LIB_DIR/mozilla/plugins/gmp-gmpopenh264/system-installed ## -## In order to better support certain scripts (such as Indic and some CJK -## scripts), Fedora builds its Firefox, with permission from the Mozilla -## Corporation, with the Pango system as its text renderer. This change +## In order to better support certain scripts (such as Indic and some CJK +## scripts), Fedora builds its Firefox, with permission from the Mozilla +## Corporation, with the Pango system as its text renderer. This change ## may negatively impact performance on some pages. To disable the use of ## Pango, set MOZ_DISABLE_PANGO=1 in your environment before launching ## Firefox. @@ -151,7 +162,7 @@ export G_SLICE=always-malloc ## ## Enable Xinput2 (mozbz#1207973) ## -export MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2-1} +export MOZ_USE_XINPUT2=1 # OK, here's where all the real work gets done @@ -184,12 +195,12 @@ fi # When Firefox is not running, restore SELinux labels for profile files # (rhbz#1731371) if [ $MOZILLA_DOWN -ne 0 ]; then - if [ -x $GETENFORCE_FILE ] && [ `$GETENFORCE_FILE` != "Disabled" ]; then - (restorecon -vr ~/.mozilla/firefox/* &) + if [ -x $GETENFORCE_FILE ] && [ `$GETENFORCE_FILE` != "Disabled" ] && [ -d ~/.mozilla/firefox ]; then + (/usr/sbin/restorecon -vr ~/.mozilla/firefox &) fi fi -# Modify language pack configuration only when firefox is not running +# Modify language pack configuration only when firefox is not running # and language packs are not disabled if [ $MOZILLA_DOWN -ne 0 ]; then @@ -216,22 +227,13 @@ if [ $MOZILLA_DOWN -ne 0 ]; then local langpack=langpack-${language}@firefox.mozilla.org.xpi if [ -f $MOZ_LANGPACKS_DIR/$langpack ]; then rm -rf $MOZ_EXTENSIONS_PROFILE_DIR/$langpack - # If the target file is a symlink (the fallback langpack), + # If the target file is a symlink (the fallback langpack), # install the original file instead of the fallback one if [ -h $MOZ_LANGPACKS_DIR/$langpack ]; then langpack=`readlink $MOZ_LANGPACKS_DIR/$langpack` fi - if [ -e "/run/ostree-booted" ]; then - # Files on Silverblue has file create time set to 0, - # so in case the langpack is updated Firefox does not - # check for changes because it compares the file - # creation date to do so. - cp -f $MOZ_LANGPACKS_DIR/$langpack \ - $MOZ_EXTENSIONS_PROFILE_DIR/$langpack - else - ln -s $MOZ_LANGPACKS_DIR/$langpack \ - $MOZ_EXTENSIONS_PROFILE_DIR/$langpack - fi + ln -s $MOZ_LANGPACKS_DIR/$langpack \ + $MOZ_EXTENSIONS_PROFILE_DIR/$langpack echo $MOZ_EXTENSIONS_PROFILE_DIR/$langpack > $FEDORA_LANGPACK_CONFIG return 0 fi @@ -274,12 +276,6 @@ do esac done -# We need to link Firefox with desktop file name -if [ -z "$MOZ_APP_REMOTINGNAME" ] -then - export MOZ_APP_REMOTINGNAME=__APP_NAME__ -fi - # Flatpak specific environment variables %FLATPAK_ENV_VARS% diff --git a/firefox.spec b/firefox.spec index a5f7f51..b36dbdf 100644 --- a/firefox.spec +++ b/firefox.spec @@ -1,193 +1,172 @@ -# Produce a build suitable for release, i.e. use PGO/LTO. You can turn it off -# when building locally to reduce build time. -%global release_build 1 - -# Excluded due to https://bugzilla.mozilla.org/show_bug.cgi?id=1792159 -# https://bugzilla.redhat.com/show_bug.cgi?id=2129720 -ExcludeArch: i686 - -# Run Mozilla test suite as a part of compile rpm section. Turn off when -# building locally and don't want to spend 24 hours waiting for results. -%global run_firefox_tests 0 -%ifarch x86_64 %{ix86} -%global run_firefox_tests 0 -%endif - -# Don't create debuginfo rpm packages. It reduces build time as -# exctracting debuginfo takes long time. -%global create_debuginfo 1 +%define homepage %(grep '^HOME_URL\s*=' /etc/os-release | sed 's/^HOME_URL\s*=//;s/^\s*"//;s/"\s*$//') +%global disable_toolsets 0 # Produce debug (non-optimized) package build. Suitable for debugging only # as the build is *very* slow. %global debug_build 0 +# Run Mozilla test suite as a part of compile rpm section. Turn off when +# building locally and don't want to spend 24 hours waiting for results. +%global run_firefox_tests 0 -# See rhbz#2134527 - Use portal Gtk file dialog -# Disabled due to various issues now. -%global use_xdg_file_portal 0 +%ifarch x86_64 %{ix86} +%global run_firefox_tests 0 +%endif +%{lua: +function dist_to_rhel_minor(str, start) + match = string.match(str, ".module%+el8.%d+") + if match then + return string.sub(match, 13) + end + match = string.match(str, ".el8_%d+") + if match then + return string.sub(match, 6) + end + match = string.match(str, ".el8") + if match then + return 10 + end + match = string.match(str, ".module%+el9.%d+") + if match then + return string.sub(match, 13) + end + match = string.match(str, ".el9_%d+") + if match then + return string.sub(match, 6) + end + match = string.match(str, ".el9") + if match then + return 5 + end + return -1 +end} + +%global rhel_minor_version %{lua:print(dist_to_rhel_minor(rpm.expand("%dist")))} + +# System libraries options %global system_nss 1 -%global system_libevent 1 -%global build_with_asan 0 -%global test_on_wayland 0 -%ifarch x86_64 %{ix86} -%global enable_replace_malloc 1 -%else -%global enable_replace_malloc 0 +%global bundle_nss 0 + +%if 0%{?rhel} == 8 + %if %{rhel_minor_version} <= 6 + %global bundle_nss 1 + %global system_nss 1 + %endif +%endif +%if 0%{?rhel} == 9 + %if %{rhel_minor_version} <= 0 + %global bundle_nss 1 + %global system_nss 1 + %endif %endif -%if "%{toolchain}" == "clang" -%global build_with_clang 1 -%else -%global build_with_clang 0 -%endif - -%global gnome_shell_search_provider 0 -%if 0%{?fedora} >= 40 -%global gnome_shell_search_provider 1 -%endif - -# Temporary disabled due to -# https://bugzilla.redhat.com/show_bug.cgi?id=1951606 -%global enable_mozilla_crashreporter 0 -%ifarch x86_64 %{ix86} -%global enable_mozilla_crashreporter 1 -%endif -%if %{build_with_asan} -%global enable_mozilla_crashreporter 0 -%endif -%if 0%{?flatpak} -%global enable_mozilla_crashreporter 0 -%endif -%if !%{create_debuginfo} -%define _unpackaged_files_terminate_build 0 -%global debug_package %{nil} -%global enable_mozilla_crashreporter 0 -%endif - -%global system_ffi 1 -%global system_av1 1 +%global dts_version 10 +%global llvm_version 7.0 +%global nspr_version 4.35 +%global nspr_version_max 4.36 +%global nss_version 3.90 +%global nss_version_max 3.91 +%global rust_version 1.66 %global system_libvpx 0 -%global system_jpeg 1 -%global system_pixman 1 -%global system_webp 1 -# Bundled cbindgen makes build slow. -# Enable only if system cbindgen is not available. -%if 0%{?rhel} -%global use_bundled_cbindgen 1 -%else -%global use_bundled_cbindgen 1 -%endif -%if %{debug_build} -%global release_build 0 -%endif -# Build PGO+LTO on x86_64 only due to build issues -# on other arches. -%global build_with_pgo 0 -%ifarch x86_64 -%if %{release_build} -%global build_with_pgo 1 -%endif -%endif -%if 0%{?flatpak} -%global build_with_pgo 0 -%endif -# Big endian platforms -%ifarch s390x -%global big_endian 1 + +# Toolsets setup +%global use_dts 0 +%global use_gcc_ts 0 +%global use_llvm_ts 0 +%global use_nodejs_scl 0 +%global use_rust_ts 1 +%global use_python3_scl 0 + +%global nodejs_build_req nodejs + +%if 0%{?rhel} >= 8 + %global use_rust_ts 0 %endif -%if 0%{?build_with_pgo} -%global use_xvfb 1 -%global build_tests 1 +%if 0%{?rhel} == 8 && %{rhel_minor_version} < 6 + %ifarch aarch64 +%global use_gcc_ts 1 + %endif %endif -%if 0%{?run_firefox_tests} -%global use_xvfb 1 -%global build_tests 1 +%if 0%{?rhel} == 7 + %global use_dts 1 + %global use_llvm_ts 1 + %global use_nodejs_scl 1 + %global nodejs_build_req rh-nodejs10-nodejs + %global llvm_version 11.0 + %global use_python3_scl 1 +%endif + +%if 0%{?disable_toolsets} +%global use_dts 0 +%global use_llvm_ts 0 +%global use_nodejs_scl 0 +%global use_rust_ts 0 +%global use_python3_scl 0 %endif %global launch_wayland_compositor 0 -%if %{build_with_pgo} && %{test_on_wayland} -%global launch_wayland_compositor 1 -%endif -%if %{run_firefox_tests} && %{test_on_wayland} -%global launch_wayland_compositor 1 +%if 0%{?run_firefox_tests} + %global test_on_wayland 1 + %global launch_wayland_compositor 1 + %global build_tests 1 %endif -%global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html -%global firefox_app_id \{ec8030f7-c20a-464f-9b0e-13a3a9e97384\} -# Minimal required versions -%global cairo_version 1.13.1 -%global freetype_version 2.1.9 -%global libnotify_version 0.7.0 -%if %{?system_av1} -%global aom_version 1.0.0 -%global dav1d_version 1.0.0 -%endif -%if %{?system_libvpx} -%global libvpx_version 1.10.0 -%endif -%if %{?system_webp} -%global libwebp_version 1.1.0 -%endif -%if %{?system_nss} -%global nspr_version 4.32 -%global nspr_build_version %{nspr_version} -%global nss_version 3.95 -%global nss_build_version %{nss_version} -%endif - -%global mozappdir %{_libdir}/firefox -%global mozappdirdev %{_libdir}/firefox-devel-%{version} -%global langpackdir %{mozappdir}/langpacks -%global tarballdir firefox-%{version} - -%global official_branding 1 +%global mozappdir %{_libdir}/firefox +%global langpackdir %{mozappdir}/browser/extensions +%define bundled_install_path %{mozappdir}/bundled +%global pre_version esr +# Workaround the dreaded "upstream source file changed content" rpminspect failure. +# If set to .b2 or .b3 ... the processed source file needs to be renamed before upload, e.g. +# firefox-102.8.0esr.b2.processed-source.tar.xz +# When unset use processed source file name as is. +##global buildnum .b2 %bcond_without langpacks -%if %{with langpacks} -%bcond_without langpacks_subpkg -%endif - -%if !%{release_build} -%global pre_tag .npgo -%endif -%if %{build_with_clang} -%global pre_tag .clang -%endif -%if %{build_with_asan} -%global pre_tag .asan -%global build_with_pgo 0 -%endif -%if !%{system_nss} -%global nss_tag .nss -%endif -%if %{debug_build} -%global pre_tag .debug -%endif - # Exclude private libraries from autogenerated provides and requires %global __provides_exclude_from ^%{mozappdir} %global __requires_exclude ^(%%(find %{buildroot}%{mozappdir} -name '*.so' | xargs -n1 basename | sort -u | paste -s -d '|' -)) -%undefine _package_note_flags -# for https://bugzilla.redhat.com/show_bug.cgi?id=2184553 -%global _package_note_status 0 - Summary: Mozilla Firefox Web browser Name: firefox -Version: 122.0 -Release: 6%{?pre_tag}%{?dist} +Version: 115.12.0 +Release: 1%{?dist} URL: https://www.mozilla.org/firefox/ License: MPLv1.1 or GPLv2+ or LGPLv2+ -Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz + +%if 0%{?rhel} == 9 +ExcludeArch: %{ix86} +%endif +%if 0%{?rhel} == 8 + # Started to ship on aarch64 in RHEL 8.2, on s390x in RHEL 8.3 + %if %{rhel_minor_version} == 1 +ExcludeArch: %{ix86} s390x aarch64 + %else + %if %{rhel_minor_version} == 2 +ExcludeArch: %{ix86} s390x + %else +ExcludeArch: %{ix86} + %endif + %endif +%endif +%if 0%{?rhel} == 7 +ExcludeArch: aarch64 s390 ppc +%endif + +# We can't use the official tarball as it contains some test files that use +# licenses that are rejected by Red Hat Legal. +# The official tarball has to be always processed by the process-official-tarball +# script +# Link to original tarball: https://archive.mozilla.org/pub/firefox/releases/%%{version}%%{?pre_version}/source/firefox-%%{version}%%{?pre_version}.source.tar.xz +Source0: firefox-%{version}%{?pre_version}%{?buildnum}.processed-source.tar.xz %if %{with langpacks} -Source1: firefox-langpacks-%{version}%{?pre_version}-20240119.tar.xz +Source1: firefox-langpacks-%{version}%{?pre_version}-20240604.tar.xz %endif Source2: cbindgen-vendor.tar.xz -Source3: dump_syms-vendor.tar.xz +Source3: process-official-tarball Source10: firefox-mozconfig Source12: firefox-redhat-default-prefs.js Source20: firefox.desktop @@ -197,319 +176,783 @@ Source24: mozilla-api-key Source25: firefox-symbolic.svg Source26: distribution.ini Source27: google-api-key -Source28: firefox-wayland.sh.in -Source29: firefox-wayland.desktop Source30: firefox-x11.sh.in Source31: firefox-x11.desktop Source32: node-stdout-nonblocking-wrapper Source33: firefox.appdata.xml.in -Source34: org.mozilla.firefox.search-provider.ini +Source34: firefox-search-provider.ini Source35: google-loc-api-key +Source36: testing.sh Source37: mochitest-python.tar.gz -Source38: print_results -Source39: print-errors -Source40: run-tests-x11 -Source41: run-tests-wayland -Source42: psummary -Source43: print_failures -Source44: print-error-reftest -Source45: run-wayland-compositor -Source46: org.mozilla.firefox.SearchProvider.service -Source47: org.mozilla.firefox.desktop -# Build patches -#Patch3: mozilla-build-arm.patch -Patch32: build-rust-ppc64le.patch -Patch35: build-ppc-jit.patch -# Fixing missing cacheFlush when JS_CODEGEN_NONE is used (s390x) -Patch38: build-cacheFlush-missing.patch -Patch40: build-aarch64-skia.patch -Patch44: build-arm-libopus.patch -Patch46: firefox-nss-version.patch -Patch47: fedora-shebang-build.patch -Patch53: firefox-gcc-build.patch -Patch54: mozilla-1669639.patch -Patch55: firefox-testing.patch -Patch61: firefox-glibc-dynstack.patch -Patch71: 0001-GLIBCXX-fix-for-GCC-12.patch -Patch78: firefox-i686-build.patch -Patch79: firefox-gcc-13-build.patch +# Bundled libraries +Source401: nss-setup-flags-env.inc +Source402: nspr-4.35.0-1.el8_1.src.rpm +Source403: nss-3.90.0-3.el8_1.src.rpm +Source404: nss-3.90.0-3.el9_0.src.rpm -# Test patches +# ---- RHEL specific patches --- +# -- Downstream only -- +Patch01: build-disable-elfhack.patch +Patch02: firefox-gcc-build.patch +Patch03: build-big-endian-errors.patch +Patch05: build-rhel7-lower-node-min-version.patch +Patch06: build-ppc64-abiv2.patch +Patch07: build-rhel7-nasm-dwarf.patch +# Disable PipeWire support for PipeWire 0.2 +Patch08: disable-pipewire.patch +Patch09: rhbz-2131158-webrtc-nss-fix.patch + +# -- Upstreamed patches -- +Patch51: mozilla-bmo1170092.patch + +# -- Submitted upstream, not merged -- +Patch101: mozilla-bmo1636168-fscreen.patch +Patch102: mozilla-bmo1670333.patch +# Big endian fix +Patch103: mozilla-bmo1504834-part1.patch +Patch104: mozilla-bmo1504834-part3.patch +# Big endian fix +Patch105: mozilla-bmo849632.patch +# Big endian fix +Patch106: mozilla-bmo998749.patch +# Big endian fix +Patch107: mozilla-bmo1716707-swizzle.patch +Patch108: mozilla-bmo1716707-svg.patch +Patch109: mozilla-bmo1789216-disable-av1.patch + +# ---- Fedora specific patches ---- +Patch151: firefox-enable-addons.patch +Patch152: rhbz-1173156.patch +Patch153: fedora-shebang-build.patch +Patch154: firefox-nss-addon-hack.patch +# ARM run-time patch +Patch155: rhbz-1354671.patch + +# ---- Test patches ---- # Generate without context by # GENDIFF_DIFF_ARGS=-U0 gendiff firefox-xxxx .firefox-tests-xpcshell # GENDIFF_DIFF_ARGS=-U0 gendiff firefox-xxxx .firefox-tests-reftest -Patch100: firefox-tests-xpcshell.patch -Patch101: firefox-tests-reftest.patch -Patch102: firefox-tests-xpcshell-freeze.patch +Patch201: firefox-tests-xpcshell-freeze.patch -# Fedora specific patches -Patch215: firefox-enable-addons.patch -Patch219: rhbz-1173156.patch -#ARM run-time patch -Patch226: rhbz-1354671.patch -Patch228: disable-openh264-download.patch -Patch229: firefox-nss-addon-hack.patch -Patch230: firefox-enable-vaapi.patch -Patch231: fedora-customization.patch -Patch241: 0025-Add-KDE-integration-to-Firefox-toolkit-parts.patch -Patch242: 0026-Add-KDE-integration-to-Firefox.patch +# ---- Security patches ---- +Patch301: CVE-2023-44488-libvpx.patch -# Upstream patches -Patch402: mozilla-1196777.patch -Patch407: mozilla-1667096.patch -Patch408: D167159.diff - -# PGO/LTO patches -Patch600: pgo.patch -Patch602: mozilla-1516803.patch -Patch603: firefox-gcc-always-inline.patch - -# system AV1 patches (from Gentoo) -Patch800: bmo-1559213-Support-system-av1.patch -Patch801: bmo-1559213-fix-system-av1-libs.patch - -# tentative patch for RUSTFLAGS parsing issue: -# https://bugzilla.redhat.com/show_bug.cgi?id=2184743 -# https://bugzilla.mozilla.org/show_bug.cgi?id=1474486 -# not upstreaming till I'm more sure it's correct -Patch1200: firefox-112.0-commasplit.patch - -%if %{?system_nss} +# BUILD REQURES/REQUIRES +%if %{?system_nss} && !0%{?bundle_nss} BuildRequires: pkgconfig(nspr) >= %{nspr_version} +BuildRequires: pkgconfig(nspr) < %{nspr_version_max} BuildRequires: pkgconfig(nss) >= %{nss_version} +BuildRequires: pkgconfig(nss) < %{nss_version_max} BuildRequires: nss-static >= %{nss_version} +BuildRequires: nss-static < %{nss_version_max} %endif -BuildRequires: pkgconfig(libpng) -%if %{?system_jpeg} -BuildRequires: libjpeg-devel + +%if %{?system_libvpx} +BuildRequires: libvpx-devel >= 1.8.2 %endif -%if %{?system_pixman} -BuildRequires: pixman-devel -%endif -BuildRequires: zip + BuildRequires: bzip2-devel -BuildRequires: pkgconfig(zlib) +BuildRequires: dbus-glib-devel +BuildRequires: desktop-file-utils +BuildRequires: libappstream-glib +BuildRequires: libjpeg-devel +BuildRequires: libstdc++-devel +BuildRequires: libstdc++-static +BuildRequires: m4 +BuildRequires: make +BuildRequires: nasm >= 1.13 +BuildRequires: %{nodejs_build_req} >= 10.21 +BuildRequires: pciutils-libs +BuildRequires: perl-interpreter +BuildRequires: pkgconfig(alsa) +BuildRequires: pkgconfig(dri) +BuildRequires: pkgconfig(freetype2) BuildRequires: pkgconfig(gtk+-3.0) BuildRequires: pkgconfig(krb5) -BuildRequires: pkgconfig(pango) -BuildRequires: pkgconfig(freetype2) >= %{freetype_version} -BuildRequires: pkgconfig(xt) -BuildRequires: pkgconfig(xrender) -BuildRequires: pkgconfig(libstartup-notification-1.0) -BuildRequires: pkgconfig(libnotify) >= %{libnotify_version} -BuildRequires: pkgconfig(dri) BuildRequires: pkgconfig(libcurl) -BuildRequires: pkgconfig(alsa) -BuildRequires: dbus-glib-devel -%if %{?system_av1} -BuildRequires: pkgconfig(aom) >= %{aom_version} -BuildRequires: pkgconfig(dav1d) >= %{dav1d_version} -%endif -%if %{?system_libvpx} -BuildRequires: libvpx-devel >= %{libvpx_version} -%endif -%if %{?system_webp} -BuildRequires: pkgconfig(libwebp) >= %{libwebp_version} -BuildRequires: pkgconfig(libwebpdemux) >= %{libwebp_version} -%endif -BuildRequires: autoconf213 +BuildRequires: pkgconfig(libffi) +BuildRequires: pkgconfig(libnotify) +BuildRequires: pkgconfig(libpng) BuildRequires: pkgconfig(libpulse) -BuildRequires: yasm -BuildRequires: llvm -BuildRequires: llvm-devel -BuildRequires: clang -BuildRequires: clang-libs -%if %{build_with_clang} -BuildRequires: lld +BuildRequires: pkgconfig(libstartup-notification-1.0) +BuildRequires: pkgconfig(pango) +BuildRequires: pkgconfig(xrender) +BuildRequires: pkgconfig(xt) +BuildRequires: pkgconfig(xtst) +BuildRequires: pkgconfig(zlib) +BuildRequires: zip + +%if 0%{?rhel} == 7 +%if 0%{?use_python3_scl} +BuildRequires: rh-python38-python-devel +BuildRequires: rh-python38-python-setuptools +BuildRequires: scl-utils %endif - -BuildRequires: pipewire-devel - -%if !0%{?use_bundled_cbindgen} -BuildRequires: cbindgen -%endif -BuildRequires: nodejs -BuildRequires: nasm >= 1.13 -BuildRequires: libappstream-glib - -%if 0%{?big_endian} -BuildRequires: icu -%endif - -Requires: mozilla-filesystem -Recommends: mozilla-openh264 >= 2.1.1 -%if %{with langpacks_subpkg} -Recommends: firefox-langpacks = %{version}-%{release} +BuildRequires: findutils %else -Obsoletes: firefox-langpacks < %{version}-%{release} +BuildRequires: pipewire-devel %endif -Recommends: libva -Requires: p11-kit-trust -Requires: pciutils-libs -%if %{?system_nss} -Requires: nspr >= %{nspr_build_version} -Requires: nss >= %{nss_build_version} -%endif -%if %{?system_libevent} -BuildRequires: pkgconfig(libevent) + +%if 0%{?rhel} == 8 +BuildRequires: cargo +BuildRequires: clang-devel >= %{llvm_version} +BuildRequires: clang >= %{llvm_version} +BuildRequires: llvm-devel >= %{llvm_version} +BuildRequires: llvm >= %{llvm_version} + %if 0%{?disable_toolsets} == 0 +BuildRequires: python38-devel +BuildRequires: python38-setuptools + %endif +BuildRequires: rustfmt >= %{rust_version} +BuildRequires: rust >= %{rust_version} %endif + +%if 0%{?rhel} == 9 +BuildRequires: cargo +BuildRequires: clang clang-libs llvm llvm-devel +BuildRequires: gcc +BuildRequires: gcc-c++ BuildRequires: python3-devel BuildRequires: python3-setuptools -BuildRequires: python3.11-devel -%if !0%{?flatpak} -Requires: u2f-hidraw-policy -%endif -%if %{?use_xdg_file_portal} -Requires: xdg-desktop-portal +BuildRequires: rust +%endif + +%if 0%{?use_dts} +BuildRequires: devtoolset-%{dts_version}-gcc +BuildRequires: devtoolset-%{dts_version}-gcc-c++ +BuildRequires: devtoolset-%{dts_version}-libatomic-devel +%endif + +%if 0%{?use_llvm_ts} +BuildRequires: llvm-toolset-%{llvm_version} +BuildRequires: llvm-toolset-%{llvm_version}-clang +BuildRequires: llvm-toolset-%{llvm_version}-clang-devel +BuildRequires: llvm-toolset-%{llvm_version}-llvm-devel +%endif + +%if 0%{?use_rust_ts} +BuildRequires: rust-toolset-%{rust_version} +%endif + +# Bundled nss/nspr requirement +%if 0%{?bundle_nss} +BuildRequires: gawk +BuildRequires: gcc-c++ +BuildRequires: nss-softokn +BuildRequires: perl-interpreter +BuildRequires: pkgconfig +BuildRequires: psmisc +BuildRequires: sqlite-devel +BuildRequires: xmlto +BuildRequires: zlib-devel %endif -BuildRequires: desktop-file-utils %if !0%{?flatpak} +#TODO BuildRequires: system-bookmarks %endif -%if %{?system_ffi} -BuildRequires: pkgconfig(libffi) + +%if 0%{?test_on_wayland} +BuildRequires: dbus-x11 +BuildRequires: gnome-keyring +BuildRequires: gnome-settings-daemon +BuildRequires: gsettings-desktop-schemas +BuildRequires: mesa-dri-drivers +BuildRequires: mutter +BuildRequires: xorg-x11-server-Xwayland %endif -%if 0%{?use_xvfb} -BuildRequires: xorg-x11-server-Xvfb -%endif -BuildRequires: rust -BuildRequires: cargo -BuildRequires: clang-devel -%if %{build_with_asan} -BuildRequires: libasan -BuildRequires: libasan-static -%endif -BuildRequires: perl-interpreter -BuildRequires: fdk-aac-free-devel -%if 0%{?test_on_wayland} -BuildRequires: mutter -BuildRequires: gsettings-desktop-schemas -BuildRequires: gnome-settings-daemon -BuildRequires: mesa-dri-drivers -BuildRequires: xorg-x11-server-Xwayland -BuildRequires: dbus-x11 -BuildRequires: gnome-keyring -%endif %if 0%{?run_firefox_tests} -BuildRequires: procps-ng -BuildRequires: nss-tools -BuildRequires: python2.7 -BuildRequires: dejavu-sans-mono-fonts -BuildRequires: dejavu-sans-fonts -BuildRequires: dejavu-serif-fonts +BuildRequires: abattis-cantarell-fonts BuildRequires: dbus-x11 +BuildRequires: dejavu-sans-fonts +BuildRequires: dejavu-sans-mono-fonts +BuildRequires: dejavu-serif-fonts BuildRequires: gnome-keyring -BuildRequires: mesa-dri-drivers -# ---------------------------------------- +BuildRequires: google-carlito-fonts +BuildRequires: google-droid-sans-fonts +BuildRequires: google-noto-cjk-fonts-common +BuildRequires: google-noto-emoji-color-fonts +BuildRequires: google-noto-fonts-common +BuildRequires: google-noto-sans-cjk-ttc-fonts +BuildRequires: google-noto-sans-fonts +BuildRequires: google-noto-sans-gurmukhi-fonts +BuildRequires: google-noto-sans-sinhala-vf-fonts +BuildRequires: jomolhari-fonts +BuildRequires: khmeros-base-fonts BuildRequires: liberation-fonts-common BuildRequires: liberation-mono-fonts BuildRequires: liberation-sans-fonts BuildRequires: liberation-serif-fonts -# ---------------------------------- -BuildRequires: google-carlito-fonts -BuildRequires: google-droid-sans-fonts -BuildRequires: google-noto-fonts-common -BuildRequires: google-noto-cjk-fonts-common -BuildRequires: google-noto-sans-cjk-ttc-fonts -BuildRequires: google-noto-sans-gurmukhi-fonts -BuildRequires: google-noto-sans-fonts -BuildRequires: google-noto-emoji-color-fonts -BuildRequires: google-noto-sans-sinhala-vf-fonts -# ----------------------------------- -BuildRequires: thai-scalable-fonts-common -BuildRequires: thai-scalable-waree-fonts -BuildRequires: khmeros-base-fonts -BuildRequires: jomolhari-fonts -# ---------------------------------- BuildRequires: lohit-tamil-fonts BuildRequires: lohit-telugu-fonts -# ---------------------------------- +BuildRequires: mesa-dri-drivers +BuildRequires: nss-tools BuildRequires: paktype-naskh-basic-fonts +BuildRequires: procps-ng BuildRequires: pt-sans-fonts -BuildRequires: smc-meera-fonts +#BuildRequires: smc-meera-fonts BuildRequires: stix-fonts -BuildRequires: abattis-cantarell-fonts +BuildRequires: thai-scalable-fonts-common +BuildRequires: thai-scalable-waree-fonts BuildRequires: xorg-x11-fonts-ISO8859-1-100dpi BuildRequires: xorg-x11-fonts-misc +BuildRequires: xorg-x11-server-Xvfb %endif -BuildRequires: make -BuildRequires: pciutils-libs -BuildRequires: mesa-libgbm-devel -BuildRequires: libproxy-devel -# Required for --enable-replace-malloc -%if %{enable_replace_malloc} -BuildRequires: libstdc++-static + +%if 0%{?rhel} == 8 && %{rhel_minor_version} < 6 + %ifarch aarch64 +BuildRequires: gcc-toolset-12-gcc-plugin-annobin + %endif +%endif + +Requires: mozilla-filesystem +Requires: p11-kit-trust +Requires: pciutils-libs +Requires: redhat-indexhtml + +%if %{?system_nss} && !0%{?bundle_nss} +Requires: nspr >= %{nspr_version} +Requires: nss >= %{nss_version} %endif Obsoletes: mozilla <= 37:1.7.13 Provides: webclient -# Don't ship firefox-x11 and firefox-wayland on Fedora 40. -# Wayland backend is considered as mature enough now. -%if 0%{?fedora} >= 40 -Obsoletes: firefox-wayland < 122.0-2 -Obsoletes: firefox-x11 < 122.0-2 +# Bundled libraries +#Provides: bundled(libjxl) it's used only on nightly builds +Provides: bundled(angle) +Provides: bundled(aom) +Provides: bundled(audioipc-2) +Provides: bundled(bergamot-translator) +Provides: bundled(brotli) +Provides: bundled(bsdiff) +Provides: bundled(cairo) +Provides: bundled(cfworker) +Provides: bundled(cld2) +Provides: bundled(cubeb) +Provides: bundled(d3.js) +Provides: bundled(double-conversion) +Provides: bundled(expat) +Provides: bundled(fastText) +Provides: bundled(fathom) +Provides: bundled(fdlibm) +Provides: bundled(ffvpx) +Provides: bundled(freetype2) +Provides: bundled(function2) +Provides: bundled(gemmology) +Provides: bundled(graphite2) +Provides: bundled(harfbuzz) +Provides: bundled(highway) +Provides: bundled(hunspell) +Provides: bundled(intgemm) +Provides: bundled(irregexp) +Provides: bundled(jpeg-xl) +Provides: bundled(kissfft) +Provides: bundled(libaom) +Provides: bundled(libcubeb) +Provides: bundled(libdav1d) +Provides: bundled(libdrm) +Provides: bundled(libepoxy) +Provides: bundled(libgbm) +Provides: bundled(libjpeg) +Provides: bundled(libmar) +Provides: bundled(libmkv) +Provides: bundled(libnestegg) +Provides: bundled(libogg) +Provides: bundled(libopus) +Provides: bundled(libpng) +Provides: bundled(libprio) +Provides: bundled(libsoundtouch) +Provides: bundled(libspeex_resampler) +Provides: bundled(libsrtp) +Provides: bundled(libtheora) +Provides: bundled(libtremor) +Provides: bundled(libvorbis) +Provides: bundled(libvpx) +Provides: bundled(libwebp) +Provides: bundled(libwebrtc) +Provides: bundled(libyuv) +Provides: bundled(lit) +Provides: bundled(mp4parse-rust) +Provides: bundled(msgpack-c) +Provides: bundled(mtransport) +Provides: bundled(nestegg) +Provides: bundled(nICEr) +Provides: bundled(nimbus) +Provides: bundled(openmax_dl) +Provides: bundled(openmax_il) +Provides: bundled(ots) +Provides: bundled(pdf.js) +Provides: bundled(picosha2) +Provides: bundled(PKI) +Provides: bundled(qcms) +Provides: bundled(rlbox) +Provides: bundled(rlbox_sandboxing_api) +Provides: bundled(rlbox_wasm2c_sandbox) +Provides: bundled(sfntly) +Provides: bundled(sipcc) +Provides: bundled(skia) +Provides: bundled(soundtouch) +Provides: bundled(sqlite3) +Provides: bundled(thebes) +Provides: bundled(theora) +Provides: bundled(usrsctp) +Provides: bundled(wabt) +Provides: bundled(wasm2c) +Provides: bundled(WebRender) +Provides: bundled(wgpu) +Provides: bundled(woff2) +Provides: bundled(xsimd) +Provides: bundled(xz-embedded) +Provides: bundled(ycbcr) +Provides: bundled(zlib) + +%if 0%{?bundle_nss} +Provides: bundled(nss) = %{nss_version} +Provides: bundled(nspr) = %{nspr_version} %endif +# Rust third parties: +# List obtained by `get_rust_bundled_provides.sh build.log` script:: +Provides: bundled(crate(aa-stroke)) = 0.1.0 +Provides: bundled(crate(adler)) = 1.0.2 +Provides: bundled(crate(ahash)) = 0.7.6 +Provides: bundled(crate(aho-corasick)) = 0.7.20 +Provides: bundled(crate(alsa)) = 0.7.0 +Provides: bundled(crate(alsa-sys)) = 0.3.1 +Provides: bundled(crate(anyhow)) = 1.0.69 +Provides: bundled(crate(app_services_logger)) = 0.1.0 +Provides: bundled(crate(app_units)) = 0.7.2 +Provides: bundled(crate(arrayref)) = 0.3.6 +Provides: bundled(crate(arrayvec)) = 0.7.2 +Provides: bundled(crate(ash)) = 0.37.2+1.3.238 +Provides: bundled(crate(askama)) = 0.11.1 +Provides: bundled(crate(askama_derive)) = 0.11.2 +Provides: bundled(crate(askama_escape)) = 0.10.3 +Provides: bundled(crate(askama_shared)) = 0.12.2 +Provides: bundled(crate(async-task)) = 4.3.0 +Provides: bundled(crate(async-trait)) = 0.1.64 +Provides: bundled(crate(atomic_refcell)) = 0.1.9 +Provides: bundled(crate(audioipc2)) = 0.5.0 +Provides: bundled(crate(audioipc2-client)) = 0.5.0 +Provides: bundled(crate(audioipc2-server)) = 0.5.0 +Provides: bundled(crate(audio_thread_priority)) = 0.26.1 +Provides: bundled(crate(authenticator)) = 0.4.0-alpha.15 +Provides: bundled(crate(authrs_bridge)) = 0.1.0 +Provides: bundled(crate(autocfg)) = 1.1.0 +Provides: bundled(crate(base64)) = 0.13.999 +Provides: bundled(crate(base64)) = 0.21.0 +Provides: bundled(crate(bhttp)) = 0.3.1 +Provides: bundled(crate(binary_http)) = 0.1.0 +Provides: bundled(crate(bincode)) = 1.3.3 +Provides: bundled(crate(bindgen)) = 0.63.999 +Provides: bundled(crate(bindgen)) = 0.64.0 +Provides: bundled(crate(bitflags)) = 1.3.2 +Provides: bundled(crate(bitflags)) = 2.999.999 +Provides: bundled(crate(bitreader)) = 0.3.6 +Provides: bundled(crate(bit-set)) = 0.5.3 +Provides: bundled(crate(bit-vec)) = 0.6.3 +Provides: bundled(crate(block-buffer)) = 0.10.3 +Provides: bundled(crate(bookmark_sync)) = 0.1.0 +Provides: bundled(crate(build-parallel)) = 0.1.2 +Provides: bundled(crate(builtins-static)) = 0.1.0 +Provides: bundled(crate(byteorder)) = 1.4.3 +Provides: bundled(crate(bytes)) = 1.4.0 +Provides: bundled(crate(cache-padded)) = 1.2.0 +Provides: bundled(crate(camino)) = 1.1.2 +Provides: bundled(crate(cargo_metadata)) = 0.15.3 +Provides: bundled(crate(cargo-platform)) = 0.1.2 +Provides: bundled(crate(cascade_bloom_filter)) = 0.1.0 +Provides: bundled(crate(cc)) = 1.0.73 +Provides: bundled(crate(cert_storage)) = 0.0.1 +Provides: bundled(crate(cexpr)) = 0.6.0 +Provides: bundled(crate(cfg-if)) = 0.1.999 +Provides: bundled(crate(cfg-if)) = 1.0.0 +Provides: bundled(crate(chardetng)) = 0.1.9 +Provides: bundled(crate(chardetng_c)) = 0.1.2 +Provides: bundled(crate(chrono)) = 0.4.19 +Provides: bundled(crate(chunky-vec)) = 0.1.0 +Provides: bundled(crate(clang-sys)) = 1.6.0 +Provides: bundled(crate(cmake)) = 0.1.999 +Provides: bundled(crate(codespan-reporting)) = 0.11.1 +Provides: bundled(crate(cose)) = 0.1.4 +Provides: bundled(crate(cose-c)) = 0.1.5 +Provides: bundled(crate(cpufeatures)) = 0.2.5 +Provides: bundled(crate(crc32fast)) = 1.3.2 +Provides: bundled(crate(crossbeam-channel)) = 0.5.6 +Provides: bundled(crate(crossbeam-deque)) = 0.8.2 +Provides: bundled(crate(crossbeam-epoch)) = 0.9.14 +Provides: bundled(crate(crossbeam-queue)) = 0.3.8 +Provides: bundled(crate(crossbeam-utils)) = 0.8.14 +Provides: bundled(crate(crypto-common)) = 0.1.6 +Provides: bundled(crate(crypto_hash)) = 0.1.0 +Provides: bundled(crate(cssparser)) = 0.31.0 +Provides: bundled(crate(cssparser-macros)) = 0.6.0 +Provides: bundled(crate(cstr)) = 0.2.11 +Provides: bundled(crate(cty)) = 0.2.2 +Provides: bundled(crate(cubeb)) = 0.10.3 +Provides: bundled(crate(cubeb-backend)) = 0.10.3 +Provides: bundled(crate(cubeb-core)) = 0.10.3 +Provides: bundled(crate(cubeb-pulse)) = 0.4.1 +Provides: bundled(crate(cubeb-sys)) = 0.10.3 +Provides: bundled(crate(dap_ffi)) = 0.1.0 +Provides: bundled(crate(darling)) = 0.13.99 +Provides: bundled(crate(darling)) = 0.14.3 +Provides: bundled(crate(darling_core)) = 0.14.3 +Provides: bundled(crate(darling_macro)) = 0.14.3 +Provides: bundled(crate(data-encoding)) = 2.3.3 +Provides: bundled(crate(data-encoding-ffi)) = 0.1.0 +Provides: bundled(crate(dbus)) = 0.6.5 +Provides: bundled(crate(derive_common)) = 0.0.1 +Provides: bundled(crate(derive_more)) = 0.99.17 +Provides: bundled(crate(digest)) = 0.10.6 +Provides: bundled(crate(dirs)) = 4.0.0 +Provides: bundled(crate(dirs-sys)) = 0.3.7 +Provides: bundled(crate(displaydoc)) = 0.2.3 +Provides: bundled(crate(dns-parser)) = 0.8.0 +Provides: bundled(crate(dogear)) = 0.5.0 +Provides: bundled(crate(dom)) = 0.1.0 +Provides: bundled(crate(dtoa)) = 0.4.8 +Provides: bundled(crate(dtoa-short)) = 0.3.3 +Provides: bundled(crate(either)) = 1.8.1 +Provides: bundled(crate(encoding_c)) = 0.9.8 +Provides: bundled(crate(encoding_c_mem)) = 0.2.6 +Provides: bundled(crate(encoding_glue)) = 0.1.0 +Provides: bundled(crate(encoding_rs)) = 0.8.32 +Provides: bundled(crate(enumset)) = 1.0.12 +Provides: bundled(crate(enumset_derive)) = 0.6.1 +Provides: bundled(crate(env_logger)) = 0.10.0 +Provides: bundled(crate(env_logger)) = 0.9.999 +Provides: bundled(crate(error-chain)) = 0.12.4 +Provides: bundled(crate(error-support)) = 0.1.0 +Provides: bundled(crate(error-support-macros)) = 0.1.0 +Provides: bundled(crate(etagere)) = 0.2.7 +Provides: bundled(crate(euclid)) = 0.22.7 +Provides: bundled(crate(fallible_collections)) = 0.4.6 +Provides: bundled(crate(fallible-iterator)) = 0.2.0 +Provides: bundled(crate(fallible-streaming-iterator)) = 0.1.9 +Provides: bundled(crate(fastrand)) = 1.9.0 +Provides: bundled(crate(ffi-support)) = 0.4.4 +Provides: bundled(crate(firefox-on-glean)) = 0.1.0 +Provides: bundled(crate(flate2)) = 1.0.25 +Provides: bundled(crate(fluent)) = 0.16.0 +Provides: bundled(crate(fluent-bundle)) = 0.15.2 +Provides: bundled(crate(fluent-fallback)) = 0.7.0 +Provides: bundled(crate(fluent-ffi)) = 0.1.0 +Provides: bundled(crate(fluent-langneg)) = 0.13.0 +Provides: bundled(crate(fluent-langneg-ffi)) = 0.1.0 +Provides: bundled(crate(fluent-pseudo)) = 0.3.1 +Provides: bundled(crate(fluent-syntax)) = 0.11.0 +Provides: bundled(crate(fnv)) = 1.0.7 +Provides: bundled(crate(fog_control)) = 0.1.0 +Provides: bundled(crate(freetype)) = 0.7.0 +Provides: bundled(crate(fs-err)) = 2.9.0 +Provides: bundled(crate(futures)) = 0.3.26 +Provides: bundled(crate(futures-channel)) = 0.3.26 +Provides: bundled(crate(futures-core)) = 0.3.26 +Provides: bundled(crate(futures-executor)) = 0.3.26 +Provides: bundled(crate(futures-io)) = 0.3.26 +Provides: bundled(crate(futures-macro)) = 0.3.26 +Provides: bundled(crate(futures-sink)) = 0.3.26 +Provides: bundled(crate(futures-task)) = 0.3.26 +Provides: bundled(crate(futures-util)) = 0.3.26 +Provides: bundled(crate(fxhash)) = 0.2.1 +Provides: bundled(crate(gecko_logger)) = 0.1.0 +Provides: bundled(crate(gecko-profiler)) = 0.1.0 +Provides: bundled(crate(geckoservo)) = 0.0.1 +Provides: bundled(crate(generic-array)) = 0.14.6 +Provides: bundled(crate(getrandom)) = 0.2.9 +Provides: bundled(crate(gkrust)) = 0.1.0 +Provides: bundled(crate(gkrust-shared)) = 0.1.0 +Provides: bundled(crate(gkrust_utils)) = 0.1.0 +Provides: bundled(crate(gleam)) = 0.15.0 +Provides: bundled(crate(glean)) = 52.7.0 +Provides: bundled(crate(glean-core)) = 52.7.0 +Provides: bundled(crate(gl_generator)) = 0.14.0 +Provides: bundled(crate(glob)) = 0.3.1 +Provides: bundled(crate(glsl)) = 6.0.2 +Provides: bundled(crate(glslopt)) = 0.1.9 +Provides: bundled(crate(glsl-to-cxx)) = 0.1.0 +Provides: bundled(crate(goblin)) = 0.6.0 +Provides: bundled(crate(golden_gate)) = 0.1.0 +Provides: bundled(crate(gpu-alloc)) = 0.5.3 +Provides: bundled(crate(gpu-alloc-types)) = 0.2.0 +Provides: bundled(crate(gpu-descriptor)) = 0.2.3 +Provides: bundled(crate(gpu-descriptor-types)) = 0.1.1 +Provides: bundled(crate(half)) = 1.8.2 +Provides: bundled(crate(hashbrown)) = 0.12.3 +Provides: bundled(crate(hashlink)) = 0.8.1 +Provides: bundled(crate(heck)) = 0.4.1 +Provides: bundled(crate(hex)) = 0.4.3 +Provides: bundled(crate(hexf-parse)) = 0.2.1 +Provides: bundled(crate(http_sfv)) = 0.1.0 +Provides: bundled(crate(id-arena)) = 2.2.1 +Provides: bundled(crate(ident_case)) = 1.0.1 +Provides: bundled(crate(idna)) = 0.2.3 +Provides: bundled(crate(indexmap)) = 1.9.2 +Provides: bundled(crate(inherent)) = 1.0.4 +Provides: bundled(crate(instant)) = 0.1.12 +Provides: bundled(crate(interrupt-support)) = 0.1.0 +Provides: bundled(crate(intl-memoizer)) = 0.5.1 +Provides: bundled(crate(intl_pluralrules)) = 7.0.2 +Provides: bundled(crate(iovec)) = 0.1.4 +Provides: bundled(crate(ipcclientcerts-static)) = 0.1.0 +Provides: bundled(crate(itertools)) = 0.10.5 +Provides: bundled(crate(itoa)) = 1.0.5 +Provides: bundled(crate(jobserver)) = 0.1.25 +Provides: bundled(crate(jog)) = 0.1.0 +Provides: bundled(crate(jsrust)) = 0.1.0 +Provides: bundled(crate(jsrust_shared)) = 0.1.0 +Provides: bundled(crate(khronos_api)) = 3.1.0 +Provides: bundled(crate(kvstore)) = 0.1.0 +Provides: bundled(crate(l10nregistry)) = 0.3.0 +Provides: bundled(crate(l10nregistry-ffi)) = 0.1.0 +Provides: bundled(crate(lazycell)) = 1.3.0 +Provides: bundled(crate(lazy_static)) = 1.4.0 +Provides: bundled(crate(leb128)) = 0.2.5 +Provides: bundled(crate(libc)) = 0.2.139 +Provides: bundled(crate(libdbus-sys)) = 0.2.2 +Provides: bundled(crate(libloading)) = 0.7.4 +Provides: bundled(crate(libsqlite3-sys)) = 0.25.2 +Provides: bundled(crate(libudev)) = 0.2.0 +Provides: bundled(crate(libudev-sys)) = 0.1.3 +Provides: bundled(crate(lmdb-rkv)) = 0.14.0 +Provides: bundled(crate(lmdb-rkv-sys)) = 0.11.2 +Provides: bundled(crate(localization-ffi)) = 0.1.0 +Provides: bundled(crate(lock_api)) = 0.4.9 +Provides: bundled(crate(log)) = 0.4.17 +Provides: bundled(crate(malloc_size_of)) = 0.0.1 +Provides: bundled(crate(malloc_size_of_derive)) = 0.1.2 +Provides: bundled(crate(mapped_hyph)) = 0.4.3 +Provides: bundled(crate(matches)) = 0.1.10 +Provides: bundled(crate(md-5)) = 0.10.5 +Provides: bundled(crate(mdns_service)) = 0.1.1 +Provides: bundled(crate(memalloc)) = 0.1.0 +Provides: bundled(crate(memchr)) = 2.5.0 +Provides: bundled(crate(memmap2)) = 0.5.9 +Provides: bundled(crate(memoffset)) = 0.8.0 +Provides: bundled(crate(midir)) = 0.7.0 +Provides: bundled(crate(midir_impl)) = 0.1.0 +Provides: bundled(crate(mime)) = 0.3.16 +Provides: bundled(crate(mime_guess)) = 2.0.4 +Provides: bundled(crate(mime-guess-ffi)) = 0.1.0 +Provides: bundled(crate(minimal-lexical)) = 0.2.1 +Provides: bundled(crate(miniz_oxide)) = 0.6.2 +Provides: bundled(crate(mio)) = 0.8.0 +Provides: bundled(crate(moz_asserts)) = 0.1.0 +Provides: bundled(crate(mozbuild)) = 0.1.0 +Provides: bundled(crate(moz_cbor)) = 0.1.2 +Provides: bundled(crate(mozglue-static)) = 0.1.0 +Provides: bundled(crate(mozilla-central-workspace-hack)) = 0.1.0 +Provides: bundled(crate(moz_task)) = 0.1.0 +Provides: bundled(crate(mozurl)) = 0.0.1 +Provides: bundled(crate(mp4parse)) = 0.17.0 +Provides: bundled(crate(mp4parse_capi)) = 0.17.0 +Provides: bundled(crate(murmurhash3)) = 0.0.5 +Provides: bundled(crate(naga)) = 0.12.0 +Provides: bundled(crate(neqo-common)) = 0.6.4 +Provides: bundled(crate(neqo-crypto)) = 0.6.4 +Provides: bundled(crate(neqo_glue)) = 0.1.0 +Provides: bundled(crate(neqo-http3)) = 0.6.4 +Provides: bundled(crate(neqo-qpack)) = 0.6.4 +Provides: bundled(crate(neqo-transport)) = 0.6.4 +Provides: bundled(crate(netwerk_helper)) = 0.0.1 +Provides: bundled(crate(new_debug_unreachable)) = 1.0.4 +Provides: bundled(crate(nix)) = 0.24.99 +Provides: bundled(crate(nix)) = 0.26.2 +Provides: bundled(crate(nom)) = 7.1.3 +Provides: bundled(crate(nserror)) = 0.1.0 +Provides: bundled(crate(nss_build_common)) = 0.1.0 +Provides: bundled(crate(nss-gk-api)) = 0.2.1 +Provides: bundled(crate(nsstring)) = 0.1.0 +Provides: bundled(crate(num_cpus)) = 1.15.0 +Provides: bundled(crate(num-derive)) = 0.3.3 +Provides: bundled(crate(num-integer)) = 0.1.45 +Provides: bundled(crate(num-traits)) = 0.2.15 +Provides: bundled(crate(object)) = 0.30.3 +Provides: bundled(crate(oblivious_http)) = 0.1.0 +Provides: bundled(crate(ohttp)) = 0.3.1 +Provides: bundled(crate(once_cell)) = 1.17.1 +Provides: bundled(crate(ordered-float)) = 3.4.0 +Provides: bundled(crate(origin-trials-ffi)) = 0.1.0 +Provides: bundled(crate(origin-trial-token)) = 0.1.1 +Provides: bundled(crate(owning_ref)) = 0.4.1 +Provides: bundled(crate(parking_lot)) = 0.11.2 +Provides: bundled(crate(parking_lot)) = 0.12.999 +Provides: bundled(crate(parking_lot_core)) = 0.8.6 +Provides: bundled(crate(paste)) = 1.0.11 +Provides: bundled(crate(peeking_take_while)) = 0.1.2 +Provides: bundled(crate(peek-poke)) = 0.3.0 +Provides: bundled(crate(peek-poke-derive)) = 0.3.0 +Provides: bundled(crate(percent-encoding)) = 2.2.0 +Provides: bundled(crate(phf)) = 0.10.1 +Provides: bundled(crate(phf_codegen)) = 0.10.0 +Provides: bundled(crate(phf_generator)) = 0.10.0 +Provides: bundled(crate(phf_macros)) = 0.10.0 +Provides: bundled(crate(phf_shared)) = 0.10.0 +Provides: bundled(crate(pin-project-lite)) = 0.2.9 +Provides: bundled(crate(pin-utils)) = 0.1.0 +Provides: bundled(crate(pkcs11-bindings)) = 0.1.5 +Provides: bundled(crate(pkg-config)) = 0.3.26 +Provides: bundled(crate(plain)) = 0.2.3 +Provides: bundled(crate(plane-split)) = 0.18.0 +Provides: bundled(crate(ppv-lite86)) = 0.2.17 +Provides: bundled(crate(precomputed-hash)) = 0.1.1 +Provides: bundled(crate(prefs_parser)) = 0.0.1 +Provides: bundled(crate(prio)) = 0.9.1 +Provides: bundled(crate(processtools)) = 0.1.0 +Provides: bundled(crate(proc-macro2)) = 1.0.51 +Provides: bundled(crate(proc-macro-hack)) = 0.5.20+deprecated +Provides: bundled(crate(profiler_helper)) = 0.1.0 +Provides: bundled(crate(profiler-macros)) = 0.1.0 +Provides: bundled(crate(profiling)) = 1.0.7 +Provides: bundled(crate(prost)) = 0.8.0 +Provides: bundled(crate(prost-derive)) = 0.8.0 +Provides: bundled(crate(pulse)) = 0.3.0 +Provides: bundled(crate(pulse-ffi)) = 0.1.0 +Provides: bundled(crate(qcms)) = 0.2.0 +Provides: bundled(crate(qlog)) = 0.4.0 +Provides: bundled(crate(quick-error)) = 1.2.3 +Provides: bundled(crate(quote)) = 1.0.23 +Provides: bundled(crate(rand)) = 0.8.5 +Provides: bundled(crate(rand_chacha)) = 0.3.1 +Provides: bundled(crate(rand_core)) = 0.6.4 +Provides: bundled(crate(raw-window-handle)) = 0.5.0 +Provides: bundled(crate(rayon)) = 1.6.1 +Provides: bundled(crate(rayon-core)) = 1.10.2 +Provides: bundled(crate(regex)) = 1.7.1 +Provides: bundled(crate(regex-syntax)) = 0.6.28 +Provides: bundled(crate(remove_dir_all)) = 0.5.3 +Provides: bundled(crate(replace_with)) = 0.1.7 +Provides: bundled(crate(ringbuf)) = 0.2.8 +Provides: bundled(crate(rkv)) = 0.18.4 +Provides: bundled(crate(ron)) = 0.8.0 +Provides: bundled(crate(rsclientcerts)) = 0.1.0 +Provides: bundled(crate(rsdparsa_capi)) = 0.1.0 +Provides: bundled(crate(runloop)) = 0.1.0 +Provides: bundled(crate(rure)) = 0.2.2 +Provides: bundled(crate(rusqlite)) = 0.28.0 +Provides: bundled(crate(rust_cascade)) = 1.5.0 +Provides: bundled(crate(rustc-demangle)) = 0.1.21 +Provides: bundled(crate(rustc-hash)) = 1.1.0 +Provides: bundled(crate(rustc_version)) = 0.4.0 +Provides: bundled(crate(rust_decimal)) = 1.28.1 +Provides: bundled(crate(ryu)) = 1.0.12 +Provides: bundled(crate(same-file)) = 1.0.6 +Provides: bundled(crate(scopeguard)) = 1.1.0 +Provides: bundled(crate(scroll)) = 0.11.0 +Provides: bundled(crate(scroll_derive)) = 0.11.0 +Provides: bundled(crate(selectors)) = 0.22.0 +Provides: bundled(crate(self_cell)) = 0.10.2 +Provides: bundled(crate(semver)) = 1.0.16 +Provides: bundled(crate(serde)) = 1.0.152 +Provides: bundled(crate(serde_bytes)) = 0.11.9 +Provides: bundled(crate(serde_cbor)) = 0.11.2 +Provides: bundled(crate(serde_derive)) = 1.0.152 +Provides: bundled(crate(serde_json)) = 1.0.93 +Provides: bundled(crate(serde_with)) = 1.14.0 +Provides: bundled(crate(serde_with_macros)) = 1.5.2 +Provides: bundled(crate(servo_arc)) = 0.1.1 +Provides: bundled(crate(sfv)) = 0.9.3 +Provides: bundled(crate(sha1)) = 0.10.5 +Provides: bundled(crate(sha2)) = 0.10.6 +Provides: bundled(crate(shlex)) = 1.1.0 +Provides: bundled(crate(siphasher)) = 0.3.10 +Provides: bundled(crate(slab)) = 0.4.8 +Provides: bundled(crate(smallbitvec)) = 2.5.1 +Provides: bundled(crate(smallvec)) = 1.10.0 +Provides: bundled(crate(socket2)) = 0.4.7 +Provides: bundled(crate(spirv)) = 0.2.0+1.5.4 +Provides: bundled(crate(sql-support)) = 0.1.0 +Provides: bundled(crate(stable_deref_trait)) = 1.2.0 +Provides: bundled(crate(static_assertions)) = 1.1.0 +Provides: bundled(crate(static_prefs)) = 0.1.0 +Provides: bundled(crate(storage)) = 0.1.0 +Provides: bundled(crate(storage_variant)) = 0.1.0 +Provides: bundled(crate(strsim)) = 0.10.0 +Provides: bundled(crate(style)) = 0.0.1 +Provides: bundled(crate(style_derive)) = 0.0.1 +Provides: bundled(crate(style_traits)) = 0.0.1 +Provides: bundled(crate(svg_fmt)) = 0.4.1 +Provides: bundled(crate(swgl)) = 0.1.0 +Provides: bundled(crate(syn)) = 1.0.107 +Provides: bundled(crate(sync15)) = 0.1.0 +Provides: bundled(crate(sync-guid)) = 0.1.0 +Provides: bundled(crate(synstructure)) = 0.12.6 +Provides: bundled(crate(tabs)) = 0.1.0 +Provides: bundled(crate(tempfile)) = 3.3.0 +Provides: bundled(crate(termcolor)) = 1.2.0 +Provides: bundled(crate(thin-vec)) = 0.2.12 +Provides: bundled(crate(thiserror)) = 1.0.38 +Provides: bundled(crate(thiserror-impl)) = 1.0.38 +Provides: bundled(crate(threadbound)) = 0.1.5 +Provides: bundled(crate(time)) = 0.1.45 +Provides: bundled(crate(tinystr)) = 0.7.1 +Provides: bundled(crate(tinyvec)) = 1.999.999 +Provides: bundled(crate(toml)) = 0.5.11 +Provides: bundled(crate(topological-sort)) = 0.1.0 +Provides: bundled(crate(to_shmem)) = 0.0.1 +Provides: bundled(crate(to_shmem_derive)) = 0.0.1 +Provides: bundled(crate(tracy-rs)) = 0.1.2 +Provides: bundled(crate(typed-arena-nomut)) = 0.1.0 +Provides: bundled(crate(type-map)) = 0.4.0 +Provides: bundled(crate(typenum)) = 1.16.0 +Provides: bundled(crate(uluru)) = 3.0.0 +Provides: bundled(crate(unicase)) = 2.6.0 +Provides: bundled(crate(unic-langid)) = 0.9.1 +Provides: bundled(crate(unic-langid-ffi)) = 0.1.0 +Provides: bundled(crate(unic-langid-impl)) = 0.9.1 +Provides: bundled(crate(unicode-bidi)) = 0.3.8 +Provides: bundled(crate(unicode-ident)) = 1.0.6 +Provides: bundled(crate(unicode-normalization)) = 0.1.22 +Provides: bundled(crate(unicode-segmentation)) = 1.10.0 +Provides: bundled(crate(unicode-width)) = 0.1.10 +Provides: bundled(crate(unicode-xid)) = 0.2.4 +Provides: bundled(crate(uniffi)) = 0.23.0 +Provides: bundled(crate(uniffi_bindgen)) = 0.23.0 +Provides: bundled(crate(uniffi_build)) = 0.23.0 +Provides: bundled(crate(uniffi_checksum_derive)) = 0.23.0 +Provides: bundled(crate(uniffi_core)) = 0.23.0 +Provides: bundled(crate(uniffi_macros)) = 0.23.0 +Provides: bundled(crate(uniffi_meta)) = 0.23.0 +Provides: bundled(crate(uniffi_testing)) = 0.23.0 +Provides: bundled(crate(url)) = 2.1.0 +Provides: bundled(crate(uuid)) = 1.3.0 +Provides: bundled(crate(vcpkg)) = 0.2.999 +Provides: bundled(crate(version_check)) = 0.9.4 +Provides: bundled(crate(viaduct)) = 0.1.0 +Provides: bundled(crate(void)) = 1.0.2 +Provides: bundled(crate(walkdir)) = 2.3.2 +Provides: bundled(crate(wasm-encoder)) = 0.25.0 +Provides: bundled(crate(wast)) = 56.0.0 +Provides: bundled(crate(webext-storage)) = 0.1.0 +Provides: bundled(crate(webext_storage_bridge)) = 0.1.0 +Provides: bundled(crate(webrender)) = 0.62.0 +Provides: bundled(crate(webrender_api)) = 0.62.0 +Provides: bundled(crate(webrender_bindings)) = 0.1.0 +Provides: bundled(crate(webrender_build)) = 0.0.2 +Provides: bundled(crate(webrtc-sdp)) = 0.3.10 +Provides: bundled(crate(weedle2)) = 4.0.0 +Provides: bundled(crate(wgpu_bindings)) = 0.1.0 +Provides: bundled(crate(wgpu-core)) = 0.16.0 +Provides: bundled(crate(wgpu-hal)) = 0.16.0 +Provides: bundled(crate(wgpu-types)) = 0.16.0 +Provides: bundled(crate(whatsys)) = 0.3.1 +Provides: bundled(crate(wpf-gpu-raster)) = 0.1.0 +Provides: bundled(crate(wr_glyph_rasterizer)) = 0.1.0 +Provides: bundled(crate(wr_malloc_size_of)) = 0.0.2 +Provides: bundled(crate(xmldecl)) = 0.2.0 +Provides: bundled(crate(xml-rs)) = 0.8.4 +Provides: bundled(crate(xpcom)) = 0.1.0 +Provides: bundled(crate(xpcom_macros)) = 0.1.0 +Provides: bundled(crate(zeitstempel)) = 0.1.1 + %description Mozilla Firefox is an open-source web browser, designed for standards compliance, performance and portability. -%if %{with langpacks_subpkg} -%package langpacks -Summary: Firefox langpacks -Requires: %{name} = %{version}-%{release} -%description langpacks -The firefox-langpacks package contains all the localization -and translations langpack add-ons. -%files langpacks -f %{name}.lang -%dir %{langpackdir} -%endif - -%if %{enable_mozilla_crashreporter} -%global moz_debug_prefix %{_prefix}/lib/debug -%global moz_debug_dir %{moz_debug_prefix}%{mozappdir} -%global uname_m %(uname -m) -%global symbols_file_name %{name}-%{version}.en-US.%{_os}-%{uname_m}.crashreporter-symbols.zip -%global symbols_file_path %{moz_debug_dir}/%{symbols_file_name} -%global _find_debuginfo_opts %{limit_build -m 32768} -p %{symbols_file_path} -o debugcrashreporter.list -%global crashreporter_pkg_name mozilla-crashreporter-%{name}-debuginfo -%package -n %{crashreporter_pkg_name} -Summary: Debugging symbols used by Mozilla's crash reporter servers -%description -n %{crashreporter_pkg_name} -This package provides debug information for Firefox, for use by -Mozilla's crash reporter servers. If you are trying to locally -debug %{name}, you want to install %{name}-debuginfo instead. -%files -n %{crashreporter_pkg_name} -f debugcrashreporter.list -%else -%global _find_debuginfo_opts %{limit_build -m 32768} -%endif - -%if 0%{?fedora} < 40 -%package x11 -Summary: Firefox X11 launcher. -Requires: %{name} -%description x11 -The firefox-x11 package contains launcher and desktop file -to run Firefox explicitly on X11. -%files x11 -%{_bindir}/firefox-x11 -%{_datadir}/applications/firefox-x11.desktop - -%package wayland -Summary: Firefox Wayland launcher. -Requires: %{name} -%description wayland -The firefox-wayland package contains launcher and desktop file -to run Firefox explicitly on Wayland. -%files wayland -%{_bindir}/firefox-wayland -%{_datadir}/applications/firefox-wayland.desktop -%endif - %if 0%{?run_firefox_tests} %global testsuite_pkg_name %{name}-testresults %package -n %{testsuite_pkg_name} @@ -522,71 +965,94 @@ This package contains results of tests executed during build. /%{version}-%{release}/failures-* %endif +%if 0%{?rhel} >= 9 +%package x11 +Summary: Firefox X11 launcher. +Requires: %{name} = %{version}-%{release} +%description x11 +The firefox-x11 package contains launcher and desktop file +to run Firefox explicitly on X11. +%files x11 +%{_bindir}/firefox-x11 +%{_datadir}/applications/firefox-x11.desktop +%endif + #--------------------------------------------------------------------- %prep -%setup -q -n %{tarballdir} +echo "Build environment" +echo "--------------------------------------------" +echo "dist %{?dist}" +echo "RHEL minor version: %{?rhel_minor_version}" +echo "bundle_nss %{?bundle_nss}" +echo "system_nss %{?system_nss}" +echo "use_rust_ts %{?use_rust_ts}" +echo "use_dts %{?use_dts}" +echo "use_nodejs_scl %{?use_nodejs_scl}" +echo "use_llvm_ts %{?use_llvm_ts}" +echo "use_python3_scl %{?use_python3_scl}" +echo "--------------------------------------------" +%setup -q -n %{name}-%{version} -# Build patches, can't change backup suffix from default because during build -# there is a compare of config and js/config directories and .orig suffix is -# ignored during this compare. +# ---- RHEL specific patches --- +# -- Downstream only -- +%patch -P1 -p1 -b .disable-elfhack +%patch -P2 -p1 -b .firefox-gcc-build +%patch -P3 -p1 -b .build-big-endian-errors +%if 0%{?rhel} == 7 +%patch -P5 -p1 -b .build-rhel7-lower-node-min-version + %ifarch ppc64 + # abiv2 version not available in RHEL7 ppc + # TODO most likely not needed with system nss +%patch -P6 -p1 -b .ppc64-abiv2 + %endif + %ifarch %{ix86} + # -F dwarf not available in RHEL7's nasm +%patch -P7 -p1 -b .build-rhel7-nasm-dwarf + %endif +%endif +%if 0%{?rhel} == 7 || (0%{?rhel} == 8 && %{rhel_minor_version} <= 2) +%patch -P8 -p1 -b .disable-pipewire +%endif +%patch -P9 -p1 -b .rhbz-2131158-webrtc-nss-fix -%patch40 -p1 -b .aarch64-skia -%patch44 -p1 -b .build-arm-libopus -%patch47 -p1 -b .fedora-shebang -%patch53 -p1 -b .firefox-gcc-build -%patch54 -p1 -b .1669639 -%patch71 -p1 -b .0001-GLIBCXX-fix-for-GCC-12 -%patch78 -p1 -b .firefox-i686 -%patch79 -p1 -b .firefox-gcc-13-build +# -- Upstreamed patches -- +%patch -P51 -p1 -b .mozilla-bmo1170092 -# Test patches -#%patch100 -p1 -b .firefox-tests-xpcshell -#%patch101 -p1 -b .firefox-tests-reftest -#%patch102 -p1 -b .firefox-tests-xpcshell-freeze +# -- Submitted upstream, not merged -- +%patch -P101 -p1 -b .mozilla-bmo1636168-fscreen +%patch -P102 -p1 -b .mozilla-bmo1670333 +%patch -P103 -p1 -b .mozilla-bmo1504834-part1 +%patch -P104 -p1 -b .mozilla-bmo1504834-part3 +%patch -P105 -p1 -b .mozilla-bmo849632 +%patch -P106 -p1 -b .mozilla-bmo998749 +%patch -P107 -p1 -b .mozilla-bmo1716707-swizzle +%patch -P108 -p1 -b .mozilla-bmo1716707-svg +%patch -P109 -p1 -b .mozilla-bmo1789216-disable-av1 -# Fedora patches -%patch215 -p1 -b .addons -%patch219 -p1 -b .rhbz-1173156 -#ARM run-time patch +# ---- Fedora specific patches ---- +%patch -P151 -p1 -b .addons +%patch -P152 -p1 -b .rhbz-1173156 +%patch -P153 -p1 -b .fedora-shebang +%patch -P154 -p1 -b .addons-nss-hack +# ARM run-time patch %ifarch aarch64 -%patch226 -p1 -b .1354671 +%patch -P155 -p1 -b .rhbz-1354671 %endif -%patch228 -p1 -b .disable-openh264-download -%patch229 -p1 -b .firefox-nss-addon-hack -%patch230 -p1 -b .firefox-enable-vaapi -%patch231 -p1 -b .fedora-customization -#%patch241 -p1 -b .kde-integration-toolkit -#%patch242 -p1 -b .kde-integration +# ---- Test patches ---- +%patch -P201 -p1 -b .firefox-tests-xpcshell-freeze -%patch402 -p1 -b .1196777 -%patch407 -p1 -b .1667096 -%patch408 -p1 -b .D167159 +# ---- Security patches ---- +cd media/libvpx/libvpx +%patch -P301 -p1 -b .CVE-2023-44488-libvpx +cd - -# PGO patches -%if %{build_with_pgo} -%if !%{build_with_clang} -%patch600 -p1 -b .pgo -%patch602 -p1 -b .1516803 -%endif -%endif -%patch603 -p1 -b .inline - -%patch800 -p1 -b .system-av1 -%patch801 -p1 -b .system-av1-fixup - -%patch1200 -p1 -b .rustflags-commasplit - -rm -f .mozconfig -cp %{SOURCE10} .mozconfig -echo "ac_add_options --enable-default-toolkit=cairo-gtk3-wayland" >> .mozconfig -%if %{official_branding} -echo "ac_add_options --enable-official-branding" >> .mozconfig -%endif -cp %{SOURCE24} mozilla-api-key -cp %{SOURCE27} google-api-key -cp %{SOURCE35} google-loc-api-key +%{__rm} -f .mozconfig +%{__cp} %{SOURCE10} .mozconfig +%{__cp} %{SOURCE24} mozilla-api-key +%{__cp} %{SOURCE27} google-api-key +%{__cp} %{SOURCE35} google-loc-api-key echo "ac_add_options --prefix=\"%{_prefix}\"" >> .mozconfig echo "ac_add_options --libdir=\"%{_libdir}\"" >> .mozconfig @@ -599,26 +1065,14 @@ echo "ac_add_options --without-system-nspr" >> .mozconfig echo "ac_add_options --without-system-nss" >> .mozconfig %endif -%if %{?system_libevent} -echo "ac_add_options --with-system-libevent" >> .mozconfig -%endif - -%if %{?system_ffi} -echo "ac_add_options --enable-system-ffi" >> .mozconfig -%endif - -%ifarch aarch64 -echo "ac_add_options --disable-elf-hack" >> .mozconfig -%endif -%ifarch ppc64le -echo "ac_add_options --disable-webrtc" >> .mozconfig -%endif - %if %{?debug_build} echo "ac_add_options --enable-debug" >> .mozconfig echo "ac_add_options --disable-optimize" >> .mozconfig %else %global optimize_flags "none" +%ifarch s390x +%global optimize_flags "-g -O1" +%endif %ifarch ppc64le aarch64 %global optimize_flags "-g -O2" %endif @@ -635,66 +1089,43 @@ echo "ac_add_options --disable-debug" >> .mozconfig echo "ac_add_options --disable-jemalloc" >> .mozconfig %endif -%if !%{enable_mozilla_crashreporter} -echo "ac_add_options --disable-crashreporter" >> .mozconfig -%endif - %if 0%{?build_tests} echo "ac_add_options --enable-tests" >> .mozconfig %else echo "ac_add_options --disable-tests" >> .mozconfig %endif -%if !%{?system_jpeg} -echo "ac_add_options --without-system-jpeg" >> .mozconfig -%else -echo "ac_add_options --with-system-jpeg" >> .mozconfig -%endif - -%if %{?system_pixman} -echo "ac_add_options --enable-system-pixman" >> .mozconfig -%endif - -%if %{?system_av1} -echo "ac_add_options --with-system-av1" >> .mozconfig -%else -echo "ac_add_options --without-system-av1" >> .mozconfig -%endif - %if %{?system_libvpx} echo "ac_add_options --with-system-libvpx" >> .mozconfig %else echo "ac_add_options --without-system-libvpx" >> .mozconfig %endif -%if %{?system_webp} -echo "ac_add_options --with-system-webp" >> .mozconfig -%else -echo "ac_add_options --without-system-webp" >> .mozconfig -%endif - %ifarch s390x echo "ac_add_options --disable-jit" >> .mozconfig %endif -%if %{build_with_asan} -echo "ac_add_options --enable-address-sanitizer" >> .mozconfig -echo "ac_add_options --disable-jemalloc" >> .mozconfig +%ifarch ppc64 ppc64le +echo "ac_add_options --disable-webrtc" >> .mozconfig +echo "ac_add_options --disable-lto" >> .mozconfig +%endif +echo "ac_add_options --disable-lto" >> .mozconfig + +# AV1 requires newer nasm that was rebased in 8.4 +%if 0%{?rhel} == 7 || (0%{?rhel} == 8 && %{rhel_minor_version} < 4) +echo "ac_add_options --disable-av1" >> .mozconfig %endif # api keys full path echo "ac_add_options --with-mozilla-api-keyfile=`pwd`/mozilla-api-key" >> .mozconfig -# It seems that the api key we have is for the safe browsing only echo "ac_add_options --with-google-location-service-api-keyfile=`pwd`/google-loc-api-key" >> .mozconfig echo "ac_add_options --with-google-safebrowsing-api-keyfile=`pwd`/google-api-key" >> .mozconfig -# https://bugzilla.redhat.com/show_bug.cgi?id=2239046 -# with clang 17 upstream's detection fails, so let's just tell it -# where to look +# May result in empty --with-libclang-path= in earlier versions. +# So far this is needed only for c8s/c9s. +%if (0%{?rhel} == 8 && %{rhel_minor_version} >= 10) || (0%{?rhel} == 9 && %{rhel_minor_version} >= 4) +# Clang 17 upstream's detection fails, tell it where to look. echo "ac_add_options --with-libclang-path=`llvm-config --libdir`" >> .mozconfig - -%if %{enable_replace_malloc} -echo "ac_add_options --enable-replace-malloc" >> .mozconfig %endif echo 'export NODEJS="%{_buildrootdir}/bin/node-stdout-nonblocking-wrapper"' >> .mozconfig @@ -708,14 +1139,121 @@ chmod a-x third_party/rust/ash/src/extensions/nv/*.rs #--------------------------------------------------------------------- %build +# TODO: causes SIGSEGV on the webrender compilation, we might remove it with newer rust version # Disable LTO to work around rhbz#1883904 -# Is that already fixed? %define _lto_cflags %{nil} -%if 0%{?use_bundled_cbindgen} +export PATH="%{_buildrootdir}/bin:$PATH" +# Cleanup buildroot for existing rpms from bundled nss/nspr and other packages +rm -rf %{_buildrootdir}/* + +function install_rpms_to_current_dir() { + PACKAGE_RPM=$(eval echo $1) + PACKAGE_DIR=%{_rpmdir} + + if [ ! -f $PACKAGE_DIR/$PACKAGE_RPM ]; then + # Hack for tps tests + ARCH_STR=%{_arch} + %ifarch %{ix86} + ARCH_STR="i?86" + %endif + PACKAGE_DIR="$PACKAGE_DIR/$ARCH_STR" + fi + + for package in $(ls $PACKAGE_DIR/$PACKAGE_RPM) + do + echo "$package" + rpm2cpio "$package" | cpio -idu + done +} + +%if 0%{?bundle_nss} + rpm -ivh %{SOURCE402} + rpmbuild --nodeps --define '_prefix %{bundled_install_path}' --without=tests -ba %{_specdir}/nspr.spec + pushd %{_buildrootdir} + install_rpms_to_current_dir nspr-4*.rpm + install_rpms_to_current_dir nspr-devel*.rpm + popd + echo "Setting nspr flags" + # nss-setup-flags-env.inc + sed -i 's@%{bundled_install_path}@%{_buildrootdir}%{bundled_install_path}@g' %{_buildrootdir}%{bundled_install_path}/%{_lib}/pkgconfig/nspr*.pc + cat %{_buildrootdir}%{bundled_install_path}/%{_lib}/pkgconfig/nspr*.pc + + export LDFLAGS="-L%{_buildrootdir}%{bundled_install_path}/%{_lib} $LDFLAGS" + export LDFLAGS="-Wl,-rpath,%{bundled_install_path}/%{_lib} $LDFLAGS" + export LDFLAGS="-Wl,-rpath-link,%{_buildrootdir}%{bundled_install_path}/%{_lib} $LDFLAGS" + export PKG_CONFIG_PATH=%{_buildrootdir}%{bundled_install_path}/%{_lib}/pkgconfig + pkg-config --libs-only-L nspr + pkg-config --libs nspr + export PATH="%{_buildrootdir}%{bundled_install_path}/bin:$PATH" + + export PATH=%{_buildrootdir}/%{bundled_install_path}/bin:$PATH + echo $PKG_CONFIG_PATH + +%if 0%{?rhel} == 8 + rpm -ivh %{SOURCE403} +%else + rpm -ivh %{SOURCE404} +%endif + rpmbuild --nodeps --define '_prefix %{bundled_install_path}' --without=tests -ba %{_specdir}/nss.spec + pushd %{_buildrootdir} + #cleanup + install_rpms_to_current_dir nss-3*.rpm + install_rpms_to_current_dir nss-devel*.rpm + install_rpms_to_current_dir nss-pkcs11-devel*.rpm + install_rpms_to_current_dir nss-softokn-3*.rpm + install_rpms_to_current_dir nss-softokn-devel*.rpm + install_rpms_to_current_dir nss-softokn-freebl-3*.rpm + install_rpms_to_current_dir nss-softokn-freebl-devel*.rpm + install_rpms_to_current_dir nss-util-3*.rpm + install_rpms_to_current_dir nss-util-devel*.rpm + popd + %filter_provides_in %{bundled_install_path}/%{_lib} + %filter_requires_in %{bundled_install_path}/%{_lib} + %filter_from_requires /libnss3.so.*/d + %filter_from_requires /libsmime3.so.*/d + %filter_from_requires /libssl3.so.*/d + %filter_from_requires /libnssutil3.so.*/d + %filter_from_requires /libnspr4.so.*/d + find %{_buildrootdir} +%endif + +# Enable toolsets +set +e +%if 0%{?rhel} == 8 && %{rhel_minor_version} < 6 + %ifarch aarch64 +source scl_source enable gcc-toolset-12 + %endif +%endif +%if 0%{?use_dts} +source scl_source enable devtoolset-%{dts_version} +%endif +%if 0%{?use_rust_ts} +source scl_source enable rust-toolset-%{rust_version} +%endif +%if 0%{?use_nodejs_scl} +source scl_source enable rh-nodejs10 +%endif +%if 0%{?use_llvm_ts} +source scl_source enable llvm-toolset-%{llvm_version} +%endif +%if 0%{?use_python3_scl} +source scl_source enable rh-python38 +%endif + +set -e +env +which gcc +which c++ +which g++ +which ld +which nasm +which node +which python3 +# Bundled cbindgen mkdir -p my_rust_vendor cd my_rust_vendor -tar xf %{SOURCE2} +%{__tar} xf %{SOURCE2} mkdir -p .cargo cat > .cargo/config < .cargo/config < 30 +MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -fpermissive" +%endif + +MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -fPIC -Wl,-z,relro -Wl,-z,now" +%if %{?debug_build} +MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-O2//') +%endif + +%ifarch %{ix86} +MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-g/-g0/') export MOZ_DEBUG_FLAGS=" " -MOZ_LINK_FLAGS="%{build_ldflags}" -%if !%{build_with_clang} -%ifarch aarch64 %{ix86} -MOZ_LINK_FLAGS="$MOZ_LINK_FLAGS -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" %endif + +%ifarch s390x aarch64 %{ix86} +MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads" %endif -%ifarch %{ix86} s390x + +%if 0%{?flatpak} +# Make sure the linker can find libraries in /app/lib64 as we don't use +# __global_ldflags that normally sets this. +MOZ_LINK_FLAGS="$MOZ_LINK_FLAGS -L%{_libdir}" +%endif +%ifarch %{ix86} %{s390x} export RUSTFLAGS="-Cdebuginfo=0" +echo 'export RUSTFLAGS="-Cdebuginfo=0"' >> .mozconfig %endif -%if %{build_with_asan} -MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -fsanitize=address -Dxmalloc=myxmalloc" -MOZ_LINK_FLAGS="$MOZ_LINK_FLAGS -fsanitize=address -ldl" + +%if 0%{?bundle_nss} + mkdir -p %{_buildrootdir}%{bundled_install_path}/%{_lib} + MOZ_LINK_FLAGS="-L%{_buildrootdir}%{bundled_install_path}/%{_lib} $MOZ_LINK_FLAGS" + MOZ_LINK_FLAGS="-Wl,-rpath,%{bundled_install_path}/%{_lib} $MOZ_LINK_FLAGS" + MOZ_LINK_FLAGS="-Wl,-rpath-link,%{_buildrootdir}%{bundled_install_path}/%{_lib} $MOZ_LINK_FLAGS" %endif # We don't wantfirefox to use CK_GCM_PARAMS_V3 in nss @@ -802,128 +1334,144 @@ MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -DNSS_PKCS11_3_0_STRICT" echo "export CFLAGS=\"$MOZ_OPT_FLAGS\"" >> .mozconfig echo "export CXXFLAGS=\"$MOZ_OPT_FLAGS\"" >> .mozconfig echo "export LDFLAGS=\"$MOZ_LINK_FLAGS\"" >> .mozconfig - -%if %{build_with_clang} -echo "export LLVM_PROFDATA=\"llvm-profdata\"" >> .mozconfig -echo "export AR=\"llvm-ar\"" >> .mozconfig -echo "export NM=\"llvm-nm\"" >> .mozconfig -echo "export RANLIB=\"llvm-ranlib\"" >> .mozconfig -echo "ac_add_options --enable-linker=lld" >> .mozconfig -%else echo "export CC=gcc" >> .mozconfig echo "export CXX=g++" >> .mozconfig echo "export AR=\"gcc-ar\"" >> .mozconfig echo "export NM=\"gcc-nm\"" >> .mozconfig echo "export RANLIB=\"gcc-ranlib\"" >> .mozconfig -%endif -%if 0%{?build_with_pgo} -# PGO build doesn't work with ccache -export CCACHE_DISABLE=1 -export GCOV_PREFIX=`pwd -P`/objdir -export GCOV_PREFIX_STRIP=$(( $(echo `pwd -P`|tr -c -d '/' |wc -c )+2 )) -env | grep GCOV -echo "ac_add_options --enable-lto" >> .mozconfig -echo "ac_add_options MOZ_PGO=1" >> .mozconfig -%endif -# Require 4 GB of RAM per CPU core -%constrain_build -m 4096 -echo "mk_add_options MOZ_MAKE_FLAGS=\"-j%{_smp_build_ncpus}\"" >> .mozconfig +MOZ_SMP_FLAGS=-j1 +# On x86_64 architectures, Mozilla can build up to 4 jobs at once in parallel, +# however builds tend to fail on other arches when building in parallel. +#%ifarch %{ix86} s390x aarch64 ppc64le +#[ -z "$RPM_BUILD_NCPUS" ] && \ +# RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`" +#[ "$RPM_BUILD_NCPUS" -ge 2 ] && MOZ_SMP_FLAGS=-j2 +#%endif +#%ifarch x86_64 ppc ppc64 ppc64le +[ -z "$RPM_BUILD_NCPUS" ] && \ + RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`" +[ "$RPM_BUILD_NCPUS" -ge 2 ] && MOZ_SMP_FLAGS=-j2 +[ "$RPM_BUILD_NCPUS" -ge 4 ] && MOZ_SMP_FLAGS=-j4 +[ "$RPM_BUILD_NCPUS" -ge 8 ] && MOZ_SMP_FLAGS=-j8 +[ "$RPM_BUILD_NCPUS" -ge 16 ] && MOZ_SMP_FLAGS=-j16 +#%endif +echo "mk_add_options MOZ_MAKE_FLAGS=\"$MOZ_SMP_FLAGS\"" >> .mozconfig echo "mk_add_options MOZ_SERVICES_SYNC=1" >> .mozconfig echo "export STRIP=/bin/true" >> .mozconfig %if %{launch_wayland_compositor} -cp %{SOURCE45} . -. ./run-wayland-compositor +cp %{SOURCE36} . +. ./testing.sh run_wayland_compositor %endif -mkdir -p objdir/_virtualenvs/init_py3 -cat > objdir/_virtualenvs/init_py3/pip.conf << EOF +# We could use %%include, but in %%files, %%post and other sections, but in these +# sections it could lead to syntax errors about unclosed %%if. Work around it by +# using the following macro +%define include_file() %{expand:%(cat '%1')} + +%if 0%{?bundle_nss} + echo "Setting nss flags" + # nss-setup-flags-env.inc + %include_file %{SOURCE401} + export PATH=%{_buildrootdir}/%{bundled_install_path}/bin:$PATH + echo $PKG_CONFIG_PATH +%endif + +./mach build -v 2>&1 || exit 1 + +#--------------------------------------------------------------------- +%install +export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system +function install_rpms_to_current_dir() { + PACKAGE_RPM=$(eval echo $1) + PACKAGE_DIR=%{_rpmdir} + + if [ ! -f $PACKAGE_DIR/$PACKAGE_RPM ]; then + # Hack for tps tests + ARCH_STR=%{_arch} + %ifarch %{ix86} + ARCH_STR="i?86" + %endif + PACKAGE_DIR="$PACKAGE_DIR/$ARCH_STR" + fi + + for package in $(ls $PACKAGE_DIR/$PACKAGE_RPM) + do + echo "$package" + rpm2cpio "$package" | cpio -idu + done +} + +%if 0%{?bundle_nss} + pushd %{buildroot} + install_rpms_to_current_dir nspr-4*.rpm + install_rpms_to_current_dir nss-3*.rpm + install_rpms_to_current_dir nss-softokn-3*.rpm + install_rpms_to_current_dir nss-softokn-freebl-3*.rpm + install_rpms_to_current_dir nss-util-3*.rpm + + # cleanup unecessary nss files + rm -rf %{buildroot}/%{bundled_install_path}/lib/dracut + rm -rf %{buildroot}/%{bundled_install_path}/%{_lib}/nss + rm -rf %{buildroot}/%{bundled_install_path}/%{_lib}/share + rm -rf %{buildroot}/%{bundled_install_path}/share + rm -rf %{buildroot}/etc/pki + rm -rf %{buildroot}/usr/lib/.build-id + rm -rf %{buildroot}/etc/crypto-policies + popd +%endif + +# run Firefox test suite +%if %{launch_wayland_compositor} +cp %{SOURCE36} . +. ./testing.sh run_wayland_compositor +%endif + +%if 0%{?run_firefox_tests} + mkdir -p objdir/_virtualenvs/init_py3 + %{__cat} > objdir/_virtualenvs/init_py3/pip.conf << EOF [global] find-links=`pwd`/mochitest-python no-index=true EOF -tar xf %{SOURCE37} - -#Use python 3.11 for mach -sed -i -e 's|#!/usr/bin/env python3|#!/usr/bin/env python3.11|' mach - -%if %{build_with_pgo} -%if %{test_on_wayland} -env | grep "WAYLAND" -MOZ_ENABLE_WAYLAND=1 ./mach build -v 2>&1 | cat - || exit 1 -%else -xvfb-run ./mach build -v 2>&1 | cat - || exit 1 -%endif -%else -./mach build -v 2>&1 | cat - || exit 1 -%endif - -#--------------------------------------------------------------------- -%install -# run Firefox test suite -# Do we need it? -# export MACH_NATIVE_PACKAGE_SOURCE=system -%if %{launch_wayland_compositor} -cp %{SOURCE45} . -. ./run-wayland-compositor -%endif - -%if 0%{?run_firefox_tests} -cp %{SOURCE40} %{SOURCE41} %{SOURCE42} %{SOURCE38} %{SOURCE39} %{SOURCE43} %{SOURCE44} . -mkdir -p test_results -%if %{test_on_wayland} -./run-tests-wayland || true -%else -./run-tests-x11 || true -%endif -./print_results > test_summary.txt 2>&1 || true -./print_failures || true + tar xf %{SOURCE37} + cp %{SOURCE36} . + mkdir -p test_results + %if %{?test_on_wayland} + ./testing.sh run_tests_wayland || true + %else + ./testing.sh run_tests_x11 || true + %endif + ./testing.sh print_results > test_summary.txt 2>&1 || true + ./testing.sh print_failures || true %endif # set up our default bookmarks %if !0%{?flatpak} -cp -p %{default_bookmarks_file} objdir/dist/bin/browser/chrome/browser/content/browser/default-bookmarks.html + %global default_bookmarks_file /usr/share/bookmarks/default-bookmarks.html + %{__cp} -p %{default_bookmarks_file} objdir/dist/bin/browser/chrome/browser/content/browser/default-bookmarks.html %endif # Make sure locale works for langpacks -cat > objdir/dist/bin/browser/defaults/preferences/firefox-l10n.js << EOF +%{__cat} > objdir/dist/bin/browser/defaults/preferences/firefox-l10n.js << EOF pref("general.useragent.locale", "chrome://global/locale/intl.properties"); EOF DESTDIR=%{buildroot} make -C objdir install -mkdir -p %{buildroot}{%{_libdir},%{_bindir},%{_datadir}/applications} +%{__mkdir_p} %{buildroot}{%{_libdir},%{_bindir},%{_datadir}/applications} -%if %{gnome_shell_search_provider} -# Install Gnome search provider files -mkdir -p %{buildroot}%{_datadir}/gnome-shell/search-providers -cp %{SOURCE34} %{buildroot}%{_datadir}/gnome-shell/search-providers -mkdir -p %{buildroot}%{_datadir}/dbus-1/services -cp %{SOURCE46} %{buildroot}%{_datadir}/dbus-1/services -%endif - -%if %{gnome_shell_search_provider} -desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE47} -%else -# We can't use desktop-file-install as it refuses to install firefox.desktop file. -cp %{SOURCE20} %{buildroot}%{_datadir}/applications -%endif - -%if 0%{?fedora} < 40 +desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE20} +%if 0%{?rhel} >= 9 desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE31} -desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE29} %endif # set up the firefox start script -rm -rf %{buildroot}%{_bindir}/firefox -%if 0%{?fedora} < 40 -sed -e 's,/__PREFIX__,%{_prefix},g' -e 's,__APP_NAME__,firefox,g' %{SOURCE21} > %{buildroot}%{_bindir}/firefox -%else -sed -e 's,/__PREFIX__,%{_prefix},g' -e 's,__APP_NAME__,org.mozilla.firefox,g' %{SOURCE21} > %{buildroot}%{_bindir}/firefox -%endif -chmod 755 %{buildroot}%{_bindir}/firefox +%{__rm} -rf %{buildroot}%{_bindir}/firefox +%{__sed} -e 's,/__PREFIX__,%{_prefix},g' %{SOURCE21} > %{buildroot}%{_bindir}/firefox +%{__chmod} 755 %{buildroot}%{_bindir}/firefox %if 0%{?flatpak} sed -i -e 's|%FLATPAK_ENV_VARS%|export TMPDIR="$XDG_CACHE_HOME/tmp"|' %{buildroot}%{_bindir}/firefox @@ -931,38 +1479,41 @@ sed -i -e 's|%FLATPAK_ENV_VARS%|export TMPDIR="$XDG_CACHE_HOME/tmp"|' %{buildroo sed -i -e 's|%FLATPAK_ENV_VARS%||' %{buildroot}%{_bindir}/firefox %endif -%if 0%{?fedora} < 40 -sed -e 's,/__PREFIX__,%{_prefix},g' %{SOURCE30} > %{buildroot}%{_bindir}/firefox-x11 -chmod 755 %{buildroot}%{_bindir}/firefox-x11 -sed -e 's,/__PREFIX__,%{_prefix},g' %{SOURCE28} > %{buildroot}%{_bindir}/firefox-wayland -chmod 755 %{buildroot}%{_bindir}/firefox-wayland +# Run firefox under wayland only on RHEL9 and newer +%if 0%{?rhel} < 9 +sed -i -e 's|%DISABLE_WAYLAND_PLACEHOLDER%|export MOZ_DISABLE_WAYLAND=1|' %{buildroot}%{_bindir}/firefox +%else +sed -i -e 's|%DISABLE_WAYLAND_PLACEHOLDER%||' %{buildroot}%{_bindir}/firefox +# firefox-x11 launch script for RHEL9 only +%{__sed} -e 's,/__PREFIX__,%{_prefix},g' %{SOURCE30} > %{buildroot}%{_bindir}/firefox-x11 +%{__chmod} 755 %{buildroot}%{_bindir}/firefox-x11 %endif -install -p -D -m 644 %{SOURCE23} %{buildroot}%{_mandir}/man1/firefox.1 +%{__install} -p -D -m 644 %{SOURCE23} %{buildroot}%{_mandir}/man1/firefox.1 -rm -f %{buildroot}/%{mozappdir}/firefox-config -rm -f %{buildroot}/%{mozappdir}/update-settings.ini +%{__rm} -f %{buildroot}/%{mozappdir}/firefox-config +%{__rm} -f %{buildroot}/%{mozappdir}/update-settings.ini for s in 16 22 24 32 48 256; do - mkdir -p %{buildroot}%{_datadir}/icons/hicolor/${s}x${s}/apps - cp -p browser/branding/official/default${s}.png \ - %{buildroot}%{_datadir}/icons/hicolor/${s}x${s}/apps/firefox.png + %{__mkdir_p} %{buildroot}%{_datadir}/icons/hicolor/${s}x${s}/apps + %{__cp} -p browser/branding/official/default${s}.png \ + %{buildroot}%{_datadir}/icons/hicolor/${s}x${s}/apps/firefox.png done # Install hight contrast icon -mkdir -p %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps -cp -p %{SOURCE25} \ - %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +%{__mkdir_p} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +%{__cp} -p %{SOURCE25} \ + %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps echo > %{name}.lang %if %{with langpacks} # Extract langpacks, make any mods needed, repack the langpack, and install it. -mkdir -p %{buildroot}%{langpackdir} -tar xf %{SOURCE1} +%{__mkdir_p} %{buildroot}%{langpackdir} +%{__tar} xf %{SOURCE1} for langpack in `ls firefox-langpacks/*.xpi`; do language=`basename $langpack .xpi` extensionID=langpack-$language@firefox.mozilla.org - mkdir -p $extensionID + %{__mkdir_p} $extensionID unzip -qq $langpack -d $extensionID find $extensionID -type f | xargs chmod 644 @@ -970,7 +1521,7 @@ for langpack in `ls firefox-langpacks/*.xpi`; do zip -qq -r9mX ../${extensionID}.xpi * cd - - install -m 644 ${extensionID}.xpi %{buildroot}%{langpackdir} + %{__install} -m 644 ${extensionID}.xpi %{buildroot}%{langpackdir} language=`echo $language | sed -e 's/-/_/g'` %if 0%{?flatpak} echo "%{langpackdir}/${extensionID}.xpi" >> %{name}.lang @@ -978,7 +1529,7 @@ for langpack in `ls firefox-langpacks/*.xpi`; do echo "%%lang($language) %{langpackdir}/${extensionID}.xpi" >> %{name}.lang %endif done -rm -rf firefox-langpacks +%{__rm} -rf firefox-langpacks # Install langpack workaround (see #707100, #821169) function create_default_langpack() { @@ -1007,61 +1558,68 @@ create_default_langpack "sv-SE" "sv" create_default_langpack "zh-TW" "zh" %endif -mkdir -p %{buildroot}/%{mozappdir}/browser/defaults/preferences +# Keep compatibility with the old preference location. +%{__mkdir_p} %{buildroot}%{mozappdir}/defaults/preferences +%{__mkdir_p} %{buildroot}%{mozappdir}/browser/defaults +ln -s %{mozappdir}/defaults/preferences $RPM_BUILD_ROOT/%{mozappdir}/browser/defaults/preferences +# Default preferences +%{__cp} %{SOURCE12} %{buildroot}%{mozappdir}/defaults/preferences/all-redhat.js +sed -i -e 's|%PREFIX%|%{_prefix}|' %{buildroot}%{mozappdir}/defaults/preferences/all-redhat.js +sed -i -e 's|%HOMEPAGE%|%{homepage}|' %{buildroot}%{mozappdir}/defaults/preferences/all-redhat.js +# Enable modern crypto for the key export on the RHEL9 only (rhbz#1764205) +%if 0%{?rhel} == 9 + echo 'pref("security.pki.use_modern_crypto_with_pkcs12", true);' >> %{buildroot}%{mozappdir}/defaults/preferences/all-redhat.js +%endif + +%ifarch s390x + echo 'pref("gfx.webrender.force-disabled", true);' >> %{buildroot}%{mozappdir}/defaults/preferences/all-redhat.js +%endif + +%ifarch s390x ppc64 + echo 'pref("gfx.webrender.force-disabled", true);' >> %{buildroot}%{mozappdir}/defaults/preferences/all-redhat.js +%endif # System config dir -mkdir -p %{buildroot}/%{_sysconfdir}/%{name}/pref +%{__mkdir_p} %{buildroot}/%{_sysconfdir}/%{name}/pref # System extensions -mkdir -p %{buildroot}%{_datadir}/mozilla/extensions/%{firefox_app_id} -mkdir -p %{buildroot}%{_libdir}/mozilla/extensions/%{firefox_app_id} +%global firefox_app_id \{ec8030f7-c20a-464f-9b0e-13a3a9e97384\} +%{__mkdir_p} %{buildroot}%{_datadir}/mozilla/extensions/%{firefox_app_id} +%{__mkdir_p} %{buildroot}%{_libdir}/mozilla/extensions/%{firefox_app_id} # Copy over the LICENSE -install -p -c -m 644 LICENSE %{buildroot}/%{mozappdir} +%{__install} -p -c -m 644 LICENSE %{buildroot}/%{mozappdir} # Use the system hunspell dictionaries -rm -rf %{buildroot}%{mozappdir}/dictionaries -ln -s %{_datadir}/hunspell %{buildroot}%{mozappdir}/dictionaries - -# Enable crash reporter for Firefox application -%if %{enable_mozilla_crashreporter} -./mach buildsymbols -sed -i -e "s/\[Crash Reporter\]/[Crash Reporter]\nEnabled=1/" %{buildroot}/%{mozappdir}/application.ini -# Add debuginfo for crash-stats.mozilla.com -mkdir -p %{buildroot}/%{moz_debug_dir} -cp objdir/dist/%{symbols_file_name} %{buildroot}/%{moz_debug_dir} -%endif +%{__rm} -rf %{buildroot}%{mozappdir}/dictionaries +ln -s %{_datadir}/myspell %{buildroot}%{mozappdir}/dictionaries %if 0%{?run_firefox_tests} -mkdir -p %{buildroot}/%{version}-%{release}/test_results -cp test_results/* %{buildroot}/%{version}-%{release}/test_results -cp test_summary.txt %{buildroot}/%{version}-%{release}/ -cp failures-* %{buildroot}/%{version}-%{release}/ || true -%endif - -# Default -cp %{SOURCE12} %{buildroot}%{mozappdir}/browser/defaults/preferences -%if %{?use_xdg_file_portal} -echo 'pref("widget.use-xdg-desktop-portal.file-picker", 1);' >> %{buildroot}%{mozappdir}/browser/defaults/preferences/firefox-redhat-default-prefs.js +%{__mkdir_p} %{buildroot}/%{version}-%{release}/test_results +%{__cp} test_results/* %{buildroot}/%{version}-%{release}/test_results +%{__cp} test_summary.txt %{buildroot}/%{version}-%{release}/ +%{__cp} failures-* %{buildroot}/%{version}-%{release}/ || true %endif # Copy over run-mozilla.sh -cp build/unix/run-mozilla.sh %{buildroot}%{mozappdir} +%{__cp} build/unix/run-mozilla.sh %{buildroot}%{mozappdir} # Add distribution.ini -mkdir -p %{buildroot}%{mozappdir}/distribution -cp %{SOURCE26} %{buildroot}%{mozappdir}/distribution +%{__mkdir_p} %{buildroot}%{mozappdir}/distribution +%{__cp} %{SOURCE26} %{buildroot}%{mozappdir}/distribution # Install appdata file mkdir -p %{buildroot}%{_datadir}/metainfo -sed -e "s/__VERSION__/%{version}/" \ - -e "s/__DATE__/$(date '+%F')/" \ - %{SOURCE33} > %{buildroot}%{_datadir}/metainfo/firefox.appdata.xml +%{__sed} -e "s/__VERSION__/%{version}/" \ + -e "s/__DATE__/$(date '+%Y-%m-%d')/" \ + %{SOURCE33} > %{buildroot}%{_datadir}/metainfo/firefox.appdata.xml -# Remove copied libraries to speed up build -rm -f %{buildroot}%{mozappdirdev}/sdk/lib/libmozjs.so -rm -f %{buildroot}%{mozappdirdev}/sdk/lib/libmozalloc.so -rm -f %{buildroot}%{mozappdirdev}/sdk/lib/libxul.so +# Install Gnome search provider files +mkdir -p %{buildroot}%{_datadir}/gnome-shell/search-providers +%{__cp} %{SOURCE34} %{buildroot}%{_datadir}/gnome-shell/search-providers + +# Remove gtk2 support as flash plugin is no longer supported +rm -rf %{buildroot}%{mozappdir}/gtk2/ # Create a symlink to replace libnssckbi.so with p11-kit-client.so # instead of p11-kit-trust.so, so that Firefox can see the system @@ -1073,26 +1631,18 @@ rm -f %{buildroot}%{mozappdirdev}/sdk/lib/libxul.so ln -sf /usr/lib64/libnss3.so %{buildroot}%{_libdir}/libnss3.so ln -sf /usr/lib64/pkcs11/p11-kit-client.so %{buildroot}%{_libdir}/libnssckbi.so %endif -#--------------------------------------------------------------------- -# Moves defaults/preferences to browser/defaults/preferences -%pretrans -p -require 'posix' -require 'os' -if (posix.stat("%{mozappdir}/browser/defaults/preferences", "type") == "link") then - posix.unlink("%{mozappdir}/browser/defaults/preferences") - posix.mkdir("%{mozappdir}/browser/defaults/preferences") - if (posix.stat("%{mozappdir}/defaults/preferences", "type") == "directory") then - for i,filename in pairs(posix.dir("%{mozappdir}/defaults/preferences")) do - os.rename("%{mozappdir}/defaults/preferences/"..filename, "%{mozappdir}/browser/defaults/preferences/"..filename) - end - f = io.open("%{mozappdir}/defaults/preferences/README","w") - if f then - f:write("Content of this directory has been moved to %{mozappdir}/browser/defaults/preferences.") - f:close() - end - end -end +# clean the created bundled rpms if there are any +rm -rf %{_srcrpmdir}/libffi*.src.rpm +find %{_rpmdir} -name "libffi*.rpm" -delete +rm -rf %{_srcrpmdir}/openssl*.src.rpm +find %{_rpmdir} -name "openssl*.rpm" -delete +rm -rf %{_srcrpmdir}/nss*.src.rpm +find %{_rpmdir} -name "nss*.rpm" -delete +rm -rf %{_srcrpmdir}/nspr*.src.rpm +find %{_rpmdir} -name "nspr*.rpm" -delete + +#--------------------------------------------------------------------- %check appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/*.appdata.xml @@ -1100,47 +1650,50 @@ appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/*.appdata %preun # is it a final removal? if [ $1 -eq 0 ]; then - rm -rf %{mozappdir}/components - rm -rf %{mozappdir}/extensions - rm -rf %{mozappdir}/plugins - rm -rf %{langpackdir} + %{__rm} -rf %{mozappdir}/components + %{__rm} -rf %{mozappdir}/extensions + %{__rm} -rf %{mozappdir}/plugins fi -%if %{with langpacks_subpkg} -%files -%else +%post +update-desktop-database &> /dev/null || : +touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : + +%postun +update-desktop-database &> /dev/null || : +if [ $1 -eq 0 ] ; then + touch --no-create %{_datadir}/icons/hicolor &>/dev/null + gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : + %{__rm} -rf %{langpackdir} +fi + +%posttrans +gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : + %files -f %{name}.lang -%endif %{_bindir}/firefox %{mozappdir}/firefox %{mozappdir}/firefox-bin -%{mozappdir}/glxtest %doc %{_mandir}/man1/* %dir %{_sysconfdir}/%{name} %dir %{_sysconfdir}/%{name}/* %dir %{_datadir}/mozilla/extensions/* %dir %{_libdir}/mozilla/extensions/* -%if %{gnome_shell_search_provider} -%{_datadir}/applications/org.mozilla.firefox.desktop -%{_datadir}/dbus-1/services/* -%{_datadir}/gnome-shell/search-providers/*.ini -%else -%{_datadir}/applications/firefox.desktop -%endif +%{_datadir}/applications/%{name}.desktop %{_datadir}/metainfo/*.appdata.xml +%{_datadir}/gnome-shell/search-providers/*.ini %dir %{mozappdir} %license %{mozappdir}/LICENSE %{mozappdir}/browser/chrome -%{mozappdir}/browser/defaults/preferences/firefox-redhat-default-prefs.js +%{mozappdir}/defaults/preferences/* +%{mozappdir}/browser/defaults/preferences %{mozappdir}/browser/features/*.xpi %{mozappdir}/distribution/distribution.ini # That's Windows only %ghost %{mozappdir}/browser/features/aushelper@mozilla.org.xpi -%if %{without langpacks_subpkg} %if %{with langpacks} %dir %{langpackdir} %endif -%endif %{mozappdir}/browser/omni.ja %{mozappdir}/run-mozilla.sh %{mozappdir}/application.ini @@ -1157,1255 +1710,539 @@ fi %{_datadir}/icons/hicolor/32x32/apps/firefox.png %{_datadir}/icons/hicolor/48x48/apps/firefox.png %{_datadir}/icons/hicolor/symbolic/apps/firefox-symbolic.svg -%if %{enable_mozilla_crashreporter} -%{mozappdir}/crashreporter -%{mozappdir}/crashreporter.ini -%{mozappdir}/minidump-analyzer -%{mozappdir}/Throbber-small.gif -%{mozappdir}/browser/crashreporter-override.ini -%endif %{mozappdir}/*.so %{mozappdir}/defaults/pref/channel-prefs.js %{mozappdir}/dependentlibs.list %{mozappdir}/dictionaries %{mozappdir}/omni.ja %{mozappdir}/platform.ini +%{mozappdir}/plugin-container %{mozappdir}/gmp-clearkey %{mozappdir}/fonts/TwemojiMozilla.ttf -%ifarch aarch64 -%{mozappdir}/v4l2test -%endif +%{mozappdir}/glxtest %{mozappdir}/vaapitest + %if !%{?system_nss} %exclude %{mozappdir}/libnssckbi.so %endif -%if %{build_with_asan} -%{mozappdir}/llvm-symbolizer + +%if 0%{?bundle_nss} +%{mozappdir}/bundled/%{_lib}/libfreebl* +%{mozappdir}/bundled/%{_lib}/libnss* +%{mozappdir}/bundled/%{_lib}/libsmime3* +%{mozappdir}/bundled/%{_lib}/libsoftokn* +%{mozappdir}/bundled/%{_lib}/libssl3* +%{mozappdir}/bundled/%{_lib}/libnspr4.so +%{mozappdir}/bundled/%{_lib}/libplc4.so +%{mozappdir}/bundled/%{_lib}/libplds4.so %endif #--------------------------------------------------------------------- %changelog -* Mon Feb 12 2024 Martin Stransky - 122.0-6 -- Temporary removed proxy cache (rhbz#2262959) +* Tue Jun 04 2024 Eike Rathke - 115.12.0-1 +- Update to 115.12.0 build1 -* Wed Jan 31 2024 Martin Stransky - 122.0-5 -- Disabled system libvpx due to WebRTC/camera issues (mzbz#1875201) +* Tue May 07 2024 Eike Rathke - 115.11.0-1 +- Update to 115.11.0 build1 -* Tue Jan 30 2024 Martin Stransky - 122.0-4 -- Build with --enable-replace-malloc (rhbz#2260766) +* Tue Apr 09 2024 Eike Rathke - 115.10.0-1 +- Update to 115.10.0 build1 -* Tue Jan 30 2024 Martin Stransky - 122.0-3 -- Added version to obsolete firefox-wayland/x11 +* Tue Apr 09 2024 Jan Horak - 115.9.1-2 +- Removed expat CVE fix -* Mon Jan 29 2024 Martin Stransky - 122.0-2 -- Obsolete firefox-wayland and firefox-x11 on Fedora 40+ +* Fri Mar 22 2024 Eike Rathke - 115.9.1-1 +- Update to 115.9.1 -* Fri Jan 19 2024 Martin Stransky - 122.0-1 -- Update to 122.0 +* Fri Mar 15 2024 Eike Rathke - 115.9.0-2 +- Update to 115.9.0 build2 -* Fri Jan 19 2024 Fedora Release Engineering - 121.0.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild +* Tue Mar 12 2024 Eike Rathke - 115.9.0-1 +- Update to 115.9.0 build1 +- Fix expat CVE-2023-52425 -* Fri Jan 12 2024 Fabio Valentini - 121.0.1-2 -- Rebuild for dav1d 1.3.0 +* Tue Feb 13 2024 Eike Rathke - 115.8.0-1 +- Update to 115.8.0 build1 -* Fri Jan 12 2024 Martin Stransky - 121.0.1-1 -- Update to 121.0.1 -- Fixed Firefox icon on Rawhide +* Tue Jan 16 2024 Eike Rathke - 115.7.0-1 +- Update to 115.7.0 build1 -* Tue Jan 02 2024 Martin Stransky - 121.0-4 -- Really enable proxy cache +* Tue Dec 12 2023 Eike Rathke - 115.6.0-1 +- Update to 115.6.0 build1 -* Fri Dec 22 2023 Martin Stransky - 121.0-3 -- Disabled DBus activations +* Tue Nov 14 2023 Eike Rathke - 115.5.0-1 +- Update to 115.5.0 build1 -* Tue Dec 19 2023 Martin Stransky - 121.0-2 -- Added Wayland proxy cache (mzbz#1743144) +* Tue Oct 17 2023 Eike Rathke - 115.4.0-1 +- Update to 115.4.0 build1 +- Add fix for CVE-2023-44488 +- Set homepage from os-release HOME_URL -* Mon Dec 18 2023 Martin Stransky - 121.0-2 -- Enable Gnome Shell Search provider for Fedora 40+ -- Don't ship firefox-x11 and firefox-wayland on Fedora 40+ +* Fri Sep 29 2023 Eike Rathke - 115.3.1-1 +- Update to 115.3.1 -* Mon Dec 18 2023 Martin Stransky - 121.0-1 -- Updated to 121.0 +* Thu Sep 21 2023 Jan Horak - 115.3.0-1 +- Update to 115.3.0 ESR -* Fri Dec 01 2023 Martin Stransky - 120.0.1-1 -- Updated to 120.0.1 +* Mon Sep 4 2023 Jan Horak - 115.2.0-3 +- Update to 115.2.0 ESR -* Mon Nov 27 2023 Martin Stransky - 120.0-3 -- Add fix for rhbz#2251202 +* Wed Aug 2 2023 Jan Horak - 115.1.0-1 +- Update to 115.1.0 ESR -* Mon Nov 20 2023 Martin Stransky - 120.0-2 -- Updated to 120.0 Build 2 +* Mon Jul 17 2023 Jan Horak - 115.0.2-1 +- Update to 115.0.2 ESR -* Tue Nov 14 2023 Martin Stransky - 120.0-1 -- Updated to 120.0 +* Wed Jun 21 2023 Jan Horak - 115.0b8-1 +- Update to 115.0b8 -* Fri Nov 10 2023 Martin Stransky - 119.0.1-2 -- Updated to 119.0.1 +* Thu May 04 2023 Eike Rathke - 102.11.0-2 +- Update to 102.11.0 build2 -* Tue Nov 07 2023 Martin Stransky - 119.0-5 -- Added fix for rhbz#2247665 +* Tue May 02 2023 Eike Rathke - 102.11.0-1 +- Update to 102.11.0 build1 -* Mon Nov 06 2023 Martin Stransky - 119.0-4 -- Added fix for mzbz#1762816 +* Tue Apr 04 2023 Eike Rathke - 102.10.0-1 +- Update to 102.10.0 build1 -* Mon Oct 30 2023 Jan Horak - 119.0-3 -- Enable mozilla crash reporter +* Fri Mar 10 2023 Eike Rathke - 102.9.0-4 +- Update to 102.9.0 build2 -* Fri Oct 27 2023 Martin Stransky - 119.0-2 -- Added fix for mzbz#1861615 +* Thu Mar 09 2023 Jan Horak - 102.9.0-2 +- removed disable-openh264-download -* Tue Oct 24 2023 Martin Stransky - 119.0-1 -- Updated to 119.0 +* Tue Mar 07 2023 Eike Rathke - 102.9.0-1 +- Update to 102.9.0 build1 -* Tue Oct 10 2023 Martin Stransky - 118.0.2-1 -- Updated to 118.0.2 +* Tue Feb 14 2023 Eike Rathke - 102.8.0-2 +- Update to 102.8.0 build2 -* Fri Oct 06 2023 Alessandro Astone - 118.0.1-7 -- Don't include -x11 and -wayland desktop files in the main package (rhbz#2242523) +* Tue Feb 07 2023 Eike Rathke - 102.8.0-1 +- Update to 102.8.0 build1 -* Fri Oct 6 2023 Martin Stransky - 118.0.1-6 -- Removed DBusActivatable flag from desktop file as it crashes KDE (rhbz#2242454). +* Tue Jan 10 2023 Eike Rathke - 102.7.0-1 +- Update to 102.7.0 build1 -* Thu Oct 05 2023 Kalev Lember - 118.0.1-5 -- Fix flatpak build +* Mon Jan 02 2023 Jan Horak - 102.6.0-2 +- Add firefox-x11 subpackage to allow explicit run of firefox under x11 on RHEL9 -* Mon Oct 2 2023 Martin Stransky - 118.0.1-4 -- Updated man page +* Tue Dec 06 2022 Eike Rathke - 102.6.0-1 +- Update to 102.6.0 build1 -* Mon Oct 2 2023 Martin Stransky - 118.0.1-3 -- Avoid to launch Firefox by gnome-shell search +* Fri Nov 25 2022 Jan Horak - 102.5.0-2 +- Added libwebrtc screencast patch for newer features -* Fri Sep 29 2023 Martin Stransky - 118.0.1-2 -- Use firefox.desktop again +* Wed Nov 09 2022 Eike Rathke - 102.5.0-1 +- Update to 102.5.0 build1 -* Fri Sep 29 2023 Martin Stransky - 118.0.1-1 -- Updated to 118.0.1 +* Wed Oct 12 2022 Eike Rathke - 102.4.0-1 +- Update to 102.4.0 build1 -* Wed Sep 27 2023 Neal Gompa - 118.0.1-1 -- Use system libraries for AV1, VP8, VP9, and WebP +* Tue Oct 11 2022 Jan Horak - 102.3.0-7 +- Fix for expat CVE-2022-40674 and non functional webrtc -* Wed Sep 27 2023 Martin Stransky - 118.0-2 -- Fixed Gnome search provider +* Tue Sep 13 2022 Jan Horak - 102.3.0-6 +- Update to 102.3.0 build1 -* Mon Sep 25 2023 Martin Stransky - 118.0-1 -- Updated to 118.0 +* Thu Jul 21 2022 Eike Rathke - 91.12.0-1 +- Update to 91.12.0 build1 -* Thu Sep 14 2023 Adam Williamson - 117.0.1-2 -- Pass --with-clang-path to fix build with clang 17 (rhbz#2239047) +* Thu Jun 23 2022 Eike Rathke - 91.11.0-2 +- Update to 91.11.0 build2 -* Wed Sep 13 2023 Martin Stransky - 117.0.1-1 -- Updated to 117.0.1 +* Tue Jun 21 2022 Eike Rathke - 91.11.0-1 +- Update to 91.11.0 build1 -* Wed Aug 30 2023 Martin Stransky - 117.0-2 -- Added fix for rhbz#2235654 +* Tue May 24 2022 Eike Rathke - 91.10.0-1 +- Update to 91.10.0 build1 -* Mon Aug 28 2023 Martin Stransky - 117.0-1 -- Updated to 117.0 +* Fri May 20 2022 Jan Horak - 91.9.1-1 +- Update to 91.9.1 build1 -* Thu Aug 17 2023 Martin Stransky - 116.0.3-1 -- Updated to 116.0.3 +* Tue Apr 26 2022 Eike Rathke - 91.9.0-1 +- Update to 91.9.0 -* Wed Aug 16 2023 Martin Stransky - 116.0.2-2 -- Added Fedora customization patch +* Tue Apr 05 2022 Eike Rathke - 91.8.0-1 +- Update to 91.8.0 -* Mon Aug 7 2023 Martin Stransky - 116.0.2-1 -- Updated to 116.0.2 +* Mon Mar 07 2022 Eike Rathke - 91.7.0-3 +- Update to 91.7.0 build3 -* Fri Aug 4 2023 Martin Stransky - 116.0.1-1 -- Updated to 116.0.1 +* Wed Mar 02 2022 Jan Horak - 91.7.0-2 +- Added expat backports of CVE-2022-25235, CVE-2022-25236 and CVE-2022-25315 -* Wed Aug 2 2023 Martin Stransky - 116.0-3 -- Added Canvas/WebGL VA-API playback patch (D167159 / mzbz#1769747) +* Tue Mar 01 2022 Eike Rathke - 91.7.0-1 +- Update to 91.7.0 build2 -* Mon Jul 31 2023 Martin Stransky - 116.0-2 -- Updated to 116.0 Build 2 +* Fri Feb 25 2022 Jan Horak - 91.6.0-2 +- Install langpacks to the browser/extensions to make them available in UI: + rhbz#2030190 -* Thu Jul 27 2023 Martin Stransky - 116.0-1 -- Updated to 116.0 +* Wed Feb 02 2022 Eike Rathke - 91.6.0-1 +- Update to 91.6.0 build1 -* Mon Jul 24 2023 Martin Stransky - 115.0.2-4 -- Don't set MOZ_GMP_PATH as it's configured by /etc/profile.d/gmpopenh264.sh - from mozilla-openh264 package. +* Wed Feb 02 2022 Jan Horak - 91.5.0-2 +- Use default update channel to fix non working enterprise policies: + rhbz#2044667 -* Wed Jul 19 2023 Martin Stransky - 115.0.2-3 -- Fix the previous fix (rhbz#2221317) +* Thu Jan 06 2022 Eike Rathke - 91.5.0-1 +- Update to 91.5.0 build1 -* Tue Jul 18 2023 Martin Stransky - 115.0.2-2 -- Don't overwrite MOZ_GMP_PATH (rhbz#2221317) +* Mon Dec 13 2021 Jan Horak - 91.4.0-2 +- Added fix for failing addons signatures. -* Mon Jul 17 2023 Martin Stransky - 115.0.2-1 -- Update to 115.0.2 +* Wed Dec 01 2021 Eike Rathke - 91.4.0-1 +- Update to 91.4.0 build1 -* Tue Jul 11 2023 Dan Horák - 115.0-3 -- re-enable ppc64le (rhbz#2212748) +* Mon Nov 01 2021 Eike Rathke - 91.3.0-1 +- Update to 91.3.0 build1 -* Thu Jun 29 2023 Martin Stransky - 115.0-2 -- Update to 115.0 -- Disabled LTO due to rhbz#2218885 +* Thu Oct 21 2021 Jan Horak - 91.2.0-5 +- Fixed crashes when FIPS is enabled. -* Thu Jun 29 2023 Martin Stransky - 114.0.2-3 -- Enable Elf-hack for PGO builds. +* Mon Oct 04 2021 Jan Horak - 91.2.0-4 +- Disable webrender on the s390x due to wrong colors: rhbz#2009503 -* Thu Jun 22 2023 Martin Stransky - 114.0.2-2 -- Enable PGO/LTO again. +* Wed Sep 29 2021 Jan Horak - 91.2.0-3 +- Update to 91.2.0 build1 -* Tue Jun 20 2023 Martin Stransky - 114.0.2-1 -- Update to 114.0.2 +* Wed Sep 15 2021 Jan Horak - 91.1.0-1 +- Update to 91.1.0 build1 -* Mon Jun 05 2023 Martin Stransky - 114.0-1 -- Updated to 114.0 -- Disable webrtc on ppc64le -- Disabled ppc64le due t build issues (rhbz#2212748). +* Tue Aug 17 2021 Jan Horak +- Update to 91.0.1 build1 -* Wed May 24 2023 Martin Stransky - 113.0.1-4 -- Added patches from 113.0.2 -- Added Rust fix for Rawhide (mzbz#1831242). +* Tue Aug 10 2021 Jan Horak - 91.0-1 +- Update to 91.0 ESR -* Fri May 19 2023 Martin Stransky - 113.0.1-3 -- Disabled libproxy support due to regressions (rhbz#2207469) +* Thu Jul 29 2021 Jan Horak - 91.0-1 +- Update to 91.0b8 -* Tue May 16 2023 Jan Grulich - 113.0.1-2 -- Backport libwebrtc commit 7b0d7f48fb - Fix fcntl call when duplicating a file descriptor +* Fri Jul 16 2021 Jan Horak - 78.12.0-2 +- Rebuild to pickup older nss -* Mon May 15 2023 Martin Stransky - 113.0.1-1 -- Updated to 113.0.1 +* Wed Jul 07 2021 Eike Rathke - 78.12.0-1 +- Update to 78.12.0 build1 -* Tue May 9 2023 Martin Stransky - 113.0-1 -- Updated to 113.0 +* Mon May 31 2021 Eike Rathke - 78.11.0-3 +- Update to 78.11.0 build2 (release) -* Thu Apr 27 2023 Martin Stransky - 112.0.2-1 -- Updated to 112.0.2 +* Thu May 27 2021 Eike Rathke - 78.11.0-2 +- Fix rhel_minor_version for dist .el8_4 and .el8 -* Tue Apr 18 2023 Martin Stransky - 112.0.1-1 -- Updated to 112.0.1 -- Added fix for rhbz#2187000 -- Enabled system pixman (by G.Hojda) +* Tue May 25 2021 Eike Rathke - 78.11.0-1 +- Update to 78.11.0 build1 -* Tue Apr 11 2023 Martin Stransky - 112.0-3 -- Added wayland window fix mzbz#1827429 +* Tue Apr 20 2021 Eike Rathke - 78.10.0-1 +- Update to 78.10.0 -* Thu Apr 6 2023 Martin Stransky - 112.0-2 -- Updated to 112.0 build 2 -- don't crash on wayland logging (mzbz#1826583/rhbz#2184842). +* Wed Mar 17 2021 Eike Rathke - 78.9.0-1 +- Update to 78.9.0 build1 -* Wed Apr 5 2023 Martin Stransky - 112.0-1 -- Updated to 112.0 +* Wed Feb 17 2021 Eike Rathke - 78.8.0-1 +- Update to 78.8.0 build2 -* Wed Apr 5 2023 Martin Stransky - 111.0.1-2 -- Don't override MOZ_USE_XINPUT2 in startup script (hrbz#2184297) by GalaxyMaster +* Tue Feb 09 2021 Eike Rathke - 78.7.1-1 +- Update to 78.7.1 -* Wed Mar 22 2023 Martin Stransky - 111.0.1-1 -- Updated to 111.0.1 +* Tue Feb 09 2021 Jan Horak - 78.7.0-3 +- Fixing install prefix for the homepage -* Tue Mar 21 2023 Jan Grulich - 111.0-3 -- libwebrtc: backport upstream fix/improvement for DmaBuf screen sharing +* Fri Jan 22 2021 Eike Rathke - 78.7.0-2 +- Update to 78.7.0 build2 -* Tue Mar 21 2023 Martin Stransky - 111.0-2 -- Added libproxy support (rhbz#2177806) -- Added build fixes on arm +* Wed Jan 20 2021 Eike Rathke - 78.7.0-1 +- Update to 78.7.0 build1 -* Mon Mar 20 2023 Martin Stransky - 111.0-1 -- Updated to 111.0 -- Disabled arm on F36 +* Wed Jan 6 2021 Eike Rathke - 78.6.1-1 +- Update to 78.6.1 build1 -* Tue Feb 14 2023 Martin Stransky - 110.0-3 -- Updated to 110.0 build 3 +* Thu Dec 10 2020 Jan Horak - 78.6.0-1 +- Update to 78.6.0 build1 -* Mon Feb 13 2023 Martin Stransky - 110.0-2 -- Added fix for orca +* Wed Nov 18 2020 Jan Horak - 78.5.0-1 +- Update to 78.5.0 build1 -* Thu Feb 9 2023 Martin Stransky - 110.0-1 -- Updated to 110.0 +* Tue Nov 10 2020 erack@redhat.com - 78.4.1-1 +- Update to 78.4.1 -* Tue Feb 7 2023 Martin Stransky - 109.0.1-2 -- Rawhide build fix +* Tue Nov 10 2020 Jan Horak - 78.4.0-3 +- Fixing flatpak build, fixing firefox.sh.in to not disable langpacks loading -* Wed Feb 1 2023 Martin Stransky - 109.0.1-1 -- Updated to 109.0.1 -- Added fix for rhbz#2147344 / mzbz#1813500. +* Thu Oct 29 2020 Jan Horak - 78.4.0-2 +- Enable addon sideloading -* Thu Jan 19 2023 Martin Stransky - 109.0-4 -- Removed mozbz#1809162 +* Fri Oct 16 2020 Jan Horak - 78.4.0-1 +- Update to 78.4.0 build2 -* Thu Jan 19 2023 Fedora Release Engineering - 109.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild +* Fri Sep 18 2020 Jan Horak +- Update to 78.3.0 build1 -* Tue Jan 17 2023 Martin Stransky - 109.0-2 -- Added VA-API fixes mozbz#1809162, mozbz#1801576 +* Tue Aug 18 2020 Jan Horak - 78.2.0-3 +- Update to 78.2.0 build1 -* Mon Jan 16 2023 Martin Stransky - 109.0-1 -- Update to 109.0 +* Fri Jul 24 2020 Jan Horak +- Update to 68.11.0 build1 -* Thu Jan 12 2023 Jan Horak - 108.0.2-1 -- Update to 108.0.2 +* Fri Jun 26 2020 Jan Horak +- Update to 68.10.0 build1 -* Mon Jan 09 2023 Kalev Lember - 108.0.1-4 -- Drop conditionals for F35 +* Fri May 29 2020 Jan Horak +- Update to 68.9.0 build1 +- Added patch for pipewire 0.3 -* Wed Dec 21 2022 Martin Stransky - 108.0.1-3 -- Added second arch build fix +* Mon May 11 2020 Jan Horak +- Added s390x specific patches -* Wed Dec 21 2022 Martin Stransky - 108.0.1-2 -- Added mozbz#1795851 [wayland] Crash buffer size (170x113) - is not divisible by scale (2) +* Wed Apr 29 2020 Jan Horak +- Update to 68.8.0 build1 -* Mon Dec 19 2022 Martin Stransky - 108.0.1-1 -- Update to 108.0.1 +* Thu Apr 23 2020 Martin Stransky - 68.7.0-3 +- Added fix for rhbz#1821418 -* Wed Dec 14 2022 Martin Stransky - 108.0-2 -- Update to 108.0 Build 2 -- Added fix for rhbz#2149821 +* Tue Apr 07 2020 Jan Horak - 68.7.0-2 +- Update to 68.7.0 build3 -* Tue Dec 6 2022 Martin Stransky - 108.0-1 -- Update to 108.0 +* Mon Apr 6 2020 Jan Horak - 68.6.1-1 +- Update to 68.6.1 ESR -* Tue Dec 6 2022 Martin Stransky - 107.0.1-1 -- Update to 107.0.1 +* Wed Mar 04 2020 Jan Horak +- Update to 68.6.0 build1 -* Thu Nov 24 2022 Martin Stransky - 107.0-4 -- Added fix for mozbz#1779186 - fix VA-API playback artifacts +* Mon Feb 24 2020 Martin Stransky - 68.5.0-3 +- Added fix for rhbz#1805667 +- Enabled mzbz@1170092 - Firefox prefs at /etc -* Mon Nov 21 2022 Martin Stransky - 107.0-3 -- Disabled crashreporter +* Fri Feb 07 2020 Jan Horak +- Update to 68.5.0 build2 -* Mon Nov 21 2022 Jan Horak - 107.0-2 -- Enabled mozilla crashreporter again +* Wed Feb 05 2020 Jan Horak +- Update to 68.5.0 build1 -* Mon Nov 14 2022 Martin Stransky - 107.0-1 -- Update to 107.0 +* Wed Jan 08 2020 Jan Horak +- Update to 68.4.1esr build1 -* Fri Nov 04 2022 Martin Stransky - 106.0.4-1 -- Update to 106.0.4 +* Fri Jan 03 2020 Jan Horak +- Update to 68.4.0esr build1 -* Mon Oct 31 2022 Martin Stransky - 106.0.3-1 -- Update to 106.0.3 - -* Sun Oct 23 2022 Martin Stransky - 106.0.1-1 -- Update to 106.0.1 -- Require xdg-desktop-portal when file dialog portal is used. -- Disabled file dialog portals on F37+ - -* Thu Oct 20 2022 Jan Grulich - 106.0-2 -- Enable upstream WebRTC code for screensharing on Wayland - -* Fri Oct 14 2022 Martin Stransky - 106.0-1 -- Updated to 106.0 -- Disabled PGO build due to rhbz#2136401 - -* Fri Oct 14 2022 Martin Stransky - 105.0.2-2 -- Fixed crashes on multi-monitor systems (mzbz#1793922) - -* Wed Oct 5 2022 Martin Stransky - 105.0.2-1 -- Updated to 105.0.2 - -* Fri Sep 30 2022 Martin Stransky - 105.0.1-2 -- Added fix for mozilla#1791856 / rhbz#2130087 - -* Thu Sep 22 2022 Martin Stransky - 105.0.1-1 -- Updated to 105.0.1 -- Excluded i686 due to https://bugzilla.mozilla.org/show_bug.cgi?id=1792159, - https://bugzilla.redhat.com/show_bug.cgi?id=2129720 - -* Tue Sep 20 2022 Martin Stransky - 105.0-1 -- Updated to 105.0 - -* Tue Sep 6 2022 Martin Stransky - 104.0.2-1 -- Updated to 104.0.2 - -* Tue Aug 30 2022 Martin Stransky - 104.0.1-1 -- Updated to 104.0.1 - -* Tue Aug 23 2022 Kalev Lember - 104.0-5 -- Use constrain_build macro to simplify parallel make handling -- Drop obsolete build conditionals -- Drop unused patches -- Use build_ldflags -- Drop hardened_build option -- Re-enable s390x builds - -* Tue Aug 23 2022 Jan Horak - 104.0-4 -- Rebuild due to ppc64le fixes - -* Mon Aug 22 2022 Eike Rathke - 104.0-3 -- Update to 104.0 respin - -* Wed Aug 17 2022 Martin Stransky - 104.0-2 -- Added build fixes - -* Tue Aug 16 2022 Martin Stransky - 104.0-1 -- Updated to 104.0 - -* Fri Aug 12 2022 Martin Stransky - 103.0.2-1 -- Updated to 103.0.2 - -* Thu Aug 4 2022 Martin Stransky - 103.0.1-2 -- Added arm build fixes by Gabriel Hojda -- Enable VA-API (rhbz#2115253) - -* Tue Aug 2 2022 Martin Stransky - 103.0.1-1 -- Update to 103.0.1 - -* Tue Jul 26 2022 Martin Stransky - 103.0-1 -- Update to 103.0 -- Disabled ppc64le due to webrtc build failures (rhbz#2113850) - -* Thu Jul 21 2022 Fedora Release Engineering - 102.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Wed Jul 13 2022 Martin Stransky - 102.0-3 -- Update preference logging. -- Added ARM fixes by Gabriel Hojda. - -* Mon Jul 11 2022 Jan Grulich - 102.0-2 -- Backport upstream fixes to WebRTC for screensharing on Wayland - -* Tue Jun 28 2022 Martin Stransky - 102.0-1 -- Updated to 102.0 -- Applied patch from https://src.fedoraproject.org/rpms/firefox/pull-request/43 - -* Mon Jun 27 2022 Martin Stransky - 101.0.1-7 -- Rebuild - -* Fri Jun 17 2022 Martin Stransky - 101.0.1-6 -- Added fix for mozbz#1774271 - Intel/dmabuf export issues. - -* Wed Jun 15 2022 Martin Stransky - 101.0.1-5 -- Added fix for mozbz#1758948 (AV1 VA-API playback shuttering) - -* Tue Jun 14 2022 Martin Stransky - 101.0.1-3 -- Added fixes for mozbz#1773377 and mozbz#1774075 - -* Mon Jun 13 2022 Martin Stransky - 101.0.1-2 -- Fix WebGL mem leaks (mzbz#1773968) - -* Thu Jun 9 2022 Martin Stransky - 101.0.1-1 -- Updated to 101.0.1 -- More VA-API sandbox fixes (mzbz#1769182) -- Fixed OpenH264 decode (rhbz#2094319) - -* Tue Jun 7 2022 Martin Stransky - 101.0-2 -- Enabled VA-API by default (+ added VA-API fixes from upstream) -- Fixed WebGL performance on NVIDIA drivers (mzbz#1735929) - -* Mon May 30 2022 Martin Stransky - 101.0-1 -- Updated to 101.0 - -* Wed May 25 2022 Martin Stransky - 100.0.2-2 -- Added fix for mzbz#1771104 - -* Fri May 20 2022 Martin Stransky - 100.0.2-1 -- Updated to 100.0.2 - -* Wed May 18 2022 Martin Stransky - 100.0.1-1 -- Updated to 100.0.1 - -* Mon May 16 2022 Jan Horak - 100.0-6 -- Fix spellchecker.dictionary_path of F36+ - -* Tue May 10 2022 Jan Horak - 100.0-5 -- Fix crashes on f36 multimonitor setup and too big profile manager - -* Mon May 9 2022 Martin Stransky - 100.0-4 -- Added fix for mozbz#1767916. - -* Thu May 5 2022 Martin Stransky - 100.0-3 -- Removed Fedora user agent patch (rhbz#2081791). - -* Tue May 3 2022 Martin Stransky - 100.0-2 -- Added fix for mozbz#1759137 - -* Mon May 2 2022 Martin Stransky - 100.0-1 -- Updated to 100.0 - -* Thu Apr 28 2022 Jan Horak - 99.0.1-2 -- Fixing bookmark install location - rhbz#2054953 - -* Wed Apr 13 2022 Martin Stransky - 99.0.1-1 -- Updated to 99.0.1 - -* Wed Apr 6 2022 Martin Stransky - 99.0-1 -- Updated to 99.0 - -* Thu Mar 31 2022 Martin Stransky - 98.0.2-1 -- Updated to 98.0.2 - -* Wed Mar 30 2022 Jan Grulich - 98.0-4 -- Wayland screensharing: avoid potential crash when cursor metadata are not set - -* Wed Mar 16 2022 Martin Stransky - 98.0-3 -- Added a workaround for rhbz#2063961 - -* Wed Mar 2 2022 Martin Stransky - 98.0-2 -- Added support for ffmpeg 5.0 -- Spec tweaks -- Updated to Build 3 - -* Tue Mar 1 2022 Martin Stransky - 98.0-1 -- Updated to 98.0 - -* Mon Feb 21 2022 Jan Grulich - 97.0.1-2 -- Backport WebRTC changes to PipeWire/Wayland screen sharing support - -* Fri Feb 18 2022 Martin Stransky - 97.0.1-1 -- Updated to 97.0.1 -- GCC 12 build fixes - -* Tue Feb 8 2022 Martin Stransky - 97.0-1 -- Updated to 97.0 - -* Mon Jan 31 2022 Martin Stransky - 96.0.3-1 -- Updated to 96.0.3 - -* Tue Jan 25 2022 Parag Nemade - 96.0.1-3 -- Update hunspell-dir path - F36 Change https://fedoraproject.org/wiki/Changes/Hunspell_dictionary_dir_change - -* Thu Jan 20 2022 Fedora Release Engineering - 96.0.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Tue Jan 18 2022 Martin Stransky - 96.0.1-1 -- Updated to 96.0.1 - -* Tue Jan 11 2022 Martin Stransky - 96.0-1 -- Updated to 96.0 - -* Sat Jan 08 2022 Miro Hrončok - 95.0.2-5 -- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34 - -* Thu Dec 23 2021 Martin Stransky - 95.0.2-4 -- Added fix fox mozbz#1744896 (VSync) - -* Wed Dec 22 2021 Martin Stransky - 95.0.2-3 -- Added Fedora 36 build fix (mzbz#1745560) - -* Mon Dec 20 2021 Martin Stransky - 95.0.2-1 -- Updated to 95.0.2 -- Enabled Wayland on KDE by default - -* Thu Dec 9 2021 Martin Stransky - 95.0-2 -- Updated symbolic icon (rhbz#2028939) - -* Fri Dec 3 2021 Martin Stransky - 95.0-1 -- Updated to 95.0 - -* Fri Nov 19 2021 Martin Stransky - 94.0-2 -- Added fix for mozbz#1739924 / rhbz#2020981. - -* Mon Nov 1 2021 Martin Stransky - 94.0-1 -- Updated to 94.0 - -* Thu Oct 07 2021 Martin Stransky - 93.0-2 -- Require NSS 3.70 - -* Wed Sep 29 2021 Martin Stransky - 93.0-1 -- Updated to 93.0 - -* Mon Sep 27 2021 Martin Stransky - 92.0.1-1 -- Updated to 92.0.1 - -* Mon Sep 13 2021 Martin Stransky - 92.0-3 -- Added fix for mozbz#1725828 - -* Thu Sep 9 2021 Martin Stransky - 92.0-2 -- Disable test - -* Fri Sep 3 2021 Martin Stransky - 92.0-1 -- Updated to 92.0 -- Added fix for mozbz#1728749 -- Added fix for mozbz#1708709 - -* Thu Aug 26 2021 Martin Stransky - 91.0.2-1 -- Updated to 91.0.2 - -* Mon Aug 23 2021 Martin Stransky - 91.0.1-2 -- Set %%build_with_clang automatically based on %%toolchain - by Timm Bäder -- Updated Fedora UA patch by Eric Engestrom - (https://src.fedoraproject.org/rpms/firefox/pull-request/21) -- Added fix for mozbz#1726515 - -* Mon Aug 23 2021 Martin Stransky - 91.0.1-1 -- Updated to 91.0.1 - -* Tue Aug 10 2021 Martin Stransky - 91.0-1 -- Updated to 91.0 - -* Wed Aug 04 2021 Martin Stransky - 90.0.2-2 -- Added fix for rhbz#1988841 - Allow unsigned extensions when installed - under non-user-writable dirs. - -* Thu Jul 22 2021 Martin Stransky - 90.0.2-1 -- Updated to 90.0.2 - -* Wed Jul 21 2021 Fedora Release Engineering - 90.0.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Wed Jul 21 2021 Martin Stransky - 90.0.1-1 -- Updated to 90.0.1 -- Added fixes to build on rawhide - -* Thu Jul 15 2021 Martin Stransky - 90.0-3 -- Disabled Wayland backend on KDE due to - https://bugzilla.mozilla.org/show_bug.cgi?id=1714132 - -* Tue Jul 13 2021 Martin Stransky - 90.0-2 -- Added xorg-x11-server-Xwayland dependency for Mutter - -* Mon Jul 12 2021 Martin Stransky - 90.0-1 -- Updated to 90.0 - -* Mon Jul 12 2021 Daiki Ueno - 89.0.2-3 -- flatpak: Enable loading system trust store on the host (rhbz#1766340) - -* Wed Jun 30 2021 Martin Stransky - 89.0.2-2 -- Added fix for mozbz#1715254 (rhbz#1976892). - -* Thu Jun 24 2021 Martin Stransky - 89.0.2-1 -- Updated to latest upstream (89.0.2) - -* Mon Jun 14 2021 Martin Stransky - 89.0-2 -- Added fix for mozbz#1646135 - -* Tue Jun 1 2021 Martin Stransky - 89.0-1 -- Updated to latest upstream (89.0) - -* Mon May 10 2021 Martin Stransky - 88.0.1-1 -- Updated to latest upstream (88.0.1) - -* Tue May 4 2021 Martin Stransky - 88.0-8 -- Added fix for mozbz#1705048. - -* Fri Apr 30 2021 Martin Stransky - 88.0-7 -- Added pciutils-libs req (rhbz#1955338) -- Enabled Wayland on KDE (rhbz#1922608) - -* Tue Apr 27 2021 Martin Stransky - 88.0-6 -- Test fix. - -* Fri Apr 23 2021 Martin Stransky - 88.0-5 -- Added fix for mozbz#1580595 - mouse pointer lock. -- Another test update. - -* Thu Apr 22 2021 Martin Stransky - 88.0-4 -- Run with mochitest test suite. - -* Thu Apr 22 2021 Martin Stransky - 88.0-3 -- Build with crashreporter enabled. - -* Wed Apr 21 2021 Martin Stransky - 88.0-2 -- Added clipboard fix mzbz#1703763. - -* Mon Apr 19 2021 Martin Stransky - 88.0-1 -- Update to 88.0 - -* Mon Apr 12 2021 Martin Stransky - 87.0-12 -- Added fix for mozbz#1701089 (Widevine playback issues). - -* Tue Apr 6 2021 Martin Stransky - 87.0-11 -- Enabled xpcshell/crashtests on Wayland. - -* Sat Apr 3 2021 Martin Stransky - 87.0-10 -- Wayland testing again. - -* Thu Apr 1 2021 Martin Stransky - 87.0-9 -- Added fix for mozbz#1702606 / rhbz#1936071 -- Switched tests back to X11 due to massive failures. - -* Thu Apr 1 2021 Martin Stransky - 87.0-8 -- Run testsuite on Wayland on Fedora 33+ -- Spec cleanup - -* Wed Mar 31 2021 Martin Stransky - 87.0-7 -- Added fix for mozbz#1693472 - Wayland/KDE rendering issues. - -* Tue Mar 30 2021 Jonathan Wakely - 87.0-6 -- Rebuilt for removed libstdc++ symbol (#1937698) - -* Tue Mar 30 2021 Martin Stransky - 87.0-5 -- Reftest fix - -* Fri Mar 26 2021 Martin Stransky - 87.0-4 -- More test fixes -- Enabled ppc64le -- Disabled crashreporter on Fedora 34+ - -* Wed Mar 24 2021 Martin Stransky - 87.0-2 -- More test fixes - -* Tue Mar 23 2021 Martin Stransky - 87.0-1 -- Disabled ARM due to build failures -- Updated to 87.0 - -* Sat Mar 13 2021 Martin Stransky - 86.0.1-2 -- Enabled ARM - -* Fri Mar 12 2021 Martin Stransky - 86.0.1-1 -- Update to latest upstream (86.0.1) - -* Wed Mar 10 2021 Martin Stransky - 86.0-8 -- Temporary disable ppc64le/Fedora 35 due to - https://bugzilla.redhat.com/show_bug.cgi?id=1933742 - -* Wed Mar 3 2021 Martin Stransky - 86.0-7 -- Added fix for mozbz#1694670 - -* Mon Mar 1 2021 Martin Stransky - 86.0-6 -- Run xpcshell tests sequential -- Test fixes - -* Mon Mar 1 2021 Martin Stransky - 86.0-4 -- Enable Wayland backend only when Wayland display is set. - -* Mon Mar 1 2021 Martin Stransky - 86.0-3 -- Added icecat-78.7.1-fix_error_template_with_C_linkage.patch to - build on F34+ - -* Fri Feb 26 2021 Martin Stransky - 86.0-2 -- Built with system nss - -* Tue Feb 23 2021 Martin Stransky - 86.0-1 -- Update to 86.0 -- Disabled Wayland backend on KDE/Plasma - -* Tue Feb 23 2021 Martin Stransky - 85.0.1-2 -- Fixed some reftest run in Mock - -* Mon Feb 08 2021 Martin Stransky - 85.0.1-1 -- Updated to 85.0.1 - -* Wed Feb 03 2021 Dan Horák - 85.0-11 -- Fix parameter passing on ppc64le (mozb#1690152) - -* Tue Feb 02 2021 Kalev Lember - 85.0-10 -- Remove gtk2 support as flash plugin is no longer supported - -* Sat Jan 30 2021 Martin Stransky - 85.0-9 -- Enable WebRender on KDE/Wayland and AMD/Intel drivers. - -* Sat Jan 30 2021 Martin Stransky - 85.0-8 -- Enable Wayland backend on Fedora 34/KDE/Plasma (and other compositors) - by default (https://bugzilla.redhat.com/show_bug.cgi?id=1922608). - -* Fri Jan 29 2021 Martin Stransky - 85.0-7 -- Added clipboard fix mozbz#1631061. - -* Thu Jan 28 2021 Kalev Lember - 85.0-6 -- Make provides/requires filtering smarter/automatic (rhbz#1582116) -- Drop dbus-glib requires that are now automatically generated again - -* Thu Jan 28 2021 Martin Stransky - 85.0-5 -- Add dbus-glib requires. - -* Tue Jan 26 2021 Martin Stransky - 85.0-4 -- Added fix for mozbz#1679933 - startup crash - -* Tue Jan 26 2021 Fedora Release Engineering - 85.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Wed Jan 20 2021 Martin Stransky - 85.0-2 -- Update to 85.0. - -* Wed Jan 20 2021 Jan Horak - 84.0.2-8 -- Fixing package requires/provides - -* Tue Jan 19 2021 Martin Stransky - 84.0.2-7 -- Fixed mzbz#164294 regression. - -* Fri Jan 15 2021 Martin Stransky - 84.0.2-6 -- Added WebRender fix (mozbz#1681107). - -* Thu Jan 14 2021 Martin Stransky - 84.0.2-5 -- Removed some failing tests. -- Spec file tweaks. - -* Tue Jan 12 2021 Martin Stransky - 84.0.2-4 -- Enabled LTO in Firefox build system. - -* Tue Jan 12 2021 Martin Stransky - 84.0.2-3 -- Removed failing xpcshell/reftests, test tweaks. - -* Mon Jan 11 2021 Martin Stransky - 84.0.2-2 -- Added a workaround for rhbz#1908018 - -* Wed Jan 6 2021 Martin Stransky - 84.0.2-1 -- Updated to 84.0.2 - -* Tue Jan 05 2021 Jan Horak - 84.0.1-5 -- Removing requires/provides of the bundled libraries - -* Mon Jan 4 2021 Martin Stransky - 84.0.1-4 -- Enabled tests - -* Mon Jan 4 2021 Martin Stransky - 84.0.1-3 -- Enabled armv7hl arch on rawhide - -* Wed Dec 23 2020 Martin Stransky - 84.0.1-2 -- Reverted mzbz#1631061 due to clipboard regressions -- Disabled armv7hl build on rawhide due to rhbz#1910277 -- Build with system nss on rawhide (rhbz#1908791). - -* Tue Dec 22 2020 Martin Stransky - 84.0.1-1 -- Updated to 84.0.1 - -* Sun Dec 20 2020 Miro Hrončok - 84.0-7 -- Filter out private libraries provides -- Fixes: rhbz#1908791 - -* Thu Dec 17 2020 Martin Stransky - 84.0-6 -- Disable PGO on Rawhide due to build issues -- Disable system nss on Rawhide due to rhbz#1908018 -- Enabled system nss on Fedora 33/32 - -* Wed Dec 16 2020 Martin Stransky - 84.0-5 -- Build with tests enabled - -* Wed Dec 16 2020 Martin Stransky - 84.0-4 -- Disabled LTO due to massive test failures - -* Wed Dec 16 2020 Martin Stransky - 84.0-3 -- Updated to Firefox 84 Build 3 -- Disabled system nss due to addon breakage (rhbz#1908018). - -* Wed Dec 9 2020 Martin Stransky - 83.0-15 -- Enabled tests everywhere -- Enabled crash reporter - -* Tue Dec 1 2020 Martin Stransky - 83.0-14 -- Enabled LTO - -* Tue Dec 1 2020 Martin Stransky - 83.0-13 -- Added fix for mozbz#1672139 - -* Tue Dec 1 2020 Martin Stransky - 83.0-12 -- More mochitest fixes - -* Mon Nov 30 2020 Martin Stransky - 83.0-11 -- Mochitest tweaking - -* Sat Nov 28 2020 Martin Stransky - 83.0-10 -- Added fix for mzbz#1678680 - -* Wed Nov 25 2020 Martin Stransky - 83.0-9 -- Added mochitest test files - -* Wed Nov 25 2020 Martin Stransky - 83.0-8 -- Added fix for rhbz#1900542 - -* Wed Nov 25 2020 Martin Stransky - 83.0-7 -- Export MOZ_GMP_PATH from /usr/bin/firefox script - (https://pagure.io/fedora-workstation/issue/126) - -* Tue Nov 24 2020 Martin Stransky - 83.0-6 -- Fix mochitest - -* Wed Nov 18 2020 Martin Stransky - 83.0-5 -- Build with tests enabled - -* Wed Nov 18 2020 Martin Stransky - 83.0-4 -- Enable all arches - -* Fri Nov 13 2020 Martin Stransky - 83.0-3 -- Updated to 83.0 Build 2 - -* Thu Nov 12 2020 Martin Stransky - 83.0-1 -- Updated to 83.0 -- Updated PipeWire patches from mozbz#1672944 - -* Tue Nov 10 2020 Martin Stransky - 82.0.3-2 -- Added fix for mozbz#1885133 - -* Mon Nov 9 2020 Martin Stransky - 82.0.3-1 -- Updated to 82.0.3 - -* Mon Nov 9 2020 Kalev Lember - 82.0.2-7 -- Include date in appdata release tags - -* Fri Nov 6 2020 Tomas Popela - 82.0.2-6 -- Re-enable s390x buils by backporting a change from Thunderbird - https://src.fedoraproject.org/rpms/thunderbird/c/5f0bec1b5b79e117cc469710afbfa4d008af9c29?branch=master - -* Tue Nov 3 2020 Martin Stransky - 82.0.2-5 -- Added mozilla-openh264 dependency to play H264 clips out of the box -- Updated Firefox tests - -* Tue Nov 3 2020 Martin Stransky - 82.0.2-3 -- Disabled LTO again. - -* Tue Nov 3 2020 Martin Stransky - 82.0.2-2 -- NSS debug build - -* Thu Oct 29 2020 Martin Stransky - 82.0.2-1 -- Updated to 82.0.2 -- Removed mzbz#1668771 due to rhbz#1888920 - -* Wed Oct 28 2020 Martin Stransky - 82.0.1-1 -- Updated to 82.0.1 - -* Tue Oct 27 2020 Martin Stransky - 82.0-8 -- Added fix for mozbz#1673313 - -* Tue Oct 27 2020 Martin Stransky - 82.0-7 -- Added fix for rawhide crashes (rhbz#1891234) - -* Sat Oct 24 2020 Martin Stransky - 82.0-6 -- Enable LTO - -* Tue Oct 20 2020 Martin Stransky - 82.0-5 -- Added fix for rhbz#1889742 - Typo in /usr/bin/firefox - -* Mon Oct 19 2020 Martin Stransky - 82.0-4 -- Updated openh264 patch to use keyframes from contained - for openh264 only. - -* Mon Oct 19 2020 Martin Stransky - 82.0-3 -- Added ELN build fixes - -* Thu Oct 15 2020 Martin Stransky - 82.0-2 -- Updated SELinux relabel setup (rhbz#1731371) - -* Thu Oct 15 2020 Martin Stransky - 82.0-1 -- Updated to 82.0 Build 2 - -* Thu Oct 15 2020 Martin Stransky - 81.0.2-3 -- Added experimental openh264 seek patch (mzbz#1670333) - -* Mon Oct 12 2020 Martin Stransky - 81.0.2-2 -- Added a partial fox for rhbz#1886722 - -* Mon Oct 12 2020 Martin Stransky - 81.0.2-1 -- Updated to latest upstream - 81.0.2 - -* Thu Oct 8 2020 Martin Stransky - 81.0.1-9 -- Added an updated fix for mozbz#1656727 - -* Thu Oct 8 2020 Martin Stransky - 81.0.1-8 -- Added fixes for mozbz#1634404, mozbz#1669495 - -* Thu Oct 8 2020 Martin Stransky - 81.0.1-7 -- Removed mozbz#1656727 as it causes a regression rhbz#1886243 - -* Wed Oct 7 2020 Martin Stransky - 81.0.1-6 -- PGO patch update -- Added fix for mzbz#1669442 (LTO builds) - -* Mon Oct 5 2020 Martin Stransky - 81.0.1-5 -- Added fix for mozbz#1656727 - -* Fri Oct 2 2020 Martin Stransky - 81.0.1-4 -- Added fix for mozbz#1668771 - -* Thu Oct 1 2020 Martin Stransky - 81.0.1-3 -- Added fix for mozbz#1661192 - -* Thu Oct 1 2020 Martin Stransky - 81.0.1-2 -- Added fix for mozbz#1640567 -- Enable PGO - -* Wed Sep 30 2020 Martin Stransky - 81.0.1-1 -- Updated to 81.0.1 - -* Wed Sep 30 2020 Martin Stransky - 81.0-9 -- Disabled openh264 download -- Removed fdk-aac-free dependency (rhbz#1883672) -- Enabled LTO - -* Sat Sep 26 2020 Dan Horák - 81.0-8 -- Re-enable builds for ppc64le - -* Fri Sep 25 2020 Martin Stransky - 81.0-7 -- Added openh264 fixes - -* Wed Sep 23 2020 Martin Stransky - 81.0-6 -- Added fix for rhbz#1731371 - -* Tue Sep 22 2020 Kalev Lember - 81.0-5 -- Re-enable builds for armv7hl and aarch64 architectures - -* Tue Sep 22 2020 Kalev Lember - 81.0-4 -- Disable LTO to work around firefox build failing in F33+ - -* Mon Sep 21 2020 Martin Stransky - 81.0-3 -- Updated to 81.0 Build 2 -- Updated firefox-disable-ffvpx-with-vapi patch -- Deleted old changelog entries - -* Thu Sep 17 2020 Martin Stransky - 81.0-2 -- Added upstream patches mzbz#1665324 mozbz#1665329 -- Updated requested nss version to 3.56 - -* Tue Sep 15 2020 Martin Stransky - 81.0-1 -- Updated to 81.0 - -* Thu Sep 10 2020 Martin Stransky - 80.0.1-3 -- Test build for all arches. - -* Fri Sep 4 2020 Martin Stransky - 80.0.1-2 -- Added patch for mozbz#1875469 - -* Tue Sep 1 2020 Martin Stransky - 80.0.1-1 -- Updated to 80.0.1 - -* Tue Aug 18 2020 Martin Stransky - 80.0-1 -- Updated to 80.0 Build 2 -- Go back to gcc -- Disabled WebGL dmabuf backend due to reported errors - (mzbz#1655323, mozbz#1656505). - -* Tue Aug 18 2020 Martin Stransky - 79.0-6 -- Enabled pgo -- Build with clang - -* Tue Aug 4 2020 Martin Stransky - 79.0-5 -- Added upstream fix for mozbz#1656436. - -* Mon Aug 3 2020 Martin Stransky - 79.0-4 -- Updated fix for mozbz#1645671 - -* Thu Jul 30 2020 Martin Stransky - 79.0-3 -- Added VA-API fix for mozbz#1645671 - -* Wed Jul 29 2020 Martin Stransky - 79.0-2 -- Try to enable armv7hl again. -- Disabled ppc64le due to cargo crash (rhbz#1862012). - -* Mon Jul 27 2020 Martin Stransky - 79.0-1 -- Update to 79.0 -- Disabled PGO due to rhbz#1849165 (gcc internal error). - -* Mon Jul 27 2020 Fedora Release Engineering - 78.0.2-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Thu Jul 23 2020 Frantisek Zatloukal - 78.0-4 -- Use python3 instead of python2 for build - -* Tue Jul 21 2020 Martin Stransky - 78.0-3 -- Added fix for mozbz#1651701/rhbz#1855730 - -* Fri Jul 10 2020 Jan Horak - 78.0.2-2 -- Fixing clang build - linker setup - -* Thu Jul 09 2020 Jan Horak - 78.0.2-1 -- Update to 78.0.2 build2 - -* Wed Jul 01 2020 Jan Horak - 78.0.1-1 -- Update to 78.0.1 build1 - -* Wed Jul 1 2020 Martin Stransky - 78.0-2 -- Add 'Open the Profile Manager' desktop file entry - -* Mon Jun 29 2020 Jan Horak - 78.0-1 -- Update to 78.0 build2 - -* Tue Jun 23 2020 Martin Stransky - 77.0.1-3 -- Build with PGO/LTO again. - -* Wed Jun 03 2020 Jan Horak - 77.0.1-2 -- Update to 77.0.1 build1 - -* Wed Jun 03 2020 Jan Horak - 77.0.1-1 -- Fixing pipewire patch -- New upstream version (77.0.1) - -* Tue Jun 2 2020 Martin Stransky - 77.0-2 -- Rebuild with updated langpacks (rhbz#1843028). - -* Fri May 29 2020 Martin Stransky - 77.0-1 -- Updated to Firefox 77.0 - -* Mon May 25 2020 Martin Stransky - 76.0.1-7 -- Added fix for mozbz#1632456 - -* Mon May 25 2020 Martin Stransky - 76.0.1-6 -- Added fix for mozbz#1634213 - -* Mon May 25 2020 Martin Stransky - 76.0.1-5 -- Added fix for mozbz#1619882 - video flickering when va-api is used. - -* Thu May 21 2020 Jan Grulich - 76.0.1-4 -- Add support for PipeWire 0.3 - -* Wed May 20 2020 Peter Robinson - 76.0.1-3 -- Build aarch64 again so aarch64 users get updates - -* Wed May 13 2020 Martin Stransky - 76.0.1-2 -- Added extra va-api frames to vp8/9 decoder. - -* Fri May 8 2020 Martin Stransky - 76.0.1-1 -- Updated to 76.0.1 - -* Thu May 7 2020 Martin Stransky - 76.0-3 -- Disable ffvpx when va-api is enabled. - -* Tue May 05 2020 Jan Horak - 76.0-2 -- Don't use google safe browsing api key for the geolocation - -* Sun May 3 2020 Martin Stransky - 76.0-1 -- Updated to 76.0 - -* Thu Apr 23 2020 Martin Stransky - 75.0-3 -- Added fix for mozilla bug #1527976 (browser D&D) - -* Tue Apr 14 2020 Jan Horak - 75.0-2 -- Removed gconf-2.0 build requirement - -* Mon Apr 06 2020 Martin Stransky - 75.0-1 -- Updated to 75.0 - -* Mon Apr 06 2020 Martin Stransky - 74.0.1-3 -- Added fix for mozbz#1627469 - -* Mon Apr 06 2020 Jan Horak - 74.0.1-2 -- Fixing pipewire patch - -* Sat Apr 4 2020 Martin Stransky - 74.0.1-1 -- Updated to latest upstream -- Added fix for mozbz#1624745 - -* Wed Apr 1 2020 Martin Stransky - 74.0-14 -- Added fixes to gnome shell search provider - -* Tue Mar 31 2020 Jan Horak - 74.0-13 -- Allow addons sideload to fix missing langpacks issues - -* Thu Mar 19 2020 Martin Stransky - 74.0-12 -- Added fix for rhbz#1814850 by Daniel Rusek - -* Tue Mar 17 2020 Martin Stransky - 74.0-11 -- Added fix for mozbz#1623106 - -* Tue Mar 17 2020 Martin Stransky - 74.0-9 -- Added fix for mozbz#1623060 - -* Tue Mar 17 2020 Jan Grulich - 74-0-8 -- Add support for window sharing - -* Mon Mar 16 2020 Martin Stransky - 74.0-7 -- Use D-Bus remote exclusively for both X11 and Wayland backends - when WAYLAND_DISPLAY is present. - -* Fri Mar 13 2020 Martin Stransky - 74.0-6 -- Added fix for mozbz#1615098 - -* Thu Mar 12 2020 Martin Stransky - 74.0-5 -- Added fix for mozbz#1196777 - -* Tue Mar 10 2020 Kalev Lember - 74.0-4 -- Remove unused libIDL build dep -- Disabled arm due to build failures - -* Tue Mar 10 2020 Martin Stransky - 74.0-3 -- Update to 74.0 Build 3 - -* Mon Mar 09 2020 Martin Stransky - 74.0-2 -- Update to 74.0 Build 2 - -* Tue Mar 03 2020 Martin Stransky - 74.0-1 -- Update to 74.0 Build 1 -- Added mozbz#1609538 - -* Mon Feb 24 2020 Martin Stransky - 73.0.1-4 -- Using pipewire-0.2 as buildrequire -- Added armv7hl fixes by Gabriel Hojda - -* Mon Feb 24 2020 Martin Stransky - 73.0.1-2 -- Fixed Bug 1804787 - Some .desktop menu entries unlocalized - -* Thu Feb 20 2020 Martin Stransky - 73.0.1-1 -- Update to 73.0.1 - -* Tue Feb 11 2020 Jan Horak - 73.0-1 -- Update to 73.0 build3 - -* Tue Feb 04 2020 Kalev Lember - 72.0.2-3 -- Fix various issues with appdata, making the validation pass again -- Validate appdata during the build -- Make sure the release tag in appdata is in sync with the package version - -* Tue Jan 28 2020 Fedora Release Engineering - 72.0.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Mon Jan 20 2020 Jan Horak - 72.0.2-1 -- Update to 72.0.2 build1 - -* Wed Jan 15 2020 Jan Horak - 72.0.1-2 -- Added fix for wrong cursor offset of popup windows and bumped required nss - version - -* Wed Jan 08 2020 Jan Horak - 72.0.1-1 -- Update to 72.0.1 build1 - -* Mon Jan 06 2020 Jan Horak - 72.0-2 -- Update to 72.0 build4 - -* Fri Jan 03 2020 Jan Horak - 72.0-1 -- Update to 72.0 build3 - -* Wed Dec 18 2019 Jan Horak - 71.0-17 +* Wed Dec 18 2019 Jan Horak - Fix for wrong intl.accept_lang when using non en-us langpack -* Mon Dec 9 2019 Martin Stransky - 71.0-16 -- Build with asan +* Wed Nov 27 2019 Martin Stransky - 68.3.0-1 +- Update to 68.3.0 ESR -* Mon Dec 9 2019 Martin Stransky - 71.0-15 -- Enabled Mozilla crash reporter -- Enabled PGO builds +* Thu Oct 24 2019 Martin Stransky - 68.2.0-4 +- Added patch for TLS 1.3 support. -* Mon Dec 9 2019 Martin Stransky - 71.0-14 -- Updated workaround for mzbz#1601707 +* Wed Oct 23 2019 Martin Stransky - 68.2.0-3 +- Rebuild -* Sat Dec 7 2019 Martin Stransky - 71.0-13 -- Built with -fno-lifetime-dse +* Mon Oct 21 2019 Martin Stransky - 68.2.0-2 +- Rebuild -* Fri Dec 6 2019 Martin Stransky - 71.0-12 -- Clang test build, should fix extension breakage +* Thu Oct 17 2019 Martin Stransky - 68.2.0-1 +- Update to 68.2.0 ESR -* Fri Dec 6 2019 Martin Stransky - 71.0-11 -- Added workaround for: - https://bugzilla.mozilla.org/show_bug.cgi?id=1601707 - http://gcc.gnu.org/PR92831 +* Thu Oct 10 2019 Martin Stransky - 68.1.0-6 +- Enable system nss on RHEL6 -* Fri Dec 6 2019 Martin Stransky - 71.0-10 -- Remove appdata and ship metainfo only +* Thu Sep 5 2019 Jan Horak - 68.1.0-2 +- Enable building langpacks -* Wed Dec 4 2019 Martin Stransky - 71.0-9 -- Included kiosk mode workaround (mozbz#1594738) +* Wed Aug 28 2019 Jan Horak - 68.1.0-1 +- Update to 68.1.0 ESR -* Tue Dec 3 2019 Martin Stransky - 71.0-8 -- Disabled PGO due to startup crash +* Mon Aug 5 2019 Martin Stransky - 68.0.1-4 +- Enable system nss -* Mon Dec 2 2019 Martin Stransky - 71.0-7 -- Updated to 71.0 Build 5 -- Updated Gnome search provider +* Mon Jul 29 2019 Martin Stransky - 68.0.1-3 +- Enable official branding -* Wed Nov 27 2019 Martin Stransky - 71.0-6 -- Enable Gnome search provider +* Fri Jul 26 2019 Martin Stransky - 68.0.1-2 +- Enabled PipeWire on RHEL8 -* Wed Nov 27 2019 Martin Stransky - 71.0-5 -- Added fix for mozbz#1593408 -- Temporary disable Gnome search provider +* Fri Jul 26 2019 Martin Stransky - 68.0.1-1 +- Updated to 68.0.1 ESR -* Tue Nov 26 2019 Martin Stransky - 71.0-2 -- Enable Gnome search provider +* Tue Jul 16 2019 Jan Horak - 68.0-0.11 +- Update to 68.0 ESR -* Tue Nov 26 2019 Martin Stransky - 71.0-1 -- Updated to 71.0 Build 2 +* Tue Jun 25 2019 Martin Stransky - 68.0-0.10 +- Updated to 68.0 alpha 13 +- Enabled second arches -* Tue Nov 19 2019 Jan Horak - 70.0.1-5 -- Added fixes for missing popup and overflow widget glitches +* Fri Mar 22 2019 Martin Stransky - 68.0-0.1 +- Updated to 68.0 alpha -* Mon Nov 04 2019 Jan Horak - 70.0.1-4 -- Added fix for non-scrollable popups +* Fri Mar 15 2019 Martin Stransky - 60.6.0-3 +- Added Google API keys (mozbz#1531176) -* Fri Nov 1 2019 Martin Stransky - 70.0.1-1 -- Updated to 70.0.1 -- Built with system-nss (reverted 70.0-2 change). +* Thu Mar 14 2019 Martin Stransky - 60.6.0-2 +- Update to 60.6.0 ESR (Build 2) -* Thu Oct 31 2019 Martin Stransky - 70.0-2 -- Switched to in-tree nss due to rhbz#1752303 +* Wed Mar 13 2019 Martin Stransky - 60.6.0-1 +- Update to 60.6.0 ESR (Build 1) + +* Wed Feb 13 2019 Jan Horak - 60.5.1-1 +- Update to 60.5.1 ESR + +* Wed Feb 6 2019 Martin Stransky - 60.5.0-3 +- Added fix for rhbz#1672424 - Firefox crashes on NFS drives. + +* Fri Jan 25 2019 Martin Stransky - 60.5.0-2 +- Updated to 60.5.0 ESR build2 + +* Tue Jan 22 2019 Martin Stransky - 60.5.0-1 +- Updated to 60.5.0 ESR build1 + +* Thu Jan 10 2019 Jan Horak - 60.4.0-3 +- Fixing fontconfig warnings (rhbz#1601475) + +* Wed Jan 9 2019 Jan Horak - 60.4.0-2 +- Added pipewire patch from Tomas Popela (rhbz#1664270) + +* Wed Dec 5 2018 Jan Horak - 60.4.0-1 +- Update to 60.4.0 ESR + +* Tue Dec 4 2018 Jan Horak - 60.3.0-2 +- Added firefox-gnome-shell-extension + +* Fri Oct 19 2018 Jan Horak - 60.3.0-1 +- Update to 60.3.0 ESR + +* Wed Oct 10 2018 Jan Horak - 60.2.2-2 +- Added patch for rhbz#1633932 + +* Tue Oct 2 2018 Jan Horak - 60.2.2-1 +- Update to 60.2.2 ESR + +* Mon Sep 24 2018 Jan Horak - 60.2.1-1 +- Update to 60.2.1 ESR + +* Fri Aug 31 2018 Jan Horak - 60.2.0-1 +- Update to 60.2.0 ESR + +* Tue Aug 28 2018 Jan Horak - 60.1.0-9 +- Do not set user agent (rhbz#1608065) +- GTK dialogs are localized now (rhbz#1619373) +- JNLP association works again (rhbz#1607457) + +* Thu Aug 16 2018 Jan Horak - 60.1.0-8 +- Fixed homepage and bookmarks (rhbz#1606778) +- Fixed missing file associations in RHEL6 (rhbz#1613565) + +* Thu Jul 12 2018 Jan Horak - 60.1.0-7 +- Run at-spi-bus if not running already (for the bundled gtk3) + +* Mon Jul 9 2018 Jan Horak - 60.1.0-6 +- Fix for missing schemes for bundled gtk3 + +* Mon Jun 25 2018 Martin Stransky - 60.1.0-5 +- Added mesa-libEGL dependency to gtk3/rhel6 + +* Sun Jun 24 2018 Martin Stransky - 60.1.0-4 +- Disabled jemalloc on all second arches + +* Fri Jun 22 2018 Martin Stransky - 60.1.0-3 +- Updated to 60.1.0 ESR build2 + +* Thu Jun 21 2018 Martin Stransky - 60.1.0-2 +- Disabled jemalloc on second arches + +* Wed Jun 20 2018 Martin Stransky - 60.1.0-1 +- Updated to 60.1.0 ESR + +* Wed Jun 13 2018 Jan Horak - 60.0-12 +- Fixing bundled libffi issues +- Readded some requirements + +* Mon Jun 11 2018 Martin Stransky - 60.0-10 +- Added fix for mozilla BZ#1436242 - IPC crashes. + +* Mon Jun 11 2018 Jan Horak - 60.0-9 +- Bundling libffi for the sec-arches +- Added openssl-devel for the Python +- Fixing bundled gtk3 + +* Fri May 18 2018 Martin Stransky - 60.0-8 +- Added fix for mozilla BZ#1458492 + +* Wed May 16 2018 Martin Stransky - 60.0-7 +- Added patch from rhbz#1498561 to fix ppc64(le) crashes. + +* Wed May 16 2018 Martin Stransky - 60.0-6 +- Disabled jemalloc on second arches + +* Sun May 6 2018 Jan Horak - 60.0-4 +- Update to 60.0 ESR + +* Thu Mar 8 2018 Jan Horak - 52.7.0-1 +- Update to 52.7.0 ESR + +* Mon Jan 29 2018 Martin Stransky - 52.6.0-2 +- Build Firefox for desktop arches only (x86_64 and ppc64le) + +* Thu Jan 18 2018 Martin Stransky - 52.6.0-1 +- Update to 52.6.0 ESR + +* Thu Nov 9 2017 Jan Horak - 52.5.0-1 +- Update to 52.5.0 ESR + +* Mon Sep 25 2017 Jan Horak - 52.4.0-1 +- Update to 52.4.0 ESR + +* Thu Aug 3 2017 Jan Horak - 52.3.0-3 +- Update to 52.3.0 ESR (b2) +- Require correct nss version + +* Tue Jun 13 2017 Jan Horak - 52.2.0-1 +- Update to 52.2.0 ESR + +* Wed May 24 2017 Jan Horak - 52.1.2-1 +- Update to 52.1.2 ESR + +* Wed May 24 2017 Jan Horak - 52.0-7 +- Added fix for accept language (rhbz#1454322) + +* Wed Mar 22 2017 Jan Horak - 52.0-6 +- Removing patch required for older NSS from RHEL 7.3 +- Added patch for rhbz#1414564 + +* Fri Mar 17 2017 Martin Stransky - 52.0-5 +- Added fix for mozbz#1348168/CVE-2017-5428 + +* Mon Mar 6 2017 Jan Horak - 52.0-4 +- Update to 52.0 ESR (b4) + +* Thu Mar 2 2017 Martin Stransky - 52.0-3 +- Added fix for rhbz#1423012 - ppc64 gfx crashes + +* Wed Mar 1 2017 Jan Horak - 52.0-2 +- Enable system nss + +* Tue Feb 28 2017 Martin Stransky - 52.0-1 +- Update to 52.0ESR (B1) +- Build RHEL7 package for Gtk3 + +* Mon Feb 27 2017 Martin Stransky - 52.0-0.13 +- Added fix for rhbz#1414535 + +* Tue Feb 21 2017 Jan Horak - 52.0-0.12 +- Update to 52.0b8 + +* Tue Feb 7 2017 Jan Horak - 52.0-0.11 +- Readded addons patch + +* Mon Feb 6 2017 Jan Horak - 52.0-0.10 +- Update to 52.0b3 + +* Tue Jan 31 2017 Jan Horak - 52.0-0.9 +- Update to 52.0b2 + +* Fri Jan 27 2017 Jan Horak - 52.0-0.8 +- Update to 52.0b1 + +* Thu Dec 8 2016 Jan Horak - 52.0-0.5 +- Firefox Aurora 52 testing build -* Tue Oct 15 2019 Martin Stransky - 70.0-1 -- Updated to 70.0 diff --git a/gen_cbindgen-vendor.sh b/gen_cbindgen-vendor.sh deleted file mode 100755 index 4e8aded..0000000 --- a/gen_cbindgen-vendor.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -set -x - -# Dummy Cargo.toml file with cbindgen dependency -cat > Cargo.toml < Cargo.toml < -+ -+#include "libavutil/channel_layout.h" -+#include "libavutil/common.h" -+#include "libavutil/opt.h" -+#include "avcodec.h" -+#include "codec_internal.h" -+#include "decode.h" -+ -+#ifdef AACDECODER_LIB_VL0 -+#define FDKDEC_VER_AT_LEAST(vl0, vl1) \ -+ ((AACDECODER_LIB_VL0 > vl0) || \ -+ (AACDECODER_LIB_VL0 == vl0 && AACDECODER_LIB_VL1 >= vl1)) -+#else -+#define FDKDEC_VER_AT_LEAST(vl0, vl1) 0 -+#endif -+ -+#if !FDKDEC_VER_AT_LEAST(2, 5) // < 2.5.10 -+#define AAC_PCM_MAX_OUTPUT_CHANNELS AAC_PCM_OUTPUT_CHANNELS -+#endif -+ -+enum ConcealMethod { -+ CONCEAL_METHOD_SPECTRAL_MUTING = 0, -+ CONCEAL_METHOD_NOISE_SUBSTITUTION = 1, -+ CONCEAL_METHOD_ENERGY_INTERPOLATION = 2, -+ CONCEAL_METHOD_NB, -+}; -+ -+typedef struct FDKAACDecContext { -+ const AVClass *class; -+ HANDLE_AACDECODER handle; -+ uint8_t *decoder_buffer; -+ int decoder_buffer_size; -+ uint8_t *anc_buffer; -+ int conceal_method; -+ int drc_level; -+ int drc_boost; -+ int drc_heavy; -+ int drc_effect; -+ int drc_cut; -+ int album_mode; -+ int level_limit; -+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10 -+ int output_delay_set; -+ int flush_samples; -+ int delay_samples; -+#endif -+ AVChannelLayout downmix_layout; -+} FDKAACDecContext; -+ -+ -+#define DMX_ANC_BUFFSIZE 128 -+#define DECODER_MAX_CHANNELS 8 -+#define DECODER_BUFFSIZE 2048 * sizeof(INT_PCM) -+ -+#define OFFSET(x) offsetof(FDKAACDecContext, x) -+#define AD AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM -+static const AVOption fdk_aac_dec_options[] = { -+ { "conceal", "Error concealment method", OFFSET(conceal_method), AV_OPT_TYPE_INT, { .i64 = CONCEAL_METHOD_NOISE_SUBSTITUTION }, CONCEAL_METHOD_SPECTRAL_MUTING, CONCEAL_METHOD_NB - 1, AD, "conceal" }, -+ { "spectral", "Spectral muting", 0, AV_OPT_TYPE_CONST, { .i64 = CONCEAL_METHOD_SPECTRAL_MUTING }, INT_MIN, INT_MAX, AD, "conceal" }, -+ { "noise", "Noise Substitution", 0, AV_OPT_TYPE_CONST, { .i64 = CONCEAL_METHOD_NOISE_SUBSTITUTION }, INT_MIN, INT_MAX, AD, "conceal" }, -+ { "energy", "Energy Interpolation", 0, AV_OPT_TYPE_CONST, { .i64 = CONCEAL_METHOD_ENERGY_INTERPOLATION }, INT_MIN, INT_MAX, AD, "conceal" }, -+ { "drc_boost", "Dynamic Range Control: boost, where [0] is none and [127] is max boost", -+ OFFSET(drc_boost), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 127, AD, NULL }, -+ { "drc_cut", "Dynamic Range Control: attenuation factor, where [0] is none and [127] is max compression", -+ OFFSET(drc_cut), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 127, AD, NULL }, -+ { "drc_level", "Dynamic Range Control: reference level, quantized to 0.25dB steps where [0] is 0dB and [127] is -31.75dB, -1 for auto, and -2 for disabled", -+ OFFSET(drc_level), AV_OPT_TYPE_INT, { .i64 = -1}, -2, 127, AD, NULL }, -+ { "drc_heavy", "Dynamic Range Control: heavy compression, where [1] is on (RF mode) and [0] is off", -+ OFFSET(drc_heavy), AV_OPT_TYPE_INT, { .i64 = -1}, -1, 1, AD, NULL }, -+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10 -+ { "level_limit", "Signal level limiting", -+ OFFSET(level_limit), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, AD }, -+#endif -+#if FDKDEC_VER_AT_LEAST(3, 0) // 3.0.0 -+ { "drc_effect","Dynamic Range Control: effect type, where e.g. [0] is none and [6] is general", -+ OFFSET(drc_effect), AV_OPT_TYPE_INT, { .i64 = -1}, -1, 8, AD, NULL }, -+#endif -+#if FDKDEC_VER_AT_LEAST(3, 1) // 3.1.0 -+ { "album_mode","Dynamic Range Control: album mode, where [0] is off and [1] is on", -+ OFFSET(album_mode), AV_OPT_TYPE_INT, { .i64 = -1}, -1, 1, AD, NULL }, -+#endif -+ { "downmix", "Request a specific channel layout from the decoder", OFFSET(downmix_layout), AV_OPT_TYPE_CHLAYOUT, {.str = NULL}, .flags = AD }, -+ { NULL } -+}; -+ -+static const AVClass fdk_aac_dec_class = { -+ .class_name = "libfdk-aac decoder", -+ .item_name = av_default_item_name, -+ .option = fdk_aac_dec_options, -+ .version = LIBAVUTIL_VERSION_INT, -+}; -+ -+static int get_stream_info(AVCodecContext *avctx) -+{ -+ FDKAACDecContext *s = avctx->priv_data; -+ CStreamInfo *info = aacDecoder_GetStreamInfo(s->handle); -+ int channel_counts[0x24] = { 0 }; -+ int i, ch_error = 0; -+ uint64_t ch_layout = 0; -+ -+ if (!info) { -+ av_log(avctx, AV_LOG_ERROR, "Unable to get stream info\n"); -+ return AVERROR_UNKNOWN; -+ } -+ -+ if (info->sampleRate <= 0) { -+ av_log(avctx, AV_LOG_ERROR, "Stream info not initialized\n"); -+ return AVERROR_UNKNOWN; -+ } -+ avctx->sample_rate = info->sampleRate; -+ avctx->frame_size = info->frameSize; -+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10 -+ if (!s->output_delay_set && info->outputDelay) { -+ // Set this only once. -+ s->flush_samples = info->outputDelay; -+ s->delay_samples = info->outputDelay; -+ s->output_delay_set = 1; -+ } -+#endif -+ -+ for (i = 0; i < info->numChannels; i++) { -+ AUDIO_CHANNEL_TYPE ctype = info->pChannelType[i]; -+ if (ctype <= ACT_NONE || ctype >= FF_ARRAY_ELEMS(channel_counts)) { -+ av_log(avctx, AV_LOG_WARNING, "unknown channel type\n"); -+ break; -+ } -+ channel_counts[ctype]++; -+ } -+ av_log(avctx, AV_LOG_DEBUG, -+ "%d channels - front:%d side:%d back:%d lfe:%d top:%d\n", -+ info->numChannels, -+ channel_counts[ACT_FRONT], channel_counts[ACT_SIDE], -+ channel_counts[ACT_BACK], channel_counts[ACT_LFE], -+ channel_counts[ACT_FRONT_TOP] + channel_counts[ACT_SIDE_TOP] + -+ channel_counts[ACT_BACK_TOP] + channel_counts[ACT_TOP]); -+ -+ switch (channel_counts[ACT_FRONT]) { -+ case 4: -+ ch_layout |= AV_CH_LAYOUT_STEREO | AV_CH_FRONT_LEFT_OF_CENTER | -+ AV_CH_FRONT_RIGHT_OF_CENTER; -+ break; -+ case 3: -+ ch_layout |= AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER; -+ break; -+ case 2: -+ ch_layout |= AV_CH_LAYOUT_STEREO; -+ break; -+ case 1: -+ ch_layout |= AV_CH_FRONT_CENTER; -+ break; -+ default: -+ av_log(avctx, AV_LOG_WARNING, -+ "unsupported number of front channels: %d\n", -+ channel_counts[ACT_FRONT]); -+ ch_error = 1; -+ break; -+ } -+ if (channel_counts[ACT_SIDE] > 0) { -+ if (channel_counts[ACT_SIDE] == 2) { -+ ch_layout |= AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT; -+ } else { -+ av_log(avctx, AV_LOG_WARNING, -+ "unsupported number of side channels: %d\n", -+ channel_counts[ACT_SIDE]); -+ ch_error = 1; -+ } -+ } -+ if (channel_counts[ACT_BACK] > 0) { -+ switch (channel_counts[ACT_BACK]) { -+ case 3: -+ ch_layout |= AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT | AV_CH_BACK_CENTER; -+ break; -+ case 2: -+ ch_layout |= AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT; -+ break; -+ case 1: -+ ch_layout |= AV_CH_BACK_CENTER; -+ break; -+ default: -+ av_log(avctx, AV_LOG_WARNING, -+ "unsupported number of back channels: %d\n", -+ channel_counts[ACT_BACK]); -+ ch_error = 1; -+ break; -+ } -+ } -+ if (channel_counts[ACT_LFE] > 0) { -+ if (channel_counts[ACT_LFE] == 1) { -+ ch_layout |= AV_CH_LOW_FREQUENCY; -+ } else { -+ av_log(avctx, AV_LOG_WARNING, -+ "unsupported number of LFE channels: %d\n", -+ channel_counts[ACT_LFE]); -+ ch_error = 1; -+ } -+ } -+ -+ av_channel_layout_uninit(&avctx->ch_layout); -+ av_channel_layout_from_mask(&avctx->ch_layout, ch_layout); -+ if (!ch_error && avctx->ch_layout.nb_channels != info->numChannels) { -+ av_log(avctx, AV_LOG_WARNING, "unsupported channel configuration\n"); -+ ch_error = 1; -+ } -+ if (ch_error) -+ avctx->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; -+ -+ return 0; -+} -+ -+static av_cold int fdk_aac_decode_close(AVCodecContext *avctx) -+{ -+ FDKAACDecContext *s = avctx->priv_data; -+ -+ if (s->handle) -+ aacDecoder_Close(s->handle); -+ av_freep(&s->decoder_buffer); -+ av_freep(&s->anc_buffer); -+ -+ return 0; -+} -+ -+static av_cold int fdk_aac_decode_init(AVCodecContext *avctx) -+{ -+ FDKAACDecContext *s = avctx->priv_data; -+ AAC_DECODER_ERROR err; -+ -+ s->handle = aacDecoder_Open(avctx->extradata_size ? TT_MP4_RAW : TT_MP4_ADTS, 1); -+ if (!s->handle) { -+ av_log(avctx, AV_LOG_ERROR, "Error opening decoder\n"); -+ return AVERROR_UNKNOWN; -+ } -+ -+ if (avctx->extradata_size) { -+ if ((err = aacDecoder_ConfigRaw(s->handle, &avctx->extradata, -+ &avctx->extradata_size)) != AAC_DEC_OK) { -+ av_log(avctx, AV_LOG_ERROR, "Unable to set extradata\n"); -+ return AVERROR_INVALIDDATA; -+ } -+ } -+ -+ if ((err = aacDecoder_SetParam(s->handle, AAC_CONCEAL_METHOD, -+ s->conceal_method)) != AAC_DEC_OK) { -+ av_log(avctx, AV_LOG_ERROR, "Unable to set error concealment method\n"); -+ return AVERROR_UNKNOWN; -+ } -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ if (avctx->request_channel_layout) { -+ av_channel_layout_uninit(&s->downmix_layout); -+ av_channel_layout_from_mask(&s->downmix_layout, avctx->request_channel_layout); -+ } -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ if (s->downmix_layout.nb_channels > 0 && -+ s->downmix_layout.order != AV_CHANNEL_ORDER_NATIVE) { -+ int downmix_channels = -1; -+ -+ switch (s->downmix_layout.u.mask) { -+ case AV_CH_LAYOUT_STEREO: -+ case AV_CH_LAYOUT_STEREO_DOWNMIX: -+ downmix_channels = 2; -+ break; -+ case AV_CH_LAYOUT_MONO: -+ downmix_channels = 1; -+ break; -+ default: -+ av_log(avctx, AV_LOG_WARNING, "Invalid downmix option\n"); -+ break; -+ } -+ -+ if (downmix_channels != -1) { -+ if (aacDecoder_SetParam(s->handle, AAC_PCM_MAX_OUTPUT_CHANNELS, -+ downmix_channels) != AAC_DEC_OK) { -+ av_log(avctx, AV_LOG_WARNING, "Unable to set output channels in the decoder\n"); -+ } else { -+ s->anc_buffer = av_malloc(DMX_ANC_BUFFSIZE); -+ if (!s->anc_buffer) { -+ av_log(avctx, AV_LOG_ERROR, "Unable to allocate ancillary buffer for the decoder\n"); -+ return AVERROR(ENOMEM); -+ } -+ if (aacDecoder_AncDataInit(s->handle, s->anc_buffer, DMX_ANC_BUFFSIZE)) { -+ av_log(avctx, AV_LOG_ERROR, "Unable to register downmix ancillary buffer in the decoder\n"); -+ return AVERROR_UNKNOWN; -+ } -+ } -+ } -+ } -+ -+ if (s->drc_boost != -1) { -+ if (aacDecoder_SetParam(s->handle, AAC_DRC_BOOST_FACTOR, s->drc_boost) != AAC_DEC_OK) { -+ av_log(avctx, AV_LOG_ERROR, "Unable to set DRC boost factor in the decoder\n"); -+ return AVERROR_UNKNOWN; -+ } -+ } -+ -+ if (s->drc_cut != -1) { -+ if (aacDecoder_SetParam(s->handle, AAC_DRC_ATTENUATION_FACTOR, s->drc_cut) != AAC_DEC_OK) { -+ av_log(avctx, AV_LOG_ERROR, "Unable to set DRC attenuation factor in the decoder\n"); -+ return AVERROR_UNKNOWN; -+ } -+ } -+ -+ if (s->drc_level != -1) { -+ // This option defaults to -1, i.e. not calling -+ // aacDecoder_SetParam(AAC_DRC_REFERENCE_LEVEL) at all, which defaults -+ // to the level from DRC metadata, if available. The user can set -+ // -drc_level -2, which calls aacDecoder_SetParam( -+ // AAC_DRC_REFERENCE_LEVEL) with a negative value, which then -+ // explicitly disables the feature. -+ if (aacDecoder_SetParam(s->handle, AAC_DRC_REFERENCE_LEVEL, s->drc_level) != AAC_DEC_OK) { -+ av_log(avctx, AV_LOG_ERROR, "Unable to set DRC reference level in the decoder\n"); -+ return AVERROR_UNKNOWN; -+ } -+ } -+ -+ if (s->drc_heavy != -1) { -+ if (aacDecoder_SetParam(s->handle, AAC_DRC_HEAVY_COMPRESSION, s->drc_heavy) != AAC_DEC_OK) { -+ av_log(avctx, AV_LOG_ERROR, "Unable to set DRC heavy compression in the decoder\n"); -+ return AVERROR_UNKNOWN; -+ } -+ } -+ -+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10 -+ // Setting this parameter to -1 enables the auto behaviour in the library. -+ if (aacDecoder_SetParam(s->handle, AAC_PCM_LIMITER_ENABLE, s->level_limit) != AAC_DEC_OK) { -+ av_log(avctx, AV_LOG_ERROR, "Unable to set in signal level limiting in the decoder\n"); -+ return AVERROR_UNKNOWN; -+ } -+#endif -+ -+#if FDKDEC_VER_AT_LEAST(3, 0) // 3.0.0 -+ if (s->drc_effect != -1) { -+ if (aacDecoder_SetParam(s->handle, AAC_UNIDRC_SET_EFFECT, s->drc_effect) != AAC_DEC_OK) { -+ av_log(avctx, AV_LOG_ERROR, "Unable to set DRC effect type in the decoder\n"); -+ return AVERROR_UNKNOWN; -+ } -+ } -+#endif -+ -+#if FDKDEC_VER_AT_LEAST(3, 1) // 3.1.0 -+ if (s->album_mode != -1) { -+ if (aacDecoder_SetParam(s->handle, AAC_UNIDRC_ALBUM_MODE, s->album_mode) != AAC_DEC_OK) { -+ av_log(avctx, AV_LOG_ERROR, "Unable to set album mode in the decoder\n"); -+ return AVERROR_UNKNOWN; -+ } -+ } -+#endif -+ -+ avctx->sample_fmt = AV_SAMPLE_FMT_S16; -+ -+ s->decoder_buffer_size = DECODER_BUFFSIZE * DECODER_MAX_CHANNELS; -+ s->decoder_buffer = av_malloc(s->decoder_buffer_size); -+ if (!s->decoder_buffer) -+ return AVERROR(ENOMEM); -+ -+ return 0; -+} -+ -+static int fdk_aac_decode_frame(AVCodecContext *avctx, AVFrame *frame, -+ int *got_frame_ptr, AVPacket *avpkt) -+{ -+ FDKAACDecContext *s = avctx->priv_data; -+ int ret; -+ AAC_DECODER_ERROR err; -+ UINT valid = avpkt->size; -+ UINT flags = 0; -+ int input_offset = 0; -+ -+ if (avpkt->size) { -+ err = aacDecoder_Fill(s->handle, &avpkt->data, &avpkt->size, &valid); -+ if (err != AAC_DEC_OK) { -+ av_log(avctx, AV_LOG_ERROR, "aacDecoder_Fill() failed: %x\n", err); -+ return AVERROR_INVALIDDATA; -+ } -+ } else { -+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10 -+ /* Handle decoder draining */ -+ if (s->flush_samples > 0) { -+ flags |= AACDEC_FLUSH; -+ } else { -+ return AVERROR_EOF; -+ } -+#else -+ return AVERROR_EOF; -+#endif -+ } -+ -+ err = aacDecoder_DecodeFrame(s->handle, (INT_PCM *) s->decoder_buffer, -+ s->decoder_buffer_size / sizeof(INT_PCM), -+ flags); -+ if (err == AAC_DEC_NOT_ENOUGH_BITS) { -+ ret = avpkt->size - valid; -+ goto end; -+ } -+ if (err != AAC_DEC_OK) { -+ av_log(avctx, AV_LOG_ERROR, -+ "aacDecoder_DecodeFrame() failed: %x\n", err); -+ ret = AVERROR_UNKNOWN; -+ goto end; -+ } -+ -+ if ((ret = get_stream_info(avctx)) < 0) -+ goto end; -+ frame->nb_samples = avctx->frame_size; -+ -+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10 -+ if (flags & AACDEC_FLUSH) { -+ // Only return the right amount of samples at the end; if calling the -+ // decoder with AACDEC_FLUSH, it will keep returning frames indefinitely. -+ frame->nb_samples = FFMIN(s->flush_samples, frame->nb_samples); -+ av_log(s, AV_LOG_DEBUG, "Returning %d/%d delayed samples.\n", -+ frame->nb_samples, s->flush_samples); -+ s->flush_samples -= frame->nb_samples; -+ } else { -+ // Trim off samples from the start to compensate for extra decoder -+ // delay. We could also just adjust the pts, but this avoids -+ // including the extra samples in the output altogether. -+ if (s->delay_samples) { -+ int drop_samples = FFMIN(s->delay_samples, frame->nb_samples); -+ av_log(s, AV_LOG_DEBUG, "Dropping %d/%d delayed samples.\n", -+ drop_samples, s->delay_samples); -+ s->delay_samples -= drop_samples; -+ frame->nb_samples -= drop_samples; -+ input_offset = drop_samples * avctx->ch_layout.nb_channels; -+ if (frame->nb_samples <= 0) -+ return 0; -+ } -+ } -+#endif -+ -+ if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) -+ goto end; -+ -+ memcpy(frame->extended_data[0], s->decoder_buffer + input_offset, -+ avctx->ch_layout.nb_channels * frame->nb_samples * -+ av_get_bytes_per_sample(avctx->sample_fmt)); -+ -+ *got_frame_ptr = 1; -+ ret = avpkt->size - valid; -+ -+end: -+ return ret; -+} -+ -+static av_cold void fdk_aac_decode_flush(AVCodecContext *avctx) -+{ -+ FDKAACDecContext *s = avctx->priv_data; -+ AAC_DECODER_ERROR err; -+ -+ if (!s->handle) -+ return; -+ -+ if ((err = aacDecoder_SetParam(s->handle, -+ AAC_TPDEC_CLEAR_BUFFER, 1)) != AAC_DEC_OK) -+ av_log(avctx, AV_LOG_WARNING, "failed to clear buffer when flushing\n"); -+} -+ -+const FFCodec ff_libfdk_aac_decoder = { -+ .p.name = "libfdk_aac", -+ CODEC_LONG_NAME("Fraunhofer FDK AAC"), -+ .p.type = AVMEDIA_TYPE_AUDIO, -+ .p.id = AV_CODEC_ID_AAC, -+ .priv_data_size = sizeof(FDKAACDecContext), -+ .init = fdk_aac_decode_init, -+ FF_CODEC_DECODE_CB(fdk_aac_decode_frame), -+ .close = fdk_aac_decode_close, -+ .flush = fdk_aac_decode_flush, -+ .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF -+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10 -+ | AV_CODEC_CAP_DELAY -+#endif -+ , -+ .p.priv_class = &fdk_aac_dec_class, -+ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, -+ .p.wrapper_name = "libfdk", -+}; -diff -up firefox-108.0/media/ffvpx/libavcodec/moz.build.1667096 firefox-108.0/media/ffvpx/libavcodec/moz.build ---- firefox-108.0/media/ffvpx/libavcodec/moz.build.1667096 2022-12-05 21:18:01.000000000 +0100 -+++ firefox-108.0/media/ffvpx/libavcodec/moz.build 2022-12-08 08:29:54.514562328 +0100 -@@ -130,6 +130,12 @@ if CONFIG['MOZ_LIBAV_FFT']: - 'avfft.c', - ] - -+if CONFIG['MOZ_FDK_AAC']: -+ SOURCES += [ -+ 'libfdk-aacdec.c', -+ ] -+ OS_LIBS += CONFIG['MOZ_FDK_AAC_LIBS'] -+ - SYMBOLS_FILE = 'avcodec.symbols' - NoVisibilityFlags() - -diff -up firefox-108.0/toolkit/moz.configure.1667096 firefox-108.0/toolkit/moz.configure ---- firefox-108.0/toolkit/moz.configure.1667096 2022-12-05 21:21:08.000000000 +0100 -+++ firefox-108.0/toolkit/moz.configure 2022-12-08 08:29:54.514562328 +0100 -@@ -2134,6 +2134,15 @@ with only_when(compile_environment): - - set_config("MOZ_SYSTEM_PNG", True, when="--with-system-png") - -+# FDK AAC support -+# ============================================================== -+option('--with-system-fdk-aac', -+ help='Use system libfdk-aac (located with pkgconfig)') -+ -+system_fdk_aac = pkg_check_modules('MOZ_FDK_AAC', 'fdk-aac', -+ when='--with-system-fdk-aac') -+ -+set_config('MOZ_FDK_AAC', depends(when=system_fdk_aac)(lambda: True)) - - # FFmpeg's ffvpx configuration - # ============================================================== diff --git a/mozilla-1669639.patch b/mozilla-1669639.patch deleted file mode 100644 index cd04aab..0000000 --- a/mozilla-1669639.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- firefox-81.0.1/build/mach_initialize.py.old 2020-10-06 14:16:06.212974910 +0200 -+++ firefox-81.0.1/build/mach_initialize.py 2020-10-06 14:19:03.313179557 +0200 -@@ -507,7 +507,10 @@ class ImportHook(object): - # doesn't happen or because it doesn't matter). - if not os.path.exists(module.__file__[:-1]): - if os.path.exists(module.__file__): -- os.remove(module.__file__) -+ try: -+ os.remove(module.__file__) -+ except: -+ pass - del sys.modules[module.__name__] - module = self(name, globals, locals, fromlist, level) - diff --git a/mozilla-bmo1170092.patch b/mozilla-bmo1170092.patch new file mode 100644 index 0000000..36d2b00 --- /dev/null +++ b/mozilla-bmo1170092.patch @@ -0,0 +1,95 @@ +diff -up firefox-115.0.2/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 firefox-115.0.2/extensions/pref/autoconfig/src/nsReadConfig.cpp +--- firefox-115.0.2/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 2023-07-10 21:08:53.000000000 +0200 ++++ firefox-115.0.2/extensions/pref/autoconfig/src/nsReadConfig.cpp 2023-07-17 10:33:23.443355156 +0200 +@@ -263,8 +263,20 @@ nsresult nsReadConfig::openAndEvaluateJS + if (NS_FAILED(rv)) return rv; + + rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile); +- if (NS_FAILED(rv)) return rv; ++ if (NS_FAILED(rv)) { ++ // Look for cfg file in /etc//pref ++ rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR, ++ getter_AddRefs(jsFile)); ++ NS_ENSURE_SUCCESS(rv, rv); ++ ++ rv = jsFile->AppendNative(nsLiteralCString("pref")); ++ NS_ENSURE_SUCCESS(rv, rv); ++ rv = jsFile->AppendNative(nsDependentCString(aFileName)); ++ NS_ENSURE_SUCCESS(rv, rv); + ++ rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile); ++ NS_ENSURE_SUCCESS(rv, rv); ++ } + } else { + nsAutoCString location("resource://gre/defaults/autoconfig/"); + location += aFileName; +diff -up firefox-115.0.2/modules/libpref/Preferences.cpp.1170092 firefox-115.0.2/modules/libpref/Preferences.cpp +--- firefox-115.0.2/modules/libpref/Preferences.cpp.1170092 2023-07-10 21:09:00.000000000 +0200 ++++ firefox-115.0.2/modules/libpref/Preferences.cpp 2023-07-17 10:33:23.444355156 +0200 +@@ -4825,6 +4825,9 @@ nsresult Preferences::InitInitialObjects + // + // Thus, in the omni.jar case, we always load app-specific default + // preferences from omni.jar, whether or not `$app == $gre`. ++ // ++ // At very end load configuration from system config location: ++ // - /etc/firefox/pref/*.js + + nsresult rv = NS_ERROR_FAILURE; + UniquePtr find; +diff -up firefox-115.0.2/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-115.0.2/toolkit/xre/nsXREDirProvider.cpp +--- firefox-115.0.2/toolkit/xre/nsXREDirProvider.cpp.1170092 2023-07-10 22:57:20.000000000 +0200 ++++ firefox-115.0.2/toolkit/xre/nsXREDirProvider.cpp 2023-07-17 10:56:25.309692121 +0200 +@@ -72,6 +72,7 @@ + #endif + #ifdef XP_UNIX + # include ++# include "nsIXULAppInfo.h" + #endif + #ifdef XP_IOS + # include "UIKitDirProvider.h" +@@ -478,6 +479,17 @@ nsXREDirProvider::GetFile(const char* aP + rv = file->AppendNative(nsLiteralCString(PREF_OVERRIDE_DIRNAME)); + NS_ENSURE_SUCCESS(rv, rv); + rv = EnsureDirectoryExists(file); ++ } else if (!strcmp(aProperty, NS_APP_PREFS_SYSTEM_CONFIG_DIR)) { ++ nsCString sysConfigDir = nsLiteralCString("/etc/"); ++ nsCOMPtr appInfo = do_GetService("@mozilla.org/xre/app-info;1"); ++ if (!appInfo) ++ return NS_ERROR_NOT_AVAILABLE; ++ nsCString appName; ++ appInfo->GetName(appName); ++ ToLowerCase(appName); ++ sysConfigDir.Append(appName); ++ NS_NewNativeLocalFile(sysConfigDir, false, getter_AddRefs(file)); ++ rv = EnsureDirectoryExists(file); + } else { + // We don't know anything about this property. Fail without warning, because + // otherwise we'll get too much warning spam due to +@@ -694,6 +706,16 @@ nsXREDirProvider::GetFiles(const char* a + } + #endif + ++ // Add /etc//pref/ directory if it exists ++ nsCOMPtr systemPrefDir; ++ rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR, ++ getter_AddRefs(systemPrefDir)); ++ if (NS_SUCCEEDED(rv)) { ++ rv = systemPrefDir->AppendNative(nsLiteralCString("pref")); ++ if (NS_SUCCEEDED(rv)) ++ directories.AppendObject(systemPrefDir); ++ } ++ + rv = NS_NewArrayEnumerator(aResult, directories, NS_GET_IID(nsIFile)); + } else if (!strcmp(aProperty, NS_APP_CHROME_DIR_LIST)) { + // NS_APP_CHROME_DIR_LIST is only used to get default (native) icons +diff -up firefox-115.0.2/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 firefox-115.0.2/xpcom/io/nsAppDirectoryServiceDefs.h +--- firefox-115.0.2/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 2023-07-10 21:09:13.000000000 +0200 ++++ firefox-115.0.2/xpcom/io/nsAppDirectoryServiceDefs.h 2023-07-17 10:33:23.444355156 +0200 +@@ -58,6 +58,7 @@ + #define NS_APP_PREFS_DEFAULTS_DIR_LIST "PrefDL" + #define NS_APP_PREFS_OVERRIDE_DIR \ + "PrefDOverride" // Directory for per-profile defaults ++#define NS_APP_PREFS_SYSTEM_CONFIG_DIR "PrefSysConf" // Directory with system-wide configuration + + #define NS_APP_USER_PROFILE_50_DIR "ProfD" + #define NS_APP_USER_PROFILE_LOCAL_50_DIR "ProfLD" diff --git a/mozilla-bmo1504834-part1.patch b/mozilla-bmo1504834-part1.patch new file mode 100644 index 0000000..5246c5a --- /dev/null +++ b/mozilla-bmo1504834-part1.patch @@ -0,0 +1,86 @@ +diff -up firefox-115.2.0/gfx/2d/DrawTargetSkia.cpp.mozilla-bmo1504834-part1 firefox-115.2.0/gfx/2d/DrawTargetSkia.cpp +--- firefox-115.2.0/gfx/2d/DrawTargetSkia.cpp.mozilla-bmo1504834-part1 2023-09-20 22:15:11.850172571 +0200 ++++ firefox-115.2.0/gfx/2d/DrawTargetSkia.cpp 2023-09-20 22:16:10.446147737 +0200 +@@ -156,8 +156,8 @@ static IntRect CalculateSurfaceBounds(co + } + + static const int kARGBAlphaOffset = +- SurfaceFormat::A8R8G8B8_UINT32 == SurfaceFormat::B8G8R8A8 ? 3 : 0; +- ++ 0; // Skia is always BGRA SurfaceFormat::A8R8G8B8_UINT32 == ++ // SurfaceFormat::B8G8R8A8 ? 3 : 0; + static bool VerifyRGBXFormat(uint8_t* aData, const IntSize& aSize, + const int32_t aStride, SurfaceFormat aFormat) { + if (aFormat != SurfaceFormat::B8G8R8X8 || aSize.IsEmpty()) { +diff -up firefox-115.2.0/gfx/2d/Types.h.mozilla-bmo1504834-part1 firefox-115.2.0/gfx/2d/Types.h +--- firefox-115.2.0/gfx/2d/Types.h.mozilla-bmo1504834-part1 2023-08-21 15:43:23.000000000 +0200 ++++ firefox-115.2.0/gfx/2d/Types.h 2023-09-20 22:15:11.850172571 +0200 +@@ -89,18 +89,11 @@ enum class SurfaceFormat : int8_t { + // This represents the unknown format. + UNKNOWN, // TODO: Replace uses with Maybe. + +-// The following values are endian-independent synonyms. The _UINT32 suffix +-// indicates that the name reflects the layout when viewed as a uint32_t +-// value. +-#if MOZ_LITTLE_ENDIAN() ++ // The following values are endian-independent synonyms. The _UINT32 suffix ++ // indicates that the name reflects the layout when viewed as a uint32_t ++ // value. + A8R8G8B8_UINT32 = B8G8R8A8, // 0xAARRGGBB + X8R8G8B8_UINT32 = B8G8R8X8, // 0x00RRGGBB +-#elif MOZ_BIG_ENDIAN() +- A8R8G8B8_UINT32 = A8R8G8B8, // 0xAARRGGBB +- X8R8G8B8_UINT32 = X8R8G8B8, // 0x00RRGGBB +-#else +-# error "bad endianness" +-#endif + + // The following values are OS and endian-independent synonyms. + // +diff -up firefox-115.2.0/gfx/skia/skia/modules/skcms/skcms.cc.mozilla-bmo1504834-part1 firefox-115.2.0/gfx/skia/skia/modules/skcms/skcms.cc +--- firefox-115.2.0/gfx/skia/skia/modules/skcms/skcms.cc.mozilla-bmo1504834-part1 2023-08-21 15:43:23.000000000 +0200 ++++ firefox-115.2.0/gfx/skia/skia/modules/skcms/skcms.cc 2023-09-20 22:15:11.851172570 +0200 +@@ -30,6 +30,8 @@ + #include + #include + #endif ++#else ++ #define SKCMS_PORTABLE + #endif + + static bool runtime_cpu_detection = true; +@@ -324,20 +326,28 @@ enum { + static uint16_t read_big_u16(const uint8_t* ptr) { + uint16_t be; + memcpy(&be, ptr, sizeof(be)); +-#if defined(_MSC_VER) +- return _byteswap_ushort(be); ++#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ ++ return be; + #else +- return __builtin_bswap16(be); ++ #if defined(_MSC_VER) ++ return _byteswap_ushort(be); ++ #else ++ return __builtin_bswap16(be); ++ #endif + #endif + } + + static uint32_t read_big_u32(const uint8_t* ptr) { + uint32_t be; + memcpy(&be, ptr, sizeof(be)); +-#if defined(_MSC_VER) +- return _byteswap_ulong(be); ++#if __BYTE_ORDER == __ORDER_BIG_ENDIAN__ ++ return be; + #else +- return __builtin_bswap32(be); ++ #if defined(_MSC_VER) ++ return _byteswap_ulong(be); ++ #else ++ return __builtin_bswap32(be); ++ #endif + #endif + } + diff --git a/mozilla-bmo1504834-part3.patch b/mozilla-bmo1504834-part3.patch new file mode 100644 index 0000000..9c2ece0 --- /dev/null +++ b/mozilla-bmo1504834-part3.patch @@ -0,0 +1,17 @@ +# HG changeset patch +# Parent 09cd4ac2cc607e85aa572425b824fbab386af607 +For FF68, AntiAliasing of XULTexts seem to be broken on big endian (s390x). Text and icons of the sandwich-menu to the +right of the address bar, as well as plugin-windows appears transparant, which usually means unreadable (white on white). + +diff --git a/gfx/skia/skia/src/opts/SkBlitMask_opts.h b/gfx/skia/skia/src/opts/SkBlitMask_opts.h +--- a/gfx/skia/skia/src/opts/SkBlitMask_opts.h ++++ b/gfx/skia/skia/src/opts/SkBlitMask_opts.h +@@ -210,6 +210,8 @@ namespace SK_OPTS_NS { + // ~~~> + // a = 1*aa + d(1-1*aa) = aa + d(1-aa) + // c = 0*aa + d(1-1*aa) = d(1-aa) ++ // TODO: Check this for endian-issues! ++ // Do we need to switch 255 to the front for all of those tuples? + return (aa & Sk4px(skvx::byte16{0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255})) + + d.approxMulDiv255(aa.inv()); + }; diff --git a/mozilla-bmo1636168-fscreen.patch b/mozilla-bmo1636168-fscreen.patch new file mode 100644 index 0000000..e8bb310 --- /dev/null +++ b/mozilla-bmo1636168-fscreen.patch @@ -0,0 +1,82 @@ +diff -up firefox-114.0/widget/gtk/nsWindow.cpp.D110204-fscreen.diff firefox-114.0/widget/gtk/nsWindow.cpp +--- firefox-114.0/widget/gtk/nsWindow.cpp.D110204-fscreen.diff 2023-05-17 10:43:02.000000000 +0200 ++++ firefox-114.0/widget/gtk/nsWindow.cpp 2023-05-17 13:53:54.000443278 +0200 +@@ -100,6 +100,7 @@ + #include "ScreenHelperGTK.h" + #include "SystemTimeConverter.h" + #include "WidgetUtilsGtk.h" ++#include "nsIBrowserHandler.h" + + #ifdef ACCESSIBILITY + # include "mozilla/a11y/LocalAccessible.h" +@@ -173,7 +174,8 @@ const gint kEvents = GDK_TOUCHPAD_GESTUR + GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | + GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | + GDK_SMOOTH_SCROLL_MASK | GDK_TOUCH_MASK | GDK_SCROLL_MASK | +- GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK; ++ GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK | ++ GDK_FOCUS_CHANGE_MASK; + + /* utility functions */ + static bool is_mouse_in_window(GdkWindow* aWindow, gdouble aMouseX, +@@ -433,7 +435,8 @@ nsWindow::nsWindow() + mResizedAfterMoveToRect(false), + mConfiguredClearColor(false), + mGotNonBlankPaint(false), +- mNeedsToRetryCapturingMouse(false) { ++ mNeedsToRetryCapturingMouse(false), ++ mPendingFullscreen(false) { + mWindowType = WindowType::Child; + mSizeConstraints.mMaxSize = GetSafeWindowSize(mSizeConstraints.mMaxSize); + +@@ -5263,6 +5266,19 @@ void nsWindow::OnWindowStateEvent(GtkWid + ClearTransparencyBitmap(); + } + } ++ ++ // Hack to ensure window switched to fullscreen - avoid to fail when starting ++ // in kiosk mode ++ if (mPendingFullscreen && ++ !(aEvent->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)) { ++ LOG( ++ " Window should be fullscreen, but it's not, retrying set to " ++ "fullscreen.\n"); ++ MakeFullScreen(true); ++ } else { ++ LOG(" Window successfully switched to fullscreen, happy now\n"); ++ mPendingFullscreen = false; ++ } + } + + void nsWindow::OnDPIChanged() { +@@ -7409,6 +7425,19 @@ nsresult nsWindow::MakeFullScreen(bool a + } + } + ++ // if in kiosk, ensure the fullscreen is called ++ nsCOMPtr browserHandler = ++ do_GetService("@mozilla.org/browser/clh;1"); ++ if (browserHandler) { ++ bool isKiosk; ++ browserHandler->GetKiosk(&isKiosk); ++ if (isKiosk) { ++ LOG(" is kiosk, ensure the window switch to fullscreen\n"); ++ mPendingFullscreen = true; ++ } ++ } else { ++ LOG(" Cannot find the browserHandler service.\n"); ++ } + gtk_window_fullscreen(GTK_WINDOW(mShell)); + } else { + gtk_window_unfullscreen(GTK_WINDOW(mShell)); +diff -up firefox-114.0/widget/gtk/nsWindow.h.D110204-fscreen.diff firefox-114.0/widget/gtk/nsWindow.h +--- firefox-114.0/widget/gtk/nsWindow.h.D110204-fscreen.diff 2023-05-17 08:46:16.000000000 +0200 ++++ firefox-114.0/widget/gtk/nsWindow.h 2023-05-17 13:51:29.502159247 +0200 +@@ -752,6 +752,7 @@ class nsWindow final : public nsBaseWidg + * move-to-rect callback we set mMovedAfterMoveToRect/mResizedAfterMoveToRect. + */ + bool mWaitingForMoveToRectCallback : 1; ++ bool mPendingFullscreen : 1; + bool mMovedAfterMoveToRect : 1; + bool mResizedAfterMoveToRect : 1; + diff --git a/mozilla-bmo1670333.patch b/mozilla-bmo1670333.patch new file mode 100644 index 0000000..7126d43 --- /dev/null +++ b/mozilla-bmo1670333.patch @@ -0,0 +1,69 @@ +diff -up firefox-115.0/dom/media/mp4/MP4Demuxer.cpp.1670333 firefox-115.0/dom/media/mp4/MP4Demuxer.cpp +--- firefox-115.0/dom/media/mp4/MP4Demuxer.cpp.1670333 2023-06-06 23:14:43.000000000 +0200 ++++ firefox-115.0/dom/media/mp4/MP4Demuxer.cpp 2023-06-08 08:15:48.214109403 +0200 +@@ -32,6 +32,8 @@ mozilla::LogModule* GetDemuxerLog() { re + DDMOZ_LOG(gMediaDemuxerLog, mozilla::LogLevel::Debug, "::%s: " arg, \ + __func__, ##__VA_ARGS__) + ++extern bool gUseKeyframeFromContainer; ++ + namespace mozilla { + + using TimeUnit = media::TimeUnit; +@@ -404,6 +406,12 @@ already_AddRefed MP4TrackD + [[fallthrough]]; + case H264::FrameType::OTHER: { + bool keyframe = type == H264::FrameType::I_FRAME; ++ if (gUseKeyframeFromContainer) { ++ if (sample->mKeyframe && sample->mKeyframe != keyframe) { ++ sample->mKeyframe = keyframe; ++ } ++ break; ++ } + if (sample->mKeyframe != keyframe) { + NS_WARNING(nsPrintfCString("Frame incorrectly marked as %skeyframe " + "@ pts:%" PRId64 " dur:%" PRId64 +diff -up firefox-115.0/dom/media/platforms/PDMFactory.cpp.1670333 firefox-115.0/dom/media/platforms/PDMFactory.cpp +--- firefox-115.0/dom/media/platforms/PDMFactory.cpp.1670333 2023-06-06 23:14:44.000000000 +0200 ++++ firefox-115.0/dom/media/platforms/PDMFactory.cpp 2023-06-08 08:09:33.145289602 +0200 +@@ -67,6 +67,8 @@ + + #include + ++bool gUseKeyframeFromContainer = false; ++ + using DecodeSupport = mozilla::media::DecodeSupport; + using DecodeSupportSet = mozilla::media::DecodeSupportSet; + using MediaCodec = mozilla::media::MediaCodec; +@@ -562,7 +564,7 @@ void PDMFactory::CreateRddPDMs() { + #ifdef MOZ_FFMPEG + if (StaticPrefs::media_ffmpeg_enabled() && + StaticPrefs::media_rdd_ffmpeg_enabled() && +- !CreateAndStartupPDM()) { ++ !(mFFmpegUsed = CreateAndStartupPDM())) { + mFailureFlags += GetFailureFlagBasedOnFFmpegStatus( + FFmpegRuntimeLinker::LinkStatusCode()); + } +@@ -738,9 +740,10 @@ void PDMFactory::CreateDefaultPDMs() { + + CreateAndStartupPDM(); + +- if (StaticPrefs::media_gmp_decoder_enabled() && ++ if (StaticPrefs::media_gmp_decoder_enabled() && !mFFmpegUsed && + !StartupPDM(GMPDecoderModule::Create(), + StaticPrefs::media_gmp_decoder_preferred())) { ++ gUseKeyframeFromContainer = true; + mFailureFlags += DecoderDoctorDiagnostics::Flags::GMPPDMFailedToStartup; + } + } +diff -up firefox-115.0/dom/media/platforms/PDMFactory.h.1670333 firefox-115.0/dom/media/platforms/PDMFactory.h +--- firefox-115.0/dom/media/platforms/PDMFactory.h.1670333 2023-06-06 23:14:42.000000000 +0200 ++++ firefox-115.0/dom/media/platforms/PDMFactory.h 2023-06-08 08:09:33.145289602 +0200 +@@ -103,6 +103,7 @@ class PDMFactory final { + RefPtr mNullPDM; + + DecoderDoctorDiagnostics::FlagsSet mFailureFlags; ++ bool mFFmpegUsed = false; + + friend class RemoteVideoDecoderParent; + static void EnsureInit(); diff --git a/mozilla-bmo1716707-svg.patch b/mozilla-bmo1716707-svg.patch new file mode 100644 index 0000000..9c0559c --- /dev/null +++ b/mozilla-bmo1716707-svg.patch @@ -0,0 +1,29 @@ +# HG changeset patch +# User M. Sirringhaus +# Date 1645518286 -3600 +# Tue Feb 22 09:24:46 2022 +0100 +# Node ID 81832d035e101471dcf52dd91de287268add7a91 +# Parent 66f7ce16eb4965108687280e5443edd610631efb +imported patch svg-rendering.patch + +diff --git a/image/imgFrame.cpp b/image/imgFrame.cpp +--- a/image/imgFrame.cpp ++++ b/image/imgFrame.cpp +@@ -372,6 +372,17 @@ nsresult imgFrame::InitWithDrawable(gfxD + return NS_ERROR_OUT_OF_MEMORY; + } + ++#if MOZ_BIG_ENDIAN() ++ if (aBackend == gfx::BackendType::SKIA && canUseDataSurface) { ++ // SKIA is lying about what format it returns on big endian ++ for (int ii=0; ii < mRawSurface->GetSize().Height()*mRawSurface->Stride() / 4; ++ii) { ++ uint32_t *vals = (uint32_t*)(mRawSurface->GetData()); ++ uint32_t val = ((vals[ii] << 8) & 0xFF00FF00 ) | ((vals[ii] >> 8) & 0xFF00FF ); ++ vals[ii] = (val << 16) | (val >> 16); ++ } ++ } ++#endif ++ + if (!canUseDataSurface) { + // We used an offscreen surface, which is an "optimized" surface from + // imgFrame's perspective. diff --git a/mozilla-bmo1716707-swizzle.patch b/mozilla-bmo1716707-swizzle.patch new file mode 100644 index 0000000..bb37560 --- /dev/null +++ b/mozilla-bmo1716707-swizzle.patch @@ -0,0 +1,34 @@ +# HG changeset patch +# User M. Sirringhaus +# Date 1645518286 -3600 +# Tue Feb 22 09:24:46 2022 +0100 +# Node ID 494640792b4677f6462e95b90a54a4e22aeb738b +# Parent 81832d035e101471dcf52dd91de287268add7a91 +imported patch one_swizzle_to_rule_them_all.patch + +Index: firefox-102.0/gfx/webrender_bindings/RenderCompositorSWGL.cpp +=================================================================== +--- firefox-102.0.orig/gfx/webrender_bindings/RenderCompositorSWGL.cpp ++++ firefox-102.0/gfx/webrender_bindings/RenderCompositorSWGL.cpp +@@ -7,6 +7,7 @@ + #include "RenderCompositorSWGL.h" + + #include "mozilla/gfx/Logging.h" ++#include "mozilla/gfx/Swizzle.h" + #include "mozilla/widget/CompositorWidget.h" + + #ifdef MOZ_WIDGET_GTK +@@ -235,6 +237,13 @@ void RenderCompositorSWGL::CommitMappedB + } + mDT->Flush(); + ++#if MOZ_BIG_ENDIAN() ++ // One swizzle to rule them all. ++ gfx::SwizzleData(mMappedData, mMappedStride, gfx::SurfaceFormat::B8G8R8A8, ++ mMappedData, mMappedStride, gfx::SurfaceFormat::A8R8G8B8, ++ mDT->GetSize()); ++#endif ++ + // Done with the DT. Hand it back to the widget and clear out any trace of it. + mWidget->EndRemoteDrawingInRegion(mDT, mDirtyRegion); + mDirtyRegion.SetEmpty(); diff --git a/mozilla-bmo1789216-disable-av1.patch b/mozilla-bmo1789216-disable-av1.patch new file mode 100644 index 0000000..ce91a12 --- /dev/null +++ b/mozilla-bmo1789216-disable-av1.patch @@ -0,0 +1,89 @@ +diff --git a/media/ffvpx/libavcodec/allcodecs.c b/media/ffvpx/libavcodec/allcodecs.c +--- a/media/ffvpx/libavcodec/allcodecs.c ++++ b/media/ffvpx/libavcodec/allcodecs.c +@@ -755,12 +755,15 @@ + extern FFCodec ff_libaom_av1_encoder; + extern const FFCodec ff_libaribb24_decoder; + extern const FFCodec ff_libcelt_decoder; + extern const FFCodec ff_libcodec2_encoder; + extern const FFCodec ff_libcodec2_decoder; ++#if CONFIG_MOZ_AV1 + extern const FFCodec ff_libdav1d_decoder; + extern const FFCodec ff_libdavs2_decoder; ++extern const FFCodec ff_libuavs3d_decoder; ++#endif + extern const FFCodec ff_libfdk_aac_encoder; + extern const FFCodec ff_libfdk_aac_decoder; + extern const FFCodec ff_libgsm_encoder; + extern const FFCodec ff_libgsm_decoder; + extern const FFCodec ff_libgsm_ms_encoder; +@@ -783,11 +786,10 @@ + extern const FFCodec ff_libspeex_encoder; + extern const FFCodec ff_libspeex_decoder; + extern const FFCodec ff_libsvtav1_encoder; + extern const FFCodec ff_libtheora_encoder; + extern const FFCodec ff_libtwolame_encoder; +-extern const FFCodec ff_libuavs3d_decoder; + extern const FFCodec ff_libvo_amrwbenc_encoder; + extern const FFCodec ff_libvorbis_encoder; + extern const FFCodec ff_libvorbis_decoder; + extern const FFCodec ff_libvpx_vp8_encoder; + extern const FFCodec ff_libvpx_vp8_decoder; +diff --git a/media/ffvpx/libavcodec/codec_list.c b/media/ffvpx/libavcodec/codec_list.c +--- a/media/ffvpx/libavcodec/codec_list.c ++++ b/media/ffvpx/libavcodec/codec_list.c +@@ -9,12 +9,14 @@ + &ff_flac_decoder, + #endif + #if CONFIG_MP3_DECODER + &ff_mp3_decoder, + #endif ++#if CONFIG_MOZ_AV1 + #if CONFIG_LIBDAV1D + &ff_libdav1d_decoder, + #endif + #if CONFIG_AV1_DECODER + &ff_av1_decoder, + #endif ++#endif + NULL }; +diff --git a/media/ffvpx/libavcodec/moz.build b/media/ffvpx/libavcodec/moz.build +--- a/media/ffvpx/libavcodec/moz.build ++++ b/media/ffvpx/libavcodec/moz.build +@@ -84,11 +84,10 @@ + 'cbs.c', + 'cbs_av1.c', + 'golomb.c', + 'h264pred.c', + 'imgconvert.c', +- 'libdav1d.c', + 'mathtables.c', + 'qsv_api.c', + 'raw.c', + 'videodsp.c', + 'vp8.c', +@@ -107,14 +106,19 @@ + 'vp9mvs.c', + 'vp9prob.c', + 'vp9recon.c', + 'vpx_rac.c', + ] +- USE_LIBS += [ +- 'dav1d', +- 'media_libdav1d_asm', +- ] ++ if CONFIG['MOZ_AV1']: ++ USE_LIBS += [ ++ 'dav1d', ++ 'media_libdav1d_asm', ++ ] ++ SOURCES += [ ++ 'libdav1d.c', ++ ] ++ + if CONFIG['MOZ_WAYLAND']: + LOCAL_INCLUDES += ['/media/mozva'] + SOURCES += [ + 'vaapi_av1.c', + 'vaapi_decode.c', + diff --git a/mozilla-bmo849632.patch b/mozilla-bmo849632.patch new file mode 100644 index 0000000..913d6bc --- /dev/null +++ b/mozilla-bmo849632.patch @@ -0,0 +1,26 @@ +# HG changeset patch +# Parent 3de59fe1b8708c01e134ce698c4232b8a854f617 +Problem: webGL sites are displayed in the wrong color (usually blue-ish) +Solution: Problem is with skia once again. Output of webgl seems endian-correct, but skia only + knows how to deal with little endian. + So we swizzle the output of webgl after reading it from readpixels() +Note: This does not fix all webGL sites, but is a step in the right direction + +Index: firefox-115.0/gfx/gl/GLContext.h +=================================================================== +--- firefox-115.0.orig/gfx/gl/GLContext.h ++++ firefox-115.0/gfx/gl/GLContext.h +@@ -1560,6 +1560,13 @@ class GLContext : public GenericAtomicRe + BEFORE_GL_CALL; + mSymbols.fReadPixels(x, y, width, height, format, type, pixels); + OnSyncCall(); ++#if MOZ_BIG_ENDIAN() ++ uint8_t* itr = (uint8_t*)pixels; ++ for (GLsizei i = 0; i < width * height; i++) { ++ NativeEndian::swapToLittleEndianInPlace((uint32_t*)itr, 1); ++ itr += 4; ++ } ++#endif + AFTER_GL_CALL; + mHeavyGLCallsSinceLastFlush = true; + } diff --git a/mozilla-bmo998749.patch b/mozilla-bmo998749.patch new file mode 100644 index 0000000..50e22b5 --- /dev/null +++ b/mozilla-bmo998749.patch @@ -0,0 +1,29 @@ +# HG changeset patch +# User msirringhaus@suse.de +# Date 1583738770 -3600 +# Mon Mar 09 08:26:10 2020 +0100 +# Node ID 34676feac1a542e409e22acf5b98735f8313b1ce +# Parent 506857dace0a08d1c9685e3ac264646590b3e27f +[mq]: mozilla-bmo998749.patch + +diff -r 506857dace0a -r 34676feac1a5 gfx/2d/FilterProcessing.h +--- a/gfx/2d/FilterProcessing.h Fri Feb 28 12:31:51 2020 +0100 ++++ b/gfx/2d/FilterProcessing.h Mon Mar 09 08:26:10 2020 +0100 +@@ -13,10 +13,17 @@ + namespace mozilla { + namespace gfx { + ++#if MOZ_BIG_ENDIAN() ++const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_B = 3; ++const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_G = 2; ++const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_R = 1; ++const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_A = 0; ++#else + const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_B = 0; + const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_G = 1; + const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_R = 2; + const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_A = 3; ++#endif + + class FilterProcessing { + public: diff --git a/node-stdout-nonblocking-wrapper b/node-stdout-nonblocking-wrapper index b2814b8..7dfb513 100755 --- a/node-stdout-nonblocking-wrapper +++ b/node-stdout-nonblocking-wrapper @@ -1,2 +1,2 @@ #!/bin/sh -exec /usr/bin/node "$@" 2>&1 | cat - +exec node "$@" 2>&1 | cat - diff --git a/nss-setup-flags-env.inc b/nss-setup-flags-env.inc new file mode 100644 index 0000000..45f6e79 --- /dev/null +++ b/nss-setup-flags-env.inc @@ -0,0 +1,7 @@ +sed -i 's@%{bundled_install_path}@%{_buildrootdir}%{bundled_install_path}@g' %{_buildrootdir}%{bundled_install_path}/%{_lib}/pkgconfig/nss*.pc + +export LDFLAGS="-L%{_buildrootdir}%{bundled_install_path}/%{_lib} $LDFLAGS" +export LDFLAGS="-Wl,-rpath,%{bundled_install_path}/%{_lib} $LDFLAGS" +export LDFLAGS="-Wl,-rpath-link,%{_buildrootdir}%{bundled_install_path}/%{_lib} $LDFLAGS" +export PKG_CONFIG_PATH=%{_buildrootdir}%{bundled_install_path}/%{_lib}/pkgconfig +export PATH="{_buildrootdir}%{bundled_install_path}/bin:$PATH" diff --git a/org.mozilla.firefox.SearchProvider.service b/org.mozilla.firefox.SearchProvider.service deleted file mode 100644 index 40e8259..0000000 --- a/org.mozilla.firefox.SearchProvider.service +++ /dev/null @@ -1,3 +0,0 @@ -[D-BUS Service] -Name=org.mozilla.firefox.SearchProvider -Exec=/usr/bin/false diff --git a/org.mozilla.firefox.desktop b/org.mozilla.firefox.desktop deleted file mode 100644 index 7ac44d7..0000000 --- a/org.mozilla.firefox.desktop +++ /dev/null @@ -1,277 +0,0 @@ -[Desktop Entry] -Version=1.0 -Name=Firefox -GenericName=Web Browser -GenericName[ca]=Navegador web -GenericName[cs]=Webový prohlížeč -GenericName[es]=Navegador web -GenericName[fa]=مرورگر اینترنتی -GenericName[fi]=WWW-selain -GenericName[fr]=Navigateur Web -GenericName[hu]=Webböngésző -GenericName[it]=Browser Web -GenericName[ja]=ウェブ・ブラウザ -GenericName[ko]=웹 브라우저 -GenericName[nb]=Nettleser -GenericName[nl]=Webbrowser -GenericName[nn]=Nettlesar -GenericName[no]=Nettleser -GenericName[pl]=Przeglądarka WWW -GenericName[pt]=Navegador Web -GenericName[pt_BR]=Navegador Web -GenericName[sk]=Internetový prehliadač -GenericName[sv]=Webbläsare -Comment=Browse the Web -Comment[ca]=Navegueu per el web -Comment[cs]=Prohlížení stránek World Wide Webu -Comment[de]=Im Internet surfen -Comment[es]=Navegue por la web -Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید -Comment[fi]=Selaa Internetin WWW-sivuja -Comment[fr]=Navigue sur Internet -Comment[hu]=A világháló böngészése -Comment[it]=Esplora il web -Comment[ja]=ウェブを閲覧します -Comment[ko]=웹을 돌아 다닙니다 -Comment[nb]=Surf på nettet -Comment[nl]=Verken het internet -Comment[nn]=Surf på nettet -Comment[no]=Surf på nettet -Comment[pl]=Przeglądanie stron WWW -Comment[pt]=Navegue na Internet -Comment[pt_BR]=Navegue na Internet -Comment[sk]=Prehliadanie internetu -Comment[sv]=Surfa på webben -Exec=firefox %u -Icon=firefox -Terminal=false -Type=Application -MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https; -StartupNotify=true -Categories=Network;WebBrowser; -Keywords=web;browser;internet; -Actions=new-window;new-private-window;profile-manager-window; -DBusActivatable=false - -[Desktop Action new-window] -Name=Open a New Window -Name[ach]=Dirica manyen -Name[af]=Nuwe venster -Name[an]=Nueva finestra -Name[ar]=نافذة جديدة -Name[as]=নতুন উইন্ডো -Name[ast]=Ventana nueva -Name[az]=Yeni Pəncərə -Name[be]=Новае акно -Name[bg]=Нов прозорец -Name[bn_BD]=নতুন উইন্ডো (N) -Name[bn_IN]=নতুন উইন্ডো -Name[br]=Prenestr nevez -Name[brx]=गोदान उइन्ड'(N) -Name[bs]=Novi prozor -Name[ca]=Finestra nova -Name[cak]=K'ak'a' tzuwäch -Name[cs]=Nové okno -Name[cy]=Ffenestr Newydd -Name[da]=Nyt vindue -Name[de]=Neues Fenster -Name[dsb]=Nowe wokno -Name[el]=Νέο παράθυρο -Name[en_GB]=New Window -Name[en_US]=New Window -Name[en_ZA]=New Window -Name[eo]=Nova fenestro -Name[es_AR]=Nueva ventana -Name[es_CL]=Nueva ventana -Name[es_ES]=Nueva ventana -Name[es_MX]=Nueva ventana -Name[et]=Uus aken -Name[eu]=Leiho berria -Name[fa]=پنجره جدید‌ -Name[ff]=Henorde Hesere -Name[fi]=Uusi ikkuna -Name[fr]=Nouvelle fenêtre -Name[fy_NL]=Nij finster -Name[ga_IE]=Fuinneog Nua -Name[gd]=Uinneag ùr -Name[gl]=Nova xanela -Name[gn]=Ovetã pyahu -Name[gu_IN]=નવી વિન્ડો -Name[he]=חלון חדש -Name[hi_IN]=नया विंडो -Name[hr]=Novi prozor -Name[hsb]=Nowe wokno -Name[hu]=Új ablak -Name[hy_AM]=Նոր Պատուհան -Name[id]=Jendela Baru -Name[is]=Nýr gluggi -Name[it]=Nuova finestra -Name[ja]=新しいウィンドウ -Name[ja_JP-mac]=新規ウインドウ -Name[ka]=ახალი ფანჯარა -Name[kk]=Жаңа терезе -Name[km]=បង្អួច​​​ថ្មី -Name[kn]=ಹೊಸ ಕಿಟಕಿ -Name[ko]=새 창 -Name[kok]=नवें जनेल -Name[ks]=نئئ وِنڈو -Name[lij]=Neuvo barcon -Name[lo]=ຫນ້າຕ່າງໃຫມ່ -Name[lt]=Naujas langas -Name[ltg]=Jauns lūgs -Name[lv]=Jauns logs -Name[mai]=नव विंडो -Name[mk]=Нов прозорец -Name[ml]=പുതിയ ജാലകം -Name[mr]=नवीन पटल -Name[ms]=Tetingkap Baru -Name[my]=ဝင်းဒိုးအသစ် -Name[nb_NO]=Nytt vindu -Name[ne_NP]=नयाँ सञ्झ्याल -Name[nl]=Nieuw venster -Name[nn_NO]=Nytt vindauge -Name[or]=ନୂତନ ୱିଣ୍ଡୋ -Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ -Name[pl]=Nowe okno -Name[pt_BR]=Nova janela -Name[pt_PT]=Nova janela -Name[rm]=Nova fanestra -Name[ro]=Fereastră nouă -Name[ru]=Новое окно -Name[sat]=नावा विंडो (N) -Name[si]=නව කවුළුවක් -Name[sk]=Nové okno -Name[sl]=Novo okno -Name[son]=Zanfun taaga -Name[sq]=Dritare e Re -Name[sr]=Нови прозор -Name[sv_SE]=Nytt fönster -Name[ta]=புதிய சாளரம் -Name[te]=కొత్త విండో -Name[th]=หน้าต่างใหม่ -Name[tr]=Yeni pencere -Name[tsz]=Eraatarakua jimpani -Name[uk]=Нове вікно -Name[ur]=نیا دریچہ -Name[uz]=Yangi oyna -Name[vi]=Cửa sổ mới -Name[wo]=Palanteer bu bees -Name[xh]=Ifestile entsha -Name[zh_CN]=新建窗口 -Name[zh_TW]=開新視窗 -Exec=firefox --new-window %u - -[Desktop Action new-private-window] -Name=Open a New Private Window -Name[ach]=Dirica manyen me mung -Name[af]=Nuwe privaatvenster -Name[an]=Nueva finestra privada -Name[ar]=نافذة خاصة جديدة -Name[as]=নতুন ব্যক্তিগত উইন্ডো -Name[ast]=Ventana privada nueva -Name[az]=Yeni Məxfi Pəncərə -Name[be]=Новае акно адасаблення -Name[bg]=Нов прозорец за поверително сърфиране -Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো -Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো -Name[br]=Prenestr merdeiñ prevez nevez -Name[brx]=गोदान प्राइभेट उइन्ड' -Name[bs]=Novi privatni prozor -Name[ca]=Finestra privada nova -Name[cak]=K'ak'a' ichinan tzuwäch -Name[cs]=Nové anonymní okno -Name[cy]=Ffenestr Breifat Newydd -Name[da]=Nyt privat vindue -Name[de]=Neues privates Fenster -Name[dsb]=Nowe priwatne wokno -Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης -Name[en_GB]=New Private Window -Name[en_US]=New Private Window -Name[en_ZA]=New Private Window -Name[eo]=Nova privata fenestro -Name[es_AR]=Nueva ventana privada -Name[es_CL]=Nueva ventana privada -Name[es_ES]=Nueva ventana privada -Name[es_MX]=Nueva ventana privada -Name[et]=Uus privaatne aken -Name[eu]=Leiho pribatu berria -Name[fa]=پنجره ناشناس جدید -Name[ff]=Henorde Suturo Hesere -Name[fi]=Uusi yksityinen ikkuna -Name[fr]=Nouvelle fenêtre de navigation privée -Name[fy_NL]=Nij priveefinster -Name[ga_IE]=Fuinneog Nua Phríobháideach -Name[gd]=Uinneag phrìobhaideach ùr -Name[gl]=Nova xanela privada -Name[gn]=Ovetã ñemi pyahu -Name[gu_IN]=નવી ખાનગી વિન્ડો -Name[he]=חלון פרטי חדש -Name[hi_IN]=नयी निजी विंडो -Name[hr]=Novi privatni prozor -Name[hsb]=Nowe priwatne wokno -Name[hu]=Új privát ablak -Name[hy_AM]=Սկսել Գաղտնի դիտարկում -Name[id]=Jendela Mode Pribadi Baru -Name[is]=Nýr huliðsgluggi -Name[it]=Nuova finestra anonima -Name[ja]=新しいプライベートウィンドウ -Name[ja_JP-mac]=新規プライベートウインドウ -Name[ka]=ახალი პირადი ფანჯარა -Name[kk]=Жаңа жекелік терезе -Name[km]=បង្អួច​ឯកជន​ថ្មី -Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ -Name[ko]=새 사생활 보호 모드 -Name[kok]=नवो खाजगी विंडो -Name[ks]=نْو پرایوٹ وینڈو& -Name[lij]=Neuvo barcon privou -Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່ -Name[lt]=Naujas privataus naršymo langas -Name[ltg]=Jauns privatais lūgs -Name[lv]=Jauns privātais logs -Name[mai]=नया निज विंडो (W) -Name[mk]=Нов приватен прозорец -Name[ml]=പുതിയ സ്വകാര്യ ജാലകം -Name[mr]=नवीन वैयक्तिक पटल -Name[ms]=Tetingkap Persendirian Baharu -Name[my]=New Private Window -Name[nb_NO]=Nytt privat vindu -Name[ne_NP]=नयाँ निजी सञ्झ्याल -Name[nl]=Nieuw privévenster -Name[nn_NO]=Nytt privat vindauge -Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ -Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ -Name[pl]=Nowe okno prywatne -Name[pt_BR]=Nova janela privativa -Name[pt_PT]=Nova janela privada -Name[rm]=Nova fanestra privata -Name[ro]=Fereastră privată nouă -Name[ru]=Новое приватное окно -Name[sat]=नावा निजेराक् विंडो (W ) -Name[si]=නව පුද්ගලික කවුළුව (W) -Name[sk]=Nové okno v režime Súkromné prehliadanie -Name[sl]=Novo zasebno okno -Name[son]=Sutura zanfun taaga -Name[sq]=Dritare e Re Private -Name[sr]=Нови приватан прозор -Name[sv_SE]=Nytt privat fönster -Name[ta]=புதிய தனிப்பட்ட சாளரம் -Name[te]=కొత్త ఆంతరంగిక విండో -Name[th]=หน้าต่างส่วนตัวใหม่ -Name[tr]=Yeni gizli pencere -Name[tsz]=Juchiiti eraatarakua jimpani -Name[uk]=Приватне вікно -Name[ur]=نیا نجی دریچہ -Name[uz]=Yangi maxfiy oyna -Name[vi]=Cửa sổ riêng tư mới -Name[wo]=Panlanteeru biir bu bees -Name[xh]=Ifestile yangasese entsha -Name[zh_CN]=新建隐私浏览窗口 -Name[zh_TW]=新增隱私視窗 -Exec=firefox --private-window %u - -[Desktop Action profile-manager-window] -Name=Open the Profile Manager -Name[cs]=Správa profilů -Name[de]=Profilverwaltung öffnen -Name[fr]=Ouvrir le gestionnaire de profils -Exec=firefox --ProfileManager diff --git a/org.mozilla.firefox.search-provider.ini b/org.mozilla.firefox.search-provider.ini deleted file mode 100644 index 0211665..0000000 --- a/org.mozilla.firefox.search-provider.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Shell Search Provider] -DesktopId=org.mozilla.firefox.desktop -BusName=org.mozilla.firefox.SearchProvider -ObjectPath=/org/mozilla/firefox/SearchProvider -Version=2 diff --git a/pgo.patch b/pgo.patch deleted file mode 100644 index b99616f..0000000 --- a/pgo.patch +++ /dev/null @@ -1,116 +0,0 @@ -diff -up firefox-122.0/build/moz.configure/lto-pgo.configure.pgo firefox-122.0/build/moz.configure/lto-pgo.configure ---- firefox-122.0/build/moz.configure/lto-pgo.configure.pgo 2024-01-18 21:41:19.000000000 +0100 -+++ firefox-122.0/build/moz.configure/lto-pgo.configure 2024-01-19 18:21:17.974681504 +0100 -@@ -86,7 +86,7 @@ def pgo_flags(compiler, profdata, target - return namespace( - gen_cflags=["-fprofile-generate"], - gen_ldflags=["-fprofile-generate"], -- use_cflags=["-fprofile-use", "-fprofile-correction", "-Wcoverage-mismatch"], -+ use_cflags=["-fprofile-use", "-fprofile-correction", "-Wno-coverage-mismatch"], - use_ldflags=["-fprofile-use"], - ) - -diff -up firefox-122.0/build/pgo/profileserver.py.pgo firefox-122.0/build/pgo/profileserver.py ---- firefox-122.0/build/pgo/profileserver.py.pgo 2024-01-18 21:41:20.000000000 +0100 -+++ firefox-122.0/build/pgo/profileserver.py 2024-01-19 18:21:17.974681504 +0100 -@@ -11,7 +11,7 @@ import subprocess - import sys - - import mozcrash --from mozbuild.base import BinaryNotFoundException, MozbuildObject -+from mozbuild.base import BinaryNotFoundException, MozbuildObject, BuildEnvironmentNotFoundException - from mozfile import TemporaryDirectory - from mozhttpd import MozHttpd - from mozprofile import FirefoxProfile, Preferences -@@ -98,9 +98,22 @@ if __name__ == "__main__": - 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) -+ using_gcc = False -+ try: -+ if build.config_environment.substs.get('CC_TYPE') == 'gcc': -+ using_gcc = True -+ except BuildEnvironmentNotFoundException: -+ pass -+ -+ if using_gcc: -+ for dirpath, _, filenames in os.walk('.'): -+ for f in filenames: -+ if f.endswith('.gcda'): -+ os.remove(os.path.join(dirpath, f)) -+ else: -+ old_profraw_files = glob.glob('*.profraw') -+ for f in old_profraw_files: -+ os.remove(f) - - with TemporaryDirectory() as profilePath: - # TODO: refactor this into mozprofile -diff -up firefox-122.0/gfx/2d/moz.build.pgo firefox-122.0/gfx/2d/moz.build ---- firefox-122.0/gfx/2d/moz.build.pgo 2024-01-18 21:41:22.000000000 +0100 -+++ firefox-122.0/gfx/2d/moz.build 2024-01-19 18:21:17.974681504 +0100 -@@ -137,11 +137,11 @@ if CONFIG["INTEL_ARCHITECTURE"]: - # The file uses SSE2 intrinsics, so it needs special compile flags on some - # compilers. - SOURCES["BlurSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"] -- SOURCES["ConvolutionFilterAVX2.cpp"].flags += ["-mavx2"] -+ SOURCES["ConvolutionFilterAVX2.cpp"].flags += ["-mavx2", "-fno-lto"] - SOURCES["ConvolutionFilterSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"] - SOURCES["FilterProcessingSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"] - SOURCES["ImageScalingSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"] -- SOURCES["SwizzleAVX2.cpp"].flags += ["-mavx2"] -+ SOURCES["SwizzleAVX2.cpp"].flags += ["-mavx2", "-fno-lto"] - SOURCES["SwizzleSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"] - SOURCES["SwizzleSSSE3.cpp"].flags += CONFIG["SSSE3_FLAGS"] - SOURCES["ssse3-scaler.c"].flags += CONFIG["SSSE3_FLAGS"] -diff -up firefox-122.0/gfx/skia/generate_mozbuild.py.pgo firefox-122.0/gfx/skia/generate_mozbuild.py ---- firefox-122.0/gfx/skia/generate_mozbuild.py.pgo 2024-01-19 18:21:17.975681537 +0100 -+++ firefox-122.0/gfx/skia/generate_mozbuild.py 2024-01-19 18:24:15.494934133 +0100 -@@ -54,10 +54,10 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind - if CONFIG['INTEL_ARCHITECTURE']: - SOURCES['skia/src/opts/SkOpts_ssse3.cpp'].flags += ['-Dskvx=skvx_ssse3', '-mssse3'] - SOURCES['skia/src/opts/SkOpts_sse42.cpp'].flags += ['-Dskvx=skvx_sse42', '-msse4.2'] -- SOURCES['skia/src/opts/SkOpts_avx.cpp'].flags += ['-Dskvx=skvx_avx', '-mavx'] -- SOURCES['skia/src/opts/SkOpts_hsw.cpp'].flags += ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma'] -+ SOURCES['skia/src/opts/SkOpts_avx.cpp'].flags += ['-Dskvx=skvx_avx', '-mavx', '-fno-lto'] -+ SOURCES['skia/src/opts/SkOpts_hsw.cpp'].flags += ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma', '-fno-lto'] - if not CONFIG["MOZ_CODE_COVERAGE"]: -- SOURCES['skia/src/opts/SkOpts_skx.cpp'].flags += ['-Dskvx=skvx_skx', '-mavx512f', '-mavx512dq', '-mavx512cd', '-mavx512bw', '-mavx512vl'] -+ SOURCES['skia/src/opts/SkOpts_skx.cpp'].flags += ['-Dskvx=skvx_skx', '-mavx512f', '-mavx512dq', '-mavx512cd', '-mavx512bw', '-mavx512vl', '-fno-lto'] - elif CONFIG['TARGET_CPU'] == 'aarch64' and CONFIG['CC_TYPE'] in ('clang', 'gcc'): - SOURCES['skia/src/opts/SkOpts_crc32.cpp'].flags += ['-Dskvx=skvx_crc32', '-march=armv8-a+crc'] - -diff -up firefox-122.0/gfx/skia/moz.build.pgo firefox-122.0/gfx/skia/moz.build ---- firefox-122.0/gfx/skia/moz.build.pgo 2024-01-19 18:21:17.975681537 +0100 -+++ firefox-122.0/gfx/skia/moz.build 2024-01-19 18:25:13.472039275 +0100 -@@ -564,10 +564,10 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind - if CONFIG['INTEL_ARCHITECTURE']: - SOURCES['skia/src/opts/SkOpts_ssse3.cpp'].flags += ['-Dskvx=skvx_ssse3', '-mssse3'] - SOURCES['skia/src/opts/SkOpts_sse42.cpp'].flags += ['-Dskvx=skvx_sse42', '-msse4.2'] -- SOURCES['skia/src/opts/SkOpts_avx.cpp'].flags += ['-Dskvx=skvx_avx', '-mavx'] -- SOURCES['skia/src/opts/SkOpts_hsw.cpp'].flags += ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma'] -+ SOURCES['skia/src/opts/SkOpts_avx.cpp'].flags += ['-Dskvx=skvx_avx', '-mavx', '-fno-lto'] -+ SOURCES['skia/src/opts/SkOpts_hsw.cpp'].flags += ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma', '-fno-lto'] - if not CONFIG["MOZ_CODE_COVERAGE"]: -- SOURCES['skia/src/opts/SkOpts_skx.cpp'].flags += ['-Dskvx=skvx_skx', '-mavx512f', '-mavx512dq', '-mavx512cd', '-mavx512bw', '-mavx512vl'] -+ SOURCES['skia/src/opts/SkOpts_skx.cpp'].flags += ['-Dskvx=skvx_skx', '-mavx512f', '-mavx512dq', '-mavx512cd', '-mavx512bw', '-mavx512vl', '-fno-lto'] - elif CONFIG['TARGET_CPU'] == 'aarch64' and CONFIG['CC_TYPE'] in ('clang', 'gcc'): - SOURCES['skia/src/opts/SkOpts_crc32.cpp'].flags += ['-Dskvx=skvx_crc32', '-march=armv8-a+crc'] - -diff -up firefox-122.0/toolkit/components/terminator/nsTerminator.cpp.pgo firefox-122.0/toolkit/components/terminator/nsTerminator.cpp ---- firefox-122.0/toolkit/components/terminator/nsTerminator.cpp.pgo 2024-01-18 21:41:36.000000000 +0100 -+++ firefox-122.0/toolkit/components/terminator/nsTerminator.cpp 2024-01-19 18:21:17.976681572 +0100 -@@ -460,6 +460,11 @@ void nsTerminator::StartWatchdog() { - } - #endif - -+ // Disable watchdog for PGO train builds - writting profile information at -+ // exit may take time and it is better to make build hang rather than -+ // silently produce poorly performing binary. -+ crashAfterMS = INT32_MAX; -+ - UniquePtr options(new Options()); - // crashAfterTicks is guaranteed to be > 0 as - // crashAfterMS >= ADDITIONAL_WAIT_BEFORE_CRASH_MS >> HEARTBEAT_INTERVAL_MS diff --git a/print-error-reftest b/print-error-reftest deleted file mode 100755 index 7a58c1c..0000000 --- a/print-error-reftest +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/bash -# Print reftest failures and compose them to html - -TEST_DIR="$1" -TEST_FLAVOUR="$2" -OUTPUT_FILE="failures-reftest$TEST_FLAVOUR.html" - -grep --text -e "REFTEST TEST-UNEXPECTED-PASS" -e "REFTEST TEST-UNEXPECTED-FAIL" -e "IMAGE 1 (TEST):" -e "IMAGE 2 (REFERENCE):" $TEST_DIR/reftest$TEST_FLAVOUR 2>&1 > $OUTPUT_FILE -sed -i '/REFTEST IMAGE 1/a ">' $OUTPUT_FILE -sed -i '/REFTEST IMAGE 2/a ">

' $OUTPUT_FILE -sed -i '/REFTEST TEST/a
' $OUTPUT_FILE -sed -i -e 's/^REFTEST IMAGE 1 (TEST): /&1 > failures-mochitest$TEST_FLAVOUR.txt -grep --text -e " FAIL " -e " TIMEOUT " $TEST_DIR/xpcshell$TEST_FLAVOUR 2>&1 > failures-xpcshell$TEST_FLAVOUR.txt -grep --text -e "REFTEST TEST-UNEXPECTED-PASS" -e "REFTEST TEST-UNEXPECTED-FAIL" $TEST_DIR/reftest$TEST_FLAVOUR 2>&1 > failures-reftest$TEST_FLAVOUR.txt diff --git a/print_failures b/print_failures deleted file mode 100755 index bc92b0c..0000000 --- a/print_failures +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/bash -# Analyze and print test failures - -export TEST_DIR="test_results" - -#./print-errors $TEST_DIR "" -./print-errors $TEST_DIR "-wr" -#./print-error-reftest $TEST_DIR "" -./print-error-reftest $TEST_DIR "-wr" diff --git a/print_results b/print_results deleted file mode 100755 index d0b1307..0000000 --- a/print_results +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/bash -# Analyze and print general test results - -export TEST_DIR="test_results" - -echo "Test results" -#echo "Basic compositor" -#./psummary $TEST_DIR "" -echo "WebRender" -./psummary $TEST_DIR "-wr" diff --git a/process-official-tarball b/process-official-tarball new file mode 100755 index 0000000..449e7bb --- /dev/null +++ b/process-official-tarball @@ -0,0 +1,23 @@ +#!/bin/sh + +rm -rf ./process-tarball-dir +mkdir ./process-tarball-dir +tar -xJf $1 --directory process-tarball-dir + +rm -vf ./process-tarball-dir/*/testing/web-platform/tests/conformance-checkers/html-rdfa/0030-isvalid.html +rm -vf ./process-tarball-dir/*/testing/web-platform/tests/conformance-checkers/html-rdfa/0008-isvalid.html +rm -vf ./process-tarball-dir/*/testing/web-platform/tests/conformance-checkers/html-rdfalite/0030-isvalid.html +rm -vf ./process-tarball-dir/*/testing/web-platform/tests/css/css-ui/support/cursors/woolly-64.svg +rm -vf ./process-tarball-dir/*/testing/web-platform/tests/css/css-ui/support/cursors/woolly.svg +rm -vf ./process-tarball-dir/*/testing/web-platform/tests/conformance-checkers/html-rdfa/0230-novalid.html +rm -vf ./process-tarball-dir/*/testing/web-platform/tests/conformance-checkers/html-rdfa/0231-isvalid.html +rm -vf ./process-tarball-dir/*/layout/inspector/tests/chrome/test_fontVariationsAPI.css + +processed_tarball=${1/source/processed-source} + +cd ./process-tarball-dir +tar -cf - ./* | xz -9 -T 0 -f > $processed_tarball +mv $processed_tarball .. +cd .. + +rm -rf ./process-tarball-dir diff --git a/psummary b/psummary deleted file mode 100755 index f64fc8f..0000000 --- a/psummary +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/bash -# Analyze and print specialized (basic/webrender) test results - -TEST_DIR=$1 -TEST_FLAVOUR=$2 - -MPASS=`grep "TEST_END: Test OK" $TEST_DIR/mochitest$TEST_FLAVOUR | wc -l` -MERR=`grep "TEST_END: Test ERROR" $TEST_DIR/mochitest$TEST_FLAVOUR | wc -l` -MUNEX=`grep "TEST-UNEXPECTED-FAIL" $TEST_DIR/mochitest$TEST_FLAVOUR | wc -l` -echo "Mochitest PASSED: $MPASS FAILED: $MERR UNEXPECTED-FAILURES: $MUNEX" - -XPCPASS=`grep --text "Expected results:" $TEST_DIR/xpcshell$TEST_FLAVOUR | cut -d ' ' -f 3` -XPCFAIL=`grep --text "Unexpected results:" $TEST_DIR/xpcshell$TEST_FLAVOUR | cut -d ' ' -f 3` -echo "XPCShell: PASSED: $XPCPASS FAILED: $XPCFAIL" - -CRPASS=`grep "REFTEST INFO | Successful:" $TEST_DIR/crashtest$TEST_FLAVOUR | cut -d ' ' -f 5` -CRFAIL=`grep "^REFTEST INFO | Unexpected:" $TEST_DIR/crashtest$TEST_FLAVOUR | cut -d ' ' -f 5` -echo "Crashtest: PASSED: $CRPASS FAILED: $CRFAIL" - -RFPASS=`grep --text "REFTEST INFO | Successful:" $TEST_DIR/reftest$TEST_FLAVOUR | cut -d ' ' -f 5` -RFUN=`grep --text "^REFTEST INFO | Unexpected:" $TEST_DIR/reftest$TEST_FLAVOUR | cut -d ' ' -f 5` -RFKNOWN=`grep --text "REFTEST INFO | Known problems:" $TEST_DIR/reftest$TEST_FLAVOUR | cut -d ' ' -f 6` -echo "Reftest: PASSED: $RFPASS FAILED: $RFUN Known issues: $RFKNOWN" diff --git a/python-build.patch b/python-build.patch deleted file mode 100644 index ad1d0fc..0000000 --- a/python-build.patch +++ /dev/null @@ -1,4558 +0,0 @@ -diff --git a/python/l10n/mozxchannel/__init__.py b/python/l10n/mozxchannel/__init__.py ---- a/python/l10n/mozxchannel/__init__.py -+++ b/python/l10n/mozxchannel/__init__.py -@@ -46,25 +46,6 @@ def get_default_config(topsrcdir, string - "mobile/android/locales/l10n.toml", - ], - }, -- "comm-central": { -- "path": topsrcdir / "comm", -- "post-clobber": True, -- "url": "https://hg.mozilla.org/comm-central/", -- "heads": { -- # This list of repositories is ordered, starting with the -- # one with the most recent content (central) to the oldest -- # (ESR). In case two ESR versions are supported, the oldest -- # ESR goes last (e.g. esr78 goes after esr91). -- "comm": "comm-central", -- "comm-beta": "releases/comm-beta", -- "comm-esr102": "releases/comm-esr102", -- }, -- "config_files": [ -- "comm/calendar/locales/l10n.toml", -- "comm/mail/locales/l10n.toml", -- "comm/suite/locales/l10n.toml", -- ], -- }, - }, - } - -diff --git a/python/mach/docs/windows-usage-outside-mozillabuild.rst b/python/mach/docs/windows-usage-outside-mozillabuild.rst ---- a/python/mach/docs/windows-usage-outside-mozillabuild.rst -+++ b/python/mach/docs/windows-usage-outside-mozillabuild.rst -@@ -117,3 +117,8 @@ Success! - - At this point, you should be able to invoke Mach and manage your version control system outside - of MozillaBuild. -+ -+.. tip:: -+ -+ `See here `__ for a detailed guide on -+ installing and customizing a development environment with MSYS2, zsh, and Windows Terminal. -diff --git a/python/mach/mach/site.py b/python/mach/mach/site.py ---- a/python/mach/mach/site.py -+++ b/python/mach/mach/site.py -@@ -18,10 +18,10 @@ import site - import subprocess - import sys - import sysconfig --from pathlib import Path - import tempfile - from contextlib import contextmanager --from typing import Optional, Callable -+from pathlib import Path -+from typing import Callable, Optional - - from mach.requirements import ( - MachEnvRequirements, -@@ -663,6 +663,58 @@ class CommandSiteManager: - stderr=subprocess.STDOUT, - universal_newlines=True, - ) -+ -+ if not check_result.returncode: -+ return -+ -+ """ -+ Some commands may use the "setup.py" script of first-party modules. This causes -+ a "*.egg-info" dir to be created for that module (which pip can then detect as -+ a package). Since we add all first-party module directories to the .pthfile for -+ the "mach" venv, these first-party modules are then detected by all venvs after -+ they are created. The problem is that these .egg-info directories can become -+ stale (since if the first-party module is updated it's not guaranteed that the -+ command that runs the "setup.py" was ran afterwards). This can cause -+ incompatibilities with the pip check (since the dependencies can change between -+ different versions). -+ -+ These .egg-info dirs are in our VCS ignore lists (eg: ".hgignore") because they -+ are necessary to run some commands, so we don't want to always purge them, and we -+ also don't want to accidentally commit them. Given this, we can leverage our VCS -+ to find all the current first-party .egg-info dirs. -+ -+ If we're in the case where 'pip check' fails, then we can try purging the -+ first-party .egg-info dirs, then run the 'pip check' again afterwards. If it's -+ still failing, then we know the .egg-info dirs weren't the problem. If that's -+ the case we can just raise the error encountered, which is the same as before. -+ """ -+ -+ def _delete_ignored_egg_info_dirs(): -+ from pathlib import Path -+ -+ from mozversioncontrol import get_repository_from_env -+ -+ with get_repository_from_env() as repo: -+ ignored_file_finder = repo.get_ignored_files_finder().find( -+ "**/*.egg-info" -+ ) -+ -+ unique_egg_info_dirs = { -+ Path(found[0]).parent for found in ignored_file_finder -+ } -+ -+ for egg_info_dir in unique_egg_info_dirs: -+ shutil.rmtree(egg_info_dir) -+ -+ _delete_ignored_egg_info_dirs() -+ -+ check_result = subprocess.run( -+ [self.python_path, "-m", "pip", "check"], -+ stdout=subprocess.PIPE, -+ stderr=subprocess.STDOUT, -+ universal_newlines=True, -+ ) -+ - if check_result.returncode: - if quiet: - # If "quiet" was specified, then the "pip install" output wasn't printed -@@ -763,7 +815,7 @@ class PythonVirtualenv: - else: - self.bin_path = os.path.join(prefix, "bin") - self.python_path = os.path.join(self.bin_path, "python") -- self.prefix = prefix -+ self.prefix = os.path.realpath(prefix) - - @functools.lru_cache(maxsize=None) - def resolve_sysconfig_packages_path(self, sysconfig_path): -@@ -783,16 +835,12 @@ class PythonVirtualenv: - relative_path = path.relative_to(data_path) - - # Path to virtualenv's "site-packages" directory for provided sysconfig path -- return os.path.normpath( -- os.path.normcase(os.path.realpath(Path(self.prefix) / relative_path)) -- ) -+ return os.path.normpath(os.path.normcase(Path(self.prefix) / relative_path)) - - def site_packages_dirs(self): - dirs = [] - if sys.platform.startswith("win"): -- dirs.append( -- os.path.normpath(os.path.normcase(os.path.realpath(self.prefix))) -- ) -+ dirs.append(os.path.normpath(os.path.normcase(self.prefix))) - purelib = self.resolve_sysconfig_packages_path("purelib") - platlib = self.resolve_sysconfig_packages_path("platlib") - -diff --git a/python/mozboot/bin/bootstrap.py b/python/mozboot/bin/bootstrap.py ---- a/python/mozboot/bin/bootstrap.py -+++ b/python/mozboot/bin/bootstrap.py -@@ -11,8 +11,6 @@ - # Python environment (except that it's run with a sufficiently recent version of - # Python 3), so we are restricted to stdlib modules. - --from __future__ import absolute_import, print_function, unicode_literals -- - import sys - - major, minor = sys.version_info[:2] -@@ -23,14 +21,13 @@ if (major < 3) or (major == 3 and minor - ) - sys.exit(1) - -+import ctypes - import os - import shutil - import subprocess - import tempfile --import ctypes -- -+from optparse import OptionParser - from pathlib import Path --from optparse import OptionParser - - CLONE_MERCURIAL_PULL_FAIL = """ - Failed to pull from hg.mozilla.org. -@@ -55,7 +52,7 @@ def which(name): - search_dirs = os.environ["PATH"].split(os.pathsep) - potential_names = [name] - if WINDOWS: -- potential_names.append(name + ".exe") -+ potential_names.insert(0, name + ".exe") - - for path in search_dirs: - for executable_name in potential_names: -@@ -105,7 +102,7 @@ def input_clone_dest(vcs, no_interactive - return None - - --def hg_clone_firefox(hg: Path, dest: Path): -+def hg_clone_firefox(hg: Path, dest: Path, head_repo, head_rev): - # We create an empty repo then modify the config before adding data. - # This is necessary to ensure storage settings are optimally - # configured. -@@ -139,16 +136,28 @@ def hg_clone_firefox(hg: Path, dest: Pat - fh.write("# This is necessary to keep performance in check\n") - fh.write("maxchainlen = 10000\n") - -+ # Pulling a specific revision into an empty repository induces a lot of -+ # load on the Mercurial server, so we always pull from mozilla-unified (which, -+ # when done from an empty repository, is equivalent to a clone), and then pull -+ # the specific revision we want (if we want a specific one, otherwise we just -+ # use the "central" bookmark), at which point it will be an incremental pull, -+ # that the server can process more easily. -+ # This is the same thing that robustcheckout does on automation. - res = subprocess.call( - [str(hg), "pull", "https://hg.mozilla.org/mozilla-unified"], cwd=str(dest) - ) -+ if not res and head_repo: -+ res = subprocess.call( -+ [str(hg), "pull", head_repo, "-r", head_rev], cwd=str(dest) -+ ) - print("") - if res: - print(CLONE_MERCURIAL_PULL_FAIL % dest) - return None - -- print('updating to "central" - the development head of Gecko and Firefox') -- res = subprocess.call([str(hg), "update", "-r", "central"], cwd=str(dest)) -+ head_rev = head_rev or "central" -+ print(f'updating to "{head_rev}" - the development head of Gecko and Firefox') -+ res = subprocess.call([str(hg), "update", "-r", head_rev], cwd=str(dest)) - if res: - print( - f"error updating; you will need to `cd {dest} && hg update -r central` " -@@ -157,7 +166,7 @@ def hg_clone_firefox(hg: Path, dest: Pat - return dest - - --def git_clone_firefox(git: Path, dest: Path, watchman: Path): -+def git_clone_firefox(git: Path, dest: Path, watchman: Path, head_repo, head_rev): - tempdir = None - cinnabar = None - env = dict(os.environ) -@@ -196,8 +205,7 @@ def git_clone_firefox(git: Path, dest: P - [ - str(git), - "clone", -- "-b", -- "bookmarks/central", -+ "--no-checkout", - "hg::https://hg.mozilla.org/mozilla-unified", - str(dest), - ], -@@ -210,6 +218,19 @@ def git_clone_firefox(git: Path, dest: P - [str(git), "config", "pull.ff", "only"], cwd=str(dest), env=env - ) - -+ if head_repo: -+ subprocess.check_call( -+ [str(git), "cinnabar", "fetch", f"hg::{head_repo}", head_rev], -+ cwd=str(dest), -+ env=env, -+ ) -+ -+ subprocess.check_call( -+ [str(git), "checkout", "FETCH_HEAD" if head_rev else "bookmarks/central"], -+ cwd=str(dest), -+ env=env, -+ ) -+ - watchman_sample = dest / ".git/hooks/fsmonitor-watchman.sample" - # Older versions of git didn't include fsmonitor-watchman.sample. - if watchman and watchman_sample.exists(): -@@ -233,12 +254,6 @@ def git_clone_firefox(git: Path, dest: P - subprocess.check_call(config_args, cwd=str(dest), env=env) - return dest - finally: -- if not cinnabar: -- print( -- "Failed to install git-cinnabar. Try performing a manual " -- "installation: https://github.com/glandium/git-cinnabar/wiki/" -- "Mozilla:-A-git-workflow-for-Gecko-development" -- ) - if tempdir: - shutil.rmtree(str(tempdir)) - -@@ -326,11 +341,15 @@ def clone(options): - add_microsoft_defender_antivirus_exclusions(dest, no_system_changes) - - print(f"Cloning Firefox {VCS_HUMAN_READABLE[vcs]} repository to {dest}") -+ -+ head_repo = os.environ.get("GECKO_HEAD_REPOSITORY") -+ head_rev = os.environ.get("GECKO_HEAD_REV") -+ - if vcs == "hg": -- return hg_clone_firefox(binary, dest) -+ return hg_clone_firefox(binary, dest, head_repo, head_rev) - else: - watchman = which("watchman") -- return git_clone_firefox(binary, dest, watchman) -+ return git_clone_firefox(binary, dest, watchman, head_repo, head_rev) - - - def bootstrap(srcdir: Path, application_choice, no_interactive, no_system_changes): -diff --git a/python/mozboot/mozboot/android.py b/python/mozboot/mozboot/android.py ---- a/python/mozboot/mozboot/android.py -+++ b/python/mozboot/mozboot/android.py -@@ -2,8 +2,6 @@ - # 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 errno - import json - import os -@@ -11,15 +9,16 @@ import stat - import subprocess - import sys - import time --import requests -+from pathlib import Path - from typing import Optional, Union --from pathlib import Path --from tqdm import tqdm -+ -+import requests - - # We need the NDK version in multiple different places, and it's inconvenient - # to pass down the NDK version to all relevant places, so we have this global - # variable. - from mozboot.bootstrap import MOZCONFIG_SUGGESTION_TEMPLATE -+from tqdm import tqdm - - NDK_VERSION = "r21d" - CMDLINE_TOOLS_VERSION_STRING = "7.0" -@@ -74,7 +73,7 @@ output as packages are downloaded and in - - MOBILE_ANDROID_MOZCONFIG_TEMPLATE = """ - # Build GeckoView/Firefox for Android: --ac_add_options --enable-application=mobile/android -+ac_add_options --enable-project=mobile/android - - # Targeting the following architecture. - # For regular phones, no --target is needed. -@@ -90,8 +89,7 @@ ac_add_options --enable-application=mobi - - MOBILE_ANDROID_ARTIFACT_MODE_MOZCONFIG_TEMPLATE = """ - # Build GeckoView/Firefox for Android Artifact Mode: --ac_add_options --enable-application=mobile/android --ac_add_options --target=arm-linux-androideabi -+ac_add_options --enable-project=mobile/android - ac_add_options --enable-artifact-builds - - {extra_lines} -@@ -162,18 +160,19 @@ def download( - download_file_path: Path, - ): - with requests.Session() as session: -- request = session.head(url) -+ request = session.head(url, allow_redirects=True) -+ request.raise_for_status() - remote_file_size = int(request.headers["content-length"]) - - if download_file_path.is_file(): - local_file_size = download_file_path.stat().st_size - - if local_file_size == remote_file_size: -- print(f"{download_file_path} already downloaded. Skipping download...") -+ print( -+ f"{download_file_path.name} already downloaded. Skipping download..." -+ ) - else: -- print( -- f"Partial download detected. Resuming download of {download_file_path}..." -- ) -+ print(f"Partial download detected. Resuming download of {url}...") - download_internal( - download_file_path, - session, -@@ -182,7 +181,7 @@ def download( - local_file_size, - ) - else: -- print(f"Downloading {download_file_path}...") -+ print(f"Downloading {url}...") - download_internal(download_file_path, session, url, remote_file_size) - - -diff --git a/python/mozboot/mozboot/archlinux.py b/python/mozboot/mozboot/archlinux.py ---- a/python/mozboot/mozboot/archlinux.py -+++ b/python/mozboot/mozboot/archlinux.py -@@ -2,120 +2,27 @@ - # 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 os - import sys --import tempfile --import subprocess -- --from pathlib import Path - - from mozboot.base import BaseBootstrapper - from mozboot.linux_common import LinuxBootstrapper - --# NOTE: This script is intended to be run with a vanilla Python install. We --# have to rely on the standard library instead of Python 2+3 helpers like --# the six module. --if sys.version_info < (3,): -- input = raw_input # noqa -- -- --AUR_URL_TEMPLATE = "https://aur.archlinux.org/cgit/aur.git/snapshot/{}.tar.gz" -- - - class ArchlinuxBootstrapper(LinuxBootstrapper, BaseBootstrapper): - """Archlinux experimental bootstrapper.""" - -- SYSTEM_PACKAGES = ["base-devel", "unzip", "zip"] -- -- BROWSER_PACKAGES = [ -- "alsa-lib", -- "dbus-glib", -- "gtk3", -- "libevent", -- "libvpx", -- "libxt", -- "mime-types", -- "startup-notification", -- "gst-plugins-base-libs", -- "libpulse", -- "xorg-server-xvfb", -- "gst-libav", -- "gst-plugins-good", -- ] -- -- BROWSER_AUR_PACKAGES = [ -- "uuid", -- ] -- -- MOBILE_ANDROID_COMMON_PACKAGES = [ -- # See comment about 32 bit binaries and multilib below. -- "multilib/lib32-ncurses", -- "multilib/lib32-readline", -- "multilib/lib32-zlib", -- ] -- - def __init__(self, version, dist_id, **kwargs): - print("Using an experimental bootstrapper for Archlinux.", file=sys.stderr) - BaseBootstrapper.__init__(self, **kwargs) - -- def install_system_packages(self): -- self.pacman_install(*self.SYSTEM_PACKAGES) -- -- def install_browser_packages(self, mozconfig_builder, artifact_mode=False): -- # TODO: Figure out what not to install for artifact mode -- self.aur_install(*self.BROWSER_AUR_PACKAGES) -- self.pacman_install(*self.BROWSER_PACKAGES) -- -- def install_browser_artifact_mode_packages(self, mozconfig_builder): -- self.install_browser_packages(mozconfig_builder, artifact_mode=True) -- -- def ensure_nasm_packages(self): -- # installed via install_browser_packages -- pass -- -- def install_mobile_android_packages(self, mozconfig_builder, artifact_mode=False): -- # Multi-part process: -- # 1. System packages. -- # 2. Android SDK. Android NDK only if we are not in artifact mode. Android packages. -- -- # 1. This is hard to believe, but the Android SDK binaries are 32-bit -- # and that conflicts with 64-bit Arch installations out of the box. The -- # solution is to add the multilibs repository; unfortunately, this -- # requires manual intervention. -- try: -- self.pacman_install(*self.MOBILE_ANDROID_COMMON_PACKAGES) -- except Exception as e: -- print( -- "Failed to install all packages. The Android developer " -- "toolchain requires 32 bit binaries be enabled (see " -- "https://wiki.archlinux.org/index.php/Android). You may need to " -- "manually enable the multilib repository following the instructions " -- "at https://wiki.archlinux.org/index.php/Multilib.", -- file=sys.stderr, -- ) -- raise e -- -- # 2. Android pieces. -- super().install_mobile_android_packages( -- mozconfig_builder, artifact_mode=artifact_mode -- ) -+ def install_packages(self, packages): -+ # watchman is not available via pacman -+ packages = [p for p in packages if p != "watchman"] -+ self.pacman_install(*packages) - - def upgrade_mercurial(self, current): - self.pacman_install("mercurial") - -- def pacman_is_installed(self, package): -- command = ["pacman", "-Q", package] -- return ( -- subprocess.run( -- command, -- stdout=subprocess.DEVNULL, -- stderr=subprocess.DEVNULL, -- ).returncode -- == 0 -- ) -- - def pacman_install(self, *packages): - command = ["pacman", "-S", "--needed"] - if self.no_interactive: -@@ -124,71 +31,3 @@ class ArchlinuxBootstrapper(LinuxBootstr - command.extend(packages) - - self.run_as_root(command) -- -- def run(self, command, env=None): -- subprocess.check_call(command, stdin=sys.stdin, env=env) -- -- def download(self, uri): -- command = ["curl", "-L", "-O", uri] -- self.run(command) -- -- def unpack(self, path: Path, name, ext): -- if ext == ".gz": -- compression = "-z" -- else: -- print(f"unsupported compression extension: {ext}", file=sys.stderr) -- sys.exit(1) -- -- name = path / (name + ".tar" + ext) -- command = ["tar", "-x", compression, "-f", str(name), "-C", str(path)] -- self.run(command) -- -- def makepkg(self, name): -- command = ["makepkg", "-sri"] -- if self.no_interactive: -- command.append("--noconfirm") -- makepkg_env = os.environ.copy() -- makepkg_env["PKGDEST"] = "." -- self.run(command, env=makepkg_env) -- -- def aur_install(self, *packages): -- needed = [] -- -- for package in packages: -- if self.pacman_is_installed(package): -- print( -- f"warning: AUR package {package} is installed -- skipping", -- file=sys.stderr, -- ) -- else: -- needed.append(package) -- -- # all required AUR packages are already installed! -- if not needed: -- return -- -- path = Path(tempfile.mkdtemp(prefix="mozboot-")) -- if not self.no_interactive: -- print( -- "WARNING! This script requires to install packages from the AUR " -- "This is potentially insecure so I recommend that you carefully " -- "read each package description and check the sources." -- f"These packages will be built in {path}: " + ", ".join(needed), -- file=sys.stderr, -- ) -- choice = input("Do you want to continue? (yes/no) [no]") -- if choice != "yes": -- sys.exit(1) -- -- base_dir = Path.cwd() -- os.chdir(path) -- for name in needed: -- url = AUR_URL_TEMPLATE.format(package) -- ext = Path(url).suffix -- directory = path / name -- self.download(url) -- self.unpack(path, name, ext) -- os.chdir(directory) -- self.makepkg(name) -- -- os.chdir(base_dir) -diff --git a/python/mozboot/mozboot/base.py b/python/mozboot/mozboot/base.py ---- a/python/mozboot/mozboot/base.py -+++ b/python/mozboot/mozboot/base.py -@@ -2,25 +2,22 @@ - # 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 os - import re - import subprocess - import sys -- - from pathlib import Path - --from packaging.version import Version -+from mach.util import to_optional_path, win_to_msys_path - from mozboot import rust - from mozboot.util import ( -+ MINIMUM_RUST_VERSION, - get_mach_virtualenv_binary, -- MINIMUM_RUST_VERSION, - http_download_and_save, - ) -+from mozbuild.bootstrap import bootstrap_all_toolchains_for, bootstrap_toolchain - from mozfile import which --from mozbuild.bootstrap import bootstrap_toolchain --from mach.util import to_optional_path, win_to_msys_path -+from packaging.version import Version - - NO_MERCURIAL = """ - Could not find Mercurial (hg) in the current shell's path. Try starting a new -@@ -143,7 +140,7 @@ ac_add_options --enable-artifact-builds - - JS_MOZCONFIG_TEMPLATE = """\ - # Build only the SpiderMonkey JS test shell --ac_add_options --enable-application=js -+ac_add_options --enable-project=js - """ - - # Upgrade Mercurial older than this. -@@ -344,47 +341,12 @@ class BaseBootstrapper(object): - % __name__ - ) - -- def ensure_stylo_packages(self): -- """ -- Install any necessary packages needed for Stylo development. -- """ -- raise NotImplementedError( -- "%s does not yet implement ensure_stylo_packages()" % __name__ -- ) -- -- def ensure_nasm_packages(self): -- """ -- Install nasm. -- """ -- raise NotImplementedError( -- "%s does not yet implement ensure_nasm_packages()" % __name__ -- ) -- - def ensure_sccache_packages(self): - """ - Install sccache. - """ - pass - -- def ensure_node_packages(self): -- """ -- Install any necessary packages needed to supply NodeJS""" -- raise NotImplementedError( -- "%s does not yet implement ensure_node_packages()" % __name__ -- ) -- -- def ensure_fix_stacks_packages(self): -- """ -- Install fix-stacks. -- """ -- pass -- -- def ensure_minidump_stackwalk_packages(self): -- """ -- Install minidump-stackwalk. -- """ -- pass -- - def install_toolchain_static_analysis(self, toolchain_job): - clang_tools_path = self.state_dir / "clang-tools" - if not clang_tools_path.exists(): -@@ -428,9 +390,17 @@ class BaseBootstrapper(object): - - subprocess.check_call(cmd, cwd=str(install_dir)) - -- def run_as_root(self, command): -+ def auto_bootstrap(self, application): -+ args = ["--with-ccache=sccache"] -+ if application.endswith("_artifact_mode"): -+ args.append("--enable-artifact-builds") -+ application = application[: -len("_artifact_mode")] -+ args.append("--enable-project={}".format(application.replace("_", "/"))) -+ bootstrap_all_toolchains_for(args) -+ -+ def run_as_root(self, command, may_use_sudo=True): - if os.geteuid() != 0: -- if which("sudo"): -+ if may_use_sudo and which("sudo"): - command.insert(0, "sudo") - else: - command = ["su", "root", "-c", " ".join(command)] -@@ -439,107 +409,6 @@ class BaseBootstrapper(object): - - subprocess.check_call(command, stdin=sys.stdin) - -- def dnf_install(self, *packages): -- if which("dnf"): -- -- def not_installed(package): -- # We could check for "Error: No matching Packages to list", but -- # checking `dnf`s exit code is sufficent. -- # Ideally we'd invoke dnf with '--cacheonly', but there's: -- # https://bugzilla.redhat.com/show_bug.cgi?id=2030255 -- is_installed = subprocess.run( -- ["dnf", "list", "--installed", package], -- stdout=subprocess.PIPE, -- stderr=subprocess.STDOUT, -- ) -- if is_installed.returncode not in [0, 1]: -- stdout = is_installed.stdout -- raise Exception( -- f'Failed to determine whether package "{package}" is installed: "{stdout}"' -- ) -- return is_installed.returncode != 0 -- -- packages = list(filter(not_installed, packages)) -- if len(packages) == 0: -- # avoid sudo prompt (support unattended re-bootstrapping) -- return -- -- command = ["dnf", "install"] -- else: -- command = ["yum", "install"] -- -- if self.no_interactive: -- command.append("-y") -- command.extend(packages) -- -- self.run_as_root(command) -- -- def dnf_groupinstall(self, *packages): -- if which("dnf"): -- installed = subprocess.run( -- # Ideally we'd invoke dnf with '--cacheonly', but there's: -- # https://bugzilla.redhat.com/show_bug.cgi?id=2030255 -- # Ideally we'd use `--installed` instead of the undocumented -- # `installed` subcommand, but that doesn't currently work: -- # https://bugzilla.redhat.com/show_bug.cgi?id=1884616#c0 -- ["dnf", "group", "list", "installed", "--hidden"], -- universal_newlines=True, -- stdout=subprocess.PIPE, -- stderr=subprocess.STDOUT, -- ) -- if installed.returncode != 0: -- raise Exception( -- f'Failed to determine currently-installed package groups: "{installed.stdout}"' -- ) -- installed_packages = (pkg.strip() for pkg in installed.stdout.split("\n")) -- packages = list(filter(lambda p: p not in installed_packages, packages)) -- if len(packages) == 0: -- # avoid sudo prompt (support unattended re-bootstrapping) -- return -- -- command = ["dnf", "groupinstall"] -- else: -- command = ["yum", "groupinstall"] -- -- if self.no_interactive: -- command.append("-y") -- command.extend(packages) -- -- self.run_as_root(command) -- -- def dnf_update(self, *packages): -- if which("dnf"): -- command = ["dnf", "update"] -- else: -- command = ["yum", "update"] -- -- if self.no_interactive: -- command.append("-y") -- command.extend(packages) -- -- self.run_as_root(command) -- -- def apt_install(self, *packages): -- command = ["apt-get", "install"] -- if self.no_interactive: -- command.append("-y") -- command.extend(packages) -- -- self.run_as_root(command) -- -- def apt_update(self): -- command = ["apt-get", "update"] -- if self.no_interactive: -- command.append("-y") -- -- self.run_as_root(command) -- -- def apt_add_architecture(self, arch): -- command = ["dpkg", "--add-architecture"] -- command.extend(arch) -- -- self.run_as_root(command) -- - def prompt_int(self, prompt, low, high, default=None): - """Prompts the user with prompt and requires an integer between low and high. - -@@ -757,14 +626,10 @@ class BaseBootstrapper(object): - if modern: - print("Your version of Rust (%s) is new enough." % version) - -- if rustup: -- self.ensure_rust_targets(rustup, version) -- return -- -- if version: -+ elif version: - print("Your version of Rust (%s) is too old." % version) - -- if rustup: -+ if rustup and not modern: - rustup_version = self._parse_version(rustup) - if not rustup_version: - print(RUSTUP_OLD) -@@ -776,10 +641,16 @@ class BaseBootstrapper(object): - if not modern: - print(RUST_UPGRADE_FAILED % (MODERN_RUST_VERSION, after)) - sys.exit(1) -- else: -+ elif not rustup: - # No rustup. Download and run the installer. - print("Will try to install Rust.") - self.install_rust() -+ modern, version = self.is_rust_modern(cargo_bin) -+ rustup = to_optional_path( -+ which("rustup", extra_search_dirs=[str(cargo_bin)]) -+ ) -+ -+ self.ensure_rust_targets(rustup, version) - - def ensure_rust_targets(self, rustup: Path, rust_version): - """Make sure appropriate cross target libraries are installed.""" -diff --git a/python/mozboot/mozboot/bootstrap.py b/python/mozboot/mozboot/bootstrap.py ---- a/python/mozboot/mozboot/bootstrap.py -+++ b/python/mozboot/mozboot/bootstrap.py -@@ -2,48 +2,46 @@ - # 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 -- --from collections import OrderedDict -- - import os - import platform - import re - import shutil --import sys -+import stat - import subprocess -+import sys - import time --from typing import Optional -+from collections import OrderedDict - from pathlib import Path --from packaging.version import Version -+from typing import Optional -+ -+# Use distro package to retrieve linux platform information -+import distro -+from mach.site import MachSiteManager -+from mach.telemetry import initialize_telemetry_setting - from mach.util import ( -+ UserError, - get_state_dir, -- UserError, - to_optional_path, - to_optional_str, - win_to_msys_path, - ) --from mach.telemetry import initialize_telemetry_setting --from mach.site import MachSiteManager -+from mozboot.archlinux import ArchlinuxBootstrapper - from mozboot.base import MODERN_RUST_VERSION - from mozboot.centosfedora import CentOSFedoraBootstrapper --from mozboot.opensuse import OpenSUSEBootstrapper - from mozboot.debian import DebianBootstrapper - from mozboot.freebsd import FreeBSDBootstrapper - from mozboot.gentoo import GentooBootstrapper --from mozboot.osx import OSXBootstrapper, OSXBootstrapperLight -+from mozboot.mozconfig import MozconfigBuilder -+from mozboot.mozillabuild import MozillaBuildBootstrapper - from mozboot.openbsd import OpenBSDBootstrapper --from mozboot.archlinux import ArchlinuxBootstrapper -+from mozboot.opensuse import OpenSUSEBootstrapper -+from mozboot.osx import OSXBootstrapper, OSXBootstrapperLight - from mozboot.solus import SolusBootstrapper - from mozboot.void import VoidBootstrapper - from mozboot.windows import WindowsBootstrapper --from mozboot.mozillabuild import MozillaBuildBootstrapper --from mozboot.mozconfig import MozconfigBuilder -+from mozbuild.base import MozbuildObject - from mozfile import which --from mozbuild.base import MozbuildObject -- --# Use distro package to retrieve linux platform information --import distro -+from packaging.version import Version - - APPLICATION_CHOICE = """ - Note on Artifact Mode: -@@ -123,6 +121,7 @@ DEBIAN_DISTROS = ( - "devuan", - "pureos", - "deepin", -+ "tuxedo", - ) - - ADD_GIT_CINNABAR_PATH = """ -@@ -250,13 +249,11 @@ class Bootstrapper(object): - # Also install the clang static-analysis package by default - # The best place to install our packages is in the state directory - # we have. We should have created one above in non-interactive mode. -- self.instance.ensure_node_packages() -- self.instance.ensure_fix_stacks_packages() -- self.instance.ensure_minidump_stackwalk_packages() -+ self.instance.auto_bootstrap(application) -+ self.instance.install_toolchain_artifact("fix-stacks") -+ self.instance.install_toolchain_artifact("minidump-stackwalk") - if not self.instance.artifact_mode: -- self.instance.ensure_stylo_packages() - self.instance.ensure_clang_static_analysis_package() -- self.instance.ensure_nasm_packages() - self.instance.ensure_sccache_packages() - # Like 'ensure_browser_packages' or 'ensure_mobile_android_packages' - getattr(self.instance, "ensure_%s_packages" % application)() -@@ -325,7 +322,6 @@ class Bootstrapper(object): - state_dir = Path(get_state_dir()) - self.instance.state_dir = state_dir - -- hg_installed, hg_modern = self.instance.ensure_mercurial_modern() - hg = to_optional_path(which("hg")) - - # We need to enable the loading of hgrc in case extensions are -@@ -355,6 +351,10 @@ class Bootstrapper(object): - - # Possibly configure Mercurial, but not if the current checkout or repo - # type is Git. -+ hg_installed = bool(hg) -+ if checkout_type == "hg": -+ hg_installed, hg_modern = self.instance.ensure_mercurial_modern() -+ - if hg_installed and checkout_type == "hg": - if not self.instance.no_interactive: - configure_hg = self.instance.prompt_yesno(prompt=CONFIGURE_MERCURIAL) -@@ -485,8 +485,8 @@ class Bootstrapper(object): - # distutils is singled out here because some distros (namely Ubuntu) - # include it in a separate package outside of the main Python - # installation. -+ import distutils.spawn - import distutils.sysconfig -- import distutils.spawn - - assert distutils.sysconfig is not None and distutils.spawn is not None - except ImportError as e: -@@ -610,11 +610,11 @@ def current_firefox_checkout(env, hg: Op - # Just check for known-good files in the checkout, to prevent attempted - # foot-shootings. Determining a canonical git checkout of mozilla-unified - # is...complicated -- elif git_dir.exists(): -+ elif git_dir.exists() or hg_dir.exists(): - moz_configure = path / "moz.configure" - if moz_configure.exists(): - _warn_if_risky_revision(path) -- return "git", path -+ return ("git" if git_dir.exists() else "hg"), path - - if not len(path.parents): - break -@@ -639,13 +639,23 @@ def update_git_tools(git: Optional[Path] - # repository. It now only downloads prebuilt binaries, so if we are - # updating from an old setup, remove the repository and start over. - if (cinnabar_dir / ".git").exists(): -- shutil.rmtree(str(cinnabar_dir)) -+ # git sets pack files read-only, which causes problems removing -+ # them on Windows. To work around that, we use an error handler -+ # on rmtree that retries to remove the file after chmod'ing it. -+ def onerror(func, path, exc): -+ if func == os.unlink: -+ os.chmod(path, stat.S_IRWXU) -+ func(path) -+ else: -+ raise -+ -+ shutil.rmtree(str(cinnabar_dir), onerror=onerror) - - # If we already have an executable, ask it to update itself. - exists = cinnabar_exe.exists() - if exists: - try: -- subprocess.check_call([cinnabar_exe, "self-update"]) -+ subprocess.check_call([str(cinnabar_exe), "self-update"]) - except subprocess.CalledProcessError as e: - print(e) - -diff --git a/python/mozboot/mozboot/centosfedora.py b/python/mozboot/mozboot/centosfedora.py ---- a/python/mozboot/mozboot/centosfedora.py -+++ b/python/mozboot/mozboot/centosfedora.py -@@ -2,10 +2,11 @@ - # 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 subprocess - - from mozboot.base import BaseBootstrapper - from mozboot.linux_common import LinuxBootstrapper -+from mozfile import which - - - class CentOSFedoraBootstrapper(LinuxBootstrapper, BaseBootstrapper): -@@ -16,79 +17,63 @@ class CentOSFedoraBootstrapper(LinuxBoot - self.version = int(version.split(".")[0]) - self.dist_id = dist_id - -- self.group_packages = [] -- -- self.packages = ["which"] -- -- self.browser_group_packages = ["GNOME Software Development"] -- -- self.browser_packages = [ -- "alsa-lib-devel", -- "dbus-glib-devel", -- "glibc-static", -- # Development group. -- "libstdc++-static", -- "libXt-devel", -- "pulseaudio-libs-devel", -- "gcc-c++", -- ] -- -- self.mobile_android_packages = [] -- -+ def install_packages(self, packages): -+ if self.version >= 33 and "perl" in packages: -+ packages.append("perl-FindBin") -+ # watchman is not available on centos/rocky - if self.distro in ("centos", "rocky"): -- self.group_packages += ["Development Tools"] -- -- self.packages += ["curl-devel"] -- -- self.browser_packages += ["gtk3-devel"] -- -- if self.version == 6: -- self.group_packages += [ -- "Development Libraries", -- "GNOME Software Development", -- ] -- -- else: -- self.packages += ["redhat-rpm-config"] -- -- self.browser_group_packages = ["Development Tools"] -- -- elif self.distro == "fedora": -- self.group_packages += ["C Development Tools and Libraries"] -- -- self.packages += [ -- "redhat-rpm-config", -- "watchman", -- ] -- if self.version >= 33: -- self.packages.append("perl-FindBin") -- -- self.mobile_android_packages += ["ncurses-compat-libs"] -- -- self.packages += ["python3-devel"] -- -- def install_system_packages(self): -- self.dnf_groupinstall(*self.group_packages) -- self.dnf_install(*self.packages) -- -- def install_browser_packages(self, mozconfig_builder, artifact_mode=False): -- # TODO: Figure out what not to install for artifact mode -- self.dnf_groupinstall(*self.browser_group_packages) -- self.dnf_install(*self.browser_packages) -- -- def install_browser_artifact_mode_packages(self, mozconfig_builder): -- self.install_browser_packages(mozconfig_builder, artifact_mode=True) -- -- def install_mobile_android_packages(self, mozconfig_builder, artifact_mode=False): -- # Install Android specific packages. -- self.dnf_install(*self.mobile_android_packages) -- -- super().install_mobile_android_packages( -- mozconfig_builder, artifact_mode=artifact_mode -- ) -+ packages = [p for p in packages if p != "watchman"] -+ self.dnf_install(*packages) - - def upgrade_mercurial(self, current): - if current is None: - self.dnf_install("mercurial") - else: - self.dnf_update("mercurial") -+ -+ def dnf_install(self, *packages): -+ if which("dnf"): -+ -+ def not_installed(package): -+ # We could check for "Error: No matching Packages to list", but -+ # checking `dnf`s exit code is sufficent. -+ # Ideally we'd invoke dnf with '--cacheonly', but there's: -+ # https://bugzilla.redhat.com/show_bug.cgi?id=2030255 -+ is_installed = subprocess.run( -+ ["dnf", "list", "--installed", package], -+ stdout=subprocess.PIPE, -+ stderr=subprocess.STDOUT, -+ ) -+ if is_installed.returncode not in [0, 1]: -+ stdout = is_installed.stdout -+ raise Exception( -+ f'Failed to determine whether package "{package}" is installed: "{stdout}"' -+ ) -+ return is_installed.returncode != 0 -+ -+ packages = list(filter(not_installed, packages)) -+ if len(packages) == 0: -+ # avoid sudo prompt (support unattended re-bootstrapping) -+ return -+ -+ command = ["dnf", "install"] -+ else: -+ command = ["yum", "install"] -+ -+ if self.no_interactive: -+ command.append("-y") -+ command.extend(packages) -+ -+ self.run_as_root(command) -+ -+ def dnf_update(self, *packages): -+ if which("dnf"): -+ command = ["dnf", "update"] -+ else: -+ command = ["yum", "update"] -+ -+ if self.no_interactive: -+ command.append("-y") -+ command.extend(packages) -+ -+ self.run_as_root(command) -diff --git a/python/mozboot/mozboot/debian.py b/python/mozboot/mozboot/debian.py ---- a/python/mozboot/mozboot/debian.py -+++ b/python/mozboot/mozboot/debian.py -@@ -2,48 +2,13 @@ - # 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 sys - --from mozboot.base import BaseBootstrapper, MERCURIAL_INSTALL_PROMPT -+from mozboot.base import MERCURIAL_INSTALL_PROMPT, BaseBootstrapper - from mozboot.linux_common import LinuxBootstrapper - --import sys -- - - class DebianBootstrapper(LinuxBootstrapper, BaseBootstrapper): -- -- # These are common packages for all Debian-derived distros (such as -- # Ubuntu). -- COMMON_PACKAGES = [ -- "build-essential", -- "libpython3-dev", -- "m4", -- "unzip", -- "uuid", -- "zip", -- ] -- -- # These are common packages for building Firefox for Desktop -- # (browser) for all Debian-derived distros (such as Ubuntu). -- BROWSER_COMMON_PACKAGES = [ -- "libasound2-dev", -- "libcurl4-openssl-dev", -- "libdbus-1-dev", -- "libdbus-glib-1-dev", -- "libdrm-dev", -- "libgtk-3-dev", -- "libpulse-dev", -- "libx11-xcb-dev", -- "libxt-dev", -- "xvfb", -- ] -- -- # These are common packages for building Firefox for Android -- # (mobile/android) for all Debian-derived distros (such as Ubuntu). -- MOBILE_ANDROID_COMMON_PACKAGES = [ -- "libncurses5", # For native debugging in Android Studio -- ] -- - def __init__(self, distro, version, dist_id, codename, **kwargs): - BaseBootstrapper.__init__(self, **kwargs) - -@@ -52,16 +17,6 @@ class DebianBootstrapper(LinuxBootstrapp - self.dist_id = dist_id - self.codename = codename - -- self.packages = list(self.COMMON_PACKAGES) -- -- try: -- version_number = int(version) -- except ValueError: -- version_number = None -- -- if (version_number and (version_number >= 11)) or version == "unstable": -- self.packages += ["watchman"] -- - def suggest_install_distutils(self): - print( - "HINT: Try installing distutils with " -@@ -75,26 +30,15 @@ class DebianBootstrapper(LinuxBootstrapp - file=sys.stderr, - ) - -- def install_system_packages(self): -- self.apt_install(*self.packages) -- -- def install_browser_packages(self, mozconfig_builder, artifact_mode=False): -- # TODO: Figure out what not to install for artifact mode -- self.apt_install(*self.BROWSER_COMMON_PACKAGES) -- -- def install_browser_artifact_mode_packages(self, mozconfig_builder): -- self.install_browser_packages(mozconfig_builder, artifact_mode=True) -+ def install_packages(self, packages): -+ try: -+ if int(self.version) < 11: -+ # watchman is only available starting from Debian 11. -+ packages = [p for p in packages if p != "watchman"] -+ except ValueError: -+ pass - -- def install_mobile_android_packages(self, mozconfig_builder, artifact_mode=False): -- # Multi-part process: -- # 1. System packages. -- # 2. Android SDK. Android NDK only if we are not in artifact mode. Android packages. -- self.apt_install(*self.MOBILE_ANDROID_COMMON_PACKAGES) -- -- # 2. Android pieces. -- super().install_mobile_android_packages( -- mozconfig_builder, artifact_mode=artifact_mode -- ) -+ self.apt_install(*packages) - - def _update_package_manager(self): - self.apt_update() -@@ -122,3 +66,18 @@ class DebianBootstrapper(LinuxBootstrapp - # pip. - assert res == 1 - self.run_as_root(["pip3", "install", "--upgrade", "Mercurial"]) -+ -+ def apt_install(self, *packages): -+ command = ["apt-get", "install"] -+ if self.no_interactive: -+ command.append("-y") -+ command.extend(packages) -+ -+ self.run_as_root(command) -+ -+ def apt_update(self): -+ command = ["apt-get", "update"] -+ if self.no_interactive: -+ command.append("-y") -+ -+ self.run_as_root(command) -diff --git a/python/mozboot/mozboot/freebsd.py b/python/mozboot/mozboot/freebsd.py ---- a/python/mozboot/mozboot/freebsd.py -+++ b/python/mozboot/mozboot/freebsd.py -@@ -2,7 +2,6 @@ - # 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 sys - - from mozboot.base import BaseBootstrapper -@@ -19,11 +18,11 @@ class FreeBSDBootstrapper(BaseBootstrapp - "gmake", - "gtar", - "m4", -+ "npm", - "pkgconf", - "py%d%d-sqlite3" % sys.version_info[0:2], - "rust", - "watchman", -- "zip", - ] - - self.browser_packages = [ -@@ -56,10 +55,11 @@ class FreeBSDBootstrapper(BaseBootstrapp - def install_browser_packages(self, mozconfig_builder, artifact_mode=False): - # TODO: Figure out what not to install for artifact mode - packages = self.browser_packages.copy() -- if sys.platform.startswith("netbsd"): -- packages.extend(["brotli", "gtk3+", "libv4l"]) -- else: -- packages.extend(["gtk3", "mesa-dri", "v4l_compat"]) -+ if not artifact_mode: -+ if sys.platform.startswith("netbsd"): -+ packages.extend(["brotli", "gtk3+", "libv4l", "cbindgen"]) -+ else: -+ packages.extend(["gtk3", "mesa-dri", "v4l_compat", "rust-cbindgen"]) - self.pkg_install(*packages) - - def install_browser_artifact_mode_packages(self, mozconfig_builder): -@@ -69,19 +69,5 @@ class FreeBSDBootstrapper(BaseBootstrapp - # TODO: we don't ship clang base static analysis for this platform - pass - -- def ensure_stylo_packages(self): -- # Clang / llvm already installed as browser package -- if sys.platform.startswith("netbsd"): -- self.pkg_install("cbindgen") -- else: -- self.pkg_install("rust-cbindgen") -- -- def ensure_nasm_packages(self): -- # installed via install_browser_packages -- pass -- -- def ensure_node_packages(self): -- self.pkg_install("npm") -- - def upgrade_mercurial(self, current): - self.pkg_install("mercurial") -diff --git a/python/mozboot/mozboot/gentoo.py b/python/mozboot/mozboot/gentoo.py ---- a/python/mozboot/mozboot/gentoo.py -+++ b/python/mozboot/mozboot/gentoo.py -@@ -2,8 +2,6 @@ - # 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 -- - from mozboot.base import BaseBootstrapper - from mozboot.linux_common import LinuxBootstrapper - -@@ -15,32 +13,13 @@ class GentooBootstrapper(LinuxBootstrapp - self.version = version - self.dist_id = dist_id - -- def install_system_packages(self): -- self.ensure_system_packages() -- -- def ensure_system_packages(self): -- self.run_as_root( -- ["emerge", "--noreplace", "--quiet", "app-arch/zip", "dev-util/watchman"] -- ) -- -- def install_browser_packages(self, mozconfig_builder, artifact_mode=False): -- # TODO: Figure out what not to install for artifact mode -- self.run_as_root( -- [ -- "emerge", -- "--oneshot", -- "--noreplace", -- "--quiet", -- "--newuse", -- "dev-libs/dbus-glib", -- "media-sound/pulseaudio", -- "x11-libs/gtk+:3", -- "x11-libs/libXt", -- ] -- ) -- -- def install_browser_artifact_mode_packages(self, mozconfig_builder): -- self.install_browser_packages(mozconfig_builder, artifact_mode=True) -+ def install_packages(self, packages): -+ DISAMBIGUATE = { -+ "tar": "app-arch/tar", -+ } -+ # watchman is available but requires messing with USEs. -+ packages = [DISAMBIGUATE.get(p, p) for p in packages if p != "watchman"] -+ self.run_as_root(["emerge", "--noreplace"] + packages) - - def _update_package_manager(self): - self.run_as_root(["emerge", "--sync"]) -diff --git a/python/mozboot/mozboot/linux_common.py b/python/mozboot/mozboot/linux_common.py ---- a/python/mozboot/mozboot/linux_common.py -+++ b/python/mozboot/mozboot/linux_common.py -@@ -6,8 +6,6 @@ - # needed to install Stylo and Node dependencies. This class must come before - # BaseBootstrapper in the inheritance list. - --from __future__ import absolute_import, print_function, unicode_literals -- - import platform - - -@@ -15,68 +13,6 @@ def is_non_x86_64(): - return platform.machine() != "x86_64" - - --class SccacheInstall(object): -- def __init__(self, **kwargs): -- pass -- -- def ensure_sccache_packages(self): -- self.install_toolchain_artifact("sccache") -- -- --class FixStacksInstall(object): -- def __init__(self, **kwargs): -- pass -- -- def ensure_fix_stacks_packages(self): -- self.install_toolchain_artifact("fix-stacks") -- -- --class StyloInstall(object): -- def __init__(self, **kwargs): -- pass -- -- def ensure_stylo_packages(self): -- if is_non_x86_64(): -- print( -- "Cannot install bindgen clang and cbindgen packages from taskcluster.\n" -- "Please install these packages manually." -- ) -- return -- -- self.install_toolchain_artifact("clang") -- self.install_toolchain_artifact("cbindgen") -- -- --class NasmInstall(object): -- def __init__(self, **kwargs): -- pass -- -- def ensure_nasm_packages(self): -- if is_non_x86_64(): -- print( -- "Cannot install nasm from taskcluster.\n" -- "Please install this package manually." -- ) -- return -- -- self.install_toolchain_artifact("nasm") -- -- --class NodeInstall(object): -- def __init__(self, **kwargs): -- pass -- -- def ensure_node_packages(self): -- if is_non_x86_64(): -- print( -- "Cannot install node package from taskcluster.\n" -- "Please install this package manually." -- ) -- return -- -- self.install_toolchain_artifact("node") -- -- - class ClangStaticAnalysisInstall(object): - def __init__(self, **kwargs): - pass -@@ -94,14 +30,6 @@ class ClangStaticAnalysisInstall(object) - self.install_toolchain_static_analysis(static_analysis.LINUX_CLANG_TIDY) - - --class MinidumpStackwalkInstall(object): -- def __init__(self, **kwargs): -- pass -- -- def ensure_minidump_stackwalk_packages(self): -- self.install_toolchain_artifact("minidump-stackwalk") -- -- - class MobileAndroidBootstrapper(object): - def __init__(self, **kwargs): - pass -@@ -154,13 +82,32 @@ class MobileAndroidBootstrapper(object): - - class LinuxBootstrapper( - ClangStaticAnalysisInstall, -- FixStacksInstall, -- MinidumpStackwalkInstall, - MobileAndroidBootstrapper, -- NasmInstall, -- NodeInstall, -- SccacheInstall, -- StyloInstall, - ): - def __init__(self, **kwargs): - pass -+ -+ def ensure_sccache_packages(self): -+ pass -+ -+ def install_system_packages(self): -+ self.install_packages( -+ [ -+ "bash", -+ "findutils", # contains xargs -+ "gzip", -+ "libxml2", # used by bootstrapped clang -+ "m4", -+ "make", -+ "perl", -+ "tar", -+ "unzip", -+ "watchman", -+ ] -+ ) -+ -+ def install_browser_packages(self, mozconfig_builder, artifact_mode=False): -+ pass -+ -+ def install_browser_artifact_mode_packages(self, mozconfig_builder): -+ pass -diff --git a/python/mozboot/mozboot/mach_commands.py b/python/mozboot/mozboot/mach_commands.py ---- a/python/mozboot/mozboot/mach_commands.py -+++ b/python/mozboot/mozboot/mach_commands.py -@@ -2,13 +2,11 @@ - # 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 errno - import sys -+from pathlib import Path - --from pathlib import Path --from mach.decorators import CommandArgument, Command -+from mach.decorators import Command, CommandArgument - from mozboot.bootstrap import APPLICATIONS - - -@@ -71,8 +69,8 @@ def vcs_setup(command_context, update_on - """ - import mozboot.bootstrap as bootstrap - import mozversioncontrol -+ from mach.util import to_optional_path - from mozfile import which -- from mach.util import to_optional_path - - repo = mozversioncontrol.get_repository_object(command_context._mach_context.topdir) - tool = "hg" -diff --git a/python/mozboot/mozboot/mozconfig.py b/python/mozboot/mozboot/mozconfig.py ---- a/python/mozboot/mozboot/mozconfig.py -+++ b/python/mozboot/mozboot/mozconfig.py -@@ -2,15 +2,11 @@ - # 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 -- - import filecmp - import os -- - from pathlib import Path - from typing import Union - -- - MOZ_MYCONFIG_ERROR = """ - The MOZ_MYCONFIG environment variable to define the location of mozconfigs - is deprecated. If you wish to define the mozconfig path via an environment -diff --git a/python/mozboot/mozboot/mozillabuild.py b/python/mozboot/mozboot/mozillabuild.py ---- a/python/mozboot/mozboot/mozillabuild.py -+++ b/python/mozboot/mozboot/mozillabuild.py -@@ -2,8 +2,6 @@ - # 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 ctypes - import os - import platform -@@ -231,35 +229,9 @@ class MozillaBuildBootstrapper(BaseBoots - def ensure_sccache_packages(self): - from mozboot import sccache - -- self.install_toolchain_artifact("sccache") - self.install_toolchain_artifact(sccache.RUSTC_DIST_TOOLCHAIN, no_unpack=True) - self.install_toolchain_artifact(sccache.CLANG_DIST_TOOLCHAIN, no_unpack=True) - -- def ensure_stylo_packages(self): -- # On-device artifact builds are supported; on-device desktop builds are not. -- if is_aarch64_host(): -- raise Exception( -- "You should not be performing desktop builds on an " -- "AArch64 device. If you want to do artifact builds " -- "instead, please choose the appropriate artifact build " -- "option when beginning bootstrap." -- ) -- -- self.install_toolchain_artifact("clang") -- self.install_toolchain_artifact("cbindgen") -- -- def ensure_nasm_packages(self): -- self.install_toolchain_artifact("nasm") -- -- def ensure_node_packages(self): -- self.install_toolchain_artifact("node") -- -- def ensure_fix_stacks_packages(self): -- self.install_toolchain_artifact("fix-stacks") -- -- def ensure_minidump_stackwalk_packages(self): -- self.install_toolchain_artifact("minidump-stackwalk") -- - def _update_package_manager(self): - pass - -diff --git a/python/mozboot/mozboot/openbsd.py b/python/mozboot/mozboot/openbsd.py ---- a/python/mozboot/mozboot/openbsd.py -+++ b/python/mozboot/mozboot/openbsd.py -@@ -2,8 +2,6 @@ - # 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 -- - from mozboot.base import BaseBootstrapper - - -@@ -11,9 +9,17 @@ class OpenBSDBootstrapper(BaseBootstrapp - def __init__(self, version, **kwargs): - BaseBootstrapper.__init__(self, **kwargs) - -- self.packages = ["gmake", "gtar", "rust", "unzip", "zip"] -+ self.packages = ["gmake", "gtar", "rust", "unzip"] - -- self.browser_packages = ["llvm", "nasm", "gtk+3", "dbus-glib", "pulseaudio"] -+ self.browser_packages = [ -+ "llvm", -+ "cbindgen", -+ "nasm", -+ "node", -+ "gtk+3", -+ "dbus-glib", -+ "pulseaudio", -+ ] - - def install_system_packages(self): - # we use -z because there's no other way to say "any autoconf-2.13" -@@ -30,14 +36,3 @@ class OpenBSDBootstrapper(BaseBootstrapp - def ensure_clang_static_analysis_package(self): - # TODO: we don't ship clang base static analysis for this platform - pass -- -- def ensure_stylo_packages(self): -- # Clang / llvm already installed as browser package -- self.run_as_root(["pkg_add", "cbindgen"]) -- -- def ensure_nasm_packages(self): -- # installed via install_browser_packages -- pass -- -- def ensure_node_packages(self): -- self.run_as_root(["pkg_add", "node"]) -diff --git a/python/mozboot/mozboot/opensuse.py b/python/mozboot/mozboot/opensuse.py ---- a/python/mozboot/mozboot/opensuse.py -+++ b/python/mozboot/mozboot/opensuse.py -@@ -2,107 +2,24 @@ - # 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 -- --from mozboot.base import BaseBootstrapper, MERCURIAL_INSTALL_PROMPT -+from mozboot.base import MERCURIAL_INSTALL_PROMPT, BaseBootstrapper - from mozboot.linux_common import LinuxBootstrapper - --import distro --import subprocess -- - - class OpenSUSEBootstrapper(LinuxBootstrapper, BaseBootstrapper): - """openSUSE experimental bootstrapper.""" - -- SYSTEM_PACKAGES = [ -- "libcurl-devel", -- "libpulse-devel", -- "rpmconf", -- "which", -- "unzip", -- ] -- -- BROWSER_PACKAGES = [ -- "alsa-devel", -- "gcc-c++", -- "gtk3-devel", -- "dbus-1-glib-devel", -- "glibc-devel-static", -- "libstdc++-devel", -- "libXt-devel", -- "libproxy-devel", -- "libuuid-devel", -- "clang-devel", -- "patterns-gnome-devel_gnome", -- ] -- -- OPTIONAL_BROWSER_PACKAGES = [ -- "gconf2-devel", # https://bugzilla.mozilla.org/show_bug.cgi?id=1779931 -- ] -- -- BROWSER_GROUP_PACKAGES = ["devel_C_C++", "devel_gnome"] -- -- MOBILE_ANDROID_COMMON_PACKAGES = ["java-1_8_0-openjdk"] -- - def __init__(self, version, dist_id, **kwargs): - print("Using an experimental bootstrapper for openSUSE.") - BaseBootstrapper.__init__(self, **kwargs) - -- def install_system_packages(self): -- self.zypper_install(*self.SYSTEM_PACKAGES) -- -- def install_browser_packages(self, mozconfig_builder, artifact_mode=False): -- # TODO: Figure out what not to install for artifact mode -- packages_to_install = self.BROWSER_PACKAGES.copy() -- -- for package in self.OPTIONAL_BROWSER_PACKAGES: -- if self.zypper_can_install(package): -- packages_to_install.append(package) -- else: -- print( -- f"WARNING! zypper cannot find a package for '{package}' for " -- f"{distro.name(True)}. It will not be automatically installed." -- ) -- -- self.zypper_install(*packages_to_install) -- -- def install_browser_group_packages(self): -- self.ensure_browser_group_packages() -- -- def install_browser_artifact_mode_packages(self, mozconfig_builder): -- self.install_browser_packages(mozconfig_builder, artifact_mode=True) -- -- def ensure_clang_static_analysis_package(self): -- from mozboot import static_analysis -- -- self.install_toolchain_static_analysis(static_analysis.LINUX_CLANG_TIDY) -- -- def ensure_browser_group_packages(self, artifact_mode=False): -- # TODO: Figure out what not to install for artifact mode -- self.zypper_patterninstall(*self.BROWSER_GROUP_PACKAGES) -- -- def install_mobile_android_packages(self, mozconfig_builder, artifact_mode=False): -- # Multi-part process: -- # 1. System packages. -- # 2. Android SDK. Android NDK only if we are not in artifact mode. Android packages. -- -- # 1. This is hard to believe, but the Android SDK binaries are 32-bit -- # and that conflicts with 64-bit Arch installations out of the box. The -- # solution is to add the multilibs repository; unfortunately, this -- # requires manual intervention. -- try: -- self.zypper_install(*self.MOBILE_ANDROID_COMMON_PACKAGES) -- except Exception as e: -- print( -- "Failed to install all packages. The Android developer " -- "toolchain requires 32 bit binaries be enabled" -- ) -- raise e -- -- # 2. Android pieces. -- super().install_mobile_android_packages( -- mozconfig_builder, artifact_mode=artifact_mode -- ) -+ def install_packages(self, packages): -+ ALTERNATIVE_NAMES = { -+ "libxml2": "libxml2-2", -+ } -+ # watchman is not available -+ packages = [ALTERNATIVE_NAMES.get(p, p) for p in packages if p != "watchman"] -+ self.zypper_install(*packages) - - def _update_package_manager(self): - self.zypper_update() -@@ -142,14 +59,5 @@ class OpenSUSEBootstrapper(LinuxBootstra - def zypper_install(self, *packages): - self.zypper("install", *packages) - -- def zypper_can_install(self, package): -- return ( -- subprocess.call(["zypper", "search", package], stdout=subprocess.DEVNULL) -- == 0 -- ) -- - def zypper_update(self, *packages): - self.zypper("update", *packages) -- -- def zypper_patterninstall(self, *packages): -- self.zypper("install", "-t", "pattern", *packages) -diff --git a/python/mozboot/mozboot/osx.py b/python/mozboot/mozboot/osx.py ---- a/python/mozboot/mozboot/osx.py -+++ b/python/mozboot/mozboot/osx.py -@@ -2,8 +2,6 @@ - # 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 platform - import subprocess - import sys -@@ -14,11 +12,10 @@ try: - except ImportError: - from urllib.request import urlopen - --from packaging.version import Version -- -+from mach.util import to_optional_path, to_optional_str - from mozboot.base import BaseBootstrapper - from mozfile import which --from mach.util import to_optional_path, to_optional_str -+from packaging.version import Version - - HOMEBREW_BOOTSTRAP = ( - "https://raw.githubusercontent.com/Homebrew/install/master/install.sh" -@@ -166,21 +163,9 @@ class OSXBootstrapperLight(OSXAndroidBoo - def install_browser_artifact_mode_packages(self, mozconfig_builder): - pass - -- def ensure_node_packages(self): -- pass -- -- def ensure_stylo_packages(self): -- pass -- - def ensure_clang_static_analysis_package(self): - pass - -- def ensure_nasm_packages(self): -- pass -- -- def ensure_minidump_stackwalk_packages(self): -- self.install_toolchain_artifact("minidump-stackwalk") -- - - class OSXBootstrapper(OSXAndroidBootstrapper, BaseBootstrapper): - def __init__(self, version, **kwargs): -@@ -299,26 +284,9 @@ class OSXBootstrapper(OSXAndroidBootstra - def ensure_sccache_packages(self): - from mozboot import sccache - -- self.install_toolchain_artifact("sccache") - self.install_toolchain_artifact(sccache.RUSTC_DIST_TOOLCHAIN, no_unpack=True) - self.install_toolchain_artifact(sccache.CLANG_DIST_TOOLCHAIN, no_unpack=True) - -- def ensure_fix_stacks_packages(self): -- self.install_toolchain_artifact("fix-stacks") -- -- def ensure_stylo_packages(self): -- self.install_toolchain_artifact("clang") -- self.install_toolchain_artifact("cbindgen") -- -- def ensure_nasm_packages(self): -- self.install_toolchain_artifact("nasm") -- -- def ensure_node_packages(self): -- self.install_toolchain_artifact("node") -- -- def ensure_minidump_stackwalk_packages(self): -- self.install_toolchain_artifact("minidump-stackwalk") -- - def install_homebrew(self): - print(BREW_INSTALL) - bootstrap = urlopen(url=HOMEBREW_BOOTSTRAP, timeout=20).read() -diff --git a/python/mozboot/mozboot/rust.py b/python/mozboot/mozboot/rust.py ---- a/python/mozboot/mozboot/rust.py -+++ b/python/mozboot/mozboot/rust.py -@@ -2,16 +2,11 @@ - # 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 platform as platform_mod - import sys - -- - # Base url for pulling the rustup installer. --# Use the no-CNAME host for compatibilty with Python 2.7 --# which doesn't support SNI. --RUSTUP_URL_BASE = "https://static-rust-lang-org.s3.amazonaws.com/rustup" -+RUSTUP_URL_BASE = "https://static.rust-lang.org/rustup" - - # Pull this to get the lastest stable version number. - RUSTUP_MANIFEST = RUSTUP_URL_BASE + "/release-stable.toml" -@@ -123,6 +118,7 @@ def rustup_latest_version(): - - def http_download_and_hash(url): - import hashlib -+ - import requests - - h = hashlib.sha256() -diff --git a/python/mozboot/mozboot/sccache.py b/python/mozboot/mozboot/sccache.py ---- a/python/mozboot/mozboot/sccache.py -+++ b/python/mozboot/mozboot/sccache.py -@@ -2,8 +2,6 @@ - # 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 -- - # sccache-dist currently expects clients to provide toolchains when - # distributing from macOS or Windows, so we download linux binaries capable - # of cross-compiling for these cases. -diff --git a/python/mozboot/mozboot/solus.py b/python/mozboot/mozboot/solus.py ---- a/python/mozboot/mozboot/solus.py -+++ b/python/mozboot/mozboot/solus.py -@@ -2,73 +2,19 @@ - # 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 sys --import subprocess -- - from mozboot.base import BaseBootstrapper - from mozboot.linux_common import LinuxBootstrapper - --# NOTE: This script is intended to be run with a vanilla Python install. We --# have to rely on the standard library instead of Python 2+3 helpers like --# the six module. --if sys.version_info < (3,): -- input = raw_input # noqa -- - - class SolusBootstrapper(LinuxBootstrapper, BaseBootstrapper): - """Solus experimental bootstrapper.""" - -- SYSTEM_PACKAGES = ["unzip", "zip"] -- SYSTEM_COMPONENTS = ["system.devel"] -- -- BROWSER_PACKAGES = [ -- "alsa-lib", -- "dbus", -- "libgtk-3", -- "libevent", -- "libvpx", -- "libxt", -- "libstartup-notification", -- "gst-plugins-base", -- "gst-plugins-good", -- "pulseaudio", -- "xorg-server-xvfb", -- ] -- -- MOBILE_ANDROID_COMMON_PACKAGES = [ -- # See comment about 32 bit binaries and multilib below. -- "ncurses-32bit", -- "readline-32bit", -- "zlib-32bit", -- ] -- - def __init__(self, version, dist_id, **kwargs): - print("Using an experimental bootstrapper for Solus.") - BaseBootstrapper.__init__(self, **kwargs) - -- def install_system_packages(self): -- self.package_install(*self.SYSTEM_PACKAGES) -- self.component_install(*self.SYSTEM_COMPONENTS) -- -- def install_browser_packages(self, mozconfig_builder, artifact_mode=False): -- self.package_install(*self.BROWSER_PACKAGES) -- -- def install_browser_artifact_mode_packages(self, mozconfig_builder): -- self.install_browser_packages(mozconfig_builder, artifact_mode=True) -- -- def install_mobile_android_packages(self, mozconfig_builder, artifact_mode=False): -- try: -- self.package_install(*self.MOBILE_ANDROID_COMMON_PACKAGES) -- except Exception as e: -- print("Failed to install all packages!") -- raise e -- -- # 2. Android pieces. -- super().install_mobile_android_packages( -- mozconfig_builder, artifact_mode=artifact_mode -- ) -+ def install_packages(self, packages): -+ self.package_install(*packages) - - def _update_package_manager(self): - pass -@@ -84,15 +30,3 @@ class SolusBootstrapper(LinuxBootstrappe - command.extend(packages) - - self.run_as_root(command) -- -- def component_install(self, *components): -- command = ["eopkg", "install", "-c"] -- if self.no_interactive: -- command.append("--yes-all") -- -- command.extend(components) -- -- self.run_as_root(command) -- -- def run(self, command, env=None): -- subprocess.check_call(command, stdin=sys.stdin, env=env) -diff --git a/python/mozboot/mozboot/static_analysis.py b/python/mozboot/mozboot/static_analysis.py ---- a/python/mozboot/mozboot/static_analysis.py -+++ b/python/mozboot/mozboot/static_analysis.py -@@ -2,8 +2,6 @@ - # 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 -- - WINDOWS_CLANG_TIDY = "win64-clang-tidy" - LINUX_CLANG_TIDY = "linux64-clang-tidy" - MACOS_CLANG_TIDY = "macosx64-clang-tidy" -diff --git a/python/mozboot/mozboot/util.py b/python/mozboot/mozboot/util.py ---- a/python/mozboot/mozboot/util.py -+++ b/python/mozboot/mozboot/util.py -@@ -2,27 +2,14 @@ - # 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 hashlib - import os --import sys -- - from pathlib import Path -+from urllib.request import urlopen - - from mach.site import PythonVirtualenv - from mach.util import get_state_dir - --# NOTE: This script is intended to be run with a vanilla Python install. We --# have to rely on the standard library instead of Python 2+3 helpers like --# the six module. --if sys.version_info < (3,): -- from urllib2 import urlopen -- -- input = raw_input # noqa --else: -- from urllib.request import urlopen -- - MINIMUM_RUST_VERSION = "1.63.0" - - -diff --git a/python/mozboot/mozboot/void.py b/python/mozboot/mozboot/void.py ---- a/python/mozboot/mozboot/void.py -+++ b/python/mozboot/mozboot/void.py -@@ -2,31 +2,11 @@ - # 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 os --import subprocess --import sys -- - from mozboot.base import BaseBootstrapper - from mozboot.linux_common import LinuxBootstrapper - - - class VoidBootstrapper(LinuxBootstrapper, BaseBootstrapper): -- -- PACKAGES = ["clang", "make", "mercurial", "watchman", "unzip", "zip"] -- -- BROWSER_PACKAGES = [ -- "dbus-devel", -- "dbus-glib-devel", -- "gtk+3-devel", -- "pulseaudio", -- "pulseaudio-devel", -- "libcurl-devel", -- "libxcb-devel", -- "libXt-devel", -- ] -- - def __init__(self, version, dist_id, **kwargs): - BaseBootstrapper.__init__(self, **kwargs) - -@@ -34,18 +14,10 @@ class VoidBootstrapper(LinuxBootstrapper - self.version = version - self.dist_id = dist_id - -- self.packages = self.PACKAGES -- self.browser_packages = self.BROWSER_PACKAGES -- - def run_as_root(self, command): - # VoidLinux doesn't support users sudo'ing most commands by default because of the group - # configuration. -- if os.geteuid() != 0: -- command = ["su", "root", "-c", " ".join(command)] -- -- print("Executing as root:", subprocess.list2cmdline(command)) -- -- subprocess.check_call(command, stdin=sys.stdin) -+ super().run_as_root(command, may_use_sudo=False) - - def xbps_install(self, *packages): - command = ["xbps-install"] -@@ -62,14 +34,8 @@ class VoidBootstrapper(LinuxBootstrapper - - self.run_as_root(command) - -- def install_system_packages(self): -- self.xbps_install(*self.packages) -- -- def install_browser_packages(self, mozconfig_builder, artifact_mode=False): -- self.xbps_install(*self.browser_packages) -- -- def install_browser_artifact_mode_packages(self, mozconfig_builder): -- self.install_browser_packages(mozconfig_builder, artifact_mode=True) -+ def install_packages(self, packages): -+ self.xbps_install(*packages) - - def _update_package_manager(self): - self.xbps_update() -diff --git a/python/mozboot/mozboot/windows.py b/python/mozboot/mozboot/windows.py ---- a/python/mozboot/mozboot/windows.py -+++ b/python/mozboot/mozboot/windows.py -@@ -2,12 +2,10 @@ - # 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 ctypes - import os -+import subprocess - import sys --import subprocess - - from mozboot.base import BaseBootstrapper - from mozfile import which -@@ -50,7 +48,6 @@ class WindowsBootstrapper(BaseBootstrapp - "patchutils", - "diffutils", - "tar", -- "zip", - "unzip", - "mingw-w64-x86_64-toolchain", # TODO: Remove when Mercurial is installable from a wheel. - "mingw-w64-i686-toolchain", -@@ -106,25 +103,6 @@ class WindowsBootstrapper(BaseBootstrapp - - self.install_toolchain_static_analysis(static_analysis.WINDOWS_CLANG_TIDY) - -- def ensure_stylo_packages(self): -- # On-device artifact builds are supported; on-device desktop builds are not. -- if is_aarch64_host(): -- raise Exception( -- "You should not be performing desktop builds on an " -- "AArch64 device. If you want to do artifact builds " -- "instead, please choose the appropriate artifact build " -- "option when beginning bootstrap." -- ) -- -- self.install_toolchain_artifact("clang") -- self.install_toolchain_artifact("cbindgen") -- -- def ensure_nasm_packages(self): -- self.install_toolchain_artifact("nasm") -- -- def ensure_node_packages(self): -- self.install_toolchain_artifact("node") -- - def _update_package_manager(self): - self.pacman_update() - -diff --git a/python/mozbuild/mozbuild/action/langpack_manifest.py b/python/mozbuild/mozbuild/action/langpack_manifest.py ---- a/python/mozbuild/mozbuild/action/langpack_manifest.py -+++ b/python/mozbuild/mozbuild/action/langpack_manifest.py -@@ -4,28 +4,30 @@ - - ### - # This script generates a web manifest JSON file based on the xpi-stage --# directory structure. It extracts the data from defines.inc files from --# the locale directory, chrome registry entries and other information --# necessary to produce the complete manifest file for a language pack. -+# directory structure. It extracts data necessary to produce the complete -+# manifest file for a language pack: -+# from the `langpack-manifest.ftl` file in the locale directory; -+# from chrome registry entries; -+# and from other information in the `xpi-stage` directory. - ### -+ - from __future__ import absolute_import, print_function, unicode_literals - - import argparse --import sys --import os --import json -+import datetime - import io --import datetime --import requests --import mozversioncontrol -+import json -+import logging -+import os -+import sys -+ -+import fluent.syntax.ast as FTL - import mozpack.path as mozpath --from mozpack.chrome.manifest import ( -- Manifest, -- ManifestLocale, -- parse_manifest, --) -+import mozversioncontrol -+import requests -+from fluent.syntax.parser import FluentParser - from mozbuild.configure.util import Version --from mozbuild.preprocessor import Preprocessor -+from mozpack.chrome.manifest import Manifest, ManifestLocale, parse_manifest - - - def write_file(path, content): -@@ -112,53 +114,89 @@ def get_timestamp_for_locale(path): - - - ### --# Parses multiple defines files into a single key-value pair object. -+# Parses an FTL file into a key-value pair object. -+# Does not support attributes, terms, variables, functions or selectors; -+# only messages with values consisting of text elements and literals. - # - # Args: --# paths (str) - a comma separated list of paths to defines files -+# path (str) - a path to an FTL file - # - # Returns: --# (dict) - a key-value dict with defines -+# (dict) - A mapping of message keys to formatted string values. -+# Empty if the file at `path` was not found. - # - # Example: --# res = parse_defines('./toolkit/defines.inc,./browser/defines.inc') -+# res = parse_flat_ftl('./browser/langpack-metadata.ftl') - # res == { --# 'MOZ_LANG_TITLE': 'Polski', --# 'MOZ_LANGPACK_CREATOR': 'Aviary.pl', --# 'MOZ_LANGPACK_CONTRIBUTORS': 'Marek Stepien, Marek Wawoczny' -+# 'langpack-title': 'Polski', -+# 'langpack-creator': 'mozilla.org', -+# 'langpack-contributors': 'Joe Solon, Suzy Solon' - # } - ### --def parse_defines(paths): -- pp = Preprocessor() -- for path in paths: -- pp.do_include(path) -+def parse_flat_ftl(path): -+ parser = FluentParser(with_spans=False) -+ try: -+ with open(path, encoding="utf-8") as file: -+ res = parser.parse(file.read()) -+ except FileNotFoundError as err: -+ logging.warning(err) -+ return {} - -- return pp.context -+ result = {} -+ for entry in res.body: -+ if isinstance(entry, FTL.Message) and isinstance(entry.value, FTL.Pattern): -+ flat = "" -+ for elem in entry.value.elements: -+ if isinstance(elem, FTL.TextElement): -+ flat += elem.value -+ elif isinstance(elem.expression, FTL.Literal): -+ flat += elem.expression.parse()["value"] -+ else: -+ name = type(elem.expression).__name__ -+ raise Exception(f"Unsupported {name} for {entry.id.name} in {path}") -+ result[entry.id.name] = flat.strip() -+ return result - - --### --# Converts the list of contributors from the old RDF based list --# of entries, into a comma separated list. -+## -+# Generates the title and description for the langpack. -+# -+# Uses data stored in a JSON file next to this source, -+# which is expected to have the following format: -+# Record -+# -+# If an English name is given and is different from the native one, -+# it will be included parenthetically in the title. -+# -+# NOTE: If you're updating the native locale names, -+# you should also update the data in -+# toolkit/components/mozintl/mozIntl.sys.mjs. - # - # Args: --# str (str) - a string with an RDF list of contributors entries -+# app (str) - Application name -+# locale (str) - Locale identifier - # - # Returns: --# (str) - a comma separated list of contributors -+# (str, str) - Tuple of title and description - # --# Example: --# s = convert_contributors(' --# Marek Wawoczny --# Marek Stepien --# ') --# s == 'Marek Wawoczny, Marek Stepien' - ### --def convert_contributors(str): -- str = str.replace("", "") -- tokens = str.split("") -- tokens = map(lambda t: t.strip(), tokens) -- tokens = filter(lambda t: t != "", tokens) -- return ", ".join(tokens) -+def get_title_and_description(app, locale): -+ dir = os.path.dirname(__file__) -+ with open(os.path.join(dir, "langpack_localeNames.json"), encoding="utf-8") as nf: -+ names = json.load(nf) -+ if locale in names: -+ data = names[locale] -+ native = data["native"] -+ english = data["english"] if "english" in data else native -+ titleName = f"{native} ({english})" if english != native else native -+ descName = f"{native} ({locale})" -+ else: -+ titleName = locale -+ descName = locale -+ -+ title = f"Language Pack: {titleName}" -+ description = f"{app} Language Pack for {descName}" -+ return title, description - - - ### -@@ -166,26 +204,25 @@ def convert_contributors(str): - # and optionally adding the list of contributors, if provided. - # - # Args: --# author (str) - a string with the name of the author --# contributors (str) - RDF based list of contributors from a chrome manifest -+# ftl (dict) - a key-value mapping of locale-specific strings - # - # Returns: - # (str) - a string to be placed in the author field of the manifest.json - # - # Example: --# s = build_author_string( --# 'Aviary.pl', --# ' --# Marek Wawoczny --# Marek Stepien --# ') --# s == 'Aviary.pl (contributors: Marek Wawoczny, Marek Stepien)' -+# s = get_author({ -+# 'langpack-creator': 'mozilla.org', -+# 'langpack-contributors': 'Joe Solon, Suzy Solon' -+# }) -+# s == 'mozilla.org (contributors: Joe Solon, Suzy Solon)' - ### --def build_author_string(author, contributors): -- contrib = convert_contributors(contributors) -- if len(contrib) == 0: -+def get_author(ftl): -+ author = ftl["langpack-creator"] if "langpack-creator" in ftl else "mozilla.org" -+ contrib = ftl["langpack-contributors"] if "langpack-contributors" in ftl else "" -+ if contrib: -+ return f"{author} (contributors: {contrib})" -+ else: - return author -- return "{0} (contributors: {1})".format(author, contrib) - - - ## -@@ -333,7 +370,7 @@ def get_version_maybe_buildid(version): - # resources are for - # app_name (str) - The name of the application the language - # resources are for --# defines (dict) - A dictionary of defines entries -+# ftl (dict) - A dictionary of locale-specific strings - # chrome_entries (dict) - A dictionary of chrome registry entries - # - # Returns: -@@ -346,7 +383,7 @@ def get_version_maybe_buildid(version): - # '57.0.*', - # 'Firefox', - # '/var/vcs/l10n-central', --# {'MOZ_LANG_TITLE': 'Polski'}, -+# {'langpack-title': 'Polski'}, - # chrome_entries - # ) - # manifest == { -@@ -392,18 +429,13 @@ def create_webmanifest( - app_name, - l10n_basedir, - langpack_eid, -- defines, -+ ftl, - chrome_entries, - ): - locales = list(map(lambda loc: loc.strip(), locstr.split(","))) - main_locale = locales[0] -- -- author = build_author_string( -- defines["MOZ_LANGPACK_CREATOR"], -- defines["MOZ_LANGPACK_CONTRIBUTORS"] -- if "MOZ_LANGPACK_CONTRIBUTORS" in defines -- else "", -- ) -+ title, description = get_title_and_description(app_name, main_locale) -+ author = get_author(ftl) - - manifest = { - "langpack_id": main_locale, -@@ -415,8 +447,8 @@ def create_webmanifest( - "strict_max_version": max_app_ver, - } - }, -- "name": "{0} Language Pack".format(defines["MOZ_LANG_TITLE"]), -- "description": "Language pack for {0} for {1}".format(app_name, main_locale), -+ "name": title, -+ "description": description, - "version": get_version_maybe_buildid(version), - "languages": {}, - "sources": {"browser": {"base_path": "browser/"}}, -@@ -466,10 +498,8 @@ def main(args): - "--langpack-eid", help="Language pack id to use for this locale" - ) - parser.add_argument( -- "--defines", -- default=[], -- nargs="+", -- help="List of defines files to load data from", -+ "--metadata", -+ help="FTL file defining langpack metadata", - ) - parser.add_argument("--input", help="Langpack directory.") - -@@ -480,7 +510,7 @@ def main(args): - os.path.join(args.input, "chrome.manifest"), args.input, chrome_entries - ) - -- defines = parse_defines(args.defines) -+ ftl = parse_flat_ftl(args.metadata) - - # Mangle the app version to set min version (remove patch level) - min_app_version = args.app_version -@@ -502,7 +532,7 @@ def main(args): - args.app_name, - args.l10n_basedir, - args.langpack_eid, -- defines, -+ ftl, - chrome_entries, - ) - write_file(os.path.join(args.input, "manifest.json"), res) -diff --git a/python/mozbuild/mozbuild/action/make_dmg.py b/python/mozbuild/mozbuild/action/make_dmg.py ---- a/python/mozbuild/mozbuild/action/make_dmg.py -+++ b/python/mozbuild/mozbuild/action/make_dmg.py -@@ -2,13 +2,16 @@ - # 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 -+import argparse -+import platform -+import sys -+from pathlib import Path - -+from mozbuild.bootstrap import bootstrap_toolchain - from mozbuild.repackaging.application_ini import get_application_ini_value - from mozpack import dmg - --import argparse --import sys -+is_linux = platform.system() == "Linux" - - - def main(args): -@@ -41,7 +44,20 @@ def main(args): - options.inpath, "App", "CodeName", fallback="Name" - ) - -- dmg.create_dmg(options.inpath, options.dmgfile, volume_name, extra_files) -+ # Resolve required tools -+ dmg_tool = bootstrap_toolchain("dmg/dmg") -+ hfs_tool = bootstrap_toolchain("dmg/hfsplus") -+ mkfshfs_tool = bootstrap_toolchain("hfsplus/newfs_hfs") -+ -+ dmg.create_dmg( -+ source_directory=Path(options.inpath), -+ output_dmg=Path(options.dmgfile), -+ volume_name=volume_name, -+ extra_files=extra_files, -+ dmg_tool=dmg_tool, -+ hfs_tool=hfs_tool, -+ mkfshfs_tool=mkfshfs_tool, -+ ) - - return 0 - -diff --git a/python/mozbuild/mozbuild/action/unpack_dmg.py b/python/mozbuild/mozbuild/action/unpack_dmg.py ---- a/python/mozbuild/mozbuild/action/unpack_dmg.py -+++ b/python/mozbuild/mozbuild/action/unpack_dmg.py -@@ -2,12 +2,18 @@ - # 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 -+import argparse -+import sys -+from pathlib import Path - -+from mozbuild.bootstrap import bootstrap_toolchain - from mozpack import dmg - --import argparse --import sys -+ -+def _path_or_none(input: str): -+ if not input: -+ return None -+ return Path(input) - - - def main(args): -@@ -26,12 +32,17 @@ def main(args): - - options = parser.parse_args(args) - -+ dmg_tool = bootstrap_toolchain("dmg/dmg") -+ hfs_tool = bootstrap_toolchain("dmg/hfsplus") -+ - dmg.extract_dmg( -- dmgfile=options.dmgfile, -- output=options.outpath, -- dsstore=options.dsstore, -- background=options.background, -- icon=options.icon, -+ dmgfile=Path(options.dmgfile), -+ output=Path(options.outpath), -+ dmg_tool=Path(dmg_tool), -+ hfs_tool=Path(hfs_tool), -+ dsstore=_path_or_none(options.dsstore), -+ background=_path_or_none(options.background), -+ icon=_path_or_none(options.icon), - ) - return 0 - -diff --git a/python/mozbuild/mozbuild/artifacts.py b/python/mozbuild/mozbuild/artifacts.py ---- a/python/mozbuild/mozbuild/artifacts.py -+++ b/python/mozbuild/mozbuild/artifacts.py -@@ -129,7 +129,6 @@ class ArtifactJob(object): - ("bin/http3server", ("bin", "bin")), - ("bin/plugins/gmp-*/*/*", ("bin/plugins", "bin")), - ("bin/plugins/*", ("bin/plugins", "plugins")), -- ("bin/components/*.xpt", ("bin/components", "bin/components")), - } - - # We can tell our input is a test archive by this suffix, which happens to -@@ -137,6 +136,32 @@ class ArtifactJob(object): - _test_zip_archive_suffix = ".common.tests.zip" - _test_tar_archive_suffix = ".common.tests.tar.gz" - -+ # A map of extra archives to fetch and unpack. An extra archive might -+ # include optional build output to incorporate into the local artifact -+ # build. Test archives and crashreporter symbols could be extra archives -+ # but they require special handling; this mechanism is generic and intended -+ # only for the simplest cases. -+ # -+ # Each suffix key matches a candidate archive (i.e., an artifact produced by -+ # an upstream build). Each value is itself a dictionary that must contain -+ # the following keys: -+ # -+ # - `description`: a purely informational string description. -+ # - `src_prefix`: entry names in the archive with leading `src_prefix` will -+ # have the prefix stripped. -+ # - `dest_prefix`: entry names in the archive will have `dest_prefix` -+ # prepended. -+ # -+ # The entries in the archive, suitably renamed, will be extracted into `dist`. -+ _extra_archives = { -+ ".xpt_artifacts.zip": { -+ "description": "XPT Artifacts", -+ "src_prefix": "", -+ "dest_prefix": "xpt_artifacts", -+ }, -+ } -+ _extra_archive_suffixes = tuple(sorted(_extra_archives.keys())) -+ - def __init__( - self, - log=None, -@@ -190,6 +215,8 @@ class ArtifactJob(object): - self._symbols_archive_suffix - ): - yield name -+ elif name.endswith(ArtifactJob._extra_archive_suffixes): -+ yield name - else: - self.log( - logging.DEBUG, -@@ -222,6 +249,8 @@ class ArtifactJob(object): - self._symbols_archive_suffix - ): - return self.process_symbols_archive(filename, processed_filename) -+ if filename.endswith(ArtifactJob._extra_archive_suffixes): -+ return self.process_extra_archive(filename, processed_filename) - return self.process_package_artifact(filename, processed_filename) - - def process_package_artifact(self, filename, processed_filename): -@@ -373,6 +402,43 @@ class ArtifactJob(object): - ) - writer.add(destpath.encode("utf-8"), entry) - -+ def process_extra_archive(self, filename, processed_filename): -+ for suffix, extra_archive in ArtifactJob._extra_archives.items(): -+ if filename.endswith(suffix): -+ self.log( -+ logging.INFO, -+ "artifact", -+ {"filename": filename, "description": extra_archive["description"]}, -+ '"{filename}" is a recognized extra archive ({description})', -+ ) -+ break -+ else: -+ raise ValueError('"{}" is not a recognized extra archive!'.format(filename)) -+ -+ src_prefix = extra_archive["src_prefix"] -+ dest_prefix = extra_archive["dest_prefix"] -+ -+ with self.get_writer(file=processed_filename, compress_level=5) as writer: -+ for filename, entry in self.iter_artifact_archive(filename): -+ if not filename.startswith(src_prefix): -+ self.log( -+ logging.DEBUG, -+ "artifact", -+ {"filename": filename, "src_prefix": src_prefix}, -+ "Skipping extra archive item {filename} " -+ "that does not start with {src_prefix}", -+ ) -+ continue -+ destpath = mozpath.relpath(filename, src_prefix) -+ destpath = mozpath.join(dest_prefix, destpath) -+ self.log( -+ logging.INFO, -+ "artifact", -+ {"destpath": destpath}, -+ "Adding {destpath} to processed archive", -+ ) -+ writer.add(destpath.encode("utf-8"), entry) -+ - def iter_artifact_archive(self, filename): - if filename.endswith(".zip"): - reader = JarReader(filename) -@@ -1392,7 +1458,15 @@ https://firefox-source-docs.mozilla.org/ - {"processed_filename": processed_filename}, - "Writing processed {processed_filename}", - ) -- self._artifact_job.process_artifact(filename, processed_filename) -+ try: -+ self._artifact_job.process_artifact(filename, processed_filename) -+ except Exception as e: -+ # Delete the partial output of failed processing. -+ try: -+ os.remove(processed_filename) -+ except FileNotFoundError: -+ pass -+ raise e - - self._artifact_cache._persist_limit.register_file(processed_filename) - -diff --git a/python/mozbuild/mozbuild/backend/base.py b/python/mozbuild/mozbuild/backend/base.py ---- a/python/mozbuild/mozbuild/backend/base.py -+++ b/python/mozbuild/mozbuild/backend/base.py -@@ -215,8 +215,8 @@ class BuildBackend(LoggingMixin): - invalidate the XUL cache (which includes some JS) at application - startup-time. The application checks for .purgecaches in the - application directory, which varies according to -- --enable-application. There's a further wrinkle on macOS, where -- the real application directory is part of a Cocoa bundle -+ --enable-application/--enable-project. There's a further wrinkle on -+ macOS, where the real application directory is part of a Cocoa bundle - produced from the regular application directory by the build - system. In this case, we write to both locations, since the - build system recreates the Cocoa bundle from the contents of the -diff --git a/python/mozbuild/mozbuild/backend/recursivemake.py b/python/mozbuild/mozbuild/backend/recursivemake.py ---- a/python/mozbuild/mozbuild/backend/recursivemake.py -+++ b/python/mozbuild/mozbuild/backend/recursivemake.py -@@ -8,26 +8,24 @@ import io - import logging - import os - import re --import six -- - from collections import defaultdict, namedtuple - from itertools import chain - from operator import itemgetter --from six import StringIO - --from mozpack.manifests import InstallManifest - import mozpack.path as mozpath -- -+import six - from mozbuild import frontend - from mozbuild.frontend.context import ( - AbsolutePath, -+ ObjDirPath, - Path, - RenamedSourcePath, - SourcePath, -- ObjDirPath, - ) --from .common import CommonBackend --from .make import MakeBackend -+from mozbuild.shellutil import quote as shell_quote -+from mozpack.manifests import InstallManifest -+from six import StringIO -+ - from ..frontend.data import ( - BaseLibrary, - BaseProgram, -@@ -46,6 +44,7 @@ from ..frontend.data import ( - HostLibrary, - HostProgram, - HostRustProgram, -+ HostSharedLibrary, - HostSimpleProgram, - HostSources, - InstallationTarget, -@@ -58,7 +57,6 @@ from ..frontend.data import ( - ObjdirPreprocessedFiles, - PerSourceFlag, - Program, -- HostSharedLibrary, - RustProgram, - RustTests, - SandboxedWasmLibrary, -@@ -71,9 +69,10 @@ from ..frontend.data import ( - WasmSources, - XPIDLModule, - ) --from ..util import ensureParentDir, FileAvoidWrite, OrderedDefaultDict, pairwise - from ..makeutil import Makefile --from mozbuild.shellutil import quote as shell_quote -+from ..util import FileAvoidWrite, OrderedDefaultDict, ensureParentDir, pairwise -+from .common import CommonBackend -+from .make import MakeBackend - - # To protect against accidentally adding logic to Makefiles that belong in moz.build, - # we check if moz.build-like variables are defined in Makefiles. If they are, we throw -@@ -367,7 +366,6 @@ class RecursiveMakeBackend(MakeBackend): - self._traversal = RecursiveMakeTraversal() - self._compile_graph = OrderedDefaultDict(set) - self._rust_targets = set() -- self._rust_lib_targets = set() - self._gkrust_target = None - self._pre_compile = set() - -@@ -611,7 +609,6 @@ class RecursiveMakeBackend(MakeBackend): - build_target = self._build_target_for_obj(obj) - self._compile_graph[build_target] - self._rust_targets.add(build_target) -- self._rust_lib_targets.add(build_target) - if obj.is_gkrust: - self._gkrust_target = build_target - -@@ -774,7 +771,6 @@ class RecursiveMakeBackend(MakeBackend): - # on other directories in the tree, so putting them first here will - # start them earlier in the build. - rust_roots = sorted(r for r in roots if r in self._rust_targets) -- rust_libs = sorted(r for r in roots if r in self._rust_lib_targets) - if category == "compile" and rust_roots: - rust_rule = root_deps_mk.create_rule(["recurse_rust"]) - rust_rule.add_dependencies(rust_roots) -@@ -786,7 +782,7 @@ class RecursiveMakeBackend(MakeBackend): - # builds. - for prior_target, target in pairwise( - sorted( -- [t for t in rust_libs], key=lambda t: t != self._gkrust_target -+ [t for t in rust_roots], key=lambda t: t != self._gkrust_target - ) - ): - r = root_deps_mk.create_rule([target]) -@@ -1201,8 +1197,9 @@ class RecursiveMakeBackend(MakeBackend): - self, obj, backend_file, target_variable, target_cargo_variable - ): - backend_file.write_once("CARGO_FILE := %s\n" % obj.cargo_file) -- backend_file.write_once("CARGO_TARGET_DIR := .\n") -- backend_file.write("%s += %s\n" % (target_variable, obj.location)) -+ target_dir = mozpath.normpath(backend_file.environment.topobjdir) -+ backend_file.write_once("CARGO_TARGET_DIR := %s\n" % target_dir) -+ backend_file.write("%s += $(DEPTH)/%s\n" % (target_variable, obj.location)) - backend_file.write("%s += %s\n" % (target_cargo_variable, obj.name)) - - def _process_rust_program(self, obj, backend_file): -diff --git a/python/mozbuild/mozbuild/bootstrap.py b/python/mozbuild/mozbuild/bootstrap.py ---- a/python/mozbuild/mozbuild/bootstrap.py -+++ b/python/mozbuild/mozbuild/bootstrap.py -@@ -2,16 +2,16 @@ - # 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 mozbuild.configure import ConfigureSandbox --from pathlib import Path - import functools - import io - import logging - import os -+from pathlib import Path -+ -+from mozbuild.configure import ConfigureSandbox - - --@functools.lru_cache(maxsize=None) --def _bootstrap_sandbox(): -+def _raw_sandbox(extra_args=[]): - # Here, we don't want an existing mozconfig to interfere with what we - # do, neither do we want the default for --enable-bootstrap (which is not - # always on) to prevent this from doing something. -@@ -22,9 +22,17 @@ def _bootstrap_sandbox(): - logger.propagate = False - sandbox = ConfigureSandbox( - {}, -- argv=["configure", "--enable-bootstrap", f"MOZCONFIG={os.devnull}"], -+ argv=["configure"] -+ + extra_args -+ + ["--enable-bootstrap", f"MOZCONFIG={os.devnull}"], - logger=logger, - ) -+ return sandbox -+ -+ -+@functools.lru_cache(maxsize=None) -+def _bootstrap_sandbox(): -+ sandbox = _raw_sandbox() - moz_configure = ( - Path(__file__).parent.parent.parent.parent / "build" / "moz.configure" - ) -@@ -42,3 +50,12 @@ def bootstrap_toolchain(toolchain_job): - # Returns the path to the toolchain. - sandbox = _bootstrap_sandbox() - return sandbox._value_for(sandbox["bootstrap_path"](toolchain_job)) -+ -+ -+def bootstrap_all_toolchains_for(configure_args=[]): -+ sandbox = _raw_sandbox(configure_args) -+ moz_configure = Path(__file__).parent.parent.parent.parent / "moz.configure" -+ sandbox.include_file(str(moz_configure)) -+ for depend in sandbox._depends.values(): -+ if depend.name == "bootstrap_path": -+ depend.result() -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 -@@ -765,11 +765,11 @@ class StaticAnalysisFooter(Footer): - processed = monitor.num_files_processed - percent = "(%.2f%%)" % (processed * 100.0 / total) - parts = [ -- ("dim", "Processing"), -+ ("bright_black", "Processing"), - ("yellow", str(processed)), -- ("dim", "of"), -+ ("bright_black", "of"), - ("yellow", str(total)), -- ("dim", "files"), -+ ("bright_black", "files"), - ("green", percent), - ] - if monitor.current_file: -diff --git a/python/mozbuild/mozbuild/frontend/gyp_reader.py b/python/mozbuild/mozbuild/frontend/gyp_reader.py ---- a/python/mozbuild/mozbuild/frontend/gyp_reader.py -+++ b/python/mozbuild/mozbuild/frontend/gyp_reader.py -@@ -4,18 +4,20 @@ - - from __future__ import absolute_import, print_function, unicode_literals - -+import os -+import sys -+import time -+ - import gyp - import gyp.msvs_emulation -+import mozpack.path as mozpath - import six --import sys --import os --import time -+from mozbuild import shellutil -+from mozbuild.util import expand_variables -+from mozpack.files import FileFinder - --import mozpack.path as mozpath --from mozpack.files import FileFinder -+from .context import VARIABLES, ObjDirPath, SourcePath, TemplateContext - from .sandbox import alphabetical_sorted --from .context import ObjDirPath, SourcePath, TemplateContext, VARIABLES --from mozbuild.util import expand_variables - - # Define this module as gyp.generator.mozbuild so that gyp can use it - # as a generator under the name "mozbuild". -@@ -443,6 +445,12 @@ class GypProcessor(object): - "build_files": [path], - "root_targets": None, - } -+ # The NSS gyp configuration uses CC and CFLAGS to determine the -+ # floating-point ABI on arm. -+ os.environ.update( -+ CC=config.substs["CC"], -+ CFLAGS=shellutil.quote(*config.substs["CC_BASE_FLAGS"]), -+ ) - - if gyp_dir_attrs.no_chromium: - includes = [] -diff --git a/python/mozbuild/mozbuild/generated_sources.py b/python/mozbuild/mozbuild/generated_sources.py ---- a/python/mozbuild/mozbuild/generated_sources.py -+++ b/python/mozbuild/mozbuild/generated_sources.py -@@ -8,8 +8,10 @@ import hashlib - import json - import os - -+import mozpack.path as mozpath - from mozpack.files import FileFinder --import mozpack.path as mozpath -+ -+GENERATED_SOURCE_EXTS = (".rs", ".c", ".h", ".cc", ".cpp") - - - def sha512_digest(data): -@@ -56,7 +58,7 @@ def get_generated_sources(): - base = mozpath.join(buildconfig.substs["RUST_TARGET"], rust_build_kind, "build") - finder = FileFinder(mozpath.join(buildconfig.topobjdir, base)) - for p, f in finder: -- if p.endswith((".rs", ".c", ".h", ".cc", ".cpp")): -+ if p.endswith(GENERATED_SOURCE_EXTS): - yield mozpath.join(base, p), f - - -diff --git a/python/mozbuild/mozbuild/mach_commands.py b/python/mozbuild/mozbuild/mach_commands.py ---- a/python/mozbuild/mozbuild/mach_commands.py -+++ b/python/mozbuild/mozbuild/mach_commands.py -@@ -5,6 +5,7 @@ - from __future__ import absolute_import, print_function, unicode_literals - - import argparse -+import errno - import itertools - import json - import logging -@@ -17,26 +18,20 @@ import subprocess - import sys - import tempfile - import time --import errno -+from pathlib import Path - - import mozbuild.settings # noqa need @SettingsProvider hook to execute - import mozpack.path as mozpath -- --from pathlib import Path - from mach.decorators import ( -+ Command, - CommandArgument, - CommandArgumentGroup, -- Command, - SettingsProvider, - SubCommand, - ) -- --from mozbuild.base import ( -- BinaryNotFoundException, -- BuildEnvironmentNotFoundException, -- MachCommandConditions as conditions, -- MozbuildObject, --) -+from mozbuild.base import BinaryNotFoundException, BuildEnvironmentNotFoundException -+from mozbuild.base import MachCommandConditions as conditions -+from mozbuild.base import MozbuildObject - from mozbuild.util import MOZBUILD_METRICS_PATH - - here = os.path.abspath(os.path.dirname(__file__)) -@@ -217,6 +212,114 @@ def check( - - @SubCommand( - "cargo", -+ "udeps", -+ description="Run `cargo udeps` on a given crate. Defaults to gkrust.", -+ metrics_path=MOZBUILD_METRICS_PATH, -+) -+@CommandArgument( -+ "--all-crates", -+ action="store_true", -+ help="Check all of the crates in the tree.", -+) -+@CommandArgument("crates", default=None, nargs="*", help="The crate name(s) to check.") -+@CommandArgument( -+ "--jobs", -+ "-j", -+ default="0", -+ nargs="?", -+ metavar="jobs", -+ type=int, -+ help="Run the tests in parallel using multiple processes.", -+) -+@CommandArgument("-v", "--verbose", action="store_true", help="Verbose output.") -+@CommandArgument( -+ "--message-format-json", -+ action="store_true", -+ help="Emit error messages as JSON.", -+) -+@CommandArgument( -+ "--expect-unused", -+ action="store_true", -+ help="Do not return an error exit code if udeps detects unused dependencies.", -+) -+def udeps( -+ command_context, -+ all_crates=None, -+ crates=None, -+ jobs=0, -+ verbose=False, -+ message_format_json=False, -+ expect_unused=False, -+): -+ from mozbuild.controller.building import BuildDriver -+ -+ command_context.log_manager.enable_all_structured_loggers() -+ -+ try: -+ command_context.config_environment -+ except BuildEnvironmentNotFoundException: -+ build = command_context._spawn(BuildDriver) -+ ret = build.build( -+ command_context.metrics, -+ what=["pre-export", "export"], -+ jobs=jobs, -+ verbose=verbose, -+ mach_context=command_context._mach_context, -+ ) -+ if ret != 0: -+ return ret -+ # XXX duplication with `mach vendor rust` -+ crates_and_roots = { -+ "gkrust": "toolkit/library/rust", -+ "gkrust-gtest": "toolkit/library/gtest/rust", -+ "geckodriver": "testing/geckodriver", -+ } -+ -+ if all_crates: -+ crates = crates_and_roots.keys() -+ elif not crates: -+ crates = ["gkrust"] -+ -+ for crate in crates: -+ root = crates_and_roots.get(crate, None) -+ if not root: -+ print( -+ "Cannot locate crate %s. Please check your spelling or " -+ "add the crate information to the list." % crate -+ ) -+ return 1 -+ -+ udeps_targets = [ -+ "force-cargo-library-udeps", -+ "force-cargo-host-library-udeps", -+ "force-cargo-program-udeps", -+ "force-cargo-host-program-udeps", -+ ] -+ -+ append_env = {} -+ if message_format_json: -+ append_env["USE_CARGO_JSON_MESSAGE_FORMAT"] = "1" -+ if expect_unused: -+ append_env["CARGO_UDEPS_EXPECT_ERR"] = "1" -+ -+ ret = command_context._run_make( -+ srcdir=False, -+ directory=root, -+ ensure_exit_code=0, -+ silent=not verbose, -+ print_directory=False, -+ target=udeps_targets, -+ num_jobs=jobs, -+ append_env=append_env, -+ ) -+ if ret != 0: -+ return ret -+ -+ return 0 -+ -+ -+@SubCommand( -+ "cargo", - "vet", - description="Run `cargo vet`.", - ) -@@ -278,6 +381,209 @@ def cargo_vet(command_context, arguments - return res if stdout else res.returncode - - -+@SubCommand( -+ "cargo", -+ "clippy", -+ description="Run `cargo clippy` on a given crate. Defaults to gkrust.", -+ metrics_path=MOZBUILD_METRICS_PATH, -+) -+@CommandArgument( -+ "--all-crates", -+ default=None, -+ action="store_true", -+ help="Check all of the crates in the tree.", -+) -+@CommandArgument("crates", default=None, nargs="*", help="The crate name(s) to check.") -+@CommandArgument( -+ "--jobs", -+ "-j", -+ default="0", -+ nargs="?", -+ metavar="jobs", -+ type=int, -+ help="Run the tests in parallel using multiple processes.", -+) -+@CommandArgument("-v", "--verbose", action="store_true", help="Verbose output.") -+@CommandArgument( -+ "--message-format-json", -+ action="store_true", -+ help="Emit error messages as JSON.", -+) -+def clippy( -+ command_context, -+ all_crates=None, -+ crates=None, -+ jobs=0, -+ verbose=False, -+ message_format_json=False, -+): -+ from mozbuild.controller.building import BuildDriver -+ -+ command_context.log_manager.enable_all_structured_loggers() -+ -+ try: -+ command_context.config_environment -+ except BuildEnvironmentNotFoundException: -+ build = command_context._spawn(BuildDriver) -+ ret = build.build( -+ command_context.metrics, -+ what=["pre-export", "export"], -+ jobs=jobs, -+ verbose=verbose, -+ mach_context=command_context._mach_context, -+ ) -+ if ret != 0: -+ return ret -+ # XXX duplication with `mach vendor rust` -+ crates_and_roots = { -+ "gkrust": "toolkit/library/rust", -+ "gkrust-gtest": "toolkit/library/gtest/rust", -+ "geckodriver": "testing/geckodriver", -+ } -+ -+ if all_crates: -+ crates = crates_and_roots.keys() -+ elif crates is None or crates == []: -+ crates = ["gkrust"] -+ -+ final_ret = 0 -+ -+ for crate in crates: -+ root = crates_and_roots.get(crate, None) -+ if not root: -+ print( -+ "Cannot locate crate %s. Please check your spelling or " -+ "add the crate information to the list." % crate -+ ) -+ return 1 -+ -+ check_targets = [ -+ "force-cargo-library-clippy", -+ "force-cargo-host-library-clippy", -+ "force-cargo-program-clippy", -+ "force-cargo-host-program-clippy", -+ ] -+ -+ append_env = {} -+ if message_format_json: -+ append_env["USE_CARGO_JSON_MESSAGE_FORMAT"] = "1" -+ -+ ret = 2 -+ -+ try: -+ ret = command_context._run_make( -+ srcdir=False, -+ directory=root, -+ ensure_exit_code=0, -+ silent=not verbose, -+ print_directory=False, -+ target=check_targets, -+ num_jobs=jobs, -+ append_env=append_env, -+ ) -+ except Exception as e: -+ print("%s" % e) -+ if ret != 0: -+ final_ret = ret -+ -+ return final_ret -+ -+ -+@SubCommand( -+ "cargo", -+ "audit", -+ description="Run `cargo audit` on a given crate. Defaults to gkrust.", -+) -+@CommandArgument( -+ "--all-crates", -+ action="store_true", -+ help="Run `cargo audit` on all the crates in the tree.", -+) -+@CommandArgument( -+ "crates", -+ default=None, -+ nargs="*", -+ help="The crate name(s) to run `cargo audit` on.", -+) -+@CommandArgument( -+ "--jobs", -+ "-j", -+ default="0", -+ nargs="?", -+ metavar="jobs", -+ type=int, -+ help="Run `audit` in parallel using multiple processes.", -+) -+@CommandArgument("-v", "--verbose", action="store_true", help="Verbose output.") -+@CommandArgument( -+ "--message-format-json", -+ action="store_true", -+ help="Emit error messages as JSON.", -+) -+def audit( -+ command_context, -+ all_crates=None, -+ crates=None, -+ jobs=0, -+ verbose=False, -+ message_format_json=False, -+): -+ # XXX duplication with `mach vendor rust` -+ crates_and_roots = { -+ "gkrust": "toolkit/library/rust", -+ "gkrust-gtest": "toolkit/library/gtest/rust", -+ "geckodriver": "testing/geckodriver", -+ } -+ -+ if all_crates: -+ crates = crates_and_roots.keys() -+ elif not crates: -+ crates = ["gkrust"] -+ -+ final_ret = 0 -+ -+ for crate in crates: -+ root = crates_and_roots.get(crate, None) -+ if not root: -+ print( -+ "Cannot locate crate %s. Please check your spelling or " -+ "add the crate information to the list." % crate -+ ) -+ return 1 -+ -+ check_targets = [ -+ "force-cargo-library-audit", -+ "force-cargo-host-library-audit", -+ "force-cargo-program-audit", -+ "force-cargo-host-program-audit", -+ ] -+ -+ append_env = {} -+ if message_format_json: -+ append_env["USE_CARGO_JSON_MESSAGE_FORMAT"] = "1" -+ -+ ret = 2 -+ -+ try: -+ ret = command_context._run_make( -+ srcdir=False, -+ directory=root, -+ ensure_exit_code=0, -+ silent=not verbose, -+ print_directory=False, -+ target=check_targets -+ + ["cargo_build_flags=-f %s/Cargo.lock" % command_context.topsrcdir], -+ num_jobs=jobs, -+ append_env=append_env, -+ ) -+ except Exception as e: -+ print("%s" % e) -+ if ret != 0: -+ final_ret = ret -+ -+ return final_ret -+ -+ - @Command( - "doctor", - category="devenv", -@@ -891,8 +1197,9 @@ def gtest( - pass_thru=True, - ) - -+ import functools -+ - from mozprocess import ProcessHandlerMixin -- import functools - - def handle_line(job_id, line): - # Prepend the jobId -@@ -946,7 +1253,7 @@ def android_gtest( - setup_logging("mach-gtest", {}, {default_format: sys.stdout}, format_args) - - # ensure that a device is available and test app is installed -- from mozrunner.devices.android_device import verify_android_device, get_adb_path -+ from mozrunner.devices.android_device import get_adb_path, verify_android_device - - verify_android_device( - command_context, install=install, app=package, device_serial=device_serial -@@ -1046,8 +1353,8 @@ def install(command_context, **kwargs): - """Install a package.""" - if conditions.is_android(command_context): - from mozrunner.devices.android_device import ( -+ InstallIntent, - verify_android_device, -- InstallIntent, - ) - - ret = ( -@@ -1386,9 +1693,9 @@ def _run_android( - use_existing_process=False, - ): - from mozrunner.devices.android_device import ( -- verify_android_device, -+ InstallIntent, - _get_device, -- InstallIntent, -+ verify_android_device, - ) - from six.moves import shlex_quote - -@@ -1782,7 +2089,7 @@ def _run_desktop( - stacks, - show_dump_stats, - ): -- from mozprofile import Profile, Preferences -+ from mozprofile import Preferences, Profile - - try: - if packaged: -@@ -2106,7 +2413,34 @@ def repackage(command_context): - scriptworkers in order to bundle things up into shippable formats, such as a - .dmg on OSX or an installer exe on Windows. - """ -- print("Usage: ./mach repackage [dmg|installer|mar] [args...]") -+ print("Usage: ./mach repackage [dmg|pkg|installer|mar] [args...]") -+ -+ -+@SubCommand( -+ "repackage", "deb", description="Repackage a tar file into a .deb for Linux" -+) -+@CommandArgument("--input", "-i", type=str, required=True, help="Input filename") -+@CommandArgument("--output", "-o", type=str, required=True, help="Output filename") -+@CommandArgument("--arch", type=str, required=True, help="One of ['x86', 'x86_64']") -+@CommandArgument( -+ "--templates", -+ type=str, -+ required=True, -+ help="Location of the templates used to generate the debian/ directory files", -+) -+def repackage_deb(command_context, input, output, arch, templates): -+ if not os.path.exists(input): -+ print("Input file does not exist: %s" % input) -+ return 1 -+ -+ template_dir = os.path.join( -+ command_context.topsrcdir, -+ templates, -+ ) -+ -+ from mozbuild.repackaging.deb import repackage_deb -+ -+ repackage_deb(input, output, template_dir, arch) - - - @SubCommand("repackage", "dmg", description="Repackage a tar file into a .dmg for OSX") -@@ -2117,18 +2451,24 @@ def repackage_dmg(command_context, input - print("Input file does not exist: %s" % input) - return 1 - -- if not os.path.exists(os.path.join(command_context.topobjdir, "config.status")): -- print( -- "config.status not found. Please run |mach configure| " -- "prior to |mach repackage|." -- ) -- return 1 -- - from mozbuild.repackaging.dmg import repackage_dmg - - repackage_dmg(input, output) - - -+@SubCommand("repackage", "pkg", description="Repackage a tar file into a .pkg for OSX") -+@CommandArgument("--input", "-i", type=str, required=True, help="Input filename") -+@CommandArgument("--output", "-o", type=str, required=True, help="Output filename") -+def repackage_pkg(command_context, input, output): -+ if not os.path.exists(input): -+ print("Input file does not exist: %s" % input) -+ return 1 -+ -+ from mozbuild.repackaging.pkg import repackage_pkg -+ -+ repackage_pkg(input, output) -+ -+ - @SubCommand( - "repackage", "installer", description="Repackage into a Windows installer exe" - ) -diff --git a/python/mozbuild/mozbuild/repackaging/dmg.py b/python/mozbuild/mozbuild/repackaging/dmg.py ---- a/python/mozbuild/mozbuild/repackaging/dmg.py -+++ b/python/mozbuild/mozbuild/repackaging/dmg.py -@@ -2,16 +2,13 @@ - # 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 -+import tarfile -+from pathlib import Path - --import errno --import os --import tempfile --import tarfile --import shutil --import mozpack.path as mozpath -+import mozfile -+from mozbuild.bootstrap import bootstrap_toolchain -+from mozbuild.repackaging.application_ini import get_application_ini_value - from mozpack.dmg import create_dmg --from mozbuild.repackaging.application_ini import get_application_ini_value - - - def repackage_dmg(infile, output): -@@ -19,27 +16,41 @@ def repackage_dmg(infile, output): - if not tarfile.is_tarfile(infile): - raise Exception("Input file %s is not a valid tarfile." % infile) - -- tmpdir = tempfile.mkdtemp() -- try: -+ # Resolve required tools -+ dmg_tool = bootstrap_toolchain("dmg/dmg") -+ if not dmg_tool: -+ raise Exception("DMG tool not found") -+ hfs_tool = bootstrap_toolchain("dmg/hfsplus") -+ if not hfs_tool: -+ raise Exception("HFS tool not found") -+ mkfshfs_tool = bootstrap_toolchain("hfsplus/newfs_hfs") -+ if not mkfshfs_tool: -+ raise Exception("MKFSHFS tool not found") -+ -+ with mozfile.TemporaryDirectory() as tmp: -+ tmpdir = Path(tmp) - with tarfile.open(infile) as tar: - tar.extractall(path=tmpdir) - - # Remove the /Applications symlink. If we don't, an rsync command in - # create_dmg() will break, and create_dmg() re-creates the symlink anyway. -- try: -- os.remove(mozpath.join(tmpdir, " ")) -- except OSError as e: -- if e.errno != errno.ENOENT: -- raise -+ symlink = tmpdir / " " -+ if symlink.is_file(): -+ symlink.unlink() - - volume_name = get_application_ini_value( -- tmpdir, "App", "CodeName", fallback="Name" -+ str(tmpdir), "App", "CodeName", fallback="Name" - ) - - # The extra_files argument is empty [] because they are already a part - # of the original dmg produced by the build, and they remain in the - # tarball generated by the signing task. -- create_dmg(tmpdir, output, volume_name, []) -- -- finally: -- shutil.rmtree(tmpdir) -+ create_dmg( -+ source_directory=tmpdir, -+ output_dmg=Path(output), -+ volume_name=volume_name, -+ extra_files=[], -+ dmg_tool=Path(dmg_tool), -+ hfs_tool=Path(hfs_tool), -+ mkfshfs_tool=Path(mkfshfs_tool), -+ ) -diff --git a/python/mozbuild/mozbuild/test/action/test_langpack_manifest.py b/python/mozbuild/mozbuild/test/action/test_langpack_manifest.py ---- a/python/mozbuild/mozbuild/test/action/test_langpack_manifest.py -+++ b/python/mozbuild/mozbuild/test/action/test_langpack_manifest.py -@@ -5,14 +5,13 @@ - - from __future__ import absolute_import, print_function - --import unittest - import json - import os -- --import mozunit -+import tempfile -+import unittest - - import mozbuild.action.langpack_manifest as langpack_manifest --from mozbuild.preprocessor import Context -+import mozunit - - - class TestGenerateManifest(unittest.TestCase): -@@ -20,16 +19,30 @@ class TestGenerateManifest(unittest.Test - Unit tests for langpack_manifest.py. - """ - -+ def test_parse_flat_ftl(self): -+ src = """ -+langpack-creator = bar {"bar"} -+langpack-contributors = { "" } -+""" -+ tmp = tempfile.NamedTemporaryFile(mode="wt", suffix=".ftl", delete=False) -+ try: -+ tmp.write(src) -+ tmp.close() -+ ftl = langpack_manifest.parse_flat_ftl(tmp.name) -+ self.assertEqual(ftl["langpack-creator"], "bar bar") -+ self.assertEqual(ftl["langpack-contributors"], "") -+ finally: -+ os.remove(tmp.name) -+ -+ def test_parse_flat_ftl_missing(self): -+ ftl = langpack_manifest.parse_flat_ftl("./does-not-exist.ftl") -+ self.assertEqual(len(ftl), 0) -+ - def test_manifest(self): -- ctx = Context() -- ctx["MOZ_LANG_TITLE"] = "Finnish" -- ctx["MOZ_LANGPACK_CREATOR"] = "Suomennosprojekti" -- ctx[ -- "MOZ_LANGPACK_CONTRIBUTORS" -- ] = """ -- Joe Smith -- Mary White -- """ -+ ctx = { -+ "langpack-creator": "Suomennosprojekti", -+ "langpack-contributors": "Joe Smith, Mary White", -+ } - os.environ["MOZ_BUILD_DATE"] = "20210928100000" - manifest = langpack_manifest.create_webmanifest( - "fi", -@@ -44,16 +57,17 @@ class TestGenerateManifest(unittest.Test - ) - - data = json.loads(manifest) -- self.assertEqual(data["name"], "Finnish Language Pack") -+ self.assertEqual(data["name"], "Language Pack: Suomi (Finnish)") - self.assertEqual( - data["author"], "Suomennosprojekti (contributors: Joe Smith, Mary White)" - ) - self.assertEqual(data["version"], "57.0.1buildid20210928.100000") - - def test_manifest_without_contributors(self): -- ctx = Context() -- ctx["MOZ_LANG_TITLE"] = "Finnish" -- ctx["MOZ_LANGPACK_CREATOR"] = "Suomennosprojekti" -+ ctx = { -+ "langpack-creator": "Suomennosprojekti", -+ "langpack-contributors": "", -+ } - manifest = langpack_manifest.create_webmanifest( - "fi", - "57.0.1", -@@ -67,7 +81,7 @@ class TestGenerateManifest(unittest.Test - ) - - data = json.loads(manifest) -- self.assertEqual(data["name"], "Finnish Language Pack") -+ self.assertEqual(data["name"], "Language Pack: Suomi (Finnish)") - self.assertEqual(data["author"], "Suomennosprojekti") - - -diff --git a/python/mozbuild/mozbuild/test/backend/test_recursivemake.py b/python/mozbuild/mozbuild/test/backend/test_recursivemake.py ---- a/python/mozbuild/mozbuild/test/backend/test_recursivemake.py -+++ b/python/mozbuild/mozbuild/test/backend/test_recursivemake.py -@@ -6,21 +6,18 @@ from __future__ import absolute_import, - - import io - import os --import six.moves.cPickle as pickle --import six - import unittest - --from mozpack.manifests import InstallManifest --from mozunit import main -- -+import mozpack.path as mozpath -+import six -+import six.moves.cPickle as pickle - from mozbuild.backend.recursivemake import RecursiveMakeBackend, RecursiveMakeTraversal - from mozbuild.backend.test_manifest import TestManifestBackend - from mozbuild.frontend.emitter import TreeMetadataEmitter - from mozbuild.frontend.reader import BuildReader -- - from mozbuild.test.backend.common import BackendTester -- --import mozpack.path as mozpath -+from mozpack.manifests import InstallManifest -+from mozunit import main - - - class TestRecursiveMakeTraversal(unittest.TestCase): -@@ -1011,10 +1008,10 @@ class TestRecursiveMakeBackend(BackendTe - - expected = [ - "CARGO_FILE := %s/code/Cargo.toml" % env.topsrcdir, -- "CARGO_TARGET_DIR := .", -- "RUST_PROGRAMS += i686-pc-windows-msvc/release/target.exe", -+ "CARGO_TARGET_DIR := %s" % env.topobjdir, -+ "RUST_PROGRAMS += $(DEPTH)/i686-pc-windows-msvc/release/target.exe", - "RUST_CARGO_PROGRAMS += target", -- "HOST_RUST_PROGRAMS += i686-pc-windows-msvc/release/host.exe", -+ "HOST_RUST_PROGRAMS += $(DEPTH)/i686-pc-windows-msvc/release/host.exe", - "HOST_RUST_CARGO_PROGRAMS += host", - ] - -diff --git a/python/mozbuild/mozbuild/vendor/moz_yaml.py b/python/mozbuild/mozbuild/vendor/moz_yaml.py ---- a/python/mozbuild/mozbuild/vendor/moz_yaml.py -+++ b/python/mozbuild/mozbuild/vendor/moz_yaml.py -@@ -104,6 +104,10 @@ origin: - # optional - license-file: COPYING - -+ # If there are any mozilla-specific notes you want to put -+ # about a library, they can be put here. -+ notes: Notes about the library -+ - # Configuration for the automated vendoring system. - # optional - vendoring: -@@ -379,6 +383,7 @@ def _schema_1(): - "origin": { - Required("name"): All(str, Length(min=1)), - Required("description"): All(str, Length(min=1)), -+ "notes": All(str, Length(min=1)), - Required("url"): FqdnUrl(), - Required("license"): Msg(License(), msg="Unsupported License"), - "license-file": All(str, Length(min=1)), -diff --git a/python/mozbuild/mozbuild/vendor/vendor_manifest.py b/python/mozbuild/mozbuild/vendor/vendor_manifest.py ---- a/python/mozbuild/mozbuild/vendor/vendor_manifest.py -+++ b/python/mozbuild/mozbuild/vendor/vendor_manifest.py -@@ -25,7 +25,7 @@ from mozbuild.vendor.rewrite_mozbuild im - MozBuildRewriteException, - ) - --DEFAULT_EXCLUDE_FILES = [".git*"] -+DEFAULT_EXCLUDE_FILES = [".git*", ".git*/**"] - DEFAULT_KEEP_FILES = ["**/moz.build", "**/moz.yaml"] - DEFAULT_INCLUDE_FILES = [] - -diff --git a/python/mozbuild/mozbuild/vendor/vendor_rust.py b/python/mozbuild/mozbuild/vendor/vendor_rust.py ---- a/python/mozbuild/mozbuild/vendor/vendor_rust.py -+++ b/python/mozbuild/mozbuild/vendor/vendor_rust.py -@@ -196,6 +196,7 @@ class VendorRust(MozbuildObject): - f - for f in self.repository.get_changed_files("M") - if os.path.basename(f) not in ("Cargo.toml", "Cargo.lock") -+ and not f.startswith("supply-chain/") - ] - if modified: - self.log( -diff --git a/python/mozbuild/mozpack/dmg.py b/python/mozbuild/mozpack/dmg.py ---- a/python/mozbuild/mozpack/dmg.py -+++ b/python/mozbuild/mozpack/dmg.py -@@ -2,28 +2,18 @@ - # 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 buildconfig --import errno --import mozfile - import os - import platform - import shutil - import subprocess -+from pathlib import Path -+from typing import List - -+import mozfile - from mozbuild.util import ensureParentDir - - is_linux = platform.system() == "Linux" -- -- --def mkdir(dir): -- if not os.path.isdir(dir): -- try: -- os.makedirs(dir) -- except OSError as e: -- if e.errno != errno.EEXIST: -- raise -+is_osx = platform.system() == "Darwin" - - - def chmod(dir): -@@ -31,48 +21,50 @@ def chmod(dir): - subprocess.check_call(["chmod", "-R", "a+rX,a-st,u+w,go-w", dir]) - - --def rsync(source, dest): -+def rsync(source: Path, dest: Path): - "rsync the contents of directory source into directory dest" - # Ensure a trailing slash on directories so rsync copies the *contents* of source. -- if not source.endswith("/") and os.path.isdir(source): -- source += "/" -- subprocess.check_call(["rsync", "-a", "--copy-unsafe-links", source, dest]) -+ raw_source = str(source) -+ if source.is_dir(): -+ raw_source = str(source) + "/" -+ subprocess.check_call(["rsync", "-a", "--copy-unsafe-links", raw_source, dest]) - - --def set_folder_icon(dir, tmpdir): -+def set_folder_icon(dir: Path, tmpdir: Path, hfs_tool: Path = None): - "Set HFS attributes of dir to use a custom icon" -- if not is_linux: -+ if is_linux: -+ hfs = tmpdir / "staged.hfs" -+ subprocess.check_call([hfs_tool, hfs, "attr", "/", "C"]) -+ elif is_osx: - subprocess.check_call(["SetFile", "-a", "C", dir]) -- else: -- hfs = os.path.join(tmpdir, "staged.hfs") -- subprocess.check_call([buildconfig.substs["HFS_TOOL"], hfs, "attr", "/", "C"]) - - --def generate_hfs_file(stagedir, tmpdir, volume_name): -+def generate_hfs_file( -+ stagedir: Path, tmpdir: Path, volume_name: str, mkfshfs_tool: Path -+): - """ - When cross compiling, we zero fill an hfs file, that we will turn into - a DMG. To do so we test the size of the staged dir, and add some slight - padding to that. - """ -- if is_linux: -- hfs = os.path.join(tmpdir, "staged.hfs") -- output = subprocess.check_output(["du", "-s", stagedir]) -- size = int(output.split()[0]) / 1000 # Get in MB -- size = int(size * 1.02) # Bump the used size slightly larger. -- # Setup a proper file sized out with zero's -- subprocess.check_call( -- [ -- "dd", -- "if=/dev/zero", -- "of={}".format(hfs), -- "bs=1M", -- "count={}".format(size), -- ] -- ) -- subprocess.check_call([buildconfig.substs["MKFSHFS"], "-v", volume_name, hfs]) -+ hfs = tmpdir / "staged.hfs" -+ output = subprocess.check_output(["du", "-s", stagedir]) -+ size = int(output.split()[0]) / 1000 # Get in MB -+ size = int(size * 1.02) # Bump the used size slightly larger. -+ # Setup a proper file sized out with zero's -+ subprocess.check_call( -+ [ -+ "dd", -+ "if=/dev/zero", -+ "of={}".format(hfs), -+ "bs=1M", -+ "count={}".format(size), -+ ] -+ ) -+ subprocess.check_call([mkfshfs_tool, "-v", volume_name, hfs]) - - --def create_app_symlink(stagedir, tmpdir): -+def create_app_symlink(stagedir: Path, tmpdir: Path, hfs_tool: Path = None): - """ - Make a symlink to /Applications. The symlink name is a space - so we don't have to localize it. The Applications folder icon -@@ -80,18 +72,34 @@ def create_app_symlink(stagedir, tmpdir) - """ - if is_linux: - hfs = os.path.join(tmpdir, "staged.hfs") -- subprocess.check_call( -- [buildconfig.substs["HFS_TOOL"], hfs, "symlink", "/ ", "/Applications"] -- ) -- else: -- os.symlink("/Applications", os.path.join(stagedir, " ")) -+ subprocess.check_call([hfs_tool, hfs, "symlink", "/ ", "/Applications"]) -+ elif is_osx: -+ os.symlink("/Applications", stagedir / " ") - - --def create_dmg_from_staged(stagedir, output_dmg, tmpdir, volume_name): -+def create_dmg_from_staged( -+ stagedir: Path, -+ output_dmg: Path, -+ tmpdir: Path, -+ volume_name: str, -+ hfs_tool: Path = None, -+ dmg_tool: Path = None, -+): - "Given a prepared directory stagedir, produce a DMG at output_dmg." -- if not is_linux: -- # Running on OS X -- hybrid = os.path.join(tmpdir, "hybrid.dmg") -+ if is_linux: -+ # The dmg tool doesn't create the destination directories, and silently -+ # returns success if the parent directory doesn't exist. -+ ensureParentDir(output_dmg) -+ -+ hfs = os.path.join(tmpdir, "staged.hfs") -+ subprocess.check_call([hfs_tool, hfs, "addall", stagedir]) -+ subprocess.check_call( -+ [dmg_tool, "build", hfs, output_dmg], -+ # dmg is seriously chatty -+ stdout=subprocess.DEVNULL, -+ ) -+ elif is_osx: -+ hybrid = tmpdir / "hybrid.dmg" - subprocess.check_call( - [ - "hdiutil", -@@ -121,37 +129,17 @@ def create_dmg_from_staged(stagedir, out - output_dmg, - ] - ) -- else: -- # The dmg tool doesn't create the destination directories, and silently -- # returns success if the parent directory doesn't exist. -- ensureParentDir(output_dmg) -- -- hfs = os.path.join(tmpdir, "staged.hfs") -- subprocess.check_call([buildconfig.substs["HFS_TOOL"], hfs, "addall", stagedir]) -- subprocess.check_call( -- [buildconfig.substs["DMG_TOOL"], "build", hfs, output_dmg], -- # dmg is seriously chatty -- stdout=open(os.devnull, "wb"), -- ) - - --def check_tools(*tools): -- """ -- Check that each tool named in tools exists in SUBSTS and is executable. -- """ -- for tool in tools: -- path = buildconfig.substs[tool] -- if not path: -- raise Exception('Required tool "%s" not found' % tool) -- if not os.path.isfile(path): -- raise Exception('Required tool "%s" not found at path "%s"' % (tool, path)) -- if not os.access(path, os.X_OK): -- raise Exception( -- 'Required tool "%s" at path "%s" is not executable' % (tool, path) -- ) -- -- --def create_dmg(source_directory, output_dmg, volume_name, extra_files): -+def create_dmg( -+ source_directory: Path, -+ output_dmg: Path, -+ volume_name: str, -+ extra_files: List[tuple], -+ dmg_tool: Path, -+ hfs_tool: Path, -+ mkfshfs_tool: Path, -+): - """ - Create a DMG disk image at the path output_dmg from source_directory. - -@@ -162,73 +150,80 @@ def create_dmg(source_directory, output_ - if platform.system() not in ("Darwin", "Linux"): - raise Exception("Don't know how to build a DMG on '%s'" % platform.system()) - -- if is_linux: -- check_tools("DMG_TOOL", "MKFSHFS", "HFS_TOOL") -- with mozfile.TemporaryDirectory() as tmpdir: -- stagedir = os.path.join(tmpdir, "stage") -- os.mkdir(stagedir) -+ with mozfile.TemporaryDirectory() as tmp: -+ tmpdir = Path(tmp) -+ stagedir = tmpdir / "stage" -+ stagedir.mkdir() -+ - # Copy the app bundle over using rsync - rsync(source_directory, stagedir) - # Copy extra files - for source, target in extra_files: -- full_target = os.path.join(stagedir, target) -- mkdir(os.path.dirname(full_target)) -+ full_target = stagedir / target -+ full_target.parent.mkdir(parents=True, exist_ok=True) - shutil.copyfile(source, full_target) -- generate_hfs_file(stagedir, tmpdir, volume_name) -- create_app_symlink(stagedir, tmpdir) -+ if is_linux: -+ # Not needed in osx -+ generate_hfs_file(stagedir, tmpdir, volume_name, mkfshfs_tool) -+ create_app_symlink(stagedir, tmpdir, hfs_tool) - # Set the folder attributes to use a custom icon -- set_folder_icon(stagedir, tmpdir) -+ set_folder_icon(stagedir, tmpdir, hfs_tool) - chmod(stagedir) -- create_dmg_from_staged(stagedir, output_dmg, tmpdir, volume_name) -+ create_dmg_from_staged( -+ stagedir, output_dmg, tmpdir, volume_name, hfs_tool, dmg_tool -+ ) - - --def extract_dmg_contents(dmgfile, destdir): -- import buildconfig -- -+def extract_dmg_contents( -+ dmgfile: Path, -+ destdir: Path, -+ dmg_tool: Path = None, -+ hfs_tool: Path = None, -+): - if is_linux: - with mozfile.TemporaryDirectory() as tmpdir: - hfs_file = os.path.join(tmpdir, "firefox.hfs") - subprocess.check_call( -- [buildconfig.substs["DMG_TOOL"], "extract", dmgfile, hfs_file], -+ [dmg_tool, "extract", dmgfile, hfs_file], - # dmg is seriously chatty -- stdout=open(os.devnull, "wb"), -- ) -- subprocess.check_call( -- [buildconfig.substs["HFS_TOOL"], hfs_file, "extractall", "/", destdir] -+ stdout=subprocess.DEVNULL, - ) -+ subprocess.check_call([hfs_tool, hfs_file, "extractall", "/", destdir]) - else: -- unpack_diskimage = os.path.join( -- buildconfig.topsrcdir, "build", "package", "mac_osx", "unpack-diskimage" -- ) -- unpack_mountpoint = os.path.join( -- "/tmp", "{}-unpack".format(buildconfig.substs["MOZ_APP_NAME"]) -- ) -+ # TODO: find better way to resolve topsrcdir (checkout directory) -+ topsrcdir = Path(__file__).parent.parent.parent.parent.resolve() -+ unpack_diskimage = topsrcdir / "build/package/mac_osx/unpack-diskimage" -+ unpack_mountpoint = Path("/tmp/app-unpack") - subprocess.check_call([unpack_diskimage, dmgfile, unpack_mountpoint, destdir]) - - --def extract_dmg(dmgfile, output, dsstore=None, icon=None, background=None): -+def extract_dmg( -+ dmgfile: Path, -+ output: Path, -+ dmg_tool: Path = None, -+ hfs_tool: Path = None, -+ dsstore: Path = None, -+ icon: Path = None, -+ background: Path = None, -+): - if platform.system() not in ("Darwin", "Linux"): - raise Exception("Don't know how to extract a DMG on '%s'" % platform.system()) - -- if is_linux: -- check_tools("DMG_TOOL", "MKFSHFS", "HFS_TOOL") -- -- with mozfile.TemporaryDirectory() as tmpdir: -- extract_dmg_contents(dmgfile, tmpdir) -- if os.path.islink(os.path.join(tmpdir, " ")): -+ with mozfile.TemporaryDirectory() as tmp: -+ tmpdir = Path(tmp) -+ extract_dmg_contents(dmgfile, tmpdir, dmg_tool, hfs_tool) -+ applications_symlink = tmpdir / " " -+ if applications_symlink.is_symlink(): - # Rsync will fail on the presence of this symlink -- os.remove(os.path.join(tmpdir, " ")) -+ applications_symlink.unlink() - rsync(tmpdir, output) - - if dsstore: -- mkdir(os.path.dirname(dsstore)) -- rsync(os.path.join(tmpdir, ".DS_Store"), dsstore) -+ dsstore.parent.mkdir(parents=True, exist_ok=True) -+ rsync(tmpdir / ".DS_Store", dsstore) - if background: -- mkdir(os.path.dirname(background)) -- rsync( -- os.path.join(tmpdir, ".background", os.path.basename(background)), -- background, -- ) -+ background.parent.mkdir(parents=True, exist_ok=True) -+ rsync(tmpdir / ".background" / background.name, background) - if icon: -- mkdir(os.path.dirname(icon)) -- rsync(os.path.join(tmpdir, ".VolumeIcon.icns"), icon) -+ icon.parent.mkdir(parents=True, exist_ok=True) -+ rsync(tmpdir / ".VolumeIcon.icns", icon) -diff --git a/python/mozbuild/mozpack/mozjar.py b/python/mozbuild/mozpack/mozjar.py ---- a/python/mozbuild/mozpack/mozjar.py -+++ b/python/mozbuild/mozpack/mozjar.py -@@ -287,12 +287,22 @@ class JarFileReader(object): - self.compressed = header["compression"] != JAR_STORED - self.compress = header["compression"] - -+ def readable(self): -+ return True -+ - def read(self, length=-1): - """ - Read some amount of uncompressed data. - """ - return self.uncompressed_data.read(length) - -+ def readinto(self, b): -+ """ -+ Read bytes into a pre-allocated, writable bytes-like object `b` and return -+ the number of bytes read. -+ """ -+ return self.uncompressed_data.readinto(b) -+ - def readlines(self): - """ - Return a list containing all the lines of data in the uncompressed -@@ -320,6 +330,10 @@ class JarFileReader(object): - self.uncompressed_data.close() - - @property -+ def closed(self): -+ return self.uncompressed_data.closed -+ -+ @property - def compressed_data(self): - """ - Return the raw compressed data. -diff --git a/python/mozbuild/mozpack/test/python.ini b/python/mozbuild/mozpack/test/python.ini ---- a/python/mozbuild/mozpack/test/python.ini -+++ b/python/mozbuild/mozpack/test/python.ini -@@ -14,4 +14,5 @@ subsuite = mozbuild - [test_packager_l10n.py] - [test_packager_unpack.py] - [test_path.py] -+[test_pkg.py] - [test_unify.py] -diff --git a/python/mozlint/mozlint/cli.py b/python/mozlint/mozlint/cli.py ---- a/python/mozlint/mozlint/cli.py -+++ b/python/mozlint/mozlint/cli.py -@@ -46,10 +46,13 @@ class MozlintParser(ArgumentParser): - [ - ["-W", "--warnings"], - { -+ "const": True, -+ "nargs": "?", -+ "choices": ["soft"], - "dest": "show_warnings", -- "default": False, -- "action": "store_true", -- "help": "Display and fail on warnings in addition to errors.", -+ "help": "Display and fail on warnings in addition to errors. " -+ "--warnings=soft can be used to report warnings but only fail " -+ "on errors.", - }, - ], - [ -diff --git a/python/mozlint/mozlint/result.py b/python/mozlint/mozlint/result.py ---- a/python/mozlint/mozlint/result.py -+++ b/python/mozlint/mozlint/result.py -@@ -3,6 +3,7 @@ - # file, You can obtain one at http://mozilla.org/MPL/2.0/. - - from collections import defaultdict -+from itertools import chain - from json import JSONEncoder - import os - import mozpack.path as mozpath -@@ -15,7 +16,8 @@ class ResultSummary(object): - - root = None - -- def __init__(self, root): -+ def __init__(self, root, fail_on_warnings=True): -+ self.fail_on_warnings = fail_on_warnings - self.reset() - - # Store the repository root folder to be able to build -@@ -30,9 +32,19 @@ class ResultSummary(object): - self.suppressed_warnings = defaultdict(int) - self.fixed = 0 - -+ def has_issues_failure(self): -+ """Returns true in case issues were detected during the lint run. Do not -+ consider warning issues in case `self.fail_on_warnings` is set to False. -+ """ -+ if self.fail_on_warnings is False: -+ return any( -+ result.level != "warning" for result in chain(*self.issues.values()) -+ ) -+ return len(self.issues) >= 1 -+ - @property - def returncode(self): -- if self.issues or self.failed: -+ if self.has_issues_failure() or self.failed: - return 1 - return 0 - -diff --git a/python/mozlint/mozlint/roller.py b/python/mozlint/mozlint/roller.py ---- a/python/mozlint/mozlint/roller.py -+++ b/python/mozlint/mozlint/roller.py -@@ -177,7 +177,11 @@ class LintRoller(object): - self._setupargs = setupargs or {} - - # result state -- self.result = ResultSummary(root) -+ self.result = ResultSummary( -+ root, -+ # Prevent failing on warnings when the --warnings parameter is set to "soft" -+ fail_on_warnings=lintargs.get("show_warnings") != "soft", -+ ) - - self.root = root - self.exclude = exclude or [] -diff --git a/python/mozlint/mozlint/types.py b/python/mozlint/mozlint/types.py ---- a/python/mozlint/mozlint/types.py -+++ b/python/mozlint/mozlint/types.py -@@ -87,40 +87,6 @@ class BaseType(object): - pass - - --class FileType(BaseType): -- """Abstract base class for linter types that check each file -- -- Subclasses of this linter type will read each file and check the file contents -- """ -- -- __metaclass__ = ABCMeta -- -- @abstractmethod -- def lint_single_file(payload, line, config): -- """Run linter defined by `config` against `paths` with `lintargs`. -- -- :param path: Path to the file to lint. -- :param config: Linter config the paths are being linted against. -- :param lintargs: External arguments to the linter not defined in -- the definition, but passed in by a consumer. -- :returns: An error message or None -- """ -- pass -- -- def _lint(self, path, config, **lintargs): -- if os.path.isdir(path): -- return self._lint_dir(path, config, **lintargs) -- -- payload = config["payload"] -- -- errors = [] -- message = self.lint_single_file(payload, path, config) -- if message: -- errors.append(result.from_config(config, message=message, path=path)) -- -- return errors -- -- - class LineType(BaseType): - """Abstract base class for linter types that check each line individually. - -@@ -182,6 +148,10 @@ class ExternalType(BaseType): - return func(files, config, **lintargs) - - -+class ExternalFileType(ExternalType): -+ batch = False -+ -+ - class GlobalType(ExternalType): - """Linter type that runs an external global linting function just once. - -@@ -237,6 +207,7 @@ supported_types = { - "string": StringType(), - "regex": RegexType(), - "external": ExternalType(), -+ "external-file": ExternalFileType(), - "global": GlobalType(), - "structured_log": StructuredLogType(), - } -diff --git a/python/mozlint/test/test_roller.py b/python/mozlint/test/test_roller.py ---- a/python/mozlint/test/test_roller.py -+++ b/python/mozlint/test/test_roller.py -@@ -14,6 +14,7 @@ import pytest - - from mozlint.errors import LintersNotConfigured, NoValidLinter - from mozlint.result import Issue, ResultSummary -+from mozlint.roller import LintRoller - from itertools import chain - - -@@ -152,26 +153,41 @@ def test_roll_warnings(lint, linters, fi - assert result.total_suppressed_warnings == 0 - - --def test_roll_code_review(monkeypatch, lint, linters, files): -+def test_roll_code_review(monkeypatch, linters, files): - monkeypatch.setenv("CODE_REVIEW", "1") -- lint.lintargs["show_warnings"] = False -+ lint = LintRoller(root=here, show_warnings=False) - lint.read(linters("warning")) - result = lint.roll(files) - assert len(result.issues) == 1 - assert result.total_issues == 2 - assert len(result.suppressed_warnings) == 0 - assert result.total_suppressed_warnings == 0 -+ assert result.returncode == 1 - - --def test_roll_code_review_warnings_disabled(monkeypatch, lint, linters, files): -+def test_roll_code_review_warnings_disabled(monkeypatch, linters, files): - monkeypatch.setenv("CODE_REVIEW", "1") -- lint.lintargs["show_warnings"] = False -+ lint = LintRoller(root=here, show_warnings=False) - lint.read(linters("warning_no_code_review")) - result = lint.roll(files) - assert len(result.issues) == 0 - assert result.total_issues == 0 -+ assert lint.result.fail_on_warnings is True - assert len(result.suppressed_warnings) == 1 - assert result.total_suppressed_warnings == 2 -+ assert result.returncode == 0 -+ -+ -+def test_roll_code_review_warnings_soft(linters, files): -+ lint = LintRoller(root=here, show_warnings="soft") -+ lint.read(linters("warning_no_code_review")) -+ result = lint.roll(files) -+ assert len(result.issues) == 1 -+ assert result.total_issues == 2 -+ assert lint.result.fail_on_warnings is False -+ assert len(result.suppressed_warnings) == 0 -+ assert result.total_suppressed_warnings == 0 -+ assert result.returncode == 0 - - - def fake_run_worker(config, paths, **lintargs): -diff --git a/python/mozperftest/mozperftest/test/webpagetest.py b/python/mozperftest/mozperftest/test/webpagetest.py ---- a/python/mozperftest/mozperftest/test/webpagetest.py -+++ b/python/mozperftest/mozperftest/test/webpagetest.py -@@ -29,6 +29,7 @@ ACCEPTED_CONNECTIONS = [ - - ACCEPTED_STATISTICS = ["average", "median", "standardDeviation"] - WPT_KEY_FILE = "WPT_key.txt" -+WPT_API_EXPIRED_MESSAGE = "API key expired" - - - class WPTTimeOutError(Exception): -@@ -112,6 +113,14 @@ class WPTInvalidStatisticsError(Exceptio - pass - - -+class WPTExpiredAPIKeyError(Exception): -+ """ -+ This error is raised if we get a notification from WPT that our API key has expired -+ """ -+ -+ pass -+ -+ - class PropagatingErrorThread(Thread): - def run(self): - self.exc = None -@@ -244,6 +253,11 @@ class WebPageTest(Layer): - requested_results = requests.get(url) - results_of_request = json.loads(requested_results.text) - start = time.time() -+ if ( -+ "statusText" in results_of_request.keys() -+ and results_of_request["statusText"] == WPT_API_EXPIRED_MESSAGE -+ ): -+ raise WPTExpiredAPIKeyError("The API key has expired") - while ( - requested_results.status_code == 200 - and time.time() - start < self.timeout_limit -diff --git a/python/mozperftest/mozperftest/tests/test_webpagetest.py b/python/mozperftest/mozperftest/tests/test_webpagetest.py ---- a/python/mozperftest/mozperftest/tests/test_webpagetest.py -+++ b/python/mozperftest/mozperftest/tests/test_webpagetest.py -@@ -13,10 +13,12 @@ from mozperftest.test.webpagetest import - WPTBrowserSelectionError, - WPTInvalidURLError, - WPTLocationSelectionError, -- WPTInvalidConnectionSelection, -- ACCEPTED_STATISTICS, - WPTInvalidStatisticsError, - WPTDataProcessingError, -+ WPTExpiredAPIKeyError, -+ WPTInvalidConnectionSelection, -+ WPT_API_EXPIRED_MESSAGE, -+ ACCEPTED_STATISTICS, - ) - - WPT_METRICS = [ -@@ -82,7 +84,9 @@ def init_placeholder_wpt_data(fvonly=Fal - return placeholder_data - - --def init_mocked_request(status_code, WPT_test_status_code=200, **kwargs): -+def init_mocked_request( -+ status_code, WPT_test_status_code=200, WPT_test_status_text="Ok", **kwargs -+): - mock_data = { - "data": { - "ec2-us-east-1": {"PendingTests": {"Queued": 3}, "Label": "California"}, -@@ -92,6 +96,7 @@ def init_mocked_request(status_code, WPT - "remaining": 2000, - }, - "statusCode": WPT_test_status_code, -+ "statusText": WPT_test_status_text, - } - for key, value in kwargs.items(): - mock_data["data"][key] = value -@@ -245,3 +250,23 @@ def test_webpagetest_test_metric_not_fou - test = webpagetest.WebPageTest(env, mach_cmd) - with pytest.raises(WPTDataProcessingError): - test.run(metadata) -+ -+ -+@mock.patch("mozperftest.utils.get_tc_secret", return_value={"wpt_key": "fake_key"}) -+@mock.patch( -+ "mozperftest.test.webpagetest.WebPageTest.location_queue", return_value=None -+) -+@mock.patch( -+ "requests.get", -+ return_value=init_mocked_request( -+ 200, WPT_test_status_code=400, WPT_test_status_text=WPT_API_EXPIRED_MESSAGE -+ ), -+) -+@mock.patch("mozperftest.test.webpagetest.WPT_KEY_FILE", "tests/data/WPT_fakekey.txt") -+def test_webpagetest_test_expired_api_key(*mocked): -+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_WPT_TEST)]) -+ metadata.script["options"]["test_list"] = ["google.ca"] -+ metadata.script["options"]["test_parameters"]["wait_between_requests"] = 1 -+ test = webpagetest.WebPageTest(env, mach_cmd) -+ with pytest.raises(WPTExpiredAPIKeyError): -+ test.run(metadata) -diff --git a/python/mozterm/mozterm/widgets.py b/python/mozterm/mozterm/widgets.py ---- a/python/mozterm/mozterm/widgets.py -+++ b/python/mozterm/mozterm/widgets.py -@@ -6,6 +6,8 @@ from __future__ import absolute_import, - - from .terminal import Terminal - -+DEFAULT = "\x1b(B\x1b[m" -+ - - class BaseWidget(object): - def __init__(self, terminal=None): -@@ -39,7 +41,16 @@ class Footer(BaseWidget): - for part in parts: - try: - func, part = part -- encoded = getattr(self.term, func)(part) -+ attribute = getattr(self.term, func) -+ # In Blessed, these attributes aren't always callable -+ if callable(attribute): -+ encoded = attribute(part) -+ else: -+ # If it's not callable, assume it's just the raw -+ # ANSI Escape Sequence and prepend it ourselves. -+ # Append DEFAULT to stop text that comes afterwards -+ # from inheriting the formatting we prepended. -+ encoded = attribute + part + DEFAULT - except ValueError: - encoded = part - -diff --git a/python/mozterm/test/test_terminal.py b/python/mozterm/test/test_terminal.py ---- a/python/mozterm/test/test_terminal.py -+++ b/python/mozterm/test/test_terminal.py -@@ -9,32 +9,17 @@ import sys - - import mozunit - import pytest -- --from mozterm import Terminal, NullTerminal -+from mozterm import NullTerminal, Terminal - - - def test_terminal(): -- blessings = pytest.importorskip("blessings") -+ blessed = pytest.importorskip("blessed") - term = Terminal() -- assert isinstance(term, blessings.Terminal) -+ assert isinstance(term, blessed.Terminal) - - term = Terminal(disable_styling=True) - assert isinstance(term, NullTerminal) - -- del sys.modules["blessings"] -- orig = sys.path[:] -- for path in orig: -- if "blessings" in path: -- sys.path.remove(path) -- -- term = Terminal() -- assert isinstance(term, NullTerminal) -- -- with pytest.raises(ImportError): -- term = Terminal(raises=True) -- -- sys.path = orig -- - - def test_null_terminal(): - term = NullTerminal() -diff --git a/python/mozterm/test/test_widgets.py b/python/mozterm/test/test_widgets.py ---- a/python/mozterm/test/test_widgets.py -+++ b/python/mozterm/test/test_widgets.py -@@ -4,41 +4,42 @@ - - from __future__ import absolute_import, unicode_literals - -+import sys - from io import StringIO - - import mozunit - import pytest -- - from mozterm import Terminal - from mozterm.widgets import Footer - - - @pytest.fixture --def terminal(monkeypatch): -- blessings = pytest.importorskip("blessings") -+def terminal(): -+ blessed = pytest.importorskip("blessed") - - kind = "xterm-256color" - try: - term = Terminal(stream=StringIO(), force_styling=True, kind=kind) -- except blessings.curses.error: -+ except blessed.curses.error: - pytest.skip("terminal '{}' not found".format(kind)) - -- # For some reason blessings returns None for width/height though a comment -- # says that shouldn't ever happen. -- monkeypatch.setattr(term, "_height_and_width", lambda: (100, 100)) - return term - - -+@pytest.mark.skipif( -+ not sys.platform.startswith("win"), -+ reason="Only do ANSI Escape Sequence comparisons on Windows.", -+) - def test_footer(terminal): - footer = Footer(terminal=terminal) - footer.write( - [ -- ("dim", "foo"), -+ ("bright_black", "foo"), - ("green", "bar"), - ] - ) - value = terminal.stream.getvalue() -- expected = "\x1b7\x1b[2mfoo\x1b(B\x1b[m \x1b[32mbar\x1b(B\x1b[m\x1b8" -+ expected = "\x1b7\x1b[90mfoo\x1b(B\x1b[m \x1b[32mbar\x1b(B\x1b[m\x1b8" - assert value == expected - - footer.clear() -diff --git a/python/mozversioncontrol/mozversioncontrol/__init__.py b/python/mozversioncontrol/mozversioncontrol/__init__.py ---- a/python/mozversioncontrol/mozversioncontrol/__init__.py -+++ b/python/mozversioncontrol/mozversioncontrol/__init__.py -@@ -222,6 +222,16 @@ class Repository(object): - """ - - @abc.abstractmethod -+ def get_ignored_files_finder(self): -+ """Obtain a mozpack.files.BaseFinder of ignored files in the working -+ directory. -+ -+ The Finder will have its list of all files in the repo cached for its -+ entire lifetime, so operations on the Finder will not track with, for -+ example, changes to the repo during the Finder's lifetime. -+ """ -+ -+ @abc.abstractmethod - def working_directory_clean(self, untracked=False, ignored=False): - """Determine if the working directory is free of modifications. - -@@ -501,6 +511,15 @@ class HgRepository(Repository): - ) - return FileListFinder(files) - -+ def get_ignored_files_finder(self): -+ # Can return backslashes on Windows. Normalize to forward slashes. -+ files = list( -+ p.replace("\\", "/").split(" ")[-1] -+ for p in self._run("status", "-i").split("\n") -+ if p -+ ) -+ return FileListFinder(files) -+ - def working_directory_clean(self, untracked=False, ignored=False): - args = ["status", "--modified", "--added", "--removed", "--deleted"] - if untracked: -@@ -675,6 +694,16 @@ class GitRepository(Repository): - files = [p for p in self._run("ls-files", "-z").split("\0") if p] - return FileListFinder(files) - -+ def get_ignored_files_finder(self): -+ files = [ -+ p -+ for p in self._run( -+ "ls-files", "-i", "-o", "-z", "--exclude-standard" -+ ).split("\0") -+ if p -+ ] -+ return FileListFinder(files) -+ - def working_directory_clean(self, untracked=False, ignored=False): - args = ["status", "--porcelain"] - -diff --git a/python/sites/mach.txt b/python/sites/mach.txt ---- a/python/sites/mach.txt -+++ b/python/sites/mach.txt -@@ -42,10 +42,10 @@ pth:testing/mozbase/mozsystemmonitor - pth:testing/mozbase/mozscreenshot - pth:testing/mozbase/moztest - pth:testing/mozbase/mozversion -+pth:testing/mozharness - pth:testing/raptor - pth:testing/talos - pth:testing/web-platform --vendored:testing/web-platform/tests/tools/third_party/funcsigs - vendored:testing/web-platform/tests/tools/third_party/h2 - vendored:testing/web-platform/tests/tools/third_party/hpack - vendored:testing/web-platform/tests/tools/third_party/html5lib -@@ -139,5 +139,5 @@ pypi-optional:glean-sdk==51.8.2:telemetr - # Mach gracefully handles the case where `psutil` is unavailable. - # We aren't (yet) able to pin packages in automation, so we have to - # support down to the oldest locally-installed version (5.4.2). --pypi-optional:psutil>=5.4.2,<=5.8.0:telemetry will be missing some data --pypi-optional:zstandard>=0.11.1,<=0.17.0:zstd archives will not be possible to extract -+pypi-optional:psutil>=5.4.2,<=5.9.4:telemetry will be missing some data -+pypi-optional:zstandard>=0.11.1,<=0.19.0:zstd archives will not be possible to extract diff --git a/rhbz-2131158-webrtc-nss-fix.patch b/rhbz-2131158-webrtc-nss-fix.patch new file mode 100644 index 0000000..78b458d --- /dev/null +++ b/rhbz-2131158-webrtc-nss-fix.patch @@ -0,0 +1,25 @@ +diff -up firefox-102.3.0/third_party/libsrtp/src/crypto/cipher/aes_gcm_nss.c.webrtc-fix firefox-102.3.0/third_party/libsrtp/src/crypto/cipher/aes_gcm_nss.c +--- firefox-102.3.0/third_party/libsrtp/src/crypto/cipher/aes_gcm_nss.c.webrtc-fix 2022-10-04 18:58:30.563683229 +0200 ++++ firefox-102.3.0/third_party/libsrtp/src/crypto/cipher/aes_gcm_nss.c 2022-10-04 18:58:44.583652963 +0200 +@@ -293,7 +293,7 @@ static srtp_err_status_t srtp_aes_gcm_ns + + int rv; + SECItem param = { siBuffer, (unsigned char *)&c->params, +- sizeof(CK_GCM_PARAMS) }; ++ sizeof(CK_NSS_GCM_PARAMS) }; + if (encrypt) { + rv = PK11_Encrypt(c->key, CKM_AES_GCM, ¶m, buf, enc_len, + *enc_len + 16, buf, *enc_len); +diff -up firefox-102.3.0/third_party/libsrtp/src/crypto/include/aes_gcm.h.webrtc-fix firefox-102.3.0/third_party/libsrtp/src/crypto/include/aes_gcm.h +--- firefox-102.3.0/third_party/libsrtp/src/crypto/include/aes_gcm.h.webrtc-fix 2022-10-04 18:59:16.635583764 +0200 ++++ firefox-102.3.0/third_party/libsrtp/src/crypto/include/aes_gcm.h 2022-10-04 18:59:31.848550924 +0200 +@@ -101,7 +101,7 @@ typedef struct { + uint8_t iv[12]; + uint8_t aad[MAX_AD_SIZE]; + int aad_size; +- CK_GCM_PARAMS params; ++ CK_NSS_GCM_PARAMS params; + uint8_t tag[16]; + } srtp_aes_gcm_ctx_t; + +diff -up firefox-102.3.0/third_party/prio/prio/encrypt.c.webrtc-fix firefox-102.3.0/third_party/prio/prio/encrypt.c diff --git a/run-tests-wayland b/run-tests-wayland deleted file mode 100755 index 95ee6f6..0000000 --- a/run-tests-wayland +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/bash -# usage: run-tests-wayland [test flavour] - -set -x - -RUN_XPCSHELL_TEST=1 -RUN_REFTEST=1 -RUN_MOCHITEST=1 -RUN_CRASHTEST=1 - -while (( "$#" )); do - SELECTED_TEST=$1 - if [ "$SELECTED_TEST" = "xpcshell" ] ; then - RUN_XPCSHELL_TEST=1 - elif [ "$SELECTED_TEST" = "reftest" ] ; then - RUN_REFTEST=1 - elif [ "$SELECTED_TEST" = "mochitest" ] ; then - RUN_MOCHITEST=1 - elif [ "$SELECTED_TEST" = "crashtest" ] ; then - RUN_CRASHTEST=1 - fi - shift -done - -export MACH_USE_SYSTEM_PYTHON=1 -export MOZ_NODE_PATH=/usr/bin/node - -MOCHITEST_PARAMS="--timeout 1 --chunk-by-dir 4" -TEST_DIR="test_results" -mkdir $TEST_DIR - -env | grep "DISPLAY" - -# Fix for system nss -ln -s /usr/bin/certutil objdir/dist/bin/certutil -ln -s /usr/bin/pk12util objdir/dist/bin/pk12util - -NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`" - -export MOZ_ENABLE_WAYLAND=1 - -if [ $RUN_XPCSHELL_TEST -ne 0 ] ; then -# ./mach xpcshell-test 2>&1 | cat - | tee $TEST_DIR/xpcshell - ./mach xpcshell-test --enable-webrender 2>&1 | cat - | tee $TEST_DIR/xpcshell-wr - sleep 60 -fi - -# Basic render testing -export TEST_PARAMS="--setpref reftest.ignoreWindowSize=true --setpref widget.wayland.test-workarounds.enabled=true" -#export TEST_FLAVOUR="" -#if [ $RUN_REFTEST -ne 0 ] ; then -# ./mach reftest --marionette localhost:$(($(($RANDOM))+2000)) $TEST_PARAMS 2>&1 | tee $TEST_DIR/reftest$TEST_FLAVOUR -#fi -#if [ $RUN_CRASHTEST -ne 0 ] ; then -# ./mach crashtest --marionette localhost:$(($(($RANDOM))+2000)) $TEST_PARAMS 2>&1 | tee $TEST_DIR/crashtest$TEST_FLAVOUR -#fi -#if [ $RUN_MOCHITEST -ne 0 ] ; then -# ./mach mochitest --marionette localhost:$(($(($RANDOM))+2000)) $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR -#fi - -# WebRender testing -export TEST_PARAMS="--enable-webrender $TEST_PARAMS" -export TEST_FLAVOUR="-wr" -# Use dom/base/test or dom/base/test/chrome for short version -export MOCHITEST_DIR='dom' -if [ $RUN_REFTEST -ne 0 ] ; then - ./mach reftest $TEST_PARAMS 2>&1 | tee $TEST_DIR/reftest$TEST_FLAVOUR - sleep 60 -fi -if [ $RUN_CRASHTEST -ne 0 ] ; then - ./mach crashtest $TEST_PARAMS 2>&1 | tee $TEST_DIR/crashtest$TEST_FLAVOUR - sleep 60 -fi -if [ $RUN_MOCHITEST -ne 0 ] ; then - ./mach mochitest $MOCHITEST_DIR $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR - sleep 60 -fi - -rm -f objdir/dist/bin/certutil -rm -f objdir/dist/bin/pk12util diff --git a/run-tests-x11 b/run-tests-x11 deleted file mode 100755 index 1d4a1c0..0000000 --- a/run-tests-x11 +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/bash -set -x - -export MACH_USE_SYSTEM_PYTHON=1 -export MOZ_NODE_PATH=/usr/bin/node -export X_PARAMS="-screen 0 1600x1200x24" -export MOCHITEST_PARAMS="--timeout 1 --chunk-by-dir 4" -export TEST_DIR="test_results" - -# Fix for system nss -ln -s /usr/bin/certutil objdir/dist/bin/certutil -ln -s /usr/bin/pk12util objdir/dist/bin/pk12util - -NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`" - -# Basic render testing -export TEST_PARAMS="" -export TEST_FLAVOUR="" -#xvfb-run -s "$X_PARAMS" -n 91 ./mach xpcshell-test --sequential $TEST_PARAMS 2>&1 | cat - | tee $TEST_DIR/xpcshell -#xvfb-run -s "$X_PARAMS" -n 92 ./mach reftest --marionette localhost:$(($(($RANDOM))+2000)) $TEST_PARAMS 2>&1 | tee $TEST_DIR/reftest$TEST_FLAVOUR -#xvfb-run -s "$X_PARAMS" -n 93 ./mach crashtest --marionette localhost:$(($(($RANDOM))+2000)) $TEST_PARAMS 2>&1 | tee $TEST_DIR/crashtest$TEST_FLAVOUR -#xvfb-run -s "$X_PARAMS" -n 94 ./mach mochitest --marionette localhost:$(($(($RANDOM))+2000)) $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR - -# WebRender testing -export TEST_PARAMS="--enable-webrender $TEST_PARAMS" -export TEST_FLAVOUR="-wr" -#xvfb-run -s "$X_PARAMS" -n 95 ./mach xpcshell-test --sequential $TEST_PARAMS 2>&1 | cat - | tee $TEST_DIR/xpcshell-wr -#sleep 60 -#xvfb-run -s "$X_PARAMS" -n 96 ./mach reftest $TEST_PARAMS 2>&1 | tee $TEST_DIR/reftest$TEST_FLAVOUR -#sleep 60 -#xvfb-run -s "$X_PARAMS" -n 97 ./mach crashtest $TEST_PARAMS 2>&1 | tee $TEST_DIR/crashtest$TEST_FLAVOUR -#sleep 60 -#export DISPLAY=:0 -#./mach mochitest dom/base/test/ $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR -export DISPLAY=:98 -xvfb-run -s "$X_PARAMS" -n 98 ./mach mochitest dom/base/test/ $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR - -rm -f objdir/dist/bin/certutil -rm -f objdir/dist/bin/pk12util diff --git a/run-wayland-compositor b/run-wayland-compositor deleted file mode 100755 index 0480ed2..0000000 --- a/run-wayland-compositor +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/bash -# Run wayland compositor and set WAYLAND_DISPLAY env variable - -set -x - -echo export DESKTOP_SESSION=gnome > $HOME/.xsessionrc -echo export XDG_CURRENT_DESKTOP=GNOME > $HOME/.xsessionrc -echo export XDG_SESSION_TYPE=wayland >> $HOME/.xsessionrc - -# Turn off the screen saver and screen locking -gsettings set org.gnome.desktop.screensaver idle-activation-enabled false -gsettings set org.gnome.desktop.screensaver lock-enabled false -gsettings set org.gnome.desktop.screensaver lock-delay 3600 - -# Disable the screen saver -# This starts the gnome-keyring-daemon with an unlocked login keyring. libsecret uses this to -# store secrets. Firefox uses libsecret to store a key that protects sensitive information like -# credit card numbers. -if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then - # if not found, launch a new one - eval `dbus-launch --sh-syntax` -fi -eval `echo '' | /usr/bin/gnome-keyring-daemon -r -d --unlock --components=secrets` - -if [ -z "$XDG_RUNTIME_DIR" ]; then - export XDG_RUNTIME_DIR=$HOME -fi - -. xvfb-run -s "-screen 0 1600x1200x24" -n 80 mutter --display=:80 --wayland --nested & -export DISPLAY=:80 - -if [ -z "$WAYLAND_DISPLAY" ] ; then - export WAYLAND_DISPLAY=wayland-0 -else - export WAYLAND_DISPLAY=wayland-1 -fi -sleep 10 -retry_count=0 -max_retries=5 -until [ $retry_count -gt $max_retries ]; do - if [ -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ]; then - retry_count=$(($max_retries + 1)) - else - retry_count=$(($retry_count + 1)) - echo "Waiting for Mutter, retry: $retry_count" - sleep 2 - fi -done - -env | grep "DISPLAY" diff --git a/sources b/sources index 2601ca9..2bbf586 100644 --- a/sources +++ b/sources @@ -1,5 +1,7 @@ +SHA512 (cbindgen-vendor.tar.xz) = 161811f4adfc74e5d92871c78139704d32e1e1ad6b615c85353de300d9647a68f1ca8b1c953f7cc5539d861e9e8d8e42892cae757a3eafea78804e19bc323c16 +SHA512 (firefox-115.12.0esr.processed-source.tar.xz) = 243a839539dc8a2ca3f2c3ec5603895687c3ea27b65f5ba17ca915905e38720964ad0767b958b2c9747c21aa7791a7941a76b38d7276b6bc78a39c54261ec0fe +SHA512 (firefox-langpacks-115.12.0esr-20240604.tar.xz) = 896897cd8769cb4f9c87d53244132033226badf92128b64537ac4861de45bfda2697ac802613bf321f7a464cba0183aaf52cd06293934467eda8add598886b52 SHA512 (mochitest-python.tar.gz) = 089b1593068b76f4572af0086eaccf52a6a1299bfffb58593206d19bf021ae381f2380bbfeb4371586cd53706ff6dde3d240238b2caf19b96c57dfc2f4524e36 -SHA512 (cbindgen-vendor.tar.xz) = 3e7eaff088db918e95f5505e5feeb06e8b7b95cc62042a6d163a708fc76baea43d21bf49cf7e02bc64fdfc61e8d7704057dbb225098de56e110783104d166c54 -SHA512 (dump_syms-vendor.tar.xz) = 5769c052fa874a965eb8837776b01fb097e8930f45d0d0d2a93997c4fae8726184a192aee52302bde62e62897801b1463cae9283563d9d60e8b8ee80a250f2a3 -SHA512 (firefox-122.0.source.tar.xz) = 619b735c16970207f3f8fb31dd2350a5e665a802c30501c89aee4817b8b0f7f466da93c66ab238e94967587e538e6858934b18164ff312dbdbfbc3b2bf8bd824 -SHA512 (firefox-langpacks-122.0-20240119.tar.xz) = 04b5a912f0c1bfaeaf33995f491df861aa12b8134f5b2dada52649f82b5fb224c1d696c521c2665eb93813b9015bdaf71a7a0f7aee1dc6ebed1836073e9c71c8 +SHA512 (nspr-4.35.0-1.el8_1.src.rpm) = 5123a443fcc42602e31104999be339ae899eb7b1f1e2f1ea87ba4f283eb894d08ab568e421dba1df4770f23be91ff88aa6a0748bce7feef31ed88bee5bdecb2c +SHA512 (nss-3.90.0-3.el8_1.src.rpm) = 81df24bd4eda4935888170e994834f4510c20fa51079631527b195b723d8f536ec4144d4a2e5d45768aeec7c426d50d70d0a294577d18233acc07c49c8af5130 +SHA512 (nss-3.90.0-3.el9_0.src.rpm) = f321b9c1bda0b09eee564e2903023435851a4ff2e55bdd5b03012ca51be7999b18d85061f874065d0b25913721eb574f49746a3111f8f1cdd5b21268dddd8367 diff --git a/testing.sh b/testing.sh new file mode 100755 index 0000000..ef868ec --- /dev/null +++ b/testing.sh @@ -0,0 +1,260 @@ +#!/usr/bin/bash + + +function run_tests_wayland { + # usage: run-tests-wayland [test flavour] + + set -x + + RUN_XPCSHELL_TEST=1 + RUN_REFTEST=1 + RUN_MOCHITEST=1 + RUN_CRASHTEST=1 + + while (( "$#" )); do + SELECTED_TEST=$1 + if [ "$SELECTED_TEST" = "xpcshell" ] ; then + RUN_XPCSHELL_TEST=1 + elif [ "$SELECTED_TEST" = "reftest" ] ; then + RUN_REFTEST=1 + elif [ "$SELECTED_TEST" = "mochitest" ] ; then + RUN_MOCHITEST=1 + elif [ "$SELECTED_TEST" = "crashtest" ] ; then + RUN_CRASHTEST=1 + fi + shift + done + + export MACH_USE_SYSTEM_PYTHON=1 + export MOZ_NODE_PATH=/usr/bin/node + + MOCHITEST_PARAMS="--timeout 1 --chunk-by-dir 4" + TEST_DIR="test_results" + mkdir $TEST_DIR + + env | grep "DISPLAY" + + # Fix for system nss + ln -s /usr/bin/certutil objdir/dist/bin/certutil + ln -s /usr/bin/pk12util objdir/dist/bin/pk12util + + NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`" + + export MOZ_ENABLE_WAYLAND=1 + + if [ $RUN_XPCSHELL_TEST -ne 0 ] ; then + # ./mach xpcshell-test 2>&1 | cat - | tee $TEST_DIR/xpcshell + ./mach xpcshell-test --enable-webrender 2>&1 | cat - | tee $TEST_DIR/xpcshell-wr + sleep 60 + fi + + # Basic render testing + export TEST_PARAMS="--setpref reftest.ignoreWindowSize=true --setpref widget.wayland.test-workarounds.enabled=true" + #export TEST_FLAVOUR="" + #if [ $RUN_REFTEST -ne 0 ] ; then + # ./mach reftest --marionette localhost:$(($(($RANDOM))+2000)) $TEST_PARAMS 2>&1 | tee $TEST_DIR/reftest$TEST_FLAVOUR + #fi + #if [ $RUN_CRASHTEST -ne 0 ] ; then + # ./mach crashtest --marionette localhost:$(($(($RANDOM))+2000)) $TEST_PARAMS 2>&1 | tee $TEST_DIR/crashtest$TEST_FLAVOUR + #fi + #if [ $RUN_MOCHITEST -ne 0 ] ; then + # ./mach mochitest --marionette localhost:$(($(($RANDOM))+2000)) $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR + #fi + + # WebRender testing + export TEST_PARAMS="--enable-webrender $TEST_PARAMS" + export TEST_FLAVOUR="-wr" + # Use dom/base/test or dom/base/test/chrome for short version + export MOCHITEST_DIR='dom' + if [ $RUN_REFTEST -ne 0 ] ; then + ./mach reftest $TEST_PARAMS 2>&1 | tee $TEST_DIR/reftest$TEST_FLAVOUR + sleep 60 + fi + if [ $RUN_CRASHTEST -ne 0 ] ; then + ./mach crashtest $TEST_PARAMS 2>&1 | tee $TEST_DIR/crashtest$TEST_FLAVOUR + sleep 60 + fi + if [ $RUN_MOCHITEST -ne 0 ] ; then + ./mach mochitest $MOCHITEST_DIR $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR + sleep 60 + fi + + rm -f objdir/dist/bin/certutil + rm -f objdir/dist/bin/pk12util +} + +function run_tests_x11() { + set -x + + export MACH_USE_SYSTEM_PYTHON=1 + export MOZ_NODE_PATH=/usr/bin/node + export X_PARAMS="-screen 0 1600x1200x24" + export MOCHITEST_PARAMS="--timeout 1 --chunk-by-dir 4" + export TEST_DIR="test_results" + + # Fix for system nss + ln -s /usr/bin/certutil objdir/dist/bin/certutil + ln -s /usr/bin/pk12util objdir/dist/bin/pk12util + + NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`" + + # Basic render testing + export TEST_PARAMS="" + export TEST_FLAVOUR="" + #xvfb-run -s "$X_PARAMS" -n 91 ./mach xpcshell-test --sequential $TEST_PARAMS 2>&1 | cat - | tee $TEST_DIR/xpcshell + #xvfb-run -s "$X_PARAMS" -n 92 ./mach reftest --marionette localhost:$(($(($RANDOM))+2000)) $TEST_PARAMS 2>&1 | tee $TEST_DIR/reftest$TEST_FLAVOUR + #xvfb-run -s "$X_PARAMS" -n 93 ./mach crashtest --marionette localhost:$(($(($RANDOM))+2000)) $TEST_PARAMS 2>&1 | tee $TEST_DIR/crashtest$TEST_FLAVOUR + #xvfb-run -s "$X_PARAMS" -n 94 ./mach mochitest --marionette localhost:$(($(($RANDOM))+2000)) $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR + + # WebRender testing + export TEST_PARAMS="--enable-webrender $TEST_PARAMS" + export TEST_FLAVOUR="-wr" + #xvfb-run -s "$X_PARAMS" -n 95 ./mach xpcshell-test --sequential $TEST_PARAMS 2>&1 | cat - | tee $TEST_DIR/xpcshell-wr + #sleep 60 + #xvfb-run -s "$X_PARAMS" -n 96 ./mach reftest $TEST_PARAMS 2>&1 | tee $TEST_DIR/reftest$TEST_FLAVOUR + #sleep 60 + #xvfb-run -s "$X_PARAMS" -n 97 ./mach crashtest $TEST_PARAMS 2>&1 | tee $TEST_DIR/crashtest$TEST_FLAVOUR + #sleep 60 + #export DISPLAY=:0 + #./mach mochitest dom/base/test/ $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR + export DISPLAY=:98 + xvfb-run -s "$X_PARAMS" -n 98 ./mach mochitest dom/base/test/ $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR + + rm -f objdir/dist/bin/certutil + rm -f objdir/dist/bin/pk12util +} + +function run_wayland_compositor() { + # Run wayland compositor and set WAYLAND_DISPLAY env variable + set -x + + echo export DESKTOP_SESSION=gnome > $HOME/.xsessionrc + echo export XDG_CURRENT_DESKTOP=GNOME > $HOME/.xsessionrc + echo export XDG_SESSION_TYPE=wayland >> $HOME/.xsessionrc + + # Turn off the screen saver and screen locking + gsettings set org.gnome.desktop.screensaver idle-activation-enabled false + gsettings set org.gnome.desktop.screensaver lock-enabled false + gsettings set org.gnome.desktop.screensaver lock-delay 3600 + + # Disable the screen saver + # This starts the gnome-keyring-daemon with an unlocked login keyring. libsecret uses this to + # store secrets. Firefox uses libsecret to store a key that protects sensitive information like + # credit card numbers. + if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then + # if not found, launch a new one + eval `dbus-launch --sh-syntax` + fi + eval `echo '' | /usr/bin/gnome-keyring-daemon -r -d --unlock --components=secrets` + + if [ -z "$XDG_RUNTIME_DIR" ]; then + export XDG_RUNTIME_DIR=$HOME + fi + + . xvfb-run -s "-screen 0 1600x1200x24" -n 80 mutter --display=:80 --wayland --nested & + export DISPLAY=:80 + + if [ -z "$WAYLAND_DISPLAY" ] ; then + export WAYLAND_DISPLAY=wayland-0 + else + export WAYLAND_DISPLAY=wayland-1 + fi + sleep 10 + retry_count=0 + max_retries=5 + until [ $retry_count -gt $max_retries ]; do + if [ -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ]; then + retry_count=$(($max_retries + 1)) + else + retry_count=$(($retry_count + 1)) + echo "Waiting for Mutter, retry: $retry_count" + sleep 2 + fi + done + + env | grep "DISPLAY" +} + +function print_error_reftest() { + # Print reftest failures and compose them to html + + TEST_DIR="$1" + TEST_FLAVOUR="$2" + OUTPUT_FILE="failures-reftest$TEST_FLAVOUR.html" + + grep --text -e "REFTEST TEST-UNEXPECTED-PASS" -e "REFTEST TEST-UNEXPECTED-FAIL" -e "IMAGE 1 (TEST):" -e "IMAGE 2 (REFERENCE):" $TEST_DIR/reftest$TEST_FLAVOUR 2>&1 > $OUTPUT_FILE + sed -i '/REFTEST IMAGE 1/a ">' $OUTPUT_FILE + sed -i '/REFTEST IMAGE 2/a ">

' $OUTPUT_FILE + sed -i '/REFTEST TEST/a
' $OUTPUT_FILE + sed -i -e 's/^REFTEST IMAGE 1 (TEST): /&1 > failures-mochitest$TEST_FLAVOUR.txt + grep --text -e " FAIL " -e " TIMEOUT " $TEST_DIR/xpcshell$TEST_FLAVOUR 2>&1 > failures-xpcshell$TEST_FLAVOUR.txt + grep --text -e "REFTEST TEST-UNEXPECTED-PASS" -e "REFTEST TEST-UNEXPECTED-FAIL" $TEST_DIR/reftest$TEST_FLAVOUR 2>&1 > failures-reftest$TEST_FLAVOUR.txt +} + +function print_failures() { + #!/usr/bin/bash + # Analyze and print test failures + + export TEST_DIR="test_results" + + #./print-errors $TEST_DIR "" + print_errors $TEST_DIR "-wr" + #./print-error-reftest $TEST_DIR "" + print_error_reftest $TEST_DIR "-wr" +} + +function psummary() { + #!/usr/bin/bash + # Analyze and print specialized (basic/webrender) test results + + TEST_DIR=$1 + TEST_FLAVOUR=$2 + + MPASS=`grep "TEST_END: Test OK" $TEST_DIR/mochitest$TEST_FLAVOUR | wc -l` + MERR=`grep "TEST_END: Test ERROR" $TEST_DIR/mochitest$TEST_FLAVOUR | wc -l` + MUNEX=`grep "TEST-UNEXPECTED-FAIL" $TEST_DIR/mochitest$TEST_FLAVOUR | wc -l` + echo "Mochitest PASSED: $MPASS FAILED: $MERR UNEXPECTED-FAILURES: $MUNEX" + + XPCPASS=`grep --text "Expected results:" $TEST_DIR/xpcshell$TEST_FLAVOUR | cut -d ' ' -f 3` + XPCFAIL=`grep --text "Unexpected results:" $TEST_DIR/xpcshell$TEST_FLAVOUR | cut -d ' ' -f 3` + echo "XPCShell: PASSED: $XPCPASS FAILED: $XPCFAIL" + + CRPASS=`grep "REFTEST INFO | Successful:" $TEST_DIR/crashtest$TEST_FLAVOUR | cut -d ' ' -f 5` + CRFAIL=`grep "^REFTEST INFO | Unexpected:" $TEST_DIR/crashtest$TEST_FLAVOUR | cut -d ' ' -f 5` + echo "Crashtest: PASSED: $CRPASS FAILED: $CRFAIL" + + RFPASS=`grep --text "REFTEST INFO | Successful:" $TEST_DIR/reftest$TEST_FLAVOUR | cut -d ' ' -f 5` + RFUN=`grep --text "^REFTEST INFO | Unexpected:" $TEST_DIR/reftest$TEST_FLAVOUR | cut -d ' ' -f 5` + RFKNOWN=`grep --text "REFTEST INFO | Known problems:" $TEST_DIR/reftest$TEST_FLAVOUR | cut -d ' ' -f 6` + echo "Reftest: PASSED: $RFPASS FAILED: $RFUN Known issues: $RFKNOWN" +} + +function print_results() { + #!/usr/bin/bash + # Analyze and print general test results + + export TEST_DIR="test_results" + + echo "Test results" + #echo "Basic compositor" + #./psummary $TEST_DIR "" + echo "WebRender" + psummary $TEST_DIR "-wr" +} + +set -x +first=$1 +shift +$first $* +