This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
README.aix for Perl 5.12"
[perl5.git] / README.aix
index ef8dfd1..66aac69 100644 (file)
@@ -4,16 +4,231 @@ designed to be readable as is.
 
 =head1 NAME
 
-README.aix - Perl version 5 on IBM Unix (AIX) systems
+README.aix - Perl version 5 on IBM AIX (UNIX) systems
 
 =head1 DESCRIPTION
 
-This document describes various features of IBM's Unix operating
-system (AIX) that will affect how Perl version 5 (hereafter just Perl)
+This document describes various features of IBM's UNIX operating
+system AIX that will affect how Perl version 5 (hereafter just Perl)
 is compiled and/or runs.
 
 =head2 Compiling Perl 5 on AIX
 
+For information on compilers on older versions of AIX, see L<Compiling
+Perl 5 on older AIX versions up to 4.3.3>.
+
+When compiling Perl, you must use an ANSI C compiler. AIX does not ship
+an ANSI compliant C compiler with AIX by default, but binary builds of
+gcc for AIX are widely available. A version of gcc is also included in
+the AIX Toolbox which is shipped with AIX.
+
+=head2 Supported Compilers
+
+Currently all versions of IBM's "xlc", "xlc_r", "cc", "cc_r" or
+"vac" ANSI/C compiler will work for building Perl if that compiler
+works on your system.
+
+If you plan to link Perl to any module that requires thread-support,
+like DBD::Oracle, it is better to use the _r version of the compiler.
+This will not build a threaded Perl, but a thread-enabled Perl. See
+also L<Threaded Perl> later on.
+
+As of writing (2010-03) only the I<IBM XL C for AIX> or I<IBM XL C/C++
+for AIX> compiler is supported by IBM on AIX 5L/6.1.
+
+The following compiler versions are currently supported by IBM:
+
+    IBM XL C and IBM XL C/C++ V8, V9, V10
+
+The XL C for AIX is integrated in the XL C/C++ for AIX compiler and
+therefore also supported.
+
+If you choose XL C/C++ V9 you need APAR IZ35785 installed
+otherwise the integrated SDBM_File do not compile correctly due
+to an optimization bug. You can circumvent this problem by
+adding -qipa to the optimization flags (-Doptimize='-O -qipa').
+The PTF for APAR IZ35785 which solves this problem is available
+from IBM (April 2009 PTF for XL C/C++ Enterprise Edition for AIX, V9.0).
+
+Perl can be compiled with either IBM's ANSI C compiler or with gcc.
+The former is recommended, as not only it can compile Perl with no
+difficulty, but also can take advantage of features listed later
+that require the use of IBM 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. Please report any hoops you had to jump through to the
+development team.
+
+=head2 Incompatibility with AIX Toolbox lib gdbm
+
+If the AIX Toolbox version of lib gdbm < 1.8.3-5 is installed on your
+system then Perl will not work. This library contains the header files
+/opt/freeware/include/gdbm/dbm.h|ndbm.h which conflict with the AIX
+system versions. The lib gdbm will be automatically removed from the
+wanted libraries if the presence of one of these two header files is
+detected. If you want to build Perl with GDBM support then please install
+at least gdbm-devel-1.8.3-5 (or higher).
+
+=head2 Perl 5.12 was successfully compiled and tested on:
+
+    AIX Level            | Compiler Level          | w th | w/o th
+    ---------------------+-------------------------+------+-------
+    5.1 TL9 32 bit       | XL C/C++ V7             | OK   | OK
+    5.1 TL9 64 bit       | XL C/C++ V7             | OK   | OK
+    5.2 TL10 SP8 32 bit  | XL C/C++ V8             | OK   | OK
+    5.2 TL10 SP8 32 bit  | gcc 3.2.2               | OK   | OK
+    5.2 TL10 SP8 64 bit  | XL C/C++ V8             | OK   | OK
+    5.3 TL8 SP8 32 bit   | XL C/C++ V9 + IZ35785   | OK   | OK
+    5.3 TL8 SP8 32 bit   | gcc 4.2.4               | OK   | OK
+    5.3 TL8 SP8 64 bit   | XL C/C++ V9 + IZ35785   | OK   | OK
+    6.1 TL1 SP7 32 bit   | XL C/C++ V10            | OK   | OK
+    6.1 TL1 SP7 64 bit   | XL C/C++ V10            | OK   | OK
+
+    w th   = with thread support
+    w/o th = without thread support
+    OK     = tested
+
+Successfully tested means that all "make test" runs finish with a
+result of 100% OK. All tests were conducted with -Duseshrplib set.
+
+All tests were conducted on the oldest supported AIX technology level
+with the latest support package applied. If the tested AIX version is
+out of support (AIX 4.3.3, 5.1, 5.2) then the last available support
+level was used.
+
+=head2 Building Dynamic Extensions on AIX
+
+Starting from Perl 5.7.2 (and consequently 5.8.x / 5.10.x / 5.12.x)
+and AIX 4.3 or newer Perl uses the AIX native dynamic loading interface
+in the so called runtime linking mode instead of the emulated interface
+that was used in Perl releases 5.6.1 and earlier or, for AIX releases
+4.2 and earlier. This change does break backward compatibility with
+compiled modules from earlier Perl releases. The change was made to make
+Perl more compliant with other applications like Apache/mod_perl which are
+using the AIX native interface. This change also enables the use of
+C++ code with static constructors and destructors in Perl extensions,
+which was not possible using the emulated interface.
+
+It is highly recommended to use the new interface.
+
+=head2 Using Large Files with Perl
+
+Should yield no problems.
+
+=head2 Threaded Perl
+
+Should yield no problems with AIX 5.1 / 5.2 / 5.3 and 6.1.
+
+IBM uses the AIX system Perl (V5.6.0 on AIX 5.1 and V5.8.2 on
+AIX 5.2 / 5.3 and 6.1; V5.8.8 on AIX 5.3 TL11 and AIX 6.1 TL4) for
+some AIX system scripts. If you switch the links in /usr/bin from the
+AIX system Perl (/usr/opt/perl5) to the newly build Perl then you
+get the same features as with the IBM AIX system Perl if the threaded
+options are used.
+
+The threaded Perl build works also on AIX 5.1 but the IBM Perl
+build (Perl v5.6.0) is not threaded on AIX 5.1.
+
+Perl 5.12 is not compatible with the IBM fileset perl.libext.
+
+=head2 64-bit Perl
+
+If your AIX system is installed with 64-bit support, you can expect 64-bit
+configurations to work. If you want to use 64-bit Perl on AIX 6.1
+you need an APAR for a libc.a bug which affects (n)dbm_XXX functions.
+The APAR number for this problem is IZ39077.
+
+If you need more memory (larger data segment) for your Perl programs you
+can set:
+
+    /etc/security/limits
+    default:                    (or your user)
+        data = -1               (default is 262144 * 512 byte)
+
+With the default setting the size is limited to 128MB.
+The -1 removes this limit. If the "make test" fails please change
+your /etc/security/limits as stated above.
+
+=head2 Recommended Options AIX 5.1/5.2/5.3 and 6.1 (threaded/32-bit)
+
+With the following options you get a threaded Perl version which
+passes all make tests in threaded 32-bit mode, which is the default
+configuration for the Perl builds that AIX ships with.
+
+    rm config.sh
+    ./Configure \
+    -d \
+    -Dcc=cc_r \
+    -Duseshrplib \
+    -Dusethreads \
+    -Dprefix=/usr/opt/perl5_32
+
+The -Dprefix option will install Perl in a directory parallel to the 
+IBM AIX system Perl installation.
+
+=head2 Recommended Options AIX 5.1/5.2/5.3 and 6.1 (32-bit)
+
+With the following options you get a Perl version which passes 
+all make tests in 32-bit mode.
+
+    rm config.sh
+    ./Configure \
+    -d \
+    -Dcc=cc_r \
+    -Duseshrplib \
+    -Dprefix=/usr/opt/perl5_32
+
+The -Dprefix option will install Perl in a directory parallel to the
+IBM AIX system Perl installation.
+
+=head2 Recommended Options AIX 5.1/5.2/5.3 and 6.1 (threaded/64-bit)
+
+With the following options you get a threaded Perl version which
+passes all make tests in 64-bit mode.
+
+    export OBJECT_MODE=64 / setenv OBJECT_MODE 64 (depending on your shell)
+
+    rm config.sh
+    ./Configure \
+    -d \
+    -Dcc=cc_r \
+    -Duseshrplib \
+    -Dusethreads \
+    -Duse64bitall \
+    -Dprefix=/usr/opt/perl5_64
+
+=head2 Recommended Options AIX 5.1/5.2/5.3 and 6.1(64-bit)
+
+With the following options you get a Perl version which passes all
+make tests in 64-bit mode. 
+
+    export OBJECT_MODE=64 / setenv OBJECT_MODE 64 (depending on your shell)
+
+    rm config.sh
+    ./Configure \
+    -d \
+    -Dcc=cc_r \
+    -Duseshrplib \
+    -Duse64bitall \
+    -Dprefix=/usr/opt/perl5_64
+
+The -Dprefix option will install Perl in a directory parallel to the
+IBM AIX system Perl installation.
+
+If you choose gcc to compile 64-bit Perl then you need to add the
+following option:
+
+    -Dcc='gcc -maix64'
+
+
+=head2 Compiling Perl 5 on older AIX versions up to 4.3.3
+
+Due to the fact that AIX 4.3.3 reached end-of-service in December 31,
+2003 this information is provided as is. The Perl versions prior to
+Perl 5.8.9 could be compiled on AIX up to 4.3.3 with the following
+settings (your mileage may vary):
+
 When compiling Perl, you must use an ANSI C compiler. AIX does not ship
 an ANSI compliant C-compiler with AIX by default, but binary builds of
 gcc for AIX are widely available.
