This queue is for tickets about the ExtUtils-Install CPAN distribution.

Report information
The Basics
Id:
34095
Status:
resolved
Priority:
Low/Low

People
Owner:
Nobody in particular
Requestors:
cberry [...] cpan.org
Cc:
AdminCc:

BugTracker
Severity:
Important
Broken in:
1.50
Fixed in:
(no value)



Subject: 1.50 has 3 failures on VMS
I haven't had chance to dig into these at all, so for now this is just a bug report. I'm seeing the same failures in blead@33508, but the output below is from building EU::Install 1.50 against maint-5.8@33522. $ mmk/macro=test_verbose=1 test MCR dsa0:[craig.perl-5_8]ndbgperl.exe "-I[.lib]" "-MExtUtils::Command::MM" "-e" "test_harness(1, '[.blib.lib]', '[.blib.arch]')" t/* .t t/basic............ 1..55 ok 1 - setup ok 2 - chdir'd to Big-Dummy ok 3 - Makefile.PL exited with zero ok 4 - Makefile.PL output looks right ok 5 - Makefile.PL run in package main ok 6 - Makefile exists ok 7 - its been touched ok 8 - make manifest created a MANIFEST ok 9 - its not empty ok 10 - make test ok 11 - exited normally ok 12 - TEST_VERBOSE ok 13 - successful ok 14 - exited normally ok 15 - install ok 16 ok 17 ok 18 - install dir created ok 19 - Dummy.pm installed ok 20 - Liar.pm installed ok 21 - program installed ok 22 - packlist created ok 23 - perllocal.pod created ok 24 # skip VMS install targets do not preserve $(PREFIX) ok 25 # skip VMS install targets do not preserve $(PREFIX) ok 26 # skip VMS install targets do not preserve $(PREFIX) ok 27 # skip VMS install targets do not preserve $(PREFIX) ok 28 # skip VMS install targets do not preserve $(PREFIX) ok 29 # skip VMS install targets do not preserve $(PREFIX) ok 30 # skip VMS install targets do not preserve $(PREFIX) ok 31 # skip VMS install targets do not preserve $(PREFIX) ok 32 # skip VMS install targets do not preserve $(PREFIX) ok 33 # skip VMS install targets do not preserve $(DESTDIR) ok 34 # skip VMS install targets do not preserve $(DESTDIR) ok 35 # skip VMS install targets do not preserve $(DESTDIR) ok 36 # skip VMS install targets do not preserve $(DESTDIR) ok 37 # skip VMS install targets do not preserve $(DESTDIR) ok 38 # skip VMS install targets do not preserve $(DESTDIR) ok 39 # skip VMS install targets do not preserve $(DESTDIR) ok 40 # skip VMS install targets do not preserve $(DESTDIR) ok 41 # skip VMS install targets do not preserve $(DESTDIR) ok 42 # skip VMS install targets do not preserve $(DESTDIR) ok 43 # skip VMS install targets do not preserve $(DESTDIR) ok 44 # skip VMS install targets do not preserve $(PREFIX) ok 45 # skip VMS install targets do not preserve $(PREFIX) ok 46 # skip VMS install targets do not preserve $(PREFIX) ok 47 # skip VMS install targets do not preserve $(PREFIX) ok 48 # skip VMS install targets do not preserve $(PREFIX) ok 49 # skip VMS install targets do not preserve $(PREFIX) ok 50 # skip VMS install targets do not preserve $(PREFIX) ok 51 # skip VMS install targets do not preserve $(PREFIX) ok 52 # skip VMS install targets do not preserve $(PREFIX) ok 53 # skip VMS install targets do not preserve $(PREFIX) ok 54 ok 55 - teardown ok 30/55 skipped: various reasons t/can_write_dir.... ok 1 ok 2 ok 3 not ok 4 # Failed test at t/can_write_dir.t line 29. # Structures begin differing at: # $got->[0] = '0' # $expected->[0] = '1' ok 5 ok 6 ok 7 ok 8 ok 9 ok 10 ok 11 ok 12 1..12 # Looks like you failed 1 test of 12. %SYSTEM-F-ABORT, abort %SYSTEM-F-ABORT, abort dubious Test returned status 44 (wstat 1024, 0x400) (VMS status is 44) DIED. FAILED test 4 Failed 1/12 tests, 91.67% okay t/install.......... 1..52 ok 1 - use ExtUtils::Install; ok 2 - main->can('install') ok 3 - main->can('uninstall') ok 4 - main->can('pm_to_blib') ok 5 - main->can('install_default') ok 6 - setup ok 7 - pm_to_blib created blib dir ok 8 - copied .pm file ok 9 - created autosplit dir ok 10 ok 11 - second run, blib dir still there ok 12 - .pm file still there ok 13 - autosplit still there ok 14 ok 15 - install made dir (dry run) ok 16 - .pm file installed (dry run) ok 17 - packlist exists (dry run) ok 18 - install made dir ok 19 - .pm file installed ok 20 - ignored .SKIP file ok 21 - packlist exists ok 22 ok 23 - packlist written ok 24 - install made other dir ok 25 - .pm file installed ok 26 - packlist exists ok 27 - UNINST=1 preserved same ok 28 - different install exists ok 29 - install made other dir ok 30 - .pm file installed ok 31 - packlist exists ok 32 - UNINST=0 left different ok 33 - different install exists ok 34 - we didnt die not ok 35 - we did warn # Failed test ' we did warn' # in t/install.t at line 146. ok 36 - install made other dir ok 37 - .pm file installed ok 38 - packlist exists not ok 39 - UNINST=1 failed to remove different # Failed test ' UNINST=1 failed to remove different' # in t/install.t at line 150. not ok 40 - different install exists # Failed test 'different install exists' # in t/install.t at line 160. not ok 41 - we did die # Failed test ' we did die' # in t/install.t at line 171. ok 42 - we didnt warn ok 43 - install made other dir ok 44 - .pm file installed ok 45 - packlist exists not ok 46 - UNINST=1 failed to remove different # Failed test ' UNINST=1 failed to remove different' # in t/install.t at line 176. ok 47 - install made other dir ok 48 - .pm file installed ok 49 - packlist exists ok 50 - UNINST=1 removed different ok 51 ok 52 - teardown # Looks like you failed 5 tests of 52. %SYSTEM-F-ABORT, abort %SYSTEM-F-ABORT, abort dubious Test returned status 44 (wstat 1024, 0x400) (VMS status is 44) DIED. FAILED tests 35, 39-41, 46 Failed 5/52 tests, 90.38% okay t/installapi2...... 1..70 ok 1 - use ExtUtils::Install; ok 2 - main->can('install') ok 3 - main->can('uninstall') ok 4 - main->can('pm_to_blib') ok 5 - main->can('install_default') ok 6 - setup ok 7 - pm_to_blib created blib dir ok 8 - copied .pm file ok 9 - created autosplit dir ok 10 ok 11 - second run, blib dir still there ok 12 - .pm file still there ok 13 - autosplit still there ok 14 ok 15 - install made dir (dry run) ok 16 - .pm file installed (dry run) ok 17 - packlist exists (dry run) ok 18 - install made dir ok 19 - .pm file installed ok 20 - ignored .SKIP file ok 21 - packlist exists ok 22 ok 23 - packlist written ok 24 - install made other dir ok 25 - .pm file installed ok 26 - packlist exists ok 27 - UNINST=1 preserved same ok 28 - different install exists ok 29 - install made other dir ok 30 - .pm file installed ok 31 - packlist exists ok 32 - UNINST=0 left different ok 33 - different install exists ok 34 - we didnt die not ok 35 - we did warn # Failed test ' we did warn' # in t/installapi2.t at line 145. ok 36 - install made other dir ok 37 - .pm file installed ok 38 - packlist exists not ok 39 - UNINST=1 failed to remove different # Failed test ' UNINST=1 failed to remove different' # in t/installapi2.t at line 149. not ok 40 - different install exists # Failed test 'different install exists' # in t/installapi2.t at line 159. not ok 41 - we did die # Failed test ' we did die' # in t/installapi2.t at line 169. ok 42 - we didnt warn ok 43 - install made other dir ok 44 - .pm file installed ok 45 - packlist exists not ok 46 - UNINST=1 failed to remove different # Failed test ' UNINST=1 failed to remove different' # in t/installapi2.t at line 174. not ok 47 - different install exists # Failed test 'different install exists' # in t/installapi2.t at line 181. ok 48 - install made other dir ok 49 - .pm file installed ok 50 - packlist exists ok 51 - UNINST=1 removed different ok 52 - install file already exists ok 53 - source file already exists ok 54 - Times are different ok 55 - install made other dir ok 56 - .pm file installed ok 57 - packlist exists not ok 58 - Times are same # Failed test ' Times are same' # in t/installapi2.t at line 211. ok 59 - $result{install_unchanged} should be empty ok 60 - install file already exists ok 61 - source file already exists ok 62 - Times are different ok 63 - install made other dir ok 64 - .pm file installed ok 65 - packlist exists ok 66 - Times are different ok 67 - nothing should have been installed ok 68 - install_unchanged should be populated ok 69 ok 70 - teardown # Looks like you failed 7 tests of 70. %SYSTEM-F-ABORT, abort %SYSTEM-F-ABORT, abort dubious Test returned status 44 (wstat 1024, 0x400) (VMS status is 44) DIED. FAILED tests 35, 39-41, 46-47, 58 Failed 7/70 tests, 90.00% okay t/packlist......... 1..34 ok 1 - use ExtUtils::Packlist; ok 2 - mkfh() should return a FH ok 3 - The object isa ExtUtils::Packlist ok 4 - obj should be tied underneath ok 5 - TIEHASH() should bless into class ok 6 - TIEHASH() should store packfile name ok 7 - STORE() should stuff stuff in data member ok 8 - check FETCH() ok 9 - FIRSTKEY() should be consistent ok 10 - and NEXTKEY() should also be consistent ok 11 - EXISTS() should find keys ok 12 - DELETE() should delete cleanly ok 13 - CLEAR() should wipe out data ok 14 - ExtUtils::Packlist->can('DESTROY') ok 15 - write() should croak without packfile ok 16 - write() can write a file ok 17 - write() should croak on open failure ok 18 - write() should normally succeed ok 19 - write() should set packfile name ok 20 - read() should croak without packfile ok 21 - read() should croak with bad packfile name ok 22 - key with value should be available ok 23 - key with no value should also be present ok 24 - key with hash value should be present ok 25 - second embedded hash value should appear ok 26 - read() should normally succeed ok 27 - single keys should have undef value ok 28 - multivalue keys should become hashes ok 29 - hash values should be set ok 30 - read() should resolve /./ to / in keys ok 31 - validate() should find missing files ok 32 - validate() should remove missing files when prompted ok 33 - packlist_file() should fetch packlist from passed hash ok 34 - packlist_file() should fetch packlist from ExtUtils::Packlist object ok t/pod-coverage..... 1..0 # Skip Skipping author tests. Set AUTHOR_TESTING=1 to run them. skipped all skipped: Skipping author tests. Set AUTHOR_TESTING=1 to run them. t/pod.............. 1..0 # Skip Test::Pod 1.14 required for testing POD skipped all skipped: Test::Pod 1.14 required for testing POD Failed Test Stat Wstat Total Fail List of Failed ----------------------------------------------------------------------- -------- t/can_write_dir.t 44 1024 12 1 4 t/install.t 44 1024 52 5 35 39-41 46 t/installapi2.t 44 1024 70 7 35 39-41 46-47 58 2 tests and 30 subtests skipped. Failed 3/7 test scripts. 13/223 subtests failed. Files=7, Tests=223, 129 wallclock secs ( 0.00 cusr + 0.00 csys = 0.00 CPU) Failed 3/7 test programs. 13/223 subtests failed. %SYSTEM-F-ABORT, abort %MMK-F-ERRUPD, error status %X0000002C occurred when updating target TEST_DYNAMIC
Subject: [PATCH] can_write_dir fix (was 1.50 has 3 failures on VMS)
From: cberry@cpan.org
On Fri Mar 14 14:32:12 2008, CBERRY wrote:
Show quoted text
> t/can_write_dir.... > ok 1 > ok 2 > ok 3 > > not ok 4 > # Failed test at t/can_write_dir.t line 29. > # Structures begin differing at: > # $got->[0] = '0' > # $expected->[0] = '1' > ok 5 > ok 6 > ok 7 > ok 8 > ok 9 > ok 10 > ok 11 > ok 12 > 1..12 > # Looks like you failed 1 test of 12.
The attached fixes the can_write_dir problem. It essentially rolls back (for VMS only) a change that was made in I think the 1.44 --> 1.45 update. When you call catdir on VMS, you get a relative path. Passing that to catpath does not de-relativize it, so you end up with a nonsense path. This may be a bug in File::Spec, but not a recent one, so I think we're stuck with working around it. No joy yet on the other failures.
--- lib/ExtUtils/Install.pm;-0 Mon Mar 10 10:54:40 2008 +++ lib/ExtUtils/Install.pm Tue Mar 18 12:41:05 2008 @@ -403,9 +403,14 @@ sub _can_write_dir { my $path=''; my @make; while (@dirs) { - $dir = File::Spec->catdir(@dirs); - $dir = File::Spec->catpath($vol,$dir,'') - if defined $vol and length $vol; + if ($Is_VMS) { + $dir = File::Spec->catdir($vol,@dirs); + } + else { + $dir = File::Spec->catdir(@dirs); + $dir = File::Spec->catpath($vol,$dir,'') + if defined $vol and length $vol; + } next if ( $dir eq $path ); if ( ! -e $dir ) { unshift @make,$dir;
From: cberry@cpan.org
On Wed Mar 19 08:14:33 2008, CBERRY wrote:
Show quoted text
> No joy yet on the other failures.
Finally got the other problems licked -- patch attached. It was mostly the usual suspects such as case sensitive comparisons of filespecs that may or may not be case preserved.
--- lib/ExtUtils/Install.pm;-0 Mon Mar 10 10:54:40 2008 +++ lib/ExtUtils/Install.pm Sun Mar 23 19:33:48 2008 @@ -248,8 +248,9 @@ sub _unlink_or_rename { #XXX OS-SPECIFIC my ( $file, $tryhard, $installing )= @_; _chmod( 0666, $file ); - unlink $file - and return $file; + my $unlink_count = 0; + while (unlink $file) { $unlink_count++; } + return $file if $unlink_count > 0; my $error="$!"; _choke("Cannot unlink '$file': $!") @@ -403,9 +404,14 @@ sub _can_write_dir { my $path=''; my @make; while (@dirs) { - $dir = File::Spec->catdir(@dirs); - $dir = File::Spec->catpath($vol,$dir,'') - if defined $vol and length $vol; + if ($Is_VMS) { + $dir = File::Spec->catdir($vol,@dirs); + } + else { + $dir = File::Spec->catdir(@dirs); + $dir = File::Spec->catpath($vol,$dir,'') + if defined $vol and length $vol; + } next if ( $dir eq $path ); if ( ! -e $dir ) { unshift @make,$dir; @@ -1039,7 +1045,7 @@ sub inc_uninstall { #warn join "\n","---",@dirs,"---"; my $seen_ours; foreach $dir ( @dirs ) { - my $canonpath = File::Spec->canonpath($dir); + my $canonpath = $Is_VMS ? $dir : File::Spec->canonpath($dir); next if $canonpath eq $Curdir; next if $seen_dir{$canonpath}++; my $targetfile = File::Spec->catfile($canonpath,$libdir,$file); @@ -1077,7 +1083,7 @@ sub inc_uninstall { eval { die "Fake die for testing" if $ExtUtils::Install::Testing and - File::Spec->canonpath($ExtUtils::Install::Testing) eq $targetfile; + ucase(File::Spec->canonpath($ExtUtils::Install::Testing)) eq ucase($targetfile); forceunlink($targetfile,'tryhard'); $results->{uninstall}{$targetfile} = $filepath; 1; @@ -1224,7 +1230,8 @@ sub DESTROY { } $plural = $i>1 ? "all those files" : "this file"; my $inst = (_invokant() eq 'ExtUtils::MakeMaker') - ? ( $Config::Config{make} || 'make' ).' install UNINST=1' + ? ( $Config::Config{make} || 'make' ).' install' + . ( $Is_VMS ? '/MACRO="UNINST"=1' : ' UNINST=1' ) : './Build install uninst=1'; print "## Running '$inst' will unlink $plural for you.\n"; } --- t/Installapi2.t;-0 Mon Mar 10 10:54:41 2008 +++ t/Installapi2.t Sun Mar 23 22:44:30 2008 @@ -208,7 +208,10 @@ close DUMMY; ok( -d 'install-test/other_lib/perl', 'install made other dir' ); ok( -r 'install-test/other_lib/perl/Big/Dummy.pm', ' .pm file installed' ); ok( -r 'install-test/packlist', ' packlist exists' ); - ok( (stat $tfile)[9]==(stat$sfile)[9],' Times are same'); +SKIP: { + skip "Times not preserved during copy by default", 1 if $^O eq 'VMS'; + ok( (stat $tfile)[9]==(stat $sfile)[9],' Times are same'); +} ok( !$result{install_unchanged},' $result{install_unchanged} should be empty'); } # Test nothing is copied. @@ -232,4 +235,4 @@ close DUMMY; ok( (stat $tfile)[9]!=(stat$sfile)[9],' Times are different'); ok( !$result{install},' nothing should have been installed'); ok( $result{install_unchanged},' install_unchanged should be populated'); -} \ No newline at end of file +}
On Mon Mar 24 00:14:33 2008, CBERRY wrote:
Show quoted text
> > Finally got the other problems licked -- patch attached.
Forgot to mention that the second patch was cumulative and included the can_write_dir patch posted previously.
I think this is resolved by applying the changes from the bleadperl release. Please advise if it is not fixed in 1.50_04


This service runs on Request Tracker, is sponsored by The Perl Foundation, and maintained by Best Practical Solutions.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.