# 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",
        "internal_deps.bzl",
        "internal_setup.bzl",
        "version.bzl",
        "//python:distribution",
        "//python/pip_install:distribution",
        "//tools:distribution",
        "@rules_python_gazelle_plugin//:distribution",
    ],
    visibility = [
        "//examples:__pkg__",
        "//tests:__pkg__",
        "//tests/toolchains:__pkg__",
    ],
)

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"],
)
