Add -version flag to river, riverctl and rivertile

This commit is contained in:
novakane 2021-07-24 11:31:17 +02:00 committed by Isaac Freund
parent 9c633a7888
commit 32d35cdf91
4 changed files with 41 additions and 1 deletions

View File

@ -6,6 +6,12 @@ const zbs = std.build;
const ScanProtocolsStep = @import("deps/zig-wayland/build.zig").ScanProtocolsStep; const ScanProtocolsStep = @import("deps/zig-wayland/build.zig").ScanProtocolsStep;
/// While a river release is in development, this string should contain the version in development
/// with the "-dev" suffix.
/// When a release is tagged, the "-dev" suffix should be removed for the commit that gets tagged.
/// Directly after the tagged commit, the version should be bumped and the "-dev" suffix added.
const version = "0.1.0-dev";
pub fn build(b: *zbs.Builder) !void { pub fn build(b: *zbs.Builder) !void {
const target = b.standardTargetOptions(.{}); const target = b.standardTargetOptions(.{});
const mode = b.standardReleaseOptions(); const mode = b.standardReleaseOptions();
@ -48,6 +54,21 @@ pub fn build(b: *zbs.Builder) !void {
const examples = b.option(bool, "examples", "Set to true to build examples") orelse false; const examples = b.option(bool, "examples", "Set to true to build examples") orelse false;
const full_version = blk: {
if (mem.endsWith(u8, version, "-dev")) {
var ret: u8 = undefined;
const git_dir = try fs.path.join(b.allocator, &[_][]const u8{ b.build_root, ".git" });
const git_commit_hash = b.execAllowFail(
&[_][]const u8{ "git", "--git-dir", git_dir, "--work-tree", b.build_root, "rev-parse", "--short", "HEAD" },
&ret,
.Inherit,
) catch break :blk version;
break :blk try std.fmt.allocPrintZ(b.allocator, "{s}-{s}", .{ version, git_commit_hash });
} else {
break :blk version;
}
};
const scanner = ScanProtocolsStep.create(b); const scanner = ScanProtocolsStep.create(b);
scanner.addSystemProtocol("stable/xdg-shell/xdg-shell.xml"); scanner.addSystemProtocol("stable/xdg-shell/xdg-shell.xml");
scanner.addSystemProtocol("unstable/pointer-gestures/pointer-gestures-unstable-v1.xml"); scanner.addSystemProtocol("unstable/pointer-gestures/pointer-gestures-unstable-v1.xml");
@ -64,6 +85,7 @@ pub fn build(b: *zbs.Builder) !void {
river.setTarget(target); river.setTarget(target);
river.setBuildMode(mode); river.setBuildMode(mode);
river.addBuildOption(bool, "xwayland", xwayland); river.addBuildOption(bool, "xwayland", xwayland);
river.addBuildOption([:0]const u8, "version", full_version);
addServerDeps(river, scanner); addServerDeps(river, scanner);
@ -74,6 +96,7 @@ pub fn build(b: *zbs.Builder) !void {
const riverctl = b.addExecutable("riverctl", "riverctl/main.zig"); const riverctl = b.addExecutable("riverctl", "riverctl/main.zig");
riverctl.setTarget(target); riverctl.setTarget(target);
riverctl.setBuildMode(mode); riverctl.setBuildMode(mode);
riverctl.addBuildOption([:0]const u8, "version", full_version);
riverctl.step.dependOn(&scanner.step); riverctl.step.dependOn(&scanner.step);
riverctl.addPackage(scanner.getPkg()); riverctl.addPackage(scanner.getPkg());
@ -89,6 +112,7 @@ pub fn build(b: *zbs.Builder) !void {
const rivertile = b.addExecutable("rivertile", "rivertile/main.zig"); const rivertile = b.addExecutable("rivertile", "rivertile/main.zig");
rivertile.setTarget(target); rivertile.setTarget(target);
rivertile.setBuildMode(mode); rivertile.setBuildMode(mode);
rivertile.addBuildOption([:0]const u8, "version", full_version);
rivertile.step.dependOn(&scanner.step); rivertile.step.dependOn(&scanner.step);
rivertile.addPackage(scanner.getPkg()); rivertile.addPackage(scanner.getPkg());

View File

@ -42,6 +42,7 @@ const usage: []const u8 =
\\ -h Print this help message and exit. \\ -h Print this help message and exit.
\\ -c <command> Run `sh -c <command>` on startup. \\ -c <command> Run `sh -c <command>` on startup.
\\ -l <level> Set the log level to a value from 0 to 7. \\ -l <level> Set the log level to a value from 0 to 7.
\\ -version Print the version number and exit.
\\ \\
; ;
@ -73,6 +74,9 @@ pub fn main() anyerror!void {
} else { } else {
printErrorExit("Error: flag '-l' requires exactly one argument", .{}); printErrorExit("Error: flag '-l' requires exactly one argument", .{});
} }
} else if (std.mem.eql(u8, arg, "-version")) {
try std.io.getStdOut().writeAll(build_options.version);
os.exit(0);
} else { } else {
const stderr = std.io.getStdErr().writer(); const stderr = std.io.getStdErr().writer();
try stderr.print(usage, .{}); try stderr.print(usage, .{});

View File

@ -61,9 +61,15 @@ fn _main() !void {
const control = globals.control orelse return error.RiverControlNotAdvertised; const control = globals.control orelse return error.RiverControlNotAdvertised;
const seat = globals.seat orelse return error.SeatNotAdverstised; const seat = globals.seat orelse return error.SeatNotAdverstised;
// Skip our name, send all other args
// This next line is needed cause of https://github.com/ziglang/zig/issues/2622 // This next line is needed cause of https://github.com/ziglang/zig/issues/2622
const args = os.argv; const args = os.argv;
if (mem.eql(u8, mem.span(args[1]), "-version")) {
try std.io.getStdOut().writeAll(@import("build_options").version);
std.os.exit(0);
}
// Skip our name, send all other args
for (args[1..]) |arg| control.addArgument(arg); for (args[1..]) |arg| control.addArgument(arg);
const callback = try control.runCommand(seat); const callback = try control.runCommand(seat);

View File

@ -52,6 +52,7 @@ const usage =
\\Usage: rivertile [options] \\Usage: rivertile [options]
\\ \\
\\ -h, --help Print this help message and exit. \\ -h, --help Print this help message and exit.
\\ -version Print the version number and exit.
\\ -view-padding Set the padding around views in pixels. (Default 6) \\ -view-padding Set the padding around views in pixels. (Default 6)
\\ -outer-padding Set the padding around the edge of the layout area in \\ -outer-padding Set the padding around the edge of the layout area in
\\ pixels. (Default 6) \\ pixels. (Default 6)
@ -315,6 +316,7 @@ pub fn main() !void {
const args = Args(0, &[_]FlagDef{ const args = Args(0, &[_]FlagDef{
.{ .name = "-h", .kind = .boolean }, .{ .name = "-h", .kind = .boolean },
.{ .name = "--help", .kind = .boolean }, .{ .name = "--help", .kind = .boolean },
.{ .name = "-version", .kind = .boolean },
.{ .name = "-view-padding", .kind = .arg }, .{ .name = "-view-padding", .kind = .arg },
.{ .name = "-outer-padding", .kind = .arg }, .{ .name = "-outer-padding", .kind = .arg },
.{ .name = "-main-location", .kind = .arg }, .{ .name = "-main-location", .kind = .arg },
@ -326,6 +328,10 @@ pub fn main() !void {
try std.io.getStdOut().writeAll(usage); try std.io.getStdOut().writeAll(usage);
std.os.exit(0); std.os.exit(0);
} }
if (args.boolFlag("-version")) {
try std.io.getStdOut().writeAll(@import("build_options").version);
std.os.exit(0);
}
if (args.argFlag("-view-padding")) |raw| { if (args.argFlag("-view-padding")) |raw| {
view_padding = std.fmt.parseUnsigned(u32, mem.span(raw), 10) catch view_padding = std.fmt.parseUnsigned(u32, mem.span(raw), 10) catch
fatal("invalid value '{s}' provided to -view-padding", .{raw}); fatal("invalid value '{s}' provided to -view-padding", .{raw});