| Index: tools/gn/test_with_scope.cc
|
| diff --git a/tools/gn/test_with_scope.cc b/tools/gn/test_with_scope.cc
|
| index 55fbc2eb8fa3c1ca33d33c1eeefec8bb580acc7d..06f4d0476b15868d0417692aa66e0346992bbeea 100644
|
| --- a/tools/gn/test_with_scope.cc
|
| +++ b/tools/gn/test_with_scope.cc
|
| @@ -8,6 +8,19 @@
|
| #include "tools/gn/parser.h"
|
| #include "tools/gn/tokenizer.h"
|
|
|
| +namespace {
|
| +
|
| +void SetCommandForTool(const std::string& cmd, Tool* tool) {
|
| + Err err;
|
| + SubstitutionPattern command;
|
| + command.Parse(cmd, NULL, &err);
|
| + CHECK(!err.has_error())
|
| + << "Couldn't parse \"" << cmd << "\", " << "got " << err.message();
|
| + tool->set_command(command);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| TestWithScope::TestWithScope()
|
| : build_settings_(),
|
| settings_(&build_settings_, std::string()),
|
| @@ -19,11 +32,98 @@ TestWithScope::TestWithScope()
|
|
|
| settings_.set_toolchain_label(toolchain_.label());
|
| settings_.set_default_toolchain_label(toolchain_.label());
|
| +
|
| + SetupToolchain(&toolchain_);
|
| }
|
|
|
| TestWithScope::~TestWithScope() {
|
| }
|
|
|
| +// static
|
| +void TestWithScope::SetupToolchain(Toolchain* toolchain) {
|
| + Err err;
|
| +
|
| + // CC
|
| + scoped_ptr<Tool> cc_tool(new Tool);
|
| + SetCommandForTool(
|
| + "cc {{source}} {{cflags}} {{cflags_c}} {{defines}} {{include_dirs}} "
|
| + "-o {{output}}",
|
| + cc_tool.get());
|
| + cc_tool->set_outputs(SubstitutionList::MakeForTest(
|
| + "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o"));
|
| + toolchain->SetTool(Toolchain::TYPE_CC, cc_tool.Pass());
|
| +
|
| + // CXX
|
| + scoped_ptr<Tool> cxx_tool(new Tool);
|
| + SetCommandForTool(
|
| + "c++ {{source}} {{cflags}} {{cflags_cc}} {{defines}} {{include_dirs}} "
|
| + "-o {{output}}",
|
| + cxx_tool.get());
|
| + cxx_tool->set_outputs(SubstitutionList::MakeForTest(
|
| + "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o"));
|
| + toolchain->SetTool(Toolchain::TYPE_CXX, cxx_tool.Pass());
|
| +
|
| + // OBJC
|
| + scoped_ptr<Tool> objc_tool(new Tool);
|
| + SetCommandForTool(
|
| + "objcc {{source}} {{cflags}} {{cflags_objc}} {{defines}} "
|
| + "{{include_dirs}} -o {{output}}",
|
| + objc_tool.get());
|
| + objc_tool->set_outputs(SubstitutionList::MakeForTest(
|
| + "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o"));
|
| + toolchain->SetTool(Toolchain::TYPE_OBJC, objc_tool.Pass());
|
| +
|
| + // OBJC
|
| + scoped_ptr<Tool> objcxx_tool(new Tool);
|
| + SetCommandForTool(
|
| + "objcxx {{source}} {{cflags}} {{cflags_objcc}} {{defines}} "
|
| + "{{include_dirs}} -o {{output}}",
|
| + objcxx_tool.get());
|
| + objcxx_tool->set_outputs(SubstitutionList::MakeForTest(
|
| + "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o"));
|
| + toolchain->SetTool(Toolchain::TYPE_OBJCXX, objcxx_tool.Pass());
|
| +
|
| + // Don't use RC and ASM tools in unit tests yet. Add here if needed.
|
| +
|
| + // ALINK
|
| + scoped_ptr<Tool> alink_tool(new Tool);
|
| + SetCommandForTool("ar {{output}} {{source}}", alink_tool.get());
|
| + alink_tool->set_output_prefix("lib");
|
| + alink_tool->set_outputs(SubstitutionList::MakeForTest(
|
| + "{{target_out_dir}}/{{target_output_name}}.a"));
|
| + toolchain->SetTool(Toolchain::TYPE_ALINK, alink_tool.Pass());
|
| +
|
| + // SOLINK
|
| + scoped_ptr<Tool> solink_tool(new Tool);
|
| + SetCommandForTool("ld -shared -o {{target_output_name}}.so {{inputs}} "
|
| + "{{ldflags}} {{libs}}", solink_tool.get());
|
| + solink_tool->set_output_prefix("lib");
|
| + solink_tool->set_default_output_extension(".so");
|
| + solink_tool->set_outputs(SubstitutionList::MakeForTest(
|
| + "{{root_out_dir}}/{{target_output_name}}{{output_extension}}"));
|
| + toolchain->SetTool(Toolchain::TYPE_SOLINK, solink_tool.Pass());
|
| +
|
| + // LINK
|
| + scoped_ptr<Tool> link_tool(new Tool);
|
| + SetCommandForTool("ld -o {{target_output_name}} {{source}} "
|
| + "{{ldflags}} {{libs}}", link_tool.get());
|
| + link_tool->set_outputs(SubstitutionList::MakeForTest(
|
| + "{{root_out_dir}}/{{target_output_name}}"));
|
| + toolchain->SetTool(Toolchain::TYPE_LINK, link_tool.Pass());
|
| +
|
| + // STAMP
|
| + scoped_ptr<Tool> stamp_tool(new Tool);
|
| + SetCommandForTool("touch {{output}}", stamp_tool.get());
|
| + toolchain->SetTool(Toolchain::TYPE_STAMP, stamp_tool.Pass());
|
| +
|
| + // COPY
|
| + scoped_ptr<Tool> copy_tool(new Tool);
|
| + SetCommandForTool("cp {{source}} {{output}}", copy_tool.get());
|
| + toolchain->SetTool(Toolchain::TYPE_COPY, copy_tool.Pass());
|
| +
|
| + toolchain->ToolchainSetupComplete();
|
| +}
|
| +
|
| void TestWithScope::AppendPrintOutput(const std::string& str) {
|
| print_output_.append(str);
|
| }
|
|
|