build: Add type annotations for ExtractedObjects

pull/9143/head
Dylan Baker 3 years ago committed by Daniel Mensinger
parent 65d5d9e20c
commit 225022abf6
  1. 29
      mesonbuild/build.py

@ -49,6 +49,8 @@ if T.TYPE_CHECKING:
from .modules import ModuleState
from .backend.backends import Backend, ExecutableSerialisation
GeneratedTypes = T.Union['CustomTarget', 'CustomTargetIndex', 'GeneratedList']
pch_kwargs = {'c_pch', 'cpp_pch'}
lang_arg_kwargs = {
@ -364,21 +366,26 @@ class ExtractedObjects(HoldableObject):
'''
Holds a list of sources for which the objects must be extracted
'''
def __init__(self, target, srclist=None, genlist=None, objlist=None, recursive=True):
def __init__(self, target: 'BuildTarget',
srclist: T.Optional[T.List[File]] = None,
genlist: T.Optional[T.List['GeneratedTypes']] = None,
objlist: T.Optional[T.List[T.Union[str, 'File', 'ExtractedObjects']]] = None,
recursive: bool = True):
self.target = target
self.recursive = recursive
self.srclist = srclist if srclist is not None else []
self.genlist = genlist if genlist is not None else []
self.objlist = objlist if objlist is not None else []
self.srclist: T.List[File] = srclist if srclist is not None else []
self.genlist: T.List['GeneratedTypes'] = genlist if genlist is not None else []
self.objlist: T.Optional[T.List[T.Union[str, 'File', 'ExtractedObjects']]] = \
objlist if objlist is not None else []
if self.target.is_unity:
self.check_unity_compatible()
def __repr__(self):
def __repr__(self) -> str:
r = '<{0} {1!r}: {2}>'
return r.format(self.__class__.__name__, self.target.name, self.srclist)
@staticmethod
def get_sources(sources, generated_sources):
def get_sources(sources: T.Sequence['FileOrString'], generated_sources: T.Sequence['GeneratedTypes']) -> T.List['FileOrString']:
# Merge sources and generated sources
sources = list(sources)
for gensrc in generated_sources:
@ -391,11 +398,11 @@ class ExtractedObjects(HoldableObject):
# Filter out headers and all non-source files
return [s for s in sources if environment.is_source(s) and not environment.is_header(s)]
def classify_all_sources(self, sources, generated_sources):
sources = self.get_sources(sources, generated_sources)
return classify_unity_sources(self.target.compilers.values(), sources)
def classify_all_sources(self, sources: T.List[str], generated_sources: T.Sequence['GeneratedTypes']) -> T.Dict['Compiler', T.List['FileOrString']]:
sources_ = self.get_sources(sources, generated_sources)
return classify_unity_sources(self.target.compilers.values(), sources_)
def check_unity_compatible(self):
def check_unity_compatible(self) -> None:
# Figure out if the extracted object list is compatible with a Unity
# build. When we're doing a Unified build, we go through the sources,
# and create a single source file from each subset of the sources that
@ -411,7 +418,7 @@ class ExtractedObjects(HoldableObject):
'in Unity builds. You can only extract all '
'the object files for each compiler at once.')
def get_outputs(self, backend):
def get_outputs(self, backend: 'Backend') -> T.List[str]:
return [
backend.object_filename_from_source(self.target, source)
for source in self.get_sources(self.srclist, self.genlist)

Loading…
Cancel
Save