| # Copyright 2024 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. |
| |
| """This module implements an alias rule to the resolved toolchain. |
| """ |
| |
| load("//python/uv/private:toolchain_types.bzl", "UV_TOOLCHAIN_TYPE") |
| |
| _DOC = """\ |
| Exposes a concrete toolchain which is the result of Bazel resolving the |
| toolchain for the execution or target platform. |
| Workaround for https://github.com/bazelbuild/bazel/issues/14009 |
| """ |
| |
| # Forward all the providers |
| def _current_toolchain_impl(ctx): |
| toolchain_info = ctx.toolchains[UV_TOOLCHAIN_TYPE] |
| |
| # Bazel requires executable rules to create the executable themselves, |
| # so we create a symlink in this rule so that it appears this rule created its executable. |
| original_uv_executable = toolchain_info.uv_toolchain_info.uv[DefaultInfo].files_to_run.executable |
| |
| # Use `uv` as the name of the binary to make the help message well formatted |
| symlink_uv_executable = ctx.actions.declare_file("current_toolchain/uv".format(original_uv_executable.basename)) |
| ctx.actions.symlink(output = symlink_uv_executable, target_file = original_uv_executable) |
| |
| new_default_info = DefaultInfo( |
| files = depset([symlink_uv_executable]), |
| runfiles = toolchain_info.default_info.default_runfiles, |
| executable = symlink_uv_executable, |
| ) |
| |
| template_variable_info = platform_common.TemplateVariableInfo({ |
| "UV_BIN": symlink_uv_executable.path, |
| }) |
| |
| return [ |
| toolchain_info, |
| new_default_info, |
| template_variable_info, |
| toolchain_info.uv_toolchain_info, |
| ] |
| |
| # Copied from java_toolchain_alias |
| # https://cs.opensource.google/bazel/bazel/+/master:tools/jdk/java_toolchain_alias.bzl |
| current_toolchain = rule( |
| implementation = _current_toolchain_impl, |
| toolchains = [UV_TOOLCHAIN_TYPE], |
| doc = _DOC, |
| executable = True, |
| ) |