mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
don't build freetype2 when system integration is enabled (#4543)
yet another follow up to #4534 some notes: - different parts of the build system link against freetype2 or freetype with freetype2 being the name for the pkg-config file. Because of the include path in freetype-zig.h the pkg-config is needed otherwise it would be unable to find the headers. The change isn't technically needed for the harfbuzz and fontconfig modules however I think its best to keep them all consistent since otherwise it might cause build errors in non standard setups - looking back, I initially modelled buildLib after the build function and kept the pub, none of them need to be public so I've gone ahead and removed all of that test logic was kept just as they were before with a setup exact like it was done for oniguruma the main program and the testsall seem to work just fine both with and without system integration
This commit is contained in:
@ -56,7 +56,7 @@ pub fn build(b: *std.Build) !void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Build.Step.Compile {
|
fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Build.Step.Compile {
|
||||||
const target = options.target;
|
const target = options.target;
|
||||||
const optimize = options.optimize;
|
const optimize = options.optimize;
|
||||||
|
|
||||||
@ -186,7 +186,7 @@ pub fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*st
|
|||||||
_ = b.systemIntegrationOption("freetype", .{}); // So it shows up in help
|
_ = b.systemIntegrationOption("freetype", .{}); // So it shows up in help
|
||||||
if (freetype_enabled) {
|
if (freetype_enabled) {
|
||||||
if (b.systemIntegrationOption("freetype", .{})) {
|
if (b.systemIntegrationOption("freetype", .{})) {
|
||||||
lib.linkSystemLibrary2("freetype", dynamic_link_opts);
|
lib.linkSystemLibrary2("freetype2", dynamic_link_opts);
|
||||||
} else {
|
} else {
|
||||||
const freetype_dep = b.dependency(
|
const freetype_dep = b.dependency(
|
||||||
"freetype",
|
"freetype",
|
||||||
|
@ -5,7 +5,61 @@ pub fn build(b: *std.Build) !void {
|
|||||||
const optimize = b.standardOptimizeOption(.{});
|
const optimize = b.standardOptimizeOption(.{});
|
||||||
const libpng_enabled = b.option(bool, "enable-libpng", "Build libpng") orelse false;
|
const libpng_enabled = b.option(bool, "enable-libpng", "Build libpng") orelse false;
|
||||||
|
|
||||||
const module = b.addModule("freetype", .{ .root_source_file = b.path("main.zig") });
|
const module = b.addModule("freetype", .{
|
||||||
|
.root_source_file = b.path("main.zig"),
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
});
|
||||||
|
|
||||||
|
// For dynamic linking, we prefer dynamic linking and to search by
|
||||||
|
// mode first. Mode first will search all paths for a dynamic library
|
||||||
|
// before falling back to static.
|
||||||
|
const dynamic_link_opts: std.Build.Module.LinkSystemLibraryOptions = .{
|
||||||
|
.preferred_link_mode = .dynamic,
|
||||||
|
.search_strategy = .mode_first,
|
||||||
|
};
|
||||||
|
|
||||||
|
var test_exe: ?*std.Build.Step.Compile = null;
|
||||||
|
if (target.query.isNative()) {
|
||||||
|
test_exe = b.addTest(.{
|
||||||
|
.name = "test",
|
||||||
|
.root_source_file = b.path("main.zig"),
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
});
|
||||||
|
const tests_run = b.addRunArtifact(test_exe.?);
|
||||||
|
const test_step = b.step("test", "Run tests");
|
||||||
|
test_step.dependOn(&tests_run.step);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.addIncludePath(b.path(""));
|
||||||
|
|
||||||
|
if (b.systemIntegrationOption("freetype", .{})) {
|
||||||
|
module.linkSystemLibrary("freetype2", dynamic_link_opts);
|
||||||
|
if (test_exe) |exe| {
|
||||||
|
exe.linkSystemLibrary2("freetype2", dynamic_link_opts);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const lib = try buildLib(b, module, .{
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
|
||||||
|
.libpng_enabled = libpng_enabled,
|
||||||
|
|
||||||
|
.dynamic_link_opts = dynamic_link_opts,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (test_exe) |exe| {
|
||||||
|
exe.linkLibrary(lib);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Build.Step.Compile {
|
||||||
|
const target = options.target;
|
||||||
|
const optimize = options.optimize;
|
||||||
|
|
||||||
|
const libpng_enabled = options.libpng_enabled;
|
||||||
|
|
||||||
const upstream = b.dependency("freetype", .{});
|
const upstream = b.dependency("freetype", .{});
|
||||||
const lib = b.addStaticLibrary(.{
|
const lib = b.addStaticLibrary(.{
|
||||||
@ -21,16 +75,6 @@ pub fn build(b: *std.Build) !void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.addIncludePath(upstream.path("include"));
|
module.addIncludePath(upstream.path("include"));
|
||||||
module.addIncludePath(b.path(""));
|
|
||||||
|
|
||||||
// For dynamic linking, we prefer dynamic linking and to search by
|
|
||||||
// mode first. Mode first will search all paths for a dynamic library
|
|
||||||
// before falling back to static.
|
|
||||||
const dynamic_link_opts: std.Build.Module.LinkSystemLibraryOptions = .{
|
|
||||||
.preferred_link_mode = .dynamic,
|
|
||||||
.search_strategy = .mode_first,
|
|
||||||
};
|
|
||||||
|
|
||||||
var flags = std.ArrayList([]const u8).init(b.allocator);
|
var flags = std.ArrayList([]const u8).init(b.allocator);
|
||||||
defer flags.deinit();
|
defer flags.deinit();
|
||||||
try flags.appendSlice(&.{
|
try flags.appendSlice(&.{
|
||||||
@ -44,6 +88,8 @@ pub fn build(b: *std.Build) !void {
|
|||||||
"-fno-sanitize=undefined",
|
"-fno-sanitize=undefined",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const dynamic_link_opts = options.dynamic_link_opts;
|
||||||
|
|
||||||
// Zlib
|
// Zlib
|
||||||
if (b.systemIntegrationOption("zlib", .{})) {
|
if (b.systemIntegrationOption("zlib", .{})) {
|
||||||
lib.linkSystemLibrary2("zlib", dynamic_link_opts);
|
lib.linkSystemLibrary2("zlib", dynamic_link_opts);
|
||||||
@ -113,18 +159,7 @@ pub fn build(b: *std.Build) !void {
|
|||||||
|
|
||||||
b.installArtifact(lib);
|
b.installArtifact(lib);
|
||||||
|
|
||||||
if (target.query.isNative()) {
|
return lib;
|
||||||
const test_exe = b.addTest(.{
|
|
||||||
.name = "test",
|
|
||||||
.root_source_file = b.path("main.zig"),
|
|
||||||
.target = target,
|
|
||||||
.optimize = optimize,
|
|
||||||
});
|
|
||||||
test_exe.linkLibrary(lib);
|
|
||||||
const tests_run = b.addRunArtifact(test_exe);
|
|
||||||
const test_step = b.step("test", "Run tests");
|
|
||||||
test_step.dependOn(&tests_run.step);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const srcs: []const []const u8 = &.{
|
const srcs: []const []const u8 = &.{
|
||||||
|
@ -43,7 +43,11 @@ pub fn build(b: *std.Build) !void {
|
|||||||
{
|
{
|
||||||
var it = module.import_table.iterator();
|
var it = module.import_table.iterator();
|
||||||
while (it.next()) |entry| test_exe.root_module.addImport(entry.key_ptr.*, entry.value_ptr.*);
|
while (it.next()) |entry| test_exe.root_module.addImport(entry.key_ptr.*, entry.value_ptr.*);
|
||||||
test_exe.linkLibrary(freetype.artifact("freetype"));
|
if (b.systemIntegrationOption("freetype", .{})) {
|
||||||
|
test_exe.linkSystemLibrary2("freetype2", dynamic_link_opts);
|
||||||
|
} else {
|
||||||
|
test_exe.linkLibrary(freetype.artifact("freetype"));
|
||||||
|
}
|
||||||
const tests_run = b.addRunArtifact(test_exe);
|
const tests_run = b.addRunArtifact(test_exe);
|
||||||
const test_step = b.step("test", "Run tests");
|
const test_step = b.step("test", "Run tests");
|
||||||
test_step.dependOn(&tests_run.step);
|
test_step.dependOn(&tests_run.step);
|
||||||
@ -67,7 +71,7 @@ pub fn build(b: *std.Build) !void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Build.Step.Compile {
|
fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Build.Step.Compile {
|
||||||
const target = options.target;
|
const target = options.target;
|
||||||
const optimize = options.optimize;
|
const optimize = options.optimize;
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ pub fn build(b: *std.Build) !void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Build.Step.Compile {
|
fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Build.Step.Compile {
|
||||||
const target = options.target;
|
const target = options.target;
|
||||||
const optimize = options.optimize;
|
const optimize = options.optimize;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user