blob: bd4953747dfc33c29d1867f3488c19319706bd9d [file] [log] [blame]
import sys
import subprocess
import os.path
def has_grpcio_protoc():
# type: () -> bool
""" checks if grpcio-tools protoc is installed"""
try:
import grpc_tools.protoc
except ImportError:
return False
return True
def invoke_protoc(argv):
# type: (list) -> typing.Any
"""
Invoke protoc.
This routine will use grpcio-provided protoc if it exists,
using system-installed protoc as a fallback.
Args:
argv: protoc CLI invocation, first item must be 'protoc'
"""
# Add current directory to include path if nothing else is specified
if not [x for x in argv if x.startswith('-I')]:
argv.append("-I.")
# Add default protoc include paths
nanopb_include = os.path.dirname(os.path.abspath(__file__))
argv.append('-I' + nanopb_include)
if has_grpcio_protoc():
import grpc_tools.protoc as protoc
import pkg_resources
proto_include = pkg_resources.resource_filename('grpc_tools', '_proto')
argv.append('-I' + proto_include)
return protoc.main(argv)
else:
return subprocess.call(argv)
def print_versions():
try:
if has_grpcio_protoc():
import grpc_tools.protoc
sys.stderr.write("Using grpcio-tools protoc from " + grpc_tools.protoc.__file__ + "\n")
else:
sys.stderr.write("Using protoc from system path\n")
invoke_protoc(['protoc', '--version'])
except Exception as e:
sys.stderr.write("Failed to determine protoc version: " + str(e) + "\n")
try:
import google.protobuf
sys.stderr.write("Using python-protobuf from " + google.protobuf.__file__ + "\n")
sys.stderr.write("Python-protobuf version: " + google.protobuf.__version__ + "\n")
except Exception as e:
sys.stderr.write("Failed to determine python-protobuf version: " + str(e) + "\n")
if __name__ == '__main__':
print_versions()