From: Thomas Dorner Date: Tue, 29 Sep 1998 13:29:36 +0000 (+0100) Subject: POSIX BC2000 port from perl-mvs: X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=a1a0e61e30ae0c76c1d9cbf46512c19c0a966791;p=p5sagit%2Fp5-mst-13.2.git POSIX BC2000 port from perl-mvs: Subject: Ported perl 5.005.02 to BS2000 / POSIX Message-ID: <9CE47B416A24D2118BC40000F84009B20B72C5@start.de> p4raw-id: //depot/cfgperl@2009 --- diff --git a/Configure b/Configure index 4023bd3..eb68a06 100755 --- a/Configure +++ b/Configure @@ -2114,6 +2114,9 @@ EOM bsd386) osname=bsd386 osvers=`$uname -r` ;; + POSIX-BC | posix-bc ) osname=posix-bc + osvers="$3" + ;; powerux | power_ux | powermax_os | powermaxos | \ powerunix | power_unix) osname=powerux osvers="$3" diff --git a/README.posix-bc b/README.posix-bc new file mode 100644 index 0000000..e02510c --- /dev/null +++ b/README.posix-bc @@ -0,0 +1,108 @@ +This is a first ported perl for the POSIX subsystem in BS2000 VERSION +'V121', OSD V3.1, POSIX Shell V03.1A55. It may work on other +versions, but that's the one we've tested it on. + +You may need the following GNU programs in order to install perl: + +gzip: + +We used version 1.2.4, which could be installed out of the box with +one failure during 'make check'. + +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. + + +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 made anyway. + +After extracting the archive you copy the whole directory tree to your +EBCDIC filesystem. This time you use I/O-conversion: + +cd /usr/local/src +IO_CONVERSION=YES +cp -r /usr/local/ascii/perl5.005_02 ./ + + +COMPILING: +========== + +There is a "hints" file for posix-bc that specifies the correct values +for most things. The major problem is (of course) the EBCDIC character +set. + +Configure did everything except the perl parser. + +Because of our problems with the native yacc we used GNU bison to +generate a pure (=reentrant) parser for perly.y: + +echo %pure_parser > /tmp/perly.y +cat perly.y >> /tmp/perly.y +/usr/local/bin/bison --yacc -d perly.y +cp y.tab.c perly.c +cp y.tab.h perly.h + +We build perl using GNU make, but it should compile with the native +make too. + + +TESTING: +======== + +We still got a few errors during 'make test'. Most of them are the +result of using bison. Bison prints 'parser error' instead of 'syntax +error', so we may ignore them. One error in the test op/regexp (and +op/regexp_noamp) seems a bit critical, the result was an 'Out of +memory' (core dump with op/regexp_noamp). The following list shows +our errors, your results may differ: + +comp/require........FAILED test 3 +op/misc.............FAILED tests 45-46 +op/pack.............FAILED tests 58-60 +op/regexp...........FAILED tests 402-485 (Out of memory!) +op/regexp_noamp.....FAILED tests 402-485 (core dump) +op/taint............FAILED test 73 +pragma/overload.....FAILED tests 152-153, 170-171 +pragma/subs.........FAILED tests 1-2 +lib/cgi-html........dubious, FAILED tests 1-17 (ALL) +lib/complex.........FAILED tests 264, 484 +lib/dumper..........FAILED tests MANY +lib/errno...........dubious (Errno.pm not found?) +lib/searchdict......FAILED tests 1-2 +Failed 13/186 test scripts, 93.01% okay. 224/6242 subtests failed, 96.41% +okay. + + +INSTALLING: +=========== + +We have no nroff on BS2000 POSIX (yet), so we ignored any errors while +installing the documentation. + + +USING PERL: +=========== + +BS2000 POSIX doesn't support the shebang notation +('#!/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; diff --git a/hints/posix-bc.sh b/hints/posix-bc.sh new file mode 100644 index 0000000..9c1ead5 --- /dev/null +++ b/hints/posix-bc.sh @@ -0,0 +1,33 @@ +#! /usr/bin/bash -norc +# hints/posix-bc.sh +# +# BS2000 (Posix Subsystem) hints by Thomas Dorner +# +# thanks to the authors of the os390.sh +# + +# To get ANSI C, we need to use c89, and ld doesn't exist +cc='c89' +ld='c89' + +# C-Flags: +ccflags='-DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE_EXTENDED' + +# Turning on optimization breaks perl (CORE-DUMP): +optimize='none' + +# we don''t use dynamic memorys (yet): +so='none' +usedl='no' +dlext='none' + +# On BS2000/Posix, libc.a doesn't really hold anything at all, +# so running nm on it is pretty useless. +usenm='no' + +# other Options: + +usemymalloc='no' + +archobjs=ebcdic.o + diff --git a/perl.c b/perl.c index 33a1667..a7804f1 100644 --- a/perl.c +++ b/perl.c @@ -1752,6 +1752,9 @@ moreswitches(char *s) #ifdef __OPEN_VM printf("VM/ESA port by Neale Ferguson, 1998\n"); #endif +#ifdef POSIX_BC + printf("BS2000 (POSIX) port by Start Amadeus GmbH, 1998\n"); +#endif #ifdef BINARY_BUILD_NOTICE BINARY_BUILD_NOTICE; #endif diff --git a/perly.y b/perly.y index 2c246fc..78378b6 100644 --- a/perly.y +++ b/perly.y @@ -27,7 +27,8 @@ dep(void) %start prog %{ -#if !defined(OEMVS) && !defined(__OPEN_VM) +/* I sense a Big Blue pattern here... */ +#if !defined(OEMVS) && !defined(__OPEN_VM) && !defined(POSIX_BC) %} %union { @@ -38,7 +39,11 @@ dep(void) } %{ -#endif /* !OEMVS && !__OPEN_VM*/ +#endif /* !OEMVS && !__OPEN_VM && !POSIX_BC */ + +#ifdef USE_PURE_BISON +#define YYLEX_PARAM (&yychar) +#endif %} %token '{' ')' diff --git a/proto.h b/proto.h index fe21217..ba00b3a 100644 --- a/proto.h +++ b/proto.h @@ -670,7 +670,11 @@ VIRTUAL void warner _((U32 err, const char* pat,...)); VIRTUAL void watch _((char** addr)); VIRTUAL I32 whichsig _((char* sig)); VIRTUAL int yyerror _((char* s)); +#ifdef USE_PURE_BISON +VIRTUAL int yylex _((YYSTYPE* lvalp, int* lcharp)); +#else VIRTUAL int yylex _((void)); +#endif VIRTUAL int yyparse _((void)); VIRTUAL int yywarn _((char* s)); diff --git a/t/lib/cgi-html.t b/t/lib/cgi-html.t index 9d11946..8c38dd6 100755 --- a/t/lib/cgi-html.t +++ b/t/lib/cgi-html.t @@ -6,11 +6,13 @@ BEGIN { chdir 't' if -d 't'; @INC = '../lib' if -d '../lib'; + require Config; import Config; } BEGIN {$| = 1; print "1..17\n"; } -BEGIN {$eol = $^O eq 'VMS' ? "\n" : "\cM\cJ"; - $eol = "\r\n" if $^O eq 'os390' or $^O eq 'vmesa'; } +BEGIN {$eol = "\n" if $^O eq 'VMS'; + $eol = "\r\n" if $Config{ebcdic} eq 'define'; + $eol = "\cM\cJ" unless defined $eol; } END {print "not ok 1\n" unless $loaded;} use CGI (':standard','-no_debug'); $loaded = 1; diff --git a/t/op/magic.t b/t/op/magic.t index 686424f..056ded4 100755 --- a/t/op/magic.t +++ b/t/op/magic.t @@ -135,7 +135,7 @@ __END__ :endofperl EOT } - if ($^O eq 'os390' or $^O eq 'vmesa') { # no shebang + if ($^O eq 'os390' or $^O eq 'posix-bc' or $^O eq 'vmesa') { # no shebang $headmaybe = <') PL_lex_state = LEX_INTERPENDMAYBE; @@ -2497,7 +2520,7 @@ yylex(void) if (PL_lex_brackets < PL_lex_fakebrack) { PL_bufptr = s; PL_lex_fakebrack = 0; - return yylex(); /* ignore fake brackets */ + return yylex(YYLEXPARAM); /* ignore fake brackets */ } force_next('}'); TOKEN(';'); diff --git a/unixish.h b/unixish.h index 2f81294..2a6cbcd 100644 --- a/unixish.h +++ b/unixish.h @@ -114,12 +114,16 @@ #define Fflush(fp) fflush(fp) #define Mkdir(path,mode) mkdir((path),(mode)) +/* these should be set in a hint file, not here */ #ifndef PERL_SYS_INIT #ifdef PERL_SCO5 -/* this should be set in a hint file, not here */ # define PERL_SYS_INIT(c,v) fpsetmask(0); MALLOC_INIT #else -# define PERL_SYS_INIT(c,v) MALLOC_INIT +# ifdef POSIX_BC +# define PERL_SYS_INIT(c,v) sigignore(SIGFPE); MALLOC_INIT +# else +# define PERL_SYS_INIT(c,v) MALLOC_INIT +# endif #endif #endif