Files
Chandler Carruth b344f3af12 Switch a few stragglers to uv and update python to 3.12 (#7296)
Not sure how these got missed when moving other things to `uv`, but this
should clean them up.

The bump to Python 3.12 is so that we can use `@override` with the
simple import from `typing`. This is needed by the newest versions of
`ty` to do type checking. Added the relevant `@override` annotations.

Assisted-by: Antigravity with Gemini
2026-06-03 05:34:44 +00:00

70 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# ///
"""Update the roots of the Carbon build used for dependency checking.
The dependency checking cannot use wildcard queries, so we use them here and
then create lists of relevant roots in the build file.
"""
__copyright__ = """
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
"""
import os
import subprocess
from pathlib import Path
# Change the working directory to the repository root so that the remaining
# operations reliably operate relative to that root.
os.chdir(Path(__file__).parents[2])
print("Compute non-test C++ root targets...")
query_arg = (
"let non_tests = attr("
" testonly, 0, //..."
# Exclude tree_sitter because its @platforms dependency errors in
# query. Note if it ends up in releases, we might want to do more,
# but that should also be caught by check_deps.py.
" except //utils/tree_sitter/..."
# Exclude tcmalloc as an optional external library.
" except //bazel/malloc:tcmalloc_if_linux_opt"
") in kind('(cc|pkg)_.* rule', deps($non_tests))"
)
non_test_cc_roots_query = subprocess.check_output(
[
"./scripts/run_bazel.py",
"query",
"--noshow_progress",
"--noimplicit_deps",
"--notool_deps",
"--output=minrank",
query_arg,
],
universal_newlines=True,
)
ranked_targets = [line.split() for line in non_test_cc_roots_query.splitlines()]
roots = [target for rank, target in ranked_targets if int(rank) == 0]
print("Found roots:\n%s" % "\n".join(roots))
print("Replace non-test C++ roots in the BUILD file...")
buildozer_run = subprocess.run(
[
"./scripts/run_buildozer.py",
"remove data",
]
+ ["add data '%s'" % root for root in roots]
+ ["//bazel/check_deps:non_test_cc_rules"],
)
if buildozer_run.returncode == 3:
print("No changes needed!")
else:
buildozer_run.check_returncode()
print("Successfully updated roots in the BUILD file!")