diff options
author | Petteri Aimonen <jpa@git.mail.kapsi.fi> | 2022-11-24 15:20:01 +0300 |
---|---|---|
committer | Petteri Aimonen <jpa@git.mail.kapsi.fi> | 2022-11-24 15:20:01 +0300 |
commit | 4cc56dc2e11097799d3da594a6ce4945a9f521f6 (patch) | |
tree | 90c5503c2a648c624f9cdd48b3033b715142a882 | |
parent | d722d140053efc7f70e86603a39192217569bc60 (diff) |
Create canonical name mapping also for overridden package name (#820)
-rwxr-xr-x | generator/nanopb_generator.py | 18 | ||||
-rw-r--r-- | tests/regression/issue_783/SConscript | 14 | ||||
-rw-r--r-- | tests/regression/issue_783/folder_B/file_B.proto | 4 | ||||
-rw-r--r-- | tests/regression/issue_783/folder_C/file_C.proto | 11 |
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; +} + |