#!/usr/bin/env python3 # This file acts as a drop-in replacement of binary protoc.exe. # It will use either Python-based protoc from grpcio-tools package, # or if it is not available, protoc.exe from path if found. import sys import os import os.path from nanopb_generator import invoke_protoc if __name__ == '__main__': # Get path of the directory where this script is stored. if getattr(sys, 'frozen', False): mypath = os.path.dirname(sys.executable) # For pyInstaller else: mypath = os.path.dirname(__file__) # Avoid recursive calls to self env_paths = os.environ["PATH"].split(os.pathsep) if mypath in env_paths: env_paths.remove(mypath) os.environ["PATH"] = os.pathsep.join(env_paths) # Add argument for finding the nanopb generator when using --nanopb_out= # argument to protoc. if os.path.isfile(os.path.join(mypath, "protoc-gen-nanopb.exe")): protoc_gen_nanopb = os.path.join(mypath, "protoc-gen-nanopb.exe") elif os.name == 'nt': protoc_gen_nanopb = os.path.join(mypath, "protoc-gen-nanopb.bat") else: protoc_gen_nanopb = os.path.join(mypath, "protoc-gen-nanopb") args = sys.argv[1:] if os.path.isfile(protoc_gen_nanopb): args = ['--plugin=protoc-gen-nanopb=%s' % protoc_gen_nanopb] + args status = invoke_protoc(['protoc'] + args) sys.exit(status)