mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 14:26:09 +03:00
72 lines
2.4 KiB
C
72 lines
2.4 KiB
C
|
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#ifndef TOOLS_GN_CONFIG_H_
|
||
|
#define TOOLS_GN_CONFIG_H_
|
||
|
|
||
|
#include <set>
|
||
|
|
||
|
#include "base/logging.h"
|
||
|
#include "base/macros.h"
|
||
|
#include "tools/gn/config_values.h"
|
||
|
#include "tools/gn/item.h"
|
||
|
#include "tools/gn/label_ptr.h"
|
||
|
#include "tools/gn/unique_vector.h"
|
||
|
|
||
|
// Represents a named config in the dependency graph.
|
||
|
//
|
||
|
// A config can list other configs. We track both the data assigned directly
|
||
|
// on the config, this list of sub-configs, and (when the config is resolved)
|
||
|
// the resulting values of everything merged together. The flatten step
|
||
|
// means we can avoid doing a recursive config walk for every target to compute
|
||
|
// flags.
|
||
|
class Config : public Item {
|
||
|
public:
|
||
|
// We track the set of build files that may affect this config, please refer
|
||
|
// to Scope for how this is determined.
|
||
|
Config(const Settings* settings,
|
||
|
const Label& label,
|
||
|
const std::set<SourceFile>& build_dependency_files = {});
|
||
|
~Config() override;
|
||
|
|
||
|
// Item implementation.
|
||
|
Config* AsConfig() override;
|
||
|
const Config* AsConfig() const override;
|
||
|
bool OnResolved(Err* err) override;
|
||
|
|
||
|
// The values set directly on this config. This will not contain data from
|
||
|
// sub-configs.
|
||
|
ConfigValues& own_values() { return own_values_; }
|
||
|
const ConfigValues& own_values() const { return own_values_; }
|
||
|
|
||
|
// The values that represent this config and all sub-configs combined into
|
||
|
// one. This is only valid after the config is resolved (when we know the
|
||
|
// contents of the sub-configs).
|
||
|
const ConfigValues& resolved_values() const {
|
||
|
DCHECK(resolved_);
|
||
|
if (configs_.empty()) // No sub configs, just use the regular values.
|
||
|
return own_values_;
|
||
|
return composite_values_;
|
||
|
}
|
||
|
|
||
|
// List of sub-configs.
|
||
|
const UniqueVector<LabelConfigPair>& configs() const { return configs_; }
|
||
|
UniqueVector<LabelConfigPair>& configs() { return configs_; }
|
||
|
|
||
|
private:
|
||
|
ConfigValues own_values_;
|
||
|
|
||
|
// Contains the own_values combined with sub-configs. Most configs don't have
|
||
|
// sub-configs. So as an optimization, this is not populated if there are no
|
||
|
// items in configs_. The resolved_values() getter handles this.
|
||
|
bool resolved_;
|
||
|
ConfigValues composite_values_;
|
||
|
|
||
|
UniqueVector<LabelConfigPair> configs_;
|
||
|
|
||
|
DISALLOW_COPY_AND_ASSIGN(Config);
|
||
|
};
|
||
|
|
||
|
#endif // TOOLS_GN_CONFIG_H_
|