Răsfoiți Sursa

ENH: More commands. Start working on new style ctest configuration

Andy Cedilnik 20 ani în urmă
părinte
comite
f1ebfb24c6

+ 6 - 0
CTestConfig.cmake

@@ -0,0 +1,6 @@
+SET (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
+SET (CTEST_DROP_SITE "public.kitware.com")
+SET (CTEST_DROP_LOCATION "/cgi-bin/HTTPUploadDartFile.cgi")
+SET (CTEST_TRIGGER_SITE 
+  "http://${DROP_SITE}/cgi-bin/Submit-CMake-TestingResults.cgi")
+

+ 8 - 6
Source/CMakeLists.txt

@@ -151,20 +151,22 @@ INCLUDE_DIRECTORIES(
 # Sources for CTestLib
 # Sources for CTestLib
 #
 #
 SET(CMTEST_SRCS cmCTest.cxx 
 SET(CMTEST_SRCS cmCTest.cxx 
-  CTest/cmCTestGenericHandler.cxx
+  CTest/cmCTestBuildCommand.cxx
   CTest/cmCTestBuildHandler.cxx
   CTest/cmCTestBuildHandler.cxx
+  CTest/cmCTestConfigureCommand.cxx
   CTest/cmCTestConfigureHandler.cxx
   CTest/cmCTestConfigureHandler.cxx
   CTest/cmCTestCoverageHandler.cxx
   CTest/cmCTestCoverageHandler.cxx
-  CTest/cmCTestScriptHandler.cxx
-  CTest/cmCTestTestHandler.cxx
-  CTest/cmCTestUpdateHandler.cxx
   CTest/cmCTestEmptyBinaryDirectoryCommand.cxx
   CTest/cmCTestEmptyBinaryDirectoryCommand.cxx
+  CTest/cmCTestGenericHandler.cxx
+  CTest/cmCTestMemCheckHandler.cxx
   CTest/cmCTestRunScriptCommand.cxx
   CTest/cmCTestRunScriptCommand.cxx
+  CTest/cmCTestScriptHandler.cxx
   CTest/cmCTestSleepCommand.cxx
   CTest/cmCTestSleepCommand.cxx
   CTest/cmCTestStartCommand.cxx
   CTest/cmCTestStartCommand.cxx
-  CTest/cmCTestUpdateCommand.cxx
-  CTest/cmCTestMemCheckHandler.cxx
   CTest/cmCTestSubmit.cxx
   CTest/cmCTestSubmit.cxx
+  CTest/cmCTestTestHandler.cxx
+  CTest/cmCTestUpdateCommand.cxx
+  CTest/cmCTestUpdateHandler.cxx
   )
   )
 
 
 # Build CTestLib
 # Build CTestLib

+ 48 - 0
Source/CTest/cmCTestBuildCommand.cxx

@@ -0,0 +1,48 @@
+/*=========================================================================
+
+  Program:   CMake - Cross-Platform Makefile Generator
+  Module:    $RCSfile$
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+  Copyright (c) 2002 Kitware, Inc., Insight Consortium.  All rights reserved.
+  See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
+
+     This software is distributed WITHOUT ANY WARRANTY; without even 
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+     PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#include "cmCTestBuildCommand.h"
+
+#include "cmCTest.h"
+#include "cmCTestGenericHandler.h"
+
+bool cmCTestBuildCommand::InitialPass(
+  std::vector<std::string> const& args)
+{
+  if (args.size() != 2)
+    {
+    this->SetError("called with incorrect number of arguments");
+    return false;
+    }
+
+  const char* build_dir = args[0].c_str();
+  const char* res_var = args[1].c_str();
+
+  m_CTest->SetDartConfiguration("BuildDirectory", build_dir);
+  cmCTestGenericHandler* handler = m_CTest->GetHandler("build");
+  if ( !handler )
+    {
+    this->SetError("internal CTest error. Cannot instantiate build handler");
+    return false;
+    }
+  int res = handler->ProcessHandler();
+  cmOStringStream str;
+  str << res;
+  m_Makefile->AddDefinition(res_var, str.str().c_str());
+  return true;
+}
+
+

+ 77 - 0
Source/CTest/cmCTestBuildCommand.h

@@ -0,0 +1,77 @@
+/*=========================================================================
+
+  Program:   CMake - Cross-Platform Makefile Generator
+  Module:    $RCSfile$
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+  Copyright (c) 2002 Kitware, Inc., Insight Consortium.  All rights reserved.
+  See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
+
+     This software is distributed WITHOUT ANY WARRANTY; without even 
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+     PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#ifndef cmCTestBuildCommand_h
+#define cmCTestBuildCommand_h
+
+#include "cmCTestCommand.h"
+
+/** \class cmCTestBuild
+ * \brief Run a ctest script
+ *
+ * cmCTestBuildCommand defineds the command to build the project.
+ */
+class cmCTestBuildCommand : public cmCTestCommand
+{
+public:
+
+  cmCTestBuildCommand() {}
+  
+  /**
+   * This is a virtual constructor for the command.
+   */
+  virtual cmCommand* Clone() 
+    {
+    cmCTestBuildCommand* ni = new cmCTestBuildCommand;
+    ni->m_CTest = this->m_CTest;
+    ni->m_CTestScriptHandler = this->m_CTestScriptHandler;
+    return ni;
+    }
+
+  /**
+   * This is called when the command is first encountered in
+   * the CMakeLists.txt file.
+   */
+  virtual bool InitialPass(std::vector<std::string> const& args);
+
+  /**
+   * The name of the command as specified in CMakeList.txt.
+   */
+  virtual const char* GetName() { return "CTEST_BUILD";}
+
+  /**
+   * Succinct documentation.
+   */
+  virtual const char* GetTerseDocumentation() 
+    {
+    return "Builds the repository.";
+    }
+  
+  /**
+   * More documentation.
+   */
+  virtual const char* GetFullDocumentation()
+    {
+    return
+      "  CTEST_BUILD(build_dir res)\n"
+      "Builds the given build directory and stores results in Build.xml.";
+    }
+
+  cmTypeMacro(cmCTestBuildCommand, cmCTestCommand);
+};
+
+
+#endif

+ 50 - 0
Source/CTest/cmCTestConfigureCommand.cxx

@@ -0,0 +1,50 @@
+/*=========================================================================
+
+  Program:   CMake - Cross-Platform Makefile Generator
+  Module:    $RCSfile$
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+  Copyright (c) 2002 Kitware, Inc., Insight Consortium.  All rights reserved.
+  See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
+
+     This software is distributed WITHOUT ANY WARRANTY; without even 
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+     PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#include "cmCTestConfigureCommand.h"
+
+#include "cmCTest.h"
+#include "cmCTestGenericHandler.h"
+
+bool cmCTestConfigureCommand::InitialPass(
+  std::vector<std::string> const& args)
+{
+  if (args.size() != 2)
+    {
+    this->SetError("called with incorrect number of arguments");
+    return false;
+    }
+
+  const char* build_dir = args[0].c_str();
+  const char* res_var = args[1].c_str();
+
+  m_CTest->SetDartConfigurationFromCMakeVariable(m_Makefile, "ConfigureCommand", "CTEST_CONFIGURE_COMMAND");
+  m_CTest->SetDartConfiguration("BuildDirectory", build_dir);
+
+  cmCTestGenericHandler* handler = m_CTest->GetHandler("configure");
+  if ( !handler )
+    {
+    this->SetError("internal CTest error. Cannot instantiate configure handler");
+    return false;
+    }
+  int res = handler->ProcessHandler();
+  cmOStringStream str;
+  str << res;
+  m_Makefile->AddDefinition(res_var, str.str().c_str());
+  return true;
+}
+
+

+ 79 - 0
Source/CTest/cmCTestConfigureCommand.h

@@ -0,0 +1,79 @@
+/*=========================================================================
+
+  Program:   CMake - Cross-Platform Makefile Generator
+  Module:    $RCSfile$
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+  Copyright (c) 2002 Kitware, Inc., Insight Consortium.  All rights reserved.
+  See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
+
+     This software is distributed WITHOUT ANY WARRANTY; without even 
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+     PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#ifndef cmCTestConfigureCommand_h
+#define cmCTestConfigureCommand_h
+
+#include "cmCTestCommand.h"
+
+/** \class cmCTestConfigure
+ * \brief Run a ctest script
+ *
+ * cmCTestConfigureCommand defineds the command to configures the project.
+ */
+class cmCTestConfigureCommand : public cmCTestCommand
+{
+public:
+
+  cmCTestConfigureCommand() {}
+  
+  /**
+   * This is a virtual constructor for the command.
+   */
+  virtual cmCommand* Clone() 
+    {
+    cmCTestConfigureCommand* ni = new cmCTestConfigureCommand;
+    ni->m_CTest = this->m_CTest;
+    ni->m_CTestScriptHandler = this->m_CTestScriptHandler;
+    return ni;
+    }
+
+  /**
+   * This is called when the command is first encountered in
+   * the CMakeLists.txt file.
+   */
+  virtual bool InitialPass(std::vector<std::string> const& args);
+
+  /**
+   * The name of the command as specified in CMakeList.txt.
+   */
+  virtual const char* GetName() { return "CTEST_CONFIGURE";}
+
+  /**
+   * Succinct documentation.
+   */
+  virtual const char* GetTerseDocumentation() 
+    {
+    return "Configures the repository.";
+    }
+  
+  /**
+   * More documentation.
+   */
+  virtual const char* GetFullDocumentation()
+    {
+    return
+      "  CTEST_CONFIGURE(build_dir res)\n"
+      "Configures the given build directory and stores results in Configure.xml. The "
+      "second argument is a variable that will hold return value.";
+    }
+
+  cmTypeMacro(cmCTestConfigureCommand, cmCTestCommand);
+
+};
+
+
+#endif

+ 6 - 1
Source/CTest/cmCTestScriptHandler.cxx

@@ -42,6 +42,8 @@
 # include <unistd.h>
 # include <unistd.h>
 #endif
 #endif
 
 
+#include "cmCTestBuildCommand.h"
+#include "cmCTestConfigureCommand.h"
 #include "cmCTestEmptyBinaryDirectoryCommand.h"
 #include "cmCTestEmptyBinaryDirectoryCommand.h"
 #include "cmCTestRunScriptCommand.h"
 #include "cmCTestRunScriptCommand.h"
 #include "cmCTestSleepCommand.h"
 #include "cmCTestSleepCommand.h"
@@ -220,8 +222,10 @@ int cmCTestScriptHandler::ReadInScript(const std::string& total_script_arg)
   // add any ctest specific commands, probably should have common superclass
   // add any ctest specific commands, probably should have common superclass
   // for ctest commands to clean this up. If a couple more commands are
   // for ctest commands to clean this up. If a couple more commands are
   // created with the same format lets do that - ken
   // created with the same format lets do that - ken
-  this->AddCTestCommand(new cmCTestRunScriptCommand);
+  this->AddCTestCommand(new cmCTestBuildCommand);
+  this->AddCTestCommand(new cmCTestConfigureCommand);
   this->AddCTestCommand(new cmCTestEmptyBinaryDirectoryCommand);
   this->AddCTestCommand(new cmCTestEmptyBinaryDirectoryCommand);
+  this->AddCTestCommand(new cmCTestRunScriptCommand);
   this->AddCTestCommand(new cmCTestSleepCommand);
   this->AddCTestCommand(new cmCTestSleepCommand);
   this->AddCTestCommand(new cmCTestStartCommand);
   this->AddCTestCommand(new cmCTestStartCommand);
   this->AddCTestCommand(new cmCTestUpdateCommand);
   this->AddCTestCommand(new cmCTestUpdateCommand);
@@ -372,6 +376,7 @@ int cmCTestScriptHandler::RunConfigurationScript(const std::string& total_script
   return result;
   return result;
 }
 }
 
 
+//----------------------------------------------------------------------
 int cmCTestScriptHandler::RunCurrentScript()
 int cmCTestScriptHandler::RunCurrentScript()
 {
 {
   int result;
   int result;

+ 23 - 0
Source/CTest/cmCTestStartCommand.cxx

@@ -17,6 +17,8 @@
 #include "cmCTestStartCommand.h"
 #include "cmCTestStartCommand.h"
 
 
 #include "cmCTest.h"
 #include "cmCTest.h"
+#include "cmLocalGenerator.h"
+#include "cmGlobalGenerator.h"
 
 
 bool cmCTestStartCommand::InitialPass(
 bool cmCTestStartCommand::InitialPass(
   std::vector<std::string> const& args)
   std::vector<std::string> const& args)
@@ -65,6 +67,27 @@ bool cmCTestStartCommand::InitialPass(
   std::cout << "Run dashboard with model " << smodel 
   std::cout << "Run dashboard with model " << smodel 
     << " for src dir: " << src_dir << " and binary dir: " << bld_dir << std::endl;
     << " for src dir: " << src_dir << " and binary dir: " << bld_dir << std::endl;
 
 
+  std::string fname = src_dir;
+  fname += "/CTestConfig.cmake";
+  cmSystemTools::ConvertToUnixSlashes(fname);
+  if ( cmSystemTools::FileExists(fname.c_str()) )
+    {
+    std::cout << "   Reading ctest configuration file: " << fname.c_str() << std::endl;
+    bool readit = m_Makefile->ReadListFile(m_Makefile->GetCurrentListFile(), 
+      fname.c_str() );
+    if(!readit)
+      {
+      std::string m = "Could not find include file: ";
+      m += fname;
+      this->SetError(m.c_str());
+      return false;
+      }
+    }
+
+  m_CTest->SetDartConfigurationFromCMakeVariable(m_Makefile, "NightlyStartTime", "CTEST_NIGHTLY_START_TIME");
+  m_CTest->SetDartConfiguration("SourceDirectory", src_dir);
+  m_CTest->SetDartConfiguration("BuildDirectory", bld_dir); 
+
   int model = m_CTest->GetTestModelFromString(smodel);
   int model = m_CTest->GetTestModelFromString(smodel);
   m_CTest->SetTestModel(model);
   m_CTest->SetTestModel(model);
   m_CTest->SetProduceXML(true);
   m_CTest->SetProduceXML(true);

+ 3 - 0
Source/CTest/cmCTestUpdateCommand.cxx

@@ -31,6 +31,9 @@ bool cmCTestUpdateCommand::InitialPass(
   const char* source_dir = args[0].c_str();
   const char* source_dir = args[0].c_str();
   const char* res_var = args[1].c_str();
   const char* res_var = args[1].c_str();
 
 
+  m_CTest->SetDartConfigurationFromCMakeVariable(m_Makefile, "CVSCommand", "CTEST_CVS_COMMAND");
+  m_CTest->SetDartConfigurationFromCMakeVariable(m_Makefile, "SVNCommand", "CTEST_SVN_COMMAND");
+
   cmCTestGenericHandler* handler = m_CTest->GetHandler("update");
   cmCTestGenericHandler* handler = m_CTest->GetHandler("update");
   if ( !handler )
   if ( !handler )
     {
     {

+ 51 - 12
Source/cmCTest.cxx

@@ -227,6 +227,7 @@ cmCTest::cmCTest()
   m_BuildNoClean           = false;
   m_BuildNoClean           = false;
   m_BuildTwoConfig         = false;
   m_BuildTwoConfig         = false;
   m_Verbose                = false;
   m_Verbose                = false;
+  m_ExtraVerbose           = false;
   m_ProduceXML             = false;
   m_ProduceXML             = false;
   m_ShowOnly               = false;
   m_ShowOnly               = false;
   m_RunConfigurationScript = false;
   m_RunConfigurationScript = false;
@@ -343,7 +344,7 @@ int cmCTest::Initialize(const char* binary_dir)
       if ( m_TestModel == cmCTest::NIGHTLY )
       if ( m_TestModel == cmCTest::NIGHTLY )
         {
         {
         lctime = cmCTest::GetNightlyTime(m_DartConfiguration["NightlyStartTime"],
         lctime = cmCTest::GetNightlyTime(m_DartConfiguration["NightlyStartTime"],
-          m_Verbose,
+          m_ExtraVerbose,
           m_TomorrowTag);
           m_TomorrowTag);
         }
         }
       char datestring[100];
       char datestring[100];
@@ -627,7 +628,7 @@ int cmCTest::SubmitResults()
   std::cout << "Submit files (using " << m_DartConfiguration["DropMethod"] << ")"
   std::cout << "Submit files (using " << m_DartConfiguration["DropMethod"] << ")"
     << std::endl;
     << std::endl;
   cmCTestSubmit submit;
   cmCTestSubmit submit;
-  submit.SetVerbose(m_Verbose);
+  submit.SetVerbose(m_ExtraVerbose);
   submit.SetLogFile(&ofs);
   submit.SetLogFile(&ofs);
   if ( m_DartConfiguration["DropMethod"] == "" ||
   if ( m_DartConfiguration["DropMethod"] == "" ||
     m_DartConfiguration["DropMethod"] ==  "ftp" )
     m_DartConfiguration["DropMethod"] ==  "ftp" )
@@ -1048,7 +1049,7 @@ int cmCTest::RunTest(std::vector<const char*> argv,
       }
       }
     cmSystemTools::ChangeDirectory(oldpath.c_str());
     cmSystemTools::ChangeDirectory(oldpath.c_str());
     
     
-    if(m_Verbose)
+    if(m_ExtraVerbose)
       {
       {
       std::cout << "Internal cmCTest object used to run test.\n";
       std::cout << "Internal cmCTest object used to run test.\n";
       std::cout <<  *output << "\n";
       std::cout <<  *output << "\n";
@@ -1079,7 +1080,7 @@ int cmCTest::RunTest(std::vector<const char*> argv,
       {
       {
       tempOutput.insert(tempOutput.end(), data, data+length);
       tempOutput.insert(tempOutput.end(), data, data+length);
       }
       }
-    if ( m_Verbose )
+    if ( m_ExtraVerbose )
       {
       {
       std::cout.write(data, length);
       std::cout.write(data, length);
       std::cout.flush();
       std::cout.flush();
@@ -1096,7 +1097,7 @@ int cmCTest::RunTest(std::vector<const char*> argv,
     {
     {
     output->append(&*tempOutput.begin(), tempOutput.size());
     output->append(&*tempOutput.begin(), tempOutput.size());
     }
     }
-  if ( m_Verbose )
+  if ( m_ExtraVerbose )
     {
     {
     std::cout << "-- Process completed" << std::endl;
     std::cout << "-- Process completed" << std::endl;
     }
     }
@@ -1113,7 +1114,7 @@ int cmCTest::RunTest(std::vector<const char*> argv,
     std::string outerr = "\n*** Exception executing: ";
     std::string outerr = "\n*** Exception executing: ";
     outerr += cmsysProcess_GetExceptionString(cp);
     outerr += cmsysProcess_GetExceptionString(cp);
     *output += outerr;
     *output += outerr;
-    if ( m_Verbose )
+    if ( m_ExtraVerbose )
       {
       {
       std::cout << outerr.c_str() << "\n";
       std::cout << outerr.c_str() << "\n";
       std::cout.flush();
       std::cout.flush();
@@ -1124,7 +1125,7 @@ int cmCTest::RunTest(std::vector<const char*> argv,
     std::string outerr = "\n*** ERROR executing: ";
     std::string outerr = "\n*** ERROR executing: ";
     outerr += cmsysProcess_GetErrorString(cp);
     outerr += cmsysProcess_GetErrorString(cp);
     *output += outerr;
     *output += outerr;
-    if ( m_Verbose )
+    if ( m_ExtraVerbose )
       {
       {
       std::cout << outerr.c_str() << "\n";
       std::cout << outerr.c_str() << "\n";
       std::cout.flush();
       std::cout.flush();
@@ -1246,11 +1247,11 @@ int cmCTest::Run(std::vector<std::string>const& args, std::string* output)
     if( arg.find("-V",0) == 0 || arg.find("--verbose",0) == 0 )
     if( arg.find("-V",0) == 0 || arg.find("--verbose",0) == 0 )
       {
       {
       this->m_Verbose = true;
       this->m_Verbose = true;
-      cmCTest::t_TestingHandlers::iterator it;
-      for ( it = m_TestingHandlers.begin(); it != m_TestingHandlers.end(); ++ it )
-        {
-        it->second->SetVerbose(this->m_Verbose);
-        }
+      }
+    if( arg.find("-VV",0) == 0 || arg.find("--extra-verbose",0) == 0 )
+      {
+      this->m_ExtraVerbose = true;
+      this->m_Verbose = true;
       }
       }
 
 
     if( arg.find("-N",0) == 0 || arg.find("--show-only",0) == 0 )
     if( arg.find("-N",0) == 0 || arg.find("--show-only",0) == 0 )
@@ -1670,10 +1671,22 @@ int cmCTest::Run(std::vector<std::string>const& args, std::string* output)
     // call process directory
     // call process directory
     if (this->m_RunConfigurationScript)
     if (this->m_RunConfigurationScript)
       {
       {
+      cmCTest::t_TestingHandlers::iterator it;
+      for ( it = m_TestingHandlers.begin(); it != m_TestingHandlers.end(); ++ it )
+        {
+        it->second->SetVerbose(this->m_ExtraVerbose);
+        }
+      this->GetHandler("script")->SetVerbose(m_Verbose);
       res = this->GetHandler("script")->ProcessHandler();
       res = this->GetHandler("script")->ProcessHandler();
       }
       }
     else
     else
       {
       {
+      m_Verbose = m_ExtraVerbose;
+      cmCTest::t_TestingHandlers::iterator it;
+      for ( it = m_TestingHandlers.begin(); it != m_TestingHandlers.end(); ++ it )
+        {
+        it->second->SetVerbose(this->m_Verbose);
+        }
       if ( !this->Initialize(cmSystemTools::GetCurrentWorkingDirectory().c_str()) )
       if ( !this->Initialize(cmSystemTools::GetCurrentWorkingDirectory().c_str()) )
         {
         {
         res = 12;
         res = 12;
@@ -2200,6 +2213,20 @@ std::string cmCTest::GetDartConfiguration(const char *name)
   return m_DartConfiguration[name];
   return m_DartConfiguration[name];
 }
 }
 
 
+void cmCTest::SetDartConfiguration(const char *name, const char* value)
+{
+  if ( !name )
+    {
+    return;
+    }
+  if ( !value )
+    {
+    m_DartConfiguration.erase(name);
+    return;
+    }
+  m_DartConfiguration[name] = value;
+}
+
   
   
 std::string cmCTest::GetCurrentTag()
 std::string cmCTest::GetCurrentTag()
 {
 {
@@ -2230,3 +2257,15 @@ bool cmCTest::GetProduceXML()
 {
 {
   return m_ProduceXML;
   return m_ProduceXML;
 }
 }
+
+bool cmCTest::SetDartConfigurationFromCMakeVariable(cmMakefile* mf, const char* dconfig, const char* cmake_var)
+{
+  const char* ctvar;
+  ctvar = mf->GetDefinition(cmake_var);
+  if ( !ctvar )
+    {
+    return false;
+    }
+  this->SetDartConfiguration(dconfig, ctvar);
+  return true;
+}

+ 7 - 0
Source/cmCTest.h

@@ -101,6 +101,7 @@ public:
   static int GetTestModelFromString(const char* str);
   static int GetTestModelFromString(const char* str);
   static std::string CleanString(const std::string& str);
   static std::string CleanString(const std::string& str);
   std::string GetDartConfiguration(const char *name);
   std::string GetDartConfiguration(const char *name);
+  void SetDartConfiguration(const char *name, const char* value);
   
   
   /**
   /**
    * constructor and destructor
    * constructor and destructor
@@ -192,9 +193,15 @@ public:
    */
    */
   cmCTestGenericHandler* GetHandler(const char* handler);
   cmCTestGenericHandler* GetHandler(const char* handler);
 
 
+  /*
+   * Set the CTest variable from CMake variable
+   */
+  bool SetDartConfigurationFromCMakeVariable(cmMakefile* mf, const char* dconfig, const char* cmake_var);
+
 private:
 private:
   std::string m_ConfigType;
   std::string m_ConfigType;
   bool m_Verbose;
   bool m_Verbose;
+  bool m_ExtraVerbose;
   bool m_ProduceXML;
   bool m_ProduceXML;
 
 
   bool m_ForceNewCTestProcess;
   bool m_ForceNewCTestProcess;