aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2021-05-04 11:24:11 -0700
committerJussi Pakkanen <jpakkane@gmail.com>2021-05-19 23:28:17 +0300
commit7bd7d1cd732c33c3cb301ba62bf46f00ac8d8a1b (patch)
treecfe7d81fcf31fb44755ec1ff22f7478508cb27e8 /mesonbuild
parentf2ae92368a384cb3cc310f40c2cb43dec5979912 (diff)
downloadmeson-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
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/build.py6
-rw-r--r--mesonbuild/interpreter/interpreter.py22
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):