'''Generate header file for nanopb from a ProtoBuf FileDescriptorSet.'''
-nanopb_version = "nanopb-0.2.0"
+nanopb_version = "nanopb-0.2.1-dev"
try:
import google.protobuf.descriptor_pb2 as descriptor
def __str__(self):
result = 'typedef struct _%s {\n' % self.name
+
+ if not self.ordered_fields:
+ # Empty structs are not allowed in C standard.
+ # Therefore add a dummy field if an empty message occurs.
+ result += ' uint8_t dummy_field;'
+
result += '\n'.join([str(f) for f in self.ordered_fields])
result += '\n}'
symbol = make_identifier(headername)
yield '#ifndef _PB_%s_\n' % symbol
yield '#define _PB_%s_\n' % symbol
- yield '#include <pb.h>\n\n'
+ yield options.libformat % ('pb.h')
+ yield '\n'
for dependency in dependencies:
noext = os.path.splitext(dependency)[0]
- yield '#include "%s.%s.h"\n' % (noext,options.extension)
-
+ yield options.genformat % (noext + '.' + options.extension + '.h')
+ yield '\n'
+
yield '#ifdef __cplusplus\n'
yield 'extern "C" {\n'
yield '#endif\n\n'
yield '/* Automatically generated nanopb constant definitions */\n'
yield '/* Generated by %s at %s. */\n\n' % (nanopb_version, time.asctime())
- yield '#include "%s"\n\n' % headername
+ yield options.genformat % (headername)
+ yield '\n'
for msg in messages:
yield msg.default_decl(False)
optparser.add_option("-x", dest="exclude", metavar="FILE", action="append", default=[],
help="Exclude file from generated #include list.")
optparser.add_option("-e", "--extension", dest="extension", metavar="EXTENSION", default="pb",
- help="use extension instead of 'pb' for generated files.")
+ help="Set extension to use instead of 'pb' for generated files. [default: %default]")
+optparser.add_option("-Q", "--generated-include-format", dest="genformat",
+ metavar="FORMAT", default='#include "%s"\n',
+ help="Set format string to use for including other .pb.h files. [default: %default]")
+optparser.add_option("-L", "--library-include-format", dest="libformat",
+ metavar="FORMAT", default='#include <%s>\n',
+ help="Set format string to use for including the nanopb pb.h header. [default: %default]")
optparser.add_option("-q", "--quiet", dest="quiet", action="store_true", default=False,
help="Don't print anything except errors.")
optparser.add_option("-v", "--verbose", dest="verbose", action="store_true", default=False,