@FeatureNewKwargs('find_program', '0.53.0', ['dirs'])
@FeatureNewKwargs('find_program', '0.52.0', ['version'])
@FeatureNewKwargs('find_program', '0.49.0', ['disabler'])
@disablerIfNotFound
@permittedKwargs(permitted_kwargs['find_program'])
def func_find_program(self, node, args, kwargs):
    if (not args):
        raise InterpreterException('No program name specified.')
    (disabled, required, feature) = extract_required_kwarg(kwargs, self.subproject)
    if disabled:
        mlog.log('Program', mlog.bold(' '.join(args)), 'skipped: feature', mlog.bold(feature), 'disabled')
        return ExternalProgramHolder(dependencies.NonExistingExternalProgram(' '.join(args)), self.subproject)
    search_dirs = extract_search_dirs(kwargs)
    wanted = mesonlib.stringlistify(kwargs.get('version', []))
    for_machine = self.machine_from_native_kwarg(kwargs)
    return self.find_program_impl(args, for_machine, required=required, silent=False, wanted=wanted, search_dirs=search_dirs)
@FeatureNewKwargs('find_program', '0.53.0', ['dirs'])
@FeatureNewKwargs('find_program', '0.52.0', ['version'])
@FeatureNewKwargs('find_program', '0.49.0', ['disabler'])
@disablerIfNotFound
@permittedKwargs(permitted_kwargs['find_program'])
def func_find_program(self, node, args, kwargs):
    if (not args):
        raise InterpreterException('No program name specified.')
    (disabled, required, feature) = extract_required_kwarg(kwargs, self.subproject)
    if disabled:
        mlog.log('Program', mlog.bold(' '.join(args)), 'skipped: feature', mlog.bold(feature), 'disabled')
        return ExternalProgramHolder(dependencies.NonExistingExternalProgram(' '.join(args)), self.subproject)
    search_dirs = extract_search_dirs(kwargs)
    wanted = mesonlib.stringlistify(kwargs.get('version', []))
    for_machine = self.machine_from_native_kwarg(kwargs)
    return self.find_program_impl(args, for_machine, required=required, silent=False, wanted=wanted, search_dirs=search_dirs)