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.vos - Perl for Stratus VOS

=head1 SYNOPSIS

This file contains notes for building perl on the Stratus VOS
operating system.  Perl is a scripting or macro language that is
popular on many systems.  See L<perlbook> for a number of good
books on Perl.

These are instructions for building Perl from source.  Most people can
simply download a pre-compiled distribution from the VOS anonymous FTP
site.  If you are running VOS Release 14.2.0 or earlier, download Perl
from ftp://ftp.stratus.com/pub/vos/posix/alpha/alpha.html  If you are
running VOS Release 14.3.0 or later, download Perl from
ftp://ftp.stratus.com/pub/vos/posix/ga/ga.html  Instructions for
unbundling the Perl distribution file are at
ftp://ftp.stratus.com/pub/vos/utility/utility.html

If you own a Stratus VOS Continuum machine and are running VOS
Release 14.4.1 or later, you can obtain a supported copy of perl
by purchasing Release 2.0.1 (or later) of the VOS GNU C++ and
GNU Tools product from Stratus Technologies.

If you own a Stratus VOS V Series machine, you can obtain a
supported copy of perl by purchasing any version of the VOS GNU
C++ and GNU Tools product for the V Series from Stratus
Technologies.

=head2 Multiple methods to build perl for VOS

If you elect to build perl from its source code, you have several
different ways that you can build perl.  The method that you use
depends on the version of VOS that you are using and on the
architecture of your Stratus hardware platform.

=over 5

=item 1

If you have a Stratus XA2000 (Motorola 68k-based) platform, you
must build perl using the alpha version of VOS POSIX support and
using the VOS Standard C Cross-compiler.  You must build perl on
VOS Release 14.1.0 (or later) on an XA/R or Continuum platform.

This version of perl is properly called "miniperl" because it
does not contain the complete perl functionality.

You must build perl with the compile_perl.cm command macro found
in the vos subdirectory.

=item 2

If you have a Stratus XA/R (Intel i860-based) platform, you must
build perl using the alpha version of VOS POSIX support and using
the VOS Standard C compiler or cross-compiler.  You must build
perl on VOS Release 14.1.0 (or later) on an XA/R or Continuum
platform.

This version of perl is properly called "miniperl" because it
does not contain the complete perl functionality.

You must build perl with the compile_perl.cm command macro found
in the vos subdirectory.

=item 3

If you have a Stratus Continuum (PA-RISC-based) platform that is
running a version of VOS earlier than VOS 14.3.0, you must build
perl using the alpha version of VOS POSIX support and using the
VOS Standard C compiler or cross-compiler.  You must build perl
on VOS Release 14.1.0 (or later) on an XA/R or Continuum
platform.

This version of perl is properly called "miniperl" because it
does not contain the complete perl functionality.

You must build perl with the compile_perl.cm command macro found
in the vos subdirectory.

=item 4

If you have a Stratus Continuum (PA-RISC-based) platform that is
running VOS Release 14.3.0 through VOS Release 14.4.1, you must
build perl using the generally-available version of VOS POSIX
support, and using either the VOS Standard C compiler or the VOS
GNU C compiler.  You must build perl on VOS Release 14.3.0 (or
later) on a Continuum platform.

This version of perl is properly called "miniperl" because it
does not contain the complete perl functionality.

You must build perl with the compile_perl.cm command macro found
in the vos subdirectory.

=item 5

If you have a Stratus Continuum (PA-RISC-based) platform that is
running VOS Release 14.5.0 or later, you can either use the
previous method to build "miniperl" or you can build "full
perl", which contains the complete functionality of perl.  I
strongly recommend that you build full perl.  To build full
perl, you must use the generally-available version of VOS POSIX
support.  You must use the VOS GNU C compiler and the VOS GNU
C/C++ and GNU Tools Release 2.0.1 (or later) product.  You must
build full perl on VOS Release 14.5.0 (or later) on a Continuum
platform.

You must build full perl with the compile_full_perl.cm command
macro found in the vos subdirectory.

=item 6

If you have a Stratus V Series (IA32-based) platform, you must
build "full perl", which contains the complete functionality of
perl.  You must use the generally-available version of VOS POSIX
support.  You must use the VOS GNU C compiler and the VOS GNU
C/C++ and GNU Tools Release 3.1 (or later) product.  You must
build full perl on VOS Release 15.0.0 (or later) on a V Series
platform.  These procedures have been testing using VOS GNU
C/C++ and GNU Tools Release 3.3 and VOS Release 15.3.0.

You must build full perl with the compile_full_perl.cm command
macro found in the vos subdirectory.

The other, older methods of building perl or miniperl are no
longer tested or supported on the V Series architecture.

=back

=head2 Stratus POSIX Support

