You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.1 KiB
72 lines
2.1 KiB
"""Repository rule for Python autoconfiguration.
|
|
|
|
`python_configure` depends on the following environment variables:
|
|
|
|
* `PYTHON_BIN_PATH`: location of python binary.
|
|
"""
|
|
|
|
_PYTHON_BIN_PATH = "PYTHON_BIN_PATH"
|
|
|
|
def _tpl(repository_ctx, tpl, substitutions = {}, out = None):
|
|
if not out:
|
|
out = tpl
|
|
repository_ctx.template(
|
|
out,
|
|
Label("//third_party/py:%s.tpl" % tpl),
|
|
substitutions,
|
|
)
|
|
|
|
def _fail(msg):
|
|
"""Output failure message when auto configuration fails."""
|
|
red = "\033[0;31m"
|
|
no_color = "\033[0m"
|
|
fail("%sPython Configuration Error:%s %s\n" % (red, no_color, msg))
|
|
|
|
def _get_python_bin(repository_ctx):
|
|
"""Gets the python bin path."""
|
|
python_bin = repository_ctx.os.environ.get(_PYTHON_BIN_PATH)
|
|
if python_bin != None:
|
|
return python_bin
|
|
python_bin_path = repository_ctx.which("python")
|
|
if python_bin_path != None:
|
|
return str(python_bin_path)
|
|
_fail("Cannot find python in PATH, please make sure " +
|
|
"python is installed and add its directory in PATH, or --define " +
|
|
"%s='/something/else'.\nPATH=%s" % (
|
|
_PYTHON_BIN_PATH,
|
|
repository_ctx.os.environ.get("PATH", ""),
|
|
))
|
|
|
|
def _create_local_python_repository(repository_ctx):
|
|
"""Creates the repository containing files set up to build with Python."""
|
|
python_bin = _get_python_bin(repository_ctx)
|
|
_tpl(repository_ctx, "BUILD", {
|
|
"%{PYTHON_BIN_PATH}": python_bin,
|
|
})
|
|
|
|
def _python_autoconf_impl(repository_ctx):
|
|
"""Implementation of the python_autoconf repository rule."""
|
|
_create_local_python_repository(repository_ctx)
|
|
|
|
python_configure = repository_rule(
|
|
implementation = _python_autoconf_impl,
|
|
environ = [
|
|
_PYTHON_BIN_PATH,
|
|
],
|
|
)
|
|
"""Detects and configures the local Python toolchain.
|
|
|
|
Add the following to your WORKSPACE FILE:
|
|
|
|
```python
|
|
load("//third_party/py:python_configure.bzl", "python_configure")
|
|
|
|
python_configure(name = "local_config_py_toolchain")
|
|
|
|
register_toolchains("@local_config_py_toolchain//:py_toolchain")
|
|
```
|
|
|
|
Args:
|
|
name: A unique name for this workspace rule.
|
|
"""
|