"""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.", ), }, )