Thread

  1. Re: [HACKERS] perl interface bug?

    Tom Lane <tgl@sss.pgh.pa.us> — 1998-10-15T15:39:27Z

    Brook Milligan <brook@trillium.NMSU.Edu> writes:
    > We cannot kill this idea because 'make test' doesn't run without the
    > postmaster.  After all, NONE of the regression tests do either!
    
    Edmund is thinking of a different situation.  The perl5 interface is
    also a "Perl module", which means that it is supposed to build and
    install under very rigid rules --- this is supposed to work:
    		perl Makefile.PL
    		make
    		make test
    		make install
    
    If you were installing the perl5 module separately from Postgres proper,
    and already had a running Postgres server, that should indeed work.
    (With the caveat that you first have to set POSTGRES_HOME environment
    variable to /usr/local/pgsql or local equivalent.)
    
    It's not *entirely* clear to me that that's a very plausible scenario,
    since we distribute the perl5 module along with Postgres.  But it does
    work and we probably shouldn't break it.
    
    Come to think of it, Brook's proposed changes do break the perl5
    directory as a standalone Perl module, because it no longer includes a
    Makefile.PL, only a Makefile.PL.in.  Can we avoid that by finding some
    other way to get the install target directory name into the perl5
    makefile?  Maybe, instead of being rewritten by autoconf, Makefile.PL
    could actively go look for the directory name, say by looking to see if
    ../../Makefile.global exists and contains a POSTGRESDIR= line.  If not,
    fall back to requiring POSTGRES_HOME to be set.
    
    			regards, tom lane
    
    
  2. Re: [HACKERS] perl interface bug?

    Brook Milligan <brook@trillium.nmsu.edu> — 1998-10-15T18:28:33Z

       Edmund is thinking of a different situation.  The perl5 interface is
       also a "Perl module", which means that it is supposed to build and
       install under very rigid rules --- this is supposed to work:
    		   perl Makefile.PL
    		   make
    		   make test
    		   make install
    
    Ok, I see now.  So, we need the following:
    
    - a Makefile.PL that works out of the box for the above sequence,
      given that POSTGRES_HOME is set properly.
    
    - a Makefile.PL that works with the Postgres installation and gets the
      right shared library, so if we run `make test' later (or use the
      interface in any way) it works immediately upon Postgres
      installation.
    
    A solution:
    
    - a default Makefile.PL that works
    
    - a Makefile.PL replaced from Makefile.PL.in that still works with the
      above, but satisfies the second criterion.
    
    The patches below do this and I think satisfy all considerations
    (you'll let me know if they don't, right? :)
    
    - Makefile.PL has an explanation and if POSTGRES_HOME is not set will
      print a useful message.
    
    - Makefile.PL.in replaces that message with the right thing for
      finding the installed shared library based on configure.
    
    - Makefile:  same as before; do the clean before installing to pick up
      the right shared library.  Note that no clean is done for any other
      targets.
    
    - configure.in:  output Makefile.PL along with the rest.  Note also,
      that in the current version $WHOAMI is never set so the perl test
      always fails.  Perhaps this should be fixed by setting the variable
      correctly, but in any case the comments no longer agree with this
      stuff anyway.
    
    Cheers,
    Brook
    
    ===========================================================================
    --- Makefile.PL.orig	Thu Oct 15 11:13:55 1998
    +++ Makefile.PL	Thu Oct 15 12:16:33 1998
    @@ -1,4 +1,3 @@
    -# Generated automatically from Makefile.PL.in by configure.
     #-------------------------------------------------------
     #
     # $Id: Makefile.PL,v 1.9 1998/09/27 19:12:21 mergl Exp $
    @@ -11,29 +10,25 @@
     use Config;
     use strict;
     
    -# because the perl5 interface is always contained in the source tree,
    -# we can be sure about the location of the include files and libs.
    -# For development and testing we still test for POSTGRES_HOME.
    -#
    -#print "\nConfiguring Pg\n";
    -#print "Remember to actually read the README file !\n";
    -#die "\nYou didn't read the README file !\n" unless ($] >= 5.002);
    -#
    -#if (! $ENV{POSTGRES_HOME}) {
    -#    warn "\$POSTGRES_HOME not defined. Searching for PostgreSQL...\n";
    -#    foreach(qw(../../../ /usr/local/pgsql /usr/pgsql /home/pgsql /opt/pgsql /usr/local/postgres /usr/postgres /home/postgres /opt/postgres)) {
    -#        if (-d "$_/lib") {
    -#            $ENV{POSTGRES_HOME} = $_;
    -#            last;
    -#        }
    -#    }
    -#}
    -#
    -#if (-d "$ENV{POSTGRES_HOME}/lib") {
    -#    print "Found PostgreSQL in $ENV{POSTGRES_HOME}\n";
    -#} else {
    -#    die "Unable to determine PostgreSQL\n";
    -#}
    +# This Makefile.PL is intended for standalone use when PostgreSQL is
    +# already installed.  In that case, install the perl module as follows:
    +# 
    +#    setenv POSTGRES_HOME /path/to/root/of/installed/postgres
    +#    perl Makefile.PL
    +#    make
    +#    make test
    +#    make install
    +
    +# During normal installation of PostgreSQL, this file will be replaced
    +# by one derived from Makefile.PL.in so that the installed shared
    +# library libpq.so will be found during installation of this module.
    +# As a result, the POSTGRES_HOME environment variable need not be set
    +# during PostgreSQL installation.  Note that ../Makefile takes care of
    +# the `perl Makefile.PL' command.  Note also that it is still possible
    +# to follow the standalone installation procedure, even after
    +# configuring and installing PostgreSQL, because the `else'
    +# conditional branch below is identical in both Makefile.PL and
    +# Makefile.PL.in.
     
     my %opts;
     
    @@ -42,13 +37,16 @@
         my $cwd = `pwd`;
         chop $cwd;
     
    -    %opts = (
    -        NAME         => 'Pg',
    -        VERSION_FROM => 'Pg.pm',
    -        INC          => "-I$cwd/../libpq -I$cwd/../../include",
    -        OBJECT       => "Pg\$(OBJ_EXT)",
    -        LIBS         => ["-L/usr/pkg/pgsql/lib -L$cwd/../libpq -lpq"],
    -    );
    +    print "To install the perl interface for PostgreSQL do the following:\n";
    +    print "  - install PostgreSQL\n";
    +    print "  - set the POSTGRES_HOME environment variable appropriately\n";
    +    print "  - in this directory ($cwd):\n";
    +    print "    perl Makefile.PL\n";
    +    print "    make\n";
    +    print "    make test	[ with a postmaster running ]\n";
    +    print "    make install\n";
    +
    +    exit(1);
     
     } else {
     
    ===========================================================================
    --- interfaces/perl5/Makefile.PL.in.orig	Thu Oct 15 11:09:15 1998
    +++ interfaces/perl5/Makefile.PL.in	Thu Oct 15 11:57:17 1998
    @@ -0,0 +1,44 @@
    +#-------------------------------------------------------
    +#
    +# $Id: Makefile.PL,v 1.9 1998/09/27 19:12:21 mergl Exp $
    +#
    +# Copyright (c) 1997, 1998  Edmund Mergl
    +#
    +#-------------------------------------------------------
    +
    +use ExtUtils::MakeMaker;
    +use Config;
    +use strict;
    +
    +my %opts;
    +
    +if (! $ENV{POSTGRES_HOME}) {
    +
    +    my $cwd = `pwd`;
    +    chop $cwd;
    +
    +    %opts = (
    +        NAME         => 'Pg',
    +        VERSION_FROM => 'Pg.pm',
    +        INC          => "-I$cwd/../libpq -I$cwd/../../include",
    +        OBJECT       => "Pg\$(OBJ_EXT)",
    +        LIBS         => ["-L@prefix@/lib -L$cwd/../libpq -lpq"],
    +    );
    +
    +} else {
    +
    +    %opts = (
    +        NAME         => 'Pg',
    +        VERSION_FROM => 'Pg.pm',
    +        INC          => "-I$ENV{POSTGRES_HOME}/include",
    +        OBJECT       => "Pg\$(OBJ_EXT)",
    +        LIBS         => ["-L$ENV{POSTGRES_HOME}/lib -lpq"],
    +    );
    +}
    +
    +
    +WriteMakefile(%opts);
    +
    +exit(0);
    +
    +# end of Makefile.PL
    ===========================================================================
    --- interfaces/Makefile.orig	Wed Oct  7 01:00:23 1998
    +++ interfaces/Makefile	Tue Oct 13 16:29:16 1998
    @@ -15,13 +15,11 @@
     include $(SRCDIR)/Makefile.global
     
     
    -perl-makefile-dep :=
    -ifeq ($(USE_PERL), true)
    -  perl-makefile-dep := perl5/Makefile
    -endif
    +PERL_CLEAN := DO_NOTHING
    +install: PERL_CLEAN := clean
     
     
    -.DEFAULT all install clean dep depend distclean: $(perl-makefile-dep)
    +.DEFAULT all install clean dep depend distclean:
     	$(MAKE) -C libpq $@
     	$(MAKE) -C ecpg $@
     ifeq ($(HAVE_Cplusplus), true)
    @@ -33,6 +31,8 @@
     	$(MAKE) -C libpgtcl $@
     endif
     ifeq ($(USE_PERL), true)
    +	-$(MAKE) -C perl5 $(PERL_CLEAN)
    +	$(MAKE) perl5/Makefile
     	$(MAKE) -C perl5 $@
     endif
     ifeq ($(USE_ODBC), true)
    ===========================================================================
    --- configure.in.orig	Thu Oct 15 01:00:20 1998
    +++ configure.in	Thu Oct 15 11:54:09 1998
    @@ -266,17 +266,6 @@
        [ USE_PERL=false; AC_MSG_RESULT(disabled) ]
     )
     
    -#dnl Verify that postgres is already installed
    -#dnl per instructions for perl interface installation
    -if test "$USE_PERL" = "true"
    -then
    -	if test "$WHOAMI" != "root"
    -	then	AC_MSG_WARN(perl support disabled; must be root to install)
    -		USE_PERL=
    -	fi
    -fi
    -export USE_PERL
    -
     dnl We include odbc support unless we disable it with --with-odbc=false
     AC_MSG_CHECKING(setting USE_ODBC)
     AC_ARG_WITH(
    @@ -917,6 +906,7 @@
     	interfaces/libpgtcl/Makefile
     	interfaces/odbc/GNUmakefile
     	interfaces/odbc/Makefile.global
    +	interfaces/perl5/Makefile.PL
     	pl/plpgsql/src/Makefile
     	pl/plpgsql/src/mklang.sql
     	pl/tcl/mkMakefile.tcldefs.sh
    
    
  3. Re: [HACKERS] perl interface bug?

    Bruce Momjian <maillist@candle.pha.pa.us> — 1998-10-15T19:26:30Z

    >    Edmund is thinking of a different situation.  The perl5 interface is
    >    also a "Perl module", which means that it is supposed to build and
    >    install under very rigid rules --- this is supposed to work:
    > 		   perl Makefile.PL
    > 		   make
    > 		   make test
    > 		   make install
    > 
    > Ok, I see now.  So, we need the following:
    > 
    > - a Makefile.PL that works out of the box for the above sequence,
    >   given that POSTGRES_HOME is set properly.
    > 
    > - a Makefile.PL that works with the Postgres installation and gets the
    >   right shared library, so if we run `make test' later (or use the
    >   interface in any way) it works immediately upon Postgres
    >   installation.
    > 
    > A solution:
    > 
    > - a default Makefile.PL that works
    > 
    > - a Makefile.PL replaced from Makefile.PL.in that still works with the
    >   above, but satisfies the second criterion.
    > 
    > The patches below do this and I think satisfy all considerations
    > (you'll let me know if they don't, right? :)
    > 
    > - Makefile.PL has an explanation and if POSTGRES_HOME is not set will
    >   print a useful message.
    > 
    > - Makefile.PL.in replaces that message with the right thing for
    >   finding the installed shared library based on configure.
    > 
    > - Makefile:  same as before; do the clean before installing to pick up
    >   the right shared library.  Note that no clean is done for any other
    >   targets.
    > 
    > - configure.in:  output Makefile.PL along with the rest.  Note also,
    >   that in the current version $WHOAMI is never set so the perl test
    >   always fails.  Perhaps this should be fixed by setting the variable
    >   correctly, but in any case the comments no longer agree with this
    >   stuff anyway.
    > 
    > Cheers,
    > Brook
    
    This patch does not apply properly.  Please resubmit.
    
    -- 
      Bruce Momjian                        |  http://www.op.net/~candle
      maillist@candle.pha.pa.us            |  (610) 853-3000
      +  If your life is a hard drive,     |  830 Blythe Avenue
      +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
    
    
  4. Re: [HACKERS] perl interface bug?

    Brook Milligan <brook@trillium.nmsu.edu> — 1998-10-15T21:15:58Z

       > Ok, I see now.  So, we need the following:
       > 
       > - a Makefile.PL that works out of the box for the above sequence,
       >   given that POSTGRES_HOME is set properly.
       > 
       > - a Makefile.PL that works with the Postgres installation and gets the
       >   right shared library, so if we run `make test' later (or use the
       >   interface in any way) it works immediately upon Postgres
       >   installation.
    
       let's forget about the make test. In order to get the right
       libpq.so it should be sufficient to change the Makefile in the 
       interfaces directory in a way, that 'make' and 'make install'
       for perl5 is called after 'make install' in libpq. Of course
       I would have to adapt Makefile.PL in order to use pgsql/lib
       instead of pgsql/src/interfaces/libpq as linkpath for libpq.so.
    
    I don't think we need to give up on make test.  Either the installer
    already has postgresql installed and running (in which case the
    standard perl procedure with POSTGRES_HOME set will work) or he/she
    doesn't and is doing this as part of the main postgresql
    installation.  In that case we just repeat the build after libpq is
    installed; no problem.
    
       But: for 'make install' in the perl directory, you need to be 
       root, because the perl installation usually is owned by root.
       How do you want to solve this problem ? Those people without
       root access can say 'perl Makefile.PL PREFIX=/my/perl_directory'
       to install the module into a private directory. Again this
       is not possible with a hard coded 'perl Makefile'.
    
    This is a complication.  Perhaps to be solved secondarily.  For my
    information so I can think about solutions, in your command what
    exactly is PREFIX pointing to?  Directly to the root of the perl
    library tree?
    
    Would a solution be to enhance the --with-perl option to point to the
    directory of interest unless configure is run by root?  In that case
    the interfaces/Makefile could include the prefix argument if
    necessary and things would just work.  If one does the perl stuff
    standalone, they can always issue the command with a prefix
    themselves.
    
    Let's get the rest of this done right first, though and worry about
    this root/nonroot install problem next.  I goofed my earlier patches,
    so I'll resubmit them and go from there.
    
    Cheers,
    Brook
    
    
  5. Re: [HACKERS] perl interface bug?

    Brook Milligan <brook@trillium.nmsu.edu> — 1998-10-15T21:23:55Z

       This patch does not apply properly.  Please resubmit.
    
    Sorry.  Here is a set that works against my copy of the BETA2
    tarball.  Hope that works now.
    
    Cheers,
    Brook
    
    ===========================================================================
    --- interfaces/perl5/Makefile.PL.orig	Mon Sep 28 01:00:21 1998
    +++ interfaces/perl5/Makefile.PL	Thu Oct 15 12:55:19 1998
    @@ -10,29 +10,25 @@
     use Config;
     use strict;
     
    -# because the perl5 interface is always contained in the source tree,
    -# we can be sure about the location of the include files and libs.
    -# For development and testing we still test for POSTGRES_HOME.
    -#
    -#print "\nConfiguring Pg\n";
    -#print "Remember to actually read the README file !\n";
    -#die "\nYou didn't read the README file !\n" unless ($] >= 5.002);
    -#
    -#if (! $ENV{POSTGRES_HOME}) {
    -#    warn "\$POSTGRES_HOME not defined. Searching for PostgreSQL...\n";
    -#    foreach(qw(../../../ /usr/local/pgsql /usr/pgsql /home/pgsql /opt/pgsql /usr/local/postgres /usr/postgres /home/postgres /opt/postgres)) {
    -#        if (-d "$_/lib") {
    -#            $ENV{POSTGRES_HOME} = $_;
    -#            last;
    -#        }
    -#    }
    -#}
    -#
    -#if (-d "$ENV{POSTGRES_HOME}/lib") {
    -#    print "Found PostgreSQL in $ENV{POSTGRES_HOME}\n";
    -#} else {
    -#    die "Unable to determine PostgreSQL\n";
    -#}
    +# This Makefile.PL is intended for standalone use when PostgreSQL is
    +# already installed.  In that case, install the perl module as follows:
    +# 
    +#    setenv POSTGRES_HOME /path/to/root/of/installed/postgres
    +#    perl Makefile.PL
    +#    make
    +#    make test
    +#    make install
    +
    +# During normal installation of PostgreSQL, this file will be replaced
    +# by one derived from Makefile.PL.in so that the installed shared
    +# library libpq.so will be found during installation of this module.
    +# As a result, the POSTGRES_HOME environment variable need not be set
    +# during PostgreSQL installation.  Note that ../Makefile takes care of
    +# the `perl Makefile.PL' command.  Note also that it is still possible
    +# to follow the standalone installation procedure, even after
    +# configuring and installing PostgreSQL, because the `else'
    +# conditional branch below is identical in both Makefile.PL and
    +# Makefile.PL.in.
     
     my %opts;
     
    @@ -41,14 +37,17 @@
         my $cwd = `pwd`;
         chop $cwd;
     
    -    %opts = (
    -        NAME         => 'Pg',
    -        VERSION_FROM => 'Pg.pm',
    -        INC          => "-I$cwd/../libpq -I$cwd/../../include",
    -        OBJECT       => "Pg\$(OBJ_EXT)",
    -        LIBS         => ["-L$cwd/../libpq -lpq"],
    -    );
    +    print "To install the perl interface for PostgreSQL do the following:\n";
    +    print "  - install PostgreSQL\n";
    +    print "  - set the POSTGRES_HOME environment variable appropriately\n";
    +    print "  - in this directory ($cwd):\n";
    +    print "    perl Makefile.PL\n";
    +    print "    make\n";
    +    print "    make test	[ with a postmaster running ]\n";
    +    print "    make install\n";
     
    +    exit(1);
    +  
     } else {
     
         %opts = (
    ===========================================================================
    --- interfaces/perl5/Makefile.PL.in.orig	Thu Oct 15 11:09:15 1998
    +++ interfaces/perl5/Makefile.PL.in	Thu Oct 15 11:57:17 1998
    @@ -0,0 +1,44 @@
    +#-------------------------------------------------------
    +#
    +# $Id: Makefile.PL,v 1.9 1998/09/27 19:12:21 mergl Exp $
    +#
    +# Copyright (c) 1997, 1998  Edmund Mergl
    +#
    +#-------------------------------------------------------
    +
    +use ExtUtils::MakeMaker;
    +use Config;
    +use strict;
    +
    +my %opts;
    +
    +if (! $ENV{POSTGRES_HOME}) {
    +
    +    my $cwd = `pwd`;
    +    chop $cwd;
    +
    +    %opts = (
    +        NAME         => 'Pg',
    +        VERSION_FROM => 'Pg.pm',
    +        INC          => "-I$cwd/../libpq -I$cwd/../../include",
    +        OBJECT       => "Pg\$(OBJ_EXT)",
    +        LIBS         => ["-L@prefix@/lib -L$cwd/../libpq -lpq"],
    +    );
    +
    +} else {
    +
    +    %opts = (
    +        NAME         => 'Pg',
    +        VERSION_FROM => 'Pg.pm',
    +        INC          => "-I$ENV{POSTGRES_HOME}/include",
    +        OBJECT       => "Pg\$(OBJ_EXT)",
    +        LIBS         => ["-L$ENV{POSTGRES_HOME}/lib -lpq"],
    +    );
    +}
    +
    +
    +WriteMakefile(%opts);
    +
    +exit(0);
    +
    +# end of Makefile.PL
    ===========================================================================
    --- interfaces/Makefile.orig	Wed Oct  7 01:00:23 1998
    +++ interfaces/Makefile	Tue Oct 13 16:29:16 1998
    @@ -15,13 +15,11 @@
     include $(SRCDIR)/Makefile.global
     
     
    -perl-makefile-dep :=
    -ifeq ($(USE_PERL), true)
    -  perl-makefile-dep := perl5/Makefile
    -endif
    +PERL_CLEAN := DO_NOTHING
    +install: PERL_CLEAN := clean
     
     
    -.DEFAULT all install clean dep depend distclean: $(perl-makefile-dep)
    +.DEFAULT all install clean dep depend distclean:
     	$(MAKE) -C libpq $@
     	$(MAKE) -C ecpg $@
     ifeq ($(HAVE_Cplusplus), true)
    @@ -33,6 +31,8 @@
     	$(MAKE) -C libpgtcl $@
     endif
     ifeq ($(USE_PERL), true)
    +	-$(MAKE) -C perl5 $(PERL_CLEAN)
    +	$(MAKE) perl5/Makefile
     	$(MAKE) -C perl5 $@
     endif
     ifeq ($(USE_ODBC), true)
    ===========================================================================
    --- configure.in.orig	Thu Oct 15 01:00:20 1998
    +++ configure.in	Thu Oct 15 11:54:09 1998
    @@ -266,17 +266,6 @@
        [ USE_PERL=false; AC_MSG_RESULT(disabled) ]
     )
     
    -#dnl Verify that postgres is already installed
    -#dnl per instructions for perl interface installation
    -if test "$USE_PERL" = "true"
    -then
    -	if test "$WHOAMI" != "root"
    -	then	AC_MSG_WARN(perl support disabled; must be root to install)
    -		USE_PERL=
    -	fi
    -fi
    -export USE_PERL
    -
     dnl We include odbc support unless we disable it with --with-odbc=false
     AC_MSG_CHECKING(setting USE_ODBC)
     AC_ARG_WITH(
    @@ -917,6 +906,7 @@
     	interfaces/libpgtcl/Makefile
     	interfaces/odbc/GNUmakefile
     	interfaces/odbc/Makefile.global
    +	interfaces/perl5/Makefile.PL
     	pl/plpgsql/src/Makefile
     	pl/plpgsql/src/mklang.sql
     	pl/tcl/mkMakefile.tcldefs.sh
    
    
  6. Re: [HACKERS] perl interface bug?

    Edmund Mergl <e.mergl@bawue.de> — 1998-10-15T22:09:14Z

    Brook Milligan wrote:
    > 
    >    Edmund is thinking of a different situation.  The perl5 interface is
    >    also a "Perl module", which means that it is supposed to build and
    >    install under very rigid rules --- this is supposed to work:
    >                    perl Makefile.PL
    >                    make
    >                    make test
    >                    make install
    > 
    > Ok, I see now.  So, we need the following:
    > 
    > - a Makefile.PL that works out of the box for the above sequence,
    >   given that POSTGRES_HOME is set properly.
    > 
    > - a Makefile.PL that works with the Postgres installation and gets the
    >   right shared library, so if we run `make test' later (or use the
    >   interface in any way) it works immediately upon Postgres
    >   installation.
    > 
    
    
    let's forget about the make test. In order to get the right
    libpq.so it should be sufficient to change the Makefile in the 
    interfaces directory in a way, that 'make' and 'make install'
    for perl5 is called after 'make install' in libpq. Of course
    I would have to adapt Makefile.PL in order to use pgsql/lib
    instead of pgsql/src/interfaces/libpq as linkpath for libpq.so.
    
    But: for 'make install' in the perl directory, you need to be 
    root, because the perl installation usually is owned by root.
    How do you want to solve this problem ? Those people without
    root access can say 'perl Makefile.PL PREFIX=/my/perl_directory'
    to install the module into a private directory. Again this
    is not possible with a hard coded 'perl Makefile'.
    
    Edmund
    -- 
    Edmund Mergl          mailto:E.Mergl@bawue.de
    Im Haldenhau 9        http://www.bawue.de/~mergl
    70565 Stuttgart       fon: +49 711 747503
    Germany
    
    
  7. Re: [HACKERS] perl interface bug?

    Bruce Momjian <maillist@candle.pha.pa.us> — 1998-10-16T04:37:38Z

    Applied.
    
    >    This patch does not apply properly.  Please resubmit.
    > 
    > Sorry.  Here is a set that works against my copy of the BETA2
    > tarball.  Hope that works now.
    > 
    > Cheers,
    > Brook
    > 
    > ===========================================================================
    > --- interfaces/perl5/Makefile.PL.orig	Mon Sep 28 01:00:21 1998
    > +++ interfaces/perl5/Makefile.PL	Thu Oct 15 12:55:19 1998
    > @@ -10,29 +10,25 @@
    >  use Config;
    >  use strict;
    >  
    > -# because the perl5 interface is always contained in the source tree,
    > -# we can be sure about the location of the include files and libs.
    > -# For development and testing we still test for POSTGRES_HOME.
    > -#
    > -#print "\nConfiguring Pg\n";
    > -#print "Remember to actually read the README file !\n";
    > -#die "\nYou didn't read the README file !\n" unless ($] >= 5.002);
    > -#
    > -#if (! $ENV{POSTGRES_HOME}) {
    > -#    warn "\$POSTGRES_HOME not defined. Searching for PostgreSQL...\n";
    > -#    foreach(qw(../../../ /usr/local/pgsql /usr/pgsql /home/pgsql /opt/pgsql /usr/local/postgres /usr/postgres /home/postgres /opt/postgres)) {
    > -#        if (-d "$_/lib") {
    > -#            $ENV{POSTGRES_HOME} = $_;
    > -#            last;
    > -#        }
    > -#    }
    > -#}
    > -#
    > -#if (-d "$ENV{POSTGRES_HOME}/lib") {
    > -#    print "Found PostgreSQL in $ENV{POSTGRES_HOME}\n";
    > -#} else {
    > -#    die "Unable to determine PostgreSQL\n";
    > -#}
    > +# This Makefile.PL is intended for standalone use when PostgreSQL is
    > +# already installed.  In that case, install the perl module as follows:
    > +# 
    > +#    setenv POSTGRES_HOME /path/to/root/of/installed/postgres
    > +#    perl Makefile.PL
    > +#    make
    > +#    make test
    > +#    make install
    > +
    > +# During normal installation of PostgreSQL, this file will be replaced
    > +# by one derived from Makefile.PL.in so that the installed shared
    > +# library libpq.so will be found during installation of this module.
    > +# As a result, the POSTGRES_HOME environment variable need not be set
    > +# during PostgreSQL installation.  Note that ../Makefile takes care of
    > +# the `perl Makefile.PL' command.  Note also that it is still possible
    > +# to follow the standalone installation procedure, even after
    > +# configuring and installing PostgreSQL, because the `else'
    > +# conditional branch below is identical in both Makefile.PL and
    > +# Makefile.PL.in.
    >  
    >  my %opts;
    >  
    > @@ -41,14 +37,17 @@
    >      my $cwd = `pwd`;
    >      chop $cwd;
    >  
    > -    %opts = (
    > -        NAME         => 'Pg',
    > -        VERSION_FROM => 'Pg.pm',
    > -        INC          => "-I$cwd/../libpq -I$cwd/../../include",
    > -        OBJECT       => "Pg\$(OBJ_EXT)",
    > -        LIBS         => ["-L$cwd/../libpq -lpq"],
    > -    );
    > +    print "To install the perl interface for PostgreSQL do the following:\n";
    > +    print "  - install PostgreSQL\n";
    > +    print "  - set the POSTGRES_HOME environment variable appropriately\n";
    > +    print "  - in this directory ($cwd):\n";
    > +    print "    perl Makefile.PL\n";
    > +    print "    make\n";
    > +    print "    make test	[ with a postmaster running ]\n";
    > +    print "    make install\n";
    >  
    > +    exit(1);
    > +  
    >  } else {
    >  
    >      %opts = (
    > ===========================================================================
    > --- interfaces/perl5/Makefile.PL.in.orig	Thu Oct 15 11:09:15 1998
    > +++ interfaces/perl5/Makefile.PL.in	Thu Oct 15 11:57:17 1998
    > @@ -0,0 +1,44 @@
    > +#-------------------------------------------------------
    > +#
    > +# $Id: Makefile.PL,v 1.9 1998/09/27 19:12:21 mergl Exp $
    > +#
    > +# Copyright (c) 1997, 1998  Edmund Mergl
    > +#
    > +#-------------------------------------------------------
    > +
    > +use ExtUtils::MakeMaker;
    > +use Config;
    > +use strict;
    > +
    > +my %opts;
    > +
    > +if (! $ENV{POSTGRES_HOME}) {
    > +
    > +    my $cwd = `pwd`;
    > +    chop $cwd;
    > +
    > +    %opts = (
    > +        NAME         => 'Pg',
    > +        VERSION_FROM => 'Pg.pm',
    > +        INC          => "-I$cwd/../libpq -I$cwd/../../include",
    > +        OBJECT       => "Pg\$(OBJ_EXT)",
    > +        LIBS         => ["-L@prefix@/lib -L$cwd/../libpq -lpq"],
    > +    );
    > +
    > +} else {
    > +
    > +    %opts = (
    > +        NAME         => 'Pg',
    > +        VERSION_FROM => 'Pg.pm',
    > +        INC          => "-I$ENV{POSTGRES_HOME}/include",
    > +        OBJECT       => "Pg\$(OBJ_EXT)",
    > +        LIBS         => ["-L$ENV{POSTGRES_HOME}/lib -lpq"],
    > +    );
    > +}
    > +
    > +
    > +WriteMakefile(%opts);
    > +
    > +exit(0);
    > +
    > +# end of Makefile.PL
    > ===========================================================================
    > --- interfaces/Makefile.orig	Wed Oct  7 01:00:23 1998
    > +++ interfaces/Makefile	Tue Oct 13 16:29:16 1998
    > @@ -15,13 +15,11 @@
    >  include $(SRCDIR)/Makefile.global
    >  
    >  
    > -perl-makefile-dep :=
    > -ifeq ($(USE_PERL), true)
    > -  perl-makefile-dep := perl5/Makefile
    > -endif
    > +PERL_CLEAN := DO_NOTHING
    > +install: PERL_CLEAN := clean
    >  
    >  
    > -.DEFAULT all install clean dep depend distclean: $(perl-makefile-dep)
    > +.DEFAULT all install clean dep depend distclean:
    >  	$(MAKE) -C libpq $@
    >  	$(MAKE) -C ecpg $@
    >  ifeq ($(HAVE_Cplusplus), true)
    > @@ -33,6 +31,8 @@
    >  	$(MAKE) -C libpgtcl $@
    >  endif
    >  ifeq ($(USE_PERL), true)
    > +	-$(MAKE) -C perl5 $(PERL_CLEAN)
    > +	$(MAKE) perl5/Makefile
    >  	$(MAKE) -C perl5 $@
    >  endif
    >  ifeq ($(USE_ODBC), true)
    > ===========================================================================
    > --- configure.in.orig	Thu Oct 15 01:00:20 1998
    > +++ configure.in	Thu Oct 15 11:54:09 1998
    > @@ -266,17 +266,6 @@
    >     [ USE_PERL=false; AC_MSG_RESULT(disabled) ]
    >  )
    >  
    > -#dnl Verify that postgres is already installed
    > -#dnl per instructions for perl interface installation
    > -if test "$USE_PERL" = "true"
    > -then
    > -	if test "$WHOAMI" != "root"
    > -	then	AC_MSG_WARN(perl support disabled; must be root to install)
    > -		USE_PERL=
    > -	fi
    > -fi
    > -export USE_PERL
    > -
    >  dnl We include odbc support unless we disable it with --with-odbc=false
    >  AC_MSG_CHECKING(setting USE_ODBC)
    >  AC_ARG_WITH(
    > @@ -917,6 +906,7 @@
    >  	interfaces/libpgtcl/Makefile
    >  	interfaces/odbc/GNUmakefile
    >  	interfaces/odbc/Makefile.global
    > +	interfaces/perl5/Makefile.PL
    >  	pl/plpgsql/src/Makefile
    >  	pl/plpgsql/src/mklang.sql
    >  	pl/tcl/mkMakefile.tcldefs.sh
    > 
    
    
    -- 
      Bruce Momjian                        |  http://www.op.net/~candle
      maillist@candle.pha.pa.us            |  (610) 853-3000
      +  If your life is a hard drive,     |  830 Blythe Avenue
      +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
    
    
  8. Re: [HACKERS] perl interface bug?

    Edmund Mergl <e.mergl@bawue.de> — 1998-10-16T10:40:55Z

    Brook Milligan wrote:
    > 
    >    > Ok, I see now.  So, we need the following:
    >    >
    >    > - a Makefile.PL that works out of the box for the above sequence,
    >    >   given that POSTGRES_HOME is set properly.
    >    >
    >    > - a Makefile.PL that works with the Postgres installation and gets the
    >    >   right shared library, so if we run `make test' later (or use the
    >    >   interface in any way) it works immediately upon Postgres
    >    >   installation.
    > 
    >    let's forget about the make test. In order to get the right
    >    libpq.so it should be sufficient to change the Makefile in the
    >    interfaces directory in a way, that 'make' and 'make install'
    >    for perl5 is called after 'make install' in libpq. Of course
    >    I would have to adapt Makefile.PL in order to use pgsql/lib
    >    instead of pgsql/src/interfaces/libpq as linkpath for libpq.so.
    > 
    > I don't think we need to give up on make test.  Either the installer
    > already has postgresql installed and running (in which case the
    > standard perl procedure with POSTGRES_HOME set will work) or he/she
    > doesn't and is doing this as part of the main postgresql
    > installation.  In that case we just repeat the build after libpq is
    > installed; no problem.
    > 
    >    But: for 'make install' in the perl directory, you need to be
    >    root, because the perl installation usually is owned by root.
    >    How do you want to solve this problem ? Those people without
    >    root access can say 'perl Makefile.PL PREFIX=/my/perl_directory'
    >    to install the module into a private directory. Again this
    >    is not possible with a hard coded 'perl Makefile'.
    > 
    > This is a complication.  Perhaps to be solved secondarily.  For my
    > information so I can think about solutions, in your command what
    > exactly is PREFIX pointing to?  Directly to the root of the perl
    > library tree?
    > 
    > Would a solution be to enhance the --with-perl option to point to the
    > directory of interest unless configure is run by root?  In that case
    > the interfaces/Makefile could include the prefix argument if
    > necessary and things would just work.  If one does the perl stuff
    > standalone, they can always issue the command with a prefix
    > themselves.
    > 
    > Let's get the rest of this done right first, though and worry about
    > this root/nonroot install problem next.  I goofed my earlier patches,
    > so I'll resubmit them and go from there.
    > 
    > Cheers,
    > Brook
    
    the standard path for installing perl modules is .../lib/perl5/site_perl/...
    Only in case someone has no root access and no possibility to make a
    private perl installation, he will use the PREFIX option. The disadvantage
    of installing a module in a private directory is, in every perl script using 
    this module the user will have to add the searchpath, so that perl is able to 
    find the module at this non-standard place. Obviously this is only a work-around 
    and should not be used unless the user has no root access and the user is forced 
    to use the perl installation of the sys-admin. 
    
    I guess in 95% the user/sys-admin will have to install the perl-module manually,
    which means 
    
     - cd-ing into interfaces/perl5 
     - make install
    
    
    What's the big difference to:
    
     - cd-ing into interfaces/perl5 
     - perl Makefile.PL
     - make
     - make install
    
    In other words, I still prefer the solution not to build
    the perl module together with postgresql. I think it is
    sufficient to mention the perl module and the commands
    needed in order to install it in the INSTALL file and
    that's it.
    
    
    Edmund
    -- 
    Edmund Mergl          mailto:E.Mergl@bawue.de
    Im Haldenhau 9        http://www.bawue.de/~mergl
    70565 Stuttgart       fon: +49 711 747503
    Germany
    
    
  9. Re: [HACKERS] perl interface bug?

    Brook Milligan <brook@trillium.nmsu.edu> — 1998-10-19T22:58:31Z

    I envision 2 general classes of postgresql installers:  1) root, and
    2) nonroot users wishing to try/use postgresql.
    
    In the case of root sysadmins, everything (including perl) should
    install out of the box.  It does so now without affecting the
    standalone perl interface installation.
    
    In the case of nonroot installers, there are two subcases: 2a) perl is
    installed in system directories with only root access, and 2b) perl
    was installed in some other place by the postgresql installer.
    
    In case 2b, again there is no problem.  The install (with a suitable
    --prefix=... argument to configure) should proceed unimpeded.
    
    In case 2a, postgresql is installable under control of the
    --prefix=... argument, but there will be a conflict when perl is
    installed do to lack of access to the perl filesystem for the perl
    interface shared library.  In this case, the installer can install
    postgresql WITHOUT the --with-perl option to configure.  Later,
    someone with root permission can do the 
    
    	cd interfaces/perl5
    	perl Makefile.PL
    	make
    	make test
    	make install
    
    sequence.  I don't see any situations that lose here.  Am I missing
    something?
    
    In conclusion, I see our current perl interface handling as addressing
    all the relevant conditions (thanks to Tom Lane for finishing it
    up!).
    
    Cheers,
    Brook