anki/pip/pyqt5/defs.bzl
2020-11-02 19:22:23 +10:00

48 lines
1.7 KiB
Python

# based off https://github.com/ali5h/rules_pip/blob/master/defs.bzl
pip_vendor_label = Label("@com_github_ali5h_rules_pip//:third_party/py/easy_install.py")
def _execute(repository_ctx, arguments, quiet = False):
pip_vendor = str(repository_ctx.path(pip_vendor_label).dirname)
return repository_ctx.execute(arguments, environment = {
"PYTHONPATH": pip_vendor,
}, quiet = quiet)
def _install_pyqt5_impl(repository_ctx):
python_interpreter = repository_ctx.attr.python_interpreter
if repository_ctx.attr.python_runtime:
python_interpreter = repository_ctx.path(repository_ctx.attr.python_runtime)
args = [
python_interpreter,
repository_ctx.path(repository_ctx.attr._script),
repository_ctx.path("."),
]
result = _execute(repository_ctx, args, quiet = repository_ctx.attr.quiet)
if result.return_code:
fail("failed: %s (%s)" % (result.stdout, result.stderr))
install_pyqt5 = repository_rule(
attrs = {
"python_interpreter": attr.string(default = "python", doc = """
The command to run the Python interpreter used to invoke pip and unpack the
wheels.
"""),
"python_runtime": attr.label(doc = """
The label to the Python run-time interpreted used to invoke pip and unpack the wheels.
If the label is specified it will overwrite the python_interpreter attribute.
"""),
"_script": attr.label(
executable = True,
default = Label("//pip/pyqt5:install_pyqt5.py"),
cfg = "host",
),
"quiet": attr.bool(
default = True,
doc = "If stdout and stderr should be printed to the terminal.",
),
},
implementation = _install_pyqt5_impl,
)