const std = @import("std"); pub const CodeUnitWidth = enum { @"8", @"16", @"32", }; pub fn build(b: *std.Build) !void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); const linkage = b.option(std.builtin.LinkMode, "linkage", "whether to statically or dynamically link the library") orelse @as(std.builtin.LinkMode, if (target.result.isGnuLibC()) .dynamic else .static); const codeUnitWidth = b.option(CodeUnitWidth, "code-unit-width", "Sets the code unit width") orelse .@"8"; const copyFiles = b.addWriteFiles(); _ = copyFiles.addCopyFile(.{ .path = "src/config.h.generic" }, "config.h"); _ = copyFiles.addCopyFile(.{ .path = "src/pcre2.h.generic" }, "pcre2.h"); const lib = std.Build.Step.Compile.create(b, .{ .name = b.fmt("pcre2-{s}", .{@tagName(codeUnitWidth)}), .root_module = .{ .target = target, .optimize = optimize, .link_libc = true, }, .kind = .lib, .linkage = linkage, }); if (linkage == .static) { try lib.root_module.c_macros.append(b.allocator, "-DPCRE2_STATIC"); } lib.root_module.addCMacro("PCRE2_CODE_UNIT_WIDTH", @tagName(codeUnitWidth)); lib.addCSourceFile(.{ .file = copyFiles.addCopyFile(.{ .path = "src/pcre2_chartables.c.dist" }, "pcre2_chartables.c"), .flags = &.{ "-DHAVE_CONFIG_H", }, }); lib.addIncludePath(.{ .path = b.pathFromRoot("src") }); lib.addIncludePath(copyFiles.getDirectory()); lib.addCSourceFiles(.{ .files = &.{ "src/pcre2_auto_possess.c", "src/pcre2_chkdint.c", "src/pcre2_compile.c", "src/pcre2_config.c", "src/pcre2_context.c", "src/pcre2_convert.c", "src/pcre2_dfa_match.c", "src/pcre2_error.c", "src/pcre2_extuni.c", "src/pcre2_find_bracket.c", "src/pcre2_maketables.c", "src/pcre2_match.c", "src/pcre2_match_data.c", "src/pcre2_newline.c", "src/pcre2_ord2utf.c", "src/pcre2_pattern_info.c", "src/pcre2_script_run.c", "src/pcre2_serialize.c", "src/pcre2_string_utils.c", "src/pcre2_study.c", "src/pcre2_substitute.c", "src/pcre2_substring.c", "src/pcre2_tables.c", "src/pcre2_ucd.c", "src/pcre2_valid_utf.c", "src/pcre2_xclass.c", }, .flags = &.{ "-DHAVE_CONFIG_H", "-DPCRE2_STATIC", }, }); lib.installHeader(.{ .path = "src/pcre2.h.generic" }, "pcre2.h"); b.installArtifact(lib); }