master
 1const std = @import("std");
 2
 3pub const requires_symlinks = true;
 4
 5pub fn build(b: *std.Build) void {
 6    const test_step = b.step("test", "Test it");
 7    b.default_step = test_step;
 8
 9    const optimize: std.builtin.OptimizeMode = .Debug;
10    const target = b.graph.host;
11
12    // The test requires getFdPath in order to to get the path of the
13    // File returned by openSelfExe
14    if (!std.os.isGetFdPathSupportedOnTarget(target.result.os)) return;
15
16    const main = b.addExecutable(.{
17        .name = "main",
18        .root_module = b.createModule(.{
19            .root_source_file = b.path("main.zig"),
20            .optimize = optimize,
21            .target = target,
22        }),
23    });
24
25    const create_symlink_exe = b.addExecutable(.{
26        .name = "create-symlink",
27        .root_module = b.createModule(.{
28            .root_source_file = b.path("create-symlink.zig"),
29            .optimize = optimize,
30            .target = target,
31        }),
32    });
33
34    var run_create_symlink = b.addRunArtifact(create_symlink_exe);
35    run_create_symlink.addArtifactArg(main);
36    const symlink_path = run_create_symlink.addOutputFileArg("main-symlink");
37    run_create_symlink.expectExitCode(0);
38    run_create_symlink.skip_foreign_checks = true;
39
40    var run_from_symlink = std.Build.Step.Run.create(b, "run symlink");
41    run_from_symlink.addFileArg(symlink_path);
42    run_from_symlink.expectExitCode(0);
43    run_from_symlink.skip_foreign_checks = true;
44    run_from_symlink.step.dependOn(&run_create_symlink.step);
45
46    test_step.dependOn(&run_from_symlink.step);
47}