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

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

Issue 558763002: Require build directories exist for some GN commands. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: file path literal Created 6 years, 3 months 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/setup.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/setup.h" 5 #include "tools/gn/setup.h"
6 6
7 #include <stdlib.h> 7 #include <stdlib.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <sstream> 10 #include <sstream>
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 base::Bind(&ItemDefinedCallback, scheduler_.main_loop(), builder_)); 218 base::Bind(&ItemDefinedCallback, scheduler_.main_loop(), builder_));
219 219
220 // The scheduler's main loop wasn't created when the Loader was created, so 220 // The scheduler's main loop wasn't created when the Loader was created, so
221 // we need to set it now. 221 // we need to set it now.
222 loader_->set_main_loop(scheduler_.main_loop()); 222 loader_->set_main_loop(scheduler_.main_loop());
223 } 223 }
224 224
225 Setup::~Setup() { 225 Setup::~Setup() {
226 } 226 }
227 227
228 bool Setup::DoSetup(const std::string& build_dir) { 228 bool Setup::DoSetup(const std::string& build_dir, bool force_create) {
229 CommandLine* cmdline = CommandLine::ForCurrentProcess(); 229 CommandLine* cmdline = CommandLine::ForCurrentProcess();
230 230
231 scheduler_.set_verbose_logging(cmdline->HasSwitch(kSwitchVerbose)); 231 scheduler_.set_verbose_logging(cmdline->HasSwitch(kSwitchVerbose));
232 if (cmdline->HasSwitch(kTimeSwitch) || 232 if (cmdline->HasSwitch(kTimeSwitch) ||
233 cmdline->HasSwitch(kTracelogSwitch)) 233 cmdline->HasSwitch(kTracelogSwitch))
234 EnableTracing(); 234 EnableTracing();
235 235
236 ScopedTrace setup_trace(TraceItem::TRACE_SETUP, "DoSetup"); 236 ScopedTrace setup_trace(TraceItem::TRACE_SETUP, "DoSetup");
237 237
238 if (!FillSourceDir(*cmdline)) 238 if (!FillSourceDir(*cmdline))
239 return false; 239 return false;
240 if (!RunConfigFile()) 240 if (!RunConfigFile())
241 return false; 241 return false;
242 if (!FillOtherConfig(*cmdline)) 242 if (!FillOtherConfig(*cmdline))
243 return false; 243 return false;
244 if (!FillBuildDir(build_dir)) // Must be after FillSourceDir to resolve. 244
245 // Must be after FillSourceDir to resolve.
246 if (!FillBuildDir(build_dir, !force_create))
245 return false; 247 return false;
248
246 if (fill_arguments_) { 249 if (fill_arguments_) {
247 if (!FillArguments(*cmdline)) 250 if (!FillArguments(*cmdline))
248 return false; 251 return false;
249 } 252 }
250 FillPythonPath(); 253 FillPythonPath();
251 254
252 return true; 255 return true;
253 } 256 }
254 257
255 bool Setup::Run() { 258 bool Setup::Run() {
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 root_path = dotfile_name_.DirName(); 434 root_path = dotfile_name_.DirName();
432 } 435 }
433 436
434 if (scheduler_.verbose_logging()) 437 if (scheduler_.verbose_logging())
435 scheduler_.Log("Using source root", FilePathToUTF8(root_path)); 438 scheduler_.Log("Using source root", FilePathToUTF8(root_path));
436 build_settings_.SetRootPath(root_path); 439 build_settings_.SetRootPath(root_path);
437 440
438 return true; 441 return true;
439 } 442 }
440 443
441 bool Setup::FillBuildDir(const std::string& build_dir) { 444 bool Setup::FillBuildDir(const std::string& build_dir, bool require_exists) {
442 SourceDir resolved = 445 SourceDir resolved =
443 SourceDirForCurrentDirectory(build_settings_.root_path()). 446 SourceDirForCurrentDirectory(build_settings_.root_path()).
444 ResolveRelativeDir(build_dir); 447 ResolveRelativeDir(build_dir);
445 if (resolved.is_null()) { 448 if (resolved.is_null()) {
446 Err(Location(), "Couldn't resolve build directory.", 449 Err(Location(), "Couldn't resolve build directory.",
447 "The build directory supplied (\"" + build_dir + "\") was not valid."). 450 "The build directory supplied (\"" + build_dir + "\") was not valid.").
448 PrintToStdout(); 451 PrintToStdout();
449 return false; 452 return false;
450 } 453 }
451 454
452 if (scheduler_.verbose_logging()) 455 if (scheduler_.verbose_logging())
453 scheduler_.Log("Using build dir", resolved.value()); 456 scheduler_.Log("Using build dir", resolved.value());
457
458 if (require_exists) {
459 base::FilePath build_dir_path = build_settings_.GetFullPath(resolved);
460 if (!base::PathExists(build_dir_path.Append(
461 FILE_PATH_LITERAL("build.ninja")))) {
462 Err(Location(), "Not a build directory.",
463 "This command requires an existing build directory. I interpreted "
464 "your input\n\"" + build_dir + "\" as:\n " +
465 FilePathToUTF8(build_dir_path) +
466 "\nwhich doesn't seem to contain a previously-generated build.")
467 .PrintToStdout();
468 return false;
469 }
470 }
471
454 build_settings_.SetBuildDir(resolved); 472 build_settings_.SetBuildDir(resolved);
455 return true; 473 return true;
456 } 474 }
457 475
458 void Setup::FillPythonPath() { 476 void Setup::FillPythonPath() {
459 // Trace this since it tends to be a bit slow on Windows. 477 // Trace this since it tends to be a bit slow on Windows.
460 ScopedTrace setup_trace(TraceItem::TRACE_SETUP, "Fill Python Path"); 478 ScopedTrace setup_trace(TraceItem::TRACE_SETUP, "Fill Python Path");
461 #if defined(OS_WIN) 479 #if defined(OS_WIN)
462 // Find Python on the path so we can use the absolute path in the build. 480 // Find Python on the path so we can use the absolute path in the build.
463 const base::char16 kGetPython[] = 481 const base::char16 kGetPython[] =
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 } 607 }
590 608
591 void DependentSetup::RunPreMessageLoop() { 609 void DependentSetup::RunPreMessageLoop() {
592 CommonSetup::RunPreMessageLoop(); 610 CommonSetup::RunPreMessageLoop();
593 } 611 }
594 612
595 bool DependentSetup::RunPostMessageLoop() { 613 bool DependentSetup::RunPostMessageLoop() {
596 return CommonSetup::RunPostMessageLoop(); 614 return CommonSetup::RunPostMessageLoop();
597 } 615 }
598 616
OLDNEW
« no previous file with comments | « tools/gn/setup.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698