diff --git a/build.zig b/build.zig index 21c56b4..2de19f7 100644 --- a/build.zig +++ b/build.zig @@ -75,6 +75,8 @@ pub fn build(b: *std.Build) !void { .target = target, .optimize = optimize, .enable_x11_support = enable_x11_support, + .fallback_uid_min = fallback_uid_min, + .fallback_uid_max = fallback_uid_max }); exe.root_module.addImport("ly-ui", ly_ui.module("ly-ui")); diff --git a/ly-core/build.zig b/ly-core/build.zig index 56dc4ec..cf0dbf8 100644 --- a/ly-core/build.zig +++ b/ly-core/build.zig @@ -11,6 +11,13 @@ pub fn build(b: *std.Build) void { .optimize = optimize, }); + const fallback_uid_min = b.option(std.posix.uid_t, "fallback_uid_min", "Set the fallback minimum UID (default is 1000). This value gets embedded into the binary").?; + const fallback_uid_max = b.option(std.posix.uid_t, "fallback_uid_max", "Set the fallback maximum UID (default is 60000). This value gets embedded into the binary").?; + const build_options = b.addOptions(); + build_options.addOption(std.posix.uid_t, "fallback_uid_min", fallback_uid_min); + build_options.addOption(std.posix.uid_t, "fallback_uid_max", fallback_uid_max); + mod.addOptions("build_options", build_options); + const zigini = b.dependency("zigini", .{ .target = target, .optimize = optimize }); mod.addImport("zigini", zigini.module("zigini")); diff --git a/ly-core/src/interop.zig b/ly-core/src/interop.zig index 69e02ff..7d09381 100644 --- a/ly-core/src/interop.zig +++ b/ly-core/src/interop.zig @@ -1,5 +1,6 @@ const std = @import("std"); const builtin = @import("builtin"); +const build_options = @import("build_options"); const UidRange = @import("UidRange.zig"); const pwd = @import("pwd"); const stdlib = @import("stdlib"); @@ -145,21 +146,32 @@ fn PlatformStruct() type { var iterator = std.mem.splitScalar(u8, login_defs_buffer, '\n'); var uid_range = UidRange{}; - var nameFound = false; + var uid_min_Found = false; + var uid_max_Found = false; while (iterator.next()) |line| { const trimmed_line = std.mem.trim(u8, line, " \n\r\t"); if (std.mem.startsWith(u8, trimmed_line, "UID_MIN")) { uid_range.uid_min = try parseValue(std.posix.uid_t, "UID_MIN", trimmed_line); - nameFound = true; + uid_min_Found = true; } else if (std.mem.startsWith(u8, trimmed_line, "UID_MAX")) { uid_range.uid_max = try parseValue(std.posix.uid_t, "UID_MAX", trimmed_line); - nameFound = true; + uid_max_Found = true; } } - if (!nameFound) return error.UidNameNotFound; + if (!(uid_min_Found or uid_max_Found)) { + return error.UidNameNotFound; + } + + if (!uid_min_Found) { + uid_range.uid_min = build_options.fallback_uid_min; + } + + if (!uid_max_Found) { + uid_range.uid_max = build_options.fallback_uid_max; + } return uid_range; } diff --git a/ly-ui/build.zig b/ly-ui/build.zig index 2e3ce6b..0ab5b70 100644 --- a/ly-ui/build.zig +++ b/ly-ui/build.zig @@ -11,10 +11,15 @@ pub fn build(b: *std.Build) void { .optimize = optimize, }); + const fallback_uid_min = b.option(std.posix.uid_t, "fallback_uid_min", "Set the fallback minimum UID (default is 1000). This value gets embedded into the binary"); + const fallback_uid_max = b.option(std.posix.uid_t, "fallback_uid_max", "Set the fallback maximum UID (default is 60000). This value gets embedded into the binary"); + const ly_core = b.dependency("ly_core", .{ .target = target, .optimize = optimize, .enable_x11_support = enable_x11_support, + .fallback_uid_min = fallback_uid_min, + .fallback_uid_max = fallback_uid_max }); mod.addImport("ly-core", ly_core.module("ly-core"));