From 5aff1d5d6fde5f95576cd639e6fa80281524e2d6 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Mon, 28 Jun 2021 10:42:16 +0200 Subject: [PATCH] zld: frameworks do not need dylib ext on older macs --- src/link/MachO.zig | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/link/MachO.zig b/src/link/MachO.zig index db0c6de63f..81a63b6f9e 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -584,24 +584,29 @@ fn resolveLib( // Look in each directory for a dylib (next, tbd), and then for archive // TODO implement alternative: -search_dylibs_first const exts = switch (lib_kind) { - .lib => &[_][]const u8{ "dylib", "tbd", "a" }, - .framework => &[_][]const u8{ "dylib", "tbd" }, + .lib => &[_]?[]const u8{ "dylib", "tbd", "a" }, + .framework => &[_]?[]const u8{ null, "dylib", "tbd" }, }; for (exts) |ext| { - const lib_name_ext = blk: { + const lib_name_ext = if (ext) |some| + try std.fmt.allocPrint(arena, "{s}.{s}", .{ lib_name, some }) + else + lib_name; + const with_prefix = blk: { switch (lib_kind) { - .lib => break :blk try std.fmt.allocPrint(arena, "lib{s}.{s}", .{ lib_name, ext }), + .lib => { + break :blk try std.fmt.allocPrint(arena, "lib{s}", .{lib_name_ext}); + }, .framework => { const prefix = try std.fmt.allocPrint(arena, "{s}.framework", .{lib_name}); - const nn = try std.fmt.allocPrint(arena, "{s}.{s}", .{ lib_name, ext }); - break :blk try fs.path.join(arena, &[_][]const u8{ prefix, nn }); + break :blk try fs.path.join(arena, &[_][]const u8{ prefix, lib_name_ext }); }, } }; for (lib_dirs) |dir| { - const full_path = try fs.path.join(arena, &[_][]const u8{ dir, lib_name_ext }); + const full_path = try fs.path.join(arena, &[_][]const u8{ dir, with_prefix }); // Check if the lib file exists. const tmp = fs.cwd().openFile(full_path, .{}) catch |err| switch (err) {