From 68489471a620948d627b33fd1f837650b6d8c5c8 Mon Sep 17 00:00:00 2001 From: Zack Galbreath Date: Wed, 13 May 2026 14:17:23 -0400 Subject: [PATCH] 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. --- Source/cmCTest.cxx | 149 ++++++++++++++++++++++++--------------------- 1 file changed, 78 insertions(+), 71 deletions(-) diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx index 1f75c207c9..dd3db32c69 100644 --- a/Source/cmCTest.cxx +++ b/Source/cmCTest.cxx @@ -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 const& args,