project('find program', meson_version: '>= 1.10.0',) if build_machine.system() == 'windows' # Things Windows does not provide: # - an executable to copy files without prompting # - working command line quoting # - anything that you might actually need # Because of these reasons we only check that # the program can be found. cp = find_program('xcopy') else cp = find_program('donotfindme', 'cp') gen = generator(cp, \ output : '@BASENAME@.c', \ arguments : ['@INPUT@', '@OUTPUT@']) generated = gen.process('source.in') add_languages('c', required: true) e = executable('prog', generated) test('external exe', e) endif prog = find_program('print-version.py', version : '>=2.0', required : false) assert(not prog.found(), 'Version should be too old') prog = find_program('print-version.py', version : '>=1.0') assert(prog.found(), 'Program version should match') prog = find_program('print-version.py') assert(prog.version() == '1.0', 'Program version should be detectable') prog = find_program('print-version-with-prefix.py', version : '>=1.0') assert(prog.found(), 'Program version should match') prog = find_program('print-version-custom-argument.py', version : '>=1.0', version_argument : '-version') assert(prog.found(), 'Program version should match') prog = find_program('test_subdir.py', required : false) assert(not prog.found(), 'Program should not be found') prog = find_program('test_subdir.py', dirs : ['/nonexistent', meson.current_source_dir() / 'scripts']) assert(prog.found(), 'Program should be found') prog = find_program('print-version.py') if build_machine.system() != 'cygwin' assert(prog.cmd_array() != [prog.full_path()]) assert(prog.cmd_array().length() == 2) endif ret = run_command(prog.cmd_array(),'--version', check: true) assert(ret.returncode() == 0) assert(ret.stdout().strip() == '1.0') if build_machine.system() == 'windows' prog = find_program('cmd.exe') assert(prog.cmd_array() == [prog.full_path()]) else prog = find_program('ld') assert(prog.cmd_array() == [prog.full_path()]) endif