aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2001-08-26 23:54:41 +0000
committerPeter Eisentraut <peter_e@gmx.net>2001-08-26 23:54:41 +0000
commit34fd50880f834b4944525b9120eccbec2f8d5be4 (patch)
treea1b29f13b168019b2a822d648efbe26fc9e4a64e /src
parentef7152f99bb87fae344f731a670c18dd476638e7 (diff)
downloadpostgresql-34fd50880f834b4944525b9120eccbec2f8d5be4.tar.gz
postgresql-34fd50880f834b4944525b9120eccbec2f8d5be4.zip
VPATH and DESTDIR support for PL/Perl, using the same techniques employed
in interfaces/perl5 a brief while ago. Also, since building PL/Perl without a shared libperl actually works on some platforms we can enable it there to get some development happening. I've only checked off linux right now, but others should be added in the future.
Diffstat (limited to 'src')
-rw-r--r--src/makefiles/Makefile.linux1
-rw-r--r--src/pl/plperl/GNUmakefile17
-rw-r--r--src/pl/plperl/Makefile.PL56
3 files changed, 53 insertions, 21 deletions
diff --git a/src/makefiles/Makefile.linux b/src/makefiles/Makefile.linux
index 11bef1572c6..31277151c96 100644
--- a/src/makefiles/Makefile.linux
+++ b/src/makefiles/Makefile.linux
@@ -2,6 +2,7 @@ AROPT = crs
export_dynamic = -export-dynamic
rpath = -Wl,-rpath,$(libdir)
shlib_symbolic = -Wl,-Bsymbolic
+allow_nonpic_in_shlib = yes
DLSUFFIX = .so
CFLAGS_SL = -fpic
diff --git a/src/pl/plperl/GNUmakefile b/src/pl/plperl/GNUmakefile
index 7e700a7a34f..4ad205acb46 100644
--- a/src/pl/plperl/GNUmakefile
+++ b/src/pl/plperl/GNUmakefile
@@ -1,25 +1,26 @@
-# $Header: /cvsroot/pgsql/src/pl/plperl/GNUmakefile,v 1.6 2000/11/02 18:40:13 petere Exp $
+# $Header: /cvsroot/pgsql/src/pl/plperl/GNUmakefile,v 1.7 2001/08/26 23:54:41 petere Exp $
subdir = src/pl/plperl
top_builddir = ../../..
include $(top_builddir)/src/Makefile.global
-plperl_installdir = $(DESTDIR)$(libdir)
+ifeq ($(allow_nonpic_in_shlib),yes)
+makefile_pl_flags = --force
+endif
all: Makefile
- $(MAKE) -f $< all
+ $(MAKE) -f $< all VPATH=$(VPATH)
Makefile: Makefile.PL
- plperl_installdir='$(plperl_installdir)' \
- EXTRA_INCLUDES='$(filter -I%, $(CPPFLAGS))' \
- $(PERL) $<
+ plperl_installdir='$$(DESTDIR)$(libdir)' \
+ $(PERL) $< $(makefile_pl_flags) INC='-I$(srcdir) $(filter -I%, $(CPPFLAGS))'
install: all installdirs
- $(MAKE) -f Makefile install
+ $(MAKE) -f Makefile install DESTDIR='$(DESTDIR)'
installdirs:
- $(mkinstalldirs) $(DESTDIR)$(plperl_installdir)
+ $(mkinstalldirs) $(DESTDIR)$(libdir)
uninstall:
rm -f $(DESTDIR)$(libdir)/plperl$(DLSUFFIX)
diff --git a/src/pl/plperl/Makefile.PL b/src/pl/plperl/Makefile.PL
index 32d663a6301..83bf1ccc334 100644
--- a/src/pl/plperl/Makefile.PL
+++ b/src/pl/plperl/Makefile.PL
@@ -3,23 +3,27 @@ use ExtUtils::Embed;
use DynaLoader;
use Config;
-#
-# Can't build a shared plperl unless libperl is shared too.
-# (Actually, it would be enough if code in libperl.a is compiled
-# to be position-independent, but that is hard to check for and
-# seems pretty unlikely anyway.)
-#
-if ($Config{'useshrplib'} ne 'true') {
+# On some platforms you can't build plperl unless libperl is a shared
+# library. (Actually, it would be enough if code in libperl.a is
+# compiled to be position-independent, but that is hard to check for
+# and seems pretty unlikely anyway.) On some platforms it doesn't
+# matter and they can pass in the --force flag to build anyway.
+# (Having a shared libperl is still a lot better for efficiency,
+# though.)
+
+if ($Config{'useshrplib'} ne 'true' && $ARGV[0] ne '--force') {
open(OUT, ">Makefile") or die "Can't write Makefile: $!\n";
print OUT <<'EndOfMakefile';
# Dummy Makefile for use when we can't build plperl
-all install:
- @echo "*****"; \
- echo "* Cannot build PL/Perl because libperl is not a shared library." ; \
- echo "* Skipped."; \
- echo "*****"
+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 ""
+install:
clean realclean:
rm -f Makefile
@@ -34,7 +38,6 @@ $ldopts=~s/$Config{ccdlflags}//;
WriteMakefile( 'NAME' => 'plperl',
dynamic_lib => { 'OTHERLDFLAGS' => $ldopts } ,
- INC => "$ENV{EXTRA_INCLUDES}",
XS => { 'SPI.xs' => 'SPI.c' },
OBJECT => 'plperl.o eloglvl.o SPI.o',
);
@@ -66,3 +69,30 @@ install :: all
];
}
+
+
+sub MY::xs_o {
+ '';
+}
+
+sub MY::makefile {
+ '';
+}
+
+# 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) $< > $@
+';
+}
+
+# somebody doesn't know how to write make rules...
+sub MY::c_o {
+ package MY; # so that "SUPER" works right
+ my $inherited = shift->SUPER::c_o(@_);
+ $inherited =~ s/\$\*\.\S+/\$\</g;
+ $inherited;
+}