Browse Source

build: don't install skipped exercises

Update the code in `zig build install` and `zig build -Dn=n install`, so
that exercises that must be skipped are not installed, since it will
cause an error.  Ensure that a skip message is printed.
Manlio Perillo 2 years ago
parent
commit
4ae67ebf1b
1 changed files with 12 additions and 4 deletions
  1. 12 4
      build.zig

+ 12 - 4
build.zig

@@ -133,17 +133,20 @@ pub fn build(b: *Build) !void {
             print("unknown exercise number: {}\n", .{n});
             std.os.exit(1);
         }
-
         const ex = exercises[n - 1];
 
         const build_step = ex.addExecutable(b, work_path);
-        b.installArtifact(build_step);
+
+        const skip_step = SkipStep.create(b, ex);
+        if (!ex.skip)
+            b.installArtifact(build_step)
+        else
+            b.getInstallStep().dependOn(&skip_step.step);
 
         const run_step = b.addRunArtifact(build_step);
 
         const test_step = b.step("test", b.fmt("Run {s} without checking output", .{ex.main_file}));
         if (ex.skip) {
-            const skip_step = SkipStep.create(b, ex);
             test_step.dependOn(&skip_step.step);
         } else {
             test_step.dependOn(&run_step.step);
@@ -201,7 +204,12 @@ pub fn build(b: *Build) !void {
     var prev_step = &header_step.step;
     for (exercises) |ex| {
         const build_step = ex.addExecutable(b, work_path);
-        b.installArtifact(build_step);
+
+        const skip_step = SkipStep.create(b, ex);
+        if (!ex.skip)
+            b.installArtifact(build_step)
+        else
+            b.getInstallStep().dependOn(&skip_step.step);
 
         const verify_stepn = ZiglingStep.create(b, ex, work_path);
         verify_stepn.step.dependOn(prev_step);