blob: e2e8000e53ea078f7c2b3a61465dee93335d2ed9 [file] [log] [blame]
'''This file automatically rebuilds the proto definitions for Python.'''
from __future__ import absolute_import
import os.path
import sys
import pkg_resources
from ._utils import has_grpcio_protoc, invoke_protoc, print_versions
dirname = os.path.dirname(__file__)
protosrc = os.path.join(dirname, "nanopb.proto")
protodst = os.path.join(dirname, "nanopb_pb2.py")
rebuild = False
if os.path.isfile(protosrc):
src_date = os.path.getmtime(protosrc)
if not os.path.isfile(protodst) or os.path.getmtime(protodst) < src_date:
rebuild = True
if not rebuild:
try:
from . import nanopb_pb2
except AttributeError as e:
rebuild = True
sys.stderr.write("Failed to import nanopb_pb2.py: " + str(e) + "\n"
"Will automatically attempt to rebuild this.\n"
"Verify that python-protobuf and protoc versions match.\n")
print_versions()
if rebuild:
cmd = [
"protoc",
"--python_out={}".format(dirname),
protosrc,
"-I={}".format(dirname),
]
if has_grpcio_protoc():
# grpcio-tools has an extra CLI argument
# from grpc.tools.protoc __main__ invocation.
_builtin_proto_include = pkg_resources.resource_filename('grpc_tools', '_proto')
cmd.append("-I={}".format(_builtin_proto_include))
try:
invoke_protoc(argv=cmd)
except:
sys.stderr.write("Failed to build nanopb_pb2.py: " + ' '.join(cmd) + "\n")
raise