This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
OS/400 PASE port
authorJarkko Hietaniemi <jhi@iki.fi>
Thu, 29 Aug 2002 22:22:51 +0000 (01:22 +0300)
committerhv <hv@crypt.org>
Wed, 4 Sep 2002 11:21:57 +0000 (11:21 +0000)
Message-ID: <20020829192251.GA27102@lyta.hut.fi>

p4raw-id: //depot/perl@17827

Configure
MANIFEST
README.os400 [new file with mode: 0644]
hints/aix.sh
hints/os400.sh [new file with mode: 0644]
lib/Cwd.pm
pod/buildtoc.PL
pod/perl.pod
pod/perlebcdic.pod
pod/perlport.pod

index e65ab41..d57d749 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -5418,7 +5418,7 @@ case "$usenm" in
        esac
        case "$dflt" 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
                        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"
        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
        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
 ;;
 esac
 $rm -f libnames libpath
index f0341a3..f8ab653 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -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/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
 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.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
 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 (file)
index 0000000..572149b
--- /dev/null
@@ -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
index 231d348..bee1479 100644 (file)
@@ -535,4 +535,28 @@ else
        esac
 fi
 
        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
 # EOF
diff --git a/hints/os400.sh b/hints/os400.sh
new file mode 100644 (file)
index 0000000..16eec2f
--- /dev/null
@@ -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
index 8b00543..7f8ef65 100644 (file)
@@ -192,7 +192,16 @@ foreach my $try (qw(/bin/pwd /usr/bin/pwd)) {
         last;
     }
 }
         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 {
 
 # The 'natural and safe form' for UNIX (pwd may be setuid root)
 sub _backtick_pwd {
index acb45d6..be9c004 100644 (file)
@@ -81,6 +81,7 @@ if (-d "pod") {
     perlnetware             
     perlos2             
     perlos390           
     perlnetware             
     perlos2             
     perlos390           
+    perlos400           
     perlqnx
     perlplan9
     perlsolaris
     perlqnx
     perlplan9
     perlsolaris
index 5aee015..75331e1 100644 (file)
@@ -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
     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
     perlplan9          Perl notes for Plan 9
     perlqnx            Perl notes for QNX
     perlsolaris        Perl notes for Solaris
index 44ad6b9..1e96fdb 100644 (file)
@@ -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.
 
 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
 
 
 =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.
 =item IFS access
 
 XXX.
index 9a76d24..65ca9d8 100644 (file)
@@ -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.
 "\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
 
     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).
 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.
 
 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
 
 
 =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
 
 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
         OpenBSD
         OpenVMS         (VMS)
         OS/2
+        OS/400          (using the PASE) (since Perl 5.8.1/5.9.0)
         PowerUX
         POSIX-BC        (BS2000)
         QNX
         PowerUX
         POSIX-BC        (BS2000)
         QNX
@@ -2161,7 +2164,7 @@ binaries available via http://www.cpan.org/ports/
 
                                 Perl release
 
 
                                 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
         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<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
 
 
 =head1 AUTHORS / CONTRIBUTORS