@@ -23,8 +238,16 @@ for which you have to pay: B<xlC> and B<vac>. If you decide to use either
 of these two (which is quite a lot easier than using gcc), be sure to
 upgrade to the latest available patch level. Currently:
 
-    xlC.C     3.1.4.10 or 3.6.6.0 or 5.0.2.6
-    vac.C     4.4.0.3  or 5.0.2.4
+    xlC.C     3.1.4.10 or 3.6.6.0 or 4.0.2.2 or 5.0.2.9 or 6.0.0.3
+    vac.C     4.4.0.3  or 5.0.2.6 or 6.0.0.1
+
+note that xlC has the OS version in the name as of version 4.0.2.0, so
+you will find xlC.C for AIX-5.0 as package
+
+    xlC.aix50.rte   5.0.2.0 or 6.0.0.3
+
+subversions are not the same "latest" on all OS versions. For example,
+the latest xlC-5 on aix41 is 5.0.2.9, while on aix43, it is 5.0.2.7.
 
 Perl can be compiled with either IBM's ANSI C compiler or with gcc.
 The former is recommended, as not only can it compile Perl with no
@@ -38,7 +261,7 @@ levels, optimization is turned off for the said source code files.
 Upgrading to at least 5.0.2.0 is recommended.
 
 If you decide to use gcc, make sure your installation is recent and
