mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 14:25:16 +00:00
std.build: make Builder.install_prefix non optional
This is useful for build.zig files to check in some cases, for example to adhere to the convention of installing config to /etc instead of /usr/etc on linux when using the /usr prefix. Perhaps std.build will handle such common cases eventually, but that is not yet the case.
This commit is contained in:
parent
749c3f014b
commit
3bf72f2b3a
@ -51,7 +51,7 @@ pub const Builder = struct {
|
||||
default_step: *Step,
|
||||
env_map: *BufMap,
|
||||
top_level_steps: ArrayList(*TopLevelStep),
|
||||
install_prefix: ?[]const u8,
|
||||
install_prefix: []const u8,
|
||||
dest_dir: ?[]const u8,
|
||||
lib_dir: []const u8,
|
||||
exe_dir: []const u8,
|
||||
@ -156,7 +156,7 @@ pub const Builder = struct {
|
||||
.default_step = undefined,
|
||||
.env_map = env_map,
|
||||
.search_prefixes = ArrayList([]const u8).init(allocator),
|
||||
.install_prefix = null,
|
||||
.install_prefix = undefined,
|
||||
.lib_dir = undefined,
|
||||
.exe_dir = undefined,
|
||||
.h_dir = undefined,
|
||||
@ -190,22 +190,13 @@ pub const Builder = struct {
|
||||
}
|
||||
|
||||
/// This function is intended to be called by std/special/build_runner.zig, not a build.zig file.
|
||||
pub fn setInstallPrefix(self: *Builder, optional_prefix: ?[]const u8) void {
|
||||
self.install_prefix = optional_prefix;
|
||||
}
|
||||
|
||||
/// This function is intended to be called by std/special/build_runner.zig, not a build.zig file.
|
||||
pub fn resolveInstallPrefix(self: *Builder) void {
|
||||
pub fn resolveInstallPrefix(self: *Builder, install_prefix: ?[]const u8) void {
|
||||
if (self.dest_dir) |dest_dir| {
|
||||
const install_prefix = self.install_prefix orelse "/usr";
|
||||
self.install_path = fs.path.join(self.allocator, &[_][]const u8{ dest_dir, install_prefix }) catch unreachable;
|
||||
self.install_prefix = install_prefix orelse "/usr";
|
||||
self.install_path = fs.path.join(self.allocator, &[_][]const u8{ dest_dir, self.install_prefix }) catch unreachable;
|
||||
} else {
|
||||
const install_prefix = self.install_prefix orelse blk: {
|
||||
const p = self.cache_root;
|
||||
self.install_prefix = p;
|
||||
break :blk p;
|
||||
};
|
||||
self.install_path = install_prefix;
|
||||
self.install_prefix = install_prefix orelse self.cache_root;
|
||||
self.install_path = self.install_prefix;
|
||||
}
|
||||
self.lib_dir = fs.path.join(self.allocator, &[_][]const u8{ self.install_path, "lib" }) catch unreachable;
|
||||
self.exe_dir = fs.path.join(self.allocator, &[_][]const u8{ self.install_path, "bin" }) catch unreachable;
|
||||
|
||||
@ -60,6 +60,7 @@ pub fn main() !void {
|
||||
const stderr_stream = io.getStdErr().writer();
|
||||
const stdout_stream = io.getStdOut().writer();
|
||||
|
||||
var install_prefix: ?[]const u8 = null;
|
||||
while (nextArg(args, &arg_idx)) |arg| {
|
||||
if (mem.startsWith(u8, arg, "-D")) {
|
||||
const option_contents = arg[2..];
|
||||
@ -82,7 +83,7 @@ pub fn main() !void {
|
||||
} else if (mem.eql(u8, arg, "-h") or mem.eql(u8, arg, "--help")) {
|
||||
return usage(builder, false, stdout_stream);
|
||||
} else if (mem.eql(u8, arg, "--prefix")) {
|
||||
builder.install_prefix = nextArg(args, &arg_idx) orelse {
|
||||
install_prefix = nextArg(args, &arg_idx) orelse {
|
||||
warn("Expected argument after --prefix\n\n", .{});
|
||||
return usageAndErr(builder, false, stderr_stream);
|
||||
};
|
||||
@ -134,7 +135,7 @@ pub fn main() !void {
|
||||
}
|
||||
}
|
||||
|
||||
builder.resolveInstallPrefix();
|
||||
builder.resolveInstallPrefix(install_prefix);
|
||||
try runBuild(builder);
|
||||
|
||||
if (builder.validateUserInputDidItFail())
|
||||
@ -162,8 +163,7 @@ fn runBuild(builder: *Builder) anyerror!void {
|
||||
fn usage(builder: *Builder, already_ran_build: bool, out_stream: anytype) !void {
|
||||
// run the build script to collect the options
|
||||
if (!already_ran_build) {
|
||||
builder.setInstallPrefix(null);
|
||||
builder.resolveInstallPrefix();
|
||||
builder.resolveInstallPrefix(null);
|
||||
try runBuild(builder);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user