[LyX/master] Python runtime detection requirement upgraded to 3.8

José Matos jamatos at lyx.org
Mon Jun 10 09:04:42 UTC 2024


commit 1c458dc1212865e9c9e2fd0207f15a72f4988e63
Author: José Matos <jamatos at lyx.org>
Date:   Mon Jun 10 10:04:26 2024 +0100

    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(-)

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<int>(sm.str(1));
 	int minor = convert<int>(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<string> 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);


More information about the lyx-cvs mailing list