use Carp qw(carp);
use File::Basename ();
use File::Path qw(mkpath);
-use File::Spec::Functions qw(curdir catfile);
+use File::Spec::Functions qw(curdir catfile catdir);
use strict;
our($VERSION, @ISA, @EXPORT, @EXPORT_OK, $Verbose, $Keep, $Maxlen,
$CheckForAutoloader, $CheckModTime);
$def_package or die "Can't find 'package Name;' in $filename\n";
my($modpname) = _modpname($def_package);
- if ($Is_VMS) {
- $modpname = VMS::Filespec::unixify($modpname); # may have dirs
- }
# this _has_ to match so we have a reasonable timestamp file
die "Package $def_package ($modpname.pm) does not ".
}
}
- my($modnamedir) = catfile($autodir, $modpname);
+ my($modnamedir) = catdir($autodir, $modpname);
print "AutoSplitting $filename ($modnamedir)\n"
if $Verbose;
push(@subnames, $fq_subname);
my($lname, $sname) = ($subname, substr($subname,0,$maxflen-3));
$modpname = _modpname($this_package);
- my($modnamedir) = catfile($autodir, $modpname);
+ my($modnamedir) = catdir($autodir, $modpname);
mkpath($modnamedir,0,0777);
my($lpath) = catfile($modnamedir, "$lname.al");
my($spath) = catfile($modnamedir, "$sname.al");
if ($^O eq 'MSWin32') {
$modpname =~ s#::#\\#g;
} else {
- while ($modpname =~ m#(.*?[^:])::([^:].*)#) {
- $modpname = catfile($1, $2);
- }
+ my @modpnames = ();
+ while ($modpname =~ m#(.*?[^:])::([^:].*)#) {
+ push @modpnames, $1;
+ $modpname = $2;
+ }
+ $modpname = catfile(@modpnames, $modpname);
+ }
+ if ($Is_VMS) {
+ $modpname = VMS::Filespec::unixify($modpname); # may have dirs
}
$modpname;
}
return $output;
}
+# Brackets are valid in VMS filespecs and this test puts filespecs
+# into regexes a lot.
+
+sub _escape_brackets {
+ my $str = shift;
+ $str =~ s/\[/\\\[/g;
+ $str =~ s/\]/\\\]/g;
+ return $str;
+}
+
my $i = 0;
-my $dir = File::Spec->catfile($incdir, 'auto');
+my $dir = File::Spec->catdir($incdir, 'auto');
+if ($^O eq 'VMS') {
+ $dir = VMS::Filespec::unixify($dir);
+ $dir =~ s/\/$//;
+}
foreach (@tests) {
my $module = 'A' . $i . '_' . $$ . 'splittest';
my $file = File::Spec->catfile($incdir,"$module.pm");
s/\*INC\*/$incdir/gm;
s/\*DIR\*/$dir/gm;
s/\*MOD\*/$module/gm;
+ s#//#/#gm;
# Build a hash for this test.
my %args = /^\#\#\ ([^\n]*)\n # Key is on a line starting ##
((?:[^\#]+ # Any number of characters not #
$output = split_a_file (undef, $file, $dir, @extra_args);
}
+ if ($^O eq 'VMS') {
+ my ($filespec, $replacement);
+ while ($output =~ m/(\[.+\])/) {
+ $filespec = $1;
+ $replacement = VMS::Filespec::unixify($filespec);
+ $filespec = _escape_brackets($filespec);
+ $replacement =~ s/\/$//;
+ $output =~ s/$filespec/$replacement/;
+ }
+ }
+
# test n+1
is ($output, $args{Get}, "Output from autosplit()ing $args{Name}");
find (sub {$got{$File::Find::name}++ unless -d $_}, $dir);
foreach (split /\n/, $args{Files}) {
next if /^#/;
+ $_ = lc($_) if $^O eq 'VMS';
unless (delete $got{$_}) {
$missing{$_}++;
}
if ($args{Tests}) {
foreach my $code (split /\n/, $args{Tests}) {
next if $code =~ /^\#/;
+ $code =~ s/\[(File::Spec->catfile\(.*\))\]/[_escape_brackets($1)]/ if $^O eq 'VMS';
defined eval $code or fail(), print "# Code: $code\n# Error: $@";
}
}