Help ExtUtils::Manifest deal with VMS extended filespecs.
authorCraig A. Berry <craigberry@mac.com>
Fri, 15 Feb 2013 00:03:10 +0000 (18:03 -0600)
committerCraig A. Berry <craigberry@mac.com>
Fri, 15 Feb 2013 03:41:20 +0000 (21:41 -0600)
For one thing, if we're cleaning up filenames, lets put that code
in the sub called 'clean_up_filename' rather than in manifind.  And
since the language of the MANIFEST is really Unix-format filespecs,
convert to those.  This becomes especially important in handling
extended filespecs because unixification also unescapes escaped
characters.

dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm
dist/ExtUtils-Manifest/t/Manifest.t

index 3918db9..5bcd6d6 100644 (file)
@@ -13,7 +13,7 @@ use vars qw($VERSION @ISA @EXPORT_OK
           $Is_MacOS $Is_VMS $Is_VMS_mode $Is_VMS_lc $Is_VMS_nodot
           $Debug $Verbose $Quiet $MANIFEST $DEFAULT_MSKIP);
 
-$VERSION = '1.62';
+$VERSION = '1.63';
 @ISA=('Exporter');
 @EXPORT_OK = qw(mkmanifest
                 manicheck  filecheck  fullcheck  skipcheck
@@ -161,6 +161,14 @@ sub clean_up_filename {
   my $filename = shift;
   $filename =~ s|^\./||;
   $filename =~ s/^:([^:]+)$/$1/ if $Is_MacOS;
+  if ( $Is_VMS ) {
+      $filename =~ s/\.$//;                           # trim trailing dot
+      $filename = VMS::Filespec::unixify($filename);  # unescape spaces, etc.
+      if( $Is_VMS_lc ) {
+          $filename = lc($filename);
+          $filename = uc($filename) if $filename =~ /^MANIFEST(\.SKIP)?$/i;
+      }
+  }
   return $filename;
 }
 
@@ -182,12 +190,6 @@ sub manifind {
        my $name = clean_up_filename($File::Find::name);
        warn "Debug: diskfile $name\n" if $Debug;
        return if -d $_;
-
-        $name =~ s/\.$// if $Is_VMS;
-        if( $Is_VMS_lc ) {
-            $name = lc($name);
-            $name = uc($name) if $name =~ /^MANIFEST(\.SKIP)?$/i;
-        }
        $found->{$name} = "";
     };
 
index ba51f56..a6a89a2 100644 (file)
@@ -44,7 +44,7 @@ my %Files;
 sub add_file {
     my ($file, $data) = @_;
     $data ||= 'foo';
-    $file =~ s/ /^_/g if $Is_VMS; # escape spaces
+    $file =~ s/ /^_/g if $Is_VMS_noefs; # escape spaces
     1 while unlink $file;  # or else we'll get multiple versions on VMS
     open( T, '> '.$file) or return;
     print T $data;