commit fdf81a9bab2f4f50a3eaf22cc0e09ac454f470ed
Author: Richard Kimberly Heck <[email protected]>
Date:   Wed Feb 12 09:25:13 2020 -0500

    Fix bug #11712.
    
    Fixes some escaping issues on Windows especially
    
    Patch from Eugene.
---
 src/support/filetools.cpp |    4 ++--
 src/support/os.cpp        |   40 +++++++++++-----------------------------
 2 files changed, 13 insertions(+), 31 deletions(-)

diff --git a/src/support/filetools.cpp b/src/support/filetools.cpp
index e811995..bca242d 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 10430bf..b1e4e09 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<string> 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<string> 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;
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to