# Copyright 2017 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(":version.bzl", "BAZEL_VERSION")

package(default_visibility = ["//visibility:public"])

licenses(["notice"])

exports_files([
    "LICENSE",
    "version.bzl",
])

exports_files(
    glob(["*.md"]),
    visibility = ["//docs:__subpackages__"],
)

filegroup(
    name = "distribution",
    srcs = [
        "BUILD.bazel",
        "MODULE.bazel",
        "WORKSPACE",
        "WORKSPACE.bzlmod",
        "internal_deps.bzl",
        "internal_setup.bzl",
        "version.bzl",
        "//python:distribution",
        "//python/pip_install:distribution",
        "//tools:distribution",
        "@rules_python_gazelle_plugin//:distribution",
    ],
    visibility = [
        "//:__subpackages__",
    ],
)

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

# Reexport of all bzl files used to allow downstream rules to generate docs
# without shipping with a dependency on Skylib
filegroup(
    name = "bzl",
    srcs = [
        "//python/pip_install:bzl",
        "//python:bzl",
        # Requires Bazel 0.29 onward for public visibility of these .bzl files.
        "@bazel_tools//tools/python:python_version.bzl",
        "@bazel_tools//tools/python:srcs_version.bzl",
        "@bazel_tools//tools/python:toolchain.bzl",
        "@bazel_tools//tools/python:utils.bzl",
    ],
    visibility = ["//visibility:public"],
)

genrule(
    name = "assert_bazelversion",
    srcs = [".bazelversion"],
    outs = ["assert_bazelversion_test.sh"],
    cmd = """\
set -o errexit -o nounset -o pipefail
current=$$(cat "$(execpath .bazelversion)")
cat > "$@" <<EOF
#!/usr/bin/env bash
set -o errexit -o nounset -o pipefail
if [[ \"$${{current}}\" != \"{expected}\" ]]; then
    >&2 echo "ERROR: current bazel version '$${{current}}' is not the expected '{expected}'"
    exit 1
fi
EOF
""".format(
        expected = BAZEL_VERSION,
    ),
    executable = True,
)

sh_test(
    name = "assert_bazelversion_test",
    srcs = [":assert_bazelversion_test.sh"],
)
