aboutsummaryrefslogtreecommitdiff
path: root/vendor/libghostty-vt/src/build/GhosttyLib.zig
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-07 18:29:21 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-07 18:29:21 +0300
commitdcfe11a7588fcd42471159453810abc9b7720a57 (patch)
treec32a77266028e73ca2382b96c96f8438a5fcd621 /vendor/libghostty-vt/src/build/GhosttyLib.zig
parent2dfed860103c4e4505ac7f25def9fe37da1e1e6a (diff)
build: update libghostty-vt vendor
vendor ghostty 063ac3e and remove the musl libc++ link workaround. expose the new selection formatter and hyperlink uri apis for follow-up rendering work. add manual artifact validation for static linux builds.
Diffstat (limited to 'vendor/libghostty-vt/src/build/GhosttyLib.zig')
-rw-r--r--vendor/libghostty-vt/src/build/GhosttyLib.zig119
1 files changed, 100 insertions, 19 deletions
diff --git a/vendor/libghostty-vt/src/build/GhosttyLib.zig b/vendor/libghostty-vt/src/build/GhosttyLib.zig
index 4e15fbbf..b762da8b 100644
--- a/vendor/libghostty-vt/src/build/GhosttyLib.zig
+++ b/vendor/libghostty-vt/src/build/GhosttyLib.zig
@@ -2,9 +2,9 @@ const GhosttyLib = @This();
const std = @import("std");
const RunStep = std.Build.Step.Run;
+const CombineArchivesStep = @import("CombineArchivesStep.zig");
const Config = @import("Config.zig");
const SharedDeps = @import("SharedDeps.zig");
-const LibtoolStep = @import("LibtoolStep.zig");
const LipoStep = @import("LipoStep.zig");
/// The step that generates the file.
@@ -13,6 +13,8 @@ step: *std.Build.Step,
/// The final static library file
output: std.Build.LazyPath,
dsym: ?std.Build.LazyPath,
+pkg_config: ?std.Build.LazyPath,
+pkg_config_static: ?std.Build.LazyPath,
pub fn initStatic(
b: *std.Build,
@@ -46,30 +48,23 @@ pub fn initStatic(
}
// Add our dependencies. Get the list of all static deps so we can
- // build a combined archive if necessary.
+ // build a combined archive.
var lib_list = try deps.add(lib);
try lib_list.append(b.allocator, lib.getEmittedBin());
- if (!deps.config.target.result.os.tag.isDarwin()) return .{
- .step = &lib.step,
- .output = lib.getEmittedBin(),
- .dsym = null,
- };
-
- // Create a static lib that contains all our dependencies.
- const libtool = LibtoolStep.create(b, .{
- .name = "ghostty",
- .out_name = "libghostty-fat.a",
- .sources = lib_list.items,
- });
- libtool.step.dependOn(&lib.step);
+ // Combine all archives into a single fat static library so
+ // consumers only need to link one file.
+ const combined = CombineArchivesStep.create(b, deps.config.target, "ghostty-internal", lib_list.items);
+ combined.step.dependOn(&lib.step);
return .{
- .step = libtool.step,
- .output = libtool.output,
+ .step = combined.step,
+ .output = combined.output,
// Static libraries cannot have dSYMs because they aren't linked.
.dsym = null,
+ .pkg_config = null,
+ .pkg_config_static = null,
};
}
@@ -146,10 +141,20 @@ pub fn initShared(
break :dsymutil output;
};
+ // pkg-config
+ //
+ // pkg-config's --static only expands Libs.private / Requires.private;
+ // it doesn't rewrite Libs: into an archive-only reference when both
+ // shared and static libraries are installed. Install a dedicated
+ // static module so consumers can request the archive explicitly.
+ const pcs = pkgConfigFiles(b, deps);
+
return .{
.step = &lib.step,
.output = lib.getEmittedBin(),
.dsym = dsymutil,
+ .pkg_config = pcs.shared,
+ .pkg_config_static = pcs.static,
};
}
@@ -168,7 +173,7 @@ pub fn initMacOSUniversal(
const universal = LipoStep.create(b, .{
.name = "ghostty",
- .out_name = "libghostty.a",
+ .out_name = "ghostty-internal.a",
.input_a = aarch64.output,
.input_b = x86_64.output,
});
@@ -180,13 +185,31 @@ pub fn initMacOSUniversal(
// You can't run dsymutil on a universal binary, you have to
// do it on the individual binaries.
.dsym = null,
+ .pkg_config = null,
+ .pkg_config_static = null,
};
}
pub fn install(self: *const GhosttyLib, name: []const u8) void {
const b = self.step.owner;
+ const step = b.getInstallStep();
const lib_install = b.addInstallLibFile(self.output, name);
- b.getInstallStep().dependOn(&lib_install.step);
+ step.dependOn(&lib_install.step);
+
+ if (self.pkg_config) |pc| {
+ step.dependOn(&b.addInstallFileWithDir(
+ pc,
+ .prefix,
+ "share/pkgconfig/ghostty-internal.pc",
+ ).step);
+ }
+ if (self.pkg_config_static) |pc| {
+ step.dependOn(&b.addInstallFileWithDir(
+ pc,
+ .prefix,
+ "share/pkgconfig/ghostty-internal-static.pc",
+ ).step);
+ }
}
pub fn installHeader(self: *const GhosttyLib) void {
@@ -197,3 +220,61 @@ pub fn installHeader(self: *const GhosttyLib) void {
);
b.getInstallStep().dependOn(&header_install.step);
}
+
+const PkgConfigFiles = struct {
+ shared: std.Build.LazyPath,
+ static: std.Build.LazyPath,
+};
+
+fn pkgConfigFiles(
+ b: *std.Build,
+ deps: *const SharedDeps,
+) PkgConfigFiles {
+ const os_tag = deps.config.target.result.os.tag;
+ const wf = b.addWriteFiles();
+
+ return .{
+ .shared = wf.add("ghostty-internal.pc", b.fmt(
+ \\prefix={s}
+ \\includedir=${{prefix}}/include
+ \\libdir=${{prefix}}/lib
+ \\
+ \\Name: ghostty-internal
+ \\URL: https://github.com/ghostty-org/ghostty
+ \\Description: Ghostty internal library (not for external use)
+ \\Version: {f}
+ \\Cflags: -I${{includedir}}
+ \\Libs: ${{libdir}}/{s}
+ \\Libs.private:
+ \\Requires.private:
+ , .{ b.install_prefix, deps.config.version, sharedLibraryName(os_tag) })),
+ .static = wf.add("ghostty-internal-static.pc", b.fmt(
+ \\prefix={s}
+ \\includedir=${{prefix}}/include
+ \\libdir=${{prefix}}/lib
+ \\
+ \\Name: ghostty-internal-static
+ \\URL: https://github.com/ghostty-org/ghostty
+ \\Description: Ghostty internal library, static (not for external use)
+ \\Version: {f}
+ \\Cflags: -I${{includedir}}
+ \\Libs: ${{libdir}}/{s}
+ \\Libs.private:
+ \\Requires.private:
+ , .{ b.install_prefix, deps.config.version, staticLibraryName(os_tag) })),
+ };
+}
+
+fn sharedLibraryName(os_tag: std.Target.Os.Tag) []const u8 {
+ return if (os_tag == .windows)
+ "ghostty-internal.dll"
+ else
+ "ghostty-internal.so";
+}
+
+fn staticLibraryName(os_tag: std.Target.Os.Tag) []const u8 {
+ return if (os_tag == .windows)
+ "ghostty-internal-static.lib"
+ else
+ "ghostty-internal.a";
+}