47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
load("//bazel:utils.bzl", "execute", "require_env")
|
|
|
|
|
|
def _python_repository_impl(repository_ctx):
|
|
root = repository_ctx.path(require_env(repository_ctx, "PYTHON_TOOLCHAIN_ROOT"))
|
|
python3 = root.get_child("bin/python3")
|
|
|
|
version = execute(
|
|
repository_ctx,
|
|
[
|
|
str(python3),
|
|
"-c",
|
|
"import sys; print('{}.{}.{}'.format(*sys.version_info[:3]))",
|
|
],
|
|
)
|
|
parts = version.split(".")
|
|
if len(parts) != 3:
|
|
fail("python3 did not report a major.minor.micro version")
|
|
|
|
repository_ctx.file("WORKSPACE.bazel", "")
|
|
repository_ctx.template(
|
|
"BUILD.bazel",
|
|
Label("//bazel:python.BUILD.template"),
|
|
{
|
|
"{interpreter_path}": str(python3),
|
|
"{major}": parts[0],
|
|
"{minor}": parts[1],
|
|
"{micro}": parts[2],
|
|
},
|
|
)
|
|
|
|
|
|
python_repository = repository_rule(
|
|
implementation = _python_repository_impl,
|
|
local = True,
|
|
environ = ["PYTHON_TOOLCHAIN_ROOT"],
|
|
)
|
|
|
|
|
|
def _python_impl(module_ctx):
|
|
python_repository(name = "python")
|
|
|
|
|
|
python = module_extension(
|
|
implementation = _python_impl,
|
|
)
|