mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Move interpreter shared library detection to configure
For building PL/Perl, PL/Python, and PL/Tcl, we need a shared library of libperl, libpython, and libtcl, respectively. Previously, this was checked in the makefiles, skipping the PL build with a warning if no shared library was available. Now this is checked in configure, with an error if no shared library is available. The previous situation arose because in the olden days, the configure options --with-perl, --with-python, and --with-tcl controlled whether frontend interfaces for those languages would be built. The procedural languages were added later, and shared libraries were often not available in the beginning. So it was decided skip the builds of the procedural languages in those cases. The frontend interfaces have since been removed from the tree, and shared libraries are now available most of the time, so that setup makes much less sense now. Also, the new setup allows contrib modules and pgxs users to rely on the respective PLs being available based on configure flags.
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user