mirror of
https://github.com/Kitware/CMake.git
synced 2025-06-12 08:42:47 +08:00

This option has been broken since commit b9f9915516 (cmMakefile: Remove VarUsageStack., 2015-05-17, v3.3.0-rc1~52^2). That commit removed the check that an initialized variable has actually been used and caused the option to warn on every variable ever set. This was not caught by the test suite because the test for the feature only checked that warnings appear when needed and not that they do not appear when not needed. The option was never very practical to use. Remove it to avoid the runtime cost of usage tracking and checks for every variable (which we were doing even when the option was not used).
72 lines
1.8 KiB
C++
72 lines
1.8 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
|
#ifndef cmDefinitions_h
|
|
#define cmDefinitions_h
|
|
|
|
#include "cmConfigure.h" // IWYU pragma: keep
|
|
|
|
#include <functional>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
#include <cm/string_view>
|
|
|
|
#include "cmLinkedTree.h"
|
|
#include "cmString.hxx"
|
|
|
|
/** \class cmDefinitions
|
|
* \brief Store a scope of variable definitions for CMake language.
|
|
*
|
|
* This stores the state of variable definitions (set or unset) for
|
|
* one scope. Sets are always local. Gets search parent scopes
|
|
* transitively and save results locally.
|
|
*/
|
|
class cmDefinitions
|
|
{
|
|
using StackIter = cmLinkedTree<cmDefinitions>::iterator;
|
|
|
|
public:
|
|
// -- Static member functions
|
|
|
|
static const std::string* Get(const std::string& key, StackIter begin,
|
|
StackIter end);
|
|
|
|
static void Raise(const std::string& key, StackIter begin, StackIter end);
|
|
|
|
static bool HasKey(const std::string& key, StackIter begin, StackIter end);
|
|
|
|
static std::vector<std::string> ClosureKeys(StackIter begin, StackIter end);
|
|
|
|
static cmDefinitions MakeClosure(StackIter begin, StackIter end);
|
|
|
|
// -- Member functions
|
|
|
|
/** Set a value associated with a key. */
|
|
void Set(const std::string& key, cm::string_view value);
|
|
|
|
/** Unset a definition. */
|
|
void Unset(const std::string& key);
|
|
|
|
private:
|
|
/** String with existence boolean. */
|
|
struct Def
|
|
{
|
|
public:
|
|
Def() = default;
|
|
Def(cm::string_view value)
|
|
: Value(value)
|
|
{
|
|
}
|
|
cm::String Value;
|
|
};
|
|
static Def NoDef;
|
|
|
|
std::unordered_map<cm::String, Def> Map;
|
|
|
|
static Def const& GetInternal(const std::string& key, StackIter begin,
|
|
StackIter end, bool raise);
|
|
};
|
|
|
|
#endif
|