Thanks for this. I'll apply (variations on) it now for 1.33.
Tim.
On Sun, Jan 19, 2003 at 06:22:58PM -0600, Craig A. Berry wrote:
> The patch below gets DBI 1.32 to build and pass all tests with Perl
> 5.8.0 on OpenVMS Alpha 7.3-1. With Perl 5.6.1 there are some minor
> issues remaining (noted below). The changes are as follows:
>
> The Makefile.PL is modified to avoid undefined values warnings for
> certain items fetched from %Config.
>
> The post_initialize method in the Makefile.PL is modified to account for
> the fact that File::Find::find returns '.' for the current directory
> under 5.6.1 but the more idiomatic '[]' under 5.8.0. This was causing
> various important extras to be missed when building under 5.8.0.
>
> The t/06attrs.t test has been modified to make the matching of 'No such
> file ...' messages case insensitive since on VMS those come out as 'no
> such file ...'.
>
> This one is not a VMS issue per se but came up in my testing. The
> t/10examp.t test would fail when run on a system with minimal access
> controls and when not running with excessive privileges. Specifically
> it would use File::Spec->rootdir and children as its private sandbox. I
> changed this to File::Spec->updir so at least it is only looking at the
> sibling directories of the DBI build directory and their children.
>
> The t/40profile.t test has been modified to close the log file before
> checking its size; otherwise the file is more than likely still in cache
> and registers a size of zero.
>
> With Perl 5.6.1, the following tests still fail for the following reasons:
>
> t/10examp.t -- different semantics for -T on shebang line
> t/40profile.t -- Time::HiRes not in the core before 5.8.0
>
> It may also be worth posting a reminder here that when building DBI on
> VMS with Perl 5.6.1 or earlier, it is necessary to specify an explicit
> target ('all' or 'test' will do). Otherwise only the first target gets
> built, which is DBI's custom post_constants section. In Perl 5.8.0,
> MakeMaker has been fixed to build the 'all' target regardless of whether
> other targets appear before it.
>
> Thanks to Stephen Smith, whose detailed comments on his recent
> experience building DBI saved me some time in tracking down test failures.
>
>
> --- Makefile.PL;-0 Sun Dec 1 16:36:57 2002
> +++ Makefile.PL Sun Jan 19 15:41:06 2003
> @@ -155,6 +155,11 @@
> my ( $cfg_privlibexp, $cfg_archlibexp, $cfg_sitelibexp, $cfg_sitearchexp,
> $cfg_man3direxp ) =
> @Config{qw( privlibexp archlibexp sitelibexp sitearchexp man3direxp ) };
> +for ( $cfg_privlibexp, $cfg_archlibexp, $cfg_sitelibexp, $cfg_sitearchexp,
> + $cfg_man3direxp ) {
> + $_ = '' unless defined $_;
> +}
> +
>
> $Verbose = $::opt_v;
> WriteMakefile(
> @@ -233,6 +238,10 @@
>
> # install files that DBD's may need
> File::Find::find( sub {
> +
> + # may be '.' or '[]' depending on File::Find version
> + $_ = '.' if $^O eq 'VMS' && $_ eq File::Spec->curdir;
> +
> $File::Find::prune = 1, return if -d $_ && '.' ne $_;
> $self->{PM}->{$_} = File::Spec->catfile($self->{INST_ARCHAUTODIR}, $_)
> if '.h' eq substr( $_, -2 ) || '.xst' eq substr( $_, -4 );
> --- t/06attrs.t;-0 Mon Nov 25 17:20:03 2002
> +++ t/06attrs.t Sat Jan 11 19:01:02 2003
> @@ -98,10 +98,10 @@
> # Trigger an exception.
> eval { $sth->execute };
> ok( $err = $@ );
> -ok( $err =~ /^DBD::ExampleP::st execute failed: opendir\(foo\): No such file or
> directory/ );
> +ok( $err =~ /^DBD::ExampleP::st execute failed: opendir\(foo\): No such file or
> directory/i );
>
> # Test all of the statement handle attributes.
> -ok( $sth->errstr, 'opendir(foo): No such file or directory' );
> +ok( $sth->errstr =~ m/^opendir\(foo\): No such file or directory/i );
> ok( $sth->state, 'S1000' );
>
> # booleans
> --- t/10examp.t;-0 Sun Dec 1 16:36:54 2002
> +++ t/10examp.t Sat Jan 11 22:15:34 2003
> @@ -573,11 +573,11 @@
>
> print "dump_results\n";
> ok(0, $csr_a = $dbh->prepare($std_sql));
> -if ($haveFileSpec && length(File::Spec->rootdir))
> +if ($haveFileSpec && length(File::Spec->updir))
> {
> - ok(0, $csr_a->execute(File::Spec->rootdir));
> + ok(0, $csr_a->execute(File::Spec->updir));
> } else {
> - ok(0, $csr_a->execute('/'));
> + ok(0, $csr_a->execute('../'));
> }
> my $dump_dir = ($ENV{TMP} || $ENV{TEMP} || $ENV{TMPDIR}
> || $ENV{'SYS$SCRATCH'} || '/tmp');
> --- t/40profile.t;-0 Sun Dec 1 16:36:52 2002
> +++ t/40profile.t Sun Jan 19 17:19:34 2003
> @@ -14,6 +14,7 @@
>
> use DBI;
> use DBI::Profile;
> +use File::Spec;
>
> BEGIN {
> if ($DBI::PurePerl) {
> @@ -32,7 +33,7 @@
> # log file to store profile results
> my $LOG_FILE = "profile.log";
> DBI->trace(0, $LOG_FILE);
> -END { unlink $LOG_FILE; }
> +END { 1 while unlink $LOG_FILE; }
>
> # make sure profiling starts disabled
> my $dbh = DBI->connect("dbi:ExampleP:", '', '', { RaiseError=>1 });
> @@ -187,6 +188,7 @@
> }
>
> # check that output went into the log file
> +DBI->trace(0, File::Spec->devnull); # close current log to flush it
> ok(-s $LOG_FILE);
>
> exit 0;