mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-11-04 11:08:14 +00:00 
			
		
		
		
	Almost all of the Python code in the respository has been updated to be compatibile with Python 2.6, Python 3.4, or newer. The only exceptions are arc_summery3.py which requires Python 3, and pyzfs which requires at least Python 2.7. This allows us to maintain a single version of the code and support most default versions of python. This change does the following: * Sets the default shebang for all Python scripts to python3. If only Python 2 is available, then at install time scripts which are compatible with Python 2 will have their shebangs replaced with /usr/bin/python. This is done for compatibility until Python 2 goes end of life. Since only the installed versions are changed this means Python 3 must be installed on the system for test-runner when testing in-tree. * Added --with-python=<2|3|3.4,etc> configure option which sets the PYTHON environment variable to target a specific python version. By default the newest installed version of Python will be used or the preferred distribution version when creating pacakges. * Fixed --enable-pyzfs configure checks so they are run when --enable-pyzfs=check and --enable-pyzfs=yes. * Enabled pyzfs for Python 3.4 and newer, which is now supported. * Renamed pyzfs package to python<VERSION>-pyzfs and updated to install in the appropriate site location. For example, when building with --with-python=3.4 a python34-pyzfs will be created which installs in /usr/lib/python3.4/site-packages/. * Renamed the following python scripts according to the Fedora guidance for packaging utilities in /bin - dbufstat.py -> dbufstat - arcstat.py -> arcstat - arc_summary.py -> arc_summary - arc_summary3.py -> arc_summary3 * Updated python-cffi package name. On CentOS 6, CentOS 7, and Amazon Linux it's called python-cffi, not python2-cffi. For Python3 it's called python3-cffi or python3x-cffi. * Install one version of arc_summary. Depending on the version of Python available install either arc_summary2 or arc_summary3 as arc_summary. The user output is only slightly different. Reviewed-by: John Ramsden <johnramsden@riseup.net> Reviewed-by: Neal Gompa <ngompa@datto.com> Reviewed-by: loli10K <ezomori.nozomu@gmail.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #8096
		
			
				
	
	
		
			103 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
dnl #
 | 
						|
dnl # ZFS_AC_PYTHON_VERSION(version, [action-if-true], [action-if-false])
 | 
						|
dnl #
 | 
						|
dnl # Verify Python version
 | 
						|
dnl #
 | 
						|
AC_DEFUN([ZFS_AC_PYTHON_VERSION], [
 | 
						|
	ver_check=`$PYTHON -c "import sys; print (sys.version.split()[[0]] $1)"`
 | 
						|
	AS_IF([test "$ver_check" = "True"], [
 | 
						|
		m4_ifvaln([$2], [$2])
 | 
						|
	], [
 | 
						|
		m4_ifvaln([$3], [$3])
 | 
						|
	])
 | 
						|
])
 | 
						|
 | 
						|
dnl #
 | 
						|
dnl # ZFS_AC_PYTHON_MODULE(module_name, [action-if-true], [action-if-false])
 | 
						|
dnl #
 | 
						|
dnl # Checks for Python module. Freely inspired by AX_PYTHON_MODULE
 | 
						|
dnl # https://www.gnu.org/software/autoconf-archive/ax_python_module.html
 | 
						|
dnl # Required by ZFS_AC_CONFIG_ALWAYS_PYZFS.
 | 
						|
dnl #
 | 
						|
AC_DEFUN([ZFS_AC_PYTHON_MODULE], [
 | 
						|
	PYTHON_NAME=`basename $PYTHON`
 | 
						|
	AC_MSG_CHECKING([for $PYTHON_NAME module: $1])
 | 
						|
	AS_IF([$PYTHON -c "import $1" 2>/dev/null], [
 | 
						|
		AC_MSG_RESULT(yes)
 | 
						|
		m4_ifvaln([$2], [$2])
 | 
						|
	], [
 | 
						|
		AC_MSG_RESULT(no)
 | 
						|
		m4_ifvaln([$3], [$3])
 | 
						|
	])
 | 
						|
])
 | 
						|
 | 
						|
dnl #
 | 
						|
dnl # The majority of the python scripts are written to be compatible
 | 
						|
