authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-05-23 16:49:38-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-05-25 18:54:36-07:00
log626e4104131bd557ec0a3148a7c02a7125605b75
treef8403da8317a695e3c90372c4f5ea235349a9acb
parent4ba2bcbbec68cfc78f1dc0c2031188519bc37a68

Maker: fix regressed dyn lib symlink logic


1 files changed, 10 insertions(+), 8 deletions(-)

lib/compiler/Maker.zig+10-8
......@@ -1998,17 +1998,19 @@ fn installSymLinksInner(
19981998) !void {
19991999 const io = maker.graph.io;
20002000 const step = stepByIndex(maker, asking_step_index);
2001 const out_basename = Io.Dir.path.basename(output_path.sub_path);
2002
20012003 const out_dir = output_path.dirname().?;
2002 // sym link for libfoo.so.1 to libfoo.so.1.2.3
20032004 const major_only_path = try out_dir.join(arena, filename_major_only);
2004 output_path.root_dir.handle.symLinkAtomic(io, output_path.sub_path, major_only_path.sub_path, .{}) catch |err| {
2005 return step.fail(maker, "unable to symlink {f} -> {f}: {t}", .{ output_path, major_only_path, err });
2006 };
2007 // sym link for libfoo.so to libfoo.so.1
20082005 const name_only_path = try out_dir.join(arena, filename_name_only);
2009 major_only_path.root_dir.handle.symLinkAtomic(io, major_only_path.sub_path, name_only_path.sub_path, .{}) catch |err| {
2010 return step.fail(maker, "unable to symlink {f} -> {s}: {t}", .{ name_only_path, filename_major_only, err });
2011 };
2006
2007 // libfoo.so.1 to libfoo.so.1.2.3
2008 major_only_path.root_dir.handle.symLinkAtomic(io, out_basename, major_only_path.sub_path, .{}) catch |err|
2009 return step.fail(maker, "failed symlinking {f} to {s}: {t}", .{ output_path, out_basename, err });
2010
2011 // libfoo.so to libfoo.so.1
2012 name_only_path.root_dir.handle.symLinkAtomic(io, filename_major_only, name_only_path.sub_path, .{}) catch |err|
2013 return step.fail(maker, "failed symlinking {f} to {s}: {t}", .{ name_only_path, filename_major_only, err });
20122014}
20132015
20142016fn cleanExit(io: Io, scanned_config: *const ScannedConfig) void {