OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/substitution_writer.h" | 5 #include "tools/gn/substitution_writer.h" |
6 | 6 |
7 #include "tools/gn/build_settings.h" | 7 #include "tools/gn/build_settings.h" |
8 #include "tools/gn/escape.h" | 8 #include "tools/gn/escape.h" |
9 #include "tools/gn/filesystem_utils.h" | 9 #include "tools/gn/filesystem_utils.h" |
10 #include "tools/gn/output_file.h" | 10 #include "tools/gn/output_file.h" |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 } | 122 } |
123 | 123 |
124 SubstitutionWriter::~SubstitutionWriter() { | 124 SubstitutionWriter::~SubstitutionWriter() { |
125 } | 125 } |
126 | 126 |
127 // static | 127 // static |
128 SourceFile SubstitutionWriter::ApplyPatternToSource( | 128 SourceFile SubstitutionWriter::ApplyPatternToSource( |
129 const Settings* settings, | 129 const Settings* settings, |
130 const SubstitutionPattern& pattern, | 130 const SubstitutionPattern& pattern, |
131 const SourceFile& source) { | 131 const SourceFile& source) { |
| 132 std::string result_value = ApplyPatternToSourceAsString( |
| 133 settings, pattern, source); |
| 134 CHECK(!result_value.empty() && result_value[0] == '/') |
| 135 << "The result of the pattern \"" |
| 136 << pattern.AsString() |
| 137 << "\" was not a path beginning in \"/\" or \"//\"."; |
| 138 return SourceFile(SourceFile::SWAP_IN, &result_value); |
| 139 } |
| 140 |
| 141 // static |
| 142 std::string SubstitutionWriter::ApplyPatternToSourceAsString( |
| 143 const Settings* settings, |
| 144 const SubstitutionPattern& pattern, |
| 145 const SourceFile& source) { |
132 std::string result_value; | 146 std::string result_value; |
133 for (size_t i = 0; i < pattern.ranges().size(); i++) { | 147 for (size_t i = 0; i < pattern.ranges().size(); i++) { |
134 const SubstitutionPattern::Subrange& subrange = pattern.ranges()[i]; | 148 const SubstitutionPattern::Subrange& subrange = pattern.ranges()[i]; |
135 if (subrange.type == SUBSTITUTION_LITERAL) { | 149 if (subrange.type == SUBSTITUTION_LITERAL) { |
136 result_value.append(subrange.literal); | 150 result_value.append(subrange.literal); |
137 } else { | 151 } else { |
138 result_value.append( | 152 result_value.append( |
139 GetSourceSubstitution(settings, source, subrange.type, | 153 GetSourceSubstitution(settings, source, subrange.type, |
140 OUTPUT_ABSOLUTE, SourceDir())); | 154 OUTPUT_ABSOLUTE, SourceDir())); |
141 } | 155 } |
142 } | 156 } |
143 CHECK(!result_value.empty() && result_value[0] == '/') | 157 return result_value; |
144 << "The result of the pattern \"" | |
145 << pattern.AsString() | |
146 << "\" was not a path beginning in \"/\" or \"//\"."; | |
147 return SourceFile(SourceFile::SWAP_IN, &result_value); | |
148 } | 158 } |
149 | 159 |
150 // static | 160 // static |
151 OutputFile SubstitutionWriter::ApplyPatternToSourceAsOutputFile( | 161 OutputFile SubstitutionWriter::ApplyPatternToSourceAsOutputFile( |
152 const Settings* settings, | 162 const Settings* settings, |
153 const SubstitutionPattern& pattern, | 163 const SubstitutionPattern& pattern, |
154 const SourceFile& source) { | 164 const SourceFile& source) { |
155 SourceFile result_as_source = ApplyPatternToSource(settings, pattern, source); | 165 SourceFile result_as_source = ApplyPatternToSource(settings, pattern, source); |
156 CHECK(result_as_source.is_source_absolute()) | 166 CHECK(result_as_source.is_source_absolute()) |
157 << "The result of the pattern \"" | 167 << "The result of the pattern \"" |
(...skipping 10 matching lines...) Expand all Loading... |
168 const SubstitutionList& list, | 178 const SubstitutionList& list, |
169 const SourceFile& source, | 179 const SourceFile& source, |
170 std::vector<SourceFile>* output) { | 180 std::vector<SourceFile>* output) { |
171 for (size_t i = 0; i < list.list().size(); i++) { | 181 for (size_t i = 0; i < list.list().size(); i++) { |
172 output->push_back(ApplyPatternToSource( | 182 output->push_back(ApplyPatternToSource( |
173 settings, list.list()[i], source)); | 183 settings, list.list()[i], source)); |
174 } | 184 } |
175 } | 185 } |
176 | 186 |
177 // static | 187 // static |
| 188 void SubstitutionWriter::ApplyListToSourceAsString( |
| 189 const Settings* settings, |
| 190 const SubstitutionList& list, |
| 191 const SourceFile& source, |
| 192 std::vector<std::string>* output) { |
| 193 for (size_t i = 0; i < list.list().size(); i++) { |
| 194 output->push_back(ApplyPatternToSourceAsString( |
| 195 settings, list.list()[i], source)); |
| 196 } |
| 197 } |
| 198 |
| 199 // static |
178 void SubstitutionWriter::ApplyListToSourceAsOutputFile( | 200 void SubstitutionWriter::ApplyListToSourceAsOutputFile( |
179 const Settings* settings, | 201 const Settings* settings, |
180 const SubstitutionList& list, | 202 const SubstitutionList& list, |
181 const SourceFile& source, | 203 const SourceFile& source, |
182 std::vector<OutputFile>* output) { | 204 std::vector<OutputFile>* output) { |
183 for (size_t i = 0; i < list.list().size(); i++) { | 205 for (size_t i = 0; i < list.list().size(); i++) { |
184 output->push_back(ApplyPatternToSourceAsOutputFile( | 206 output->push_back(ApplyPatternToSourceAsOutputFile( |
185 settings, list.list()[i], source)); | 207 settings, list.list()[i], source)); |
186 } | 208 } |
187 } | 209 } |
188 | 210 |
189 // static | 211 // static |
190 void SubstitutionWriter::ApplyListToSources( | 212 void SubstitutionWriter::ApplyListToSources( |
191 const Settings* settings, | 213 const Settings* settings, |
192 const SubstitutionList& list, | 214 const SubstitutionList& list, |
193 const std::vector<SourceFile>& sources, | 215 const std::vector<SourceFile>& sources, |
194 std::vector<SourceFile>* output) { | 216 std::vector<SourceFile>* output) { |
195 output->clear(); | 217 output->clear(); |
196 for (size_t i = 0; i < sources.size(); i++) | 218 for (size_t i = 0; i < sources.size(); i++) |
197 ApplyListToSource(settings, list, sources[i], output); | 219 ApplyListToSource(settings, list, sources[i], output); |
198 } | 220 } |
199 | 221 |
200 // static | 222 // static |
| 223 void SubstitutionWriter::ApplyListToSourcesAsString( |
| 224 const Settings* settings, |
| 225 const SubstitutionList& list, |
| 226 const std::vector<SourceFile>& sources, |
| 227 std::vector<std::string>* output) { |
| 228 output->clear(); |
| 229 for (size_t i = 0; i < sources.size(); i++) |
| 230 ApplyListToSourceAsString(settings, list, sources[i], output); |
| 231 } |
| 232 |
| 233 // static |
201 void SubstitutionWriter::ApplyListToSourcesAsOutputFile( | 234 void SubstitutionWriter::ApplyListToSourcesAsOutputFile( |
202 const Settings* settings, | 235 const Settings* settings, |
203 const SubstitutionList& list, | 236 const SubstitutionList& list, |
204 const std::vector<SourceFile>& sources, | 237 const std::vector<SourceFile>& sources, |
205 std::vector<OutputFile>* output) { | 238 std::vector<OutputFile>* output) { |
206 output->clear(); | 239 output->clear(); |
207 for (size_t i = 0; i < sources.size(); i++) | 240 for (size_t i = 0; i < sources.size(); i++) |
208 ApplyListToSourceAsOutputFile(settings, list, sources[i], output); | 241 ApplyListToSourceAsOutputFile(settings, list, sources[i], output); |
209 } | 242 } |
210 | 243 |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 return std::string(); | 341 return std::string(); |
309 } | 342 } |
310 | 343 |
311 // If we get here, the result is a path that should be made relative or | 344 // If we get here, the result is a path that should be made relative or |
312 // absolute according to the output_style. Other cases (just file name or | 345 // absolute according to the output_style. Other cases (just file name or |
313 // extension extraction) will have been handled via early return above. | 346 // extension extraction) will have been handled via early return above. |
314 if (output_style == OUTPUT_ABSOLUTE) | 347 if (output_style == OUTPUT_ABSOLUTE) |
315 return to_rebase; | 348 return to_rebase; |
316 return RebaseSourceAbsolutePath(to_rebase, relative_to); | 349 return RebaseSourceAbsolutePath(to_rebase, relative_to); |
317 } | 350 } |
OLD | NEW |