This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
f56f7eee09c0a704e9d7f25892de80ecec21ed07
[perl5.git] / README.os2
1 Current state of the patches here is with respect to perl5.002b1d ;-).
2
3 ========================================================
4
5 The OS/2 patchkit was submitted by ilya@math.ohio-state.edu.  I have
6 applied some parts that I suspect won't cause any problems.
7 Others do things that I haven't had time to fully consider.
8
9 Still other patches included here should perhaps be integrated with the
10 metaconfig package that generates Configure.
11
12         Andy Dougherty          <doughera@lafcol.lafayette.edu>
13
14 ========================================================
15
16 Notes on the patch:
17 ~~~~~~~~~~~~~~~~~~~
18 patches should be applied as
19         patch -p0 <.....
20 All the diff.* files and POSIX.mkfifo should be applied.
21
22 Additional files are available on
23         ftp://ftp.math.ohio-state.edu/pub/users/ilya/os2
24 including patched pdksh and gnumake, needed for build.
25
26
27 Target:
28 ~~~~~~~
29
30 This is not supposed to make a perfect Perl on OS/2. This patch is
31 concerned only with perfect _build_ of Perl on OS/2. Some good
32 features from Andreas Kaiser port missed this port. However, most of
33 the features are available in different form. 
34
35 !!! Note that [gs]etpriority functions in this port are compatible
36 !!! with *nix, not with ak's port!!! 
37
38 The priorities are absolute, go from 32 to -95, lower is quickier. 0
39 is default,
40
41 Notes on build on OS/2:
42 ~~~~~~~~~~~~~~~~~~~~~~~
43 The change of C code in this patch is based on the ak port of 5.001+.
44
45 a) Make sure your sort is not the broken OS/2 one, and that you have /tmp
46 on the build partition.
47
48 b) when extracting perl5.*.tar.gz you need to extract perl5.*/Configure
49 separately, since by default perl5.001m/configure may overwrite it;
50         like this:
51                 tar vzxf perl5.004.tar.gz --case-sensitive perl5.004/Configure
52
53 c) Necessary manual intervention when compiling on OS/2:
54
55         Need to put perl.dll on LIBPATH after it is created.
56
57 d) Compile summary:
58    ~~~~~~~~~~~~~~~
59 !!! At the end of this README is independent description of the build
60 !!! process by Rocco Caputo.
61
62 # Look for hints/os2.sh and correct what is different on your system
63 # I have rather spartan configuration.
64
65         # Prefix means where to install:
66 sh Configure -des -D prefix=f:/perl5.005
67         # Ignore the message about missing `ln', and about `c' option
68         # to tr.
69 make
70         # Will probably die after build of miniperl (unless you have DLL
71         # from previous compile). Need to move DLL where it belongs
72         #
73         # Somehow with 5.002b3 I needed to type another make after pod2man
74 make
75         # some warnings in POSIX.c
76 make test
77         # some tests fail, 9 or 10 on my system (see the list at end).
78         #
79         # before this you should create subdirs bin and lib in the 
80         # prefix directory (f:/perl5.005 above):
81         #
82         # To run finer tests, cd t && perl harness
83 make install
84
85 e) At the end of August GNU make and pdksh were too buggy for compile.
86 Both maintainers have patches that make it possible to compile perl.
87 The binaries are included in
88         ftp://ftp.math.ohio-state.edu/pub/users/ilya/os2
89 patches are available too.
90 Note that the pdksh5.2.4 broke builds with -Zexe option because of a
91 changed order of executable extensions. A patch is sent to
92 maintainer. The version 5.2.5alpha was OK for the build,
93
94 !!!!!!!!!!!!!!!!!
95 If you see that some '/' became '\' in pdksh 5.2.3, you did not apply
96 my patches!
97 Same with segfaults in Make 3.74.
98 !!!!!!!!!!!!!!!!!
99
100 Problems reported: 
101
102 a) one of the latest tr is broken, get an old one :-(
103         1.11 works. (On compuserver?)
104 b) You need a link386.
105 c) Get rid of invalid perl.dll on your LIBPATH.
106
107 Note the EMX does not support en_us locale (most nobody does ;-). Some
108 TCP/IP update could have installed it to your config.sys. You need to
109 delete it until EMX is updated to support this newest discovery by IBM.
110
111
112 Send comments to ilya@math.ohio-state.edu.
113
114 ======================================================
115 Requires 0.9b (well, provision are made to make it build under 0.9a6,
116 but they are not tested, please inform me on success).
117 (earlier than 0.9b ttyname was not present, it is hard to maintain this
118 difference automatically, though I try).
119 ======================================================
120
121 Building with a.out style is supported by the `perl_' target of make.
122 Dynamic extensions are not possible with perl_.exe, since boot code
123 should return the retvalue on stack, the address of which is not known
124 to the extension.
125
126 The reason why compiling with a.out style executables leads to problems
127 with dynamic extensions is:
128         a) OS/2 does not export symbols from executables;
129         b) Thus if extension needs to import symbols from an application
130                 the symbols for the application should reside in a .dll.
131         c) You cannot export data from a .dll compiled with a.out style.
132 On the other hand, aout-style compiled extension enjoys all the 
133 (dis)advantages of fork().
134
135 Check A.OUT compile with the following make targets:
136
137         aout_test 
138         aout_install
139         aout_clean
140
141 ======================================================
142 Tests which fail with OMF compile:
143
144 io/fs.t: 2-5, 7-11, 18  as they should.
145 io/pipe: all, since open("|-") is not working (works with perl_.exe).
146 lib/"all the dbm".t: 1 test should fail (file permission).
147 op/fork all fail, as they should (except with perl_.exe)
148 op/stat 3 20 35 as they should, 39 (-t on /dev/null) ???? Sometimes 4
149 - timing problem ????
150
151 Sometimes I have seen segfault in socket ????, only if run with Testing tools.
152
153 A lot of `bad free'... in databases, bug in DB confirmed on other
154 platforms.
155
156 Fail: Total 30 subtests (if stat:4 fails) in 10 scripts (one of 10
157 is socket, which runs OK standalone). With newer configs I could not
158 reproduce most the crashes.
159
160 =======================================================
161
162 Changes to calls to external programs:
163 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Due to a popular demand the perl
164 external program calling has been changed.  _If_ perl needs to call an
165 external program _via shell_, the X:/bin/sh.exe will be called. The
166 name of the shell is not overridable, except the drive letter.
167
168 Thus means that you need to pickup some copy of a sh.exe as well (I use one
169 from pdksh). The drive X: above is set up automatically during the
170 build, is settable in runtime from $ENV{PERL_SH_DRIVE}.
171
172 Reasons: a consensus on perl5-porters was that perl should use one 
173 non-overridable shell per platform. The obvious choices for OS/2 are cmd.exe
174 and sh.exe. Having perl build itself would be impossible with cmd.exe as
175 a shell, thus I picked up sh.exe. Thus assures almost 100% compatibility
176 with the scripts coming from *nix.
177
178 Disadvantages: sh.exe calls external programs via fork/exec, and there is
179 _no_ functioning exec on OS/2. exec is emulated by EMX by asyncroneous call
180 while the caller waits for child completion (to pretend that pid did
181 not change). This means that 1 _extra_ copy of sh.exe is made active via
182 fork/exec, which may lead to some resources taken from the system.
183
184 The long-term solution proposed on p5-p is to have a directive
185         use OS2::Cmd;
186 which will override system(), exec(), ``, and open(,'   |'). With current
187 perl you may override only system(), readpipe() - the explicit version
188 of ``, and maybe exec(). The code will substitute a one-argument system
189 by CORE::system('cmd.exe', '/c', shift).
190
191 If you have some working code for OS2::Cmd.pm, please send it to me,
192 I will include it into distribution. I have no need for such a module, so
193 cannot test it.
194
195 ===================================================
196
197 OS/2 extensions
198 ~~~~~~~~~~~~~~~
199 Since binaries cannot go into perl distribution, no extensions are
200 included. They are available in .../os2/ilyaz directory of CPAN, as
201 well as in my directory
202         ftp://ftp.math.ohio-state.edu/pub/users/ilya/os2
203
204 I include 3 extensions by Andread Kaiser, OS2::REXX, OS2::UPM, and OS2::FTP, 
205 into my ftp directory, mirrored on CPAN. I made
206 some minor changes needed to compile them by standard tools. I cannot 
207 test UPM and FTP, so I will appreciate your feedback. Other extensions
208 there are OS2::ExtAttribs, OS2::PrfDB for tied access to EAs and .INI
209 files - and maybe some other extensions at the time you read it.
210
211 Note that OS2 perl defines 2 pseudo-extension functions
212 OS2::Copy::copy and DynaLoader::mod2fname.
213
214 The -R switch of older perl is deprecated. If you need to call a REXX code
215 which needs access to variables, include the call into a REXX compartment
216 created by 
217         REXX_call {...block...};
218
219 Two new functions are supported by REXX code, 
220         REXX_eval 'string';
221         REXX_eval_with 'string', REXX_function_name => \&perl_sub_reference;
222
223 If you have some other extensions you want to share, send the code to me.
224 Two jump to mind: tied access to EA's, and tied access to system databases.
225
226 ==================================================================
227 ==                                                              ==
228 ==              User report [my comments in brackets, IZ]       ==
229 ==                                                              ==
230 ==================================================================
231
232 Starting in x:/usr/src, using 4OS2/32 2.5 as the command interpreter on
233 OS/2 2.30 with FixPak-17.  DAX is installed, but this shouldn't be a
234 factor.  Drive X is a TVFS virtual drive pointing to several physical
235 HPFS drives.
236
237 >>> Make sure that no copies or perl are currently running.  Miniperl
238     may fail during the build because it will find an older version
239     of perl.dll loaded in memory.
240
241         Close any running perl scripts.
242         Shut down anything that might run perl scripts, like cron.
243         `emxload -l` to check for loaded versions of perl.
244         `emxload -u perl.exe` to unload them.
245
246 >>> Pre-load some common utilities:
247
248         emxload -e sh.exe make.exe ls.exe tr.exe id.exe sed.exe
249         SET GCCLOAD=30   (number of minutes to hold the compiler)
250 [grep egrep fgrep cat rm uniq basename uniq sort - are not bad too.]
251     The theory is that it's faster to demand-load the development tools
252     from virtual memory than it is to re-load and re-link them all the
253     time.  This is definitely true with my system because swapfile.dat
254     is on a faster drive than my development environment.
255
256     ls, tr, and id represent the GNU file, text, and shell utilities.
257     These may not be needed, but it makes sure that their respective
258     DLLs are in memory.
259
260 >>> Unpack the perl 5_002_01 archive onto an HPFS partition.
261
262         tar vxzf perl5_002_01.tar-gz
263         cd perl5.002_01
264
265 [Do not forget to extract Configure as described above.]
266
267 >>> Read the README, keeping a copy open in another session for reference.
268
269         start /c /fg less os2/README
270
271 >>> Apply the OS/2 patches included with 5.002_01, as per the README.
272
273         for %m in (os2\diff.*) patch -p0 < %m
274         patch -p0 < os2\POSIX.mkfifo
275
276 [The patch below is already applied.]
277
278 >>> You may need to apply this patch if you plan to run a non-standard
279     Configure (that is, if you defy the README).  This patch will ensure
280     that Makefile inherits the libraries specified during Configure.
281     People running standard perl builds can probably ignore this patch.
282
283 *** os2\Makefile.SHs    Mon Mar 25 02:05:00 1996
284 --- os2\Makefile.SHs.new        Fri May 24 10:37:10 1996
285 ***************
286 *** 9,15 ****
287         emximp -o perl.imp perl5.def
288   
289   perl.dll: $(obj) perl5.def perl$(OBJ_EXT)
290 !       $(LD) $(LDDLFLAGS) -o $@ perl$(OBJ_EXT) $(obj) -lsocket perl5.def
291   
292   perl5.def: perl.linkexp
293         echo "LIBRARY 'Perl' INITINSTANCE TERMINSTANCE" > $@
294 --- 9,15 ----
295         emximp -o perl.imp perl5.def
296   
297   perl.dll: $(obj) perl5.def perl$(OBJ_EXT)
298 !       $(LD) $(LDDLFLAGS) -o $@ perl$(OBJ_EXT) $(obj) $(libs) perl5.def
299   
300   perl5.def: perl.linkexp
301         echo "LIBRARY 'Perl' INITINSTANCE TERMINSTANCE" > $@
302 ***************
303 *** 49,55 ****
304         cat perl.exports perl.map | sort | uniq -d | sed -e 's/\w\+/  "\0"/' > perl.linkexp
305   
306   perl.map: $(obj) perl$(OBJ_EXT) miniperlmain$(OBJ_EXT)
307 !       $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o dummy.exe miniperlmain$(OBJ_EXT) perl$(OBJ_EXT) $(obj) -lsocket -lm -Zmap -Zlinker /map
308         awk '{if ($$3 == "") print $$2}' <dummy.map | sort | uniq > perl.map
309         rm dummy.exe dummy.map
310   
311 --- 49,55 ----
312         cat perl.exports perl.map | sort | uniq -d | sed -e 's/\w\+/  "\0"/' > perl.linkexp
313   
314   perl.map: $(obj) perl$(OBJ_EXT) miniperlmain$(OBJ_EXT)
315 !       $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o dummy.exe miniperlmain$(OBJ_EXT) perl$(OBJ_EXT) $(obj) $(libs) -Zmap -Zlinker /map
316         awk '{if ($$3 == "") print $$2}' <dummy.map | sort | uniq > perl.map
317         rm dummy.exe dummy.map
318
319 >>> Apply the patches from Ilya's perl5.002_01 binary distribution:
320
321         touch os2/dlfcn.h os2/dl_os2.c
322         patch -p1 < f:\perllib\README.fix1
323
324 >>> Run Configure.  Most people can run it by following the README:
325
326         sh Configure -des -D prefix=f:/usr/local
327
328     Advanced perl users (experienced C programmers, recommended) can run
329     the interactive Configure and answer the questions.  When in doubt
330     about an answer, check the EMX headers and documentation.  Pick the
331     default answer if that doesn't help:
332
333         sh Configure
334
335 [Yet more advanced users just specify the answers on the command line
336 of Configure, like I did with prefix.]
337
338     Note:  You may need to wrap an answer in quotes if it contains
339     spaces.  For example, "-lsocket -lm".
340
341     Note:  If you want to add some options to a long default, you can
342     use $* to include the default in your answer:  "$* -DDEBUGGING".
343
344     Configure warnings and errors, and possible work-arounds:
345
346         I don't know where 'ln' is....
347             (ignored; OS/2 doesn't have a ln command)
348
349         nm didn't seem to work right. Trying emxomfar instead...
350             (nothing to worry about)
351
352         The recommended value for $d_shrplib on this machine was "define"!
353             (kept the recommended value: y)
354
355         Directory f:/usr/lib/perl5/os2/5.00201/CORE doesn't exist.
356             (created the directory from another window with
357             \usr\bin\mkdir -p f:/usr/lib/perl5/os2/5.00201/CORE
358             and then answered: y.  Your directory may look different.)
359
360 [Ignore this as well, install script will create it for you.]
361
362         The recommended value for $i_dlfcn on this machine was "define"!
363             (kept the recommended value: y)
364
365         The recommended value for $d_fork on this machine was "undef"!
366             (kept the recommended value: y)
367
368         Figuring out the flag used by open() for non-blocking I/O...
369         Seems like we can use O_NONBLOCK.
370             This seems to be used for informative purposes only.
371             The errors that follow this (including a SIGPIPE) don't seem
372             to affect perl at all.  These were safely ignored.
373
374         What pager is used on your system? [/usr/ucb/more]
375             Had to answer "/usr/bin/less.exe" because Configure wants a
376             leading / (unix full path).  Need to edit config.sh later with
377             the real full path to the pager, including the drive letter.
378
379 [Apparently this setting is never used, so it is safe to ignore it.]
380
381         Hmm... F:/USR/BIN/sed: Unterminated `s' command
382             Perl built fine even with this error, so it seems safe to
383             ignore.
384
385     Things I did different from the defaults.  Most (if not all) of these
386     are optional changes.  They're listed here to show how good Configure
387     is at detecting the system setup.
388
389 [I add the options to put it on command line of Configure, see below.]
390
391         Selected 'none' for the man1 location.
392             (I prefer the pod2html version.)
393 [-D man1dir=none]
394         Selected 'none' for the man3 location.
395             (I prefer the pod2html version.)
396 [-D man3dir=none]
397         Changed the hostname and domain.
398             (I wanted to override a dynamic PPP address.  This only
399             matters if other people will be using your perl build.)
400 [-D myhostname=my_host_name -D mydomain=.foo.org]
401         Fixed the e-mail address.
402             (Put in a known working e-mail address.  This only matters
403             if other people will be using your perl build.)
404 [-D cf_email=root@myhostname.uucp]
405         Added some directories to the library search path.
406 [-D "libpth=f:/emx/lib/st f:/emx/lib"]
407         Added -g to the optimizer/debugger flags.
408 [-D optimize=-g]
409         Added "-lgdbm -ldb -lcrypt -lbsd" to the additional libraries.
410 [  -D "libs=-lsocket -lcrypt -lgdbm"
411   the rest of libraries will not be used]
412
413 >>> Advanced users may want to edit config.sh when prompted by Configure.
414     Most (all?) of these changes aren't really necessary:
415
416         d_getprior='define'
417         d_setprior='define'
418             (getpriority and setpriority are included in os2.c, but
419             Configure doesn't know to look there.)
420 [fixed already]
421         pager='f:/usr/bin/less.exe'
422             (Correcting Configure's insistence on a leading slash.)
423         bin_sh='f:/usr/bin/sh.exe'
424             (If Configure detects sh.exe somewhere else first.  Example:
425             it saw sh.exe at /bin/sh.exe on my TVFS drive, but I want
426             perl to look for it on the physical F drive.)
427         aout_ccflags='... existing flags... -DDEBUGGING'
428         aout_cppflags='... existing flags... -DDEBUGGING'
429             (If you want to include DEBUGGING for the aout version.)
430 [Do not do it, -D optimize=-g will automatically add these flags.]
431
432 >>> Allow Configure to make the build scripts.
433
434 >>> Allow Configure to run `make depend`.  Ignore the following warning:
435
436         perl.h:861: warning: `DEBUGGING_MSTATS' redefined
437 [corrected now]
438
439 >>> Rename any existing perl.dll, preventing anything from loading it and
440     saving a known working copy in case something goes wrong:
441
442         mv /usr/lib/perl.dll /usr/lib/ilya-perl.dll
443
444 >>> Run `make`, and ignore the following warnings:
445
446         perl.h:861: warning: `DEBUGGING_MSTATS' redefined
447 [corrected now]
448         invalid preprocessing directive name
449         emxomf warning: Cycle detected by make_type
450         LINK386 :  warning L4071: application type not specified; assuming WINDOWCOMPAT
451         Warning (will try anyway): No library found for -lposix
452         Warning (will try anyway): No library found for -lcposix
453         POSIX.c:203: warning: `mkfifo' redefined
454         POSIX.c:4603: warning: assignment makes pointer from integer without a cast
455
456 >>> If `make` dies while "Making DynaLoader (static)", you'll need to
457     put miniperl in the OS/2 paths.  This step is only necessary if `make`
458     can't find miniperl:
459 [I would be interested if somebody confirmes this.]
460
461         cp perl.dll /usr/lib        (where /usr/lib is in your LIBPATH)
462         cp miniperl.exe /usr/bin    (where /usr/bin is in your PATH)
463         make                        (ignore the errors in the previous step)
464
465         This should run to completion.
466
467 >>> Test the build:
468
469         make test
470
471     These tests fail:
472
473         io/fs..........FAILED on test 2
474
475             "OS/2 is not unix".  Test 2 checks the link() command, which
476             is not supported by OS/2.
477
478         io/pipe........f:/usr/bin/sh.exe: -c requires an argument
479         f:/usr/bin/sh.exe: -c requires an argument
480         The Unsupported function fork function is unimplemented at
481             io/pipe.t line 26.
482         FAILED on test 1
483
484             More "OS/2 is not unix" errors.  Read ahead to find out
485             why fork() fails.
486
487         op/exec........FAILED on test 4
488
489                 if (system "true") {print "not ok 4\n";} else \
490                 {print "ok 4\n";}
491
492             This fails for me, but changing it to read like this works:
493
494                 if (system '\usr\bin\true.cmd') {print "not ok 4\n";} \
495                 else {print "ok 4\n";}
496
497             So you can count this as another "OS/2 is not unix".
498
499         op/fork........The Unsupported function fork function is \
500             unimplemented at op/fork.t line 8.
501         FAILED on test 1
502
503             The dynamically-loaded version of perl currently doesn't
504             support fork().  This is a known behavior of EMX.
505
506         op/magic.......
507         Process terminated by SIGINT
508         ok
509
510             The test passed even with the SIGINT message.  I don't
511             know why, but I won't argue.
512
513         op/stat........ls: /dev: No such file or directory
514         f:/usr/bin/sh.exe: ln: not found
515         ls: perl: No such file or directory
516         FAILED on test 3
517
518             "OS/2 is not unix".  We don't have the ln command.
519
520         lib/anydbm.....Bad free() ignored at lib/anydbm.t line 51.
521         Bad free() ignored at lib/anydbm.t line 51.
522         Bad free() ignored at lib/anydbm.t line 51.
523         Bad free() ignored during global destruction.
524         Bad free() ignored during global destruction.
525         Bad free() ignored during global destruction.
526         FAILED on test 2
527
528             Test 2 looks at the file permissions for a database.  "OS/2
529             is not unix" so the permissions aren't exactly what this test
530             expects.
531
532         lib/db-btree...Bad free() ignored at lib/db-btree.t line 109.
533         Bad free() ignored at lib/db-btree.t line 221.
534         Bad free() ignored at lib/db-btree.t line 337.
535         Bad free() ignored at lib/db-btree.t line 349.
536         Bad free() ignored at lib/db-btree.t line 349.
537         Bad free() ignored at lib/db-btree.t line 399.
538         Bad free() ignored at lib/db-btree.t line 400.
539         Bad free() ignored at lib/db-btree.t line 401.
540         FAILED on test 20
541
542             Another file permissions test fails.
543
544         lib/db-hash....Bad free() ignored at lib/db-hash.t line 101.
545         Bad free() ignored at lib/db-hash.t line 101.
546         Bad free() ignored at lib/db-hash.t line 101.
547         Bad free() ignored at lib/db-hash.t line 239.
548         Bad free() ignored at lib/db-hash.t line 239.
549         Bad free() ignored at lib/db-hash.t line 239.
550         Bad free() ignored at lib/db-hash.t line 253.
551         Bad free() ignored at lib/db-hash.t line 253.
552         Bad free() ignored at lib/db-hash.t line 253.
553         FAILED on test 16
554
555             Another file permissions test fails.
556
557         lib/db-recno...Bad free() ignored at lib/db-recno.t line 138.
558         Bad free() ignored at lib/db-recno.t line 138.
559         FAILED on test 18
560
561             Another file permissions test fails.
562
563         lib/gdbm.......FAILED on test 2
564
565             Another file permissions test fails.
566
567         lib/sdbm.......FAILED on test 2
568
569             Another file permissions test fails.
570
571         Failed 11/94 tests, 88.30% okay.
572
573             All of which are known differences with unix or documented
574             behaviors in EMX.  I re-run the test with Ilya's version,
575             and the same tests fail.  This new build is a success.
576 [Note that bad free() mentioned above are bugs in the Berkeley
577 DB. They just are more visible under OS/2 with perl free(), because of
578 "rigid" function name resolution.
579         To get finer tests, cd to ./t and run 
580                 perl harness
581 ]
582
583     (Actually, Ilya's perl release fails an extra test because I don't
584     have sed in f:\emx.add.  This shows how important it is to configure
585     and build perl yourself instead of grabbing pre-built binaries.)
586 [Hmm, should not happen... There is no mentions of full_sed under ./t
587 directory...]
588
589 >>> Cross your fingers and install it:
590
591         make install
592
593     Warnings encountered and workarounds presented.:
594
595         WARNING: You've never run 'make test'!!!  (Installing anyway.)
596             (Lies!  All lies!  At least it still installs.)
597
598         WARNING: Can't find libperl*.dll* to install into \
599         f:/usr/lib/perl5/os2/5.00201/CORE.  (Installing other things anyway.)
600             (Safe to ignore.  The important one, libperl.lib, gets copied.)
601
602         Couldn't copy f:/usr/bin/perl5.00201.exe to f:/usr/bin/perl.exe: \
603         No such file or directory
604             cp /usr/bin/perl5.00201.exe /usr/bin/perl.exe
605
606         Couldn't copy f:/usr/bin/perl.exe to /usr/bin/perl.exe: No such \
607         file or directory
608             (I think this one is safe to ignore since the two directories
609             point to the same place.)
610
611 >>> Laugh maniacally because you just built and installed your own copy
612     of perl, with all the paths set "just so" and with whatever little
613     psychotic modifications you've always wanted but were afraid to add.
614
615 -----------------------------------------------------------------------------
616
617 Development tools and versions:
618
619         EMX 0.9b with emxfix04 applied.
620
621         `ls --version` reports: 'GNU file utilities 3.12'
622         `tr --version` reports: 'tr - GNU textutils 1.14'
623         `id --version` reports: 'id - GNU sh-utils 1.12'
624
625         `sed --version` reports: 'GNU sed version 2.05'
626         `awk --version` reports: 'Gnu Awk (gawk) 2.15, patchlevel 6'
627         `grep --version` reports an illegal option and: 'GNU grep version 2.0'
628                 (this includes egrep)
629
630         `sort --version` reports: 'sort - GNU textutils 1.14'
631         `uniq --version` reports: 'uniq - GNU textutils 1.14'
632         `find --version` reports: 'GNU find version 4.1'
633
634         KSH_VERSION='@(#)PD KSH v5.2.4 96/01/17'
635                 (Ilya's patched version.)
636
637         `make --version` reports: 'GNU Make version 3.74'
638                 (Ilya's patched version.)
639
640         `emxrev` reports:
641                 EMX : revision = 42
642                 EMXIO : revision = 40
643                 EMXLIBC : revision = 40
644                 EMXLIBCM : revision = 43
645                 EMXLIBCS : revision = 43
646                 EMXWRAP : revision = 40
647
648 -----------------------------------------------------------------------------
649
650 Rocco
651 <troc@shadow.net>
652