|  | // 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_VALUES_H_ | 
|  | #define TOOLS_GN_CONFIG_VALUES_H_ | 
|  |  | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/macros.h" | 
|  | #include "tools/gn/lib_file.h" | 
|  | #include "tools/gn/source_dir.h" | 
|  | #include "tools/gn/source_file.h" | 
|  |  | 
|  | // Holds the values (include_dirs, defines, compiler flags, etc.) for a given | 
|  | // config or target. | 
|  | class ConfigValues { | 
|  | public: | 
|  | ConfigValues(); | 
|  | ~ConfigValues(); | 
|  |  | 
|  | // Appends the values from the given config to this one. | 
|  | void AppendValues(const ConfigValues& append); | 
|  |  | 
|  | #define STRING_VALUES_ACCESSOR(name) \ | 
|  | const std::vector<std::string>& name() const { return name##_; } \ | 
|  | std::vector<std::string>& name() { return name##_; } | 
|  | #define DIR_VALUES_ACCESSOR(name) \ | 
|  | const std::vector<SourceDir>& name() const { return name##_; } \ | 
|  | std::vector<SourceDir>& name() { return name##_; } | 
|  |  | 
|  | // ================================================================= | 
|  | // IMPORTANT: If you add a new one, be sure to update AppendValues() | 
|  | //            and command_desc.cc. | 
|  | // ================================================================= | 
|  | STRING_VALUES_ACCESSOR(arflags) | 
|  | STRING_VALUES_ACCESSOR(asmflags) | 
|  | STRING_VALUES_ACCESSOR(cflags) | 
|  | STRING_VALUES_ACCESSOR(cflags_c) | 
|  | STRING_VALUES_ACCESSOR(cflags_cc) | 
|  | STRING_VALUES_ACCESSOR(cflags_objc) | 
|  | STRING_VALUES_ACCESSOR(cflags_objcc) | 
|  | STRING_VALUES_ACCESSOR(defines) | 
|  | DIR_VALUES_ACCESSOR   (include_dirs) | 
|  | STRING_VALUES_ACCESSOR(ldflags) | 
|  | DIR_VALUES_ACCESSOR   (lib_dirs) | 
|  | // ================================================================= | 
|  | // IMPORTANT: If you add a new one, be sure to update AppendValues() | 
|  | //            and command_desc.cc. | 
|  | // ================================================================= | 
|  |  | 
|  | #undef STRING_VALUES_ACCESSOR | 
|  | #undef DIR_VALUES_ACCESSOR | 
|  |  | 
|  | const std::vector<SourceFile>& inputs() const { return inputs_; } | 
|  | std::vector<SourceFile>& inputs() { return inputs_; } | 
|  |  | 
|  | const std::vector<LibFile>& libs() const { return libs_; } | 
|  | std::vector<LibFile>& libs() { return libs_; } | 
|  |  | 
|  | bool has_precompiled_headers() const { | 
|  | return !precompiled_header_.empty() || !precompiled_source_.is_null(); | 
|  | } | 
|  | const std::string& precompiled_header() const { | 
|  | return precompiled_header_; | 
|  | } | 
|  | void set_precompiled_header(const std::string& f) { | 
|  | precompiled_header_ = f; | 
|  | } | 
|  | const SourceFile& precompiled_source() const { | 
|  | return precompiled_source_; | 
|  | } | 
|  | void set_precompiled_source(const SourceFile& f) { | 
|  | precompiled_source_ = f; | 
|  | } | 
|  |  | 
|  | private: | 
|  | std::vector<std::string> arflags_; | 
|  | std::vector<std::string> asmflags_; | 
|  | std::vector<std::string> cflags_; | 
|  | std::vector<std::string> cflags_c_; | 
|  | std::vector<std::string> cflags_cc_; | 
|  | std::vector<std::string> cflags_objc_; | 
|  | std::vector<std::string> cflags_objcc_; | 
|  | std::vector<std::string> defines_; | 
|  | std::vector<SourceDir>   include_dirs_; | 
|  | std::vector<SourceFile>  inputs_; | 
|  | std::vector<std::string> ldflags_; | 
|  | std::vector<SourceDir>   lib_dirs_; | 
|  | std::vector<LibFile>     libs_; | 
|  | // If you add a new one, be sure to update AppendValues(). | 
|  |  | 
|  | std::string precompiled_header_; | 
|  | SourceFile precompiled_source_; | 
|  | }; | 
|  |  | 
|  | #endif  // TOOLS_GN_CONFIG_VALUES_H_ |