| // 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_ |