diff --git a/config/python.m4 b/config/python.m4 index 7012c536d7..c8f784ed47 100644 --- a/config/python.m4 +++ b/config/python.m4 @@ -93,7 +93,6 @@ 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/configure b/configure index 7c0bd0c696..98f6516c9a 100755 --- a/configure +++ b/configure @@ -641,7 +641,6 @@ TCL_SHLIB_LD_LIBS TCL_SHARED_BUILD TCL_LIB_SPEC TCL_LIBS -TCL_LIB_FILE TCL_INCLUDE_SPEC TCL_CONFIG_SH TCLSH @@ -662,7 +661,6 @@ HAVE_IPV6 LIBOBJS UUID_LIBS ZIC -python_enable_shared python_additional_libs python_libspec python_libdir @@ -7384,6 +7382,12 @@ perl_useshrplib=`$PERL -MConfig -e 'print $Config{useshrplib}'` test "$PORTNAME" = "win32" && perl_useshrplib=`echo $perl_useshrplib | sed 's,\\\\,/,g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $perl_useshrplib" >&5 $as_echo "$perl_useshrplib" >&6; } + if test "$perl_useshrplib" != yes && test "$perl_useshrplib" != true; then + as_fn_error $? "cannot build PL/Perl because libperl is not a shared library +You might have to rebuild your Perl installation. Refer to the +documentation for details. Use --without-perl to disable building +PL/Perl." "$LINENO" 5 + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flags to link embedded Perl" >&5 $as_echo_n "checking for flags to link embedded Perl... " >&6; } @@ -7537,6 +7541,32 @@ $as_echo "no" >&6; } fi + + # We need libpython as a shared library. With Python >=2.5, we check + # the Py_ENABLE_SHARED setting. OS X does supply a .dylib even + # though Py_ENABLE_SHARED does not get set. On Debian, the setting + # is not correct before the jessie release + # (http://bugs.debian.org/695979). We also want to support older + # Python versions. So as a fallback we see if there is a file that + # is named like a shared library. + + if test "$python_enable_shared" != 1; then + # We don't know the platform shared library extension here yet, so + # we try some candidates. + for dlsuffix in .so .dll .dylib .sl; do + if ls "$python_libdir"/libpython*${dlsuffix}* >/dev/null 2>&1; then + python_enable_shared=1 + break + fi + done + fi + + if test "$python_enable_shared" != 1; then + as_fn_error $? "cannot build PL/Python because libpython is not a shared library +You might have to rebuild your Python installation. Refer to the +documentation for details. Use --without-python to disable building +PL/Python." "$LINENO" 5 + fi fi if test "$cross_compiling" = yes && test -z "$with_system_tzdata"; then @@ -14736,12 +14766,15 @@ fi . "$TCL_CONFIG_SH" eval TCL_INCLUDE_SPEC=\"$TCL_INCLUDE_SPEC\" -eval TCL_LIB_FILE=\"$TCL_LIB_FILE\" eval TCL_LIBS=\"$TCL_LIBS\" eval TCL_LIB_SPEC=\"$TCL_LIB_SPEC\" eval TCL_SHARED_BUILD=\"$TCL_SHARED_BUILD\" - # now that we have TCL_INCLUDE_SPEC, we can check for + if test "$TCL_SHARED_BUILD" != 1; then + as_fn_error $? "cannot build PL/Tcl because Tcl is not a shared library +Use --without-tcl to disable building PL/Tcl." "$LINENO" 5 + fi + # now that we have TCL_INCLUDE_SPEC, we can check for ac_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "tcl.h" "ac_cv_header_tcl_h" "$ac_includes_default" diff --git a/configure.in b/configure.in index 1cd9e1eb46..0080515c0c 100644 --- a/configure.in +++ b/configure.in @@ -889,12 +889,44 @@ if test "$with_perl" = yes; then AC_MSG_ERROR([Perl not found]) fi PGAC_CHECK_PERL_CONFIGS([archlibexp,privlibexp,useshrplib]) + if test "$perl_useshrplib" != yes && test "$perl_useshrplib" != true; then + AC_MSG_ERROR([cannot build PL/Perl because libperl is not a shared library +You might have to rebuild your Perl installation. Refer to the +documentation for details. Use --without-perl to disable building +PL/Perl.]) + fi PGAC_CHECK_PERL_EMBED_LDFLAGS fi if test "$with_python" = yes; then PGAC_PATH_PYTHON PGAC_CHECK_PYTHON_EMBED_SETUP + + # We need libpython as a shared library. With Python >=2.5, we check + # the Py_ENABLE_SHARED setting. OS X does supply a .dylib even + # though Py_ENABLE_SHARED does not get set. On Debian, the setting + # is not correct before the jessie release + # (http://bugs.debian.org/695979). We also want to support older + # Python versions. So as a fallback we see if there is a file that + # is named like a shared library. + + if test "$python_enable_shared" != 1; then + # We don't know the platform shared library extension here yet, so + # we try some candidates. + for dlsuffix in .so .dll .dylib .sl; do + if ls "$python_libdir"/libpython*${dlsuffix}* >/dev/null 2>&1; then + python_enable_shared=1 + break + fi + done + fi + + if test "$python_enable_shared" != 1; then + AC_MSG_ERROR([cannot build PL/Python because libpython is not a shared library +You might have to rebuild your Python installation. Refer to the +documentation for details. Use --without-python to disable building +PL/Python.]) + fi fi if test "$cross_compiling" = yes && test -z "$with_system_tzdata"; then @@ -1942,8 +1974,12 @@ fi if test "$with_tcl" = yes; then PGAC_PATH_TCLCONFIGSH([$with_tclconfig]) PGAC_EVAL_TCLCONFIGSH([$TCL_CONFIG_SH], - [TCL_INCLUDE_SPEC,TCL_LIB_FILE,TCL_LIBS,TCL_LIB_SPEC,TCL_SHARED_BUILD]) + [TCL_INCLUDE_SPEC,TCL_LIBS,TCL_LIB_SPEC,TCL_SHARED_BUILD]) AC_SUBST(TCL_SHLIB_LD_LIBS)dnl don't want to double-evaluate that one + if test "$TCL_SHARED_BUILD" != 1; then + AC_MSG_ERROR([cannot build PL/Tcl because Tcl is not a shared library +Use --without-tcl to disable building PL/Tcl.]) + fi # now that we have TCL_INCLUDE_SPEC, we can check for ac_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS" diff --git a/src/Makefile.global.in b/src/Makefile.global.in index a0fe8e43eb..f8b7b3541d 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -181,7 +181,6 @@ enable_coverage = @enable_coverage@ enable_tap_tests = @enable_tap_tests@ enable_thread_safety = @enable_thread_safety@ -python_enable_shared = @python_enable_shared@ python_includespec = @python_includespec@ python_libdir = @python_libdir@ python_libspec = @python_libspec@ @@ -192,7 +191,6 @@ python_version = @python_version@ krb_srvtab = @krb_srvtab@ TCLSH = @TCLSH@ -TCL_LIB_FILE = @TCL_LIB_FILE@ TCL_LIBS = @TCL_LIBS@ TCL_LIB_SPEC = @TCL_LIB_SPEC@ TCL_INCLUDE_SPEC = @TCL_INCLUDE_SPEC@ @@ -283,7 +281,6 @@ else endif perl_archlibexp = @perl_archlibexp@ perl_privlibexp = @perl_privlibexp@ -perl_useshrplib = @perl_useshrplib@ perl_embed_ldflags = @perl_embed_ldflags@ # Miscellaneous diff --git a/src/pl/plperl/GNUmakefile b/src/pl/plperl/GNUmakefile index 904a320cf6..6e1377b53d 100644 --- a/src/pl/plperl/GNUmakefile +++ b/src/pl/plperl/GNUmakefile @@ -5,16 +5,6 @@ subdir = src/pl/plperl top_builddir = ../../.. include $(top_builddir)/src/Makefile.global -ifeq ($(perl_useshrplib),true) -shared_libperl = yes -endif -ifeq ($(perl_useshrplib),yes) -shared_libperl = yes -endif - -# If we don't have a shared library, we have to skip it. -ifeq ($(shared_libperl),yes) - ifeq ($(PORTNAME), win32) override CPPFLAGS += -DPLPERL_HAVE_UID_GID # Perl on win32 contains /* within comment all over the header file, @@ -130,14 +120,3 @@ clean distclean maintainer-clean: clean-lib ifeq ($(PORTNAME), win32) rm -f $(perlwithver).def endif - -else # can't build - -all: - @echo ""; \ - echo "*** Cannot build PL/Perl because libperl is not a shared library."; \ - echo "*** You might have to rebuild your Perl installation. Refer to"; \ - echo "*** the documentation for details."; \ - echo "" - -endif # can't build diff --git a/src/pl/plpython/Makefile b/src/pl/plpython/Makefile index de97cbb780..8b1d8908e6 100644 --- a/src/pl/plpython/Makefile +++ b/src/pl/plpython/Makefile @@ -5,24 +5,6 @@ top_builddir = ../../.. include $(top_builddir)/src/Makefile.global -# 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. -ifeq (1,$(python_enable_shared)) -shared_libpython = yes -else -ifeq ($(PORTNAME), darwin) -# OS X does supply a .dylib even though Py_ENABLE_SHARED does not get set -shared_libpython = yes -else -ifneq (,$(wildcard $(python_libdir)/libpython*$(DLSUFFIX)*)) -shared_libpython = yes -endif -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 ifeq ($(PORTNAME), win32) @@ -31,8 +13,6 @@ python_includespec := $(subst \,/,$(python_includespec)) override python_libspec = endif -# If we don't have a shared library, we have to skip it. -ifeq ($(shared_libpython),yes) override CPPFLAGS := -I. -I$(srcdir) $(python_includespec) $(CPPFLAGS) @@ -159,18 +139,6 @@ ifeq ($(PORTNAME), win32) rm -f python${pytverstr}.def endif -else # can't build - -all: - @echo ""; \ - echo "*** Cannot build PL/Python because libpython is not a shared library." ; \ - echo "*** You might have to rebuild your Python installation. Refer to"; \ - echo "*** the documentation for details."; \ - echo "" - -endif # can't build - -# distprep and maintainer-clean rules should be run even if we can't build. # Force this dependency to be known even without dependency info built: plpy_plpymodule.o: spiexceptions.h diff --git a/src/pl/tcl/Makefile b/src/pl/tcl/Makefile index 533d3b4efd..24803de790 100644 --- a/src/pl/tcl/Makefile +++ b/src/pl/tcl/Makefile @@ -14,21 +14,6 @@ include $(top_builddir)/src/Makefile.global override CPPFLAGS := $(TCL_INCLUDE_SPEC) $(CPPFLAGS) -# Find out whether Tcl was built as a shared library --- if not, we -# can't link a shared library that depends on it, and have to forget -# about building pltcl. In Tcl 8, tclConfig.sh sets TCL_SHARED_BUILD -# for us, but in older Tcl releases it doesn't. In that case we guess -# based on the name of the Tcl library. - -ifndef TCL_SHARED_BUILD -ifneq (,$(findstring $(DLSUFFIX),$(TCL_LIB_FILE))) -TCL_SHARED_BUILD=1 -else -TCL_SHARED_BUILD=0 -endif -endif - - # On Windows, we don't link directly with the Tcl library; see below ifneq ($(PORTNAME), win32) SHLIB_LINK = $(TCL_LIB_SPEC) $(TCL_LIBS) -lc @@ -67,7 +52,6 @@ endif # win32 include $(top_srcdir)/src/Makefile.shlib -ifeq ($(TCL_SHARED_BUILD), 1) all: all-lib $(MAKE) -C modules $@ @@ -102,16 +86,6 @@ installcheck: submake submake: $(MAKE) -C $(top_builddir)/src/test/regress pg_regress$(X) -else # TCL_SHARED_BUILD = 0 - -# Provide dummy targets for the case where we can't build the shared library. -all: - @echo "*****"; \ - echo "* Cannot build PL/Tcl because Tcl is not a shared library; skipping it."; \ - echo "*****" - -endif # TCL_SHARED_BUILD = 0 - clean distclean maintainer-clean: clean-lib rm -f $(OBJS) rm -rf $(pg_regress_clean_files)