xref: /openbsd-src/gnu/usr.bin/perl/README.vms (revision 3d61058aa5c692477b6d18acfbbdb653a9930ff9)
1# vim: syntax=pod
2
3If you read this file _as_is_, just ignore the equal signs on the left.
4This file is written in the POD format (see [.pod]perlpod.pod) which is
5specially designed to be readable as is.
6
7=head1 NAME
8
9perlvms - Configuring, building, testing, and installing perl on VMS
10
11=head1 SYNOPSIS
12
13To configure, build, test, and install perl on VMS:
14
15    @configure
16    mmk
17    mmk test
18    mmk install
19
20=head1 DESCRIPTION
21
22=head2 Important safety tip
23
24For best results, make sure you read the "Configuring the Perl Build",
25"Building  Perl", and "Installing Perl" sections of this document before
26you build or install.  Also please note other changes in the current
27release by having a look at L<perldelta/VMS>.
28
29=head2 Introduction to Perl on VMS
30
31The VMS port of Perl is as functionally complete as any other Perl port
32(and as complete as the ports on some Unix systems). The Perl binaries
33provide all the Perl system calls that are either available under VMS or
34reasonably emulated. There are some incompatibilities in process handling
35(e.g. the fork/exec model for creating subprocesses doesn't do what you
36might expect under Unix), mainly because VMS and Unix handle processes and
37sub-processes very differently.
38
39There are still some unimplemented system functions, and of course we
40could use modules implementing useful VMS system services, so if you'd like
41to lend a hand we'd love to have you.  Join the Perl Porting Team Now!
42
43=head2 Other required software for Compiling Perl on VMS
44
45In addition to VMS and DCL you will need three things:
46
47=over 4
48
49=item 1  A C compiler.
50
51VSI (formerly DEC/Compaq/HP/HPE) C for VMS (Alpha or Itanium). Various
52ancient versions of DEC C had some caveats, so if you're using a version
53older than 7.x, you may need to upgrade to get a successful build.
54
55There have been no recent reports of builds using Gnu C, but latent
56(and most likely outdated) support for it is still present in various
57parts of the sources.
58
59There is rudimentary but not quite complete support for HP C++; to try it out,
60configure with C<-"Dusecxx" -"Duser_c_flags=/WARN=INFORMATIONAL=NOCTOBUTCONREFM">.
61
62=item 2  A make tool.
63
64You will need the free MMS analog MMK (available from
65L<http://ftp.endlesssoftware.com.au/mmk/kits/> or
66L<https://github.com/endlesssoftware/mmk>). HP's MMS has not been known to work for
67some time as Perl's automatically-generated description files are too complex for it,
68but MMS support may return in the future.  Gnu Make might work, but it's been so long
69since anyone's tested it that we're not sure.
70
71=item 3  ODS-5 and Extended Parse
72
73All development and testing of Perl on VMS takes place on ODS-5 volumes with
74extended parse enabled in the environment via the command C<SET PROCESS/PARSE=EXTENDED>.
75Latent support for ODS-2 volumes is still present, but there have been some reports
76that it no longer works, and even if it builds, there will be many test failures,
77mostly related to the failure to preserve filename case. ODS-2 support may be
78explicity disabled in a future release.
79
80=back
81
82=head2 Additional software that is optional for Perl on VMS
83
84You may also want to have on hand:
85
86=over 4
87
88=item 1  gunzip/gzip for VMS
89
90A de-compressor for *.gz and *.tgz files available from a number
91of web/ftp sites such as:
92
93    L<http://www.antinode.info/dec/sw/gzip.html>
94    L<http://vms.process.com/scripts/fileserv/fileserv.com?GZIP>
95
96=item 2  VMS tar
97
98For reading and writing Unix tape archives (*.tar files).  Vmstar is also
99available from a number of sites such as:
100
101    L<http://www.antinode.info/dec/sw/vmstar.html>
102    L<http://vms.process.com/scripts/fileserv/fileserv.com?VMSTAR>
103
104A port of GNU tar is also available as part of the GNV package:
105
106    L<http://h71000.www7.hp.com/opensource/gnv.html>
107
108=item 3  unzip for VMS
109
110A combination decompressor and archive reader/writer for *.zip files.
111Unzip is available from a number of web/ftp sites.
112
113    L<http://www.info-zip.org/UnZip.html>
114    L<http://www.hp.com/go/openvms/freeware/>
115    L<http://vms.process.com/fileserv-software.html>
116
117=item 5 GNU patch and diffutils for VMS
118
119Patches to Perl are usually distributed as GNU unified or contextual diffs.
120Such patches are created by the GNU diff program (part of the diffutils
121distribution) and applied with GNU patch.  VMS ports of these utilities are
122available here:
123
124    L<http://www.antinode.info/dec/sw/diffutils.html>
125    L<http://vms.pdv-systeme.de/users/martinv/gnupatch.zip>
126
127=back
128
129Please note that unzip and gunzip are not the same thing (they work with
130different formats).  Many of the useful files from CPAN (the Comprehensive
131Perl Archive Network) are in *.tar.gz or *.tgz format (this includes copies
132of the source code for perl as well as modules and scripts that you may
133wish to add later) hence you probably want to have GUNZIP.EXE and
134VMSTAR.EXE on your VMS machine.
135
136=head1 Unpacking the Perl source code
137
138You may need to set up a foreign symbol for the unpacking utility of
139choice.  Once you have done so, use a command like the following to
140unpack the archive:
141
142    vmstar -xvf perl-5^.40^.1.tar
143
144Then set default to the top-level source directory like so:
145
146    set default [.perl-5^.40^.1]
147
148and proceed with configuration as described in the next section.
149
150
151=head1 Configuring the Perl build
152
153To configure perl (a necessary first step), issue the command
154
155   @configure.com
156
157from the top of an unpacked perl source directory.  You will be asked a
158series of questions, and the answers to them (along with the capabilities
159of your C compiler and network stack) will determine how perl is custom-
160built for your machine.
161
162If you have any symbols or logical names in your environment that may
163interfere with the build or regression testing of perl then F<configure.com>
164will try to warn you about them.  If a logical name is causing
165you trouble but is in an LNM table that you do not have write access to
166then try defining your own to a harmless equivalence string in a table
167such that it is resolved before the other (e.g. if TMP is defined in the
168SYSTEM table then try DEFINE TMP "NL:" or somesuch in your process table)
169otherwise simply deassign the dangerous logical names.  The potentially
170troublesome logicals and symbols include:
171
172    COMP    "LOGICAL"
173    EXT     "LOGICAL"
174    FOO     "LOGICAL"
175    LIB     "LOGICAL"
176    LIST    "LOGICAL"
177    MIME    "LOGICAL"
178    POSIX   "LOGICAL"
179    SYS     "LOGICAL"
180    T       "LOGICAL"
181    THREAD  "LOGICAL"
182    THREADS "LOGICAL"
183    TIME    "LOGICAL"
184    TMP     "LOGICAL"
185    UNICODE "LOGICAL"
186    UTIL    "LOGICAL"
187    TEST    "SYMBOL"
188
189As a handy shortcut, the command:
190
191    @configure "-des"
192
193(note the quotation marks and case) will choose reasonable defaults
194automatically.  Some options can be given explicitly on the command line;
195the following example specifies a non-default location for where Perl
196will be installed:
197
198    @configure "-d" "-Dprefix=dka100:[utils.perl5.]"
199
200Note that the installation location would be by default where you unpacked
201the source with a "_ROOT." appended.  For example if you unpacked the perl
202source into:
203
204   F<DKA200:[PERL-5^.18^.0...]>
205
206Then the F<PERL_SETUP.COM> that gets written out by F<configure.com> will
207try to DEFINE your installation PERL_ROOT to be:
208
209   F<DKA200:[PERL-5^.18^.0_ROOT.]>
210
211More help with configure.com is available from:
212
213    @configure "-h"
214
215If you find yourself reconfiguring and rebuilding  then be sure to also follow
216the advice in the "Cleaning up and starting fresh (optional)" and the checklist
217of items in the "CAVEATS" sections below.
218
219=head2 Changing compile-time options (optional) for Perl on VMS
220
221Most of the user-definable features of Perl are enabled or disabled in
222configure.com, which processes the hints file config_h.SH.  There is
223code in there to Do The Right Thing, but that  may end up being the
224wrong thing for you.  Make sure you understand what you are doing since
225inappropriate changes to configure.com or config_h.SH can render perl
226unbuildable; odds are that there's nothing in there you'll need to
227change. Note also that non-default options are tested less than default
228options, so you may end up being more of a pioneer than you intend to be.
229
230=head1 Building Perl
231
232The configuration script will print out, at the very end, the MMS or MMK
233command you need to compile perl.  Issue it (exactly as printed) to start
234the build.
235
236Once you issue your MMS or MMK command, sit back and wait.  Perl should
237compile and link without a problem.  If a problem does occur check the
238"CAVEATS" section of this document.  If that does not help send some
239mail to the VMSPERL mailing list.  Instructions are in the L</"Mailing Lists">
240section of this document.
241
242=head1 Testing Perl
243
244Once Perl has built cleanly you need to test it to make sure things work.
245This step is very important since there are always things that can go wrong
246somehow and yield a dysfunctional Perl for you.
247
248Testing is very easy, though, as there's a full test suite in the perl
249distribution.  To run the tests, enter the I<exact> MMS line you used to
250compile Perl and add the word "test" to the end, like this:
251
252If the compile command was:
253
254    MMK
255
256then the test command ought to be:
257
258    MMK test
259
260MMK (or MMS) will run all the tests.  This may take some time, as there are
261a lot of tests.  If any tests fail, there will be a note made on-screen.
262At the end of all the tests, a summary of the tests, the number passed and
263failed, and the time taken will be displayed.
264
265The test driver invoked via MMK TEST has a DCL wrapper ([.VMS]TEST.COM) that
266downgrades privileges to NETMBX, TMPMBX for the duration of the test run,
267and then restores them to their prior state upon completion of testing.
268This is done to ensure that the tests run in a private sandbox and can do no
269harm to your system even in the unlikely event something goes badly wrong in
270one of the test scripts while running the tests from a privileged account.
271A side effect of this safety precaution is that the account used to run the
272test suite must be the owner of the directory tree in which Perl has been
273built; otherwise the manipulations of temporary files and directories
274attempted by some of the tests will fail.
275
276If any tests fail, it means something is wrong with Perl, or at least
277with the particular module or feature that reported failure. If the test suite
278hangs (some tests can take upwards of two or three minutes, or more if
279you're on an especially slow machine, depending on your machine speed, so
280don't be hasty), then the test I<after> the last one displayed failed. Don't
281install Perl unless you're confident that you're OK. Regardless of how
282confident you are, make a bug report to the VMSPerl mailing list.
283
284If one or more tests fail, you can get more information on the failure by
285issuing this command sequence:
286
287    @[.vms]test .typ "" "-v" [.subdir]test.t
288
289where ".typ" is the file type of the Perl images you just built (if you
290didn't do anything special, use .EXE), and "[.subdir]test.t" is the test
291that failed. For example, with a normal Perl build, if the test indicated
292that t/op/time failed, then you'd do this:
293
294    @ .vms]test .EXE "" "-v" [.op]time.t
295
296Note that test names are reported in UNIX syntax and relative to the
297top-level build directory.  When supplying them individually to the test
298driver, you must specify them in Unix format if they are outside of the [.t]
299directory; otherwise VMS syntax is ok. Note that you must also give the path
300relative to the [.t] directory and you must also add the .t extension to the
301filename.  So, for example if the test lib/warnings.t fails, you would run:
302
303    @[.vms]test .EXE "" -"v" "../lib/warnings.t"
304
305When you send in a bug report for failed tests, please include the output
306from this command, which is run from the main source directory:
307
308    MCR []MINIPERL "-Ilib" "-V"
309
310Note that -"V" really is a capital V in double quotes. This will dump out a
311couple of screens worth of configuration information, and can help us
312diagnose the problem.  If (and only if) that did not work then try enclosing
313the output of:
314
315    MMK printconfig
316
317If (and only if) that did not work then try enclosing the output of:
318
319    @[.vms]myconfig
320
321You may also be asked to provide your C compiler version ("CC/VERSION NL:"
322with DEC C, "gcc --version" with GNU CC).  To obtain the version of MMS or
323MMK you are running try "MMS/ident" or "MMK /ident".  The GNU make version
324can be identified with "make --version".
325
326=head2 Cleaning up and starting fresh (optional) installing Perl on VMS
327
328If you need to recompile from scratch, you have to make sure you clean up
329first.  There is a procedure to do it--enter the I<exact> MMK line you used
330to compile and add "realclean" at the end, like this:
331
332if the compile command was:
333
334    MMK
335
336then the cleanup command ought to be:
337
338    MMK realclean
339
340If you do not do this things may behave erratically during the subsequent
341rebuild attempt.  They might not, too, so it is best to be sure and do it.
342
343=head1 Installing Perl
344
345There are several steps you need to take to get Perl installed and
346running.
347
348=over 4
349
350=item 1
351
352Check your default file protections with
353
354     SHOW PROTECTION /DEFAULT
355
356and adjust if necessary with C<SET PROTECTION=(code)/DEFAULT>.
357
358=item 2
359
360Decide where you want Perl to be installed (unless you have already done so
361by using the "prefix" configuration parameter -- see the example in the
362"Configuring the Perl build" section).
363
364The DCL script PERL_SETUP.COM that is written by configure.com will help you
365with the definition of the PERL_ROOT and PERLSHR logical names and the PERL
366foreign command  symbol.  Take a look at PERL_SETUP.COM and modify it if you
367want to.  The installation process will execute PERL_SETUP.COM and copy
368files to the directory tree pointed to by the PERL_ROOT logical name defined
369there, so make sure that you have write access to the parent directory of
370what will become the root of your Perl installation.
371
372=item 3
373
374Run the install script via:
375
376    MMK install
377
378If for some reason it complains about target INSTALL being up to date,
379throw a /FORCE switch on the MMS or MMK command.
380
381=back
382
383Installation will copy F<PERL_SETUP.COM> to the root of your installation
384tree.  If you want to give everyone on the system  access to Perl (and you
385have, for example, installed to F<dsa0:[utils.perl_root]>) then add a line
386that reads:
387
388    $ @dsa0:[utils.perl_root]perl_setup
389
390to F<SYS$MANAGER:SYLOGIN.COM>.  Or for your own use only, simply place
391that line in F<SYS$LOGIN:LOGIN.COM>.
392
393Two alternatives to the foreign symbol would be to install PERL into
394DCLTABLES.EXE (Check out the section "Installing Perl into DCLTABLES
395(optional)" for more information), or put the image in a
396directory that's in your DCL$PATH.
397
398See also the "INSTALLing images (optional)" section.
399
400=head2 Installing Perl into DCLTABLES (optional) on VMS
401
402Execute the following command file to define PERL as a DCL command.
403You'll need CMKRNL privilege to install the new dcltables.exe.
404
405    $ create perl.cld
406    !
407    ! modify to reflect location of your perl.exe
408    !
409    define verb perl
410      image perl_root:[000000]perl.exe
411      cliflags (foreign)
412    $!
413    $ set command perl /table=sys$common:[syslib]dcltables.exe -
414     /output=sys$common:[syslib]dcltables.exe
415    $ install replace sys$common:[syslib]dcltables.exe
416    $ exit
417
418=head2 INSTALLing Perl images (optional) on VMS
419
420On systems that are using perl quite a bit, and particularly those with
421minimal RAM, you can boost the performance of perl by INSTALLing it as
422a known image.  PERLSHR.EXE is typically larger than 3000 blocks
423and that is a reasonably large amount of IO to load each time perl is
424invoked.
425
426   INSTALL ADD PERLSHR/SHARE
427   INSTALL ADD PERL/HEADER
428
429should be enough for F<PERLSHR.EXE> (/share implies /header and /open),
430while /HEADER should do for FPERL.EXE> (perl.exe is not a shared image).
431
432If your code 'use's modules, check to see if there is a shareable image for
433them, too.  In the base perl build, POSIX, IO, Fcntl, Opcode, SDBM_File,
434DCLsym, and Stdio, and other extensions all have shared images that can be
435installed /SHARE.
436
437How much of a win depends on your memory situation, but if you are firing
438off perl with any regularity (like more than once every 20 seconds or so)
439it is probably beneficial to INSTALL at least portions of perl.
440
441While there is code in perl to remove privileges as it runs you are advised
442to NOT INSTALL F<PERL.EXE> with PRIVs!
443
444=head2 Running h2ph to create perl header files (optional) on VMS
445
446If using HP C, ensure that you have extracted loose versions of your
447compiler's header or *.H files.  Be sure to check the contents of:
448
449    SYS$LIBRARY:DECC$RTLDEF.TLB
450    SYS$LIBRARY:SYS$LIB_C.TLB
451    SYS$LIBRARY:SYS$STARLET_C.TLB
452
453etcetera.
454
455If using GNU cc then also check your GNU_CC:[000000...] tree for the locations
456of the GNU cc headers.
457
458=head1 Reporting Bugs
459
460If you come across what you think might be a bug in Perl, please report
461it. The issue tracker at L<https://github.com/Perl/perl5/issues> walks you
462through the process of creating a bug report and including details of your
463installation.
464
465=head1 CAVEATS
466
467Probably the single biggest gotcha in compiling Perl is giving the wrong
468switches to MMS/MMK when you build. Use I<exactly> what the configure.com
469script prints!
470
471Be sure that the process that you use to build Perl has a PGFLQUO of at
472least 400000.  Be sure to have a correct local time zone to UTC offset
473defined (in seconds) in the logical name SYS$TIMEZONE_DIFFERENTIAL before
474running the regression test suite.  The SYS$MANAGER:UTC$CONFIGURE_TDF.COM
475procedure will help you set that logical for your system but may require
476system privileges.  For example, a location 5 hours west of UTC (such as
477the US East coast while not on daylight savings time) would have:
478
479    DEFINE SYS$TIMEZONE_DIFFERENTIAL "-18000"
480
481A final thing that causes trouble is leftover pieces from a failed
482build.  If things go wrong make sure you do a "(MMK|MMS|make) realclean"
483before you rebuild.
484
485=head2 Floating Point Considerations
486
487Prior to 5.8.0, Perl simply accepted the default floating point options of the
488C compiler, namely representing doubles with G_FLOAT on Alpha.  Single
489precision floating point values are represented in F_FLOAT format when either
490D_FLOAT or G_FLOAT is in use for doubles.  Beginning with 5.8.0, Alpha builds
491now use IEEE floating point formats by default, which in VMS parlance are S_FLOAT
492for singles and T_FLOAT for doubles.  Itanium builds have always used IEEE by
493default. The  available non-default options are D_FLOAT or G_FLOAT on Alpha
494or Itanium.
495
496The use of IEEE introduces NaN, infinity, and denormalization capabilities not
497available with D_FLOAT and G_FLOAT.  When using one of those non-IEEE formats,
498silent underflow and overflow are emulated in the conversion of strings to
499numbers, but it is preferable to get the real thing by using IEEE where possible.
500You are likely to see quite a few test failures when not using IEEE floating point.
501
502Regardless of what floating point format you consider preferable, be aware
503that the choice may have an impact on compatibility with external libraries,
504such as database interfaces, and with existing data, such as data created with
505the C<pack> function and written to disk, or data stored via the Storable
506extension.  For example, a C<pack("d", $foo)")> will create a D_FLOAT,
507G_FLOAT, or T_FLOAT depending on what your Perl was configured with.  When
508written to disk, the value can only be retrieved later by a Perl configured
509with the same floating point option that was in effect when it was created.
510
511To obtain a non-IEEE build, simply answer no to the "Use IEEE math?" question
512during the configuration or specify -"Uuseieee" as a parameter to configure.com
513on the command line.
514
515=head1 Mailing Lists
516
517There are several mailing lists available to the Perl porter.  For VMS
518specific issues (including both Perl questions and installation problems)
519there is the VMSPERL mailing list.  It is usually a low-volume (10-12
520messages a week) mailing list.
521
522To subscribe, send a mail message to VMSPERL-SUBSCRIBE@PERL.ORG. The VMSPERL
523mailing list address is VMSPERL@PERL.ORG.  Any mail sent there gets echoed
524to all subscribers of the list.  There is an archive of the list
525on the web at:
526
527    L<https://www.nntp.perl.org/group/perl.vmsperl/>
528
529To unsubscribe from VMSPERL send a message to VMSPERL-UNSUBSCRIBE@PERL.ORG.
530Be sure to do so from the subscribed account that you are canceling.
531
532=head2 Web sites for Perl on VMS
533
534Vmsperl pages on the web include:
535
536    L<http://www.sidhe.org/vmsperl/index.html>
537    L<https://www.cpan.org/modules/by-module/VMS/>
538    L<https://www.nntp.perl.org/group/perl.vmsperl/>
539    L<https://sourceforge.net/projects/vmsperlkit/>
540
541=head1 SEE ALSO
542
543Perl information for users and programmers about the port of perl to VMS is
544available from the [.pod]perlvms.pod file that gets installed as L<perlvms>.
545For administrators the perlvms document also includes a detailed discussion
546of extending vmsperl with CPAN modules after Perl has been installed.
547
548=head1 AUTHORS
549
550Originally by Charles Bailey bailey@newman.upenn.edu.  See the git repository
551for history.
552
553=head1 ACKNOWLEDGEMENTS
554
555A real big thanks needs to go to Charles Bailey
556bailey@newman.upenn.edu, who is ultimately responsible for Perl 5.004
557running on VMS. Without him, nothing the rest of us have done would be at
558all important.
559
560There are, of course, far too many people involved in the porting and testing
561of Perl to mention everyone who deserves it, so please forgive us if we've
562missed someone.  That said, special thanks are due to the following:
563
564  Tim Adye T.J.Adye@rl.ac.uk
565     for the VMS emulations of getpw*()
566  David Denholm denholm@conmat.phys.soton.ac.uk
567     for extensive testing and provision of pipe and SocketShr code,
568  Mark Pizzolato mark@infocomm.com
569     for the getredirection() code
570  Rich Salz rsalz@bbn.com
571     for readdir() and related routines
572  Peter Prymmer pvhp@best.com
573     for extensive testing, as well as development work on
574     configuration and documentation for VMS Perl,
575  Dan Sugalski dan@sidhe.org
576     for extensive contributions to recent version support,
577     development of VMS-specific extensions, and dissemination
578     of information about VMS Perl,
579  the Stanford Synchrotron Radiation Laboratory and the
580     Laboratory of Nuclear Studies at Cornell University for
581     the opportunity to test and develop for the AXP,
582  John Hasstedt John.Hasstedt@sunysb.edu
583     for VAX VMS V7.2 support
584  John Malmberg wb8tyw@qsl.net
585     for ODS-5 filename handling and other modernizations
586
587and to the entire VMSperl group for useful advice and suggestions.  In
588addition the perl5-porters deserve credit for their creativity and
589willingness to work with the VMS newcomers.  Finally, the greatest debt of
590gratitude is due to Larry Wall larry@wall.org, for having the ideas which
591have made our sleepless nights possible.
592
593Thanks,
594The VMSperl group
595
596=cut
597
598