Commit | Line | Data |
---|---|---|
ffe25ee3 B |
1 | # vim: syntax=pod |
2 | ||
c2e66d9e | 3 | This document is written in pod format hence there are punctuation |
d1be9408 | 4 | characters in odd places. Do not worry, you've apparently got the |
c2e66d9e GS |
5 | ASCII->EBCDIC translation worked out correctly. You can read more |
6 | about pod in pod/perlpod.pod or the short summary in the INSTALL file. | |
7 | ||
8 | =head1 NAME | |
9 | ||
75b25ca1 | 10 | perlbs2000 - building and installing Perl for BS2000. |
c2e66d9e | 11 | |
2b7f2baa | 12 | B<This document needs to be updated, but we don't know what it should say. |
8166b4e0 | 13 | Please submit comments to L<https://github.com/Perl/perl5/issues>.> |
2b7f2baa | 14 | |
c2e66d9e GS |
15 | =head1 SYNOPSIS |
16 | ||
17 | This document will help you Configure, build, test and install Perl | |
18 | on BS2000 in the POSIX subsystem. | |
19 | ||
20 | =head1 DESCRIPTION | |
21 | ||
22 | This is a ported perl for the POSIX subsystem in BS2000 VERSION OSD | |
453189b6 TD |
23 | V3.1A or later. It may work on other versions, but we started porting |
24 | and testing it with 3.1A and are currently using Version V4.0A. | |
a1a0e61e TD |
25 | |
26 | You may need the following GNU programs in order to install perl: | |
27 | ||
a83b6f46 | 28 | =head2 gzip on BS2000 |
a1a0e61e TD |
29 | |
30 | We used version 1.2.4, which could be installed out of the box with | |
31 | one failure during 'make check'. | |
32 | ||
a83b6f46 | 33 | =head2 bison on BS2000 |
a1a0e61e TD |
34 | |
35 | The yacc coming with BS2000 POSIX didn't work for us. So we had to | |
36 | use bison. We had to make a few changes to perl in order to use the | |
37 | pure (reentrant) parser of bison. We used version 1.25, but we had to | |
453189b6 TD |
38 | add a few changes due to EBCDIC. See below for more details |
39 | concerning yacc. | |
a1a0e61e | 40 | |
a83b6f46 | 41 | =head2 Unpacking Perl Distribution on BS2000 |
a1a0e61e TD |
42 | |
43 | To extract an ASCII tar archive on BS2000 POSIX you need an ASCII | |
44 | filesystem (we used the mountpoint /usr/local/ascii for this). Now | |
c2e66d9e GS |
45 | you extract the archive in the ASCII filesystem without |
46 | I/O-conversion: | |
a1a0e61e TD |
47 | |
48 | cd /usr/local/ascii | |
49 | export IO_CONVERSION=NO | |
50 | gunzip < /usr/local/src/perl.tar.gz | pax -r | |
51 | ||
52 | You may ignore the error message for the first element of the archive | |
53 | (this doesn't look like a tar archive / skipping to next file...), | |
c2e66d9e | 54 | it's only the directory which will be created automatically anyway. |
a1a0e61e TD |
55 | |
56 | After extracting the archive you copy the whole directory tree to your | |
c2e66d9e | 57 | EBCDIC filesystem. B<This time you use I/O-conversion>: |
a1a0e61e TD |
58 | |
59 | cd /usr/local/src | |
60 | IO_CONVERSION=YES | |
61 | cp -r /usr/local/ascii/perl5.005_02 ./ | |
62 | ||
a83b6f46 | 63 | =head2 Compiling Perl on BS2000 |
a1a0e61e | 64 | |
453189b6 TD |
65 | There is a "hints" file for BS2000 called hints.posix-bc (because |
66 | posix-bc is the OS name given by `uname`) that specifies the correct | |
67 | values for most things. The major problem is (of course) the EBCDIC | |
68 | character set. We have german EBCDIC version. | |
a1a0e61e TD |
69 | |
70 | Because of our problems with the native yacc we used GNU bison to | |
93fb2ac3 JH |
71 | generate a pure (=reentrant) parser for perly.y. So our yacc is |
72 | really the following script: | |
a1a0e61e | 73 | |
93fb2ac3 JH |
74 | -----8<-----/usr/local/bin/yacc-----8<----- |
75 | #! /usr/bin/sh | |
a1a0e61e | 76 | |
93fb2ac3 JH |
77 | # Bison as a reentrant yacc: |
78 | ||
79 | # save parameters: | |
80 | params="" | |
81 | while [[ $# -gt 1 ]]; do | |
82 | params="$params $1" | |
83 | shift | |
84 | done | |
85 | ||
86 | # add flag %pure_parser: | |
87 | ||
88 | tmpfile=/tmp/bison.$$.y | |
89 | echo %pure_parser > $tmpfile | |
90 | cat $1 >> $tmpfile | |
91 | ||
92 | # call bison: | |
93 | ||
94 | echo "/usr/local/bin/bison --yacc $params $1\t\t\t(Pure Parser)" | |
95 | /usr/local/bin/bison --yacc $params $tmpfile | |
96 | ||
97 | # cleanup: | |
98 | ||
99 | rm -f $tmpfile | |
100 | -----8<----------8<----- | |
101 | ||
102 | We still use the normal yacc for a2p.y though!!! We made a softlink | |
103 | called byacc to distinguish between the two versions: | |
104 | ||
105 | ln -s /usr/bin/yacc /usr/local/bin/byacc | |
a1a0e61e | 106 | |
c2e66d9e GS |
107 | We build perl using GNU make. We tried the native make once and it |
108 | worked too. | |
a1a0e61e | 109 | |
a83b6f46 | 110 | =head2 Testing Perl on BS2000 |
a1a0e61e | 111 | |
c2e66d9e GS |
112 | We still got a few errors during C<make test>. Some of them are the |
113 | result of using bison. Bison prints I<parser error> instead of I<syntax | |
114 | error>, so we may ignore them. The following list shows | |
a1a0e61e TD |
115 | our errors, your results may differ: |
116 | ||
c8e8bf6a GS |
117 | op/numconvert.......FAILED tests 1409-1440 |
118 | op/regexp...........FAILED tests 483, 496 | |
119 | op/regexp_noamp.....FAILED tests 483, 496 | |
a1a0e61e | 120 | pragma/overload.....FAILED tests 152-153, 170-171 |
c8e8bf6a GS |
121 | pragma/warnings.....FAILED tests 14, 82, 129, 155, 192, 205, 207 |
122 | lib/bigfloat........FAILED tests 351-352, 355 | |
123 | lib/bigfltpm........FAILED tests 354-355, 358 | |
124 | lib/complex.........FAILED tests 267, 487 | |
125 | lib/dumper..........FAILED tests 43, 45 | |
126 | Failed 11/231 test scripts, 95.24% okay. 57/10595 subtests failed, 99.46% okay. | |
a1a0e61e | 127 | |
a83b6f46 | 128 | =head2 Installing Perl on BS2000 |
a1a0e61e TD |
129 | |
130 | We have no nroff on BS2000 POSIX (yet), so we ignored any errors while | |
131 | installing the documentation. | |
132 | ||
133 | ||
a83b6f46 | 134 | =head2 Using Perl in the Posix-Shell of BS2000 |
a1a0e61e TD |
135 | |
136 | BS2000 POSIX doesn't support the shebang notation | |
c2e66d9e | 137 | (C<#!/usr/local/bin/perl>), so you have to use the following lines |
a1a0e61e TD |
138 | instead: |
139 | ||
140 | : # use perl | |
141 | eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}' | |
188e64dd | 142 | if 0; # ^ Run only under a shell |
c2e66d9e | 143 | |
453189b6 TD |
144 | =head2 Using Perl in "native" BS2000 |
145 | ||
146 | We don't have much experience with this yet, but try the following: | |
147 | ||
148 | Copy your Perl executable to a BS2000 LLM using bs2cp: | |
149 | ||
150 | C<bs2cp /usr/local/bin/perl 'bs2:perl(perl,l)'> | |
151 | ||
152 | Now you can start it with the following (SDF) command: | |
153 | ||
154 | C</START-PROG FROM-FILE=*MODULE(PERL,PERL),PROG-MODE=*ANY,RUN-MODE=*ADV> | |
155 | ||
156 | First you get the BS2000 commandline prompt ('*'). Here you may enter | |
157 | your parameters, e.g. C<-e 'print "Hello World!\\n";'> (note the | |
158 | double backslash!) or C<-w> and the name of your Perl script. | |
d1be9408 | 159 | Filenames starting with C</> are searched in the Posix filesystem, |
453189b6 TD |
160 | others are searched in the BS2000 filesystem. You may even use |
161 | wildcards if you put a C<%> in front of your filename (e.g. C<-w | |
162 | checkfiles.pl %*.c>). Read your C/C++ manual for additional | |
163 | possibilities of the commandline prompt (look for | |
164 | PARAMETER-PROMPTING). | |
165 | ||
a83b6f46 | 166 | =head2 Floating point anomalies on BS2000 |
35a77668 PP |
167 | |
168 | There appears to be a bug in the floating point implementation on BS2000 POSIX | |
169 | systems such that calling int() on the product of a number and a small | |
170 | magnitude number is not the same as calling int() on the quotient of | |
171 | that number and a large magnitude number. For example, in the following | |
172 | Perl code: | |
173 | ||
174 | my $x = 100000.0; | |
175 | my $y = int($x * 1e-5) * 1e5; # '0' | |
176 | my $z = int($x / 1e+5) * 1e5; # '100000' | |
177 | print "\$y is $y and \$z is $z\n"; # $y is 0 and $z is 100000 | |
178 | ||
179 | Although one would expect the quantities $y and $z to be the same and equal | |
180 | to 100000 they will differ and instead will be 0 and 100000 respectively. | |
181 | ||
756189a5 JH |
182 | =head2 Using PerlIO and different encodings on ASCII and EBCDIC partitions |
183 | ||
184 | Since version 5.8 Perl uses the new PerlIO on BS2000. This enables | |
185 | you using different encodings per IO channel. For example you may use | |
186 | ||
187 | use Encode; | |
188 | open($f, ">:encoding(ascii)", "test.ascii"); | |
189 | print $f "Hello World!\n"; | |
190 | open($f, ">:encoding(posix-bc)", "test.ebcdic"); | |
191 | print $f "Hello World!\n"; | |
192 | open($f, ">:encoding(latin1)", "test.latin1"); | |
193 | print $f "Hello World!\n"; | |
194 | open($f, ">:encoding(utf8)", "test.utf8"); | |
195 | print $f "Hello World!\n"; | |
196 | ||
197 | to get two files containing "Hello World!\n" in ASCII, EBCDIC, ISO | |
198 | Latin-1 (in this example identical to ASCII) respective UTF-EBCDIC (in | |
199 | this example identical to normal EBCDIC). See the documentation of | |
200 | Encode::PerlIO for details. | |
201 | ||
202 | As the PerlIO layer uses raw IO internally, all this totally ignores | |
203 | the type of your filesystem (ASCII or EBCDIC) and the IO_CONVERSION | |
204 | environment variable. If you want to get the old behavior, that the | |
205 | BS2000 IO functions determine conversion depending on the filesystem | |
206 | PerlIO still is your friend. You use IO_CONVERSION as usual and tell | |
207 | Perl, that it should use the native IO layer: | |
208 | ||
209 | export IO_CONVERSION=YES | |
210 | export PERLIO=stdio | |
211 | ||
212 | Now your IO would be ASCII on ASCII partitions and EBCDIC on EBCDIC | |
213 | partitions. See the documentation of PerlIO (without C<Encode::>!) | |
f858446f | 214 | for further possibilities. |
756189a5 | 215 | |
c2e66d9e GS |
216 | =head1 AUTHORS |
217 | ||
218 | Thomas Dorner | |
219 | ||
220 | =head1 SEE ALSO | |
221 | ||
222 | L<INSTALL>, L<perlport>. | |
223 | ||
224 | =head2 Mailing list | |
225 | ||
043fec90 | 226 | If you are interested in the z/OS (formerly known as OS/390) |
3f66d419 JH |
227 | and POSIX-BC (BS2000) ports of Perl then see the perl-mvs mailing list. |
228 | To subscribe, send an empty message to perl-mvs-subscribe@perl.org. | |
c2e66d9e | 229 | |
3f66d419 | 230 | See also: |
c2e66d9e | 231 | |
fdee78a1 | 232 | https://lists.perl.org/list/perl-mvs.html |
3f66d419 JH |
233 | |
234 | There are web archives of the mailing list at: | |
235 | ||
cba88c42 | 236 | https://www.nntp.perl.org/group/perl.mvs/ |
c2e66d9e GS |
237 | |
238 | =head1 HISTORY | |
239 | ||
240 | This document was originally written by Thomas Dorner for the 5.005 | |
241 | release of Perl. | |
242 | ||
243 | This document was podified for the 5.6 release of perl 11 July 2000. | |
244 | ||
245 | =cut |