With the attached changes to DistGen, we can actually run all the tests,
and with the changes to Module::Build::Base, we get one step closer to
doing some basic things like running Perl one-liners. After this and the
CBuilder patch just posted, I get the following Module::Build results:

Failed 9/20 test scripts, 55.00% okay. 139/603 subtests failed, 76.95% okay.

which is a lot better than the 17/20 before the patch. Obviously there
is quite a bit more to do, though.
--- lib/Module/Build/Base.pm;-0 Sun Mar 12 07:50:59 2006
+++ lib/Module/Build/Base.pm    Sun Mar 12 16:00:58 2006
@@ -315,9 +315,22 @@ sub cwd {
   return Cwd::cwd();
 }
 
+sub _quote_args {
+    my ($self, $arglist) = @_;
+
+    my $return_args = '';
+    my @args = ( ref($arglist) ? @$arglist : (split /\s+/, $arglist) );
+    for (@args) {
+       $return_args .= q( ").$_.q(") if !/^\"/ && length($_) > 0;
+    }
+    return $return_args;
+}
+
 sub _perl_is_same {
   my ($self, $perl) = @_;
-  return `$perl -MConfig=myconfig -e print -e myconfig` eq Config->myconfig;
+  my $argstr = '-MConfig=myconfig -e print -e myconfig';
+  $argstr = $self->_quote_args($argstr) if $self->os_type eq 'VMS';
+  return `$perl $argstr` eq Config->myconfig;
 }
 
 sub find_perl_interpreter {
@@ -2015,7 +2028,7 @@ sub process_script_files {
   
   foreach my $file (keys %$files) {
     my $result = $self->copy_if_modified($file, $script_dir, 'flatten') or 
next;
-    $self->fix_shebang_line($result);
+    $self->fix_shebang_line($result) unless $self->os_type eq 'VMS';
     $self->make_executable($result);
   }
 }
@@ -2102,6 +2115,7 @@ sub _find_file_by_type {
 
 sub localize_file_path {
   my ($self, $path) = @_;
+  $path =~ s/\.\z// if $self->os_type eq 'VMS';
   return File::Spec->catfile( split m{/}, $path );
 }
 
@@ -3632,6 +3646,7 @@ sub run_perl_command {
   # this before documenting.
   my ($self, $args) = @_;
   $args = [ $self->split_like_shell($args) ] unless ref($args);
+  $args = [ split(/\s+/, $self->_quote_args($args)) ] if $self->os_type eq 
'VMS';
   my $perl = ref($self) ? $self->perl : $self->find_perl_interpreter;
 
   # Make sure our local additions to @INC are propagated to the subprocess
--- lib/Module/Build/t/lib/DistGen.pm;-0        Mon Mar  6 10:12:13 2006
+++ lib/Module/Build/t/lib/DistGen.pm   Sun Mar 12 14:11:56 2006
@@ -16,6 +16,14 @@ use File::Spec ();
 use IO::File ();
 use Tie::CPHash;
 
+BEGIN {
+    if( $^O eq 'VMS' ) {
+        # For things like vmsify()
+        require VMS::Filespec;
+        VMS::Filespec->import;
+    }
+}
+
 sub new {
   my $package = shift;
   my %options = @_;
@@ -309,7 +317,11 @@ sub clean {
   File::Find::finddepth( sub {
     my $name = File::Spec->canonpath( $File::Find::name );
 
-    $name =~ s/\.\z// if $^O eq 'VMS';
+    if ($^O eq 'VMS') {
+        $name =~ s/\.\z//;
+        $name = vmspath($name) if -d $name;
+        $name = File::Spec->rel2abs($name) if $name eq File::Spec->curdir();
+    }
 
     if ( not exists $names{$name} ) {
       print "Removing '$name'\n" if $VERBOSE;
@@ -322,7 +334,7 @@ sub clean {
 
 sub remove {
   my $self = shift;
-  File::Path::rmtree( $self->dirname );
+  File::Path::rmtree( File::Spec->canonpath($self->dirname) );
 }
 
 sub revert {

Reply via email to