diff options
Diffstat (limited to 'upstream/mageia-cauldron/man1/perlos390.1')
-rw-r--r-- | upstream/mageia-cauldron/man1/perlos390.1 | 506 |
1 files changed, 506 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man1/perlos390.1 b/upstream/mageia-cauldron/man1/perlos390.1 new file mode 100644 index 00000000..ac742398 --- /dev/null +++ b/upstream/mageia-cauldron/man1/perlos390.1 @@ -0,0 +1,506 @@ +.\" -*- mode: troff; coding: utf-8 -*- +.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. +.ie n \{\ +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" ======================================================================== +.\" +.IX Title "PERLOS390 1" +.TH PERLOS390 1 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH NAME +perlos390 \- building and installing Perl for z/OS (previously called OS/390) +.SH SYNOPSIS +.IX Header "SYNOPSIS" +This document will help you Configure, build, test and install Perl +on z/OS Unix System Services. +.SH DESCRIPTION +.IX Header "DESCRIPTION" +This is a ported Perl for z/OS. It has been tested on z/OS 2.4 and +should work fine with z/OS 2.5. +It may work on other versions or releases, but those are +the ones it has been tested on. +.PP +The native character set for z/OS is EBCDIC, but it can also run in ASCII mode. +Perl can support either, but you have to compile it explicitly for one or the +other. You could have both an ASCII perl, and an EBCDIC perl on the same +machine. If you use ASCII mode and an ASCII perl, the Encode module shipped +with perl can be used to translate files from various EBCDIC code pages for +handling by perl, and then back on output +.PP +This document describes how to build a 64\-bit Dynamic Perl, either ASCII or +EBCDIC. You can interactively choose other configurations, as well as many +other options in the Configure script that is run as part of the build +process. You may need to carry out some system configuration tasks before +running Configure, as detailed below. +.SS Tools +.IX Subsection "Tools" +You will want to get GNU make 4.1 or later. GNU make can be downloaded from a +port that Rocket Software provides. You will need the z/OS c99 compiler from +IBM (though xlc in c99 mode without optimization turned on works in EBCDIC). +.PP +If you want the latest development version of Perl, you will need git. +You can use git on another platform and transfer the result via sftp or ftp to +z/OS. But there is a z/OS native git client port available through Rocket +Software. +.PP +You may also need the gunzip client port that Rocket Software provides to unzip +any zipped tarball you upload to z/OS. +.SS "Building a 64\-bit Dynamic ASCII Perl" +.IX Subsection "Building a 64-bit Dynamic ASCII Perl" +For building from an official stable release of Perl, go to +<https://www.perl.org/get.html> and choose any one of the +"Download latest stable source" buttons. This will get you a tarball. The +name of that tarball will be something like 'perl\-V.R.M,tar,gz', where V.R.M is +the version/release/modification of the perl you are downloading. Do +.PP +.Vb 1 +\& gunzip perl\-V.R.M.tar.gz +.Ve +.PP +Then one of: +.PP +.Vb 1 +\& tar \-xvf perl\-V.R.M.tar +\& +\& pax \-r \-f perl\-V.R.M.tar +.Ve +.PP +Either of these will create the source directory. You can rename it to +whatever you like; for these instructions, 'perl' is assumed to be the name. +.PP +If instead you want the latest unstable development release, using the native +git on z/OS, clone Perl: +.PP +.Vb 1 +\& git clone https://github.com/Perl/perl5.git perl +.Ve +.PP +Either way, once you have a 'perl' directory containing the source, cd into it, +and tag all the code as ASCII: +.PP +.Vb 2 +\& cd perl +\& chtag \-R \-h \-t \-cISO8859\-1 * +.Ve +.PP +Configure the build environment as 64\-bit, Dynamic, ASCII, development, +deploying it to \fI/usr/local/perl/ascii\fR: +.PP +.Vb 4 +\& export PATH=$PWD:$PATH +\& export LIBPATH=$PWD:$PATH +\& ./Configure \-Dprefix=/usr/local/perl/ascii \-des \-Dusedevel \e +\& \-Duse64bitall \-Dusedl +.Ve +.PP +If you are building from a stable source, you don't need "\-Dusedevel". +(If you run Configure without options, it will interactively ask you about +every possible option based on its probing of what's available on your +particular machine, so you can choose as you go along.) +.PP +Run GNU make to build Perl +.PP +.Vb 1 +\& make +.Ve +.PP +Run tests to ensure Perl is working correctly. Currently, there are about a +dozen failing tests out of nearly 2500 +.PP +.Vb 1 +\& make test_harness +.Ve +.PP +Install Perl into \fI/usr/local/perl/ascii\fR: +.PP +.Vb 1 +\& make install +.Ve +.SS "Building a 64\-bit Dynamic EBCDIC Perl" +.IX Subsection "Building a 64-bit Dynamic EBCDIC Perl" +You will need a working perl on some box with connectivity to the destination +machine. On z/OS, it could be an ASCII perl, or a previous EBCDIC one. +Many machines will already have a pre-built perl already running, or one can +easily be downloaded from <https://www.perl.org/get.html>. +.PP +Follow the directions above in "Building a 64\-bit Dynamic ASCII Perl" as far as +getting a populated 'perl' directory. Then come back here to proceed. +.PP +The downloaded perl will need to be converted to 1047 EBCDIC. To do this: +.PP +.Vb 2 +\& cd perl +\& Porting/makerel \-e +.Ve +.PP +If the Porting/makerel step fails with an error that it can not issue the tar +command, proceed to issue the command interactively, where V.R.M is the +version/release/modification of Perl you are uploading: +.PP +.Vb 2 +\& cd ../ +\& tar cf \- \-\-format=ustar perl\-V.R.M | gzip \-\-best > perl\-V.R.M.tar.gz +.Ve +.PP +Use sftp to upload the zipped tar file to z/OS: +.PP +.Vb 3 +\& sftp <your system> +\& cd /tmp +\& put perl\-V.R.M.tar.gz +.Ve +.PP +Unzip and untar the zipped tar file on z/OS: +.PP +.Vb 2 +\& cd /tmp +\& gunzip perl\-V.R.M.tar.gz +.Ve +.PP +Then one of: +.PP +.Vb 1 +\& tar \-xvf perl\-V.R.M.tar +\& +\& pax \-r \-f perl\-V.R.M.tar +.Ve +.PP +You now have the source code for the EBCDIC Perl on z/OS and can proceed to +build it. This is analagous to how you would build the code for ASCII, but +note: you \fBshould not\fR tag the code but instead leave it untagged. +.PP +Configure the build environment as 64\-bit, Dynamic, native, development, +deploying it to \fI/usr/local/perl/ebcdic\fR: +.PP +.Vb 4 +\& export PATH=$PWD:$PATH +\& export LIBPATH=$PWD:$PATH +\& ./Configure \-Dprefix=/usr/local/perl/ebcdic \-des \-Dusedevel \e +\& \-Duse64bitall \-Dusedl +.Ve +.PP +If you are building from a stable source, you don't need "\-Dusedevel". +(If you run Configure without options, it will interactively ask you about +every possible option based on its probing of what's available on your +particular machine, so you can choose as you go along.) +.PP +Run GNU make to build Perl +.PP +.Vb 1 +\& make +.Ve +.PP +Run tests to ensure Perl is working correctly. +.PP +.Vb 1 +\& make test_harness +.Ve +.PP +You might also want to have GNU groff for OS/390 installed before +running the "make install" step for Perl. +.PP +Install Perl into \fI/usr/local/perl/ebcdic\fR: +.PP +.Vb 1 +\& make install +.Ve +.PP +EBCDIC Perl is still a work in progress. All the core code works as far as we +know, but various modules you might want to download from CPAN do not. The +failures range from very minor to catastrophic. Many of them are simply bugs +in the tests, with the module actually working properly. This happens because, +for example, the test is coded to expect a certain character ASCII code point; +when it gets the EBCDIC value back instead, it complains. But the code +actually worked. Other potential failures that aren't really failures stem +from checksums coming out differently, since \f(CW\*(C`A\*(C'\fR, for example, has a different +bit representation between the character sets. A test that is expecting the +ASCII value will show failure, even if the module is working perfectly. Also +in sorting, uppercase letters come before lowercase letters on ASCII systems; +the reverse on EBCDIC. +.PP +Some CPAN modules come bundled with the downloaded perl. And a few of those +have yet to be fixed to pass on EBCDIC platforms. As a result they are skipped +when you run 'make test'. The current list is: +.PP +.Vb 10 +\& Archive::Tar +\& Config::Perl::V +\& CPAN::Meta +\& CPAN::Meta::YAML +\& Digest::MD5 +\& Digest::SHA +\& Encode +\& ExtUtils::MakeMaker +\& ExtUtils::Manifest +\& HTTP::Tiny +\& IO::Compress +\& IPC::Cmd +\& JSON::PP +\& libnet +\& MIME::Base64 +\& Module::Metadata +\& PerlIO::via\-QuotedPrint +\& Pod::Checker +\& podlators +\& Pod::Simple +\& Socket +\& Test::Harness +.Ve +.PP +See also \fIhints/os390.sh\fR for other potential gotchas. +.SS "Setup and utilities for Perl on OS/390" +.IX Subsection "Setup and utilities for Perl on OS/390" +This may also be a good time to ensure that your \fI/etc/protocol\fR file +and either your \fI/etc/resolv.conf\fR or \fI/etc/hosts\fR files are in place. +The IBM document that describes such USS system setup issues is +"z/OS UNIX System Services Planning" +.PP +For successful testing you may need to turn on the sticky bit for your +world readable /tmp directory if you have not already done so (see man chmod). +.SS "Useful files for trouble-shooting" +.IX Subsection "Useful files for trouble-shooting" +If your configuration is failing, read hints/os390.sh +This file provides z/OS specific options to direct the build process. +.PP +\fIShell\fR +.IX Subsection "Shell" +.PP +A message of the form: +.PP +.Vb 3 +\& (I see you are using the Korn shell. Some ksh\*(Aqs blow up on Configure, +\& mainly on older exotic systems. If yours does, try the Bourne shell +\& instead.) +.Ve +.PP +is nothing to worry about at all. +.PP +\fIDynamic loading\fR +.IX Subsection "Dynamic loading" +.PP +Dynamic loading is required if you want to use XS modules from CPAN (like +DBI (and DBD's), JSON::XS, and Text::CSV_XS) or update CORE modules from +CPAN with newer versions (like Encode) without rebuilding all of the perl +binary. +.PP +The instructions above will create a dynamic Perl. If you do not want to +use dynamic loading, remove the \-Dusedl option. +See the comments in hints/os390.sh for more information on dynamic loading. +.PP +\fIOptimizing\fR +.IX Subsection "Optimizing" +.PP +Optimization has not been turned on yet. There may be issues if Perl +is optimized. +.SS "Build Anomalies with Perl on OS/390" +.IX Subsection "Build Anomalies with Perl on OS/390" +"Out of memory!" messages during the build of Perl are most often fixed +by re building the GNU make utility for OS/390 from a source code kit. +.PP +Within USS your \fI/etc/profile\fR or \fR\f(CI$HOME\fR\fI/.profile\fR may limit your ulimit +settings. Check that the following command returns reasonable values: +.PP +.Vb 1 +\& ulimit \-a +.Ve +.PP +To conserve memory you should have your compiler modules loaded into the +Link Pack Area (LPA/ELPA) rather than in a link list or step lib. +.PP +If the compiler complains of syntax errors during the build of the +Socket extension then be sure to fix the syntax error in the system +header /usr/include/sys/socket.h. +.SS "Testing Anomalies with Perl on OS/390" +.IX Subsection "Testing Anomalies with Perl on OS/390" +The "make test" step runs a Perl Verification Procedure, usually before +installation. You might encounter STDERR messages even during a successful +run of "make test". Here is a guide to some of the more commonly seen +anomalies: +.PP +\fIOut of Memory (31\-bit only)\fR +.IX Subsection "Out of Memory (31-bit only)" +.PP +Out of memory problems should not be an issue, unless you are attempting to build +a 31\-bit Perl. +.PP +If you _are_ building a 31\-bit Perl, the constrained environment may mean you +need to change memory options for Perl. +In addition to the comments +above on memory limitations it is also worth checking for _CEE_RUNOPTS +in your environment. Perl now has (in miniperlmain.c) a C #pragma for 31\-bit only +to set CEE run options, but the environment variable wins. +.PP +The 31\-bit C code asks for: +.PP +.Vb 1 +\& #pragma runopts(HEAP(2M,500K,ANYWHERE,KEEP,8K,4K) STACK(,,ANY,) ALL31(ON)) +.Ve +.PP +The important parts of that are the second argument (the increment) to HEAP, +and allowing the stack to be "Above the (16M) line". If the heap +increment is too small then when perl (for example loading unicode/Name.pl) tries +to create a "big" (400K+) string it cannot fit in a single segment +and you get "Out of Memory!" \- even if there is still plenty of memory +available. +.PP +A related issue is use with perl's malloc. Perl's malloc uses \f(CWsbrk()\fR +to get memory, and \f(CWsbrk()\fR is limited to the first allocation so in this +case something like: +.PP +.Vb 1 +\& HEAP(8M,500K,ANYWHERE,KEEP,8K,4K) +.Ve +.PP +is needed to get through the test suite. +.SS "Usage Hints for Perl on z/OS" +.IX Subsection "Usage Hints for Perl on z/OS" +When using Perl on z/OS please keep in mind that the EBCDIC and ASCII +character sets are different. See perlebcdic for more on such character +set issues. Perl builtin functions that may behave differently under +EBCDIC are also mentioned in the perlport.pod document. +.PP +If you are having trouble with square brackets then consider switching your +rlogin or telnet client. Try to avoid older 3270 emulators and ISHELL for +working with Perl on USS. +.SS "Modules and Extensions for Perl on z/OS (Static Only)" +.IX Subsection "Modules and Extensions for Perl on z/OS (Static Only)" +Pure Perl (that is non XS) modules may be installed via the usual: +.PP +.Vb 4 +\& perl Makefile.PL +\& make +\& make test +\& make install +.Ve +.PP +If you built perl with dynamic loading capability then that would also +be the way to build XS based extensions. However, if you built perl with +static linking you can still build XS based extensions for z/OS +but you will need to follow the instructions in ExtUtils::MakeMaker for +building statically linked perl binaries. In the simplest configurations +building a static perl + XS extension boils down to: +.PP +.Vb 6 +\& perl Makefile.PL +\& make +\& make perl +\& make test +\& make install +\& make \-f Makefile.aperl inst_perl MAP_TARGET=perl +.Ve +.SS "Running Perl on z/OS" +.IX Subsection "Running Perl on z/OS" +To run the 64\-bit Dynamic Perl environment, update your PATH and LIBPATH +to include the location you installed Perl into, and then run the perl you +installed as perlV.R.M where V/R/M is the Version/Release/Modification level +of the current development level. +If you are running the ASCII/EBCDIC Bi-Modal Perl environment, you also need to +set up your ASCII/EBCDIC Bi-Modal environment variables, and ensure any Perl +source code you run is tagged appropriately as ASCII or EBCDIC using +"chtag \-t \-c<CCSID>": +.IP "For ASCII Only:" 4 +.IX Item "For ASCII Only:" +.Vb 5 +\& export _BPXK_AUTOCVT=ON +\& export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG),POSIX(ON)" +\& export _TAG_REDIR_ERR="txt" +\& export _TAG_REDIR_IN="txt" +\& export _TAG_REDIR_OUT="txt" +.Ve +.IP "For ASCII or EBCDIC:" 4 +.IX Item "For ASCII or EBCDIC:" +.Vb 3 +\& export PATH=/usr/local/perl/ascii:$PATH +\& export LIBPATH=/usr/local/perl/ascii/lib:$LIBPATH +\& perlV.R.M args +.Ve +.PP +If tcsh is your login shell then use the setenv command. +.SH AUTHORS +.IX Header "AUTHORS" +David Fiander and Peter Prymmer with thanks to Dennis Longnecker +and William Raffloer for valuable reports, LPAR and PTF feedback. +Thanks to Mike MacIsaac and Egon Terwedow for SG24\-5944\-00. +Thanks to Ignasi Roca for pointing out the floating point problems. +Thanks to John Goodyear for dynamic loading help. +.PP +Mike Fulton and Karl Williamson have provided updates for UTF8, DLL, 64\-bit and +ASCII/EBCDIC Bi-Modal support +.SH "OTHER SITES" +.IX Header "OTHER SITES" +<https://github.com/ZOSOpenTools/perlport/> provides documentation and tools +for building various z/OS Perl configurations and has some useful tools in the +\&'bin' directory you may want to use for building z/OS Perl yourself. +.SH HISTORY +.IX Header "HISTORY" +Updated 24 December 2021 to enable initial ASCII support +.PP +Updated 03 October 2019 for perl\-5.33.3+ +.PP +Updated 28 November 2001 for broken URLs. +.PP +Updated 12 March 2001 to mention //'SYS1.TCPPARMS(TCPDATA)'. +.PP +Updated 24 January 2001 to mention dynamic loading. +.PP +Updated 15 January 2001 for the 5.7.1 release of Perl. +.PP +Updated 12 November 2000 for the 5.7.1 release of Perl. +.PP +This document was podified for the 5.005_03 release of Perl 11 March 1999. +.PP +This document was originally written by David Fiander for the 5.005 +release of Perl. |