Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PATCH] Remove EPOC and MacOS Classic support from PathTools #15880

Closed
p5pRT opened this issue Feb 19, 2017 · 17 comments
Closed

[PATCH] Remove EPOC and MacOS Classic support from PathTools #15880

p5pRT opened this issue Feb 19, 2017 · 17 comments

Comments

@p5pRT
Copy link

p5pRT commented Feb 19, 2017

Migrated from rt.perl.org#130818 (status was 'resolved')

Searchable as RT130818$

@p5pRT
Copy link
Author

p5pRT commented Feb 19, 2017

From @xenu

Created by @xenu

perl dropped MacOS classic and EPOC support many years ago. There
is no point in keeping support for them in PathTools.

This change will make any further work on PathTools a bit easier.

Perl Info

Flags:
    category=library
    severity=low
    module=File::Spec

Site configuration information for perl 5.24.1:

Configured by strawberry-perl at Mon Jan 16 02:03:13 2017.

Summary of my perl5 (revision 5 version 24 subversion 1) configuration:
   
  Platform:
    osname=MSWin32, osvers=6.3, archname=MSWin32-x64-multi-thread
    uname='Win32 strawberry-perl 5.24.1.1 #1 Mon Jan 16 02:00:29 2017 x64'
    config_args='undef'
    hint=recommended, useposix=true, d_sigaction=undef
    useithreads=define, usemultiplicity=define
    use64bitint=define, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags =' -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE  -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fwrapv -fno-strict-aliasing -mms-bitfields',
    optimize='-s -O2',
    cppflags='-DWIN32'
    ccversion='', gccversion='4.9.2', gccosandvers=''
    intsize=4, longsize=4, ptrsize=8, doublesize=8, byteorder=12345678, doublekind=3
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16, longdblkind=3
    ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='long long', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='g++', ldflags ='-s -L"C:\STRAWB~1\perl\lib\CORE" -L"C:\STRAWB~1\c\lib"'
    libpth=C:\STRAWB~1\c\lib C:\STRAWB~1\c\x86_64-w64-mingw32\lib C:\STRAWB~1\c\lib\gcc\x86_64-w64-mingw32\4.9.2
    libs=-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
    perllibs=-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
    libc=, so=dll, useshrplib=true, libperl=libperl524.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_win32.xs, dlext=xs.dll, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags='-mdll -s -L"C:\STRAWB~1\perl\lib\CORE" -L"C:\STRAWB~1\c\lib"'



@INC for perl 5.24.1:
    C:/Strawberry/perl/site/lib
    C:/Strawberry/perl/vendor/lib
    C:/Strawberry/perl/lib


Environment for perl 5.24.1:
    HOME (unset)
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=C:\Program Files (x86)\Razer Chroma SDK\bin;C:\Program Files\Razer Chroma SDK\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\system32\config\systemprofile\AppData\Local\Microsoft\WindowsApps;C:\Program Files\Git\cmd;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Users\xenu\AppData\Local\Microsoft\WindowsApps;
    PERL_BADLANG (unset)
    SHELL (unset)

@p5pRT
Copy link
Author

p5pRT commented Feb 19, 2017

From @xenu

the patch is attached

@p5pRT
Copy link
Author

p5pRT commented Feb 19, 2017

From @xenu

remove_epoc_macos.patch
From 71e9d7bdd3ad4046d0dee13d3e7acd82b7a08623 Mon Sep 17 00:00:00 2001
From: Tomasz Konojacki <me@xenu.pl>
Date: Sun, 19 Feb 2017 18:39:39 +0100
Subject: [PATCH] [perl #130818] PathTools - remove EPOC and MacOS classic
 support.

---
 dist/PathTools/Cwd.pm                     |  35 +-
 dist/PathTools/lib/File/Spec.pm           |  17 +-
 dist/PathTools/lib/File/Spec/Epoc.pm      |  79 ---
 dist/PathTools/lib/File/Spec/Functions.pm |   8 +-
 dist/PathTools/lib/File/Spec/Mac.pm       | 786 ------------------------------
 dist/PathTools/t/Spec.t                   | 189 +------
 dist/PathTools/t/crossplatform.t          |   7 +-
 7 files changed, 14 insertions(+), 1107 deletions(-)
 delete mode 100644 dist/PathTools/lib/File/Spec/Epoc.pm
 delete mode 100644 dist/PathTools/lib/File/Spec/Mac.pm

diff --git a/dist/PathTools/Cwd.pm b/dist/PathTools/Cwd.pm
index 362a000e7a..0e0863595b 100644
--- a/dist/PathTools/Cwd.pm
+++ b/dist/PathTools/Cwd.pm
@@ -145,23 +145,6 @@ my %METHOD_MAP =
     realpath		=> 'fast_abs_path',
    },
 
-   epoc =>
-   {
-    cwd			=> '_epoc_cwd',
-    getcwd	        => '_epoc_cwd',
-    fastgetcwd		=> '_epoc_cwd',
-    fastcwd		=> '_epoc_cwd',
-    abs_path		=> 'fast_abs_path',
-   },
-
-   MacOS =>
-   {
-    getcwd		=> 'cwd',
-    fastgetcwd		=> 'cwd',
-    fastcwd		=> 'cwd',
-    abs_path		=> 'fast_abs_path',
-   },
-
    amigaos =>
    {
     getcwd              => '_backtick_pwd',
@@ -254,8 +237,7 @@ unless ($METHOD_MAP{$^O}{cwd} or defined &cwd) {
 	}
     }
 
-    # MacOS has some special magic to make `pwd` work.
-    if( $os eq 'MacOS' || $found_pwd_cmd )
+    if( $found_pwd_cmd )
     {
 	*cwd = \&_backtick_pwd;
     }
