From: Richard Kimberly Heck Date: Wed, 12 Feb 2020 14:25:13 +0000 (-0500) Subject: Fix bug #11712. X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=9b270a43ce424669775c5fdda0a4102791f68117;p=features.git Fix bug #11712. Fixes some escaping issues on Windows especially Patch from Eugene. --- diff --git a/src/support/filetools.cpp b/src/support/filetools.cpp index e8119959fd..bca242d376 100644 --- a/src/support/filetools.cpp +++ b/src/support/filetools.cpp @@ -635,7 +635,7 @@ string const addName(string const & path, string const & fname) if (path != "." && path != "./" && !path.empty()) { buf = os::internal_path(path); - if (!suffixIs(path, '/')) + if (!suffixIs(buf, '/')) buf += '/'; } @@ -1039,7 +1039,7 @@ cmd_ret const runCommand(string const & cmd) command = rtrim(command, "2>&1"); err2out = true; } - string const cmdarg = "/d /c " + command; + string const cmdarg = "/d /c \"" + command+"\""; string const comspec = getEnv("COMSPEC"); security.nLength = sizeof(SECURITY_ATTRIBUTES); diff --git a/src/support/os.cpp b/src/support/os.cpp index 10430bf5a2..b1e4e09b8e 100644 --- a/src/support/os.cpp +++ b/src/support/os.cpp @@ -48,7 +48,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 +89,31 @@ static string const find_python_binary() // PEP 397 -- Python launcher for Windows // https://www.python.org/dev/peps/pep-0397/ - // Check whether python3 in PATH is the right one. - string command = python23_call("python3"); + // Check through python launcher whether python3 is + // installed on computer. + string command = python23_call("py -3"); if (!command.empty()) return command; - // 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) { - 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 bin2 : list) { - string const binary = addName(localdir, - bin2.toLocal8Bit().constData()); - command = python23_call(binary, true); - if (!command.empty()) - return command; - } - } - // python 3 was not found let us look for python 2 - command = python23_call("python2"); + command = python23_call("py -2"); if (!command.empty()) return command; - // python2 does not exists, let us try to find python2.x in PATH + // 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 - lyxerr << "Looking for python 2.x ...\n"; + vector const path = getEnvPath("PATH"); + lyxerr << "Looking for python in PATH ...\n"; 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*")); + QStringList list = qdir.entryList(QStringList("python*")); for (auto bin2 : list) { - string const binary = addName(localdir, - bin2.toLocal8Bit().constData()); + string const binary = "\"" + addName(localdir, + bin2.toLocal8Bit().constData()) + "\""; command = python23_call(binary, true); if (!command.empty()) return command;