diff options
author | Ben Boeckel <ben.boeckel@kitware.com> | 2022-05-24 21:19:59 (GMT) |
---|---|---|
committer | Ben Boeckel <ben.boeckel@kitware.com> | 2022-06-14 23:27:30 (GMT) |
commit | fb289dfcd9be3ceb9dcca20b3f51b779d77e01ee (patch) | |
tree | 0b0ed52ebbc25b4e19b8b3717c2b7e71416553b7 /Source | |
parent | fffc7813a42b9a2256981b575ef7e1a9799d1adf (diff) | |
download | CMake-fb289dfcd9be3ceb9dcca20b3f51b779d77e01ee.zip CMake-fb289dfcd9be3ceb9dcca20b3f51b779d77e01ee.tar.gz CMake-fb289dfcd9be3ceb9dcca20b3f51b779d77e01ee.tar.bz2 |
cmExperimental: add a mechanism for experimental CMake features
Diffstat (limited to 'Source')
-rw-r--r-- | Source/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Source/cmExperimental.cxx | 56 | ||||
-rw-r--r-- | Source/cmExperimental.h | 19 |
3 files changed, 77 insertions, 0 deletions
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 95b07cb..e6f7d69 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -543,6 +543,8 @@ set(SRCS cmExecuteProcessCommand.h cmExpandedCommandArgument.cxx cmExpandedCommandArgument.h + cmExperimental.cxx + cmExperimental.h cmExportCommand.cxx cmExportCommand.h cmExportLibraryDependenciesCommand.cxx diff --git a/Source/cmExperimental.cxx b/Source/cmExperimental.cxx new file mode 100644 index 0000000..5689714 --- /dev/null +++ b/Source/cmExperimental.cxx @@ -0,0 +1,56 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ + +#include "cmExperimental.h" + +#include <cassert> +#include <cstddef> +#include <string> + +#include "cmMakefile.h" +#include "cmMessageType.h" +#include "cmValue.h" + +namespace { + +/* + * The `Uuid` fields of these objects should change periodically. + * Search for other instances to keep the documentation and test suite + * up-to-date. + */ + +struct FeatureData +{ + std::string const Uuid; + std::string const Variable; + std::string const Description; + bool Warned; +} LookupTable[] = {}; +static_assert(sizeof(LookupTable) / sizeof(LookupTable[0]) == + static_cast<size_t>(cmExperimental::Feature::Sentinel), + "Experimental feature lookup table mismatch"); + +FeatureData& DataForFeature(cmExperimental::Feature f) +{ + assert(f != cmExperimental::Feature::Sentinel); + return LookupTable[static_cast<size_t>(f)]; +} +} + +bool cmExperimental::HasSupportEnabled(cmMakefile const& mf, Feature f) +{ + bool enabled = false; + auto& data = DataForFeature(f); + + auto value = mf.GetDefinition(data.Variable); + if (value == data.Uuid) { + enabled = true; + } + + if (enabled && !data.Warned) { + mf.IssueMessage(MessageType::AUTHOR_WARNING, data.Description); + data.Warned = true; + } + + return enabled; +} diff --git a/Source/cmExperimental.h b/Source/cmExperimental.h new file mode 100644 index 0000000..c2df019 --- /dev/null +++ b/Source/cmExperimental.h @@ -0,0 +1,19 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ + +#pragma once + +#include "cmConfigure.h" // IWYU pragma: keep + +class cmMakefile; + +class cmExperimental +{ +public: + enum class Feature + { + Sentinel, + }; + + static bool HasSupportEnabled(cmMakefile const& mf, Feature f); +}; |