Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Mar 2024 20:44:31 GMT
From:      Jesper Schmitz Mouridsen <jsm@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 860821402c33 - main - www/librewolf: Update to 123.0-1
Message-ID:  <202403222044.42MKiVuv034367@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by jsm:

URL: https://cgit.FreeBSD.org/ports/commit/?id=860821402c33fcba31564fbd99352783ce88994d

commit 860821402c33fcba31564fbd99352783ce88994d
Author:     Jesper Schmitz Mouridsen <jsm@FreeBSD.org>
AuthorDate: 2024-03-22 20:27:56 +0000
Commit:     Jesper Schmitz Mouridsen <jsm@FreeBSD.org>
CommitDate: 2024-03-22 20:43:17 +0000

    www/librewolf:  Update to 123.0-1
    
     switch to unity-menubar from archlinux,
     since it is not currently maintained by upstream.
    
    PR:     277807
    Approved by:    freebsd@sysctl.cz (maintainer)
---
 www/librewolf/Makefile                             |    17 +-
 www/librewolf/distinfo                             |     8 +-
 www/librewolf/files/patch-bug1559213               |    37 +-
 www/librewolf/files/patch-bug1680982               |   388 -
 www/librewolf/files/patch-bug1874059               |    25 +
 www/librewolf/files/patch-bug1876366               |   188 +
 www/librewolf/files/patch-bug1878010               |    30 +
 www/librewolf/files/patch-bug847568                |    59 +-
 .../files/patch-dom_media_flac_FlacDecoder.cpp     |     2 +-
 ...edia_webrtc_third__party__build_webrtc.mozbuild |    27 +
 www/librewolf/files/patch-libwebrtc-generated      | 19245 +++++++++++--------
 www/librewolf/files/patch-mozglue_misc_SSE.h       |     2 +-
 www/librewolf/files/patch-rust-1.73.0              |    83 -
 ...oolkit_components_processtools_procinfo__bsd.c} |     0
 www/librewolf/files/patch-toolkit_xre_glxtest.cpp  |    17 -
 .../files/patch-toolkit_xre_nsXREDirProvider.cpp   |    11 +
 www/librewolf/files/patch-wayland-proxy            |    15 +
 www/librewolf/files/patch-widget_gtk_nsMenuBar.cpp |    11 -
 .../files/patch-widget_gtk_nsMenuObject.cpp        |    66 -
 www/librewolf/files/unity-menubar.patch            |  5268 +++++
 20 files changed, 16863 insertions(+), 8636 deletions(-)

diff --git a/www/librewolf/Makefile b/www/librewolf/Makefile
index 52946e156a5b..2ee7d4be13e4 100644
--- a/www/librewolf/Makefile
+++ b/www/librewolf/Makefile
@@ -1,13 +1,10 @@
 PORTNAME=	librewolf
-DISTVERSION=	117.0.1-1
-PORTREVISION=	7
+DISTVERSION=	123.0.1-1
 CATEGORIES=	www wayland
 MASTER_SITES=	https://gitlab.com/api/v4/projects/32320088/packages/generic/librewolf-source/${DISTVERSION:R}-1/
 DISTNAME=	${PORTNAME}-${DISTVERSION:R}-1.source.
 EXTRACT_SUFX=	tar.gz
 
-PATCH_SITES=	https://gitlab.com/librewolf-community/browser/source/-/raw/5a211f7bad8dcf188a96b408cc143082df8d30a8/
-PATCHFILES=	patches/unity_kde/unity-menubar.patch?inline=false:-p1
 MAINTAINER=	freebsd@sysctl.cz
 COMMENT=	Custom version of Firefox, focused on privacy, security and freedom
 WWW=		https://librewolf.net/
@@ -16,20 +13,22 @@ LICENSE=	MPL20
 LICENSE_FILE=	${WRKSRC}/LICENSE
 
 BUILD_DEPENDS=	nspr>=4.32:devel/nspr \
-		nss>=3.84:security/nss \
-		icu>=71.1:devel/icu \
+		nss>=3.95:security/nss \
+		icu>=73.1:devel/icu \
 		libevent>=2.1.8:devel/libevent \
-		harfbuzz>=4.4.1:print/harfbuzz \
+		harfbuzz>=8.3.0:print/harfbuzz \
 		graphite2>=1.3.14:graphics/graphite2 \
-		png>=1.6.37:graphics/png \
+		png>=1.6.39:graphics/png \
 		dav1d>=1.0.0:multimedia/dav1d \
