PATCH at the end and attached ...
I have a system - and so do most of my customers with the same
architecture - where the base system has postgres installed.
But alas, it is version 7. That will not do. Their install is in /opt,
but as it is *system* postgress, they decided to link /opt/.../libpg.so
to /usr/lib/hpux64, which is the default $LD_LIBRARY_PATH of every
single user on the system.
I set POSTGRES_HOME to /pro/pgsql, which is a symlink to the postgres
version I am currently building against (e.g. /pro/pgsql-8.4.3). I do
have several to match what is installed at the customer. They all have
the /pro/pgsql symlink, so I can rest assured that the libs are found
whatever version I build when distributing.
When I set POSTGRES_HOME and POSTGRES_LIB (POSTGRES_INCLUDE setting
does not propagate into the binary, so I accept the return value of
App::Info), the *compilation* works fine, with just 2 warnings:
DBD-Pg-2.17.1 > env POSTGRES_HOME=/pro/pgsql POSTGRES_LIB=/pro/pgsql/lib perl
Makefile.PL
Configuring DBD::Pg 2.17.1
PostgreSQL version: 80403 (default port: 5432)
POSTGRES_HOME: /pro/pgsql
POSTGRES_INCLUDE: /pro/pgsql-8.4.3/include
POSTGRES_LIB: /pro/pgsql/lib
OS: hpux
Using DBI 1.615 (for perl 5.010001 on IA64.ARCHREV_0-LP64) installed in
/pro/lib/perl5/site_perl/5.10.1/IA64.ARCHREV_0-LP64/auto/DBI/
Writing Makefile for DBD::Pg
DBD-Pg-2.17.1 > make
cp lib/Bundle/DBD/Pg.pm blib/lib/Bundle/DBD/Pg.pm
cp Pg.pm blib/lib/DBD/Pg.pm
/pro/bin/perl -p -e "s/~DRIVER~/Pg/g; s/^do\(/dontdo\(/"
/pro/lib/perl5/site_perl/5.10.1/IA64.ARCHREV_0-LP64/auto/DBI/Driver.xst > Pg.xsi
/pro/bin/perl /pro/lib/perl5/5.10.1/ExtUtils/xsubpp -typemap
/pro/lib/perl5/5.10.1/ExtUtils/typemap Pg.xs > Pg.xsc && mv Pg.xsc Pg.c
cc -c -I/pro/pgsql-8.4.3/include
-I/pro/lib/perl5/site_perl/5.10.1/IA64.ARCHREV_0-LP64/auto/DBI -Ae
-DPERL_DONT_CREATE_GVSV +Z -z -D_HPUX_SOURCE -Wl,+vnocompatwarnings +DD64
-I/pro/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-DPGLIBVERSION=80403 -DPGDEFPORT=5432 +O2 +Onolimit -DPERL_EXTMALLOC_DEF
-Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc
-Dcalloc=Perl_calloc -DVERSION=\"2.17.1\" -DXS_VERSION=\"2.17.1\" +Z
"-I/pro/lib/perl5/5.10.1/IA64.ARCHREV_0-LP64/CORE" Pg.c
cc -c -I/pro/pgsql-8.4.3/include
-I/pro/lib/perl5/site_perl/5.10.1/IA64.ARCHREV_0-LP64/auto/DBI -Ae
-DPERL_DONT_CREATE_GVSV +Z -z -D_HPUX_SOURCE -Wl,+vnocompatwarnings +DD64
-I/pro/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-DPGLIBVERSION=80403 -DPGDEFPORT=5432 +O2 +Onolimit -DPERL_EXTMALLOC_DEF
-Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc
-Dcalloc=Perl_calloc -DVERSION=\"2.17.1\" -DXS_VERSION=\"2.17.1\" +Z
"-I/pro/lib/perl5/5.10.1/IA64.ARCHREV_0-LP64/CORE" dbdimp.c
"dbdimp.c", line 4472: warning #2068-D: integer conversion resulted in a
change of sign
if (!pg_db_end_txn(aTHX_ dbh, imp_dbh, -1==loid ? 0 : 1))
^
cc -c -I/pro/pgsql-8.4.3/include
-I/pro/lib/perl5/site_perl/5.10.1/IA64.ARCHREV_0-LP64/auto/DBI -Ae
-DPERL_DONT_CREATE_GVSV +Z -z -D_HPUX_SOURCE -Wl,+vnocompatwarnings +DD64
-I/pro/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-DPGLIBVERSION=80403 -DPGDEFPORT=5432 +O2 +Onolimit -DPERL_EXTMALLOC_DEF
-Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc
-Dcalloc=Perl_calloc -DVERSION=\"2.17.1\" -DXS_VERSION=\"2.17.1\" +Z
"-I/pro/lib/perl5/5.10.1/IA64.ARCHREV_0-LP64/CORE" quote.c
"quote.c", line 334: warning #2513-D: a value of type "const char *" cannot be
assigned to an entity of type "char *"
result = string;
^
cc -c -I/pro/pgsql-8.4.3/include
-I/pro/lib/perl5/site_perl/5.10.1/IA64.ARCHREV_0-LP64/auto/DBI -Ae
-DPERL_DONT_CREATE_GVSV +Z -z -D_HPUX_SOURCE -Wl,+vnocompatwarnings +DD64
-I/pro/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-DPGLIBVERSION=80403 -DPGDEFPORT=5432 +O2 +Onolimit -DPERL_EXTMALLOC_DEF
-Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc
-Dcalloc=Perl_calloc -DVERSION=\"2.17.1\" -DXS_VERSION=\"2.17.1\" +Z
"-I/pro/lib/perl5/5.10.1/IA64.ARCHREV_0-LP64/CORE" types.c
Running Mkbootstrap for DBD::Pg ()
chmod 644 Pg.bs
rm -f blib/arch/auto/DBD/Pg/Pg.so
But *linking* breaks, because the default -L flags from $LDFLAGS and
$LDDLFLAGS are in front of $EXTRALIBS and/or $LDLOADLIBS and the linker
now picks up the postgres-7 library :( :(
EXTRALIBS = -L/pro/pgsql/lib -lpq
LDLOADLIBS = -L/pro/pgsql/lib -lpq -lm
BSLOADLIBS =
LD_RUN_PATH = /pro/pgsql/lib
LD_RUN_PATH="/pro/pgsq/lib" /usr/bin/ld -b +vnocompatwarnings -L/pro/local/lib
-L/usr/lib/hpux64 Pg.o dbdimp.o quote.o types.o -o blib/arch/auto/DBD/Pg/Pg.so
\
-L/pro/pgsql/lib -lpq -lm \
chmod 755 blib/arch/auto/DBD/Pg/Pg.so
cp Pg.bs blib/arch/auto/DBD/Pg/Pg.bs
chmod 644 blib/arch/auto/DBD/Pg/Pg.bs
Manifying blib/man3/Bundle::DBD::Pg.3
Manifying blib/man3/DBD::Pg.3
After I changed my Makefile.PL and started over (see patch below), I
get here:
DBD-Pg-2.17.1 > make test
PGINITDB="/pro/pgsql-8.4.3/bin/initdb" PERL_DL_NONLAZY=1 /pro/bin/perl
"-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00-signature.t .... skipped: Set the environment variable TEST_SIGNATURE to
enable this test
t/00basic.t ......... ok
t/01connect.t ....... 1/13 #
# DBI Version 1.615
# DBD::Pg Version 2.17.1
# Perl Version 5.10.1
# OS hpux
# PostgreSQL (compiled) 80403
# PostgreSQL (target) 80404
# PostgreSQL (reported) PostgreSQL 8.4.4 on x86_64-unknown-linux-gnu,
compiled by GCC gcc (SUSE Linux) 4.4.1 [gcc-4_4-branch revision 150839], 64-bit
# Default port 5432
# DBI_DSN dbi:Pg:
# DBI_USER postgres
# Test schema dbd_pg_testschema
# PGDATABASE fin0737
# PGHOST sv02
# array_nulls on
# backslash_quote safe_encoding
# client_encoding UTF8
# server_encoding UTF8
# standard_conforming_strings off
t/01connect.t ....... ok
t/01constants.t ..... ok
t/02attribs.t ....... 84/249
# Failed test 'Failed ping returns a SQLSTATE code of 08000'
# at t/02attribs.t line 1597.
# got: '22000'
# expected: '08000'
t/02attribs.t ....... 247/249 # Looks like you failed 1 test of 249.
t/02attribs.t ....... Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/249 subtests
(less 1 skipped subtest: 247 okay)
t/03dbmethod.t ...... ok
t/03smethod.t ....... ok
t/04misc.t .......... ok
t/06bytea.t ......... ok
t/07copy.t .......... ok
t/08async.t ......... ok
t/09arrays.t ........ ok
t/12placeholders.t .. ok
t/20savepoints.t .... ok
t/99cleanup.t ....... 1/1 Removing test database directory
t/99cleanup.t ....... ok
Test Summary Report
-------------------
t/02attribs.t (Wstat: 256 Tests: 249 Failed: 1)
Failed test: 244
Non-zero exit status: 1
Files=15, Tests=1707, 20 wallclock secs ( 0.53 usr 0.10 sys + 3.63 cusr 0.71
csys = 4.97 CPU)
Result: FAIL
Failed 1/15 test programs. 1/1707 subtests failed.
make: *** [test_dynamic] Error 255
Good enough for now.
And here's the patch. FWIW HP-UX 9 is so archaic that even /I/ do not
have access to it anymore :)
--8<---
--- Makefile.PL.org 2010-04-07 22:52:55 +0200
+++ Makefile.PL 2010-10-15 16:35:35 +0200
@@ -211,19 +211,16 @@ my %opts =
PERL_MALLOC_OK => 1,
NEEDS_LINKING => 1,
NO_META => 1,
- NORECURS => 1,
+ NORECURS => 1,
clean => { FILES => 'trace Pg.xsi README.testdatabase' },
- realclean => { FILES => 'dbdpg_test_database/' },
+ realclean => { FILES => 'dbdpg_test_database/' },
+ macro => {
+ LDFLAGS => "-L$POSTGRES_LIB $Config{ldflags}",
+ LDDLFLAGS => "-L$POSTGRES_LIB $Config{lddlflags}",
+ },
);
-if ($os eq 'hpux') {
- my $osvers = $Config{osvers};
- if ($osvers < 10) {
- print "Warning: Forced to build static not dynamic on $os
$osvers.\a\n";
- $opts{LINKTYPE} = 'static';
- }
-}
-elsif ($os =~ /Win32/) {
+if ($os =~ /Win32/) {
my $msdir = $POSTGRES_LIB;
$msdir =~ s{"$}{/ms"};
$opts{LIBS}[0] .= " -L$msdir -lsecur32";
-->8---
--
H.Merijn Brand http://tux.nl Perl Monger http://amsterdam.pm.org/
using 5.00307 through 5.12 and porting perl5.13.x on HP-UX 10.20, 11.00,
11.11, 11.23 and 11.31, OpenSuSE 10.1, 11.0 .. 11.3 and AIX 5.2 and 5.3.
http://mirrors.develooper.com/hpux/ http://www.test-smoke.org/
http://qa.perl.org http://www.goldmark.org/jeff/stupid-disclaimers/
--- Makefile.PL.org 2010-04-07 22:52:55 +0200
+++ Makefile.PL 2010-10-15 16:35:35 +0200
@@ -211,19 +211,16 @@ my %opts =
PERL_MALLOC_OK => 1,
NEEDS_LINKING => 1,
NO_META => 1,
- NORECURS => 1,
+ NORECURS => 1,
clean => { FILES => 'trace Pg.xsi README.testdatabase' },
- realclean => { FILES => 'dbdpg_test_database/' },
+ realclean => { FILES => 'dbdpg_test_database/' },
+ macro => {
+ LDFLAGS => "-L$POSTGRES_LIB $Config{ldflags}",
+ LDDLFLAGS => "-L$POSTGRES_LIB $Config{lddlflags}",
+ },
);
-if ($os eq 'hpux') {
- my $osvers = $Config{osvers};
- if ($osvers < 10) {
- print "Warning: Forced to build static not dynamic on $os $osvers.\a\n";
- $opts{LINKTYPE} = 'static';
- }
-}
-elsif ($os =~ /Win32/) {
+if ($os =~ /Win32/) {
my $msdir = $POSTGRES_LIB;
$msdir =~ s{"$}{/ms"};
$opts{LIBS}[0] .= " -L$msdir -lsecur32";