Build system: Allow specifying Win32 resource include paths using LazyPath
Adds an `include_paths` field to RcSourceFile that takes a slice of LazyPaths. The paths are resolved and subsequently appended to the -rcflags as `/I <resolved path>`. This fixes an accidental regression from https://github.com/ziglang/zig/pull/19174. Before that PR, all Win32 resource compilation would inherit the CC flags (via `addCCArgs`), which included things like include directories. After that PR, though, that is no longer the case. However, this commit intentionally does not restore the previous behavior (inheriting the C include paths). Instead, each .rc file will need to have its include paths specified directly and the include paths only apply to one particular resource script. This allows more fine-grained control and has less potentially surprising behavior (at the cost of some convenience). Closes #19605
This commit is contained in:
committed by
Andrew Kelley
parent
f2110b0c0d
commit
ddde99bdfa
@@ -110,11 +110,18 @@ pub const RcSourceFile = struct {
|
||||
/// /x (ignore the INCLUDE environment variable)
|
||||
/// /D_DEBUG or /DNDEBUG depending on the optimization mode
|
||||
flags: []const []const u8 = &.{},
|
||||
/// Include paths that may or may not exist yet and therefore need to be
|
||||
/// specified as a LazyPath. Each path will be appended to the flags
|
||||
/// as `/I <resolved path>`.
|
||||
include_paths: []const LazyPath = &.{},
|
||||
|
||||
pub fn dupe(self: RcSourceFile, b: *std.Build) RcSourceFile {
|
||||
const include_paths = b.allocator.alloc(LazyPath, self.include_paths.len) catch @panic("OOM");
|
||||
for (include_paths, self.include_paths) |*dest, lazy_path| dest.* = lazy_path.dupe(b);
|
||||
return .{
|
||||
.file = self.file.dupe(b),
|
||||
.flags = b.dupeStrings(self.flags),
|
||||
.include_paths = include_paths,
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -503,6 +510,9 @@ pub fn addWin32ResourceFile(m: *Module, source: RcSourceFile) void {
|
||||
rc_source_file.* = source.dupe(b);
|
||||
m.link_objects.append(allocator, .{ .win32_resource_file = rc_source_file }) catch @panic("OOM");
|
||||
addLazyPathDependenciesOnly(m, source.file);
|
||||
for (source.include_paths) |include_path| {
|
||||
addLazyPathDependenciesOnly(m, include_path);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn addAssemblyFile(m: *Module, source: LazyPath) void {
|
||||
|
||||
Reference in New Issue
Block a user