aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>2015-04-03 20:08:05 +0300
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>2015-04-03 20:08:05 +0300
commit3bcdd49eac3aabcc121173c0023834f8bcf0a3cb (patch)
tree4d4b1c630762b108fbe6129a54ced3d0e90090a9
parent90833934a28c4ed5dc57ec649ee3d37dca57fb89 (diff)
Always define enum long names so that cross-file references work.
Update issue 118 Status: FixedInGit
-rwxr-xr-xgenerator/nanopb_generator.py7
-rw-r--r--tests/regression/issue_118/SConscript11
-rw-r--r--tests/regression/issue_118/enumdef.proto6
-rw-r--r--tests/regression/issue_118/enumuse.proto5
4 files changed, 29 insertions, 0 deletions
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index fc32e2c5..eebe5404 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -164,6 +164,13 @@ class Enum:
result = 'typedef enum _%s {\n' % self.names
result += ',\n'.join([" %s = %d" % x for x in self.values])
result += '\n} %s;' % self.names
+
+ if not self.options.long_names:
+ # Define the long names always so that enum value references
+ # from other files work properly.
+ for i, x in enumerate(self.values):
+ result += '\n#define %s %s' % (self.value_longnames[i], x[0])
+
return result
class Field:
diff --git a/tests/regression/issue_118/SConscript b/tests/regression/issue_118/SConscript
new file mode 100644
index 00000000..c90e8497
--- /dev/null
+++ b/tests/regression/issue_118/SConscript
@@ -0,0 +1,11 @@
+# Regression test for Issue 118: Short enum names in imported proto files are not honoured
+
+Import("env")
+env.Append(PROTOCPATH = "#regression/issue_118")
+
+env.NanopbProto("enumdef")
+env.Object('enumdef.pb.c')
+
+env.NanopbProto(["enumuse", "enumdef.proto"])
+env.Object('enumuse.pb.c')
+
diff --git a/tests/regression/issue_118/enumdef.proto b/tests/regression/issue_118/enumdef.proto
new file mode 100644
index 00000000..830d2988
--- /dev/null
+++ b/tests/regression/issue_118/enumdef.proto
@@ -0,0 +1,6 @@
+import 'nanopb.proto';
+
+enum MyEnum {
+ option (nanopb_enumopt).long_names = false;
+ FOOBAR = 1;
+}
diff --git a/tests/regression/issue_118/enumuse.proto b/tests/regression/issue_118/enumuse.proto
new file mode 100644
index 00000000..d778fb8f
--- /dev/null
+++ b/tests/regression/issue_118/enumuse.proto
@@ -0,0 +1,5 @@
+import 'enumdef.proto';
+
+message MyMessage {
+ required MyEnum myenum = 1 [default = FOOBAR];
+}