diff -urpN webkitgtk-2.51.90.gtk/Source/cmake/FindGI.cmake webkitgtk-2.51.90.glib244/Source/cmake/FindGI.cmake
--- webkitgtk-2.51.90.gtk/Source/cmake/FindGI.cmake	2026-01-26 13:28:36.574138860 -0600
+++ webkitgtk-2.51.90.glib244/Source/cmake/FindGI.cmake	2026-01-26 16:45:11.286539165 -0600
@@ -334,6 +334,13 @@ function(GI_INTROSPECT namespace nsversi
     # Generate .gir
     set(target_def "$<TARGET_PROPERTY:${opt_TARGET},COMPILE_DEFINITIONS>")
     set(target_inc "$<TARGET_PROPERTY:${opt_TARGET},INTERFACE_INCLUDE_DIRECTORIES>")
+    set(PREV_LOADER_LIBRARY_PATH "$ENV{LD_LIBRARY_PATH}")
+    string(COMPARE EQUAL "${PREV_LOADER_LIBRARY_PATH}" "" ld_library_path_does_not_exist)
+    if (ld_library_path_does_not_exist)
+        set(INTROSPECTION_ADDITIONAL_LIBRARY_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
+    else ()
+        set(INTROSPECTION_ADDITIONAL_LIBRARY_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}:${PREV_LOADER_LIBRARY_PATH}")
+    endif ()
     add_custom_command(
         OUTPUT "${gir_path}"
         COMMENT "Generating ${gir_name}.gir"
@@ -342,6 +349,7 @@ function(GI_INTROSPECT namespace nsversi
         VERBATIM
         COMMAND_EXPAND_LISTS
         COMMAND ${CMAKE_COMMAND} -E env "CC=${CMAKE_C_COMPILER}" "CFLAGS=${CMAKE_C_FLAGS}"
+            "LD_LIBRARY_PATH=${INTROSPECTION_ADDITIONAL_LIBRARY_PATH}"
             "${GI_SCANNER_EXE}" --quiet --warn-all --no-libtool
             "--output=${gir_path}"
             "--library=$<TARGET_FILE_BASE_NAME:${opt_TARGET}>"
diff -urpN webkitgtk-2.51.90.gtk/Source/cmake/FindGLibCompileResources.cmake webkitgtk-2.51.90.glib244/Source/cmake/FindGLibCompileResources.cmake
--- webkitgtk-2.51.90.gtk/Source/cmake/FindGLibCompileResources.cmake	2026-01-23 02:35:26.904985400 -0600
+++ webkitgtk-2.51.90.glib244/Source/cmake/FindGLibCompileResources.cmake	2026-01-26 16:43:30.761541611 -0600
@@ -17,7 +17,7 @@ message(STATUS "Found glib-compile-resou
 
 set(glib_compile_resources_has_depfile_bug FALSE)
 if ("${glib_compile_resources_version}" VERSION_LESS 2.77)
-    set(glib_compile_resources_has_depfile_bug TRUE)
+    #set(glib_compile_resources_has_depfile_bug TRUE)
 endif ()
 
 function(GLIB_COMPILE_RESOURCES)
@@ -60,11 +60,10 @@ function(GLIB_COMPILE_RESOURCES)
         COMMAND ${GLIB_COMPILE_RESOURCES_EXECUTABLE}
                 --generate
                 --target=${ARG_OUTPUT}
-                --dependency-file=${ARG_OUTPUT}.deps
                 ${resource_dir_args}
                 ${ARG_SOURCE_XML}
                 ${additional_cmd_line}
         WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
         VERBATIM
     )
-endfunction()
\ No newline at end of file
+endfunction()
diff -urpN webkitgtk-2.51.90.gtk/Source/cmake/OptionsGTK.cmake webkitgtk-2.51.90.glib244/Source/cmake/OptionsGTK.cmake
--- webkitgtk-2.51.90.gtk/Source/cmake/OptionsGTK.cmake	2026-01-26 13:52:00.809446949 -0600
+++ webkitgtk-2.51.90.glib244/Source/cmake/OptionsGTK.cmake	2026-01-26 16:50:09.076111090 -0600
@@ -8,7 +8,7 @@ SET_PROJECT_VERSION(2 51 90)
 set(USER_AGENT_BRANDING "" CACHE STRING "Branding to add to user agent string")
 
 # Update Source/WTF/wtf/Platform.h to match required GLib versions.
-find_package(GLib 2.62.6 REQUIRED COMPONENTS GioUnix Thread Module)
+find_package(GLib 2.48.2 REQUIRED COMPONENTS GioUnix Thread Module)
 find_package(Cairo 1.15.2 REQUIRED)
 find_package(LibGcrypt 1.7.0 REQUIRED)
 find_package(Tasn1 REQUIRED)
diff -urpN webkitgtk-2.51.90.gtk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp webkitgtk-2.51.90.glib244/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
--- webkitgtk-2.51.90.gtk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp	2026-01-26 13:28:24.772534813 -0600
+++ webkitgtk-2.51.90.glib244/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp	2026-01-26 16:52:09.087472538 -0600
@@ -89,6 +89,7 @@
 #include <gst/video/gstvideometa.h>
 #include <limits>
 #include <wtf/FileSystem.h>
+#include <wtf/glib/GLibUtilities.h>
 #include <wtf/glib/WTFGType.h>
 #include <wtf/MathExtras.h>
 #include <wtf/MediaTime.h>
@@ -2437,11 +2438,6 @@ void MediaPlayerPrivateGStreamer::update
     m_wasBuffering = m_isBuffering;
     m_previousBufferingPercentage = m_bufferingPercentage;
 
-#ifndef GST_DISABLE_GST_DEBUG
-    auto modeString = GMallocString::unsafeAdoptFromUTF8(g_enum_to_string(GST_TYPE_BUFFERING_MODE, mode));
-    GST_DEBUG_OBJECT(pipeline(), "[Buffering] mode: %s, status: %f%%", modeString.utf8(), percentage);
-#endif
-
     double highWatermark = 100.0;
     double lowWatermark = 100.0;
     if (mode == GST_BUFFERING_STREAM && m_isLegacyPlaybin) {
diff -urpN webkitgtk-2.51.90.gtk/Source/WebKit/NetworkProcess/glib/DNSCache.cpp webkitgtk-2.51.90.glib244/Source/WebKit/NetworkProcess/glib/DNSCache.cpp
--- webkitgtk-2.51.90.gtk/Source/WebKit/NetworkProcess/glib/DNSCache.cpp	2026-01-23 02:35:26.332378900 -0600
+++ webkitgtk-2.51.90.glib244/Source/WebKit/NetworkProcess/glib/DNSCache.cpp	2026-01-26 16:43:30.767640112 -0600
@@ -50,9 +50,17 @@ DNSCache::DNSCacheMap& DNSCache::mapForT
     case Type::Default:
         return m_dnsMap;
     case Type::IPv4Only:
+#if GLIB_CHECK_VERSION(2, 59, 0)
         return m_ipv4Map;
+#else
+        return m_dnsMap;
+#endif
     case Type::IPv6Only:
+#if GLIB_CHECK_VERSION(2, 59, 0)
         return m_ipv6Map;
+#else
+        return m_dnsMap;
+#endif
     }
 
     RELEASE_ASSERT_NOT_REACHED();
@@ -118,16 +126,20 @@ void DNSCache::removeExpiredResponsesFir
 {
     Locker locker { m_lock };
     removeExpiredResponsesInMap(m_dnsMap);
+#if GLIB_CHECK_VERSION(2, 59, 0)
     removeExpiredResponsesInMap(m_ipv4Map);
     removeExpiredResponsesInMap(m_ipv6Map);
+#endif
 }
 
 void DNSCache::clear()
 {
     Locker locker { m_lock };
     m_dnsMap.clear();
+#if GLIB_CHECK_VERSION(2, 59, 0)
     m_ipv4Map.clear();
     m_ipv6Map.clear();
+#endif
 }
 
 } // namespace WebKit
diff -urpN webkitgtk-2.51.90.gtk/Source/WebKit/NetworkProcess/glib/DNSCache.h webkitgtk-2.51.90.glib244/Source/WebKit/NetworkProcess/glib/DNSCache.h
--- webkitgtk-2.51.90.gtk/Source/WebKit/NetworkProcess/glib/DNSCache.h	2026-01-23 02:35:26.332818500 -0600
+++ webkitgtk-2.51.90.glib244/Source/WebKit/NetworkProcess/glib/DNSCache.h	2026-01-26 16:43:30.768640131 -0600
@@ -64,8 +64,10 @@ private:
 
     Lock m_lock;
     DNSCacheMap m_dnsMap WTF_GUARDED_BY_LOCK(m_lock);
+#if GLIB_CHECK_VERSION(2, 59, 0)
     DNSCacheMap m_ipv4Map;
     DNSCacheMap m_ipv6Map;
+#endif
     RunLoop::Timer m_expiredTimer;
 };
 
diff -urpN webkitgtk-2.51.90.gtk/Source/WebKit/NetworkProcess/glib/WebKitCachedResolver.cpp webkitgtk-2.51.90.glib244/Source/WebKit/NetworkProcess/glib/WebKitCachedResolver.cpp
--- webkitgtk-2.51.90.gtk/Source/WebKit/NetworkProcess/glib/WebKitCachedResolver.cpp	2026-01-23 02:35:26.332818500 -0600
+++ webkitgtk-2.51.90.glib244/Source/WebKit/NetworkProcess/glib/WebKitCachedResolver.cpp	2026-01-26 16:43:30.769153312 -0600
@@ -67,7 +67,9 @@ static Vector<GRefPtr<GInetAddress>> add
 
 struct LookupAsyncData {
     CString hostname;
+#if GLIB_CHECK_VERSION(2, 59, 0)
     DNSCache::Type dnsCacheType { DNSCache::Type::Default };
+#endif
 };
 WEBKIT_DEFINE_ASYNC_DATA_STRUCT(LookupAsyncData)
 
@@ -117,6 +119,7 @@ static GList* webkitCachedResolverLookup
     return static_cast<GList*>(g_task_propagate_pointer(G_TASK(result), error));
 }
 
+#if GLIB_CHECK_VERSION(2, 59, 0)
 static inline DNSCache::Type dnsCacheType(GResolverNameLookupFlags flags)
 {
     // A cache is kept for each type of response to avoid the overcomplication of combining or filtering results.
@@ -177,6 +180,7 @@ static GList* webkitCachedResolverLookup
 
     return static_cast<GList*>(g_task_propagate_pointer(G_TASK(result), error));
 }
+#endif // GLIB_CHECK_VERSION(2, 59, 0)
 
 static char* webkitCachedResolverLookupByAddress(GResolver* resolver, GInetAddress* address, GCancellable* cancellable, GError** error)
 {
@@ -219,9 +223,11 @@ static void webkit_cached_resolver_class
     resolverClass->lookup_by_name = webkitCachedResolverLookupByName;
     resolverClass->lookup_by_name_async = webkitCachedResolverLookupByNameAsync;
     resolverClass->lookup_by_name_finish = webkitCachedResolverLookupByNameFinish;
+#if GLIB_CHECK_VERSION(2, 59, 0)
     resolverClass->lookup_by_name_with_flags = webkitCachedResolverLookupByNameWithFlags;
     resolverClass->lookup_by_name_with_flags_async = webkitCachedResolverLookupByNameWithFlagsAsync;
     resolverClass->lookup_by_name_with_flags_finish = webkitCachedResolverLookupByNameWithFlagsFinish;
+#endif
     resolverClass->lookup_by_address = webkitCachedResolverLookupByAddress;
     resolverClass->lookup_by_address_async = webkitCachedResolverLookupByAddressAsync;
     resolverClass->lookup_by_address_finish = webkitCachedResolverLookupByAddressFinish;
diff -urpN webkitgtk-2.51.90.gtk/Source/WebKit/NetworkProcess/glib/WebKitOverridingResolver.cpp webkitgtk-2.51.90.glib244/Source/WebKit/NetworkProcess/glib/WebKitOverridingResolver.cpp
--- webkitgtk-2.51.90.gtk/Source/WebKit/NetworkProcess/glib/WebKitOverridingResolver.cpp	2026-01-23 02:35:26.332818500 -0600
+++ webkitgtk-2.51.90.glib244/Source/WebKit/NetworkProcess/glib/WebKitOverridingResolver.cpp	2026-01-26 16:43:30.769908062 -0600
@@ -90,6 +90,7 @@ static GList* webkitOverridingResolverLo
     return static_cast<GList*>(g_task_propagate_pointer(G_TASK(result), error));
 }
 
+#if GLIB_CHECK_VERSION(2, 59, 0)
 static GList* createLoobackAddressList(WebKitOverridingResolver* resolver, GResolverNameLookupFlags flags)
 {
     GList* list = nullptr;
@@ -129,6 +130,7 @@ static GList* webkitOverridingResolverLo
 
     return static_cast<GList*>(g_task_propagate_pointer(G_TASK(result), error));
 }
+#endif // GLIB_CHECK_VERSION(2, 59, 0)
 
 static char* webkitOverridingResolverLookupByAddress(GResolver* resolver, GInetAddress* address, GCancellable* cancellable, GError** error)
 {
@@ -166,9 +168,11 @@ static void webkit_overriding_resolver_c
     resolverClass->lookup_by_name = webkitOverridingResolverLookupByName;
     resolverClass->lookup_by_name_async = webkitOverridingResolverLookupByNameAsync;
     resolverClass->lookup_by_name_finish = webkitOverridingResolverLookupByNameFinish;
+#if GLIB_CHECK_VERSION(2, 59, 0)
     resolverClass->lookup_by_name_with_flags = webkitOverridingResolverLookupByNameWithFlags;
     resolverClass->lookup_by_name_with_flags_async = webkitOverridingResolverLookupByNameWithFlagsAsync;
     resolverClass->lookup_by_name_with_flags_finish = webkitOverridingResolverLookupByNameWithFlagsFinish;
+#endif
     resolverClass->lookup_by_address = webkitOverridingResolverLookupByAddress;
     resolverClass->lookup_by_address_async = webkitOverridingResolverLookupByAddressAsync;
     resolverClass->lookup_by_address_finish = webkitOverridingResolverLookupByAddressFinish;
diff -urpN webkitgtk-2.51.90.gtk/Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp webkitgtk-2.51.90.glib244/Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp
--- webkitgtk-2.51.90.gtk/Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp	2026-01-23 02:35:26.531447600 -0600
+++ webkitgtk-2.51.90.glib244/Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp	2026-01-26 16:43:30.770640169 -0600
@@ -4348,6 +4348,7 @@ WebKitFeatureList* webkit_settings_get_d
     return webkitFeatureListCreate(WebPreferences::internalDebugFeatures());
 }
 
+#if GLIB_CHECK_VERSION(2, 54, 0)
 /**
  * webkit_settings_apply_from_key_file:
  * @settings: a #WebKitSettings
@@ -4463,6 +4464,7 @@ gboolean webkit_settings_apply_from_key_
     g_object_setv(G_OBJECT(settings), propertyNames->len, const_cast<const char**>(reinterpret_cast<char**>(propertyNames->pdata)), reinterpret_cast<GValue*>(values->data));
     return TRUE;
 }
+#endif
 
 /**
  * webkit_settings_get_webrtc_udp_ports_range:
diff -urpN webkitgtk-2.51.90.gtk/Source/WebKit/UIProcess/API/glib/WebKitSettings.h.in webkitgtk-2.51.90.glib244/Source/WebKit/UIProcess/API/glib/WebKitSettings.h.in
--- webkitgtk-2.51.90.gtk/Source/WebKit/UIProcess/API/glib/WebKitSettings.h.in	2026-01-23 02:35:26.531447600 -0600
+++ webkitgtk-2.51.90.glib244/Source/WebKit/UIProcess/API/glib/WebKitSettings.h.in	2026-01-26 16:43:30.771640187 -0600
@@ -576,11 +576,13 @@ webkit_settings_get_experimental_feature
 WEBKIT_API WebKitFeatureList *
 webkit_settings_get_development_features                       (void);
 
+#if GLIB_CHECK_VERSION(2, 54, 0)
 WEBKIT_API gboolean
 webkit_settings_apply_from_key_file                            (WebKitSettings  *settings,
                                                                 GKeyFile        *key_file,
                                                                 const gchar     *group_name,
                                                                 GError         **error);
+#endif
 
 WEBKIT_API const gchar*
 webkit_settings_get_webrtc_udp_ports_range                     (WebKitSettings *settings);
diff -urpN webkitgtk-2.51.90.gtk/Source/WTF/wtf/glib/GLibUtilities.cpp webkitgtk-2.51.90.glib244/Source/WTF/wtf/glib/GLibUtilities.cpp
--- webkitgtk-2.51.90.gtk/Source/WTF/wtf/glib/GLibUtilities.cpp	1969-12-31 18:00:00.000000000 -0600
+++ webkitgtk-2.51.90.glib244/Source/WTF/wtf/glib/GLibUtilities.cpp	2026-01-26 16:43:30.772231574 -0600
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2010 Igalia, S.L.
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public License
+ *  along with this library; see the file COPYING.LIB.  If not, write to
+ *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ *  Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <wtf/glib/GLibUtilities.h>
+
+#include <glib.h>
+#include <wtf/glib/GUniquePtr.h>
+
+#if OS(WINDOWS)
+#include <windows.h>
+#include <wtf/text/WTFString.h>
+#else
+#include <limits.h>
+#include <unistd.h>
+#endif
+
+CString enumToString(GType type, guint value)
+{
+#if GLIB_CHECK_VERSION(2, 54, 0)
+    GUniquePtr<char> result(g_enum_to_string(type, value));
+    return result.get();
+#else
+    GEnumClass* enumClass = reinterpret_cast<GEnumClass*>(g_type_class_ref(type));
+    GEnumValue* enumValue = g_enum_get_value(enumClass, value);
+    char* representation = enumValue ? g_strdup(enumValue->value_nick) : nullptr;
+    g_type_class_unref(enumClass);
+    GUniquePtr<char> result(representation);
+    return result.get();
+#endif
+}
diff -urpN webkitgtk-2.51.90.gtk/Source/WTF/wtf/glib/GLibUtilities.h webkitgtk-2.51.90.glib244/Source/WTF/wtf/glib/GLibUtilities.h
--- webkitgtk-2.51.90.gtk/Source/WTF/wtf/glib/GLibUtilities.h	1969-12-31 18:00:00.000000000 -0600
+++ webkitgtk-2.51.90.glib244/Source/WTF/wtf/glib/GLibUtilities.h	2026-01-26 16:43:30.772326755 -0600
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2010 Igalia, S.L.
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public License
+ *  along with this library; see the file COPYING.LIB.  If not, write to
+ *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ *  Boston, MA 02110-1301, USA.
+ */
+
+#ifndef GLibUtilities_h
+#define GLibUtilities_h
+
+#include <glib-object.h>
+#include <wtf/Assertions.h>
+#include <wtf/text/CString.h>
+
+WTF_EXPORT_PRIVATE CString enumToString(GType, guint value);
+
+// These might be added to glib in the future, but in the meantime they're defined here.
+#ifndef GULONG_TO_POINTER
+#define GULONG_TO_POINTER(ul) ((gpointer) (gulong) (ul))
+#endif
+
+#ifndef GPOINTER_TO_ULONG
+#define GPOINTER_TO_ULONG(p) ((gulong) (p))
+#endif
+
+#endif
diff -urpN webkitgtk-2.51.90.gtk/Source/WTF/wtf/glib/SocketConnection.cpp webkitgtk-2.51.90.glib244/Source/WTF/wtf/glib/SocketConnection.cpp
--- webkitgtk-2.51.90.gtk/Source/WTF/wtf/glib/SocketConnection.cpp	2026-01-23 02:35:24.965636000 -0600
+++ webkitgtk-2.51.90.glib244/Source/WTF/wtf/glib/SocketConnection.cpp	2026-01-26 16:43:30.772640206 -0600
@@ -166,7 +166,20 @@ bool SocketConnection::readMessage()
         GRefPtr<GVariant> parameters;
         if (!it->value.first.isNull()) {
             GUniquePtr<GVariantType> variantType(g_variant_type_new(it->value.first.data()));
+            // g_variant_new_from_data() requires the memory to be properly aligned for the type being loaded,
+            // but it's not possible to know the alignment because g_variant_type_info_query() is not public API.
+            // Since GLib 2.60 g_variant_new_from_data() already checks the alignment and reallocates the buffer
+            // in aligned memory only if needed. For older versions we can simply ensure the memory is 8 aligned.
+#if GLIB_CHECK_VERSION(2, 60, 0)
             parameters = g_variant_new_from_data(variantType.get(), messageData.data(), messageData.size(), FALSE, nullptr, nullptr);
+#else
+            auto* alignedMemory = fastAlignedMalloc(8, messageData.size());
+            memcpy(alignedMemory, messageData.data(), messageData.size());
+            GRefPtr<GBytes> bytes = g_bytes_new_with_free_func(alignedMemory, messageData.size(), [](gpointer data) {
+                fastAlignedFree(data);
+            }, alignedMemory);
+            parameters = g_variant_new_from_bytes(variantType.get(), bytes.get(), FALSE);
+#endif
             if (messageIsByteSwapped(flags))
                 parameters = adoptGRef(g_variant_byteswap(parameters.get()));
         }
diff -urpN webkitgtk-2.51.90.gtk/Source/WTF/wtf/PlatformGTK.cmake webkitgtk-2.51.90.glib244/Source/WTF/wtf/PlatformGTK.cmake
--- webkitgtk-2.51.90.gtk/Source/WTF/wtf/PlatformGTK.cmake	2026-01-23 02:35:24.927470200 -0600
+++ webkitgtk-2.51.90.glib244/Source/WTF/wtf/PlatformGTK.cmake	2026-01-26 16:53:42.016554695 -0600
@@ -7,6 +7,7 @@ list(APPEND WTF_SOURCES
     glib/Application.cpp
     glib/ChassisType.cpp
     glib/FileSystemGlib.cpp
+    glib/GLibUtilities.cpp
     glib/GMallocString.cpp
     glib/GRefPtr.cpp
     glib/GSocketMonitor.cpp
@@ -34,6 +35,7 @@ list(APPEND WTF_PUBLIC_HEADERS
     glib/ActivityObserver.h
     glib/Application.h
     glib/ChassisType.h
+    glib/GLibUtilities.h
     glib/GMallocString.h
     glib/GMutexLocker.h
     glib/GRefPtr.h
diff -urpN webkitgtk-2.51.90.gtk/Source/WTF/wtf/Platform.h webkitgtk-2.51.90.glib244/Source/WTF/wtf/Platform.h
--- webkitgtk-2.51.90.gtk/Source/WTF/wtf/Platform.h	2026-01-26 13:52:00.838604875 -0600
+++ webkitgtk-2.51.90.glib244/Source/WTF/wtf/Platform.h	2026-01-26 16:54:15.377097872 -0600
@@ -91,8 +91,8 @@
 
 
 #if USE(GLIB)
-#define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_56
-#define GLIB_VERSION_MAX_ALLOWED GLIB_VERSION_2_62
+#define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_48
+#define GLIB_VERSION_MAX_ALLOWED GLIB_VERSION_2_48
 #endif
 
 #if PLATFORM(GTK)
diff -urpN webkitgtk-2.51.90.gtk/Tools/glib/generate-modern-media-controls-gresource-manifest.py webkitgtk-2.51.90.glib244/Tools/glib/generate-modern-media-controls-gresource-manifest.py
--- webkitgtk-2.51.90.gtk/Tools/glib/generate-modern-media-controls-gresource-manifest.py	2026-01-23 02:35:27.611575100 -0600
+++ webkitgtk-2.51.90.glib244/Tools/glib/generate-modern-media-controls-gresource-manifest.py	2026-01-26 16:43:30.774302859 -0600
@@ -54,7 +54,7 @@ if __name__ == "__main__":
         extra_attributes = ""
         if extension == "svg":
             extra_attributes = 'preprocess="xml-stripblanks"'
-        args.output.write(f'{indent}<file compressed="true" {extra_attributes} alias="{alias}">{path}</file>\n')
+        args.output.write(indent + '<file compressed="true" ' + extra_attributes + ' alias="' + alias + '">' + path + '</file>\n')
 
     args.output.write("""    </gresource>
 </gresources>
diff -urpN webkitgtk-2.51.90.gtk/Tools/MiniBrowser/gtk/main.c webkitgtk-2.51.90.glib244/Tools/MiniBrowser/gtk/main.c
--- webkitgtk-2.51.90.gtk/Tools/MiniBrowser/gtk/main.c	2026-01-26 13:52:00.843111903 -0600
+++ webkitgtk-2.51.90.glib244/Tools/MiniBrowser/gtk/main.c	2026-01-26 16:43:30.774640244 -0600
@@ -67,7 +67,9 @@ static gboolean enableITP;
 static gboolean exitAfterLoad;
 static gboolean webProcessCrashed;
 static gboolean printVersion;
+#if GLIB_CHECK_VERSION(2, 54, 0)
 static char *configFile;
+#endif
 static GSettings *interfaceSettings;
 
 #if !GTK_CHECK_VERSION(3, 98, 0)
@@ -172,7 +174,9 @@ static const GOptionEntry commandLineOpt
     { "exit-after-load", 0, 0, G_OPTION_ARG_NONE, &exitAfterLoad, "Quit the browser after the load finishes", NULL },
     { "time-zone", 't', 0, G_OPTION_ARG_STRING, &timeZone, "Set time zone", "TIMEZONE" },
     { "version", 'v', 0, G_OPTION_ARG_NONE, &printVersion, "Print the WebKitGTK version", NULL },
+#if GLIB_CHECK_VERSION(2, 54, 0)
     { "config", 'C', 0, G_OPTION_ARG_FILENAME, &configFile, "Path to a configuration file", "PATH" },
+#endif
     { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &uriArguments, 0, "[URL…]" },
     { 0, 0, 0, 0, 0, 0, 0 }
 };
@@ -1028,6 +1032,7 @@ int main(int argc, char *argv[])
     }
     g_option_context_free(context);
 
+#if GLIB_CHECK_VERSION(2, 54, 0)
     if (configFile) {
         g_autoptr(GFile) file = g_file_new_for_commandline_arg(configFile);
         g_autofree char* configFilePath = g_file_get_path(file);
@@ -1046,6 +1051,7 @@ int main(int argc, char *argv[])
 
         g_clear_pointer(&configFile, g_free);
     }
+#endif
 
     if (printVersion) {
         g_print("WebKitGTK %u.%u.%u",
