--- a/m4/python.m4	2011-06-13 20:30:25.000000000 +0400
+++ b/m4/python.m4	2014-02-01 11:34:44.000000000 +0400
@@ -43,16 +43,14 @@
 [AC_REQUIRE([AM_PATH_PYTHON])
 AC_MSG_CHECKING(for headers required to compile python extensions)
 dnl deduce PYTHON_INCLUDES
-py_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"`
-py_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix)"`
-PYTHON_CONFIG=`which $PYTHON`-config
-if test -x "$PYTHON_CONFIG"; then
-PYTHON_INCLUDES=`$PYTHON_CONFIG --includes 2>/dev/null`
-else
-PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
-if test "$py_prefix" != "$py_exec_prefix"; then
-  PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
-fi
+if test "x$PYTHON_INCLUDES" = x; then
+  PYTHON_CONFIG=`which $PYTHON`-config
+  if test -x "$PYTHON_CONFIG"; then
+    PYTHON_INCLUDES=`$PYTHON_CONFIG --includes 2>/dev/null`
+  else
+    PYTHON_INCLUDES=`$PYTHON -c "import distutils.sysconfig, sys; sys.stdout.write(distutils.sysconfig.get_python_inc(True))"`
+    PYTHON_INCLUDES="-I$PYTHON_INCLUDES"
+  fi
 fi
 AC_SUBST(PYTHON_INCLUDES)
 dnl check if the headers exist:
@@ -66,24 +64,35 @@
 CPPFLAGS="$save_CPPFLAGS"
 ])
 
-# JD_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
-# ---------------------------------------------------------------------------
-# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
-# Run ACTION-IF-FALSE otherwise.
-# This test uses sys.hexversion instead of the string equivalent.
-# This is similar to AM_PYTHON_CHECK_VERSION, but without python 1.5.x support
-# and with python 3.0 support.
-AC_DEFUN([JD_PYTHON_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]]
-minverhex = 0
-# xrange is not present in Python 3.0 and range returns an iterator
-for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
-sys.exit(sys.hexversion < minverhex)"
-  AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
+dnl a macro to check for ability to embed python
+dnl  AM_CHECK_PYTHON_LIBS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE])
+dnl function also defines PYTHON_LIBS
+AC_DEFUN([AM_CHECK_PYTHON_LIBS],
+[AC_REQUIRE([AM_PATH_PYTHON])
+AC_MSG_CHECKING(for libraries required to embed python)
+dnl deduce PYTHON_LIBS
+py_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"`
+if test "x$PYTHON_LIBS" = x; then
+  PYTHON_CONFIG=`which $PYTHON`-config
+  if test -x "$PYTHON_CONFIG"; then
+    PYTHON_LIBS=`$PYTHON_CONFIG --ldflags 2>/dev/null`
+  else
+    PYTHON_LIBS="-L${py_prefix}/lib -lpython${PYTHON_VERSION}"
+  fi
+fi
+if test "x$PYTHON_LIB_LOC" = x; then
+  PYTHON_LIB_LOC="${py_prefix}/lib"
+fi
+AC_SUBST(PYTHON_LIBS)
+AC_SUBST(PYTHON_LIB_LOC)
+dnl check if the headers exist:
+save_LIBS="$LIBS"
+LIBS="$LIBS $PYTHON_LIBS"
+AC_TRY_LINK_FUNC(Py_Initialize, dnl
+         [LIBS="$save_LIBS"; AC_MSG_RESULT(yes); $1], dnl
+         [LIBS="$save_LIBS"; AC_MSG_RESULT(no); $2])
+
+])
 
 # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
 # Free Software Foundation, Inc.
@@ -119,8 +123,7 @@
   dnl Find a Python interpreter.  Python versions prior to 2.0 are not
   dnl supported
   m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
-                    [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl
-python2.1 python2.0])
+                    [python3 python3.3 python3.2 python3.1 python2 python2.7 python])
 
   m4_if([$1],[],[
     dnl No version check is needed.
@@ -134,7 +137,7 @@
     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])
-      JD_PYTHON_CHECK_VERSION([$PYTHON], [$1],
+      AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
 			      [AC_MSG_RESULT(yes)],
 			      [AC_MSG_ERROR(too old)])
       am_display_PYTHON=$PYTHON
@@ -145,7 +148,7 @@
 	[am_cv_pathless_PYTHON],[
 	for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do
 	  test "$am_cv_pathless_PYTHON" = none && break
-	  JD_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
+	  AM_PYTHON_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
--- a/configure.ac.orig	2014-02-23 10:45:36.212800000 +0400
+++ b/configure.ac	2014-02-23 10:47:01.700800000 +0400
@@ -89,36 +89,28 @@
 JD_PATH_PYTHON(python_min_ver)
 
 # check if we are building for python 3
-JD_PYTHON_CHECK_VERSION([$PYTHON], [3.0],
+AM_PYTHON_CHECK_VERSION([$PYTHON], [3.0],
 			 build_py3k=true,
 			 build_py3k=false)
 
 # if building for python 3 make sure we have the minimum version supported
 if test $build_py3k = true ; then
   AC_MSG_CHECKING([for $PYTHON >=] python3_min_ver)
-  JD_PYTHON_CHECK_VERSION([$PYTHON], python3_min_ver,
+  AM_PYTHON_CHECK_VERSION([$PYTHON], python3_min_ver,
 			  [AC_MSG_RESULT(yes)],
 			  [AC_MSG_ERROR(too old)])
 fi
 
-AM_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers)])
-
-AC_MSG_CHECKING([for PySignal_SetWakeupFd in Python.h])
-old_CPPFLAGS=$CPPFLAGS
-CPPFLAGS="-Wall -Werror $PYTHON_INCLUDES"
-AC_TRY_COMPILE([#include <Python.h>],
-  [PySignal_SetWakeupFd(0);],
-  setwakeupfd_ok=yes,
-  setwakeupfd_ok=no)
-AC_MSG_RESULT($setwakeupfd_ok)
-if test "x$setwakeupfd_ok" != xno; then
-  AC_DEFINE(HAVE_PYSIGNAL_SETWAKEUPFD, 1,
-                [Define to 1 if PySignal_SetWakeupFd is available])
+# - 'SO' for PyPy, CPython 2.7-3.2
+# - 'EXT_SUFFIX' for CPython3.3+ (http://bugs.python.org/issue16754)
+# - fallback to '.so'
+PYTHON_SO=`$PYTHON -c "import distutils.sysconfig, sys; get = distutils.sysconfig.get_config_var; sys.stdout.write(get('EXT_SUFFIX') or get('SO') or '.so');"`
+AC_SUBST(PYTHON_SO)
+
+AM_CHECK_PYTHON_HEADERS(, AC_MSG_ERROR([Python headers not found]))
+if test "x$os_win32" = "xyes"; then
+  AM_CHECK_PYTHON_LIBS(, AC_MSG_ERROR([Python libs not found. Windows requires Python modules to be explicitly linked to libpython.]))
 fi
-CPPFLAGS=$old_CPPFLAGS
-
-PLATFORM=`$PYTHON -c "import sys; from distutils import util; sys.stdout.write(util.get_platform())"`
-AC_SUBST(PLATFORM)
 
 AC_ARG_ENABLE(thread,
   AC_HELP_STRING([--disable-thread], [Disable pygobject threading support]),,
