| 1 | If you read this file _as_is_, just ignore the funny characters you see. |
| 2 | It is written in the POD format (see pod/perlpod.pod) which is specially |
| 3 | designed to be readable as is. |
| 4 | |
| 5 | =head1 NAME |
| 6 | |
| 7 | perltru64 - Perl version 5 on Tru64 (formerly known as Digital UNIX formerly known as DEC OSF/1) systems |
| 8 | |
| 9 | =head1 DESCRIPTION |
| 10 | |
| 11 | This document describes various features of HP's (formerly Compaq's, |
| 12 | formerly Digital's) Unix operating system (Tru64) that will affect |
| 13 | how Perl version 5 (hereafter just Perl) is configured, compiled |
| 14 | and/or runs. |
| 15 | |
| 16 | =head2 Compiling Perl 5 on Tru64 |
| 17 | |
| 18 | The recommended compiler to use in Tru64 is the native C compiler. |
| 19 | The native compiler produces much faster code (the speed difference is |
| 20 | noticeable: several dozen percentages) and also more correct code: if |
| 21 | you are considering using the GNU C compiler you should use at the |
| 22 | very least the release of 2.95.3 since all older gcc releases are |
| 23 | known to produce broken code when compiling Perl. One manifestation |
| 24 | of this brokenness is the lib/sdbm test dumping core; another is many |
| 25 | of the op/regexp and op/pat, or ext/Storable tests dumping core |
| 26 | (the exact pattern of failures depending on the GCC release and |
| 27 | optimization flags). |
| 28 | |
| 29 | gcc 3.2.1 is known to work okay with Perl 5.8.0. However, when |
| 30 | optimizing the toke.c gcc likes to have a lot of memory, 256 megabytes |
| 31 | seems to be enough. The default setting of the process data section |
| 32 | in Tru64 should be one gigabyte, but some sites/setups might have |
| 33 | lowered that. The configuration process of Perl checks for too low |
| 34 | process limits, and lowers the optimization for the toke.c if |
| 35 | necessary, and also gives advice on how to raise the process limits. |
| 36 | |
| 37 | Also, Configure might abort with |
| 38 | |
| 39 | Build a threading Perl? [n] |
| 40 | Configure[2437]: Syntax error at line 1 : 'config.sh' is not expected. |
| 41 | |
| 42 | This indicates that Configure is being run with a broken Korn shell |
| 43 | (even though you think you are using a Bourne shell by using |
| 44 | "sh Configure" or "./Configure"). The Korn shell bug has been reported |
| 45 | to Compaq as of February 1999 but in the meanwhile, the reason ksh is |
| 46 | being used is that you have the environment variable BIN_SH set to |
| 47 | 'xpg4'. This causes /bin/sh to delegate its duties to /bin/posix/sh |
| 48 | (a ksh). Unset the environment variable and rerun Configure. |
| 49 | |
| 50 | =head2 Using Large Files with Perl on Tru64 |
| 51 | |
| 52 | In Tru64 Perl is automatically able to use large files, that is, |
| 53 | files larger than 2 gigabytes, there is no need to use the Configure |
| 54 | -Duselargefiles option as described in INSTALL (though using the option |
| 55 | is harmless). |
| 56 | |
| 57 | =head2 Threaded Perl on Tru64 |
| 58 | |
| 59 | If you want to use threads, you should primarily use the Perl |
| 60 | 5.8.0 threads model by running Configure with -Duseithreads. |
| 61 | |
| 62 | Perl threading is going to work only in Tru64 4.0 and newer releases, |
| 63 | older operating releases like 3.2 aren't probably going to work |
| 64 | properly with threads. |
| 65 | |
| 66 | In Tru64 V5 (at least V5.1A, V5.1B) you cannot build threaded Perl with gcc |
| 67 | because the system header <pthread.h> explicitly checks for supported |
| 68 | C compilers, gcc (at least 3.2.2) not being one of them. But the |
| 69 | system C compiler should work just fine. |
| 70 | |
| 71 | =head2 Long Doubles on Tru64 |
| 72 | |
| 73 | You cannot Configure Perl to use long doubles unless you have at least |
| 74 | Tru64 V5.0, the long double support simply wasn't functional enough |
| 75 | before that. Perl's Configure will override attempts to use the long |
| 76 | doubles (you can notice this by Configure finding out that the modfl() |
| 77 | function does not work as it should). |
| 78 | |
| 79 | At the time of this writing (June 2002), there is a known bug in the |
| 80 | Tru64 libc printing of long doubles when not using "e" notation. |
| 81 | The values are correct and usable, but you only get a limited number |
| 82 | of digits displayed unless you force the issue by using C<printf |
| 83 | "%.33e",$num> or the like. For Tru64 versions V5.0A through V5.1A, a |
| 84 | patch is expected sometime after perl 5.8.0 is released. If your libc |
| 85 | has not yet been patched, you'll get a warning from Configure when |
| 86 | selecting long doubles. |
| 87 | |
| 88 | =head2 DB_File tests failing on Tru64 |
| 89 | |
| 90 | The DB_File tests (db-btree.t, db-hash.t, db-recno.t) may fail you |
| 91 | have installed a newer version of Berkeley DB into the system and the |
| 92 | -I and -L compiler and linker flags introduce version conflicts with |
| 93 | the DB 1.85 headers and libraries that came with the Tru64. For example, |
| 94 | mixing a DB v2 library with the DB v1 headers is a bad idea. Watch |
| 95 | out for Configure options -Dlocincpth and -Dloclibpth, and check your |
| 96 | /usr/local/include and /usr/local/lib since they are included by default. |
| 97 | |
| 98 | The second option is to explicitly instruct Configure to detect the |
| 99 | newer Berkeley DB installation, by supplying the right directories with |
| 100 | C<-Dlocincpth=/some/include> and C<-Dloclibpth=/some/lib> B<and> before |
| 101 | running "make test" setting your LD_LIBRARY_PATH to F</some/lib>. |
| 102 | |
| 103 | The third option is to work around the problem by disabling the |
| 104 | DB_File completely when build Perl by specifying -Ui_db to Configure, |
| 105 | and then using the BerkeleyDB module from CPAN instead of DB_File. |
| 106 | The BerkeleyDB works with Berkeley DB versions 2.* or greater. |
| 107 | |
| 108 | The Berkeley DB 4.1.25 has been tested with Tru64 V5.1A and found |
| 109 | to work. The latest Berkeley DB can be found from L<http://www.sleepycat.com>. |
| 110 | |
| 111 | =head2 64-bit Perl on Tru64 |
| 112 | |
| 113 | In Tru64 Perl's integers are automatically 64-bit wide, there is |
| 114 | no need to use the Configure -Duse64bitint option as described |
| 115 | in INSTALL. Similarly, there is no need for -Duse64bitall |
| 116 | since pointers are automatically 64-bit wide. |
| 117 | |
| 118 | =head2 Warnings about floating-point overflow when compiling Perl on Tru64 |
| 119 | |
| 120 | When compiling Perl in Tru64 you may (depending on the compiler |
| 121 | release) see two warnings like this |
| 122 | |
| 123 | cc: Warning: numeric.c, line 104: In this statement, floating-point overflow occurs in evaluating the expression "1.8e308". (floatoverfl) |
| 124 | return HUGE_VAL; |
| 125 | -----------^ |
| 126 | |
| 127 | and when compiling the POSIX extension |
| 128 | |
| 129 | cc: Warning: const-c.inc, line 2007: In this statement, floating-point overflow occurs in evaluating the expression "1.8e308". (floatoverfl) |
| 130 | return HUGE_VAL; |
| 131 | -------------------^ |
| 132 | |
| 133 | The exact line numbers may vary between Perl releases. The warnings |
| 134 | are benign and can be ignored: in later C compiler releases the warnings |
| 135 | should be gone. |
| 136 | |
| 137 | When the file F<pp_sys.c> is being compiled you may (depending on the |
| 138 | operating system release) see an additional compiler flag being used: |
| 139 | C<-DNO_EFF_ONLY_OK>. This is normal and refers to a feature that is |
| 140 | relevant only if you use the C<filetest> pragma. In older releases of |
| 141 | the operating system the feature was broken and the NO_EFF_ONLY_OK |
| 142 | instructs Perl not to use the feature. |
| 143 | |
| 144 | =head1 Testing Perl on Tru64 |
| 145 | |
| 146 | During "make test" the C<comp/cpp> will be skipped because on Tru64 it |
| 147 | cannot be tested before Perl has been installed. The test refers to |
| 148 | the use of the C<-P> option of Perl. |
| 149 | |
| 150 | =head1 ext/ODBM_File/odbm Test Failing With Static Builds |
| 151 | |
| 152 | The ext/ODBM_File/odbm is known to fail with static builds |
| 153 | (Configure -Uusedl) due to a known bug in Tru64's static libdbm |
| 154 | library. The good news is that you very probably don't need to ever |
| 155 | use the ODBM_File extension since more advanced NDBM_File works fine, |
| 156 | not to mention the even more advanced DB_File. |
| 157 | |
| 158 | =head1 Perl Fails Because Of Unresolved Symbol sockatmark |
| 159 | |
| 160 | If you get an error like |
| 161 | |
| 162 | Can't load '.../OSF1/lib/perl5/5.8.0/alpha-dec_osf/auto/IO/IO.so' for module IO: Unresolved symbol in .../lib/perl5/5.8.0/alpha-dec_osf/auto/IO/IO.so: sockatmark at .../lib/perl5/5.8.0/alpha-dec_osf/XSLoader.pm line 75. |
| 163 | |
| 164 | you need to either recompile your Perl in Tru64 4.0D or upgrade your |
| 165 | Tru64 4.0D to at least 4.0F: the sockatmark() system call was |
| 166 | added in Tru64 4.0F, and the IO extension refers that symbol. |
| 167 | |
| 168 | =head1 AUTHOR |
| 169 | |
| 170 | Jarkko Hietaniemi <jhi@iki.fi> |
| 171 | |
| 172 | =cut |