+dnl -*- mode: m4; c-basic-offset: 2; indent-tabs-mode: nil; -*-
+dnl vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+dnl
+dnl pandora-build: A pedantic build system
+dnl
+dnl Copyright (C) 2009 Sun Microsystems, Inc.
+dnl Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de>
+dnl Copyright (c) 2008 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
+dnl Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net>
+dnl Copyright (c) 2008 Andrew Collier <colliera@ukzn.ac.za>
+dnl Copyright (c) 2008 Matteo Settenvini <matteo@member.fsf.org>
+dnl Copyright (c) 2008 Horst Knorr <hk_classes@knoda.org>
+dnl
+dnl This program is free software: you can redistribute it and/or modify it
+dnl under the terms of the GNU General Public License as published by the
+dnl Free Software Foundation, either version 3 of the License, or (at your
+dnl option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+dnl Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License along
+dnl with this program. If not, see <http://www.gnu.org/licenses/>.
+dnl
+dnl As a special exception, the respective Autoconf Macro's copyright owner
+dnl gives unlimited permission to copy, distribute and modify the configure
+dnl scripts that are the output of Autoconf when processing the Macro. You
+dnl need not follow the terms of the GNU General Public License when using
+dnl or distributing such scripts, even though portions of the text of the
+dnl Macro appear in them. The GNU General Public License (GPL) does govern
+dnl all other use of the material that constitutes the Autoconf Macro.
+dnl
+dnl This special exception to the GPL applies to versions of the Autoconf
+dnl Macro released by the Autoconf Macro Archive. When you make and
+dnl distribute a modified version of the Autoconf Macro, you may extend this
+dnl special exception to the GPL to apply to your modified version as well.
+
+dnl SYNOPSIS
+dnl
+dnl PANDORA_PYTHON3_DEVEL([version])
+dnl
+dnl DESCRIPTION
+dnl
+dnl Note: Defines as a precious variable "PYTHON3_VERSION". Don't override it
+dnl in your configure.ac.
+dnl
+dnl This macro checks for Python and tries to get the include path to
+dnl 'Python.h'. It provides the $(PYTHON3_CPPFLAGS) and $(PYTHON3_LDFLAGS)
+dnl output variables. It also exports $(PYTHON3_EXTRA_LIBS) and
+dnl $(PYTHON3_EXTRA_LDFLAGS) for embedding Python in your code.
+dnl
+dnl You can search for some particular version of Python by passing a
+dnl parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please
+dnl note that you *have* to pass also an operator along with the version to
+dnl match, and pay special attention to the single quotes surrounding the
+dnl version number. Don't use "PYTHON3_VERSION" for this: that environment
+dnl variable is declared as precious and thus reserved for the end-user.
+dnl
+dnl LAST MODIFICATION
+dnl
+dnl 2009-08-23
+
+AC_DEFUN([PANDORA_PYTHON3_DEVEL],[
+ #
+ # Allow the use of a (user set) custom python version
+ #
+ AC_ARG_VAR([PYTHON3_VERSION],[The installed Python
+ version to use, for example '3.0'. This string
+ will be appended to the Python interpreter
+ canonical name.])
+
+
+ AS_IF([test -z "$PYTHON3"],[
+ AC_PATH_PROG([PYTHON3],[python[$PYTHON3_VERSION]])
+ ])
+ AS_IF([test -z "$PYTHON3"],[
+ AC_MSG_ERROR([Cannot find python$PYTHON3_VERSION in your system path])
+ PYTHON3_VERSION=""
+ ])
+
+ #
+ # 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_python3_ver=`$PYTHON3 -c "import sys, string; \
+ ver = string.split(sys.version)[[0]]; \
+ print(ver $1)"`
+ if test "$ac_supports_python3_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 PYTHON3_VERSION
+variable to configure. See ``configure --help'' for reference.
+])
+ PYTHON_VERSION=""
+ fi
+ fi
+
+ #
+ # Check if you have distutils, else fail
+ #
+ AC_MSG_CHECKING([for Python3 distutils package])
+ ac_python3_distutils_result=`$PYTHON3 -c "import distutils" 2>&1`
+ if test -z "$ac_python3_distutils_result"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([cannot import Python3 module "distutils".
+Please check your Python3 installation. The error was:
+$ac_python3_distutils_result])
+ PYTHON3_VERSION=""
+ fi
+
+ #
+ # Check for Python include path
+ #
+ AC_MSG_CHECKING([for Python3 include path])
+ if test -z "$PYTHON3_CPPFLAGS"; then
+ python3_path=`$PYTHON3 -c "import distutils.sysconfig; \
+ print(distutils.sysconfig.get_python_inc());"`
+ if test -n "${python3_path}"; then
+ python3_path="-I$python3_path"
+ fi
+ PYTHON3_CPPFLAGS=$python3_path
+ fi
+ AC_MSG_RESULT([$PYTHON3_CPPFLAGS])
+ AC_SUBST([PYTHON3_CPPFLAGS])
+
+ #
+ # Check for Python library path
+ #
+ AC_MSG_CHECKING([for Python3 library path])
+ if test -z "$PYTHON3_LDFLAGS"; then
+ # (makes two attempts to ensure we've got a version number
+ # from the interpreter)
+ py3_version=`$PYTHON3 -c "from distutils.sysconfig import *; \
+ print(' '.join(get_config_vars('VERSION')))"`
+ if test "$py3_version" == "[None]"; then
+ if test -n "$PYTHON3_VERSION"; then
+ py3_version=$PYTHON3_VERSION
+ else
+ py3_version=`$PYTHON3 -c "import sys; \
+ print(sys.version[[:3]])"`
+ fi
+ fi
+
+ PYTHON3_LDFLAGS=`$PYTHON3 -c "from distutils.sysconfig import *; \
+ print('-L' + get_python_lib(0,1), \
+ '-lpython');"`$py3_version
+ fi
+ AC_MSG_RESULT([$PYTHON3_LDFLAGS])
+ AC_SUBST([PYTHON3_LDFLAGS])
+
+ #
+ # Check for site packages
+ #
+ AC_MSG_CHECKING([for Python3 site-packages path])
+ if test -z "$PYTHON3_SITE_PKG"; then
+ PYTHON3_SITE_PKG=`$PYTHON3 -c "import distutils.sysconfig; \
+ print(distutils.sysconfig.get_python_lib(0,0));"`
+ fi
+ AC_MSG_RESULT([$PYTHON3_SITE_PKG])
+ AC_SUBST([PYTHON3_SITE_PKG])
+
+ #
+ # libraries which must be linked in when embedding
+ #
+ AC_MSG_CHECKING(for Python3 embedding libraries)
+ if test -z "$PYTHON3_EMBED_LIBS"; then
+ PYTHON3_EMBED_LIBS=`$PYTHON3 -c "import distutils.sysconfig; \
+ conf = distutils.sysconfig.get_config_var; \
+ print(conf('LOCALMODLIBS'), conf('LIBS'))"`
+ fi
+ AC_MSG_RESULT([$PYTHON3_EMBED_LIBS])
+ AC_SUBST(PYTHON3_EMBED_LIBS)
+
+ #
+ # linking flags needed when embedding
+ #
+ AC_MSG_CHECKING(for Python3 embedding linking flags)
+ if test -z "$PYTHON3_EMBED_LDFLAGS"; then
+ PYTHON3_EMBED_LDFLAGS=`$PYTHON3 -c "import distutils.sysconfig; \
+ conf = distutils.sysconfig.get_config_var; \
+ print(conf('LINKFORSHARED'))"`
+ fi
+ AC_MSG_RESULT([$PYTHON3_EMBED_LDFLAGS])
+ AC_SUBST(PYTHON3_EMBED_LDFLAGS)
+
+ #
+ # final check to see if everything compiles alright
+ #
+ AC_MSG_CHECKING([for Python3 development environment consistency])
+ AC_LANG_PUSH([C])
+ # save current global flags
+ ac_save_LIBS="$LIBS"
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ LIBS="$ac_save_LIBS $PYTHON3_LDFLAGS"
+ CPPFLAGS="$ac_save_CPPFLAGS $PYTHON3_CPPFLAGS"
+ AC_TRY_LINK([
+ #include <Python.h>
+ ],[
+ Py_Initialize();
+ ],[python3exists=yes],[python3exists=no])
+
+ AC_MSG_RESULT([$python3exists])
+
+ if test ! "$python3exists" = "yes"; then
+ AC_MSG_WARN([
+ Could not link test program to Python3.
+ Maybe the main Python3 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/python3/lib"
+ ============================================================================
+ ERROR!
+ You probably have to install the development version of the Python3 package
+ for your distribution. The exact name of this package varies among them.
+ ============================================================================
+ ])
+ PYTHON3_VERSION=""
+ fi
+ AC_LANG_POP
+ # turn back to default flags
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIBS="$ac_save_LIBS"
+
+ #
+ # all done!
+ #
+])
+