From ef7904bf27a18be5fbc586df1e70a92f1ff17eca Mon Sep 17 00:00:00 2001 From: Ali Chraghi Date: Sat, 18 Jun 2022 12:32:52 +0430 Subject: [PATCH] freetype: improve build system --- freetype/build.zig | 60 +++++++--------------------- freetype/src/{freetype => }/c.zig | 5 +-- freetype/src/freetype/Face.zig | 2 +- freetype/src/freetype/Glyph.zig | 2 +- freetype/src/freetype/GlyphSlot.zig | 2 +- freetype/src/freetype/Library.zig | 2 +- freetype/src/freetype/Outline.zig | 2 +- freetype/src/freetype/Stroker.zig | 2 +- freetype/src/freetype/color.zig | 2 +- freetype/src/freetype/error.zig | 2 +- freetype/src/freetype/freetype.zig | 2 +- freetype/src/freetype/image.zig | 2 +- freetype/src/freetype/lcdfilter.zig | 2 +- freetype/src/freetype/main.zig | 2 +- freetype/src/freetype/types.zig | 2 +- freetype/src/harfbuzz/blob.zig | 2 +- freetype/src/harfbuzz/buffer.zig | 2 +- freetype/src/harfbuzz/c.zig | 3 -- freetype/src/harfbuzz/common.zig | 2 +- freetype/src/harfbuzz/face.zig | 2 +- freetype/src/harfbuzz/font.zig | 2 +- freetype/src/harfbuzz/main.zig | 2 +- freetype/src/harfbuzz/shape.zig | 2 +- freetype/src/harfbuzz/shape_plan.zig | 2 +- 24 files changed, 36 insertions(+), 74 deletions(-) rename freetype/src/{freetype => }/c.zig (60%) delete mode 100644 freetype/src/harfbuzz/c.zig diff --git a/freetype/build.zig b/freetype/build.zig index 5cd7085e..7bf0a7dd 100644 --- a/freetype/build.zig +++ b/freetype/build.zig @@ -6,6 +6,11 @@ const ft_include_path = ft_root ++ "/include"; const hb_root = thisDir() ++ "/upstream/harfbuzz"; const hb_include_path = hb_root ++ "/src"; +const c_pkg = std.build.Pkg{ + .name = "c", + .source = .{ .path = thisDir() ++ "/src/c.zig" }, +}; + const utils_pkg = std.build.Pkg{ .name = "utils", .source = .{ .path = thisDir() ++ "/src/utils.zig" }, @@ -14,13 +19,13 @@ const utils_pkg = std.build.Pkg{ pub const pkg = std.build.Pkg{ .name = "freetype", .source = .{ .path = thisDir() ++ "/src/freetype/main.zig" }, - .dependencies = &.{utils_pkg}, + .dependencies = &.{ c_pkg, utils_pkg }, }; pub const harfbuzz_pkg = std.build.Pkg{ .name = "harfbuzz", .source = .{ .path = thisDir() ++ "/src/harfbuzz/main.zig" }, - .dependencies = &.{utils_pkg}, + .dependencies = &.{ c_pkg, utils_pkg, pkg }, }; pub const Options = struct { @@ -44,18 +49,22 @@ pub fn build(b: *std.build.Builder) !void { const freetype_tests = b.addTestSource(pkg.source); freetype_tests.setBuildMode(mode); freetype_tests.setTarget(target); + freetype_tests.addPackage(c_pkg); freetype_tests.addPackage(utils_pkg); link(b, freetype_tests, .{}); const harfbuzz_tests = b.addTestSource(harfbuzz_pkg.source); harfbuzz_tests.setBuildMode(mode); harfbuzz_tests.setTarget(target); + harfbuzz_tests.addPackage(c_pkg); harfbuzz_tests.addPackage(utils_pkg); + harfbuzz_tests.addPackage(pkg); link(b, harfbuzz_tests, .{ .harfbuzz = .{} }); const main_tests = b.addTest("test/main.zig"); main_tests.setBuildMode(mode); main_tests.setTarget(target); + main_tests.addPackage(c_pkg); main_tests.addPackage(pkg); link(b, main_tests, .{ .freetype = .{ .ft_config_path = "./test/ft" } }); @@ -93,12 +102,11 @@ pub fn link(b: *Builder, step: *std.build.LibExeObjStep, options: Options) void const ft_lib = buildFreetype(b, step, options.freetype); step.linkLibrary(ft_lib); step.addIncludePath(ft_include_path); + step.addIncludePath(hb_include_path); if (options.harfbuzz) |hb_options| { const hb_lib = buildHarfbuzz(b, step, hb_options); - hb_lib.linkLibrary(ft_lib); step.linkLibrary(hb_lib); - step.addIncludePath(hb_include_path); } } @@ -147,7 +155,8 @@ pub fn buildHarfbuzz(b: *Builder, step: *std.build.LibExeObjStep, options: Harfb lib.setTarget(step.target); lib.linkLibCpp(); lib.addIncludePath(hb_include_path); - lib.addCSourceFiles(harfbuzz_base_sources, &.{}); + lib.addIncludePath(ft_include_path); + lib.defineCMacro("HAVE_FREETYPE", "1"); lib.install(); return lib; } @@ -209,44 +218,3 @@ const freetype_base_sources = &[_][]const u8{ ft_root ++ "/src/type42/type42.c", ft_root ++ "/src/winfonts/winfnt.c", }; - -const harfbuzz_base_sources = &[_][]const u8{ - hb_root ++ "/src/hb-aat-layout.cc", - hb_root ++ "/src/hb-aat-map.cc", - hb_root ++ "/src/hb-blob.cc", - hb_root ++ "/src/hb-buffer-serialize.cc", - hb_root ++ "/src/hb-buffer-verify.cc", - hb_root ++ "/src/hb-buffer.cc", - hb_root ++ "/src/hb-common.cc", - hb_root ++ "/src/hb-draw.cc", - hb_root ++ "/src/hb-face.cc", - hb_root ++ "/src/hb-fallback-shape.cc", - hb_root ++ "/src/hb-font.cc", - hb_root ++ "/src/hb-map.cc", - hb_root ++ "/src/hb-number.cc", - hb_root ++ "/src/hb-ot-cff1-table.cc", - hb_root ++ "/src/hb-ot-cff2-table.cc", - hb_root ++ "/src/hb-ot-color.cc", - hb_root ++ "/src/hb-ot-face.cc", - hb_root ++ "/src/hb-ot-font.cc", - hb_root ++ "/src/hb-ot-layout.cc", - hb_root ++ "/src/hb-ot-map.cc", - hb_root ++ "/src/hb-ot-math.cc", - hb_root ++ "/src/hb-ot-meta.cc", - hb_root ++ "/src/hb-ot-metrics.cc", - hb_root ++ "/src/hb-ot-name.cc", - hb_root ++ "/src/hb-ot-shape-fallback.cc", - hb_root ++ "/src/hb-ot-shape-normalize.cc", - hb_root ++ "/src/hb-ot-shape.cc", - hb_root ++ "/src/hb-ot-tag.cc", - hb_root ++ "/src/hb-ot-var.cc", - hb_root ++ "/src/hb-set.cc", - hb_root ++ "/src/hb-shape-plan.cc", - hb_root ++ "/src/hb-shape.cc", - hb_root ++ "/src/hb-shaper.cc", - hb_root ++ "/src/hb-static.cc", - hb_root ++ "/src/hb-style.cc", - hb_root ++ "/src/hb-ucd.cc", - hb_root ++ "/src/hb-unicode.cc", - hb_root ++ "/src/hb-ft.cc", // freetype integration -}; diff --git a/freetype/src/freetype/c.zig b/freetype/src/c.zig similarity index 60% rename from freetype/src/freetype/c.zig rename to freetype/src/c.zig index 0a407038..afa24b66 100644 --- a/freetype/src/freetype/c.zig +++ b/freetype/src/c.zig @@ -1,11 +1,8 @@ pub usingnamespace @cImport({ - @cInclude("freetype/freetype.h"); + @cInclude("hb-ft.h"); @cInclude("freetype/ftbbox.h"); @cInclude("freetype/ftcolor.h"); @cInclude("freetype/ftlcdfil.h"); - @cInclude("freetype/ftmodapi.h"); @cInclude("freetype/ftsizes.h"); @cInclude("freetype/ftstroke.h"); - @cInclude("freetype/ftsystem.h"); - @cInclude("ft2build.h"); }); diff --git a/freetype/src/freetype/Face.zig b/freetype/src/freetype/Face.zig index e1dc9169..004943d5 100644 --- a/freetype/src/freetype/Face.zig +++ b/freetype/src/freetype/Face.zig @@ -1,6 +1,6 @@ const std = @import("std"); const utils = @import("utils"); -const c = @import("c.zig"); +const c = @import("c"); const intToError = @import("error.zig").intToError; const Error = @import("error.zig").Error; const GlyphSlot = @import("freetype.zig").GlyphSlot; diff --git a/freetype/src/freetype/Glyph.zig b/freetype/src/freetype/Glyph.zig index f71ba97b..9bacc92d 100644 --- a/freetype/src/freetype/Glyph.zig +++ b/freetype/src/freetype/Glyph.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const c = @import("c.zig"); +const c = @import("c"); const intToError = @import("error.zig").intToError; const Error = @import("error.zig").Error; const Stroker = @import("Stroker.zig"); diff --git a/freetype/src/freetype/GlyphSlot.zig b/freetype/src/freetype/GlyphSlot.zig index 0e3ae20c..043e6f2c 100644 --- a/freetype/src/freetype/GlyphSlot.zig +++ b/freetype/src/freetype/GlyphSlot.zig @@ -1,4 +1,4 @@ -const c = @import("c.zig"); +const c = @import("c"); const intToError = @import("error.zig").intToError; const Error = @import("error.zig").Error; const Glyph = @import("Glyph.zig"); diff --git a/freetype/src/freetype/Library.zig b/freetype/src/freetype/Library.zig index 7532e304..1f8032ce 100644 --- a/freetype/src/freetype/Library.zig +++ b/freetype/src/freetype/Library.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const c = @import("c.zig"); +const c = @import("c"); const intToError = @import("error.zig").intToError; const Error = @import("error.zig").Error; const Stroker = @import("Stroker.zig"); diff --git a/freetype/src/freetype/Outline.zig b/freetype/src/freetype/Outline.zig index 5455aa29..b24af084 100644 --- a/freetype/src/freetype/Outline.zig +++ b/freetype/src/freetype/Outline.zig @@ -1,4 +1,4 @@ -const c = @import("c.zig"); +const c = @import("c"); const intToError = @import("error.zig").intToError; const errorToInt = @import("error.zig").errorToInt; const Error = @import("error.zig").Error; diff --git a/freetype/src/freetype/Stroker.zig b/freetype/src/freetype/Stroker.zig index a73da5a5..62809786 100644 --- a/freetype/src/freetype/Stroker.zig +++ b/freetype/src/freetype/Stroker.zig @@ -1,4 +1,4 @@ -const c = @import("c.zig"); +const c = @import("c"); const Stroker = @This(); diff --git a/freetype/src/freetype/color.zig b/freetype/src/freetype/color.zig index e0a9bbc7..c75dc137 100644 --- a/freetype/src/freetype/color.zig +++ b/freetype/src/freetype/color.zig @@ -1,5 +1,5 @@ const utils = @import("utils"); -const c = @import("c.zig"); +const c = @import("c"); const Face = @import("freetype.zig").Face; pub const Color = c.FT_Color; diff --git a/freetype/src/freetype/error.zig b/freetype/src/freetype/error.zig index 35e24ee6..2fd8c3c8 100644 --- a/freetype/src/freetype/error.zig +++ b/freetype/src/freetype/error.zig @@ -1,4 +1,4 @@ -const c = @import("c.zig"); +const c = @import("c"); pub const Error = error{ CannotOpenResource, diff --git a/freetype/src/freetype/freetype.zig b/freetype/src/freetype/freetype.zig index 76d799be..64a46600 100644 --- a/freetype/src/freetype/freetype.zig +++ b/freetype/src/freetype/freetype.zig @@ -1,6 +1,6 @@ const std = @import("std"); const utils = @import("utils"); -const c = @import("c.zig"); +const c = @import("c"); const intToError = @import("error.zig").intToError; const Error = @import("error.zig").Error; const Generic = @import("types.zig").Generic; diff --git a/freetype/src/freetype/image.zig b/freetype/src/freetype/image.zig index 2a692147..38e32a03 100644 --- a/freetype/src/freetype/image.zig +++ b/freetype/src/freetype/image.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const c = @import("c.zig"); +const c = @import("c"); pub const Outline = @import("Outline.zig"); diff --git a/freetype/src/freetype/lcdfilter.zig b/freetype/src/freetype/lcdfilter.zig index 2928acf3..6993be01 100644 --- a/freetype/src/freetype/lcdfilter.zig +++ b/freetype/src/freetype/lcdfilter.zig @@ -1,4 +1,4 @@ -const c = @import("c.zig"); +const c = @import("c"); pub const LcdFilter = enum(u5) { none = c.FT_LCD_FILTER_NONE, diff --git a/freetype/src/freetype/main.zig b/freetype/src/freetype/main.zig index d20de50f..f21ef708 100644 --- a/freetype/src/freetype/main.zig +++ b/freetype/src/freetype/main.zig @@ -3,7 +3,7 @@ pub usingnamespace @import("types.zig"); pub usingnamespace @import("image.zig"); pub usingnamespace @import("color.zig"); pub usingnamespace @import("lcdfilter.zig"); -pub const c = @import("c.zig"); +pub const c = @import("c"); pub const Glyph = @import("Glyph.zig"); pub const Stroker = @import("Stroker.zig"); pub const Error = @import("error.zig").Error; diff --git a/freetype/src/freetype/types.zig b/freetype/src/freetype/types.zig index cec8e08b..aaafb54d 100644 --- a/freetype/src/freetype/types.zig +++ b/freetype/src/freetype/types.zig @@ -1,4 +1,4 @@ -const c = @import("c.zig"); +const c = @import("c"); pub const Matrix = c.FT_Matrix; pub const Generic = c.FT_Generic; diff --git a/freetype/src/harfbuzz/blob.zig b/freetype/src/harfbuzz/blob.zig index 5af3579e..092c5570 100644 --- a/freetype/src/harfbuzz/blob.zig +++ b/freetype/src/harfbuzz/blob.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const c = @import("c.zig"); +const c = @import("c"); pub const MemoryMode = enum(u2) { duplicate = c.HB_MEMORY_MODE_DUPLICATE, diff --git a/freetype/src/harfbuzz/buffer.zig b/freetype/src/harfbuzz/buffer.zig index 156400e7..d69ab65f 100644 --- a/freetype/src/harfbuzz/buffer.zig +++ b/freetype/src/harfbuzz/buffer.zig @@ -1,6 +1,6 @@ const std = @import("std"); const utils = @import("utils"); -const c = @import("c.zig"); +const c = @import("c"); const Direction = @import("common.zig").Direction; const Script = @import("common.zig").Script; const Language = @import("common.zig").Language; diff --git a/freetype/src/harfbuzz/c.zig b/freetype/src/harfbuzz/c.zig deleted file mode 100644 index 246f4c3d..00000000 --- a/freetype/src/harfbuzz/c.zig +++ /dev/null @@ -1,3 +0,0 @@ -pub usingnamespace @cImport({ - @cInclude("hb.h"); -}); diff --git a/freetype/src/harfbuzz/common.zig b/freetype/src/harfbuzz/common.zig index 9c9408f6..3d86a605 100644 --- a/freetype/src/harfbuzz/common.zig +++ b/freetype/src/harfbuzz/common.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const c = @import("c.zig"); +const c = @import("c"); pub const Direction = enum(u3) { invalid = c.HB_DIRECTION_INVALID, diff --git a/freetype/src/harfbuzz/face.zig b/freetype/src/harfbuzz/face.zig index 900d1937..bb6429f7 100644 --- a/freetype/src/harfbuzz/face.zig +++ b/freetype/src/harfbuzz/face.zig @@ -1,4 +1,4 @@ -const c = @import("c.zig"); +const c = @import("c"); const Blob = @import("blob.zig").Blob; pub const UnicodeIterator = struct { diff --git a/freetype/src/harfbuzz/font.zig b/freetype/src/harfbuzz/font.zig index e9f4c974..9a5fdda3 100644 --- a/freetype/src/harfbuzz/font.zig +++ b/freetype/src/harfbuzz/font.zig @@ -1,4 +1,4 @@ -const c = @import("c.zig"); +const c = @import("c"); const Face = @import("face.zig").Face; const Buffer = @import("buffer.zig").Buffer; const Feature = @import("common.zig").Feature; diff --git a/freetype/src/harfbuzz/main.zig b/freetype/src/harfbuzz/main.zig index 5d971ba5..2a6428ab 100644 --- a/freetype/src/harfbuzz/main.zig +++ b/freetype/src/harfbuzz/main.zig @@ -5,7 +5,7 @@ pub usingnamespace @import("face.zig"); pub usingnamespace @import("font.zig"); pub usingnamespace @import("shape.zig"); pub usingnamespace @import("shape_plan.zig"); -pub const c = @import("c.zig"); +pub const c = @import("c"); const utils = @import("utils"); diff --git a/freetype/src/harfbuzz/shape.zig b/freetype/src/harfbuzz/shape.zig index b3af4fbf..e35d4409 100644 --- a/freetype/src/harfbuzz/shape.zig +++ b/freetype/src/harfbuzz/shape.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const c = @import("c.zig"); +const c = @import("c"); pub const ListShapers = struct { index: usize, diff --git a/freetype/src/harfbuzz/shape_plan.zig b/freetype/src/harfbuzz/shape_plan.zig index ad6789b2..22ee682b 100644 --- a/freetype/src/harfbuzz/shape_plan.zig +++ b/freetype/src/harfbuzz/shape_plan.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const c = @import("c.zig"); +const c = @import("c"); const Buffer = @import("buffer.zig").Buffer; const Font = @import("font.zig").Font; const Face = @import("face.zig").Face;