diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2023-02-10 12:39:12 -0500 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2023-02-15 15:12:34 -0500 |
commit | c2a55bfe43fae1b44cf49a083297d6755c89e1cc (patch) | |
tree | 8186d1f785861ac6b7da1e548034f05ba493472c /mesonbuild/interpreter/compiler.py | |
parent | 04f233a80d570c90c1a152114cbf3bdad6a61607 (diff) | |
download | meson-c2a55bfe43fae1b44cf49a083297d6755c89e1cc.zip meson-c2a55bfe43fae1b44cf49a083297d6755c89e1cc.tar.gz meson-c2a55bfe43fae1b44cf49a083297d6755c89e1cc.tar.bz2 |
preprocess: Allow custom_tgt, custom_idx and generated_list
It was documented to be supported but only File and str were actually
working.
Diffstat (limited to 'mesonbuild/interpreter/compiler.py')
-rw-r--r-- | mesonbuild/interpreter/compiler.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/mesonbuild/interpreter/compiler.py b/mesonbuild/interpreter/compiler.py index 95126cf..d27fc20 100644 --- a/mesonbuild/interpreter/compiler.py +++ b/mesonbuild/interpreter/compiler.py @@ -6,6 +6,7 @@ from __future__ import annotations import enum import functools import os +import itertools import typing as T from .. import build @@ -28,6 +29,7 @@ if T.TYPE_CHECKING: from ..compilers import Compiler, RunResult from ..interpreterbase import TYPE_var, TYPE_kwargs from .kwargs import ExtractRequired, ExtractSearchDirs + from .interpreter.interpreter import SourceOutputs from typing_extensions import TypedDict, Literal @@ -163,6 +165,8 @@ _COMPILES_KWS: T.List[KwargInfo] = [_NAME_KW, _ARGS_KW, _DEPENDENCIES_KW, _INCLU _HEADER_KWS: T.List[KwargInfo] = [REQUIRED_KW.evolve(since='0.50.0', default=False), *_COMMON_KWS] class CompilerHolder(ObjectHolder['Compiler']): + preprocess_uid = itertools.count() + def __init__(self, compiler: 'Compiler', interpreter: 'Interpreter'): super().__init__(compiler, interpreter) self.environment = self.env @@ -750,7 +754,7 @@ class CompilerHolder(ObjectHolder['Compiler']): return self.compiler.get_argument_syntax() @FeatureNew('compiler.preprocess', '0.64.0') - @typed_pos_args('compiler.preprocess', varargs=(mesonlib.File, str), min_varargs=1) + @typed_pos_args('compiler.preprocess', varargs=(str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList), min_varargs=1) @typed_kwargs( 'compiler.preprocess', KwargInfo('output', str, default='@PLAINNAME@.i'), @@ -759,20 +763,25 @@ class CompilerHolder(ObjectHolder['Compiler']): ) def preprocess_method(self, args: T.Tuple[T.List['mesonlib.FileOrString']], kwargs: 'PreprocessKW') -> T.List[build.CustomTargetIndex]: compiler = self.compiler.get_preprocessor() - sources = self.interpreter.source_strings_to_files(args[0]) + sources: 'SourceOutputs' = self.interpreter.source_strings_to_files(args[0]) + if any(isinstance(s, (build.CustomTarget, build.CustomTargetIndex, build.GeneratedList)) for s in sources): + FeatureNew.single_use('compiler.preprocess with generated sources', '1.1.0', self.subproject, + location=self.current_node) tg_kwargs = { f'{self.compiler.language}_args': kwargs['compile_args'], 'build_by_default': False, 'include_directories': kwargs['include_directories'], } + tg_name = f'preprocessor_{next(self.preprocess_uid)}' tg = build.CompileTarget( - 'preprocessor', + tg_name, self.interpreter.subdir, self.subproject, self.environment, sources, kwargs['output'], compiler, + self.interpreter.backend, tg_kwargs) self.interpreter.add_target(tg.name, tg) # Expose this target as list of its outputs, so user can pass them to |