Make generator consider dependencies recursively (#610)
Previously the generator would only look into the first level
of dependency files, thus some dependency message types were ignored
in a deep hierarchy.
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index aabdddf..0899129 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -1988,10 +1988,15 @@
'''
f = parse_file(filename, fdesc, options)
- # Provide dependencies if available
- for dep in f.fdesc.dependency:
+ # Check the list of dependencies, and if they are available in other_files,
+ # add them to be considered for import resolving. Recursively add any files
+ # imported by the dependencies.
+ deps = list(f.fdesc.dependency)
+ while deps:
+ dep = deps.pop(0)
if dep in other_files:
f.add_dependency(other_files[dep])
+ deps += list(other_files[dep].fdesc.dependency)
# Decide the file names
noext = os.path.splitext(filename)[0]
diff --git a/tests/regression/issue_610/SConscript b/tests/regression/issue_610/SConscript
index 1c6e276..7adb6b8 100644
--- a/tests/regression/issue_610/SConscript
+++ b/tests/regression/issue_610/SConscript
@@ -28,3 +28,4 @@
for f in all_files:
env2.Object(f.replace('.proto', '.pb.c'))
+env2.Match(["nanopb_generator_bug/first.pb.h", "first.expected"])
diff --git a/tests/regression/issue_610/first.expected b/tests/regression/issue_610/first.expected
new file mode 100644
index 0000000..4343dfd
--- /dev/null
+++ b/tests/regression/issue_610/first.expected
@@ -0,0 +1,2 @@
+define First_size\s*4
+