Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions HACKING.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,15 @@ here:
| `zig build dist` | Builds a source tarball |
| `zig build distcheck` | Builds and validates a source tarball |

## FontConfig and GTK

Because of the global shared state that FontConfig maintains, FontConfig must
be linked dynamically to the same system FontConfig shared library that GTK
uses. Ghostty's default has been changed to always link to the system FontConfig
library. If that is overridden (by specifying `-fno-sys=fontconfig` during the
build) Ghostty may crash when trying to locate glyphs that are not available in
the default font.

## Extra Dependencies

Building Ghostty from a Git checkout on Linux requires some additional
Expand Down
14 changes: 13 additions & 1 deletion src/build/Config.zig
Original file line number Diff line number Diff line change
Expand Up @@ -424,14 +424,26 @@ pub fn init(b: *std.Build, appVersion: []const u8) !Config {
// show up properly in `--help`.

{
// These should default to `true` except on macOS because linking them
// to Ghostty statically when GTK is dynamically linked to them can
// cause crashes.
for (&[_][]const u8{
"fontconfig",
}) |dep| {
_ = b.systemIntegrationOption(
dep,
.{
.default = if (target.result.os.tag.isDarwin()) false else true,
},
);
}
// These dependencies we want to default false if we're on macOS.
// On macOS we don't want to use system libraries because we
// generally want a fat binary. This can be overridden with the
// `-fsys` flag.
for (&[_][]const u8{
"freetype",
"harfbuzz",
"fontconfig",
"libpng",
"zlib",
"oniguruma",
Expand Down
7 changes: 7 additions & 0 deletions src/build/SharedDeps.zig
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,13 @@ pub fn add(
if (b.systemIntegrationOption("fontconfig", .{})) {
step.linkSystemLibrary2("fontconfig", dynamic_link_opts);
} else {
if (self.config.app_runtime == .gtk)
std.debug.print(
\\WARNING: Statically linking FontConfig when using the GTK app runtime is known
\\to cause crashes! It is HIGHLY recommended that Ghostty be dynamically linked
\\to the system FontConfig library.
\\
, .{});
step.linkLibrary(fontconfig_dep.artifact("fontconfig"));
try static_libs.append(
b.allocator,
Expand Down
Loading