ctest: refactor SetCMakeVariables to use a mapping table

Encapsulate the association between CTEST_* variables and CTest configuration
keys into a reusable table.

This table will serve as the single source of truth for subsequent commits that
extend the mapping and add reverse-lookup support.
This commit is contained in:
Zack Galbreath
2026-05-13 14:17:23 -04:00
parent cdacf44fe8
commit 68489471a6

View File

@@ -3146,83 +3146,90 @@ bool cmCTest::SetCTestConfigurationFromCMakeVariable(
return true;
}
namespace {
// Mapping of CTEST_* variable names to CTest configuration keys.
struct CTestVarConfigEntry
{
char const* Var; // CTEST_* variable name
char const* Config; // CTest configuration key
};
// clang-format off
CTestVarConfigEntry const kCTestVarConfigMap[] = {
// General
{ "CTEST_SITE", "Site" },
{ "CTEST_BUILD_NAME", "BuildName" },
{ "CTEST_NIGHTLY_START_TIME", "NightlyStartTime" },
{ "CTEST_SOURCE_DIRECTORY", "SourceDirectory" },
{ "CTEST_BINARY_DIRECTORY", "BuildDirectory" },
// Update step
{ "CTEST_UPDATE_COMMAND", "UpdateCommand" },
{ "CTEST_UPDATE_OPTIONS", "UpdateOptions" },
{ "CTEST_UPDATE_TYPE", "UpdateType" },
{ "CTEST_CVS_COMMAND", "CVSCommand" },
{ "CTEST_CVS_UPDATE_OPTIONS", "CVSUpdateOptions" },
{ "CTEST_SVN_COMMAND", "SVNCommand" },
{ "CTEST_SVN_UPDATE_OPTIONS", "SVNUpdateOptions" },
{ "CTEST_SVN_OPTIONS", "SVNOptions" },
{ "CTEST_BZR_COMMAND", "BZRCommand" },
{ "CTEST_BZR_UPDATE_OPTIONS", "BZRUpdateOptions" },
{ "CTEST_GIT_COMMAND", "GITCommand" },
{ "CTEST_GIT_UPDATE_OPTIONS", "GITUpdateOptions" },
{ "CTEST_GIT_INIT_SUBMODULES", "GITInitSubmodules" },
{ "CTEST_GIT_UPDATE_CUSTOM", "GITUpdateCustom" },
{ "CTEST_UPDATE_VERSION_ONLY", "UpdateVersionOnly" },
{ "CTEST_UPDATE_VERSION_OVERRIDE", "UpdateVersionOverride" },
{ "CTEST_HG_COMMAND", "HGCommand" },
{ "CTEST_HG_UPDATE_OPTIONS", "HGUpdateOptions" },
{ "CTEST_P4_COMMAND", "P4Command" },
{ "CTEST_P4_UPDATE_CUSTOM", "P4UpdateCustom" },
{ "CTEST_P4_UPDATE_OPTIONS", "P4UpdateOptions" },
{ "CTEST_P4_CLIENT", "P4Client" },
{ "CTEST_P4_OPTIONS", "P4Options" },
// Configure step
{ "CTEST_CONFIGURE_COMMAND", "ConfigureCommand" },
{ "CTEST_LABELS_FOR_SUBPROJECTS", "LabelsForSubprojects" },
// Build step
{ "CTEST_BUILD_COMMAND", "MakeCommand" },
{ "CTEST_USE_LAUNCHERS", "UseLaunchers" },
// Test step
{ "CTEST_TEST_TIMEOUT", "TimeOut" },
{ "CTEST_TEST_COVERAGE_TOOL", "CTestTestCoverageTool" },
// Coverage step
{ "CTEST_COVERAGE_COMMAND", "CoverageCommand" },
{ "CTEST_COVERAGE_EXTRA_FLAGS", "CoverageExtraFlags" },
// MemCheck step
{ "CTEST_MEMORYCHECK_TYPE", "MemoryCheckType" },
{ "CTEST_MEMORYCHECK_SANITIZER_OPTIONS", "MemoryCheckSanitizerOptions" },
{ "CTEST_MEMORYCHECK_COMMAND", "MemoryCheckCommand" },
{ "CTEST_MEMORYCHECK_COMMAND_OPTIONS", "MemoryCheckCommandOptions" },
{ "CTEST_MEMORYCHECK_SUPPRESSIONS_FILE", "MemoryCheckSuppressionFile" },
// Submit step
{ "CTEST_SUBMIT_URL", "SubmitURL" },
{ "CTEST_DROP_METHOD", "DropMethod" },
{ "CTEST_DROP_SITE_USER", "DropSiteUser" },
{ "CTEST_DROP_SITE_PASSWORD", "DropSitePassword" },
{ "CTEST_DROP_SITE", "DropSite" },
{ "CTEST_DROP_LOCATION", "DropLocation" },
{ "CTEST_TLS_VERIFY", "TLSVerify" },
{ "CTEST_TLS_VERSION", "TLSVersion" },
{ "CTEST_CURL_OPTIONS", "CurlOptions" },
{ "CTEST_SUBMIT_INACTIVITY_TIMEOUT", "SubmitInactivityTimeout" },
};
// clang-format on
} // namespace
void cmCTest::SetCMakeVariables(cmMakefile& mf)
{
auto set = [&](char const* cmake_var, char const* ctest_opt) {
std::string val = this->GetCTestConfiguration(ctest_opt);
for (auto const& entry : kCTestVarConfigMap) {
std::string val = this->GetCTestConfiguration(entry.Config);
if (!val.empty()) {
cmCTestOptionalLog(
this, HANDLER_VERBOSE_OUTPUT,
"SetCMakeVariable:" << cmake_var << ":" << val << std::endl, false);
mf.AddDefinition(cmake_var, val);
"SetCMakeVariable:" << entry.Var << ":" << val << std::endl, false);
mf.AddDefinition(entry.Var, val);
}
};
set("CTEST_SITE", "Site");
set("CTEST_BUILD_NAME", "BuildName");
set("CTEST_NIGHTLY_START_TIME", "NightlyStartTime");
set("CTEST_SOURCE_DIRECTORY", "SourceDirectory");
set("CTEST_BINARY_DIRECTORY", "BuildDirectory");
// CTest Update Step
set("CTEST_UPDATE_COMMAND", "UpdateCommand");
set("CTEST_UPDATE_OPTIONS", "UpdateOptions");
set("CTEST_UPDATE_TYPE", "UpdateType");
set("CTEST_CVS_COMMAND", "CVSCommand");
set("CTEST_CVS_UPDATE_OPTIONS", "CVSUpdateOptions");
set("CTEST_SVN_COMMAND", "SVNCommand");
set("CTEST_SVN_UPDATE_OPTIONS", "SVNUpdateOptions");
set("CTEST_SVN_OPTIONS", "SVNOptions");
set("CTEST_BZR_COMMAND", "BZRCommand");
set("CTEST_BZR_UPDATE_OPTIONS", "BZRUpdateOptions");
set("CTEST_GIT_COMMAND", "GITCommand");
set("CTEST_GIT_UPDATE_OPTIONS", "GITUpdateOptions");
set("CTEST_GIT_INIT_SUBMODULES", "GITInitSubmodules");
set("CTEST_GIT_UPDATE_CUSTOM", "GITUpdateCustom");
set("CTEST_UPDATE_VERSION_ONLY", "UpdateVersionOnly");
set("CTEST_UPDATE_VERSION_OVERRIDE", "UpdateVersionOverride");
set("CTEST_HG_COMMAND", "HGCommand");
set("CTEST_HG_UPDATE_OPTIONS", "HGUpdateOptions");
set("CTEST_P4_COMMAND", "P4Command");
set("CTEST_P4_UPDATE_CUSTOM", "P4UpdateCustom");
set("CTEST_P4_UPDATE_OPTIONS", "P4UpdateOptions");
set("CTEST_P4_CLIENT", "P4Client");
set("CTEST_P4_OPTIONS", "P4Options");
// CTest Configure Step
set("CTEST_CONFIGURE_COMMAND", "ConfigureCommand");
set("CTEST_LABELS_FOR_SUBPROJECTS", "LabelsForSubprojects");
// CTest Build Step
set("CTEST_BUILD_COMMAND", "MakeCommand");
set("CTEST_USE_LAUNCHERS", "UseLaunchers");
// CTest Test Step
set("CTEST_TEST_TIMEOUT", "TimeOut");
set("CTEST_TEST_COVERAGE_TOOL", "CTestTestCoverageTool");
// CTest Coverage Step
set("CTEST_COVERAGE_COMMAND", "CoverageCommand");
set("CTEST_COVERAGE_EXTRA_FLAGS", "CoverageExtraFlags");
// CTest MemCheck Step
set("CTEST_MEMORYCHECK_TYPE", "MemoryCheckType");
set("CTEST_MEMORYCHECK_SANITIZER_OPTIONS", "MemoryCheckSanitizerOptions");
set("CTEST_MEMORYCHECK_COMMAND", "MemoryCheckCommand");
set("CTEST_MEMORYCHECK_COMMAND_OPTIONS", "MemoryCheckCommandOptions");
set("CTEST_MEMORYCHECK_SUPPRESSIONS_FILE", "MemoryCheckSuppressionFile");
// CTest Submit Step
set("CTEST_SUBMIT_URL", "SubmitURL");
set("CTEST_DROP_METHOD", "DropMethod");
set("CTEST_DROP_SITE_USER", "DropSiteUser");
set("CTEST_DROP_SITE_PASSWORD", "DropSitePassword");
set("CTEST_DROP_SITE", "DropSite");
set("CTEST_DROP_LOCATION", "DropLocation");
set("CTEST_TLS_VERIFY", "TLSVerify");
set("CTEST_TLS_VERSION", "TLSVersion");
set("CTEST_CURL_OPTIONS", "CurlOptions");
set("CTEST_SUBMIT_INACTIVITY_TIMEOUT", "SubmitInactivityTimeout");
}
}
bool cmCTest::RunCommand(std::vector<std::string> const& args,