X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=generator%2Fnanopb_generator.py;h=730c0aabca5e7b943eeee77db12fae92862cd79c;hb=67add3259a6429cb4afc1bdb6345e8c057a55ca8;hp=391538399c00495bc0d0579dc8f72cd19fd560a3;hpb=feddc0115ce72b49688dc7006ca3027d958d6e99;p=apps%2Fagl-service-can-low-level.git diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py index 39153839..730c0aab 100644 --- a/generator/nanopb_generator.py +++ b/generator/nanopb_generator.py @@ -343,7 +343,7 @@ def toposort2(data): ''' for k, v in data.items(): v.discard(k) # Ignore self dependencies - extra_items_in_deps = reduce(set.union, data.values()) - set(data.keys()) + extra_items_in_deps = reduce(set.union, data.values(), set()) - set(data.keys()) data.update(dict([(item, set()) for item in extra_items_in_deps])) while True: ordered = set(item for item,dep in data.items() if not dep) @@ -402,6 +402,16 @@ def generate_header(dependencies, headername, enums, messages): for msg in messages: yield msg.fields_declaration() + '\n' + count_required_fields = lambda m: len([f for f in msg.fields if f.htype == 'PB_HTYPE_REQUIRED']) + largest_msg = max(messages, key = count_required_fields) + largest_count = count_required_fields(largest_msg) + if largest_count > 64: + yield '\n/* Check that missing required fields will be properly detected */\n' + yield '#if PB_MAX_REQUIRED_FIELDS < %d\n' % largest_count + yield '#warning Properly detecting missing required fields in %s requires \\\n' % largest_msg.name + yield ' setting PB_MAX_REQUIRED_FIELDS to %d or more.\n' % largest_count + yield '#endif\n' + yield '\n#endif\n' def generate_source(headername, enums, messages): @@ -442,7 +452,7 @@ if __name__ == '__main__': # List of .proto files that should not be included in the C header file # even if they are mentioned in the source .proto. - excludes = ['nanopb.proto'] + excludes = ['nanopb.proto', 'google/protobuf/descriptor.proto'] dependencies = [d for d in fdesc.file[0].dependency if d not in excludes] header = open(headername, 'w')