Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nanopb/nanopb.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>2022-11-25 12:38:07 +0300
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>2022-11-25 15:06:37 +0300
commitd8b6da1cf7028aad6d584dec5afe15e2fc2d23c5 (patch)
tree683ea69f0e089e0a9e26c5931192a6a65f4b4894 /generator
parent176da025af39e788877446183b530701a54f5057 (diff)
Allow specifying include format without special characters (#810)
On various platforms, passing a format string containing # and "" is difficult for the --library-include-format generator argument. This commit allows specifying the most common styles with the names "bracket" and "quote". Also unified the option parsing between protoc plugin and direct invocation modes.
Diffstat (limited to 'generator')
-rwxr-xr-xgenerator/nanopb_generator.py78
1 files changed, 40 insertions, 38 deletions
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index 1fc9f73..2ebf9b9 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -2292,10 +2292,10 @@ optparser.add_option("-D", "--output-dir", dest="output_dir",
help="Output directory of .pb.h and .pb.c files")
optparser.add_option("-Q", "--generated-include-format", dest="genformat",
metavar="FORMAT", default='#include "%s"',
- help="Set format string to use for including other .pb.h files. [default: %default]")
+ help="Set format string to use for including other .pb.h files. Value can be 'quote', 'bracket' or a format string. [default: %default]")
optparser.add_option("-L", "--library-include-format", dest="libformat",
metavar="FORMAT", default='#include <%s>',
- help="Set format string to use for including the nanopb pb.h header. [default: %default]")
+ help="Set format string to use for including the nanopb pb.h header. Value can be 'quote', 'bracket' or a format string. [default: %default]")
optparser.add_option("--strip-path", dest="strip_path", action="store_true", default=False,
help="Strip directory path from #included .pb.h file name")
optparser.add_option("--no-strip-path", dest="strip_path", action="store_false",
@@ -2317,6 +2317,42 @@ optparser.add_option("--protoc-insertion-points", dest="protoc_insertion_points"
optparser.add_option("-C", "--c-style", dest="c_style", action="store_true", default=False,
help="Use C naming convention.")
+def process_cmdline(args, is_plugin):
+ '''Process command line options. Returns list of options, filenames.'''
+
+ options, filenames = optparser.parse_args(args)
+
+ if options.version:
+ if is_plugin:
+ sys.stderr.write('%s\n' % (nanopb_version))
+ else:
+ print(nanopb_version)
+ sys.exit(0)
+
+ if not filenames and not is_plugin:
+ optparser.print_help()
+ sys.exit(1)
+
+ if options.quiet:
+ options.verbose = False
+
+ include_formats = {'quote': '#include "%s"', 'bracket': '#include <%s>'}
+ options.libformat = include_formats.get(options.libformat, options.libformat)
+ options.genformat = include_formats.get(options.genformat, options.genformat)
+
+ if options.c_style:
+ Globals.naming_style = NamingStyleC()
+
+ Globals.verbose_options = options.verbose
+
+ if options.verbose:
+ sys.stderr.write("Nanopb version %s\n" % nanopb_version)
+ sys.stderr.write('Google Python protobuf library imported from %s, version %s\n'
+ % (google.protobuf.__file__, google.protobuf.__version__))
+
+ return options, filenames
+
+
def parse_file(filename, fdesc, options):
'''Parse a single file. Returns a ProtoFile instance.'''
toplevel_options = nanopb_pb2.NanoPBOptions()
@@ -2424,32 +2460,13 @@ def process_file(filename, fdesc, options, other_files = {}):
def main_cli():
'''Main function when invoked directly from the command line.'''
- options, filenames = optparser.parse_args()
-
- if options.version:
- print(nanopb_version)
- sys.exit(0)
-
- if not filenames:
- optparser.print_help()
- sys.exit(1)
-
- if options.quiet:
- options.verbose = False
+ options, filenames = process_cmdline(sys.argv[1:], is_plugin = False)
if options.output_dir and not os.path.exists(options.output_dir):
optparser.print_help()
sys.stderr.write("\noutput_dir does not exist: %s\n" % options.output_dir)
sys.exit(1)
- if options.verbose:
- sys.stderr.write("Nanopb version %s\n" % nanopb_version)
- sys.stderr.write('Google Python protobuf library imported from %s, version %s\n'
- % (google.protobuf.__file__, google.protobuf.__version__))
-
- if options.c_style:
- Globals.naming_style = NamingStyleC()
-
# Load .pb files into memory and compile any .proto files.
include_path = ['-I%s' % p for p in options.options_path]
all_fdescs = {}
@@ -2479,7 +2496,6 @@ def main_cli():
other_files[fdesc.name] = parse_file(fdesc.name, fdesc, options)
# Then generate the headers / sources
- Globals.verbose_options = options.verbose
for fdesc in out_fdescs.values():
results = process_file(fdesc.name, fdesc, options, other_files)
@@ -2543,21 +2559,7 @@ def main_plugin():
optparser.print_help(sys.stderr)
sys.exit(1)
- options, dummy = optparser.parse_args(args)
-
- if options.version:
- sys.stderr.write('%s\n' % (nanopb_version))
- sys.exit(0)
-
- Globals.verbose_options = options.verbose
-
- if options.c_style:
- Globals.naming_style = NamingStyleC()
-
- if options.verbose:
- sys.stderr.write("Nanopb version %s\n" % nanopb_version)
- sys.stderr.write('Google Python protobuf library imported from %s, version %s\n'
- % (google.protobuf.__file__, google.protobuf.__version__))
+ options, dummy = process_cmdline(args, is_plugin = True)
response = plugin_pb2.CodeGeneratorResponse()