]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Move “rewrite dependency target” decision from ArgsInfo to ccache.cpp
authorJoel Rosdahl <joel@rosdahl.net>
Sat, 25 Jul 2020 17:06:47 +0000 (19:06 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Sat, 25 Jul 2020 19:40:21 +0000 (21:40 +0200)
As noted in a comment to #592.

src/ArgsInfo.hpp
src/ResultRetriever.cpp
src/ResultRetriever.hpp
src/argprocessing.cpp
src/ccache.cpp

index 753dc8fa4950c4e511ac0eae4fc971cab238a289..b04a152f6280cef614484017090cbe734984cdb5 100644 (file)
@@ -58,12 +58,9 @@ struct ArgsInfo
   // Is the compiler being asked to output dependencies?
   bool generating_dependencies = false;
 
-  // Option MD/MMD
+  // Seen -MD or -MMD?
   bool seen_MD_MMD = false;
 
-  // Change target of dependency file
-  bool change_dep_file = false;
-
   // Is the dependency makefile target name specified with -MT or -MQ?
   bool dependency_target_specified = false;
 
index c13074aca84824843b99bfbd838bb6155df609ea..4c8c0e1aea224850f8a2926bc51c9f7bbc69ab0e 100644 (file)
@@ -26,7 +26,8 @@
 using Result::FileType;
 using string_view = nonstd::string_view;
 
-ResultRetriever::ResultRetriever(Context& ctx) : m_ctx(ctx)
+ResultRetriever::ResultRetriever(Context& ctx, bool rewrite_dependency_target)
+  : m_ctx(ctx), m_rewrite_dependency_target(rewrite_dependency_target)
 {
 }
 
@@ -125,7 +126,7 @@ ResultRetriever::on_entry_data(const uint8_t* data, size_t size)
   if (m_dest_file_type == FileType::stderr_output) {
     m_stderr_text.append(reinterpret_cast<const char*>(data), size);
   } else if (m_dest_file_type == FileType::dependency && m_first
-             && m_ctx.args_info.change_dep_file) {
+             && m_rewrite_dependency_target) {
     // Write the object file name
     if (!write_fd(*m_dest_fd,
                   m_ctx.args_info.output_obj.data(),
index 45b3d4d8ccfaaafd56ca7129556fc04ec5ba6c7b..68ba39a3598731a4d0419ebfbef040ff14e14d81 100644 (file)
@@ -29,7 +29,7 @@ class Context;
 class ResultRetriever : public Result::Reader::Consumer
 {
 public:
-  ResultRetriever(Context& ctx);
+  ResultRetriever(Context& ctx, bool rewrite_dependency_target);
 
   virtual void on_header(CacheEntryReader& cache_entry_reader);
   virtual void on_entry_start(uint32_t entry_number,
@@ -46,4 +46,5 @@ private:
   std::string m_dest_path;
   std::string m_stderr_text;
   bool m_first;
+  bool m_rewrite_dependency_target;
 };
index 84bcb442d2aaa5623089833617e5b1b9a3bd9881..fd355630f5a330301e3b3f6103c309f265e1369e 100644 (file)
@@ -949,10 +949,6 @@ process_args(Context& ctx,
     }
   }
 
-  if (!ctx.args_info.dependency_target_specified && ctx.args_info.seen_MD_MMD) {
-    ctx.args_info.change_dep_file = true;
-  }
-
   if (state.generating_debuginfo_level_3 && !config.run_second_cpp()) {
     cc_log("Generating debug info level 3; not compiling preprocessed code");
     config.set_run_second_cpp(true);
index 37591a96e89e1c1725965c3a9c03dedec9d13d3c..057f50e9d9507b11f74e1674b276c0f415d057b3 100644 (file)
@@ -1184,7 +1184,13 @@ hash_nvcc_host_compiler(const Context& ctx,
   }
 }
 
-// Update a hash with information common for the direct and preprocessor modes.
+static bool
+should_rewrite_dependency_target(const ArgsInfo& args_info)
+{
+  return !args_info.dependency_target_specified && args_info.seen_MD_MMD;
+}
+
+// update a hash with information common for the direct and preprocessor modes.
 static void
 hash_common_info(const Context& ctx,
                  const Args& args,
@@ -1257,7 +1263,8 @@ hash_common_info(const Context& ctx,
     hash.hash(dir_to_hash);
   }
 
-  if ((!ctx.args_info.change_dep_file && ctx.args_info.generating_dependencies)
+  if ((!should_rewrite_dependency_target(ctx.args_info)
+       && ctx.args_info.generating_dependencies)
       || ctx.args_info.seen_split_dwarf) {
     // The output object file name is part of the .d file, so include the path
     // in the hash if generating dependencies.
@@ -1692,7 +1699,8 @@ from_cache(Context& ctx, enum fromcache_call_mode mode)
 
   // Get result from cache.
   Result::Reader result_reader(ctx.result_path());
-  ResultRetriever result_retriever(ctx);
+  ResultRetriever result_retriever(
+    ctx, should_rewrite_dependency_target(ctx.args_info));
 
   auto error = result_reader.read(result_retriever);
   if (error) {