blob: 076ed7225464126b50a85fb31c9f67f061506e79 [file] [log] [blame]
"""Implementation of sphinx_docs_library."""
load(":sphinx_docs_library_info.bzl", "SphinxDocsLibraryInfo")
def _sphinx_docs_library_impl(ctx):
strip_prefix = ctx.attr.strip_prefix or (ctx.label.package + "/")
direct_entries = []
if ctx.files.srcs:
entry = struct(
strip_prefix = strip_prefix,
prefix = ctx.attr.prefix,
files = ctx.files.srcs,
)
direct_entries.append(entry)
return [
SphinxDocsLibraryInfo(
strip_prefix = strip_prefix,
prefix = ctx.attr.prefix,
files = ctx.files.srcs,
transitive = depset(
direct = direct_entries,
transitive = [t[SphinxDocsLibraryInfo].transitive for t in ctx.attr.deps],
),
),
DefaultInfo(
files = depset(ctx.files.srcs),
),
]
sphinx_docs_library = rule(
implementation = _sphinx_docs_library_impl,
attrs = {
"deps": attr.label_list(
doc = """
Additional `sphinx_docs_library` targets to include. They do not have the
`prefix` and `strip_prefix` attributes applied to them.""",
providers = [SphinxDocsLibraryInfo],
),
"prefix": attr.string(
doc = "Prefix to prepend to file paths. Added after `strip_prefix` is removed.",
),
"srcs": attr.label_list(
allow_files = True,
doc = "Files that are part of the library.",
),
"strip_prefix": attr.string(
doc = "Prefix to remove from file paths. Removed before `prefix` is prepended.",
),
},
)