From 1c458dc1212865e9c9e2fd0207f15a72f4988e63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Matos?= Date: Mon, 10 Jun 2024 10:04:26 +0100 Subject: [PATCH] Python runtime detection requirement upgraded to 3.8 Remove -tt option that is a no-op in Python 3. Remove search for Python 2 --- config/lyxpython.m4 | 62 --------------------------------------- src/support/os.cpp | 70 +++++++++------------------------------------ 2 files changed, 13 insertions(+), 119 deletions(-) delete mode 100644 config/lyxpython.m4 diff --git a/config/lyxpython.m4 b/config/lyxpython.m4 deleted file mode 100644 index 21d0d8a963..0000000000 --- a/config/lyxpython.m4 +++ /dev/null @@ -1,62 +0,0 @@ -## ------------------------ -*- Autoconf -*- -# adapted for LyX from the automake python support. -## Python file handling -## From Andrew Dalke -## Updated by James Henstridge -## ------------------------ -# Copyright (C) 1999-2015 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -dnl Usage: LYX_PATH_PYTHON23(PY2-MIN-VERSION, PYTHON3-MIN-VERSION) -dnl Find a suitable Python interpreter, that is either python2 >= $1 -dnl or python3 >= $2. Stop with an error message if it has not been found. -AC_DEFUN([LYX_PATH_PYTHON23], - [ - m4_define(py2_ver, [patsubst($1,[\.],[,])]) - m4_define(py3_ver, [patsubst($2,[\.],[,])]) - - m4_define_default([_AM_PYTHON_INTERPRETER_LIST], [python3 python2 python]) - - if test -n "$PYTHON"; then - # If the user set $PYTHON, use it and don't search something else. - AC_MSG_CHECKING([whether $PYTHON version is >= $1 or $2]) - LYX_PYTHON_CHECK_VERSION([$PYTHON], - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - AC_MSG_ERROR([Python interpreter is not suitable])]) - am_display_PYTHON=$PYTHON - else - # Otherwise, try each interpreter until we find one that satisfies - # LYX_PYTHON_CHECK_VERSION. - AC_CACHE_CHECK([for a Python interpreter with version >= $1 or $2], - [am_cv_pathless_PYTHON],[ - for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do - test "$am_cv_pathless_PYTHON" = none && break - LYX_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [break]) - done]) - # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. - if test "$am_cv_pathless_PYTHON" = none; then - PYTHON=: - else - AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) - fi - am_display_PYTHON=$am_cv_pathless_PYTHON - fi - - if test "$PYTHON" = : ; then - AC_MSG_ERROR([no suitable Python interpreter found]) - fi -]) - -# LYX_PYTHON_CHECK_VERSION(PROG, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) -# --------------------------------------------------------------------------- -# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= py2_ver or py3_ver. -# Run ACTION-IF-FALSE otherwise. -AC_DEFUN([LYX_PYTHON_CHECK_VERSION], - [prog="import sys -version = sys.version_info@<:@:3@:>@ -sys.exit(not ((py2_ver) <= version < (3,0,0) or version >= (py3_ver)))" - AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$2], [$3])]) diff --git a/src/support/os.cpp b/src/support/os.cpp index 27427cd8ea..a245a46957 100644 --- a/src/support/os.cpp +++ b/src/support/os.cpp @@ -56,12 +56,12 @@ int timeout_ms() } -static string const python23_call(string const & binary, bool verbose = false) +static string const python_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='')\""; - // Default to "python" if no binary is given. + const string version_info = " -c \"import sys; print(sys.version_info[:2], end='')\""; + // Default to "python3" if no binary is given. if (binary.empty()) - return "python -tt"; + return "python3"; if (verbose) lyxerr << "Examining " << binary << "\n"; @@ -80,14 +80,12 @@ static string const python23_call(string const & binary, bool verbose = false) int major = convert(sm.str(1)); int minor = convert(sm.str(2)); - if((major == 2 && minor < 7) || (major == 3 && minor < 5)) + if((major < 3) || (major == 3 && minor < 8)) return string(); if (verbose) lyxerr << "Found Python " << out.result << "\n"; - // Add the -tt switch so that mixed tab/whitespace - // indentation is an error - return binary + " -tt"; + return binary; } @@ -102,15 +100,14 @@ static string const find_python_binary() #ifdef _WIN32 // Check through python launcher whether python 3 is // installed on computer. - string command = python23_call("py -3"); + string command = python_call("py -3"); #else // Check whether python3 in PATH is the right one. - string command = python23_call("python3"); + string command = python_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 @@ -125,59 +122,18 @@ static string const find_python_binary() for (auto const & bin2 : list) { string const binary = "\"" + addName(localdir, bin2.toLocal8Bit().constData()) + "\""; - command = python23_call(binary, true); + command = python_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"; - QString const exeName = "python2*"; -#endif // _WIN32 - - for (auto const & 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(exeName)); - for (auto const & bin2 : list) { - string const binary = "\"" + addName(localdir, - bin2.toLocal8Bit().constData()) + "\""; - command = python23_call(binary, true); - if (!command.empty()) - return command; - } - } - // If this happens all hope is lost that this is a sane system - lyxerr << "Warning: No python v2.x or 3.x binary found.\n"; - return python23_call(""); + lyxerr << "Warning: No Python 3.x binary found.\n"; + return python_call(""); } @@ -194,12 +150,12 @@ string const python(bool reset) bool hasPython() { - return !(python23_call(python()).empty()); + return !(python_call(python()).empty()); } string const python_info() { - const string info_version = " -c \"from __future__ import print_function; import sys; print('{} ({})'.format(sys.version.split()[0],sys.executable), end='')\""; + const string info_version = " -c \"import sys; print('{} ({})'.format(sys.version.split()[0],sys.executable), end='')\""; if (!hasPython()) return("None"); return (runCommand(python() + info_version).result);