1*cf78ab8cSAndroid Build Coastguard Worker"""Setup file for netsim-grpc. 2*cf78ab8cSAndroid Build Coastguard Worker 3*cf78ab8cSAndroid Build Coastguard WorkerUse setup.cfg to configure your project. 4*cf78ab8cSAndroid Build Coastguard Worker 5*cf78ab8cSAndroid Build Coastguard WorkerThis file was generated with PyScaffold 4.3. 6*cf78ab8cSAndroid Build Coastguard WorkerPyScaffold helps you to put up the scaffold of your new Python project. 7*cf78ab8cSAndroid Build Coastguard WorkerLearn more under: https://pyscaffold.org/ 8*cf78ab8cSAndroid Build Coastguard Worker""" 9*cf78ab8cSAndroid Build Coastguard Worker 10*cf78ab8cSAndroid Build Coastguard Workerimport os 11*cf78ab8cSAndroid Build Coastguard Workerfrom os import path 12*cf78ab8cSAndroid Build Coastguard Workerimport subprocess 13*cf78ab8cSAndroid Build Coastguard Workerimport sys 14*cf78ab8cSAndroid Build Coastguard Worker 15*cf78ab8cSAndroid Build Coastguard Workerfrom setuptools import setup 16*cf78ab8cSAndroid Build Coastguard Workerfrom setuptools.command.build_py import build_py 17*cf78ab8cSAndroid Build Coastguard Worker 18*cf78ab8cSAndroid Build Coastguard Worker 19*cf78ab8cSAndroid Build Coastguard Workerclass ProtoBuild(build_py): 20*cf78ab8cSAndroid Build Coastguard Worker """This command automatically compiles all netsim .proto files with `protoc` compiler 21*cf78ab8cSAndroid Build Coastguard Worker 22*cf78ab8cSAndroid Build Coastguard Worker and places generated files under src/netsim_grpc/proto/ 23*cf78ab8cSAndroid Build Coastguard Worker """ 24*cf78ab8cSAndroid Build Coastguard Worker 25*cf78ab8cSAndroid Build Coastguard Worker def run(self): 26*cf78ab8cSAndroid Build Coastguard Worker here = path.abspath(path.dirname(__file__)) 27*cf78ab8cSAndroid Build Coastguard Worker root_dir = path.dirname(path.dirname(here)) 28*cf78ab8cSAndroid Build Coastguard Worker aosp_dir = path.dirname(path.dirname(root_dir)) 29*cf78ab8cSAndroid Build Coastguard Worker proto_root_dir = path.join(root_dir, "proto") 30*cf78ab8cSAndroid Build Coastguard Worker proto_dir = path.join(proto_root_dir, "netsim") 31*cf78ab8cSAndroid Build Coastguard Worker rootcanal_proto_root_dir = path.join( 32*cf78ab8cSAndroid Build Coastguard Worker aosp_dir, 33*cf78ab8cSAndroid Build Coastguard Worker "packages", 34*cf78ab8cSAndroid Build Coastguard Worker "modules", 35*cf78ab8cSAndroid Build Coastguard Worker "Bluetooth", 36*cf78ab8cSAndroid Build Coastguard Worker "tools", 37*cf78ab8cSAndroid Build Coastguard Worker "rootcanal", 38*cf78ab8cSAndroid Build Coastguard Worker "proto", 39*cf78ab8cSAndroid Build Coastguard Worker ) 40*cf78ab8cSAndroid Build Coastguard Worker rootcanal_proto_dir = path.join(rootcanal_proto_root_dir, "rootcanal") 41*cf78ab8cSAndroid Build Coastguard Worker out_dir = path.join(here, "src", "netsim_grpc", "proto") 42*cf78ab8cSAndroid Build Coastguard Worker 43*cf78ab8cSAndroid Build Coastguard Worker # Rootcanal Protobufs 44*cf78ab8cSAndroid Build Coastguard Worker for proto_file in filter( 45*cf78ab8cSAndroid Build Coastguard Worker lambda x: x.endswith(".proto"), os.listdir(rootcanal_proto_dir) 46*cf78ab8cSAndroid Build Coastguard Worker ): 47*cf78ab8cSAndroid Build Coastguard Worker source = path.join(rootcanal_proto_dir, proto_file) 48*cf78ab8cSAndroid Build Coastguard Worker output = path.join(out_dir, "rootcanal", proto_file).replace( 49*cf78ab8cSAndroid Build Coastguard Worker ".proto", "_pb2.py" 50*cf78ab8cSAndroid Build Coastguard Worker ) 51*cf78ab8cSAndroid Build Coastguard Worker 52*cf78ab8cSAndroid Build Coastguard Worker if not path.exists(output) or ( 53*cf78ab8cSAndroid Build Coastguard Worker path.getmtime(source) > path.getmtime(output) 54*cf78ab8cSAndroid Build Coastguard Worker ): 55*cf78ab8cSAndroid Build Coastguard Worker sys.stderr.write(f"Protobuf-compiling {source}\n") 56*cf78ab8cSAndroid Build Coastguard Worker 57*cf78ab8cSAndroid Build Coastguard Worker subprocess.check_call([ 58*cf78ab8cSAndroid Build Coastguard Worker sys.executable, 59*cf78ab8cSAndroid Build Coastguard Worker "-m", 60*cf78ab8cSAndroid Build Coastguard Worker "grpc_tools.protoc", 61*cf78ab8cSAndroid Build Coastguard Worker f"-I{proto_root_dir}", 62*cf78ab8cSAndroid Build Coastguard Worker f"-I{rootcanal_proto_root_dir}", 63*cf78ab8cSAndroid Build Coastguard Worker f"--python_out={out_dir}", 64*cf78ab8cSAndroid Build Coastguard Worker f"--grpc_python_out={out_dir}", 65*cf78ab8cSAndroid Build Coastguard Worker source, 66*cf78ab8cSAndroid Build Coastguard Worker ]) 67*cf78ab8cSAndroid Build Coastguard Worker 68*cf78ab8cSAndroid Build Coastguard Worker # Netsim Protobufs 69*cf78ab8cSAndroid Build Coastguard Worker for proto_file in filter( 70*cf78ab8cSAndroid Build Coastguard Worker lambda x: x.endswith(".proto"), os.listdir(proto_dir) 71*cf78ab8cSAndroid Build Coastguard Worker ): 72*cf78ab8cSAndroid Build Coastguard Worker source = path.join(proto_dir, proto_file) 73*cf78ab8cSAndroid Build Coastguard Worker output = path.join(out_dir, "netsim", proto_file).replace( 74*cf78ab8cSAndroid Build Coastguard Worker ".proto", "_pb2.py" 75*cf78ab8cSAndroid Build Coastguard Worker ) 76*cf78ab8cSAndroid Build Coastguard Worker 77*cf78ab8cSAndroid Build Coastguard Worker if not path.exists(output) or ( 78*cf78ab8cSAndroid Build Coastguard Worker path.getmtime(source) > path.getmtime(output) 79*cf78ab8cSAndroid Build Coastguard Worker ): 80*cf78ab8cSAndroid Build Coastguard Worker sys.stderr.write(f"Protobuf-compiling {source}\n") 81*cf78ab8cSAndroid Build Coastguard Worker 82*cf78ab8cSAndroid Build Coastguard Worker subprocess.check_call([ 83*cf78ab8cSAndroid Build Coastguard Worker sys.executable, 84*cf78ab8cSAndroid Build Coastguard Worker "-m", 85*cf78ab8cSAndroid Build Coastguard Worker "grpc_tools.protoc", 86*cf78ab8cSAndroid Build Coastguard Worker f"-I{proto_root_dir}", 87*cf78ab8cSAndroid Build Coastguard Worker f"-I{rootcanal_proto_root_dir}", 88*cf78ab8cSAndroid Build Coastguard Worker f"--python_out={out_dir}", 89*cf78ab8cSAndroid Build Coastguard Worker f"--grpc_python_out={out_dir}", 90*cf78ab8cSAndroid Build Coastguard Worker source, 91*cf78ab8cSAndroid Build Coastguard Worker ]) 92*cf78ab8cSAndroid Build Coastguard Worker 93*cf78ab8cSAndroid Build Coastguard Worker super().run() 94*cf78ab8cSAndroid Build Coastguard Worker 95*cf78ab8cSAndroid Build Coastguard Worker 96*cf78ab8cSAndroid Build Coastguard Workerif __name__ == "__main__": 97*cf78ab8cSAndroid Build Coastguard Worker try: 98*cf78ab8cSAndroid Build Coastguard Worker setup( 99*cf78ab8cSAndroid Build Coastguard Worker # use_scm_version={"version_scheme": "no-guess-dev", "root": "../../../"}, 100*cf78ab8cSAndroid Build Coastguard Worker cmdclass={"build_py": ProtoBuild}, 101*cf78ab8cSAndroid Build Coastguard Worker ) 102*cf78ab8cSAndroid Build Coastguard Worker except: # noqa 103*cf78ab8cSAndroid Build Coastguard Worker print( 104*cf78ab8cSAndroid Build Coastguard Worker "\n\nAn error occurred while building the project, " 105*cf78ab8cSAndroid Build Coastguard Worker "please ensure you have the most updated version of setuptools, " 106*cf78ab8cSAndroid Build Coastguard Worker "setuptools_scm and wheel with:\n" 107*cf78ab8cSAndroid Build Coastguard Worker " pip install -U setuptools setuptools_scm wheel\n\n" 108*cf78ab8cSAndroid Build Coastguard Worker ) 109*cf78ab8cSAndroid Build Coastguard Worker raise 110