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.hpux - Perl version 5 on Hewlett-Packard Unix (HP-UX) systems
=head1 DESCRIPTION
This document describes various features of HP's Unix operating system
(HP-UX) that will affect how Perl version 5 (hereafter just Perl) is
compiled and/or runs.
=head2 Using perl as shipped with HP-UX
Application release September 2001, HP-UX 11.00 is the first to ship
with Perl. By the time it was perl-5.6.1 in /opt/perl. The first
occurrence is on CD 5012-7954 and can be installed using
swinstall -s /cdrom perl
assuming you have mounted that CD on /cdrom. In this version the
following modules were installed:
ActivePerl::DocTools-0.04 HTML::Parser-3.19 XML::DOM-1.25
Archive::Tar-0.072 HTML::Tagset-3.03 XML::Parser-2.27
Compress::Zlib-1.08 MIME::Base64-2.11 XML::Simple-1.05
Convert::ASN1-0.10 Net-1.07 XML::XPath-1.09
Digest::MD5-2.11 PPM-2.1.5 XML::XSLT-0.32
File::CounterFile-0.12 SOAP::Lite-0.46 libwww-perl-5.51
Font::AFM-1.18 Storable-1.011 libxml-perl-0.07
HTML-Tree-3.11 URI-1.11 perl-ldap-0.23
That build was a portable hppa-1.1 multithread build that supports large
files compiled with gcc-2.9-hppa-991112.
If you perform a new installation, then (a newer) Perl will be installed
automatically. Preinstalled HP-UX systems now slao have more recent versions
of Perl and the updated modules.
The official (threaded) builds from HP, as they are shipped on the
Application DVD/CD's are available on
http://www.software.hp.com/cgi-bin/swdepot_parser.cgi/cgi/displayProductInfo.pl?productNumber=PERL
for both PA-RISC and IPF (Itanium Processor Family). They are built
with the HP ANSI-C compiler by ActiveState.
To see what version is included on the DVD (assumed here to be mounted
on /cdrom), issue this command:
# swlist -s /cdrom perl
# perl D.5.8.8.B 5.8.8 Perl Programming Language
perl.Perl5-32 D.5.8.8.B 32-bit 5.8.8 Perl Programming Language with Extensions
perl.Perl5-64 D.5.8.8.B 64-bit 5.8.8 Perl Programming Language with Extensions
=head2 Using perl from HP's porting centre
HP porting centre tries very hard to keep up with customer demand and
release updates from the Open Source community. Having precompiled
Perl binaries available is obvious.
The HP porting centres are limited in what systems they are allowed
to port to and they usually choose the two most recent OS versions
available. This means that at the moment of writing, there are only
HP-UX 11.11 (pa-risc 2.0) and HP-UX 11.23 (Itanium 2) ports available
on the porting centres.
HP has asked the porting centre to move Open Source binaries
from /opt to /usr/local, so binaries produced since the start
of July 2002 are located in /usr/local.
One of HP porting centres URL's is http://hpux.connect.org.uk/
The port currently available is built with GNU gcc.
=head2 Compiling Perl 5 on HP-UX
When compiling Perl, you must use an ANSI C compiler. The C compiler
that ships with all HP-UX systems is a K&R compiler that should only be
used to build new kernels.
Perl can be compiled with either HP's ANSI C compiler or with gcc. The
former is recommended, as not only can it compile Perl with no
difficulty, but also can take advantage of features listed later that
require the use of HP compiler-specific command-line flags.
If you decide to use gcc, make sure your installation is recent and
complete, and be sure to read the Perl INSTALL file for more gcc-specific
details.
=head2 PA-RISC
HP's HP9000 Unix systems run on HP's own Precision Architecture
(PA-RISC) chip. HP-UX used to run on the Motorola MC68000 family of
chips, but any machine with this chip in it is quite obsolete and this
document will not attempt to address issues for compiling Perl on the
Motorola chipset.
The version of PA-RISC at the time of this document's last update is 2.0,
which is also the last there will be. HP PA-RISC systems are usually
refered to with model description "HP 9000". The last CPU in this series
is the PA-8900. Support for PA-RISC architectured machines officially
ends as shown in the following table:
PA-RISC End-of-Life Roadmap
+--------+----------------+----------------+-----------------+
| HP9000 | Superdome | PA-8700 | Spring 2011 |
| 4-128 | | PA-8800/sx1000 | Summer 2012 |
| cores | | PA-8900/sx1000 | 2014 |
| | | PA-8900/sx2000 | 2015 |
+--------+----------------+----------------+-----------------+
| HP9000 | rp7410, rp8400 | PA-8700 | Spring 2011 |
| 2-32 | rp7420, rp8420 | PA-8800/sx1000 | 2012 |
| cores | rp7440, rp8440 | PA-8900/sx1000 | Autumn 2013 |
| | | PA-8900/sx2000 | 2015 |
+--------+----------------+----------------+-----------------+
| HP9000 | rp44x0 | PA-8700 | Spring 2011 |
| 1-8 | | PA-8800/rp44x0 | 2012 |
| cores | | PA-8900/rp44x0 | 2014 |
+--------+----------------+----------------+-----------------+
| HP9000 | rp34x0 | PA-8700 | Spring 2011 |
| 1-4 | | PA-8800/rp34x0 | 2012 |
| cores | | PA-8900/rp34x0 | 2014 |
+--------+----------------+----------------+-----------------+
From http://www.hp.com/products1/evolution/9000/eol_announcement.html:
The last order date for HP9000 PA-RISC systems is planned for
December 31, 2008 and ship date of April 1, 2009. Operating system
releases for HP-UX will continue shipping past the HP9000 systems
last order date.
A complete list of models at the time the OS was built is in the file
/usr/sam/lib/mo/sched.models. The first column corresponds to the last
part of the output of the "model" command. The second column is the
PA-RISC version and the third column is the exact chip type used.
(Start browsing at the bottom to prevent confusion ;-)
# model
9000/800/L1000-44
# grep L1000-44 /usr/sam/lib/mo/sched.models
L1000-44 2.0 PA8500
=head2 Portability Between PA-RISC Versions
An executable compiled on a PA-RISC 2.0 platform will not execute on a
PA-RISC 1.1 platform, even if they are running the same version of
HP-UX. If you are building Perl on a PA-RISC 2.0 platform and want that
Perl to also run on a PA-RISC 1.1, the compiler flags +DAportable and
+DS32 should be used.
It is no longer possible to compile PA-RISC 1.0 executables on either
the PA-RISC 1.1 or 2.0 platforms. The command-line flags are accepted,
but the resulting executable will not run when transferred to a PA-RISC
1.0 system.
=head2 PA-RISC 1.0
The original version of PA-RISC, HP no longer sells any system with this chip.
The following systems contained PA-RISC 1.0 chips:
600, 635, 645, 808, 815, 822, 825, 832, 834, 835, 840, 842, 845, 850,
852, 855, 860, 865, 870, 890
=head2 PA-RISC 1.1
An upgrade to the PA-RISC design, it shipped for many years in many different
system.
The following systems contain with PA-RISC 1.1 chips:
705, 710, 712, 715, 720, 722, 725, 728, 730, 735, 742, 743, 744, 745,
747, 750, 755, 770, 777, 778, 779, 800, 801, 803, 806, 807, 809, 811,
813, 816, 817, 819, 821, 826, 827, 829, 831, 837, 839, 841, 847, 849,
851, 856, 857, 859, 867, 869, 877, 887, 891, 892, 897, A180, A180C,
B115, B120, B132L, B132L+, B160L, B180L, C100, C110, C115, C120,
C160L, D200, D210, D220, D230, D250, D260, D310, D320, D330, D350,
D360, D410, DX0, DX5, DXO, E25, E35, E45, E55, F10, F20, F30, G30,
G40, G50, G60, G70, H20, H30, H40, H50, H60, H70, I30, I40, I50, I60,
I70, J200, J210, J210XC, K100, K200, K210, K220, K230, K400, K410,
K420, S700i, S715, S744, S760, T500, T520
=head2 PA-RISC 2.0
The most recent upgrade to the PA-RISC design, it added support for
64-bit integer data.
As of the date of this document's last update, the following systems
contain PA-RISC 2.0 chips:
700, 780, 781, 782, 783, 785, 802, 804, 810, 820, 861, 871, 879, 889,
893, 895, 896, 898, 899, A400, A500, B1000, B2000, C130, C140, C160,
C180, C180+, C180-XP, C200+, C400+, C3000, C360, C3600, CB260, D270,
D280, D370, D380, D390, D650, J220, J2240, J280, J282, J400, J410,
J5000, J5500XM, J5600, J7000, J7600, K250, K260, K260-EG, K270, K360,
K370, K380, K450, K460, K460-EG, K460-XP, K470, K570, K580, L1000,
L2000, L3000, N4000, R380, R390, SD16000, SD32000, SD64000, T540,
T600, V2000, V2200, V2250, V2500, V2600
Just before HP took over Compaq, some systems were renamed. the link
that contained the explanation is dead, so here's a short summary:
HP 9000 A-Class servers, now renamed HP Server rp2400 series.
HP 9000 L-Class servers, now renamed HP Server rp5400 series.
HP 9000 N-Class servers, now renamed HP Server rp7400.
rp2400, rp2405, rp2430, rp2450, rp2470, rp3410, rp3440, rp4410,
rp4440, rp5400, rp5405, rp5430, rp5450, rp5470, rp7400, rp7405,
rp7410, rp7420, rp7440, rp8400, rp8420, rp8440, Superdome
The current naming convention is:
aadddd
||||`+- 00 - 99 relative capacity & newness (upgrades, etc.)
|||`--- unique number for each architecture to ensure different
||| systems do not have the same numbering across
||| architectures
||`---- 1 - 9 identifies family and/or relative positioning
||
|`----- c = ia32 (cisc)
| p = pa-risc
| x = ia-64 (Itanium & Itanium 2)
| h = housing
`------ t = tower
r = rack optimized
s = super scalable
b = blade
sa = appliance
=head2 Itanium Processor Family (IPF) and HP-UX
HP-UX also runs on the new Itanium processor. This requires the use
of a different version of HP-UX (currently 11.23 or 11i v2), and with
the exception of a few differences detailed below and in later sections,
Perl should compile with no problems.
Although PA-RISC binaries can run on Itanium systems, you should not
attempt to use a PA-RISC version of Perl on an Itanium system. This is
because shared libraries created on an Itanium system cannot be loaded
while running a PA-RISC executable.
HP Itanium 2 systems are usually refered to with model description
"HP Integrity".
=head2 Itanium, Itanium 2 & Madison 6
HP also ships servers with the 128-bit Itanium processor(s). The cx26x0
is told to have Madison 6. As of the date of this document's last update,
the following systems contain Itanium or Itanium 2 chips (this is likely
to be out of date):
BL60p, BL860c, BL870c, cx2600, cx2620, rx1600, rx1620, rx2600,
rx2600hptc, rx2620, rx2660, rx3600, rx4610, rx4640, rx5670,
rx6600, rx7420, rx7620, rx7640, rx8420, rx8620, rx8640, rx9610,
sx1000, sx2000
To see all about your machine, type
# model
ia64 hp server rx2600
# /usr/contrib/bin/machinfo
=head2 HP-UX versions
Not all architectures (PA = PA-RISC, IPF = Itanium Processor Family)
support all versions of HP-UX, here is a short list
HP-UX version Kernel Architecture
------------- ------ ------------
10.20 32 bit PA
11.00 32/64 PA
11.11 11i v1 32/64 PA
11.22 11i v2 64 IPF
11.23 11i v2 64 PA & IPF
11.31 11i v3 64 PA & IPF
See for the full list of hardware/OS support and expected end-of-life
http://www.hp.com/go/hpuxservermatrix
=head2 Building Dynamic Extensions on HP-UX
HP-UX supports dynamically loadable libraries (shared libraries).
Shared libraries end with the suffix .sl. On Itanium systems,
they end with the suffix .so.
Shared libraries created on a platform using a particular PA-RISC
version are not usable on platforms using an earlier PA-RISC version by
default. However, this backwards compatibility may be enabled using the
same +DAportable compiler flag (with the same PA-RISC 1.0 caveat
mentioned above).
Shared libraries created on an Itanium platform cannot be loaded on
a PA-RISC platform. Shared libraries created on a PA-RISC platform
can only be loaded on an Itanium platform if it is a PA-RISC executable
that is attempting to load the PA-RISC library. A PA-RISC shared
library cannot be loaded into an Itanium executable nor vice-versa.
To create a shared library, the following steps must be performed:
1. Compile source modules with +z or +Z flag to create a .o module
which contains Position-Independent Code (PIC). The linker will
tell you in the next step if +Z was needed.
(For gcc, the appropriate flag is -fpic or -fPIC.)
2. Link the shared library using the -b flag. If the code calls
any functions in other system libraries (e.g., libm), it must
be included on this line.
(Note that these steps are usually handled automatically by the extension's
Makefile).
If these dependent libraries are not listed at shared library creation
time, you will get fatal "Unresolved symbol" errors at run time when the
library is loaded.
You may create a shared library that refers to another library, which
may be either an archive library or a shared library. If this second
library is a shared library, this is called a "dependent library". The
dependent library's name is recorded in the main shared library, but it
is not linked into the shared library. Instead, it is loaded when the
main shared library is loaded. This can cause problems if you build an
extension on one system and move it to another system where the
libraries may not be located in the same place as on the first system.
If the referred library is an archive library, then it is treated as a
simple collection of .o modules (all of which must contain PIC). These
modules are then linked into the shared library.
Note that it is okay to create a library which contains a dependent
library that is already linked into perl.
Some extensions, like DB_File and Compress::Zlib use/require prebuilt
libraries for the perl extensions/modules to work. If these libraries
are built using the default configuration, it might happen that you
run into an error like "invalid loader fixup" during load phase.
HP is aware of this problem. Search the HP-UX cxx-dev forums for
discussions about the subject. The short answer is that B