This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Cygwin::mount_table, Cygwin::mount_flags
[perl5.git] / README.cygwin
index 5f8d327..ac85a9d 100644 (file)
@@ -27,11 +27,11 @@ platforms.  They run thanks to the Cygwin library which provides the UNIX
 system calls and environment these programs expect.  More information
 about this project can be found at:
 
-  http://www.cygwin.com/
+  F<http://www.cygwin.com/>
 
 A recent net or commercial release of Cygwin is required.
 
-At the time this document was last updated, Cygwin 1.5.2 was current.
+At the time this document was last updated, Cygwin 1.5.24 was current.
 
 
 =head2 Cygwin Configuration
@@ -64,8 +64,8 @@ Configure will B<not> prompt you to install I<man> pages.
 
 On WinNT with either the I<ntea> or I<ntsec> C<CYGWIN> settings, directory
 and file permissions may not be set correctly.  Since the build process
-creates directories and files, to be safe you may want to run a `C<chmod
--R +w *>' on the entire Perl source tree.
+creates directories and files, to be safe you may want to run a
+C<chmod -R +w *> on the entire Perl source tree.
 
 Also, it is a well known WinNT "feature" that files created by a login
 that is a member of the I<Administrators> group will be owned by the
@@ -143,9 +143,10 @@ NOTE: The GDBM library only works on NTFS partitions.
 
 BerkeleyDB is available for Cygwin.
 
-NOTE: The BerkeleyDB library only completely works on NTFS partitions.
+NOTE: The BerkeleyDB library only completely works on NTFS partitions 
+and db-4.3 is flawed.
 
-=item * C<-lcygipc> (C<use IPC::SysV>)
+=item * C<cygserver> (C<use IPC::SysV>)
 
 A port of SysV IPC is available for Cygwin.
 
@@ -231,7 +232,7 @@ You may see some messages during Configure that seem suspicious.
 =item * I<dlsym()>
 
 I<ld2> is needed to build dynamic libraries, but it does not exist
-when C<dlsym()> checking occurs (it is not created until `C<make>' runs).
+when C<dlsym()> checking occurs (it is not created until C<make> runs).
 You will see the following message:
 
   Checking whether your C<dlsym()> needs a leading underscore ...
@@ -287,13 +288,13 @@ Errors like these are normal:
 
 =head2 ld2 on Cygwin
 
-During `C<make>', I<ld2> will be created and installed in your $installbin
+During C<make>, I<ld2> will be created and installed in your $installbin
 directory (where you said to put public executables).  It does not
-wait until the `C<make install>' process to install the I<ld2> script,
-this is because the remainder of the `C<make>' refers to I<ld2> without
+wait until the C<make install> process to install the I<ld2> script,
+this is because the remainder of the C<make> refers to I<ld2> without
 fully specifying its path and does this from multiple subdirectories.
-The assumption is that $installbin is in your current C<PATH>.  If this
-is not the case `C<make>' will fail at some point.  If this happens,
+The assumption is that I<$installbin> is in your current C<PATH>. If this
+is not the case C<make> will fail at some point.  If this happens,
 just manually copy I<ld2> from the source directory to somewhere in
 your C<PATH>.
 
@@ -303,10 +304,10 @@ There are two steps to running the test suite:
 
   make test 2>&1 | tee log.make-test
 
-  cd t;./perl harness 2>&1 | tee ../log.harness
+  cd t; ./perl harness 2>&1 | tee ../log.harness
 
 The same tests are run both times, but more information is provided when
