Browse Source

ENH: Add OPTIONS argument to the ctest_configure command so that you can pass -D arguments to the cmake configure step from a ctest -S script. Also clarify/correct some not so helpful error messages.

David Cole 17 years ago
parent
commit
9457ca3cf5

+ 33 - 4
Source/CTest/cmCTestConfigureCommand.cxx

@@ -19,8 +19,22 @@
 #include "cmCTest.h"
 #include "cmCTestGenericHandler.h"
 
+cmCTestConfigureCommand::cmCTestConfigureCommand()
+{
+  this->Arguments[ctc_OPTIONS] = "OPTIONS";
+  this->Arguments[ctc_LAST] = 0;
+  this->Last = ctc_LAST;
+}
+
 cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
 {
+  std::vector<std::string> options;
+
+  if (this->Values[ctc_OPTIONS])
+    {
+    cmSystemTools::ExpandListArgument(this->Values[ctc_OPTIONS], options);
+    }
+
   if ( this->Values[ct_BUILD] )
     {
     this->CTest->SetCTestConfiguration("BuildDirectory",
@@ -33,6 +47,7 @@ cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
       cmSystemTools::CollapseFullPath(
        this->Makefile->GetDefinition("CTEST_BINARY_DIRECTORY")).c_str());
     }
+
   if ( this->Values[ct_SOURCE] )
     {
     this->CTest->SetCTestConfiguration("SourceDirectory",
@@ -45,6 +60,7 @@ cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
       cmSystemTools::CollapseFullPath(
         this->Makefile->GetDefinition("CTEST_SOURCE_DIRECTORY")).c_str());
     }
+
   if ( this->CTest->GetCTestConfiguration("BuildDirectory").empty() )
     {
     this->SetError("Build directory not specified. Either use BUILD "
@@ -77,11 +93,26 @@ cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
         }
       std::string cmakeConfigureCommand = "\"";
       cmakeConfigureCommand += this->CTest->GetCMakeExecutable();
-      cmakeConfigureCommand += "\" \"-G";
+      cmakeConfigureCommand += "\"";
+
+      std::vector<std::string>::const_iterator it;
+      std::string option;
+      for (it= options.begin(); it!=options.end(); ++it)
+        {
+        option = *it;
+        cmakeConfigureCommand += " \"";
+        cmakeConfigureCommand += option;
+        cmakeConfigureCommand += "\"";
+        }
+
+      cmakeConfigureCommand += " \"-G";
       cmakeConfigureCommand += cmakeGeneratorName;
-      cmakeConfigureCommand += "\" \"";
+      cmakeConfigureCommand += "\"";
+
+      cmakeConfigureCommand += " \"";
       cmakeConfigureCommand += source_dir;
       cmakeConfigureCommand += "\"";
+
       this->CTest->SetCTestConfiguration("ConfigureCommand",
         cmakeConfigureCommand.c_str());
       }
@@ -104,5 +135,3 @@ cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
     }
   return handler;
 }
-
-

+ 11 - 5
Source/CTest/cmCTestConfigureCommand.h

@@ -27,8 +27,7 @@
 class cmCTestConfigureCommand : public cmCTestHandlerCommand
 {
 public:
-
-  cmCTestConfigureCommand() {}
+  cmCTestConfigureCommand();
 
   /**
    * This is a virtual constructor for the command.
@@ -60,10 +59,12 @@ public:
   virtual const char* GetFullDocumentation()
     {
     return
-      "  ctest_configure(BUILD build_dir RETURN_VALUE res)\n"
+      "  ctest_configure(BUILD build_dir OPTIONS options RETURN_VALUE res)\n"
       "Configures the given build directory and stores results in "
-      "Configure.xml. The second argument is a variable that will hold "
-      "return value.";
+      "Configure.xml. The OPTIONS arguments are passed as command line "
+      "arguments to the configure command. "
+      "The RETURN_VALUE argument is a variable that will hold "
+      "the return value.";
     }
 
   cmTypeMacro(cmCTestConfigureCommand, cmCTestHandlerCommand);
@@ -71,6 +72,11 @@ public:
 protected:
   cmCTestGenericHandler* InitializeHandler();
 
+  enum {
+    ctc_FIRST = ct_LAST,
+    ctc_OPTIONS,
+    ctc_LAST
+  };
 };
 
 

+ 2 - 2
Source/CTest/cmCTestConfigureHandler.cxx

@@ -98,7 +98,7 @@ int cmCTestConfigureHandler::ProcessHandler()
          << std::endl
          << "\t<StartConfigureTime>" << start_time_time
          << "</StartConfigureTime>\n";
-           
+
       if ( res == cmsysProcess_State_Exited && retVal )
         {
         os << retVal;
@@ -129,7 +129,7 @@ int cmCTestConfigureHandler::ProcessHandler()
   if (! res || retVal )
     {
     cmCTestLog(this->CTest, ERROR_MESSAGE,
-      "Error(s) when updating the project" << std::endl);
+      "Error(s) when configuring the project" << std::endl);
     return -1;
     }
   return 0;

+ 4 - 3
Source/CTest/cmCTestGenericHandler.cxx

@@ -123,8 +123,10 @@ bool cmCTestGenericHandler::StartResultingXML(const char* name,
   if(this->CTest->GetCurrentTag().empty())
     {
     cmCTestLog(this->CTest, ERROR_MESSAGE,
-               "Current Tag empty, this may mean"
-               " NightlyStartTime was not set correctly." << std::endl);
+               "Current Tag empty, this may mean NightlyStartTime / "
+               "CTEST_NIGHTLY_START_TIME was not set correctly. Or "
+               "maybe you forgot to call ctest_start() before calling "
+               "ctest_configure()." << std::endl);
     cmSystemTools::SetFatalErrorOccured();
     return false;
     }
@@ -175,4 +177,3 @@ bool cmCTestGenericHandler::StartLogFile(const char* name,
     }
   return true;
 }
-