浏览代码

ENH: Add CTEST_EXECUTABLE_NAME to CTest scripting. This way you do not have to specify ctest executable in CTEST_COMMAND, but just a variable

Andy Cedilnik 21 年之前
父节点
当前提交
6e9ec4598d
共有 4 个文件被更改,包括 16 次插入9 次删除
  1. 7 5
      Source/CTest/cmCTestScriptHandler.cxx
  2. 4 3
      Source/CTest/cmCTestScriptHandler.h
  3. 1 1
      Source/cmCTest.cxx
  4. 4 0
      Source/cmCTest.h

+ 7 - 5
Source/CTest/cmCTestScriptHandler.cxx

@@ -95,7 +95,7 @@ void cmCTestScriptHandler::AddConfigurationScript(const char *script)
 //----------------------------------------------------------------------
 // the generic entry point for handling scripts, this routine will run all
 // the scripts provides a -S arguments
-int cmCTestScriptHandler::RunConfigurationScript()
+int cmCTestScriptHandler::RunConfigurationScript(cmCTest* ctest)
 {
   int res = 0;
   std::vector<cmStdString>::iterator it;
@@ -104,7 +104,7 @@ int cmCTestScriptHandler::RunConfigurationScript()
         it ++ )
     {
     // for each script run it
-    res += this->RunConfigurationScript(
+    res += this->RunConfigurationScript(ctest,
       cmSystemTools::CollapseFullPath(it->c_str()));
     }
   return res;
@@ -114,7 +114,7 @@ int cmCTestScriptHandler::RunConfigurationScript()
 //----------------------------------------------------------------------
 // this sets up some variables for thew script to use, creates the required
 // cmake instance and generators, and then reads in the script
-int cmCTestScriptHandler::ReadInScript(const std::string& total_script_arg)
+int cmCTestScriptHandler::ReadInScript(cmCTest* ctest, const std::string& total_script_arg)
 {
   // if the argument has a , in it then it needs to be broken into the fist
   // argument (which is the script) and the second argument which will be
@@ -156,6 +156,8 @@ int cmCTestScriptHandler::ReadInScript(const std::string& total_script_arg)
   m_LocalGenerator->GetMakefile()->AddDefinition("CTEST_SCRIPT_NAME",
                                    cmSystemTools::GetFilenameName(
                                      script).c_str());
+  m_LocalGenerator->GetMakefile()->AddDefinition("CTEST_EXECUTABLE_NAME",
+                                   ctest->GetCTestExecutable());
   // add the script arg if defined
   if (script_arg.size())
     {
@@ -277,13 +279,13 @@ void cmCTestScriptHandler::LocalSleep(unsigned int secondsToWait)
 
 //----------------------------------------------------------------------
 // run a specific script
-int cmCTestScriptHandler::RunConfigurationScript(
+int cmCTestScriptHandler::RunConfigurationScript(cmCTest* ctest,
   const std::string& total_script_arg)
 {
   int result;
   
   // read in the script
-  result = this->ReadInScript(total_script_arg);
+  result = this->ReadInScript(ctest, total_script_arg);
   if (result)
     {
     return result;

+ 4 - 3
Source/CTest/cmCTestScriptHandler.h

@@ -26,6 +26,7 @@ class cmMakefile;
 class cmLocalGenerator;
 class cmGlobalGenerator;
 class cmake;
+class cmCTest;
 
 /** \class cmCTestScriptHandler
  * \brief A class that handles ctest -S invocations
@@ -74,7 +75,7 @@ public:
   /**
    * Run a dashboard using a specified confiuration script
    */
-  int RunConfigurationScript();
+  int RunConfigurationScript(cmCTest* ctest);
 
   /*
    * If verbose then more informaiton is printed out
@@ -86,7 +87,7 @@ public:
   
 private:
   // reads in a script
-  int ReadInScript(const std::string& total_script_arg);
+  int ReadInScript(cmCTest* ctest, const std::string& total_script_arg);
 
   // extract vars from the script to set ivars
   int ExtractVariables();
@@ -103,7 +104,7 @@ private:
   int BackupDirectories();
   void RestoreBackupDirectories();
 
-  int RunConfigurationScript(const std::string& script);
+  int RunConfigurationScript(cmCTest* ctest, const std::string& script);
   int RunConfigurationDashboard();
 
   std::vector<cmStdString> m_ConfigurationScripts;

+ 1 - 1
Source/cmCTest.cxx

@@ -1575,7 +1575,7 @@ int cmCTest::Run(std::vector<std::string>const& args, std::string* output)
     // call process directory
     if (this->m_RunConfigurationScript)
       {
-      res = this->ScriptHandler->RunConfigurationScript();
+      res = this->ScriptHandler->RunConfigurationScript(this);
       }
     else
       {

+ 4 - 0
Source/cmCTest.h

@@ -179,6 +179,10 @@ public:
   int RunTest(std::vector<const char*> args, std::string* output, int *retVal, 
     std::ostream* logfile);
 
+  //! Get the path to CTest
+  const char* GetCTestExecutable() { return m_CTestSelf.c_str(); }
+
+
 private:
   // these are helper classes
   cmCTestBuildHandler     *BuildHandler;