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

Side by Side Diff: third_party/protobuf/src/google/protobuf/compiler/command_line_interface.h

Issue 2590803003: Revert "third_party/protobuf: Update to HEAD (83d681ee2c)" (Closed)
Patch Set: Created 3 years, 12 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 unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 48
49 namespace google { 49 namespace google {
50 namespace protobuf { 50 namespace protobuf {
51 51
52 class Descriptor; // descriptor.h 52 class Descriptor; // descriptor.h
53 class DescriptorPool; // descriptor.h 53 class DescriptorPool; // descriptor.h
54 class FileDescriptor; // descriptor.h 54 class FileDescriptor; // descriptor.h
55 class FileDescriptorProto; // descriptor.pb.h 55 class FileDescriptorProto; // descriptor.pb.h
56 template<typename T> class RepeatedPtrField; // repeated_field.h 56 template<typename T> class RepeatedPtrField; // repeated_field.h
57 57
58 } // namespace protobuf
59
60 namespace protobuf {
61 namespace compiler { 58 namespace compiler {
62 59
63 class CodeGenerator; // code_generator.h 60 class CodeGenerator; // code_generator.h
64 class GeneratorContext; // code_generator.h 61 class GeneratorContext; // code_generator.h
65 class DiskSourceTree; // importer.h 62 class DiskSourceTree; // importer.h
66 63
67 // This class implements the command-line interface to the protocol compiler. 64 // This class implements the command-line interface to the protocol compiler.
68 // It is designed to make it very easy to create a custom protocol compiler 65 // It is designed to make it very easy to create a custom protocol compiler
69 // supporting the languages of your choice. For example, if you wanted to 66 // supporting the languages of your choice. For example, if you wanted to
70 // create a custom protocol compiler binary which includes both the regular 67 // create a custom protocol compiler binary which includes both the regular
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 // 134 //
138 // The compiler determines the executable name to search for by concatenating 135 // The compiler determines the executable name to search for by concatenating
139 // exe_name_prefix with the unrecognized flag name, removing "_out". So, for 136 // exe_name_prefix with the unrecognized flag name, removing "_out". So, for
140 // example, if exe_name_prefix is "protoc-" and you pass the flag --foo_out, 137 // example, if exe_name_prefix is "protoc-" and you pass the flag --foo_out,
141 // the compiler will try to run the program "protoc-foo". 138 // the compiler will try to run the program "protoc-foo".
142 // 139 //
143 // The plugin program should implement the following usage: 140 // The plugin program should implement the following usage:
144 // plugin [--out=OUTDIR] [--parameter=PARAMETER] PROTO_FILES < DESCRIPTORS 141 // plugin [--out=OUTDIR] [--parameter=PARAMETER] PROTO_FILES < DESCRIPTORS
145 // --out indicates the output directory (as passed to the --foo_out 142 // --out indicates the output directory (as passed to the --foo_out
146 // parameter); if omitted, the current directory should be used. --parameter 143 // parameter); if omitted, the current directory should be used. --parameter
147 // gives the generator parameter, if any was provided (see below). The 144 // gives the generator parameter, if any was provided. The PROTO_FILES list
148 // PROTO_FILES list the .proto files which were given on the compiler 145 // the .proto files which were given on the compiler command-line; these are
149 // command-line; these are the files for which the plugin is expected to 146 // the files for which the plugin is expected to generate output code.
150 // generate output code. Finally, DESCRIPTORS is an encoded FileDescriptorSet 147 // Finally, DESCRIPTORS is an encoded FileDescriptorSet (as defined in
151 // (as defined in descriptor.proto). This is piped to the plugin's stdin. 148 // descriptor.proto). This is piped to the plugin's stdin. The set will
152 // The set will include descriptors for all the files listed in PROTO_FILES as 149 // include descriptors for all the files listed in PROTO_FILES as well as
153 // well as all files that they import. The plugin MUST NOT attempt to read 150 // all files that they import. The plugin MUST NOT attempt to read the
154 // the PROTO_FILES directly -- it must use the FileDescriptorSet. 151 // PROTO_FILES directly -- it must use the FileDescriptorSet.
155 // 152 //
156 // The plugin should generate whatever files are necessary, as code generators 153 // The plugin should generate whatever files are necessary, as code generators
157 // normally do. It should write the names of all files it generates to 154 // normally do. It should write the names of all files it generates to
158 // stdout. The names should be relative to the output directory, NOT absolute 155 // stdout. The names should be relative to the output directory, NOT absolute
159 // names or relative to the current directory. If any errors occur, error 156 // names or relative to the current directory. If any errors occur, error
160 // messages should be written to stderr. If an error is fatal, the plugin 157 // messages should be written to stderr. If an error is fatal, the plugin
161 // should exit with a non-zero exit code. 158 // should exit with a non-zero exit code.
162 //
163 // Plugins can have generator parameters similar to normal built-in
164 // generators. Extra generator parameters can be passed in via a matching
165 // "_opt" parameter. For example:
166 // protoc --plug_out=enable_bar:outdir --plug_opt=enable_baz
167 // This will pass "enable_bar,enable_baz" as the parameter to the plugin.
168 //
169 void AllowPlugins(const string& exe_name_prefix); 159 void AllowPlugins(const string& exe_name_prefix);
170 160
171 // Run the Protocol Compiler with the given command-line parameters. 161 // Run the Protocol Compiler with the given command-line parameters.
172 // Returns the error code which should be returned by main(). 162 // Returns the error code which should be returned by main().
173 // 163 //
174 // It may not be safe to call Run() in a multi-threaded environment because 164 // It may not be safe to call Run() in a multi-threaded environment because
175 // it calls strerror(). I'm not sure why you'd want to do this anyway. 165 // it calls strerror(). I'm not sure why you'd want to do this anyway.
176 int Run(int argc, const char* const argv[]); 166 int Run(int argc, const char* const argv[]);
177 167
178 // Call SetInputsAreCwdRelative(true) if the input files given on the command 168 // Call SetInputsAreCwdRelative(true) if the input files given on the command
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 228
239 // Interprets arguments parsed with ParseArgument. 229 // Interprets arguments parsed with ParseArgument.
240 ParseArgumentStatus InterpretArgument(const string& name, 230 ParseArgumentStatus InterpretArgument(const string& name,
241 const string& value); 231 const string& value);
242 232
243 // Print the --help text to stderr. 233 // Print the --help text to stderr.
244 void PrintHelpText(); 234 void PrintHelpText();
245 235
246 // Generate the given output file from the given input. 236 // Generate the given output file from the given input.
247 struct OutputDirective; // see below 237 struct OutputDirective; // see below
248 bool GenerateOutput(const std::vector<const FileDescriptor*>& parsed_files, 238 bool GenerateOutput(const vector<const FileDescriptor*>& parsed_files,
249 const OutputDirective& output_directive, 239 const OutputDirective& output_directive,
250 GeneratorContext* generator_context); 240 GeneratorContext* generator_context);
251 bool GeneratePluginOutput( 241 bool GeneratePluginOutput(const vector<const FileDescriptor*>& parsed_files,
252 const std::vector<const FileDescriptor*>& parsed_files, 242 const string& plugin_name,
253 const string& plugin_name, const string& parameter, 243 const string& parameter,
254 GeneratorContext* generator_context, string* error); 244 GeneratorContext* generator_context,
245 string* error);
255 246
256 // Implements --encode and --decode. 247 // Implements --encode and --decode.
257 bool EncodeOrDecode(const DescriptorPool* pool); 248 bool EncodeOrDecode(const DescriptorPool* pool);
258 249
259 // Implements the --descriptor_set_out option. 250 // Implements the --descriptor_set_out option.
260 bool WriteDescriptorSet( 251 bool WriteDescriptorSet(const vector<const FileDescriptor*> parsed_files);
261 const std::vector<const FileDescriptor*> parsed_files);
262 252
263 // Implements the --dependency_out option 253 // Implements the --dependency_out option
264 bool GenerateDependencyManifestFile( 254 bool GenerateDependencyManifestFile(
265 const std::vector<const FileDescriptor*>& parsed_files, 255 const vector<const FileDescriptor*>& parsed_files,
266 const GeneratorContextMap& output_directories, 256 const GeneratorContextMap& output_directories,
267 DiskSourceTree* source_tree); 257 DiskSourceTree* source_tree);
268 258
269 // Get all transitive dependencies of the given file (including the file 259 // Get all transitive dependencies of the given file (including the file
270 // itself), adding them to the given list of FileDescriptorProtos. The 260 // itself), adding them to the given list of FileDescriptorProtos. The
271 // protos will be ordered such that every file is listed before any file that 261 // protos will be ordered such that every file is listed before any file that
272 // depends on it, so that you can call DescriptorPool::BuildFile() on them 262 // depends on it, so that you can call DescriptorPool::BuildFile() on them
273 // in order. Any files in *already_seen will not be added, and each file 263 // in order. Any files in *already_seen will not be added, and each file
274 // added will be inserted into *already_seen. If include_source_code_info is 264 // added will be inserted into *already_seen. If include_source_code_info is
275 // true then include the source code information in the FileDescriptorProtos. 265 // true then include the source code information in the FileDescriptorProtos.
276 // If include_json_name is true, populate the json_name field of 266 // If include_json_name is true, populate the json_name field of
277 // FieldDescriptorProto for all fields. 267 // FieldDescriptorProto for all fields.
278 static void GetTransitiveDependencies( 268 static void GetTransitiveDependencies(
279 const FileDescriptor* file, 269 const FileDescriptor* file,
280 bool include_json_name, 270 bool include_json_name,
281 bool include_source_code_info, 271 bool include_source_code_info,
282 std::set<const FileDescriptor*>* already_seen, 272 set<const FileDescriptor*>* already_seen,
283 RepeatedPtrField<FileDescriptorProto>* output); 273 RepeatedPtrField<FileDescriptorProto>* output);
284 274
285 // Implements the --print_free_field_numbers. This function prints free field 275 // Implements the --print_free_field_numbers. This function prints free field
286 // numbers into stdout for the message and it's nested message types in 276 // numbers into stdout for the message and it's nested message types in
287 // post-order, i.e. nested types first. Printed range are left-right 277 // post-order, i.e. nested types first. Printed range are left-right
288 // inclusive, i.e. [a, b]. 278 // inclusive, i.e. [a, b].
289 // 279 //
290 // Groups: 280 // Groups:
291 // For historical reasons, groups are considered to share the same 281 // For historical reasons, groups are considered to share the same
292 // field number space with the parent message, thus it will not print free 282 // field number space with the parent message, thus it will not print free
(...skipping 13 matching lines...) Expand all
306 // Version info set with SetVersionInfo(). 296 // Version info set with SetVersionInfo().
307 string version_info_; 297 string version_info_;
308 298
309 // Registered generators. 299 // Registered generators.
310 struct GeneratorInfo { 300 struct GeneratorInfo {
311 string flag_name; 301 string flag_name;
312 string option_flag_name; 302 string option_flag_name;
313 CodeGenerator* generator; 303 CodeGenerator* generator;
314 string help_text; 304 string help_text;
315 }; 305 };
316 typedef std::map<string, GeneratorInfo> GeneratorMap; 306 typedef map<string, GeneratorInfo> GeneratorMap;
317 GeneratorMap generators_by_flag_name_; 307 GeneratorMap generators_by_flag_name_;
318 GeneratorMap generators_by_option_name_; 308 GeneratorMap generators_by_option_name_;
319 // A map from generator names to the parameters specified using the option 309 // A map from generator names to the parameters specified using the option
320 // flag. For example, if the user invokes the compiler with: 310 // flag. For example, if the user invokes the compiler with:
321 // protoc --foo_out=outputdir --foo_opt=enable_bar ... 311 // protoc --foo_out=outputdir --foo_opt=enable_bar ...
322 // Then there will be an entry ("--foo_out", "enable_bar") in this map. 312 // Then there will be an entry ("--foo_out", "enable_bar") in this map.
323 std::map<string, string> generator_parameters_; 313 map<string, string> generator_parameters_;
324 // Similar to generator_parameters_, but stores the parameters for plugins.
325 std::map<string, string> plugin_parameters_;
326 314
327 // See AllowPlugins(). If this is empty, plugins aren't allowed. 315 // See AllowPlugins(). If this is empty, plugins aren't allowed.
328 string plugin_prefix_; 316 string plugin_prefix_;
329 317
330 // Maps specific plugin names to files. When executing a plugin, this map 318 // Maps specific plugin names to files. When executing a plugin, this map
331 // is searched first to find the plugin executable. If not found here, the 319 // is searched first to find the plugin executable. If not found here, the
332 // PATH (or other OS-specific search strategy) is searched. 320 // PATH (or other OS-specific search strategy) is searched.
333 std::map<string, string> plugins_; 321 map<string, string> plugins_;
334 322
335 // Stuff parsed from command line. 323 // Stuff parsed from command line.
336 enum Mode { 324 enum Mode {
337 MODE_COMPILE, // Normal mode: parse .proto files and compile them. 325 MODE_COMPILE, // Normal mode: parse .proto files and compile them.
338 MODE_ENCODE, // --encode: read text from stdin, write binary to stdout. 326 MODE_ENCODE, // --encode: read text from stdin, write binary to stdout.
339 MODE_DECODE, // --decode: read binary from stdin, write text to stdout. 327 MODE_DECODE, // --decode: read binary from stdin, write text to stdout.
340 MODE_PRINT, // Print mode: print info of the given .proto files and exit. 328 MODE_PRINT, // Print mode: print info of the given .proto files and exit.
341 }; 329 };
342 330
343 Mode mode_; 331 Mode mode_;
344 332
345 enum PrintMode { 333 enum PrintMode {
346 PRINT_NONE, // Not in MODE_PRINT 334 PRINT_NONE, // Not in MODE_PRINT
347 PRINT_FREE_FIELDS, // --print_free_fields 335 PRINT_FREE_FIELDS, // --print_free_fields
348 }; 336 };
349 337
350 PrintMode print_mode_; 338 PrintMode print_mode_;
351 339
352 enum ErrorFormat { 340 enum ErrorFormat {
353 ERROR_FORMAT_GCC, // GCC error output format (default). 341 ERROR_FORMAT_GCC, // GCC error output format (default).
354 ERROR_FORMAT_MSVS // Visual Studio output (--error_format=msvs). 342 ERROR_FORMAT_MSVS // Visual Studio output (--error_format=msvs).
355 }; 343 };
356 344
357 ErrorFormat error_format_; 345 ErrorFormat error_format_;
358 346
359 std::vector<std::pair<string, string> > 347 vector<pair<string, string> > proto_path_; // Search path for proto files.
360 proto_path_; // Search path for proto files. 348 vector<string> input_files_; // Names of the input proto files.
361 std::vector<string> input_files_; // Names of the input proto files.
362
363 // Names of proto files which are allowed to be imported. Used by build
364 // systems to enforce depend-on-what-you-import.
365 std::set<string> direct_dependencies_;
366 bool direct_dependencies_explicitly_set_;
367 349
368 // output_directives_ lists all the files we are supposed to output and what 350 // output_directives_ lists all the files we are supposed to output and what
369 // generator to use for each. 351 // generator to use for each.
370 struct OutputDirective { 352 struct OutputDirective {
371 string name; // E.g. "--foo_out" 353 string name; // E.g. "--foo_out"
372 CodeGenerator* generator; // NULL for plugins 354 CodeGenerator* generator; // NULL for plugins
373 string parameter; 355 string parameter;
374 string output_location; 356 string output_location;
375 }; 357 };
376 std::vector<OutputDirective> output_directives_; 358 vector<OutputDirective> output_directives_;
377 359
378 // When using --encode or --decode, this names the type we are encoding or 360 // When using --encode or --decode, this names the type we are encoding or
379 // decoding. (Empty string indicates --decode_raw.) 361 // decoding. (Empty string indicates --decode_raw.)
380 string codec_type_; 362 string codec_type_;
381 363
382 // If --descriptor_set_out was given, this is the filename to which the 364 // If --descriptor_set_out was given, this is the filename to which the
383 // FileDescriptorSet should be written. Otherwise, empty. 365 // FileDescriptorSet should be written. Otherwise, empty.
384 string descriptor_set_name_; 366 string descriptor_set_name_;
385 367
386 // If --dependency_out was given, this is the path to the file where the 368 // If --dependency_out was given, this is the path to the file where the
(...skipping 16 matching lines...) Expand all
403 bool inputs_are_proto_path_relative_; 385 bool inputs_are_proto_path_relative_;
404 386
405 GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CommandLineInterface); 387 GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CommandLineInterface);
406 }; 388 };
407 389
408 } // namespace compiler 390 } // namespace compiler
409 } // namespace protobuf 391 } // namespace protobuf
410 392
411 } // namespace google 393 } // namespace google
412 #endif // GOOGLE_PROTOBUF_COMPILER_COMMAND_LINE_INTERFACE_H__ 394 #endif // GOOGLE_PROTOBUF_COMPILER_COMMAND_LINE_INTERFACE_H__
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698