| 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/setup.h" | 5 #include "tools/gn/setup.h" |
| 6 | 6 |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <sstream> | 9 #include <sstream> |
| 10 #include <utility> | 10 #include <utility> |
| 11 | 11 |
| 12 #include "base/bind.h" | 12 #include "base/bind.h" |
| 13 #include "base/command_line.h" | 13 #include "base/command_line.h" |
| 14 #include "base/files/file_path.h" | 14 #include "base/files/file_path.h" |
| 15 #include "base/files/file_util.h" | 15 #include "base/files/file_util.h" |
| 16 #include "base/memory/ref_counted.h" |
| 16 #include "base/process/launch.h" | 17 #include "base/process/launch.h" |
| 17 #include "base/single_thread_task_runner.h" | 18 #include "base/single_thread_task_runner.h" |
| 18 #include "base/strings/string_split.h" | 19 #include "base/strings/string_split.h" |
| 19 #include "base/strings/string_util.h" | 20 #include "base/strings/string_util.h" |
| 20 #include "base/strings/sys_string_conversions.h" | 21 #include "base/strings/sys_string_conversions.h" |
| 21 #include "base/strings/utf_string_conversions.h" | 22 #include "base/strings/utf_string_conversions.h" |
| 22 #include "build/build_config.h" | 23 #include "build/build_config.h" |
| 23 #include "tools/gn/commands.h" | 24 #include "tools/gn/commands.h" |
| 24 #include "tools/gn/filesystem_utils.h" | 25 #include "tools/gn/filesystem_utils.h" |
| 25 #include "tools/gn/input_file.h" | 26 #include "tools/gn/input_file.h" |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 | 133 |
| 133 base::FilePath with_no_slash = current_dir.StripTrailingSeparators(); | 134 base::FilePath with_no_slash = current_dir.StripTrailingSeparators(); |
| 134 base::FilePath up_one_dir = with_no_slash.DirName(); | 135 base::FilePath up_one_dir = with_no_slash.DirName(); |
| 135 if (up_one_dir == current_dir) | 136 if (up_one_dir == current_dir) |
| 136 return base::FilePath(); // Got to the top. | 137 return base::FilePath(); // Got to the top. |
| 137 | 138 |
| 138 return FindDotFile(up_one_dir); | 139 return FindDotFile(up_one_dir); |
| 139 } | 140 } |
| 140 | 141 |
| 141 // Called on any thread. Post the item to the builder on the main thread. | 142 // Called on any thread. Post the item to the builder on the main thread. |
| 142 void ItemDefinedCallback(base::MessageLoop* main_loop, | 143 void ItemDefinedCallback( |
| 143 scoped_refptr<Builder> builder, | 144 scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| 144 std::unique_ptr<Item> item) { | 145 scoped_refptr<Builder> builder, |
| 146 std::unique_ptr<Item> item) { |
| 145 DCHECK(item); | 147 DCHECK(item); |
| 146 main_loop->task_runner()->PostTask( | 148 task_runner->PostTask(FROM_HERE, base::Bind(&Builder::ItemDefined, builder, |
| 147 FROM_HERE, | 149 base::Passed(&item))); |
| 148 base::Bind(&Builder::ItemDefined, builder, base::Passed(&item))); | |
| 149 } | 150 } |
| 150 | 151 |
| 151 void DecrementWorkCount() { | 152 void DecrementWorkCount() { |
| 152 g_scheduler->DecrementWorkCount(); | 153 g_scheduler->DecrementWorkCount(); |
| 153 } | 154 } |
| 154 | 155 |
| 155 #if defined(OS_WIN) | 156 #if defined(OS_WIN) |
| 156 | 157 |
| 157 // Given the path to a batch file that runs Python, extracts the name of the | 158 // Given the path to a batch file that runs Python, extracts the name of the |
| 158 // executable actually implementing Python. Generally people write a batch file | 159 // executable actually implementing Python. Generally people write a batch file |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 : build_settings_(), | 252 : build_settings_(), |
| 252 loader_(new LoaderImpl(&build_settings_)), | 253 loader_(new LoaderImpl(&build_settings_)), |
| 253 builder_(new Builder(loader_.get())), | 254 builder_(new Builder(loader_.get())), |
| 254 root_build_file_("//BUILD.gn"), | 255 root_build_file_("//BUILD.gn"), |
| 255 check_public_headers_(false), | 256 check_public_headers_(false), |
| 256 dotfile_settings_(&build_settings_, std::string()), | 257 dotfile_settings_(&build_settings_, std::string()), |
| 257 dotfile_scope_(&dotfile_settings_), | 258 dotfile_scope_(&dotfile_settings_), |
| 258 fill_arguments_(true) { | 259 fill_arguments_(true) { |
| 259 dotfile_settings_.set_toolchain_label(Label()); | 260 dotfile_settings_.set_toolchain_label(Label()); |
| 260 build_settings_.set_item_defined_callback( | 261 build_settings_.set_item_defined_callback( |
| 261 base::Bind(&ItemDefinedCallback, scheduler_.main_loop(), builder_)); | 262 base::Bind(&ItemDefinedCallback, scheduler_.task_runner(), builder_)); |
| 262 | 263 |
| 263 loader_->set_complete_callback(base::Bind(&DecrementWorkCount)); | 264 loader_->set_complete_callback(base::Bind(&DecrementWorkCount)); |
| 264 // The scheduler's main loop wasn't created when the Loader was created, so | 265 // The scheduler's task runner wasn't created when the Loader was created, so |
| 265 // we need to set it now. | 266 // we need to set it now. |
| 266 loader_->set_main_loop(scheduler_.main_loop()); | 267 loader_->set_task_runner(scheduler_.task_runner()); |
| 267 } | 268 } |
| 268 | 269 |
| 269 Setup::~Setup() { | 270 Setup::~Setup() { |
| 270 } | 271 } |
| 271 | 272 |
| 272 bool Setup::DoSetup(const std::string& build_dir, bool force_create) { | 273 bool Setup::DoSetup(const std::string& build_dir, bool force_create) { |
| 273 base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess(); | 274 base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess(); |
| 274 | 275 |
| 275 scheduler_.set_verbose_logging(cmdline->HasSwitch(switches::kVerbose)); | 276 scheduler_.set_verbose_logging(cmdline->HasSwitch(switches::kVerbose)); |
| 276 if (cmdline->HasSwitch(switches::kTime) || | 277 if (cmdline->HasSwitch(switches::kTime) || |
| (...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 if (err.has_error()) { | 734 if (err.has_error()) { |
| 734 err.PrintToStdout(); | 735 err.PrintToStdout(); |
| 735 return false; | 736 return false; |
| 736 } | 737 } |
| 737 } | 738 } |
| 738 build_settings_.set_exec_script_whitelist(std::move(whitelist)); | 739 build_settings_.set_exec_script_whitelist(std::move(whitelist)); |
| 739 } | 740 } |
| 740 | 741 |
| 741 return true; | 742 return true; |
| 742 } | 743 } |
| OLD | NEW |