Put the right runpath to libpq into the Perl module shared object on more

platforms and without relinking.

Also support VPATH builds and DESTDIR installs.  One hopes.
REL7_2_STABLE
Peter Eisentraut 24 years ago
parent 8e0d642c9b
commit ef7152f99b
  1. 3
      aclocal.m4
  2. 27
      config/perl.m4
  3. 736
      configure
  4. 6
      configure.in
  5. 11
      src/Makefile.global.in
  6. 104
      src/interfaces/perl5/GNUmakefile
  7. 95
      src/interfaces/perl5/Makefile.PL

3
aclocal.m4 vendored

@ -1,4 +1,4 @@
dnl $Header: /cvsroot/pgsql/aclocal.m4,v 1.12 2001/03/05 09:38:54 peter Exp $
dnl $Header: /cvsroot/pgsql/aclocal.m4,v 1.13 2001/08/26 22:28:03 petere Exp $
builtin([include], [config/ac_func_accept_argtypes.m4])
builtin([include], [config/c-compiler.m4])
builtin([include], [config/c-library.m4])
@ -7,6 +7,7 @@ builtin([include], [config/docbook.m4])
builtin([include], [config/general.m4])
builtin([include], [config/java.m4])
builtin([include], [config/libtool.m4])
builtin([include], [config/perl.m4])
builtin([include], [config/programs.m4])
builtin([include], [config/python.m4])
builtin([include], [config/tcl.m4])

@ -0,0 +1,27 @@
# $Header: /cvsroot/pgsql/config/perl.m4,v 1.1 2001/08/26 22:28:04 petere Exp $
# PGAC_PATH_PERL
# --------------
AC_DEFUN([PGAC_PATH_PERL],
[AC_PATH_PROG(PERL, perl)])
# PGAC_CHECK_PERL_DIRS
# ---------------------
AC_DEFUN([PGAC_CHECK_PERL_DIRS],
[
AC_REQUIRE([PGAC_PATH_PERL])
AC_MSG_CHECKING([Perl installation directories])
# These are the ones we currently need. Others can be added easily.
perl_installsitearch=`$PERL -MConfig -e 'print $Config{installsitearch}'`
perl_installsitelib=`$PERL -MConfig -e 'print $Config{installsitelib}'`
perl_installman3dir=`$PERL -MConfig -e 'print $Config{installman3dir}'`
AC_SUBST(perl_installsitearch)[]dnl
AC_SUBST(perl_installsitelib)[]dnl
AC_SUBST(perl_installman3dir)[]dnl
AC_MSG_RESULT(done)
])

736
configure vendored

File diff suppressed because it is too large Load Diff

@ -650,7 +650,6 @@ esac
AC_PROG_RANLIB
AC_CHECK_PROGS(LORDER, lorder)
AC_PATH_PROG(TAR, tar)
AC_CHECK_PROGS(PERL, perl)
AC_CHECK_PROGS(YACC, ['bison -y'])
if test -z "$YACC"; then
@ -670,6 +669,11 @@ if test "$with_tk" = yes; then
test -z "$WISH" && AC_MSG_ERROR(['wish' is required for Tk support])
fi
PGAC_PATH_PERL
if test "$with_perl" = yes; then
PGAC_CHECK_PERL_DIRS
fi
if test "$with_python" = yes; then
PGAC_PATH_PYTHON
PGAC_CHECK_PYTHON_MODULE_SETUP

@ -1,5 +1,5 @@
# -*-makefile-*-
# $Header: /cvsroot/pgsql/src/Makefile.global.in,v 1.132 2001/08/24 14:07:48 petere Exp $
# $Header: /cvsroot/pgsql/src/Makefile.global.in,v 1.133 2001/08/26 22:28:04 petere Exp $
#------------------------------------------------------------------------------
# All PostgreSQL makefiles include this file and use the variables it sets,
@ -80,6 +80,7 @@ endif
endif
libdir := @libdir@
pkglibdir = $(libdir)/postgresql
includedir := @includedir@
ifeq "$(findstring pgsql, $(includedir))" ""
@ -185,6 +186,13 @@ RANLIB = @RANLIB@
LORDER = @LORDER@
X = @EXEEXT@
# Perl
PERL = @PERL@
perl_installsitearch = @perl_installsitearch@
perl_installsitelib = @perl_installsitelib@
perl_installman3dir = @perl_installman3dir@
# Miscellaneous
ANT = @ANT@
@ -192,7 +200,6 @@ AWK = @AWK@
LN_S = @LN_S@
MSGFMT = @MSGFMT@
MSGMERGE = @MSGMERGE@
PERL = @PERL@
PYTHON = @PYTHON@
TAR = @TAR@
WISH = @WISH@