-		libvpx>=1.12.0:multimedia/libvpx \
+		libvpx>=1.14.0:multimedia/libvpx \
 		${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \
 		v4l_compat>0:multimedia/v4l_compat \
 		autoconf2.13:devel/autoconf2.13 \
 		nasm:devel/nasm \
 		yasm:devel/yasm \
 		zip:archivers/zip
+EXTRA_PATCHES=	${FILESDIR}/unity-menubar.patch:-p1
+
 
 .include "${.CURDIR}/../../www/firefox/Makefile.options"
 
diff --git a/www/librewolf/distinfo b/www/librewolf/distinfo
index ff9232ec3d47..fb7179e55c47 100644
--- a/www/librewolf/distinfo
+++ b/www/librewolf/distinfo
@@ -1,5 +1,3 @@
-TIMESTAMP = 1696616618
-SHA256 (librewolf-117.0-1.source.tar.gz) = 446e9479547dceda58cbcdc2f9f503539086ddb193c8b1206b7c736cd56e44c3
-SIZE (librewolf-117.0-1.source.tar.gz) = 903353725
-SHA256 (patches/unity_kde/unity-menubar.patch?inline=false) = ff6e224ed0eb3c9d4c3ae92acd9cd04d750e0bcc6be1fa64ccc1317abcc13711
-SIZE (patches/unity_kde/unity-menubar.patch?inline=false) = 163548
+TIMESTAMP = 1710878981
+SHA256 (librewolf-123.0-1.source.tar.gz) = e3209efbddd0c0a79bc62cb9c5cc57b816816bf32a24e8e476e07879c2791314
+SIZE (librewolf-123.0-1.source.tar.gz) = 965610712
diff --git a/www/librewolf/files/patch-bug1559213 b/www/librewolf/files/patch-bug1559213
index 516328d61aca..ae11fb38f989 100644
--- a/www/librewolf/files/patch-bug1559213
+++ b/www/librewolf/files/patch-bug1559213
@@ -11,10 +11,10 @@ Date:   Thu Jun 13 11:53:00 2019 -0700
  4 files changed, 34 insertions(+), 3 deletions(-)
 
 diff --git config/external/moz.build config/external/moz.build
-index a0877c9d717e..5caa2036e0ec 100644
+index 2fc8df57992e..63d18e50a961 100644
 --- config/external/moz.build
 +++ config/external/moz.build
-@@ -45,8 +45,9 @@ if not CONFIG["MOZ_SYSTEM_LIBVPX"]:
+@@ -40,8 +40,9 @@ if not CONFIG["MOZ_SYSTEM_LIBVPX"]:
      external_dirs += ["media/libvpx"]
  
  if CONFIG["MOZ_AV1"]:
@@ -26,30 +26,11 @@ index a0877c9d717e..5caa2036e0ec 100644
  
  if not CONFIG["MOZ_SYSTEM_PNG"]:
      external_dirs += ["media/libpng"]
-diff --git config/system-headers.mozbuild config/system-headers.mozbuild
-index d9489c8f15e4..4d2f15e18c1c 100644
---- config/system-headers.mozbuild
-+++ config/system-headers.mozbuild
-@@ -1291,6 +1291,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_LIBVPX']:
-     system_headers += [
-         'vpx_mem/vpx_mem.h',
 diff --git dom/media/platforms/moz.build dom/media/platforms/moz.build
-index c71f22a22eee..efbd523b1225 100644
+index 5c6e25b3980b..ce99ebfb6d3f 100644
 --- dom/media/platforms/moz.build
 +++ dom/media/platforms/moz.build
-@@ -80,6 +80,11 @@ if CONFIG["MOZ_AV1"]:
+@@ -81,6 +81,11 @@ if CONFIG["MOZ_AV1"]:
          "agnostic/AOMDecoder.cpp",
          "agnostic/DAV1DDecoder.cpp",
      ]
@@ -62,10 +43,10 @@ index c71f22a22eee..efbd523b1225 100644
  if CONFIG["MOZ_OMX"]:
      EXPORTS += [
 diff --git media/ffvpx/libavcodec/moz.build media/ffvpx/libavcodec/moz.build
-index 5675c28234a1..56344e5e4c98 100644
+index 761fc8cf4cd9..793a5b8697a8 100644
 --- media/ffvpx/libavcodec/moz.build
 +++ media/ffvpx/libavcodec/moz.build
-@@ -109,10 +109,14 @@ if not CONFIG['MOZ_FFVPX_AUDIOONLY']:
+@@ -120,10 +120,14 @@ if not CONFIG['MOZ_FFVPX_AUDIOONLY']:
          'vp9recon.c',
          'vpx_rac.c',
      ]
@@ -85,10 +66,10 @@ index 5675c28234a1..56344e5e4c98 100644
          LOCAL_INCLUDES += ['/media/mozva']
          SOURCES += [
 diff --git toolkit/moz.configure toolkit/moz.configure
-index 2e56fa46ce59..23e30935c4bc 100644
+index f93a5d64fec8..814357f4e979 100644
 --- toolkit/moz.configure
 +++ toolkit/moz.configure
-@@ -745,7 +745,23 @@ def av1(value):
+@@ -744,7 +744,23 @@ def av1(value):
          return True
  
  
@@ -113,7 +94,7 @@ index 2e56fa46ce59..23e30935c4bc 100644
  def dav1d_asm(target):
      if target.cpu in ("aarch64", "x86", "x86_64"):
          return True
-@@ -761,6 +777,7 @@ set_config("MOZ_DAV1D_ASM", dav1d_asm)
+@@ -760,6 +776,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)
diff --git a/www/librewolf/files/patch-bug1680982 b/www/librewolf/files/patch-bug1680982
deleted file mode 100644
index c9fc2344bb44..000000000000
--- a/www/librewolf/files/patch-bug1680982
+++ /dev/null
@@ -1,388 +0,0 @@
-commit 3204512f58a1
-Author: Greg V <greg@unrelenting.technology>
-Date:   Sun Dec 6 22:07:00 2020 +0000
-
-    Bug 1680982 - Use evdev instead of the Linux legacy joystick API for gamepads
-    
-    Using evdev is a prerequisite for adding rumble (haptic feedback) and LED support.
-    
-    - BTN_GAMEPAD semantic buttons are interpreted directly,
-    since all kernel drivers are supposed to use them correctly:
-    https://www.kernel.org/doc/html/latest/input/gamepad.html
-    - BTN_JOYSTICK legacy style numbered buttons use the model specific remappers
-    - we support even strange devices that combine both styles in one device
-    - the Linux gamepad module is enabled on FreeBSD and DragonFly, because
-    these kernels provide evdev, and libudev-devd provides enough of libudev
-    (evdev headers are provided by the devel/evdev-proto package)
-    
-    Differential Revision: https://phabricator.services.mozilla.com/D98868
----
- dom/gamepad/linux/LinuxGamepad.cpp | 262 ++++++++++++++++++++++++++++++++-----
- dom/gamepad/moz.build              |   2 +-
- 2 files changed, 229 insertions(+), 35 deletions(-)
-
-diff --git dom/gamepad/linux/LinuxGamepad.cpp dom/gamepad/linux/LinuxGamepad.cpp
-index deee47b9d267..31f0aad7ae4a 100644
---- dom/gamepad/linux/LinuxGamepad.cpp
-+++ dom/gamepad/linux/LinuxGamepad.cpp
-@@ -5,15 +5,16 @@
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- /*
-- * LinuxGamepadService: A Linux backend for the GamepadService.
-- * Derived from the kernel documentation at
-- * http://www.kernel.org/doc/Documentation/input/joystick-api.txt
-+ * LinuxGamepadService: An evdev backend for the GamepadService.
-+ *
-+ * Ref: https://www.kernel.org/doc/html/latest/input/gamepad.html
-  */
- #include <algorithm>
-+#include <unordered_map>
- #include <cstddef>
- 
- #include <glib.h>
--#include <linux/joystick.h>
-+#include <linux/input.h>
- #include <stdio.h>
- #include <stdint.h>
- #include <sys/ioctl.h>
-@@ -21,10 +22,14 @@
- #include "nscore.h"
- #include "mozilla/dom/GamepadHandle.h"
- #include "mozilla/dom/GamepadPlatformService.h"
-+#include "mozilla/dom/GamepadRemapping.h"
- #include "mozilla/Tainting.h"
- #include "mozilla/UniquePtr.h"
- #include "udev.h"
- 
-+#define LONG_BITS (sizeof(long) * 8)
-+#define NLONGS(x) (((x) + LONG_BITS - 1) / LONG_BITS)
-+
- namespace {
- 
- using namespace mozilla::dom;
-@@ -36,19 +41,29 @@ using mozilla::udev_list_entry;
- using mozilla::udev_monitor;
- using mozilla::UniquePtr;
- 
--static const float kMaxAxisValue = 32767.0;
--static const char kJoystickPath[] = "/dev/input/js";
-+static const char kEvdevPath[] = "/dev/input/event";
-+
-+static inline bool TestBit(const unsigned long* arr, int bit) {
-+  return !!(arr[bit / LONG_BITS] & (1LL << (bit % LONG_BITS)));
-+}
-+
-+static inline double ScaleAxis(const input_absinfo& info, int value) {
-+  return 2.0 * (value - info.minimum) / (double)(info.maximum - info.minimum) -
-+         1.0;
-+}
- 
- // TODO: should find a USB identifier for each device so we can
- // provide something that persists across connect/disconnect cycles.
--typedef struct {
-+struct Gamepad {
-   GamepadHandle handle;
--  guint source_id;
--  int numAxes;
--  int numButtons;
--  char idstring[256];
--  char devpath[PATH_MAX];
--} Gamepad;
-+  RefPtr<GamepadRemapper> remapper = nullptr;
-+  guint source_id = UINT_MAX;
-+  char idstring[256] = {0};
-+  char devpath[PATH_MAX] = {0};
-+  uint8_t key_map[KEY_MAX] = {0};
-+  uint8_t abs_map[ABS_MAX] = {0};
-+  std::unordered_map<uint16_t, input_absinfo> abs_info;
-+};
- 
- class LinuxGamepadService {
-  public:
-@@ -66,7 +81,7 @@ class LinuxGamepadService {
-   bool is_gamepad(struct udev_device* dev);
-   void ReadUdevChange();
- 
--  // handler for data from /dev/input/jsN
-+  // handler for data from /dev/input/eventN
-   static gboolean OnGamepadData(GIOChannel* source, GIOCondition condition,
-                                 gpointer data);
- 
-@@ -114,8 +129,14 @@ void LinuxGamepadService::AddDevice(struct udev_device* dev) {
-   g_io_channel_set_encoding(channel, nullptr, nullptr);
-   g_io_channel_set_buffered(channel, FALSE);
-   int fd = g_io_channel_unix_get_fd(channel);
-+
-+  struct input_id id {};
-+  if (ioctl(fd, EVIOCGID, &id) == -1) {
-+    return;
-+  }
-+
-   char name[128];
--  if (ioctl(fd, JSIOCGNAME(sizeof(name)), &name) == -1) {
-+  if (ioctl(fd, EVIOCGNAME(sizeof(name)), &name) == -1) {
-     strcpy(name, "unknown");
-   }
-   const char* vendor_id =
-@@ -131,20 +152,86 @@ void LinuxGamepadService::AddDevice(struct udev_device* dev) {
-       model_id = mUdev.udev_device_get_sysattr_value(parent, "id/product");
-     }
-   }
-+  if (!vendor_id && id.vendor != 0) {
-+    vendor_id = (const char*)alloca(5);
-+    snprintf((char*)vendor_id, 5, "%04x", id.vendor);
-+  }
-+  if (!model_id && id.product != 0) {
-+    model_id = (const char*)alloca(5);
-+    snprintf((char*)model_id, 5, "%04x", id.product);
-+  }
-   snprintf(gamepad->idstring, sizeof(gamepad->idstring), "%s-%s-%s",
-            vendor_id ? vendor_id : "unknown", model_id ? model_id : "unknown",
-            name);
- 
-   char numAxes = 0, numButtons = 0;
--  ioctl(fd, JSIOCGAXES, &numAxes);
--  gamepad->numAxes = numAxes;
--  ioctl(fd, JSIOCGBUTTONS, &numButtons);
--  gamepad->numButtons = numButtons;
-+  unsigned long key_bits[NLONGS(KEY_CNT)] = {0};
-+  unsigned long abs_bits[NLONGS(ABS_CNT)] = {0};
-+  ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(key_bits)), key_bits);
-+  ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(abs_bits)), abs_bits);
-+
-+  /* Here, we try to support even strange cases where proper semantic
-+   * BTN_GAMEPAD button are combined with arbitrary extra buttons. */
-+  for (uint16_t i = BTN_JOYSTICK; i < KEY_MAX; i++) {
-+    /* Do not map semantic buttons, they are handled directly */
-+    if (i == BTN_GAMEPAD) {
-+      i = BTN_THUMBR + 1;
-+      continue;
-+    }
-+    if (i == BTN_DPAD_UP) {
-+      i = BTN_DPAD_RIGHT + 1;
-+      continue;
-+    }
-+    if (TestBit(key_bits, i)) {
-+      gamepad->key_map[i] = numButtons++;
-+    }
-+  }
-+  for (uint16_t i = 0; i < BTN_JOYSTICK; i++) {
-+    if (TestBit(key_bits, i)) {
-+      gamepad->key_map[i] = numButtons++;
-+    }
-+  }
-+  for (uint16_t i = BTN_GAMEPAD; i <= BTN_THUMBR; i++) {
-+    /* But if any semantic event exists, count them all */
-+    if (TestBit(key_bits, i)) {
-+      numButtons += BUTTON_INDEX_COUNT;
-+      break;
-+    }
-+  }
-+  for (uint16_t i = 0; i < ABS_MAX; ++i) {
-+    if (TestBit(abs_bits, i)) {
-+      gamepad->abs_info.emplace(i, input_absinfo{});
-+      if (ioctl(fd, EVIOCGABS(i), &gamepad->abs_info[i]) < 0) {
-+        continue;
-+      }
-+      if (gamepad->abs_info[i].minimum == gamepad->abs_info[i].maximum) {
-+        gamepad->abs_info.erase(i);
-+        continue;
-+      }
-+      gamepad->abs_map[i] = numAxes++;
-+    }
-+  }
-+
-+  if (numAxes == 0) {
-+    NS_WARNING("Gamepad with zero axes detected?");
-+  }
-+  if (numButtons == 0) {
-+    NS_WARNING("Gamepad with zero buttons detected?");
-+  }
-+
-+  bool defaultRemapper = false;
-+  RefPtr<GamepadRemapper> remapper =
-+      GetGamepadRemapper(id.vendor, id.product, defaultRemapper);
-+  MOZ_ASSERT(remapper);
-+  remapper->SetAxisCount(numAxes);
-+  remapper->SetButtonCount(numButtons);
- 
-   gamepad->handle = service->AddGamepad(
--      gamepad->idstring, mozilla::dom::GamepadMappingType::_empty,
--      mozilla::dom::GamepadHand::_empty, gamepad->numButtons, gamepad->numAxes,
--      0, 0, 0);  // TODO: Bug 680289, implement gamepad haptics for Linux.
-+      gamepad->idstring, remapper->GetMappingType(), GamepadHand::_empty,
-+      remapper->GetButtonCount(), remapper->GetAxisCount(), 0,
-+      remapper->GetLightIndicatorCount(), remapper->GetTouchEventCount());
-+  gamepad->remapper = remapper.forget();
-+  // TODO: Bug 680289, implement gamepad haptics for Linux.
-   // TODO: Bug 1523355, implement gamepad lighindicator and touch for Linux.
- 
-   gamepad->source_id =
-@@ -257,7 +344,7 @@ bool LinuxGamepadService::is_gamepad(struct udev_device* dev) {
-   if (!devpath) {
-     return false;
-   }
--  if (strncmp(kJoystickPath, devpath, sizeof(kJoystickPath) - 1) != 0) {
-+  if (strncmp(kEvdevPath, devpath, sizeof(kEvdevPath) - 1) != 0) {
-     return false;
-   }
- 
-@@ -292,7 +379,7 @@ gboolean LinuxGamepadService::OnGamepadData(GIOChannel* source,
-   if (condition & G_IO_ERR || condition & G_IO_HUP) return FALSE;
- 
-   while (true) {
--    struct js_event event;
-+    struct input_event event {};
-     gsize count;
-     GError* err = nullptr;
-     if (g_io_channel_read_chars(source, (gchar*)&event, sizeof(event), &count,
-@@ -301,18 +388,125 @@ gboolean LinuxGamepadService::OnGamepadData(GIOChannel* source,
-       break;
-     }
- 
--    // TODO: store device state?
--    if (event.type & JS_EVENT_INIT) {
--      continue;
--    }
--
-     switch (event.type) {
--      case JS_EVENT_BUTTON:
--        service->NewButtonEvent(gamepad->handle, event.number, !!event.value);
-+      case EV_KEY:
-+        switch (event.code) {
-+          /* The gamepad events are meaningful, and according to
-+           * https://www.kernel.org/doc/html/latest/input/gamepad.html
-+           * "No other devices, that do not look/feel like a gamepad, shall
-+           * report these events" */
-+          case BTN_SOUTH:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_PRIMARY,
-+                                    !!event.value);
-+            break;
-+          case BTN_EAST:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_SECONDARY,
-+                                    !!event.value);
-+            break;
-+          case BTN_NORTH:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_QUATERNARY,
-+                                    !!event.value);
-+            break;
-+          case BTN_WEST:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_TERTIARY,
-+                                    !!event.value);
-+            break;
-+          case BTN_TL:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_LEFT_SHOULDER,
-+                                    !!event.value);
-+            break;
-+          case BTN_TR:
-+            service->NewButtonEvent(gamepad->handle,
-+                                    BUTTON_INDEX_RIGHT_SHOULDER, !!event.value);
-+            break;
-+          case BTN_TL2:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_LEFT_TRIGGER,
-+                                    !!event.value);
-+            break;
-+          case BTN_TR2:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_RIGHT_TRIGGER,
-+                                    !!event.value);
-+            break;
-+          case BTN_SELECT:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_BACK_SELECT,
-+                                    !!event.value);
-+            break;
-+          case BTN_START:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_START,
-+                                    !!event.value);
-+            break;
-+          case BTN_MODE:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_META,
-+                                    !!event.value);
-+            break;
-+          case BTN_THUMBL:
-+            service->NewButtonEvent(
-+                gamepad->handle, BUTTON_INDEX_LEFT_THUMBSTICK, !!event.value);
-+            break;
-+          case BTN_THUMBR:
-+            service->NewButtonEvent(
-+                gamepad->handle, BUTTON_INDEX_RIGHT_THUMBSTICK, !!event.value);
-+            break;
-+          case BTN_DPAD_UP:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_DPAD_UP,
-+                                    !!event.value);
-+            break;
-+          case BTN_DPAD_DOWN:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_DPAD_DOWN,
-+                                    !!event.value);
-+            break;
-+          case BTN_DPAD_LEFT:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_DPAD_LEFT,
-+                                    !!event.value);
-+            break;
-+          case BTN_DPAD_RIGHT:
-+            service->NewButtonEvent(gamepad->handle, BUTTON_INDEX_DPAD_RIGHT,
-+                                    !!event.value);
-+            break;
-+          default:
-+            /* For non-gamepad events, this is the "anything goes" numbered
-+             * handling that should be handled with remappers. */
-+            gamepad->remapper->RemapButtonEvent(
-+                gamepad->handle, gamepad->key_map[event.code], !!event.value);
-+            break;
-+        }
-         break;
--      case JS_EVENT_AXIS:
--        service->NewAxisMoveEvent(gamepad->handle, event.number,
--                                  ((float)event.value) / kMaxAxisValue);
-+      case EV_ABS:
-+        if (!gamepad->abs_info.count(event.code)) continue;
-+        switch (event.code) {
-+          case ABS_HAT0X:
-+            service->NewButtonEvent(
-+                gamepad->handle, BUTTON_INDEX_DPAD_LEFT,
-+                AxisNegativeAsButton(
-+                    ScaleAxis(gamepad->abs_info[event.code], event.value)));
-+            service->NewButtonEvent(
-+                gamepad->handle, BUTTON_INDEX_DPAD_RIGHT,
-+                AxisPositiveAsButton(
-+                    ScaleAxis(gamepad->abs_info[event.code], event.value)));
-+            break;
-+          case ABS_HAT0Y:
-+            service->NewButtonEvent(
-+                gamepad->handle, BUTTON_INDEX_DPAD_UP,
-+                AxisNegativeAsButton(
-+                    ScaleAxis(gamepad->abs_info[event.code], event.value)));
-+            service->NewButtonEvent(
-+                gamepad->handle, BUTTON_INDEX_DPAD_DOWN,
-+                AxisPositiveAsButton(
-+                    ScaleAxis(gamepad->abs_info[event.code], event.value)));
-+            break;
-+          case ABS_HAT1X:
-+          case ABS_HAT1Y:
-+          case ABS_HAT2X:
-+          case ABS_HAT2Y:
-+          case ABS_HAT3X:
-+          case ABS_HAT3Y:
-+            break;
-+          default:
-+            gamepad->remapper->RemapAxisMoveEvent(
-+                gamepad->handle, gamepad->abs_map[event.code],
-+                ScaleAxis(gamepad->abs_info[event.code], event.value));
-+            break;
-+        }
-         break;
-     }
-   }
-diff --git dom/gamepad/moz.build dom/gamepad/moz.build
-index 5f55d5a95e96..544b7f927736 100644
---- dom/gamepad/moz.build
-+++ dom/gamepad/moz.build
-@@ -59,7 +59,7 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":
-     UNIFIED_SOURCES += ["windows/WindowsGamepad.cpp"]
- elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "android":
-     UNIFIED_SOURCES += ["android/AndroidGamepad.cpp"]
--elif CONFIG["OS_ARCH"] == "Linux":
-+elif CONFIG["OS_ARCH"] in ("Linux", "FreeBSD", "DragonFly"):
-     UNIFIED_SOURCES += ["linux/LinuxGamepad.cpp"]
- else:
-     UNIFIED_SOURCES += ["fallback/FallbackGamepad.cpp"]
diff --git a/www/librewolf/files/patch-bug1874059 b/www/librewolf/files/patch-bug1874059
new file mode 100644
index 000000000000..3fa954ef9def
--- /dev/null
+++ b/www/librewolf/files/patch-bug1874059
@@ -0,0 +1,25 @@
+commit 56c888446600991803fd92d668349101ad4bf160
+Author: Christoph Moench-Tegeder <cmt@burggraben.net>
+Date:   Tue Feb 6 22:51:27 2024 +0100
+
+    switch to -fvisibility flags
+    
+    this fixes linkage with llvm18 (which does not like the former
+    approach via the #pragma in gcc_hidden.h
+    
+    PR: 276746
+    Submitted by: dim@
+
+diff --git build/moz.configure/toolchain.configure build/moz.configure/toolchain.configure
+index d08b748db250..4696f69153f6 100644
+--- build/moz.configure/toolchain.configure
++++ build/moz.configure/toolchain.configure
+@@ -2186,7 +2186,7 @@ set_define("_LIBCPP_HIDE_FROM_ABI", libcxx_override_visibility.hide_from_abi)
+ @depends(target, build_environment)
+ def visibility_flags(target, env):
+     if target.os != "WINNT":
+-        if target.kernel == "Darwin":
++        if target.kernel == "Darwin" or target.kernel == "FreeBSD":
+             return ("-fvisibility=hidden", "-fvisibility-inlines-hidden")
+         return (
+             "-I%s/system_wrappers" % os.path.join(env.dist),
diff --git a/www/librewolf/files/patch-bug1876366 b/www/librewolf/files/patch-bug1876366
new file mode 100644
index 000000000000..a6f39ffabab8
--- /dev/null
+++ b/www/librewolf/files/patch-bug1876366
@@ -0,0 +1,188 @@
+commit 54d21b7398dc1a8ff22a987c660d400347b144a9
+Author: Christoph Moench-Tegeder <cmt@burggraben.net>
+Date:   Sun Feb 11 19:11:15 2024 +0100
+
+    Bug 1876366: many X11 cursors stopped working
+    
+    revert switch to newer gdk interface, as it broke cursor shape
+    switching and living with the default cursor only is no fun.
+    
+    Revert "Bug 1872961 [Linux] Use pointer cursor for hyperlinks r=emilio"
+    
+    This reverts commit 0574d0cdc438e4b0ce588f1652af802a0357f255.
+    
+    Revert "Bug 1871863 - Port from GdkCursorType to gdk_cursor_new_from_name. r=rmader,stransky"
+    
+    This reverts commit 5dfa42970a9577f0ac4e0992d9ec58c691e9bef6.
+
+diff --git widget/gtk/nsWindow.cpp widget/gtk/nsWindow.cpp
+index a011dcc51fdb..28100db36d89 100644
+--- widget/gtk/nsWindow.cpp
++++ widget/gtk/nsWindow.cpp
+@@ -7797,53 +7797,61 @@ static GdkCursor* get_gtk_cursor(nsCursor aCursor) {
+ 
+   GdkDisplay* defaultDisplay = gdk_display_get_default();
+ 
++  // The strategy here is to use standard GDK cursors, and, if not available,
++  // load by standard name with gdk_cursor_new_from_name.
++  // Spec is here: http://www.freedesktop.org/wiki/Specifications/cursor-spec/
+   switch (aCursor) {
+     case eCursor_standard:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "default");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_LEFT_PTR);
+       break;
+     case eCursor_wait:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "wait");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_WATCH);
+       break;
+     case eCursor_select:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "text");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_XTERM);
+       break;
+     case eCursor_hyperlink:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "pointer");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_HAND2);
+       break;
+     case eCursor_n_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "n-resize");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_TOP_SIDE);
+       break;
+     case eCursor_s_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "s-resize");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_BOTTOM_SIDE);
+       break;
+     case eCursor_w_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "w-resize");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_LEFT_SIDE);
+       break;
+     case eCursor_e_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "e-resize");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_RIGHT_SIDE);
+       break;
+     case eCursor_nw_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "nw-resize");
++      gdkcursor =
++          gdk_cursor_new_for_display(defaultDisplay, GDK_TOP_LEFT_CORNER);
+       break;
+     case eCursor_se_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "se-resize");
++      gdkcursor =
++          gdk_cursor_new_for_display(defaultDisplay, GDK_BOTTOM_RIGHT_CORNER);
+       break;
+     case eCursor_ne_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "ne-resize");
++      gdkcursor =
++          gdk_cursor_new_for_display(defaultDisplay, GDK_TOP_RIGHT_CORNER);
+       break;
+     case eCursor_sw_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "sw-resize");
++      gdkcursor =
++          gdk_cursor_new_for_display(defaultDisplay, GDK_BOTTOM_LEFT_CORNER);
+       break;
+     case eCursor_crosshair:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "crosshair");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_CROSSHAIR);
+       break;
+     case eCursor_move:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "move");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_FLEUR);
+       break;
+     case eCursor_help:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "help");
++      gdkcursor =
++          gdk_cursor_new_for_display(defaultDisplay, GDK_QUESTION_ARROW);
+       break;
+-    case eCursor_copy:
++    case eCursor_copy:  // CSS3
+       gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "copy");
+       if (!gdkcursor) newType = MOZ_CURSOR_COPY;
+       break;
+@@ -7856,14 +7864,18 @@ static GdkCursor* get_gtk_cursor(nsCursor aCursor) {
+       if (!gdkcursor) newType = MOZ_CURSOR_CONTEXT_MENU;
+       break;
+     case eCursor_cell:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "cell");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_PLUS);
+       break;
++    // Those two aren’t standardized. Trying both KDE’s and GNOME’s names
+     case eCursor_grab:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "grab");
++      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "openhand");
+       if (!gdkcursor) newType = MOZ_CURSOR_HAND_GRAB;
+       break;
+     case eCursor_grabbing:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "grabbing");
++      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "closedhand");
++      if (!gdkcursor) {
++        gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "grabbing");
++      }
+       if (!gdkcursor) newType = MOZ_CURSOR_HAND_GRABBING;
+       break;
+     case eCursor_spinning:
+@@ -7880,6 +7892,9 @@ static GdkCursor* get_gtk_cursor(nsCursor aCursor) {
+       break;
+     case eCursor_not_allowed:
+       gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "not-allowed");
++      if (!gdkcursor) {  // nonstandard, yet common
++        gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "crossed_circle");
++      }
+       if (!gdkcursor) newType = MOZ_CURSOR_NOT_ALLOWED;
+       break;
+     case eCursor_no_drop:
+@@ -7900,35 +7915,46 @@ static GdkCursor* get_gtk_cursor(nsCursor aCursor) {
+       }
+       break;
+     case eCursor_all_scroll:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "move");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_FLEUR);
+       break;
+     case eCursor_nesw_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "nesw-resize");
++      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "size_bdiag");
+       if (!gdkcursor) newType = MOZ_CURSOR_NESW_RESIZE;
+       break;
+     case eCursor_nwse_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "nwse-resize");
++      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "size_fdiag");
+       if (!gdkcursor) newType = MOZ_CURSOR_NWSE_RESIZE;
+       break;
+     case eCursor_ns_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "ns-resize");
++      gdkcursor =
++          gdk_cursor_new_for_display(defaultDisplay, GDK_SB_V_DOUBLE_ARROW);
+       break;
+     case eCursor_ew_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "ew-resize");
++      gdkcursor =
++          gdk_cursor_new_for_display(defaultDisplay, GDK_SB_H_DOUBLE_ARROW);
+       break;
++    // Here, two better fitting cursors exist in some cursor themes. Try those
++    // first
+     case eCursor_row_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "row-resize");
++      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "split_v");
++      if (!gdkcursor) {
++        gdkcursor =
++            gdk_cursor_new_for_display(defaultDisplay, GDK_SB_V_DOUBLE_ARROW);
++      }
+       break;
+     case eCursor_col_resize:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "col-resize");
++      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "split_h");
++      if (!gdkcursor) {
++        gdkcursor =
++            gdk_cursor_new_for_display(defaultDisplay, GDK_SB_H_DOUBLE_ARROW);
++      }
+       break;
+     case eCursor_none:
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "none");
+-      if (!gdkcursor) newType = MOZ_CURSOR_NONE;
++      newType = MOZ_CURSOR_NONE;
+       break;
+     default:
+       NS_ASSERTION(aCursor, "Invalid cursor type");
+-      gdkcursor = gdk_cursor_new_from_name(defaultDisplay, "default");
++      gdkcursor = gdk_cursor_new_for_display(defaultDisplay, GDK_LEFT_PTR);
+       break;
+   }
+ 
diff --git a/www/librewolf/files/patch-bug1878010 b/www/librewolf/files/patch-bug1878010
new file mode 100644
index 000000000000..e247f2d95d7b
--- /dev/null
+++ b/www/librewolf/files/patch-bug1878010
@@ -0,0 +1,30 @@
+commit fa2a8be440397b623eab7a414c5685932176ef03
+Author: Andreas Pehrson <apehrson@mozilla.com>
+Date:   Fri Feb 2 18:43:54 2024 +0000
+
+    Bug 1878010 - Fix webrtc::VideoCaptureFactory for BSD. r=grulja,gaston,webrtc-reviewers,mjf
+    
+    Differential Revision: https://phabricator.services.mozilla.com/D200427
+
+diff --git third_party/libwebrtc/modules/video_capture/video_capture_factory.cc third_party/libwebrtc/modules/video_capture/video_capture_factory.cc
+index e085ac2df8a0..2790fbbe1cba 100644
+--- third_party/libwebrtc/modules/video_capture/video_capture_factory.cc
++++ third_party/libwebrtc/modules/video_capture/video_capture_factory.cc
+@@ -24,7 +24,7 @@ rtc::scoped_refptr<VideoCaptureModule> VideoCaptureFactory::Create(
+     const char* deviceUniqueIdUTF8) {
+ // This is only implemented on pure Linux and WEBRTC_LINUX is defined for
+ // Android as well
+-#if !defined(WEBRTC_LINUX) || defined(WEBRTC_ANDROID)
++#if (!defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)) || defined(WEBRTC_ANDROID)
+   return nullptr;
+ #else
+   return videocapturemodule::VideoCaptureImpl::Create(options,
+@@ -40,7 +40,7 @@ VideoCaptureModule::DeviceInfo* VideoCaptureFactory::CreateDeviceInfo(
+     VideoCaptureOptions* options) {
+ // This is only implemented on pure Linux and WEBRTC_LINUX is defined for
+ // Android as well
+-#if !defined(WEBRTC_LINUX) || defined(WEBRTC_ANDROID)
++#if (!defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)) || defined(WEBRTC_ANDROID)
+   return nullptr;
+ #else
+   return videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(options);
diff --git a/www/librewolf/files/patch-bug847568 b/www/librewolf/files/patch-bug847568
index 2b3c5e14e99e..37619c17f883 100644
--- a/www/librewolf/files/patch-bug847568
+++ b/www/librewolf/files/patch-bug847568
@@ -1,11 +1,11 @@
 # Allow building against system-wide graphite2/harfbuzz.
 
 diff --git config/system-headers.mozbuild config/system-headers.mozbuild
-index a1b58eb..a0a0943 100644
+index 07d48e7f9748..a35804b443e5 100644
 --- config/system-headers.mozbuild
 +++ config/system-headers.mozbuild
-@@ -1289,6 +1289,19 @@ if CONFIG['MOZ_ENABLE_LIBPROXY']:
-         'proxy.h',
+@@ -1304,6 +1304,19 @@ if CONFIG["MOZ_ENABLE_LIBPROXY"]:
+         "proxy.h",
      ]
  
 +if CONFIG['MOZ_SYSTEM_GRAPHITE2']:
@@ -21,14 +21,14 @@ index a1b58eb..a0a0943 100644
 +        'harfbuzz/hb.h',
 +    ]
 +
- if CONFIG['MOZ_SYSTEM_LIBVPX']:
+ if CONFIG["MOZ_SYSTEM_ICU"]:
      system_headers += [
-         'vpx_mem/vpx_mem.h',
+         "unicode/calendar.h",
 diff --git dom/base/moz.build dom/base/moz.build
-index d390adf..4508f19 100644
+index 26fe7e716da8..9015fc360402 100644
 --- dom/base/moz.build
 +++ dom/base/moz.build
-@@ -576,6 +576,9 @@ FINAL_LIBRARY = "xul"
+@@ -608,6 +608,9 @@ FINAL_LIBRARY = "xul"
  if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
      CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
  
@@ -40,7 +40,7 @@ index d390adf..4508f19 100644
      script="gen-usecounters.py",
 diff --git gfx/graphite2/geckoextra/moz.build gfx/graphite2/geckoextra/moz.build
 new file mode 100644
-index 0000000..24e8d7a
+index 000000000000..24e8d7a03274
 --- /dev/null
 +++ gfx/graphite2/geckoextra/moz.build
 @@ -0,0 +1,21 @@
@@ -66,7 +66,7 @@ index 0000000..24e8d7a
 +
 +FINAL_LIBRARY = 'gkmedias'
 diff --git gfx/graphite2/moz-gr-update.sh gfx/graphite2/moz-gr-update.sh
-index b91d9c1..a97e6eb 100755
+index b91d9c161cc7..a97e6eb20322 100755
 --- gfx/graphite2/moz-gr-update.sh
 +++ gfx/graphite2/moz-gr-update.sh
 @@ -1,6 +1,7 @@
@@ -95,8 +95,9 @@ index b91d9c1..a97e6eb 100755
  
  echo
  echo If gfx/graphite2/src/files.mk has changed, please make corresponding
-diff --git gfx/harfbuzz/README-mozilla gfx/harfbuzz/README-mozilla
-index 3180257..4587a3b 100644
+diff --git gfx/harfbuzz/README-mozilla.fbsd gfx/harfbuzz/README-mozilla.fbsd
+new file mode 100644
+index 000000000000..2a10eb1e2b42
 --- /dev/null
 +++ gfx/harfbuzz/README-mozilla.fbsd
 @@ -0,0 +1,4 @@
@@ -105,7 +106,7 @@ index 3180257..4587a3b 100644
 +with checkout version or increment latest tag by one if it's not based
 +on upstream release.
 diff --git gfx/moz.build gfx/moz.build
-index 4d6d63d..cd57b0c 100644
+index 56ea317bedfc..07dd7f66f1bc 100644
 --- gfx/moz.build
 +++ gfx/moz.build
 @@ -10,6 +10,14 @@ with Files("**"):
@@ -133,10 +134,10 @@ index 4d6d63d..cd57b0c 100644
      "thebes",
      "ipc",
 diff --git gfx/skia/generate_mozbuild.py gfx/skia/generate_mozbuild.py
-index 5e0fd17..860b80a 100755
+index c161d24df853..8c7dd395b371 100755
 --- gfx/skia/generate_mozbuild.py
 +++ gfx/skia/generate_mozbuild.py
-@@ -96,6 +96,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'clang-cl'):
+@@ -91,6 +91,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'clang-cl'):
          '-Wno-unused-private-field',
      ]
  
