mirror of
https://github.com/Kitware/CMake.git
synced 2026-08-09 17:18:18 +00:00
Create a stack state for managing diagnostics. This will eventually replace some of the global state used for diagnostics, as well as providing a mechanism to add additional diagnostics. For now, this is only the stack manipulation with a bare minimum of interface logic (in particular, the `block` and `include` commands). Nothing actually looks at the diagnostic state yet, and the primary user interface does not yet exist (although there are some references to it already).
118 lines
3.3 KiB
C++
118 lines
3.3 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file LICENSE.rst or https://cmake.org/licensing for details. */
|
|
|
|
#pragma once
|
|
|
|
#include "cmConfigure.h" // IWYU pragma: keep
|
|
|
|
#include <set>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
#include "cmDefinitions.h"
|
|
#include "cmDiagnostics.h"
|
|
#include "cmLinkedTree.h"
|
|
#include "cmListFileCache.h"
|
|
#include "cmPackageState.h"
|
|
#include "cmPolicies.h"
|
|
#include "cmPropertyMap.h"
|
|
#include "cmStateSnapshot.h"
|
|
#include "cmStateTypes.h"
|
|
|
|
namespace cmStateDetail {
|
|
struct BuildsystemDirectoryStateType;
|
|
struct PolicyStackEntry;
|
|
struct DiagnosticStackEntry;
|
|
extern std::string const PropertySentinel;
|
|
} // namespace cmStateDetail
|
|
|
|
struct cmStateDetail::SnapshotDataType
|
|
{
|
|
cmStateDetail::PositionType ScopeParent;
|
|
cmStateDetail::PositionType DirectoryParent;
|
|
cmLinkedTree<cmStateDetail::PolicyStackEntry>::iterator Policies;
|
|
cmLinkedTree<cmStateDetail::PolicyStackEntry>::iterator PolicyRoot;
|
|
cmLinkedTree<cmStateDetail::PolicyStackEntry>::iterator PolicyScope;
|
|
cmLinkedTree<cmStateDetail::DiagnosticStackEntry>::iterator Diagnostics;
|
|
cmLinkedTree<cmStateDetail::DiagnosticStackEntry>::iterator DiagnosticRoot;
|
|
cmLinkedTree<cmStateDetail::DiagnosticStackEntry>::iterator DiagnosticScope;
|
|
cmStateEnums::SnapshotType SnapshotType;
|
|
cmStateEnums::SnapshotUnwindType UnwindType = cmStateEnums::NO_UNWIND;
|
|
cmStateEnums::SnapshotUnwindState UnwindState = cmStateEnums::NOT_UNWINDING;
|
|
bool Keep;
|
|
cmLinkedTree<std::string>::iterator ExecutionListFile;
|
|
cmLinkedTree<cmStateDetail::BuildsystemDirectoryStateType>::iterator
|
|
BuildSystemDirectory;
|
|
cmLinkedTree<cmDefinitions>::iterator Vars;
|
|
cmLinkedTree<cmDefinitions>::iterator Root;
|
|
cmLinkedTree<cmDefinitions>::iterator Parent;
|
|
std::vector<std::string>::size_type IncludeDirectoryPosition;
|
|
std::vector<std::string>::size_type CompileDefinitionsPosition;
|
|
std::vector<std::string>::size_type CompileOptionsPosition;
|
|
std::vector<std::string>::size_type LinkOptionsPosition;
|
|
std::vector<std::string>::size_type LinkDirectoriesPosition;
|
|
};
|
|
|
|
struct cmStateDetail::PolicyStackEntry : public cmPolicies::PolicyMap
|
|
{
|
|
using derived = cmPolicies::PolicyMap;
|
|
PolicyStackEntry(bool w = false)
|
|
: Weak(w)
|
|
{
|
|
}
|
|
PolicyStackEntry(derived const& d, bool w)
|
|
: derived(d)
|
|
, Weak(w)
|
|
{
|
|
}
|
|
bool Weak;
|
|
};
|
|
|
|
struct cmStateDetail::DiagnosticStackEntry
|
|
: public cmDiagnostics::DiagnosticMap
|
|
{
|
|
using derived = cmDiagnostics::DiagnosticMap;
|
|
DiagnosticStackEntry(bool w = false)
|
|
: Weak(w)
|
|
{
|
|
}
|
|
DiagnosticStackEntry(derived d, bool w)
|
|
: derived(d)
|
|
, Weak(w)
|
|
{
|
|
}
|
|
bool Weak;
|
|
};
|
|
|
|
struct cmStateDetail::BuildsystemDirectoryStateType
|
|
{
|
|
cmStateDetail::PositionType CurrentScope;
|
|
|
|
std::string Location;
|
|
std::string OutputLocation;
|
|
|
|
std::vector<BT<std::string>> IncludeDirectories;
|
|
|
|
std::vector<BT<std::string>> CompileDefinitions;
|
|
|
|
std::vector<BT<std::string>> CompileOptions;
|
|
|
|
std::vector<BT<std::string>> LinkOptions;
|
|
|
|
std::vector<BT<std::string>> LinkDirectories;
|
|
|
|
std::vector<std::string> NormalTargetNames;
|
|
std::vector<std::string> ImportedTargetNames;
|
|
|
|
std::set<std::string> Projects;
|
|
|
|
std::string ProjectName;
|
|
|
|
cmPropertyMap Properties;
|
|
|
|
std::unordered_map<std::string, cmPackageState> Packages;
|
|
|
|
std::vector<cmStateSnapshot> Children;
|
|
};
|