zig
zig copied to clipboard
FileNotFound error when building with lib.emit_h = true
Zig Version
0.10.0-dev.4060+61aaef0b0
Steps to Reproduce
I'm using macOS. In any project, such as the one generated by zig init-lib, add lib.emit_h = true, then do zig build
Expected Behavior
For it to emit the header together with zig.h without error
Actual Behavior
It emits the header, but without zig.h, and errors out with the following:
error: FileNotFound
/Users/me/zig/lib/zig/std/os.zig:2753:19: 0x1016c0dee in mkdiratZ (build)
.EXIST => return error.PathAlreadyExists,
^
/Users/me/zig/lib/zig/std/os.zig:2713:9: 0x1016a6f83 in mkdirat (build)
return mkdiratZ(dir_fd, &sub_dir_path_c, mode);
^
/Users/me/zig/lib/zig/std/fs.zig:1361:9: 0x1016a6e3b in makeDir (build)
try os.mkdirat(self.fd, sub_path, default_new_dir_mode);
^
/Users/me/zig/lib/zig/std/os.zig:2753:19: 0x1016c0dee in mkdiratZ (build)
.EXIST => return error.PathAlreadyExists,
^
/Users/me/zig/lib/zig/std/os.zig:2713:9: 0x1016a6f83 in mkdirat (build)
return mkdiratZ(dir_fd, &sub_dir_path_c, mode);
/Users/me/zig/lib/zig/std/fs.zig:1361:9: 0x1016a6e3b in makeDir (build)
try os.mkdirat(self.fd, sub_path, default_new_dir_mode);
^
/Users/me/zig/lib/zig/std/os.zig:1683:23: 0x10170b837 in openatZ (build)
.NOENT => return error.FileNotFound,
^
/Users/me/zig/lib/zig/std/fs.zig:1110:13: 0x1016ee1d8 in openFileZ (build)
try os.openatZ(self.fd, sub_path, os_flags, 0);
^
/Users/me/zig/lib/zig/std/fs.zig:1037:9: 0x1016b309f in openFile (build)
return self.openFileZ(&path_c, flags);
^
/Users/me/zig/lib/zig/std/fs.zig:2250:24: 0x101735d0b in updateFile (build)
var src_file = try source_dir.openFile(source_path, .{});
^
/Users/me/zig/lib/zig/std/build.zig:1088:29: 0x101736dc2 in updateFile (build)
const prev_status = try fs.Dir.updateFile(cwd, source_path, cwd, dest_path, .{});
^
/Users/me/zig/lib/zig/std/build.zig:3434:13: 0x101718983 in make (build)
try builder.updateFile(self.artifact.getOutputHSource().getPath(builder), full_pdb_path);
^
/Users/me/zig/lib/zig/std/build.zig:3655:9: 0x1016c1367 in make (build)
try self.makeFn(self);
^
/Users/me/zig/lib/zig/std/build.zig:508:9: 0x1016a7ec9 in makeOneStep (build)
try s.make();
^
/Users/me/zig/lib/zig/std/build.zig:502:17: 0x1016a7e2d in makeOneStep (build)
return err;
^
/Users/me/zig/lib/zig/std/build.zig:463:13: 0x1016a7aaa in make (build)
try self.makeOneStep(s);
^
/Users/me/zig/lib/zig/build_runner.zig:213:21: 0x1016aafff in main (build)
else => return err,
I think it's because it's trying to install the header from zig-cache/o but the header is generated in the root dir instead.
Is this macOS specific? I'm unable to reproduce on Linux.
I'm on Mac on version 0.11.0-dev.669+bd5a8f86a, and this is still a problem.
Confirmed that this also happens on Linux with zig version 0.11.0-dev.5400+c49e4d534.
Problematic line might be build.zig:3430 from the stack track I get.
Also bumping into this on Linux 0.10.0.