diff --git a/acinclude.m4 b/acinclude.m4 index f0ceffb4d5..c803690211 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -5,4 +5,4 @@ m4_include([m4macros/ax_gcc_func_attribute.m4]) m4_include([m4macros/ax_prog_cc_for_build.m4]) m4_include([m4macros/ax_prog_perl_version.m4]) m4_include([m4macros/detectcflags.m4]) -m4_include([m4macros/pythondev.m4]) +m4_include([m4macros/python3dev.m4]) diff --git a/configure.ac b/configure.ac index 750bf37adf..ce93366138 100644 --- a/configure.ac +++ b/configure.ac @@ -82,7 +82,8 @@ m4_define([poppler_required_version], [0.69.0]) m4_define([poppler_data_required_version], [0.4.9]) m4_define([pycairo_required_version], [1.0.2]) m4_define([pygtk_required_version], [2.10.4]) -m4_define([python2_required_version], [2.5.0]) +# m4_define([python2_required_version], [2.5.0]) +m4_define([python3_required_version], [3.6.0]) m4_define([rsvg_required_version], [2.40.6]) m4_define([webkitgtk_required_version], [2.20.3]) m4_define([webp_required_version], [0.6.0]) @@ -180,7 +181,8 @@ PANGOCAIRO_REQUIRED_VERSION=pangocairo_required_version PERL_REQUIRED_VERSION=perl_required_version POPPLER_REQUIRED_VERSION=poppler_required_version POPPLER_DATA_REQUIRED_VERSION=poppler_data_required_version -PYTHON2_REQUIRED_VERSION=python2_required_version +# PYTHON2_REQUIRED_VERSION=python2_required_version +PYTHON3_REQUIRED_VERSION=python3_required_version RSVG_REQUIRED_VERSION=rsvg_required_version WEBKITGTK_REQUIRED_VERSION=webkitgtk_required_version WEBP_REQUIRED_VERSION=webp_required_version @@ -213,7 +215,8 @@ AC_SUBST(PANGOCAIRO_REQUIRED_VERSION) AC_SUBST(PERL_REQUIRED_VERSION) AC_SUBST(POPPLER_REQUIRED_VERSION) AC_SUBST(POPPLER_DATA_REQUIRED_VERSION) -AC_SUBST(PYTHON2_REQUIRED_VERSION) +AC_SUBST(PYTHON3_REQUIRED_VERSION) +# AC_SUBST(PYTHON2_REQUIRED_VERSION) AC_SUBST(RSVG_REQUIRED_VERSION) AC_SUBST(WEBKITGTK_REQUIRED_VERSION) AC_SUBST(WEBP_REQUIRED_VERSION) @@ -2258,9 +2261,9 @@ m4_define([pycheck_error], [ if test "x$enable_python" != xno; then enable_python="yes" # check for Python - AM_PATH_PYTHON2(python2_required_version,, - [pycheck_error([Python 2 (python2_required_version or newer)], [it])]) - AM_CHECK_PYTHON_HEADERS(, [pycheck_error([Python 2 headers], [them])]) + AM_PATH_PYTHON(python3_required_version,, + [pycheck_error([Python 3 (python3_required_version or newer)], [it])]) + AM_CHECK_PYTHON_HEADERS(, [pycheck_error([Python 3 headers], [them])]) # Win32 needs all symbols resolved for linking, even for DLLs # Assume the link library is in $exec_prefix/libs @@ -2279,19 +2282,21 @@ if test "x$enable_python" != xno; then AC_SUBST(PYLINK_LIBS) AC_SUBST(PYBIN_PATH) - # check for PyGTK - PKG_CHECK_MODULES(PYGTK, pygtk-2.0 >= pygtk_required_version,, - [pycheck_error([PyGTK pygtk_required_version or newer], [it])]) + # # check for PyGTK + # PKG_CHECK_MODULES(PYGTK, pygtk-2.0 >= pygtk_required_version,, + # [pycheck_error([PyGTK pygtk_required_version or newer], [it])]) - AC_PATH_PROG(PYGTK_CODEGEN, pygtk-codegen-2.0, no) - if test "x$PYGTK_CODEGEN" = xno; then - pycheck_error([pygtk-codegen-2.0 script], [it]) - fi + # AC_PATH_PROG(PYGTK_CODEGEN, pygtk-codegen-2.0, no) + # if test "x$PYGTK_CODEGEN" = xno; then + # pycheck_error([pygtk-codegen-2.0 script], [it]) + # fi - AC_MSG_CHECKING(for pygtk defs) - PYGTK_DEFSDIR=`$PKG_CONFIG --variable=defsdir pygtk-2.0` - AC_SUBST(PYGTK_DEFSDIR) - AC_MSG_RESULT($PYGTK_DEFSDIR) + # AC_MSG_CHECKING(for pygtk defs) + # PYGTK_DEFSDIR=`$PKG_CONFIG --variable=defsdir pygtk-2.0` + # AC_SUBST(PYGTK_DEFSDIR) + # AC_MSG_RESULT($PYGTK_DEFSDIR) + + # XXX Check here for something related to Python gobject-introspection & GTK3 PKG_CHECK_MODULES(PYCAIRO, pycairo >= pycairo_required_version,, [pycheck_error([PyCairo pycairo_required_version or newer], [it])]) @@ -3032,7 +3037,7 @@ Optional Plug-Ins: Heif >= 1.4.0: $have_libheif_1_4_0 PDF (export): $have_cairo_pdf Print: $enable_print - Python 2: $enable_python + Python 3: $enable_python TWAIN (Win32): $os_win32 Webpage: $have_webkit WMF: $have_libwmf diff --git a/m4macros/python3dev.m4 b/m4macros/python3dev.m4 new file mode 100644 index 0000000000..14e22c39cb --- /dev/null +++ b/m4macros/python3dev.m4 @@ -0,0 +1,248 @@ +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009, +# 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PATH_PYTHON2([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------- +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. +# +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. +# +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). +# +# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON2 will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. +# +# AM_PATH_PYTHON3 is based on AM_PATH_PYTHON but will search only +# Python 3 locations. +AC_DEFUN([AM_PATH_PYTHON3], + [ + dnl Find a Python3 interpreter. + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], +[python3 python]) + + AC_ARG_VAR([PYTHON], [the Python interpreter]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON3_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python 3 interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON3_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) + + +# AM_PYTHON3_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# --------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION +# and version == 3. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalent (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# This supports Python 3.0 or higher. +# +# Based on AM_PYTHON_CHECK_VERSION but for Python 3 only. +AC_DEFUN([AM_PYTHON3_CHECK_VERSION], + [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +# minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minver = list(map(int, '$2'.split('.'))) +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator. +# python2dev had minver[[i]] but that raises +# TypeError: list indices must be integers or slices, not list +# for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] +for v in minver: minverhex = (minverhex << 8) + v +# sys.version_info.major only available since Python 2.7. +# use sys.version_info[0] instead. +# Double the square brackets for M4 syntax. +# sys.exit(sys.version_info[[0]] != 3 or sys.hexversion < minverhex)" +sys.exit(sys.version_info[[0]] != 3 or (sys.hexversion >> 8) < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) + + + +## Find the install dirs for the python installation. +## By James Henstridge + +dnl a macro to check for ability to create python extensions +dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE]) +dnl function also defines PYTHON_INCLUDES +AC_DEFUN([AM_CHECK_PYTHON_HEADERS], +[AC_REQUIRE([AM_PATH_PYTHON3]) +AC_MSG_CHECKING(for headers required to compile python extensions) +dnl Win32 doesn't have a versioned directory for headers +if test "$PYTHON_PLATFORM" != "win32"; then + py_versiondir="/python${PYTHON_VERSION}" +else + py_versiondir= +fi +dnl deduce PYTHON_INCLUDES +py_prefix=`$PYTHON -c "import sys; print(sys.prefix)"` +py_exec_prefix=`$PYTHON -c "import sys; print(sys.exec_prefix)"` +PYTHON_INCLUDES="-I${py_prefix}/include${py_versiondir}" +if test "$py_prefix" != "$py_exec_prefix"; then + PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include${py_versiondir}" +fi +AC_SUBST(PYTHON_INCLUDES) +dnl check if the headers exist: +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" +AC_TRY_CPP([#include ],dnl +[AC_MSG_RESULT(found) +$1],dnl +[AC_MSG_RESULT(not found) +$2]) +CPPFLAGS="$save_CPPFLAGS" +])