diff options
-rwxr-xr-x | Configure | 14 | ||||
-rw-r--r-- | MANIFEST | 2 | ||||
-rw-r--r-- | README.os400 | 90 | ||||
-rw-r--r-- | hints/aix.sh | 24 | ||||
-rw-r--r-- | hints/os400.sh | 24 | ||||
-rw-r--r-- | lib/Cwd.pm | 11 | ||||
-rw-r--r-- | pod/buildtoc.PL | 1 | ||||
-rw-r--r-- | pod/perl.pod | 1 | ||||
-rw-r--r-- | pod/perlebcdic.pod | 10 | ||||
-rw-r--r-- | pod/perlport.pod | 22 |
10 files changed, 183 insertions, 16 deletions
@@ -5418,7 +5418,7 @@ case "$usenm" in esac case "$dflt" in '') - if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then + if $test "$osname" = aix -a "X$PASE" != "$Xdefine" -a ! -f /lib/syscalls.exp; then echo " " echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4 echo "'nm' won't be sufficient on this sytem." >&4 @@ -5765,11 +5765,19 @@ else fi fi nm_extract="$com" -if $test -f /lib/syscalls.exp; then +case "$PASE" in +define) + echo " " + echo "Since you are compiling for PASE, extracting more symbols from libc.a...">&4 + nm -Tv /lib/libc.a | grep '^\.[a-z]' | awk '$2 == "T" {print $1}' | sed 's/^.//' >> libc.list + ;; +*) if $test -f /lib/syscalls.exp; then echo " " echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4 $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*[ ]*$/\1/p' /lib/syscalls.exp >>libc.list -fi + fi + ;; +esac ;; esac $rm -f libnames libpath @@ -809,6 +809,7 @@ hints/openbsd.sh Hints for named architecture hints/opus.sh Hints for named architecture hints/os2.sh Hints for named architecture hints/os390.sh Hints for named architecture +hints/os400.sh Hints for named architecture hints/posix-bc.sh Hints for named architecture hints/powerux.sh Hints for named architecture hints/qnx.sh Hints for named architecture @@ -2296,6 +2297,7 @@ README.mpeix Notes about MPE/iX port README.netware Notes about NetWare port README.os2 Notes about OS/2 port README.os390 Notes about OS/390 (nee MVS) port +README.os400 Notes about OS/400 port README.plan9 Notes about Plan9 port README.qnx Notes about QNX port README.solaris Notes about Solaris port diff --git a/README.os400 b/README.os400 new file mode 100644 index 0000000000..572149b918 --- /dev/null +++ b/README.os400 @@ -0,0 +1,90 @@ +If you read this file _as_is_, just ignore the funny characters you see. +It is written in the POD format (see pod/perlpod.pod) which is specially +designed to be readable as is. + +=head1 NAME + +README.os400 - Perl version 5 on OS/400 + +=head1 DESCRIPTION + +This document describes various features of IBM's OS/400 operating +system that will affect how Perl version 5 (hereafter just Perl) is +compiled and/or runs. + +By far the easiest way to build Perl for OS/400 is to use the PASE +(Portable Application Solutions Environment), for more information see +http://www.iseries.ibm.com/developer/factory/pase/index.html +This environment allows one to use AIX APIs while programming, and it +provides a runtime that allows AIX binaries to execute directly on the +PowerPC iSeries. + +=head2 Compiling Perl for OS/400 PASE + +The recommended way to build Perl for the OS/400 PASE is to build the +Perl 5 source code (release 5.8.1 or later) under AIX. + +The trick is to give a special parameter to the Configure shell script +when running it on AIX: + + sh Configure -DPASE ... + +The default installation directory of Perl under PASE is /QOpenSys/perl. +This can be modified if needed with Configure parameter -Dprefix=/some/dir. + +Starting from OS/400 V5R2 the IBM Visual Age compiler is supported +on OS/400 PASE, so it is possible to build Perl natively on OS/400. +The easier way, however, is to compile in AIX, as just described. + +If building natively on PASE, please do the build under the /QOpenSys +directory, since Perl is happier when built on a case sensitive filesystem. + +=head2 Installing Perl in OS/400 PASE + +If you are compiling on AIX, simply do a "make install" on the AIX box. +Once the install finishes, tar up the /QOpenSys/perl directory. Transfer +the tarball to the OS/400 using FTP with the following commands: + + > binary + > site namefmt 1 + > put perl.tar /QOpenSys + +Once you have it on, simply bring up a PASE shell and extract the tarball. + +If you are compiling in PASE, then "make install" is the only thing you +will need to do. + +The default path for perl binary is /QOpenSys/perl/bin/perl. You'll +want to symlink /QOpenSys/usr/bin/perl to this file so you don't have +to modify your path. + +=head2 Using Perl in OS/400 PASE + +Perl in PASE may be used in the same manner as you would use Perl on AIX. + +Scripts starting with #!/usr/bin/perl should work if you have +/QOpenSys/usr/bin/perl symlinked to your perl binary. This will not +work if you've done a setuid/setgid or have environment variable +PASE_EXEC_QOPENSYS="N". If you have V5R1, you'll need to get the +latest PTFs to have this feature. Scripts starting with +#!/QOpenSys/perl/bin/perl should always work. + +=head2 Perl on ILE + +There exists a port of Perl to the ILE environment. This port, however, +is based quite an old release of Perl, Perl 5.00502 (August 1998). +(As of July 2002 the latest release of Perl is 5.8.0, and even 5.6.1 +has been out since April 2001.) If you need to run Perl on ILE, though, +you may need this older port: http://www.cpan.org/ports/#os400 +Note that any Perl release later than 5.00502 has not been ported to ILE. + +If you need to use Perl in the ILE environment, you may want to consider +using Qp2RunPase() to call the PASE version of Perl. + +=head1 AUTHORS + +Jarkko Hietaniemi <jhi@iki.fi> +Bryan Logan <bryanlog@us.ibm.com> +David Larson <larson1@us.ibm.com> + +=cut diff --git a/hints/aix.sh b/hints/aix.sh index 231d3482b3..bee147965b 100644 --- a/hints/aix.sh +++ b/hints/aix.sh @@ -535,4 +535,28 @@ else esac fi +case "$PASE" in +define) + case "$prefix" in + '') prefix=/QOpenSys/perl ;; + esac + cat >&4 <<EOF + +*** +*** You seem to be compiling in AIX for the OS/400 PASE environment. +*** I'm not going to use the AIX bind, nsl, and possible util libraries, then. +*** I'm also not going to install perl as /usr/bin/perl. +*** Perl will be installed under $prefix. +*** For instructions how to install this build from AIX to PASE, +*** see the file README.os400. Accept the "aix" for the question +*** about "Operating system name". +*** +EOF + set `echo " $libswanted " | sed -e 's@ bind @ @' -e 's@ nsl @ @' -e 's@ util @ @'` + shift + libswanted="$*" + installusrbinperl="$undef" + ;; +esac + # EOF diff --git a/hints/os400.sh b/hints/os400.sh new file mode 100644 index 0000000000..16eec2fbe2 --- /dev/null +++ b/hints/os400.sh @@ -0,0 +1,24 @@ +# +# We will just reuse the AIX hints since we support only building +# for the PASE and the PASE hints are merged with the AIX hints. +# + +case "$PASE" in +'') cat >&4 <<EOF +*** +*** This build process only works with the PASE environment (not ILE). +*** You must supply the -DPASE parameter to the Configure script, +*** please read the file README.os400. Exiting now. +*** +EOF + exit 1 + ;; +*) cat >&4 <<EOF +*** +*** Using the AIX hints file, $src/hints/aix.sh. +*** +EOF + osname=aix + . $src/hints/aix.sh + ;; +esac diff --git a/lib/Cwd.pm b/lib/Cwd.pm index 8b00543e1e..7f8ef6543b 100644 --- a/lib/Cwd.pm +++ b/lib/Cwd.pm @@ -192,7 +192,16 @@ foreach my $try (qw(/bin/pwd /usr/bin/pwd)) { last; } } -$pwd_cmd ||= 'pwd'; +unless ($pwd_cmd) { + if (-x '/QOpenSys/bin/pwd') { # OS/400 PASE. + $pwd_cmd = '/QOpenSys/bin/pwd' ; + } else { + # Isn't this wrong? _backtick_pwd() will fail if somenone has + # pwd in their path but it is not /bin/pwd or /usr/bin/pwd? + # See [perl #16774]. --jhi + $pwd_cmd = 'pwd'; + } +} # The 'natural and safe form' for UNIX (pwd may be setuid root) sub _backtick_pwd { diff --git a/pod/buildtoc.PL b/pod/buildtoc.PL index acb45d610d..be9c004c9c 100644 --- a/pod/buildtoc.PL +++ b/pod/buildtoc.PL @@ -81,6 +81,7 @@ if (-d "pod") { perlnetware perlos2 perlos390 + perlos400 perlqnx perlplan9 perlsolaris diff --git a/pod/perl.pod b/pod/perl.pod index 5aee015927..75331e1eb3 100644 --- a/pod/perl.pod +++ b/pod/perl.pod @@ -166,6 +166,7 @@ For ease of access, the Perl manual has been split up into several sections. perlnetware Perl notes for NetWare perlos2 Perl notes for OS/2 perlos390 Perl notes for OS/390 + perlos400 Perl notes for OS/400 perlplan9 Perl notes for Plan 9 perlqnx Perl notes for QNX perlsolaris Perl notes for Solaris diff --git a/pod/perlebcdic.pod b/pod/perlebcdic.pod index 44ad6b9f0d..1e96fdb999 100644 --- a/pod/perlebcdic.pod +++ b/pod/perlebcdic.pod @@ -1248,12 +1248,16 @@ Legacy multi byte EBCDIC code pages XXX. There may be a few system dependent issues of concern to EBCDIC Perl programmers. -=head2 OS/400 - -The PASE environment. +=head2 OS/400 =over 8 +=item PASE + +The PASE environment is runtime environment for OS/400 that can run +executables built for PowerPC AIX in OS/400, see L<perlos400>. PASE +is ASCII-based, not EBCDIC-based as the ILE. + =item IFS access XXX. diff --git a/pod/perlport.pod b/pod/perlport.pod index 9a76d240c0..65ca9d8a3a 100644 --- a/pod/perlport.pod +++ b/pod/perlport.pod @@ -188,9 +188,9 @@ The Unix column assumes that you are not accessing a serial line "\n", and "\n" on output becomes CRLF. These are just the most common definitions of C<\n> and C<\r> in Perl. -There may well be others. For example, on an EBCDIC implementation such -as z/OS or OS/400 the above material is similar to "Unix" but the code -numbers change: +There may well be others. For example, on an EBCDIC implementation +such as z/OS (OS/390) or OS/400 (using the ILE, the PASE is ASCII-based) +the above material is similar to "Unix" but the code numbers change: LF eq \025 eq \x15 eq chr(21) eq CP-1047 21 LF eq \045 eq \x25 eq \cU eq chr(37) eq CP-0037 37 @@ -1136,7 +1136,9 @@ Character Code Set ID 0037 for OS/400 and either 1047 or POSIX-BC for S/390 systems). On the mainframe perl currently works under the "Unix system services for OS/390" (formerly known as OpenEdition), VM/ESA OpenEdition, or the BS200 POSIX-BC system (BS2000 is supported in perl 5.6 and greater). -See L<perlos390> for details. +See L<perlos390> for details. Note that for OS/400 there is also a port of +Perl 5.8.1/5.9.0 or later to the PASE which is ASCII-based (as opposed to +ILE which is EBCDIC-based), see L<perlos400>. As of R2.5 of USS for OS/390 and Version 2.3 of VM/ESA these Unix sub-systems do not support the C<#!> shebang trick for script invocation. @@ -2053,7 +2055,7 @@ First public release with perl5.005. =head1 Supported Platforms -As of June 2002 (the Perl release 5.8.0), the following platforms are +As of July 2002 (the Perl release 5.8.0), the following platforms are able to build Perl from the standard source code distribution available at http://www.cpan.org/src/index.html @@ -2078,6 +2080,7 @@ available at http://www.cpan.org/src/index.html OpenBSD OpenVMS (VMS) OS/2 + OS/400 (using the PASE) (since Perl 5.8.1/5.9.0) PowerUX POSIX-BC (BS2000) QNX @@ -2161,7 +2164,7 @@ binaries available via http://www.cpan.org/ports/ Perl release - OS/400 5.005_02 + OS/400 (ILE) 5.005_02 Tandem Guardian 5.004 The following platforms have only binaries available via @@ -2184,9 +2187,10 @@ L<perlaix>, L<perlamiga>, L<perlapollo>, L<perlbeos>, L<perlbs2000>, L<perlce>, L<perlcygwin>, L<perldgux>, L<perldos>, L<perlepoc>, L<perlebcdic>, L<perlfreebsd>, L<perlhurd>, L<perlhpux>, L<perlirix>, L<perlmachten>, L<perlmacos>, L<perlmint>, L<perlmpeix>, -L<perlnetware>, L<perlos2>, L<perlos390>, L<perlplan9>, L<perlqnx>, -L<perlsolaris>, L<perltru64>, L<perlunicode>, L<perlvmesa>, -L<perlvms>, L<perlvos>, L<perlwin32>, and L<Win32>. +L<perlnetware>, L<perlos2>, L<perlos390>, L<perlos400>, +L<perlplan9>, L<perlqnx>, L<perlsolaris>, L<perltru64>, +L<perlunicode>, L<perlvmesa>, L<perlvms>, L<perlvos>, +L<perlwin32>, and L<Win32>. =head1 AUTHORS / CONTRIBUTORS |