Commit 041212a41c

Andrew Kelley <andrew@ziglang.org>
2021-03-05 02:14:00
zig cc: fix handling of -MM flag
Clang docs say: > Like -MMD, but also implies -E and writes to stdout by default. Previously, Zig handled this option by forwarding it directly to Clang, and disabling depfiles. However this did not adhere to Clang's documented behavior of these flags. Now, in addition to being forwarded directly to Clang, `-MM` also sets c_out_mode = .preprocessor, just like `-E`. Another issue I noticed is that Zig did not recognize the aliases for -MG, -MM, or -MMD. The aliases are now recognized.
1 parent 98b24aa
src/clang_options_data.zig
@@ -46,7 +46,7 @@ flagpd1("M"),
 .{
     .name = "MM",
     .syntax = .flag,
-    .zig_equivalent = .dep_file,
+    .zig_equivalent = .dep_file_mm,
     .pd1 = true,
     .pd2 = false,
     .psl = false,
@@ -1878,7 +1878,7 @@ flagpsl("MT"),
 .{
     .name = "print-missing-file-dependencies",
     .syntax = .flag,
-    .zig_equivalent = .other,
+    .zig_equivalent = .dep_file,
     .pd1 = false,
     .pd2 = true,
     .psl = false,
@@ -1998,7 +1998,7 @@ flagpsl("MT"),
 .{
     .name = "user-dependencies",
     .syntax = .flag,
-    .zig_equivalent = .other,
+    .zig_equivalent = .dep_file_mm,
     .pd1 = false,
     .pd2 = true,
     .psl = false,
@@ -2022,7 +2022,7 @@ flagpsl("MT"),
 .{
     .name = "write-dependencies",
     .syntax = .flag,
-    .zig_equivalent = .other,
+    .zig_equivalent = .dep_file,
     .pd1 = false,
     .pd2 = true,
     .psl = false,
@@ -2030,7 +2030,7 @@ flagpsl("MT"),
 .{
     .name = "write-user-dependencies",
     .syntax = .flag,
-    .zig_equivalent = .other,
+    .zig_equivalent = .dep_file,
     .pd1 = false,
     .pd2 = true,
     .psl = false,
src/main.zig
@@ -1192,6 +1192,12 @@ fn buildOutputType(
                         disable_c_depfile = true;
                         try clang_argv.appendSlice(it.other_args);
                     },
+                    .dep_file_mm => { // -MM
+                        // "Like -MMD, but also implies -E and writes to stdout by default"
+                        c_out_mode = .preprocessor;
+                        disable_c_depfile = true;
+                        try clang_argv.appendSlice(it.other_args);
+                    },
                     .framework_dir => try framework_dirs.append(it.only_arg),
                     .framework => try frameworks.append(it.only_arg),
                     .nostdlibinc => want_native_include_dirs = false,
@@ -3055,6 +3061,7 @@ pub const ClangArgIterator = struct {
         lib_dir,
         mcpu,
         dep_file,
+        dep_file_mm,
         framework_dir,
         framework,
         nostdlibinc,
tools/update_clang_options.zig
@@ -268,6 +268,10 @@ const known_options = [_]KnownOpt{
         .name = "MD",
         .ident = "dep_file",
     },
+    .{
+        .name = "write-dependencies",
+        .ident = "dep_file",
+    },
     .{
         .name = "MV",
         .ident = "dep_file",
@@ -284,18 +288,30 @@ const known_options = [_]KnownOpt{
         .name = "MG",
         .ident = "dep_file",
     },
+    .{
+        .name = "print-missing-file-dependencies",
+        .ident = "dep_file",
+    },
     .{
         .name = "MJ",
         .ident = "dep_file",
     },
     .{
         .name = "MM",
-        .ident = "dep_file",
+        .ident = "dep_file_mm",
+    },
+    .{
+        .name = "user-dependencies",
+        .ident = "dep_file_mm",
     },
     .{
         .name = "MMD",
         .ident = "dep_file",
     },
+    .{
+        .name = "write-user-dependencies",
+        .ident = "dep_file",
+    },
     .{
         .name = "MP",
         .ident = "dep_file",