1 If you read this file _as_is_, just ignore the funny characters you
2 see. It is written in the POD format (see pod/perlpod.pod) which is
3 specially designed to be readable as is.
7 README.cygwin - Perl for Cygwin
11 This document will help you configure, make, test and install Perl
12 on Cygwin. This document also describes features of Cygwin that will
13 affect how Perl behaves at runtime.
15 B<NOTE:> There are pre-built Perl packages available for Cygwin and a
16 version of Perl is provided on the Cygwin CD. If you have no need to
17 customize the configuration, consider using one of these packages:
19 http://cygutils.netpedia.net/
23 =head2 Cygwin = GNU+Cygnus+Windows (Don't leave UNIX without it)
25 The Cygwin tools are ports of the popular GNU development tools for Win32
26 platforms. They run thanks to the Cygwin library which provides the UNIX
27 system calls and environment these programs expect. More information
28 about this project can be found at:
30 http://sourceware.cygnus.com/cygwin/
32 A recent net or commercial release of Cygwin is required.
34 At the time this document was written, the port required recent
35 development snapshots that were expected to stabilize early in 2000 and
36 be released to the net as B21 and commercially as v1.1.
38 B<NOTE:> At this point, minimal effort has been made to provide
39 compatibility with old (beta) Cygwin releases. The focus has been to
40 provide a high quality release and not worry about working around old
41 Cygwin bugs. If you wish to use Perl with Cygwin B20.1 or earlier,
42 consider using either perl5.005_03 or perl5.005_62, which are available
43 in source and binary form at C<http://cygutils.netpedia.net/> or on the
44 Cygwin CD. If there is significant demand, a patch kit can be developed
45 to port back to earlier Cygwin versions.
49 A recent net or commercial release of I<gcc> is required.
51 At the time this document was written, I<gcc-2.95.2> was current and
52 could be downloaded from:
54 ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/cygwin/gcc-2.95.2/
56 =head2 Cygwin Configuration
58 While building Perl some changes may be necessary to your Cygwin setup so
59 that Perl builds cleanly. These changes are B<not> required for normal
62 B<NOTE:> The binaries that are built will run on all Win32 versions.
63 They do not depend on your host system (Win9x, WinNT) or your Cygwin
64 configuration (I<ntea>, I<ntsec>, binary/text mounts). The only
65 dependencies come from hardcoded pathnames like C</usr/local>. However,
66 your host system and Cygwin configuration will affect Perl's runtime
67 behavior (see L</"TEST">). Some regression tests may fail in different
68 ways depending on your setup. For now, the test suite does not skip
69 tests that do not make sense given a particular setup. If a test can
70 pass in some Cygwin setup, it is left in and explainable test failures
77 Set the C<PATH> environment variable so that Configure finds the Cygwin
78 versions of programs. Any Windows directories should be removed or
79 moved to the end of your C<PATH>.
81 =item * F</bin/cat.exe>
83 There should be an instance of I<cat> in F</bin> (or F</usr/bin>).
84 Configure tests C<#!/bin/cat> and if it is not found, you will see
87 Configure: ./try: No such file or directory
91 If you do not have a F</usr/bin> directory, Configure will B<not> prompt
92 you to install I<perl> into F</usr/bin>.
96 If you do not have I<nroff> (which is part of the I<groff> package),
97 Configure will B<not> prompt you to install man pages.
101 On WinNT with either the I<ntea> or I<ntsec> C<CYGWIN> settings, directory
102 and file permissions may not be set correctly. Since the build process
103 creates files and directories, to be safe you may want to run a `C<chmod
104 -R +w *>' on the entire Perl source tree.
106 Also, it is a well known WinNT "feature" that files created by a login
107 that is a member of the I<Administrators> group will be owned by the
108 I<Administrators> group. Depending on your umask, you may find that you
109 can not write to files that you just created (because you are no longer
110 the owner). When using the I<ntsec> C<CYGWIN> setting, this is not an
111 issue because it "corrects" the ownership to what you would expect on
118 The default options gathered by Configure with the assistance of
119 F<hints/cygwin.sh> will build a Perl that supports dynamic loading
120 (which requires a shared F<libperl.dll>).
122 This will run Configure and keep a record:
124 ./Configure 2>&1 | tee log.configure
126 If you are willing to accept all the defaults add a B<-d> option.
127 However, several useful customizations are available.
129 =head2 Strip Binaries
131 It is possible to strip the EXEs and DLLs created by the build process.
132 The resulting binaries will be significantly smaller. If you want the
133 binaries to be stripped, you can either add a B<-s> option when Configure
136 Any additional ld flags (NOT including libraries)? [none] -s
137 Any special flags to pass to gcc to use dynamic loading? [none] -s
138 Any special flags to pass to ld2 to create a dynamically loaded library?
141 or you can edit F<hints/cygwin.sh> and uncomment the relevant variables
142 near the end of the file.
144 =head2 Optional Libraries
146 Several Perl functions and modules depend on the existence of
147 some optional libraries. Configure will find them if they are
148 installed in one of the directories listed as being used for library
149 searches. Pre-built packages for most of these are available at
150 C<http://cygutils.netpedia.net/>.
156 The crypt libraries in GNU libc have been ported to Cygwin.
158 The DES based Ultra Fast Crypt port was done by Alexey Truhan
160 http://dome.weeg.uiowa.edu/pub/domestic/sos/cw32crypt-dist-0.tgz
162 NOTE: There are various export restrictions on DES implementations,
163 see the glibc README for more details.
165 The MD5 port was done by Andy Piper:
167 http://dome.weeg.uiowa.edu/pub/domestic/sos/libcrypt.tgz
169 More information can also be found at:
171 http://miracle.geol.msu.ru/sos/
173 =item * C<-lgdbm> (C<use GDBM_File>)
175 GDBM is available for Cygwin. GDBM's ndbm/dbm compatibility feature
176 also makes C<NDBM_File> and C<ODBM_File> possible (although they add
179 =item * C<-ldb> (C<use DB_File>)
181 BerkeleyDB is available for Cygwin. Some details can be found in
182 F<ext/DB_File/DB_File.pm>.
184 =item * C<-lcygipc> (C<use IPC::SysV>)
186 A port of SysV IPC is available for Cygwin:
188 http://www.multione.capgemini.fr/tools/pack_ipc/
190 The 1.3 release does not include ftok(), but code for ftok() can be
195 =head2 Configure-time Options
197 The F<INSTALL> document describes several Configure-time options.
198 Some of these will work with Cygwin, others are not yet possible. Also,
199 some of these are experimental.
205 If you want to force Perl to be compiled statically, you can either
206 choose this when Configure prompts you or you can use the Configure
209 =item * C<-Uusemymalloc>
211 By default Perl uses the malloc() included with the Perl source. If you
212 want to force Perl to build with the system malloc(), you can either
213 choose this when Configure prompts you or you can use the Configure
216 =item * C<-Dusemultiplicty>
218 Multiplicity is required when embedding Perl in a C program and using
219 more than one interpreter instance. This works with the Cygwin port.
221 =item * C<-Duseperlio>
223 The PerlIO abstraction works with the Cygwin port.
225 =item * C<-Duse64bits -Duselonglong>
227 I<gcc> supports 64-bit integers. However, several additional long long
228 functions are necessary to use them within Perl (I<{atol,strtoul}l>).
229 These are B<not> yet available with Cygwin.
231 =item * C<-Duselongdouble>
233 I<gcc> supports long doubles (12 bytes). However, several additional
234 long double math functions are necessary to use them within Perl
235 (I<{sqrt,pow,atan2,exp,fmod,log,cos,frexp,sin,floor,modf,atof}l>).
236 These are B<not> yet available with Cygwin.
238 =item * C<-Dusethreads>
240 POSIX threads are B<not> yet implemented in Cygwin.
242 =item * C<-Duselargefiles>
244 Although Win32 supports large files, Cygwin currently uses 32-bit ints
245 for internal size and positional calculations.
249 =head2 Suspicious Warnings
251 You may see some messages during Configure that seem suspicious.
257 Cygwin does not yet implement chroot(), setegid() or seteuid()
258 functionality, but has stub functions that return C<ENOSYS>. You will
259 see a message when Configure detects that its guess conflicts with the
262 *** WHOA THERE!!! ***
263 The recommended value for $d_chroot on this machine was "undef"!
264 Keep the recommended value? [y]
266 You should keep the recommended value.
268 =item * Checking how std your stdio is...
272 Your stdio doesn't appear very std.
278 Simply run make and wait:
280 make 2>&1 | tee log.make
284 Warnings like these are normal:
286 warning: overriding commands for target <file>
287 warning: ignoring old commands for target <file>
289 Warning: no export definition file provided
290 dllwrap will create one, but may not be what you want
294 During `C<make>', I<ld2> will be created and installed in your $installbin
295 directory (where you said to put public executables). It does not
296 wait until the `C<make install>' process to install the I<ld2> script,
297 this is because the remainder of the `C<make>' refers to I<ld2> without
298 fully specifying its path and does this from multiple subdirectories.
299 The assumption is that $installbin is in your current C<PATH>. If this
300 is not the case or if you do not have an I<install> program, `C<make>'
301 will fail at some point. If this happens, just manually copy I<ld2>
302 from the source directory to someplace in your C<PATH>.
306 There are two steps to running the test suite:
308 make test 2>&1 | tee log.make-test
310 cd t;./perl harness 2>&1 | tee ../log.harness
312 The same tests are run both times, but more information is provided when
313 running as `C<./perl harness>'.
315 Test results vary depending on your host system and your Cygwin
316 configuration. It is possible that Cygwin will pass all the tests, but it
317 is more likely that some tests will fail for one of the the reasons below.
319 =head2 File Permissions
321 UNIX file permissions are based on sets of mode bits for
322 {read,write,execute} for each {user,group,other}. By default Cygwin only
323 tracks the Win32 readonly attribute represented as the UNIX file user
324 write bit (files are always readable, files are executable if they have
325 a F<.{com,bat,exe}> extension or begin with C<#!>, directories are always
326 readable and executable). On WinNT with the I<ntea> C<CYGWIN> setting,
327 the remaining mode bits are stored as extended attributes. On WinNT
328 with the I<ntsec> C<CYGWIN> setting, permissions use the standard WinNT
329 security descriptors and access control lists. Without one of these
330 options, these tests will fail:
332 Failed Test List of failed
333 ------------------------------------
340 lib/glob-basic.t 9 (directory always readable)
344 op/stat.t 9, 20 (.tmp not an executable extension)
348 FAT partitions do not support hard links (whereas NTFS does), in which
349 case Cygwin implements link() by copying the file. These tests will fail:
351 Failed Test List of failed
352 ------------------------------------
356 =head2 Filetime Granularity
358 On FAT partitions the filetime granularity is 2 seconds. The following
361 Failed Test List of failed
362 ------------------------------------
365 =head2 Tainting Checks
367 When Perl is running in taint mode, C<$ENV{PATH}> is considered tainted
368 and not used, so DLLs not in the default system directories will not
369 be found. While the tests are running you will see warnings popup from
370 the system with messages like:
373 Error Starting Program
374 A required .DLL file, CYGWIN1.DLL, was not found
377 perl.exe or sh.exe - Unable to Locate DLL
378 The dynamic link library cygwin1.dll could not be found in the
381 Just click OK and ignore them. When running `C<make test>', 2 popups
382 occur. During `C<./perl harness>', 4 popups occur. Also, these tests
385 Failed Test List of failed
386 ------------------------------------
387 op/taint.t 1, 3, 31, 37
389 Alternatively, you can copy F<cygwin1.dll> into one of the Windows system
390 directories (although, this is B<not> recommended).
394 Cygwin does not need F</etc/group>, in which case the F<op/grent.t>
395 test will be skipped. The check performed by F<op/grent.t> expects to
396 see entries that use the members field, otherwise this test will fail:
398 Failed Test List of failed
399 ------------------------------------
402 =head2 Unexplained Failures
404 Any additional tests that fail are likely due to bugs in Cygwin. It is
405 expected that by the time of the next net release most of these will
406 be solved so they are not described here. None of the current bugs are
407 serious enough that workarounds are needed.
409 =head2 Script Portability
411 Cygwin does an outstanding job of providing UNIX-like semantics on top
412 of Win32 systems. However, in addition to the items noted above, there
413 are some differences that you should know about. This is only a very
414 brief guide to portability, more information about Cygwin can be found
415 in the Cygwin documentation.
421 Cygwin pathnames can be separated by forward (F</>) or backward (F<\>)
422 slashes. They may also begin with drive letters (F<C:>) or Universal
423 Naming Codes (F<//UNC>). DOS device names (F<aux>, F<con>, F<prn>,
424 F<com*>, F<lpt?>) are invalid as base filenames. However, they can be
425 used in extensions (e.g., F<hello.aux>). Names may not contain these
430 File names are case insensitive, but case preserving. With the I<mixed>
431 C<CYGWIN> setting, file names are mixed-case (although, directory names
432 remain case insensitive).
434 The I<mixed> setting is only available with the "coolview" version of
435 F<cygwin1.dll> provided by Sergey Okhapkin at:
437 ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Okhapkin_Sergey/
441 When a file is opened it is in either text or binary mode. In text mode
442 it is subject to CR/LF/Ctrl-Z translations. Perl provides a binmode()
443 function to force binary mode on files that otherwise would be treated
444 as text. With Cygwin, the default mode for an open() is determined by the
445 mode of the mount that underlies a file. For binmode() to be effective,
446 the underlying mount must be text. There is no way to force text mode
447 on a file underneath a binary mount. The text/binary issue is covered
448 at length in the Cygwin documentation.
450 lseek() only works with files opened in binary mode.
454 The Cygwin stat() makes the F<.exe> extension transparent by looking for
455 a F<foo.exe> when you ask for F<foo> (unless a F<foo> also exists).
456 Cygwin does not require a F<.exe> extension, but I<gcc> adds it
457 automatically when building a program. However, when accessing an
458 executable as a normal file (e.g., I<install> or I<cp> in a makefile)
459 the F<.exe> is not transparent.
461 NOTE: There is a version of I<install> that understands F<.exe>, it can
464 ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Humblet_Pierre_A/
468 On WinNT with the I<ntsec> C<CYGWIN> setting, chown() can change a file's
469 user and group IDs. In all other configurations chown() is a no-op,
470 although this is appropriate on Win9x since there is no security model.
472 =item * Miscellaneous
474 File locking using the C<F_GETLK> command to fcntl() is a stub that
477 Win32 can not unlink() an open file (but this is emulated by Cygwin).
479 Win9x can not rename() an open file (although WinNT can).
485 This will install Perl, including man pages.
487 make install 2>&1 | tee log.make-install
489 You may need to be I<Administrator> to run `C<make install>'. If you
490 are not, you must have write access to the directories in question.
492 Information on installing the Perl documentation in HTML format can be
493 found in the F<INSTALL> document.
497 These are the files in the Perl release that contain references to Cygwin.
498 These very brief notes attempt to explain the reason for all conditional
499 code. Hopefully, keeping this up to date will allow the Cygwin port to
500 be kept as clean as possible.
507 Changes Changes5.005 Changes5.004
508 AUTHORS MAINTAIN MANIFEST
509 README.cygwin README.win32
510 pod/perl.pod pod/perlfaq3.pod pod/perlhist.pod pod/perlmodlib.pod
511 pod/perlport.pod pod/perltoc.pod pod/perl5004delta.pod
513 =item Build, Configure, Make, Install
518 ext/IPC/SysV/hints/cygwin.pl
519 ext/NDBM_File/hints/cygwin.pl
520 ext/ODBM_File/hints/cygwin.pl
522 Porting/patchls - cygwin in port list
523 Makefile.SH - linklibperl, cygwin/Makefile.SHs
524 makedepend.SH - uwinfix
525 Configure - help finding hints from uname,
526 shared libperl required for dynamic loading
527 installman - man pages with :: translated to .
528 installperl - install dll, install to pods
532 t/io/tell.t - binmode
533 t/op/magic.t - $^X WORKAROUND, s/.exe//
534 t/op/stat.t - no /dev, no -u (setuid)
536 =item Compiled Perl Source
538 doio.c - win9x can not rename a file when it is open
539 EXTERN.h - __declspec(dllimport)
540 XSUB.h - __declspec(dllexport)
542 mg.c - environ WORKAROUND
543 util.c - environ WORKAROUND
544 unixish.h - environ WORKAROUND
546 =item Compiled Module Source
548 ext/POSIX/POSIX.xs - tzname defined externally
549 ext/SDBM_File/sdbm/pair.c
550 - EXTCONST needs to be redefined from EXTERN.h
551 ext/SDBM_File/sdbm/sdbm.c
554 =item Perl Modules/Scripts
556 lib/perl5db.pl - use stdin not /dev/tty
557 utils/perlcc.PL - DynaLoader.a in compile, -DUSEIMPORTLIB
558 utils/perldoc.PL - version comment
559 lib/File/Spec/Unix.pm - preserve //unc
560 lib/ExtUtils/MakeMaker.pm
561 - require MM_Cygwin.pm
562 lib/ExtUtils/MM_Cygwin.pm
563 - canonpath, cflags, manifypods, perl_archive
570 Upon each start, I<make> warns that a rule for F<perlmain.o> is overridden
571 (but there seems to be no better solution than adding an explicit define).
573 `C<make clean>' does not remove library F<.def> and F<.exe.stackdump>
576 The I<ld2> script contains references to the source directory. You should
577 change these to C</usr/local/bin> (or whatever) after install.
581 Charles Wilson E<lt>cwilson@ece.gatech.eduE<gt>,
582 Eric Fifer E<lt>efifer@sanwaint.comE<gt>,
583 alexander smishlajev E<lt>als@turnhere.comE<gt>,
584 Steven Morlock E<lt>newspost@morlock.netE<gt>,
585 Sebastien Barre E<lt>Sebastien.Barre@utc.frE<gt>,
586 Teun Burgers E<lt>burgers@ecn.nlE<gt>.
590 Last updated: 28 January 2000