ctest: add support for additional sanitizer options

Sanitizers receive options through their environment variable; support
user-specified options here.
This commit is contained in:
Ben Boeckel 2014-10-03 13:45:07 -04:00
parent 0b9ffffcd4
commit ca9cc25ce8
6 changed files with 26 additions and 5 deletions

View File

@ -351,6 +351,7 @@ Variables for CTest
/variable/CTEST_HG_UPDATE_OPTIONS /variable/CTEST_HG_UPDATE_OPTIONS
/variable/CTEST_MEMORYCHECK_COMMAND /variable/CTEST_MEMORYCHECK_COMMAND
/variable/CTEST_MEMORYCHECK_COMMAND_OPTIONS /variable/CTEST_MEMORYCHECK_COMMAND_OPTIONS
/variable/CTEST_MEMORYCHECK_SANITIZER_OPTIONS
/variable/CTEST_MEMORYCHECK_SUPPRESSIONS_FILE /variable/CTEST_MEMORYCHECK_SUPPRESSIONS_FILE
/variable/CTEST_MEMORYCHECK_TYPE /variable/CTEST_MEMORYCHECK_TYPE
/variable/CTEST_NIGHTLY_START_TIME /variable/CTEST_NIGHTLY_START_TIME

View File

@ -830,6 +830,12 @@ Configuration settings include:
* `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_TYPE` * `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_TYPE`
* :module:`CTest` module variable: ``MEMORYCHECK_TYPE`` * :module:`CTest` module variable: ``MEMORYCHECK_TYPE``
``MemoryCheckSanitizerOptions``
Specify options to sanitizers when running with a sanitize-enabled build.
* `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_SANITIZER_OPTIONS`
* :module:`CTest` module variable: ``MEMORYCHECK_SANITIZER_OPTIONS``
``MemoryCheckSuppressionFile`` ``MemoryCheckSuppressionFile``
Specify a file containing suppression rules for the Specify a file containing suppression rules for the
``MemoryCheckCommand`` tool. It will be passed with options ``MemoryCheckCommand`` tool. It will be passed with options

View File

@ -0,0 +1,5 @@
CTEST_MEMORYCHECK_SANITIZER_OPTIONS
-----------------------------------
Specify the CTest ``MemoryCheckSanitizerOptions`` setting
in a :manual:`ctest(1)` dashboard client script.

View File

@ -75,6 +75,7 @@ PurifyCommand: @PURIFYCOMMAND@
ValgrindCommand: @VALGRIND_COMMAND@ ValgrindCommand: @VALGRIND_COMMAND@
ValgrindCommandOptions: @VALGRIND_COMMAND_OPTIONS@ ValgrindCommandOptions: @VALGRIND_COMMAND_OPTIONS@
MemoryCheckType: @MEMORYCHECK_TYPE@ MemoryCheckType: @MEMORYCHECK_TYPE@
MemoryCheckSanitizerOptions: @MEMORYCHECK_SANITIZER_OPTIONS@
MemoryCheckCommand: @MEMORYCHECK_COMMAND@ MemoryCheckCommand: @MEMORYCHECK_COMMAND@
MemoryCheckCommandOptions: @MEMORYCHECK_COMMAND_OPTIONS@ MemoryCheckCommandOptions: @MEMORYCHECK_COMMAND_OPTIONS@
MemoryCheckSuppressionFile: @MEMORYCHECK_SUPPRESSIONS_FILE@ MemoryCheckSuppressionFile: @MEMORYCHECK_SUPPRESSIONS_FILE@

View File

@ -22,6 +22,8 @@ cmCTestGenericHandler* cmCTestMemCheckCommand::InitializeActualHandler()
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"MemoryCheckType", "CTEST_MEMORYCHECK_TYPE"); "MemoryCheckType", "CTEST_MEMORYCHECK_TYPE");
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"MemoryCheckSanitizerOptions", "CTEST_MEMORYCHECK_SANITIZER_OPTIONS");
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"MemoryCheckCommand", "CTEST_MEMORYCHECK_COMMAND"); "MemoryCheckCommand", "CTEST_MEMORYCHECK_COMMAND");
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,

View File

@ -686,15 +686,21 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking()
// TSAN_OPTIONS string with the log_path in it. // TSAN_OPTIONS string with the log_path in it.
this->MemoryTesterDynamicOptions.push_back("-E"); this->MemoryTesterDynamicOptions.push_back("-E");
this->MemoryTesterDynamicOptions.push_back("env"); this->MemoryTesterDynamicOptions.push_back("env");
std::string envVar = "TSAN_OPTIONS"; std::string envVar;
std::string extraOptions; std::string extraOptions =
if(this->MemoryTesterStyle == cmCTestMemCheckHandler::ADDRESS_SANITIZER) this->CTest->GetCTestConfiguration("MemoryCheckSanitizerOptions");
if(this->MemoryTesterStyle == cmCTestMemCheckHandler::THREAD_SANITIZER)
{
envVar = "TSAN_OPTIONS";
}
else if(this->MemoryTesterStyle ==
cmCTestMemCheckHandler::ADDRESS_SANITIZER)
{ {
envVar = "ASAN_OPTIONS"; envVar = "ASAN_OPTIONS";
extraOptions = " detect_leaks=1"; extraOptions += " detect_leaks=1";
} }
std::string outputFile = envVar + "=log_path=\"" std::string outputFile = envVar + "=log_path=\""
+ this->MemoryTesterOutputFile + "\""; + this->MemoryTesterOutputFile + "\" ";
this->MemoryTesterEnvironmentVariable = outputFile + extraOptions; this->MemoryTesterEnvironmentVariable = outputFile + extraOptions;
break; break;
} }