@@ -147,10 +148,10 @@ index 5e0fd17..860b80a 100755
      LOCAL_INCLUDES += [
          "/gfx/cairo/cairo/src",
 diff --git gfx/skia/moz.build gfx/skia/moz.build
-index 524bd28..615c93b 100755
+index 83aa2957a938..0859316a1f09 100644
 --- gfx/skia/moz.build
 +++ gfx/skia/moz.build
-@@ -488,6 +488,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'clang-cl'):
+@@ -601,6 +601,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'clang-cl'):
          '-Wno-unused-private-field',
      ]
  
@@ -161,10 +162,10 @@ index 524bd28..615c93b 100755
      LOCAL_INCLUDES += [
          "/gfx/cairo/cairo/src",
 diff --git gfx/thebes/moz.build gfx/thebes/moz.build
-index baa6f09..4f02a9e 100644
+index 97f02d59f51a..04c75cc7234d 100644
 --- gfx/thebes/moz.build
 +++ gfx/thebes/moz.build
-@@ -286,7 +286,13 @@ if CONFIG["MOZ_WAYLAND"]:
+@@ -290,7 +290,13 @@ if CONFIG["MOZ_WAYLAND"]:
  
  LOCAL_INCLUDES += CONFIG["SKIA_INCLUDES"]
  
@@ -177,13 +178,13 @@ index baa6f09..4f02a9e 100644
 +if CONFIG["MOZ_SYSTEM_HARFBUZZ"]:
 +    CXXFLAGS += CONFIG["MOZ_HARFBUZZ_CFLAGS"]
  
- if CONFIG["CC_TYPE"] == "clang":
-     # Suppress warnings from Skia header files.
+ CXXFLAGS += ["-Werror=switch"]
+ 
 diff --git intl/unicharutil/util/moz.build intl/unicharutil/util/moz.build
-index 301eb9a..7cece5e 100644
+index 2bbd00415cae..f66bd37695d4 100644
 --- intl/unicharutil/util/moz.build
 +++ intl/unicharutil/util/moz.build
-@@ -25,6 +25,9 @@ UNIFIED_SOURCES += [
+@@ -24,6 +24,9 @@ UNIFIED_SOURCES += [
      "nsUnicodeProperties.cpp",
  ]
  
@@ -194,7 +195,7 @@ index 301eb9a..7cece5e 100644
  
  GeneratedFile(
 diff --git netwerk/dns/moz.build netwerk/dns/moz.build
-index f769e27..315bdd4 100644
+index 784a1631fba9..574e739e22a0 100644
 --- netwerk/dns/moz.build
 +++ netwerk/dns/moz.build
 @@ -102,6 +102,9 @@ GeneratedFile(
@@ -208,10 +209,10 @@ index f769e27..315bdd4 100644
  LOCAL_INCLUDES += [
      "/netwerk/base",
 diff --git old-configure.in old-configure.in
*** 73952 LINES SKIPPED ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202403222044.42MKiVuv034367>