@ -4,64 +4,92 @@
# Makefile according to its own ideas and then invoke the rules from
# that file.
#
# $Header: /cvsroot/pgsql/src/interfaces/perl5/Attic/GNUmakefile,v 1.5 2000/11/17 00:08:57 tgl Exp $
# $Header: /cvsroot/pgsql/src/interfaces/perl5/Attic/GNUmakefile,v 1.6 2001/08/26 22:28:04 petere Exp $
subdir = src/interfaces/perl5
top_builddir = ../../..
include $(top_builddir)/src/Makefile.global
.NOTPARALLEL:
# This would allow a non-root install of the Perl module, but it's not
# quite implemented yet.
ifeq ($(mysterious_feature),yes)
perl_installsitearch = $(pkglibdir)
perl_installsitelib = $(pkglibdir)
perl_installman3dir = $(mandir)/man3
endif
all: Makefile libpq-all
$(MAKE) -f $< all
$(MAKE) -f $< all VPATH=$(VPATH)
Makefile: Makefile.PL
$(PERL) $<
# We need to run Makefile.PL in the source directory because it scans
# the directory for files to build with. If we ran it in the build
# dir it would miss all the files and not build half the stuff!
Makefile: Makefile.PL Pg.pm
abs_builddir=`pwd`; \
abs_libpq_builddir=`cd $(libpq_builddir) && pwd`; \
cd $(srcdir) && \
SRCDIR=$(srcdir) \
PGLIBDIR=$(libdir) \
$(PERL) $< \
INC='-I$(srcdir) -I$(libpq_srcdir) $(filter -I%, $(CPPFLAGS))' \
LIBS="-L$$abs_libpq_builddir -lpq" \
INSTALLSITEARCH='$$(DESTDIR)$(perl_installsitearch)' \
INSTALLSITELIB='$$(DESTDIR)$(perl_installsitelib)' \
INSTALLMAN3DIR='$$(DESTDIR)$(perl_installman3dir)' \
MAKEFILE="$$abs_builddir/Makefile"
.PHONY: libpq-all
libpq-all:
$(MAKE) -C $(libpq_builddir) all
test: Makefile
$(MAKE) -f $< test
# The klugery here is to ensure that the perl5 shared library gets
# built with the correct path to the installed location of libpq
# during `make install', but is built against the local tree during
# ordinary building and testing.
#
# During install, we must also guard against the likelihood that we
# don't have permissions to install into the Perl module library. The
# purer alternative would naturally be the ability to select the
# installation directory somewhere.
install: Makefile
$(MAKE) -f Makefile clean
POSTGRES_LIB="$(libdir)" \
POSTGRES_INCLUDE="$(includedir)" \
$(PERL) $(srcdir)/Makefile.PL
$(MAKE) -f Makefile all
-@if [ -w "`$(MAKE) --quiet -f Makefile echo-installdir`" ]; then \
$(MAKE) -f Makefile install; \
$(MAKE) clean; \
# During install, we must guard against the likelihood that we don't
# have permissions to install into the Perl module library. It's not
# exactly fun to have to scan the build output, but...
install-warning-msg := { \
echo ""; \
echo "*** Skipping the installation of the Perl module for lack"; \
echo "*** of permissions. To install it, change to the directory"; \
echo "*** `pwd`,"; \
echo "*** become the appropriate user, and enter '$(MAKE) install'."; \
echo ""; }
# We need to massage the packlist after installation to get the
# DESTDIR out of there.
install: all installdirs
@if test -w $(DESTDIR)$(perl_installsitearch); then \
$(MAKE) -f Makefile pure_install DESTDIR=$(DESTDIR) && \
mv $(DESTDIR)$(perl_installsitearch)/auto/Pg/.packlist fake-packlist && \
sed 's,^$(DESTDIR),,' fake-packlist >$(DESTDIR)$(perl_installsitearch)/auto/Pg/.packlist && \
rm fake-packlist; \
else \
echo "*****" ;\
echo "* Skipping the installation of the Perl module for lack of permissions."; \
echo "* To install it, change to the directory "`pwd`","; \
echo "* become the appropriate user, and do \`$(MAKE) install'."; \
echo "*****"; \
$(install-warning-msg); \
fi
# Try to make the directories ourselves, otherwise the writability
# test above may fail because of mere non-existence.
installdirs:
-$(mkinstalldirs) $(DESTDIR)$(perl_installsitearch)/auto/Pg \
$(DESTDIR)$(perl_installsitelib) \
$(DESTDIR)$(perl_installman3dir)
uninstall:
@echo "*****"; \
echo "* The Perl module cannot be uninstalled automatically. You can"; \
echo "* change into the directory "`pwd`" and do"; \
echo "*"; \
echo "* $(MAKE) -f Makefile realclean"; \
echo "*"; \
echo "* to delete built and installed files."; \
echo "*****"
for file in `cat $(DESTDIR)$(perl_installsitearch)/auto/Pg/.packlist`; do \
rm -f $(DESTDIR)$$file || exit; \
done
rm -f $(DESTDIR)$(perl_installsitearch)/auto/Pg/.packlist
-rmdir $(DESTDIR)$(perl_installsitearch)/auto/Pg
clean distclean maintainer-clean:
-[ -f Makefile ] && $(MAKE) -f Makefile clean
rm -f Makefile Makefile.old
@rm -f fake-packlist
installcheck test: Makefile
$(MAKE) -f $< test

