From 6d38dba72e9f3d32ddc73975305d7fc95ed7531a Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 20 Jan 2023 19:31:38 -0700 Subject: [PATCH] std.build.LibExeObjStep: avoid putting static libs inside static libs --- lib/std/build/LibExeObjStep.zig | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/lib/std/build/LibExeObjStep.zig b/lib/std/build/LibExeObjStep.zig index 8e243fb890..124fb36a10 100644 --- a/lib/std/build/LibExeObjStep.zig +++ b/lib/std/build/LibExeObjStep.zig @@ -585,12 +585,16 @@ pub fn linkLibrary(self: *LibExeObjStep, lib: *LibExeObjStep) void { } pub fn isDynamicLibrary(self: *LibExeObjStep) bool { - return self.kind == .lib and self.linkage != null and self.linkage.? == .dynamic; + return self.kind == .lib and self.linkage == Linkage.dynamic; +} + +pub fn isStaticLibrary(self: *LibExeObjStep) bool { + return self.kind == .lib and self.linkage != Linkage.dynamic; } pub fn producesPdbFile(self: *LibExeObjStep) bool { if (!self.target.isWindows() and !self.target.isUefi()) return false; - if (self.strip != null and self.strip.?) return false; + if (self.strip == true) return false; return self.isDynamicLibrary() or self.kind == .exe or self.kind == .test_exe; } @@ -1132,16 +1136,19 @@ fn make(step: *Step) !void { .obj => { try zig_args.append(other.getOutputSource().getPath(builder)); }, - .lib => { + .lib => l: { + if (self.isStaticLibrary() and other.isStaticLibrary()) { + // Avoid putting a static library inside a static library. + break :l; + } + const full_path_lib = other.getOutputLibSource().getPath(builder); try zig_args.append(full_path_lib); - if (other.linkage) |linkage| { - if (linkage == .dynamic and !self.target.isWindows()) { - if (fs.path.dirname(full_path_lib)) |dirname| { - try zig_args.append("-rpath"); - try zig_args.append(dirname); - } + if (other.linkage == Linkage.dynamic and !self.target.isWindows()) { + if (fs.path.dirname(full_path_lib)) |dirname| { + try zig_args.append("-rpath"); + try zig_args.append(dirname); } } },