pg-python-framework.patch

text/plain

Filename: pg-python-framework.patch
Type: text/plain
Part: 0
Message: improving PL/Python builds on OS X

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: unified
File+
config/python.m4 11 3
src/Makefile.global.in 1 1
src/pl/plpython/Makefile 11 11
diff --git a/config/python.m4 b/config/python.m4
index 663ccf9..af4d8d7 100644
--- a/config/python.m4
+++ b/config/python.m4
@@ -48,7 +48,6 @@ AC_MSG_RESULT([$python_includespec])
 
 AC_SUBST(python_majorversion)[]dnl
 AC_SUBST(python_version)[]dnl
-AC_SUBST(python_configdir)[]dnl
 AC_SUBST(python_includespec)[]dnl
 ])# _PGAC_CHECK_PYTHON_DIRS
 
@@ -69,8 +68,14 @@ python_libdir=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(N
 python_ldlibrary=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LDLIBRARY'))))"`
 python_so=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('SO'))))"`
 ldlibrary=`echo "${python_ldlibrary}" | sed "s/${python_so}$//"`
+python_framework=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('PYTHONFRAMEWORK'))))"`
+python_enable_shared=`${PYTHON} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_vars().get('Py_ENABLE_SHARED',0))"`
 
-if test x"${python_libdir}" != x"" -a x"${python_ldlibrary}" != x"" -a x"${python_ldlibrary}" != x"${ldlibrary}"
+if test -n "$python_framework"; then
+	python_frameworkprefix=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('PYTHONFRAMEWORKPREFIX'))))"`
+	python_libspec="-F $python_frameworkprefix -framework $python_framework"
+	python_enable_shared=1
+elif test x"${python_libdir}" != x"" -a x"${python_ldlibrary}" != x"" -a x"${python_ldlibrary}" != x"${ldlibrary}"
 then
 	# New way: use the official shared library
 	ldlibrary=`echo "${ldlibrary}" | sed "s/^lib//"`
@@ -86,13 +91,16 @@ else
 	python_libspec="-L${python_libdir} -lpython${python_ldversion}"
 fi
 
-python_additional_libs=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBS','LIBC','LIBM','BASEMODLIBS'))))"`
+if test -z "$python_framework"; then
+	python_additional_libs=`${PYTHON} -c "import distutils.sysconfig; print(' '.join(filter(None,distutils.sysconfig.get_config_vars('LIBS','LIBC','LIBM','BASEMODLIBS'))))"`
+fi
 
 AC_MSG_RESULT([${python_libspec} ${python_additional_libs}])
 
 AC_SUBST(python_libdir)[]dnl
 AC_SUBST(python_libspec)[]dnl
 AC_SUBST(python_additional_libs)[]dnl
+AC_SUBST(python_enable_shared)[]dnl
 
 # threaded python is not supported on OpenBSD
 AC_MSG_CHECKING(whether Python is compiled with thread support)
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 9cc14da..ecfb801 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -175,11 +175,11 @@ enable_dtrace	= @enable_dtrace@
 enable_coverage	= @enable_coverage@
 enable_thread_safety	= @enable_thread_safety@
 
+python_enable_shared	= @python_enable_shared@
 python_includespec	= @python_includespec@
 python_libdir		= @python_libdir@
 python_libspec		= @python_libspec@
 python_additional_libs	= @python_additional_libs@
-python_configdir	= @python_configdir@
 python_majorversion	= @python_majorversion@
 python_version		= @python_version@
 
diff --git a/src/pl/plpython/Makefile b/src/pl/plpython/Makefile
index afd8dea..e9b5e3c 100644
--- a/src/pl/plpython/Makefile
+++ b/src/pl/plpython/Makefile
@@ -5,13 +5,20 @@ top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
 
-# On some platforms we can only build PL/Python if libpython is a
-# shared library.  Since there is no official way to determine this
-# (at least not in pre-2.3 Python), we see if there is a file that is
-# named like a shared library.
+# We need libpython as a shared library.  In Python >=2.5, configure
+# asks Python directly.  But because this has been broken in Debian
+# for a long time (http://bugs.debian.org/695979), and to support
+# older Python versions, we see if there is a file that is named like
+# a shared library as a fallback.  (Note that this is wrong on OS X,
+# where DLSUFFIX is .so, but libpython is a .dylib.  Python <2.5 is
+# therefore not supported on OS X.)
+ifeq (1,$(python_enable_shared))
+shared_libpython = yes
+else
 ifneq (,$(wildcard $(python_libdir)/libpython*$(DLSUFFIX)*))
 shared_libpython = yes
 endif
+endif
 
 # Windows needs to convert backslashed paths to normal slashes,
 # and we have to remove -lpython from the link since we are building our own
@@ -21,13 +28,6 @@ python_includespec := $(subst \,/,$(python_includespec))
 override python_libspec =
 endif
 
-# Darwin (OS X) has its own ideas about how to do this.
-ifeq ($(PORTNAME), darwin)
-shared_libpython = yes
-override python_libspec = -framework Python
-override python_additional_libs =
-endif
-
 # If we don't have a shared library, we have to skip it.
 ifeq ($(shared_libpython),yes)