#12523 check for existence of usable Python interpreter

- present appropriate alert message in case of missing Python
- add the option to quit LyX immediately
- recheck for Python interpreter on reconfigure if it was missing
This commit is contained in:
Stephan Witt 2023-01-06 00:32:09 +01:00
parent 83c72a3ece
commit bbc2270972
4 changed files with 34 additions and 5 deletions

View File

@ -581,10 +581,11 @@ void LyX::execCommands()
{ {
// The advantage of doing this here is that the event loop // The advantage of doing this here is that the event loop
// is already started. So any need for interaction will be // is already started. So any need for interaction will be
// aknowledged. // acknowledged.
// if reconfiguration is needed. // if reconfiguration is needed.
if (LayoutFileList::get().empty()) { const bool noLayouts = LayoutFileList::get().empty();
if (noLayouts && os::hasPython()) {
switch (Alert::prompt( switch (Alert::prompt(
_("No textclass is found"), _("No textclass is found"),
_("LyX will only have minimal functionality because no textclasses " _("LyX will only have minimal functionality because no textclasses "
@ -593,7 +594,8 @@ void LyX::execCommands()
0, 2, 0, 2,
_("&Reconfigure"), _("&Reconfigure"),
_("&Without LaTeX"), _("&Without LaTeX"),
_("&Continue"))) _("&Continue"),
_("&Exit LyX")))
{ {
case 0: case 0:
// regular reconfigure // regular reconfigure
@ -604,6 +606,24 @@ void LyX::execCommands()
lyx::dispatch(FuncRequest(LFUN_RECONFIGURE, lyx::dispatch(FuncRequest(LFUN_RECONFIGURE,
" --without-latex-config")); " --without-latex-config"));
break; break;
case 3:
lyx::dispatch(FuncRequest(LFUN_LYX_QUIT, ""));
return;
default:
break;
}
} else if (noLayouts) {
switch (Alert::prompt(
_("No python is found"),
_("LyX will only have minimal functionality because no python interpreter "
"has been found. Consider download and install of an python interpreter."),
0, 1,
_("&Continue"),
_("&Exit LyX")))
{
case 1:
lyx::dispatch(FuncRequest(LFUN_LYX_QUIT, ""));
return;
default: default:
break; break;
} }

View File

@ -159,9 +159,9 @@ Package::Package(string const & command_line_arg0,
int Package::reconfigureUserLyXDir(string const & option) const int Package::reconfigureUserLyXDir(string const & option) const
{ {
if (configure_command_.empty()) { if (configure_command_.empty() || !os::hasPython()) {
FileName const configure_script(addName(system_support().absFileName(), "configure.py")); FileName const configure_script(addName(system_support().absFileName(), "configure.py"));
configure_command_ = os::python() + ' ' + configure_command_ = os::python(true) + ' ' +
quoteName(configure_script.toFilesystemEncoding()) + quoteName(configure_script.toFilesystemEncoding()) +
with_version_suffix() + " --binary-dir=" + with_version_suffix() + " --binary-dir=" +
quoteName(FileName(binary_dir().absFileName()).toFilesystemEncoding()); quoteName(FileName(binary_dir().absFileName()).toFilesystemEncoding());

View File

@ -191,6 +191,12 @@ string const python(bool reset)
return command; return command;
} }
bool hasPython()
{
return !(python23_call(python()).empty());
}
} // namespace os } // namespace os
} // namespace support } // namespace support
} // namespace lyx } // namespace lyx

View File

@ -62,6 +62,9 @@ int timeout_ms();
/// @param reset True if the python path should be recomputed /// @param reset True if the python path should be recomputed
std::string const python(bool reset = false); std::string const python(bool reset = false);
/// Check for availbility of the python interpreter
bool hasPython();
/// ///
bool isFilesystemCaseSensitive(); bool isFilesystemCaseSensitive();