| If you read this file _as_is_, just ignore the funny characters you |
| see. It is written in the POD format (see perlpod manpage) which is |
| specially designed to be readable as is. |
| |
| =head1 NAME |
| |
| perlmpeix - Perl/iX for HP e3000 MPE |
| |
| =head1 SYNOPSIS |
| |
| http://www.bixby.org/mark/perlix.html |
| Perl language for MPE |
| Last updated January 12, 2006 @ 2100 UTC |
| |
| |
| =head1 NOTE |
| |
| This is a podified version of what used to be on the above-mentioned web page, |
| podified by Jarkko Hietaniemi 2001-Jan-01. |
| |
| =head1 What's New in Perl for MPE/iX |
| |
| January 12, 2006 |
| |
| =over 4 |
| |
| =item * |
| |
| Updated for perl-5.8.8 and perl-5.9.3 by Ken Hirsch. |
| |
| Simplified the build process by using the MPEAUTOCONF |
| functionality in Mark Klein's ld. |
| |
| If you build this from scratch, make sure you have a version |
| of ld which supports it. In the shell, type |
| |
| ld --help |
| and look for AUTOCONF or MPEAUTOCONF near the bottom |
| |
| or do this: |
| ld --help 2>&1 | grep AUTOCONF |
| |
| If you see don't see AUTOCONF or MPEAUTOCONF, make sure you get a new |
| version. |
| |
| You also do not have to use mpeix/relink after building, so the |
| recommend sequence is: |
| |
| ./Configure -de |
| |
| # or ./Configure -de -Dusedevel |
| # if you're building a development version |
| |
| make |
| make test |
| # if you run this in a job, do "make test_notty" |
| |
| make install |
| |
| Be prepared for a wait. These take much longer on MPE/iX than on a Unix |
| system, because of a slow forking, mostly. On a lightly-loaded HP3000 |
| Series 979 running MPE/iX 7.5: |
| |
| Configure: 1 hour |
| make: 1 hour 15 minutes |
| make test 1 hour 45 minutes |
| |
| Various socket problems were fixed in mpeix.c. |
| |
| Mark Klein provided a fixed sigsetjmp (that works with dynamic |
| libraries) in mpeix_setjmp.c |
| |
| =back |
| |
| June 1, 2000 |
| |
| =over 4 |
| |
| =item * |
| |
| Rebuilt to be compatible with mod_perl. If you plan on using |
| mod_perl, you MUST download and install this version of Perl/iX! |
| |
| =item * |
| |
| uselargefiles="undef": not available in MPE for POSIX files yet. |
| |
| =item * |
| |
| Now bundled with various add-on packages: |
| |
| =over 8 |
| |
| =item * |
| |
| libnet (as seen on CPAN) |
| |
| =item * |
| |
| libwww-perl (LWP) which lets Perl programs behave like web browsers: |
| |
| =item * |
| |
| mod_perl (just the perl portion; the actual DSO will be released |
| soon with Apache/iX 1.3.12 from bixby.org). This module allows you to |
| write high performance persistent Perl CGI scripts and all sorts of |
| cool things. (L<http://perl.apache.org/>) |
| |
| and much much more hiding under /PERL/PUB/.cpan/ |
| |
| =item * |
| |
| The CPAN module now works for automatic downloading and |
| installing of add-on packages: |
| |
| 1. export FTP_PASSIVE=1 |
| 2. perl -MCPAN -e shell |
| 3. Ignore any terminal I/O related complaints! |
| |
| (L<http://search.cpan.org/dist/CPAN/>) |
| |
| =back |
| |
| =back |
| |
| May 20, 2000 |
| |
| =over 4 |
| |
| =item * |
| |
| Updated to version 5.6.0. Builds straight out of the box on MPE/iX. |
| |
| =item * |
| |
| Perl's getpwnam() function which had regressed to being |
| unimplemented on MPE is now implemented once again. |
| |
| =back |
| |
| September 17, 1999 |
| |
| =over 4 |
| |
| =item * |
| |
| Migrated from cccd.edu to bixby.org. |
| |
| =back |
| |
| =head1 Welcome to Perl/iX |
| |
| This is the official home page for the HP e3000 MPE/iX |
| ( L<http://www.hp.com/go/e3000> ) port of the Perl scripting |
| language ( L<http://www.perl.com/> ) which gives you all of the power of C, |
| awk, sed, and sh in a single language. Check here for the latest news, |
| implemented functionality, known bugs, to-do list, etc. Status reports |
| about major milestones will also be posted to the HP3000-L mailing list |
| ( L<http://www.lsoft.com/scripts/wl.exe?SL1=HP3000-L&H=RAVEN.UTC.EDU> ) and |
| its associated gatewayed newsgroup comp.sys.hp.mpe. |
| |
| I'm doing this port because I can't live without Perl on the Unix |
| machines that I administer, and I want to have the same power |
| available to me on MPE. |
| |
| Please send your comments, questions, and bug reports directly to me, |
| Mark Bixby ( L<http://www.bixby.org/mark/> ). Or just post them to HP3000-L. |
| |
| The platform I'm using to do this port is an HP 3000 957RX running |
| MPE/iX 6.0 and using the GNU gcc C compiler |
| ( L<http://jazz.external.hp.com/src/gnu/gnuframe.html> ). |
| |
| The combined porting wisdom from all of my ports can be found in my |
| MPE/iX Porting Guide (L<http://www.bixby.org/mark/porting.html>). |
| |
| IMPORTANT NOTICE: Yes, I do work for the HP CSY R&D lab, but ALL of |
| the software you download from bixby.org is my personal freeware that |
| is NOT supported by HP. |
| |
| =head1 System Requirements for Perl/iX |
| |
| =over 4 |
| |
| =item * |
| |
| MPE/iX 5.5 or later. This version of Perl/iX does NOT run on |
| MPE/iX 5.0 or earlier, nor does it run on "classic" MPE/V machines. |
| |
| =item * |
| |
| If you wish to recompile Perl, you must install both GNUCORE and |
| GNUGCC from jazz (L<http://jazz.external.hp.com/src/gnu/gnuframe.html>). |
| |
| =item * |
| |
| Perl/iX will be happier on MPE/iX 5.5 if you install the MPEKX40B |
| extended POSIX filename characters patch, but this is optional. |
| |
| =item * |
| |
| Patch LBCJXT6A is required on MPE/iX 5.5 machines in order to |
| prevent Perl/iX from dying with an unresolved external reference |
| to _getenv_libc. |
| |
| =item * |
| |
| If you will be compiling Perl/iX yourself, you will also need |
| Syslog/iX ( L<http://www.bixby.org/mark/syslogix.html> ) and the |
| /BIND/PUB/include and /BIND/PUB/lib portions of BIND/iX |
| ( L<http://www.bixby.org/mark/bindix.html> ). |
| |
| =back |
| |
| =head1 How to Obtain Perl/iX |
| |
| =over 4 |
| |
| =item 1. |
| |
| Download Perl using either FTP.ARPA.SYS or some other client |
| |
| =item 2. |
| |
| Extract the installation script |
| |
| =item 3. |
| |
| Edit the installation script |
| |
| =item 4. |
| |
| Run the installation script |
| |
| =item 5. |
| |
| Convert your *.a system archive libraries to *.sl shared libraries |
| |
| =back |
| |
| Download Perl using FTP.ARPA.SYS from your HP 3000 (the preferred |
| method)..... |
| |
| :HELLO MANAGER.SYS |
| :XEQ FTP.ARPA.SYS |
| open ftp.bixby.org |
| anonymous |
| your@email.address |
| bytestream |
| cd /pub/mpe |
| get perl-5.6.0-mpe.tar.Z /tmp/perl.tar.Z;disc=2147483647 |
| exit |
| |
| .....Or download using some other generic web or ftp client (the alternate |
| method) |
| |
| Download the following files (make sure that you use "binary mode" or |
| whatever client feature that is 8-bit clean): |
| |
| =over 4 |
| |
| =item * |
| |
| Perl from |
| |
| http://www.bixby.org/ftp/pub/mpe/perl-5.6.0-mpe.tar.Z |
| |
| or |
| |
| ftp://ftp.bixby.org/pub/mpe/perl-5.6.0-mpe.tar.Z |
| |
| =item * |
| |
| Upload those files to your HP 3000 in an 8-bit clean bytestream manner to: |
| |
| /tmp/perl.tar.Z |
| |
| =item * |
| |
| Then extract the installation script (after both download methods) |
| |
| :CHDIR /tmp |
| :XEQ TAR.HPBIN.SYS 'xvfopz /tmp/perl.tar.Z INSTALL' |
| |
| =item * |
| |
| Edit the installation script |
| |
| Examine the accounting structure creation commands and modify if |
| necessary (adding additional capabilities, choosing a non-system |
| volume set, etc). |
| |
| :XEQ VI.HPBIN.SYS /tmp/INSTALL |
| |
| =item * |
| |
| Run the installation script. |
| |
| The accounting structure will be created and then all files will be |
| extracted from the archive. |
| |
| :XEQ SH.HPBIN.SYS /tmp/INSTALL |
| |
| =item * |
| |
| Convert your *.a system archive libraries to *.sl shared libraries |
| |
| You only have to do this ONCE on your MPE/iX 5.5 machine in order to |
| convert /lib/lib*.a and /usr/lib/lib*.a libraries to their *.sl |
| equivalents. This step should not be necessary on MPE/iX 6.0 or later |
| machines because the 6.0 or later update process does it for you. |
| |
| :XEQ SH.HPBIN.SYS /PERL/PUB/LIBSHP3K |
| |
| =back |
| |
| =head1 Perl/iX Distribution Contents Highlights |
| |
| =over 4 |
| |
| =item README |
| |
| The file you're reading now. |
| |
| =item INSTALL |
| |
| Perl/iX Installation script. |
| |
| =item LIBSHP3K |
| |
| Script to convert *.a system archive libraries to *.sl shared libraries. |
| |
| =item PERL |
| |
| Perl NMPRG executable. A version-numbered backup copy also |
| exists. You might wish to "ln -s /PERL/PUB/PERL /usr/local/bin/perl". |
| |
| =item .cpan/ |
| |
| Much add-on source code downloaded with the CPAN module. |
| |
| =item lib/ |
| |
| Perl libraries, both core and add-on. |
| |
| =item man/ |
| |
| Perl man page documentation. |
| |
| =item public_html/feedback.cgi |
| |
| Sample feedback CGI form written in Perl. |
| |
| =item src/perl-5.6.0-mpe |
| |
| Source code. |
| |
| =back |
| |
| =head1 How to Compile Perl/iX |
| |
| =over 4 |
| |
| =item 1. |
| |
| cd src/perl-5.6.0-mpe |
| |
| =item 2. |
| |
| Read the INSTALL file for the official instructions |
| |
| =item 3. |
| |
| ./Configure -d |
| |
| =item 4. |
| |
| make |
| |
| =item 5. |
| |
| ./mpeix/relink |
| |
| =item 6. |
| |
| make test (expect approximately 15 out of 11306 subtests to fail, |
| mostly due to MPE not supporting hard links, UDP socket problems, |
| and handling exit() return codes improperly) |
| |
| =item 7. |
| |
| make install |
| |
| =item 8. |
| |
| Optionally create symbolic links that point to the Perl |
| executable, i.e. ln -s /PERL/PUB/PERL /usr/local/bin/perl |
| |
| =back |
| |
| The summary test results from "cd t; ./perl -I../lib harness": |
| |
| Failed Test Status Wstat Total Fail Failed List of failed |
| --------------------------------------------------------------------------- |
| io/fs.t 29 8 27.59% 2-5, 7-9, 11 |
| io/openpid.t 10 1 10.00% 7 |
| lib/io_sock.t 14 1 7.14% 13 |
| lib/io_udp.t 7 2 28.57% 3, 5 |
| lib/posix.t 27 1 3.70% 12 |
| op/lex_assign.t 187 1 0.53% 13 |
| op/stat.t 58 1 1.72% 3 |
| 15 tests and 94 subtests skipped. |
| Failed 7/236 test scripts, 97.03% okay. 15/11306 subtests failed, 99.87% okay. |
| |
| =head1 Getting Started with Perl/iX |
| |
| Create your Perl script files with "#!/PERL/PUB/perl" (or an |
| equivalent symbolic link) as the first line. Use the chmod command to |
| make sure that your script has execute permission. Run your script! |
| |
| Be sure to take a look at the CPAN module list |
| ( L<http://www.cpan.org/CPAN.html> ). A wide variety of free Perl software |
| is available. You can automatically download these packages by using |
| the CPAN module ( L<http://search.cpan.org/dist/CPAN/> ). |
| |
| =head1 MPE/iX Implementation Considerations |
| |
| There some minor functionality issues to be aware of when comparing |
| Perl for Unix (Perl/UX) to Perl/iX: |
| |
| =over 4 |
| |
| =item * |
| |
| MPE gcc/ld doesn't properly support linking NMPRG executables against |
| NMXL dynamic libraries, so you must manually run mpeix/relink after |
| each re-build of Perl. |
| |
| =item * |
| |
| Perl/iX File::Copy will use MPE's /bin/cp command to copy files by |
| name in order to preserve file attributes like file code. |
| |
| =item * |
| |
| MPE (and thus Perl/iX) lacks support for setgrent(), endgrent(), |
| setpwent(), endpwent(). |
| |
| =item * |
| |
| MPE (and thus Perl/iX) lacks support for hard links. |
| |
| =item * |
| |
| MPE requires GETPRIVMODE() in order to bind() to ports less than 1024. |
| Perl/iX will call GETPRIVMODE() automatically on your behalf if you |
| attempt to bind() to these low-numbered ports. Note that the Perl/iX |
| executable and the PERL account do not normally have CAP=PM, so if you |
| will be bind()-ing to these privileged ports, you will manually need |
| to add PM capability as appropriate. |
| |
| =item * |
| |
| MPE requires that you bind() to an IP address of zero. Perl/iX |
| automatically replaces the IP address that you pass to bind() with |
| a zero. |
| |
| =item * |
| |
| MPE requires GETPRIVMODE() in order to setuid(). There are too many |
| calls to setuid() within Perl/iX, so I have not attempted an automatic |
| GETPRIVMODE() solution similar to bind(). |
| |
| =back |
| |
| =head1 Known Perl/iX Bugs Under Investigation |
| |
| None. |
| |
| =head1 Perl/iX To-Do List |
| |
| =over 4 |
| |
| =item * |
| |
| Make setuid()/setgid() support work. |
| |
| =item * |
| |
| Make sure that fcntl() against a socket descriptor is redirected to sfcntl(). |
| |
| =item * |
| |
| Add support for Berkeley DB once I've finished porting Berkeley DB. |
| |
| =item * |
| |
| Write an MPE XS extension library containing miscellaneous important |
| MPE functions like GETPRIVMODE(), GETUSERMODE(), and sfcntl(). |
| |
| =back |
| |
| =head1 Perl/iX Change History |
| |
| May 6, 1999 |
| |
| =over 4 |
| |
| =item * |
| |
| Patch LBCJXT6A is required on MPE/iX 5.5 machines in order to prevent |
| Perl/iX from dying with an unresolved external reference to _getenv_libc. |
| |
| =back |
| |
| April 7, 1999 |
| |
| =over 4 |
| |
| =item * |
| |
| Updated to version 5.005_03. |
| |
| =item * |
| |
| The official source distribution once again compiles "straight out |
| of the box" for MPE. |
| |
| =item * |
| |
| The current incarnation of the 5.5 POSIX filename extended |
| characters patch is now MPEKX40B. |
| |
| =item * |
| |
| The LIBSHP3K *.a -> *.sl library conversion script is now included |
| as /PERL/PUB/LIBSHP3K. |
| |
| =back |
| |
| November 20, 1998 |
| |
| =over 4 |
| |
| =item * |
| |
| Updated to version 5.005_02. |
| |
| =item * |
| |
| Fixed a DynaLoader bug that was unable to load symbols from relative |
| path name libraries. |
| |
| =item * |
| |
| Fixed a .xs compilation bug where the mpeixish.sh include file wasn't |
| being installed into the proper directory. |
| |
| =item * |
| |
| All bugfixes will be submitted back to the official Perl developers. |
| |
| =item * |
| |
| The current incarnation of the POSIX filename extended characters |
| patch is now MPEKXJ3A. |
| |
| =back |
| |
| August 14, 1998 |
| |
| =over 4 |
| |
| =item * |
| |
| The previous POSIX filename extended characters patch MPEKX44C has |
| been superseded by MPEKXB5A. |
| |
| =back |
| |
| August 7, 1998 |
| |
| =over 4 |
| |
| =item * |
| |
| The previous POSIX filename extended characters patch MPEKX76A has |
| been superseded by MPEKX44C. |
| |
| =back |
| |
| July 28, 1998 |
| |
| =over 4 |
| |
| =item * |
| |
| Updated to version 5.005_01. |
| |
| =back |
| |
| July 23, 1998 |
| |
| =over 4 |
| |
| =item * |
| |
| Updated to version 5.005 (production release). The public |
| freeware sources are now 100% MPE-ready "straight out of the box". |
| |
| =back |
| |
| July 17, 1998 |
| |
| =over 4 |
| |
| =item * |
| |
| Updated to version 5.005b1 (public beta release). The public |
| freeware sources are now 99.9% MPE-ready. By installing and |
| testing this beta on your own HP3000, you will be helping to |
| insure that the final release of 5.005 will be 100% MPE-ready and |
| 100% bug free. |
| |
| =item * |
| |
| My MPE binary release is now extracted using my standard INSTALL script. |
| |
| =back |
| |
| July 15, 1998 |
| |
| =over 4 |
| |
| =item * |
| |
| Changed startperl to #!/PERL/PUB/perl so that Perl will recognize |
| scripts more easily and efficiently. |
| |
| =back |
| |
| July 8, 1998 |
| |
| =over 4 |
| |
| =item * |
| |
| Updated to version 5.004_70 (internal developer release) which is now |
| MPE-ready. The next public freeware release of Perl should compile |
| "straight out of the box" on MPE. Note that this version of Perl/iX |
| was strictly internal to me and never publicly released. Note that |
| [21]BIND/iX is now required (well, the include files and libbind.a) if |
| you wish to compile Perl/iX. |
| |
| =back |
| |
| November 6, 1997 |
| |
| =over 4 |
| |
| =item * |
| |
| Updated to version 5.004_04. No changes in MPE-specific functionality. |
| |
| =back |
| |
| October 16, 1997 |
| |
| =over 4 |
| |
| =item * |
| |
| Added Demos section to the Perl/iX home page so you can see some |
| sample Perl applications running on my 3000. |
| |
| =back |
| |
| October 3, 1997 |
| |
| =over 4 |
| |
| =item * |
| |
| Added System Requirements section to the Perl/iX home page just so the |
| prerequisites stand out more. Various other home page tweaks. |
| |
| =back |
| |
| October 2, 1997 |
| |
| =over 4 |
| |
| =item * |
| |
| Initial public release. |
| |
| =back |
| |
| September 1997 |
| |
| =over 4 |
| |
| =item * |
| |
| Porting begins. |
| |
| =back |
| |
| =head1 AUTHOR |
| |
| Mark Bixby, L<http://www.bixby.org/mark/> |
| |