diff options
Diffstat (limited to 'third_party/nanopb/generate_nanopb_proto.py')
-rw-r--r-- | third_party/nanopb/generate_nanopb_proto.py | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/third_party/nanopb/generate_nanopb_proto.py b/third_party/nanopb/generate_nanopb_proto.py index 2934d0635..fc83df024 100644 --- a/third_party/nanopb/generate_nanopb_proto.py +++ b/third_party/nanopb/generate_nanopb_proto.py @@ -27,14 +27,28 @@ that nanopb_pb2.py is guaranteed to exist before they need it. import argparse import importlib.util from pathlib import Path +import os import sys -def generate_nanopb_proto(root: Path) -> None: - sys.path.append(str(root / 'generator')) +def generate_nanopb_proto( + nanopb_root: Path, protoc_binary: Path, aggressive_regen: bool +) -> None: + generated_nanopb_pb2 = nanopb_root / 'generator' / 'proto' / 'nanopb_pb2.py' + + # If protoc was updated, ensure the file is regenerated. + if generated_nanopb_pb2.is_file(): + if ( + aggressive_regen + or protoc_binary.stat().st_mtime + > generated_nanopb_pb2.stat().st_mtime + ): + os.remove(generated_nanopb_pb2) + + sys.path.append(str(nanopb_root / 'generator')) spec = importlib.util.spec_from_file_location( - 'proto', root / 'generator' / 'proto' / '__init__.py' + 'proto', nanopb_root / 'generator' / 'proto' / '__init__.py' ) assert spec is not None proto_module = importlib.util.module_from_spec(spec) @@ -43,7 +57,26 @@ def generate_nanopb_proto(root: Path) -> None: def _parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument('root', type=Path, help='Nanopb root') + parser.add_argument( + '--nanopb-root', + type=Path, + help='Nanopb root', + ) + parser.add_argument( + '--protoc-binary', + type=Path, + help='Protoc binary path', + ) + parser.add_argument( + '--aggressive-regen', + action="store_true", + default=False, + help=( + 'If true, always regenerates nanopb_pb2.py when this script is ' + 'run. If this is false, the file is only regenerated when the ' + 'protoc binary is updated' + ), + ) return parser.parse_args() |