cmGlobalGenerator: Take Build output argument by reference

No call sites pass NULL to the output argument, so take it by
reference to avoid the if(output) conditions.  Propagate the
change through the TryCompile APIs that call it.
This commit is contained in:
Brad King 2014-07-31 12:48:46 -04:00
parent b48211d426
commit 30983ebec1
7 changed files with 26 additions and 51 deletions

View File

@ -301,7 +301,7 @@ int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)
int retVal = cm.GetGlobalGenerator()->Build(
this->SourceDir, this->BinaryDir,
this->BuildProject, *tarIt,
&output, this->BuildMakeProgram,
output, this->BuildMakeProgram,
config,
!this->BuildNoClean,
false, remainingTime);

View File

@ -489,7 +489,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
targetName,
this->SrcFileSignature,
&cmakeFlags,
&output);
output);
if ( erroroc )
{
cmSystemTools::SetErrorOccured();

View File

@ -1616,7 +1616,7 @@ int cmGlobalGenerator::TryCompile(const std::string& srcdir,
const std::string& bindir,
const std::string& projectName,
const std::string& target, bool fast,
std::string *output, cmMakefile *mf)
std::string& output, cmMakefile *mf)
{
// if this is not set, then this is a first time configure
// and there is a good chance that the try compile stuff will
@ -1675,7 +1675,7 @@ void cmGlobalGenerator::GenerateBuildCommand(
int cmGlobalGenerator::Build(
const std::string&, const std::string& bindir,
const std::string& projectName, const std::string& target,
std::string *output,
std::string& output,
const std::string& makeCommandCSTR,
const std::string& config,
bool clean, bool fast,
@ -1688,22 +1688,15 @@ int cmGlobalGenerator::Build(
*/
std::string cwd = cmSystemTools::GetCurrentWorkingDirectory();
cmSystemTools::ChangeDirectory(bindir.c_str());
if(output)
{
*output += "Change Dir: ";
*output += bindir;
*output += "\n";
}
output += "Change Dir: ";
output += bindir;
output += "\n";
int retVal;
bool hideconsole = cmSystemTools::GetRunCommandHideConsole();
cmSystemTools::SetRunCommandHideConsole(true);
std::string outputBuffer;
std::string* outputPtr = 0;
if(output)
{
outputPtr = &outputBuffer;
}
std::string* outputPtr = &outputBuffer;
// should we do a clean first?
if (clean)
@ -1711,32 +1704,23 @@ int cmGlobalGenerator::Build(
std::vector<std::string> cleanCommand;
this->GenerateBuildCommand(cleanCommand, makeCommandCSTR, projectName,
bindir, "clean", config, fast);
if(output)
{
*output += "\nRun Clean Command:";
*output += cmSystemTools::PrintSingleCommand(cleanCommand);
*output += "\n";
}
output += "\nRun Clean Command:";
output += cmSystemTools::PrintSingleCommand(cleanCommand);
output += "\n";
if (!cmSystemTools::RunSingleCommand(cleanCommand, outputPtr,
&retVal, 0, outputflag, timeout))
{
cmSystemTools::SetRunCommandHideConsole(hideconsole);
cmSystemTools::Error("Generator: execution of make clean failed.");
if (output)
{
*output += *outputPtr;
*output += "\nGenerator: execution of make clean failed.\n";
}
output += *outputPtr;
output += "\nGenerator: execution of make clean failed.\n";
// return to the original directory
cmSystemTools::ChangeDirectory(cwd.c_str());
return 1;
}
if (output)
{
*output += *outputPtr;
}
output += *outputPtr;
}
// now build
@ -1744,12 +1728,9 @@ int cmGlobalGenerator::Build(
this->GenerateBuildCommand(makeCommand, makeCommandCSTR, projectName,
bindir, target, config, fast, nativeOptions);
std::string makeCommandStr = cmSystemTools::PrintSingleCommand(makeCommand);
if(output)
{
*output += "\nRun Build Command:";
*output += makeCommandStr;
*output += "\n";
}
output += "\nRun Build Command:";
output += makeCommandStr;
output += "\n";
if (!cmSystemTools::RunSingleCommand(makeCommand, outputPtr,
&retVal, 0, outputflag, timeout))
@ -1758,27 +1739,21 @@ int cmGlobalGenerator::Build(
cmSystemTools::Error
("Generator: execution of make failed. Make command was: ",
makeCommandStr.c_str());
if (output)
{
*output += *outputPtr;
*output += "\nGenerator: execution of make failed. Make command was: "
output += *outputPtr;
output += "\nGenerator: execution of make failed. Make command was: "
+ makeCommandStr + "\n";
}
// return to the original directory
cmSystemTools::ChangeDirectory(cwd.c_str());
return 1;
}
if (output)
{
*output += *outputPtr;
}
output += *outputPtr;
cmSystemTools::SetRunCommandHideConsole(hideconsole);
// The SGI MipsPro 7.3 compiler does not return an error code when
// the source has a #error in it! This is a work-around for such
// compilers.
if((retVal == 0) && (output->find("#error") != std::string::npos))
if((retVal == 0) && (output.find("#error") != std::string::npos))
{
retVal = 1;
}

View File

@ -116,7 +116,7 @@ public:
virtual int TryCompile(const std::string& srcdir, const std::string& bindir,
const std::string& projectName,
const std::string& targetName,
bool fast, std::string *output, cmMakefile* mf);
bool fast, std::string& output, cmMakefile* mf);
/**
@ -127,7 +127,7 @@ public:
*/
int Build(const std::string& srcdir, const std::string& bindir,
const std::string& projectName, const std::string& targetName,
std::string *output,
std::string& output,
const std::string& makeProgram, const std::string& config,
bool clean, bool fast,
double timeout,

View File

@ -3510,7 +3510,7 @@ int cmMakefile::TryCompile(const std::string& srcdir,
const std::string& targetName,
bool fast,
const std::vector<std::string> *cmakeArgs,
std::string *output)
std::string& output)
{
this->Internal->IsSourceFileTryCompile = fast;
// does the binary directory exist ? If not create it...

View File

@ -130,7 +130,7 @@ public:
const std::string& projectName, const std::string& targetName,
bool fast,
const std::vector<std::string> *cmakeArgs,
std::string *output);
std::string& output);
bool GetIsSourceFileTryCompile() const;

View File

@ -2757,7 +2757,7 @@ int cmake::Build(const std::string& dir,
projName = it.GetValue();
return gen->Build("", dir,
projName, target,
&output,
output,
"",
config, clean, false, 0,
cmSystemTools::OUTPUT_PASSTHROUGH,