diff options
author | Andy Cedilnik <andy.cedilnik@kitware.com> | 2004-09-28 17:51:29 -0400 |
---|---|---|
committer | Andy Cedilnik <andy.cedilnik@kitware.com> | 2004-09-28 17:51:29 -0400 |
commit | 6972cdf9e9ca78f9031bd419f48c270bd67c8a71 (patch) | |
tree | b1f1dac59de372a13f3fb54d9b2ae332f079a2dd /Source/CTest/cmCTestScriptHandler.cxx | |
parent | e96b0b44cae27130051e4c3bdebdee5c4c1c3c8c (diff) | |
download | cmake-6972cdf9e9ca78f9031bd419f48c270bd67c8a71.tar.gz |
ENH: Move all extracting of variables to ExtractVariables. This way it is easy to know what variables are used
Diffstat (limited to 'Source/CTest/cmCTestScriptHandler.cxx')
-rw-r--r-- | Source/CTest/cmCTestScriptHandler.cxx | 154 |
1 files changed, 84 insertions, 70 deletions
diff --git a/Source/CTest/cmCTestScriptHandler.cxx b/Source/CTest/cmCTestScriptHandler.cxx index 08737e6302..9415ad6bba 100644 --- a/Source/CTest/cmCTestScriptHandler.cxx +++ b/Source/CTest/cmCTestScriptHandler.cxx @@ -48,6 +48,8 @@ cmCTestScriptHandler::cmCTestScriptHandler() { m_Verbose = false; m_Backup = false; + m_EmptyBinDir = false; + m_EmptyBinDirOnce = false; m_Makefile = 0; m_LocalGenerator = 0; m_CMake = 0; @@ -55,6 +57,7 @@ cmCTestScriptHandler::cmCTestScriptHandler() // the *60 is becuase the settings are in minutes but GetTime is seconds m_MinimumInterval = 30*60; + m_ContinuousDuration = -1; } @@ -177,13 +180,46 @@ int cmCTestScriptHandler::ExtractVariables() // get some info that should be set m_Makefile = m_LocalGenerator->GetMakefile(); - m_SourceDir = m_Makefile->GetSafeDefinition("CTEST_SOURCE_DIRECTORY"); - m_BinaryDir = m_Makefile->GetSafeDefinition("CTEST_BINARY_DIRECTORY"); - m_CTestCmd = m_Makefile->GetSafeDefinition("CTEST_COMMAND"); - m_Backup = m_Makefile->IsOn("CTEST_BACKUP_AND_RESTORE"); + // Temporary variables + const char* minInterval; + const char* contDuration; - // in order to backup and restore we also must have the cvs root + m_SourceDir = m_Makefile->GetSafeDefinition("CTEST_SOURCE_DIRECTORY"); + m_BinaryDir = m_Makefile->GetSafeDefinition("CTEST_BINARY_DIRECTORY"); + m_CTestCmd = m_Makefile->GetSafeDefinition("CTEST_COMMAND"); m_CVSCheckOut = m_Makefile->GetSafeDefinition("CTEST_CVS_CHECKOUT"); + m_CTestRoot = m_Makefile->GetSafeDefinition("CTEST_DASHBOARD_ROOT"); + m_CVSCmd = m_Makefile->GetSafeDefinition("CTEST_CVS_COMMAND"); + m_CTestEnv = m_Makefile->GetSafeDefinition("CTEST_ENVIRONMENT"); + m_InitCache = m_Makefile->GetSafeDefinition("CTEST_INITIAL_CACHE"); + m_CMakeCmd = m_Makefile->GetSafeDefinition("CTEST_CMAKE_COMMAND"); + m_CMOutFile = m_Makefile->GetSafeDefinition("CTEST_CMAKE_OUTPUT_FILE_NAME"); + + m_Backup = m_Makefile->IsOn("CTEST_BACKUP_AND_RESTORE"); + m_EmptyBinDir = m_Makefile->IsOn("CTEST_START_WITH_EMPTY_BINARY_DIRECTORY"); + m_EmptyBinDirOnce = m_Makefile->IsOn("CTEST_START_WITH_EMPTY_BINARY_DIRECTORY_ONCE"); + + minInterval = m_Makefile->GetDefinition("CTEST_CONTINUOUS_MINIMUM_INTERVAL"); + contDuration = m_Makefile->GetDefinition("CTEST_CONTINUOUS_DURATION"); + + char updateVar[40]; + int i; + for (i = 1; i < 10; ++i) + { + sprintf(updateVar,"CTEST_EXTRA_UPDATES_%i",i); + const char *updateVal = m_Makefile->GetDefinition(updateVar); + if ( updateVal ) + { + if ( m_CVSCmd.empty() ) + { + cmSystemTools::Error(updateVar, " specified without specifying CTEST_CVS_COMMAND."); + return 12; + } + m_ExtraUpdates.push_back(updateVal); + } + } + + // in order to backup and restore we also must have the cvs root if (m_Backup && m_CVSCheckOut.empty()) { cmSystemTools::Error( @@ -210,23 +246,21 @@ int cmCTestScriptHandler::ExtractVariables() // if the dashboard root isn't specified then we can compute it from the // m_SourceDir - if (m_Makefile->GetDefinition("CTEST_DASHBOARD_ROOT")) - { - m_CTestRoot = m_Makefile->GetDefinition("CTEST_DASHBOARD_ROOT"); - } - else + if (m_CTestRoot.empty() ) { m_CTestRoot = cmSystemTools::GetFilenamePath(m_SourceDir).c_str(); } // the script may override the minimum continuous interval - if (m_Makefile->GetDefinition("CTEST_CONTINUOUS_MINIMUM_INTERVAL")) + if (minInterval) { - m_MinimumInterval = 60* - atof(m_Makefile->GetDefinition("CTEST_CONTINUOUS_MINIMUM_INTERVAL")); + m_MinimumInterval = 60 * atof(minInterval); + } + if (contDuration) + { + m_ContinuousDuration = 60.0 * atof(contDuration); } - m_CVSCmd = m_Makefile->GetSafeDefinition("CTEST_CVS_COMMAND"); return 0; } @@ -266,11 +300,10 @@ int cmCTestScriptHandler::RunConfigurationScript( } // set any environment variables - const char *ctestEnv = m_Makefile->GetDefinition("CTEST_ENVIRONMENT"); - if (ctestEnv) + if (!m_CTestEnv.empty()) { std::vector<std::string> envArgs; - cmSystemTools::ExpandListArgument(ctestEnv,envArgs); + cmSystemTools::ExpandListArgument(m_CTestEnv.c_str(),envArgs); // for each variable/argument do a putenv for (unsigned i = 0; i < envArgs.size(); ++i) { @@ -281,13 +314,12 @@ int cmCTestScriptHandler::RunConfigurationScript( // now that we have done most of the error checking finally run the // dashboard, we may be asked to repeatedly run this dashboard, such as // for a continuous, do we ned to run it more than once? - if (m_Makefile->GetDefinition("CTEST_CONTINUOUS_DURATION")) + if ( m_ContinuousDuration >= 0 ) { - double ending_time = cmSystemTools::GetTime() + - 60.0*atof(m_Makefile->GetDefinition("CTEST_CONTINUOUS_DURATION")); - if (m_Makefile->IsOn("CTEST_START_WITH_EMPTY_BINARY_DIRECTORY_ONCE")) + double ending_time = cmSystemTools::GetTime() + m_ContinuousDuration; + if (m_EmptyBinDirOnce) { - m_Makefile->AddDefinition("CTEST_START_WITH_EMPTY_BINARY_DIRECTORY","1"); + m_EmptyBinDir = true; } do { @@ -299,10 +331,9 @@ int cmCTestScriptHandler::RunConfigurationScript( this->LocalSleep( static_cast<unsigned int>(m_MinimumInterval - interval)); } - if (m_Makefile->IsOn("CTEST_START_WITH_EMPTY_BINARY_DIRECTORY_ONCE")) + if (m_EmptyBinDirOnce) { - m_Makefile->AddDefinition("CTEST_START_WITH_EMPTY_BINARY_DIRECTORY", - "0"); + m_EmptyBinDir = false; } } while (cmSystemTools::GetTime() < ending_time); @@ -397,43 +428,31 @@ int cmCTestScriptHandler::PerformExtraUpdates() // do an initial cvs update as required command = m_CVSCmd; - char updateVar[40]; - int i; - for (i = 1; i < 10; ++i) + std::vector<cmStdString>::iterator it; + for (it = m_ExtraUpdates.begin(); it != m_ExtraUpdates.end(); ++ it ) { - sprintf(updateVar,"CTEST_EXTRA_UPDATES_%i",i); - const char *updateVal = m_Makefile->GetDefinition(updateVar); - if (updateVal) + std::vector<std::string> cvsArgs; + cmSystemTools::ExpandListArgument(it->c_str(),cvsArgs); + if (cvsArgs.size() == 2) { - if (m_CVSCmd.empty()) + std::string fullCommand = command; + fullCommand += " update "; + fullCommand += cvsArgs[1]; + output = ""; + retVal = 0; + if ( m_Verbose ) { - cmSystemTools::Error(updateVar, " specified without specifying CTEST_CVS_COMMAND."); - this->RestoreBackupDirectories(); - return 12; + std::cerr << "Run CVS: " << fullCommand.c_str() << std::endl; } - std::vector<std::string> cvsArgs; - cmSystemTools::ExpandListArgument(updateVal,cvsArgs); - if (cvsArgs.size() == 2) + res = cmSystemTools::RunSingleCommand(fullCommand.c_str(), &output, + &retVal, cvsArgs[0].c_str(), + m_Verbose, 0 /*m_TimeOut*/); + if (!res || retVal != 0) { - std::string fullCommand = command; - fullCommand += " update "; - fullCommand += cvsArgs[1]; - output = ""; - retVal = 0; - if ( m_Verbose ) - { - std::cerr << "Run CVS: " << fullCommand.c_str() << std::endl; - } - res = cmSystemTools::RunSingleCommand(fullCommand.c_str(), &output, - &retVal, cvsArgs[0].c_str(), - m_Verbose, 0 /*m_TimeOut*/); - if (!res || retVal != 0) - { - cmSystemTools::Error("Unable to perform extra cvs updates:\n", - output.c_str()); - this->RestoreBackupDirectories(); - return 8; - } + cmSystemTools::Error("Unable to perform extra cvs updates:\n", + output.c_str()); + this->RestoreBackupDirectories(); + return 8; } } } @@ -467,7 +486,7 @@ int cmCTestScriptHandler::RunConfigurationDashboard() } // clear the binary directory? - if (m_Makefile->IsOn("CTEST_START_WITH_EMPTY_BINARY_DIRECTORY")) + if (m_EmptyBinDir) { // try to avoid deleting directories that we shouldn't std::string check = m_BinaryDir; @@ -494,8 +513,7 @@ int cmCTestScriptHandler::RunConfigurationDashboard() // if the binary directory and the source directory are the same, // and we are starting with an empty binary directory, then that means // we must check out the source tree - if (m_Makefile->IsOn("CTEST_START_WITH_EMPTY_BINARY_DIRECTORY") && - m_SourceDir == m_BinaryDir) + if (m_EmptyBinDir && m_SourceDir == m_BinaryDir) { // make sure we have the required info if (m_CVSCheckOut.empty()) @@ -521,9 +539,8 @@ int cmCTestScriptHandler::RunConfigurationDashboard() } // put the initial cache into the bin dir - if (m_Makefile->GetDefinition("CTEST_INITIAL_CACHE")) + if (!m_InitCache.empty()) { - const char *initCache = m_Makefile->GetDefinition("CTEST_INITIAL_CACHE"); std::string cacheFile = m_BinaryDir; cacheFile += "/CMakeCache.txt"; std::ofstream fout(cacheFile.c_str()); @@ -533,7 +550,7 @@ int cmCTestScriptHandler::RunConfigurationDashboard() return 9; } - fout.write(initCache, strlen(initCache)); + fout.write(m_InitCache.c_str(), m_InitCache.size()); // Make sure the operating system has finished writing the file // before closing it. This will ensure the file is finished before @@ -543,12 +560,11 @@ int cmCTestScriptHandler::RunConfigurationDashboard() } // do an initial cmake to setup the DartConfig file - const char *cmakeCmd = m_Makefile->GetDefinition("CTEST_CMAKE_COMMAND"); int cmakeFailed = 0; std::string cmakeFailedOuput; - if (cmakeCmd) + if (!m_CMakeCmd.empty()) { - command = cmakeCmd; + command = m_CMakeCmd; command += " \""; command += m_SourceDir; output = ""; @@ -562,11 +578,9 @@ int cmCTestScriptHandler::RunConfigurationDashboard() &retVal, m_BinaryDir.c_str(), m_Verbose, 0 /*m_TimeOut*/); - const char* cmakeOutputFileName = - m_Makefile->GetDefinition("CTEST_CMAKE_OUTPUT_FILE_NAME"); - if ( cmakeOutputFileName ) + if ( !m_CMOutFile.empty() ) { - std::string cmakeOutputFile = cmakeOutputFileName; + std::string cmakeOutputFile = m_CMOutFile; if ( !cmSystemTools::FileIsFullPath(cmakeOutputFile.c_str()) ) { cmakeOutputFile = m_BinaryDir + "/" + cmakeOutputFile; |