mirror of
https://codeberg.org/andyscott/ziglings.git
synced 2024-12-22 06:03:09 -05:00
Merge pull request 'changed compat check to comptime' (#11) from fix_compat into main
Reviewed-on: https://codeberg.org/ziglings/exercises/pulls/11
This commit is contained in:
commit
88a8e06489
2 changed files with 30 additions and 70 deletions
35
build.zig
35
build.zig
|
@ -1,17 +1,43 @@
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const builtin = @import("builtin");
|
const builtin = @import("builtin");
|
||||||
const compat = @import("src/compat.zig");
|
|
||||||
const tests = @import("test/tests.zig");
|
const tests = @import("test/tests.zig");
|
||||||
|
|
||||||
const Build = compat.Build;
|
const Build = std.Build;
|
||||||
const CompileStep = compat.build.CompileStep;
|
const CompileStep = Build.CompileStep;
|
||||||
const Step = compat.build.Step;
|
const Step = Build.Step;
|
||||||
const Child = std.process.Child;
|
const Child = std.process.Child;
|
||||||
|
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
const join = std.fs.path.join;
|
const join = std.fs.path.join;
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
|
|
||||||
|
// When changing this version, be sure to also update README.md in two places:
|
||||||
|
// 1) Getting Started
|
||||||
|
// 2) Version Changes
|
||||||
|
comptime {
|
||||||
|
const required_zig = "0.11.0-dev.4246";
|
||||||
|
const current_zig = builtin.zig_version;
|
||||||
|
const min_zig = std.SemanticVersion.parse(required_zig) catch unreachable;
|
||||||
|
if (current_zig.order(min_zig) == .lt) {
|
||||||
|
const error_message =
|
||||||
|
\\Sorry, it looks like your version of zig is too old. :-(
|
||||||
|
\\
|
||||||
|
\\Ziglings requires development build
|
||||||
|
\\
|
||||||
|
\\{}
|
||||||
|
\\
|
||||||
|
\\or higher.
|
||||||
|
\\
|
||||||
|
\\Please download a development ("master") build from
|
||||||
|
\\
|
||||||
|
\\https://ziglang.org/download/
|
||||||
|
\\
|
||||||
|
\\
|
||||||
|
;
|
||||||
|
@compileError(std.fmt.comptimePrint(error_message, .{min_zig}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const Kind = enum {
|
const Kind = enum {
|
||||||
/// Run the artifact as a normal executable.
|
/// Run the artifact as a normal executable.
|
||||||
exe,
|
exe,
|
||||||
|
@ -93,7 +119,6 @@ pub const logo =
|
||||||
;
|
;
|
||||||
|
|
||||||
pub fn build(b: *Build) !void {
|
pub fn build(b: *Build) !void {
|
||||||
if (!compat.is_compatible) compat.die();
|
|
||||||
if (!validate_exercises()) std.os.exit(2);
|
if (!validate_exercises()) std.os.exit(2);
|
||||||
|
|
||||||
use_color_escapes = false;
|
use_color_escapes = false;
|
||||||
|
|
|
@ -1,65 +0,0 @@
|
||||||
/// Compatibility support for very old versions of Zig and recent versions before
|
|
||||||
/// commit efa25e7d5 (Merge pull request #14498 from ziglang/zig-build-api).
|
|
||||||
///
|
|
||||||
/// Versions of Zig from before 0.6.0 cannot do the version check and will just
|
|
||||||
/// fail to compile, but 0.5.0 was a long time ago, it is unlikely that anyone
|
|
||||||
/// who attempts these exercises is still using it.
|
|
||||||
const std = @import("std");
|
|
||||||
const builtin = @import("builtin");
|
|
||||||
|
|
||||||
const debug = std.debug;
|
|
||||||
|
|
||||||
// Very old versions of Zig used warn instead of print.
|
|
||||||
const print = if (@hasDecl(debug, "print")) debug.print else debug.warn;
|
|
||||||
|
|
||||||
// When changing this version, be sure to also update README.md in two places:
|
|
||||||
// 1) Getting Started
|
|
||||||
// 2) Version Changes
|
|
||||||
const needed_version_str = "0.11.0-dev.4246";
|
|
||||||
|
|
||||||
fn isCompatible() bool {
|
|
||||||
if (!@hasDecl(builtin, "zig_version") or !@hasDecl(std, "SemanticVersion")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const needed_version = std.SemanticVersion.parse(needed_version_str) catch unreachable;
|
|
||||||
const version = builtin.zig_version;
|
|
||||||
const order = version.order(needed_version);
|
|
||||||
|
|
||||||
return order != .lt;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn die() noreturn {
|
|
||||||
const error_message =
|
|
||||||
\\ERROR: Sorry, it looks like your version of zig is too old. :-(
|
|
||||||
\\
|
|
||||||
\\Ziglings requires development build
|
|
||||||
\\
|
|
||||||
\\ {s}
|
|
||||||
\\
|
|
||||||
\\or higher. Please download a development ("master") build from
|
|
||||||
\\
|
|
||||||
\\ https://ziglang.org/download/
|
|
||||||
\\
|
|
||||||
\\
|
|
||||||
;
|
|
||||||
|
|
||||||
print(error_message, .{needed_version_str});
|
|
||||||
|
|
||||||
// Use exit code 2, to differentiate from a normal Zig compiler error.
|
|
||||||
std.os.exit(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
// A separate function is required because very old versions of Zig doesn't
|
|
||||||
// support labeled block expressions.
|
|
||||||
pub const is_compatible: bool = isCompatible();
|
|
||||||
|
|
||||||
/// This is the type to be used only for the build function definition, since
|
|
||||||
/// the type must be compatible with the build runner.
|
|
||||||
///
|
|
||||||
/// Don't use std.Build.Builder, since it is deprecated and may be removed in
|
|
||||||
/// future.
|
|
||||||
pub const Build = if (is_compatible) std.Build else std.build.Builder;
|
|
||||||
|
|
||||||
/// This is the type to be used for accessing the build namespace.
|
|
||||||
pub const build = if (is_compatible) std.Build else std.build;
|
|
Loading…
Reference in a new issue