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-24 15:20:01 +0300
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>2022-11-24 15:20:01 +0300
commit4cc56dc2e11097799d3da594a6ce4945a9f521f6 (patch)
tree90c5503c2a648c624f9cdd48b3033b715142a882
parentd722d140053efc7f70e86603a39192217569bc60 (diff)
Create canonical name mapping also for overridden package name (#820)
-rwxr-xr-xgenerator/nanopb_generator.py18
-rw-r--r--tests/regression/issue_783/SConscript14
-rw-r--r--tests/regression/issue_783/folder_B/file_B.proto4
-rw-r--r--tests/regression/issue_783/folder_C/file_C.proto11
4 files changed, 35 insertions, 12 deletions
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index c53b481..42e87f9 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -239,6 +239,9 @@ class Names:
parts = (parts,)
self.parts = tuple(parts)
+ if self.parts == ('',):
+ self.parts = ()
+
def __str__(self):
return '_'.join(self.parts)
@@ -2065,14 +2068,13 @@ class ProtoFile:
yield '#define %s_msgid %d\n' % (msg.name, msg.msgid)
yield '\n'
- if self.manglenames.mangle_names != nanopb_pb2.M_NONE:
- pairs = [x for x in self.manglenames.reverse_name_mapping.items() if str(x[0]) != str(x[1])]
- if pairs:
- modename = nanopb_pb2.TypenameMangling.Name(self.manglenames.mangle_names)
- yield '/* Mapping from canonical names for the mangle_names=%s option */\n' % modename
- for shortname, longname in pairs:
- yield '#define %s %s\n' % (longname, shortname)
- yield '\n'
+ # Check if there is any name mangling active
+ pairs = [x for x in self.manglenames.reverse_name_mapping.items() if str(x[0]) != str(x[1])]
+ if pairs:
+ yield '/* Mapping from canonical names (mangle_names or overridden package name) */\n'
+ for shortname, longname in pairs:
+ yield '#define %s %s\n' % (longname, shortname)
+ yield '\n'
yield '#ifdef __cplusplus\n'
yield '} /* extern "C" */\n'
diff --git a/tests/regression/issue_783/SConscript b/tests/regression/issue_783/SConscript
index 4088be5..7041ae2 100644
--- a/tests/regression/issue_783/SConscript
+++ b/tests/regression/issue_783/SConscript
@@ -1,13 +1,19 @@
-# Regression test for issue #783:
+# Regression test for issues #783 and #820:
# Could not find enum type when using mangle_names:M_STRIP_PACKAGE
-# when using multiple packages.
+# when using multiple packages. Same when overriding package name
+# with "(nanopb_fileopt).package".
Import('env')
incpath = env.Clone()
incpath.Append(CPPPATH="$BUILD/regression/issue_783")
-incpath.NanopbProto(['folder_A/file_A', 'folder_A/file_A.options'])
-incpath.NanopbProto(['folder_B/file_B'])
+
+a = incpath.NanopbProto(['folder_A/file_A', 'folder_A/file_A.options'])
+b = incpath.NanopbProto(['folder_C/file_C'])
+c = incpath.NanopbProto(['folder_B/file_B'])
+
+incpath.Depends(c, [a, b])
incpath.Object('folder_A/file_A.pb.c')
incpath.Object('folder_B/file_B.pb.c')
+incpath.Object('folder_C/file_C.pb.c')
diff --git a/tests/regression/issue_783/folder_B/file_B.proto b/tests/regression/issue_783/folder_B/file_B.proto
index efb2ca3..f4c2a85 100644
--- a/tests/regression/issue_783/folder_B/file_B.proto
+++ b/tests/regression/issue_783/folder_B/file_B.proto
@@ -1,6 +1,10 @@
syntax = "proto2";
package folder_B;
+
import "folder_A/file_A.proto";
+import "folder_C/file_C.proto";
+
message dummy {
required folder_A.my_enum value = 1;
+ required folder_C.messageC msg = 2;
}
diff --git a/tests/regression/issue_783/folder_C/file_C.proto b/tests/regression/issue_783/folder_C/file_C.proto
new file mode 100644
index 0000000..1be2016
--- /dev/null
+++ b/tests/regression/issue_783/folder_C/file_C.proto
@@ -0,0 +1,11 @@
+syntax = "proto2";
+
+import "nanopb.proto";
+
+package folder_C;
+option (nanopb_fileopt).package = "dir_C";
+
+message messageC {
+ required uint32 a = 1;
+}
+