home *** CD-ROM | disk | FTP | other *** search
- If you read this file _as_is_, just ignore the funny characters you
- see. It is written in the POD format (see pod/perlpod.pod) which is
- specially designed to be readable as is.
-
- =head1 NAME
-
- README.cygwin - Perl for Cygwin
-
- =head1 SYNOPSIS
-
- This document will help you configure, make, test and install Perl
- on Cygwin. This document also describes features of Cygwin that will
- affect how Perl behaves at runtime.
-
- B<NOTE:> There are pre-built Perl packages available for Cygwin and a
- version of Perl is provided on the Cygwin CD. If you have no need to
- customize the configuration, consider using one of these packages:
-
- http://cygutils.netpedia.net/
-
- =head1 PREREQUISITES
-
- =head2 Cygwin = GNU+Cygnus+Windows (Don't leave UNIX without it)
-
- The Cygwin tools are ports of the popular GNU development tools for Win32
- 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://sourceware.cygnus.com/cygwin/
-
- A recent net or commercial release of Cygwin is required.
-
- At the time this document was written, the port required recent
- development snapshots that were expected to stabilize early in 2000 and
- be released to the net as B21 and commercially as v1.1.
-
- B<NOTE:> At this point, minimal effort has been made to provide
- compatibility with old (beta) Cygwin releases. The focus has been to
- provide a high quality release and not worry about working around old
- Cygwin bugs. If you wish to use Perl with Cygwin B20.1 or earlier,
- consider using either perl5.005_03 or perl5.005_62, which are available
- in source and binary form at C<http://cygutils.netpedia.net/> or on the
- Cygwin CD. If there is significant demand, a patch kit can be developed
- to port back to earlier Cygwin versions.
-
- =head2 Compiler
-
- A recent net or commercial release of I<gcc> is required.
-
- At the time this document was written, I<gcc-2.95.2> was current and
- could be downloaded from:
-
- ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/cygwin/gcc-2.95.2/
-
- =head2 Cygwin Configuration
-
- While building Perl some changes may be necessary to your Cygwin setup so
- that Perl builds cleanly. These changes are B<not> required for normal
- Perl usage.
-
- B<NOTE:> The binaries that are built will run on all Win32 versions.
- They do not depend on your host system (Win9x, WinNT) or your Cygwin
- configuration (I<ntea>, I<ntsec>, binary/text mounts). The only
- dependencies come from hardcoded pathnames like C</usr/local>. However,
- your host system and Cygwin configuration will affect Perl's runtime
- behavior (see L</"TEST">). Some regression tests may fail in different
- ways depending on your setup. For now, the test suite does not skip
- tests that do not make sense given a particular setup. If a test can
- pass in some Cygwin setup, it is left in and explainable test failures
- are documented.
-
- =over 4
-
- =item * C<PATH>
-
- Set the C<PATH> environment variable so that Configure finds the Cygwin
- versions of programs. Any Windows directories should be removed or
- moved to the end of your C<PATH>.
-
- =item * F</bin/cat.exe>
-
- There should be an instance of I<cat> in F</bin> (or F</usr/bin>).
- Configure tests C<#!/bin/cat> and if it is not found, you will see
- the error:
-
- Configure: ./try: No such file or directory
-
- =item * F</usr/bin>
-
- If you do not have a F</usr/bin> directory, Configure will B<not> prompt
- you to install I<perl> into F</usr/bin>.
-
- =item * I<nroff>
-
- If you do not have I<nroff> (which is part of the I<groff> package),
- Configure will B<not> prompt you to install man pages.
-
- =item * Permissions
-
- 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 files and directories, 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
- I<Administrators> group. Depending on your umask, you may find that you
- can not write to files that you just created (because you are no longer
- the owner). When using the I<ntsec> C<CYGWIN> setting, this is not an
- issue because it "corrects" the ownership to what you would expect on
- a UNIX system.
-
- =back
-
- =head1 CONFIGURE
-
- The default options gathered by Configure with the assistance of
- F<hints/cygwin.sh> will build a Perl that supports dynamic loading
- (which requires a shared F<libperl.dll>).
-
- This will run Configure and keep a record:
-
- ./Configure 2>&1 | tee log.configure
-
- If you are willing to accept all the defaults add a B<-d> option.
- However, several useful customizations are available.
-
- =head2 Strip Binaries
-
- It is possible to strip the EXEs and DLLs created by the build process.
- The resulting binaries will be significantly smaller. If you want the
- binaries to be stripped, you can either add a B<-s> option when Configure
- prompts you,
-
- Any additional ld flags (NOT including libraries)? [none] -s
- Any special flags to pass to gcc to use dynamic linking? [none] -s
- Any special flags to pass to ld2 to create a dynamically loaded library?
- [none] -s
-
- or you can edit F<hints/cygwin.sh> and uncomment the relevant variables
- near the end of the file.
-
- =head2 Optional Libraries
-
- Several Perl functions and modules depend on the existence of
- some optional libraries. Configure will find them if they are
- installed in one of the directories listed as being used for library
- searches. Pre-built packages for most of these are available at
- C<http://cygutils.netpedia.net/>.
-
- =over 4
-
- =item * C<-lcrypt>
-
- The crypt libraries in GNU libc have been ported to Cygwin.
-
- The DES based Ultra Fast Crypt port was done by Alexey Truhan:
-
- http://dome.weeg.uiowa.edu/pub/domestic/sos/cw32crypt-dist-0.tgz
-
- NOTE: There are various export restrictions on DES implementations,
- see the glibc README for more details.
-
- The MD5 port was done by Andy Piper:
-
- http://dome.weeg.uiowa.edu/pub/domestic/sos/libcrypt.tgz
-
- More information can also be found at:
-
- http://miracle.geol.msu.ru/sos/
-
- =item * C<-lgdbm> (C<use GDBM_File>)
-
- GDBM is available for Cygwin. GDBM's ndbm/dbm compatibility feature
- also makes C<NDBM_File> and C<ODBM_File> possible (although they add
- little extra value).
-
- =item * C<-ldb> (C<use DB_File>)
-
- BerkeleyDB is available for Cygwin. Some details can be found in
- F<ext/DB_File/DB_File.pm>.
-
- =item * C<-lcygipc> (C<use IPC::SysV>)
-
- A port of SysV IPC is available for Cygwin.
-
- NOTE: This has B<not> been extensively tested. In particular,
- C<d_semctl_semun> is undefined because it fails a configure test and on
- Win9x the shm*() functions seem to hang.
-
- =back
-
- =head2 Configure-time Options
-
- The F<INSTALL> document describes several Configure-time options. Some of
- these will work with Cygwin, others are not yet possible. Also, some of
- these are experimental. You can either select an option when Configure
- prompts you or you can define (undefine) symbols on the command line.
-
- =over 4
-
- =item * C<-Uusedl>
-
- Undefining this symbol forces Perl to be compiled statically.
-
- =item * C<-Uusemymalloc>
-
- By default Perl uses the malloc() included with the Perl source. If you
- want to force Perl to build with the system malloc() undefine this symbol.
-
- =item * C<-Dusemultiplicity>
-
- Multiplicity is required when embedding Perl in a C program and using
- more than one interpreter instance. This works with the Cygwin port.
-
- =item * C<-Duseperlio>
-
- The PerlIO abstraction works with the Cygwin port.
-
- =item * C<-Duse64bitint>
-
- I<gcc> supports 64-bit integers. However, several additional long long
- functions are necessary to use them within Perl (I<{strtol,strtoul}l>).
- These are B<not> yet available with Cygwin.
-
- =item * C<-Duselongdouble>
-
- I<gcc> supports long doubles (12 bytes). However, several additional
- long double math functions are necessary to use them within Perl
- (I<{atan2,cos,exp,floor,fmod,frexp,log,modf,pow,sin,sqrt}l,strtold>).
- These are B<not> yet available with Cygwin.
-
- =item * C<-Dusethreads>
-
- POSIX threads are B<not> yet implemented in Cygwin.
-
- =item * C<-Duselargefiles>
-
- Although Win32 supports large files, Cygwin currently uses 32-bit integers
- for internal size and position calculations.
-
- =back
-
- =head2 Suspicious Warnings
-
- You may see some messages during Configure that seem suspicious.
-
- =over 4
-
- =item * Whoa There
-
- Cygwin does not yet implement chroot(), setegid() or seteuid()
- functionality, but has stub functions that return C<ENOSYS>. You will
- see a message when Configure detects that its guess conflicts with the
- hint file.
-
- *** WHOA THERE!!! ***
- The recommended value for $d_chroot on this machine was "undef"!
- Keep the recommended value? [y]
-
- You should keep the recommended value.
-
- =item * dlsym
-
- I<ld2> is needed to build dynamic libraries, but it does not exist
- when dlsym() checking occurs (it is not created until `C<make>' runs).
- You will see the following message:
-
- Checking whether your dlsym() needs a leading underscore ...
- I can't compile and run the test program.
- I'm guessing that dlsym doesn't need a leading underscore.
-
- Since the guess is correct, this is not a problem.
-
- =item * Win9x and d_eofnblk
-
- Win9x does not correctly report C<EOF> with a non-blocking read on a
- closed pipe. You will see the following messages:
-
- But it also returns -1 to signal EOF, so be careful!
- WARNING: you can't distinguish between EOF and no data!
-
- *** WHOA THERE!!! ***
- The recommended value for $d_eofnblk on this machine was "define"!
- Keep the recommended value? [y]
-
- At least for consistency with WinNT, you should keep the recommended
- value.
-
- =item * Checking how std your stdio is...
-
- Configure reports:
-
- Your stdio doesn't appear very std.
-
- This is correct.
-
- =item * Compiler/Preprocessor defines
-
- The following error occurs because of the Cygwin C<#define> of
- C<_LONG_DOUBLE>:
-
- Guessing which symbols your C compiler and preprocessor define...
- try.c:3847: parse error
-
- This failure does not seem to cause any problems.
-
- =back
-
- =head1 MAKE
-
- Simply run make and wait:
-
- make 2>&1 | tee log.make
-
- =head2 Warnings
-
- Warnings like these are normal:
-
- warning: overriding commands for target <file>
- warning: ignoring old commands for target <file>
-
- Warning: no export definition file provided
- dllwrap will create one, but may not be what you want
-
- =head2 ld2
-
- 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
- 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 or if you do not have an I<install> program, `C<make>'
- will fail at some point. If this happens, just manually copy I<ld2>
- from the source directory to someplace in your C<PATH>.
-
- =head1 TEST
-
- 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
-
- The same tests are run both times, but more information is provided when
- running as `C<./perl harness>'.
-
- Test results vary depending on your host system and your Cygwin
- configuration. It is possible that Cygwin will pass all the tests,
- but it is more likely that some tests will fail for one of these reasons.
-
- =head2 File Permissions
-
- UNIX file permissions are based on sets of mode bits for
- {read,write,execute} for each {user,group,other}. By default Cygwin only
- tracks the Win32 readonly attribute represented as the UNIX file 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 remaining mode bits are stored as extended attributes. On WinNT
- with the 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:
-
- Failed Test List of failed
- ------------------------------------
- io/fs.t 5, 7, 9-10
- lib/anydbm.t 2
- lib/db-btree.t 20
- lib/db-hash.t 16
- lib/db-recno.t 18
- lib/gdbm.t 2
- lib/ndbm.t 2
- lib/odbm.t 2
- lib/sdbm.t 2
- op/stat.t 9, 20 (.tmp not an executable extension)
-
- =head2 Hard Links
-
- FAT partitions do not support hard links (whereas NTFS does), in which
- case Cygwin implements link() by copying the file. These tests will fail:
-
- Failed Test List of failed
- ------------------------------------
- io/fs.t 4
- op/stat.t 3
-
- =head2 Filetime Granularity
-
- On FAT partitions the filetime granularity is 2 seconds. The following
- test will fail:
-
- Failed Test List of failed
- ------------------------------------
- io/fs.t 18
-
- =head2 Tainting Checks
-
- When Perl is running in taint mode, C<$ENV{PATH}> is considered tainted
- and not used, so DLLs not in the default system directories will not
- be found. While the tests are running you will see warnings popup from
- the system with messages like:
-
- Win9x
- Error Starting Program
- A required .DLL file, CYGWIN1.DLL, was not found
-
- WinNT
- perl.exe or sh.exe - Unable to Locate DLL
- The dynamic link library cygwin1.dll could not be found in the
- specified path ...
-
- Just click OK and ignore them. When running `C<make test>', 2 popups
- occur. During `C<./perl harness>', 4 popups occur. Also, these tests
- will fail:
-
- Failed Test List of failed
- ------------------------------------
- op/taint.t 1, 3, 31, 37
-
- Alternatively, you can copy F<cygwin1.dll> into one of the Windows system
- directories (although, this is B<not> recommended).
-
- =head2 /etc/group
-
- Cygwin does not require F</etc/group>, in which case the F<op/grent.t>
- test will be skipped. The check performed by F<op/grent.t> expects to
- see entries that use the members field, otherwise this test will fail:
-
- Failed Test List of failed
- ------------------------------------
- op/grent.t 1
-
- =head2 Unexplained Failures
-
- Any additional tests that fail are likely due to bugs in Cygwin or the
- optional libraries. It is expected that by the time of the next net
- release most of these will be solved so they are not described here.
-
- =head2 Script Portability
-
- Cygwin does an outstanding job of providing UNIX-like semantics on
- top of Win32 systems. However, in addition to the items noted above,
- there are some differences that you should know about. This is only a
- very brief guide to portability, more information can be found in the
- Cygwin documentation.
-
- =over 4
-
- =item * Pathnames
-
- Cygwin pathnames can be separated by forward (F</>) or backward (F<\>)
- slashes. They may also begin with drive letters (F<C:>) or Universal
- Naming Codes (F<//UNC>). DOS device names (F<aux>, F<con>, F<prn>,
- F<com*>, F<lpt?>) are invalid as base filenames. However, they can be
- used in extensions (e.g., F<hello.aux>). Names may not contain these
- characters:
-
- : * ? " < > |
-
- File names are case insensitive, but case preserving. With the I<mixed>
- C<CYGWIN> setting, file names are mixed-case (although, directory names
- remain case insensitive).
-
- The I<mixed> setting is only available with the "coolview" version of
- F<cygwin1.dll> provided by Sergey Okhapkin at:
-
- ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Okhapkin_Sergey/
-
- =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 open() is determined by the mode of the mount that underlies
- the file. Perl provides a binmode() function to set binary mode on files
- that otherwise would be treated as text. sysopen() with the C<O_TEXT>
- flag sets text mode on files that otherwise would be treated as binary:
-
- sysopen(FOO, "bar", O_WRONLY|O_CREAT|O_TEXT)
-
- lseek(), tell() and sysseek() only work with files opened in binary mode.
-
- The text/binary issue is covered at length in the Cygwin documentation.
-
- =item * F<.exe>
-
- The Cygwin stat() makes the F<.exe> extension transparent by looking for
- a F<foo.exe> when you ask for F<foo> (unless a F<foo> also exists).
- Cygwin does not require a F<.exe> extension, but I<gcc> adds it
- automatically when building a program. However, when accessing an
- executable as a normal file (e.g., I<install> or I<cp> in a makefile)
- the F<.exe> is not transparent.
-
- NOTE: There is a version of I<install> that understands the F<.exe>
- semantics, it can be found at:
-
- ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Humblet_Pierre_A/
-
- =item * chown()
-
- On WinNT with the I<ntsec> C<CYGWIN> setting, chown() can change a file's
- user and group IDs. In all other configurations chown() is a no-op,
- although this is appropriate on Win9x since there is no security model.
-
- =item * Miscellaneous
-
- File locking using the C<F_GETLK> command to fcntl() is a stub that
- returns C<ENOSYS>.
-
- Win9x can not rename() an open file (although WinNT can).
-
- =back
-
- =head1 INSTALL
-
- This will install Perl, including man pages.
-
- make install | tee log.make-install
-
- 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
- are not, you must have write access to the directories in question.
-
- Information on installing the Perl documentation in HTML format can be
- found in the F<INSTALL> document.
-
- =head1 MANIFEST
-
- These are the files in the Perl release that contain references to Cygwin.
- These very brief notes attempt to explain the reason for all conditional
- code. Hopefully, keeping this up to date will allow the Cygwin port to
- be kept as clean as possible.
-
- =over 4
-
- =item Documentation
-
- INSTALL README.cygwin
- Changes Changes5.005 Changes5.004
- AUTHORS MAINTAIN MANIFEST README.win32
- pod/perl.pod pod/perlfaq3.pod pod/perlhist.pod pod/perlmodlib.pod
- pod/perlport.pod pod/perltoc.pod pod/perl5004delta.pod
-
- =item Build, Configure, Make, Install
-
- cygwin/Makefile.SHs
- cygwin/ld2.in
- cygwin/perlld.in
- ext/IPC/SysV/hints/cygwin.pl
- ext/NDBM_File/hints/cygwin.pl
- ext/ODBM_File/hints/cygwin.pl
- hints/cygwin.sh
- Configure - help finding hints from uname,
- shared libperl required for dynamic loading
- Makefile.SH - linklibperl
- Porting/patchls - cygwin in port list
- installman - man pages with :: translated to .
- installperl - install dll/ld2/perlld, install to pods
- makedepend.SH - uwinfix
-
- =item Tests
-
- t/io/tell.t - binmode
- t/lib/glob-basic.t - Win32 directory list access differs from read mode
- t/op/magic.t - $^X/symlink WORKAROUND, s/.exe//
- t/op/stat.t - no /dev, skip Win32 ftCreationTime quirk
- (cache manager sometimes preserves ctime of file
- previously created and deleted), no -u (setuid)
-
- =item Compiled Perl Source
-
- EXTERN.h - __declspec(dllimport)
- XSUB.h - __declspec(dllexport)
- cygwin/cygwin.c - os_extras (getcwd)
- perl.c - os_extras
- perl.h - binmode
- doio.c - win9x can not rename a file when it is open
- pp_sys.c - do not define h_errno
- mg.c - environ WORKAROUND
- unixish.h - environ WORKAROUND
- util.c - environ WORKAROUND
-
- =item Compiled Module Source
-
- ext/POSIX/POSIX.xs - tzname defined externally
- ext/SDBM_File/sdbm/pair.c
- - EXTCONST needs to be redefined from EXTERN.h
- ext/SDBM_File/sdbm/sdbm.c
- - binary open
-
- =item Perl Modules/Scripts
-
- lib/Cwd.pm - hook to internal Cwd::cwd
- lib/ExtUtils/MakeMaker.pm
- - require MM_Cygwin.pm
- lib/ExtUtils/MM_Cygwin.pm
- - canonpath, cflags, manifypods, perl_archive
- lib/File/Spec/Unix.pm - preserve //unc
- lib/perl5db.pl - use stdin not /dev/tty
- utils/perlcc.PL - DynaLoader.a in compile, -DUSEIMPORTLIB
- utils/perldoc.PL - version comment
-
- =back
-
- =head1 BUGS
-
- Upon each start, I<make> warns that a rule for F<perlmain.o> is overridden
- (but there seems to be no better solution than adding an explicit define).
-
- `C<make clean>' does not remove library F<.def> and F<.exe.stackdump>
- files.
-
- The I<ld2> script contains references to the source directory. You should
- change these to C</usr/local/bin> (or whatever) after install.
-
- =head1 AUTHORS
-
- Charles Wilson E<lt>cwilson@ece.gatech.eduE<gt>,
- Eric Fifer E<lt>efifer@sanwaint.comE<gt>,
- alexander smishlajev E<lt>als@turnhere.comE<gt>,
- Steven Morlock E<lt>newspost@morlock.netE<gt>,
- Sebastien Barre E<lt>Sebastien.Barre@utc.frE<gt>,
- Teun Burgers E<lt>burgers@ecn.nlE<gt>.
-
- =head1 HISTORY
-
- Last updated: 1 March 2000
-