]> granicus.if.org Git - postgresql/commitdiff
VPATH and DESTDIR support for PL/Perl, using the same techniques employed
authorPeter Eisentraut <peter_e@gmx.net>
Sun, 26 Aug 2001 23:54:41 +0000 (23:54 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Sun, 26 Aug 2001 23:54:41 +0000 (23:54 +0000)
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.

src/makefiles/Makefile.linux
src/pl/plperl/GNUmakefile
src/pl/plperl/Makefile.PL

index 11bef1572c6a608cc7534449b420a859c925a2c1..31277151c96c0acb62a79d6af9a6e0a6c23474d5 100644 (file)
@@ -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
 
index 7e700a7a34f84fec6a6a951d2a3c8e91072eff9c..4ad205acb46c7fdc54340b255746f14572db4ecf 100644 (file)
@@ -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)
index 32d663a630183dd4dae543d578421b14d25e632a..83bf1ccc334e7b7aa1acb4988dc3afb2706979e5 100644 (file)
@@ -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;
+}