=begin pod

=TITLE class IO::Spec::Cygwin

=SUBTITLE Platform specific operations on file and directory paths for Cygwin

    class IO::Spec::QNX is IO::Spec { }

This sub-class of L<IO::Spec> will be available from the
C<$*SPEC> variable for a perl running on C<Cygwin> .

B<NOTE:> the C<IO::Spec::*> classes provide low-level path operations. Unless
you're creating your own high-level path manipulation routines, you don't
need to use C<IO::Spec::*>. Use L«C<IO::Path>|/type/IO::Path» instead.

B<NOTE2:> no special validation is done by these classes (e.g. check whether
path contains a NUL byte). It is the job of higher-level classes, like
L«C<IO::Path>|/type/IO::Path», to do that.

=head1 Methods

=head2 method abs2rel

    method abs2rel(IO::Path:D $path, IO::Path:D $base = $*CWD --> Str:D)

Returns a string that represents C<$path>, but relative to C<$base> path.
Both C<$path> and C<$base> may be relative paths C<$bar> defaults to C<$*CWD>.
Uses L«C<IO::Spec::Win32>|/type/IO::Spec::Win32»'s semantics.

=head2 method canonpath

    method canonpath(Str() $path, :$parent --> Str:D)

Returns a string that is a canonical representation of C<$path>. If C<:$parent>
is set to true, will also clean up references to parent directories. B<NOTE:>
the routine does not access the filesystem.

    IO::Spec::Cygwin.canonpath(｢C:\foo\\..\bar\..\ber｣).say;
    # OUTPUT: «C:/foo/../bar/../ber␤»

    IO::Spec::Cygwin.canonpath("foo///./../bar/../ber").say;
    # OUTPUT: «foo/../bar/../ber␤»

    IO::Spec::Cygwin.canonpath("foo///./../bar/../ber", :parent).say;
    # OUTPUT: «ber␤»

=head2 method catdir

    method catdir (*@parts --> Str:D)

Concatenates multiple path fragments and returns the canonical representation
of the resultant path as a string. The C<@parts> are L«C<Str>|/type/Str» objects
and are allowed to contain path separators.

    IO::Spec::Cygwin.catdir(<foo/bar ber perl>).say;
    # OUTPUT: «foo/bar/ber/perl␤»

=head2 method catpath

    method catpath (Str:D $volume, Str:D $dirs, Str:D $file --> Str:D)

Same as L«C<IO::Spec::Win32.catpath>|/type/IO::Spec::Win32#method_catpath»,
except will also change all backslashes to slashes at the end:

    IO::Spec::Cygwin.catpath('C:', '/some/dir', 'foo.txt').say;
    # OUTPUT: «C:/some/dir/foo.txt␤»

    IO::Spec::Cygwin.catpath('C:', '/some/dir', '').say;
    # OUTPUT: «C:/some/dir␤»

    IO::Spec::Cygwin.catpath('', '/some/dir', 'foo.txt').say;
    # OUTPUT: «/some/dir/foo.txt␤»

    IO::Spec::Cygwin.catpath('E:', '', 'foo.txt').say;
    # OUTPUT: «E:foo.txt␤»

=head2 method tmpdir

Defined as:

        method tmpdir(--> IO::Path:D)

Attempts to locate a system's temporary directory by checking several typical directories and environmental variables. Uses currect directory if no suitable directories are found.

=end pod

# vim: expandtab shiftwidth=4 ft=perl6
