aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter.py
diff options
context:
space:
mode:
authorRafael Ávila de Espíndola <rafael@espindo.la>2018-08-19 08:19:11 -0700
committerJussi Pakkanen <jpakkane@gmail.com>2018-09-03 21:24:01 +0300
commit07d2d88fa9bd4f3598f9212b7209f98443b636d9 (patch)
treed8abbc85c1206530cd152bdeacf2a25758e6d211 /mesonbuild/interpreter.py
parent862019e6de9c896e6e876c272db3e5c95393ac3c (diff)
downloadmeson-07d2d88fa9bd4f3598f9212b7209f98443b636d9.zip
meson-07d2d88fa9bd4f3598f9212b7209f98443b636d9.tar.gz
meson-07d2d88fa9bd4f3598f9212b7209f98443b636d9.tar.bz2
Allow override_find_program to use an executable.
With this it is now possible to do foobar = executable('foobar', ...) meson.override_find_program('foobar', foobar) Which is convenient for a project like protobuf which produces both a dependency and a tool. If protobuf is updated to use override_find_program, it can be used as protobuf_dep = dependency('protobuf', version : '>=3.3.1', fallback : ['protobuf', 'protobuf_dep']) protoc_prog = find_program('protoc')
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r--mesonbuild/interpreter.py14
1 files changed, 9 insertions, 5 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index dba3fc0..9bd21e3 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -480,7 +480,7 @@ class ExternalProgramHolder(InterpreterObject, ObjectHolder):
return self.held_object.get_path()
def found(self):
- return self.held_object.found()
+ return isinstance(self.held_object, build.Executable) or self.held_object.found()
def get_command(self):
return self.held_object.get_command()
@@ -1780,9 +1780,8 @@ class MesonMain(InterpreterObject):
if not os.path.exists(abspath):
raise InterpreterException('Tried to override %s with a file that does not exist.' % name)
exe = dependencies.ExternalProgram(abspath)
- if not isinstance(exe, dependencies.ExternalProgram):
- # FIXME, make this work if the exe is an Executable target.
- raise InterpreterException('Second argument must be an external program.')
+ if not isinstance(exe, (dependencies.ExternalProgram, build.Executable)):
+ raise InterpreterException('Second argument must be an external program or executable.')
self.interpreter.add_find_program_override(name, exe)
@noPosargs
@@ -2184,6 +2183,11 @@ external dependencies (including libraries) must go to "dependencies".''')
'or configure_file(), or a compiler object; not {!r}'
if isinstance(cmd, ExternalProgramHolder):
cmd = cmd.held_object
+ if isinstance(cmd, build.Executable):
+ progname = node.args.arguments[0].value
+ msg = 'Program {!r} was overridden with the compiled executable {!r}'\
+ ' and therefore cannot be used during configuration'
+ raise InterpreterException(msg.format(progname, cmd.description()))
elif isinstance(cmd, CompilerHolder):
cmd = cmd.compiler.get_exelist()[0]
prog = ExternalProgram(cmd, silent=True)
@@ -2758,7 +2762,7 @@ external dependencies (including libraries) must go to "dependencies".''')
exe = self.build.find_overrides[name]
if not silent:
mlog.log('Program', mlog.bold(name), 'found:', mlog.green('YES'),
- '(overridden: %s)' % ' '.join(exe.command))
+ '(overridden: %s)' % exe.description())
return ExternalProgramHolder(exe)
return None