dnl # with Python 2.6 and Python 3.4.  Therefore, they may be installed
 | 
						|
dnl # and used with either interpreter.  This option is intended to
 | 
						|
dnl # to provide a method to specify the default system version, and
 | 
						|
dnl # set the PYTHON environment variable accordingly.
 | 
						|
dnl #
 | 
						|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_PYTHON], [
 | 
						|
	AC_ARG_WITH([python],
 | 
						|
		AC_HELP_STRING([--with-python[=VERSION]],
 | 
						|
		[default system python version @<:@default=check@:>@]),
 | 
						|
		[with_python=$withval],
 | 
						|
		[with_python=check])
 | 
						|
 | 
						|
	AS_CASE([$with_python],
 | 
						|
		[check],
 | 
						|
		[AS_IF([test -x /usr/bin/python3],
 | 
						|
			[PYTHON="python3"],
 | 
						|
			[AS_IF([test -x /usr/bin/python2],
 | 
						|
				[PYTHON="python2"],
 | 
						|
				[PYTHON=""]
 | 
						|
			)]
 | 
						|
		)],
 | 
						|
		[2*], [PYTHON="python${with_python}"],
 | 
						|
		[*python2*], [PYTHON="${with_python}"],
 | 
						|
		[3*], [PYTHON="python${with_python}"],
 | 
						|
		[*python3*], [PYTHON="${with_python}"],
 | 
						|
		[no], [PYTHON=""],
 | 
						|
		[AC_MSG_ERROR([Unknown --with-python value '$with_python'])]
 | 
						|
	)
 | 
						|
 | 
						|
	AS_IF([$PYTHON --version >/dev/null 2>&1], [ /bin/true ], [
 | 
						|
		AC_MSG_ERROR([Cannot find $PYTHON in your system path])
 | 
						|
	])
 | 
						|
 | 
						|
	AM_PATH_PYTHON([2.6], [], [:])
 | 
						|
	AM_CONDITIONAL([USING_PYTHON], [test "$PYTHON" != :])
 | 
						|
	AM_CONDITIONAL([USING_PYTHON_2], [test "${PYTHON_VERSION:0:2}" = "2."])
 | 
						|
	AM_CONDITIONAL([USING_PYTHON_3], [test "${PYTHON_VERSION:0:2}" = "3."])
 | 
						|
 | 
						|
	dnl #
 | 
						|
	dnl # Minimum supported Python versions for utilities:
 | 
						|
	dnl # Python 2.6.x, or Python 3.4.x
 | 
						|
	dnl #
 | 
						|
	AS_IF([test "${PYTHON_VERSION:0:2}" = "2."], [
 | 
						|
		ZFS_AC_PYTHON_VERSION([>= '2.6'], [ /bin/true ],
 | 
						|
			[AC_MSG_ERROR("Python >= 2.6.x is not available")])
 | 
						|
	])
 | 
						|
 | 
						|
	AS_IF([test "${PYTHON_VERSION:0:2}" = "3."], [
 | 
						|
		ZFS_AC_PYTHON_VERSION([>= '3.4'], [ /bin/true ],
 | 
						|
			[AC_MSG_ERROR("Python >= 3.4.x is not available")])
 | 
						|
	])
 | 
						|
 | 
						|
	dnl #
 | 
						|
	dnl # Request that packages be built for a specific Python version.
 | 
						|
	dnl #
 | 
						|
	AS_IF([test $with_python != check], [
 | 
						|
		PYTHON_PKG_VERSION=`echo ${PYTHON} | tr -d 'a-zA-Z.'`
 | 
						|
		DEFINE_PYTHON_PKG_VERSION='--define "__use_python_pkg_version '${PYTHON_PKG_VERSION}'"'
 | 
						|
		DEFINE_PYTHON_VERSION='--define "__use_python '${PYTHON}'"'
 | 
						|
	], [
 | 
						|
		DEFINE_PYTHON_VERSION=''
 | 
						|
		DEFINE_PYTHON_PKG_VERSION=''
 | 
						|
	])
 | 
						|
 | 
						|
	AC_SUBST(DEFINE_PYTHON_VERSION)
 | 
						|
	AC_SUBST(DEFINE_PYTHON_PKG_VERSION)
 | 
						|
])
 |