This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: Regex sets are no longer experimental
[perl5.git] / README.os390
... / ...
CommitLineData
1This document is written in pod format hence there are punctuation
2characters in odd places. You can read more
3about pod in pod/perlpod.pod or the short summary in the INSTALL file.
4
5=head1 NAME
6
7perlos390 - building and installing Perl for z/OS (previously called OS/390)
8
9=head1 SYNOPSIS
10
11This document will help you Configure, build, test and install Perl
12on z/OS Unix System Services.
13
14=head1 DESCRIPTION
15
16This is a ported Perl for z/OS. It has been tested on z/OS 2.4 and
17should work fine with z/OS 2.5.
18It may work on other versions or releases, but those are
19the ones it has been tested on.
20
21The native character set for z/OS is EBCDIC, but it can also run in ASCII mode.
22Perl can support either, but you have to compile it explicitly for one or the
23other. You could have both an ASCII perl, and an EBCDIC perl on the same
24machine. If you use ASCII mode and an ASCII perl, the Encode module shipped
25with perl can be used to translate files from various EBCDIC code pages for
26handling by perl, and then back on output
27
28This document describes how to build a 64-bit Dynamic Perl, either ASCII or
29EBCDIC. You can interactively choose other configurations, as well as many
30other options in the Configure script that is run as part of the build
31process. You may need to carry out some system configuration tasks before
32running Configure, as detailed below.
33
34=head2 Tools
35
36You will want to get GNU make 4.1 or later. GNU make can be downloaded from a
37port that Rocket Software provides. You will need the z/OS c99 compiler from
38IBM (though xlc in c99 mode without optimization turned on works in EBCDIC).
39
40If you want the latest development version of Perl, you will need git.
41You can use git on another platform and transfer the result via sftp or ftp to
42z/OS. But there is a z/OS native git client port available through Rocket
43Software.
44
45You may also need the gunzip client port that Rocket Software provides to unzip
46any zipped tarball you upload to z/OS.
47
48=head2 Building a 64-bit Dynamic ASCII Perl
49
50For building from an official stable release of Perl, go to
51L<https://www.perl.org/get.html> and choose any one of the
52"Download latest stable source" buttons. This will get you a tarball. The
53name of that tarball will be something like 'perl-V.R.M,tar,gz', where V.R.M is
54the version/release/modification of the perl you are downloading. Do
55
56 gunzip perl-V.R.M.tar.gz
57
58Then one of:
59
60 tar -xvf perl-V.R.M.tar
61
62 pax -r -f perl-V.R.M.tar
63
64Either of these will create the source directory. You can rename it to
65whatever you like; for these instructions, 'perl' is assumed to be the name.
66
67If instead you want the latest unstable development release, using the native
68git on z/OS, clone Perl:
69
70 git clone https://github.com/Perl/perl5.git perl
71
72Either way, once you have a 'perl' directory containing the source, cd into it,
73and tag all the code as ASCII:
74
75 cd perl
76 chtag -R -h -t -cISO8859-1 *
77
78Configure the build environment as 64-bit, Dynamic, ASCII, development,
79deploying it to F</usr/local/perl/ascii>:
80
81 export PATH=$PWD:$PATH
82 export LIBPATH=$PWD:$PATH
83 ./Configure -Dprefix=/usr/local/perl/ascii -des -Dusedevel \
84 -Duse64bitall -Dusedl
85
86If you are building from a stable source, you don't need "-Dusedevel".
87(If you run Configure without options, it will interactively ask you about
88every possible option based on its probing of what's available on your
89particular machine, so you can choose as you go along.)
90
91Run GNU make to build Perl
92
93 make
94
95Run tests to ensure Perl is working correctly. Currently, there are about a
96dozen failing tests out of nearly 2500
97
98 make test_harness
99
100Install Perl into F</usr/local/perl/ascii>:
101
102 make install
103
104=head2 Building a 64-bit Dynamic EBCDIC Perl
105
106You will need a working perl on some box with connectivity to the destination
107machine. On z/OS, it could be an ASCII perl, or a previous EBCDIC one.
108Many machines will already have a pre-built perl already running, or one can
109easily be downloaded from L<https://www.perl.org/get.html>.
110
111Follow the directions above in "Building a 64-bit Dynamic ASCII Perl" as far as
112getting a populated 'perl' directory. Then come back here to proceed.
113
114The downloaded perl will need to be converted to 1047 EBCDIC. To do this:
115
116 cd perl
117 Porting/makerel -e
118
119If the Porting/makerel step fails with an error that it can not issue the tar
120command, proceed to issue the command interactively, where V.R.M is the
121version/release/modification of Perl you are uploading:
122
123 cd ../
124 tar cf - --format=ustar perl-V.R.M | gzip --best > perl-V.R.M.tar.gz
125
126Use sftp to upload the zipped tar file to z/OS:
127
128 sftp <your system>
129 cd /tmp
130 put perl-V.R.M.tar.gz
131
132Unzip and untar the zipped tar file on z/OS:
133
134 cd /tmp
135 gunzip perl-V.R.M.tar.gz
136
137Then one of:
138
139 tar -xvf perl-V.R.M.tar
140
141 pax -r -f perl-V.R.M.tar
142
143You now have the source code for the EBCDIC Perl on z/OS and can proceed to
144build it. This is analagous to how you would build the code for ASCII, but
145note: you B<should not> tag the code but instead leave it untagged.
146
147Configure the build environment as 64-bit, Dynamic, native, development,
148deploying it to F</usr/local/perl/ebcdic>:
149
150 export PATH=$PWD:$PATH
151 export LIBPATH=$PWD:$PATH
152 ./Configure -Dprefix=/usr/local/perl/ebcdic -des -Dusedevel \
153 -Duse64bitall -Dusedl
154
155If you are building from a stable source, you don't need "-Dusedevel".
156(If you run Configure without options, it will interactively ask you about
157every possible option based on its probing of what's available on your
158particular machine, so you can choose as you go along.)
159
160Run GNU make to build Perl
161
162 make
163
164Run tests to ensure Perl is working correctly.
165
166 make test_harness
167
168You might also want to have GNU groff for OS/390 installed before
169running the "make install" step for Perl.
170
171Install Perl into F</usr/local/perl/ebcdic>:
172
173 make install
174
175EBCDIC Perl is still a work in progress. All the core code works as far as we
176know, but various modules you might want to download from CPAN do not. The
177failures range from very minor to catastrophic. Many of them are simply bugs
178in the tests, with the module actually working properly. This happens because,
179for example, the test is coded to expect a certain character ASCII code point;
180when it gets the EBCDIC value back instead, it complains. But the code
181actually worked. Other potential failures that aren't really failures stem
182from checksums coming out differently, since C<A>, for example, has a different
183bit representation between the character sets. A test that is expecting the
184ASCII value will show failure, even if the module is working perfectly. Also
185in sorting, uppercase letters come before lowercase letters on ASCII systems;
186the reverse on EBCDIC.
187
188Some CPAN modules come bundled with the downloaded perl. And a few of those
189have yet to be fixed to pass on EBCDIC platforms. As a result they are skipped
190when you run 'make test'. The current list is:
191
192 Archive::Tar
193 Config::Perl::V
194 CPAN::Meta
195 CPAN::Meta::YAML
196 Digest::MD5
197 Digest::SHA
198 Encode
199 ExtUtils::MakeMaker
200 ExtUtils::Manifest
201 HTTP::Tiny
202 IO::Compress
203 IPC::Cmd
204 JSON::PP
205 libnet
206 MIME::Base64
207 Module::Metadata
208 PerlIO::via-QuotedPrint
209 Pod::Checker
210 podlators
211 Pod::Simple
212 Socket
213 Test::Harness
214
215See also F<hints/os390.sh> for other potential gotchas.
216
217=head2 Setup and utilities for Perl on OS/390
218
219This may also be a good time to ensure that your F</etc/protocol> file
220and either your F</etc/resolv.conf> or F</etc/hosts> files are in place.
221The IBM document that describes such USS system setup issues is
222"z/OS UNIX System Services Planning"
223
224For successful testing you may need to turn on the sticky bit for your
225world readable /tmp directory if you have not already done so (see man chmod).
226
227=head2 Useful files for trouble-shooting
228
229If your configuration is failing, read hints/os390.sh
230This file provides z/OS specific options to direct the build process.
231
232=head3 Shell
233
234A message of the form:
235
236 (I see you are using the Korn shell. Some ksh's blow up on Configure,
237 mainly on older exotic systems. If yours does, try the Bourne shell
238 instead.)
239
240is nothing to worry about at all.
241
242=head3 Dynamic loading
243
244Dynamic loading is required if you want to use XS modules from CPAN (like
245DBI (and DBD's), JSON::XS, and Text::CSV_XS) or update CORE modules from
246CPAN with newer versions (like Encode) without rebuilding all of the perl
247binary.
248
249The instructions above will create a dynamic Perl. If you do not want to
250use dynamic loading, remove the -Dusedl option.
251See the comments in hints/os390.sh for more information on dynamic loading.
252
253=head3 Optimizing
254
255Optimization has not been turned on yet. There may be issues if Perl
256is optimized.
257
258=head2 Build Anomalies with Perl on OS/390
259
260"Out of memory!" messages during the build of Perl are most often fixed
261by re building the GNU make utility for OS/390 from a source code kit.
262
263Within USS your F</etc/profile> or F<$HOME/.profile> may limit your ulimit
264settings. Check that the following command returns reasonable values:
265
266 ulimit -a
267
268To conserve memory you should have your compiler modules loaded into the
269Link Pack Area (LPA/ELPA) rather than in a link list or step lib.
270
271If the compiler complains of syntax errors during the build of the
272Socket extension then be sure to fix the syntax error in the system
273header /usr/include/sys/socket.h.
274
275=head2 Testing Anomalies with Perl on OS/390
276
277The "make test" step runs a Perl Verification Procedure, usually before
278installation. You might encounter STDERR messages even during a successful
279run of "make test". Here is a guide to some of the more commonly seen
280anomalies:
281
282=head3 Out of Memory (31-bit only)
283
284Out of memory problems should not be an issue, unless you are attempting to build
285a 31-bit Perl.
286
287If you _are_ building a 31-bit Perl, the constrained environment may mean you
288need to change memory options for Perl.
289In addition to the comments
290above on memory limitations it is also worth checking for _CEE_RUNOPTS
291in your environment. Perl now has (in miniperlmain.c) a C #pragma for 31-bit only
292to set CEE run options, but the environment variable wins.
293
294The 31-bit C code asks for:
295
296 #pragma runopts(HEAP(2M,500K,ANYWHERE,KEEP,8K,4K) STACK(,,ANY,) ALL31(ON))
297
298The important parts of that are the second argument (the increment) to HEAP,
299and allowing the stack to be "Above the (16M) line". If the heap
300increment is too small then when perl (for example loading unicode/Name.pl) tries
301to create a "big" (400K+) string it cannot fit in a single segment
302and you get "Out of Memory!" - even if there is still plenty of memory
303available.
304
305A related issue is use with perl's malloc. Perl's malloc uses C<sbrk()>
306to get memory, and C<sbrk()> is limited to the first allocation so in this
307case something like:
308
309 HEAP(8M,500K,ANYWHERE,KEEP,8K,4K)
310
311is needed to get through the test suite.
312
313=head2 Usage Hints for Perl on z/OS
314
315When using Perl on z/OS please keep in mind that the EBCDIC and ASCII
316character sets are different. See L<perlebcdic> for more on such character
317set issues. Perl builtin functions that may behave differently under
318EBCDIC are also mentioned in the perlport.pod document.
319
320If you are having trouble with square brackets then consider switching your
321rlogin or telnet client. Try to avoid older 3270 emulators and ISHELL for
322working with Perl on USS.
323
324=head2 Modules and Extensions for Perl on z/OS (Static Only)
325
326Pure Perl (that is non XS) modules may be installed via the usual:
327
328 perl Makefile.PL
329 make
330 make test
331 make install
332
333If you built perl with dynamic loading capability then that would also
334be the way to build XS based extensions. However, if you built perl with
335static linking you can still build XS based extensions for z/OS
336but you will need to follow the instructions in ExtUtils::MakeMaker for
337building statically linked perl binaries. In the simplest configurations
338building a static perl + XS extension boils down to:
339
340 perl Makefile.PL
341 make
342 make perl
343 make test
344 make install
345 make -f Makefile.aperl inst_perl MAP_TARGET=perl
346
347=head2 Running Perl on z/OS
348
349To run the 64-bit Dynamic Perl environment, update your PATH and LIBPATH
350to include the location you installed Perl into, and then run the perl you
351installed as perlV.R.M where V/R/M is the Version/Release/Modification level
352of the current development level.
353If you are running the ASCII/EBCDIC Bi-Modal Perl environment, you also need to
354set up your ASCII/EBCDIC Bi-Modal environment variables, and ensure any Perl
355source code you run is tagged appropriately as ASCII or EBCDIC using
356"chtag -t -c<CCSID>":
357
358=over
359
360=item For ASCII Only:
361
362 export _BPXK_AUTOCVT=ON
363 export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG),POSIX(ON)"
364 export _TAG_REDIR_ERR="txt"
365 export _TAG_REDIR_IN="txt"
366 export _TAG_REDIR_OUT="txt"
367
368=item For ASCII or EBCDIC:
369
370 export PATH=/usr/local/perl/ascii:$PATH
371 export LIBPATH=/usr/local/perl/ascii/lib:$LIBPATH
372 perlV.R.M args
373
374=back
375
376If tcsh is your login shell then use the setenv command.
377
378=head1 AUTHORS
379
380David Fiander and Peter Prymmer with thanks to Dennis Longnecker
381and William Raffloer for valuable reports, LPAR and PTF feedback.
382Thanks to Mike MacIsaac and Egon Terwedow for SG24-5944-00.
383Thanks to Ignasi Roca for pointing out the floating point problems.
384Thanks to John Goodyear for dynamic loading help.
385
386Mike Fulton and Karl Williamson have provided updates for UTF8, DLL, 64-bit and
387ASCII/EBCDIC Bi-Modal support
388
389=head1 OTHER SITES
390
391L<https://github.com/ZOSOpenTools/perlport/> provides documentation and tools
392for building various z/OS Perl configurations and has some useful tools in the
393'bin' directory you may want to use for building z/OS Perl yourself.
394
395=head1 HISTORY
396
397Updated 24 December 2021 to enable initial ASCII support
398
399Updated 03 October 2019 for perl-5.33.3+
400
401Updated 28 November 2001 for broken URLs.
402
403Updated 12 March 2001 to mention //'SYS1.TCPPARMS(TCPDATA)'.
404
405Updated 24 January 2001 to mention dynamic loading.
406
407Updated 15 January 2001 for the 5.7.1 release of Perl.
408
409Updated 12 November 2000 for the 5.7.1 release of Perl.
410
411This document was podified for the 5.005_03 release of Perl 11 March 1999.
412
413This document was originally written by David Fiander for the 5.005
414release of Perl.
415
416=cut
417