mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
std.Build: Install Windows DLLs to <prefix>/bin/ by default
Windows does not support RPATH and only searches for DLLs in a small number of predetermined paths by default, with one of them being the directory from which the application loaded. Installing both executables and DLLs to `bin/` by default helps ensure that the executable can find any DLL artifacts it has linked to. DLL import libraries are still installed to `lib/`. These defaults match CMake's behavior.
This commit is contained in:
parent
c947e79d73
commit
e8f28cda9e
2 changed files with 9 additions and 8 deletions
|
|
@ -614,6 +614,10 @@ pub fn isStaticLibrary(self: *const Compile) bool {
|
||||||
return self.kind == .lib and self.linkage != .dynamic;
|
return self.kind == .lib and self.linkage != .dynamic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn isDll(self: *Compile) bool {
|
||||||
|
return self.isDynamicLibrary() and self.rootModuleTarget().os.tag == .windows;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn producesPdbFile(self: *Compile) bool {
|
pub fn producesPdbFile(self: *Compile) bool {
|
||||||
const target = self.rootModuleTarget();
|
const target = self.rootModuleTarget();
|
||||||
// TODO: Is this right? Isn't PDB for *any* PE/COFF file?
|
// TODO: Is this right? Isn't PDB for *any* PE/COFF file?
|
||||||
|
|
@ -632,7 +636,7 @@ pub fn producesPdbFile(self: *Compile) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn producesImplib(self: *Compile) bool {
|
pub fn producesImplib(self: *Compile) bool {
|
||||||
return self.isDynamicLibrary() and self.rootModuleTarget().os.tag == .windows;
|
return self.isDll();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn linkLibC(self: *Compile) void {
|
pub fn linkLibC(self: *Compile) void {
|
||||||
|
|
|
||||||
|
|
@ -57,8 +57,8 @@ pub fn create(owner: *std.Build, artifact: *Step.Compile, options: Options) *Ins
|
||||||
.disabled => null,
|
.disabled => null,
|
||||||
.default => switch (artifact.kind) {
|
.default => switch (artifact.kind) {
|
||||||
.obj => @panic("object files have no standard installation procedure"),
|
.obj => @panic("object files have no standard installation procedure"),
|
||||||
.exe, .@"test" => InstallDir{ .bin = {} },
|
.exe, .@"test" => .bin,
|
||||||
.lib => InstallDir{ .lib = {} },
|
.lib => if (artifact.isDll()) .bin else .lib,
|
||||||
},
|
},
|
||||||
.override => |o| o,
|
.override => |o| o,
|
||||||
};
|
};
|
||||||
|
|
@ -77,15 +77,12 @@ pub fn create(owner: *std.Build, artifact: *Step.Compile, options: Options) *Ins
|
||||||
},
|
},
|
||||||
.h_dir = switch (options.h_dir) {
|
.h_dir = switch (options.h_dir) {
|
||||||
.disabled => null,
|
.disabled => null,
|
||||||
.default => switch (artifact.kind) {
|
.default => if (artifact.kind == .lib) .header else null,
|
||||||
.lib => .header,
|
|
||||||
else => null,
|
|
||||||
},
|
|
||||||
.override => |o| o,
|
.override => |o| o,
|
||||||
},
|
},
|
||||||
.implib_dir = switch (options.implib_dir) {
|
.implib_dir = switch (options.implib_dir) {
|
||||||
.disabled => null,
|
.disabled => null,
|
||||||
.default => if (artifact.producesImplib()) dest_dir else null,
|
.default => if (artifact.producesImplib()) .lib else null,
|
||||||
.override => |o| o,
|
.override => |o| o,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue