summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2011-06-14 17:23:20 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2011-06-14 17:23:20 (GMT)
commitf616f263cd016a978dd04ce7b62d8dcabd0f4e2e (patch)
tree7821ed6c31f018537a8873fd5414758a4eb2c409 /Source
parentcf1c3c102f76d9dd5a7c62995987fc05c12edc8a (diff)
parenta4ec24269b32a28104e1d5681e718024b28bb4e7 (diff)
downloadCMake-f616f263cd016a978dd04ce7b62d8dcabd0f4e2e.zip
CMake-f616f263cd016a978dd04ce7b62d8dcabd0f4e2e.tar.gz
CMake-f616f263cd016a978dd04ce7b62d8dcabd0f4e2e.tar.bz2
Merge topic 'ctest-no-config-report-notrun'
a4ec242 CTest: Report tests not run due to unknown configuration 77ddb6a Use cascading-if for per-config test and install code
Diffstat (limited to 'Source')
-rw-r--r--Source/CTest/cmCTestRunTest.cxx24
-rw-r--r--Source/CTest/cmCTestTestHandler.cxx4
-rw-r--r--Source/cmScriptGenerator.cxx14
-rw-r--r--Source/cmScriptGenerator.h2
-rw-r--r--Source/cmTestGenerator.cxx16
-rw-r--r--Source/cmTestGenerator.h2
6 files changed, 60 insertions, 2 deletions
diff --git a/Source/CTest/cmCTestRunTest.cxx b/Source/CTest/cmCTestRunTest.cxx
index b5b46f6..60695da 100644
--- a/Source/CTest/cmCTestRunTest.cxx
+++ b/Source/CTest/cmCTestRunTest.cxx
@@ -412,6 +412,30 @@ bool cmCTestRunTest::StartTest(size_t total)
this->TestResult.TestCount = this->TestProperties->Index;
this->TestResult.Name = this->TestProperties->Name;
this->TestResult.Path = this->TestProperties->Directory.c_str();
+
+ if(args.size() >= 2 && args[1] == "NOT_AVAILABLE")
+ {
+ this->TestProcess = new cmProcess;
+ std::string msg;
+ if(this->CTest->GetConfigType().empty())
+ {
+ msg = "Test not available without configuration.";
+ msg += " (Missing \"-C <config>\"?)";
+ }
+ else
+ {
+ msg = "Test not available in configuration \"";
+ msg += this->CTest->GetConfigType();
+ msg += "\".";
+ }
+ *this->TestHandler->LogFile << msg << std::endl;
+ cmCTestLog(this->CTest, ERROR_MESSAGE, msg << std::endl);
+ this->TestResult.Output = msg;
+ this->TestResult.FullCommandLine = "";
+ this->TestResult.CompletionStatus = "Not Run";
+ this->TestResult.Status = cmCTestTestHandler::NOT_RUN;
+ return false;
+ }
// Check if all required files exist
for(std::vector<std::string>::iterator i =
diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx
index 56f6630..e3b81df 100644
--- a/Source/CTest/cmCTestTestHandler.cxx
+++ b/Source/CTest/cmCTestTestHandler.cxx
@@ -1320,6 +1320,10 @@ std::string cmCTestTestHandler::FindTheExecutable(const char *exe)
std::string resConfig;
std::vector<std::string> extraPaths;
std::vector<std::string> failedPaths;
+ if(strcmp(exe, "NOT_AVAILABLE") == 0)
+ {
+ return exe;
+ }
return cmCTestTestHandler::FindExecutable(this->CTest,
exe, resConfig,
extraPaths,
diff --git a/Source/cmScriptGenerator.cxx b/Source/cmScriptGenerator.cxx
index 86ecebe..cabe98a 100644
--- a/Source/cmScriptGenerator.cxx
+++ b/Source/cmScriptGenerator.cxx
@@ -209,6 +209,7 @@ void cmScriptGenerator::GenerateScriptActionsPerConfig(std::ostream& os,
// In a multi-configuration generator we produce a separate rule
// in a block for each configuration that is built. We restrict
// the list of configurations to those to which this rule applies.
+ bool first = true;
for(std::vector<std::string>::const_iterator i =
this->ConfigurationTypes->begin();
i != this->ConfigurationTypes->end(); ++i)
@@ -218,10 +219,19 @@ void cmScriptGenerator::GenerateScriptActionsPerConfig(std::ostream& os,
{
// Generate a per-configuration block.
std::string config_test = this->CreateConfigTest(config);
- os << indent << "IF(" << config_test << ")\n";
+ os << indent << (first? "IF(" : "ELSEIF(") << config_test << ")\n";
this->GenerateScriptForConfig(os, config, indent.Next());
- os << indent << "ENDIF(" << config_test << ")\n";
+ first = false;
}
}
+ if(!first)
+ {
+ if(this->NeedsScriptNoConfig())
+ {
+ os << indent << "ELSE()\n";
+ this->GenerateScriptNoConfig(os, indent.Next());
+ }
+ os << indent << "ENDIF()\n";
+ }
}
}
diff --git a/Source/cmScriptGenerator.h b/Source/cmScriptGenerator.h
index e2a0da5..8b2ca33 100644
--- a/Source/cmScriptGenerator.h
+++ b/Source/cmScriptGenerator.h
@@ -65,6 +65,8 @@ protected:
virtual void GenerateScriptForConfig(std::ostream& os,
const char* config,
Indent const& indent);
+ virtual void GenerateScriptNoConfig(std::ostream&, Indent const&) {}
+ virtual bool NeedsScriptNoConfig() const { return false; }
// Test if this generator does something for a given configuration.
bool GeneratesForConfig(const char*);
diff --git a/Source/cmTestGenerator.cxx b/Source/cmTestGenerator.cxx
index 39f8638..e0892b2 100644
--- a/Source/cmTestGenerator.cxx
+++ b/Source/cmTestGenerator.cxx
@@ -130,6 +130,22 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os,
}
//----------------------------------------------------------------------------
+void cmTestGenerator::GenerateScriptNoConfig(std::ostream& os,
+ Indent const& indent)
+{
+ os << indent << "ADD_TEST(" << this->Test->GetName() << " NOT_AVAILABLE)\n";
+}
+
+//----------------------------------------------------------------------------
+bool cmTestGenerator::NeedsScriptNoConfig() const
+{
+ return (this->TestGenerated && // test generated for at least one config
+ this->ActionsPerConfig && // test is config-aware
+ this->Configurations.empty() && // test runs in all configs
+ !this->ConfigurationTypes->empty()); // config-dependent command
+}
+
+//----------------------------------------------------------------------------
void cmTestGenerator::GenerateOldStyle(std::ostream& fout,
Indent const& indent)
{
diff --git a/Source/cmTestGenerator.h b/Source/cmTestGenerator.h
index 85d9091..2c69fc3 100644
--- a/Source/cmTestGenerator.h
+++ b/Source/cmTestGenerator.h
@@ -34,6 +34,8 @@ protected:
virtual void GenerateScriptForConfig(std::ostream& os,
const char* config,
Indent const& indent);
+ virtual void GenerateScriptNoConfig(std::ostream& os, Indent const& indent);
+ virtual bool NeedsScriptNoConfig() const;
void GenerateOldStyle(std::ostream& os, Indent const& indent);
cmTest* Test;