From bbc2270972cfbb1aa11836498c8a6c73be91f18d Mon Sep 17 00:00:00 2001 From: Stephan Witt Date: Fri, 6 Jan 2023 00:32:09 +0100 Subject: [PATCH] #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 --- src/LyX.cpp | 26 +++++++++++++++++++++++--- src/support/Package.cpp | 4 ++-- src/support/os.cpp | 6 ++++++ src/support/os.h | 3 +++ 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/LyX.cpp b/src/LyX.cpp index fc2f871101..2a7cba35ab 100644 --- a/src/LyX.cpp +++ b/src/LyX.cpp @@ -581,10 +581,11 @@ void LyX::execCommands() { // The advantage of doing this here is that the event loop // is already started. So any need for interaction will be - // aknowledged. + // acknowledged. // if reconfiguration is needed. - if (LayoutFileList::get().empty()) { + const bool noLayouts = LayoutFileList::get().empty(); + if (noLayouts && os::hasPython()) { switch (Alert::prompt( _("No textclass is found"), _("LyX will only have minimal functionality because no textclasses " @@ -593,7 +594,8 @@ void LyX::execCommands() 0, 2, _("&Reconfigure"), _("&Without LaTeX"), - _("&Continue"))) + _("&Continue"), + _("&Exit LyX"))) { case 0: // regular reconfigure @@ -604,6 +606,24 @@ void LyX::execCommands() lyx::dispatch(FuncRequest(LFUN_RECONFIGURE, " --without-latex-config")); 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: break; } diff --git a/src/support/Package.cpp b/src/support/Package.cpp index 400bf15707..ffc1395efb 100644 --- a/src/support/Package.cpp +++ b/src/support/Package.cpp @@ -159,9 +159,9 @@ Package::Package(string const & command_line_arg0, 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")); - configure_command_ = os::python() + ' ' + + configure_command_ = os::python(true) + ' ' + quoteName(configure_script.toFilesystemEncoding()) + with_version_suffix() + " --binary-dir=" + quoteName(FileName(binary_dir().absFileName()).toFilesystemEncoding()); diff --git a/src/support/os.cpp b/src/support/os.cpp index cafe4b1cb9..abb9ec6d67 100644 --- a/src/support/os.cpp +++ b/src/support/os.cpp @@ -191,6 +191,12 @@ string const python(bool reset) return command; } + +bool hasPython() +{ + return !(python23_call(python()).empty()); +} + } // namespace os } // namespace support } // namespace lyx diff --git a/src/support/os.h b/src/support/os.h index d89af7dca4..a96791dff4 100644 --- a/src/support/os.h +++ b/src/support/os.h @@ -62,6 +62,9 @@ int timeout_ms(); /// @param reset True if the python path should be recomputed std::string const python(bool reset = false); +/// Check for availbility of the python interpreter +bool hasPython(); + /// bool isFilesystemCaseSensitive();