[gimp/wip/akkana/gtk3-python3: 1938/1940] Re-enable Python in the build, but requiring Python >3.6.0 since we'll need that for gobject introsp



commit 4fb8106c590c966273532000e742d6be313bb74f
Author: Akkana Peck <akkana shallowsky com>
Date:   Tue Jun 12 14:17:18 2018 -0600

    Re-enable Python in the build, but requiring Python >3.6.0 since we'll need that for gobject introspection

 acinclude.m4           |   2 +-
 configure.ac           |  47 +++++-----
 m4macros/python3dev.m4 | 248 +++++++++++++++++++++++++++++++++++++++++++++++++
 plug-ins/Makefile.am   |   2 +-
 4 files changed, 275 insertions(+), 24 deletions(-)
---
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 13a8df6b00..d122455c55 100644
--- a/configure.ac
+++ b/configure.ac
@@ -78,7 +78,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])
@@ -172,7 +173,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
@@ -205,7 +207,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)
@@ -2245,9 +2248,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
@@ -2266,19 +2269,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])])
@@ -2849,10 +2854,8 @@ plug-ins/map-object/Makefile
 plug-ins/metadata/Makefile
 plug-ins/pagecurl/Makefile
 plug-ins/print/Makefile
-]
-dnl plug-ins/pygimp/Makefile
-dnl plug-ins/pygimp/plug-ins/Makefile
-[
+plug-ins/pygimp/Makefile
+plug-ins/pygimp/plug-ins/Makefile
 plug-ins/screenshot/Makefile
 plug-ins/script-fu/Makefile
 plug-ins/script-fu/ftx/Makefile
@@ -3021,7 +3024,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 <Python.h>],dnl
+[AC_MSG_RESULT(found)
+$1],dnl
+[AC_MSG_RESULT(not found)
+$2])
+CPPFLAGS="$save_CPPFLAGS"
+])
diff --git a/plug-ins/Makefile.am b/plug-ins/Makefile.am
index d069024288..5fe438479f 100644
--- a/plug-ins/Makefile.am
+++ b/plug-ins/Makefile.am
@@ -26,7 +26,7 @@ endif
 
 SUBDIRS = \
        script-fu               \
-##     $(pygimp)               \
+       $(pygimp)               \
        file-bmp                \
        $(file_darktable)       \
        file-dds                \


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