# Copyright 2021 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("//python:py_binary.bzl", "py_binary")
load("//python:py_library.bzl", "py_library")
load("//python:versions.bzl", "print_toolchains_checksums")
load(":stamp.bzl", "stamp_build_setting")

package(
    default_visibility = ["//:__subpackages__"],
)

licenses(["notice"])

filegroup(
    name = "distribution",
    srcs = glob(["**"]) + [
        "//python/private/bzlmod:distribution",
        "//python/private/common:distribution",
        "//python/private/proto:distribution",
        "//tools/build_defs/python/private:distribution",
    ],
    visibility = ["//python:__pkg__"],
)

filegroup(
    name = "coverage_deps",
    srcs = ["coverage_deps.bzl"],
    visibility = ["//tools/private/update_deps:__pkg__"],
)

# Filegroup of bzl files that can be used by downstream rules for documentation generation
filegroup(
    name = "bzl",
    srcs = glob(["**/*.bzl"]),
    visibility = ["//python:__pkg__"],
)

bzl_library(
    name = "autodetecting_toolchain_bzl",
    srcs = ["autodetecting_toolchain.bzl"],
    deps = [
        "//python:py_runtime_bzl",
        "//python:py_runtime_pair_bzl",
    ],
)

bzl_library(
    name = "bzlmod_enabled_bzl",
    srcs = ["bzlmod_enabled.bzl"],
)

bzl_library(
    name = "coverage_deps_bzl",
    srcs = ["coverage_deps.bzl"],
    deps = [
        ":bazel_tools_bzl",
        ":version_label_bzl",
    ],
)

bzl_library(
    name = "full_version_bzl",
    srcs = ["full_version.bzl"],
    deps = ["//python:versions_bzl"],
)

bzl_library(
    name = "internal_config_repo_bzl",
    srcs = ["internal_config_repo.bzl"],
    deps = [":bzlmod_enabled_bzl"],
)

bzl_library(
    name = "normalize_name_bzl",
    srcs = ["normalize_name.bzl"],
)

bzl_library(
    name = "py_cc_toolchain_bzl",
    srcs = [
        "py_cc_toolchain_macro.bzl",
        "py_cc_toolchain_rule.bzl",
    ],
    visibility = [
        "//docs:__subpackages__",
        "//python/cc:__pkg__",
    ],
    deps = [
        ":py_cc_toolchain_info_bzl",
        ":util_bzl",
    ],
)

bzl_library(
    name = "py_cc_toolchain_info_bzl",
    srcs = ["py_cc_toolchain_info.bzl"],
    visibility = ["//python/cc:__pkg__"],
)

bzl_library(
    name = "py_console_script_binary_bzl",
    srcs = [
        "py_console_script_binary.bzl",
        "py_console_script_gen.bzl",
    ],
    visibility = ["//python/entry_points:__pkg__"],
    deps = [
        "//python:py_binary_bzl",
    ],
)

bzl_library(
    name = "py_package_bzl",
    srcs = ["py_package.bzl"],
    visibility = ["//:__subpackages__"],
)

bzl_library(
    name = "py_runtime_pair_macro_bzl",
    srcs = ["py_runtime_pair_macro.bzl"],
    visibility = ["//:__subpackages__"],
    deps = [":py_runtime_pair_rule_bzl"],
)

bzl_library(
    name = "py_runtime_pair_rule_bzl",
    srcs = ["py_runtime_pair_rule.bzl"],
    deps = [
        "//python:py_runtime_bzl",
        "//python:py_runtime_info_bzl",
    ],
)

bzl_library(
    name = "py_wheel_bzl",
    srcs = ["py_wheel.bzl"],
    visibility = ["//:__subpackages__"],
    deps = [
        ":py_package_bzl",
        ":stamp_bzl",
    ],
)

bzl_library(
    name = "reexports_bzl",
    srcs = ["reexports.bzl"],
    visibility = [
        "//docs:__pkg__",
        "//python:__pkg__",
    ],
    deps = [":bazel_tools_bzl"],
)

bzl_library(
    name = "register_extension_info_bzl",
    srcs = ["register_extension_info.bzl"],
)

bzl_library(
    name = "render_pkg_aliases_bzl",
    srcs = ["render_pkg_aliases.bzl"],
    deps = [
        ":normalize_name_bzl",
        ":text_util_bzl",
        ":version_label_bzl",
    ],
)

bzl_library(
    name = "stamp_bzl",
    srcs = ["stamp.bzl"],
    visibility = ["//:__subpackages__"],
)

bzl_library(
    name = "text_util_bzl",
    srcs = ["text_util.bzl"],
)

bzl_library(
    name = "toolchains_repo_bzl",
    srcs = ["toolchains_repo.bzl"],
    deps = [
        ":which_bzl",
        "//python:versions_bzl",
    ],
)

bzl_library(
    name = "util_bzl",
    srcs = ["util.bzl"],
    visibility = [
        "//docs:__subpackages__",
        "//python:__subpackages__",
    ],
    deps = ["@bazel_skylib//lib:types"],
)

bzl_library(
    name = "version_label_bzl",
    srcs = ["version_label.bzl"],
)

bzl_library(
    name = "which_bzl",
    srcs = ["which.bzl"],
    visibility = [
        "//docs:__subpackages__",
        "//python:__subpackages__",
    ],
)

# @bazel_tools can't define bzl_library itself, so we just put a wrapper around it.
bzl_library(
    name = "bazel_tools_bzl",
    srcs = [
        # This set of sources is overly broad, but it's the only public
        # target available across Bazel versions that has all the necessary
        # sources.
        "@bazel_tools//tools:bzl_srcs",
    ],
)

# Needed to define bzl_library targets for docgen. (We don't define the
# bzl_library target here because it'd give our users a transitive dependency
# on Skylib.)
exports_files(
    [
        "coverage.patch",
        "py_package.bzl",
        "py_wheel.bzl",
        "py_wheel_normalize_pep440.bzl",
        "reexports.bzl",
        "stamp.bzl",
        "util.bzl",
        "py_cc_toolchain_rule.bzl",
    ],
    visibility = ["//:__subpackages__"],
)

# Used to determine the use of `--stamp` in Starlark rules
stamp_build_setting(name = "stamp")

print_toolchains_checksums(name = "print_toolchains_checksums")

# Used for py_console_script_gen rule
py_binary(
    name = "py_console_script_gen_py",
    srcs = ["py_console_script_gen.py"],
    main = "py_console_script_gen.py",
    visibility = [
        "//visibility:public",
    ],
)

py_library(
    name = "py_console_script_gen_lib",
    srcs = ["py_console_script_gen.py"],
    imports = ["../.."],
    visibility = [
        "//tests/entry_points:__pkg__",
    ],
)
