diff --git a/src/makefiles/Makefile.linux b/src/makefiles/Makefile.linux index 11bef1572c6a608cc7534449b420a859c925a2c1..31277151c96c0acb62a79d6af9a6e0a6c23474d5 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 7e700a7a34f84fec6a6a951d2a3c8e91072eff9c..4ad205acb46c7fdc54340b255746f14572db4ecf 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 32d663a630183dd4dae543d578421b14d25e632a..83bf1ccc334e7b7aa1acb4988dc3afb2706979e5 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; +}