52 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Zig
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Zig
		
	
	
	
	
	
//! Configuration options related to a specific `BuildFile`.
 | 
						|
const std = @import("std");
 | 
						|
 | 
						|
pub const BuildOption = struct {
 | 
						|
    name: []const u8,
 | 
						|
    value: ?[]const u8 = null,
 | 
						|
 | 
						|
    /// Frees the strings assocated with this `BuildOption` and invalidates `self`.
 | 
						|
    pub fn deinit(self: *BuildOption, allocator: std.mem.Allocator) void {
 | 
						|
        allocator.free(self.name);
 | 
						|
        if (self.value) |val| {
 | 
						|
            allocator.free(val);
 | 
						|
        }
 | 
						|
        self.* = undefined;
 | 
						|
    }
 | 
						|
 | 
						|
    /// Duplicates the `BuildOption`, copying internal strings. Caller owns returned option with contents
 | 
						|
    /// allocated using `allocator`.
 | 
						|
    pub fn dupe(self: BuildOption, allocator: std.mem.Allocator) !BuildOption {
 | 
						|
        const copy_name = try allocator.dupe(u8, self.name);
 | 
						|
        errdefer allocator.free(copy_name);
 | 
						|
        const copy_value = if (self.value) |val|
 | 
						|
            try allocator.dupe(u8, val)
 | 
						|
        else
 | 
						|
            null;
 | 
						|
        return BuildOption{
 | 
						|
            .name = copy_name,
 | 
						|
            .value = copy_value,
 | 
						|
        };
 | 
						|
    }
 | 
						|
 | 
						|
    /// Formats the `BuildOption` as a command line parameter compatible with `zig build`. This will either be
 | 
						|
    /// `-Dname=value` or `-Dname`. Caller owns returned slice allocated using `allocator`.
 | 
						|
    pub fn formatParam(self: BuildOption, allocator: std.mem.Allocator) ![]const u8 {
 | 
						|
        if (self.value) |val| {
 | 
						|
            return try std.fmt.allocPrint(allocator, "-D{s}={s}", .{ self.name, val });
 | 
						|
        } else {
 | 
						|
            return try std.fmt.allocPrint(allocator, "-D{s}", .{self.name});
 | 
						|
        }
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
/// If provided this path is used when resolving `@import("builtin")`
 | 
						|
/// It is relative to the directory containing the `build.zig`
 | 
						|
///
 | 
						|
/// This file should contain the output of:
 | 
						|
/// `zig build-exe/build-lib/build-obj --show-builtin <options>`
 | 
						|
relative_builtin_path: ?[]const u8 = null,
 | 
						|
 | 
						|
/// If provided, this list of options will be passed to `build.zig`.
 | 
						|
build_options: ?[]BuildOption = null,
 |