At 5:35 PM -0600 1/26/06, Ken Williams wrote: >On Jan 26, 2006, at 11:45 AM, Craig A. Berry wrote: >>The pathname is ok. The test can't find it because it really doesn't >>exist because it got deleted by DistGen->clean(), which doesn't >>recognize it as one of the directories in its cache of directory >>names. The basic issues revolve around VMS filespec idiosyncracies. >>For example, we'll have to call splitpath before splitdir if we want >>the device name to be separated from the first directory name: >> >>$ perl -e "use File::Spec; print join('|', >>File::Spec->splitdir('DEV:[foo.bar]'));" >>DEV:[foo|bar >>$ perl -e "use File::Spec; print join('|', >>File::Spec->splitpath('DEV:[foo.bar]'));" >>DEV:|[foo.bar]| > > >How's the following patch look for this issue? > >Index: t/lib/DistGen.pm >=================================================================== >RCS file: /cvsroot/module-build/Module-Build/t/lib/DistGen.pm,v >retrieving revision 1.15 >diff -u -r1.15 DistGen.pm >--- t/lib/DistGen.pm 4 Dec 2005 08:48:09 -0000 1.15 >+++ t/lib/DistGen.pm 26 Jan 2006 23:34:39 -0000
After applying that and turning on verbosity, I'm seeing: $ perl [-.lib.module.build.t]tilde.t 1..11 Changed file 't/basic.t'. Changed file 'lib/Simple.pm'. Changed file 'Build.PL'. Removing '[]/build.pl' Removing '[]/manifest.' Removing '[]/lib/simple.pm' Removing '[]/lib' Removing '[]/t/basic.t' Removing '[]/t' Removing '[]/[]' Can't cd to D0:[CRAIG.perl.t._tmp.Simple]: no such file or directory # No tests run! We're tripping over the particular sequence in which filenames (or their component parts) are converted to and from native syntax inside of File::Find. After applying the following (which would have to be made VMS-specific and may not be the best solution anyway): --- distgen.pm;-1 Thu Jan 26 18:51:59 2006 +++ distgen.pm Thu Jan 26 18:59:40 2006 @@ -303,7 +303,7 @@ sub clean { print "Removing '$name'\n" if $VERBOSE; File::Path::rmtree( $_ ); } - }, File::Spec->curdir ); + }, './' ); chdir( $here ); } [end] I then get $ perl [-.lib.module.build.t]tilde.t 1..11 Changed file 't/basic.t'. Changed file 'lib/Simple.pm'. Changed file 'Build.PL'. Removing 'build.pl' Removing 'manifest.' Removing '[.lib]simple.pm' Removing 'lib' Removing 't' Removing '[]' Can't cd to D0:[CRAIG.perl.t._tmp.Simple]: no such file or directory # No tests run! So now we're getting to the problem that was Yitzchak's first theory, namely that it's a case problem, more specifically, the case-leveled names returned from File::Find do not match the case-preserved names in the hash, so we delete the files because they are not recognized. One way to deal with this would be to acquire or build a case-tolerant tied hash and use one of those instead of an ordinary hash. Basically when you look up a case-preserved name in the hash and it doesn't match, it will then look up a case-leveled version for you. Schwern suggested this solution a long time ago for ExtUtils::Manifest::manifind() and it's still needed there, so perhaps we could put such a package in a place where both MM and MB can use it. I think there are a couple of implementations on CPAN . -- ________________________________________ Craig A. Berry mailto:[EMAIL PROTECTED] "... getting out of a sonnet is much more difficult than getting in." Brad Leithauser