|  | // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef TOOLS_GN_COMMANDS_H_ | 
|  | #define TOOLS_GN_COMMANDS_H_ | 
|  |  | 
|  | #include <map> | 
|  | #include <set> | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/strings/string_piece.h" | 
|  | #include "base/values.h" | 
|  | #include "tools/gn/target.h" | 
|  | #include "tools/gn/unique_vector.h" | 
|  |  | 
|  | class BuildSettings; | 
|  | class Config; | 
|  | class LabelPattern; | 
|  | class Setup; | 
|  | class SourceFile; | 
|  | class Target; | 
|  | class Toolchain; | 
|  |  | 
|  | // Each "Run" command returns the value we should return from main(). | 
|  |  | 
|  | namespace commands { | 
|  |  | 
|  | typedef int (*CommandRunner)(const std::vector<std::string>&); | 
|  |  | 
|  | extern const char kAnalyze[]; | 
|  | extern const char kAnalyze_HelpShort[]; | 
|  | extern const char kAnalyze_Help[]; | 
|  | int RunAnalyze(const std::vector<std::string>& args); | 
|  |  | 
|  | extern const char kArgs[]; | 
|  | extern const char kArgs_HelpShort[]; | 
|  | extern const char kArgs_Help[]; | 
|  | int RunArgs(const std::vector<std::string>& args); | 
|  |  | 
|  | extern const char kCheck[]; | 
|  | extern const char kCheck_HelpShort[]; | 
|  | extern const char kCheck_Help[]; | 
|  | int RunCheck(const std::vector<std::string>& args); | 
|  |  | 
|  | extern const char kClean[]; | 
|  | extern const char kClean_HelpShort[]; | 
|  | extern const char kClean_Help[]; | 
|  | int RunClean(const std::vector<std::string>& args); | 
|  |  | 
|  | extern const char kDesc[]; | 
|  | extern const char kDesc_HelpShort[]; | 
|  | extern const char kDesc_Help[]; | 
|  | int RunDesc(const std::vector<std::string>& args); | 
|  |  | 
|  | extern const char kGen[]; | 
|  | extern const char kGen_HelpShort[]; | 
|  | extern const char kGen_Help[]; | 
|  | int RunGen(const std::vector<std::string>& args); | 
|  |  | 
|  | extern const char kFormat[]; | 
|  | extern const char kFormat_HelpShort[]; | 
|  | extern const char kFormat_Help[]; | 
|  | int RunFormat(const std::vector<std::string>& args); | 
|  |  | 
|  | extern const char kHelp[]; | 
|  | extern const char kHelp_HelpShort[]; | 
|  | extern const char kHelp_Help[]; | 
|  | int RunHelp(const std::vector<std::string>& args); | 
|  |  | 
|  | extern const char kLs[]; | 
|  | extern const char kLs_HelpShort[]; | 
|  | extern const char kLs_Help[]; | 
|  | int RunLs(const std::vector<std::string>& args); | 
|  |  | 
|  | extern const char kPath[]; | 
|  | extern const char kPath_HelpShort[]; | 
|  | extern const char kPath_Help[]; | 
|  | int RunPath(const std::vector<std::string>& args); | 
|  |  | 
|  | extern const char kRefs[]; | 
|  | extern const char kRefs_HelpShort[]; | 
|  | extern const char kRefs_Help[]; | 
|  | int RunRefs(const std::vector<std::string>& args); | 
|  |  | 
|  | // ----------------------------------------------------------------------------- | 
|  |  | 
|  | struct CommandInfo { | 
|  | CommandInfo(); | 
|  | CommandInfo(const char* in_help_short, | 
|  | const char* in_help, | 
|  | CommandRunner in_runner); | 
|  |  | 
|  | const char* help_short; | 
|  | const char* help; | 
|  | CommandRunner runner; | 
|  | }; | 
|  |  | 
|  | typedef std::map<base::StringPiece, CommandInfo> CommandInfoMap; | 
|  |  | 
|  | const CommandInfoMap& GetCommands(); | 
|  |  | 
|  | // Helper functions for some commands ------------------------------------------ | 
|  |  | 
|  | // Given a setup that has already been run and some command-line input, | 
|  | // resolves that input as a target label and returns the corresponding target. | 
|  | // On failure, returns null and prints the error to the standard output. | 
|  | const Target* ResolveTargetFromCommandLineString( | 
|  | Setup* setup, | 
|  | const std::string& label_string); | 
|  |  | 
|  | // Resolves a vector of command line inputs and figures out the full set of | 
|  | // things they resolve to. | 
|  | // | 
|  | // Patterns with wildcards will only match targets. The file_matches aren't | 
|  | // validated that they are real files or referenced by any targets. They're just | 
|  | // the set of things that didn't match anything else. | 
|  | bool ResolveFromCommandLineInput( | 
|  | Setup* setup, | 
|  | const std::vector<std::string>& input, | 
|  | bool all_toolchains, | 
|  | UniqueVector<const Target*>* target_matches, | 
|  | UniqueVector<const Config*>* config_matches, | 
|  | UniqueVector<const Toolchain*>* toolchain_matches, | 
|  | UniqueVector<SourceFile>* file_matches); | 
|  |  | 
|  | // Runs the header checker. All targets in the build should be given in | 
|  | // all_targets, and the specific targets to check should be in to_check. | 
|  | // | 
|  | // force_check, if true, will override targets opting out of header checking | 
|  | // with "check_includes = false" and will check them anyway. | 
|  | // | 
|  | // On success, returns true. If the check fails, the error(s) will be printed | 
|  | // to stdout and false will be returned. | 
|  | bool CheckPublicHeaders(const BuildSettings* build_settings, | 
|  | const std::vector<const Target*>& all_targets, | 
|  | const std::vector<const Target*>& to_check, | 
|  | bool force_check); | 
|  |  | 
|  | // Filters the given list of targets by the given pattern list. | 
|  | void FilterTargetsByPatterns(const std::vector<const Target*>& input, | 
|  | const std::vector<LabelPattern>& filter, | 
|  | std::vector<const Target*>* output); | 
|  | void FilterTargetsByPatterns(const std::vector<const Target*>& input, | 
|  | const std::vector<LabelPattern>& filter, | 
|  | UniqueVector<const Target*>* output); | 
|  |  | 
|  | // Builds a list of pattern from a semicolon-separated list of labels. | 
|  | bool FilterPatternsFromString(const BuildSettings* build_settings, | 
|  | const std::string& label_list_string, | 
|  | std::vector<LabelPattern>* filters, | 
|  | Err* err); | 
|  |  | 
|  | // These are the documentation strings for the command-line flags used by | 
|  | // FilterAndPrintTargets. Commands that call that function should incorporate | 
|  | // these into their help. | 
|  | #define TARGET_PRINTING_MODE_COMMAND_LINE_HELP \ | 
|  | "  --as=(buildfile|label|output)\n"\ | 
|  | "      How to print targets.\n"\ | 
|  | "\n"\ | 
|  | "      buildfile\n"\ | 
|  | "          Prints the build files where the given target was declared as\n"\ | 
|  | "          file names.\n"\ | 
|  | "      label  (default)\n"\ | 
|  | "          Prints the label of the target.\n"\ | 
|  | "      output\n"\ | 
|  | "          Prints the first output file for the target relative to the\n"\ | 
|  | "          root build directory.\n" | 
|  | #define TARGET_TYPE_FILTER_COMMAND_LINE_HELP \ | 
|  | "  --type=(action|copy|executable|group|loadable_module|shared_library|\n"\ | 
|  | "          source_set|static_library)\n"\ | 
|  | "      Restrict outputs to targets matching the given type. If\n"\ | 
|  | "      unspecified, no filtering will be performed.\n" | 
|  | #define TARGET_TESTONLY_FILTER_COMMAND_LINE_HELP \ | 
|  | "  --testonly=(true|false)\n"\ | 
|  | "      Restrict outputs to targets with the testonly flag set\n"\ | 
|  | "      accordingly. When unspecified, the target's testonly flags are\n"\ | 
|  | "      ignored.\n" | 
|  |  | 
|  | // Applies any testonly and type filters specified on the command line, | 
|  | // and prints the targets as specified by the --as command line flag. | 
|  | // | 
|  | // If indent is true, the results will be indented two spaces. | 
|  | // | 
|  | // The vector will be modified so that only the printed targets will remain. | 
|  | void FilterAndPrintTargets(bool indent, std::vector<const Target*>* targets); | 
|  | void FilterAndPrintTargets(std::vector<const Target*>* targets, | 
|  | base::ListValue* out); | 
|  |  | 
|  | void FilterAndPrintTargetSet(bool indent, | 
|  | const std::set<const Target*>& targets); | 
|  | void FilterAndPrintTargetSet(const std::set<const Target*>& targets, | 
|  | base::ListValue* out); | 
|  |  | 
|  | // Extra help from command_check.cc | 
|  | extern const char kNoGnCheck_Help[]; | 
|  |  | 
|  | }  // namespace commands | 
|  |  | 
|  | #endif  // TOOLS_GN_COMMANDS_H_ |