Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1139)

Side by Side Diff: tools/gn/substitution_writer.cc

Issue 630223002: gn: Support build directories outside the source tree. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Patch that compiles and passes unit tests on both Windows and Linux Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/gn/source_file.cc ('k') | tools/gn/value_extractors.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 } 228 }
229 return result_value; 229 return result_value;
230 } 230 }
231 231
232 // static 232 // static
233 OutputFile SubstitutionWriter::ApplyPatternToSourceAsOutputFile( 233 OutputFile SubstitutionWriter::ApplyPatternToSourceAsOutputFile(
234 const Settings* settings, 234 const Settings* settings,
235 const SubstitutionPattern& pattern, 235 const SubstitutionPattern& pattern,
236 const SourceFile& source) { 236 const SourceFile& source) {
237 SourceFile result_as_source = ApplyPatternToSource(settings, pattern, source); 237 SourceFile result_as_source = ApplyPatternToSource(settings, pattern, source);
238 CHECK(result_as_source.is_source_absolute())
239 << "The result of the pattern \""
240 << pattern.AsString()
241 << "\" was not an absolute path beginning in \"//\".";
242 return OutputFile(settings->build_settings(), result_as_source); 238 return OutputFile(settings->build_settings(), result_as_source);
243 } 239 }
244 240
245 // static 241 // static
246 void SubstitutionWriter::ApplyListToSource( 242 void SubstitutionWriter::ApplyListToSource(
247 const Settings* settings, 243 const Settings* settings,
248 const SubstitutionList& list, 244 const SubstitutionList& list,
249 const SourceFile& source, 245 const SourceFile& source,
250 std::vector<SourceFile>* output) { 246 std::vector<SourceFile>* output) {
251 for (const auto& item : list.list()) 247 for (const auto& item : list.list())
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 346
351 case SUBSTITUTION_SOURCE_DIR: 347 case SUBSTITUTION_SOURCE_DIR:
352 if (source.is_system_absolute()) 348 if (source.is_system_absolute())
353 return DirectoryWithNoLastSlash(source.GetDir()); 349 return DirectoryWithNoLastSlash(source.GetDir());
354 to_rebase = DirectoryWithNoLastSlash(source.GetDir()); 350 to_rebase = DirectoryWithNoLastSlash(source.GetDir());
355 break; 351 break;
356 352
357 case SUBSTITUTION_SOURCE_ROOT_RELATIVE_DIR: 353 case SUBSTITUTION_SOURCE_ROOT_RELATIVE_DIR:
358 if (source.is_system_absolute()) 354 if (source.is_system_absolute())
359 return DirectoryWithNoLastSlash(source.GetDir()); 355 return DirectoryWithNoLastSlash(source.GetDir());
360 return RebaseSourceAbsolutePath( 356 return RebasePath(
361 DirectoryWithNoLastSlash(source.GetDir()), SourceDir("//")); 357 DirectoryWithNoLastSlash(source.GetDir()), SourceDir("//"),
358 settings->build_settings()->root_path_utf8());
362 359
363 case SUBSTITUTION_SOURCE_GEN_DIR: 360 case SUBSTITUTION_SOURCE_GEN_DIR:
364 to_rebase = DirectoryWithNoLastSlash( 361 to_rebase = DirectoryWithNoLastSlash(
365 GetGenDirForSourceDir(settings, source.GetDir())); 362 GetGenDirForSourceDir(settings, source.GetDir()));
366 break; 363 break;
367 364
368 case SUBSTITUTION_SOURCE_OUT_DIR: 365 case SUBSTITUTION_SOURCE_OUT_DIR:
369 to_rebase = DirectoryWithNoLastSlash( 366 to_rebase = DirectoryWithNoLastSlash(
370 GetOutputDirForSourceDir(settings, source.GetDir())); 367 GetOutputDirForSourceDir(settings, source.GetDir()));
371 break; 368 break;
372 369
373 default: 370 default:
374 NOTREACHED() 371 NOTREACHED()
375 << "Unsupported substitution for this function: " 372 << "Unsupported substitution for this function: "
376 << kSubstitutionNames[type]; 373 << kSubstitutionNames[type];
377 return std::string(); 374 return std::string();
378 } 375 }
379 376
380 // If we get here, the result is a path that should be made relative or 377 // If we get here, the result is a path that should be made relative or
381 // absolute according to the output_style. Other cases (just file name or 378 // absolute according to the output_style. Other cases (just file name or
382 // extension extraction) will have been handled via early return above. 379 // extension extraction) will have been handled via early return above.
383 if (output_style == OUTPUT_ABSOLUTE) 380 if (output_style == OUTPUT_ABSOLUTE)
384 return to_rebase; 381 return to_rebase;
385 return RebaseSourceAbsolutePath(to_rebase, relative_to); 382 return RebasePath(to_rebase, relative_to,
383 settings->build_settings()->root_path_utf8());
386 } 384 }
387 385
388 // static 386 // static
389 OutputFile SubstitutionWriter::ApplyPatternToTargetAsOutputFile( 387 OutputFile SubstitutionWriter::ApplyPatternToTargetAsOutputFile(
390 const Target* target, 388 const Target* target,
391 const Tool* tool, 389 const Tool* tool,
392 const SubstitutionPattern& pattern) { 390 const SubstitutionPattern& pattern) {
393 std::string result_value; 391 std::string result_value;
394 for (const auto& subrange : pattern.ranges()) { 392 for (const auto& subrange : pattern.ranges()) {
395 if (subrange.type == SUBSTITUTION_LITERAL) { 393 if (subrange.type == SUBSTITUTION_LITERAL) {
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 // does not include the dot but the tool's does. 547 // does not include the dot but the tool's does.
550 if (target->output_extension().empty()) 548 if (target->output_extension().empty())
551 return tool->default_output_extension(); 549 return tool->default_output_extension();
552 return std::string(".") + target->output_extension(); 550 return std::string(".") + target->output_extension();
553 551
554 default: 552 default:
555 NOTREACHED(); 553 NOTREACHED();
556 return std::string(); 554 return std::string();
557 } 555 }
558 } 556 }
OLDNEW
« no previous file with comments | « tools/gn/source_file.cc ('k') | tools/gn/value_extractors.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698