Fix #1023 - Make timestamps in API timezone aware
[mediagoblin.git] / m4 / python.m4
index de6b38b9ab878a2300d624c9f35a21de3cae4cf4..58aef43303025db0a946338fdf5c8202b1e74e54 100644 (file)
@@ -1,9 +1,25 @@
-# Copyright 2012 Brandon Invergo <brandon@invergo.net>
+# Copyright 2012, 2013, 2014 Brandon Invergo <brandon@invergo.net>
 #
-# Copying and distribution of this file, with or without modification,
-# are permitted in any medium without royalty provided the copyright
-# notice and this notice are preserved.  This file is offered as-is,
-# without any warranty.
+# This file is part of pyconfigure.  This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively.  If not, see <http://www.gnu.org/licenses/>.
+
 
 # Many of these macros were adapted from ones written by Andrew Dalke
 # and James Henstridge and are included with the Automake utility
@@ -85,37 +101,73 @@ m4_define([_AC_LANG_CALL(Python)],
 [AC_LANG_PROGRAM([$1], [$2])])
 
 
-
 ## -------------------------------------------- ##
 ## 3. Looking for Compilers and Interpreters.   ##
 ## -------------------------------------------- ##
 
 
 AC_DEFUN([AC_LANG_COMPILER(Python)],
-[AC_REQUIRE([AC_PROG_PYTHON])])
-
-
-# AC_PROG_PYTHON(PROG-TO-CHECK-FOR)
+[AC_REQUIRE([PC_PROG_PYTHON])])
+
+
+# PC_INIT([MIN-VERSION], [MAX-VERSION]) 
+# -----------------------------
+# Initialize pyconfigure, finding a Python interpreter with a given
+# minimum and/or maximum version. 
+AC_DEFUN([PC_INIT],
+[PC_PROG_PYTHON([], [$1], [$2])
+dnl If we found something, do a sanity check that the interpreter really
+dnl has the version its name would suggest.
+m4_ifval([PYTHON],
+        [PC_PYTHON_VERIFY_VERSION([>=], [pc_min_ver], [],
+                  [AC_MSG_FAILURE([No compatible Python interpreter found. If you're sure that you have one, try setting the PYTHON environment variable to the location of the interpreter.])])])
+m4_ifval([PYTHON],
+        [PC_PYTHON_VERIFY_VERSION([<=], [pc_max_ver], [],
+                  [AC_MSG_FAILURE([No compatible Python interpreter found. If you're sure that you have one, try setting the PYTHON environment variable to the location of the interpreter.])])])
+])# PC_INIT
+
+# PC_PROG_PYTHON([PROG-TO-CHECK-FOR], [MIN-VERSION], [MAX-VERSION])
 # ---------------------------------
 # Find a Python interpreter.  Python versions prior to 2.0 are not
 # supported. (2.0 was released on October 16, 2000).
-AC_DEFUN([AC_PROG_PYTHON],
+AC_DEFUN_ONCE([PC_PROG_PYTHON],
 [AC_ARG_VAR([PYTHON], [the Python interpreter])
+dnl The default minimum version is 2.0
+m4_define_default([pc_min_ver], m4_ifval([$2], [$2], [2.0]))
+dnl The default maximum version is 3.3
+m4_define_default([pc_max_ver], m4_ifval([$3], [$3], [4.0]))
+dnl Build up a list of possible interpreter names. 
 m4_define_default([_PC_PYTHON_INTERPRETER_LIST],
-                  [python python3 python3.2 python3.1 python3.0 python2 python2.7 dnl
-                   python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0])
+    [[python] \
+dnl If we want some Python 3 versions (max version >= 3.0), 
+dnl also search for "python3"
+     m4_if(m4_version_compare(pc_max_ver, [2.9]), [1], [python3], []) \
+dnl If we want some Python 2 versions (min version <= 2.7),
+dnl also search for "python2".
+     m4_if(m4_version_compare(pc_min_ver, [2.8]), [-1], [python2], []) \
+dnl Construct a comma-separated list of interpreter names (python2.6, 
+dnl python2.7, etc). We only care about the first 3 characters of the
+dnl version strings (major-dot-minor; not 
+dnl major-dot-minor-dot-bugfix[-dot-whatever])
+     m4_foreach([pc_ver], 
+                    m4_esyscmd_s(seq -s[[", "]] -f["[[%.1f]]"] m4_substr(pc_max_ver, [0], [3]) -0.1 m4_substr(pc_min_ver, [0], [3])),
+dnl Remove python2.8 and python2.9 since they will never exist
+                    [m4_bmatch(pc_ver, [2.[89]], [], [python]pc_ver)])])
+dnl Do the actual search at last.
 m4_ifval([$1],
        [AC_PATH_PROGS(PYTHON, [$1 _PC_PYTHON_INTERPRETER_LIST])],
        [AC_PATH_PROGS(PYTHON, [_PC_PYTHON_INTERPRETER_LIST])])
-])
+])# PC_PROG_PYTHON
   
 
 # PC_PYTHON_PROG_PYTHON_CONFIG(PROG-TO-CHECK-FOR)
 # ----------------------------------------------
 # Find the python-config program
 AC_DEFUN([PC_PYTHON_PROG_PYTHON_CONFIG],
-[AC_REQUIRE([AC_PROG_PYTHON])[]dnl
+[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
 AC_ARG_VAR([PYTHON_CONFIG], [the Python-config program])
+dnl python-config's binary name is normally based on the Python interpreter's
+dnl binary name (i.e. python2.7 -> python2.7-config)
 m4_define([_PYTHON_BASENAME], [`basename $PYTHON`])
 m4_ifval([$1],
        [AC_PATH_PROGS(PYTHON_CONFIG, [$1 _PYTHON_BASENAME-config])],
@@ -123,18 +175,19 @@ m4_ifval([$1],
 ]) # PC_PYTHON_PROG_PYTHON_CONFIG
 
 
-# PC_PYTHON_VERIFY_VERSION(PYTHON-PROGRAM, VERSION, [ACTION-IF-TRUE], [ACTION-IF-NOT-FOUND])
+# PC_PYTHON_VERIFY_VERSION([RELATION], [VERSION], [ACTION-IF-TRUE], [ACTION-IF-FALSE])
 # ---------------------------------------------------------------------------
-# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
+# Run ACTION-IF-TRUE if the Python interpreter PROG has version [RELATION] VERSION.
+# i.e if RELATION is "<", check if PROG has a version number less than VERSION.
 # Run ACTION-IF-FALSE otherwise.
+# Specify RELATION as any mathematical comparison "<", ">", "<=", ">=", "==" or "!="
 # 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 2.0 or higher. (2.0 was released on October 16, 2000).
 AC_DEFUN([PC_PYTHON_VERIFY_VERSION],
-[AC_REQUIRE([AC_PROG_PYTHON])[]dnl
-m4_define([pc_python_safe_ver], m4_bpatsubsts($2, [\.], [_]))
-AC_CACHE_CHECK([if Python >= '$2'],
-    [[pc_cv_python_min_version_]pc_python_safe_ver],
+[m4_define([pc_python_safe_ver], m4_bpatsubsts($2, [\.], [_]))
+AC_CACHE_CHECK([if Python $1 '$2'],
+    [[pc_cv_python_req_version_]pc_python_safe_ver],
     [AC_LANG_PUSH(Python)[]dnl
      AC_RUN_IFELSE(
         [AC_LANG_PROGRAM([dnl
@@ -143,18 +196,25 @@ 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
+    reqver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
+    reqverhex = 0
     # xrange is not present in Python 3.0 and range returns an iterator
     for i in list(range(4)):
-        minverhex = (minverhex << 8) + minver[[i]]
-    sys.exit(sys.hexversion < minverhex)
+        reqverhex = (reqverhex << 8) + reqver[[i]]
+    # the final 8 bits are "0xf0" for final versions, which are all
+    # we'll test against, since it's doubtful that a released software
+    # will depend on an alpha- or beta-state Python.
+    reqverhex += 0xf0
+    if sys.hexversion $1 reqverhex:
+        sys.exit()
+    else:
+        sys.exit(1)
 ])], 
-         [[pc_cv_python_min_version_]pc_python_safe_ver="yes"], 
-         [[pc_cv_python_min_version_]pc_python_safe_ver="no"])
+         [[pc_cv_python_req_version_]pc_python_safe_ver=yes], 
+         [[pc_cv_python_req_version_]pc_python_safe_ver=no])
      AC_LANG_POP(Python)[]dnl
     ])
-AS_IF([test "$[pc_cv_python_min_version_]pc_python_safe_ver" = "no"], [$4], [$3])
+AS_IF([test "$[pc_cv_python_req_version_]pc_python_safe_ver" = "no"], [$4], [$3])
 ])# PC_PYTHON_VERIFY_VERSION
 
 
@@ -164,17 +224,17 @@ AS_IF([test "$[pc_cv_python_min_version_]pc_python_safe_ver" = "no"], [$4], [$3]
 # the best way to do this; it's what "site.py" does in the standard
 # library.
 AC_DEFUN([PC_PYTHON_CHECK_VERSION],
-[AC_REQUIRE([AC_PROG_PYTHON])[]dnl
+[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
 AC_CACHE_CHECK([for $1 version], 
     [pc_cv_python_version],
     [AC_LANG_PUSH(Python)[]dnl
-     AC_LANG_CONFTEST([
-         AC_LANG_PROGRAM([dnl
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
 import sys
 ], [dnl
     sys.stdout.write(sys.version[[:3]])
-])])
-     pc_cv_python_version=`$PYTHON conftest.py`
+])],
+                   [pc_cv_python_version=`./conftest`],
+                   [AC_MSG_FAILURE([failed to run Python program])])
      AC_LANG_POP(Python)[]dnl
     ])
 AC_SUBST([PYTHON_VERSION], [$pc_cv_python_version])
@@ -186,19 +246,24 @@ AC_SUBST([PYTHON_VERSION], [$pc_cv_python_version])
 # Use the value of $prefix for the corresponding value of
 # PYTHON_PREFIX. This is made a distinct variable so it can be
 # overridden if need be.  However, general consensus is that you
-# shouldn't need this ability.
+# shouldn't need this ability. 
 AC_DEFUN([PC_PYTHON_CHECK_PREFIX],
 [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
+dnl Try to get it with python-config otherwise do it from within Python
 AC_CACHE_CHECK([for Python prefix], [pc_cv_python_prefix],
 [if test -x "$PYTHON_CONFIG"; then
-    pc_cv_python_prefix=`$PYTHON_CONFIG --prefix 2>AS_MESSAGE_LOG_FD`
+    pc_cv_python_prefix=`$PYTHON_CONFIG --prefix 2>&AS_MESSAGE_LOG_FD`
 else
     AC_LANG_PUSH(Python)[]dnl
-    pc_cv_python_prefix=AC_LANG_CONFTEST([AC_LANG_PROGRAM([dnl
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
 import sys
 ], [dnl
-    sys.exit(sys.prefix)
-])])
+    sys.stdout.write(sys.prefix)
+])], [pc_cv_python_prefix=`./conftest`;
+      if test $? != 0; then
+         AC_MSG_FAILURE([could not determine Python prefix])
+      fi],
+      [AC_MSG_FAILURE([failed to run Python program])])
     AC_LANG_POP(Python)[]dnl
 fi])
 AC_SUBST([PYTHON_PREFIX], [$pc_cv_python_prefix])])
@@ -209,16 +274,22 @@ AC_SUBST([PYTHON_PREFIX], [$pc_cv_python_prefix])])
 # Like above, but for $exec_prefix
 AC_DEFUN([PC_PYTHON_CHECK_EXEC_PREFIX],
 [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
+dnl Try to get it with python-config otherwise do it from within Python
 AC_CACHE_CHECK([for Python exec-prefix], [pc_cv_python_exec_prefix],
 [if test -x "$PYTHON_CONFIG"; then
-    pc_cv_python_exec_prefix=`$PYTHON_CONFIG --exec-prefix 2>AS_MESSAGE_LOG_FD`
+    pc_cv_python_exec_prefix=`$PYTHON_CONFIG --exec-prefix 2>&AS_MESSAGE_LOG_FD`
 else
     AC_LANG_PUSH(Python)[]dnl
-    pc_cv_python_exec_prefix=AC_LANG_CONFTEST([AC_LANG_PROGRAM([dnl
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
 import sys
 ], [dnl
-    sys.exit(sys.exec_prefix)
-])])
+    sys.stdout.write(sys.exec_prefix)
+])],
+        [pc_cv_python_exec_prefix=`./conftest`;
+         if test $? != 0; then
+            AC_MSG_FAILURE([could not determine Python exec_prefix])
+         fi],
+         [AC_MSG_FAILURE([failed to run Python program])])
     AC_LANG_POP(Python)[]dnl
 fi
 ])
@@ -231,9 +302,10 @@ AC_SUBST([PYTHON_EXEC_PREFIX], [$pc_cv_python_exec_prefix])])
 # '-I/usr/include/python')
 AC_DEFUN([PC_PYTHON_CHECK_INCLUDES],
 [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
+dnl Try to find the headers location with python-config otherwise guess
 AC_CACHE_CHECK([for Python includes], [pc_cv_python_includes],
 [if test -x "$PYTHON_CONFIG"; then
-    pc_cv_python_includes=`$PYTHON_CONFIG --includes 2>AS_MESSAGE_LOG_FD`
+    pc_cv_python_includes=`$PYTHON_CONFIG --includes 2>&AS_MESSAGE_LOG_FD`
 else
     pc_cv_python_includes="[-I$includedir/$_PYTHON_BASENAME]m4_ifdef(PYTHON_ABI_FLAGS,
     PYTHON_ABI_FLAGS,)"
@@ -259,9 +331,10 @@ CPPFLAGS=$pc_cflags_store
 # Find the Python lib flags (ie '-lpython')
 AC_DEFUN([PC_PYTHON_CHECK_LIBS],
 [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
+dnl Try to find the lib flags with python-config otherwise guess
 AC_CACHE_CHECK([for Python libs], [pc_cv_python_libs],
 [if test -x "$PYTHON_CONFIG"; then
-    pc_cv_python_libs=`$PYTHON_CONFIG --libs 2>AS_MESSAGE_LOG_FD`
+    pc_cv_python_libs=`$PYTHON_CONFIG --libs 2>&AS_MESSAGE_LOG_FD`
 else
     pc_cv_python_libs="[-l$_PYTHON_BASENAME]m4_ifdef(PYTHON_ABI_FLAGS, PYTHON_ABI_FLAGS,)"
 fi
@@ -292,9 +365,10 @@ AC_CHECK_LIB([$pc_libpython], [$1], [$2], [$3])])
 # Find the Python CFLAGS
 AC_DEFUN([PC_PYTHON_CHECK_CFLAGS],
 [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
+dnl Try to find the CFLAGS with python-config otherwise give up
 AC_CACHE_CHECK([for Python CFLAGS], [pc_cv_python_cflags],
 [if test -x "$PYTHON_CONFIG"; then
-    pc_cv_python_cflags=`$PYTHON_CONFIG --cflags 2>AS_MESSAGE_LOG_FD`
+    pc_cv_python_cflags=`$PYTHON_CONFIG --cflags 2>&AS_MESSAGE_LOG_FD`
 else
     pc_cv_python_cflags=
 fi
@@ -307,9 +381,10 @@ AC_SUBST([PYTHON_CFLAGS], [$pc_cv_python_cflags])])
 # Find the Python LDFLAGS
 AC_DEFUN([PC_PYTHON_CHECK_LDFLAGS],
 [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
+dnl Try to find the LDFLAGS with python-config otherwise give up
 AC_CACHE_CHECK([for Python LDFLAGS], [pc_cv_python_ldflags],
 [if test -x "$PYTHON_CONFIG"; then
-    pc_cv_python_ldflags=`$PYTHON_CONFIG --ldflags 2>AS_MESSAGE_LOG_FD`
+    pc_cv_python_ldflags=`$PYTHON_CONFIG --ldflags 2>&AS_MESSAGE_LOG_FD`
 else
     pc_cv_python_ldflags=
 fi
@@ -322,9 +397,10 @@ AC_SUBST([PYTHON_LDFLAGS], [$pc_cv_python_ldflags])])
 # Find the Python extension suffix (i.e. '.cpython-32.so')
 AC_DEFUN([PC_PYTHON_CHECK_EXTENSION_SUFFIX],
 [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
+dnl Try to find the suffix with python-config otherwise give up
 AC_CACHE_CHECK([for Python extension suffix], [pc_cv_python_extension_suffix],
 [if test -x "$PYTHON_CONFIG"; then
-     pc_cv_python_extension_suffix=`$PYTHON_CONFIG --extension-suffix 2>AS_MESSAGE_LOG_FD`
+     pc_cv_python_extension_suffix=`$PYTHON_CONFIG --extension-suffix 2>&AS_MESSAGE_LOG_FD`
 else
     pc_cv_python_extension_suffix=
 fi
@@ -337,9 +413,10 @@ AC_SUBST([PYTHON_EXTENSION_SUFFIX], [$pc_cv_python_extension_suffix])])
 # Find the Python ABI flags
 AC_DEFUN([PC_PYTHON_CHECK_ABI_FLAGS],
 [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
+dnl Try to find the ABI flags with python-config otherwise give up
 AC_CACHE_CHECK([for Python ABI flags], [pc_cv_python_abi_flags],
 [if test -x "$PYTHON_CONFIG"; then
-     pc_cv_python_abi_flags=`$PYTHON_CONFIG --abiflags 2>AS_MESSAGE_LOG_FD`
+     pc_cv_python_abi_flags=`$PYTHON_CONFIG --abiflags 2>&AS_MESSAGE_LOG_FD`
 else
     pc_cv_python_abi_flags=
 fi
@@ -352,17 +429,19 @@ AC_SUBST([PYTHON_ABI_FLAGS], [$pc_cv_python_abi_flags])])
 # At times (like when building shared libraries) you may want
 # to know which OS platform Python thinks this is.
 AC_DEFUN([PC_PYTHON_CHECK_PLATFORM],
-[AC_REQUIRE([AC_PROG_PYTHON])[]dnl
-AC_CACHE_CHECK([for Python platform], 
-    [pc_cv_python_platform],
+[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
+dnl Get the platform from within Python (sys.platform)
+AC_CACHE_CHECK([for Python platform], [pc_cv_python_platform],
     [AC_LANG_PUSH(Python)[]dnl
-     AC_LANG_CONFTEST([
-         AC_LANG_PROGRAM([dnl
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
 import sys
 ], [dnl
     sys.stdout.write(sys.platform)
-])])
-    pc_cv_python_platform=`$PYTHON conftest.py`
+])], [pc_cv_python_platform=`./conftest`;
+     if test $? != 0; then
+        AC_MSG_FAILURE([could not determine Python platform])
+     fi],
+     [AC_MSG_FAILURE([failed to run Python program])])
     AC_LANG_POP(Python)[]dnl
    ])
 AC_SUBST([PYTHON_PLATFORM], [$pc_cv_python_platform])
@@ -374,7 +453,7 @@ AC_SUBST([PYTHON_PLATFORM], [$pc_cv_python_platform])
 # The directory to which new libraries are installed (i.e. the
 # "site-packages" directory.
 AC_DEFUN([PC_PYTHON_CHECK_SITE_DIR],
-[AC_REQUIRE([AC_PROG_PYTHON])AC_REQUIRE([PC_PYTHON_CHECK_PREFIX])[]dnl
+[AC_REQUIRE([PC_PROG_PYTHON])AC_REQUIRE([PC_PYTHON_CHECK_PREFIX])[]dnl
 AC_CACHE_CHECK([for Python site-packages directory],
     [pc_cv_python_site_dir],
     [AC_LANG_PUSH(Python)[]dnl
@@ -384,20 +463,29 @@ AC_CACHE_CHECK([for Python site-packages directory],
      else
        pc_py_prefix=$prefix
      fi
-     AC_LANG_CONFTEST([
-         AC_LANG_PROGRAM([dnl
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
 import sys
+from platform import python_implementation
+# sysconfig in CPython 2.7 doesn't work in virtualenv
+# <https://github.com/pypa/virtualenv/issues/118>
 try:
     import sysconfig
 except:
+    can_use_sysconfig = False
+else:
+    can_use_sysconfig = True
+if can_use_sysconfig:
+    if python_implementation() == "CPython" and sys.version[[:3]] == '2.7':
+        can_use_sysconfig = False
+if not can_use_sysconfig:        
     from distutils import sysconfig
     sitedir = sysconfig.get_python_lib(False, False, prefix='$pc_py_prefix')
 else:
     sitedir = sysconfig.get_path('purelib', vars={'base':'$pc_py_prefix'})
 ], [dnl
     sys.stdout.write(sitedir)
-])])
-     pc_cv_python_site_dir=`$PYTHON conftest.py`
+])], [pc_cv_python_site_dir=`./conftest`],
+     [AC_MSG_FAILURE([failed to run Python program])])
      AC_LANG_POP(Python)[]dnl
      case $pc_cv_python_site_dir in
      $pc_py_prefix*)
@@ -415,21 +503,20 @@ else:
      esac
      ])
 AC_SUBST([pythondir], [\${prefix}/$pc_cv_python_site_dir])])# PC_PYTHON_CHECK_SITE_DIR
-])
 
 # PC_PYTHON_SITE_PACKAGE_DIR
 # --------------------------
 # $PACKAGE directory under PYTHON_SITE_DIR
 AC_DEFUN([PC_PYTHON_SITE_PACKAGE_DIR],
 [AC_REQUIRE([PC_PYTHON_CHECK_SITE_DIR])[]dnl
-AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])])
+AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE_NAME])])
 
 
 # PC_PYTHON_CHECK_EXEC_DIR
 # ------------------------
 # directory for installing python extension modules (shared libraries)
 AC_DEFUN([PC_PYTHON_CHECK_EXEC_DIR],
-[AC_REQUIRE([AC_PROG_PYTHON])AC_REQUIRE([PC_PYTHON_CHECK_EXEC_PREFIX])[]dnl
+[AC_REQUIRE([PC_PROG_PYTHON])AC_REQUIRE([PC_PYTHON_CHECK_EXEC_PREFIX])[]dnl
   AC_CACHE_CHECK([for Python extension module directory],
     [pc_cv_python_exec_dir],
     [AC_LANG_PUSH(Python)[]dnl
@@ -439,20 +526,29 @@ AC_DEFUN([PC_PYTHON_CHECK_EXEC_DIR],
      else
        pc_py_exec_prefix=$pc_cv_python_exec_prefix
      fi
-     AC_LANG_CONFTEST([
-         AC_LANG_PROGRAM([dnl
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
 import sys
+from platform import python_implementation
+# sysconfig in CPython 2.7 doesn't work in virtualenv
+# <https://github.com/pypa/virtualenv/issues/118>
 try:
     import sysconfig
 except:
+    can_use_sysconfig = False
+else:
+    can_use_sysconfig = True
+if can_use_sysconfig:
+    if python_implementation() == "CPython" and sys.version[[:3]] == '2.7':
+        can_use_sysconfig = False
+if not can_use_sysconfig:        
     from distutils import sysconfig
-    sitedir = sysconfig.get_python_lib(True, False, prefix='$pc_py_exec_prefix')
+    sitedir = sysconfig.get_python_lib(False, False, prefix='$pc_py__exec_prefix')
 else:
-    sitedir = sysconfig.get_path('platlib', vars={'platbase':'$pc_py_exec_prefix'})
+    sitedir = sysconfig.get_path('purelib', vars={'platbase':'$pc_py_exec_prefix'})
 ], [dnl
     sys.stdout.write(sitedir)
-])])
-     pc_cv_python_exec_dir=`$PYTHON conftest.py`
+])], [pc_cv_python_exec_dir=`./conftest`],
+     [AC_MSG_FAILURE([failed to run Python program])])
      AC_LANG_POP(Python)[]dnl
      case $pc_cv_python_exec_dir in
      $pc_py_exec_prefix*)
@@ -470,14 +566,14 @@ else:
      esac
     ])
 AC_SUBST([pyexecdir], [\${exec_prefix}/$pc_cv_python_pyexecdir])]) #PY_PYTHON_CHECK_EXEC_LIB_DIR
-])
+
 
 # PC_PYTHON_EXEC_PACKAGE_DIR
 # --------------------------
 # $PACKAGE directory under PYTHON_SITE_DIR
 AC_DEFUN([PC_PYTHON_EXEC_PACKAGE_DIR],
 [AC_REQUIRE([PC_PYTHON_CHECK_EXEC_DIR])[]dnl
-AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])])
+AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE_NAME])])
 
 
 ## -------------------------------------------- ##
@@ -489,7 +585,7 @@ AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])])
 # ----------------------------------------------------------------------
 # Macro for checking if a Python library is installed
 AC_DEFUN([PC_PYTHON_CHECK_MODULE],
-[AC_REQUIRE([AC_PROG_PYTHON])[]dnl
+[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
 m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_]))
 AC_CACHE_CHECK([for Python '$1' library],
     [[pc_cv_python_module_]pc_python_safe_mod],
@@ -517,7 +613,7 @@ AS_IF([test "$[pc_cv_python_module_]pc_python_safe_mod" = "no"], [$3], [$2])
 # Check to see if a given function call, optionally from a module, can
 # be successfully called
 AC_DEFUN([PC_PYTHON_CHECK_FUNC],
-[AC_REQUIRE([AC_PROG_PYTHON])[]dnl
+[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
 m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_]))
 AC_CACHE_CHECK([for Python m4_ifnblank($1, '$1.$2()', '$2()') function],
     [[pc_cv_python_func_]pc_python_safe_mod[_$2]],