mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
80 lines
2.4 KiB
Zig
80 lines
2.4 KiB
Zig
const std = @import("std");
|
|
const builtin = @import("builtin");
|
|
|
|
const Case = struct {
|
|
src_path: []const u8,
|
|
set_env_vars: bool = false,
|
|
};
|
|
|
|
const cases = [_]Case{
|
|
.{
|
|
.src_path = "cwd.zig",
|
|
},
|
|
.{
|
|
.src_path = "getenv.zig",
|
|
.set_env_vars = true,
|
|
},
|
|
.{
|
|
.src_path = "sigaction.zig",
|
|
},
|
|
.{
|
|
.src_path = "relpaths.zig",
|
|
},
|
|
};
|
|
|
|
pub fn build(b: *std.Build) void {
|
|
const test_step = b.step("test", "Run POSIX standalone test cases");
|
|
b.default_step = test_step;
|
|
|
|
const optimize = b.standardOptimizeOption(.{});
|
|
|
|
const default_target = b.resolveTargetQuery(.{});
|
|
|
|
// Run each test case built against libc-less, glibc, and musl.
|
|
for (cases) |case| {
|
|
const run_def = run_exe(b, optimize, &case, default_target, false);
|
|
test_step.dependOn(&run_def.step);
|
|
|
|
if (default_target.result.os.tag == .linux) {
|
|
const gnu_target = b.resolveTargetQuery(.{ .abi = .gnu });
|
|
const musl_target = b.resolveTargetQuery(.{ .abi = .musl });
|
|
|
|
const run_gnu = run_exe(b, optimize, &case, gnu_target, true);
|
|
const run_musl = run_exe(b, optimize, &case, musl_target, true);
|
|
|
|
test_step.dependOn(&run_gnu.step);
|
|
test_step.dependOn(&run_musl.step);
|
|
} else {
|
|
const run_libc = run_exe(b, optimize, &case, default_target, true);
|
|
test_step.dependOn(&run_libc.step);
|
|
}
|
|
}
|
|
}
|
|
|
|
fn run_exe(b: *std.Build, optimize: std.builtin.OptimizeMode, case: *const Case, target: std.Build.ResolvedTarget, link_libc: bool) *std.Build.Step.Run {
|
|
const exe_name = b.fmt("test-posix-{s}{s}{s}", .{
|
|
std.fs.path.stem(case.src_path),
|
|
if (link_libc) "-libc" else "",
|
|
if (link_libc and target.result.isGnuLibC()) "-gnu" else if (link_libc and target.result.isMuslLibC()) "-musl" else "",
|
|
});
|
|
|
|
const exe = b.addExecutable(.{
|
|
.name = exe_name,
|
|
.root_module = b.createModule(.{
|
|
.root_source_file = b.path(case.src_path),
|
|
.link_libc = link_libc,
|
|
.optimize = optimize,
|
|
.target = target,
|
|
}),
|
|
});
|
|
|
|
const run_cmd = b.addRunArtifact(exe);
|
|
|
|
if (case.set_env_vars) {
|
|
run_cmd.setEnvironmentVariable("ZIG_TEST_POSIX_1EQ", "test=variable");
|
|
run_cmd.setEnvironmentVariable("ZIG_TEST_POSIX_3EQ", "=test=variable=");
|
|
run_cmd.setEnvironmentVariable("ZIG_TEST_POSIX_EMPTY", "");
|
|
}
|
|
|
|
return run_cmd;
|
|
}
|