Allow command lists for find_program cross file overrides

This is accepted by all other binaries in the cross file. With this
change, we also don't check whether the specified command exists at
configure time, but that's probably a feature anyway.

Fixes https://github.com/mesonbuild/meson/issues/3737
pull/3463/head
Nirbheek Chauhan 7 years ago committed by Nirbheek Chauhan
parent 6bdacba001
commit ae8d044cb6
  1. 8
      mesonbuild/interpreter.py
  2. 5
      run_unittests.py
  3. 4
      test cases/unit/12 cross prog/meson.build

@ -2627,8 +2627,12 @@ external dependencies (including libraries) must go to "dependencies".''')
if not isinstance(p, str):
raise InterpreterException('Executable name must be a string.')
if p in bins:
exename = bins[p]
extprog = dependencies.ExternalProgram(exename, silent=silent)
command = bins[p]
if isinstance(command, (list, str)):
extprog = dependencies.ExternalProgram(p, command=command, silent=silent)
else:
raise InterpreterException('Invalid type {!r} for binary {!r} in cross file'
''.format(command, p))
progobj = ExternalProgramHolder(extprog)
return progobj

@ -3207,7 +3207,8 @@ class LinuxlikeTests(BasePlatformTests):
c = '/usr/bin/cc'
ar = '/usr/bin/ar'
strip = '/usr/bin/ar'
sometool.py = '%s'
sometool.py = ['{0}']
someothertool.py = '{0}'
[properties]
@ -3216,7 +3217,7 @@ system = 'linux'
cpu_family = 'arm'
cpu = 'armv7' # Not sure if correct.
endian = 'little'
''' % os.path.join(testdir, 'some_cross_tool.py'))
'''.format(os.path.join(testdir, 'some_cross_tool.py')))
crossfile.flush()
self.meson_cross_file = crossfile.name
self.init(testdir)

@ -2,11 +2,15 @@ project('cross find program', 'c')
native_exe = find_program('sometool.py', native : true)
cross_exe = find_program('sometool.py')
cross_other_exe = find_program('someothertool.py')
native_out = run_command(native_exe).stdout().strip()
cross_out = run_command(cross_exe).stdout().strip()
cross_other_out = run_command(cross_other_exe).stdout().strip()
assert(native_out == 'native',
'Native output incorrect:' + native_out)
assert(cross_out == 'cross',
'Cross output incorrect:' + cross_out)
assert(cross_out == cross_other_out,
'Cross output incorrect:' + cross_other_out)

Loading…
Cancel
Save