oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git
3,315 bytes raw
1
const std = @import("std");
2
3
pub fn build(b: *std.Build) void {
4
    const target = b.standardTargetOptions(.{});
5
    const optimize = b.standardOptimizeOption(.{});
6
7
    const exe = b.addExecutable(.{
8
        .name = "oxwm",
9
        .root_module = b.createModule(.{
10
            .root_source_file = b.path("src/main.zig"),
11
            .target = target,
12
            .optimize = optimize,
13
        }),
14
    });
15
16
    exe.linkSystemLibrary("lua5.4");
17
    exe.linkSystemLibrary("X11");
18
    exe.linkSystemLibrary("Xinerama");
19
    exe.linkSystemLibrary("Xft");
20
    exe.linkSystemLibrary("fontconfig");
21
    exe.linkLibC();
22
23
    b.installArtifact(exe);
24
25
    const run_step = b.step("run", "Run oxwm");
26
    const run_cmd = b.addRunArtifact(exe);
27
    run_step.dependOn(&run_cmd.step);
28
    run_cmd.step.dependOn(b.getInstallStep());
29
    if (b.args) |args| {
30
        run_cmd.addArgs(args);
31
    }
32
33
    const test_step = b.step("test", "Run unit tests");
34
    const unit_tests = b.addTest(.{
35
        .root_module = b.createModule(.{
36
            .root_source_file = b.path("tests/main_tests.zig"),
37
            .target = target,
38
            .optimize = optimize,
39
        }),
40
    });
41
    test_step.dependOn(&b.addRunArtifact(unit_tests).step);
42
43
    const lua_config_tests = b.addTest(.{
44
        .root_module = b.createModule(.{
45
            .root_source_file = b.path("tests/lua_config_tests.zig"),
46
            .target = target,
47
            .optimize = optimize,
48
        }),
49
    });
50
    lua_config_tests.root_module.addImport("lua", b.createModule(.{
51
        .root_source_file = b.path("src/config/lua.zig"),
52
        .target = target,
53
        .optimize = optimize,
54
    }));
55
    lua_config_tests.linkSystemLibrary("lua5.4");
56
    lua_config_tests.linkLibC();
57
    test_step.dependOn(&b.addRunArtifact(lua_config_tests).step);
58
59
    const xephyr_step = b.step("xephyr", "Run in Xephyr (1280x800 on :2)");
60
    xephyr_step.dependOn(&add_xephyr_run(b, exe, false).step);
61
62
    const xephyr_multi_step = b.step("xephyr-multi", "Run in Xephyr multi-monitor on :2");
63
    xephyr_multi_step.dependOn(&add_xephyr_run(b, exe, true).step);
64
65
    const multimon_step = b.step("multimon", "Alias for xephyr-multi");
66
    multimon_step.dependOn(&add_xephyr_run(b, exe, true).step);
67
68
    const kill_step = b.step("kill", "Kill Xephyr and oxwm");
69
    kill_step.dependOn(&b.addSystemCommand(&.{ "sh", "-c", "pkill -9 Xephyr || true; pkill -9 oxwm || true" }).step);
70
71
    const fmt_step = b.step("fmt", "Format source files");
72
    fmt_step.dependOn(&b.addFmt(.{ .paths = &.{"src/"} }).step);
73
74
    const clean_step = b.step("clean", "Remove build artifacts");
75
    clean_step.dependOn(&b.addSystemCommand(&.{ "rm", "-rf", "zig-out", ".zig-cache" }).step);
76
}
77
78
fn add_xephyr_run(b: *std.Build, exe: *std.Build.Step.Compile, multimon: bool) *std.Build.Step.Run {
79
    const kill_cmd = if (multimon)
80
        "pkill -9 Xephyr || true; Xephyr +xinerama -glamor -screen 640x480 -screen 640x480 :2 & sleep 1"
81
    else
82
        "pkill -9 Xephyr || true; Xephyr -screen 1280x800 :2 & sleep 1";
83
84
    const setup = b.addSystemCommand(&.{ "sh", "-c", kill_cmd });
85
86
    const run_wm = b.addRunArtifact(exe);
87
    run_wm.step.dependOn(&setup.step);
88
    run_wm.setEnvironmentVariable("DISPLAY", ":2");
89
    run_wm.addArgs(&.{ "-c", "resources/test-config.lua" });
90
91
    return run_wm;
92
}