summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.zig13
-rw-r--r--mupdf.zig13
2 files changed, 17 insertions, 9 deletions
diff --git a/build.zig b/build.zig
index 3b57fff6..c70f52b2 100644
--- a/build.zig
+++ b/build.zig
@@ -421,11 +421,19 @@ pub fn build(b: *std.Build) void {
// One FreeType in a binary: the gui's glyph atlas links it and MuPDF is
// built against it (see mupdf.zig). At c_optimize with the rest of the
// vendored C, since MuPDF rasterizes a PDF's text through it.
- const freetype: ?*std.Build.Step.Compile = if (freestanding_core) null else b.dependency("freetype", .{
+ const freetype_dep: ?*std.Build.Dependency = if (freestanding_core) null else b.dependency("freetype", .{
.target = target,
.optimize = c_optimize,
.@"enable-libpng" = false,
- }).artifact("freetype");
+ });
+ const freetype: ?*std.Build.Step.Compile = if (freetype_dep) |dep| dep.artifact("freetype") else null;
+ // ...and one zlib, the one FreeType links for its gzip module. Asked of
+ // FreeType's build with the options it asks with, the dependency cache
+ // hands back that same artifact rather than a second copy.
+ const zlib: ?*std.Build.Step.Compile = if (freetype_dep) |dep|
+ dep.builder.dependency("zlib", .{ .target = target, .optimize = c_optimize }).artifact("z")
+ else
+ null;
if (enable_mupdf) {
if (b.lazyDependency("mupdf", .{})) |mupdf_dep| {
@@ -434,6 +442,7 @@ pub fn build(b: *std.Build) void {
.optimize = c_optimize,
.jpx = enable_jpx,
.freetype = freetype.?,
+ .zlib = zlib.?,
});
const mupdf_mod = b.createModule(.{
.target = target,
diff --git a/mupdf.zig b/mupdf.zig
index cda9a38a..a157e850 100644
--- a/mupdf.zig
+++ b/mupdf.zig
@@ -41,6 +41,10 @@ pub fn add(b: *std.Build, io: std.Io, dependency: *std.Build.Dependency, options
/// ran the slim one. MuPDF asks nothing of FreeType the full
/// configuration lacks.
freetype: *std.Build.Step.Compile,
+ /// The zlib FreeType links, which MuPDF links instead of compiling the
+ /// one it bundles (ZLIB_SRC): the two define the same symbols, as the
+ /// FreeTypes do.
+ zlib: *std.Build.Step.Compile,
}) Result {
const module = b.createModule(.{
.target = options.target,
@@ -53,8 +57,9 @@ pub fn add(b: *std.Build, io: std.Io, dependency: *std.Build.Dependency, options
// debug-locking/assertion paths. linkTo applies the same public-header
// contract to consumers; keeping it here also covers every archive source.
module.addCMacro("NDEBUG", "1");
- // The build's own FreeType, headers and all; see `freetype` above.
+ // The build's own FreeType and zlib, headers and all; see above.
module.linkLibrary(options.freetype);
+ module.linkLibrary(options.zlib);
// MuPDF itself uses wildcards for these two directories. The dependency
// is immutable and content-addressed, so discovering the flat C lists at
@@ -97,11 +102,6 @@ pub fn add(b: *std.Build, io: std.Io, dependency: *std.Build.Dependency, options
});
module.addCSourceFiles(.{
.root = dependency.path(""),
- .files = makeSources(b, makelists, "ZLIB_SRC"),
- .flags = &.{ "-std=gnu11", "-DHAVE_UNISTD_H", "-DHAVE_STDARG_H" },
- });
- module.addCSourceFiles(.{
- .root = dependency.path(""),
.files = makeSources(b, makelists, "JBIG2DEC_SRC"),
.flags = &.{
"-std=gnu11",
@@ -252,7 +252,6 @@ fn configureModule(module: *std.Build.Module, dependency: *std.Build.Dependency,
module.addIncludePath(dependency.path("source/pdf"));
module.addIncludePath(dependency.path("thirdparty/libjpeg"));
module.addIncludePath(dependency.path("scripts/libjpeg"));
- module.addIncludePath(dependency.path("thirdparty/zlib"));
module.addIncludePath(dependency.path("thirdparty/jbig2dec"));
// encode-jpx.c includes this header before its FZ_ENABLE_JPX guard.
module.addIncludePath(dependency.path("thirdparty/openjpeg/src/lib/openjp2"));