def find_program_fallback(self, fallback: str, args: T.List[mesonlib.FileOrString], required: bool, extra_info: T.List[mlog.TV_Loggable]) -> T.Optional[T.Union[(ExternalProgram, build.Executable, OverrideProgram)]]:
    mlog.log('Fallback to subproject', mlog.bold(fallback), 'which provides program', mlog.bold(' '.join(args)))
    sp_kwargs: kwargs.DoSubproject = {'required': required, 'default_options': [], 'version': [], 'cmake_options': [], 'options': None}
    self.do_subproject(fallback, 'meson', sp_kwargs)
    return self.program_from_overrides(args, extra_info)
def find_program_fallback(self, fallback: str, args: T.List[mesonlib.FileOrString], required: bool, extra_info: T.List[mlog.TV_Loggable]) -> T.Optional[T.Union[(ExternalProgram, build.Executable, OverrideProgram)]]:
    mlog.log('Fallback to subproject', mlog.bold(fallback), 'which provides program', mlog.bold(' '.join(args)))
    sp_kwargs: kwargs.DoSubproject = {'required': required, 'default_options': [], 'version': [], 'cmake_options': [], 'options': None}
    self.do_subproject(fallback, 'meson', sp_kwargs)
    return self.program_from_overrides(args, extra_info)