1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "tools/gn/config_values_generator.h" 6 7 #include "tools/gn/config_values.h" 8 #include "tools/gn/scope.h" 9 #include "tools/gn/settings.h" 10 #include "tools/gn/value.h" 11 #include "tools/gn/value_extractors.h" 12 #include "tools/gn/variables.h" 13 14 namespace { 15 16 void GetStringList( 17 Scope* scope, 18 const char* var_name, 19 ConfigValues* config_values, 20 std::vector<std::string>& (ConfigValues::* accessor)(), 21 Err* err) { 22 const Value* value = scope->GetValue(var_name, true); 23 if (!value) 24 return; // No value, empty input and succeed. 25 26 std::vector<std::string> result; 27 ExtractListOfStringValues(*value, &result, err); 28 (config_values->*accessor)().swap(result); 29 } 30 31 void GetDirList( 32 Scope* scope, 33 const char* var_name, 34 ConfigValues* config_values, 35 const SourceDir input_dir, 36 std::vector<SourceDir>& (ConfigValues::* accessor)(), 37 Err* err) { 38 const Value* value = scope->GetValue(var_name, true); 39 if (!value) 40 return; // No value, empty input and succeed. 41 42 std::vector<SourceDir> result; 43 ExtractListOfRelativeDirs(scope->settings()->build_settings(), 44 *value, input_dir, &result, err); 45 (config_values->*accessor)().swap(result); 46 } 47 48 } // namespace 49 50 ConfigValuesGenerator::ConfigValuesGenerator( 51 ConfigValues* dest_values, 52 Scope* scope, 53 const SourceDir& input_dir, 54 Err* err) 55 : config_values_(dest_values), 56 scope_(scope), 57 input_dir_(input_dir), 58 err_(err) { 59 } 60 61 ConfigValuesGenerator::~ConfigValuesGenerator() { 62 } 63 64 void ConfigValuesGenerator::Run() { 65 #define FILL_STRING_CONFIG_VALUE(name) \ 66 GetStringList(scope_, #name, config_values_, &ConfigValues::name, err_); 67 #define FILL_DIR_CONFIG_VALUE(name) \ 68 GetDirList(scope_, #name, config_values_, input_dir_, \ 69 &ConfigValues::name, err_); 70 71 FILL_STRING_CONFIG_VALUE(cflags) 72 FILL_STRING_CONFIG_VALUE(cflags_c) 73 FILL_STRING_CONFIG_VALUE(cflags_cc) 74 FILL_STRING_CONFIG_VALUE(cflags_objc) 75 FILL_STRING_CONFIG_VALUE(cflags_objcc) 76 FILL_STRING_CONFIG_VALUE(defines) 77 FILL_DIR_CONFIG_VALUE( include_dirs) 78 FILL_STRING_CONFIG_VALUE(ldflags) 79 FILL_DIR_CONFIG_VALUE( lib_dirs) 80 FILL_STRING_CONFIG_VALUE(libs) 81 82 #undef FILL_STRING_CONFIG_VALUE 83 #undef FILL_DIR_CONFIG_VALUE 84 } 85