This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
ab60a58a0abadbae7424d23fdf4b5d35c2a0e176
[perl5.git] / README.cygwin
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.
4
5 =head1 NAME
6
7 README.cygwin - Perl for Cygwin
8
9 =head1 SYNOPSIS
10
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.
14
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:
18
19   http://cygutils.netpedia.net/
20
21 =head1 PREREQUISITES
22
23 =head2 Cygwin = GNU+Cygnus+Windows (Don't leave UNIX without it)
24
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:
29
30   http://sourceware.cygnus.com/cygwin/
31
32 A recent net or commercial release of Cygwin is required.
33
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.
37
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.
46
47 =head2 Compiler
48
49 A recent net or commercial release of I<gcc> is required.
50
51 At the time this document was written, I<gcc-2.95.2> was current and
52 could be downloaded from:
53
54   ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/cygwin/gcc-2.95.2/
55
56 =head2 Cygwin Configuration
57
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
60 Perl usage.
61
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
71 are documented.
72
73 =over 4
74
75 =item * C<PATH>
76
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>.
80
81 =item * F</bin/cat.exe>
82
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
85 the error:
86
87   Configure: ./try: No such file or directory
88
89 =item * F</usr/bin>
90
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>.
93
94 =item * I<nroff>
95
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.
98
99 =item * Permissions
100
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.
105
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
112 a UNIX system.
113
114 =back
115
116 =head1 CONFIGURE
117
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>).
121
122 This will run Configure and keep a record:
123
124   ./Configure 2>&1 | tee log.configure
125
126 If you are willing to accept all the defaults add a B<-d> option.
127 However, several useful customizations are available.
128
129 =head2 Strip Binaries
130
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
134 prompts you,
135
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?
139   [none] -s
140
141 or you can edit F<hints/cygwin.sh> and uncomment the relevant variables
142 near the end of the file.
143
144 =head2 Optional Libraries
145
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/>.
151
152 =over 4
153
154 =item * C<-lcrypt>
155
156 The crypt libraries in GNU libc have been ported to Cygwin.
157
158 The DES based Ultra Fast Crypt port was done by Alexey Truhan
159
160   http://dome.weeg.uiowa.edu/pub/domestic/sos/cw32crypt-dist-0.tgz
161
162 NOTE: There are various export restrictions on DES implementations,
163 see the glibc README for more details.
164
165 The MD5 port was done by Andy Piper:
166
167   http://dome.weeg.uiowa.edu/pub/domestic/sos/libcrypt.tgz
168
169 More information can also be found at:
170
171   http://miracle.geol.msu.ru/sos/
172
173 =item * C<-lgdbm> (C<use GDBM_File>)
174
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
177 little extra value).
178
179 =item * C<-ldb> (C<use DB_File>)
180
181 BerkeleyDB is available for Cygwin.  Some details can be found in
182 F<ext/DB_File/DB_File.pm>.
183
184 =item * C<-lcygipc> (C<use IPC::SysV>)
185
186 A port of SysV IPC is available for Cygwin:
187
188   http://www.multione.capgemini.fr/tools/pack_ipc/
189
190 The 1.3 release does not include ftok(), but code for ftok() can be
191 borrowed from glibc.
192
193 =back
194
195 =head2 Configure-time Options
196
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.
200
201 =over 4
202
203 =item * C<-Uusedl>
204
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
207 command line option.
208
209 =item * C<-Uusemymalloc>
210
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
214 command line option.
215
216 =item * C<-Dusemultiplicty>
217
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.
220
221 =item * C<-Duseperlio>
222
223 The PerlIO abstraction works with the Cygwin port.
224
225 =item * C<-Duse64bits -Duselonglong>
226
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.
230
231 =item * C<-Duselongdouble>
232
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.
237
238 =item * C<-Dusethreads>
239
240 POSIX threads are B<not> yet implemented in Cygwin.
241
242 =item * C<-Duselargefiles>
243
244 Although Win32 supports large files, Cygwin currently uses 32-bit ints
245 for internal size and positional calculations.
246
247 =back
248
249 =head2 Suspicious Warnings
250
251 You may see some messages during Configure that seem suspicious.
252
253 =over 4
254
255 =item * Whoa There
256
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
260 hint file.
261
262   *** WHOA THERE!!! ***
263       The recommended value for $d_chroot on this machine was "undef"!
264       Keep the recommended value? [y]
265
266 You should keep the recommended value.
267
268 =item * Checking how std your stdio is...
269
270 Configure reports:
271
272   Your stdio doesn't appear very std.
273
274 This is correct.
275
276 =head1 MAKE
277
278 Simply run make and wait:
279
280   make 2>&1 | tee log.make
281
282 =head2 Warnings
283
284 Warnings like these are normal:
285
286   warning: overriding commands for target <file>
287   warning: ignoring old commands for target <file>
288
289   Warning: no export definition file provided
290   dllwrap will create one, but may not be what you want
291
292 =head2 ld2
293
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>.
303
304 =head1 TEST
305
306 There are two steps to running the test suite:
307
308   make test 2>&1 | tee log.make-test
309
310   cd t;./perl harness 2>&1 | tee ../log.harness
311
312 The same tests are run both times, but more information is provided when
313 running as `C<./perl harness>'.
314
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.
318
319 =head2 File Permissions
320
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:
331
332   Failed Test           List of failed
333   ------------------------------------
334   io/fs.t               5, 7, 9-10
335   lib/anydbm.t          2
336   lib/db-btree.t        20
337   lib/db-hash.t         16
338   lib/db-recno.t        18
339   lib/gdbm.t            2
340   lib/glob-basic.t      9 (directory always readable)
341   lib/ndbm.t            2
342   lib/odbm.t            2
343   lib/sdbm.t            2
344   op/stat.t             9, 20 (.tmp not an executable extension)
345
346 =head2 Hard Links
347
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:
350
351   Failed Test           List of failed
352   ------------------------------------
353   io/fs.t               4
354   op/stat.t             3
355
356 =head2 Filetime Granularity
357
358 On FAT partitions the filetime granularity is 2 seconds.  The following
359 test will fail:
360
361   Failed Test           List of failed
362   ------------------------------------
363   io/fs.t               18
364
365 =head2 Tainting Checks
366
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:
371
372   Win9x
373     Error Starting Program
374     A required .DLL file, CYGWIN1.DLL, was not found
375
376   WinNT
377     perl.exe or sh.exe - Unable to Locate DLL
378     The dynamic link library cygwin1.dll could not be found in the
379       specified path ...
380
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
383 will fail:
384
385   Failed Test           List of failed
386   ------------------------------------
387   op/taint.t            1, 3, 31, 37
388
389 Alternatively, you can copy F<cygwin1.dll> into one of the Windows system
390 directories (although, this is B<not> recommended).
391
392 =head2 /etc/group
393
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:
397
398   Failed Test           List of failed
399   ------------------------------------
400   op/grent.t            1
401
402 =head2 Unexplained Failures
403
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.
408
409 =head2 Script Portability
410
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.
416
417 =over 4
418
419 =item * Pathnames
420
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
426 characters:
427
428   : * ? " < > |
429
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).
433
434 The I<mixed> setting is only available with the "coolview" version of
435 F<cygwin1.dll> provided by Sergey Okhapkin at:
436
437   ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Okhapkin_Sergey/
438
439 =item * Text/Binary
440
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.
449
450 lseek() only works with files opened in binary mode.
451
452 =item * F<.exe>
453
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.
460
461 NOTE: There is a version of I<install> that understands F<.exe>, it can
462 be found at:
463
464   ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Humblet_Pierre_A/
465
466 =item * chown()
467
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.
471
472 =item * Miscellaneous
473
474 File locking using the C<F_GETLK> command to fcntl() is a stub that
475 returns C<ENOSYS>.
476
477 Win32 can not unlink() an open file (but this is emulated by Cygwin).
478
479 Win9x can not rename() an open file (although WinNT can).
480
481 =back
482
483 =head1 INSTALL
484
485 This will install Perl, including man pages.
486
487   make install 2>&1 | tee log.make-install
488
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.
491
492 Information on installing the Perl documentation in HTML format can be
493 found in the F<INSTALL> document.
494
495 =head1 MANIFEST
496
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.
501
502 =over 4
503
504 =item Documentation
505
506   INSTALL
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
512
513 =item Build, Configure, Make, Install
514
515   cygwin/Makefile.SHs
516   cygwin/ld2.in
517   cygwin/perlld.in
518   ext/IPC/SysV/hints/cygwin.pl
519   ext/NDBM_File/hints/cygwin.pl
520   ext/ODBM_File/hints/cygwin.pl
521   hints/cygwin.sh
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
529
530 =item Tests
531
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)
535
536 =item Compiled Perl Source
537
538   doio.c                - win9x can not rename a file when it is open
539   EXTERN.h              - __declspec(dllimport)
540   XSUB.h                - __declspec(dllexport)
541   perl.h                - binmode
542   mg.c                  - environ WORKAROUND
543   util.c                - environ WORKAROUND
544   unixish.h             - environ WORKAROUND
545
546 =item Compiled Module Source
547
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
552                         - binary open
553
554 =item Perl Modules/Scripts
555
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
564   lib/Cwd.pm            - `pwd`
565
566 =back
567
568 =head1 BUGS
569
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).
572
573 `C<make clean>' does not remove library F<.def> and F<.exe.stackdump>
574 files.
575
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.
578
579 =head1 AUTHORS
580
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>.
587
588 =head1 HISTORY
589
590 Last updated: 28 January 2000