| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "tools/gn/value_extractors.h" | 5 #include "tools/gn/value_extractors.h" |
| 6 | 6 |
| 7 #include "tools/gn/build_settings.h" | 7 #include "tools/gn/build_settings.h" |
| 8 #include "tools/gn/err.h" | 8 #include "tools/gn/err.h" |
| 9 #include "tools/gn/label.h" | 9 #include "tools/gn/label.h" |
| 10 #include "tools/gn/source_dir.h" | 10 #include "tools/gn/source_dir.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 } | 66 } |
| 67 bool operator()(const Value& v, SourceFile* out, Err* err) const { | 67 bool operator()(const Value& v, SourceFile* out, Err* err) const { |
| 68 *out = current_dir.ResolveRelativeFile(v, err, | 68 *out = current_dir.ResolveRelativeFile(v, err, |
| 69 build_settings->root_path_utf8()); | 69 build_settings->root_path_utf8()); |
| 70 return !err->has_error(); | 70 return !err->has_error(); |
| 71 } | 71 } |
| 72 const BuildSettings* build_settings; | 72 const BuildSettings* build_settings; |
| 73 const SourceDir& current_dir; | 73 const SourceDir& current_dir; |
| 74 }; | 74 }; |
| 75 | 75 |
| 76 struct LibFileConverter { |
| 77 LibFileConverter(const BuildSettings* build_settings_in, |
| 78 const SourceDir& current_dir_in) |
| 79 : build_settings(build_settings_in), |
| 80 current_dir(current_dir_in) { |
| 81 } |
| 82 bool operator()(const Value& v, LibFile* out, Err* err) const { |
| 83 if (!v.VerifyTypeIs(Value::STRING, err)) |
| 84 return false; |
| 85 if (v.string_value().find('/') == std::string::npos) { |
| 86 *out = LibFile(v.string_value()); |
| 87 } else { |
| 88 *out = LibFile(current_dir.ResolveRelativeFile( |
| 89 v, err, build_settings->root_path_utf8())); |
| 90 } |
| 91 return !err->has_error(); |
| 92 } |
| 93 const BuildSettings* build_settings; |
| 94 const SourceDir& current_dir; |
| 95 }; |
| 96 |
| 76 struct RelativeDirConverter { | 97 struct RelativeDirConverter { |
| 77 RelativeDirConverter(const BuildSettings* build_settings_in, | 98 RelativeDirConverter(const BuildSettings* build_settings_in, |
| 78 const SourceDir& current_dir_in) | 99 const SourceDir& current_dir_in) |
| 79 : build_settings(build_settings_in), | 100 : build_settings(build_settings_in), |
| 80 current_dir(current_dir_in) { | 101 current_dir(current_dir_in) { |
| 81 } | 102 } |
| 82 bool operator()(const Value& v, SourceDir* out, Err* err) const { | 103 bool operator()(const Value& v, SourceDir* out, Err* err) const { |
| 83 *out = current_dir.ResolveRelativeDir(v, err, | 104 *out = current_dir.ResolveRelativeDir(v, err, |
| 84 build_settings->root_path_utf8()); | 105 build_settings->root_path_utf8()); |
| 85 return true; | 106 return true; |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 | 161 |
| 141 bool ExtractListOfRelativeFiles(const BuildSettings* build_settings, | 162 bool ExtractListOfRelativeFiles(const BuildSettings* build_settings, |
| 142 const Value& value, | 163 const Value& value, |
| 143 const SourceDir& current_dir, | 164 const SourceDir& current_dir, |
| 144 std::vector<SourceFile>* files, | 165 std::vector<SourceFile>* files, |
| 145 Err* err) { | 166 Err* err) { |
| 146 return ListValueExtractor(value, files, err, | 167 return ListValueExtractor(value, files, err, |
| 147 RelativeFileConverter(build_settings, current_dir)); | 168 RelativeFileConverter(build_settings, current_dir)); |
| 148 } | 169 } |
| 149 | 170 |
| 171 bool ExtractListOfLibs(const BuildSettings* build_settings, |
| 172 const Value& value, |
| 173 const SourceDir& current_dir, |
| 174 std::vector<LibFile>* libs, |
| 175 Err* err) { |
| 176 return ListValueExtractor(value, libs, err, |
| 177 LibFileConverter(build_settings, current_dir)); |
| 178 } |
| 179 |
| 150 bool ExtractListOfRelativeDirs(const BuildSettings* build_settings, | 180 bool ExtractListOfRelativeDirs(const BuildSettings* build_settings, |
| 151 const Value& value, | 181 const Value& value, |
| 152 const SourceDir& current_dir, | 182 const SourceDir& current_dir, |
| 153 std::vector<SourceDir>* dest, | 183 std::vector<SourceDir>* dest, |
| 154 Err* err) { | 184 Err* err) { |
| 155 return ListValueExtractor(value, dest, err, | 185 return ListValueExtractor(value, dest, err, |
| 156 RelativeDirConverter(build_settings, current_dir)); | 186 RelativeDirConverter(build_settings, current_dir)); |
| 157 } | 187 } |
| 158 | 188 |
| 159 bool ExtractListOfLabels(const Value& value, | 189 bool ExtractListOfLabels(const Value& value, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 } | 227 } |
| 198 | 228 |
| 199 bool ExtractRelativeFile(const BuildSettings* build_settings, | 229 bool ExtractRelativeFile(const BuildSettings* build_settings, |
| 200 const Value& value, | 230 const Value& value, |
| 201 const SourceDir& current_dir, | 231 const SourceDir& current_dir, |
| 202 SourceFile* file, | 232 SourceFile* file, |
| 203 Err* err) { | 233 Err* err) { |
| 204 RelativeFileConverter converter(build_settings, current_dir); | 234 RelativeFileConverter converter(build_settings, current_dir); |
| 205 return converter(value, file, err); | 235 return converter(value, file, err); |
| 206 } | 236 } |
| OLD | NEW |