Commit e687c87d69

Jakub Konka <kubkon@jakubkonka.com>
2023-08-20 08:37:44
macho: we no longer need to resolve framework dirs against sysroot
1 parent 020105d
Changed files (3)
src/link/MachO/zld.zig
@@ -3560,17 +3560,8 @@ pub fn linkWithZld(macho_file: *MachO, comp: *Compilation, prog_node: *std.Progr
         try MachO.resolveLibSystem(arena, comp, options.sysroot, target, options.lib_dirs, &libs);
 
         // frameworks
-        var framework_dirs = std.ArrayList([]const u8).init(arena);
-        for (options.framework_dirs) |dir| {
-            if (try MachO.resolveSearchDir(arena, dir, options.sysroot)) |search_dir| {
-                try framework_dirs.append(search_dir);
-            } else {
-                log.warn("directory not found for '-F{s}'", .{dir});
-            }
-        }
-
         outer: for (options.frameworks.keys()) |f_name| {
-            for (framework_dirs.items) |dir| {
+            for (options.framework_dirs) |dir| {
                 for (&[_][]const u8{ ".tbd", ".dylib", "" }) |ext| {
                     if (try MachO.resolveFramework(arena, dir, f_name, ext)) |full_path| {
                         const info = options.frameworks.get(f_name).?;
@@ -3590,7 +3581,7 @@ pub fn linkWithZld(macho_file: *MachO, comp: *Compilation, prog_node: *std.Progr
 
         if (framework_not_found) {
             log.warn("Framework search paths:", .{});
-            for (framework_dirs.items) |dir| {
+            for (options.framework_dirs) |dir| {
                 log.warn("  {s}", .{dir});
             }
         }
src/link/MachO.zig
@@ -870,48 +870,6 @@ fn resolveLibSystemInDirs(arena: Allocator, dirs: []const []const u8, out_libs:
     return false;
 }
 
-pub fn resolveSearchDir(
-    arena: Allocator,
-    dir: []const u8,
-    syslibroot: ?[]const u8,
-) !?[]const u8 {
-    var candidates = std.ArrayList([]const u8).init(arena);
-
-    if (fs.path.isAbsolute(dir)) {
-        if (syslibroot) |root| {
-            const common_dir = if (builtin.os.tag == .windows) blk: {
-                // We need to check for disk designator and strip it out from dir path so
-                // that we can concat dir with syslibroot.
-                // TODO we should backport this mechanism to 'MachO.Dylib.parseDependentLibs()'
-                const disk_designator = fs.path.diskDesignatorWindows(dir);
-
-                if (mem.indexOf(u8, dir, disk_designator)) |where| {
-                    break :blk dir[where + disk_designator.len ..];
-                }
-
-                break :blk dir;
-            } else dir;
-            const full_path = try fs.path.join(arena, &[_][]const u8{ root, common_dir });
-            try candidates.append(full_path);
-        }
-    }
-
-    try candidates.append(dir);
-
-    for (candidates.items) |candidate| {
-        // Verify that search path actually exists
-        var tmp = fs.cwd().openDir(candidate, .{}) catch |err| switch (err) {
-            error.FileNotFound => continue,
-            else => |e| return e,
-        };
-        defer tmp.close();
-
-        return candidate;
-    }
-
-    return null;
-}
-
 pub fn resolveLib(
     arena: Allocator,
     search_dir: []const u8,
src/main.zig
@@ -2566,7 +2566,7 @@ fn buildOutputType(
             want_native_include_dirs = true;
     }
 
-    // Resolve the library path arguments with respect to sysroot.
+    // Resolve the library and framework path arguments with respect to sysroot.
     var lib_dirs = std.ArrayList([]const u8).init(arena);
     if (sysroot) |root| {
         for (lib_dir_args.items) |dir| {