authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-08-14 16:23:43+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-08-18 08:00:40+02:00
log6a9fd55809298ca99fcb62df2b52b120b2d8c4a4
tree7e4e46098968f7f76f82cfb249be828ebec1a56b
parent7ef1eb1c27754cb0349fdc10db1f02ff2dddd99b

cc: disambiguate includes with sysroot in ClangSearchSanitizer

This noninvasive change improves warning messages for mixing up paths between `-iwithsysroot` and `-iframeworkwithsysroot`.

1 files changed, 19 insertions(+), 3 deletions(-)

src/main.zig+19-3
......@@ -1156,12 +1156,16 @@ fn buildOutputType(
11561156 try clang_argv.append(args_iter.nextOrFatal());
11571157 } else if (mem.eql(u8, arg, "-I")) {
11581158 try cssan.addIncludePath(.I, arg, args_iter.nextOrFatal(), false);
1159 } else if (mem.eql(u8, arg, "-isystem") or mem.eql(u8, arg, "-iwithsysroot")) {
1159 } else if (mem.eql(u8, arg, "-isystem")) {
11601160 try cssan.addIncludePath(.isystem, arg, args_iter.nextOrFatal(), false);
1161 } else if (mem.eql(u8, arg, "-iwithsysroot")) {
1162 try cssan.addIncludePath(.iwithsysroot, arg, args_iter.nextOrFatal(), false);
11611163 } else if (mem.eql(u8, arg, "-idirafter")) {
11621164 try cssan.addIncludePath(.idirafter, arg, args_iter.nextOrFatal(), false);
1163 } else if (mem.eql(u8, arg, "-iframework") or mem.eql(u8, arg, "-iframeworkwithsysroot")) {
1165 } else if (mem.eql(u8, arg, "-iframework")) {
11641166 try cssan.addIncludePath(.iframework, arg, args_iter.nextOrFatal(), false);
1167 } else if (mem.eql(u8, arg, "-iframeworkwithsysroot")) {
1168 try cssan.addIncludePath(.iframeworkwithsysroot, arg, args_iter.nextOrFatal(), false);
11651169 } else if (mem.eql(u8, arg, "--version")) {
11661170 const next_arg = args_iter.nextOrFatal();
11671171 version = std.SemanticVersion.parse(next_arg) catch |err| {
......@@ -6191,6 +6195,11 @@ const ClangSearchSanitizer = struct {
61916195 if (m.idirafter) std.log.warn(wtxt, .{ dir, "isystem", "idirafter" });
61926196 if (m.iframework) std.log.warn(wtxt, .{ dir, "isystem", "iframework" });
61936197 },
6198 .iwithsysroot => {
6199 if (m.iwithsysroot) return;
6200 m.iwithsysroot = true;
6201 if (m.iframeworkwithsysroot) std.log.warn(wtxt, .{ dir, "iwithsysroot", "iframeworkwithsysroot" });
6202 },
61946203 .idirafter => {
61956204 if (m.idirafter) return;
61966205 m.idirafter = true;
......@@ -6205,18 +6214,25 @@ const ClangSearchSanitizer = struct {
62056214 if (m.isystem) std.log.warn(wtxt, .{ dir, "iframework", "isystem" });
62066215 if (m.idirafter) std.log.warn(wtxt, .{ dir, "iframework", "idirafter" });
62076216 },
6217 .iframeworkwithsysroot => {
6218 if (m.iframeworkwithsysroot) return;
6219 m.iframeworkwithsysroot = true;
6220 if (m.iwithsysroot) std.log.warn(wtxt, .{ dir, "iframeworkwithsysroot", "iwithsysroot" });
6221 },
62086222 }
62096223 try self.argv.append(arg);
62106224 if (!joined) try self.argv.append(dir);
62116225 }
62126226
6213 const Group = enum { I, isystem, idirafter, iframework };
6227 const Group = enum { I, isystem, iwithsysroot, idirafter, iframework, iframeworkwithsysroot };
62146228
62156229 const Membership = packed struct {
62166230 I: bool = false,
62176231 isystem: bool = false,
6232 iwithsysroot: bool = false,
62186233 idirafter: bool = false,
62196234 iframework: bool = false,
6235 iframeworkwithsysroot: bool = false,
62206236 };
62216237};
62226238