Commit | Line | Data |
c07a80fd |
1 | Last revised: 19-Jan-1996 by Charles Bailey bailey@genetics.upenn.edu |
a0d0e21e |
2 | |
748a9306 |
3 | The VMS port of Perl is still under development. At this time, the Perl |
a0d0e21e |
4 | binaries built under VMS handle internal operations properly, for the most |
5 | part, as well as most of the system calls which have close equivalents under |
6 | VMS. There are still some incompatibilities in process handling (e.g the |
7 | fork/exec model for creating subprocesses doesn't do what you might expect |
748a9306 |
8 | under Unix), and there remain some file handling differences from Unix. Over |
9 | the longer term, we'll try to get many of the useful VMS system services |
10 | integrated as well, depending on time and people available. Of course, if |
11 | you'd like to add something yourself, or join the porting team, we'd love to |
12 | have you! |
a0d0e21e |
13 | |
14 | The current sources and build procedures have been tested on a VAX using VAXC |
c07a80fd |
15 | and DECC, and on an AXP using DECC. If you run into problems with other |
16 | compilers, please let us know. |
a0d0e21e |
17 | |
748a9306 |
18 | Note to DECC users: Some early versions of the DECCRTL contained a few bugs |
19 | which affect Perl performance: |
20 | - Newlines are lost on I/O through pipes, causing lines to run together. |
21 | This shows up as RMS RTB errors when reading from a pipe. You can |
22 | work around this by having one process write data to a file, and |
4633a7c4 |
23 | then having the other read the file, instead of the pipe. This is |
24 | fixed in version 4 of DECC. |
748a9306 |
25 | - The modf() routine returns a non-integral value for some values above |
26 | INT_MAX; the Perl "int" operator will return a non-integral value in |
4633a7c4 |
27 | these cases. This is fixed in version 4 of DECC. |
28 | - On the AXP, if SYSNAM privilege is enabled, the CRTL chdir() routine |
29 | changes the process default device and directory permanently, even |
30 | though the call specified that the change should not persist after |
31 | Perl exited. This is fixed by DEC CSC patch AXPACRT04_061. |
a0d0e21e |
32 | |
33 | * Other software required |
34 | |
35 | At the moment, in addition to basic VMS, you'll need two things: |
36 | - a C compiler: VAXC, DECC, or gcc for the VAX; DECC for the AXP |
eacfb5f1 |
37 | - a make tool: DEC's MMS (version 2.6 or later) or the free analog MMK |
38 | (available from ftp.spc.edu), or a standard make utility (e.g. GNU make, |
39 | also available from ftp.spc.edu). |
40 | In addition, you may include socket support if you have an IP stack running |
a0d0e21e |
41 | on your system. See the topic "Socket support" for more information. |
42 | |
43 | * Socket support |
44 | |
748a9306 |
45 | Perl includes a number of IP socket routines among its builtin functions, |
46 | which are available if you choose to compile Perl with socket support. Since |
a0d0e21e |
47 | IP networking is an optional addition to VMS, there are several different IP |
eacfb5f1 |
48 | stacks available, so it's difficult to automate the process of building Perl |
49 | with socket support in a way which will work on all systems. |
a0d0e21e |
50 | |
748a9306 |
51 | By default, Perl is built without IP socket support. If you define the macro |
c07a80fd |
52 | SOCKET when invoking MMK, however, socket support will be included. As |
748a9306 |
53 | distributed, Perl for VMS includes support for the SOCKETSHR socket library, |
a0d0e21e |
54 | which is layered on MadGoat software's vendor-independent NETLIB interface. |
748a9306 |
55 | This provides support for all socket calls used by Perl except the |
4633a7c4 |
56 | [g|s]etnet*() routines, which are replaced for the moment by stubs which |
748a9306 |
57 | generate a fatal error if a Perl script attempts to call one of these routines. |
eacfb5f1 |
58 | Both SOCKETSHR and NETLIB are available from MadGoat ftp sites, such as |
59 | ftp.spc.edu or ftp.wku.edu. |
60 | |
4633a7c4 |
61 | You can link Perl directly to your TCP/IP stack's library, *as long as* it |
62 | supplies shims for stdio routines which will properly handle both sockets and |
63 | normal file descriptors. This is necessary because Perl does not distinguish |
64 | between the two, and will try to make normal stdio calls such as read() and |
65 | getc() on socket file descriptors. If you'd like to link Perl directly to |
66 | your IP stack, then make the following changes: |
a0d0e21e |
67 | - In Descrip.MMS, locate the section beginning with .ifdef SOCKET, and |
68 | change the SOCKLIB macro so that it translates to the filespec of your |
69 | IP stack's socket library. This will be added to the RTL options file. |
70 | - Edit the file SockAdapt.H in the [.VMS] subdirectory so that it |
eacfb5f1 |
71 | includes the Socket.H, In.H, Inet.H, NetDb.H, and, if necessary, |
4633a7c4 |
72 | Errno.H header files for your IP stack, or so that it declares the |
73 | standard TCP/IP constants and data structures appropriately. (See |
74 | the distributed copy of SockAdapt.H for a collection of the structures |
75 | needed by Perl itself, and [.ext.Socket]Socket.xs for a list of the |
76 | constants used by the Socket extension, if you elect to built it.) |
77 | You should also define any logical names necessary for your C compiler |
78 | to find these files before invoking MM[KS] to build Perl. |
a0d0e21e |
79 | - Edit the file SockAdapt.C in the [.VMS] subdirectory so that it |
80 | contains routines which substitute for any IP library routines |
748a9306 |
81 | required by Perl which your IP stack does not provide. This may |
a0d0e21e |
82 | require a little trial and error; we'll try to compile a complete |
748a9306 |
83 | list soon of socket routines required by Perl. |
a0d0e21e |
84 | |
4633a7c4 |
85 | |
748a9306 |
86 | * Building Perl under VMS |
a0d0e21e |
87 | |
748a9306 |
88 | Since you're reading this, presumably you've unpacked the Perl distribution |
a0d0e21e |
89 | into its directory tree, in which you will find a [.vms] subdirectory below |
90 | the directory in which this file is found. If this isn't the case, then you'll |
91 | need to unpack the distribution properly, or manually edit Descrip.MMS or |
748a9306 |
92 | the VMS Makefile to alter directory paths as necessary. (I'd advise using the |
a0d0e21e |
93 | `normal' directory tree, at least for the first time through.) This |
94 | subdirectory contains several files, among which are the following: |
eacfb5f1 |
95 | Config.VMS - A template Config.H set up for VMS. |
748a9306 |
96 | Descrip.MMS - The MMS/MMK dependency file for building Perl |
97 | GenConfig.Pl - A Perl script to generate Config.SH retrospectively |
a0d0e21e |
98 | from Config.VMS, since the Configure shell script which |
99 | normally generates Config.SH doesn't run under VMS. |
100 | GenOpt.Com - A little DCL procedure used to write some linker options |
101 | files, since not all make utilities can do this easily. |
748a9306 |
102 | Gen_ShrFls.Pl - A Perl script which generates linker options files and |
a0d0e21e |
103 | MACRO declarations for PerlShr.Exe. |
eacfb5f1 |
104 | Makefile - The make dependency file for building Perl |
748a9306 |
105 | MMS2Make.Pl - A Perl script used to generate Makefile from Descrip.MMS |
eacfb5f1 |
106 | PerlVMS.pod - Documentation for VMS-specific behavior of Perl |
107 | Perly_[CH].VMS - Versions of the byacc output from Perl's grammar, |
108 | modified to include VMS-specific C compiler options |
109 | SockAdapt.[CH] - C source code used to integrate VMS TCP/IP support |
110 | Test.Com - DCL driver for Perl regression tests |
a0d0e21e |
111 | VMSish.H - C header file containing VMS-specific definitions |
112 | VMS.C - C source code for VMS-specific routines |
eacfb5f1 |
113 | VMS_Yfix.Pl - Perl script to convert Perly.[CH] to Perly_[CH].VMS |
114 | WriteMain.Pl - Perl script to generate Perlmain.C |
115 | The [.Ext...] directories contain VMS-specific extensions distributed with |
116 | Perl. There may also be other files in [.VMS...] pertaining to features under |
c07a80fd |
117 | development; for the most part, you can ignore them. Note that packages in |
118 | [.ext.*] are not built with Perl by default; you build the ones you want |
119 | once the basic Perl build is complete (see the perlvms docs for instructions |
120 | on building extensions.) |
a0d0e21e |
121 | |
748a9306 |
122 | Config.VMS and Decrip.MMS/Makefile are set up to build a version of Perl which |
a0d0e21e |
123 | includes all features known to work when this release was assembled. If you |
124 | have code at your site which would support additional features (e.g. emulation |
125 | of Unix system calls), feel free to make the appropriate changes to these |
748a9306 |
126 | files. (Note: Do not use or edit config.h in the main Perl source directory; |
a0d0e21e |
127 | it is superseded by the current Config.VMS during the build.) You may also |
748a9306 |
128 | wish to make site-specific changes to Descrip.MMS or Makefile to reflect local |
a0d0e21e |
129 | conventions for naming of files, etc. |
130 | |
eacfb5f1 |
131 | There are several pieces of system-specific information which become part of |
132 | the Perl Config extension. Under VMS, the data for Config are generated by the |
133 | script GenConfig.Pl in the [.VMS] subdirectory. It tries to ascertain the |
134 | necessary information from various files, or from the system itself, and |
135 | generally does the right thing. There is a list of hard-coded values at the |
136 | end of this script which specifies items that are correct for most VMS systems, |
137 | but may be incorrect for you, if your site is set up in an unusual fashion. If |
138 | you're familiar with Perl's Config extension, feel free to edit these values as |
139 | necessary. If this doesn't mean much to you, don't worry -- the information is |
140 | probably correct, and even if it's not, none of these parameters affect your |
141 | ability to build or run Perl. You'll only get the wrong answer if you ask for |
142 | it specifically from Config. |
a0d0e21e |
143 | |
144 | Examine the information at the beginning of Descrip.MMS for information about |
748a9306 |
145 | specifying alternate C compilers or building a version of Perl with debugging |
a0d0e21e |
146 | support. For instance, if you want to use DECC, you'll need to include the |
c07a80fd |
147 | /macro="decc=1" qualifier to MMK (If you're using make, these options are not |
a0d0e21e |
148 | supported.) If you're on an AXP system, define the macro __AXP__ (MMK does |
149 | this for you), and DECC will automatically be selected. |
150 | |
748a9306 |
151 | To start the build, set default to the main source directory. Since |
152 | Descrip.MMS assumes that VMS commands have their usual meaning, and makes use |
153 | of command-line macros, you may want to be certain that you haven't defined DCL |
154 | symbols which would interfere with the build. Then, if you are using MMS or |
155 | MMK, say |
a0d0e21e |
156 | $ MMS/Descrip=[.VMS] ! or MMK |
eacfb5f1 |
157 | (N.B. If you are using MMS, you must use version 2.6 or later; a bug in |
158 | earlier versions produces malformed cc command lines.) If you are using a |
159 | version of make, say |
748a9306 |
160 | $ Make -f [.VMS]Makefile |
161 | Note that the Makefile doesn't support conditional compilation, is |
a0d0e21e |
162 | set up to use VAXC on a VAX, and does not include socket support. You can |
748a9306 |
163 | either edit the Makefile by hand, using Descrip.MMS as a guide, or use the |
164 | Makefile to build Miniperl.Exe, and then run the Perl script MMS2Make.pl, |
a0d0e21e |
165 | found in the [.VMS] subdirectory, to generate a new Makefile with the options |
2114d1da |
166 | appropriate to your site. |
167 | |
168 | If you are using MM[SK], and you decide to rebuild Perl with a different set |
169 | of parameters (e.g. changing the C compiler, or adding socket support), be |
170 | sure to say |
c07a80fd |
171 | $ MMK/Descrip=[.VMS] realclean |
172 | first, in order to remove files generated during the previous build. If |
173 | you omit this step, you risk ending up with a copy of Perl which |
174 | composed partially of old files and partially of new ones, which may lead |
175 | to strange effects when you try to run Perl. |
a0d0e21e |
176 | |
a5f75d66 |
177 | A bug in some early versions of the DECC RTL on the AXP causes newlines |
178 | to be lost when writing to a pipe. A different bug in some patched versions |
179 | of DECC 4.0 for VAX can also scramble preprocessor output. Finally, gcc 2.7.2 |
180 | has yet another preprocessor bug, which causes line breaks to be inserted |
181 | into the output at inopportune times. Each of these bugs causes Gen_ShrFls.pl |
182 | to fail, since it can't parse the preprocessor output to identify global |
183 | variables and routines. This problem is generally manifested as missing |
184 | global symbols when linking PerlShr.Exe or Perl.Exe. You can work around |
185 | it by defining the macro PIPES_BROKEN when you invoke MMS or MMK. |
186 | |
a0d0e21e |
187 | |
188 | This will build the following files: |
189 | Miniperl.Exe - a stand-alone version of without any extensions. |
748a9306 |
190 | Miniperl has all the intrinsic capabilities of Perl, |
a0d0e21e |
191 | but cannot make use of the DynaLoader or any |
192 | extensions which use XS code. |
748a9306 |
193 | PerlShr.Exe - a shareable image containing most of Perl's internal |
a0d0e21e |
194 | routines and global variables. Perl.Exe is linked to |
195 | this image, as are all dynamic extensions, so everyone's |
196 | using the same set of global variables and routines. |
748a9306 |
197 | Perl.Exe - the main Perl executable image. It's contains the |
a0d0e21e |
198 | main() routine, plus code for any statically linked |
199 | extensions. |
200 | PerlShr_Attr.Opt - A linker options file which specifies psect attributes |
201 | matching those in PerlShr.Exe. It should be used when |
202 | linking images against PerlShr.Exe |
748a9306 |
203 | PerlShr_Bld.Opt - A linker options file which specifies various things |
204 | used to build PerlShr.Exe. It should be used when |
205 | rebuilding PerlShr.Exe via MakeMaker-produced |
206 | Descrip.MMS files for static extensions. |
c07a80fd |
207 | c2ph - Perl program which generates template code to access |
208 | C struct members from Perl. |
209 | h2ph - Perl program which generates template code to access |
210 | #defined constants in a C header file from Perl, |
211 | using the "old-style" interface. (Largely supplanted |
212 | by h2xs.) |
213 | h2xs - Perl program which generates template files for creating |
214 | XSUB extensions, optionally beginning with the #defined |
215 | constants in a C header file. |
2114d1da |
216 | [.lib.pod]perldoc - A Perl program which locates and displays documentation |
c07a80fd |
217 | for Perl and its extensions. |
748a9306 |
218 | [.Lib]Config.pm - the Perl extension which saves configuration information |
219 | about Perl and your system. |
eacfb5f1 |
220 | [.Lib]DynaLoader.pm - The Perl extension which performs dynamic linking of |
a0d0e21e |
221 | shareable images for extensions. |
eacfb5f1 |
222 | Several subdirectories under [.Lib] containing preprocessed files or |
223 | site-specific files. |
a0d0e21e |
224 | There are, of course, a number of other files created for use during the build. |
225 | Once you've got the binaries built, you may wish to `build' the `tidy' or |
226 | `clean' targets to remove extra files. |
227 | |
c07a80fd |
228 | If you run into problems during the build, you can get help from the VMSPerl |
229 | or perl5-porters mailing lists (see below). When you report the problem, |
230 | please include the following information: |
231 | - The version of Perl you're trying to build. Please include any |
232 | "letter" patchlevel, in addition to the version number. If the |
233 | build successfully created Miniperl.Exe, you can check this by |
234 | saying '$ MCR Sys$Disk:[]Miniperl -v'. Also, please mention |
235 | where you obtained the distribution kit; in particular, note |
236 | whether you were using a basic Perl kit or the VMS test kit |
237 | (see below). |
238 | - The exact command you issued to build Perl. |
239 | - A copy of all error messages which were generated during the build. |
240 | Please include enough of the build log to establish the context of |
241 | the error messages. |
242 | - A summary of your configuration. If the build progressed far enough |
243 | to generate Miniperl.Exe and [.Lib]Config.pm, you can obtain this |
244 | by saying '$ MCR Sys$Disk:[]Miniperl "-V"' (note the "" around -V). |
245 | If not, then you can say '$ MMK/Descrip=[.VMS] printconfig' to |
246 | produce the summary. |
247 | This may sound like a lot of information to send, but it'll often make |
248 | it easier for someone to spot the problem, instead of having to give |
249 | a spectrum of possibilities. |
250 | |
251 | |
a0d0e21e |
252 | |
748a9306 |
253 | * Installing Perl once it's built |
a0d0e21e |
254 | |
255 | Once the build is complete, you'll need to do the following: |
256 | - Put PerlShr.Exe in a common directory, and make it world-readable. |
257 | If you place it in a location other than Sys$Share, you'll need to |
2114d1da |
258 | define the logical name PerlShr to point to the image. (If you're |
259 | installing on a VMScluster, be sure that each node is using the |
260 | copy of PerlShr you expect [e.g. if you put PerlShr.Exe in Sys$Share, |
261 | do they all share Sys$Share?]). |
eacfb5f1 |
262 | - Put Perl.Exe in a common directory, and make it world-executable. |
748a9306 |
263 | - Define a foreign command to invoke Perl, using a statement like |
a0d0e21e |
264 | $ Perl == "$dev:[dir]Perl.Exe" |
748a9306 |
265 | - Create a world-readable directory tree for Perl library modules, |
a0d0e21e |
266 | scripts, and what-have-you, and define PERL_ROOT as a rooted logical |
748a9306 |
267 | name pointing to the top of this tree (i.e. if your Perl files were |
268 | going to live in DKA1:[Util.Perl5...], then you should |
269 | $ Define/Translation=Concealed Perl_Root DKA1:[Util.Perl5.] |
270 | (Be careful to follow the rules for rooted logical names; in particular, |
271 | remember that a rooted logical name cannot have as its device portion |
272 | another rooted logical name - you've got to supply the actual device name |
273 | and directory path to the root directory.) |
4633a7c4 |
274 | - Place the files from the [.lib...] directory tree in the distribution |
275 | package into a [.lib...] directory tree off the root directory described |
276 | above. |
748a9306 |
277 | - Most of the Perl documentation lives in the [.pod] subdirectory, and |
a0d0e21e |
278 | is written in a simple markup format which can be easily read. In this |
279 | directory as well are pod2man and pod2html translators to reformat the |
280 | docs for common display engines; a pod2hlp translator is under development. |
c07a80fd |
281 | These files are copied to [.lib.pod] during the installation. |
282 | - Define a foreign command to execute perldoc, such as |
283 | $ Perldoc == "''Perl' Perl_Root:[lib.pod]Perldoc -t" |
284 | This will allow users to retrieve documentation using Perldoc. For |
285 | more details, say "perldoc perldoc". |
eacfb5f1 |
286 | That's it. |
a0d0e21e |
287 | |
c07a80fd |
288 | If you run into a bug in Perl, please submit a bug report. The PerlBug |
289 | program, found in the [.lib] directory, will walk you through the process |
290 | of assembling the necessary information into a bug report, and sending |
291 | of to the Perl bug reporting address, perlbug@perl.com. |
a0d0e21e |
292 | |
293 | * For more information |
294 | |
748a9306 |
295 | If you're interested in more information on Perl in general, consult the Usenet |
eacfb5f1 |
296 | newsgroups comp.lang.perl.announce and comp.lang.perl.misc. The FAQ for these |
297 | groups provides pointers to other online sources of information, as well as |
298 | books describing Perl in depth. |
a0d0e21e |
299 | |
748a9306 |
300 | If you're interested in up-to-date information on Perl development and |
a0d0e21e |
301 | internals, you might want to subscribe to the perl5-porters mailing list. You |
748a9306 |
302 | can do this by sending a message to perl5-porters-request@nicoh.com, containing |
a0d0e21e |
303 | the single line |
16d20bd9 |
304 | subscribe perl5-porters |
2114d1da |
305 | This is a high-volume list at the moment (>50 messages/day). |
a0d0e21e |
306 | |
4633a7c4 |
307 | If you're interested in ongoing information about the VMS port, you can |
308 | subscribe to the VMSperl mailing list by sending a request to |
a0d0e21e |
309 | bailey@genetics.upenn.edu (it's to a human, not a list server - this is a small |
310 | operation at the moment). And, as always, we welcome any help or code you'd |
311 | like to offer - you can send mail to bailey@genetics.upenn.edu or directly to |
312 | the VMSperl list at vmsperl@genetics.upenn.edu. |
313 | |
4633a7c4 |
314 | Finally, if you'd like to try out the latest changes to VMS Perl, you can |
315 | retrieve a test distribution kit by anonymous ftp from genetics.upenn.edu, in |
316 | the file [.perl5]perl5_ppp_yymmddx.zip, where "ppp" is the current Perl |
317 | patchlevel, and "yymmddx" is a sequence number indicating the date that |
eacfb5f1 |
318 | particular kit was assembled. In order to make retrieval convenient, this |
319 | kit is also available by the name Perl5_VMSTest.Zip. These test kits contain |
320 | "unofficial" patches from the perl5-porters group, test patches for important |
321 | bugs, and VMS-specific fixes and improvements which have occurred since the |
322 | last Perl release. Most of these changes will be incorporated in the next |
323 | release of Perl, but until Larry Wall's looked at them and said they're OK, |
324 | none of them should be considered official. |
4633a7c4 |
325 | |
748a9306 |
326 | Good luck using Perl. Please let us know how it works for you - we can't |
a0d0e21e |
327 | guarantee that we'll be able to fix bugs quickly, but we'll try, and we'd |
328 | certainly like to know they're out there. |
329 | |
330 | |
331 | * Acknowledgements |
332 | |
333 | There are, of course, far too many people involved in the porting and testing |
748a9306 |
334 | of Perl to mention everyone who deserves it, so please forgive us if we've |
a0d0e21e |
335 | missed someone. That said, special thanks are due to the following: |
748a9306 |
336 | Tim Adye <T.J.Adye@rl.ac.uk> |
337 | for the VMS emulations of getpw*() |
a0d0e21e |
338 | David Denholm <denholm@conmat.phys.soton.ac.uk> |
339 | for extensive testing and provision of pipe and SocketShr code, |
340 | Mark Pizzolato <mark@infocomm.com> |
341 | for the getredirection() code |
342 | Rich Salz <rsalz@bbn.com> |
343 | for readdir() and related routines |
a0d0e21e |
344 | Richard Dyson <dyson@blaze.physics.uiowa.edu> and |
345 | Kent Covert <kacovert@miavx1.acs.muohio.edu> |
346 | for additional testing on the AXP. |
347 | and to the entire VMSperl group for useful advice and suggestions. In addition |
348 | the perl5-porters, especially Andy Dougherty <doughera@lafcol.lafayette.edu> |
349 | and Tim Bunce <Tim.Bunce@ig.co.uk>, deserve credit for their creativity and |
350 | willingness to work with the VMS newcomers. Finally, the greatest debt of |
c07a80fd |
351 | gratitude is due to Larry Wall <lwall@sems.com>, for having the ideas which |
a0d0e21e |
352 | have made our sleepless nights possible. |
353 | |
354 | Thanks, |
355 | The VMSperl group |