[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH RFC-for-4.12] tools/xen-foreign: Update python scripts to be Py3 compatible



On Tue, Mar 05, 2019 at 12:41:53PM +0100, Juergen Gross wrote:
> On 04/03/2019 20:00, George Dunlap wrote:
> > On 3/4/19 6:31 PM, Andrew Cooper wrote:
> >> The issues are:
> >>  * dict.has_key() was completely removed in Py3
> >>  * dict.keys() is an iterable rather than list in Py3, so .sort() doesn't 
> >> work.
> >>  * list.sort(cmp=) was deprecated in Py2.4 and removed in Py3.  Replace it
> >>    with a key= sort instead.
> >>
> >> This is all compatible with Py2.4 and later, which is when the sorted()
> >> builtin was introduced.  Tested with Py2.7 and Py3.4
> > 
> > Did you test ./configure with python3?
> > 
> > Loads of the python-related runes in the configure are also
> > python2-only, resulting in (at least for me) the wrong library paths
> > being generated, so the following fails:
> > 
> >     PYTHON=/usr/bin/python3 ./configure
> > 
> > With the following message:
> > 
> >   File "<string>", line 1
> >     import distutils.sysconfig;     print
> > distutils.sysconfig.get_config_var("VERSION")
> >                                                   ^
> > SyntaxError: invalid syntax
> > checking for python3-config... /home/gdunlap/anaconda3/bin/python3-config
> > checking Python.h usability... yes
> > checking Python.h presence... yes
> > checking for Python.h... yes
> > checking for PyArg_ParseTuple in -lpython... no
> > configure: error: Unable to find a suitable python development library
> > configure: error: ./configure failed for tools
> > 
> > Note the error with the VERSION above; that results in looking for
> > `-lpython` rather than `-lpython3.7`, which results in the following
> > line being executed:
> > 
> > configure:7468: checking for PyArg_ParseTuple in -lpython
> > configure:7493: gcc -o conftest -g -O2 -g -O2
> > -I/persistent/local/home/dunlapg/anaconda3/include/python3.7m
> > -I/persistent/local/home/dunlapg/anaconda3/include/python3.7m
> > -Wno-unused-result -Wsign-compare -march=nocona -mtune=haswell
> > -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O3 -pipe
> > -fdebug-prefix-map==/usr/local/src/conda/-
> > -fdebug-prefix-map==/usr/local/src/conda-prefix -fuse-linker-plugin
> > -ffat-lto-objects -flto-partition=none -flto -flto -fuse-linker-plugin
> > -ffat-lto-objects -flto-partition=none -g -DNDEBUG -fwrapv -O3 -Wall
> > -L/persistent/local/home/dunlapg/anaconda3/lib/python3.7/config-3.7m-x86_64-linux-gnu
> > -L/persistent/local/home/dunlapg/anaconda3/lib -lpython3.7m -lpthread
> > -ldl  -lutil -lrt -lm  -Xlinker -export-dynamic conftest.c -lpython
> > -llzma  -lpython3.7m -lpthread -ldl  -lutil -lrt -lm  -llzma  >&5
> > /usr/bin/ld: cannot find -lpython
> > collect2: error: ld returned 1 exit status
> > 
> > The following fixes it for me:
> > 
> > diff --git a/tools/configure b/tools/configure
> > index acc857510e..d7e21db959 100755
> > --- a/tools/configure
> > +++ b/tools/configure
> > @@ -6953,7 +6953,7 @@ if echo "$PYTHON" | grep -q "^/"; then :
> >      PYTHON=`basename $PYTHONPATH`
> > 
> >  elif test -z "$PYTHON"; then :
> > -  PYTHON="python"
> > +  PYTHON="python2"
> >  else
> >    as_fn_error $? "PYTHON specified, but is not an absolute path"
> > "$LINENO" 5
> >  fi
> > diff --git a/tools/configure.ac b/tools/configure.ac
> > index 1499344ce6..adf70aeb33 100644
> > --- a/tools/configure.ac
> > +++ b/tools/configure.ac
> > @@ -355,7 +355,7 @@ esac
> >  AS_IF([echo "$PYTHON" | grep -q "^/"], [
> >      PYTHONPATH=$PYTHON
> >      PYTHON=`basename $PYTHONPATH`
> > -],[test -z "$PYTHON"], [PYTHON="python"],
> > +],[test -z "$PYTHON"], [PYTHON="python2"],
> >  [AC_MSG_ERROR([PYTHON specified, but is not an absolute path])])
> >  AX_PATH_PROG_OR_FAIL([PYTHONPATH], [$PYTHON])
> >  AX_CHECK_PYTHON_VERSION([2], [3])
> > 
> > ..but:
> > 1) I'm not sure if we can guarantee that `python2` will exist on all
> > systems we support,
> > 2) We probably want to support python3 at some point anyway.
> > 
> > On the other hand, Arch has python -> python3, but (apparently) has
> > since 2011 [1]; so there's an argument to be made that this isn't
> > something that needs to be solved for 4.12.
> 
> Which raises the question whether Andrew's patch should be included
> in 4.12. I'm tempted to refuse my Rab as I don't see why we need to
> be python3 compliant in the build system while configure isn't.
> 
> Thoughts?

I plan to have a closer look at python 3 compatibility issue today. But
the outcome is unlikely to be simple -- most likely there will be a few
patches. I don't think they will be suitable for 4.12.

We can document the python 2 requirement for 4.12.

Wei.

> 
> 
> Juergen

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.