1 Last Revised 11-September-1997 by Dan Sugalski <sugalsd@lbcc.cc.or.us>
2 Originally by Charles Bailey <bailey@newman.upenn.edu>
6 The VMS port of Perl is as functionally complete as any other Perl port
7 (and as complete as the ports on some Unix systems). The Perl binaries
8 provide all the Perl system calls that are either available under VMS or
9 reasonably emulated. There are some incompatibilites in process handling
10 (e.g the fork/exec model for creating subprocesses doesn't do what you
11 might expect under Unix), mainly because VMS and Unix handle processes and
12 sub-processes very differently.
14 There are still some unimplemented system functions, and of coursse we
15 could use modules implementing useful VMS system services, so if you'd like
16 to lend a hand we'd love to have you. Join the Perl Porting Team Now!
18 The current sources and build procedures have been tested on a VAX using
19 VaxC and Dec C, and on an AXP using Dec C. If you run into problems with
20 other compilers, please let us know.
22 There are issues with varions versions of Dec C, so if you're not running a
23 relatively modern version, check the Dec C issues section later on in this
26 * Other required software
28 In addition to VMS, you'll need:
29 1) A C compiler. Dec C for AXP, or VAX C, Dec C, or gcc for the
31 2) A make tool. Dec's MMS (v2.6 or later), or MadGoat's free MMS
32 analog MMK (available from ftp.madgoat.com/madgoat) both work
33 just fine. Gnu Make might work, but it's been so long since
34 anyone's tested it that we're not sure. MMK's free, though, so
35 go ahead and use that.
38 If you want to include socket support, you'll need a TCP stack and either
39 Dec C, or socket libraries. See the Socket Support topic for more details.
43 >From the top level of the Perl source directory, do this:
45 MMS/DESCRIP=[.VMS]DESCRIP.MMS
47 If you're on an Alpha, add /Macro=("__AXP__=1","decc=1")
48 If you're using Dec C as your C compiler (you are on all alphas), add
50 If Vac C is your default C compiler and you want to use Dec C, add
51 /Macro=("CC=CC/DECC") (Don't forget the /macro=("decc=1")
52 If Dec C is your default C compiler and you want to use Vax C, add
54 If you want Socket support and are using the SOCKETSHR socket library, add
55 /Macro=("SOCKETSHR_SOCKETS=1")
56 If you want Socket support and are using the Dec C RTL socket interface
57 (You must be using Dec C for this), add /Macro=("DECC_SOCKETS=1")
59 If you have multiple /macro= items, combine them together in one /Macro=()
60 switch, with all the options inside the parentheses separated by commas.
64 VMS AXP, with Socketshr sockets:
66 $MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("decc=1","__AXP__=1","SOCKETSHR_SOCKETS=1")
68 VMS AXP with no sockets
70 $MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("decc=1","__AXP__=1")
72 VMS AXP with the Dec C RTL sockets
74 $MMS/DESCRIP=[.VMS]/Macro=("decc=1","__AXP__=1","DECC_SOCKETS=1")
76 VMS VAX with default system compiler, no sockets
78 $MMS/DESCRIP=[.VMS]DESCRIP.MMS
80 VMS VAX with Dec C compiler, no sockets
82 $MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("CC=CC/DECC","decc=1")
84 VMS VAX with Dec C compiler, Dec C RTL sockets
86 $MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("CC=CC/DECC","decc=1","DECC_SOCKETS=1")
88 VMS VAX with Dec C compiler, Socketshr sockets
90 $MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("CC=CC/DECC","decc=1","SOCKETSHR_SOCKETS=1")
92 Using Dec C is recommended over Vax C. The compiler is newer, and
93 supported. (Vax C was decommisioned around 1993) Various older versions had
94 some gotchas, so if you're using a version older than 5.2, check the Dec C
97 We'll also point out that Dec C will get you at least a ten-fold increase
98 in line-oriented IO over Vax C. The optimizer is amazingly better, too. If
99 you can use Dec C, then you *really*, *really* should.
102 Once you issue your MMS command, sit back and wait. Perl should build and
103 link without a problem. If it doesn't, check the Gotchas to watch out for
104 section. If that doesn't help, send some mail to the VMSPERL mailing list.
105 Instructions are in the Mailing Lists section.
109 Once Perl has built cleanly, you need to test it to make sure things work.
110 This step is very important--there are always things that can go wrong
111 somehow and get you a dysfunctional Perl.
113 Testing is very easy, though, as there's a full test suite in the perl
114 distribution. To run the tests, enter the *exact* MMS line you used to
115 compile Perl and add the word "test" to the end, like this:
119 $MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("__AXP__=1","decc=1","DECCRTL_SOCKETS=1")
123 $MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("__AXP__=1","decc=1","DECCRTL_SOCKETS=1") test
125 MMS will run all the tests. This may take some time, as there are a lot of
126 tests. If any tests fail, there will be a note made on-screen. At the end
127 of all the tests, a summary of the tests, the number passed and failed, and
128 the time taken will be displayed.
130 If any tests fail, it means something's wrong with Perl. If the test suite
131 hangs (some tests can take upwards of two or three minutes, or more if
132 you're on an especially slow machine, depending on you machine speed, so
133 don't be hasty), then the test *after* the last one displayed failed. Don't
134 install Perl unless you're confident that you're OK. Regardless of how
135 confident you are, make a bug report to the VMSPerl mailing list.
137 If one or more tests fail, you can get more info on the failure by issuing
138 this command sequence:
141 $ @[-.VMS]TEST .typ -v [.subdir]test.T
143 where ".typ" is the file type of the Perl images you just built (if you
144 didn't do anything special, use .EXE), and "[.subdir]test.T" is the test
145 that failed. For example, with a normal Perl build, if the test indicated
146 that [.op]time failed, then you'd do this:
149 $ @[-.VMS]TEST .EXE -v [.OP]TIME.T
151 When you send in a bug report for failed tests, please include the output
152 from this command, which is run from the main source directory:
156 Note that "-V" really is a capital V in double quotes. This will dump out a
157 couple of screens worth of config info, and can help us diagnose the problem.
159 * Cleaning up and starting fresh
161 If you need to recompile from scratch, you have to make sure you clean up
162 first. There's a procedure to do it--enter the *exact* MMS line you used to
163 compile and add "realclean" at the end, like this:
167 $MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("__AXP__=1","decc=1","DECCRTL_SOCKETS=1")
171 $MMS/DESCRIP=[.VMS]DESCRIP.MMS/Macro=("__AXP__=1","decc=1","DECCRTL_SOCKETS=1") realclean
173 If you don't do this, things may behave erratically. They might not, too,
174 so it's best to be sure and do it.
178 There are several steps you need to take to get Perl installed and
179 running. At some point we'll have a working install in DESCRIP.MMS, but for
180 right now the procedure's manual, and goes like this.
182 1) Create a directory somewhere and define the concealed logical PERL_ROOT
183 to point to it. For example, DEFINE/TRANS=(CONC,TERM) PERL_ROOT dka200:[perl.]
185 2) Copy perl.exe into PERL_ROOT:[000000]
187 3) Copy everything in [.LIB] and [.UTILS] (including all the
188 subdirectories!) to PERL_ROOT:[LIB] and PERL_ROOT:[UTILS].
190 4) Either copy PERLSHR.EXE to SYS$SHARE, or to somewhere globally accessble
191 and define the logical PERLSHR to point to it (DEFINE PERLSHR
192 PERL_ROOT:[000000]PERLSHR.EXE or something like that). The PerlShr image
193 should have W:RE protections on it. (Just W:E triggers increased security in
194 the image activator. Not a huge problem, but Perl will need to have any
195 other shared image it accesses INSTALLed. It's a huge pain, so don't unless
196 you know what you're doing)
198 5) Either define the symbol PERL somewhere, such as
199 SYS$MANAGER:SYLOGIN.COM, to be "PERL :== $PERL_ROOT:[000000]PERL.EXE", or
200 install Perl into DCLTABLES.EXE )Check out the section "Installing Perl
201 into DCLTABLES" for more info), or put the image in a directory that's in
202 your DCL$PATH (if you're using VMS 6.2 or higher).
204 6) Optionally define the command PERLDOC as
205 PERLDOC :== $PERL_ROOT:[000000]PERL PERL_ROOT:[LIB.POD]PERLDOC.COM -T
207 7) Optionally define the command PERLBUG (the Perl bug report generator) as
208 PERLBUG :== $PERL_ROOT:[000000]PERL PERL_ROOT:[LIB]PERLBUG.COM"
210 * Installing Perl into DCLTABLES
212 Courtesy of Brad Hughes:
214 Put the following, modified to reflect where your .exe is, in PERL.CLD:
217 image perl_root:[exe]perl.exe
222 $ set command perl /table=sys$common:[syslib]dcltables.exe -
223 /output=sys$common:[syslib]dcltables.exe
224 $ install replace sys$common:[syslib]dcltables.exe
226 and you don't need perl :== $perl_root:[exe]perl.exe.
228 * Changing compile-time things
230 Most of the user-definable features of Perl are enabled or disabled in
231 [.VMS]CONFIG.VMS. There's code in there to Do The Right Thing, but that may
232 end up being the wrong thing for you. Make sure you understand what you're
233 doing, since changes here can get you a busted perl.
235 Odds are that there's nothing here to change, unless you're on a version of
236 VMS later than 6.2 and Dec C later than 5.6. Even if you are, the correct
237 values will still be chosen, most likely. Poking around here should be
240 The one exception is the various *DIR install locations. Changing those
241 requires changes in genconfig.pl as well. Be really careful if you need to
242 change these,a s they can cause some fairly subtle problems.
244 * Extra things in the Perl distribution
246 In addition to the standard stuff that gets installed, there are two
247 optional extensions, DCLSYM and STDIO, that are handy. Instructions for
248 these two modules are in [.VMS.EXT.DCLSYM] and [.VMS.EXT.STDIO],
253 Perl includes a number of functions for IP sockets, which are available if
254 you choose to compile Perl with socket support. (See the section Compiling
255 Perl for more info on selecting a socket stack) Since IP networking is an
256 optional addition to VMS, there are several different IP stacks
257 available. How well integrated they are into the system depends on the
258 stack, your version of VMS, and the version of your C compiler.
260 The most portable solution uses the SOCKETSHR library. In combination with
261 either UCX or NetLib, this supports all the major TCP stacks (Multinet,
262 Pathways, TCPWare, UCX, and CMU) on all versions of VMS Perl runs on, with
263 all the compilers on both VAX and Alpha. The socket interface is also
264 consistent across versions of VMS and C compilers. It has a problem with
265 UDP sockets when used with Multinet, though, so you should be aware of
268 The other solution available is to use the socket routines built into Dec
269 C. Which routines are available depend on the version of VMS you're
270 running, and require proper UCX emulation by your TCP/IP vendor.
271 Relatively current versions of Multinet, TCPWare, Pathway, and UCX all
272 provide the required libraries--check your manuals or release notes to see
273 if your version is new enough.
277 If you come across what you think might be a bug in Perl, please report
278 it. There's a script in PERL_ROOT:[UTILS], perlbug, that walks you through
279 the process of creating a bug report. This script includes details of your
280 installation, and is very handy. Completed bug reports should go to
283 * Gotchas to watch out for
285 Probably the single biggest gotcha in compiling Perl is giving the wrong
286 switches to MMS/MMK when you build. If Perl's building oddly, double-check
287 your switches. If you're on a VAX, be sure to add a /Macro=("decc=1") if
288 you're using Dec C, and if you're on an alpha and using MMS, you'll need a
291 The next big gotcha is directory depth. Perl can create directories four
292 and five levels deep during the build, so you don't have to be too deep to
293 start to hit the RMS 8 level point. It's best to do a
294 $DEFINE/TRANS=(CONC,TERM) PERLSRC disk:[dir.dir.dir.perldir.]" (note the
295 trailing period) and $SET DEFAULT PERLSRC:[000000] before building. Perl
296 modules can be just as bad (or worse), so watch out for them, too.
298 Finally, the third thing that bites people is leftover pieces from a failed
299 build. If things go wrong, make sure you do a "(MMK|MMS|make) realclean"
304 Note to DECC users: Some early versions (pre-5.2, some pre-4. If you're Dec
305 C 5.x or higher, with current patches if anym you're fine) of the DECCRTL
306 contained a few bugs which affect Perl performance:
307 - Newlines are lost on I/O through pipes, causing lines to run together.
308 This shows up as RMS RTB errors when reading from a pipe. You can
309 work around this by having one process write data to a file, and
310 then having the other read the file, instead of the pipe. This is
311 fixed in version 4 of DECC.
312 - The modf() routine returns a non-integral value for some values above
313 INT_MAX; the Perl "int" operator will return a non-integral value in
314 these cases. This is fixed in version 4 of DECC.
315 - On the AXP, if SYSNAM privilege is enabled, the CRTL chdir() routine
316 changes the process default device and directory permanently, even
317 though the call specified that the change should not persist after
318 Perl exited. This is fixed by DEC CSC patch AXPACRT04_061.
322 There are several mailing lists available to the Perl porter. For VMS
323 specific issues (including both Perl questions and installation problems)
324 there is the VMSPERL mailing list. It's usually a low-volume (10-12
325 messages a week) mailing list.
327 The subscription address is VMSPERL-REQUEST@NEWMAN.UPENN.EDU. Send a mail
328 message with just the words SUBSCRIBE VMSPERL in the body of the message.
330 The VMSPERL mailing list address is VMSPERL@NEWMAN.UPENN.EDU. Any mail
331 sent there gets echoed to all subscribers of the list.
333 The Perl5-Porters list is for anyone involved in porting Perl to a
334 platform. This includes you, if you want to participate. It's a high-volume
335 list (60-100 messages a day during active development times), so be sure
336 you want to be there. The subscription address is
337 Perl5-Porters-request@perl.org. Send a message with just the word SUBSCRIBE
338 in the body. The posting address is Perl5-Porters@perl.org.
342 A real big thanks needs to go to Charles Bailey
343 <bailey@newman.upenn.edu>, who is ultimately responsible for Perl 5.004
344 running on VMS. Without him, nothing the rest of us have done would be at
347 There are, of course, far too many people involved in the porting and testing
348 of Perl to mention everyone who deserves it, so please forgive us if we've
349 missed someone. That said, special thanks are due to the following:
350 Tim Adye <T.J.Adye@rl.ac.uk>
351 for the VMS emulations of getpw*()
352 David Denholm <denholm@conmat.phys.soton.ac.uk>
353 for extensive testing and provision of pipe and SocketShr code,
354 Mark Pizzolato <mark@infocomm.com>
355 for the getredirection() code
356 Rich Salz <rsalz@bbn.com>
357 for readdir() and related routines
358 Peter Prymmer <pvhp@lns62.lns.cornell.edu)
359 for extensive testing, as well as development work on
360 configuration and documentation for VMS Perl,
361 Dan Sugalski <sugalsd@stargate.lbcc.cc.or.us>
362 for extensive contributions to recent version support,
363 development of VMS-specific extensions, and dissemination
364 of information about VMS Perl,
365 the Stanford Synchrotron Radiation Laboratory and the
366 Laboratory of Nuclear Studies at Cornell University for
367 the the opportunity to test and develop for the AXP,
368 and to the entire VMSperl group for useful advice and suggestions. In
369 addition the perl5-porters deserve credit for their creativity and
370 willingness to work with the VMS newcomers. Finally, the greatest debt of
371 gratitude is due to Larry Wall <larry@wall.org>, for having the ideas which
372 have made our sleepless nights possible.
378 ---------------------------------------------------------------------------
379 [Here's the pre-5.004_04 version of README.vms, for the record.]
381 Last revised: 19-Jan-1996 by Charles Bailey bailey@genetics.upenn.edu
383 The VMS port of Perl is still under development. At this time, the Perl
384 binaries built under VMS handle internal operations properly, for the most
385 part, as well as most of the system calls which have close equivalents under
386 VMS. There are still some incompatibilities in process handling (e.g the
387 fork/exec model for creating subprocesses doesn't do what you might expect
388 under Unix), and there remain some file handling differences from Unix. Over
389 the longer term, we'll try to get many of the useful VMS system services
390 integrated as well, depending on time and people available. Of course, if
391 you'd like to add something yourself, or join the porting team, we'd love to
394 The current sources and build procedures have been tested on a VAX using VAXC
395 and DECC, and on an AXP using DECC. If you run into problems with other
396 compilers, please let us know.
398 Note to DECC users: Some early versions of the DECCRTL contained a few bugs
399 which affect Perl performance:
400 - Newlines are lost on I/O through pipes, causing lines to run together.
401 This shows up as RMS RTB errors when reading from a pipe. You can
402 work around this by having one process write data to a file, and
403 then having the other read the file, instead of the pipe. This is
404 fixed in version 4 of DECC.
405 - The modf() routine returns a non-integral value for some values above
406 INT_MAX; the Perl "int" operator will return a non-integral value in
407 these cases. This is fixed in version 4 of DECC.
408 - On the AXP, if SYSNAM privilege is enabled, the CRTL chdir() routine
409 changes the process default device and directory permanently, even
410 though the call specified that the change should not persist after
411 Perl exited. This is fixed by DEC CSC patch AXPACRT04_061.
413 * Other software required
415 At the moment, in addition to basic VMS, you'll need two things:
416 - a C compiler: VAXC, DECC, or gcc for the VAX; DECC for the AXP
417 - a make tool: DEC's MMS (version 2.6 or later) or the free analog MMK
418 (available from ftp.spc.edu), or a standard make utility (e.g. GNU make,
419 also available from ftp.spc.edu).
420 In addition, you may include socket support if you have an IP stack running
421 on your system. See the topic "Socket support" for more information.
425 Perl includes a number of IP socket routines among its builtin functions,
426 which are available if you choose to compile Perl with socket support. Since
427 IP networking is an optional addition to VMS, there are several different IP
428 stacks available, so it's difficult to automate the process of building Perl
429 with socket support in a way which will work on all systems.
431 By default, Perl is built without IP socket support. If you define the macro
432 SOCKET when invoking MMK, however, socket support will be included. As
433 distributed, Perl for VMS includes support for the SOCKETSHR socket library,
434 which is layered on MadGoat software's vendor-independent NETLIB interface.
435 This provides support for all socket calls used by Perl except the
436 [g|s]etnet*() routines, which are replaced for the moment by stubs which
437 generate a fatal error if a Perl script attempts to call one of these routines.
438 Both SOCKETSHR and NETLIB are available from MadGoat ftp sites, such as
439 ftp.spc.edu or ftp.wku.edu.
441 You can link Perl directly to your TCP/IP stack's library, *as long as* it
442 supplies shims for stdio routines which will properly handle both sockets and
443 normal file descriptors. This is necessary because Perl does not distinguish
444 between the two, and will try to make normal stdio calls such as read() and
445 getc() on socket file descriptors. If you'd like to link Perl directly to
446 your IP stack, then make the following changes:
447 - In Descrip.MMS, locate the section beginning with .ifdef SOCKET, and
448 change the SOCKLIB macro so that it translates to the filespec of your
449 IP stack's socket library. This will be added to the RTL options file.
450 - Edit the file SockAdapt.H in the [.VMS] subdirectory so that it
451 includes the Socket.H, In.H, Inet.H, NetDb.H, and, if necessary,
452 Errno.H header files for your IP stack, or so that it declares the
453 standard TCP/IP constants and data structures appropriately. (See
454 the distributed copy of SockAdapt.H for a collection of the structures
455 needed by Perl itself, and [.ext.Socket]Socket.xs for a list of the
456 constants used by the Socket extension, if you elect to built it.)
457 You should also define any logical names necessary for your C compiler
458 to find these files before invoking MM[KS] to build Perl.
459 - Edit the file SockAdapt.C in the [.VMS] subdirectory so that it
460 contains routines which substitute for any IP library routines
461 required by Perl which your IP stack does not provide. This may
462 require a little trial and error; we'll try to compile a complete
463 list soon of socket routines required by Perl.
466 * Building Perl under VMS
468 Since you're reading this, presumably you've unpacked the Perl distribution
469 into its directory tree, in which you will find a [.vms] subdirectory below
470 the directory in which this file is found. If this isn't the case, then you'll
471 need to unpack the distribution properly, or manually edit Descrip.MMS or
472 the VMS Makefile to alter directory paths as necessary. (I'd advise using the
473 `normal' directory tree, at least for the first time through.) This
474 subdirectory contains several files, among which are the following:
475 Config.VMS - A template Config.H set up for VMS.
476 Descrip.MMS - The MMS/MMK dependency file for building Perl
477 GenConfig.Pl - A Perl script to generate Config.SH retrospectively
478 from Config.VMS, since the Configure shell script which
479 normally generates Config.SH doesn't run under VMS.
480 GenOpt.Com - A little DCL procedure used to write some linker options
481 files, since not all make utilities can do this easily.
482 Gen_ShrFls.Pl - A Perl script which generates linker options files and
483 MACRO declarations for PerlShr.Exe.
484 Makefile - The make dependency file for building Perl
485 MMS2Make.Pl - A Perl script used to generate Makefile from Descrip.MMS
486 PerlVMS.pod - Documentation for VMS-specific behavior of Perl
487 Perly_[CH].VMS - Versions of the byacc output from Perl's grammar,
488 modified to include VMS-specific C compiler options
489 SockAdapt.[CH] - C source code used to integrate VMS TCP/IP support
490 Test.Com - DCL driver for Perl regression tests
491 VMSish.H - C header file containing VMS-specific definitions
492 VMS.C - C source code for VMS-specific routines
493 VMS_Yfix.Pl - Perl script to convert Perly.[CH] to Perly_[CH].VMS
494 WriteMain.Pl - Perl script to generate Perlmain.C
495 The [.Ext...] directories contain VMS-specific extensions distributed with
496 Perl. There may also be other files in [.VMS...] pertaining to features under
497 development; for the most part, you can ignore them. Note that packages in
498 [.ext.*] are not built with Perl by default; you build the ones you want
499 once the basic Perl build is complete (see the perlvms docs for instructions
500 on building extensions.)
502 Config.VMS and Decrip.MMS/Makefile are set up to build a version of Perl which
503 includes all features known to work when this release was assembled. If you
504 have code at your site which would support additional features (e.g. emulation
505 of Unix system calls), feel free to make the appropriate changes to these
506 files. (Note: Do not use or edit config.h in the main Perl source directory;
507 it is superseded by the current Config.VMS during the build.) You may also
508 wish to make site-specific changes to Descrip.MMS or Makefile to reflect local
509 conventions for naming of files, etc.
511 There are several pieces of system-specific information which become part of
512 the Perl Config extension. Under VMS, the data for Config are generated by the
513 script GenConfig.Pl in the [.VMS] subdirectory. It tries to ascertain the
514 necessary information from various files, or from the system itself, and
515 generally does the right thing. There is a list of hard-coded values at the
516 end of this script which specifies items that are correct for most VMS systems,
517 but may be incorrect for you, if your site is set up in an unusual fashion. If
518 you're familiar with Perl's Config extension, feel free to edit these values as
519 necessary. If this doesn't mean much to you, don't worry -- the information is
520 probably correct, and even if it's not, none of these parameters affect your
521 ability to build or run Perl. You'll only get the wrong answer if you ask for
522 it specifically from Config.
524 Examine the information at the beginning of Descrip.MMS for information about
525 specifying alternate C compilers or building a version of Perl with debugging
526 support. For instance, if you want to use DECC, you'll need to include the
527 /macro="decc=1" qualifier to MMK (If you're using make, these options are not
528 supported.) If you're on an AXP system, define the macro __AXP__ (MMK does
529 this for you), and DECC will automatically be selected.
531 To start the build, set default to the main source directory. Since
532 Descrip.MMS assumes that VMS commands have their usual meaning, and makes use
533 of command-line macros, you may want to be certain that you haven't defined DCL
534 symbols which would interfere with the build. Then, if you are using MMS or
536 $ MMS/Descrip=[.VMS] ! or MMK
537 (N.B. If you are using MMS, you must use version 2.6 or later; a bug in
538 earlier versions produces malformed cc command lines.) If you are using a
540 $ Make -f [.VMS]Makefile
541 Note that the Makefile doesn't support conditional compilation, is
542 set up to use VAXC on a VAX, and does not include socket support. You can
543 either edit the Makefile by hand, using Descrip.MMS as a guide, or use the
544 Makefile to build Miniperl.Exe, and then run the Perl script MMS2Make.pl,
545 found in the [.VMS] subdirectory, to generate a new Makefile with the options
546 appropriate to your site.
548 If you are using MM[SK], and you decide to rebuild Perl with a different set
549 of parameters (e.g. changing the C compiler, or adding socket support), be
551 $ MMK/Descrip=[.VMS] realclean
552 first, in order to remove files generated during the previous build. If
553 you omit this step, you risk ending up with a copy of Perl which
554 composed partially of old files and partially of new ones, which may lead
555 to strange effects when you try to run Perl.
557 A bug in some early versions of the DECC RTL on the AXP causes newlines
558 to be lost when writing to a pipe. A different bug in some patched versions
559 of DECC 4.0 for VAX can also scramble preprocessor output. Finally, gcc 2.7.2
560 has yet another preprocessor bug, which causes line breaks to be inserted
561 into the output at inopportune times. Each of these bugs causes Gen_ShrFls.pl
562 to fail, since it can't parse the preprocessor output to identify global
563 variables and routines. This problem is generally manifested as missing
564 global symbols when linking PerlShr.Exe or Perl.Exe. You can work around
565 it by defining the macro PIPES_BROKEN when you invoke MMS or MMK.
568 This will build the following files:
569 Miniperl.Exe - a stand-alone version of without any extensions.
570 Miniperl has all the intrinsic capabilities of Perl,
571 but cannot make use of the DynaLoader or any
572 extensions which use XS code.
573 PerlShr.Exe - a shareable image containing most of Perl's internal
574 routines and global variables. Perl.Exe is linked to
575 this image, as are all dynamic extensions, so everyone's
576 using the same set of global variables and routines.
577 Perl.Exe - the main Perl executable image. It's contains the
578 main() routine, plus code for any statically linked
580 PerlShr_Attr.Opt - A linker options file which specifies psect attributes
581 matching those in PerlShr.Exe. It should be used when
582 linking images against PerlShr.Exe
583 PerlShr_Bld.Opt - A linker options file which specifies various things
584 used to build PerlShr.Exe. It should be used when
585 rebuilding PerlShr.Exe via MakeMaker-produced
586 Descrip.MMS files for static extensions.
587 c2ph - Perl program which generates template code to access
588 C struct members from Perl.
589 h2ph - Perl program which generates template code to access
590 #defined constants in a C header file from Perl,
591 using the "old-style" interface. (Largely supplanted
593 h2xs - Perl program which generates template files for creating
594 XSUB extensions, optionally beginning with the #defined
595 constants in a C header file.
596 [.lib.pod]perldoc - A Perl program which locates and displays documentation
597 for Perl and its extensions.
598 [.Lib]Config.pm - the Perl extension which saves configuration information
599 about Perl and your system.
600 [.Lib]DynaLoader.pm - The Perl extension which performs dynamic linking of
601 shareable images for extensions.
602 Several subdirectories under [.Lib] containing preprocessed files or
604 There are, of course, a number of other files created for use during the build.
605 Once you've got the binaries built, you may wish to `build' the `tidy' or
606 `clean' targets to remove extra files.
608 If you run into problems during the build, you can get help from the VMSPerl
609 or perl5-porters mailing lists (see below). When you report the problem,
610 please include the following information:
611 - The version of Perl you're trying to build. Please include any
612 "letter" patchlevel, in addition to the version number. If the
613 build successfully created Miniperl.Exe, you can check this by
614 saying '$ MCR Sys$Disk:[]Miniperl -v'. Also, please mention
615 where you obtained the distribution kit; in particular, note
616 whether you were using a basic Perl kit or the VMS test kit
618 - The exact command you issued to build Perl.
619 - A copy of all error messages which were generated during the build.
620 Please include enough of the build log to establish the context of
622 - A summary of your configuration. If the build progressed far enough
623 to generate Miniperl.Exe and [.Lib]Config.pm, you can obtain this
624 by saying '$ MCR Sys$Disk:[]Miniperl "-V"' (note the "" around -V).
625 If not, then you can say '$ MMK/Descrip=[.VMS] printconfig' to
627 This may sound like a lot of information to send, but it'll often make
628 it easier for someone to spot the problem, instead of having to give
629 a spectrum of possibilities.
633 * Installing Perl once it's built
635 Once the build is complete, you'll need to do the following:
636 - Put PerlShr.Exe in a common directory, and make it world-readable.
637 If you place it in a location other than Sys$Share, you'll need to
638 define the logical name PerlShr to point to the image. (If you're
639 installing on a VMScluster, be sure that each node is using the
640 copy of PerlShr you expect [e.g. if you put PerlShr.Exe in Sys$Share,
641 do they all share Sys$Share?]).
642 - Put Perl.Exe in a common directory, and make it world-executable.
643 - Define a foreign command to invoke Perl, using a statement like
644 $ Perl == "$dev:[dir]Perl.Exe"
645 - Create a world-readable directory tree for Perl library modules,
646 scripts, and what-have-you, and define PERL_ROOT as a rooted logical
647 name pointing to the top of this tree (i.e. if your Perl files were
648 going to live in DKA1:[Util.Perl5...], then you should
649 $ Define/Translation=Concealed Perl_Root DKA1:[Util.Perl5.]
650 (Be careful to follow the rules for rooted logical names; in particular,
651 remember that a rooted logical name cannot have as its device portion
652 another rooted logical name - you've got to supply the actual device name
653 and directory path to the root directory.)
654 - Place the files from the [.lib...] directory tree in the distribution
655 package into a [.lib...] directory tree off the root directory described
657 - Most of the Perl documentation lives in the [.pod] subdirectory, and
658 is written in a simple markup format which can be easily read. In this
659 directory as well are pod2man and pod2html translators to reformat the
660 docs for common display engines; a pod2hlp translator is under development.
661 These files are copied to [.lib.pod] during the installation.
662 - Define a foreign command to execute perldoc, such as
663 $ Perldoc == "''Perl' Perl_Root:[lib.pod]Perldoc -t"
664 This will allow users to retrieve documentation using Perldoc. For
665 more details, say "perldoc perldoc".
668 If you run into a bug in Perl, please submit a bug report. The PerlBug
669 program, found in the [.lib] directory, will walk you through the process
670 of assembling the necessary information into a bug report, and sending
671 of to the Perl bug reporting address, perlbug@perl.com.
673 * For more information
675 If you're interested in more information on Perl in general, you may wish to
676 consult the Usenet newsgroups comp.lang.perl.announce and comp.lang.perl.misc.
677 The FAQ for these groups provides pointers to other online sources of
678 information, as well as books describing Perl in depth.
680 If you're interested in up-to-date information on Perl development and
681 internals, you might want to subscribe to the perl5-porters mailing list. You
682 can do this by sending a message to perl5-porters-request@nicoh.com, containing
684 subscribe perl5-porters
685 This is a high-volume list at the moment (>50 messages/day).
687 If you're interested in ongoing information about the VMS port, you can
688 subscribe to the VMSPerl mailing list by sending a request to
689 vmsperl-request@genetics.upenn.edu, containing the single line
691 as the body of the message. And, as always, we welcome any help or code you'd
692 like to offer - you can send mail to bailey@genetics.upenn.edu or directly to
693 the VMSPerl list at vmsperl@genetics.upenn.edu.
695 Finally, if you'd like to try out the latest changes to VMS Perl, you can
696 retrieve a test distribution kit by anonymous ftp from genetics.upenn.edu, in
697 the file [.perl5]perl5_ppp_yymmddx.zip, where "ppp" is the current Perl
698 patchlevel, and "yymmddx" is a sequence number indicating the date that
699 particular kit was assembled. In order to make retrieval convenient, this
700 kit is also available by the name Perl5_VMSTest.Zip. These test kits contain
701 "unofficial" patches from the perl5-porters group, test patches for important
702 bugs, and VMS-specific fixes and improvements which have occurred since the
703 last Perl release. Most of these changes will be incorporated in the next
704 release of Perl, but until Larry Wall's looked at them and said they're OK,
705 none of them should be considered official.
707 Good luck using Perl. Please let us know how it works for you - we can't
708 guarantee that we'll be able to fix bugs quickly, but we'll try, and we'd
709 certainly like to know they're out there.
714 There are, of course, far too many people involved in the porting and testing
715 of Perl to mention everyone who deserves it, so please forgive us if we've
716 missed someone. That said, special thanks are due to the following:
717 Tim Adye <T.J.Adye@rl.ac.uk>
718 for the VMS emulations of getpw*()
719 David Denholm <denholm@conmat.phys.soton.ac.uk>
720 for extensive testing and provision of pipe and SocketShr code,
721 Mark Pizzolato <mark@infocomm.com>
722 for the getredirection() code
723 Rich Salz <rsalz@bbn.com>
724 for readdir() and related routines
725 Peter Prymmer <pvhp@lns62.lns.cornell.edu)
726 for extensive testing, as well as development work on
727 configuration and documentation for VMS Perl,
728 the Stanford Synchrotron Radiation Laboratory and the
729 Laboratory of Nuclear Studies at Cornell University for
730 the the opportunity to test and develop for the AXP,
731 and to the entire VMSperl group for useful advice and suggestions. In addition
732 the perl5-porters, especially Andy Dougherty <doughera@lafcol.lafayette.edu>
733 and Tim Bunce <Tim.Bunce@ig.co.uk>, deserve credit for their creativity and
734 willingness to work with the VMS newcomers. Finally, the greatest debt of
735 gratitude is due to Larry Wall <larry@wall.org>, for having the ideas which
736 have made our sleepless nights possible.