various low-hanging typing fruit

ninjabackend.py goes down from 322 type errors to 253, mainly by marking
functions as returning None.
pull/13483/head
Eli Schwartz 6 months ago
parent 2daf5f7c9d
commit 433c13c5c4
No known key found for this signature in database
GPG Key ID: CEB167EFB5722BD6
  1. 112
      mesonbuild/backend/ninjabackend.py

@ -45,6 +45,7 @@ if T.TYPE_CHECKING:
from ..linkers.linkers import DynamicLinker, StaticLinker from ..linkers.linkers import DynamicLinker, StaticLinker
from ..compilers.cs import CsCompiler from ..compilers.cs import CsCompiler
from ..compilers.fortran import FortranCompiler from ..compilers.fortran import FortranCompiler
from ..mesonlib import FileOrString
CommandArgOrStr = T.List[T.Union['NinjaCommandArg', str]] CommandArgOrStr = T.List[T.Union['NinjaCommandArg', str]]
RUST_EDITIONS = Literal['2015', '2018', '2021'] RUST_EDITIONS = Literal['2015', '2018', '2021']
@ -333,7 +334,7 @@ class NinjaBuildElement:
else: else:
self.deps.add(dep) self.deps.add(dep)
def add_orderdep(self, dep): def add_orderdep(self, dep) -> None:
if isinstance(dep, list): if isinstance(dep, list):
self.orderdeps.update(dep) self.orderdeps.update(dep)
else: else:
@ -351,7 +352,7 @@ class NinjaBuildElement:
if name == 'DEPFILE': if name == 'DEPFILE':
self.elems.append((name + '_UNQUOTED', elems)) self.elems.append((name + '_UNQUOTED', elems))
def _should_use_rspfile(self): def _should_use_rspfile(self) -> bool:
# 'phony' is a rule built-in to ninja # 'phony' is a rule built-in to ninja
if self.rulename == 'phony': if self.rulename == 'phony':
return False return False
@ -366,14 +367,14 @@ class NinjaBuildElement:
outfilenames, outfilenames,
self.elems) >= rsp_threshold self.elems) >= rsp_threshold
def count_rule_references(self): def count_rule_references(self) -> None:
if self.rulename != 'phony': if self.rulename != 'phony':
if self._should_use_rspfile(): if self._should_use_rspfile():
self.rule.rsprefcount += 1 self.rule.rsprefcount += 1
else: else:
self.rule.refcount += 1 self.rule.refcount += 1
def write(self, outfile): def write(self, outfile: T.TextIO) -> None:
if self.output_errors: if self.output_errors:
raise MesonException(self.output_errors) raise MesonException(self.output_errors)
ins = ' '.join([ninja_quote(i, True) for i in self.infilenames]) ins = ' '.join([ninja_quote(i, True) for i in self.infilenames])
@ -432,7 +433,7 @@ class NinjaBuildElement:
outfile.write(line) outfile.write(line)
outfile.write('\n') outfile.write('\n')
def check_outputs(self): def check_outputs(self) -> None:
for n in self.outfilenames: for n in self.outfilenames:
if n in self.all_outputs: if n in self.all_outputs:
self.output_errors = f'Multiple producers for Ninja target "{n}". Please rename your targets.' self.output_errors = f'Multiple producers for Ninja target "{n}". Please rename your targets.'
@ -713,7 +714,7 @@ class NinjaBackend(backends.Backend):
f, indent=4) f, indent=4)
# http://clang.llvm.org/docs/JSONCompilationDatabase.html # http://clang.llvm.org/docs/JSONCompilationDatabase.html
def generate_compdb(self): def generate_compdb(self) -> None:
rules = [] rules = []
# TODO: Rather than an explicit list here, rules could be marked in the # TODO: Rather than an explicit list here, rules could be marked in the
# rule store as being wanted in compdb # rule store as being wanted in compdb
@ -735,10 +736,10 @@ class NinjaBackend(backends.Backend):
# Get all generated headers. Any source file might need them so # Get all generated headers. Any source file might need them so
# we need to add an order dependency to them. # we need to add an order dependency to them.
def get_generated_headers(self, target): def get_generated_headers(self, target: build.BuildTarget) -> T.List[FileOrString]:
if hasattr(target, 'cached_generated_headers'): if hasattr(target, 'cached_generated_headers'):
return target.cached_generated_headers return target.cached_generated_headers
header_deps = [] header_deps: T.List[FileOrString] = []
# XXX: Why don't we add deps to CustomTarget headers here? # XXX: Why don't we add deps to CustomTarget headers here?
for genlist in target.get_generated_sources(): for genlist in target.get_generated_sources():
if isinstance(genlist, (build.CustomTarget, build.CustomTargetIndex)): if isinstance(genlist, (build.CustomTarget, build.CustomTargetIndex)):
@ -798,7 +799,7 @@ class NinjaBackend(backends.Backend):
return True return True
def create_target_source_introspection(self, target: build.Target, comp: compilers.Compiler, parameters, sources, generated_sources, def create_target_source_introspection(self, target: build.Target, comp: compilers.Compiler, parameters, sources, generated_sources,
unity_sources: T.Optional[T.List[mesonlib.FileOrString]] = None): unity_sources: T.Optional[T.List[FileOrString]] = None) -> None:
''' '''
Adds the source file introspection information for a language of a target Adds the source file introspection information for a language of a target
@ -837,7 +838,7 @@ class NinjaBackend(backends.Backend):
} }
tgt[id_hash] = src_block tgt[id_hash] = src_block
def compute_path(file: mesonlib.FileOrString) -> str: def compute_path(file: FileOrString) -> str:
""" Make source files absolute """ """ Make source files absolute """
if isinstance(file, File): if isinstance(file, File):
return file.absolute_path(self.source_dir, self.build_dir) return file.absolute_path(self.source_dir, self.build_dir)
@ -848,7 +849,7 @@ class NinjaBackend(backends.Backend):
if unity_sources: if unity_sources:
src_block['unity_sources'].extend(compute_path(x) for x in unity_sources) src_block['unity_sources'].extend(compute_path(x) for x in unity_sources)
def create_target_linker_introspection(self, target: build.Target, linker: T.Union[Compiler, StaticLinker], parameters): def create_target_linker_introspection(self, target: build.Target, linker: T.Union[Compiler, StaticLinker], parameters) -> None:
tid = target.get_id() tid = target.get_id()
tgt = self.introspection_data[tid] tgt = self.introspection_data[tid]
lnk_hash = tuple(parameters) lnk_hash = tuple(parameters)
@ -868,7 +869,7 @@ class NinjaBackend(backends.Backend):
} }
tgt[lnk_hash] = lnk_block tgt[lnk_hash] = lnk_block
def generate_target(self, target): def generate_target(self, target) -> None:
if isinstance(target, build.BuildTarget): if isinstance(target, build.BuildTarget):
os.makedirs(self.get_target_private_dir_abs(target), exist_ok=True) os.makedirs(self.get_target_private_dir_abs(target), exist_ok=True)
if isinstance(target, build.CustomTarget): if isinstance(target, build.CustomTarget):
@ -1108,7 +1109,7 @@ class NinjaBackend(backends.Backend):
compiled_sources: T.List[str], compiled_sources: T.List[str],
source2object: T.Dict[str, str], source2object: T.Dict[str, str],
generated_source_files: T.List[mesonlib.File], generated_source_files: T.List[mesonlib.File],
object_deps: T.List['mesonlib.FileOrString']) -> None: object_deps: T.List[FileOrString]) -> None:
if not self.should_use_dyndeps_for_target(target): if not self.should_use_dyndeps_for_target(target):
return return
self._uses_dyndeps = True self._uses_dyndeps = True
@ -1152,12 +1153,12 @@ class NinjaBackend(backends.Backend):
elif ext.lower() in compilers.lang_suffixes['fortran']: elif ext.lower() in compilers.lang_suffixes['fortran']:
yield source, 'fortran' yield source, 'fortran'
def process_target_dependencies(self, target): def process_target_dependencies(self, target) -> None:
for t in target.get_dependencies(): for t in target.get_dependencies():
if t.get_id() not in self.processed_targets: if t.get_id() not in self.processed_targets:
self.generate_target(t) self.generate_target(t)
def custom_target_generator_inputs(self, target): def custom_target_generator_inputs(self, target) -> None:
for s in target.sources: for s in target.sources:
if isinstance(s, build.GeneratedList): if isinstance(s, build.GeneratedList):
self.generate_genlist_for_target(s, target) self.generate_genlist_for_target(s, target)
@ -1173,7 +1174,7 @@ class NinjaBackend(backends.Backend):
deps.append(os.path.join(self.get_target_dir(i), output)) deps.append(os.path.join(self.get_target_dir(i), output))
return deps return deps
def generate_custom_target(self, target: build.CustomTarget): def generate_custom_target(self, target: build.CustomTarget) -> None:
self.custom_target_generator_inputs(target) self.custom_target_generator_inputs(target)
(srcs, ofilenames, cmd) = self.eval_custom_target_command(target) (srcs, ofilenames, cmd) = self.eval_custom_target_command(target)
deps = self.unwrap_dep_list(target) deps = self.unwrap_dep_list(target)
@ -1215,14 +1216,14 @@ class NinjaBackend(backends.Backend):
self.add_build(elem) self.add_build(elem)
self.processed_targets.add(target.get_id()) self.processed_targets.add(target.get_id())
def build_run_target_name(self, target): def build_run_target_name(self, target) -> str:
if target.subproject != '': if target.subproject != '':
subproject_prefix = f'{target.subproject}@@' subproject_prefix = f'{target.subproject}@@'
else: else:
subproject_prefix = '' subproject_prefix = ''
return f'{subproject_prefix}{target.name}' return f'{subproject_prefix}{target.name}'
def generate_run_target(self, target: build.RunTarget): def generate_run_target(self, target: build.RunTarget) -> None:
target_name = self.build_run_target_name(target) target_name = self.build_run_target_name(target)
if not target.command: if not target.command:
# This is an alias target, it has no command, it just depends on # This is an alias target, it has no command, it just depends on
@ -1245,7 +1246,8 @@ class NinjaBackend(backends.Backend):
self.add_build(elem) self.add_build(elem)
self.processed_targets.add(target.get_id()) self.processed_targets.add(target.get_id())
def generate_coverage_command(self, elem: NinjaBuildElement, outputs: T.List[str], gcovr_exe: T.Optional[str], llvm_cov_exe: T.Optional[str]): def generate_coverage_command(self, elem: NinjaBuildElement, outputs: T.List[str],
gcovr_exe: T.Optional[str], llvm_cov_exe: T.Optional[str]) -> None:
targets = self.build.get_targets().values() targets = self.build.get_targets().values()
use_llvm_cov = False use_llvm_cov = False
exe_args = [] exe_args = []
@ -1272,14 +1274,14 @@ class NinjaBackend(backends.Backend):
exe_args + exe_args +
(['--use-llvm-cov'] if use_llvm_cov else [])) (['--use-llvm-cov'] if use_llvm_cov else []))
def generate_coverage_rules(self, gcovr_exe: T.Optional[str], gcovr_version: T.Optional[str], llvm_cov_exe: T.Optional[str]): def generate_coverage_rules(self, gcovr_exe: T.Optional[str], gcovr_version: T.Optional[str], llvm_cov_exe: T.Optional[str]) -> None:
e = self.create_phony_target('coverage', 'CUSTOM_COMMAND', 'PHONY') e = self.create_phony_target('coverage', 'CUSTOM_COMMAND', 'PHONY')
self.generate_coverage_command(e, [], gcovr_exe, llvm_cov_exe) self.generate_coverage_command(e, [], gcovr_exe, llvm_cov_exe)
e.add_item('description', 'Generates coverage reports') e.add_item('description', 'Generates coverage reports')
self.add_build(e) self.add_build(e)
self.generate_coverage_legacy_rules(gcovr_exe, gcovr_version, llvm_cov_exe) self.generate_coverage_legacy_rules(gcovr_exe, gcovr_version, llvm_cov_exe)
def generate_coverage_legacy_rules(self, gcovr_exe: T.Optional[str], gcovr_version: T.Optional[str], llvm_cov_exe: T.Optional[str]): def generate_coverage_legacy_rules(self, gcovr_exe: T.Optional[str], gcovr_version: T.Optional[str], llvm_cov_exe: T.Optional[str]) -> None:
e = self.create_phony_target('coverage-html', 'CUSTOM_COMMAND', 'PHONY') e = self.create_phony_target('coverage-html', 'CUSTOM_COMMAND', 'PHONY')
self.generate_coverage_command(e, ['--html'], gcovr_exe, llvm_cov_exe) self.generate_coverage_command(e, ['--html'], gcovr_exe, llvm_cov_exe)
e.add_item('description', 'Generates HTML coverage report') e.add_item('description', 'Generates HTML coverage report')
@ -1302,7 +1304,7 @@ class NinjaBackend(backends.Backend):
e.add_item('description', 'Generates Sonarqube XML coverage report') e.add_item('description', 'Generates Sonarqube XML coverage report')
self.add_build(e) self.add_build(e)
def generate_install(self): def generate_install(self) -> None:
self.create_install_data_files() self.create_install_data_files()
elem = self.create_phony_target('install', 'CUSTOM_COMMAND', 'PHONY') elem = self.create_phony_target('install', 'CUSTOM_COMMAND', 'PHONY')
elem.add_dep('all') elem.add_dep('all')
@ -1311,7 +1313,7 @@ class NinjaBackend(backends.Backend):
elem.add_item('pool', 'console') elem.add_item('pool', 'console')
self.add_build(elem) self.add_build(elem)
def generate_tests(self): def generate_tests(self) -> None:
self.serialize_tests() self.serialize_tests()
cmd = self.environment.get_build_command(True) + ['test', '--no-rebuild'] cmd = self.environment.get_build_command(True) + ['test', '--no-rebuild']
if not self.environment.coredata.get_option(OptionKey('stdsplit')): if not self.environment.coredata.get_option(OptionKey('stdsplit')):
@ -1334,7 +1336,7 @@ class NinjaBackend(backends.Backend):
elem.add_item('pool', 'console') elem.add_item('pool', 'console')
self.add_build(elem) self.add_build(elem)
def generate_rules(self): def generate_rules(self) -> None:
self.rules = [] self.rules = []
self.ruledict = {} self.ruledict = {}
@ -1409,7 +1411,7 @@ class NinjaBackend(backends.Backend):
elem = NinjaBuildElement(self.all_outputs, 'PHONY', 'phony', '') elem = NinjaBuildElement(self.all_outputs, 'PHONY', 'phony', '')
self.add_build(elem) self.add_build(elem)
def generate_jar_target(self, target: build.Jar): def generate_jar_target(self, target: build.Jar) -> None:
fname = target.get_filename() fname = target.get_filename()
outname_rel = os.path.join(self.get_target_dir(target), fname) outname_rel = os.path.join(self.get_target_dir(target), fname)
src_list = target.get_sources() src_list = target.get_sources()
@ -1463,7 +1465,7 @@ class NinjaBackend(backends.Backend):
# Create introspection information # Create introspection information
self.create_target_source_introspection(target, compiler, compile_args, src_list, gen_src_list) self.create_target_source_introspection(target, compiler, compile_args, src_list, gen_src_list)
def generate_cs_resource_tasks(self, target): def generate_cs_resource_tasks(self, target) -> T.Tuple[T.List[str], T.List[str]]:
args = [] args = []
deps = [] deps = []
for r in target.resources: for r in target.resources:
@ -1484,7 +1486,7 @@ class NinjaBackend(backends.Backend):
args.append(a) args.append(a)
return args, deps return args, deps
def generate_cs_target(self, target: build.BuildTarget): def generate_cs_target(self, target: build.BuildTarget) -> None:
fname = target.get_filename() fname = target.get_filename()
outname_rel = os.path.join(self.get_target_dir(target), fname) outname_rel = os.path.join(self.get_target_dir(target), fname)
src_list = target.get_sources() src_list = target.get_sources()
@ -1529,7 +1531,7 @@ class NinjaBackend(backends.Backend):
self.generate_generator_list_rules(target) self.generate_generator_list_rules(target)
self.create_target_source_introspection(target, compiler, commands, rel_srcs, generated_rel_srcs) self.create_target_source_introspection(target, compiler, commands, rel_srcs, generated_rel_srcs)
def determine_java_compile_args(self, target, compiler): def determine_java_compile_args(self, target, compiler) -> T.List[str]:
args = [] args = []
args = self.generate_basic_compiler_args(target, compiler) args = self.generate_basic_compiler_args(target, compiler)
args += target.get_java_args() args += target.get_java_args()
@ -1569,13 +1571,13 @@ class NinjaBackend(backends.Backend):
self.add_build(element) self.add_build(element)
return plain_class_paths return plain_class_paths
def generate_java_link(self): def generate_java_link(self) -> None:
rule = 'java_LINKER' rule = 'java_LINKER'
command = ['jar', '$ARGS'] command = ['jar', '$ARGS']
description = 'Creating JAR $out' description = 'Creating JAR $out'
self.add_rule(NinjaRule(rule, command, [], description)) self.add_rule(NinjaRule(rule, command, [], description))
def determine_dep_vapis(self, target): def determine_dep_vapis(self, target) -> T.List[str]:
""" """
Peek into the sources of BuildTargets we're linking with, and if any of Peek into the sources of BuildTargets we're linking with, and if any of
them was built with Vala, assume that it also generated a .vapi file of them was built with Vala, assume that it also generated a .vapi file of
@ -1838,7 +1840,7 @@ class NinjaBackend(backends.Backend):
return static_sources, generated_sources, cython_sources return static_sources, generated_sources, cython_sources
def _generate_copy_target(self, src: 'mesonlib.FileOrString', output: Path) -> None: def _generate_copy_target(self, src: FileOrString, output: Path) -> None:
"""Create a target to copy a source file from one location to another.""" """Create a target to copy a source file from one location to another."""
if isinstance(src, File): if isinstance(src, File):
instr = src.absolute_path(self.environment.source_dir, self.environment.build_dir) instr = src.absolute_path(self.environment.source_dir, self.environment.build_dir)
@ -2191,7 +2193,7 @@ class NinjaBackend(backends.Backend):
others.append(i) others.append(i)
return srcs, others return srcs, others
def generate_swift_target(self, target): def generate_swift_target(self, target) -> None:
module_name = self.target_swift_modulename(target) module_name = self.target_swift_modulename(target)
swiftc = target.compilers['swift'] swiftc = target.compilers['swift']
abssrc = [] abssrc = []
@ -2296,7 +2298,7 @@ class NinjaBackend(backends.Backend):
options['rspfile_quote_style'] = tool.rsp_file_syntax() options['rspfile_quote_style'] = tool.rsp_file_syntax()
return options return options
def generate_static_link_rules(self): def generate_static_link_rules(self) -> None:
num_pools = self.environment.coredata.optstore.get_value('backend_max_links') num_pools = self.environment.coredata.optstore.get_value('backend_max_links')
if 'java' in self.environment.coredata.compilers.host: if 'java' in self.environment.coredata.compilers.host:
self.generate_java_link() self.generate_java_link()
@ -2344,7 +2346,7 @@ class NinjaBackend(backends.Backend):
options = self._rsp_options(static_linker) options = self._rsp_options(static_linker)
self.add_rule(NinjaRule(rule, cmdlist, args, description, **options, extra=pool)) self.add_rule(NinjaRule(rule, cmdlist, args, description, **options, extra=pool))
def generate_dynamic_link_rules(self): def generate_dynamic_link_rules(self) -> None:
num_pools = self.environment.coredata.optstore.get_value('backend_max_links') num_pools = self.environment.coredata.optstore.get_value('backend_max_links')
for for_machine in MachineChoice: for for_machine in MachineChoice:
complist = self.environment.coredata.compilers[for_machine] complist = self.environment.coredata.compilers[for_machine]
@ -2383,7 +2385,7 @@ class NinjaBackend(backends.Backend):
synstat = 'restat = 1' synstat = 'restat = 1'
self.add_rule(NinjaRule(symrule, symcmd, [], syndesc, extra=synstat)) self.add_rule(NinjaRule(symrule, symcmd, [], syndesc, extra=synstat))
def generate_java_compile_rule(self, compiler): def generate_java_compile_rule(self, compiler) -> None:
rule = self.compiler_to_rule_name(compiler) rule = self.compiler_to_rule_name(compiler)
command = compiler.get_exelist() + ['$ARGS', '$in'] command = compiler.get_exelist() + ['$ARGS', '$in']
description = 'Compiling Java sources for $FOR_JAR' description = 'Compiling Java sources for $FOR_JAR'
@ -2398,7 +2400,7 @@ class NinjaBackend(backends.Backend):
rspable=mesonlib.is_windows(), rspable=mesonlib.is_windows(),
rspfile_quote_style=compiler.rsp_file_syntax())) rspfile_quote_style=compiler.rsp_file_syntax()))
def generate_vala_compile_rules(self, compiler): def generate_vala_compile_rules(self, compiler) -> None:
rule = self.compiler_to_rule_name(compiler) rule = self.compiler_to_rule_name(compiler)
command = compiler.get_exelist() + ['$ARGS', '$in'] command = compiler.get_exelist() + ['$ARGS', '$in']
description = 'Compiling Vala source $in' description = 'Compiling Vala source $in'
@ -2419,7 +2421,7 @@ class NinjaBackend(backends.Backend):
depfile=depfile, depfile=depfile,
extra='restat = 1')) extra='restat = 1'))
def generate_rust_compile_rules(self, compiler): def generate_rust_compile_rules(self, compiler) -> None:
rule = self.compiler_to_rule_name(compiler) rule = self.compiler_to_rule_name(compiler)
command = compiler.get_exelist() + ['$ARGS', '$in'] command = compiler.get_exelist() + ['$ARGS', '$in']
description = 'Compiling Rust source $in' description = 'Compiling Rust source $in'
@ -2428,7 +2430,7 @@ class NinjaBackend(backends.Backend):
self.add_rule(NinjaRule(rule, command, [], description, deps=depstyle, self.add_rule(NinjaRule(rule, command, [], description, deps=depstyle,
depfile=depfile)) depfile=depfile))
def generate_swift_compile_rules(self, compiler): def generate_swift_compile_rules(self, compiler) -> None:
rule = self.compiler_to_rule_name(compiler) rule = self.compiler_to_rule_name(compiler)
full_exe = self.environment.get_build_command() + [ full_exe = self.environment.get_build_command() + [
'--internal', '--internal',
@ -2459,7 +2461,7 @@ https://groups.google.com/forum/#!topic/ninja-build/j-2RfBIOd_8
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
self.add_rule(NinjaRule(rule, cmd, [], 'Dep hack', extra='restat = 1')) self.add_rule(NinjaRule(rule, cmd, [], 'Dep hack', extra='restat = 1'))
def generate_llvm_ir_compile_rule(self, compiler): def generate_llvm_ir_compile_rule(self, compiler) -> None:
if self.created_llvm_ir_rule[compiler.for_machine]: if self.created_llvm_ir_rule[compiler.for_machine]:
return return
rule = self.get_compiler_rule_name('llvm_ir', compiler.for_machine) rule = self.get_compiler_rule_name('llvm_ir', compiler.for_machine)
@ -2472,7 +2474,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
self.add_rule(NinjaRule(rule, command, args, description, **options)) self.add_rule(NinjaRule(rule, command, args, description, **options))
self.created_llvm_ir_rule[compiler.for_machine] = True self.created_llvm_ir_rule[compiler.for_machine] = True
def generate_compile_rule_for(self, langname, compiler): def generate_compile_rule_for(self, langname: str, compiler: Compiler) -> None:
if langname == 'java': if langname == 'java':
self.generate_java_compile_rule(compiler) self.generate_java_compile_rule(compiler)
return return
@ -2518,7 +2520,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
self.add_rule(NinjaRule(rule, command, args, description, **options, self.add_rule(NinjaRule(rule, command, args, description, **options,
deps=deps, depfile=depfile)) deps=deps, depfile=depfile))
def generate_pch_rule_for(self, langname, compiler): def generate_pch_rule_for(self, langname: str, compiler: Compiler) -> None:
if langname not in {'c', 'cpp'}: if langname not in {'c', 'cpp'}:
return return
rule = self.compiler_to_pch_rule_name(compiler) rule = self.compiler_to_pch_rule_name(compiler)
@ -2544,7 +2546,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
self.add_rule(NinjaRule(rule, command, [], description, deps=deps, self.add_rule(NinjaRule(rule, command, [], description, deps=deps,
depfile=depfile)) depfile=depfile))
def generate_scanner_rules(self): def generate_scanner_rules(self) -> None:
rulename = 'depscan' rulename = 'depscan'
if rulename in self.ruledict: if rulename in self.ruledict:
# Scanning command is the same for native and cross compilation. # Scanning command is the same for native and cross compilation.
@ -2556,7 +2558,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
rule = NinjaRule(rulename, command, args, description) rule = NinjaRule(rulename, command, args, description)
self.add_rule(rule) self.add_rule(rule)
def generate_compile_rules(self): def generate_compile_rules(self) -> None:
for for_machine in MachineChoice: for for_machine in MachineChoice:
clist = self.environment.coredata.compilers[for_machine] clist = self.environment.coredata.compilers[for_machine]
for langname, compiler in clist.items(): for langname, compiler in clist.items():
@ -2567,7 +2569,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
for mode in compiler.get_modes(): for mode in compiler.get_modes():
self.generate_compile_rule_for(langname, mode) self.generate_compile_rule_for(langname, mode)
def generate_generator_list_rules(self, target): def generate_generator_list_rules(self, target) -> None:
# CustomTargets have already written their rules and # CustomTargets have already written their rules and
# CustomTargetIndexes don't actually get generated, so write rules for # CustomTargetIndexes don't actually get generated, so write rules for
# GeneratedLists here # GeneratedLists here
@ -2652,7 +2654,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
elem.add_item('COMMAND', cmdlist) elem.add_item('COMMAND', cmdlist)
self.add_build(elem) self.add_build(elem)
def scan_fortran_module_outputs(self, target): def scan_fortran_module_outputs(self, target) -> None:
""" """
Find all module and submodule made available in a Fortran code file. Find all module and submodule made available in a Fortran code file.
""" """
@ -2794,7 +2796,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
return linker.get_link_debugfile_args(filename) return linker.get_link_debugfile_args(filename)
return [] return []
def generate_llvm_ir_compile(self, target, src: mesonlib.FileOrString): def generate_llvm_ir_compile(self, target, src: FileOrString):
base_proxy = target.get_options() base_proxy = target.get_options()
compiler = get_compiler_for_source(target.compilers.values(), src) compiler = get_compiler_for_source(target.compilers.values(), src)
commands = compiler.compiler_args() commands = compiler.compiler_args()
@ -2954,9 +2956,9 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
def generate_single_compile(self, target: build.BuildTarget, src, def generate_single_compile(self, target: build.BuildTarget, src,
is_generated: bool = False, header_deps=None, is_generated: bool = False, header_deps=None,
order_deps: T.Optional[T.List['mesonlib.FileOrString']] = None, order_deps: T.Optional[T.List[FileOrString]] = None,
extra_args: T.Optional[T.List[str]] = None, extra_args: T.Optional[T.List[str]] = None,
unity_sources: T.Optional[T.List[mesonlib.FileOrString]] = None, unity_sources: T.Optional[T.List[FileOrString]] = None,
) -> T.Tuple[str, str]: ) -> T.Tuple[str, str]:
""" """
Compiles C/C++, ObjC/ObjC++, Fortran, and D sources Compiles C/C++, ObjC/ObjC++, Fortran, and D sources
@ -3098,7 +3100,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
assert isinstance(rel_src, str) assert isinstance(rel_src, str)
return (rel_obj, rel_src.replace('\\', '/')) return (rel_obj, rel_src.replace('\\', '/'))
def add_dependency_scanner_entries_to_element(self, target: build.BuildTarget, compiler, element, src): def add_dependency_scanner_entries_to_element(self, target: build.BuildTarget, compiler, element, src) -> None:
if not self.should_use_dyndeps_for_target(target): if not self.should_use_dyndeps_for_target(target):
return return
if isinstance(target, build.CompileTarget): if isinstance(target, build.CompileTarget):
@ -3123,7 +3125,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
d = os.path.join(self.get_target_private_dir(target), d) d = os.path.join(self.get_target_private_dir(target), d)
ninja_element.add_dep(d) ninja_element.add_dep(d)
def has_dir_part(self, fname: mesonlib.FileOrString) -> bool: def has_dir_part(self, fname: FileOrString) -> bool:
# FIXME FIXME: The usage of this is a terrible and unreliable hack # FIXME FIXME: The usage of this is a terrible and unreliable hack
if isinstance(fname, File): if isinstance(fname, File):
return fname.subdir != '' return fname.subdir != ''
@ -3230,7 +3232,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
targetdir = self.get_target_private_dir(target) targetdir = self.get_target_private_dir(target)
return os.path.join(targetdir, target.get_filename() + '.symbols') return os.path.join(targetdir, target.get_filename() + '.symbols')
def generate_shsym(self, target): def generate_shsym(self, target) -> None:
target_file = self.get_target_filename(target) target_file = self.get_target_filename(target)
symname = self.get_target_shsym_filename(target) symname = self.get_target_shsym_filename(target)
elem = NinjaBuildElement(self.all_outputs, symname, 'SHSYM', target_file) elem = NinjaBuildElement(self.all_outputs, symname, 'SHSYM', target_file)
@ -3240,7 +3242,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
elem.add_item('CROSS', '--cross-host=' + self.environment.machines[target.for_machine].system) elem.add_item('CROSS', '--cross-host=' + self.environment.machines[target.for_machine].system)
self.add_build(elem) self.add_build(elem)
def get_import_filename(self, target): def get_import_filename(self, target) -> str:
return os.path.join(self.get_target_dir(target), target.import_filename) return os.path.join(self.get_target_dir(target), target.import_filename)
def get_target_type_link_args(self, target, linker): def get_target_type_link_args(self, target, linker):
@ -3295,7 +3297,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
commands += linker.get_win_subsystem_args(target.win_subsystem) commands += linker.get_win_subsystem_args(target.win_subsystem)
return commands return commands
def get_link_whole_args(self, linker, target): def get_link_whole_args(self, linker: DynamicLinker, target):
use_custom = False use_custom = False
if linker.id == 'msvc': if linker.id == 'msvc':
# Expand our object lists manually if we are on pre-Visual Studio 2015 Update 2 # Expand our object lists manually if we are on pre-Visual Studio 2015 Update 2
@ -3565,7 +3567,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
self.environment.get_build_dir()) self.environment.get_build_dir())
return self.get_target_filename(t) return self.get_target_filename(t)
def generate_shlib_aliases(self, target, outdir): def generate_shlib_aliases(self, target, outdir) -> None:
for alias, to, tag in target.get_aliases(): for alias, to, tag in target.get_aliases():
aliasfile = os.path.join(outdir, alias) aliasfile = os.path.join(outdir, alias)
abs_aliasfile = os.path.join(self.environment.get_build_dir(), outdir, alias) abs_aliasfile = os.path.join(self.environment.get_build_dir(), outdir, alias)
@ -3605,7 +3607,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
gcda_elem.add_item('description', 'Deleting gcda files') gcda_elem.add_item('description', 'Deleting gcda files')
self.add_build(gcda_elem) self.add_build(gcda_elem)
def get_user_option_args(self): def get_user_option_args(self) -> T.List[str]:
cmds = [] cmds = []
for k, v in self.environment.coredata.optstore.items(): for k, v in self.environment.coredata.optstore.items():
if self.environment.coredata.optstore.is_project_option(k): if self.environment.coredata.optstore.is_project_option(k):

Loading…
Cancel
Save