commit: ee5eb81093ec8c2efea73c18815b4acca7074319 Author: sin-ack <sin-ack <AT> protonmail <DOT> com> AuthorDate: Wed Jan 8 06:54:32 2025 +0000 Commit: Joonas Niilola <juippis <AT> gentoo <DOT> org> CommitDate: Tue Jan 14 15:15:51 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ee5eb810
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 <AT> protonmail.com> Closes: https://github.com/gentoo/gentoo/pull/40040 Signed-off-by: Joonas Niilola <juippis <AT> gentoo.org> ...t-gtk-move-most-version-checks-to-runtime.patch | 125 +++++++++++++++++++++ ...tty-1.0.1-r1.ebuild => ghostty-1.0.1-r2.ebuild} | 1 + 2 files changed, 126 insertions(+) diff --git a/x11-terms/ghostty/files/ghostty-1.0.1-apprt-gtk-move-most-version-checks-to-runtime.patch b/x11-terms/ghostty/files/ghostty-1.0.1-apprt-gtk-move-most-version-checks-to-runtime.patch new file mode 100644 index 000000000000..f8dca8663911 --- /dev/null +++ b/x11-terms/ghostty/files/ghostty-1.0.1-apprt-gtk-move-most-version-checks-to-runtime.patch @@ -0,0 +1,125 @@ +From 83bb35ffa3dae7093b829aec380d1ef322a10efb Mon Sep 17 00:00:00 2001 +From: sin-ack <[email protected]> +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 <[email protected]> +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 {{ diff --git a/x11-terms/ghostty/ghostty-1.0.1-r1.ebuild b/x11-terms/ghostty/ghostty-1.0.1-r2.ebuild similarity index 99% rename from x11-terms/ghostty/ghostty-1.0.1-r1.ebuild rename to x11-terms/ghostty/ghostty-1.0.1-r2.ebuild index 95117192ae04..d9694b9dbe7c 100644 --- a/x11-terms/ghostty/ghostty-1.0.1-r1.ebuild +++ b/x11-terms/ghostty/ghostty-1.0.1-r2.ebuild @@ -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() {
