Fix error when .proto contains no Messages (e.g. just enums).
[apps/low-level-can-service.git] / generator / nanopb_generator.py
index 2cc92f0..1e7e1f9 100644 (file)
@@ -1,7 +1,27 @@
 '''Generate header file for nanopb from a ProtoBuf FileDescriptorSet.'''
 
-import google.protobuf.descriptor_pb2 as descriptor
-import nanopb_pb2
+try:
+    import google.protobuf.descriptor_pb2 as descriptor
+except:
+    print
+    print "*************************************************************"
+    print "*** Could not import the Google protobuf Python libraries ***"
+    print "*** Try installing package 'python-protobuf' or similar.  ***"
+    print "*************************************************************"
+    print
+    raise
+
+try:
+    import nanopb_pb2
+except:
+    print
+    print "***************************************************************"
+    print "*** Could not import the precompiled nanopb_pb2.py.         ***"
+    print "*** Run 'make' in the 'generator' folder to update the file.***"
+    print "***************************************************************"
+    print
+    raise
+
 import os.path
 
 # Values are tuple (c type, pb ltype)
@@ -323,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)
@@ -422,7 +442,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')