blob: 336a782f0382cbefb1d25ccf282534c49e47cc72 [file] [log] [blame]
# Copyright 2017 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Import .whl files into Bazel."""
def _whl_impl(repository_ctx):
"""Core implementation of whl_library."""
args = [
repository_ctx.attr.python_interpreter,
repository_ctx.path(repository_ctx.attr._script),
"--whl",
repository_ctx.path(repository_ctx.attr.whl),
"--requirements",
repository_ctx.attr.requirements,
]
if repository_ctx.attr.extras:
args += [
"--extras=%s" % extra
for extra in repository_ctx.attr.extras
]
result = repository_ctx.execute(args)
if result.return_code:
fail("whl_library failed: %s (%s)" % (result.stdout, result.stderr))
whl_library = repository_rule(
attrs = {
"extras": attr.string_list(doc = """
A subset of the "extras" available from this `.whl` for which
`requirements` has the dependencies.
"""),
"python_interpreter": attr.string(default = "python", doc = """
The command to run the Python interpreter used when unpacking the wheel.
"""),
"requirements": attr.string(doc = """
The name of the `pip_import` repository rule from which to load this
`.whl`'s dependencies.
"""),
"whl": attr.label(
mandatory = True,
allow_single_file = True,
doc = """
The path to the `.whl` file. The name is expected to follow [this
convention](https://www.python.org/dev/peps/pep-0427/#file-name-convention)).
""",
),
"_script": attr.label(
executable = True,
default = Label("//tools:whltool.par"),
cfg = "host",
),
},
implementation = _whl_impl,
doc = """A rule for importing `.whl` dependencies into Bazel.
<b>This rule is currently used to implement `pip_import`. It is not intended to
work standalone, and the interface may change.</b> See `pip_import` for proper
usage.
This rule imports a `.whl` file as a `py_library`:
```python
whl_library(
name = "foo",
whl = ":my-whl-file",
requirements = "name of pip_import rule",
)
```
This rule defines `@foo//:pkg` as a `py_library` target.
""",
)