|  | """ | 
|  | Setup file for netsim-grpc. | 
|  | Use setup.cfg to configure your project. | 
|  |  | 
|  | This file was generated with PyScaffold 4.3. | 
|  | PyScaffold helps you to put up the scaffold of your new Python project. | 
|  | Learn more under: https://pyscaffold.org/ | 
|  | """ | 
|  | import os | 
|  | import subprocess | 
|  | import sys | 
|  | from os import path | 
|  |  | 
|  | from setuptools import setup | 
|  | from setuptools.command.build_py import build_py | 
|  |  | 
|  |  | 
|  | class ProtoBuild(build_py): | 
|  | """ | 
|  | This command automatically compiles all netsim .proto files with `protoc` compiler | 
|  | and places generated files under src/netsim_grpc/proto/ | 
|  | """ | 
|  |  | 
|  | def run(self): | 
|  | here = path.abspath(path.dirname(__file__)) | 
|  | root_dir = path.dirname(path.dirname(here)) | 
|  | aosp_dir = path.dirname(path.dirname(root_dir)) | 
|  | proto_root_dir = path.join(root_dir, "proto") | 
|  | proto_dir = path.join(proto_root_dir, "netsim") | 
|  | rootcanal_proto_root_dir = path.join(aosp_dir, "packages", "modules", "Bluetooth", "tools", "rootcanal", "proto") | 
|  | rootcanal_proto_dir = path.join(rootcanal_proto_root_dir, "rootcanal") | 
|  | out_dir = path.join(here, "src", "netsim_grpc", "proto") | 
|  |  | 
|  | # Rootcanal Protobufs | 
|  | for proto_file in filter( | 
|  | lambda x: x.endswith(".proto"), os.listdir(rootcanal_proto_dir) | 
|  | ): | 
|  | source = path.join(rootcanal_proto_dir, proto_file) | 
|  | output = path.join(out_dir, "rootcanal", proto_file).replace(".proto", "_pb2.py") | 
|  |  | 
|  | if not path.exists(output) or ( | 
|  | path.getmtime(source) > path.getmtime(output) | 
|  | ): | 
|  | sys.stderr.write(f"Protobuf-compiling {source}\n") | 
|  |  | 
|  | subprocess.check_call( | 
|  | [ | 
|  | sys.executable, | 
|  | "-m", | 
|  | "grpc_tools.protoc", | 
|  | f"-I{proto_root_dir}", | 
|  | f"-I{rootcanal_proto_root_dir}", | 
|  | f"--python_out={out_dir}", | 
|  | f"--grpc_python_out={out_dir}", | 
|  | source, | 
|  | ] | 
|  | ) | 
|  |  | 
|  | # Netsim Protobufs | 
|  | for proto_file in filter( | 
|  | lambda x: x.endswith(".proto"), os.listdir(proto_dir) | 
|  | ): | 
|  | source = path.join(proto_dir, proto_file) | 
|  | output = path.join(out_dir, "netsim", proto_file).replace(".proto", "_pb2.py") | 
|  |  | 
|  | if not path.exists(output) or ( | 
|  | path.getmtime(source) > path.getmtime(output) | 
|  | ): | 
|  | sys.stderr.write(f"Protobuf-compiling {source}\n") | 
|  |  | 
|  | subprocess.check_call( | 
|  | [ | 
|  | sys.executable, | 
|  | "-m", | 
|  | "grpc_tools.protoc", | 
|  | f"-I{proto_root_dir}", | 
|  | f"-I{rootcanal_proto_root_dir}", | 
|  | f"--python_out={out_dir}", | 
|  | f"--grpc_python_out={out_dir}", | 
|  | source, | 
|  | ] | 
|  | ) | 
|  |  | 
|  | super().run() | 
|  |  | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | try: | 
|  | setup( | 
|  | # use_scm_version={"version_scheme": "no-guess-dev", "root": "../../../"}, | 
|  | cmdclass={"build_py": ProtoBuild}, | 
|  | ) | 
|  | except:  # noqa | 
|  | print( | 
|  | "\n\nAn error occurred while building the project, " | 
|  | "please ensure you have the most updated version of setuptools, " | 
|  | "setuptools_scm and wheel with:\n" | 
|  | "   pip install -U setuptools setuptools_scm wheel\n\n" | 
|  | ) | 
|  | raise |