diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2021-05-04 11:24:11 -0700 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2021-05-19 23:28:17 +0300 |
commit | 7bd7d1cd732c33c3cb301ba62bf46f00ac8d8a1b (patch) | |
tree | cfe7d81fcf31fb44755ec1ff22f7478508cb27e8 | |
parent | f2ae92368a384cb3cc310f40c2cb43dec5979912 (diff) | |
download | meson-7bd7d1cd732c33c3cb301ba62bf46f00ac8d8a1b.zip meson-7bd7d1cd732c33c3cb301ba62bf46f00ac8d8a1b.tar.gz meson-7bd7d1cd732c33c3cb301ba62bf46f00ac8d8a1b.tar.bz2 |
interpreter: Pass unholdered sources into BuildTarget
The build level shouldn't be deal with interpreter objects, by the time
they leave the intpreter they should be in the Meson middle layer
representaiton
-rw-r--r-- | mesonbuild/build.py | 6 | ||||
-rw-r--r-- | mesonbuild/interpreter/interpreter.py | 22 |
2 files changed, 16 insertions, 12 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 06e40f5..a4a4f19 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -40,7 +40,7 @@ from .linkers import StaticLinker from .interpreterbase import FeatureNew if T.TYPE_CHECKING: - from .interpreter import Test + from .interpreter.interpreter import Test, SourceOutputs from .mesonlib import FileMode, FileOrString from .mesonlib.backend import Backend @@ -589,12 +589,11 @@ class BuildTarget(Target): known_kwargs = known_build_target_kwargs def __init__(self, name: str, subdir: str, subproject: str, for_machine: MachineChoice, - sources: T.List[File], objects, environment: environment.Environment, kwargs): + sources: T.List['SourceOutputs'], objects, environment: environment.Environment, kwargs): super().__init__(name, subdir, subproject, True, for_machine) unity_opt = environment.coredata.get_option(OptionKey('unity')) self.is_unity = unity_opt == 'on' or (unity_opt == 'subprojects' and subproject != '') self.environment = environment - self.sources: T.List[File] = [] self.compilers = OrderedDict() # type: OrderedDict[str, Compiler] self.objects = [] self.external_deps = [] @@ -613,6 +612,7 @@ class BuildTarget(Target): self.need_install = False self.pch = {} self.extra_args: T.Dict[str, T.List['FileOrString']] = {} + self.sources: T.List[File] = [] self.generated: T.Sequence[T.Union[GeneratedList, CustomTarget, CustomTargetIndex]] = [] self.d_features = {} self.pic = False diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index 891f67e..484db78 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -68,8 +68,9 @@ if T.TYPE_CHECKING: SourceInputs = T.Union[mesonlib.File, GeneratedListHolder, TargetHolder, CustomTargetIndexHolder, GeneratedObjectsHolder, str] # Input source types passed to the build.Target5 classes - SourceOutputs = T.Union[mesonlib.File, GeneratedListHolder, TargetHolder, - CustomTargetIndexHolder, GeneratedObjectsHolder] + SourceOutputs = T.Union[mesonlib.File, build.GeneratedList, + build.BuildTarget, build.CustomTargetIndex, + build.GeneratedList] def stringifyUserArguments(args, quote=False): if isinstance(args, list): @@ -2705,13 +2706,16 @@ Try setting b_lundef to false instead.'''.format(self.coredata.options[OptionKey for s in sources: if isinstance(s, str): self.validate_within_subproject(self.subdir, s) - s = mesonlib.File.from_source_file(self.environment.source_dir, self.subdir, s) - elif not isinstance(s, (mesonlib.File, GeneratedListHolder, - TargetHolder, CustomTargetIndexHolder, - GeneratedObjectsHolder)): - raise InterpreterException('Source item is {!r} instead of ' - 'string or File-type object'.format(s)) - results.append(s) + results.append(mesonlib.File.from_source_file(self.environment.source_dir, self.subdir, s)) + elif isinstance(s, mesonlib.File): + results.append(s) + elif isinstance(s, (GeneratedListHolder, TargetHolder, + CustomTargetIndexHolder, + GeneratedObjectsHolder)): + results.append(unholder(s)) + else: + raise InterpreterException(f'Source item is {s!r} instead of ' + 'string or File-type object') return results def add_target(self, name, tobj): |