]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
fix: Handle MSVC /Fp and /Yu options with concatenated path again
authorJoel Rosdahl <joel@rosdahl.net>
Thu, 5 May 2022 19:20:04 +0000 (21:20 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Thu, 5 May 2022 19:52:57 +0000 (21:52 +0200)
Regression in c8fb539523c801bf15591c395c3029b4530a7a2f.

See #1063.

src/argprocessing.cpp

index 518d3e1a0f444520f6d9522abc7daf7ab8b8f775..c00c6e076513b56c7e34baff6f8165622202b617 100644 (file)
@@ -919,12 +919,16 @@ process_arg(const Context& ctx,
 
   // Potentially rewrite concatenated absolute path argument to relative.
   if (args[i][0] == '-') {
-    const auto slash_pos = Util::is_absolute_path_with_prefix(args[i]);
-    if (slash_pos) {
-      std::string option = args[i].substr(0, *slash_pos);
+    const auto path_pos = Util::is_absolute_path_with_prefix(args[i]);
+    if (path_pos) {
+      const std::string option = args[i].substr(0, *path_pos);
+      const std::string path = args[i].substr(*path_pos);
+      if (!detect_pch(
+            option, path, args_info.included_pch_file, false, state)) {
+        return Statistic::bad_compiler_arguments;
+      }
       if (compopt_takes_concat_arg(option) && compopt_takes_path(option)) {
-        auto relpath = Util::make_relative_path(
-          ctx, string_view(args[i]).substr(*slash_pos));
+        const auto relpath = Util::make_relative_path(ctx, path);
         std::string new_option = option + relpath;
         if (compopt_affects_cpp_output(option)) {
           state.cpp_args.push_back(new_option);
@@ -936,18 +940,6 @@ process_arg(const Context& ctx,
     }
   }
 
-  // Detect PCH for options with concatenated path.
-  if (util::starts_with(args[i], "-Fp") || util::starts_with(args[i], "-Yu")) {
-    const size_t path_pos = 3;
-    if (!detect_pch(args[i].substr(0, path_pos),
-                    args[i].substr(path_pos),
-                    args_info.included_pch_file,
-                    false,
-                    state)) {
-      return Statistic::bad_compiler_arguments;
-    }
-  }
-
   // Options that take an argument.
   if (compopt_takes_arg(args[i])) {
     if (i == args.size() - 1) {