1*22dc650dSSadaf Ebrahimiconst std = @import("std"); 2*22dc650dSSadaf Ebrahimi 3*22dc650dSSadaf Ebrahimipub const CodeUnitWidth = enum { 4*22dc650dSSadaf Ebrahimi @"8", 5*22dc650dSSadaf Ebrahimi @"16", 6*22dc650dSSadaf Ebrahimi @"32", 7*22dc650dSSadaf Ebrahimi}; 8*22dc650dSSadaf Ebrahimi 9*22dc650dSSadaf Ebrahimipub fn build(b: *std.Build) !void { 10*22dc650dSSadaf Ebrahimi const target = b.standardTargetOptions(.{}); 11*22dc650dSSadaf Ebrahimi const optimize = b.standardOptimizeOption(.{}); 12*22dc650dSSadaf Ebrahimi 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); 13*22dc650dSSadaf Ebrahimi const codeUnitWidth = b.option(CodeUnitWidth, "code-unit-width", "Sets the code unit width") orelse .@"8"; 14*22dc650dSSadaf Ebrahimi 15*22dc650dSSadaf Ebrahimi const copyFiles = b.addWriteFiles(); 16*22dc650dSSadaf Ebrahimi _ = copyFiles.addCopyFile(.{ .path = "src/config.h.generic" }, "config.h"); 17*22dc650dSSadaf Ebrahimi _ = copyFiles.addCopyFile(.{ .path = "src/pcre2.h.generic" }, "pcre2.h"); 18*22dc650dSSadaf Ebrahimi 19*22dc650dSSadaf Ebrahimi const lib = std.Build.Step.Compile.create(b, .{ 20*22dc650dSSadaf Ebrahimi .name = b.fmt("pcre2-{s}", .{@tagName(codeUnitWidth)}), 21*22dc650dSSadaf Ebrahimi .root_module = .{ 22*22dc650dSSadaf Ebrahimi .target = target, 23*22dc650dSSadaf Ebrahimi .optimize = optimize, 24*22dc650dSSadaf Ebrahimi .link_libc = true, 25*22dc650dSSadaf Ebrahimi }, 26*22dc650dSSadaf Ebrahimi .kind = .lib, 27*22dc650dSSadaf Ebrahimi .linkage = linkage, 28*22dc650dSSadaf Ebrahimi }); 29*22dc650dSSadaf Ebrahimi 30*22dc650dSSadaf Ebrahimi if (linkage == .static) { 31*22dc650dSSadaf Ebrahimi try lib.root_module.c_macros.append(b.allocator, "-DPCRE2_STATIC"); 32*22dc650dSSadaf Ebrahimi } 33*22dc650dSSadaf Ebrahimi 34*22dc650dSSadaf Ebrahimi lib.root_module.addCMacro("PCRE2_CODE_UNIT_WIDTH", @tagName(codeUnitWidth)); 35*22dc650dSSadaf Ebrahimi 36*22dc650dSSadaf Ebrahimi lib.addCSourceFile(.{ 37*22dc650dSSadaf Ebrahimi .file = copyFiles.addCopyFile(.{ .path = "src/pcre2_chartables.c.dist" }, "pcre2_chartables.c"), 38*22dc650dSSadaf Ebrahimi .flags = &.{ 39*22dc650dSSadaf Ebrahimi "-DHAVE_CONFIG_H", 40*22dc650dSSadaf Ebrahimi }, 41*22dc650dSSadaf Ebrahimi }); 42*22dc650dSSadaf Ebrahimi 43*22dc650dSSadaf Ebrahimi lib.addIncludePath(.{ .path = b.pathFromRoot("src") }); 44*22dc650dSSadaf Ebrahimi lib.addIncludePath(copyFiles.getDirectory()); 45*22dc650dSSadaf Ebrahimi 46*22dc650dSSadaf Ebrahimi lib.addCSourceFiles(.{ 47*22dc650dSSadaf Ebrahimi .files = &.{ 48*22dc650dSSadaf Ebrahimi "src/pcre2_auto_possess.c", 49*22dc650dSSadaf Ebrahimi "src/pcre2_chkdint.c", 50*22dc650dSSadaf Ebrahimi "src/pcre2_compile.c", 51*22dc650dSSadaf Ebrahimi "src/pcre2_config.c", 52*22dc650dSSadaf Ebrahimi "src/pcre2_context.c", 53*22dc650dSSadaf Ebrahimi "src/pcre2_convert.c", 54*22dc650dSSadaf Ebrahimi "src/pcre2_dfa_match.c", 55*22dc650dSSadaf Ebrahimi "src/pcre2_error.c", 56*22dc650dSSadaf Ebrahimi "src/pcre2_extuni.c", 57*22dc650dSSadaf Ebrahimi "src/pcre2_find_bracket.c", 58*22dc650dSSadaf Ebrahimi "src/pcre2_maketables.c", 59*22dc650dSSadaf Ebrahimi "src/pcre2_match.c", 60*22dc650dSSadaf Ebrahimi "src/pcre2_match_data.c", 61*22dc650dSSadaf Ebrahimi "src/pcre2_newline.c", 62*22dc650dSSadaf Ebrahimi "src/pcre2_ord2utf.c", 63*22dc650dSSadaf Ebrahimi "src/pcre2_pattern_info.c", 64*22dc650dSSadaf Ebrahimi "src/pcre2_script_run.c", 65*22dc650dSSadaf Ebrahimi "src/pcre2_serialize.c", 66*22dc650dSSadaf Ebrahimi "src/pcre2_string_utils.c", 67*22dc650dSSadaf Ebrahimi "src/pcre2_study.c", 68*22dc650dSSadaf Ebrahimi "src/pcre2_substitute.c", 69*22dc650dSSadaf Ebrahimi "src/pcre2_substring.c", 70*22dc650dSSadaf Ebrahimi "src/pcre2_tables.c", 71*22dc650dSSadaf Ebrahimi "src/pcre2_ucd.c", 72*22dc650dSSadaf Ebrahimi "src/pcre2_valid_utf.c", 73*22dc650dSSadaf Ebrahimi "src/pcre2_xclass.c", 74*22dc650dSSadaf Ebrahimi }, 75*22dc650dSSadaf Ebrahimi .flags = &.{ 76*22dc650dSSadaf Ebrahimi "-DHAVE_CONFIG_H", 77*22dc650dSSadaf Ebrahimi "-DPCRE2_STATIC", 78*22dc650dSSadaf Ebrahimi }, 79*22dc650dSSadaf Ebrahimi }); 80*22dc650dSSadaf Ebrahimi 81*22dc650dSSadaf Ebrahimi lib.installHeader(.{ .path = "src/pcre2.h.generic" }, "pcre2.h"); 82*22dc650dSSadaf Ebrahimi b.installArtifact(lib); 83*22dc650dSSadaf Ebrahimi} 84