@@ -384,9 +366,6 @@ sub chdir {
     if ($^O eq 'VMS') {
 	return $ENV{'PWD'} = $ENV{'DEFAULT'}
     }
-    elsif ($^O eq 'MacOS') {
-	return $ENV{'PWD'} = cwd();
-    }
     elsif ($^O eq 'MSWin32') {
 	$ENV{'PWD'} = $newpwd;
 	return 1;
@@ -676,11 +655,6 @@ sub _qnx_abs_path {
     return $realpath;
 }
 
-sub _epoc_cwd {
-    return $ENV{'PWD'} = EPOC::getcwd();
-}
-
-
 # Now that all the base-level functions are set up, alias the
 # user-level functions to the right places
 
@@ -837,13 +811,6 @@ Since the path separators are different on some operating systems ('/'
 on Unix, ':' on MacPerl, etc...) we recommend you use the File::Spec
 modules wherever portability is a concern.
 
-=item *
-
-Actually, on Mac OS, the C<getcwd()>, C<fastgetcwd()> and C<fastcwd()>
-functions are all aliases for the C<cwd()> function, which, on Mac OS,
-calls `pwd`.  Likewise, the C<abs_path()> function is an alias for
-C<fast_abs_path()>.
-
 =back
 
 =head1 AUTHOR
diff --git a/dist/PathTools/lib/File/Spec.pm b/dist/PathTools/lib/File/Spec.pm
index 85ad17426c..27cf9f069c 100644
--- a/dist/PathTools/lib/File/Spec.pm
+++ b/dist/PathTools/lib/File/Spec.pm
@@ -6,11 +6,9 @@ use vars qw(@ISA $VERSION);
 $VERSION = '3.66';
 $VERSION =~ tr/_//d;
 
-my %module = (MacOS   => 'Mac',
-	      MSWin32 => 'Win32',
+my %module = (MSWin32 => 'Win32',
 	      os2     => 'OS2',
 	      VMS     => 'VMS',
-	      epoc    => 'Epoc',
 	      NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare.
 	      symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian.
 	      dos     => 'OS2',   # Yes, File::Spec::OS2 works on DJGPP.
@@ -57,7 +55,6 @@ Since these functions are different for most operating systems, each set of
 OS specific routines is available in a separate module, including:
 
 	File::Spec::Unix
-	File::Spec::Mac
 	File::Spec::OS2
 	File::Spec::Win32
 	File::Spec::VMS
@@ -177,8 +174,8 @@ Takes as its argument a path, and returns true if it is an absolute path.
 
     $is_absolute = File::Spec->file_name_is_absolute( $path );
 
-This does not consult the local filesystem on Unix, Win32, OS/2, or
-Mac OS (Classic).  It does consult the working environment for VMS
+This does not consult the local filesystem on Unix, Win32 or OS/2. It
+does consult the working environment for VMS
 (see L<File::Spec::VMS/file_name_is_absolute>).
 
 =item path
@@ -304,14 +301,12 @@ Based on code written by Shigio Yamaguchi.
 =back
 
 For further information, please see L<File::Spec::Unix>,
-L<File::Spec::Mac>, L<File::Spec::OS2>, L<File::Spec::Win32>, or
-L<File::Spec::VMS>.
+L<File::Spec::OS2>, L<File::Spec::Win32>, or L<File::Spec::VMS>.
 
 =head1 SEE ALSO
 
-L<File::Spec::Unix>, L<File::Spec::Mac>, L<File::Spec::OS2>,
-L<File::Spec::Win32>, L<File::Spec::VMS>, L<File::Spec::Functions>,
-L<ExtUtils::MakeMaker>
+L<File::Spec::Unix>, L<File::Spec::OS2>, L<File::Spec::Win32>,
+L<File::Spec::VMS>, L<File::Spec::Functions>, L<ExtUtils::MakeMaker>
 
 =head1 AUTHOR
 
diff --git a/dist/PathTools/lib/File/Spec/Epoc.pm b/dist/PathTools/lib/File/Spec/Epoc.pm
deleted file mode 100644
index ef8af40145..0000000000
--- a/dist/PathTools/lib/File/Spec/Epoc.pm
+++ /dev/null
@@ -1,79 +0,0 @@
-package File::Spec::Epoc;
-
-use strict;
-use vars qw($VERSION @ISA);
-
-$VERSION = '3.66';
-$VERSION =~ tr/_//d;
-
-require File::Spec::Unix;
-@ISA = qw(File::Spec::Unix);
-
-=head1 NAME
-
-File::Spec::Epoc - methods for Epoc file specs
-
-=head1 SYNOPSIS
-
- require File::Spec::Epoc; # 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 package is still a work in progress. ;-)
-
-=cut
-
-sub case_tolerant {
-    return 1;
-}
-
-=pod
-
-=over 4
-
-=item canonpath()
-
-No physical check on the filesystem, but a logical cleanup of a
-path.  On UNIX eliminated successive slashes and successive "/.".
-
-=back
-
-=cut
-
-sub canonpath {
-    my ($self,$path) = @_;
-    return unless defined $path;
-
-    $path =~ s|/+|/|g;                             # xx////xx  -> xx/xx
-    $path =~ s|(/\.)+/|/|g;                        # xx/././xx -> xx/xx
-    $path =~ s|^(\./)+||s unless $path eq "./";    # ./xx      -> xx
-    $path =~ s|^/(\.\./)+|/|s;                     # /../../xx -> xx
-    $path =~  s|/\Z(?!\n)|| unless $path eq "/";          # xx/       -> xx
-    return $path;
-}
-
-=pod
-
-=head1 AUTHOR
-
-o.flebbe@gmx.de
-
-=head1 COPYRIGHT
-
-Copyright (c) 2004 by the Perl 5 Porters.  All rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-See L<File::Spec> and L<File::Spec::Unix>.  This package overrides the
-implementation of these methods, not the semantics.
-
-=cut
-
-1;
diff --git a/dist/PathTools/lib/File/Spec/Functions.pm b/dist/PathTools/lib/File/Spec/Functions.pm
index ccf1562599..7b484e85c5 100644
--- a/dist/PathTools/lib/File/Spec/Functions.pm
+++ b/dist/PathTools/lib/File/Spec/Functions.pm
@@ -83,8 +83,8 @@ provided by File::Spec.
 
 For a reference of available functions, please consult L<File::Spec::Unix>,
 which contains the entire set, and which is inherited by the modules for
-other platforms. For further information, please see L<File::Spec::Mac>,
-L<File::Spec::OS2>, L<File::Spec::Win32>, or L<File::Spec::VMS>.
+other platforms. For further information, please see L<File::Spec::OS2>,
+L<File::Spec::Win32>, or L<File::Spec::VMS>.
 
 =head2 Exports
 
@@ -123,8 +123,8 @@ it under the same terms as Perl itself.
 
 =head1 SEE ALSO
 
-File::Spec, File::Spec::Unix, File::Spec::Mac, File::Spec::OS2,
-File::Spec::Win32, File::Spec::VMS, ExtUtils::MakeMaker
+File::Spec, File::Spec::Unix, File::Spec::OS2, File::Spec::Win32,
+File::Spec::VMS, ExtUtils::MakeMaker
 
 =cut
 
diff --git a/dist/PathTools/lib/File/Spec/Mac.pm b/dist/PathTools/lib/File/Spec/Mac.pm
deleted file mode 100644
index a7454e7ded..0000000000
--- a/dist/PathTools/lib/File/Spec/Mac.pm
+++ /dev/null
@@ -1,786 +0,0 @@
-package File::Spec::Mac;
-
-use strict;
-use vars qw(@ISA $VERSION);
-require File::Spec::Unix;
-
-$VERSION = '3.66';
-$VERSION =~ tr/_//d;
-
-@ISA = qw(File::Spec::Unix);
-
-my $macfiles;
-if ($^O eq 'MacOS') {
-	$macfiles = eval { require Mac::Files };
-}
-
-sub case_tolerant { 1 }
-
-
-=head1 NAME
-
-File::Spec::Mac - File::Spec for Mac OS (Classic)
-
-=head1 SYNOPSIS
-
- require File::Spec::Mac; # Done internally by File::Spec if needed
-
-=head1 DESCRIPTION
-
-Methods for manipulating file specifications.
-
-=head1 METHODS
-
-=over 2
-
-=item canonpath
-
-On Mac OS, there's nothing to be done. Returns what it's given.
-
-=cut
-
-sub canonpath {
-    my ($self,$path) = @_;
-    return $path;
-}
-
-=item catdir()
-
-Concatenate two or more directory names to form a path separated by colons
-(":") ending with a directory. Resulting paths are B<relative> by default,
-but can be forced to be absolute (but avoid this, see below). Automatically
-puts a trailing ":" on the end of the complete path, because that's what's
-done in MacPerl's environment and helps to distinguish a file path from a
-directory path.
-
-B<IMPORTANT NOTE:> Beginning with version 1.3 of this module, the resulting
-path is relative by default and I<not> absolute. This decision was made due
-to portability reasons. Since C<File::Spec-E<gt>catdir()> returns relative paths
-on all other operating systems, it will now also follow this convention on Mac
-OS. Note that this may break some existing scripts.
-
-The intended purpose of this routine is to concatenate I<directory names>.
-But because of the nature of Macintosh paths, some additional possibilities
-are allowed to make using this routine give reasonable results for some
-common situations. In other words, you are also allowed to concatenate
-I<paths> instead of directory names (strictly speaking, a string like ":a"
-is a path, but not a name, since it contains a punctuation character ":").
-
-So, beside calls like
-
-    catdir("a") = ":a:"
-    catdir("a","b") = ":a:b:"
-    catdir() = ""                    (special case)
-
-calls like the following
-
-    catdir(":a:") = ":a:"
-    catdir(":a","b") = ":a:b:"
-    catdir(":a:","b") = ":a:b:"
-    catdir(":a:",":b:") = ":a:b:"
-    catdir(":") = ":"
-
-are allowed.
-
-Here are the rules that are used in C<catdir()>; note that we try to be as
-compatible as possible to Unix:
-
-=over 2
-
-=item 1.
-
-The resulting path is relative by default, i.e. the resulting path will have a
-leading colon.
-
-=item 2.
-
-A trailing colon is added automatically to the resulting path, to denote a
-directory.
-
-=item 3.
-
-Generally, each argument has one leading ":" and one trailing ":"
-removed (if any). They are then joined together by a ":". Special
-treatment applies for arguments denoting updir paths like "::lib:",
-see (4), or arguments consisting solely of colons ("colon paths"),
-see (5).
-
-=item 4.
-
-When an updir path like ":::lib::" is passed as argument, the number
-of directories to climb up is handled correctly, not removing leading
-or trailing colons when necessary. E.g.
-
-    catdir(":::a","::b","c")    = ":::a::b:c:"
-    catdir(":::a::","::b","c")  = ":::a:::b:c:"
-
-=item 5.
-
-Adding a colon ":" or empty string "" to a path at I<any> position
-doesn't alter the path, i.e. these arguments are ignored. (When a ""
-is passed as the first argument, it has a special meaning, see
-(6)). This way, a colon ":" is handled like a "." (curdir) on Unix,
-while an empty string "" is generally ignored (see
-L<File::Spec::Unix/canonpath()> ). Likewise, a "::" is handled like a ".."
-(updir), and a ":::" is handled like a "../.." etc.  E.g.
-
-    catdir("a",":",":","b")   = ":a:b:"
-    catdir("a",":","::",":b") = ":a::b:"
-
-=item 6.
-
-If the first argument is an empty string "" or is a volume name, i.e. matches
-the pattern /^[^:]+:/, the resulting path is B<absolute>.
-
-=item 7.
-
-Passing an empty string "" as the first argument to C<catdir()> is
-like passingC<File::Spec-E<gt>rootdir()> as the first argument, i.e.
-
-    catdir("","a","b")          is the same as
-
-    catdir(rootdir(),"a","b").
-
-This is true on Unix, where C<catdir("","a","b")> yields "/a/b" and
-C<rootdir()> is "/". Note that C<rootdir()> on Mac OS is the startup
-volume, which is the closest in concept to Unix' "/". This should help
-to run existing scripts originally written for Unix.
-
-=item 8.
-
-For absolute paths, some cleanup is done, to ensure that the volume
-name isn't immediately followed by updirs. This is invalid, because
-this would go beyond "root". Generally, these cases are handled like
-their Unix counterparts:
-
- Unix:
-    Unix->catdir("","")                 =  "/"
-    Unix->catdir("",".")                =  "/"
-    Unix->catdir("","..")               =  "/"        # can't go
-                                                      # beyond root
-    Unix->catdir("",".","..","..","a")  =  "/a"
- Mac:
-    Mac->catdir("","")                  =  rootdir()  # (e.g. "HD:")
-    Mac->catdir("",":")                 =  rootdir()
-    Mac->catdir("","::")                =  rootdir()  # can't go
-                                                      # beyond root
-    Mac->catdir("",":","::","::","a")   =  rootdir() . "a:"
-                                                    # (e.g. "HD:a:")
-
-However, this approach is limited to the first arguments following
-"root" (again, see L<File::Spec::Unix/canonpath()>. If there are more
-arguments that move up the directory tree, an invalid path going
-beyond root can be created.
-
-=back
-
-As you've seen, you can force C<catdir()> to create an absolute path
-by passing either an empty string or a path that begins with a volume
-name as the first argument. However, you are strongly encouraged not
-to do so, since this is done only for backward compatibility. Newer
-versions of File::Spec come with a method called C<catpath()> (see
-below), that is designed to offer a portable solution for the creation
-of absolute paths.  It takes volume, directory and file portions and
-returns an entire path. While C<catdir()> is still suitable for the
-concatenation of I<directory names>, you are encouraged to use
-C<catpath()> to concatenate I<volume names> and I<directory
-paths>. E.g.
-
-    $dir      = File::Spec->catdir("tmp","sources");
-    $abs_path = File::Spec->catpath("MacintoshHD:", $dir,"");
-
-yields
-
-    "MacintoshHD:tmp:sources:" .
-
-=cut
-
-sub catdir {
-	my $self = shift;
-	return '' unless @_;
-	my @args = @_;
-	my $first_arg;
-	my $relative;
-
-	# take care of the first argument
-
-	if ($args[0] eq '')  { # absolute path, rootdir
-		shift @args;
-		$relative = 0;
-		$first_arg = $self->rootdir;
-
-	} elsif ($args[0] =~ /^[^:]+:/) { # absolute path, volume name
-		$relative = 0;
-		$first_arg = shift @args;
-		# add a trailing ':' if need be (may be it's a path like HD:dir)
-		$first_arg = "$first_arg:" unless ($first_arg =~ /:\Z(?!\n)/);
-
-	} else { # relative path
-		$relative = 1;
-		if ( $args[0] =~ /^::+\Z(?!\n)/ ) {
-			# updir colon path ('::', ':::' etc.), don't shift
-			$first_arg = ':';
-		} elsif ($args[0] eq ':') {
-			$first_arg = shift @args;
-		} else {
-			# add a trailing ':' if need be
-			$first_arg = shift @args;
-			$first_arg = "$first_arg:" unless ($first_arg =~ /:\Z(?!\n)/);
-		}
-	}
-
-	# For all other arguments,
-	# (a) ignore arguments that equal ':' or '',
-	# (b) handle updir paths specially:
-	#     '::' 			-> concatenate '::'
-	#     '::' . '::' 	-> concatenate ':::' etc.
-	# (c) add a trailing ':' if need be
-
-	my $result = $first_arg;
-	while (@args) {
-		my $arg = shift @args;
-		unless (($arg eq '') || ($arg eq ':')) {
-			if ($arg =~ /^::+\Z(?!\n)/ ) { # updir colon path like ':::'
-				my $updir_count = length($arg) - 1;
-				while ((@args) && ($args[0] =~ /^::+\Z(?!\n)/) ) { # while updir colon path
-					$arg = shift @args;
-					$updir_count += (length($arg) - 1);
-				}
-				$arg = (':' x $updir_count);
-			} else {
-				$arg =~ s/^://s; # remove a leading ':' if any
-				$arg = "$arg:" unless ($arg =~ /:\Z(?!\n)/); # ensure trailing ':'
-			}
-			$result .= $arg;
-		}#unless
-	}
-
-	if ( ($relative) && ($result !~ /^:/) ) {
-		# add a leading colon if need be
-		$result = ":$result";
-	}
-
-	unless ($relative) {
-		# remove updirs immediately following the volume name
-		$result =~ s/([^:]+:)(:*)(.*)\Z(?!\n)/$1$3/;
-	}
-
-	return $result;
-}
-
-=item catfile
-
-Concatenate one or more directory names and a filename to form a
-complete path ending with a filename. Resulting paths are B<relative>
-by default, but can be forced to be absolute (but avoid this).
-
-B<IMPORTANT NOTE:> Beginning with version 1.3 of this module, the
-resulting path is relative by default and I<not> absolute. This
-decision was made due to portability reasons. Since
-C<File::Spec-E<gt>catfile()> returns relative paths on all other
-operating systems, it will now also follow this convention on Mac OS.
-Note that this may break some existing scripts.
-
-The last argument is always considered to be the file portion. Since
-C<catfile()> uses C<catdir()> (see above) for the concatenation of the
-directory portions (if any), the following with regard to relative and
-absolute paths is true:
-
-    catfile("")     = ""
-    catfile("file") = "file"
-
-but
-
-    catfile("","")        = rootdir()         # (e.g. "HD:")
-    catfile("","file")    = rootdir() . file  # (e.g. "HD:file")
-    catfile("HD:","file") = "HD:file"
-
-This means that C<catdir()> is called only when there are two or more
-arguments, as one might expect.
-
-Note that the leading ":" is removed from the filename, so that
-
-    catfile("a","b","file")  = ":a:b:file"    and
-
-    catfile("a","b",":file") = ":a:b:file"
-
-give the same answer.
-
-To concatenate I<volume names>, I<directory paths> and I<filenames>,
-you are encouraged to use C<catpath()> (see below).
-
-=cut
-
-sub catfile {
-    my $self = shift;
-    return '' unless @_;
-    my $file = pop @_;
-    return $file unless @_;
-    my $dir = $self->catdir(@_);
-    $file =~ s/^://s;
-    return $dir.$file;
-}
-
-=item curdir
-
-Returns a string representing the current directory. On Mac OS, this is ":".
-
-=cut
-
-sub curdir {
-    return ":";
-}
-
-=item devnull
-
-Returns a string representing the null device. On Mac OS, this is "Dev:Null".
-
-=cut
-
-sub devnull {
-    return "Dev:Null";
-}
-
-=item rootdir
-
-Returns a string representing the root directory.  Under MacPerl,
-returns the name of the startup volume, since that's the closest in
-concept, although other volumes aren't rooted there. The name has a
-trailing ":", because that's the correct specification for a volume
-name on Mac OS.
-
-If Mac::Files could not be loaded, the empty string is returned.
-
-=cut
-
-sub rootdir {
-#
-#  There's no real root directory on Mac OS. The name of the startup
-#  volume is returned, since that's the closest in concept.
-#
-    return '' unless $macfiles;
-    my $system = Mac::Files::FindFolder(&Mac::Files::kOnSystemDisk,
-	&Mac::Files::kSystemFolderType);
-    $system =~ s/:.*\Z(?!\n)/:/s;
-    return $system;
-}
-
-=item tmpdir
-
-Returns the contents of $ENV{TMPDIR}, if that directory exits or the
-current working directory otherwise. Under MacPerl, $ENV{TMPDIR} will
-contain a path like "MacintoshHD:Temporary Items:", which is a hidden
-directory on your startup volume.
-
-=cut
-
-sub tmpdir {
-    my $cached = $_[0]->_cached_tmpdir('TMPDIR');
-    return $cached if defined $cached;
-    $_[0]->_cache_tmpdir($_[0]->_tmpdir( $ENV{TMPDIR} ), 'TMPDIR');
-}
-
-=item updir
-
-Returns a string representing the parent directory. On Mac OS, this is "::".
-
-=cut
-
-sub updir {
-    return "::";
-}
-
-=item file_name_is_absolute
-
-Takes as argument a path and returns true, if it is an absolute path.
-If the path has a leading ":", it's a relative path. Otherwise, it's an
-absolute path, unless the path doesn't contain any colons, i.e. it's a name
-like "a". In this particular case, the path is considered to be relative
-(i.e. it is considered to be a filename). Use ":" in the appropriate place
-in the path if you want to distinguish unambiguously. As a special case,
-the filename '' is always considered to be absolute. Note that with version
-1.2 of File::Spec::Mac, this does no longer consult the local filesystem.
-
-E.g.
-
-    File::Spec->file_name_is_absolute("a");         # false (relative)
-    File::Spec->file_name_is_absolute(":a:b:");     # false (relative)
-    File::Spec->file_name_is_absolute("MacintoshHD:");
-                                                    # true (absolute)
-    File::Spec->file_name_is_absolute("");          # true (absolute)
-
-
-=cut
-
-sub file_name_is_absolute {
-    my ($self,$file) = @_;
-    if ($file =~ /:/) {
-	return (! ($file =~ m/^:/s) );
-    } elsif ( $file eq '' ) {
-        return 1 ;
-    } else {
-	return 0; # i.e. a file like "a"
-    }
-}
-
-=item path
-
-Returns the null list for the MacPerl application, since the concept is
-usually meaningless under Mac OS. But if you're using the MacPerl tool under
-MPW, it gives back $ENV{Commands} suitably split, as is done in
-:lib:ExtUtils:MM_Mac.pm.
-
-=cut
-
-sub path {
-#
-#  The concept is meaningless under the MacPerl application.
-#  Under MPW, it has a meaning.
-#
-    return unless exists $ENV{Commands};
-    return split(/,/, $ENV{Commands});
-}
-
-=item splitpath
-
-    ($volume,$directories,$file) = File::Spec->splitpath( $path );
-    ($volume,$directories,$file) = File::Spec->splitpath( $path,
-                                                          $no_file );
-
-Splits a path into volume, directory, and filename portions.
-
-On Mac OS, assumes that the last part of the path is a filename unless
-$no_file is true or a trailing separator ":" is present.
-
-The volume portion is always returned with a trailing ":". The directory portion
-is always returned with a leading (to denote a relative path) and a trailing ":"
-(to denote a directory). The file portion is always returned I<without> a leading ":".
-Empty portions are returned as empty string ''.
-
-The results can be passed to C<catpath()> to get back a path equivalent to
-(usually identical to) the original path.
-
-
-=cut
-
-sub splitpath {
-    my ($self,$path, $nofile) = @_;
-    my ($volume,$directory,$file);
-
-    if ( $nofile ) {
-        ( $volume, $directory ) = $path =~ m|^((?:[^:]+:)?)(.*)|s;
-    }
-    else {
-        $path =~
-            m|^( (?: [^:]+: )? )
-               ( (?: .*: )? )
-               ( .* )
-             |xs;
-        $volume    = $1;
-        $directory = $2;
-        $file      = $3;
-    }
-
-    $volume = '' unless defined($volume);
-	$directory = ":$directory" if ( $volume && $directory ); # take care of "HD::dir"
-    if ($directory) {
-        # Make sure non-empty directories begin and end in ':'
-        $directory .= ':' unless (substr($directory,-1) eq ':');
-        $directory = ":$directory" unless (substr($directory,0,1) eq ':');
-    } else {
-	$directory = '';
-    }
-    $file = '' unless defined($file);
-
-    return ($volume,$directory,$file);
-}
-
-
-=item splitdir
-
-The opposite of C<catdir()>.
-
-    @dirs = File::Spec->splitdir( $directories );
-
-$directories should be only the directory portion of the path on systems
-that have the concept of a volume or that have path syntax that differentiates
-files from directories. Consider using C<splitpath()> otherwise.
-
-Unlike just splitting the directories on the separator, empty directory names
-(C<"">) can be returned. Since C<catdir()> on Mac OS always appends a trailing
-colon to distinguish a directory path from a file path, a single trailing colon
-will be ignored, i.e. there's no empty directory name after it.
-
-Hence, on Mac OS, both
-
-    File::Spec->splitdir( ":a:b::c:" );    and
-    File::Spec->splitdir( ":a:b::c" );
-
-yield:
-
-    ( "a", "b", "::", "c")
-
-while
-
-    File::Spec->splitdir( ":a:b::c::" );
-
-yields:
-
-    ( "a", "b", "::", "c", "::")
-
-
-=cut
-
-sub splitdir {
-	my ($self, $path) = @_;
-	my @result = ();
-	my ($head, $sep, $tail, $volume, $directories);
-
-	return @result if ( (!defined($path)) || ($path eq '') );
-	return (':') if ($path eq ':');
-
-	( $volume, $sep, $directories ) = $path =~ m|^((?:[^:]+:)?)(:*)(.*)|s;
-
-	# deprecated, but handle it correctly
-	if ($volume) {
-		push (@result, $volume);
-		$sep .= ':';
-	}
-
-	while ($sep || $directories) {
-		if (length($sep) > 1) {
-			my $updir_count = length($sep) - 1;
-			for (my $i=0; $i<$updir_count; $i++) {
-				# push '::' updir_count times;
-				# simulate Unix '..' updirs
-				push (@result, '::');
-			}
-		}
-		$sep = '';
-		if ($directories) {
-			( $head, $sep, $tail ) = $directories =~ m|^((?:[^:]+)?)(:*)(.*)|s;
-			push (@result, $head);
-			$directories = $tail;
-		}
-	}
-	return @result;
-}
-
-
-=item catpath
-
-    $path = File::Spec->catpath($volume,$directory,$file);
-
-Takes volume, directory and file portions and returns an entire path. On Mac OS,
-$volume, $directory and $file are concatenated.  A ':' is inserted if need be. You
-may pass an empty string for each portion. If all portions are empty, the empty
-string is returned. If $volume is empty, the result will be a relative path,
-beginning with a ':'. If $volume and $directory are empty, a leading ":" (if any)
-is removed form $file and the remainder is returned. If $file is empty, the
-resulting path will have a trailing ':'.
-
-
-=cut
-
-sub catpath {
-    my ($self,$volume,$directory,$file) = @_;
-
-    if ( (! $volume) && (! $directory) ) {
-	$file =~ s/^:// if $file;
-	return $file ;
-    }
-
-    # We look for a volume in $volume, then in $directory, but not both
-
-    my ($dir_volume, $dir_dirs) = $self->splitpath($directory, 1);
-
-    $volume = $dir_volume unless length $volume;
-    my $path = $volume; # may be ''
-    $path .= ':' unless (substr($path, -1) eq ':'); # ensure trailing ':'
-
-    if ($directory) {
-	$directory = $dir_dirs if $volume;
-	$directory =~ s/^://; # remove leading ':' if any
-	$path .= $directory;
-	$path .= ':' unless (substr($path, -1) eq ':'); # ensure trailing ':'
-    }
-
-    if ($file) {
-	$file =~ s/^://; # remove leading ':' if any
-	$path .= $file;
-    }
-
-    return $path;
-}
-
-=item abs2rel
-
-Takes a destination path and an optional base path and returns a relative path
-from the base path to the destination path:
-
-    $rel_path = File::Spec->abs2rel( $path ) ;
-    $rel_path = File::Spec->abs2rel( $path, $base ) ;
-
-Note that both paths are assumed to have a notation that distinguishes a
-directory path (with trailing ':') from a file path (without trailing ':').
-
-If $base is not present or '', then the current working directory is used.
-If $base is relative, then it is converted to absolute form using C<rel2abs()>.
-This means that it is taken to be relative to the current working directory.
-
-If $path and $base appear to be on two different volumes, we will not
-attempt to resolve the two paths, and we will instead simply return
-$path.  Note that previous versions of this module ignored the volume
-of $base, which resulted in garbage results part of the time.
-
-If $base doesn't have a trailing colon, the last element of $base is
-assumed to be a filename.  This filename is ignored.  Otherwise all path
-components are assumed to be directories.
-
-If $path is relative, it is converted to absolute form using C<rel2abs()>.
-This means that it is taken to be relative to the current working directory.
-
-Based on code written by Shigio Yamaguchi.
-
-
-=cut
-
-# maybe this should be done in canonpath() ?
-sub _resolve_updirs {
-	my $path = shift @_;
-	my $proceed;
-
-	# resolve any updirs, e.g. "HD:tmp::file" -> "HD:file"
-	do {
-		$proceed = ($path =~ s/^(.*):[^:]+::(.*?)\z/$1:$2/);
-	} while ($proceed);
-
-	return $path;
-}
-
-
-sub abs2rel {
-    my($self,$path,$base) = @_;
-
-    # Clean up $path
-    if ( ! $self->file_name_is_absolute( $path ) ) {
-        $path = $self->rel2abs( $path ) ;
-    }
-
-    # Figure out the effective $base and clean it up.
-    if ( !defined( $base ) || $base eq '' ) {
-	$base = $self->_cwd();
-    }
-    elsif ( ! $self->file_name_is_absolute( $base ) ) {
-        $base = $self->rel2abs( $base ) ;
-	$base = _resolve_updirs( $base ); # resolve updirs in $base
-    }
-    else {
-	$base = _resolve_updirs( $base );
-    }
-
-    # Split up paths - ignore $base's file
-    my ( $path_vol, $path_dirs, $path_file ) =  $self->splitpath( $path );
-    my ( $base_vol, $base_dirs )             =  $self->splitpath( $base );
-
-    return $path unless lc( $path_vol ) eq lc( $base_vol );
-
-    # Now, remove all leading components that are the same
-    my @pathchunks = $self->splitdir( $path_dirs );
-    my @basechunks = $self->splitdir( $base_dirs );
-	
-    while ( @pathchunks &&
-	    @basechunks &&
-	    lc( $pathchunks[0] ) eq lc( $basechunks[0] ) ) {
-        shift @pathchunks ;
-        shift @basechunks ;
-    }
-
-    # @pathchunks now has the directories to descend in to.
-    # ensure relative path, even if @pathchunks is empty
-    $path_dirs = $self->catdir( ':', @pathchunks );
-
-    # @basechunks now contains the number of directories to climb out of.
-    $base_dirs = (':' x @basechunks) . ':' ;
-
-    return $self->catpath( '', $self->catdir( $base_dirs, $path_dirs ), $path_file ) ;
-}
-
-=item rel2abs
-
-Converts a relative path to an absolute path:
-
-    $abs_path = File::Spec->rel2abs( $path ) ;
-    $abs_path = File::Spec->rel2abs( $path, $base ) ;
-
-Note that both paths are assumed to have a notation that distinguishes a
-directory path (with trailing ':') from a file path (without trailing ':').
-
-If $base is not present or '', then $base is set to the current working
-directory. If $base is relative, then it is converted to absolute form
-using C<rel2abs()>. This means that it is taken to be relative to the
-current working directory.
-
-If $base doesn't have a trailing colon, the last element of $base is
-assumed to be a filename.  This filename is ignored.  Otherwise all path
-components are assumed to be directories.
-
-If $path is already absolute, it is returned and $base is ignored.
-
-Based on code written by Shigio Yamaguchi.
-
-=cut
-
-sub rel2abs {
-    my ($self,$path,$base) = @_;
-
-    if ( ! $self->file_name_is_absolute($path) ) {
-        # Figure out the effective $base and clean it up.
-        if ( !defined( $base ) || $base eq '' ) {
-	    $base = $self->_cwd();
-        }
-        elsif ( ! $self->file_name_is_absolute($base) ) {
-            $base = $self->rel2abs($base) ;
-        }
-
-	# Split up paths
-
-	# ignore $path's volume
-        my ( $path_dirs, $path_file ) = ($self->splitpath($path))[1,2] ;
-
-        # ignore $base's file part
-	my ( $base_vol, $base_dirs ) = $self->splitpath($base) ;
-
-	# Glom them together
-	$path_dirs = ':' if ($path_dirs eq '');
-	$base_dirs =~ s/:$//; # remove trailing ':', if any
-	$base_dirs = $base_dirs . $path_dirs;
-
-        $path = $self->catpath( $base_vol, $base_dirs, $path_file );
-    }
-    return $path;
-}
-
-
-=back
-
-=head1 AUTHORS
-
-See the authors list in I<File::Spec>. Mac OS support by Paul Schinder
-<schinder@pobox.com> and Thomas Wegner <wegner_thomas@yahoo.com>.
-
-=head1 COPYRIGHT
-
-Copyright (c) 2004 by the Perl 5 Porters.  All rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-See L<File::Spec> and L<File::Spec::Unix>.  This package overrides the
-implementation of these methods, not the semantics.
-
-=cut
-
-1;
diff --git a/dist/PathTools/t/Spec.t b/dist/PathTools/t/Spec.t
index 0255bdb1bf..731fb65856 100644
--- a/dist/PathTools/t/Spec.t
+++ b/dist/PathTools/t/Spec.t
@@ -38,7 +38,7 @@ if ( $@ ) {
    $INC{"VMS/Filespec.pm"} = 1 ;
 }
 
-foreach (qw(Unix Win32 VMS OS2 Mac Epoc Cygwin)) {
+foreach (qw(Unix Win32 VMS OS2 Cygwin)) {
     require_ok("File::Spec::$_");
 }
 
@@ -531,193 +531,6 @@ my @tests = (
 [ "OS2->catdir('\\', '../')",             '/'                 ],
 [ "OS2->catdir('\\', '..\\')",            '/'                 ],
 
-[ "Mac->case_tolerant()",         '1'  ],
-
-[ "Mac->catpath('','','')",              ''                ],
-[ "Mac->catpath('',':','')",             ':'               ],
-[ "Mac->catpath('','::','')",            '::'              ],
-
-[ "Mac->catpath('hd','','')",            'hd:'             ],
-[ "Mac->catpath('hd:','','')",           'hd:'             ],
-[ "Mac->catpath('hd:',':','')",          'hd:'             ],
-[ "Mac->catpath('hd:','::','')",         'hd::'            ],
-
-[ "Mac->catpath('hd','','file')",       'hd:file'          ],
-[ "Mac->catpath('hd',':','file')",      'hd:file'          ],
-[ "Mac->catpath('hd','::','file')",     'hd::file'         ],
-[ "Mac->catpath('hd',':::','file')",    'hd:::file'        ],
-
-[ "Mac->catpath('hd:','',':file')",      'hd:file'         ],
-[ "Mac->catpath('hd:',':',':file')",     'hd:file'         ],
-[ "Mac->catpath('hd:','::',':file')",    'hd::file'        ],
-[ "Mac->catpath('hd:',':::',':file')",   'hd:::file'       ],
-
-[ "Mac->catpath('hd:','d1','file')",     'hd:d1:file'      ],
-[ "Mac->catpath('hd:',':d1:',':file')",  'hd:d1:file'      ],
-[ "Mac->catpath('hd:','hd:d1','')",      'hd:d1:'          ],
-
-[ "Mac->catpath('','d1','')",            ':d1:'            ],
-[ "Mac->catpath('',':d1','')",           ':d1:'            ],
-[ "Mac->catpath('',':d1:','')",          ':d1:'            ],
-
-[ "Mac->catpath('','d1','file')",        ':d1:file'        ],
-[ "Mac->catpath('',':d1:',':file')",     ':d1:file'        ],
-
-[ "Mac->catpath('','','file')",          'file'            ],
-[ "Mac->catpath('','',':file')",         'file'            ], # !
-[ "Mac->catpath('',':',':file')",        ':file'           ], # !
-
-
-[ "Mac->splitpath(':')",              ',:,'               ],
-[ "Mac->splitpath('::')",             ',::,'              ],
-[ "Mac->splitpath(':::')",            ',:::,'             ],
-
-[ "Mac->splitpath('file')",           ',,file'            ],
-[ "Mac->splitpath(':file')",          ',:,file'           ],
-
-[ "Mac->splitpath('d1',1)",           ',:d1:,'            ], # dir, not volume
-[ "Mac->splitpath(':d1',1)",          ',:d1:,'            ],
-[ "Mac->splitpath(':d1:',1)",         ',:d1:,'            ],
-[ "Mac->splitpath(':d1:')",           ',:d1:,'            ],
-[ "Mac->splitpath(':d1:d2:d3:')",     ',:d1:d2:d3:,'      ],
-[ "Mac->splitpath(':d1:d2:d3:',1)",   ',:d1:d2:d3:,'      ],
-[ "Mac->splitpath(':d1:file')",       ',:d1:,file'        ],
-[ "Mac->splitpath('::d1:file')",      ',::d1:,file'       ],
-
-[ "Mac->splitpath('hd:', 1)",         'hd:,,'             ],
-[ "Mac->splitpath('hd:')",            'hd:,,'             ],
-[ "Mac->splitpath('hd:d1:d2:')",      'hd:,:d1:d2:,'      ],
-[ "Mac->splitpath('hd:d1:d2',1)",     'hd:,:d1:d2:,'      ],
-[ "Mac->splitpath('hd:d1:d2:file')",  'hd:,:d1:d2:,file'  ],
-[ "Mac->splitpath('hd:d1:d2::file')", 'hd:,:d1:d2::,file' ],
-[ "Mac->splitpath('hd::d1:d2:file')", 'hd:,::d1:d2:,file' ], # invalid path
-[ "Mac->splitpath('hd:file')",        'hd:,,file'         ],
-
-[ "Mac->splitdir()",                   ''            ],
-[ "Mac->splitdir('')",                 ''            ],
-[ "Mac->splitdir(':')",                ':'           ],
-[ "Mac->splitdir('::')",               '::'          ],
-[ "Mac->splitdir(':::')",              '::,::'       ],
-[ "Mac->splitdir(':::d1:d2')",         '::,::,d1,d2' ],
-
-[ "Mac->splitdir(':d1:d2:d3::')",      'd1,d2,d3,::'],
-[ "Mac->splitdir(':d1:d2:d3:')",       'd1,d2,d3'   ],
-[ "Mac->splitdir(':d1:d2:d3')",        'd1,d2,d3'   ],
-
-# absolute paths in splitdir() work, but you'd better use splitpath()
-[ "Mac->splitdir('hd:')",              'hd:'              ],
-[ "Mac->splitdir('hd::')",             'hd:,::'           ], # invalid path, but it works
-[ "Mac->splitdir('hd::d1:')",          'hd:,::,d1'        ], # invalid path, but it works
-[ "Mac->splitdir('hd:d1:d2:::')",      'hd:,d1,d2,::,::'  ],
-[ "Mac->splitdir('hd:d1:d2::')",       'hd:,d1,d2,::'     ],
-[ "Mac->splitdir('hd:d1:d2:')",        'hd:,d1,d2'        ],
-[ "Mac->splitdir('hd:d1:d2')",         'hd:,d1,d2'        ],
-[ "Mac->splitdir('hd:d1::d2::')",      'hd:,d1,::,d2,::'  ],
-
-[ "Mac->catdir()",                 ''             ],
-[ "Mac->catdir(':')",              ':'            ],
-
-[ "Mac->catdir(':', ':')",         ':'            ],
-[ "Mac->catdir(':', '')",          ':'            ],
-
-[ "Mac->catdir(':', '::')",        '::'           ],
-
-[ "Mac->catdir('::', '')",         '::'           ],
-[ "Mac->catdir('::', ':')",        '::'           ],
-
-[ "Mac->catdir('::', '::')",       ':::'          ],
-
-[ "Mac->catdir(':d1')",                    ':d1:'        ],
-[ "Mac->catdir(':d1:')",                   ':d1:'        ],
-[ "Mac->catdir(':d1','d2')",               ':d1:d2:'     ],
-[ "Mac->catdir(':d1',':d2')",              ':d1:d2:'     ],
-[ "Mac->catdir(':d1',':d2:')",             ':d1:d2:'     ],
-[ "Mac->catdir(':d1',':d2::')",            ':d1:d2::'     ],
-[ "Mac->catdir(':',':d1',':d2')",          ':d1:d2:'     ],
-[ "Mac->catdir('::',':d1',':d2')",         '::d1:d2:'    ],
-[ "Mac->catdir('::','::',':d1',':d2')",    ':::d1:d2:'   ],
-[ "Mac->catdir(':',':',':d1',':d2')",      ':d1:d2:'     ],
-[ "Mac->catdir('::',':',':d1',':d2')",     '::d1:d2:'    ],
-
-[ "Mac->catdir('d1')",                    ':d1:'         ],
-[ "Mac->catdir('d1','d2','d3')",          ':d1:d2:d3:'   ],
-[ "Mac->catdir('d1','d2/','d3')",         ':d1:d2/:d3:'  ],
-[ "Mac->catdir('d1','',':d2')",           ':d1:d2:'      ],
-[ "Mac->catdir('d1',':',':d2')",          ':d1:d2:'      ],
-[ "Mac->catdir('d1','::',':d2')",         ':d1::d2:'     ],
-[ "Mac->catdir('d1',':::',':d2')",        ':d1:::d2:'    ],
-[ "Mac->catdir('d1','::','::',':d2')",    ':d1:::d2:'    ],
-[ "Mac->catdir('d1','d2')",               ':d1:d2:'      ],
-[ "Mac->catdir('d1','d2', '')",           ':d1:d2:'      ],
-[ "Mac->catdir('d1','d2', ':')",          ':d1:d2:'      ],
-[ "Mac->catdir('d1','d2', '::')",         ':d1:d2::'     ],
-[ "Mac->catdir('d1','d2','','')",         ':d1:d2:'      ],
-[ "Mac->catdir('d1','d2',':','::')",      ':d1:d2::'     ],
-[ "Mac->catdir('d1','d2','::','::')",     ':d1:d2:::'    ],
-[ "Mac->catdir('d1',':d2')",              ':d1:d2:'      ],
-[ "Mac->catdir('d1',':d2:')",             ':d1:d2:'      ],
-
-[ "Mac->catdir('hd:',':d1')",       'hd:d1:'      ],
-[ "Mac->catdir('hd:d1:',':d2')",    'hd:d1:d2:'   ],
-[ "Mac->catdir('hd:','d1')",        'hd:d1:'      ],
-[ "Mac->catdir('hd:d1:',':d2')",    'hd:d1:d2:'   ],
-[ "Mac->catdir('hd:d1:',':d2:')",   'hd:d1:d2:'   ],
-
-[ "Mac->catfile()",                      ''                      ],
-[ "Mac->catfile('')",                    ''                      ],
-[ "Mac->catfile(':')",                   ':'                     ],
-[ "Mac->catfile(':', '')",               ':'                     ],
-
-[ "Mac->catfile('d1','d2','file')",      ':d1:d2:file' ],
-[ "Mac->catfile('d1','d2',':file')",     ':d1:d2:file' ],
-[ "Mac->catfile('file')",                'file'        ],
-[ "Mac->catfile(':', 'file')",           ':file'       ],
-
-[ "Mac->canonpath('')",                   ''     ],
-[ "Mac->canonpath(':')",                  ':'    ],
-[ "Mac->canonpath('::')",                 '::'   ],
-[ "Mac->canonpath('a::')",                'a::'  ],
-[ "Mac->canonpath(':a::')",               ':a::' ],
-
-[ "Mac->abs2rel('hd:d1:d2:','hd:d1:d2:')",            ':'            ],
-[ "Mac->abs2rel('hd:d1:d2:','hd:d1:d2:file')",        ':'            ], # ignore base's file portion
-[ "Mac->abs2rel('hd:d1:d2:file','hd:d1:d2:')",        ':file'        ],
-[ "Mac->abs2rel('hd:d1:','hd:d1:d2:')",               '::'           ],
-[ "Mac->abs2rel('hd:d3:','hd:d1:d2:')",               ':::d3:'       ],
-[ "Mac->abs2rel('hd:d3:','hd:d1:d2::')",              '::d3:'        ],
-[ "Mac->abs2rel('hd:d1:d4:d5:','hd:d1::d2:d3::')",    '::d1:d4:d5:'  ],
-[ "Mac->abs2rel('hd:d1:d4:d5:','hd:d1::d2:d3:')",     ':::d1:d4:d5:' ], # first, resolve updirs in base
-[ "Mac->abs2rel('hd:d1:d3:','hd:d1:d2:')",            '::d3:'        ],
-[ "Mac->abs2rel('hd:d1::d3:','hd:d1:d2:')",           ':::d3:'       ],
-[ "Mac->abs2rel('hd:d3:','hd:d1:d2:')",               ':::d3:'       ], # same as above
-[ "Mac->abs2rel('hd:d1:d2:d3:','hd:d1:d2:')",         ':d3:'         ],
-[ "Mac->abs2rel('hd:d1:d2:d3::','hd:d1:d2:')",        ':d3::'        ],
-[ "Mac->abs2rel('hd1:d3:d4:d5:','hd2:d1:d2:')",       'hd1:d3:d4:d5:'], # volume mismatch
-[ "Mac->abs2rel('hd:','hd:d1:d2:')",                  ':::'          ],
-
-[ "Mac->rel2abs(':d3:','hd:d1:d2:')",          'hd:d1:d2:d3:'     ],
-[ "Mac->rel2abs(':d3:d4:','hd:d1:d2:')",       'hd:d1:d2:d3:d4:'  ],
-[ "Mac->rel2abs('','hd:d1:d2:')",              ''                 ],
-[ "Mac->rel2abs('::','hd:d1:d2:')",            'hd:d1:d2::'       ],
-[ "Mac->rel2abs('::','hd:d1:d2:file')",        'hd:d1:d2::'       ],# ignore base's file portion
-[ "Mac->rel2abs(':file','hd:d1:d2:')",         'hd:d1:d2:file'    ],
-[ "Mac->rel2abs('::file','hd:d1:d2:')",        'hd:d1:d2::file'   ],
-[ "Mac->rel2abs('::d3:','hd:d1:d2:')",         'hd:d1:d2::d3:'    ],
-[ "Mac->rel2abs('hd:','hd:d1:d2:')",           'hd:'              ], # path already absolute
-[ "Mac->rel2abs('hd:d3:file','hd:d1:d2:')",    'hd:d3:file'       ],
-[ "Mac->rel2abs('hd:d3:','hd:d1:file')",       'hd:d3:'           ],
-
-[ "Epoc->case_tolerant()",         '1'  ],
-
-[ "Epoc->canonpath('')",                                      ''          ],
-[ "Epoc->canonpath('///../../..//./././a//b/.././c/././')",   '/a/b/../c' ],
-[ "Epoc->canonpath('/./')",                                   '/'         ],
-[ "Epoc->canonpath('/a/./')",                                 '/a'        ],
-
-# XXX Todo, copied from Unix, but fail. Should they? 2003-07-07 Tels
-#[ "Epoc->canonpath('/a/.')",                                  '/a'        ],
-#[ "Epoc->canonpath('/.')",                                    '/'         ],
-
 [ "Cygwin->case_tolerant()",         '1'  ],
 [ "Cygwin->catfile('a','b','c')",         'a/b/c'  ],
 [ "Cygwin->catfile('a','b','./c')",       'a/b/c'  ],
diff --git a/dist/PathTools/t/crossplatform.t b/dist/PathTools/t/crossplatform.t
index b7c76fc1af..99b542c1b8 100644
--- a/dist/PathTools/t/crossplatform.t
+++ b/dist/PathTools/t/crossplatform.t
@@ -6,7 +6,7 @@ use lib File::Spec->catfile('t', 'lib');
 use Test::More;
 local $|=1;
 
-my @platforms = qw(Cygwin Epoc Mac OS2 Unix VMS Win32);
+my @platforms = qw(Cygwin OS2 Unix VMS Win32);
 my $tests_per_platform = 10;
 
 my $vms_unix_rpt = 0;
@@ -41,13 +41,11 @@ if ($^O eq 'VMS') {
 plan tests => 1 + @platforms * $tests_per_platform;
 
 my %volumes = (
-	       Mac => 'Macintosh HD',
 	       OS2 => 'A:',
 	       Win32 => 'A:',
 	       VMS => 'v',
 	      );
 my %other_vols = (
-		  Mac => 'Mounted Volume',
 		  OS2 => 'B:',
 		  Win32 => 'B:',
 		  VMS => 'w',
@@ -68,11 +66,10 @@ foreach my $platform (@platforms) {
     my $v = $volumes{$platform} || '';
     my $other_v = $other_vols{$platform} || '';
     
-    # Fake out the environment on MacOS and Win32
+    # Fake out the environment on Win32
     no strict 'refs';
     my $save_w = $^W;
     $^W = 0;
-    local *{"File::Spec::Mac::rootdir"} = sub { "Macintosh HD:" };
     local *{"File::Spec::Win32::_cwd"}  = sub { "C:\\foo" };
     $^W = $save_w;
     use strict 'refs';
-- 
2.11.0

@p5pRT
Copy link
Author

p5pRT commented Feb 26, 2017

From @jkeenan

Due to code freeze, we'll defer evaluation of this ticket until after release of perl-5.26.0.

Thank you very much.
--
James E Keenan (jkeenan@​cpan.org)

@p5pRT
Copy link
Author

p5pRT commented Mar 29, 2017

From @iabyn

On Sun, Feb 19, 2017 at 09​:36​:46AM -0800, Tomasz Konojacki wrote​:

perl dropped MacOS classic and EPOC support many years ago. There
is no point in keeping support for them in PathTools.

This change will make any further work on PathTools a bit easier.

But since PathTools is dual-lifed, is there any possibility that
someone will want to use a newer CPAN PathTools release on an old perl
running on such a platform? Or are MacOS classic and EPOC so old that
they're not supported on any perl that supports PathTools?

--
Hofstadter's Law​: It always takes longer than you expect, even when you
take into account Hofstadter's Law.

@p5pRT
Copy link
Author

p5pRT commented Mar 29, 2017

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Mar 29, 2017

From @Leont

On Wed, Mar 29, 2017 at 11​:39 AM, Dave Mitchell <davem@​iabyn.com> wrote​:

But since PathTools is dual-lifed, is there any possibility that
someone will want to use a newer CPAN PathTools release on an old perl
running on such a platform? Or are MacOS classic and EPOC so old that
they're not supported on any perl that supports PathTools?

MakeMaker dropped MacOS classic support in 2004, and the commit
message says it "hasn't worked since 5.5x". I think we can safely
assume it's dead.
EPOC is the predecessor of Symbian, and apparently we're already using
FIle​::Spec​::Win32 on Symbian so it also seems of little use (I have no
idea if Perl on Symbian is in a working state).

Leon

@p5pRT
Copy link
Author

p5pRT commented Mar 29, 2017

From @cpansprout

On Wed, 29 Mar 2017 09​:03​:33 -0700, LeonT wrote​:

On Wed, Mar 29, 2017 at 11​:39 AM, Dave Mitchell <davem@​iabyn.com> wrote​:

But since PathTools is dual-lifed, is there any possibility that
someone will want to use a newer CPAN PathTools release on an old perl
running on such a platform? Or are MacOS classic and EPOC so old that
they're not supported on any perl that supports PathTools?

MakeMaker dropped MacOS classic support in 2004, and the commit
message says it "hasn't worked since 5.5x". I think we can safely
assume it's dead.

Perl may not run on MacOS classic any more, but many Mac OS X GUI applications still use old-style paths. The ability to manipulate them in a Perl script is still valuable.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Mar 29, 2017

From @Leont

On Thu, Mar 30, 2017 at 12​:39 AM, Father Chrysostomos via RT
<perlbug-followup@​perl.org> wrote​:

Perl may not run on MacOS classic any more, but many Mac OS X GUI applications still use old-style paths. The ability to manipulate them in a Perl script is still valuable.

That is an interesting point. It actually seems at least one module on
CPAN does exactly this (Mac​::iPod​::Gnupod). Guess it's not as dead as
thought.

Leon

@p5pRT
Copy link
Author

p5pRT commented Mar 30, 2017

From @xenu

On Wed, 29 Mar 2017 15​:39​:28 -0700, sprout wrote​:

Perl may not run on MacOS classic any more, but many Mac OS X GUI
applications still use old-style paths. The ability to manipulate
them in a Perl script is still valuable.

If it's the case and there's still some support for old-style paths in OS X, we indeed should consider keeping File​::Spec​::MacOS.

However, I think that MacOS-specific code in Cwd.pm should be removed anyway. That code isn't platform independent and will work only when $^O eq 'MacOS', which means it's useless on other (i.e. supported) platfoms.

@p5pRT
Copy link
Author

p5pRT commented Mar 30, 2017

From @xenu

On Wed, 29 Mar 2017 02​:40​:29 -0700, davem wrote​:

But since PathTools is dual-lifed, is there any possibility that
someone will want to use a newer CPAN PathTools release on an old perl
running on such a platform? Or are MacOS classic and EPOC so old that
they're not supported on any perl that supports PathTools?

The last EPOC device was released in 1999. EPOC perl port wasn't much more than a toy and I'd be surprised if anyone is still using it, let alone relying on it.

Regarding MacOS, I have nothing to add to the other posts in this thread.

@p5pRT
Copy link
Author

p5pRT commented May 16, 2017

From @jkeenan

On Thu, 30 Mar 2017 00​:40​:48 GMT, me@​xenu.pl wrote​:

On Wed, 29 Mar 2017 02​:40​:29 -0700, davem wrote​:

But since PathTools is dual-lifed, is there any possibility that
someone will want to use a newer CPAN PathTools release on an old
perl
running on such a platform? Or are MacOS classic and EPOC so old that
they're not supported on any perl that supports PathTools?

The last EPOC device was released in 1999. EPOC perl port wasn't much
more than a toy and I'd be surprised if anyone is still using it, let
alone relying on it.

Regarding MacOS, I have nothing to add to the other posts in this
thread.

Tomasz​:

It seems there is more consensus for removing support for EPOC tool in PathTools than for MacOS.

In order to move this RT toward resolution, would you be able to provide a patch that *only* removes EPOC support?

Thank you very much.

--
James E Keenan (jkeenan@​cpan.org)

@p5pRT
Copy link
Author

p5pRT commented Jun 14, 2017

From @jkeenan

On Tue, 16 May 2017 00​:58​:39 GMT, jkeenan wrote​:

On Thu, 30 Mar 2017 00​:40​:48 GMT, me@​xenu.pl wrote​:

On Wed, 29 Mar 2017 02​:40​:29 -0700, davem wrote​:

But since PathTools is dual-lifed, is there any possibility that
someone will want to use a newer CPAN PathTools release on an old
perl
running on such a platform? Or are MacOS classic and EPOC so old
that
they're not supported on any perl that supports PathTools?

The last EPOC device was released in 1999. EPOC perl port wasn't much
more than a toy and I'd be surprised if anyone is still using it, let
alone relying on it.

Regarding MacOS, I have nothing to add to the other posts in this
thread.

Tomasz​:

It seems there is more consensus for removing support for EPOC tool in
PathTools than for MacOS.

In order to move this RT toward resolution, would you be able to
provide a patch that *only* removes EPOC support?

I decided to try to do this myself. I started from the patch already submitted in this RT. However, I found several mentions of /EPOC/i in the core distribution apart from those addressed in the original patch. In addition, when you modify source code in, say, File​::Spec​::Unix, you have to bump $VERSION in all the *.pm files under dist/File-Spec.

The results so far can be found in the smoke-me/jkeenan/130818-remove-epoc branch. That still needs more work, since​:

* There are 2 modules under cpan/ which refer to EPOC. Our protocol is that those should be corrected upstream first.

* I made no attempt to revise the data in Module​::CoreList to reflect removal of one .pm file and the modification of several others.

All this, of course, presumes that we have actually made a final decision to remove EPOC support from the core distribution -- and we haven't done that yet.

Thank you very much.

--
James E Keenan (jkeenan@​cpan.org)

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2017

From @jkeenan

On Wed, 14 Jun 2017 01​:34​:57 GMT, jkeenan wrote​:

On Tue, 16 May 2017 00​:58​:39 GMT, jkeenan wrote​:

On Thu, 30 Mar 2017 00​:40​:48 GMT, me@​xenu.pl wrote​:

On Wed, 29 Mar 2017 02​:40​:29 -0700, davem wrote​:

But since PathTools is dual-lifed, is there any possibility that
someone will want to use a newer CPAN PathTools release on an old
perl
running on such a platform? Or are MacOS classic and EPOC so old
that
they're not supported on any perl that supports PathTools?

The last EPOC device was released in 1999. EPOC perl port wasn't
much
more than a toy and I'd be surprised if anyone is still using it,
let
alone relying on it.

Regarding MacOS, I have nothing to add to the other posts in this
thread.

Tomasz​:

It seems there is more consensus for removing support for EPOC tool
in
PathTools than for MacOS.

In order to move this RT toward resolution, would you be able to
provide a patch that *only* removes EPOC support?

I decided to try to do this myself. I started from the patch already
submitted in this RT. However, I found several mentions of /EPOC/i in
the core distribution apart from those addressed in the original
patch. In addition, when you modify source code in, say,
File​::Spec​::Unix, you have to bump $VERSION in all the *.pm files
under dist/File-Spec.

The results so far can be found in the smoke-me/jkeenan/130818-remove-
epoc branch. That still needs more work, since​:

* There are 2 modules under cpan/ which refer to EPOC. Our protocol
is that those should be corrected upstream first.

* I made no attempt to revise the data in Module​::CoreList to reflect
removal of one .pm file and the modification of several others.

All this, of course, presumes that we have actually made a final
decision to remove EPOC support from the core distribution -- and we
haven't done that yet.

Sawyer​: Can we get a thumbs up for this removal of EPOC support from PathTools?

If so, I'll proceed with the next steps.

--
James E Keenan (jkeenan@​cpan.org)

@p5pRT
Copy link
Author

p5pRT commented Jun 23, 2017

From @xsawyerx

On 06/22/2017 05​:28 PM, James E Keenan via RT wrote​:

On Wed, 14 Jun 2017 01​:34​:57 GMT, jkeenan wrote​:

On Tue, 16 May 2017 00​:58​:39 GMT, jkeenan wrote​:

On Thu, 30 Mar 2017 00​:40​:48 GMT, me@​xenu.pl wrote​:

On Wed, 29 Mar 2017 02​:40​:29 -0700, davem wrote​:

But since PathTools is dual-lifed, is there any possibility that
someone will want to use a newer CPAN PathTools release on an old
perl
running on such a platform? Or are MacOS classic and EPOC so old
that
they're not supported on any perl that supports PathTools?
The last EPOC device was released in 1999. EPOC perl port wasn't
much
more than a toy and I'd be surprised if anyone is still using it,
let
alone relying on it.

Regarding MacOS, I have nothing to add to the other posts in this
thread.
Tomasz​:

It seems there is more consensus for removing support for EPOC tool
in
PathTools than for MacOS.

In order to move this RT toward resolution, would you be able to
provide a patch that *only* removes EPOC support?

I decided to try to do this myself. I started from the patch already
submitted in this RT. However, I found several mentions of /EPOC/i in
the core distribution apart from those addressed in the original
patch. In addition, when you modify source code in, say,
File​::Spec​::Unix, you have to bump $VERSION in all the *.pm files
under dist/File-Spec.

The results so far can be found in the smoke-me/jkeenan/130818-remove-
epoc branch. That still needs more work, since​:

* There are 2 modules under cpan/ which refer to EPOC. Our protocol
is that those should be corrected upstream first.

* I made no attempt to revise the data in Module​::CoreList to reflect
removal of one .pm file and the modification of several others.

All this, of course, presumes that we have actually made a final
decision to remove EPOC support from the core distribution -- and we
haven't done that yet.

Sawyer​: Can we get a thumbs up for this removal of EPOC support from PathTools?

I agree with removing the Mac OS specific code from Cwd.pm, but not
removing File​::Spec​::MacOS. (Just to be clear on it.)

@p5pRT
Copy link
Author

p5pRT commented Dec 18, 2017

From zefram@fysh.org

I've removed support for running PathTools on EPOC in commit
e9a5b59, and on MacOS Classic in
commit e229c0f. There's no reason to
remove support for processing paths of those platforms. This ticket
can be closed.

-zefram

@p5pRT
Copy link
Author

p5pRT commented Dec 18, 2017

@iabyn - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant