mirror of https://github.com/postgres/postgres
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.
This commit is contained in:
parent
8e0d642c9b
commit
ef7152f99b
|
@ -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)
|
||||
])
|
|
@ -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.
|
||||
# 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: 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; \
|
||||
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…
Reference in New Issue