summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorKen Martin <ken.martin@kitware.com>2005-05-24 15:17:30 (GMT)
committerKen Martin <ken.martin@kitware.com>2005-05-24 15:17:30 (GMT)
commitef6c5ae23e369a3b6fd275069856d482fe7417c1 (patch)
treee0fa7f39ae0af7da8531e0b3540fe8e9ae322e26 /Source
parent7157fa163c3ec559f991c6d72453f6437b7b43bc (diff)
downloadCMake-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.cxx35
-rw-r--r--Source/cmGlobalUnixMakefileGenerator3.h2
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx14
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");