[build.zig] Only SUPPORT_* definitions are overridable
Lines from `config.h` which contains "SUPPORT" are added to compilation after being parsed:
- remove whitespace
- format to preprocessor option https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
The user supplied flags have priority over the ones read from the file.
NOTE: extension to commit 4da7f82e6f, the logic is simplified
because the SUPPORT flags only have binary values, which makes them easier to parse.
This commit is contained in:
parent
4da7f82e6f
commit
99307a4d55
|
|
@ -60,40 +60,23 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
|
||||||
defer b.allocator.free(content);
|
defer b.allocator.free(content);
|
||||||
|
|
||||||
var lines = std.mem.split(u8, content, "\n");
|
var lines = std.mem.split(u8, content, "\n");
|
||||||
lines_loop: while (lines.next()) |line| {
|
while (lines.next()) |line| {
|
||||||
if (!std.mem.startsWith(u8, line, "#define")) continue;
|
if (!std.mem.containsAtLeast(u8, line, 1, "SUPPORT")) continue;
|
||||||
|
if (std.mem.startsWith(u8, line, "//")) continue;
|
||||||
|
|
||||||
// Remove "#define " and add "-D" prefix
|
var flag = std.mem.trimLeft(u8, line, " \t"); // Trim whitespace
|
||||||
var flag = try std.fmt.allocPrint(b.allocator, "-D{s}", .{line[6..]});
|
flag = flag["#define ".len - 1 ..]; // Remove #define
|
||||||
|
flag = std.mem.trimLeft(u8, flag, " \t"); // Trim whitespace
|
||||||
|
flag = flag[0..std.mem.indexOf(u8, flag, " ").?]; // Flag is only one word, so capture till space
|
||||||
|
flag = try std.fmt.allocPrint(b.allocator, "-D{s}", .{flag}); // Prepend with -D
|
||||||
|
|
||||||
// Skip if user is supplying the flag
|
// If user specifies the flag skip it
|
||||||
var user_supplied_flags = std.mem.split(u8, config, " ");
|
if (std.mem.containsAtLeast(u8, config, 1, flag)) continue;
|
||||||
while (user_supplied_flags.next()) |user_flag| {
|
|
||||||
// Flag could be -Dflag=1 or -Dflag
|
|
||||||
const skip_flag = user_flag[0 .. std.mem.lastIndexOf(u8, user_flag, "=") orelse user_flag.len];
|
|
||||||
if (std.mem.startsWith(u8, flag, skip_flag)) continue :lines_loop;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove trailing comments
|
|
||||||
if (std.mem.indexOf(u8, flag, "/")) |comment_idx| {
|
|
||||||
flag = flag[0..comment_idx];
|
|
||||||
flag = try std.fmt.allocPrint(b.allocator, "{s}", .{std.mem.trim(u8, flag, " ")});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Insert '=' after flag and remove spaces after equal
|
|
||||||
if (std.mem.indexOf(u8, flag, " ")) |startspaces_idx| {
|
|
||||||
flag[startspaces_idx] = '=';
|
|
||||||
// Remove spaces after equal
|
|
||||||
if (std.mem.lastIndexOf(u8, flag, " ")) |endspaces_idx| {
|
|
||||||
const left = flag[0 .. startspaces_idx + 1];
|
|
||||||
const right = flag[endspaces_idx + 1 ..];
|
|
||||||
flag = try std.fmt.allocPrint(b.allocator, "{s}{s}", .{ left, right });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Append default value from config.h to compile flags
|
// Append default value from config.h to compile flags
|
||||||
try raylib_flags_arr.append(b.allocator, flag);
|
try raylib_flags_arr.append(b.allocator, flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append config flags supplied by user to compile flags
|
// Append config flags supplied by user to compile flags
|
||||||
try raylib_flags_arr.append(b.allocator, config);
|
try raylib_flags_arr.append(b.allocator, config);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user