mirror of
https://gitlab.com/apparmor/apparmor.git
synced 2025-03-04 16:35:02 +01:00

Author: Dmitrijs Ledkovs <dmitrij.ledkov@ubuntu.com> Modifiy the libapparmor macro for python to use python-config if it exists to determine what CPPFLAGS and LDFLAGS to use when building the python swig libraries. Without this addition, python detection fails on ubuntu 13.04. I've confirmed that with this patch applied, the python libraries still build successfully on older releases as well (as far back as ubuntu 11.10). Acked-by: Steve Beattie <sbeattie@ubuntu.com> Acked-by: Kees Cook <kees@ubuntu.com>
199 lines
7.5 KiB
Text
199 lines
7.5 KiB
Text
AC_DEFUN([AC_PYTHON_DEVEL],[
|
|
#
|
|
# Allow the use of a (user set) custom python version
|
|
#
|
|
AC_ARG_VAR([PYTHON_VERSION],[The installed Python
|
|
version to use, for example '2.3'. This string
|
|
will be appended to the Python interpreter
|
|
canonical name.])
|
|
|
|
AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
|
|
if test -z "$PYTHON"; then
|
|
AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
|
|
PYTHON_VERSION=""
|
|
fi
|
|
|
|
#
|
|
# Check for a version of Python >= 2.1.0
|
|
#
|
|
AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
|
|
ac_supports_python_ver=`$PYTHON -c "import sys; \
|
|
ver = sys.version.split()[[0]]; \
|
|
sys.stdout.write(str(ver >= '2.1.0'))"`
|
|
if test "$ac_supports_python_ver" != "True"; then
|
|
if test -z "$PYTHON_NOVERSIONCHECK"; then
|
|
AC_MSG_RESULT([no])
|
|
AC_MSG_FAILURE([
|
|
This version of the AC@&t@_PYTHON_DEVEL macro
|
|
doesn't work properly with versions of Python before
|
|
2.1.0. You may need to re-run configure, setting the
|
|
variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
|
|
PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
|
|
Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
|
|
to something else than an empty string.
|
|
])
|
|
else
|
|
AC_MSG_RESULT([skip at user request])
|
|
fi
|
|
else
|
|
AC_MSG_RESULT([yes])
|
|
fi
|
|
|
|
#
|
|
# if the macro parameter ``version'' is set, honour it
|
|
#
|
|
if test -n "$1"; then
|
|
AC_MSG_CHECKING([for a version of Python $1])
|
|
ac_supports_python_ver=`$PYTHON -c "import sys; \
|
|
ver = sys.version.split()[[0]]; \
|
|
sys.stdout.write("%s\n" % (ver == $1))"`
|
|
if test "$ac_supports_python_ver" = "True"; then
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
AC_MSG_ERROR([this package requires Python $1.
|
|
If you have it installed, but it isn't the default Python
|
|
interpreter in your system path, please pass the PYTHON_VERSION
|
|
variable to configure. See ``configure --help'' for reference.
|
|
])
|
|
PYTHON_VERSION=""
|
|
fi
|
|
fi
|
|
|
|
#
|
|
# Check if you have distutils, else fail
|
|
#
|
|
AC_MSG_CHECKING([for the distutils Python package])
|
|
ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
|
|
if test -z "$ac_distutils_result"; then
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
AC_MSG_ERROR([cannot import Python module "distutils".
|
|
Please check your Python installation. The error was:
|
|
$ac_distutils_result])
|
|
PYTHON_VERSION=""
|
|
fi
|
|
|
|
#
|
|
# Check for Python include path
|
|
#
|
|
AC_MSG_CHECKING([for Python include path])
|
|
if type $PYTHON-config; then
|
|
PYTHON_CPPFLAGS=`$PYTHON-config --includes`
|
|
fi
|
|
if test -z "$PYTHON_CPPFLAGS"; then
|
|
python_path=`$PYTHON -c "import sys; import distutils.sysconfig;\
|
|
sys.stdout.write('%s\n' % distutils.sysconfig.get_python_inc());"`
|
|
if test -n "${python_path}"; then
|
|
python_path="-I$python_path"
|
|
fi
|
|
PYTHON_CPPFLAGS=$python_path
|
|
fi
|
|
AC_MSG_RESULT([$PYTHON_CPPFLAGS])
|
|
AC_SUBST([PYTHON_CPPFLAGS])
|
|
|
|
#
|
|
# Check for Python library path
|
|
#
|
|
AC_MSG_CHECKING([for Python library path])
|
|
if type $PYTHON-config; then
|
|
PYTHON_LDFLAGS=`$PYTHON-config --ldflags`
|
|
fi
|
|
if test -z "$PYTHON_LDFLAGS"; then
|
|
# (makes two attempts to ensure we've got a version number
|
|
# from the interpreter)
|
|
py_version=`$PYTHON -c "import sys; from distutils.sysconfig import *; \
|
|
sys.stdout.write('%s\n' % ''.join(get_config_vars('VERSION')))"`
|
|
if test "$py_version" == "[None]"; then
|
|
if test -n "$PYTHON_VERSION"; then
|
|
py_version=$PYTHON_VERSION
|
|
else
|
|
py_version=`$PYTHON -c "import sys; \
|
|
sys.stdout.write("%s\n" % sys.version[[:3]])"`
|
|
fi
|
|
fi
|
|
|
|
PYTHON_LDFLAGS=`$PYTHON -c "import sys; from distutils.sysconfig import *; \
|
|
sys.stdout.write('-L' + get_python_lib(0,1) + ' -lpython\n')"`$py_version`$PYTHON -c \
|
|
"import sys; sys.stdout.write('%s' % getattr(sys,'abiflags',''))"`
|
|
fi
|
|
AC_MSG_RESULT([$PYTHON_LDFLAGS])
|
|
AC_SUBST([PYTHON_LDFLAGS])
|
|
|
|
#
|
|
# Check for site packages
|
|
#
|
|
AC_MSG_CHECKING([for Python site-packages path])
|
|
if test -z "$PYTHON_SITE_PKG"; then
|
|
PYTHON_SITE_PKG=`$PYTHON -c "import sys; import distutils.sysconfig; \
|
|
sys.stdout.write('%s\n' % distutils.sysconfig.get_python_lib(0,0));"`
|
|
fi
|
|
AC_MSG_RESULT([$PYTHON_SITE_PKG])
|
|
AC_SUBST([PYTHON_SITE_PKG])
|
|
|
|
#
|
|
# libraries which must be linked in when embedding
|
|
#
|
|
AC_MSG_CHECKING(python extra libraries)
|
|
if test -z "$PYTHON_EXTRA_LIBS"; then
|
|
PYTHON_EXTRA_LIBS=`$PYTHON -c "import sys; import distutils.sysconfig; \
|
|
conf = distutils.sysconfig.get_config_var; \
|
|
sys.stdout.write('%s %s\n' % (conf('LOCALMODLIBS'), conf('LIBS')))"`
|
|
fi
|
|
AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
|
|
AC_SUBST(PYTHON_EXTRA_LIBS)
|
|
|
|
#
|
|
# linking flags needed when embedding
|
|
#
|
|
AC_MSG_CHECKING(python extra linking flags)
|
|
if test -z "$PYTHON_EXTRA_LDFLAGS"; then
|
|
PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import sys; import distutils.sysconfig; \
|
|
conf = distutils.sysconfig.get_config_var; \
|
|
sys.stdout.write('%s\n' % conf('LINKFORSHARED'))"`
|
|
fi
|
|
AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
|
|
AC_SUBST(PYTHON_EXTRA_LDFLAGS)
|
|
|
|
#
|
|
# final check to see if everything compiles alright
|
|
#
|
|
AC_MSG_CHECKING([consistency of all components of python development environment])
|
|
AC_LANG_PUSH([C])
|
|
# save current global flags
|
|
ac_save_LIBS="$LIBS"
|
|
ac_save_CPPFLAGS="$CPPFLAGS"
|
|
LIBS="$ac_save_LIBS $PYTHON_LDFLAGS"
|
|
CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
|
|
AC_TRY_LINK([
|
|
#include <Python.h>
|
|
],[
|
|
Py_Initialize();
|
|
],[pythonexists=yes],[pythonexists=no])
|
|
|
|
AC_MSG_RESULT([$pythonexists])
|
|
|
|
if test ! "$pythonexists" = "yes"; then
|
|
AC_MSG_ERROR([
|
|
Could not link test program to Python. Maybe the main Python library has been
|
|
installed in some non-standard library path. If so, pass it to configure,
|
|
via the LDFLAGS environment variable.
|
|
Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
|
|
============================================================================
|
|
ERROR!
|
|
You probably have to install the development version of the Python package
|
|
for your distribution. The exact name of this package varies among them.
|
|
============================================================================
|
|
])
|
|
PYTHON_VERSION=""
|
|
fi
|
|
AC_LANG_POP
|
|
# turn back to default flags
|
|
CPPFLAGS="$ac_save_CPPFLAGS"
|
|
LIBS="$ac_save_LIBS"
|
|
|
|
#
|
|
# all done!
|
|
#
|
|
])
|