-complete, and be sure to read the Perl README file for more gcc-specific
+complete, and be sure to read the Perl INSTALL file for more gcc-specific
 details. Please report any hoops you had to jump through to the development
 team.
 
@@ -56,20 +279,20 @@ show the base, but is not always complete (in this example oslevel shows
     bos.rte            4.3.2.0  COMMITTED  Base Operating System Runtime
     #
 
-The same might happen to AIX 5.1 or other OS levels. As a side note, perl
+The same might happen to AIX 5.1 or other OS levels. As a side note, Perl
 cannot be built without bos.adt.syscalls and bos.adt.libm installed
 
     # lslpp -l | egrep "syscalls|libm"
     bos.adt.libm      5.1.0.25  COMMITTED  Base Application Development
-    bos.adt.syscalls  5.1.0.25  COMMITTED  System Calls Application
+    bos.adt.syscalls  5.1.0.36  COMMITTED  System Calls Application
     #
 
-=head2 Building Dynamic Extensions on AIX
+=head2 Building Dynamic Extensions on AIX E<lt> 5L
 
 AIX supports dynamically loadable objects as well as shared libraries.
 Shared libraries by convention end with the suffix .a, which is a bit
 misleading, as an archive can contain static as well as dynamic members.
-For perl dynamically loaded objects we use the .so suffix also used on
+For Perl dynamically loaded objects we use the .so suffix also used on
 many other platforms.
 
 Note that starting from Perl 5.7.2 (and consequently 5.8.0) and AIX 4.3
@@ -77,10 +300,10 @@ or newer Perl uses the AIX native dynamic loading interface in the so
 called runtime linking mode instead of the emulated interface that was
 used in Perl releases 5.6.1 and earlier or, for AIX releases 4.2 and
 earlier.  This change does break backward compatibility with compiled
-modules from earlier perl releases.  The change was made to make Perl
+modules from earlier Perl releases.  The change was made to make Perl
 more compliant with other applications like Apache/mod_perl which are
 using the AIX native interface. This change also enables the use of C++
-code with static constructors and destructors in perl extensions, which
+code with static constructors and destructors in Perl extensions, which
 was not possible using the emulated interface.
 
 =head2 The IBM ANSI C Compiler
@@ -89,16 +312,16 @@ All defaults for Configure can be used.
 
 If you've chosen to use vac 4, be sure to run 4.4.0.3. Older versions
 will turn up nasty later on. For vac 5 be sure to run at least 5.0.1.0,
-but vac 5.0.2.3 or up is highly recommended. Note that since IBM has
-removed vac 5.0.2.1 and 5.0.2.2 from the software depot, these versions
-should be considered obsolete.
+but vac 5.0.2.6 or up is highly recommended. Note that since IBM has
+removed vac 5.0.2.1 through 5.0.2.5 from the software depot, these
+versions should be considered obsolete.
 
 Here's a brief lead of how to upgrade the compiler to the latest
 level.  Of course this is subject to changes.  You can only upgrade
 versions from ftp-available updates if the first three digit groups
 are the same (in where you can skip intermediate unlike the patches
-in the developer snapshots of perl), or to one version up where the
-`base' is available.  In other words, the AIX compiler patches are
+in the developer snapshots of Perl), or to one version up where the
+"base" is available.  In other words, the AIX compiler patches are
 cumulative.
 
  vac.C.4.4.0.1 => vac.C.4.4.0.3  is OK     (vac.C.4.4.0.2 not needed)
@@ -156,7 +379,8 @@ On AIX 4.3 using vac, we continue:
  -rw-rw-r--   1 45776101 1        13592576 Apr 16 2001  vac.C.5.0.2.0.bff
  -rw-rw-r--   1 45776101 1        14133248 Apr  9 2002  vac.C.5.0.2.3.bff
  -rw-rw-r--   1 45776101 1        14173184 May 20 2002  vac.C.5.0.2.4.bff
- # wget ftp://ftp.software.ibm.com/aix/fixes/v4/other/vac.C.5.0.2.4.bff
+ -rw-rw-r--   1 45776101 1        14192640 Nov 22 2002  vac.C.5.0.2.6.bff
+ # wget ftp://ftp.software.ibm.com/aix/fixes/v4/other/vac.C.5.0.2.6.bff
  #
 
 Likewise on all other OS levels. Then execute the following command, and
@@ -164,7 +388,7 @@ fill in its choices
 
  # smit install_update
   -> Install and Update from LATEST Available Software
-  * INPUT device / directory for software [ vac.C.5.0.2.4.bff    ]
+  * INPUT device / directory for software [ vac.C.5.0.2.6.bff    ]
   [ OK ]
   [ OK ]
 
@@ -174,26 +398,70 @@ If you like a more web-like approach, a good start point can be
 http://www14.software.ibm.com/webapp/download/downloadaz.jsp and click
 "C for AIX", and follow the instructions.
 
-=head2 Using GNU's gcc for building perl
+=head2 The usenm option
+
+If linking miniperl
+
+ cc -o miniperl ... miniperlmain.o opmini.o perl.o ... -lm -lc ...
+
+causes error like this
+
+ ld: 0711-317 ERROR: Undefined symbol: .aintl
+ ld: 0711-317 ERROR: Undefined symbol: .copysignl
+ ld: 0711-317 ERROR: Undefined symbol: .syscall
+ ld: 0711-317 ERROR: Undefined symbol: .eaccess
+ ld: 0711-317 ERROR: Undefined symbol: .setresuid
+ ld: 0711-317 ERROR: Undefined symbol: .setresgid
+ ld: 0711-317 ERROR: Undefined symbol: .setproctitle
+ ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
+
+you could retry with
+
+ make realclean
+ rm config.sh
+ ./Configure -Dusenm ...
+
+which makes Configure to use the C<nm> tool when scanning for library
+symbols, which usually is not done in AIX.
+
+Related to this, you probably should not use the C<-r> option of
+Configure in AIX, because that affects of how the C<nm> tool is used.
 
-Using gcc-3.0 (tested with 3.0.4) now works out of the box, as do
-recent gcc-2.9 builds available directly from IBM as part of their Linux
-compatibility packages, available here:
+=head2 Using GNU's gcc for building Perl
+
+Using gcc-3.x (tested with 3.0.4, 3.1, and 3.2) now works out of the box,
+as do recent gcc-2.9 builds available directly from IBM as part of their
+Linux compatibility packages, available here:
 
   http://www.ibm.com/servers/aix/products/aixos/linux/
 
-=head2 Using Large Files with Perl
+=head2 Using Large Files with Perl E<lt> 5L
 
 Should yield no problems.
 
-=head2 Threaded Perl
+=head2 Threaded Perl E<lt> 5L
 
 Threads seem to work OK, though at the moment not all tests pass when
-threads are used in combination with 64bit configurations.
+threads are used in combination with 64-bit configurations.
 
-=head2 64-bit Perl
+You may get a warning when doing a threaded build:
+
+  "pp_sys.c", line 4640.39: 1506-280 (W) Function argument assignment 
+  between types "unsigned char*" and "const void*" is not allowed.
+
+The exact line number may vary, but if the warning (W) comes from a line
+line this
+
+  hent = PerlSock_gethostbyaddr(addr, (Netdb_hlen_t) addrlen, addrtype);
+
+in the "pp_ghostent" function, you may ignore it safely.  The warning
+is caused by the reentrant variant of gethostbyaddr() having a slightly
+different prototype than its non-reentrant variant, but the difference
+is not really significant here.
+
+=head2 64-bit Perl E<lt> 5L
 
-If your AIX is installed with 64-bit support, you can expect 64bit
+If your AIX is installed with 64-bit support, you can expect 64-bit
 configurations to work. In combination with threads some tests might
 still fail.
 
@@ -207,12 +475,13 @@ has an obscure bug where the various functions related to time
 (such as time() and gettimeofday()) return broken values, and
 therefore in AIX 4.2 Perl is not linked against the libC_r.
 
-=head1 AUTHOR
+=head1 AUTHORS
 
-H.Merijn Brand <h.m.brand@hccnet.nl>
+H.Merijn Brand <h.m.brand@xs4all.nl>
+Rainer Tammer <tammer@tammer.net>
 
 =head1 DATE
 
-Version 0.0.5: 22 May 2002
+Version 5.12.0 / 2010-03-20
 
 =cut