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

load("@bazel_skylib//:bzl_library.bzl", "bzl_library")

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

bzl_library(
    name = "attributes_bazel_bzl",
    srcs = ["attributes_bazel.bzl"],
)

bzl_library(
    name = "attributes_bzl",
    srcs = ["attributes.bzl"],
    deps = [
        ":common_bzl",
        ":providers_bzl",
        ":py_internal_bzl",
        ":semantics_bzl",
        "//python/private:reexports_bzl",
    ],
)

bzl_library(
    name = "cc_helper_bzl",
    srcs = ["cc_helper.bzl"],
    deps = [":py_internal_bzl"],
)

bzl_library(
    name = "common_bazel_bzl",
    srcs = ["common_bazel.bzl"],
    deps = [
        ":common_bzl",
        ":providers_bzl",
        ":py_internal_bzl",
        "@bazel_skylib//lib:paths",
    ],
)

bzl_library(
    name = "common_bzl",
    srcs = ["common.bzl"],
    deps = [
        ":cc_helper_bzl",
        ":providers_bzl",
        ":py_internal_bzl",
        ":semantics_bzl",
        "//python/private:reexports_bzl",
    ],
)

filegroup(
    name = "distribution",
    srcs = glob(["**"]),
)

bzl_library(
    name = "providers_bzl",
    srcs = ["providers.bzl"],
    deps = [
        ":semantics_bzl",
        "//python/private:util_bzl",
    ],
)

bzl_library(
    name = "py_binary_macro_bazel_bzl",
    srcs = ["py_binary_macro_bazel.bzl"],
    deps = [
        ":common_bzl",
        ":py_binary_rule_bazel_bzl",
    ],
)

bzl_library(
    name = "py_binary_rule_bazel_bzl",
    srcs = ["py_binary_rule_bazel.bzl"],
    deps = [
        ":attributes_bzl",
        ":py_executable_bazel_bzl",
        ":semantics_bzl",
        "@bazel_skylib//lib:dicts",
    ],
)

bzl_library(
    name = "py_executable_bazel_bzl",
    srcs = ["py_executable_bazel.bzl"],
    deps = [
        ":attributes_bazel_bzl",
        ":common_bazel_bzl",
        ":common_bzl",
        ":providers_bzl",
        ":py_executable_bzl",
        ":py_internal_bzl",
        ":semantics_bzl",
    ],
)

bzl_library(
    name = "py_executable_bzl",
    srcs = ["py_executable.bzl"],
    deps = [
        ":attributes_bzl",
        ":cc_helper_bzl",
        ":common_bzl",
        ":providers_bzl",
        ":py_internal_bzl",
        "@bazel_skylib//lib:dicts",
    ],
)

bzl_library(
    name = "py_internal_bzl",
    srcs = ["py_internal.bzl"],
    deps = ["@rules_python_internal//:py_internal_bzl"],
)

bzl_library(
    name = "py_library_bzl",
    srcs = ["py_library.bzl"],
    deps = [
        ":attributes_bzl",
        ":common_bzl",
        ":providers_bzl",
        ":py_internal_bzl",
        "@bazel_skylib//lib:dicts",
    ],
)

bzl_library(
    name = "py_library_macro_bazel_bzl",
    srcs = ["py_library_macro_bazel.bzl"],
    deps = [":py_library_rule_bazel_bzl"],
)

bzl_library(
    name = "py_library_rule_bazel_bzl",
    srcs = ["py_library_rule_bazel.bzl"],
    deps = [
        ":attributes_bazel_bzl",
        ":common_bazel_bzl",
        ":common_bzl",
        ":py_library_bzl",
    ],
)

bzl_library(
    name = "py_runtime_macro_bzl",
    srcs = ["py_runtime_macro.bzl"],
    deps = [":py_runtime_rule_bzl"],
)

bzl_library(
    name = "py_runtime_rule_bzl",
    srcs = ["py_runtime_rule.bzl"],
    deps = [
        ":attributes_bzl",
        ":providers_bzl",
        ":py_internal_bzl",
        "//python/private:reexports_bzl",
        "//python/private:util_bzl",
        "@bazel_skylib//lib:dicts",
        "@bazel_skylib//lib:paths",
    ],
)

bzl_library(
    name = "py_test_macro_bazel_bzl",
    srcs = ["py_test_macro_bazel.bzl"],
    deps = [
        ":common_bazel_bzl",
        ":py_test_rule_bazel_bzl",
    ],
)

bzl_library(
    name = "py_test_rule_bazel_bzl",
    srcs = ["py_test_rule_bazel.bzl"],
    deps = [
        ":attributes_bzl",
        ":common_bzl",
        ":py_executable_bazel_bzl",
        ":semantics_bzl",
        "@bazel_skylib//lib:dicts",
    ],
)

bzl_library(
    name = "semantics_bzl",
    srcs = ["semantics.bzl"],
)
