mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 20:20:10 +01:00
This removes the install marker-relative path checks, and replaces it with bidirectional verification: previously, files in the tar file had to be in install data, but there was no check that files in install data were all in the tar.
68 lines
2.8 KiB
Python
68 lines
2.8 KiB
Python
# Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
# Exceptions. See /LICENSE for license information.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
"""Rule to create variables for package naming."""
|
|
|
|
load("@rules_pkg//pkg:providers.bzl", "PackageVariablesInfo")
|
|
load("@rules_pkg//pkg:tar.bzl", "pkg_tar")
|
|
load("@rules_python//python:defs.bzl", "py_test")
|
|
load("//bazel/version:compute_version.bzl", "VERSION_ATTRS", "compute_version")
|
|
|
|
def _pkg_naming_variables_impl(ctx):
|
|
# TODO: Add support for digging the target CPU out of the toolchain here,
|
|
# remapping it to a more canonical name, and add that to the variables. The
|
|
# Bazel target CPU is already directly available, but it isn't likely
|
|
# canonical.
|
|
# TODO: Include the target OS as well as the target CPU. This likely needs
|
|
# similar re-mapping as the CPU does.
|
|
return PackageVariablesInfo(values = {
|
|
"version": compute_version(ctx),
|
|
})
|
|
|
|
pkg_naming_variables = rule(
|
|
implementation = _pkg_naming_variables_impl,
|
|
attrs = VERSION_ATTRS,
|
|
)
|
|
|
|
def pkg_tar_and_test(name_base, package_file_name_base, install_data_manifest, **kwargs):
|
|
"""Create a `pkg_tar` and a test for both `.tar` and `.tar.gz` extensions.
|
|
|
|
Args:
|
|
name_base:
|
|
The base name of the rules and tests. Will have `tar` or `tar_gz` added
|
|
and then `_rule` for the `pkg_tar` and `_test` for the test.
|
|
package_file_name_base:
|
|
The base of the `package_file_name` attribute to `pkg_tar`. The file
|
|
extensions will be appended after a `.`.
|
|
install_data_manifest:
|
|
The install data manifest file to compare with.
|
|
**kwargs:
|
|
Passed to `pkg_tar` for all the rest of its attributes.
|
|
"""
|
|
for file_ext in ["tar", "tar.gz"]:
|
|
target_ext = file_ext.replace(".", "_")
|
|
tar_target = name_base + "_" + target_ext + "_rule"
|
|
pkg_tar(
|
|
name = tar_target,
|
|
extension = file_ext,
|
|
package_file_name = package_file_name_base + "." + file_ext,
|
|
# The compressed tar is slow, exclude building and testing that.
|
|
tags = ["manual"] if file_ext == "tar.gz" else [],
|
|
**kwargs
|
|
)
|
|
|
|
py_test(
|
|
name = name_base + "_" + target_ext + "_test",
|
|
size = "small",
|
|
srcs = ["toolchain_tar_test.py"],
|
|
data = [":" + tar_target, install_data_manifest],
|
|
env = {
|
|
"INSTALL_DATA_MANIFEST": "$(location {})".format(install_data_manifest),
|
|
"TAR_FILE": "$(location :{})".format(tar_target),
|
|
},
|
|
main = "toolchain_tar_test.py",
|
|
# The compressed tar is slow, exclude building and testing that.
|
|
tags = ["manual"] if file_ext == "tar.gz" else [],
|
|
)
|