This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
: ExtUtils::MM_* and File::Spec
authorDave Rolsky <autarch@urth.org>
Mon, 24 Dec 2001 13:27:23 +0000 (07:27 -0600)
committerJarkko Hietaniemi <jhi@iki.fi>
Mon, 24 Dec 2001 22:58:18 +0000 (22:58 +0000)
Message-ID: <Pine.LNX.4.43.0112241305020.21723-100000@urth.org>

p4raw-id: //depot/perl@13880

MANIFEST
lib/ExtUtils/MM_Cygwin.pm
lib/ExtUtils/MM_NW5.pm
lib/ExtUtils/MM_OS2.pm
lib/ExtUtils/MM_Unix.pm
lib/ExtUtils/MM_VMS.pm
lib/ExtUtils/MM_Win32.pm
lib/File/Spec.pm
lib/File/Spec/Cygwin.pm [new file with mode: 0644]
lib/File/Spec/NW5.pm [new file with mode: 0644]
lib/File/Spec/Win32.pm

index 6c21ada..f7ca02c 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -982,6 +982,8 @@ lib/File/Spec.pm            portable operations on file names
 lib/File/Spec/Epoc.pm          portable operations on EPOC file names
 lib/File/Spec/Functions.pm     Function interface to File::Spec object methods
 lib/File/Spec/Mac.pm           portable operations on Mac file names
+lib/File/Spec/Cygwin.pm                portable operations on Cygwin file names
+lib/File/Spec/NW5.pm           portable operations on NetWare file names
 lib/File/Spec/OS2.pm           portable operations on OS2 file names
 lib/File/Spec/t/Functions.t     See if File::Spec::Functions works
 lib/File/Spec/t/rel2abs2rel.t   See if File::Spec->rel2abs/abs2rel works
index 45833ca..3d03d32 100644 (file)
@@ -12,12 +12,13 @@ require Exporter;
 require ExtUtils::MakeMaker;
 ExtUtils::MakeMaker->import(qw( $Verbose &neatvalue));
 
