You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
6.3 KiB
202 lines
6.3 KiB
This document is written in pod format hence there are punctuation
|
|
characters in in odd places. Do not worry, you've apparently got the
|
|
ASCII->EBCDIC translation worked out correctly. You can read more
|
|
about pod in pod/perlpod.pod or the short summary in the INSTALL file.
|
|
|
|
=head1 NAME
|
|
|
|
README.BS2000 - building and installing Perl for BS2000.
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
This document will help you Configure, build, test and install Perl
|
|
on BS2000 in the POSIX subsystem.
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
This is a ported perl for the POSIX subsystem in BS2000 VERSION OSD
|
|
V3.1A or later. It may work on other versions, but we started porting
|
|
and testing it with 3.1A and are currently using Version V4.0A.
|
|
|
|
You may need the following GNU programs in order to install perl:
|
|
|
|
=head2 gzip
|
|
|
|
We used version 1.2.4, which could be installed out of the box with
|
|
one failure during 'make check'.
|
|
|
|
=head2 bison
|
|
|
|
The yacc coming with BS2000 POSIX didn't work for us. So we had to
|
|
use bison. We had to make a few changes to perl in order to use the
|
|
pure (reentrant) parser of bison. We used version 1.25, but we had to
|
|
add a few changes due to EBCDIC. See below for more details
|
|
concerning yacc.
|
|
|
|
=head2 Unpacking
|
|
|
|
To extract an ASCII tar archive on BS2000 POSIX you need an ASCII
|
|
filesystem (we used the mountpoint /usr/local/ascii for this). Now
|
|
you extract the archive in the ASCII filesystem without
|
|
I/O-conversion:
|
|
|
|
cd /usr/local/ascii
|
|
export IO_CONVERSION=NO
|
|
gunzip < /usr/local/src/perl.tar.gz | pax -r
|
|
|
|
You may ignore the error message for the first element of the archive
|
|
(this doesn't look like a tar archive / skipping to next file...),
|
|
it's only the directory which will be created automatically anyway.
|
|
|
|
After extracting the archive you copy the whole directory tree to your
|
|
EBCDIC filesystem. B<This time you use I/O-conversion>:
|
|
|
|
cd /usr/local/src
|
|
IO_CONVERSION=YES
|
|
cp -r /usr/local/ascii/perl5.005_02 ./
|
|
|
|
=head2 Compiling
|
|
|
|
There is a "hints" file for BS2000 called hints.posix-bc (because
|
|
posix-bc is the OS name given by `uname`) that specifies the correct
|
|
values for most things. The major problem is (of course) the EBCDIC
|
|
character set. We have german EBCDIC version.
|
|
|
|
Because of our problems with the native yacc we used GNU bison to
|
|
generate a pure (=reentrant) parser for perly.y. So our yacc is
|
|
really the following script:
|
|
|
|
-----8<-----/usr/local/bin/yacc-----8<-----
|
|
#! /usr/bin/sh
|
|
|
|
# Bison as a reentrant yacc:
|
|
|
|
# save parameters:
|
|
params=""
|
|
while [[ $# -gt 1 ]]; do
|
|
params="$params $1"
|
|
shift
|
|
done
|
|
|
|
# add flag %pure_parser:
|
|
|
|
tmpfile=/tmp/bison.$$.y
|
|
echo %pure_parser > $tmpfile
|
|
cat $1 >> $tmpfile
|
|
|
|
# call bison:
|
|
|
|
echo "/usr/local/bin/bison --yacc $params $1\t\t\t(Pure Parser)"
|
|
/usr/local/bin/bison --yacc $params $tmpfile
|
|
|
|
# cleanup:
|
|
|
|
rm -f $tmpfile
|
|
-----8<----------8<-----
|
|
|
|
We still use the normal yacc for a2p.y though!!! We made a softlink
|
|
called byacc to distinguish between the two versions:
|
|
|
|
ln -s /usr/bin/yacc /usr/local/bin/byacc
|
|
|
|
We build perl using GNU make. We tried the native make once and it
|
|
worked too.
|
|
|
|
=head2 Testing
|
|
|
|
We still got a few errors during C<make test>. Some of them are the
|
|
result of using bison. Bison prints I<parser error> instead of I<syntax
|
|
error>, so we may ignore them. The following list shows
|
|
our errors, your results may differ:
|
|
|
|
op/numconvert.......FAILED tests 1409-1440
|
|
op/regexp...........FAILED tests 483, 496
|
|
op/regexp_noamp.....FAILED tests 483, 496
|
|
pragma/overload.....FAILED tests 152-153, 170-171
|
|
pragma/warnings.....FAILED tests 14, 82, 129, 155, 192, 205, 207
|
|
lib/bigfloat........FAILED tests 351-352, 355
|
|
lib/bigfltpm........FAILED tests 354-355, 358
|
|
lib/complex.........FAILED tests 267, 487
|
|
lib/dumper..........FAILED tests 43, 45
|
|
Failed 11/231 test scripts, 95.24% okay. 57/10595 subtests failed, 99.46% okay.
|
|
|
|
=head2 Install
|
|
|
|
We have no nroff on BS2000 POSIX (yet), so we ignored any errors while
|
|
installing the documentation.
|
|
|
|
|
|
=head2 Using Perl in the Posix-Shell
|
|
|
|
BS2000 POSIX doesn't support the shebang notation
|
|
(C<#!/usr/local/bin/perl>), so you have to use the following lines
|
|
instead:
|
|
|
|
: # use perl
|
|
eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
|
|
if $running_under_some_shell;
|
|
|
|
=head2 Using Perl in "native" BS2000
|
|
|
|
We don't have much experience with this yet, but try the following:
|
|
|
|
Copy your Perl executable to a BS2000 LLM using bs2cp:
|
|
|
|
C<bs2cp /usr/local/bin/perl 'bs2:perl(perl,l)'>
|
|
|
|
Now you can start it with the following (SDF) command:
|
|
|
|
C</START-PROG FROM-FILE=*MODULE(PERL,PERL),PROG-MODE=*ANY,RUN-MODE=*ADV>
|
|
|
|
First you get the BS2000 commandline prompt ('*'). Here you may enter
|
|
your parameters, e.g. C<-e 'print "Hello World!\\n";'> (note the
|
|
double backslash!) or C<-w> and the name of your Perl script.
|
|
Filenames starting with C</> are searched in in the Posix filesystem,
|
|
others are searched in the BS2000 filesystem. You may even use
|
|
wildcards if you put a C<%> in front of your filename (e.g. C<-w
|
|
checkfiles.pl %*.c>). Read your C/C++ manual for additional
|
|
possibilities of the commandline prompt (look for
|
|
PARAMETER-PROMPTING).
|
|
|
|
=head2 Floating point anomalies
|
|
|
|
There appears to be a bug in the floating point implementation on BS2000 POSIX
|
|
systems such that calling int() on the product of a number and a small
|
|
magnitude number is not the same as calling int() on the quotient of
|
|
that number and a large magnitude number. For example, in the following
|
|
Perl code:
|
|
|
|
my $x = 100000.0;
|
|
my $y = int($x * 1e-5) * 1e5; # '0'
|
|
my $z = int($x / 1e+5) * 1e5; # '100000'
|
|
print "\$y is $y and \$z is $z\n"; # $y is 0 and $z is 100000
|
|
|
|
Although one would expect the quantities $y and $z to be the same and equal
|
|
to 100000 they will differ and instead will be 0 and 100000 respectively.
|
|
|
|
=head1 AUTHORS
|
|
|
|
Thomas Dorner
|
|
|
|
=head1 SEE ALSO
|
|
|
|
L<INSTALL>, L<perlport>.
|
|
|
|
=head2 Mailing list
|
|
|
|
The Perl Institute (http://www.perl.org/) maintains a perl-mvs mailing
|
|
list of interest to all folks building and/or using perl on EBCDIC
|
|
platforms. To subscribe, send a message of:
|
|
|
|
subscribe perl-mvs
|
|
|
|
to [email protected].
|
|
|
|
=head1 HISTORY
|
|
|
|
This document was originally written by Thomas Dorner for the 5.005
|
|
release of Perl.
|
|
|
|
This document was podified for the 5.6 release of perl 11 July 2000.
|
|
|
|
=cut
|