[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 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.

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

> 
> 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?

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

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