This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate mainline.
[perl5.git] / hints / dec_osf.sh
CommitLineData
a0d0e21e 1# hints/dec_osf.sh
8e964347 2
b971f6e4 3# * If you want to debug perl or want to send a
8e964347
AB
4# stack trace for inclusion into an bug report, call
5# Configure with the additional argument -Doptimize=-g2
6# or uncomment this assignment to "optimize":
7#
8#optimize=-g2
9#
8a019ce7
JH
10# If you want both to optimise and debug with the DEC cc
11# you must have -g3, e.g. "-O4 -g3", and (re)run Configure.
12#
b971f6e4 13# * gcc can always have both -g and optimisation on.
8a019ce7 14#
b971f6e4 15# * debugging optimised code, no matter what compiler
8a019ce7
JH
16# one is using, can be surprising and confusing because of
17# the optimisation tricks like code motion, code removal,
18# loop unrolling, and inlining. The source code and the
19# executable code simply do not agree any more while in
20# mid-execution, the optimiser only cares about the results.
21#
b971f6e4 22# * Configure will automatically add the often quoted
f2c69087
JH
23# -DDEBUGGING for you if the -g is specified.
24#
b971f6e4 25# * There is even more optimisation available in the new
f2c69087
JH
26# (GEM) DEC cc: -O5 and -fast. "man cc" will tell more about them.
27# The jury is still out whether either or neither help for Perl
28# and how much. Based on very quick testing, -fast boosts
29# raw data copy by about 5-15% (-fast brings in, among other
30# things, inlined, ahem, fast memcpy()), while on the other
31# hand searching things (index, m//, s///), seems to get slower.
32# Your mileage will vary.
8e964347 33#
b971f6e4 34# * The -std is needed because the following compiled
e60a08f8
JH
35# without the -std and linked with -lm
36#
37# #include <math.h>
38# #include <stdio.h>
39# int main(){short x=10,y=sqrt(x);printf("%d\n",y);}
40#
41# will in Digital UNIX 3.* and 4.0b print 0 -- and in Digital
42# UNIX 4.0{,a} dump core: Floating point exception in the printf(),
43# the y has become a signaling NaN.
44#
b971f6e4 45# * Compilation warnings like:
46#
47# "Undefined the ANSI standard macro ..."
48#
49# can be ignored, at least while compiling the POSIX extension
50# and especially if using the sfio (the latter is not a standard
51# part of Perl, never mind if it says little to you).
52#
8e964347 53
e60a08f8
JH
54# If using the DEC compiler we must find out the DEC compiler style:
55# the style changed between Digital UNIX (aka DEC OSF/1) 3 and
56# Digital UNIX 4. The old compiler was originally from Ultrix and
57# the MIPS company, the new compiler is originally from the VAX world
58# and it is called GEM. Many of the options we are going to use depend
59# on the compiler style.
60
a68015de
JH
61cc=${cc:-cc}
62
6c7aff00
JH
63case "`$cc -v 2>&1 | grep cc`" in
64*gcc*) isgcc=gcc ;;
65esac
66
b691c02f
JH
67# do NOT, I repeat, *NOT* take away the leading tabs
68# Configure Black Magic (TM)
b971f6e4 69 # reset
e60a08f8 70 _DEC_cc_style=
6c7aff00 71case "$isgcc" in
a4349bea
MB
72gcc) if [ "X$gccversion" = "X" ]; then
73 # Done too late in Configure if hinted
74 gccversion=`$cc --version | sed 's/.*(GCC) *//'`
75 fi
993a793c
RO
76 set $gccversion
77 if test "$1" -lt 2 -o \( "$1" -eq 2 -a \( "$2" -lt 95 -o \( "$2" -eq 95 -a "$3" -lt 3 \) \) \); then
2cae8c0d
JH
78 cat >&4 <<EOF
79
993a793c
RO
80*** Your cc seems to be gcc and its version ($gccversion) seems to be
81*** less than 2.95.3. This is not a good idea since old versions of gcc
61f70568
JB
82*** are known to produce buggy code when compiling Perl (and no doubt for
83*** other programs, too).
3f8b8817 84***
61f70568
JB
85*** Therefore, I strongly suggest upgrading your gcc. (Why don't you use
86*** the vendor cc is also a good question. It comes with the operating
3f8b8817 87*** system and produces good code.)
2cae8c0d
JH
88
89Cannot continue, aborting.
90
91EOF
92 exit 1
93 fi
3f8b8817
JH
94 if test "$1" -eq 2 -a "$2" -eq 95 -a "$3" -le 2; then
95 cat >&4 <<EOF
96
97*** Note that as of gcc 2.95.2 (19991024) and Perl 5.6.0 (March 2000)
98*** if the said Perl is compiled with the said gcc the lib/sdbm test
61f70568
JB
99*** may dump core (meaning that the SDBM_File extension is unusable).
100*** As this core dump never happens with the vendor cc, this is most
101*** probably a lingering bug in gcc. Therefore unless you have a better
102*** gcc installation you are still better off using the vendor cc.
3f8b8817
JH
103
104Since you explicitly chose gcc, I assume that you know what are doing.
105
106EOF
107 fi
2cae8c0d 108 ;;
e60a08f8 109*) # compile something small: taint.c is fine for this.
4de7e3a2 110 ccversion=`cc -V | awk '/(Compaq|DEC) C/ {print $3}' | grep '^V'`
e60a08f8 111 # the main point is the '-v' flag of 'cc'.
52c7d5b6 112 case "`cc -v -I. -c taint.c -o taint$$.o 2>&1`" in
e60a08f8 113 */gemc_cc*) # we have the new DEC GEM CC
dfa3a3d3 114 _DEC_cc_style=new
8a019ce7 115 ;;
e60a08f8 116 *) # we have the old MIPS CC
dfa3a3d3 117 _DEC_cc_style=old
8a019ce7 118 ;;
e60a08f8
JH
119 esac
120 # cleanup
52c7d5b6 121 rm -f taint$$.o
e60a08f8
JH
122 ;;
123esac
124
b971f6e4 125# be nauseatingly ANSI
6c7aff00
JH
126case "$isgcc" in
127gcc) ccflags="$ccflags -ansi"
b971f6e4 128 ;;
129*) ccflags="$ccflags -std"
130 ;;
131esac
132
133# for gcc the Configure knows about the -fpic:
134# position-independent code for dynamic loading
135
e60a08f8
JH
136# we want optimisation
137
138case "$optimize" in
6c7aff00
JH
139'') case "$isgcc" in
140 gcc) optimize='-O3' ;;
e60a08f8 141 *) case "$_DEC_cc_style" in
6c7aff00 142 new) optimize='-O4' ;;
e60a08f8
JH
143 old) optimize='-O2 -Olimit 3200' ;;
144 esac
b971f6e4 145 ccflags="$ccflags -D_INTRINSICS"
e60a08f8 146 ;;
8e964347
AB
147 esac
148 ;;
1fc4cb55 149esac
28757baa 150
6c7aff00
JH
151# we want dynamic fp rounding mode, and we want ieee exception semantics
152case "$isgcc" in
a59bce4b
JH
153gcc) ;;
154*) case "$_DEC_cc_style" in
6c7aff00
JH
155 new) ccflags="$ccflags -fprm d -ieee" ;;
156 esac
157 ;;
158esac
159
313489a2
SB
160# Make glibpth agree with the compiler suite. Note that /shlib
161# is not here. That's on purpose. Even though that's where libc
162# really lives from V4.0 on, the linker (and /sbin/loader) won't
163# look there by default. The sharable /sbin utilities were all
164# built with "-Wl,-rpath,/shlib" to get around that. This makes
165# no attempt to figure out the additional location(s) searched by
166# gcc, since not all versions of gcc are easily coerced into
167# revealing that information.
b0362887
SB
168glibpth="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc"
169glibpth="$glibpth /usr/lib /usr/local/lib /var/shlib"
313489a2 170
8e964347
AB
171# dlopen() is in libc
172libswanted="`echo $libswanted | sed -e 's/ dl / /'`"
173
b971f6e4 174# libPW contains nothing useful for perl
8a019ce7
JH
175libswanted="`echo $libswanted | sed -e 's/ PW / /'`"
176
723e14d4
SB
177# libnet contains nothing useful for perl here, and doesn't work
178libswanted="`echo $libswanted | sed -e 's/ net / /'`"
179
b971f6e4 180# libbsd contains nothing used by perl that is not already in libc
8a019ce7
JH
181libswanted="`echo $libswanted | sed -e 's/ bsd / /'`"
182
b971f6e4 183# libc need not be separately listed
8a019ce7
JH
184libswanted="`echo $libswanted | sed -e 's/ c / /'`"
185
b971f6e4 186# ndbm is already in libc
187libswanted="`echo $libswanted | sed -e 's/ ndbm / /'`"
8a019ce7
JH
188
189# the basic lddlflags used always
190lddlflags='-shared -expect_unresolved "*"'
191
b971f6e4 192# Fancy compiler suites use optimising linker as well as compiler.
193# <spider@Orb.Nashua.NH.US>
b8f0c030 194case "`uname -r`" in
b971f6e4 195*[123].*) # old loader
196 lddlflags="$lddlflags -O3"
197 ;;
a07564da
KS
198*) if $test "X$optimize" = "X$undef"; then
199 lddlflags="$lddlflags -msym"
200 else
baa8820a 201 case "`/usr/sbin/sizer -v`" in
e3159d07
JH
202 *4.0D*)
203 # QAR 56761: -O4 + .so may produce broken code,
204 # fixed in 4.0E or better.
205 ;;
206 *)
207 lddlflags="$lddlflags $optimize"
208 ;;
209 esac
210 # -msym: If using a sufficiently recent /sbin/loader,
211 # keep the module symbols with the modules.
baa8820a 212 lddlflags="$lddlflags -msym -std"
a07564da 213 fi
b971f6e4 214 ;;
215esac
216# Yes, the above loses if gcc does not use the system linker.
217# If that happens, let me know about it. <jhi@iki.fi>
218
8a019ce7 219
b971f6e4 220# If debugging or (old systems and doing shared)
221# then do not strip the lib, otherwise, strip.
222# As noted above the -DDEBUGGING is added automagically by Configure if -g.
8a019ce7
JH
223case "$optimize" in
224 *-g*) ;; # left intentionally blank
b8f0c030 225*) case "`uname -r`" in
b971f6e4 226 *[123].*)
227 case "$useshrplib" in
228 false|undef|'') lddlflags="$lddlflags -s" ;;
229 esac
230 ;;
8a019ce7 231 *) lddlflags="$lddlflags -s"
b971f6e4 232 ;;
233 esac
234 ;;
8a019ce7 235esac
8e964347
AB
236
237#
313489a2
SB
238# Make embedding in things like INN and Apache more memory friendly.
239# Keep it overridable on the Configure command line, though, so that
240# "-Uuseshrplib" prevents this default.
241#
242
2bf2710f
GS
243case "$_DEC_cc_style.$useshrplib" in
244 new.) useshrplib="$define" ;;
245esac
313489a2 246
85ab1d1d
JH
247# The EFF_ONLY_OK from <sys/access.h> is present but dysfunctional for
248# [RWX]_OK as of Digital UNIX 4.0[A-D]?. If and when this gets fixed,
249# please adjust this appropriately. See also pp_sys.c just before the
250# emulate_eaccess().
5ff3f7a4 251
baa8820a
JH
252# Fixed in V5.0A.
253case "`/usr/sbin/sizer -v`" in
f60a5d46 254*5.0[A-Z]*|*5.[1-9]*|*[6-9].[0-9]*)
baa8820a
JH
255 : ok
256 ;;
257*)
258# V5.0 or previous
5ff3f7a4 259pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"'
baa8820a
JH
260 ;;
261esac
5ff3f7a4 262
6b8eaf93
JH
263# The off_t is already 8 bytes, so we do have largefileness.
264
f60a5d46 265cat > UU/usethreads.cbu <<'EOCBU'
104d25b7
JH
266# This script UU/usethreads.cbu will get 'called-back' by Configure
267# after it has prompted the user for whether to use threads.
104d25b7
JH
268case "$usethreads" in
269$define|true|[yY]*)
75d72f2c 270 # Threads interfaces changed with V4.0.
6c7aff00
JH
271 case "$isgcc" in
272 gcc) ccflags="-D_REENTRANT $ccflags" ;;
75d72f2c
JH
273 *) case "`uname -r`" in
274 *[123].*) ccflags="-threads $ccflags" ;;
275 *) ccflags="-pthread $ccflags" ;;
276 esac
104d25b7 277 ;;
75d72f2c
JH
278 esac
279 case "`uname -r`" in
280 *[123].*) libswanted="$libswanted pthreads mach exc c_r" ;;
281 *) libswanted="$libswanted pthread exc" ;;
282 esac
e883c329 283
baa8820a
JH
284 case "$usemymalloc" in
285 '')
286 usemymalloc='n'
287 ;;
288 esac
a48ec845
JH
289 # These symbols are renamed in <time.h> so
290 # that the Configure hasproto doesn't see them.
291 d_asctime_r_proto="$define"
292 d_ctime_r_proto="$define"
293 d_gmtime_r_proto="$define"
294 d_localtime_r_proto="$define"
104d25b7
JH
295 ;;
296esac
297EOCBU
298
f60a5d46
JH
299cat > UU/uselongdouble.cbu <<'EOCBU'
300# This script UU/uselongdouble.cbu will get 'called-back' by Configure
301# after it has prompted the user for whether to use long doubles.
302case "$uselongdouble" in
bef5f079
JH
303$define|true|[yY]*)
304 case "`/usr/sbin/sizer -v`" in
305 *[1-4].0*) cat >&4 <<EOF
306
307***
308*** Sorry, you cannot use long doubles in pre-V5.0 releases of Tru64.
309***
310
311Cannot continue, aborting.
312
313EOF
314 exit 1
315 ;;
fa17d112
SB
316 *)
317 # Test whether libc's been fixed yet.
318 cat >try.c <<\TRY
319#include <stdio.h>
320int main(int argc, char **argv)
321{
322 unsigned long uvmax = ~0UL;
323 long double ld = uvmax + 0.0L;
324 char buf1[30], buf2[30];
325
326 (void) sprintf(buf1, "%lu", uvmax);
327 (void) sprintf(buf2, "%.0Lf", ld);
328 return strcmp(buf1, buf2) != 0;
329}
330TRY
331 # Don't bother trying to work with Configure's idea of
332 # cc and the various flags. This might not work as-is
333 # with gcc -- but we're testing libc, not the compiler.
334 if cc -o try -std try.c && ./try
335 then
336 : ok
337 else
338 cat <<\UGLY >&4
339!
340Warning! Your libc has not yet been patched so that its "%Lf" format for
341printing long doubles shows all the significant digits. You will get errors
342in the t/op/numconvert test because of this. (The data is still good
343internally, and the "%e" format of printf() or sprintf() in perl will still
344produce valid results.) See README.tru64 for additional details.
345
346Continuing anyway.
347!
348UGLY
349 fi
350 $rm -f try try.c
bef5f079 351 esac
bef5f079 352 ;;
f60a5d46
JH
353esac
354EOCBU
355
1cade9fc 356case "`/usr/sbin/sizer -v`" in
bef5f079 357*[1-4].0*) d_modfl=undef ;; # must wait till 5.0
1cade9fc
JH
358esac
359
a4ccfa76 360# Keep those leading tabs.
c93bd003 361 needusrshlib=''
a4ccfa76
JH
362 old_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
363for p in $loclibpth
364do
365 if test -n "`ls $p/libdb.so* 2>/dev/null`"; then
366 needusrshlib=yes
c93bd003 367 fi
a4ccfa76
JH
368 if test -d $p; then
369 echo "Appending $p to LD_LIBRARY_PATH." >& 4
370 case "$LD_LIBRARY_PATH" in
371 '') LD_LIBRARY_PATH=$p ;;
372 *) LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$p ;;
373 esac
374 fi
375done
376case "$LD_LIBRARY_PATH" in
377"$old_LD_LIBRARY_PATH") ;;
378*) echo "LD_LIBRARY_PATH is now $LD_LIBRARY_PATH." >& 4 ;;
c93bd003 379esac
a4ccfa76
JH
380# This is evil but I can't think of a nice workaround:
381# the /usr/shlib/libdb.so needs to be seen first,
382# or running Configure will fail.
383if test -n "$needusrshlib"; then
384 echo "Prepending /usr/shlib to loclibpth." >& 4
385 loclibpth="/usr/shlib $loclibpth"
386 echo "loclibpth is now $loclibpth." >& 4
387fi
c93bd003 388
313489a2 389#
e60a08f8
JH
390# Unset temporary variables no more needed.
391#
392
393unset _DEC_cc_style
394
395#
8e964347
AB
396# History:
397#
85ab1d1d
JH
398# perl5.005_51:
399#
400# September-1998 Jarkko Hietaniemi <jhi@iki.fi>
401#
402# * Added the -DNO_EFF_ONLY_OK flag ('use filetest;' support).
403#
313489a2
SB
404# perl5.004_57:
405#
406# 19-Dec-1997 Spider Boardman <spider@Orb.Nashua.NH.US>
407#
85ab1d1d 408# * Newer Digital UNIX compilers enforce signaling for NaN without
313489a2
SB
409# -ieee. Added -fprm d at the same time since it's friendlier for
410# embedding.
411#
412# * Fixed the library search path to match cc, ld, and /sbin/loader.
413#
414# * Default to building -Duseshrplib on newer systems. -Uuseshrplib
415# still overrides.
416#
417# * Fix -pthread additions for useshrplib. ld has no -pthread option.
418#
419#
723e14d4
SB
420# perl5.004_04:
421#
422# 19-Sep-1997 Spider Boardman <spider@Orb.Nashua.NH.US>
423#
424# * libnet on Digital UNIX is for JAVA, not for sockets.
425#
426#
b971f6e4 427# perl5.003_28:
428#
429# 22-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi>
430#
431# * Restructuring Spider's suggestions.
432#
433# * Older Digital UNIXes cannot handle -Olimit ... for $lddlflags.
434#
435# * ld -s cannot be used in older Digital UNIXes when doing shared.
436#
437#
438# 21-Feb-1997 Spider Boardman <spider@Orb.Nashua.NH.US>
439#
440# * -hidden removed.
441#
442# * -DSTANDARD_C removed.
443#
444# * -D_INTRINSICS added. (that -fast does not seem to buy much confirmed)
445#
446# * odbm not in libc, only ndbm. Therefore dbm back to $libswanted.
447#
448# * -msym for the newer runtime loaders.
449#
450# * $optimize also in $lddflags.
451#
452#
e60a08f8
JH
453# perl5.003_27:
454#
455# 18-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi>
456#
457# * unset _DEC_cc_style and more commentary on -std.
458#
459#
dfa3a3d3
CS
460# perl5.003_26:
461#
462# 15-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi>
463#
e60a08f8 464# * -std and -ansi.
dfa3a3d3
CS
465#
466#
f2c69087
JH
467# perl5.003_24:
468#
469# 30-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi>
470#
471# * Fixing the note on -DDEBUGGING.
472#
473# * Note on -O5 -fast.
474#
475#
8a019ce7
JH
476# perl5.003_23:
477#
478# 26-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi>
479#
480# * Notes on how to do both optimisation and debugging.
481#
482#
483# 25-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi>
484#
485# * Remove unneeded libraries from $libswanted: PW, bsd, c, dbm
486#
487# * Restructure the $lddlflags build.
488#
489# * $optimize based on which compiler we have.
490#
491#
8e964347
AB
492# perl5.003_22:
493#
494# 23-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
495#
496# * Added comments 'how to create a debugging version of perl'
497#
498# * Fixed logic of this script to prevent stripping of shared
499# objects by the loader (see ld man page for -s) is debugging
500# is set via the -g switch.
501#
502#
503# 21-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
504#
505# * now 'dl' is always removed from libswanted. Not only if
506# optimize is an empty string.
507#
508#
509# 17-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
510#
511# * Removed 'dl' from libswanted: When the FreePort binary
512# translator for Sun binaries is installed Configure concludes
513# that it should use libdl.x.yz.fpx.so :-(
514# Because the dlopen, dlclose,... calls are in the
515# C library it not necessary at all to check for the
516# dl library. Therefore dl is removed from libswanted.
517#
518#
519# 1-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
520#
521# * Set -Olimit to 3200 because perl_yylex.c got too big
522# for the optimizer.
523#