diff options
author | Ken Martin <ken.martin@kitware.com> | 2005-05-24 15:17:30 (GMT) |
---|---|---|
committer | Ken Martin <ken.martin@kitware.com> | 2005-05-24 15:17:30 (GMT) |
commit | ef6c5ae23e369a3b6fd275069856d482fe7417c1 (patch) | |
tree | e0fa7f39ae0af7da8531e0b3540fe8e9ae322e26 /Source | |
parent | 7157fa163c3ec559f991c6d72453f6437b7b43bc (diff) | |
download | CMake-ef6c5ae23e369a3b6fd275069856d482fe7417c1.zip CMake-ef6c5ae23e369a3b6fd275069856d482fe7417c1.tar.gz CMake-ef6c5ae23e369a3b6fd275069856d482fe7417c1.tar.bz2 |
ENH: optimization to not use requires step unless a language requires it
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmGlobalUnixMakefileGenerator3.cxx | 35 | ||||
-rw-r--r-- | Source/cmGlobalUnixMakefileGenerator3.h | 2 | ||||
-rw-r--r-- | Source/cmLocalUnixMakefileGenerator3.cxx | 14 |
3 files changed, 33 insertions, 18 deletions
diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx index 0ed9d1e..7819b49 100644 --- a/Source/cmGlobalUnixMakefileGenerator3.cxx +++ b/Source/cmGlobalUnixMakefileGenerator3.cxx @@ -532,6 +532,7 @@ cmGlobalUnixMakefileGenerator3 // for each target Generate the rule files for each target. const cmTargets& targets = lg->GetMakefile()->GetTargets(); + bool needRequiresStep = this->NeedRequiresStep(lg); for(cmTargets::const_iterator t = targets.begin(); t != targets.end(); ++t) { if((t->second.GetType() == cmTarget::EXECUTABLE) || @@ -552,10 +553,15 @@ cmGlobalUnixMakefileGenerator3 makeTargetName += "/depend"; commands.push_back(lg->GetRecursiveMakeCall(makefileName.c_str(), makeTargetName.c_str())); - makeTargetName = localName; - makeTargetName += "/requires"; - commands.push_back(lg->GetRecursiveMakeCall(makefileName.c_str(), - makeTargetName.c_str())); + + // add requires if we need it for this generator + if (needRequiresStep) + { + makeTargetName = localName; + makeTargetName += "/requires"; + commands.push_back(lg->GetRecursiveMakeCall(makefileName.c_str(), + makeTargetName.c_str())); + } } makeTargetName = localName; makeTargetName += "/build"; @@ -717,3 +723,24 @@ cmGlobalUnixMakefileGenerator3::WriteHelpRule(std::ostream& ruleFileStream) ruleFileStream << "\n\n"; } + +bool cmGlobalUnixMakefileGenerator3 +::NeedRequiresStep(cmLocalUnixMakefileGenerator3 *lg) +{ + std::map<cmStdString,cmLocalUnixMakefileGenerator3::IntegrityCheckSet>& + checkSet = lg->GetIntegrityCheckSet(); + for(std::map<cmStdString, + cmLocalUnixMakefileGenerator3::IntegrityCheckSet>::const_iterator + l = checkSet.begin(); l != checkSet.end(); ++l) + { + std::string name = "CMAKE_NEEDS_REQUIRES_STEP_"; + name += l->first; + name += "_FLAG"; + if(lg->GetMakefile()->GetDefinition(name.c_str())) + { + return true; + } + } + + return false; +} diff --git a/Source/cmGlobalUnixMakefileGenerator3.h b/Source/cmGlobalUnixMakefileGenerator3.h index 9cb049b..66c57d3 100644 --- a/Source/cmGlobalUnixMakefileGenerator3.h +++ b/Source/cmGlobalUnixMakefileGenerator3.h @@ -75,6 +75,8 @@ protected: const cmTarget& target); void AppendAnyGlobalDepend(std::vector<std::string>& depends, const char* name); + // does this generator need a requires step for any of its targets + bool NeedRequiresStep(cmLocalUnixMakefileGenerator3 *lg); }; diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index 54dff68..819d21f 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -1082,20 +1082,6 @@ void cmLocalUnixMakefileGenerator3::WriteMainTargetIncludes(std::ostream& makefi std::vector<std::string> depends; std::vector<std::string> no_commands; - // if this is the build rules also include the custom commands if there - // were any - if (!strcmp(rule,"build") && m_CustomRuleFiles.size()) - { - // do the include - std::string dir = m_Makefile->GetStartOutputDirectory(); - dir += "/CMakeCustomRules.dir/build.make"; - dir = this->Convert(dir.c_str(),HOME_OUTPUT,MAKEFILE); - makefileStream - << m_IncludeDirective << " " - << this->ConvertToOutputForExisting(dir.c_str()).c_str() - << "\n"; - } - // if this is the clean rules also include the custom commands if there // were any const char* clean_no_custom = m_Makefile->GetProperty("CLEAN_NO_CUSTOM"); |