X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fos.cpp;h=616b9c6936d4a16594f239fbb2dc1d2332db1358;hb=cf14e814124ccbc8155fa1dde98d03be319c0e87;hp=ab9d4159a6cc8180864e760f330af3fc95bbb5d7;hpb=5e33e4fc2c02f92dec8918ade9d1e191d1d697b3;p=lyx.git diff --git a/src/support/os.cpp b/src/support/os.cpp index ab9d4159a6..616b9c6936 100644 --- a/src/support/os.cpp +++ b/src/support/os.cpp @@ -11,6 +11,10 @@ #include +#ifdef _WIN32 +# define _WIN32_WINNT 0x0600 +#endif + #include "support/convert.h" #include "support/debug.h" #include "support/filetools.h" @@ -48,7 +52,7 @@ int timeout_min() static string const python23_call(string const & binary, bool verbose = false) { - const string version_info = " -c 'from __future__ import print_function;import sys; print(sys.version_info[:2], end=\"\")'"; + const string version_info = " -c \"from __future__ import print_function;import sys; print(sys.version_info[:2], end=\\\"\\\")\""; // Default to "python" if no binary is given. if (binary.empty()) return "python -tt"; @@ -89,49 +93,76 @@ static string const find_python_binary() // PEP 397 -- Python launcher for Windows // https://www.python.org/dev/peps/pep-0397/ +#ifdef _WIN32 + // Check through python launcher whether python 3 is + // installed on computer. + string command = python23_call("py -3"); +#else // Check whether python3 in PATH is the right one. string command = python23_call("python3"); +#endif // _WIN32 if (!command.empty()) return command; +#ifndef _WIN32 // python3 does not exists, let us try to find python3.x in PATH // the search is probably broader than required // but we are trying hard to find a valid python binary vector const path = getEnvPath("PATH"); lyxerr << "Looking for python 3.x ...\n"; - for (auto bin: path) { + for (auto bin : path) { QString const dir = toqstr(bin); string const localdir = dir.toLocal8Bit().constData(); QDir qdir(dir); qdir.setFilter(QDir::Files | QDir::Executable); QStringList list = qdir.entryList(QStringList("python3*")); - for (auto bin: list) { - string const binary = addName(localdir, - bin.toLocal8Bit().constData()); + for (auto bin2 : list) { + string const binary = "\"" + addName(localdir, + bin2.toLocal8Bit().constData()) + "\""; command = python23_call(binary, true); if (!command.empty()) return command; } } +#endif // !_WIN32 // python 3 was not found let us look for python 2 +#ifdef _WIN32 + command = python23_call("py -2"); +#else command = python23_call("python2"); +#endif // _WIN32 + if (!command.empty()) + return command; + +#ifdef _WIN32 + // python launcher is not installed, let cmd auto check + // PATH for a python.exe + command = python23_call("python"); if (!command.empty()) return command; + //failed, prepare to search PATH manually + vector const path = getEnvPath("PATH"); + lyxerr << "Manually looking for python in PATH ...\n"; + QString const exeName = "python*"; +#else // python2 does not exists, let us try to find python2.x in PATH // the search is probably broader than required // but we are trying hard to find a valid python binary lyxerr << "Looking for python 2.x ...\n"; - for (auto bin: path) { + QString const exeName = "python2*"; +#endif // _WIN32 + + for (auto bin : path) { QString const dir = toqstr(bin); string const localdir = dir.toLocal8Bit().constData(); QDir qdir(dir); qdir.setFilter(QDir::Files | QDir::Executable); - QStringList list = qdir.entryList(QStringList("python2*")); - for (auto bin: list) { - string const binary = addName(localdir, - bin.toLocal8Bit().constData()); + QStringList list = qdir.entryList(QStringList(exeName)); + for (auto bin2 : list) { + string const binary = "\"" + addName(localdir, + bin2.toLocal8Bit().constData()) + "\""; command = python23_call(binary, true); if (!command.empty()) return command;