Also, switch to Clang, because this is the preferred compiler anyway, and otherwise ld runs out of memory when linking on i686. Resolves: RHEL-84089
		
			
				
	
	
		
			483 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			483 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
diff --git a/Tools/MiniBrowser/gtk/BrowserSettingsDialog.c b/Tools/MiniBrowser/gtk/BrowserSettingsDialog.c
 | 
						|
index ef000cd2b910..432c97257048 100644
 | 
						|
--- a/Tools/MiniBrowser/gtk/BrowserSettingsDialog.c
 | 
						|
+++ b/Tools/MiniBrowser/gtk/BrowserSettingsDialog.c
 | 
						|
@@ -175,11 +175,12 @@ static void featureTreeViewRenderStatusData(GtkTreeViewColumn *column, GtkCellRe
 | 
						|
 {
 | 
						|
     g_autoptr(WebKitFeature) feature = NULL;
 | 
						|
     gtk_tree_model_get(model, iter, FEATURES_LIST_COLUMN_FEATURE, &feature, -1);
 | 
						|
-    g_autoptr(GEnumClass) enumClass = g_type_class_ref(WEBKIT_TYPE_FEATURE_STATUS);
 | 
						|
+    GEnumClass *enumClass = g_type_class_ref(WEBKIT_TYPE_FEATURE_STATUS);
 | 
						|
     g_object_set(renderer,
 | 
						|
                  "markup", NULL,
 | 
						|
                  "text", g_enum_get_value(enumClass, webkit_feature_get_status(feature))->value_nick,
 | 
						|
                  NULL);
 | 
						|
+    g_type_class_unref(enumClass);
 | 
						|
 }
 | 
						|
 
 | 
						|
 static void featureTreeViewRenderCategoryData(GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
 | 
						|
diff --git a/Tools/MiniBrowser/gtk/main.c b/Tools/MiniBrowser/gtk/main.c
 | 
						|
index 8be643a54151..ae82b41400b5 100644
 | 
						|
--- a/Tools/MiniBrowser/gtk/main.c
 | 
						|
+++ b/Tools/MiniBrowser/gtk/main.c
 | 
						|
@@ -273,7 +273,7 @@ static gboolean parseFeaturesOptionCallback(const gchar *option, const gchar *va
 | 
						|
                 "features, prefixes '-' and '!' disable features. Names are case-insensitive. Example:\n"
 | 
						|
                 "\n    %s --features='!DirPseudo,+WebAnimationsCustomEffects,webgl'\n\n"
 | 
						|
                 "Available features (+/- = enabled/disabled by default):\n\n", g_get_prgname());
 | 
						|
-        g_autoptr(GEnumClass) statusEnum = g_type_class_ref(WEBKIT_TYPE_FEATURE_STATUS);
 | 
						|
+        GEnumClass *statusEnum = g_type_class_ref(WEBKIT_TYPE_FEATURE_STATUS);
 | 
						|
         for (gsize i = 0; i < webkit_feature_list_get_length(featureList); i++) {
 | 
						|
             WebKitFeature *feature = webkit_feature_list_get(featureList, i);
 | 
						|
             g_print("  %c %s (%s)",
 | 
						|
@@ -284,6 +284,7 @@ static gboolean parseFeaturesOptionCallback(const gchar *option, const gchar *va
 | 
						|
                 g_print(": %s", webkit_feature_get_name(feature));
 | 
						|
             g_print("\n");
 | 
						|
         }
 | 
						|
+        g_type_class_unref(statusEnum);
 | 
						|
         exit(EXIT_SUCCESS);
 | 
						|
     }
 | 
						|
 | 
						|
From 4e525b9192df17a80b07188af6b6e7cf6476ff10 Mon Sep 17 00:00:00 2001
 | 
						|
From: Michael Catanzaro <mcatanzaro@redhat.com>
 | 
						|
Date: Fri, 4 Apr 2025 13:20:59 -0500
 | 
						|
Subject: [PATCH] Revert "[GLib] Remove all GLIB_CHECK_VERSION conditionals"
 | 
						|
 | 
						|
This reverts commit 85b637b69f1c3a6242420b198d1c173477ce0f22.
 | 
						|
---
 | 
						|
 Source/WTF/wtf/URL.h                                |  4 ++--
 | 
						|
 Source/WTF/wtf/glib/GRefPtr.cpp                     |  2 ++
 | 
						|
 Source/WTF/wtf/glib/GRefPtr.h                       |  3 +++
 | 
						|
 Source/WTF/wtf/glib/SocketConnection.cpp            | 13 +++++++++++++
 | 
						|
 Source/WTF/wtf/glib/URLGLib.cpp                     |  2 ++
 | 
						|
 Source/WebCore/platform/LowPowerModeNotifier.h      |  2 ++
 | 
						|
 .../platform/glib/LowPowerModeNotifierGLib.cpp      |  8 ++++++++
 | 
						|
 .../platform/network/soup/CertificateInfoSoup.cpp   |  8 ++++++++
 | 
						|
 Source/WebKit/NetworkProcess/glib/DNSCache.cpp      | 12 ++++++++++++
 | 
						|
 Source/WebKit/NetworkProcess/glib/DNSCache.h        |  2 ++
 | 
						|
 .../NetworkProcess/glib/WebKitCachedResolver.cpp    |  6 ++++++
 | 
						|
 .../glib/WebKitOverridingResolver.cpp               |  4 ++++
 | 
						|
 Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp    |  6 ++++++
 | 
						|
 Source/cmake/OptionsGTK.cmake                       | 13 ++++++++++++-
 | 
						|
 Source/cmake/OptionsWPE.cmake                       | 13 ++++++++++++-
 | 
						|
 15 files changed, 94 insertions(+), 4 deletions(-)
 | 
						|
 | 
						|
diff --git a/Source/WTF/wtf/URL.h b/Source/WTF/wtf/URL.h
 | 
						|
index 8a7864508a8e..f065677c68ad 100644
 | 
						|
--- a/Source/WTF/wtf/URL.h
 | 
						|
+++ b/Source/WTF/wtf/URL.h
 | 
						|
@@ -27,7 +27,7 @@
 | 
						|
 
 | 
						|
 #include <wtf/text/WTFString.h>
 | 
						|
 
 | 
						|
-#if USE(GLIB)
 | 
						|
+#if USE(GLIB) && HAVE(GURI)
 | 
						|
 #include <wtf/glib/GRefPtr.h>
 | 
						|
 #endif
 | 
						|
 
 | 
						|
@@ -237,7 +237,7 @@ public:
 | 
						|
     WTF_EXPORT_PRIVATE operator NSURL *() const;
 | 
						|
 #endif
 | 
						|
 
 | 
						|
-#if USE(GLIB)
 | 
						|
+#if USE(GLIB) && HAVE(GURI)
 | 
						|
     WTF_EXPORT_PRIVATE URL(GUri*);
 | 
						|
     WTF_EXPORT_PRIVATE GRefPtr<GUri> createGUri() const;
 | 
						|
 #endif
 | 
						|
diff --git a/Source/WTF/wtf/glib/GRefPtr.cpp b/Source/WTF/wtf/glib/GRefPtr.cpp
 | 
						|
index 4c15aa9866c0..6faa98b7eab2 100644
 | 
						|
--- a/Source/WTF/wtf/glib/GRefPtr.cpp
 | 
						|
+++ b/Source/WTF/wtf/glib/GRefPtr.cpp
 | 
						|
@@ -207,6 +207,7 @@ template <> void derefGPtr(GDBusNodeInfo* ptr)
 | 
						|
         g_dbus_node_info_unref(ptr);
 | 
						|
 }
 | 
						|
 
 | 
						|
+#if HAVE(GURI)
 | 
						|
 template <> GUri* refGPtr(GUri* ptr)
 | 
						|
 {
 | 
						|
     if (ptr)
 | 
						|
@@ -219,6 +220,7 @@ template <> void derefGPtr(GUri* ptr)
 | 
						|
     if (ptr)
 | 
						|
         g_uri_unref(ptr);
 | 
						|
 }
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 template <>
 | 
						|
 GArray* refGPtr(GArray* ptr)
 | 
						|
diff --git a/Source/WTF/wtf/glib/GRefPtr.h b/Source/WTF/wtf/glib/GRefPtr.h
 | 
						|
index 87a9ef9760bf..d6c71c14a981 100644
 | 
						|
--- a/Source/WTF/wtf/glib/GRefPtr.h
 | 
						|
+++ b/Source/WTF/wtf/glib/GRefPtr.h
 | 
						|
@@ -264,8 +264,11 @@ template <> WTF_EXPORT_PRIVATE GArray* refGPtr(GArray*);
 | 
						|
 template <> WTF_EXPORT_PRIVATE void derefGPtr(GArray*);
 | 
						|
 template <> WTF_EXPORT_PRIVATE GResource* refGPtr(GResource*);
 | 
						|
 template <> WTF_EXPORT_PRIVATE void derefGPtr(GResource*);
 | 
						|
+
 | 
						|
+#if HAVE(GURI)
 | 
						|
 template <> WTF_EXPORT_PRIVATE GUri* refGPtr(GUri*);
 | 
						|
 template <> WTF_EXPORT_PRIVATE void derefGPtr(GUri*);
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 template <typename T> inline T* refGPtr(T* ptr)
 | 
						|
 {
 | 
						|
diff --git a/Source/WTF/wtf/glib/SocketConnection.cpp b/Source/WTF/wtf/glib/SocketConnection.cpp
 | 
						|
index d1185aeb2d47..80a622b83eba 100644
 | 
						|
--- a/Source/WTF/wtf/glib/SocketConnection.cpp
 | 
						|
+++ b/Source/WTF/wtf/glib/SocketConnection.cpp
 | 
						|
@@ -145,7 +145,20 @@ bool SocketConnection::readMessage()
 | 
						|
         if (!it->value.first.isNull()) {
 | 
						|
             GUniquePtr<GVariantType> variantType(g_variant_type_new(it->value.first.data()));
 | 
						|
             size_t parametersSize = bodySize.value() - messageNameLength.value();
 | 
						|
+            // 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, parametersSize, FALSE, nullptr, nullptr);
 | 
						|
+#else
 | 
						|
+            auto* alignedMemory = fastAlignedMalloc(8, parametersSize);
 | 
						|
+            memcpy(alignedMemory, messageData, parametersSize);
 | 
						|
+            GRefPtr<GBytes> bytes = g_bytes_new_with_free_func(alignedMemory, parametersSize, [](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 --git a/Source/WTF/wtf/glib/URLGLib.cpp b/Source/WTF/wtf/glib/URLGLib.cpp
 | 
						|
index 589dc1b52f8f..f67fe780f333 100644
 | 
						|
--- a/Source/WTF/wtf/glib/URLGLib.cpp
 | 
						|
+++ b/Source/WTF/wtf/glib/URLGLib.cpp
 | 
						|
@@ -35,6 +35,7 @@
 | 
						|
 
 | 
						|
 namespace WTF {
 | 
						|
 
 | 
						|
+#if HAVE(GURI)
 | 
						|
 URL::URL(GUri* uri)
 | 
						|
 {
 | 
						|
     if (!uri) {
 | 
						|
@@ -56,6 +57,7 @@ GRefPtr<GUri> URL::createGUri() const
 | 
						|
         static_cast<GUriFlags>(G_URI_FLAGS_HAS_PASSWORD | G_URI_FLAGS_ENCODED_PATH | G_URI_FLAGS_ENCODED_QUERY | G_URI_FLAGS_ENCODED_FRAGMENT | G_URI_FLAGS_SCHEME_NORMALIZE | G_URI_FLAGS_PARSE_RELAXED),
 | 
						|
         nullptr));
 | 
						|
 }
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 bool URL::hostIsIPAddress(StringView host)
 | 
						|
 {
 | 
						|
diff --git a/Source/WebCore/platform/LowPowerModeNotifier.h b/Source/WebCore/platform/LowPowerModeNotifier.h
 | 
						|
index c8f2051d77f6..e2ea0dae3292 100644
 | 
						|
--- a/Source/WebCore/platform/LowPowerModeNotifier.h
 | 
						|
+++ b/Source/WebCore/platform/LowPowerModeNotifier.h
 | 
						|
@@ -61,8 +61,10 @@ private:
 | 
						|
     RetainPtr<WebLowPowerModeObserver> m_observer;
 | 
						|
     LowPowerModeChangeCallback m_callback;
 | 
						|
 #elif USE(GLIB)
 | 
						|
+#if GLIB_CHECK_VERSION(2, 69, 1)
 | 
						|
     LowPowerModeChangeCallback m_callback;
 | 
						|
     GRefPtr<GPowerProfileMonitor> m_powerProfileMonitor;
 | 
						|
+#endif
 | 
						|
     bool m_lowPowerModeEnabled { false };
 | 
						|
 #endif
 | 
						|
 };
 | 
						|
diff --git a/Source/WebCore/platform/glib/LowPowerModeNotifierGLib.cpp b/Source/WebCore/platform/glib/LowPowerModeNotifierGLib.cpp
 | 
						|
index e083cc66934e..7c0f55d089e6 100644
 | 
						|
--- a/Source/WebCore/platform/glib/LowPowerModeNotifierGLib.cpp
 | 
						|
+++ b/Source/WebCore/platform/glib/LowPowerModeNotifierGLib.cpp
 | 
						|
@@ -28,10 +28,13 @@ namespace WebCore {
 | 
						|
 
 | 
						|
 
 | 
						|
 LowPowerModeNotifier::LowPowerModeNotifier(LowPowerModeChangeCallback&& callback)
 | 
						|
+#if GLIB_CHECK_VERSION(2, 69, 1)
 | 
						|
     : m_callback(WTFMove(callback))
 | 
						|
     , m_powerProfileMonitor(adoptGRef(g_power_profile_monitor_dup_default()))
 | 
						|
     , m_lowPowerModeEnabled(g_power_profile_monitor_get_power_saver_enabled(m_powerProfileMonitor.get()))
 | 
						|
+#endif
 | 
						|
 {
 | 
						|
+#if GLIB_CHECK_VERSION(2, 69, 1)
 | 
						|
     g_signal_connect_swapped(m_powerProfileMonitor.get(), "notify::power-saver-enabled", G_CALLBACK(+[] (LowPowerModeNotifier* self, GParamSpec*, GPowerProfileMonitor* monitor) {
 | 
						|
         bool powerSaverEnabled = g_power_profile_monitor_get_power_saver_enabled(monitor);
 | 
						|
         if (self->m_lowPowerModeEnabled != powerSaverEnabled) {
 | 
						|
@@ -39,11 +42,16 @@ LowPowerModeNotifier::LowPowerModeNotifier(LowPowerModeChangeCallback&& callback
 | 
						|
             self->m_callback(self->m_lowPowerModeEnabled);
 | 
						|
         }
 | 
						|
     }), this);
 | 
						|
+#else
 | 
						|
+    UNUSED_PARAM(callback);
 | 
						|
+#endif
 | 
						|
 }
 | 
						|
 
 | 
						|
 LowPowerModeNotifier::~LowPowerModeNotifier()
 | 
						|
 {
 | 
						|
+#if GLIB_CHECK_VERSION(2, 69, 1)
 | 
						|
     g_signal_handlers_disconnect_by_data(m_powerProfileMonitor.get(), this);
 | 
						|
+#endif
 | 
						|
 }
 | 
						|
 
 | 
						|
 bool LowPowerModeNotifier::isLowPowerModeEnabled() const
 | 
						|
diff --git a/Source/WebCore/platform/network/soup/CertificateInfoSoup.cpp b/Source/WebCore/platform/network/soup/CertificateInfoSoup.cpp
 | 
						|
index f32ecca7a300..e81a5433709d 100644
 | 
						|
--- a/Source/WebCore/platform/network/soup/CertificateInfoSoup.cpp
 | 
						|
+++ b/Source/WebCore/platform/network/soup/CertificateInfoSoup.cpp
 | 
						|
@@ -73,9 +73,11 @@ CertificateInfo CertificateInfo::isolatedCopy() const
 | 
						|
         certificatesDataList.append(certificateData.release());
 | 
						|
     }
 | 
						|
 
 | 
						|
+#if GLIB_CHECK_VERSION(2, 69, 0)
 | 
						|
     GUniqueOutPtr<char> privateKey;
 | 
						|
     GUniqueOutPtr<char> privateKeyPKCS11Uri;
 | 
						|
     g_object_get(m_certificate.get(), "private-key-pem", &privateKey.outPtr(), "private-key-pkcs11-uri", &privateKeyPKCS11Uri.outPtr(), nullptr);
 | 
						|
+#endif
 | 
						|
 
 | 
						|
     GType certificateType = g_tls_backend_get_certificate_type(g_tls_backend_get_default());
 | 
						|
     GRefPtr<GTlsCertificate> certificate;
 | 
						|
@@ -86,8 +88,10 @@ CertificateInfo CertificateInfo::isolatedCopy() const
 | 
						|
             certificateType, nullptr, nullptr,
 | 
						|
             "certificate-pem", certificateData.get(),
 | 
						|
             "issuer", issuer,
 | 
						|
+#if GLIB_CHECK_VERSION(2, 69, 0)
 | 
						|
             "private-key-pem", certificatesDataList.isEmpty() ? privateKey.get() : nullptr,
 | 
						|
             "private-key-pkcs11-uri", certificatesDataList.isEmpty() ? privateKeyPKCS11Uri.get() : nullptr,
 | 
						|
+#endif
 | 
						|
             nullptr)));
 | 
						|
         RELEASE_ASSERT(certificate);
 | 
						|
         issuer = certificate.get();
 | 
						|
@@ -101,6 +105,7 @@ std::optional<CertificateSummary> CertificateInfo::summary() const
 | 
						|
     if (!m_certificate)
 | 
						|
         return std::nullopt;
 | 
						|
 
 | 
						|
+#if GLIB_CHECK_VERSION(2, 69, 0)
 | 
						|
     CertificateSummary summaryInfo;
 | 
						|
 
 | 
						|
     GRefPtr<GDateTime> validNotBefore;
 | 
						|
@@ -125,6 +130,9 @@ std::optional<CertificateSummary> CertificateInfo::summary() const
 | 
						|
     }
 | 
						|
 
 | 
						|
     return summaryInfo;
 | 
						|
+#else
 | 
						|
+    return std::nullopt;
 | 
						|
+#endif
 | 
						|
 }
 | 
						|
 
 | 
						|
 } // namespace WebCore
 | 
						|
diff --git a/Source/WebKit/NetworkProcess/glib/DNSCache.cpp b/Source/WebKit/NetworkProcess/glib/DNSCache.cpp
 | 
						|
index db92010baabf..b717b734e8e8 100644
 | 
						|
--- a/Source/WebKit/NetworkProcess/glib/DNSCache.cpp
 | 
						|
+++ b/Source/WebKit/NetworkProcess/glib/DNSCache.cpp
 | 
						|
@@ -50,9 +50,17 @@ DNSCache::DNSCacheMap& DNSCache::mapForType(Type type)
 | 
						|
     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::removeExpiredResponsesFired()
 | 
						|
 {
 | 
						|
     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 --git a/Source/WebKit/NetworkProcess/glib/DNSCache.h b/Source/WebKit/NetworkProcess/glib/DNSCache.h
 | 
						|
index 6aa530f44321..49aded549588 100644
 | 
						|
--- a/Source/WebKit/NetworkProcess/glib/DNSCache.h
 | 
						|
+++ b/Source/WebKit/NetworkProcess/glib/DNSCache.h
 | 
						|
@@ -65,8 +65,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 --git a/Source/WebKit/NetworkProcess/glib/WebKitCachedResolver.cpp b/Source/WebKit/NetworkProcess/glib/WebKitCachedResolver.cpp
 | 
						|
index 2752ff9cfc2c..7804e8b7a588 100644
 | 
						|
--- a/Source/WebKit/NetworkProcess/glib/WebKitCachedResolver.cpp
 | 
						|
+++ b/Source/WebKit/NetworkProcess/glib/WebKitCachedResolver.cpp
 | 
						|
@@ -67,7 +67,9 @@ static Vector<GRefPtr<GInetAddress>> addressListGListToVector(GList* addressList
 | 
						|
 
 | 
						|
 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* webkitCachedResolverLookupByNameFinish(GResolver* resolver, GAsync
 | 
						|
     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* webkitCachedResolverLookupByNameWithFlagsFinish(GResolver* resolve
 | 
						|
 
 | 
						|
     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_init(WebKitCachedResolverClass* klass)
 | 
						|
     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 --git a/Source/WebKit/NetworkProcess/glib/WebKitOverridingResolver.cpp b/Source/WebKit/NetworkProcess/glib/WebKitOverridingResolver.cpp
 | 
						|
index 150d74ed0296..f461e3c695fe 100644
 | 
						|
--- a/Source/WebKit/NetworkProcess/glib/WebKitOverridingResolver.cpp
 | 
						|
+++ b/Source/WebKit/NetworkProcess/glib/WebKitOverridingResolver.cpp
 | 
						|
@@ -90,6 +90,7 @@ static GList* webkitOverridingResolverLookupByNameFinish(GResolver* resolver, GA
 | 
						|
     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* webkitOverridingResolverLookupByNameWithFlagsFinish(GResolver* res
 | 
						|
 
 | 
						|
     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_class_init(WebKitOverridingResolverClass*
 | 
						|
     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 --git a/Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp b/Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp
 | 
						|
index a73466be12f1..9ab0cfb6f440 100644
 | 
						|
--- a/Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp
 | 
						|
+++ b/Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp
 | 
						|
@@ -121,11 +121,13 @@ void ArgumentCoder<GRefPtr<GTlsCertificate>>::encode(Encoder& encoder, const GRe
 | 
						|
 
 | 
						|
     encoder << certificatesData;
 | 
						|
 
 | 
						|
+#if GLIB_CHECK_VERSION(2, 69, 0)
 | 
						|
     GRefPtr<GByteArray> privateKey;
 | 
						|
     GUniqueOutPtr<char> privateKeyPKCS11Uri;
 | 
						|
     g_object_get(certificate.get(), "private-key", &privateKey.outPtr(), "private-key-pkcs11-uri", &privateKeyPKCS11Uri.outPtr(), nullptr);
 | 
						|
     encoder << privateKey;
 | 
						|
     encoder << CString(privateKeyPKCS11Uri.get());
 | 
						|
+#endif
 | 
						|
 }
 | 
						|
 
 | 
						|
 std::optional<GRefPtr<GTlsCertificate>> ArgumentCoder<GRefPtr<GTlsCertificate>>::decode(Decoder& decoder)
 | 
						|
@@ -138,6 +140,7 @@ std::optional<GRefPtr<GTlsCertificate>> ArgumentCoder<GRefPtr<GTlsCertificate>>:
 | 
						|
     if (!certificatesData->size())
 | 
						|
         return GRefPtr<GTlsCertificate>();
 | 
						|
 
 | 
						|
+#if GLIB_CHECK_VERSION(2, 69, 0)
 | 
						|
     std::optional<GRefPtr<GByteArray>> privateKey;
 | 
						|
     decoder >> privateKey;
 | 
						|
     if (UNLIKELY(!privateKey))
 | 
						|
@@ -147,6 +150,7 @@ std::optional<GRefPtr<GTlsCertificate>> ArgumentCoder<GRefPtr<GTlsCertificate>>:
 | 
						|
     decoder >> privateKeyPKCS11Uri;
 | 
						|
     if (UNLIKELY(!privateKeyPKCS11Uri))
 | 
						|
         return std::nullopt;
 | 
						|
+#endif
 | 
						|
 
 | 
						|
     GType certificateType = g_tls_backend_get_certificate_type(g_tls_backend_get_default());
 | 
						|
     GRefPtr<GTlsCertificate> certificate;
 | 
						|
@@ -156,8 +160,10 @@ std::optional<GRefPtr<GTlsCertificate>> ArgumentCoder<GRefPtr<GTlsCertificate>>:
 | 
						|
             certificateType, nullptr, nullptr,
 | 
						|
             "certificate", certificateData.get(),
 | 
						|
             "issuer", issuer,
 | 
						|
+#if GLIB_CHECK_VERSION(2, 69, 0)
 | 
						|
             "private-key", i == certificatesData->size() - 1 ? privateKey->get() : nullptr,
 | 
						|
             "private-key-pkcs11-uri", i == certificatesData->size() - 1 ? privateKeyPKCS11Uri->data() : nullptr,
 | 
						|
+#endif
 | 
						|
             nullptr)));
 | 
						|
         issuer = certificate.get();
 | 
						|
     }
 | 
						|
diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake
 | 
						|
index 4a285e849cfd..0aca16c1d25f 100644
 | 
						|
--- a/Source/cmake/OptionsGTK.cmake
 | 
						|
+++ b/Source/cmake/OptionsGTK.cmake
 | 
						|
@@ -205,6 +204,13 @@ else ()
 | 
						|
     SET_AND_EXPOSE_TO_BUILD(ENABLE_2022_GLIB_API OFF)
 | 
						|
 endif ()
 | 
						|
 
 | 
						|
+if (ENABLE_2022_GLIB_API)
 | 
						|
+    set(GLIB_MINIMUM_VERSION 2.70.0)
 | 
						|
+else ()
 | 
						|
+    set(GLIB_MINIMUM_VERSION 2.56.4)
 | 
						|
+endif ()
 | 
						|
+find_package(GLIB ${GLIB_MINIMUM_VERSION} REQUIRED COMPONENTS gio gio-unix gobject gthread gmodule)
 | 
						|
+
 | 
						|
 EXPOSE_STRING_VARIABLE_TO_BUILD(WEBKITGTK_API_INFIX)
 | 
						|
 EXPOSE_STRING_VARIABLE_TO_BUILD(WEBKITGTK_API_VERSION)
 | 
						|
 
 | 
						|
@@ -277,6 +283,11 @@ if (ENABLED_COMPILER_SANITIZERS)
 | 
						|
     set(ENABLE_DOCUMENTATION OFF)
 | 
						|
 endif ()
 | 
						|
 
 | 
						|
+# GUri is available in GLib since version 2.66, but we only want to use it if version is >= 2.67.1.
 | 
						|
+if (PC_GLIB_VERSION VERSION_GREATER "2.67.1" OR PC_GLIB_VERSION STREQUAL "2.67.1")
 | 
						|
+    SET_AND_EXPOSE_TO_BUILD(HAVE_GURI 1)
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
 if (ENABLE_GAMEPAD)
 | 
						|
     find_package(Manette 0.2.4)
 | 
						|
     if (NOT Manette_FOUND)
 | 
						|
-- 
 | 
						|
2.49.0
 | 
						|
diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake
 | 
						|
index 6c39538ba6fc..0a30e0c4c7c1 100644
 | 
						|
--- a/Source/cmake/OptionsGTK.cmake
 | 
						|
+++ b/Source/cmake/OptionsGTK.cmake
 | 
						|
@@ -7,7 +7,6 @@ SET_PROJECT_VERSION(2 48 1)
 | 
						|
 
 | 
						|
 set(USER_AGENT_BRANDING "" CACHE STRING "Branding to add to user agent string")
 | 
						|
 
 | 
						|
-find_package(GLIB 2.70.0 REQUIRED COMPONENTS gio gio-unix gobject gthread gmodule)
 | 
						|
 find_package(Cairo 1.14.0 REQUIRED)
 | 
						|
 find_package(LibGcrypt 1.7.0 REQUIRED)
 | 
						|
 find_package(Libtasn1 REQUIRED)
 |