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