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
3 // found in the LICENSE file.
5 #include "tools/gn/commands.h"
6 #include "tools/gn/filesystem_utils.h"
7 #include "tools/gn/item.h"
8 #include "tools/gn/label.h"
9 #include "tools/gn/setup.h"
10 #include "tools/gn/standard_out.h"
11 #include "tools/gn/target.h"
15 CommandInfo::CommandInfo()
21 CommandInfo::CommandInfo(const char* in_help_short
,
23 CommandRunner in_runner
)
24 : help_short(in_help_short
),
29 const CommandInfoMap
& GetCommands() {
30 static CommandInfoMap info_map
;
31 if (info_map
.empty()) {
32 #define INSERT_COMMAND(cmd) \
33 info_map[k##cmd] = CommandInfo(k##cmd##_HelpShort, \
49 const Target
* GetTargetForDesc(const std::vector
<std::string
>& args
) {
50 // Deliberately leaked to avoid expensive process teardown.
51 Setup
* setup
= new Setup
;
52 // TODO(brettw) bug 343726: Use a temporary directory instead of this
53 // default one to avoid messing up any build that's in there.
54 if (!setup
->DoSetup("//out/Default/"))
57 // Do the actual load. This will also write out the target ninja files.
61 // Need to resolve the label after we know the default toolchain.
62 Label default_toolchain
= setup
->loader()->default_toolchain_label();
63 Value
arg_value(NULL
, args
[0]);
65 Label label
= Label::Resolve(SourceDirForCurrentDirectory(
66 setup
->build_settings().root_path()),
67 default_toolchain
, arg_value
, &err
);
68 if (err
.has_error()) {
73 const Item
* item
= setup
->builder()->GetItem(label
);
75 Err(Location(), "Label not found.",
76 label
.GetUserVisibleName(false) + " not found.").PrintToStdout();
80 const Target
* target
= item
->AsTarget();
82 Err(Location(), "Not a target.",
83 "The \"" + label
.GetUserVisibleName(false) + "\" thing\n"
84 "is not a target. Somebody should probably implement this command for "
85 "other\nitem types.");
92 } // namespace commands