blob: 52df04e99218727c5c679e835b85ec5c3bcd08f9 [file] [log] [blame]
"""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
from os import path
import subprocess
import sys
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