ls but with io_uring

add version info

rockorager.dev 328284fb 9373c6b6

verified
+43 -1
+37
build.zig
··· 1 1 const std = @import("std"); 2 2 3 + /// Must be kept in sync with git tags 4 + const version: std.SemanticVersion = .{ .major = 0, .minor = 0, .patch = 0 }; 5 + 3 6 pub fn build(b: *std.Build) void { 4 7 const target = b.standardTargetOptions(.{}); 5 8 const optimize = b.standardOptimizeOption(.{}); ··· 18 21 const zeit_mod = zeit_dep.module("zeit"); 19 22 exe_mod.addImport("zeit", zeit_mod); 20 23 24 + const opts = b.addOptions(); 25 + const version_string = genVersion(b) catch |err| { 26 + std.debug.print("{}", .{err}); 27 + @compileError("couldn't get version"); 28 + }; 29 + opts.addOption([]const u8, "version", version_string); 30 + 31 + exe_mod.addOptions("build_options", opts); 32 + 21 33 const exe = b.addExecutable(.{ 22 34 .name = "lsr", 23 35 .root_module = exe_mod, ··· 45 57 const test_step = b.step("test", "Run unit tests"); 46 58 test_step.dependOn(&run_exe_unit_tests.step); 47 59 } 60 + 61 + fn genVersion(b: *std.Build) ![]const u8 { 62 + if (!std.process.can_spawn) { 63 + std.debug.print("error: version info cannot be retrieved from git. Zig version must be provided using -Dversion-string\n", .{}); 64 + std.process.exit(1); 65 + } 66 + const version_string = b.fmt("v{d}.{d}.{d}", .{ version.major, version.minor, version.patch }); 67 + 68 + var code: u8 = undefined; 69 + const git_describe_untrimmed = b.runAllowFail(&[_][]const u8{ 70 + "git", 71 + "-C", 72 + b.build_root.path orelse ".", 73 + "describe", 74 + "--tags", 75 + "--abbrev=9", 76 + }, &code, .Ignore) catch { 77 + return version_string; 78 + }; 79 + if (!std.mem.startsWith(u8, git_describe_untrimmed, version_string)) { 80 + std.debug.print("error: tagged version does not match internal version\n", .{}); 81 + std.process.exit(1); 82 + } 83 + return std.mem.trim(u8, git_describe_untrimmed, " \n\r"); 84 + }
+1 -1
build.zig.zon
··· 1 1 .{ 2 2 .name = .lsr, 3 - .version = "0.0.0", 3 + .version = "0.1.0", 4 4 .fingerprint = 0x495d173f6002e86, // Changing this has security and trust implications. 5 5 6 6 .minimum_zig_version = "0.14.0",
+5
src/main.zig
··· 2 2 const builtin = @import("builtin"); 3 3 const ourio = @import("ourio"); 4 4 const zeit = @import("zeit"); 5 + const build_options = @import("build_options"); 5 6 6 7 const posix = std.posix; 7 8 ··· 200 201 cmd.opts.shortview = if (o) .oneline else .columns; 201 202 } else if (eql(opt, "help")) { 202 203 return stderr.writeAll(usage); 204 + } else if (eql(opt, "version")) { 205 + try bw.writer().print("lsr {s}", .{build_options.version}); 206 + try bw.flush(); 207 + return; 203 208 } else { 204 209 try stderr.print("Invalid opt: '{s}'", .{opt}); 205 210 std.process.exit(1);