x11-terms/ghostty: apply upstream patch for gtk version skew

Link: https://github.com/ghostty-org/ghostty/pull/4783
Closes: https://bugs.gentoo.org/947584
Signed-off-by: sin-ack <sin-ack@protonmail.com>
Closes: https://github.com/gentoo/gentoo/pull/40040
Signed-off-by: Joonas Niilola <juippis@gentoo.org>
This commit is contained in:
sin-ack
2025-01-08 06:54:32 +00:00
committed by Joonas Niilola
parent 41ca784f80
commit ee5eb81093
2 changed files with 126 additions and 0 deletions

View File

@@ -0,0 +1,125 @@
From 83bb35ffa3dae7093b829aec380d1ef322a10efb Mon Sep 17 00:00:00 2001
From: sin-ack <sin-ack@protonmail.com>
Date: Tue, 7 Jan 2025 19:12:53 +0000
Subject: [PATCH 1/2] apprt/gtk: Add version.runtimeAtLeast
This will be used for version checks that are independent of the version
of GTK we built against.
---
src/apprt/gtk/version.zig | 38 ++++++++++++++++++++++++++++++--------
1 file changed, 30 insertions(+), 8 deletions(-)
diff --git a/src/apprt/gtk/version.zig b/src/apprt/gtk/version.zig
index af7ad12ea0..d8686fa28a 100644
--- a/src/apprt/gtk/version.zig
+++ b/src/apprt/gtk/version.zig
@@ -7,6 +7,11 @@ const c = @import("c.zig").c;
/// in the headers. If it is run in a runtime context, it will
/// check the actual version of the library we are linked against.
///
+/// This function should be used in cases where the version check
+/// would affect code generation, such as using symbols that are
+/// only available beyond a certain version. For checks which only
+/// depend on GTK's runtime behavior, use `runtimeAtLeast`.
+///
/// This is inlined so that the comptime checks will disable the
/// runtime checks if the comptime checks fail.
pub inline fn atLeast(
@@ -26,6 +31,20 @@ pub inline fn atLeast(
// If we're in comptime then we can't check the runtime version.
if (@inComptime()) return true;
+ return runtimeAtLeast(major, minor, micro);
+}
+
+/// Verifies that the GTK version at runtime is at least the given
+/// version.
+///
+/// This function should be used in cases where the only the runtime
+/// behavior is affected by the version check. For checks which would
+/// affect code generation, use `atLeast`.
+pub inline fn runtimeAtLeast(
+ comptime major: u16,
+ comptime minor: u16,
+ comptime micro: u16,
+) bool {
// We use the functions instead of the constants such as
// c.GTK_MINOR_VERSION because the function gets the actual
// runtime version.
@@ -44,15 +63,18 @@ test "atLeast" {
const std = @import("std");
const testing = std.testing;
- try testing.expect(atLeast(c.GTK_MAJOR_VERSION, c.GTK_MINOR_VERSION, c.GTK_MICRO_VERSION));
+ const funs = &.{ atLeast, runtimeAtLeast };
+ inline for (funs) |fun| {
+ try testing.expect(fun(c.GTK_MAJOR_VERSION, c.GTK_MINOR_VERSION, c.GTK_MICRO_VERSION));
- try testing.expect(!atLeast(c.GTK_MAJOR_VERSION, c.GTK_MINOR_VERSION, c.GTK_MICRO_VERSION + 1));
- try testing.expect(!atLeast(c.GTK_MAJOR_VERSION, c.GTK_MINOR_VERSION + 1, c.GTK_MICRO_VERSION));
- try testing.expect(!atLeast(c.GTK_MAJOR_VERSION + 1, c.GTK_MINOR_VERSION, c.GTK_MICRO_VERSION));
+ try testing.expect(!fun(c.GTK_MAJOR_VERSION, c.GTK_MINOR_VERSION, c.GTK_MICRO_VERSION + 1));
+ try testing.expect(!fun(c.GTK_MAJOR_VERSION, c.GTK_MINOR_VERSION + 1, c.GTK_MICRO_VERSION));
+ try testing.expect(!fun(c.GTK_MAJOR_VERSION + 1, c.GTK_MINOR_VERSION, c.GTK_MICRO_VERSION));
- try testing.expect(atLeast(c.GTK_MAJOR_VERSION - 1, c.GTK_MINOR_VERSION, c.GTK_MICRO_VERSION));
- try testing.expect(atLeast(c.GTK_MAJOR_VERSION - 1, c.GTK_MINOR_VERSION + 1, c.GTK_MICRO_VERSION));
- try testing.expect(atLeast(c.GTK_MAJOR_VERSION - 1, c.GTK_MINOR_VERSION, c.GTK_MICRO_VERSION + 1));
+ try testing.expect(fun(c.GTK_MAJOR_VERSION - 1, c.GTK_MINOR_VERSION, c.GTK_MICRO_VERSION));
+ try testing.expect(fun(c.GTK_MAJOR_VERSION - 1, c.GTK_MINOR_VERSION + 1, c.GTK_MICRO_VERSION));
+ try testing.expect(fun(c.GTK_MAJOR_VERSION - 1, c.GTK_MINOR_VERSION, c.GTK_MICRO_VERSION + 1));
- try testing.expect(atLeast(c.GTK_MAJOR_VERSION, c.GTK_MINOR_VERSION - 1, c.GTK_MICRO_VERSION + 1));
+ try testing.expect(fun(c.GTK_MAJOR_VERSION, c.GTK_MINOR_VERSION - 1, c.GTK_MICRO_VERSION + 1));
+ }
}
From 8a7e6c050c556463b126181e01f256a0043ca14a Mon Sep 17 00:00:00 2001
From: sin-ack <sin-ack@protonmail.com>
Date: Tue, 7 Jan 2025 19:53:27 +0000
Subject: [PATCH 2/2] apprt/gtk: Move most version checks to runtime
Unless we are guarding against symbols added in new versions we now
check against the runtime version of GTK to handle them even when we
didn't build against that version.
---
src/apprt/gtk/App.zig | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/apprt/gtk/App.zig b/src/apprt/gtk/App.zig
index 3cc1782c86..993dfcc328 100644
--- a/src/apprt/gtk/App.zig
+++ b/src/apprt/gtk/App.zig
@@ -104,12 +104,12 @@ pub fn init(core_app: *CoreApp, opts: Options) !App {
// Disabling Vulkan can improve startup times by hundreds of
// milliseconds on some systems. We don't use Vulkan so we can just
// disable it.
- if (version.atLeast(4, 16, 0)) {
+ if (version.runtimeAtLeast(4, 16, 0)) {
// From gtk 4.16, GDK_DEBUG is split into GDK_DEBUG and GDK_DISABLE.
// For the remainder of "why" see the 4.14 comment below.
_ = internal_os.setenv("GDK_DISABLE", "gles-api,vulkan");
_ = internal_os.setenv("GDK_DEBUG", "opengl");
- } else if (version.atLeast(4, 14, 0)) {
+ } else if (version.runtimeAtLeast(4, 14, 0)) {
// We need to export GDK_DEBUG to run on Wayland after GTK 4.14.
// Older versions of GTK do not support these values so it is safe
// to always set this. Forwards versions are uncertain so we'll have to
@@ -131,7 +131,7 @@ pub fn init(core_app: *CoreApp, opts: Options) !App {
_ = internal_os.setenv("GDK_DEBUG", "vulkan-disable");
}
- if (version.atLeast(4, 14, 0)) {
+ if (version.runtimeAtLeast(4, 14, 0)) {
// We need to export GSK_RENDERER to opengl because GTK uses ngl by
// default after 4.14
_ = internal_os.setenv("GSK_RENDERER", "opengl");
@@ -983,7 +983,7 @@ fn loadRuntimeCss(
unfocused_fill.b,
});
- if (version.atLeast(4, 16, 0)) {
+ if (version.runtimeAtLeast(4, 16, 0)) {
switch (window_theme) {
.ghostty => try writer.print(
\\:root {{

View File

@@ -99,6 +99,7 @@ QA_PRESTRIPPED="usr/bin/ghostty"
PATCHES=(
"${FILESDIR}"/${PN}-1.0.0-bzip2-dependency.patch
"${FILESDIR}"/${PN}-1.0.1-copy-terminfo-using-installdir.patch
"${FILESDIR}"/${PN}-1.0.1-apprt-gtk-move-most-version-checks-to-runtime.patch
)
src_configure() {