diff options
Diffstat (limited to 'src/interfaces/perl5')
-rw-r--r-- | src/interfaces/perl5/GNUmakefile | 104 | ||||
-rw-r--r-- | src/interfaces/perl5/Makefile.PL | 95 |
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 { + ''; } |