@ -1,6 +1,6 @@
#-------------------------------------------------------
#
# $Id: Makefile.PL,v 1.17 2001/03/06 22:07:09 tgl Exp $
# $Id: Makefile.PL,v 1.18 2001/08/26 22:28:04 petere Exp $
#
# Copyright (c) 1997, 1998 Edmund Mergl
#
@ -10,8 +10,20 @@ use ExtUtils::MakeMaker;
use Config;
use strict;
my $srcdir=$ENV{SRCDIR};
my %opts;
%opts = (
NAME => 'Pg',
VERSION_FROM => "Pg.pm",
OBJECT => "Pg\$(OBJ_EXT)",
# explicit mappings required for VPATH builds
PM => { "$srcdir/Pg.pm" => '$(INST_LIBDIR)/Pg.pm' },
MAN3PODS => { "$srcdir/Pg.pm" => '$(INST_MAN3DIR)/Pg.$(MAN3EXT)' },
);
if (! -d $ENV{POSTGRES_LIB} || ! -d $ENV{POSTGRES_INCLUDE}) {
# Check that we actually are inside the Postgres source tree
@ -22,30 +34,13 @@ set environment variables POSTGRES_LIB and POSTGRES_INCLUDE to point
to where Postgres is installed (often /usr/local/pgsql/{lib,include}).\n";
}
# Setup for build/test inside a Postgres source tree
# Perl may complain if path to libpq isn't absolute
my $cwd = `pwd`;
chop $cwd;
%opts = (
NAME => 'Pg',
VERSION_FROM => 'Pg.pm',
INC => "-I../libpq -I../../include",
OBJECT => "Pg\$(OBJ_EXT)",
LIBS => ["-L$cwd/../libpq -lpq"],
);
} else {
# Setup for final install of Pg using an already-installed libpq,
# or for standalone installation when Postgres already is installed.
# Setup for standalone installation when Postgres already is installed.
%opts = (
NAME => 'Pg',
VERSION_FROM => 'Pg.pm',
%opts,
INC => "-I$ENV{POSTGRES_INCLUDE}",
OBJECT => "Pg\$(OBJ_EXT)",
LIBS => ["-L$ENV{POSTGRES_LIB} -lpq"],
);
}
@ -54,13 +49,59 @@ to where Postgres is installed (often /usr/local/pgsql/{lib,include}).\n";
WriteMakefile(%opts);
sub MY::installbin {
q[
# Create a target that can be used to
# determine the Perl install directory.
echo-installdir:
@echo $(INSTALLSITELIB)
];
# Put the proper runpath into the shared object.
sub MY::dynamic_lib {
package MY;
my $inherited= shift->SUPER::dynamic_lib(@_);
my $pglibdir = $ENV{PGLIBDIR};
return $inherited if $pglibdir eq '';
# Remove any misguided attempts to set the runpath.
$inherited =~ s/LD_RUN_PATH=\"\$\(LD_RUN_PATH\)\" //g;
$inherited =~ s/-R\S*//g;
$inherited =~ s/-rpath\S*//g;
my $rpath;
# Note that this could be different from what Makefile.port has
# because a different compiler/linker could be used.
SWITCH: for ($Config::Config{'osname'}) {
/hpux/ and $rpath = "+b $pglibdir", last;
/freebsd/ and $rpath = "-R$pglibdir", last;
/irix/ and $rpath = "-R$pglibdir", last;
/linux/ and $rpath = "-Wl,-rpath,$pglibdir", last;
/netbsd/ and $rpath = "-R$pglibdir", last;
/openbsd/ and $rpath = "-R$pglibdir", last;
/solaris/ and $rpath = "-R$pglibdir", last;
/svr5/ and $rpath = "-R$pglibdir", last;
}
$inherited=~ s,OTHERLDFLAGS =,OTHERLDFLAGS = $rpath , if defined $rpath;
$inherited;
}
# VPATH-aware version of this rule
sub MY::xs_c {
my($self) = shift;
return '' unless $self->needs_linking();
'
.xs.c:
$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $< > $@
';
}
# Delete this rule. We can use the above one.
sub MY::xs_o {
'';
}
# This rule tries to rebuild the Makefile from Makefile.PL. We can do
# that better ourselves.
sub MY::makefile {
'';
}

Loading…
Cancel
Save