# 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 = "pip_repository_bzl",
    srcs = ["pip_repository.bzl"],
    deps = [
        ":repositories_bzl",
        ":requirements_parser_bzl",
        "//python:repositories_bzl",
        "//python:versions_bzl",
        "//python/pip_install/private:generate_group_library_build_bazel_bzl",
        "//python/pip_install/private:generate_whl_library_build_bazel_bzl",
        "//python/pip_install/private:srcs_bzl",
        "//python/private:bzlmod_enabled_bzl",
        "//python/private:normalize_name_bzl",
        "//python/private:parse_whl_name_bzl",
        "//python/private:patch_whl_bzl",
        "//python/private:render_pkg_aliases_bzl",
        "//python/private:toolchains_repo_bzl",
        "//python/private:which_bzl",
        "//python/private:whl_target_platforms_bzl",
        "@bazel_skylib//lib:sets",
    ],
)

bzl_library(
    name = "requirements_bzl",
    srcs = ["requirements.bzl"],
    deps = [
        ":repositories_bzl",
        "//python:defs_bzl",
    ],
)

bzl_library(
    name = "requirements_parser_bzl",
    srcs = ["requirements_parser.bzl"],
)

bzl_library(
    name = "repositories_bzl",
    srcs = ["repositories.bzl"],
    deps = [
        "//:version_bzl",
        "//python/private:bazel_tools_bzl",
        "@bazel_skylib//lib:versions",
    ],
)

filegroup(
    name = "distribution",
    srcs = glob(["*.bzl"]) + [
        "BUILD.bazel",
        "pip_repository_requirements.bzl.tmpl",
        "//python/pip_install/private:distribution",
        "//python/pip_install/tools/dependency_resolver:distribution",
        "//python/pip_install/tools/wheel_installer:distribution",
    ],
    visibility = ["//:__pkg__"],
)

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

filegroup(
    name = "requirements_txt",
    srcs = ["tools/requirements.txt"],
    visibility = ["//tools/private/update_deps:__pkg__"],
)

filegroup(
    name = "bzl",
    srcs = glob(["*.bzl"]) + [
        "//python/pip_install/private:bzl_srcs",
    ],
    visibility = ["//:__subpackages__"],
)

filegroup(
    name = "py_srcs",
    srcs = [
        "//python/pip_install/tools/dependency_resolver:py_srcs",
        "//python/pip_install/tools/wheel_installer:py_srcs",
        "//python/private:repack_whl.py",
        "//tools:wheelmaker.py",
    ],
    visibility = ["//python/pip_install/private:__pkg__"],
)

exports_files(
    glob(["*.bzl"]),
    visibility = ["//docs:__pkg__"],
)
