aboutsummaryrefslogtreecommitdiff
path: root/build.zig
diff options
context:
space:
mode:
authorManlio Perillo <[email protected]>2023-04-30 18:48:52 +0200
committerManlio Perillo <[email protected]>2023-05-01 18:39:54 +0200
commit5c20e2b55338e829b2c2db2bbd5b1fe410b656af (patch)
treecdb8b4a77954f10aac8d86de3a4cb0d647c20ea3 /build.zig
parent69103a3b821d8b8955eac59489b0dabb6f4735ff (diff)
downloadziglings-5c20e2b55338e829b2c2db2bbd5b1fe410b656af.tar.xz
ziglings-5c20e2b55338e829b2c2db2bbd5b1fe410b656af.zip
build: rename Exercise.baseName to name
The name "baseName" is confusing, since it refers to the UNIX basename command, and not to the basename function in some programming languages including Zig. Use the std.fs.path.stem function to remove the file extension, instead of slicing. Remove the use of the assertion, since it is no longer necessary. Instead, add a check to ensure that the exercise must be a Zig source file in the validate_exercises function. Update the validate_exercises function to check the last exercise, too.
Diffstat (limited to 'build.zig')
-rw-r--r--build.zig20
1 files changed, 14 insertions, 6 deletions
diff --git a/build.zig b/build.zig
index b9c59d6..e1f5556 100644
--- a/build.zig
+++ b/build.zig
@@ -39,9 +39,8 @@ pub const Exercise = struct {
skip: bool = false,
/// Returns the name of the main file with .zig stripped.
- pub fn baseName(self: Exercise) []const u8 {
- assert(std.mem.endsWith(u8, self.main_file, ".zig"));
- return self.main_file[0 .. self.main_file.len - 4];
+ pub fn name(self: Exercise) []const u8 {
+ return std.fs.path.stem(self.main_file);
}
/// Returns the key of the main file, the string before the '_' with
@@ -68,7 +67,7 @@ pub const Exercise = struct {
@panic("OOM");
return b.addExecutable(.{
- .name = self.baseName(),
+ .name = self.name(),
.root_source_file = .{ .path = file_path },
.link_libc = self.link_libc,
});
@@ -598,9 +597,12 @@ fn validate_exercises() bool {
// Don't use the "multi-object for loop" syntax, in order to avoid a syntax
// error with old Zig compilers.
var i: usize = 0;
- for (exercises[0 .. exercises.len - 1]) |ex| {
+ for (exercises[0..]) |ex| {
+ const exno = ex.number();
+ const last = 999;
i += 1;
- if (ex.number() != i) {
+
+ if (exno != i and exno != last) {
print("exercise {s} has an incorrect number: expected {}, got {s}\n", .{
ex.main_file,
i,
@@ -618,6 +620,12 @@ fn validate_exercises() bool {
return false;
}
+
+ if (!std.mem.endsWith(u8, ex.main_file, ".zig")) {
+ print("exercise {s} is not a zig source file\n", .{ex.main_file});
+
+ return false;
+ }
}
return true;