# Copyright 2023 The Bazel Authors. 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.
"""Starlark rules for integrating Sphinx and Readthedocs."""

load("//python:py_binary.bzl", "py_binary")
load("//python/private:util.bzl", "add_tag")  # buildifier: disable=bzl-visibility

_INSTALL_MAIN_SRC = Label("//sphinxdocs/private:readthedocs_install.py")

def readthedocs_install(name, docs, **kwargs):
    """Run a program to copy Sphinx doc files into readthedocs output directories.

    This is intended to be run using `bazel run` during the readthedocs
    build process when the build process is overridden. See
    https://docs.readthedocs.io/en/stable/build-customization.html#override-the-build-process
    for more information.

    Args:
        name: (str) name of the installer
        docs: (label list) list of targets that generate directories to copy
            into the directories readthedocs expects final output in. This
            is typically a single `sphinx_stardocs` target.
        **kwargs: (dict) additional kwargs to pass onto the installer
    """
    add_tag(kwargs, "@rules_python//sphinxdocs:readthedocs_install")
    py_binary(
        name = name,
        srcs = [_INSTALL_MAIN_SRC],
        main = _INSTALL_MAIN_SRC,
        data = docs,
        args = [
            "$(rlocationpaths {})".format(d)
            for d in docs
        ],
        deps = ["//python/runfiles"],
        **kwargs
    )
