From bf3a607db622b90e113e43b8814df13689336515 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Fri, 19 Sep 2025 06:46:56 +0200 Subject: [PATCH] build: Add a new snap option and use it to build the snap So we can limit the snap operations even at build time --- snap/snapcraft.yaml | 7 ++++++- src/apprt/gtk/class/surface.zig | 7 +++++-- src/build/Config.zig | 9 +++++++++ src/build_config.zig | 1 + 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 0962bf972..c5a86ade7 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -79,7 +79,12 @@ parts: # TODO: Remove -fno-sys=gtk4-layer-shell when we upgrade to a version that packages it Ubuntu 24.10+ override-build: | craftctl set version=$(cat VERSION) - $CRAFT_PART_SRC/../../zig/src/zig build -Dpatch-rpath=\$ORIGIN/../usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:/snap/core24/current/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR -Doptimize=ReleaseFast -Dcpu=baseline -fno-sys=gtk4-layer-shell + $CRAFT_PART_SRC/../../zig/src/zig build \ + -Dsnap=true \ + -Dpatch-rpath=\$ORIGIN/../usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:/snap/core24/current/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR \ + -Doptimize=ReleaseFast \ + -Dcpu=baseline \ + -fno-sys=gtk4-layer-shell cp -rp zig-out/* $CRAFT_PART_INSTALL/ sed -i 's|Icon=com.mitchellh.ghostty|Icon=${SNAP}/share/icons/hicolor/512x512/apps/com.mitchellh.ghostty.png|g' $CRAFT_PART_INSTALL/share/applications/com.mitchellh.ghostty.desktop diff --git a/src/apprt/gtk/class/surface.zig b/src/apprt/gtk/class/surface.zig index fb2f2bd47..e9aab43db 100644 --- a/src/apprt/gtk/class/surface.zig +++ b/src/apprt/gtk/class/surface.zig @@ -9,6 +9,7 @@ const gobject = @import("gobject"); const gtk = @import("gtk"); const apprt = @import("../../../apprt.zig"); +const build_config = @import("../../../build_config.zig"); const datastruct = @import("../../../datastruct/main.zig"); const font = @import("../../../font/main.zig"); const input = @import("../../../input.zig"); @@ -1227,8 +1228,10 @@ pub const Surface = extern struct { // Unset environment varies set by snaps if we're running in a snap. // This allows Ghostty to further launch additional snaps. - if (env.get("SNAP")) |_| { - try filterSnapPaths(alloc, &env); + if (comptime build_config.snap) { + if (env.get("SNAP")) |_| { + try filterSnapPaths(alloc, &env); + } } // This is a hack because it ties ourselves (optionally) to the diff --git a/src/build/Config.zig b/src/build/Config.zig index 9c74f14e8..746021930 100644 --- a/src/build/Config.zig +++ b/src/build/Config.zig @@ -51,6 +51,7 @@ patch_rpath: ?[]const u8 = null, /// Artifacts flatpak: bool = false, +snap: bool = false, emit_bench: bool = false, emit_docs: bool = false, emit_exe: bool = false, @@ -152,6 +153,12 @@ pub fn init(b: *std.Build) !Config { "Build for Flatpak (integrates with Flatpak APIs). Only has an effect targeting Linux.", ) orelse false; + config.snap = b.option( + bool, + "snap", + "Build for Snap (do specific Snap operations). Only has an effect targeting Linux.", + ) orelse false; + config.sentry = b.option( bool, "sentry", @@ -442,6 +449,7 @@ pub fn addOptions(self: *const Config, step: *std.Build.Step.Options) !void { // We need to break these down individual because addOption doesn't // support all types. step.addOption(bool, "flatpak", self.flatpak); + step.addOption(bool, "snap", self.snap); step.addOption(bool, "x11", self.x11); step.addOption(bool, "wayland", self.wayland); step.addOption(bool, "sentry", self.sentry); @@ -506,6 +514,7 @@ pub fn fromOptions() Config { .app_runtime = std.meta.stringToEnum(ApprtRuntime, @tagName(options.app_runtime)).?, .font_backend = std.meta.stringToEnum(FontBackend, @tagName(options.font_backend)).?, .renderer = std.meta.stringToEnum(RendererBackend, @tagName(options.renderer)).?, + .snap = options.snap, .exe_entrypoint = std.meta.stringToEnum(ExeEntrypoint, @tagName(options.exe_entrypoint)).?, .wasm_target = std.meta.stringToEnum(WasmTarget, @tagName(options.wasm_target)).?, .wasm_shared = options.wasm_shared, diff --git a/src/build_config.zig b/src/build_config.zig index ebd14bfe8..0d294c69e 100644 --- a/src/build_config.zig +++ b/src/build_config.zig @@ -38,6 +38,7 @@ pub const artifact = Artifact.detect(); const config = BuildConfig.fromOptions(); pub const exe_entrypoint = config.exe_entrypoint; pub const flatpak = options.flatpak; +pub const snap = options.snap; pub const app_runtime: apprt.Runtime = config.app_runtime; pub const font_backend: font.Backend = config.font_backend; pub const renderer: rendererpkg.Backend = config.renderer;