Note that there are two different implementations of POSIX.1
support on VOS.  There is an alpha version of POSIX that is
available from the Stratus anonymous ftp site
( ftp://ftp.stratus.com/pub/vos/posix/alpha/alpha.html ).  There
is a generally-available version of POSIX that comes with VOS
Release 14.3.0 or higher.  This port of POSIX will compile and
bind with either version of POSIX.

Most of the Perl features should work on VOS regardless of which
version of POSIX that you are using.  However, the alpha version
of POSIX is missing a number of key functions, and therefore any
attempt by perl.pm to call the following unimplemented POSIX
functions will result in an error message and an immediate and
fatal call to the VOS debugger.  They are "dup", "fork", and
"waitpid".  The lack of these functions prevents you from
starting VOS commands and grabbing their output in perl.  The
workaround is to run the commands outside of perl, then have perl
process the output file.  These functions are all available in
the generally-available version of POSIX.

=head1 INSTALLING PERL IN VOS

=head2 Compiling Perl 5 on VOS

Before you can build Perl 5 on VOS, you need to have or acquire the
following additional items.

=over 5

=item 1

The VOS Standard C Compiler (or the VOS Standard C
Cross-Compiler) and the VOS C Runtime.  If you are using
the generally-available version of POSIX support, you may
instead use the VOS GNU C/C++ Compiler.  These are
standard Stratus products.

=item 2

Either the VOS OS TCP/IP or STCP product set.  If you are
building with the alpha version of POSIX you need the OS TCP/IP
product set.  If you are building with the generally-available
version of POSIX you need the STCP product set.  Note that the
STCP product is bundled with VOS on the V Series architecture.
These are standard Stratus products.

=item 3

Either the alpha or generally-available version of the VOS
POSIX.1 environment.

The alpha version of POSIX.1 support is available on the
Stratus FTP site.  Login anonymously to ftp.stratus.com and
get the file /pub/vos/posix/alpha/posix.save.evf.gz in
binary file-transfer mode.  Or use the Uniform Resource
Locator (URL)
ftp://ftp.stratus.com/pub/vos/posix/alpha/posix.save.evf.gz from
your web browser.  Instructions for unbundling this file
are at ftp://ftp.stratus.com/pub/vos/utility/utility.html
This is NOT a standard Stratus product.

In VOS Release 14.3.0, the generally-available version of
POSIX.1 support is bundled with the VOS Standard C compiler
(or Standard C Cross-Compiler).  In VOS Release 14.4.0 or
higher, it is also bundled with the VOS C Runtime.  These
are standard Stratus products.

=item 4

You must compile this version of Perl 5 on VOS Release
14.1.0 or higher because some of the perl source files
contain more than 32,767 source lines.  Due to VOS
release-compatibility rules, this port of perl may not
execute on VOS Release 12 or earlier.

=item 5

If you are using the generally-available version of VOS POSIX
support, then you should also acquire the VOS GNU C/C++ Compiler
and GNU Tools product.  When perl is built with this version of
POSIX support, it assumes that it can find "bash", "sed" and
other POSIX-compatible commands in the directory
/system/gnu_library/bin.

=back

To build perl using the supplied VOS command macros, change to
the "vos" subdirectory and type the command "compile_perl
-processor X", where X is the processor type (mc68020, i80860,
pa7100, pa8000) that you wish to use.  Note that the
generally-available version of POSIX.1 support is not available
for the mc68020 or i80860 processors.

Use the "-version alpha" control argument to build perl with
the alpha version of POSIX support, and use the "-version
ga" control argument to build it with the
generally-available version of POSIX.  The default is "ga".

Use the "-compiler cc" control argument to build perl with
the VOS Standard C compiler.  Use the "-compiler gcc"
control argument to build it with the GNU GCC compiler.  The
default is "cc".

You must have purchased the VOS Standard C Cross Compiler in
order to compile perl for a processor type that is different
from the processor type of the module.

Note that code compiled for the pa7100 processor type can
execute on the PA7100, PA8000, PA8500 and PA8600 processors, and
that code compiled for the pa8000 processor type can execute on
the PA8000, PA8500 and PA8600 processors.

To build full perl using the supplied Configure script and
makefiles, change to the "vos" subdirectory and type the command
"compile_full_perl" or "start_process compile_full_perl".  This
will configure, build, and test perl.

=head2 Installing Perl 5 on VOS

=over 4

=item 1

If you have built perl using the Configure script, ensure that
you have modify and default write permission to C<<
>system>ported >> and all subdirectories.  Then type

     gmake install

=item 2

If you have built perl using any of the other methods, type

     install_perl -processor PROCESSOR -name NAME

where PROCESSOR is mc68020, i80860, pa7100, or pa8000, as
appropriate, and NAME is perl or perl5, according to which name
you wish to use.

This command macro will install perl and all of its related
files in the proper directories.

=item 3

While there are currently no architecture-specific
extensions or modules distributed with perl, the following
directories can be used to hold such files:

     >system>ported>lib>perl5>5.8.0>68k
     >system>ported>lib>perl5>5.8.0>860
     >system>ported>lib>perl5>5.8.0>7100
     >system>ported>lib>perl5>5.8.0>8000
     >system>ported>lib>perl5>5.8.0>i786

