Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/perl5')
-rw-r--r--src/interfaces/perl5/GNUmakefile104
-rw-r--r--src/interfaces/perl5/Makefile.PL95
2 files changed, 134 insertions, 65 deletions
diff --git a/src/interfaces/perl5/GNUmakefile b/src/interfaces/perl5/GNUmakefile
index c82ae59f083..6920742c593 100644
--- a/src/interfaces/perl5/GNUmakefile
+++ b/src/interfaces/perl5/GNUmakefile
@@ -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
diff --git a/src/interfaces/perl5/Makefile.PL b/src/interfaces/perl5/Makefile.PL
index 99eb9d4b59b..6c217d9e627 100644
--- a/src/interfaces/perl5/Makefile.PL
+++ b/src/interfaces/perl5/Makefile.PL
@@ -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 {
+ '';
}