const std = @import("std");

pub fn build(b: *std.Build) void {
    const target = b.standardTargetOptions(.{});
    const optimize = b.standardOptimizeOption(.{});

    const catch2 = b.dependency("Catch2", .{ .target = target, .optimize = optimize });

    const tests = b.addExecutable(.{
        .name = "tests",
        .target = target,
        .optimize = optimize,
        .link_libc = true,
        .pic = true,
    });
    tests.addIncludePath(b.path("include"));
    tests.linkLibCpp();
    tests.linkLibrary(catch2.artifact("Catch2Main"));
    tests.addIncludePath(catch2.artifact("Catch2").getEmittedIncludeTree());
    tests.addCSourceFiles(.{
        .files = &.{
            "tests/test_Term.cpp",
        },
        .flags = &.{
            "-std=c++17",
            "-Wall",
            "-Werror",
        },
    });
    b.installArtifact(tests);

    const run_tests = b.addRunArtifact(tests);
    run_tests.step.dependOn(b.getInstallStep());
    if (b.args) |args| {
        run_tests.addArgs(args);
    }
    b.step("tests", "Run the tests").dependOn(&run_tests.step);
}