# Copyright 2024 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.

load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@bazel_skylib//rules:diff_test.bzl", "diff_test")
load("@bazel_skylib//rules:expand_template.bzl", "expand_template")
load("@stardoc//stardoc:stardoc.bzl", "stardoc")
load("//cc/toolchains/impl:documented_api.bzl", "DOCUMENTED_TOOLCHAIN_RULES")
load("//cc/toolchains/impl:markdown_helpers.bzl", "xref_substitutions")

bzl_library(
    name = "toolchain_rules",
    srcs = glob(["*.bzl"]),
    visibility = ["//visibility:public"],
    deps = [
        "//cc:action_names_bzl",
        "//cc:cc_toolchain_config_lib_bzl",
        "//cc:find_cc_toolchain_bzl",
        "//cc/private/rules_impl:cc_flags_supplier_lib_bzl",
        "//cc/private/rules_impl:native_bzl",
        "//cc/toolchains/impl:toolchain_impl_rules",
        "@bazel_skylib//rules/directory:glob",
    ],
)

filegroup(
    name = "srcs",
    srcs = glob([
        "**/*.bzl",
        "**/BUILD",
    ]),
    visibility = ["//visibility:public"],
)

stardoc(
    name = "toolchain_api",
    out = "raw_generated_toolchain_api.md",
    input = "//cc/toolchains/impl:documented_api.bzl",
    deps = [":toolchain_rules"],
)

expand_template(
    name = "toolchain_api_md",
    out = "generated_toolchain_api.md",
    # Dictionary order 100% matters here!
    # buildifier: disable=unsorted-dict-items
    substitutions = {
        # Strip @rules_cc to prevent instances of @rules_cc@rules_cc//cc.
        "@rules_cc//cc": "//cc",
        # In GitHub, we prefer to clarify all the labels that come from
        # rules_cc.
        "//cc": "@rules_cc//cc",
    } | xref_substitutions({
        "`{}`".format(rule_name): "#{}".format(rule_name)
        for rule_name in DOCUMENTED_TOOLCHAIN_RULES
    }),
    # buildifier: enable=unsorted-dict-items
    template = ":raw_generated_toolchain_api.md",
)

diff_test(
    name = "toolchain_api_diff_test",
    file1 = ":generated_toolchain_api.md",
    file2 = ":toolchain_api.md",
)
