Honor RULE_MESSAGES property for build target messages

This commit is contained in:
Campbell Barton 2010-10-28 11:13:00 -04:00 committed by Brad King
parent 5cf99388c3
commit dc36b34994
2 changed files with 96 additions and 77 deletions

View File

@ -25,6 +25,7 @@ cmGlobalUnixMakefileGenerator3::cmGlobalUnixMakefileGenerator3()
this->FindMakeProgramFile = "CMakeUnixFindMake.cmake"; this->FindMakeProgramFile = "CMakeUnixFindMake.cmake";
this->ToolSupportsColor = true; this->ToolSupportsColor = true;
this->ForceVerboseMakefiles = false; this->ForceVerboseMakefiles = false;
this->NoRuleMessages = false;
#if defined(_WIN32) || defined(__VMS) #if defined(_WIN32) || defined(__VMS)
this->UseLinkScript = false; this->UseLinkScript = false;
@ -144,39 +145,48 @@ void cmGlobalUnixMakefileGenerator3::Generate()
// first do superclass method // first do superclass method
this->cmGlobalGenerator::Generate(); this->cmGlobalGenerator::Generate();
// initialize progress cmake* cm = this->GetCMakeInstance();
unsigned long total = 0; if(const char* ruleStatus = cm->GetProperty("RULE_MESSAGES"))
for(ProgressMapType::const_iterator pmi = this->ProgressMap.begin();
pmi != this->ProgressMap.end(); ++pmi)
{ {
total += pmi->second.NumberOfActions; this->NoRuleMessages = cmSystemTools::IsOff(ruleStatus);
} }
// write each target's progress.make this loop is done twice. Bascially the if(!this->NoRuleMessages)
// Generate pass counts all the actions, the first loop below determines
// how many actions have progress updates for each target and writes to
// corrrect variable values for everything except the all targets. The
// second loop actually writes out correct values for the all targets as
// well. This is because the all targets require more information that is
// computed in the first loop.
unsigned long current = 0;
for(ProgressMapType::iterator pmi = this->ProgressMap.begin();
pmi != this->ProgressMap.end(); ++pmi)
{ {
pmi->second.WriteProgressVariables(total, current); // initialize progress
unsigned long total = 0;
for(ProgressMapType::const_iterator pmi = this->ProgressMap.begin();
pmi != this->ProgressMap.end(); ++pmi)
{
total += pmi->second.NumberOfActions;
}
// write each target's progress.make this loop is done twice. Bascially the
// Generate pass counts all the actions, the first loop below determines
// how many actions have progress updates for each target and writes to
// corrrect variable values for everything except the all targets. The
// second loop actually writes out correct values for the all targets as
// well. This is because the all targets require more information that is
// computed in the first loop.
unsigned long current = 0;
for(ProgressMapType::iterator pmi = this->ProgressMap.begin();
pmi != this->ProgressMap.end(); ++pmi)
{
pmi->second.WriteProgressVariables(total, current);
}
for(unsigned int i = 0; i < this->LocalGenerators.size(); ++i)
{
cmLocalUnixMakefileGenerator3 *lg =
static_cast<cmLocalUnixMakefileGenerator3 *>(this->LocalGenerators[i]);
std::string markFileName = lg->GetMakefile()->GetStartOutputDirectory();
markFileName += "/";
markFileName += cmake::GetCMakeFilesDirectory();
markFileName += "/progress.marks";
cmGeneratedFileStream markFile(markFileName.c_str());
markFile << this->CountProgressMarksInAll(lg) << "\n";
}
} }
for(unsigned int i = 0; i < this->LocalGenerators.size(); ++i)
{
cmLocalUnixMakefileGenerator3 *lg =
static_cast<cmLocalUnixMakefileGenerator3 *>(this->LocalGenerators[i]);
std::string markFileName = lg->GetMakefile()->GetStartOutputDirectory();
markFileName += "/";
markFileName += cmake::GetCMakeFilesDirectory();
markFileName += "/progress.marks";
cmGeneratedFileStream markFile(markFileName.c_str());
markFile << this->CountProgressMarksInAll(lg) << "\n";
}
// write the main makefile // write the main makefile
this->WriteMainMakefile2(); this->WriteMainMakefile2();
this->WriteMainCMakefile(); this->WriteMainCMakefile();
@ -738,31 +748,35 @@ cmGlobalUnixMakefileGenerator3
// Write the rule. // Write the rule.
localName += "/all"; localName += "/all";
depends.clear(); depends.clear();
std::string progressDir;
std::string progressDir = if(!this->NoRuleMessages)
lg->GetMakefile()->GetHomeOutputDirectory();
progressDir += cmake::GetCMakeFilesDirectory();
{ {
cmOStringStream progCmd; progressDir =
progCmd << "$(CMAKE_COMMAND) -E cmake_progress_report "; lg->GetMakefile()->GetHomeOutputDirectory();
// all target counts progressDir += cmake::GetCMakeFilesDirectory();
progCmd << lg->Convert(progressDir.c_str(),
cmLocalGenerator::FULL,
cmLocalGenerator::SHELL);
progCmd << " ";
std::vector<unsigned long>& progFiles =
this->ProgressMap[&t->second].Marks;
for (std::vector<unsigned long>::iterator i = progFiles.begin();
i != progFiles.end(); ++i)
{ {
progCmd << " " << *i; cmOStringStream progCmd;
progCmd << "$(CMAKE_COMMAND) -E cmake_progress_report ";
// all target counts
progCmd << lg->Convert(progressDir.c_str(),
cmLocalGenerator::FULL,
cmLocalGenerator::SHELL);
progCmd << " ";
std::vector<unsigned long>& progFiles =
this->ProgressMap[&t->second].Marks;
for (std::vector<unsigned long>::iterator i = progFiles.begin();
i != progFiles.end(); ++i)
{
progCmd << " " << *i;
}
commands.push_back(progCmd.str());
} }
commands.push_back(progCmd.str()); progressDir = "Built target ";
progressDir += t->first;
lg->AppendEcho(commands,progressDir.c_str());
} }
progressDir = "Built target ";
progressDir += t->first;
lg->AppendEcho(commands,progressDir.c_str());
this->AppendGlobalTargetDepends(depends,t->second); this->AppendGlobalTargetDepends(depends,t->second);
lg->WriteMakeRule(ruleFileStream, "All Build rule for target.", lg->WriteMakeRule(ruleFileStream, "All Build rule for target.",
localName.c_str(), depends, commands, true); localName.c_str(), depends, commands, true);
@ -776,39 +790,43 @@ cmGlobalUnixMakefileGenerator3
lg->WriteMakeRule(ruleFileStream, "Include target in all.", lg->WriteMakeRule(ruleFileStream, "Include target in all.",
"all", depends, commands, true); "all", depends, commands, true);
} }
// Write the rule. if(!this->NoRuleMessages)
commands.clear(); {
progressDir = lg->GetMakefile()->GetHomeOutputDirectory(); // Write the rule.
progressDir += cmake::GetCMakeFilesDirectory(); commands.clear();
progressDir = lg->GetMakefile()->GetHomeOutputDirectory();
{ progressDir += cmake::GetCMakeFilesDirectory();
// TODO: Convert the total progress count to a make variable.
cmOStringStream progCmd; {
progCmd << "$(CMAKE_COMMAND) -E cmake_progress_start "; // TODO: Convert the total progress count to a make variable.
// # in target cmOStringStream progCmd;
progCmd << lg->Convert(progressDir.c_str(), progCmd << "$(CMAKE_COMMAND) -E cmake_progress_start ";
cmLocalGenerator::FULL, // # in target
cmLocalGenerator::SHELL); progCmd << lg->Convert(progressDir.c_str(),
// cmLocalGenerator::FULL,
std::set<cmTarget *> emitted; cmLocalGenerator::SHELL);
progCmd << " " //
<< this->CountProgressMarksInTarget(&t->second, emitted); std::set<cmTarget *> emitted;
commands.push_back(progCmd.str()); progCmd << " "
} << this->CountProgressMarksInTarget(&t->second, emitted);
commands.push_back(progCmd.str());
}
}
std::string tmp = cmake::GetCMakeFilesDirectoryPostSlash(); std::string tmp = cmake::GetCMakeFilesDirectoryPostSlash();
tmp += "Makefile2"; tmp += "Makefile2";
commands.push_back(lg->GetRecursiveMakeCall commands.push_back(lg->GetRecursiveMakeCall
(tmp.c_str(),localName.c_str())); (tmp.c_str(),localName.c_str()));
{ if(!this->NoRuleMessages)
cmOStringStream progCmd; {
progCmd << "$(CMAKE_COMMAND) -E cmake_progress_start "; // # 0 cmOStringStream progCmd;
progCmd << lg->Convert(progressDir.c_str(), progCmd << "$(CMAKE_COMMAND) -E cmake_progress_start "; // # 0
cmLocalGenerator::FULL, progCmd << lg->Convert(progressDir.c_str(),
cmLocalGenerator::SHELL); cmLocalGenerator::FULL,
progCmd << " 0"; cmLocalGenerator::SHELL);
commands.push_back(progCmd.str()); progCmd << " 0";
} commands.push_back(progCmd.str());
}
depends.clear(); depends.clear();
depends.push_back("cmake_check_build_system"); depends.push_back("cmake_check_build_system");
localName = lg->GetRelativeTargetDirectory(t->second); localName = lg->GetRelativeTargetDirectory(t->second);

View File

@ -170,6 +170,7 @@ protected:
std::string EmptyRuleHackCommand; std::string EmptyRuleHackCommand;
bool ForceVerboseMakefiles; bool ForceVerboseMakefiles;
bool NoRuleMessages;
// Store per-target progress counters. // Store per-target progress counters.
struct TargetProgress struct TargetProgress