-running as `C<./perl harness>'.
+running as C<./perl harness>.
 
 Test results vary depending on your host system and your Cygwin
 configuration.  If a test can pass in some Cygwin setup, it is always
@@ -323,8 +324,8 @@ user write bit (files are always readable, files are executable if they
 have a F<.{com,bat,exe}> extension or begin with C<#!>, directories are
 always readable and executable).  On WinNT with the I<ntea> C<CYGWIN>
 setting, the additional mode bits are stored as extended file attributes.
-On WinNT with the I<ntsec> C<CYGWIN> setting, permissions use the standard
-WinNT security descriptors and access control lists.  Without one of
+On WinNT with the default I<ntsec> C<CYGWIN> setting, permissions use the 
+standard WinNT security descriptors and access control lists. Without one of
 these options, these tests will fail (listing not updated yet):
 
   Failed Test           List of failed
@@ -356,7 +357,7 @@ If you intend to run only on FAT (or if using AnyDBM_File on FAT),
 run Configure with the -Ui_ndbm and -Ui_dbm options to prevent
 NDBM_File and ODBM_File being built.
 
-With NTFS (and CYGWIN=ntsec), there should be no problems even if
+With NTFS (and no CYGWIN=nontsec), there should be no problems even if
 perl was built on FAT.
 
 =head2 C<fork()> failures in io_* tests
@@ -395,12 +396,21 @@ File names are case insensitive, but case preserving.  A pathname that
 contains a backslash or drive letter is a Win32 pathname (and not subject
 to the translations applied to POSIX style pathnames).
 
+For conversion we have C<Cygwin::win_to_posix_path()> and 
+C<Cygwin::posix_to_win_path()>.
+
+Pathnames may not contain Unicode characters. C<Cygwin> still uses the
+ANSI API calls and no Unicode calls because of newlib deficiencies.
+There's an unofficial unicode patch for cygwin at 
+F<http://www.okisoft.co.jp/esc/utf8-cygwin/>
+
 =item * Text/Binary
 
 When a file is opened it is in either text or binary mode.  In text mode
 a file is subject to CR/LF/Ctrl-Z translations.  With Cygwin, the default
 mode for an C<open()> is determined by the mode of the mount that underlies
-the file.  Perl provides a C<binmode()> function to set binary mode on files
+the file. See C<Cygwin::is_binmount()> and C<Cygwin::is_textmount()>.
+Perl provides a C<binmode()> function to set binary mode on files
 that otherwise would be treated as text.  C<sysopen()> with the C<O_TEXT>
 flag sets text mode on files that otherwise would be treated as binary:
 
@@ -487,7 +497,7 @@ F<http://www.cygwin.com/setup.exe> to install it and run rebaseall.
 
 =item C<Cwd::cwd>
 
-Returns current working directory.
+Returns the current working directory.
 
 =item C<Cygwin::pid_to_winpid>
 
@@ -498,6 +508,60 @@ may not be the same).
 
 Translates a Windows pid to the corresponding cygwin pid (if any).
 
+=item C<Cygwin::win_to_posix_path>
+
+Translates a Windows path to the corresponding cygwin path respecting
+the current mount points. With a second non-null argument returns an
+absolute path. Double-byte characters will not be translated.
+
+=item C<Cygwin::posix_to_win_path>
+
+Translates a cygwin path to the corresponding cygwin path respecting
+the current mount points. With a second non-null argument returns an
+absolute path. Double-byte characters will not be translated.
+
+=item C<Cygwin::mount_table()>
+
+Returns an array of [mnt_dir, mnt_fsname, mnt_type, mnt_opts].
+
+  perl -e 'for $i (Cygwin::mount_table) {print join(" ",@$i),"\n";}'
+  /bin c:\cygwin\bin system binmode,cygexec
+  /usr/bin c:\cygwin\bin system binmode
+  /usr/lib c:\cygwin\lib system binmode
+  / c:\cygwin system binmode
+  /cygdrive/c c: system binmode,noumount
+  /cygdrive/d d: system binmode,noumount
+  /cygdrive/e e: system binmode,noumount 
+
+=item C<Cygwin::mount_flags>
+
+Returns the mount type and flags for a specified mount point.
+A comma-seperated string of mntent->mnt_type (always
+"system" or "user"), then the mntent->mnt_opts, where
+the first is always "binmode" or "textmode".
+
+  system|user,binmode|textmode,exec,cygexec,cygdrive,mixed,
+  notexec,managed,nosuid,devfs,proc,noumount
+
+If the argument is "/cygdrive", just the volume mount settings are returned. 
+
+User mounts override system mounts.
+
+  $ perl -e 'print Cygwin::mount_flags "/usr/bin"'
+  system,binmode,cygexec
+  $ perl -e 'print Cygwin::mount_flags "/cygdrive"'
+  binmode,cygdrive 
+
+=item C<Cygwin::is_binmount>
+
+Returns true if the given cygwin path is binary mounted, false if the
+path is mounted in textmode.
+
+=item C<Cygwin::is_textmount>
+
+Returns true if the given cygwin path is mounted in textmode (C<"\r\n"> C<lt>=C<gt> C<"\n">), 
+false if the path is mounted binary. The result is complementary to C<Cygwin::is_binmount()>.
+
 =back
 
 =head1 INSTALL PERL ON CYGWIN
@@ -506,10 +570,10 @@ This will install Perl, including I<man> pages.
 
   make install 2>&1 | tee log.make-install
 
-NOTE: If C<STDERR> is redirected `C<make install>' will B<not> prompt
+NOTE: If C<STDERR> is redirected C<make install> will B<not> prompt
 you to install I<perl> into F</usr/bin>.
 
-You may need to be I<Administrator> to run `C<make install>'.  If you
+You may need to be I<Administrator> to run C<make install>.  If you
 are not, you must have write access to the directories in question.
 
 Information on installing the Perl documentation in HTML format can be
@@ -564,8 +628,7 @@ be kept as clean as possible (listing not updated yet).
 
   EXTERN.h              - __declspec(dllimport)
   XSUB.h                - __declspec(dllexport)
-  cygwin/cygwin.c       - os_extras (getcwd, spawn, Cygwin::winpid_to_pid, 
-                          Cygwin::pid_to_winpid)
+  cygwin/cygwin.c       - os_extras (getcwd, spawn, and several Cygwin:: functions)
   perl.c                - os_extras
   perl.h                - binmode
   doio.c                - win9x can not rename a file when it is open
@@ -588,6 +651,7 @@ be kept as clean as possible (listing not updated yet).
   lib/ExtUtils/MM_Cygwin.pm
                         - canonpath, cflags, manifypods, perl_archive
   lib/File/Find.pm      - on remote drives stat() always sets st_nlink to 1
+  lib/File/Spec/Cygwin.pm - case_tolerant
   lib/File/Spec/Unix.pm - preserve //unc
   lib/File/Temp.pm      - no directory sticky bit
   lib/perl5db.pl        - use stdin not /dev/tty
@@ -610,8 +674,10 @@ alexander smishlajev <als@turnhere.com>,
 Steven Morlock <newspost@morlock.net>,
 Sebastien Barre <Sebastien.Barre@utc.fr>,
 Teun Burgers <burgers@ecn.nl>,
-Gerrit P. Haase <gp@familiehaase.de>.
+Gerrit P. Haase <gp@familiehaase.de>,
+Reini Urban <rurban@cpan.org>,
+Jan Dubois <jand@activestate.com>.
 
 =head1 HISTORY
 
-Last updated: 2005-02-11
+Last updated: 2007-08-12