mirror of
https://github.com/ziglang/zig.git
synced 2026-02-20 08:14:48 +00:00
Restore the reverted semantic versioning commits
restore "Comply with semantic versioning pre-release format" restore "stage2: SemVer compliance for development builds" restore "Remove 'g' prefix from commit hash in Zig semver" This reverts commit d96d8639e592b4bb4b2e330c4bd7412256b297d2. This reverts commit e8810f579406673edad0c9780c9d990f3034717a. This reverts commit 9afe5859a3e428b259a306c36a860e4d82dbb4bb.
This commit is contained in:
parent
993f4b5a06
commit
ec8c25fd8f
@ -25,8 +25,8 @@ project(zig C CXX)
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
|
||||
|
||||
set(ZIG_VERSION_MAJOR 0)
|
||||
set(ZIG_VERSION_MINOR 7)
|
||||
set(ZIG_VERSION_PATCH 1)
|
||||
set(ZIG_VERSION_MINOR 8)
|
||||
set(ZIG_VERSION_PATCH 0)
|
||||
set(ZIG_VERSION "" CACHE STRING "Override Zig version string. Default is to find out with git.")
|
||||
|
||||
if("${ZIG_VERSION}" STREQUAL "")
|
||||
@ -34,18 +34,31 @@ if("${ZIG_VERSION}" STREQUAL "")
|
||||
find_program(GIT_EXE NAMES git)
|
||||
if(GIT_EXE)
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXE} -C ${CMAKE_SOURCE_DIR} name-rev HEAD --tags --name-only --no-undefined --always
|
||||
COMMAND ${GIT_EXE} -C ${CMAKE_SOURCE_DIR} describe --match *.*.* --tags
|
||||
RESULT_VARIABLE EXIT_STATUS
|
||||
OUTPUT_VARIABLE ZIG_GIT_REV
|
||||
OUTPUT_VARIABLE GIT_DESCRIBE
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET)
|
||||
if(EXIT_STATUS EQUAL "0")
|
||||
if(ZIG_GIT_REV MATCHES "\\^0$")
|
||||
if(NOT("${ZIG_GIT_REV}" STREQUAL "${ZIG_VERSION}^0"))
|
||||
message("WARNING: Tag does not match configured Zig version")
|
||||
if(GIT_DESCRIBE MATCHES "^v?([0-9]+\\.[0-9]+\\.[0-9]+)$")
|
||||
# Tagged release version.
|
||||
set(GIT_TAG ${CMAKE_MATCH_1})
|
||||
if(NOT GIT_TAG VERSION_EQUAL ZIG_VERSION)
|
||||
message(SEND_ERROR "Zig version (${ZIG_VERSION}) does not match Git tag (${GIT_TAG}).")
|
||||
endif()
|
||||
elseif(GIT_DESCRIBE MATCHES "^v?([0-9]+\\.[0-9]+\\.[0-9]+)-([0-9]+)-g(.+)$")
|
||||
# Untagged pre-release. The Zig version is updated to include the number of commits
|
||||
# since the last tagged version and the commit hash. The version is formatted in
|
||||
# accordance with the https://semver.org specification.
|
||||
set(GIT_TAG ${CMAKE_MATCH_1})
|
||||
set(GIT_COMMITS_AFTER_TAG ${CMAKE_MATCH_2})
|
||||
set(GIT_COMMIT ${CMAKE_MATCH_3})
|
||||
if(NOT ZIG_VERSION VERSION_GREATER GIT_TAG)
|
||||
message(SEND_ERROR "Zig version (${ZIG_VERSION}) must be greater than tagged ancestor (${GIT_TAG}).")
|
||||
endif()
|
||||
set(ZIG_VERSION "${ZIG_VERSION}-dev.${GIT_COMMITS_AFTER_TAG}+${GIT_COMMIT}")
|
||||
else()
|
||||
set(ZIG_VERSION "${ZIG_VERSION}+${ZIG_GIT_REV}")
|
||||
message(WARNING "Failed to parse version from output of `git describe`.")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
54
build.zig
54
build.zig
@ -11,7 +11,7 @@ const fs = std.fs;
|
||||
const InstallDirectoryOptions = std.build.InstallDirectoryOptions;
|
||||
const assert = std.debug.assert;
|
||||
|
||||
const zig_version = std.builtin.Version{ .major = 0, .minor = 7, .patch = 1 };
|
||||
const zig_version = std.builtin.Version{ .major = 0, .minor = 8, .patch = 0 };
|
||||
|
||||
pub fn build(b: *Builder) !void {
|
||||
b.setPreferredReleaseMode(.ReleaseFast);
|
||||
@ -227,24 +227,48 @@ pub fn build(b: *Builder) !void {
|
||||
const version_string = b.fmt("{}.{}.{}", .{ zig_version.major, zig_version.minor, zig_version.patch });
|
||||
|
||||
var code: u8 = undefined;
|
||||
const git_sha_untrimmed = b.execAllowFail(&[_][]const u8{
|
||||
"git", "-C", b.build_root, "name-rev", "HEAD",
|
||||
"--tags", "--name-only", "--no-undefined", "--always",
|
||||
const git_describe_untrimmed = b.execAllowFail(&[_][]const u8{
|
||||
"git", "-C", b.build_root, "describe", "--match", "*.*.*", "--tags",
|
||||
}, &code, .Ignore) catch {
|
||||
break :v version_string;
|
||||
};
|
||||
const git_sha_trimmed = mem.trim(u8, git_sha_untrimmed, " \n\r");
|
||||
const git_describe = mem.trim(u8, git_describe_untrimmed, " \n\r");
|
||||
|
||||
// This will look like e.g. "0.7.0^0" for a tag commit.
|
||||
if (mem.endsWith(u8, git_sha_trimmed, "^0")) {
|
||||
const git_ver_string = git_sha_trimmed[0 .. git_sha_trimmed.len - 2];
|
||||
if (!mem.eql(u8, git_ver_string, version_string)) {
|
||||
std.debug.print("Expected git tag '{}', found '{}'\n", .{ version_string, git_ver_string });
|
||||
std.process.exit(1);
|
||||
}
|
||||
break :v b.fmt("{}", .{version_string});
|
||||
} else {
|
||||
break :v b.fmt("{}+{}", .{ version_string, git_sha_trimmed });
|
||||
switch (mem.count(u8, git_describe, "-")) {
|
||||
0 => {
|
||||
// Tagged release version (e.g. 0.7.0).
|
||||
if (!mem.eql(u8, git_describe, version_string)) {
|
||||
std.debug.print("Zig version '{}' does not match Git tag '{}'\n", .{ version_string, git_describe });
|
||||
std.process.exit(1);
|
||||
}
|
||||
break :v version_string;
|
||||
},
|
||||
2 => {
|
||||
// Untagged development build (e.g. 0.7.0-684-gbbe2cca1a).
|
||||
var it = mem.split(git_describe, "-");
|
||||
const tagged_ancestor = it.next() orelse unreachable;
|
||||
const commit_height = it.next() orelse unreachable;
|
||||
const commit_id = it.next() orelse unreachable;
|
||||
|
||||
const ancestor_ver = try std.builtin.Version.parse(tagged_ancestor);
|
||||
if (zig_version.order(ancestor_ver) != .gt) {
|
||||
std.debug.print("Zig version '{}' must be greater than tagged ancestor '{}'\n", .{ zig_version, ancestor_ver });
|
||||
std.process.exit(1);
|
||||
}
|
||||
|
||||
// Check that the commit hash is prefixed with a 'g' (a Git convention).
|
||||
if (commit_id.len < 1 or commit_id[0] != 'g') {
|
||||
std.debug.print("Unexpected `git describe` output: {}\n", .{git_describe});
|
||||
break :v version_string;
|
||||
}
|
||||
|
||||
// The version is reformatted in accordance with the https://semver.org specification.
|
||||
break :v b.fmt("{}-dev.{}+{}", .{ version_string, commit_height, commit_id[1..] });
|
||||
},
|
||||
else => {
|
||||
std.debug.print("Unexpected `git describe` output: {}\n", .{git_describe});
|
||||
break :v version_string;
|
||||
},
|
||||
}
|
||||
};
|
||||
exe.addBuildOption([:0]const u8, "version", try b.allocator.dupeZ(u8, version));
|
||||
|
||||
@ -1,11 +1,6 @@
|
||||
pub const have_llvm = true;
|
||||
pub const version: [:0]const u8 = "@ZIG_VERSION@";
|
||||
pub const semver: @import("std").SemanticVersion = .{
|
||||
.major = @ZIG_VERSION_MAJOR@,
|
||||
.minor = @ZIG_VERSION_MINOR@,
|
||||
.patch = @ZIG_VERSION_PATCH@,
|
||||
.build = "@ZIG_GIT_REV@",
|
||||
};
|
||||
pub const semver = try @import("std").SemanticVersion.parse(version);
|
||||
pub const log_scopes: []const []const u8 = &[_][]const u8{};
|
||||
pub const zir_dumps: []const []const u8 = &[_][]const u8{};
|
||||
pub const enable_tracy = false;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user