Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(280)

Unified Diff: tools/gn/commands.h

Issue 937003002: Enhance GN introspection (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/gn/commands.h
diff --git a/tools/gn/commands.h b/tools/gn/commands.h
index b64a9b86c1c758ed32ac16afe65aaeb310daf8dd..dd2cb1b03387e8d357848403984438d0d85ac680 100644
--- a/tools/gn/commands.h
+++ b/tools/gn/commands.h
@@ -6,15 +6,21 @@
#define TOOLS_GN_COMMANDS_H_
#include <map>
+#include <set>
#include <string>
#include <vector>
#include "base/strings/string_piece.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().
@@ -93,18 +99,20 @@ const Target* ResolveTargetFromCommandLineString(
Setup* setup,
const std::string& label_string);
-// Like above but the input string can be a pattern that matches multiple
-// targets. If the input does not parse as a pattern, prints and error and
-// returns false. If the pattern is valid, fills the vector (which might be
-// empty if there are no matches) and returns true.
+// Resolves a vector of command line inputs and figures out the full set of
+// things they resolve to.
//
-// If all_tolchains is false, a pattern with an unspecified toolchain will
-// match the default toolchain only. If true, all toolchains will be matched.
-bool ResolveTargetsFromCommandLinePattern(
+// 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::string& label_pattern,
+ const std::vector<std::string>& input,
bool all_toolchains,
- std::vector<const Target*>* matches);
+ 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.
@@ -119,13 +127,50 @@ bool CheckPublicHeaders(const BuildSettings* build_settings,
const std::vector<const Target*>& to_check,
bool force_check);
-// Filters the given list of targets by the given pattern list. This is a
-// helper function for setting up a call to CheckPublicHeaders based on a check
-// filter.
+// 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);
+
+// 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"\
+ " current directory.\n"
+#define TARGET_TYPE_FILTER_COMMAND_LINE_HELP \
+ " --type=(action|copy|executable|group|shared_library|source_set|\n"\
+ " 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"\
scottmg 2015/02/19 21:52:01 seems a bit weird to have this be a true|false whe
brettw 2015/02/19 22:12:02 The default isn't false, the default is "don't che
+ " 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 FilterAndPrintTargetSet(bool indent,
+ const std::set<const Target*>& targets);
} // namespace commands
-#endif // TOOLS_GN_COMMANDS_H_
+#endif // TOOLS_GN_COMMANDS_H

Powered by Google App Engine
This is Rietveld 408576698