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): if not isinstance(p, str):
raise InterpreterException('Executable name must be a string.') raise InterpreterException('Executable name must be a string.')
if p in bins: if p in bins:
exename = bins[p] command = bins[p]
extprog = dependencies.ExternalProgram(exename, silent=silent) 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) progobj = ExternalProgramHolder(extprog)
return progobj return progobj

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

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

Loading…
Cancel
Save