From 30983ebec1f242888560cff86e8789b3f02be056 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 31 Jul 2014 12:48:46 -0400 Subject: 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. --- Source/CTest/cmCTestBuildAndTestHandler.cxx | 2 +- Source/cmCoreTryCompile.cxx | 2 +- Source/cmGlobalGenerator.cxx | 63 +++++++++-------------------- Source/cmGlobalGenerator.h | 4 +- Source/cmMakefile.cxx | 2 +- Source/cmMakefile.h | 2 +- Source/cmake.cxx | 2 +- 7 files changed, 26 insertions(+), 51 deletions(-) diff --git a/Source/CTest/cmCTestBuildAndTestHandler.cxx b/Source/CTest/cmCTestBuildAndTestHandler.cxx index b4818be..627832c 100644 --- a/Source/CTest/cmCTestBuildAndTestHandler.cxx +++ b/Source/CTest/cmCTestBuildAndTestHandler.cxx @@ -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); diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index a3f3277..ed19851 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -489,7 +489,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector const& argv) targetName, this->SrcFileSignature, &cmakeFlags, - &output); + output); if ( erroroc ) { cmSystemTools::SetErrorOccured(); diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 249373c..38ba5d1 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -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 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; } diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index 6b608bb..f80c3c7 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -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, diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index d3ca34a..04b2d27 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -3510,7 +3510,7 @@ int cmMakefile::TryCompile(const std::string& srcdir, const std::string& targetName, bool fast, const std::vector *cmakeArgs, - std::string *output) + std::string& output) { this->Internal->IsSourceFileTryCompile = fast; // does the binary directory exist ? If not create it... diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index 3a40c1c..d728a62 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -130,7 +130,7 @@ public: const std::string& projectName, const std::string& targetName, bool fast, const std::vector *cmakeArgs, - std::string *output); + std::string& output); bool GetIsSourceFileTryCompile() const; diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 5aa1ab0..6cc3b81 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -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, -- cgit v0.12