From 85cea8a7af77cd482f4d3c7ec15f68bc5adeb0ba Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 22 Jul 2014 12:50:37 -0400 Subject: [PATCH] cmDepends: Refactor object file path conversion Delay conversion of the path to object files (on the left-hand side of dependencies) until just before they are written. Also do not convert the format of paths written to the 'depend.internal' file. This is consistent with the way the right-hand side of dependencies are already handled. --- Source/cmDepends.cxx | 7 +------ Source/cmDependsC.cxx | 10 ++++++++-- Source/cmDependsFortran.cxx | 23 ++++++++++++++--------- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/Source/cmDepends.cxx b/Source/cmDepends.cxx index cdc480c29..134f45b3b 100644 --- a/Source/cmDepends.cxx +++ b/Source/cmDepends.cxx @@ -58,12 +58,7 @@ bool cmDepends::Write(std::ostream &makeDepends, // Get the source and object file. std::string const& src = *si++; if(si == pairs.end()) { break; } - std::string obj = *si++; - - // Make sure the object file is relative to the top of the build tree. - obj = this->LocalGenerator->Convert(obj, - cmLocalGenerator::HOME_OUTPUT, - cmLocalGenerator::MAKERULE); + std::string const& obj = *si++; dependencies[obj].insert(src); } for(std::map >::const_iterator diff --git a/Source/cmDependsC.cxx b/Source/cmDependsC.cxx index dd239c405..a1fc268e1 100644 --- a/Source/cmDependsC.cxx +++ b/Source/cmDependsC.cxx @@ -269,11 +269,17 @@ bool cmDependsC::WriteDependencies(const std::set& sources, // written by the original local generator for this directory // convert the dependencies to paths relative to the home output // directory. We must do the same here. - internalDepends << obj << std::endl; + std::string obj_i = + this->LocalGenerator->Convert(obj, cmLocalGenerator::HOME_OUTPUT); + std::string obj_m = + this->LocalGenerator->ConvertToOutputFormat(obj_i, + cmLocalGenerator::MAKERULE); + internalDepends << obj_i << std::endl; + for(std::set::const_iterator i=dependencies.begin(); i != dependencies.end(); ++i) { - makeDepends << obj << ": " << + makeDepends << obj_m << ": " << this->LocalGenerator->Convert(*i, cmLocalGenerator::HOME_OUTPUT, cmLocalGenerator::MAKERULE) diff --git a/Source/cmDependsFortran.cxx b/Source/cmDependsFortran.cxx index b1d55f33b..8fc8347dd 100644 --- a/Source/cmDependsFortran.cxx +++ b/Source/cmDependsFortran.cxx @@ -443,12 +443,17 @@ cmDependsFortran const char* src = info.Source.c_str(); // Write the include dependencies to the output stream. - internalDepends << obj << std::endl; + std::string obj_i = + this->LocalGenerator->Convert(obj, cmLocalGenerator::HOME_OUTPUT); + std::string obj_m = + this->LocalGenerator->ConvertToOutputFormat(obj_i, + cmLocalGenerator::MAKERULE); + internalDepends << obj_i << std::endl; internalDepends << " " << src << std::endl; for(std::set::const_iterator i = info.Includes.begin(); i != info.Includes.end(); ++i) { - makeDepends << obj << ": " << + makeDepends << obj_m << ": " << this->LocalGenerator->Convert(*i, cmLocalGenerator::HOME_OUTPUT, cmLocalGenerator::MAKERULE) @@ -485,7 +490,7 @@ cmDependsFortran cmLocalGenerator::MAKERULE); // since we require some things add them to our list of requirements - makeDepends << obj << ".requires: " << proxy << std::endl; + makeDepends << obj_m << ".requires: " << proxy << std::endl; } // The object file should depend on timestamped files for the @@ -500,7 +505,7 @@ cmDependsFortran this->LocalGenerator->Convert(required->second, cmLocalGenerator::HOME_OUTPUT, cmLocalGenerator::MAKERULE); - makeDepends << obj << ": " << stampFile << "\n"; + makeDepends << obj_m << ": " << stampFile << "\n"; } else { @@ -513,7 +518,7 @@ cmDependsFortran this->LocalGenerator->Convert(module, cmLocalGenerator::HOME_OUTPUT, cmLocalGenerator::MAKERULE); - makeDepends << obj << ": " << module << "\n"; + makeDepends << obj_m << ": " << module << "\n"; } } } @@ -529,7 +534,7 @@ cmDependsFortran proxy = this->LocalGenerator->Convert(proxy, cmLocalGenerator::HOME_OUTPUT, cmLocalGenerator::MAKERULE); - makeDepends << proxy << ": " << obj << ".provides" << std::endl; + makeDepends << proxy << ": " << obj_m << ".provides" << std::endl; } // If any modules are provided then they must be converted to stamp files. @@ -537,7 +542,7 @@ cmDependsFortran { // Create a target to copy the module after the object file // changes. - makeDepends << obj << ".provides.build:\n"; + makeDepends << obj_m << ".provides.build:\n"; for(std::set::const_iterator i = info.Provides.begin(); i != info.Provides.end(); ++i) { @@ -575,7 +580,7 @@ cmDependsFortran } // After copying the modules update the timestamp file so that // copying will not be done again until the source rebuilds. - makeDepends << "\t$(CMAKE_COMMAND) -E touch " << obj + makeDepends << "\t$(CMAKE_COMMAND) -E touch " << obj_m << ".provides.build\n"; // Make sure the module timestamp rule is evaluated by the time @@ -585,7 +590,7 @@ cmDependsFortran driver = this->LocalGenerator->Convert(driver, cmLocalGenerator::HOME_OUTPUT, cmLocalGenerator::MAKERULE); - makeDepends << driver << ": " << obj << ".provides.build\n"; + makeDepends << driver << ": " << obj_m << ".provides.build\n"; } return true;