summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/backend/ninjabackend.py41
-rw-r--r--mesonbuild/backend/xcodebackend.py32
-rw-r--r--mesonbuild/build.py16
3 files changed, 46 insertions, 43 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 072789541..db061f286 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -518,7 +518,7 @@ class NinjaBackend(backends.Backend):
return NinjaBuildElement(self.all_outputs, to_name, rulename, phony_infilename)
- def detect_vs_dep_prefix(self, tempfilename):
+ def detect_vs_dep_prefix(self, tempfilename: str) -> T.TextIO:
'''VS writes its dependency in a locale dependent format.
Detect the search prefix to use.'''
# TODO don't hard-code host
@@ -568,7 +568,7 @@ class NinjaBackend(backends.Backend):
# \MyDir\include\stdio.h.
matchre = re.compile(rb"^(.*\s)([a-zA-Z]:[\\/]|[\\\/]).*stdio.h$")
- def detect_prefix(out):
+ def detect_prefix(out: bytes) -> T.TextIO:
for line in re.split(rb'\r?\n', out):
match = matchre.match(line)
if match:
@@ -786,7 +786,7 @@ class NinjaBackend(backends.Backend):
srcs[f] = s
return srcs
- def get_target_source_can_unity(self, target, source):
+ def get_target_source_can_unity(self, target, source: FileOrString) -> bool:
if isinstance(source, File):
source = source.fname
if self.environment.is_llvm_ir(source) or \
@@ -871,7 +871,7 @@ class NinjaBackend(backends.Backend):
}
tgt[lnk_hash] = lnk_block
- def generate_target(self, target) -> None:
+ def generate_target(self, target: T.Union[build.BuildTarget, build.CustomTarget, build.RunTarget]) -> None:
if isinstance(target, build.BuildTarget):
os.makedirs(self.get_target_private_dir_abs(target), exist_ok=True)
if isinstance(target, build.CustomTarget):
@@ -1201,7 +1201,7 @@ class NinjaBackend(backends.Backend):
if isinstance(s, build.GeneratedList):
self.generate_genlist_for_target(s, target)
- def unwrap_dep_list(self, target):
+ def unwrap_dep_list(self, target: T.Union[build.CustomTarget, build.RunTarget]) -> T.List[str]:
deps = []
for i in target.get_dependencies():
# FIXME, should not grab element at zero but rather expand all.
@@ -1255,7 +1255,7 @@ class NinjaBackend(backends.Backend):
self.add_build(elem)
self.processed_targets.add(target.get_id())
- def build_run_target_name(self, target) -> str:
+ def build_run_target_name(self, target: build.RunTarget) -> str:
if target.subproject != '':
subproject_prefix = f'{target.subproject}@@'
else:
@@ -1584,7 +1584,7 @@ class NinjaBackend(backends.Backend):
args += ['-sourcepath', sourcepath]
return args
- def generate_java_compile(self, srcs, target, compiler, args):
+ def generate_java_compile(self, srcs, target, compiler, args) -> str:
deps = [os.path.join(self.get_target_dir(l), l.get_filename()) for l in target.link_targets]
generated_sources = self.get_target_generated_sources(target)
for rel_src in generated_sources.keys():
@@ -1622,7 +1622,7 @@ class NinjaBackend(backends.Backend):
the same name as the BuildTarget and return the path to it relative to
the build directory.
"""
- result = OrderedSet()
+ result: OrderedSet[str] = OrderedSet()
for dep in itertools.chain(target.link_targets, target.link_whole_targets):
if not dep.is_linkable_target():
continue
@@ -2043,7 +2043,7 @@ class NinjaBackend(backends.Backend):
else:
verbatim = ''
- def _link_library(libname: str, static: bool, bundle: bool = False):
+ def _link_library(libname: str, static: bool, bundle: bool = False) -> None:
type_ = 'static' if static else 'dylib'
modifiers = []
if not bundle and static:
@@ -2234,18 +2234,18 @@ class NinjaBackend(backends.Backend):
def compiler_to_pch_rule_name(cls, compiler: Compiler) -> str:
return cls.get_compiler_rule_name(compiler.get_language(), compiler.for_machine, 'PCH')
- def swift_module_file_name(self, target):
+ def swift_module_file_name(self, target) -> str:
return os.path.join(self.get_target_private_dir(target),
target.swift_module_name + '.swiftmodule')
- def determine_swift_dep_modules(self, target):
+ def determine_swift_dep_modules(self, target) -> T.List[str]:
result = []
for l in target.link_targets:
if self.is_swift_target(l):
result.append(self.swift_module_file_name(l))
return result
- def get_swift_link_deps(self, target):
+ def get_swift_link_deps(self, target) -> T.List[str]:
result = []
for l in target.link_targets:
result.append(self.get_target_filename(l))
@@ -2728,7 +2728,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
continue
self.generate_genlist_for_target(genlist, target)
- def replace_paths(self, target, args, override_subdir=None):
+ def replace_paths(self, target, args: T.List[str], override_subdir=None) -> T.List[str]:
if override_subdir:
source_target_dir = os.path.join(self.build_to_src, override_subdir)
else:
@@ -2870,12 +2870,12 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
mod_files = _scan_fortran_file_deps(src, srcdir, dirname, tdeps, compiler)
return mod_files
- def get_no_stdlib_link_args(self, target, linker):
+ def get_no_stdlib_link_args(self, target, linker) -> T.List[str]:
if hasattr(linker, 'language') and linker.language in self.build.stdlibs[target.for_machine]:
return linker.get_no_stdlib_link_args()
return []
- def get_compile_debugfile_args(self, compiler, target, objfile):
+ def get_compile_debugfile_args(self, compiler, target, objfile) -> T.List[str]:
# The way MSVC uses PDB files is documented exactly nowhere so
# the following is what we have been able to decipher via
# reverse engineering.
@@ -2944,7 +2944,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
return linker.get_link_debugfile_args(filename)
return []
- def generate_llvm_ir_compile(self, target, src: FileOrString):
+ def generate_llvm_ir_compile(self, target, src: FileOrString) -> T.Tuple[str, str]:
compiler = get_compiler_for_source(target.compilers.values(), src)
commands = compiler.compiler_args()
# Compiler args for compiling this target
@@ -3274,7 +3274,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
priv = self.get_target_private_dir(target)
return os.path.join(priv, 'depscan.json'), os.path.join(priv, 'depscan.dd')
- def add_header_deps(self, target, ninja_element, header_deps):
+ def add_header_deps(self, target, ninja_element, header_deps) -> None:
for d in header_deps:
if isinstance(d, File):
d = d.rel_to_builddir(self.build_to_src)
@@ -3389,7 +3389,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
self.all_pch[compiler.id].update(objs + [dst])
return pch_objects
- def get_target_shsym_filename(self, target):
+ def get_target_shsym_filename(self, target) -> str:
# Always name the .symbols file after the primary build output because it always exists
targetdir = self.get_target_private_dir(target)
return os.path.join(targetdir, target.get_filename() + '.symbols')
@@ -3565,7 +3565,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
return guessed_dependencies + absolute_libs
- def generate_prelink(self, target, obj_list):
+ def generate_prelink(self, target, obj_list) -> T.List[str]:
assert isinstance(target, build.StaticLibrary)
prelink_name = os.path.join(self.get_target_private_dir(target), target.name + '-prelink.o')
elem = NinjaBuildElement(self.all_outputs, [prelink_name], 'CUSTOM_COMMAND', obj_list)
@@ -3752,7 +3752,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
self.create_target_linker_introspection(target, linker, commands)
return elem
- def get_dependency_filename(self, t):
+ def get_dependency_filename(self, t) -> str:
if isinstance(t, build.SharedLibrary):
if t.uses_rust() and t.rust_crate_type == 'proc-macro':
return self.get_target_filename(t)
@@ -3874,6 +3874,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
extra_args.append(f'--{extra_arg}')
colorout = self.environment.coredata.optstore.get_value('b_colorout') \
if OptionKey('b_colorout') in self.environment.coredata.optstore else 'always'
+ assert isinstance(colorout, str), 'for mypy'
extra_args.extend(['--color', colorout])
if not os.path.exists(os.path.join(self.environment.source_dir, '.clang-' + name)) and \
not os.path.exists(os.path.join(self.environment.source_dir, '_clang-' + name)):
diff --git a/mesonbuild/backend/xcodebackend.py b/mesonbuild/backend/xcodebackend.py
index e7bd48700..a0476ca85 100644
--- a/mesonbuild/backend/xcodebackend.py
+++ b/mesonbuild/backend/xcodebackend.py
@@ -269,7 +269,7 @@ class XCodeBackend(backends.Backend):
# that is used in two targets gets a total of four unique ID numbers.
self.fileref_ids = {}
- def write_pbxfile(self, top_level_dict, ofilename) -> None:
+ def write_pbxfile(self, top_level_dict: PbxDict, ofilename: str) -> None:
tmpname = ofilename + '.tmp'
with open(tmpname, 'w', encoding='utf-8') as ofile:
ofile.write('// !$*UTF8*$!\n')
@@ -491,7 +491,7 @@ class XCodeBackend(backends.Backend):
self.build_rules[name] = languages
def generate_custom_target_map(self) -> None:
- self.shell_targets = {}
+ self.shell_targets: T.Dict[T.Union[str, T.Tuple[str, int]], str] = {}
self.custom_target_output_buildfile = {}
self.custom_target_output_fileref = {}
for tname, t in self.custom_targets.items():
@@ -524,7 +524,8 @@ class XCodeBackend(backends.Backend):
self.gen_single_target_map(genlist, tname, t, generator_id)
generator_id += 1
- def gen_single_target_map(self, genlist, tname, t, generator_id) -> None:
+ def gen_single_target_map(self, genlist: build.GeneratedList, tname: str,
+ t: T.Union[build.BuildTarget, build.CustomTarget], generator_id: int) -> None:
k = (tname, generator_id)
assert k not in self.shell_targets
self.shell_targets[k] = self.gen_id()
@@ -554,7 +555,7 @@ class XCodeBackend(backends.Backend):
self.native_frameworks_fileref[f] = self.gen_id()
def generate_target_dependency_map(self) -> None:
- self.target_dependency_map = {}
+ self.target_dependency_map: T.Dict[T.Union[str, T.Tuple[str, str]], str] = {}
for tname, t in self.build_targets.items():
for target in t.link_targets:
if isinstance(target, build.CustomTargetIndex):
@@ -789,7 +790,7 @@ class XCodeBackend(backends.Backend):
self.create_generator_shellphase(objects_dict, tname, generator_id)
generator_id += 1
- def create_generator_shellphase(self, objects_dict, tname, generator_id) -> None:
+ def create_generator_shellphase(self, objects_dict: PbxDict, tname: str, generator_id: int) -> None:
file_ids = self.generator_buildfile_ids[(tname, generator_id)]
ref_ids = self.generator_fileref_ids[(tname, generator_id)]
assert len(ref_ids) == len(file_ids)
@@ -1157,7 +1158,7 @@ class XCodeBackend(backends.Backend):
product_dict.add_item('name', 'Products')
product_dict.add_item('sourceTree', '<group>')
- def write_group_target_entry(self, objects_dict, t):
+ def write_group_target_entry(self, objects_dict: PbxDict, t) -> str:
tid = t.get_id()
group_id = self.gen_id()
target_dict = PbxDict()
@@ -1210,7 +1211,7 @@ class XCodeBackend(backends.Backend):
source_files_dict.add_item('sourceTree', '<group>')
return group_id
- def add_projecttree(self, objects_dict, projecttree_id) -> None:
+ def add_projecttree(self, objects_dict: PbxDict, projecttree_id: str) -> None:
root_dict = PbxDict()
objects_dict.add_item(projecttree_id, root_dict, "Root of project tree")
root_dict.add_item('isa', 'PBXGroup')
@@ -1222,7 +1223,7 @@ class XCodeBackend(backends.Backend):
project_tree = self.generate_project_tree()
self.write_tree(objects_dict, project_tree, target_children, '')
- def write_tree(self, objects_dict, tree_node, children_array, current_subdir) -> None:
+ def write_tree(self, objects_dict: PbxDict, tree_node: FileTreeEntry, children_array: PbxArray, current_subdir: str) -> None:
for subdir_name, subdir_node in tree_node.subdirs.items():
subdir_dict = PbxDict()
subdir_children = PbxArray()
@@ -1438,7 +1439,8 @@ class XCodeBackend(backends.Backend):
self.generate_single_generator_phase(tname, t, genlist, generator_id, objects_dict)
generator_id += 1
- def generate_single_generator_phase(self, tname, t, genlist, generator_id, objects_dict) -> None:
+ def generate_single_generator_phase(self, tname: str, t: T.Union[build.BuildTarget, build.CustomTarget],
+ genlist: build.GeneratedList, generator_id: int, objects_dict: PbxDict) -> None:
# TODO: this should be rewritten to use the meson wrapper, like the other generators do
# Currently it doesn't handle a host binary that requires an exe wrapper correctly.
generator = genlist.get_generator()
@@ -1617,7 +1619,7 @@ class XCodeBackend(backends.Backend):
settings_dict.add_item('SDKROOT', 'macosx')
bt_dict.add_item('name', buildtype)
- def determine_internal_dep_link_args(self, target, buildtype):
+ def determine_internal_dep_link_args(self, target: build.BuildTarget, buildtype: str) -> T.Tuple[T.List[str], bool]:
links_dylib = False
dep_libs = []
for l in target.link_targets:
@@ -1642,9 +1644,9 @@ class XCodeBackend(backends.Backend):
links_dylib = links_dylib or sub_links_dylib
return (dep_libs, links_dylib)
- def generate_single_build_target(self, objects_dict, target_name, target) -> None:
+ def generate_single_build_target(self, objects_dict: PbxDict, target_name: str, target: build.BuildTarget) -> None:
for buildtype in self.buildtypes:
- dep_libs = []
+ dep_libs: T.List[str] = []
links_dylib = False
headerdirs = []
bridging_header = ""
@@ -1732,7 +1734,7 @@ class XCodeBackend(backends.Backend):
ldargs += linker.get_std_shared_lib_link_args()
ldstr = ' '.join(ldargs)
valid = self.buildconfmap[target_name][buildtype]
- langargs = {}
+ langargs: T.Dict[str, T.List[str]] = {}
for lang in self.environment.coredata.compilers[target.for_machine]:
if lang not in LANGNAMEMAP:
continue
@@ -1846,7 +1848,7 @@ class XCodeBackend(backends.Backend):
warn_array.add_item('"$(inherited)"')
bt_dict.add_item('name', buildtype)
- def normalize_header_search_paths(self, header_dirs) -> PbxArray:
+ def normalize_header_search_paths(self, header_dirs: T.List[str]) -> PbxArray:
header_arr = PbxArray()
for i in header_dirs:
np = os.path.normpath(i)
@@ -1855,7 +1857,7 @@ class XCodeBackend(backends.Backend):
header_arr.add_item(item)
return header_arr
- def add_otherargs(self, settings_dict, langargs):
+ def add_otherargs(self, settings_dict: PbxDict, langargs: T.Dict[str, T.List[str]]) -> None:
for langname, args in langargs.items():
if args:
quoted_args = []
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index c827359a0..4648758fa 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -251,7 +251,7 @@ class Build:
self.project_name = 'name of master project'
self.project_version: T.Optional[str] = None
self.environment = environment
- self.projects = {}
+ self.projects: T.Dict[str, str] = {}
self.targets: 'T.OrderedDict[str, T.Union[CustomTarget, BuildTarget]]' = OrderedDict()
self.targetnames: T.Set[T.Tuple[str, str]] = set() # Set of executable names and their subdir
self.global_args: PerMachine[T.Dict[str, T.List[str]]] = PerMachine({}, {})
@@ -291,14 +291,14 @@ class Build:
Needed for tracking whether a modules options needs to be exposed to the user.
"""
- def get_build_targets(self):
+ def get_build_targets(self) -> OrderedDict[str, BuildTarget]:
build_targets = OrderedDict()
for name, t in self.targets.items():
if isinstance(t, BuildTarget):
build_targets[name] = t
return build_targets
- def get_custom_targets(self):
+ def get_custom_targets(self) -> OrderedDict[str, CustomTarget]:
custom_targets = OrderedDict()
for name, t in self.targets.items():
if isinstance(t, CustomTarget):
@@ -322,7 +322,7 @@ class Build:
if self.static_linker[compiler.for_machine] is None and compiler.needs_static_linker():
self.static_linker[compiler.for_machine] = detect_static_linker(self.environment, compiler)
- def get_project(self):
+ def get_project(self) -> T.Dict[str, str]:
return self.projects['']
def get_subproject_dir(self):
@@ -1623,7 +1623,7 @@ class BuildTarget(Target):
return langs
- def get_prelinker(self):
+ def get_prelinker(self) -> Compiler:
if self.link_language:
comp = self.all_compilers[self.link_language]
return comp
@@ -3145,10 +3145,10 @@ class Jar(BuildTarget):
self.main_class = kwargs.get('main_class', '')
self.java_resources: T.Optional[StructuredSources] = kwargs.get('java_resources', None)
- def get_main_class(self):
+ def get_main_class(self) -> str:
return self.main_class
- def type_suffix(self):
+ def type_suffix(self) -> str:
return "@jar"
def get_java_args(self):
@@ -3164,7 +3164,7 @@ class Jar(BuildTarget):
def is_linkable_target(self):
return True
- def get_classpath_args(self):
+ def get_classpath_args(self) -> T.List[str]:
cp_paths = [os.path.join(l.get_subdir(), l.get_filename()) for l in self.link_targets]
cp_string = os.pathsep.join(cp_paths)
if cp_string: