diff options
| -rw-r--r-- | mesonbuild/backend/ninjabackend.py | 41 | ||||
| -rw-r--r-- | mesonbuild/backend/xcodebackend.py | 32 | ||||
| -rw-r--r-- | mesonbuild/build.py | 16 |
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: |
