diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2021-06-01 20:48:35 -0700 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2021-06-15 12:48:53 -0700 |
commit | d2c1ab40a0c94209d8e13886f3c7d697d30f2507 (patch) | |
tree | b1d1d6600aaea3942e001036ad8504cc34f09ad1 | |
parent | 2ac9b323918e8c61c4707fbd79d45cf1c6eecfd0 (diff) | |
download | meson-d2c1ab40a0c94209d8e13886f3c7d697d30f2507.zip meson-d2c1ab40a0c94209d8e13886f3c7d697d30f2507.tar.gz meson-d2c1ab40a0c94209d8e13886f3c7d697d30f2507.tar.bz2 |
interpreter|build: Pass just the executable down to Generator
This requires that the interpreter has done the validation, which it now
does at all callsites. This simplifies the Generator initializer.
-rw-r--r-- | mesonbuild/build.py | 9 | ||||
-rw-r--r-- | mesonbuild/interpreter/interpreter.py | 6 | ||||
-rw-r--r-- | mesonbuild/modules/qt.py | 6 |
3 files changed, 9 insertions, 12 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py index a685664..c401bd2 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -1498,12 +1498,7 @@ You probably should put it in link_with instead.''') return class Generator: - def __init__(self, args, kwargs): - if len(args) != 1: - raise InvalidArguments('Generator requires exactly one positional argument: the executable') - exe = unholder(args[0]) - if not isinstance(exe, (Executable, programs.ExternalProgram)): - raise InvalidArguments('First generator argument must be an executable.') + def __init__(self, exe: T.Union['Executable', programs.ExternalProgram], kwargs): self.exe = exe self.depfile = None self.capture = False @@ -1514,7 +1509,7 @@ class Generator: repr_str = "<{0}: {1}>" return repr_str.format(self.__class__.__name__, self.exe) - def get_exe(self): + def get_exe(self) -> T.Union['Executable', programs.ExternalProgram]: return self.exe def process_kwargs(self, kwargs): diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index cb513f7..3c69edf 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -1954,8 +1954,10 @@ This will become a hard error in the future.''' % kwargs['input'], location=self @permittedKwargs({'arguments', 'output', 'depends', 'depfile', 'capture', 'preserve_path_from'}) - def func_generator(self, node: mparser.FunctionNode, args, kwargs) -> GeneratorHolder: - gen = build.Generator(args, kwargs) + @typed_pos_args('generator', (ExecutableHolder, ExternalProgramHolder)) + def func_generator(self, node: mparser.FunctionNode, args: T.Tuple[T.Union[ExecutableHolder, ExternalProgramHolder]], + kwargs) -> GeneratorHolder: + gen = build.Generator(args[0].held_object, kwargs) holder = GeneratorHolder(self, gen, self) self.generators.append(holder) return holder diff --git a/mesonbuild/modules/qt.py b/mesonbuild/modules/qt.py index 297ef09..76cc4db 100644 --- a/mesonbuild/modules/qt.py +++ b/mesonbuild/modules/qt.py @@ -348,7 +348,7 @@ class QtBaseModule(ExtensionModule): 'output': 'ui_@BASENAME@.h', 'arguments': kwargs['extra_args'] + ['-o', '@OUTPUT@', '@INPUT@']} # TODO: This generator isn't added to the generator list in the Interpreter - gen = build.Generator([self.uic], ui_kwargs) # type: ignore + gen = build.Generator(self.uic, ui_kwargs) # type: ignore out = gen.process_files(f'Qt{self.qt_version} ui', kwargs['sources'], state) return ModuleReturnValue(out, [out]) @@ -384,12 +384,12 @@ class QtBaseModule(ExtensionModule): if kwargs['headers']: moc_kwargs = {'output': 'moc_@BASENAME@.cpp', 'arguments': arguments} - moc_gen = build.Generator([self.moc], moc_kwargs) # type: ignore + moc_gen = build.Generator(self.moc, moc_kwargs) # type: ignore output.append(moc_gen.process_files(f'Qt{self.qt_version} moc header', kwargs['headers'], state)) if kwargs['sources']: moc_kwargs = {'output': '@BASENAME@.moc', 'arguments': arguments} - moc_gen = build.Generator([self.moc], moc_kwargs) # type: ignore + moc_gen = build.Generator(self.moc, moc_kwargs) # type: ignore output.append(moc_gen.process_files(f'Qt{self.qt_version} moc source', kwargs['sources'], state)) return ModuleReturnValue(output, [output]) |