[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: python-version.patch (Was: Bug in AM_PATH_PYTHON ?)
From: |
Patrick Guio |
Subject: |
Re: python-version.patch (Was: Bug in AM_PATH_PYTHON ?) |
Date: |
Fri, 7 Dec 2001 11:11:26 +0100 (CET) |
On 5 Dec 2001, Alexandre Duret-Lutz wrote:
The patch fixed the expected behaviour. Included is the patched file I
replaced in m4/python.m4 from CVS repository and the output from a run of
configure
checking whether make sets ${MAKE}... yes
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
Configuring Test for i686-pc-linux-gnu
checking for a BSD compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking for a Python interpreter with version >= 2... python2
checking local Python configuration... looks good
configure: creating ./config.status
config.status: creating test.sh
config.status: creating hello.py
config.status: creating Makefile
But I wonder about something. Should not the PYTHON variable be set to the
absolute path of the python program?
In the Makefile I generate by running configure I have
PYTHON = python2
which I cannot use in a python script as
#! @PYTHON@
# @configure_input@
or I have to use
#! /usr/bin/env @PYTHON@
I would have expected
PYTHON = /usr/bin/python
Sincerely, Patrick
> >>> "Patrick" == Patrick Guio <address@hidden> writes:
>
> [...]
> Patrick> AM_PATH_PYTHON(2)
> [...]
> Patrick> I am running RH7.2 and have several python
> Patrick> versions. The default "python" is version 1.5 but
> Patrick> there are in addition python2 and python2.1 all of
> Patrick> them coming from rpm's. The problem is that configure
> Patrick> does not check all the possibilities as it should do:
> [...]
> Patrick> checking for python... /usr/bin/python
> Patrick> checking if Python version >= 2... configure: error: too old
> [...]
> Patrick> Another comment is that maybe the command python2
> Patrick> could be tried since some rpms contain the python2
> Patrick> command.
>
> The following patch should fix this.
>
> Akim, I'm almost certain I should not call _AC_EVAL (see the
> last line of the patch) from an Automake macro, but I don't know
> what I should use instead. All I want is too log the each run
> of python and capture any error message to ease debugging. I
> don't need the command to be eval'ed. Is there a public macro
> for this?
>
> Index: ChangeLog
> from Alexandre Duret-Lutz <address@hidden>
>
> * m4/python.m4 (AM_PATH_PYTHON): Check all known Python interpreters
> in loop until we find one the satisfies the user supplied version.
> Add python2 to the list of known interpreters. Don't use
> changequote.
> (AM_PYTHON_CHECK_VERSION): New function, extracted from
> AM_PATH_PYTHON and modernized.
>
> Index: m4/python.m4
> ===================================================================
> RCS file: /home/adl/CVSROOT/automake-20011205-1931/m4/python.m4,v
> retrieving revision 1.1
> diff -u -c -r1.1 python.m4
> *** m4/python.m4 5 Dec 2001 18:31:22 -0000 1.1
> --- m4/python.m4 5 Dec 2001 20:05:03 -0000
> ***************
> *** 44,81 ****
> # doesn't meet the requirement. MINIMUM-VERSION should consist of
> # numbers and dots only.
>
> -
> AC_DEFUN([AM_PATH_PYTHON],
> [
> ! dnl Find a version of Python. I could check for python versions 1.4
> ! dnl or earlier, but the default installation locations changed from
> dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages
> ! dnl in 1.5, and I don't want to maintain that logic.
> !
> ! AC_PATH_PROG(PYTHON, python python2.1 python2.0 python1.6 python1.5)
> !
> ! dnl should we do the version check?
> ! ifelse([$1],[],,[
> ! AC_MSG_CHECKING(if Python version >= $1)
> ! changequote(<<, >>)dnl
> ! prog="
> ! import sys, string
> ! minver = '$1'
> ! pyver = string.split(sys.version)[0] # first word is version string
> ! # split strings by '.' and convert to numeric
> ! minver = map(string.atoi, string.split(minver, '.'))
> ! pyver = map(string.atoi, string.split(pyver, '.'))
> ! # we can now do comparisons on the two lists:
> ! if pyver >= minver:
> ! sys.exit(0)
> ! else:
> ! sys.exit(1)"
> ! changequote([, ])dnl
> ! if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC
> ! then
> ! AC_MSG_RESULT(okay)
> else
> ! AC_MSG_ERROR(too old)
> fi
> ])
>
> --- 44,81 ----
> # doesn't meet the requirement. MINIMUM-VERSION should consist of
> # numbers and dots only.
>
> AC_DEFUN([AM_PATH_PYTHON],
> [
> ! dnl Find a Python interpreter. Python versions prior to 1.5 are not
> ! dnl supported because the default installation locations changed from
> dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages
> ! dnl in 1.5.
> ! m4_define([_AM_PYTHON_INTERPRETER_LIST],
> ! [python python2 python2.1 python2.0 python1.6 python1.5])
> !
> ! m4_if([$1],[],[
> ! dnl No version check is needed.
> ! # Find any Python interpreter.
> ! AC_PATH_PROG([PYTHON], _AM_PYTHON_INTERPRETER_LIST)],[
> ! dnl A version check is needed.
> ! if test -n "$PYTHON"; then
> ! # If the user set $PYTHON, use it and don't search something else.
> ! AC_MSG_CHECKING([whether $PYTHON version >= $1])
> ! AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
> ! [AC_MSG_RESULT(yes)],
> ! [AC_MSG_ERROR(too old)])
> else
> ! # Otherwise, try each interpreter until we find one that satisfies
> ! # VERSION.
> ! AC_MSG_CHECKING([for a Python interpreter with version >= $1])
> ! for PYTHON in _AM_PYTHON_INTERPRETER_LIST : ; do
> ! if test "$PYTHON" = : ; then
> ! AC_MSG_ERROR([no suitable Python interpreter found])
> ! fi
> ! AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], [break])
> ! done
> ! AC_MSG_RESULT([$PYTHON])
> ! AC_SUBST([PYTHON])
> fi
> ])
>
> ***************
> *** 83,111 ****
>
> dnl Query Python for its version number. Getting [:3] seems to be
> dnl the best way to do this; it's what "site.py" does in the standard
> ! dnl library. Need to change quote character because of [:3]
> !
> ! AC_SUBST(PYTHON_VERSION)
> ! changequote(<<, >>)dnl
> ! PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[:3]"`
> ! changequote([, ])dnl
>
>
> dnl Use the values of $prefix and $exec_prefix for the corresponding
> dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made
> dnl distinct variables so they can be overridden if need be. However,
> dnl general consensus is that you shouldn't need this ability.
>
> ! AC_SUBST(PYTHON_PREFIX)
> PYTHON_PREFIX='${prefix}'
>
> ! AC_SUBST(PYTHON_EXEC_PREFIX)
> PYTHON_EXEC_PREFIX='${exec_prefix}'
>
> dnl At times (like when building shared libraries) you may want
> dnl to know which OS platform Python thinks this is.
>
> ! AC_SUBST(PYTHON_PLATFORM)
> PYTHON_PLATFORM=`$PYTHON -c "import sys; print sys.platform"`
>
>
> --- 83,108 ----
>
> dnl Query Python for its version number. Getting [:3] seems to be
> dnl the best way to do this; it's what "site.py" does in the standard
> ! dnl library.
>
> + AC_SUBST([PYTHON_VERSION])
> + PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[:3]]"`
>
> dnl Use the values of $prefix and $exec_prefix for the corresponding
> dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made
> dnl distinct variables so they can be overridden if need be. However,
> dnl general consensus is that you shouldn't need this ability.
>
> ! AC_SUBST([PYTHON_PREFIX])
> PYTHON_PREFIX='${prefix}'
>
> ! AC_SUBST([PYTHON_EXEC_PREFIX])
> PYTHON_EXEC_PREFIX='${exec_prefix}'
>
> dnl At times (like when building shared libraries) you may want
> dnl to know which OS platform Python thinks this is.
>
> ! AC_SUBST([PYTHON_PLATFORM])
> PYTHON_PLATFORM=`$PYTHON -c "import sys; print sys.platform"`
>
>
> ***************
> *** 119,125 ****
> dnl Also, if the package prefix isn't the same as python's prefix,
> dnl then the old $(pythondir) was pretty useless.
>
> ! AC_SUBST(pythondir)
> pythondir=$PYTHON_PREFIX"/lib/python"$PYTHON_VERSION/site-packages
>
> dnl pkgpythondir -- $PACKAGE directory under pythondir. Was
> --- 116,122 ----
> dnl Also, if the package prefix isn't the same as python's prefix,
> dnl then the old $(pythondir) was pretty useless.
>
> ! AC_SUBST([pythondir])
> pythondir=$PYTHON_PREFIX"/lib/python"$PYTHON_VERSION/site-packages
>
> dnl pkgpythondir -- $PACKAGE directory under pythondir. Was
> ***************
> *** 127,146 ****
> dnl more consistent with the rest of automake.
> dnl Maybe this should be put in python.am?
>
> ! AC_SUBST(pkgpythondir)
> pkgpythondir=\${pythondir}/$PACKAGE
>
> dnl pyexecdir -- directory for installing python extension modules
> dnl (shared libraries) Was PYTHON_SITE_EXEC in previous betas.
>
> ! AC_SUBST(pyexecdir)
> pyexecdir=$PYTHON_EXEC_PREFIX"/lib/python"$PYTHON_VERSION/site-packages
>
> dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
> dnl Maybe this should be put in python.am?
>
> ! AC_SUBST(pkgpyexecdir)
> pkgpyexecdir=\${pyexecdir}/$PACKAGE
>
> AC_MSG_RESULT([looks good])
> ])
> --- 124,158 ----
> dnl more consistent with the rest of automake.
> dnl Maybe this should be put in python.am?
>
> ! AC_SUBST([pkgpythondir])
> pkgpythondir=\${pythondir}/$PACKAGE
>
> dnl pyexecdir -- directory for installing python extension modules
> dnl (shared libraries) Was PYTHON_SITE_EXEC in previous betas.
>
> ! AC_SUBST([pyexecdir])
> pyexecdir=$PYTHON_EXEC_PREFIX"/lib/python"$PYTHON_VERSION/site-packages
>
> dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
> dnl Maybe this should be put in python.am?
>
> ! AC_SUBST([pkgpyexecdir])
> pkgpyexecdir=\${pyexecdir}/$PACKAGE
>
> AC_MSG_RESULT([looks good])
> ])
> +
> +
> + # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE],
> [ACTION-IF-FALSE])
> + #
> ---------------------------------------------------------------------------
> + # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
> + # Run ACTION-IF-FALSE otherwise.
> + AC_DEFUN([AM_PYTHON_CHECK_VERSION],
> + [prog="import sys, string
> + pyver = string.split(sys.version)[[0]] # first word is version string
> + # split strings by '.' and convert to numeric
> + minver = map(string.atoi, string.split('$2', '.'))
> + pyver = map(string.atoi, string.split(pyver, '.'))
> + # we can now do comparisons on the two lists:
> + sys.exit(pyver < minver)"
> + AS_IF([_AC_EVAL(['$1 -c "$prog"'])], [$3], [$4])])
>
> --
> Alexandre Duret-Lutz
>
======================================================================
Patrick Guio
Institute of Physics, University of Oslo
P.O. box 1048, Blindern, N-0316 Oslo
Tel : (+47) 22 84 40 60 - Fax : (+47) 22 85 56 71
E-mail : address@hidden
URL : http://folk.uio.no/~patricg
python.m4
Description: Text document