101 lines
2.9 KiB
Zig
101 lines
2.9 KiB
Zig
// This file is licensed under the CC0 1.0 license.
|
|
// See: https://creativecommons.org/publicdomain/zero/1.0/legalcode
|
|
|
|
const std = @import("std");
|
|
|
|
const CmarkBuildOptions = struct {
|
|
name: []const u8 = "cmark-c",
|
|
target: std.Build.ResolvedTarget,
|
|
optimize: std.builtin.OptimizeMode,
|
|
};
|
|
|
|
pub fn cmark_lib(
|
|
b: *std.Build,
|
|
options: CmarkBuildOptions,
|
|
) *std.Build.Step.Compile {
|
|
const lib = b.addStaticLibrary(.{
|
|
.name = options.name,
|
|
.target = options.target,
|
|
.optimize = options.optimize,
|
|
});
|
|
|
|
const cflags = [_][]const u8{};
|
|
|
|
lib.linkLibC();
|
|
lib.addCSourceFiles(.{ .files = &common_sources, .flags = &cflags });
|
|
lib.addIncludePath(b.path(cmark_src_prefix ++ "include"));
|
|
|
|
const config_h = b.addConfigHeader(.{
|
|
.style = .{ .cmake = b.path(cmark_src_prefix ++ "config.h.in") },
|
|
.include_path = "config.h",
|
|
}, .{
|
|
.HAVE_STDBOOL_H = void{},
|
|
.HAVE___ATTRIBUTE__ = void{},
|
|
.HAVE___BUILTIN_EXPECT = void{},
|
|
});
|
|
|
|
const cmark_version_h = b.addConfigHeader(.{
|
|
.style = .{ .cmake = b.path(cmark_src_prefix ++ "cmark_version.h.in") },
|
|
.include_path = "cmark_version.h",
|
|
}, .{
|
|
.PROJECT_VERSION_MAJOR = 0,
|
|
.PROJECT_VERSION_MINOR = 30,
|
|
.PROJECT_VERSION_PATCH = 3,
|
|
});
|
|
|
|
lib.addConfigHeader(config_h);
|
|
lib.addConfigHeader(cmark_version_h);
|
|
lib.addIncludePath(b.path(cmark_zig_prefix));
|
|
lib.installConfigHeader(cmark_version_h);
|
|
|
|
inline for (install_headers) |header| {
|
|
lib.installHeader(b.path(header.base_dir ++ header.name), header.name);
|
|
}
|
|
|
|
b.installArtifact(lib);
|
|
|
|
return lib;
|
|
}
|
|
|
|
pub fn build(b: *std.Build) void {
|
|
const target = b.standardTargetOptions(.{});
|
|
const optimize = b.standardOptimizeOption(.{});
|
|
|
|
_ = cmark_lib(b, .{ .target = target, .optimize = optimize });
|
|
}
|
|
|
|
const cmark_src_prefix = "deps/cmark/src/";
|
|
const cmark_zig_prefix = "src/";
|
|
|
|
const Header = struct {
|
|
base_dir: [:0]const u8,
|
|
name: [:0]const u8,
|
|
};
|
|
|
|
const install_headers = [_]Header{
|
|
.{ .base_dir = cmark_src_prefix, .name = "cmark.h" },
|
|
.{ .base_dir = cmark_zig_prefix, .name = "cmark_export.h" },
|
|
};
|
|
|
|
const common_sources = [_][]const u8{
|
|
cmark_src_prefix ++ "cmark.c",
|
|
cmark_src_prefix ++ "node.c",
|
|
cmark_src_prefix ++ "iterator.c",
|
|
cmark_src_prefix ++ "blocks.c",
|
|
cmark_src_prefix ++ "inlines.c",
|
|
cmark_src_prefix ++ "scanners.c",
|
|
cmark_src_prefix ++ "utf8.c",
|
|
cmark_src_prefix ++ "buffer.c",
|
|
cmark_src_prefix ++ "references.c",
|
|
cmark_src_prefix ++ "render.c",
|
|
cmark_src_prefix ++ "man.c",
|
|
cmark_src_prefix ++ "xml.c",
|
|
cmark_src_prefix ++ "html.c",
|
|
cmark_src_prefix ++ "commonmark.c",
|
|
cmark_src_prefix ++ "latex.c",
|
|
cmark_src_prefix ++ "houdini_href_e.c",
|
|
cmark_src_prefix ++ "houdini_html_e.c",
|
|
cmark_src_prefix ++ "houdini_html_u.c",
|
|
cmark_src_prefix ++ "cmark_ctype.c",
|
|
};
|