Index: tools/gn/config_values_generator.cc |
diff --git a/tools/gn/config_values_generator.cc b/tools/gn/config_values_generator.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..34c3f678f8093508e3e7aa9a16d1606f25fc8688 |
--- /dev/null |
+++ b/tools/gn/config_values_generator.cc |
@@ -0,0 +1,89 @@ |
+// 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. |
+ |
+#include "tools/gn/config_values_generator.h" |
+ |
+#include "tools/gn/config_values.h" |
+#include "tools/gn/scope.h" |
+#include "tools/gn/value.h" |
+#include "tools/gn/value_extractors.h" |
+ |
+namespace { |
+ |
+void GetStringList( |
+ const Scope* scope, |
+ const char* var_name, |
+ ConfigValues* config_values, |
+ void (ConfigValues::* swapper_inner)(std::vector<std::string>*), |
+ Err* err) { |
+ const Value* value = scope->GetValue(var_name); |
+ if (!value) |
+ return; // No value, empty input and succeed. |
+ |
+ std::vector<std::string> result; |
+ ExtractListOfStringValues(*value, &result, err); |
+ (config_values->*swapper_inner)(&result); |
+} |
+ |
+} // namespace |
+ |
+ConfigValuesGenerator::ConfigValuesGenerator(ConfigValues* dest_values, |
+ const Scope* scope, |
+ const Token& function_token, |
+ const SourceDir& input_dir, |
+ Err* err) |
+ : config_values_(dest_values), |
+ scope_(scope), |
+ function_token_(function_token), |
+ input_dir_(input_dir), |
+ err_(err) { |
+} |
+ |
+ConfigValuesGenerator::~ConfigValuesGenerator() { |
+} |
+ |
+void ConfigValuesGenerator::Run() { |
+ FillDefines(); |
+ FillIncludes(); |
+ FillCflags(); |
+ FillCflags_C(); |
+ FillCflags_CC(); |
+ FillLdflags(); |
+} |
+ |
+void ConfigValuesGenerator::FillDefines() { |
+ GetStringList(scope_, "defines", config_values_, |
+ &ConfigValues::swap_in_defines, err_); |
+} |
+ |
+void ConfigValuesGenerator::FillIncludes() { |
+ const Value* value = scope_->GetValue("includes"); |
+ if (!value) |
+ return; // No value, empty input and succeed. |
+ |
+ std::vector<SourceDir> includes; |
+ if (!ExtractListOfRelativeDirs(*value, input_dir_, &includes, err_)) |
+ return; |
+ config_values_->swap_in_includes(&includes); |
+} |
+ |
+void ConfigValuesGenerator::FillCflags() { |
+ GetStringList(scope_, "cflags", config_values_, |
+ &ConfigValues::swap_in_cflags, err_); |
+} |
+ |
+void ConfigValuesGenerator::FillCflags_C() { |
+ GetStringList(scope_, "cflags_c", config_values_, |
+ &ConfigValues::swap_in_cflags_c, err_); |
+} |
+ |
+void ConfigValuesGenerator::FillCflags_CC() { |
+ GetStringList(scope_, "cflags_cc", config_values_, |
+ &ConfigValues::swap_in_cflags_cc, err_); |
+} |
+ |
+void ConfigValuesGenerator::FillLdflags() { |
+ GetStringList(scope_, "ldflags", config_values_, |
+ &ConfigValues::swap_in_ldflags, err_); |
+} |