blob: 6b8a59ee85abb0814aa90a60aab086e875e94610 [file] [edit]
# Copyright 2026 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Run mypy for a given target, whether binary or library
#
# Parameters
#
# target_type (required)
# Indicates if this is a binary or a library target
# Type: string (valid values: "library", "binary")
#
# library_infos (required)
# The target that generates a json file with all the library dependency info
# Type: GN target label
#
# sources (required)
# The list of python source files in the library or binary
# Type: list of GN file paths
#
# Binary-specific parameters:
#
# data_package_name (optional)
# The name of the python package for data files
# Type: string
#
# data_sources (optional)
# The source files to add to the data package. Requires 'data_package_name'.
# Type: list of GN file paths
#
# GN usual (optional):
# assert_no_deps
# deps
# testonly
# visibility
#
template("validate_python") {
_library_infos_target_outputs = get_target_outputs(invoker.library_infos)
_library_infos_file = _library_infos_target_outputs[0]
action(target_name) {
forward_variables_from(invoker,
[
"assert_no_deps",
"testonly",
"visibility",
])
inputs = [
"//pyproject.toml",
"//build/python/package_python_binary.py",
_library_infos_file,
] + invoker.sources
script = "//build/python/mypy_checker.py"
outputs = [ "${target_out_dir}/${target_name}.mypy_checked" ]
depfile = "${target_out_dir}/${target_name}.d"
mnemonic = "MYPY"
args = [
"--target_type",
invoker.target_type,
"--target_name",
target_name,
"--library_infos",
rebase_path(_library_infos_file, root_build_dir),
"--gen_dir",
rebase_path(target_gen_dir, root_build_dir),
"--depfile",
rebase_path(depfile, root_build_dir),
"--output",
rebase_path(outputs[0], root_build_dir),
]
if (invoker.target_type == "binary") {
args += [ "--sources" ]
args += rebase_path(invoker.sources, root_build_dir)
if (defined(invoker.data_package_name)) {
args += [
"--data_package_name",
invoker.data_package_name,
]
}
if (defined(invoker.data_sources)) {
args += [ "--data_sources" ]
args += rebase_path(invoker.data_sources, root_build_dir)
}
}
deps = [ invoker.library_infos ]
# Required for generated sources like C extension wrappers.
if (defined(invoker.deps)) {
deps += invoker.deps
}
}
}
# Run mypy for a library
#
# Parameters
#
# library_infos (required)
# The target that generates a json file with all the library dependency info
# Type: GN target label
#
# sources (required)
# The list of python source files in the library or binary
# Type: list of GN file paths
#
# GN usual (optional):
# assert_no_deps
# deps
# testonly
# visibility
#
template("validate_python_library") {
validate_python(target_name) {
forward_variables_from(invoker,
[
"assert_no_deps",
"deps",
"library_infos",
"sources",
"testonly",
"visibility",
])
target_type = "library"
}
}
# Run mypy for a python binary
#
# Parameters
#
# library_infos (required)
# The target that generates a json file with all the library dependency info
# Type: GN target label
#
# sources (required)
# The list of python source files in the library or binary
# Type: list of GN file paths
#
# data_package_name (optional)
# The name of the python package for data files
# Type: string
#
# data_sources (optional)
# The source files to add to the data package. Requires 'data_package_name'.
# Type: list of GN file paths
#
# GN usual (optional):
# assert_no_deps
# deps
# testonly
# visibility
#
template("validate_python_binary") {
validate_python(target_name) {
forward_variables_from(invoker,
[
"assert_no_deps",
"data_package_name",
"data_sources",
"deps",
"library_infos",
"sources",
"testonly",
"visibility",
])
target_type = "binary"
}
}