| 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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 *err = Err(item, "Duplicate item in list"); | 51 *err = Err(item, "Duplicate item in list"); |
| 52 size_t previous_index = dest->IndexOf(new_one); | 52 size_t previous_index = dest->IndexOf(new_one); |
| 53 err->AppendSubErr(Err(input_list[previous_index], | 53 err->AppendSubErr(Err(input_list[previous_index], |
| 54 "This was the previous definition.")); | 54 "This was the previous definition.")); |
| 55 return false; | 55 return false; |
| 56 } | 56 } |
| 57 } | 57 } |
| 58 return true; | 58 return true; |
| 59 } | 59 } |
| 60 | 60 |
| 61 // This extractor rejects files with system-absolute file paths. If we need | |
| 62 // that in the future, we'll have to add some flag to control this. | |
| 63 struct RelativeFileConverter { | 61 struct RelativeFileConverter { |
| 64 RelativeFileConverter(const BuildSettings* build_settings_in, | 62 RelativeFileConverter(const BuildSettings* build_settings_in, |
| 65 const SourceDir& current_dir_in) | 63 const SourceDir& current_dir_in) |
| 66 : build_settings(build_settings_in), | 64 : build_settings(build_settings_in), |
| 67 current_dir(current_dir_in) { | 65 current_dir(current_dir_in) { |
| 68 } | 66 } |
| 69 bool operator()(const Value& v, SourceFile* out, Err* err) const { | 67 bool operator()(const Value& v, SourceFile* out, Err* err) const { |
| 70 if (!v.VerifyTypeIs(Value::STRING, err)) | 68 if (!v.VerifyTypeIs(Value::STRING, err)) |
| 71 return false; | 69 return false; |
| 72 *out = current_dir.ResolveRelativeFile(v.string_value(), | 70 *out = current_dir.ResolveRelativeFile(v.string_value(), |
| 73 build_settings->root_path_utf8()); | 71 build_settings->root_path_utf8()); |
| 74 if (out->is_system_absolute()) { | |
| 75 *err = Err(v, "System-absolute file path.", | |
| 76 "You can't list a system-absolute file path here. Please include " | |
| 77 "only files in\nthe source tree. Maybe you meant to begin with two " | |
| 78 "slashes to indicate an\nabsolute path in the source tree?"); | |
| 79 return false; | |
| 80 } | |
| 81 return true; | 72 return true; |
| 82 } | 73 } |
| 83 const BuildSettings* build_settings; | 74 const BuildSettings* build_settings; |
| 84 const SourceDir& current_dir; | 75 const SourceDir& current_dir; |
| 85 }; | 76 }; |
| 86 | 77 |
| 87 struct RelativeDirConverter { | 78 struct RelativeDirConverter { |
| 88 RelativeDirConverter(const BuildSettings* build_settings_in, | 79 RelativeDirConverter(const BuildSettings* build_settings_in, |
| 89 const SourceDir& current_dir_in) | 80 const SourceDir& current_dir_in) |
| 90 : build_settings(build_settings_in), | 81 : build_settings(build_settings_in), |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 } | 201 } |
| 211 | 202 |
| 212 bool ExtractRelativeFile(const BuildSettings* build_settings, | 203 bool ExtractRelativeFile(const BuildSettings* build_settings, |
| 213 const Value& value, | 204 const Value& value, |
| 214 const SourceDir& current_dir, | 205 const SourceDir& current_dir, |
| 215 SourceFile* file, | 206 SourceFile* file, |
| 216 Err* err) { | 207 Err* err) { |
| 217 RelativeFileConverter converter(build_settings, current_dir); | 208 RelativeFileConverter converter(build_settings, current_dir); |
| 218 return converter(value, file, err); | 209 return converter(value, file, err); |
| 219 } | 210 } |
| OLD | NEW |