=item 4

Site-specific perl extensions and modules can be installed in one of
two places.  Put architecture-independent files into:

     >system>ported>lib>perl5>site_perl>5.8.0

Put site-specific architecture-dependent files into one of the
following directories:

     >system>ported>lib>perl5>site_perl>5.8.0>68k
     >system>ported>lib>perl5>site_perl>5.8.0>860
     >system>ported>lib>perl5>site_perl>5.8.0>7100
     >system>ported>lib>perl5>site_perl>5.8.0>8000
     >system>ported>lib>perl5>site_perl>5.8.0>i786

=item 5

You can examine the @INC variable from within a perl program
to see the order in which Perl searches these directories.

=back

=head1 USING PERL IN VOS

=head2 Unimplemented Features of Perl on VOS

If perl is built with the alpha version of VOS POSIX.1 support
and if it attempts to call an unimplemented VOS POSIX.1
function, it will print a fatal error message and enter the VOS
debugger.  This error is not recoverable.  See vos_dummies.c for
a list of the unimplemented POSIX.1 functions.  To see what
functions are unimplemented and what the error message looks
like, compile and execute "test_vos_dummies.c".

=head2 Restrictions of Perl on VOS

This port of Perl version 5 to VOS prefers Unix-style,
slash-separated pathnames over VOS-style greater-than-separated
pathnames.  VOS-style pathnames should work in most contexts, but
if you have trouble, replace all greater-than characters by slash
characters.  Because the slash character is used as a pathname
delimiter, Perl cannot process VOS pathnames containing a slash
character in a directory or file name; these must be renamed.

This port of Perl also uses Unix-epoch date values internally.
As long as you are dealing with ASCII character string
representations of dates, this should not be an issue.  The
supported epoch is January 1, 1980 to January 17, 2038.

See the file pod/perlport.pod for more information about the VOS
port of Perl.

=head2 Handling of underflow and overflow

Prior to VOS Release 14.7.0, VOS does not support automatically
mapping overflowed floating-point values to +infinity, nor
automatically mapping underflowed floating-point values to zero,
unlike many other platforms.  The Perl pack function has been
modified to perform such mapping in software on VOS.  Performing
other floating-point computations that underflow or overflow
will probably result in SIGFPE.  Don't push your luck.

As of VOS Release 14.7.0, the VOS POSIX runtime sets up the
PA-RISC and IA32 hardware floating-point status registers so
that the overflow and underflow exceptions do not trap, but
instead automatically convert the result to infinity or zero, as
appropriate.  As of this writing, there are still floating-point
operations that can trap, for example, subtracting two infinite
values.  This is recorded as suggestion posix-1022, which has
been fixed in VOS Release 15.2 and higher.

=head1 TEST STATUS

When Perl 5.8.9 is built using the native build process on VOS
Release 15.3.0 and GNU C/C++ and GNU Tools 3.3.0, all but the
following tests pass.  The tests that fail are:

t/io/fs.t, test 191                    (hits bug posix-1524)
t/io/tell.t, test 28                   (assumes file at EOF when opened)
t/op/kill0.t, test 2                   (hits bug posix-1535)
t/op/magic.t, test 26                  (makes assumptions about path of executable)
t/op/sprintf.t, test 208               (hits bug posix-1536)
ext/B/t/concise.t, test 155            (no dynamic loading)
ext/DynaLoader/t/DynaLoader.t, test 4  (no dynamic loading)
ext/DynaLoader/t/XSLoader.t, test 5    (no dynamic loading)
ext/IO/t/io_pipe.t, test 9 & 10        (SIGPIPE is signalled twice)
ext/POSIX/t/time.t, test 5             (ctime and strftime differ)
ext/Socket/t/socketpair.t, line 38     (test hangs, no AF_UNIX sockets)
lib/ExtUtils/t/prompt.t                (unknown)
lib/File/Compare.t, test 13            (unknown)
lib/Net/Ping/t/450_service.t, test 8   (unknown)
lib/Net/Ping/t/510_ping_udp.t, line 383 (unknown)
lib/Time/Local.t, test 97              (test goes outside VOS Epoch)
t/Module_Pluggable/20dodgy_files.t, test 3  (file name starts with
                                        with "-"; not ok on VOS)

=head1 SUPPORT STATUS

I'm offering this port "as is".  You can ask me questions, but I
can't guarantee I'll be able to answer them.  There are some
excellent books available on the Perl language; consult a book
seller.

If you want a supported version of perl for VOS, purchase the
VOS GNU C/C++ and GNU Tools Release 2.0.1 (or later) product from
Stratus Technologies, along with a support contract (or from
anyone else who will sell you support).

=head1 AUTHOR

Paul Green (Paul.Green@stratus.com)

=head1 LAST UPDATE

February 7, 2008

=cut
