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

Re: [Xen-devel] [PATCH for-next RFC 1/4] build/m4: make python_devel.m4 work with both python 2 and 3



On Wed, Mar 06, 2019 at 03:07:16PM +0000, Anthony PERARD wrote:
> On Tue, Mar 05, 2019 at 04:42:03PM +0000, Wei Liu wrote:
> > Do the following:
> > 
> > 1. Change the form of "print".
> > 2. Check for ABI flags -- this is complicated because it is only
> >    introduced in 3.2.
> 
> Is this a recommanded way of doing this? I may have a better way of
> fixing this macro, see below.

Nope. I figured this out myself. There doesn't seem to be a recommended
way to do it.

> 
> > 3. Fix library name in AC_CHECK_LIB.
> > 4. Remove other-libs in AC_CHECK_LIB.
> 
> Why did you remove the other libs? Also, with this change, PYTHON_LIBS
> isn't used anywhere anymore, and can be removed.
> 

Because

"The other-libraries argument should be limited to cases where it is
desirable to test for one library in the presence of another that is not
already in LIBS."

Its original usage is wrong. At least in the python-config case,
PYTHON_LIBS is "-lpython2.7 -lpthread -ldl -lutil -lm". ./configure
already knows how to use LDFLAGS as far as I can tell from the log.

Yes. PYTHON_LIBS can be removed. I think.


> > 
> > Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
> > ---
> > I doubt the non python-pkg branch works, because the paths generated
> > seem rather off. It definitely doesn't work on my machine, but I
> > don't know how other systems could possibly be configured before the
> > existence of python-config.
> > ---
> >  m4/python_devel.m4 | 27 ++++++++++++++++-----------
> >  tools/configure    | 34 ++++++++++++++++++++--------------
> >  2 files changed, 36 insertions(+), 25 deletions(-)
> > 
> > diff --git a/m4/python_devel.m4 b/m4/python_devel.m4
> > index 05ea4ef7e2..1e2f41b6aa 100644
> > --- a/m4/python_devel.m4
> > +++ b/m4/python_devel.m4
> > @@ -2,37 +2,42 @@ AC_DEFUN([AX_CHECK_PYTHON_DEVEL], [
> >  ac_previous_cppflags=$CPPFLAGS
> >  ac_previous_ldflags=$LDFLAGS
> >  ac_python_version=`$PYTHON -c 'import distutils.sysconfig; \
> > -    print distutils.sysconfig.get_config_var("VERSION")'`
> > +    print(distutils.sysconfig.get_config_var("VERSION"))'`
> > +ac_python_abiflags=
> >  AC_PATH_PROG([pyconfig], [$PYTHON-config], [no])
> >  AS_IF([test x"$pyconfig" = x"no"], [
> >      dnl For those that don't have python-config
> >      CPPFLAGS="$CFLAGS `$PYTHON -c 'import distutils.sysconfig; \
> >          print "-I" + distutils.sysconfig.get_config_var("INCLUDEPY")'`"
> >      CPPFLAGS="$CPPFLAGS `$PYTHON -c 'import distutils.sysconfig; \
> > -        print distutils.sysconfig.get_config_var("CFLAGS")'`"
> > +        print(distutils.sysconfig.get_config_var("CFLAGS"))'`"
> >      PYTHON_LIBS="$LDFLAGS `$PYTHON -c 'import distutils.sysconfig; \
> > -        print distutils.sysconfig.get_config_var("LIBS")'`"
> > +        print(distutils.sysconfig.get_config_var("LIBS"))'`"
> >      PYTHON_LIBS="$LDFLAGS `$PYTHON -c 'import distutils.sysconfig; \
> > -        print distutils.sysconfig.get_config_var("SYSLIBS")'`"
> > +        print(distutils.sysconfig.get_config_var("SYSLIBS"))'`"
> >      LDFLAGS="$LDFLAGS `$PYTHON -c 'import distutils.sysconfig; \
> > -        print "-L" + distutils.sysconfig.get_python_lib(plat_specific=1,\
> > -        standard_lib=1) + "/config"'`"
> > +        print("-L" + distutils.sysconfig.get_python_lib(plat_specific=1,\
> > +        standard_lib=1) + "/config")'`"
> >      LDFLAGS="$LDFLAGS `$PYTHON -c 'import distutils.sysconfig; \
> > -        print distutils.sysconfig.get_config_var("LINKFORSHARED")'`"
> > +        print(distutils.sysconfig.get_config_var("LINKFORSHARED"))'`"
> >      LDFLAGS="$LDFLAGS `$PYTHON -c 'import distutils.sysconfig; \
> > -        print distutils.sysconfig.get_config_var("LDFLAGS")'`"
> > +        print(distutils.sysconfig.get_config_var("LDFLAGS"))'`"
> >  ], [
> >      dnl If python-config is found use it
> >      CPPFLAGS="$CFLAGS `$PYTHON-config --cflags`"
> >      LDFLAGS="$LDFLAGS `$PYTHON-config --ldflags`"
> >      PYTHON_LIBS="$LIBS `$PYTHON-config --libs`"
> > +    abiflags="`$PYTHON-config --abiflags`"
> > +    if test "$?" == "0"
> > +    then
> > +        ac_python_abiflags="$abiflags"
> > +    fi
> >  ])
> >  
> >  AC_CHECK_HEADER([Python.h], [],
> >      [AC_MSG_ERROR([Unable to find Python development headers])],)
> > -AC_CHECK_LIB(python$ac_python_version, PyArg_ParseTuple, [],
> > -    [AC_MSG_ERROR([Unable to find a suitable python development library])],
> > -    [$PYTHON_LIBS])
> > +AC_CHECK_LIB(python$ac_python_version$ac_python_abiflags, 
> > PyArg_ParseTuple, [],
> > +    [AC_MSG_ERROR([Unable to find a suitable python development library])])
> 
> So, AC_CHECK_LIB seems to only be used to check if PyArg_ParseTuple
> exist, and requires as argument the name of the lib which is now
> complicated.
> 
> But, AC_CHECK_LIB do test compilation using the LDFLAGS which already
> contain the python lib we want, so instead, we could only do the part of
> the jobs that we need:
> 
> AC_LINK_IFELSE([AC_LANG_CALL([], [PyArg_ParseTuple])], [],
>     [AC_MSG_ERROR([Unable to find a suitable python development library])])
> 
> That generate a main.c with PyArg_ParseTuple() call like AC_CHECK_LIB
> do, and do build/link. If that fails, throw an error.
> 
> That avoid to use the --abiflags, which we don't need.
> 
> What do you thing?

Definitely looks better. Let me try this.

> 
> Some progress message can be added, similair to AC_CHECK_LIB:
> AC_MSG_CHECKING([for PyArg_ParseTuple])
> and [AC_MSG_RESULT([yes])] on success.
> 
> (I think AC_CHECK_LIB would also update $LIBS, but I don't think our
> build system is using that.)
> 

Yes it updates LIBS and yes xen build system doesn't need it.

Wei.

> >  CPPFLAGS=$ac_previous_cppflags
> >  LDFLAGS=$ac_previous_ldflags
> >  ])
> 
> -- 
> Anthony PERARD

_______________________________________________
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®.