+use File::Spec;
+
 unshift @MM::ISA, 'ExtUtils::MM_Cygwin';
 
 sub canonpath {
-    my($self,$path) = @_;
-    $path =~ s|\\|/|g;
-    return $self->ExtUtils::MM_Unix::canonpath($path);
+    shift;
+    return File::Spec->canonpath(@_);
 }
 
 sub cflags {
@@ -46,9 +47,9 @@ sub manifypods {
     my($dist);
     my($pod2man_exe);
     if (defined $self->{PERL_SRC}) {
-        $pod2man_exe = $self->catfile($self->{PERL_SRC},'pod','pod2man');
+        $pod2man_exe = File::Spec->catfile($self->{PERL_SRC},'pod','pod2man');
     } else {
-        $pod2man_exe = $self->catfile($Config{scriptdirexp},'pod2man');
+        $pod2man_exe = File::Spec->catfile($Config{scriptdirexp},'pod2man');
     }
     unless ($self->perl_script($pod2man_exe)) {
         # No pod2man but some MAN3PODS to be installed
index c4b1be9..59080df 100644 (file)
@@ -133,8 +133,8 @@ sub maybe_command {
 }
 
 sub file_name_is_absolute {
-    my($self,$file) = @_;
-    $file =~ m{^([a-z]:)?[\\/]}i ;
+    shift;
+    return File::Spec->file_name_is_absolute(@_);
 }
 
 sub find_perl {
@@ -151,12 +151,12 @@ in these dirs:
        next unless defined $dir; # $self->{PERL_SRC} may be undefined
        foreach $name (@$names){
            my ($abs, $val);
-           if ($self->file_name_is_absolute($name)) { # /foo/bar
+           if (File::Spec->file_name_is_absolute($name)) { # /foo/bar
                $abs = $name;
-           } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # foo
-               $abs = $self->catfile($dir, $name);
+           } elsif (File::Spec->canonpath($name) eq File::Spec->canonpath(basename($name))) { # foo
+               $abs = File::Spec->catfile($dir, $name);
            } else { # foo/bar
-               $abs = $self->canonpath($self->catfile($self->curdir, $name));
+               $abs = File::Spec->canonpath(File::Spec->catfile($self->curdir, $name));
            }
            print "Checking $abs\n" if ($trace >= 2);
            next unless $self->maybe_command($abs);
@@ -175,14 +175,8 @@ in these dirs:
 }
 
 sub catdir {
-    my $self = shift;
-    my @args = @_;
-    for (@args) {
-       # append a slash to each argument unless it has one there
-       $_ .= "\\" if $_ eq '' or substr($_,-1) ne "\\";
-    }
-    my $result = $self->canonpath(join('', @args));
-    $result;
+    shift;
+    return File::Spec->catdir(@_);
 }
 
 =item catfile
@@ -193,13 +187,8 @@ complete path ending with a filename
 =cut
 
 sub catfile {
-    my $self = shift @_;
-    my $file = pop @_;
-    return $file unless @_;
-    my $dir = $self->catdir(@_);
-    $dir =~ s/(\\\.)$//;
-    $dir .= "\\" unless substr($dir,length($dir)-1,1) eq "\\";
-    return $dir.$file;
+    shift;
+    return File::Spec->catfile(@_);
 }
 
 sub init_others
@@ -403,11 +392,11 @@ CONFIGDEP = \$(PERL_ARCHLIB)\\Config.pm \$(PERL_INC)\\config.h
     my @parentdir = split(/::/, $self->{PARENT_NAME});
     push @m, q{
 # Where to put things:
-INST_LIBDIR      = }. $self->catdir('$(INST_LIB)',@parentdir)        .q{
-INST_ARCHLIBDIR  = }. $self->catdir('$(INST_ARCHLIB)',@parentdir)    .q{
+INST_LIBDIR      = }. File::Spec->catdir('$(INST_LIB)',@parentdir)        .q{
+INST_ARCHLIBDIR  = }. File::Spec->catdir('$(INST_ARCHLIB)',@parentdir)    .q{
 
-INST_AUTODIR     = }. $self->catdir('$(INST_LIB)','auto','$(FULLEXT)')       .q{
-INST_ARCHAUTODIR = }. $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)')   .q{
+INST_AUTODIR     = }. File::Spec->catdir('$(INST_LIB)','auto','$(FULLEXT)')       .q{
+INST_ARCHAUTODIR = }. File::Spec->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)')   .q{
 };
 
     if ($self->has_link_code()) {
@@ -450,11 +439,7 @@ PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
 
 
 sub path {
-    my($self) = @_;
-    my $path = $ENV{'PATH'} || $ENV{'Path'} || $ENV{'path'};
-    my @path = split(';',$path);
-    foreach(@path) { $_ = '.' if $_ eq '' }
-    @path;
+    return File::Spec->path();
 }
 
 =item static_lib (o)
@@ -688,7 +673,7 @@ destination and autosplits them. See L<ExtUtils::Install/DESCRIPTION>
 
 sub pm_to_blib {
     my $self = shift;
-    my($autodir) = $self->catdir('$(INST_LIB)','auto');
+    my($autodir) = File::Spec->catdir('$(INST_LIB)','auto');
     return q{
 pm_to_blib: $(TO_INST_PM)
        }.$self->{NOECHO}.q{$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
@@ -922,9 +907,9 @@ sub htmlifypods {
     my($dist);
     my($pod2html_exe);
     if (defined $self->{PERL_SRC}) {
-       $pod2html_exe = $self->catfile($self->{PERL_SRC},'pod','pod2html');
+       $pod2html_exe = File::Spec->catfile($self->{PERL_SRC},'pod','pod2html');
     } else {
-       $pod2html_exe = $self->catfile($Config{scriptdirexp},'pod2html');
+       $pod2html_exe = File::Spec->catfile($Config{scriptdirexp},'pod2html');
     }
     unless ($pod2html_exe = $self->perl_script($pod2html_exe)) {
        # No pod2html but some HTMLxxxPODS to be installed
index a4bcf73..f598c71 100644 (file)
@@ -12,6 +12,8 @@ require Exporter;
 require ExtUtils::MakeMaker;
 ExtUtils::MakeMaker->import(qw( $Verbose &neatvalue));
 
+use File::Spec;
+
 unshift @MM::ISA, 'ExtUtils::MM_OS2';
 
 =pod
@@ -110,8 +112,8 @@ sub maybe_command {
 }
 
 sub file_name_is_absolute {
-    my($self,$file) = @_;
-    $file =~ m{^([a-z]:)?[\\/]}i ;
+    shift;
+    return File::Spec->file_name_is_absolute(@_);
 }
 
 sub perl_archive
index 0efe2d8..b8bfe14 100644 (file)
@@ -5,6 +5,7 @@ use strict;
 use Exporter ();
 use Config;
 use File::Basename qw(basename dirname fileparse);
+use File::Spec;
 use DirHandle;
 use strict;
 our ($Is_Mac,$Is_OS2,$Is_VMS,$Is_Win32,$Is_Dos,
@@ -105,13 +106,8 @@ trailing slash :-)
 # ';
 
 sub catdir {
-    my $self = shift @_;
-    my @args = @_;
-    for (@args) {
-       # append a slash to each argument unless it has one there
-       $_ .= "/" if $_ eq '' or substr($_,-1) ne "/";
-    }
-    $self->canonpath(join('', @args));
+    shift;
+    return File::Spec->catdir(@_);
 }
 
 =item catfile
@@ -122,14 +118,8 @@ complete path ending with a filename
 =cut
 
 sub catfile {
-    my $self = shift @_;
-    my $file = pop @_;
-    return $self->canonpath($file) unless @_;
-    my $dir = $self->catdir(@_);
-    for ($dir) {
-       $_ .= "/" unless substr($_,length($_)-1,1) eq "/";
-    }
-    return $self->canonpath($dir.$file);
+    shift;
+    return File::Spec->catdir(@_);
 }
 
 =item curdir
@@ -139,7 +129,7 @@ Returns a string representing of the current directory.  "." on UNIX.
 =cut
 
 sub curdir {
-    return "." ;
+    return File::Spec->curdir();
 }
 
 =item rootdir
@@ -149,7 +139,7 @@ Returns a string representing of the root directory.  "/" on UNIX.
 =cut
 
 sub rootdir {
-    return "/";
+    return File::Spec->rootdir();
 }
 
 =item updir
@@ -159,7 +149,7 @@ Returns a string representing of the parent directory.  ".." on UNIX.
 =cut
 
 sub updir {
-    return "..";
+    return File::Spec->updir();
 }
 
 sub c_o;
@@ -652,11 +642,11 @@ CONFIGDEP = \$(PERL_ARCHLIB)/Config.pm \$(PERL_INC)/config.h
     my @parentdir = split(/::/, $self->{PARENT_NAME});
     push @m, q{
 # Where to put things:
-INST_LIBDIR      = }. $self->catdir('$(INST_LIB)',@parentdir)        .q{
-INST_ARCHLIBDIR  = }. $self->catdir('$(INST_ARCHLIB)',@parentdir)    .q{
+INST_LIBDIR      = }. File::Spec->catdir('$(INST_LIB)',@parentdir)        .q{
+INST_ARCHLIBDIR  = }. File::Spec->catdir('$(INST_ARCHLIB)',@parentdir)    .q{
 
-INST_AUTODIR     = }. $self->catdir('$(INST_LIB)','auto','$(FULLEXT)')       .q{
-INST_ARCHAUTODIR = }. $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)')   .q{
+INST_AUTODIR     = }. File::Spec->catdir('$(INST_LIB)','auto','$(FULLEXT)')       .q{
+INST_ARCHAUTODIR = }. File::Spec->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)')   .q{
 };
 
     if ($self->has_link_code()) {
@@ -739,8 +729,8 @@ sub dir_target {
     my($self,@dirs) = @_;
     my(@m,$dir,$targdir);
     foreach $dir (@dirs) {
-       my($src) = $self->catfile($self->{PERL_INC},'perl.h');
-       my($targ) = $self->catfile($dir,'.exists');
+       my($src) = File::Spec->catfile($self->{PERL_INC},'perl.h');
+       my($targ) = File::Spec->catfile($dir,'.exists');
        # catfile may have adapted syntax of $dir to target OS, so...
        if ($Is_VMS) { # Just remove file name; dirspec is often in macro
            ($targdir = $targ) =~ s:/?\.exists\z::;
@@ -1152,13 +1142,8 @@ Takes as argument a path and returns true, if it is an absolute path.
 =cut
 
 sub file_name_is_absolute {
-    my($self,$file) = @_;
-    if ($Is_Dos){
-        $file =~ m{^([a-z]:)?[\\/]}is ;
-    }
-    else {
-        $file =~ m:^/:s ;
-    }
+    shift;
+    return File::Spec->file_name_is_absolute(@_);
 }
 
 =item find_perl
@@ -1181,12 +1166,12 @@ in these dirs:
        foreach $dir (@$dirs){
            next unless defined $dir; # $self->{PERL_SRC} may be undefined
            my ($abs, $val);
-           if ($self->file_name_is_absolute($name)) { # /foo/bar
+           if (File::Spec->file_name_is_absolute($name)) { # /foo/bar
                $abs = $name;
-           } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # foo
-               $abs = $self->catfile($dir, $name);
+           } elsif (File::Spec->canonpath($name) eq File::Spec->canonpath(basename($name))) { # foo
+               $abs = File::Spec->catfile($dir, $name);
            } else { # foo/bar
-               $abs = $self->canonpath($self->catfile($self->curdir, $name));
+               $abs = File::Spec->canonpath(File::Spec->catfile(File::Spec->curdir, $name));
            }
            print "Checking $abs\n" if ($trace >= 2);
            next unless $self->maybe_command($abs);
@@ -1243,13 +1228,13 @@ sub fixin { # stolen from the pink Camel book, more or less
                 $interpreter = $Config{perlpath};
             }
        } else {
-           my(@absdirs) = reverse grep {$self->file_name_is_absolute} $self->path;
+           my(@absdirs) = reverse grep {File::Spec->file_name_is_absolute} File::Spec->path;
            $interpreter = '';
            my($dir);
            foreach $dir (@absdirs) {
                if ($self->maybe_command($cmd)) {
                    warn "Ignoring $interpreter in $file\n" if $Verbose && $interpreter;
-                   $interpreter = $self->catfile($dir,$cmd);
+                   $interpreter = File::Spec->catfile($dir,$cmd);
                }
            }
        }
@@ -1384,9 +1369,9 @@ sub htmlifypods {
     my($dist);
     my($pod2html_exe);
     if (defined $self->{PERL_SRC}) {
-       $pod2html_exe = $self->catfile($self->{PERL_SRC},'pod','pod2html');
+       $pod2html_exe = File::Spec->catfile($self->{PERL_SRC},'pod','pod2html');
     } else {
-       $pod2html_exe = $self->catfile($Config{scriptdirexp},'pod2html');
+       $pod2html_exe = File::Spec->catfile($Config{scriptdirexp},'pod2html');
     }
     unless ($pod2html_exe = $self->perl_script($pod2html_exe)) {
        # No pod2html but some HTMLxxxPODS to be installed
@@ -1432,13 +1417,13 @@ sub init_dirscan {      # --- File and Directory Lists (.xs .pm .pod etc)
     local(%pm); #the sub in find() has to see this hash
     @ignore{qw(Makefile.PL test.pl)} = (1,1);
     $ignore{'makefile.pl'} = 1 if $Is_VMS;
-    foreach $name ($self->lsdir($self->curdir)){
+    foreach $name ($self->lsdir(File::Spec->curdir)){
        next if $name =~ /\#/;
-       next if $name eq $self->curdir or $name eq $self->updir or $ignore{$name};
+       next if $name eq File::Spec->curdir or $name eq File::Spec->updir or $ignore{$name};
        next unless $self->libscan($name);
        if (-d $name){
            next if -l $name; # We do not support symlinks at all
-           $dir{$name} = $name if (-f $self->catfile($name,"Makefile.PL"));
+           $dir{$name} = $name if (-f File::Spec->catfile($name,"Makefile.PL"));
        } elsif ($name =~ /\.xs\z/){
            my($c); ($c = $name) =~ s/\.xs\z/.c/;
            $xs{$name} = $c;
@@ -1457,9 +1442,9 @@ sub init_dirscan {        # --- File and Directory Lists (.xs .pm .pod etc)
            if ($txt =~ /Extracting \S+ \(with variable substitutions/) {
                ($pl_files{$name} = $name) =~ s/[._]pl\z//i ;
            }
-           else { $pm{$name} = $self->catfile('$(INST_LIBDIR)',$name); }
+           else { $pm{$name} = File::Spec->catfile('$(INST_LIBDIR)',$name); }
        } elsif ($name =~ /\.(p[ml]|pod)\z/){
-           $pm{$name} = $self->catfile('$(INST_LIBDIR)',$name);
+           $pm{$name} = File::Spec->catfile('$(INST_LIBDIR)',$name);
        }
     }
 
@@ -1519,7 +1504,7 @@ sub init_dirscan {        # --- File and Directory Lists (.xs .pm .pod etc)
            my($striplibpath,$striplibname);
            $prefix =  '$(INST_LIB)' if (($striplibpath = $path) =~ s:^(\W*)lib\W:$1:i);
            ($striplibname,$striplibpath) = fileparse($striplibpath);
-           my($inst) = $self->catfile($prefix,$striplibpath,$striplibname);
+           my($inst) = File::Spec->catfile($prefix,$striplibpath,$striplibname);
            local($_) = $inst; # for backwards compatibility
            $inst = $self->libscan($inst);
            print "libscan($path) => '$inst'\n" if ($Verbose >= 2);
@@ -1566,11 +1551,11 @@ sub init_dirscan {      # --- File and Directory Lists (.xs .pm .pod etc)
                next unless $ispod;
                if ($pods{HTMLSCRIPT}) {
                    $self->{HTMLSCRIPTPODS}->{$name} =
-                     $self->catfile("\$(INST_HTMLSCRIPTDIR)", basename($name).".\$(HTMLEXT)");
+                     File::Spec->catfile("\$(INST_HTMLSCRIPTDIR)", basename($name).".\$(HTMLEXT)");
                }
                if ($pods{MAN1}) {
                    $self->{MAN1PODS}->{$name} =
-                     $self->catfile("\$(INST_MAN1DIR)", basename($name).".\$(MAN1EXT)");
+                     File::Spec->catfile("\$(INST_MAN1DIR)", basename($name).".\$(MAN1EXT)");
                }
            }
        }
@@ -1612,15 +1597,15 @@ sub init_dirscan {      # --- File and Directory Lists (.xs .pm .pod etc)
            $manpagename =~ s/\.p(od|m|l)\z//;
            if ($pods{HTMLLIB}) {
                $self->{HTMLLIBPODS}->{$name} =
-                 $self->catfile("\$(INST_HTMLLIBDIR)", "$manpagename.\$(HTMLEXT)");
+                 File::Spec->catfile("\$(INST_HTMLLIBDIR)", "$manpagename.\$(HTMLEXT)");
            }
            unless ($manpagename =~ s!^\W*lib\W+!!s) { # everything below lib is ok
-               $manpagename = $self->catfile(split(/::/,$self->{PARENT_NAME}),$manpagename);
+               $manpagename = File::Spec->catfile(split(/::/,$self->{PARENT_NAME}),$manpagename);
            }
            if ($pods{MAN3}) {
                $manpagename = $self->replace_manpage_separator($manpagename);
                $self->{MAN3PODS}->{$name} =
-                 $self->catfile("\$(INST_MAN3DIR)", "$manpagename.\$(MAN3EXT)");
+                 File::Spec->catfile("\$(INST_MAN3DIR)", "$manpagename.\$(MAN3EXT)");
            }
        }
     }
@@ -1648,7 +1633,7 @@ sub init_main {
 ### Only UNIX:
 ###    ($self->{FULLEXT} =
 ###     $self->{NAME}) =~ s!::!/!g ; #eg. BSD/Foo/Socket
-    $self->{FULLEXT} = $self->catdir(split /::/, $self->{NAME});
+    $self->{FULLEXT} = File::Spec->catdir(split /::/, $self->{NAME});
 
 
     # Copied from DynaLoader:
@@ -1687,13 +1672,13 @@ sub init_main {
 
     unless ($self->{PERL_SRC}){
        my($dir);
-       foreach $dir ($self->updir(),$self->catdir($self->updir(),$self->updir()),$self->catdir($self->updir(),$self->updir(),$self->updir()),$self->catdir($self->updir(),$self->updir(),$self->updir(),$self->updir())){
+       foreach $dir (File::Spec->updir(),File::Spec->catdir(File::Spec->updir(),File::Spec->updir()),File::Spec->catdir(File::Spec->updir(),File::Spec->updir(),File::Spec->updir()),File::Spec->catdir(File::Spec->updir(),File::Spec->updir(),File::Spec->updir(),File::Spec->updir())){
            if (
-               -f $self->catfile($dir,"config.sh")
+               -f File::Spec->catfile($dir,"config.sh")
                &&
-               -f $self->catfile($dir,"perl.h")
+               -f File::Spec->catfile($dir,"perl.h")
                &&
-               -f $self->catfile($dir,"lib","Exporter.pm")
+               -f File::Spec->catfile($dir,"lib","Exporter.pm")
               ) {
                $self->{PERL_SRC}=$dir ;
                last;
@@ -1701,17 +1686,17 @@ sub init_main {
        }
     }
     if ($self->{PERL_SRC}){
-       $self->{PERL_LIB}     ||= $self->catdir("$self->{PERL_SRC}","lib");
+       $self->{PERL_LIB}     ||= File::Spec->catdir("$self->{PERL_SRC}","lib");
        $self->{PERL_ARCHLIB} = $self->{PERL_LIB};
-       $self->{PERL_INC}     = ($Is_Win32) ? $self->catdir($self->{PERL_LIB},"CORE") : $self->{PERL_SRC};
+       $self->{PERL_INC}     = ($Is_Win32) ? File::Spec->catdir($self->{PERL_LIB},"CORE") : $self->{PERL_SRC};
 
        # catch a situation that has occurred a few times in the past:
        unless (
-               -s $self->catfile($self->{PERL_SRC},'cflags')
+               -s File::Spec->catfile($self->{PERL_SRC},'cflags')
                or
                $Is_VMS
                &&
-               -s $self->catfile($self->{PERL_SRC},'perlshr_attr.opt')
+               -s File::Spec->catfile($self->{PERL_SRC},'perlshr_attr.opt')
                or
                $Is_Mac
                or
@@ -1736,21 +1721,21 @@ from the perl source tree.
         my $old = $self->{PERL_LIB} || $self->{PERL_ARCHLIB} || $self->{PERL_INC};
        $self->{PERL_LIB}     ||= $Config::Config{privlibexp};
        $self->{PERL_ARCHLIB} ||= $Config::Config{archlibexp};
-       $self->{PERL_INC}     = $self->catdir("$self->{PERL_ARCHLIB}","CORE"); # wild guess for now
+       $self->{PERL_INC}     = File::Spec->catdir("$self->{PERL_ARCHLIB}","CORE"); # wild guess for now
        my $perl_h;
 
        no warnings 'uninitialized' ;
-       if (not -f ($perl_h = $self->catfile($self->{PERL_INC},"perl.h"))
+       if (not -f ($perl_h = File::Spec->catfile($self->{PERL_INC},"perl.h"))
            and not $old){
            # Maybe somebody tries to build an extension with an
            # uninstalled Perl outside of Perl build tree
            my $found;
            for my $dir (@INC) {
-             $found = $dir, last if -e $self->catdir($dir, "Config.pm");
+             $found = $dir, last if -e File::Spec->catdir($dir, "Config.pm");
            }
            if ($found) {
              my $inc = dirname $found;
-             if (-e $self->catdir($inc, "perl.h")) {
+             if (-e File::Spec->catdir($inc, "perl.h")) {
                $self->{PERL_LIB}          = $found;
                $self->{PERL_ARCHLIB}      = $found;
                $self->{PERL_INC}          = $inc;
@@ -1798,22 +1783,22 @@ usually solves this kind of problem.
        if (defined $self->{PERL_SRC} and $self->{INSTALLDIRS} eq "perl") {
            $self->{INST_LIB} = $self->{INST_ARCHLIB} = $self->{PERL_LIB};
        } else {
-           $self->{INST_LIB} = $self->catdir($self->curdir,"blib","lib");
+           $self->{INST_LIB} = File::Spec->catdir(File::Spec->curdir,"blib","lib");
        }
     }
-    $self->{INST_ARCHLIB} ||= $self->catdir($self->curdir,"blib","arch");
-    $self->{INST_BIN} ||= $self->catdir($self->curdir,'blib','bin');
+    $self->{INST_ARCHLIB} ||= File::Spec->catdir(File::Spec->curdir,"blib","arch");
+    $self->{INST_BIN} ||= File::Spec->catdir(File::Spec->curdir,'blib','bin');
 
     # We need to set up INST_LIBDIR before init_libscan() for VMS
     my @parentdir = split(/::/, $self->{PARENT_NAME});
-    $self->{INST_LIBDIR} = $self->catdir('$(INST_LIB)',@parentdir);
-    $self->{INST_ARCHLIBDIR} = $self->catdir('$(INST_ARCHLIB)',@parentdir);
-    $self->{INST_AUTODIR} = $self->catdir('$(INST_LIB)','auto','$(FULLEXT)');
-    $self->{INST_ARCHAUTODIR} = $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)');
+    $self->{INST_LIBDIR} = File::Spec->catdir('$(INST_LIB)',@parentdir);
+    $self->{INST_ARCHLIBDIR} = File::Spec->catdir('$(INST_ARCHLIB)',@parentdir);
+    $self->{INST_AUTODIR} = File::Spec->catdir('$(INST_LIB)','auto','$(FULLEXT)');
+    $self->{INST_ARCHAUTODIR} = File::Spec->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)');
 
     # INST_EXE is deprecated, should go away March '97
-    $self->{INST_EXE} ||= $self->catdir($self->curdir,'blib','script');
-    $self->{INST_SCRIPT} ||= $self->catdir($self->curdir,'blib','script');
+    $self->{INST_EXE} ||= File::Spec->catdir(File::Spec->curdir,'blib','script');
+    $self->{INST_SCRIPT} ||= File::Spec->catdir(File::Spec->curdir,'blib','script');
 
     # The user who requests an installation directory explicitly
     # should not have to tell us an architecture installation directory
@@ -1902,14 +1887,14 @@ usually solves this kind of problem.
            $self->prefixify($install_variable,$search_prefix,$replace_prefix);
        }
     }
-    my $funkymandir = $self->catdir($configure_prefix,"lib","perl5","man");
+    my $funkymandir = File::Spec->catdir($configure_prefix,"lib","perl5","man");
     $funkymandir = '' unless -d $funkymandir;
-    $search_prefix = $funkymandir || $self->catdir($configure_prefix,"man");
-    if (-d $self->catdir($self->{PREFIX},"lib","perl5", "man")) {
-       $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"lib", "perl5", "man");
+    $search_prefix = $funkymandir || File::Spec->catdir($configure_prefix,"man");
+    if (-d File::Spec->catdir($self->{PREFIX},"lib","perl5", "man")) {
+       $replace_prefix = File::Spec->catdir(qq[\$\(PREFIX\)],"lib", "perl5", "man");
     }
     else {
-       $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"man");
+       $replace_prefix = File::Spec->catdir(qq[\$\(PREFIX\)],"man");
     }
     for $install_variable (qw/
                           INSTALLMAN1DIR
@@ -1927,7 +1912,7 @@ usually solves this kind of problem.
        if ($self->{INSTALLMAN1DIR} =~ /^(none|\s*)$/){
            $self->{INST_MAN1DIR} = $self->{INSTALLMAN1DIR};
        } else {
-           $self->{INST_MAN1DIR} = $self->catdir($self->curdir,'blib','man1');
+           $self->{INST_MAN1DIR} = File::Spec->catdir(File::Spec->curdir,'blib','man1');
        }
     }
     $self->{MAN1EXT} ||= $Config::Config{man1ext};
@@ -1938,7 +1923,7 @@ usually solves this kind of problem.
        if ($self->{INSTALLMAN3DIR} =~ /^(none|\s*)$/){
            $self->{INST_MAN3DIR} = $self->{INSTALLMAN3DIR};
        } else {
-           $self->{INST_MAN3DIR} = $self->catdir($self->curdir,'blib','man3');
+           $self->{INST_MAN3DIR} = File::Spec->catdir(File::Spec->curdir,'blib','man3');
        }
     }
     $self->{MAN3EXT} ||= $Config::Config{man3ext};
@@ -1952,7 +1937,7 @@ usually solves this kind of problem.
        if ($self->{INSTALLHTMLSITELIBDIR} =~ /^(none|\s*)$/){
            $self->{INST_HTMLLIBDIR} = $self->{INSTALLHTMLSITELIBDIR};
        } else {
-           $self->{INST_HTMLLIBDIR} = $self->catdir($self->curdir,'blib','html','lib');
+           $self->{INST_HTMLLIBDIR} = File::Spec->catdir(File::Spec->curdir,'blib','html','lib');
        }
     }
 
@@ -1962,7 +1947,7 @@ usually solves this kind of problem.
        if ($self->{INSTALLHTMLSCRIPTDIR} =~ /^(none|\s*)$/){
            $self->{INST_HTMLSCRIPTDIR} = $self->{INSTALLHTMLSCRIPTDIR};
        } else {
-           $self->{INST_HTMLSCRIPTDIR} = $self->catdir($self->curdir,'blib','html','bin');
+           $self->{INST_HTMLSCRIPTDIR} = File::Spec->catdir(File::Spec->curdir,'blib','html','bin');
        }
     }
     $self->{HTMLEXT} ||= $Config::Config{htmlext} || 'html';
@@ -2004,7 +1989,7 @@ usually solves this kind of problem.
     # make a simple check if we find Exporter
     warn "Warning: PERL_LIB ($self->{PERL_LIB}) seems not to be a perl library directory
         (Exporter.pm not found)"
-       unless -f $self->catfile("$self->{PERL_LIB}","Exporter.pm") ||
+       unless -f File::Spec->catfile("$self->{PERL_LIB}","Exporter.pm") ||
         $self->{NAME} eq "ExtUtils::MakeMaker";
 
     # Determine VERSION and VERSION_FROM
@@ -2185,8 +2170,8 @@ doc__install : doc_site_install
 
 pure_perl_install ::
        }.$self->{NOECHO}.q{$(MOD_INSTALL) \
-               read }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
-               write }.$self->catfile('$(INSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
+               read }.File::Spec->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
+               write }.File::Spec->catfile('$(INSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
                $(INST_LIB) $(INSTALLPRIVLIB) \
                $(INST_ARCHLIB) $(INSTALLARCHLIB) \
                $(INST_BIN) $(INSTALLBIN) \
@@ -2196,13 +2181,13 @@ pure_perl_install ::
                $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
                $(INST_MAN3DIR) $(INSTALLMAN3DIR)
        }.$self->{NOECHO}.q{$(WARN_IF_OLD_PACKLIST) \
-               }.$self->catdir('$(SITEARCHEXP)','auto','$(FULLEXT)').q{
+               }.File::Spec->catdir('$(SITEARCHEXP)','auto','$(FULLEXT)').q{
 
 
 pure_site_install ::
        }.$self->{NOECHO}.q{$(MOD_INSTALL) \
-               read }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
-               write }.$self->catfile('$(INSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
+               read }.File::Spec->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
+               write }.File::Spec->catfile('$(INSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
                $(INST_LIB) $(INSTALLSITELIB) \
                $(INST_ARCHLIB) $(INSTALLSITEARCH) \
                $(INST_BIN) $(INSTALLBIN) \
@@ -2212,7 +2197,7 @@ pure_site_install ::
                $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
                $(INST_MAN3DIR) $(INSTALLMAN3DIR)
        }.$self->{NOECHO}.q{$(WARN_IF_OLD_PACKLIST) \
-               }.$self->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
+               }.File::Spec->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
 
 doc_perl_install ::
        -}.$self->{NOECHO}.q{$(MKPATH) $(INSTALLARCHLIB)
@@ -2222,7 +2207,7 @@ doc_perl_install ::
                LINKTYPE "$(LINKTYPE)" \
                VERSION "$(VERSION)" \
                EXE_FILES "$(EXE_FILES)" \
-               >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
+               >> }.File::Spec->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
 
 doc_site_install ::
        -}.$self->{NOECHO}.q{$(MKPATH) $(INSTALLARCHLIB)
@@ -2232,7 +2217,7 @@ doc_site_install ::
                LINKTYPE "$(LINKTYPE)" \
                VERSION "$(VERSION)" \
                EXE_FILES "$(EXE_FILES)" \
-               >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
+               >> }.File::Spec->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
 
 };
 
@@ -2241,11 +2226,11 @@ uninstall :: uninstall_from_$(INSTALLDIRS)dirs
 
 uninstall_from_perldirs ::
        }.$self->{NOECHO}.
-       q{$(UNINSTALL) }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{
+       q{$(UNINSTALL) }.File::Spec->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{
 
 uninstall_from_sitedirs ::
        }.$self->{NOECHO}.
-       q{$(UNINSTALL) }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{
+       q{$(UNINSTALL) }.File::Spec->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{
 };
 
     join("",@m);
@@ -2264,7 +2249,7 @@ sub installbin {
     my(@m, $from, $to, %fromto, @to);
     push @m, $self->dir_target(qw[$(INST_SCRIPT)]);
     for $from (@{$self->{EXE_FILES}}) {
-       my($path)= $self->catfile('$(INST_SCRIPT)', basename($from));
+       my($path)= File::Spec->catfile('$(INST_SCRIPT)', basename($from));
        local($_) = $path; # for backwards compatibility
        $to = $self->libscan($path);
        print "libscan($from) => '$to'\n" if ($Verbose >=2);
@@ -2291,7 +2276,7 @@ realclean ::
        last unless defined $from;
        my $todir = dirname($to);
        push @m, "
-$to: $from $self->{MAKEFILE} " . $self->catdir($todir,'.exists') . "
+$to: $from $self->{MAKEFILE} " . File::Spec->catdir($todir,'.exists') . "
        $self->{NOECHO}$self->{RM_F} $to
        $self->{CP} $from $to
        \$(FIXIN) $to
@@ -2594,7 +2579,7 @@ doc_inst_perl:
                MAP_STATIC "$(MAP_STATIC)" \
                MAP_EXTRA "`cat $(INST_ARCHAUTODIR)/extralibs.all`" \
                MAP_LIBPERL "$(MAP_LIBPERL)" \
-               >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
+               >> }.File::Spec->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
 
 };
 
@@ -2602,7 +2587,7 @@ doc_inst_perl:
 inst_perl: pure_inst_perl doc_inst_perl
 
 pure_inst_perl: $(MAP_TARGET)
-       }.$self->{CP}.q{ $(MAP_TARGET) }.$self->catfile('$(INSTALLBIN)','$(MAP_TARGET)').q{
+       }.$self->{CP}.q{ $(MAP_TARGET) }.File::Spec->catfile('$(INSTALLBIN)','$(MAP_TARGET)').q{
 
 clean :: map_clean
 
@@ -2666,13 +2651,13 @@ sub manifypods {
     my($dist);
     my($pod2man_exe);
     if (defined $self->{PERL_SRC}) {
-       $pod2man_exe = $self->catfile($self->{PERL_SRC},'pod','pod2man');
+       $pod2man_exe = File::Spec->catfile($self->{PERL_SRC},'pod','pod2man');
     } else {
-       $pod2man_exe = $self->catfile($Config{scriptdirexp},'pod2man');
+       $pod2man_exe = File::Spec->catfile($Config{scriptdirexp},'pod2man');
     }
     unless ($pod2man_exe = $self->perl_script($pod2man_exe)) {
       # Maybe a build by uninstalled Perl?
-      $pod2man_exe = $self->catfile($self->{PERL_INC}, "pod", "pod2man");
+      $pod2man_exe = File::Spec->catfile($self->{PERL_INC}, "pod", "pod2man");
     }
     unless ($pod2man_exe = $self->perl_script($pod2man_exe)) {
        # No pod2man but some MAN3PODS to be installed
@@ -2731,12 +2716,12 @@ sub maybe_command_in_dirs {     # $ver is optional argument if looking for perl
        next unless defined $dir; # $self->{PERL_SRC} may be undefined
        foreach $name (@$names){
            my($abs,$tryabs);
-           if ($self->file_name_is_absolute($name)) { # /foo/bar
+           if (File::Spec->file_name_is_absolute($name)) { # /foo/bar
                $abs = $name;
-           } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # bar
-               $abs = $self->catfile($dir, $name);
+           } elsif (File::Spec->canonpath($name) eq File::Spec->canonpath(basename($name))) { # bar
+               $abs = File::Spec->catfile($dir, $name);
            } else { # foo/bar
-               $abs = $self->catfile($self->curdir, $name);
+               $abs = File::Spec->catfile(File::Spec->curdir, $name);
            }
            print "Checking $abs for $name\n" if ($trace >= 2);
            next unless $tryabs = $self->maybe_command($abs);
@@ -2900,13 +2885,7 @@ Takes no argument, returns the environment variable PATH as an array.
 =cut
 
 sub path {
-    my($self) = @_;
-    my $path_sep = ($Is_OS2 || $Is_Dos) ? ";" : ":";
-    my $path = $ENV{PATH};
-    $path =~ s:\\:/:g if $Is_OS2;
-    my @path = split $path_sep, $path;
-    foreach(@path) { $_ = '.' if $_ eq '' }
-    @path;
+    return File::Spec->path();
 }
 
 =item perl_script
@@ -3108,7 +3087,7 @@ q{        }.$self->{NOECHO}.q[$(PERLRUNINST) -MExtUtils::Install \
 
 sub pm_to_blib {
     my $self = shift;
-    my($autodir) = $self->catdir('$(INST_LIB)','auto');
+    my($autodir) = File::Spec->catdir('$(INST_LIB)','auto');
     my $r = q{
 pm_to_blib: $(TO_INST_PM)
 };
@@ -3377,7 +3356,7 @@ sub staticmake {
     # And as it's not yet built, we add the current extension
     # but only if it has some C code (or XS code, which implies C code)
     if (@{$self->{C}}) {
-       @static = $self->catfile($self->{INST_ARCHLIB},
+       @static = File::Spec->catfile($self->{INST_ARCHLIB},
                                 "auto",
                                 $self->{FULLEXT},
                                 "$self->{BASEEXT}$self->{LIB_EXT}"
@@ -3648,8 +3627,8 @@ Determines typemaps, xsubpp version, prototype behaviour.
 sub tool_xsubpp {
     my($self) = shift;
     return "" unless $self->needs_linking;
-    my($xsdir)  = $self->catdir($self->{PERL_LIB},"ExtUtils");
-    my(@tmdeps) = $self->catdir('$(XSUBPPDIR)','typemap');
+    my($xsdir)  = File::Spec->catdir($self->{PERL_LIB},"ExtUtils");
+    my(@tmdeps) = File::Spec->catdir('$(XSUBPPDIR)','typemap');
     if( $self->{TYPEMAPS} ){
        my $typemap;
        foreach $typemap (@{$self->{TYPEMAPS}}){
@@ -3668,7 +3647,7 @@ sub tool_xsubpp {
     }
 
 
-    my $xsubpp_version = $self->xsubpp_version($self->catfile($xsdir,"xsubpp"));
+    my $xsubpp_version = $self->xsubpp_version(File::Spec->catfile($xsdir,"xsubpp"));
 
     # What are the correct thresholds for version 1 && 2 Paul?
     if ( $xsubpp_version > 1.923 ){
index a3b236a..fc05da2 100644 (file)
@@ -19,7 +19,6 @@ our($Revision, @ISA, $VERSION, $Verbose);
 # All on one line so MakeMaker can see it.
 ($VERSION) = ($Revision = '5.56 (27-Apr-1999)') =~ /^([\d.]+)/;
 
-@ISA = qw( File::Spec );
 unshift @MM::ISA, 'ExtUtils::MM_VMS';
 
 require ExtUtils::MakeMaker;
@@ -74,7 +73,7 @@ Returns a string representing of the root directory.
 =cut
 
 sub rootdir {
-    return '';
+    return File::Spec->rootdir();'
 }
 
 package ExtUtils::MM_VMS;
@@ -241,8 +240,8 @@ sub find_perl {
     local *TCF;
     # Check in relative directories first, so we pick up the current
     # version of Perl if we're running MakeMaker as part of the main build.
-    @sdirs = sort { my($absa) = $self->file_name_is_absolute($a);
-                    my($absb) = $self->file_name_is_absolute($b);
+    @sdirs = sort { my($absa) = File::Spec->file_name_is_absolute($a);
+                    my($absb) = File::Spec->file_name_is_absolute($b);
                     if ($absa && $absb) { return $a cmp $b }
                     else { return $absa ? 1 : ($absb ? -1 : ($a cmp $b)); }
                   } @$dirs;
@@ -268,7 +267,7 @@ sub find_perl {
     }
     foreach $dir (@sdirs){
        next unless defined $dir; # $self->{PERL_SRC} may be undefined
-       $inabs++ if $self->file_name_is_absolute($dir);
+       $inabs++ if File::Spec->file_name_is_absolute($dir);
        if ($inabs == 1) {
            # We've covered relative dirs; everything else is an absolute
            # dir (probably an installed location).  First, we'll try potential
@@ -277,7 +276,7 @@ sub find_perl {
            $inabs++; # Should happen above in next $dir, but just in case . . .
        }
        foreach $name (@snames){
-           if ($name !~ m![/:>\]]!) { push(@cand,$self->catfile($dir,$name)); }
+           if ($name !~ m![/:>\]]!) { push(@cand,File::Spec->catfile($dir,$name)); }
            else                     { push(@cand,$self->fixpath($name,0));    }
        }
     }
@@ -322,9 +321,7 @@ to C<split> string value of C<$ENV{'PATH'}>.
 =cut
 
 sub path {
-    my(@dirs,$dir,$i);
-    while ($dir = $ENV{'DCL$PATH;' . $i++}) { push(@dirs,$dir); }
-    @dirs;
+    return File::Spec->path();
 }
 
 =item maybe_command (override)
@@ -374,10 +371,10 @@ sub maybe_command_in_dirs {       # $ver is optional argument if looking for perl
        next unless defined $dir; # $self->{PERL_SRC} may be undefined
        foreach $name (@$names){
            my($abs,$tryabs);
-           if ($self->file_name_is_absolute($name)) {
+           if (File::Spec->file_name_is_absolute($name)) {
                $abs = $name;
            } else {
-               $abs = $self->catfile($dir, $name);
+               $abs = File::Spec->catfile($dir, $name);
            }
            print "Checking $abs for $name\n" if ($trace >= 2);
            next unless $tryabs = $self->maybe_command($abs);
@@ -420,10 +417,8 @@ Checks for VMS directory spec as well as Unix separators.
 =cut
 
 sub file_name_is_absolute {
-    my($self,$file) = @_;
-    # If it's a logical name, expand it.
-    $file = $ENV{$file} while $file =~ /^[\w\$\-]+$/ and $ENV{$file};
-    $file =~ m!^/! or $file =~ m![<\[][^.\-\]>]! or $file =~ /:[^<\[]/;
+    shift;
+    return File::Spec->file_name_is_absolute(@_);
 }
 
 =item replace_manpage_separator
@@ -520,7 +515,7 @@ sub constants {
        next unless defined $self->{$macro};
        $self->{$macro} = $self->fixpath($self->{$macro},1);
     }
-    $self->{PERL_VMS} = $self->catdir($self->{PERL_SRC},q(VMS))
+    $self->{PERL_VMS} = File::Spec->catdir($self->{PERL_SRC},q(VMS))
        if ($self->{PERL_SRC});
                         
 
@@ -552,7 +547,7 @@ DEFINE_VERSION = "$(VERSION_MACRO)=""$(VERSION)"""
 XS_VERSION_MACRO = XS_VERSION
 XS_DEFINE_VERSION = "$(XS_VERSION_MACRO)=""$(XS_VERSION)"""
 
-MAKEMAKER = ],$self->catfile($self->{PERL_LIB},'ExtUtils','MakeMaker.pm'),qq[
+MAKEMAKER = ],File::Spec->catfile($self->{PERL_LIB},'ExtUtils','MakeMaker.pm'),qq[
 MM_VERSION = $ExtUtils::MakeMaker::VERSION
 MM_REVISION = $ExtUtils::MakeMaker::Revision
 MM_VMS_REVISION = $ExtUtils::MM_VMS::Revision
@@ -808,7 +803,7 @@ command line to find args.
 sub pm_to_blib {
     my($self) = @_;
     my($line,$from,$to,@m);
-    my($autodir) = $self->catdir('$(INST_LIB)','auto');
+    my($autodir) = File::Spec->catdir('$(INST_LIB)','auto');
     my(@files) = @{$self->{PM_TO_BLIB}};
 
     push @m, q{
@@ -867,9 +862,9 @@ Use VMS-style quoting on xsubpp command line.
 sub tool_xsubpp {
     my($self) = @_;
     return '' unless $self->needs_linking;
-    my($xsdir) = $self->catdir($self->{PERL_LIB},'ExtUtils');
+    my($xsdir) = File::Spec->catdir($self->{PERL_LIB},'ExtUtils');
     # drop back to old location if xsubpp is not in new location yet
-    $xsdir = $self->catdir($self->{PERL_SRC},'ext') unless (-f $self->catfile($xsdir,'xsubpp'));
+    $xsdir = File::Spec->catdir($self->{PERL_SRC},'ext') unless (-f File::Spec->catfile($xsdir,'xsubpp'));
     my(@tmdeps) = '$(XSUBPPDIR)typemap';
     if( $self->{TYPEMAPS} ){
        my $typemap;
@@ -893,7 +888,7 @@ sub tool_xsubpp {
         (!exists($self->{XSOPT}) || $self->{XSOPT} !~ /linenumbers/)) {
         unshift(@tmargs,'-nolinenumbers');
     }
-    my $xsubpp_version = $self->xsubpp_version($self->catfile($xsdir,'xsubpp'));
+    my $xsubpp_version = $self->xsubpp_version(File::Spec->catfile($xsdir,'xsubpp'));
 
     # What are the correct thresholds for version 1 && 2 Paul?
     if ( $xsubpp_version > 1.923 ){
@@ -1371,9 +1366,9 @@ sub manifypods {
     my($dist);
     my($pod2man_exe);
     if (defined $self->{PERL_SRC}) {
-       $pod2man_exe = $self->catfile($self->{PERL_SRC},'pod','pod2man');
+       $pod2man_exe = File::Spec->catfile($self->{PERL_SRC},'pod','pod2man');
     } else {
-       $pod2man_exe = $self->catfile($Config{scriptdirexp},'pod2man');
+       $pod2man_exe = File::Spec->catfile($Config{scriptdirexp},'pod2man');
     }
     if (not ($pod2man_exe = $self->perl_script($pod2man_exe))) {
        # No pod2man but some MAN3PODS to be installed
@@ -1551,7 +1546,7 @@ clean ::
        }
     }
     push(@otherfiles, qw[ blib $(MAKE_APERL_FILE) extralibs.ld perlmain.c pm_to_blib.ts ]);
-    push(@otherfiles,$self->catfile('$(INST_ARCHAUTODIR)','extralibs.all'));
+    push(@otherfiles,File::Spec->catfile('$(INST_ARCHAUTODIR)','extralibs.all'));
     my($file,$line);
     $line = '';  #avoid unitialized var warning
     # Occasionally files are repeated several times from different sources
@@ -1792,8 +1787,8 @@ doc__install : doc_site_install
 
 # This hack brought to you by DCL's 255-character command line limit
 pure_perl_install ::
-       $(NOECHO) $(PERL) -e "print 'read ].$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q[ '" >.MM_tmp
-       $(NOECHO) $(PERL) -e "print 'write ].$self->catfile('$(INSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q[ '" >>.MM_tmp
+       $(NOECHO) $(PERL) -e "print 'read ].File::Spec->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q[ '" >.MM_tmp
+       $(NOECHO) $(PERL) -e "print 'write ].File::Spec->catfile('$(INSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q[ '" >>.MM_tmp
        $(NOECHO) $(PERL) -e "print '$(INST_LIB) $(INSTALLPRIVLIB) '" >>.MM_tmp
        $(NOECHO) $(PERL) -e "print '$(INST_ARCHLIB) $(INSTALLARCHLIB) '" >>.MM_tmp
        $(NOECHO) $(PERL) -e "print '$(INST_BIN) $(INSTALLBIN) '" >>.MM_tmp
@@ -1802,12 +1797,12 @@ pure_perl_install ::
        $(NOECHO) $(PERL) -e "print '$(INST_MAN3DIR) $(INSTALLMAN3DIR) '" >>.MM_tmp
        $(MOD_INSTALL) <.MM_tmp
        $(NOECHO) Delete/NoLog/NoConfirm .MM_tmp;
-       $(NOECHO) $(WARN_IF_OLD_PACKLIST) ].$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q[
+       $(NOECHO) $(WARN_IF_OLD_PACKLIST) ].File::Spec->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q[
 
 # Likewise
 pure_site_install ::
-       $(NOECHO) $(PERL) -e "print 'read ].$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q[ '" >.MM_tmp
-       $(NOECHO) $(PERL) -e "print 'write ].$self->catfile('$(INSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q[ '" >>.MM_tmp
+       $(NOECHO) $(PERL) -e "print 'read ].File::Spec->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q[ '" >.MM_tmp
+       $(NOECHO) $(PERL) -e "print 'write ].File::Spec->catfile('$(INSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q[ '" >>.MM_tmp
        $(NOECHO) $(PERL) -e "print '$(INST_LIB) $(INSTALLSITELIB) '" >>.MM_tmp
        $(NOECHO) $(PERL) -e "print '$(INST_ARCHLIB) $(INSTALLSITEARCH) '" >>.MM_tmp
        $(NOECHO) $(PERL) -e "print '$(INST_BIN) $(INSTALLBIN) '" >>.MM_tmp
@@ -1816,7 +1811,7 @@ pure_site_install ::
        $(NOECHO) $(PERL) -e "print '$(INST_MAN3DIR) $(INSTALLMAN3DIR) '" >>.MM_tmp
        $(MOD_INSTALL) <.MM_tmp
        $(NOECHO) Delete/NoLog/NoConfirm .MM_tmp;
-       $(NOECHO) $(WARN_IF_OLD_PACKLIST) ].$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q[
+       $(NOECHO) $(WARN_IF_OLD_PACKLIST) ].File::Spec->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q[
 
 # Ditto
 doc_perl_install ::
@@ -1827,7 +1822,7 @@ q%        $(NOECHO) $(PERL) -e "print q[@ARGV=split(/\\|/,<STDIN>);]" >.MM2_tmp
        $(NOECHO) $(PERL) -e "print q[print '=head2 ',scalar(localtime),': C<',shift,qq[>\\n\\n=over 4\\n\\n];]" >>.MM2_tmp
        $(NOECHO) $(PERL) -e "print q[while(($key=shift) && ($val=shift)) ]" >>.MM2_tmp
        $(NOECHO) $(PERL) -e "print q[{print qq[=item *\\n\\nC<$key: $val>\\n\\n];}print qq[=back\\n\\n];]" >>.MM2_tmp
-       $(NOECHO) $(PERL) .MM2_tmp <.MM_tmp >>%.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q[
+       $(NOECHO) $(PERL) .MM2_tmp <.MM_tmp >>%.File::Spec->catfile('$(INSTALLARCHLIB)','perllocal.pod').q[
        $(NOECHO) Delete/NoLog/NoConfirm .MM_tmp;,.MM2_tmp;
 
 # And again
@@ -1839,7 +1834,7 @@ q%        $(NOECHO) $(PERL) -e "print q[@ARGV=split(/\\|/,<STDIN>);]" >.MM2_tmp
        $(NOECHO) $(PERL) -e "print q[print '=head2 ',scalar(localtime),': C<',shift,qq[>\\n\\n=over 4\\n\\n];]" >>.MM2_tmp
        $(NOECHO) $(PERL) -e "print q[while(($key=shift) && ($val=shift)) ]" >>.MM2_tmp
        $(NOECHO) $(PERL) -e "print q[{print qq[=item *\\n\\nC<$key: $val>\\n\\n];}print qq[=back\\n\\n];]" >>.MM2_tmp
-       $(NOECHO) $(PERL) .MM2_tmp <.MM_tmp >>%.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q[
+       $(NOECHO) $(PERL) .MM2_tmp <.MM_tmp >>%.File::Spec->catfile('$(INSTALLARCHLIB)','perllocal.pod').q[
        $(NOECHO) Delete/NoLog/NoConfirm .MM_tmp;,.MM2_tmp;
 
 ];
@@ -1849,13 +1844,13 @@ uninstall :: uninstall_from_$(INSTALLDIRS)dirs
        $(NOECHO) $(NOOP)
 
 uninstall_from_perldirs ::
-       $(NOECHO) $(UNINSTALL) ].$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q[
+       $(NOECHO) $(UNINSTALL) ].File::Spec->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q[
        $(NOECHO) $(SAY) "Uninstall is now deprecated and makes no actual changes."
        $(NOECHO) $(SAY) "Please check the list above carefully for errors, and manually remove"
        $(NOECHO) $(SAY) "the appropriate files.  Sorry for the inconvenience."
 
 uninstall_from_sitedirs ::
-       $(NOECHO) $(UNINSTALL) ],$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist'),"\n",q[
+       $(NOECHO) $(UNINSTALL) ],File::Spec->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist'),"\n",q[
        $(NOECHO) $(SAY) "Uninstall is now deprecated and makes no actual changes."
        $(NOECHO) $(SAY) "Please check the list above carefully for errors, and manually remove"
        $(NOECHO) $(SAY) "the appropriate files.  Sorry for the inconvenience."
@@ -2214,15 +2209,15 @@ $(MAP_TARGET) :: $(MAKE_APERL_FILE)
     # that's what we're building here).
     push @optlibs, grep { !/PerlShr/i } split ' ', +($self->ext())[2];
     if ($libperl) {
-       unless (-f $libperl || -f ($libperl = $self->catfile($Config{'installarchlib'},'CORE',$libperl))) {
+       unless (-f $libperl || -f ($libperl = File::Spec->catfile($Config{'installarchlib'},'CORE',$libperl))) {
            print STDOUT "Warning: $libperl not found\n";
            undef $libperl;
        }
     }
     unless ($libperl) {
        if (defined $self->{PERL_SRC}) {
-           $libperl = $self->catfile($self->{PERL_SRC},"libperl$self->{LIB_EXT}");
-       } elsif (-f ($libperl = $self->catfile($Config{'installarchlib'},'CORE',"libperl$self->{LIB_EXT}")) ) {
+           $libperl = File::Spec->catfile($self->{PERL_SRC},"libperl$self->{LIB_EXT}");
+       } elsif (-f ($libperl = File::Spec->catfile($Config{'installarchlib'},'CORE',"libperl$self->{LIB_EXT}")) ) {
        } else {
            print STDOUT "Warning: $libperl not found
     If you're going to build a static perl binary, make sure perl is installed
@@ -2273,9 +2268,9 @@ $(MAP_TARGET) : $(MAP_SHRTARGET) ',"${tmp}perlmain\$(OBJ_EXT) ${tmp}PerlShr.Opt"
 doc_inst_perl :
        $(NOECHO) $(PERL) -e "print 'Perl binary $(MAP_TARGET)|'" >.MM_tmp
        $(NOECHO) $(PERL) -e "print 'MAP_STATIC|$(MAP_STATIC)|'" >>.MM_tmp
-       $(NOECHO) $(PERL) -pl040 -e " " ].$self->catfile('$(INST_ARCHAUTODIR)','extralibs.all'),q[ >>.MM_tmp
+       $(NOECHO) $(PERL) -pl040 -e " " ].File::Spec->catfile('$(INST_ARCHAUTODIR)','extralibs.all'),q[ >>.MM_tmp
        $(NOECHO) $(PERL) -e "print 'MAP_LIBPERL|$(MAP_LIBPERL)|'" >>.MM_tmp
-       $(DOC_INSTALL) <.MM_tmp >>].$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q[
+       $(DOC_INSTALL) <.MM_tmp >>].File::Spec->catfile('$(INSTALLARCHLIB)','perllocal.pod').q[
        $(NOECHO) Delete/NoLog/NoConfirm .MM_tmp;
 ];
 
index 7b5d142..4784249 100644 (file)
@@ -23,6 +23,7 @@ the semantics.
 use Config;
 #use Cwd;
 use File::Basename;
+use File::Spec;
 require Exporter;
 
 require ExtUtils::MakeMaker;
@@ -137,8 +138,8 @@ sub maybe_command {
 }
 
 sub file_name_is_absolute {
-    my($self,$file) = @_;
-    $file =~ m{^([a-z]:)?[\\/]}i ;
+    shift;
+    return File::Spec->file_name_is_absolute(@_);
 }
 
 sub find_perl {
@@ -155,12 +156,12 @@ in these dirs:
        next unless defined $dir; # $self->{PERL_SRC} may be undefined
        foreach $name (@$names){
            my ($abs, $val);
-           if ($self->file_name_is_absolute($name)) { # /foo/bar
+           if (File::Spec->file_name_is_absolute($name)) { # /foo/bar
                $abs = $name;
-           } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # foo
-               $abs = $self->catfile($dir, $name);
+           } elsif (File::Spec->canonpath($name) eq File::Spec->canonpath(basename($name))) { # foo
+               $abs = File::Spec->catfile($dir, $name);
            } else { # foo/bar
-               $abs = $self->canonpath($self->catfile($self->curdir, $name));
+               $abs = File::Spec->canonpath(File::Spec->catfile(File::Spec->curdir, $name));
            }
            print "Checking $abs\n" if ($trace >= 2);
            next unless $self->maybe_command($abs);
@@ -179,14 +180,8 @@ in these dirs:
 }
 
 sub catdir {
-    my $self = shift;
-    my @args = @_;
-    for (@args) {
-       # append a slash to each argument unless it has one there
-       $_ .= "\\" if $_ eq '' or substr($_,-1) ne "\\";
-    }
-    my $result = $self->canonpath(join('', @args));
-    $result;
+    shift;
+    return File::Spec->catdir(@_);
 }
 
 =item catfile
@@ -197,13 +192,8 @@ complete path ending with a filename
 =cut
 
 sub catfile {
-    my $self = shift @_;
-    my $file = pop @_;
-    return $file unless @_;
-    my $dir = $self->catdir(@_);
-    $dir =~ s/(\\\.)$//;
-    $dir .= "\\" unless substr($dir,length($dir)-1,1) eq "\\";
-    return $dir.$file;
+    shift;
+    return File::Spec->catfile(@_);
 }
 
 sub init_others
@@ -347,11 +337,11 @@ CONFIGDEP = \$(PERL_ARCHLIB)\\Config.pm \$(PERL_INC)\\config.h
     my @parentdir = split(/::/, $self->{PARENT_NAME});
     push @m, q{
 # Where to put things:
-INST_LIBDIR      = }. $self->catdir('$(INST_LIB)',@parentdir)        .q{
-INST_ARCHLIBDIR  = }. $self->catdir('$(INST_ARCHLIB)',@parentdir)    .q{
+INST_LIBDIR      = }. File::Spec->catdir('$(INST_LIB)',@parentdir)        .q{
+INST_ARCHLIBDIR  = }. File::Spec->catdir('$(INST_ARCHLIB)',@parentdir)    .q{
 
-INST_AUTODIR     = }. $self->catdir('$(INST_LIB)','auto','$(FULLEXT)')       .q{
-INST_ARCHAUTODIR = }. $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)')   .q{
+INST_AUTODIR     = }. File::Spec->catdir('$(INST_LIB)','auto','$(FULLEXT)')       .q{
+INST_ARCHAUTODIR = }. File::Spec->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)')   .q{
 };
 
     if ($self->has_link_code()) {
@@ -394,11 +384,7 @@ PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
 
 
 sub path {
-    my($self) = @_;
-    my $path = $ENV{'PATH'} || $ENV{'Path'} || $ENV{'path'};
-    my @path = split(';',$path);
-    foreach(@path) { $_ = '.' if $_ eq '' }
-    @path;
+    return File::Spec->path();
 }
 
 =item static_lib (o)
@@ -608,7 +594,7 @@ destination and autosplits them. See L<ExtUtils::Install/DESCRIPTION>
 
 sub pm_to_blib {
     my $self = shift;
-    my($autodir) = $self->catdir('$(INST_LIB)','auto');
+    my($autodir) = File::Spec->catdir('$(INST_LIB)','auto');
     return q{
 pm_to_blib: $(TO_INST_PM)
        }.$self->{NOECHO}.q{$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
@@ -842,9 +828,9 @@ sub htmlifypods {
     my($dist);
     my($pod2html_exe);
     if (defined $self->{PERL_SRC}) {
-       $pod2html_exe = $self->catfile($self->{PERL_SRC},'pod','pod2html');
+       $pod2html_exe = File::Spec->catfile($self->{PERL_SRC},'pod','pod2html');
     } else {
-       $pod2html_exe = $self->catfile($Config{scriptdirexp},'pod2html');
+       $pod2html_exe = File::Spec->catfile($Config{scriptdirexp},'pod2html');
     }
     unless ($pod2html_exe = $self->perl_script($pod2html_exe)) {
        # No pod2html but some HTMLxxxPODS to be installed
index f177f68..9d9d5b6 100644 (file)
@@ -9,9 +9,19 @@ my %module = (MacOS   => 'Mac',
              MSWin32 => 'Win32',
              os2     => 'OS2',
              VMS     => 'VMS',
-             epoc    => 'Epoc');
+             epoc    => 'Epoc',
+             cygwin  => 'Cygwin');
+
 
 my $module = $module{$^O} || 'Unix';
+
+if ($^O eq 'MSWin32') {
+    require Config;
+    if ($Config::Config{osname} eq 'NetWare') {
+       $module = 'NW5';
+    }
+}
+
 require "File/Spec/$module.pm";
 @ISA = ("File::Spec::$module");
 
diff --git a/lib/File/Spec/Cygwin.pm b/lib/File/Spec/Cygwin.pm
new file mode 100644 (file)
index 0000000..23fed18
--- /dev/null
@@ -0,0 +1,35 @@
+package File::Spec::Cygwin;
+
+use strict;
+use vars qw(@ISA $VERSION);
+require File::Spec::Unix;
+
+$VERSION = '1.0';
+
+@ISA = qw(File::Spec::Unix);
+
+sub canonpath {
+    my($self,$path) = @_;
+    $path =~ s|\\|/|g;
+    return $self->SUPER::canonpath($path);
+}
+
+1;
+__END__
+
+=head1 NAME
+
+File::Spec::Cygwin - methods for Cygwin file specs
+
+=head1 SYNOPSIS
+
+ require File::Spec::Cygwin; # Done internally by File::Spec if needed
+
+=head1 DESCRIPTION
+
+See File::Spec::Unix for a documentation of the methods provided
+there. This package overrides the implementation of these methods, not
+the semantics.
+
+This module is still in beta.  Cygwin-knowledgeable folks are invited
+to offer patches and suggestions.
diff --git a/lib/File/Spec/NW5.pm b/lib/File/Spec/NW5.pm
new file mode 100644 (file)
index 0000000..772a93d
--- /dev/null
@@ -0,0 +1,48 @@
+package File::Spec::NW5;
+
+use strict;
+use vars qw(@ISA $VERSION);
+require File::Spec::Win32;
+
+$VERSION = '1.0';
+
+@ISA = qw(File::Spec::Win32);
+
+sub catdir {
+    my $self = shift;
+    my @args = @_;
+    for (@args) {
+       # append a slash to each argument unless it has one there
+       $_ .= "\\" if $_ eq '' or substr($_,-1) ne "\\";
+    }
+    my $result = $self->canonpath(join('', @args));
+    $result;
+}
+
+sub canonpath {
+    my $self = shift;
+    my $path = $self->SUPER::canonpath(@_);
+    $path .= '.' if $path =~ m#\\$#;
+    return $path;
+}
+
+
+1;
+__END__
+
+=head1 NAME
+
+File::Spec::NW5 - methods for NetWare file specs
+
+=head1 SYNOPSIS
+
+ require File::Spec::NW5; # Done internally by File::Spec if needed
+
+=head1 DESCRIPTION
+
+See File::Spec::Win32 and File::Spec::Unix for a documentation of the
+methods provided there. This package overrides the implementation of
+these methods, not the semantics.
+
+This module is still in beta.  NetWare-knowledgeable folks are invited
+to offer patches and suggestions.
index ceebb2d..c2e463b 100644 (file)
@@ -117,11 +117,11 @@ sub canonpath {
     my ($self,$path) = @_;
     $path =~ s/^([a-z]:)/\u$1/s;
     $path =~ s|/|\\|g;
-    $path =~ s|([^\\])\\+|$1\\|g;                  # xx////xx  -> xx/xx
-    $path =~ s|(\\\.)+\\|\\|g;                     # xx/././xx -> xx/xx
-    $path =~ s|^(\.\\)+||s unless $path eq ".\\";  # ./xx      -> xx
+    $path =~ s|([^\\])\\+|$1\\|g;                  # xx\\\\xx  -> xx\xx
+    $path =~ s|(\\\.)+\\|\\|g;                     # xx\.\.\xx -> xx\xx
+    $path =~ s|^(\.\\)+||s unless $path eq ".\\";  # .\xx      -> xx
     $path =~ s|\\\Z(?!\n)||
-             unless $path =~ m#^([A-Z]:)?\\\Z(?!\n)#s;   # xx/       -> xx
+             unless $path =~ m#^([A-Z]:)?\\\Z(?!\n)#s;   # xx\       -> xx
     return $path;
 }