This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Disallow using too old gcc in {Tru64,Digital UNIX,DEC OSF/1}.
[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
PP
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
b691c02f
JH
63# do NOT, I repeat, *NOT* take away the leading tabs
64# Configure Black Magic (TM)
b971f6e4 65 # reset
e60a08f8 66 _DEC_cc_style=
8d5a0f9f 67case "`$cc -v 2>&1 | grep cc`" in
2cae8c0d
JH
68*gcc*) _gcc_version=`$cc -v 2>&1 | grep "gcc version" | sed 's%^gcc version \([0-9]*\)\.\([0-9]*\) .*%\1 \2%'`
69 set $_gcc_version
70 if test "$1" -lt 2 -o \( "$1" -eq 2 -a "$2" -lt 95 \); then
71 cat >&4 <<EOF
72
73Your cc seems to be gcc and its version seems to be less than 2.95.
74This is not a good idea since old versions of gcc are known to produce
75buggy code when compiling Perl (and no doubt for other programs, too).
76
77Therefore, I strongly suggest upgrading your gcc. (Why don't you
78use the vendor cc is also a good question. It comes with the operating
79system and produces good code.)
80
81Note that as of gcc 2.95 (19990728) and Perl 5.6.0 (end of March 2000)
82if the said Perl is compiled with the said gcc the lib/sdbm test will
83dump core. As this doesn't happen with the vendor cc, this is
84most probably a lingering bug in gcc. Therefore unless you have
85a better gcc you are still better off using the vendor cc.
86
87Cannot continue, aborting.
88
89EOF
90 exit 1
91 fi
92 ;;
e60a08f8
JH
93*) # compile something small: taint.c is fine for this.
94 # the main point is the '-v' flag of 'cc'.
52c7d5b6 95 case "`cc -v -I. -c taint.c -o taint$$.o 2>&1`" in
e60a08f8 96 */gemc_cc*) # we have the new DEC GEM CC
dfa3a3d3 97 _DEC_cc_style=new
8a019ce7 98 ;;
e60a08f8 99 *) # we have the old MIPS CC
dfa3a3d3 100 _DEC_cc_style=old
8a019ce7 101 ;;
e60a08f8
JH
102 esac
103 # cleanup
52c7d5b6 104 rm -f taint$$.o
e60a08f8
JH
105 ;;
106esac
107
b971f6e4 108# be nauseatingly ANSI
8d5a0f9f 109case "`$cc -v 2>&1 | grep gcc`" in
9607fc9c 110*gcc*) ccflags="$ccflags -ansi"
b971f6e4
PP
111 ;;
112*) ccflags="$ccflags -std"
113 ;;
114esac
115
116# for gcc the Configure knows about the -fpic:
117# position-independent code for dynamic loading
118
e60a08f8
JH
119# we want optimisation
120
121case "$optimize" in
8d5a0f9f 122'') case "`$cc -v 2>&1 | grep gcc`" in
e60a08f8
JH
123 *gcc*)
124 optimize='-O3' ;;
125 *) case "$_DEC_cc_style" in
313489a2
SB
126 new) optimize='-O4'
127 ccflags="$ccflags -fprm d -ieee"
128 ;;
e60a08f8
JH
129 old) optimize='-O2 -Olimit 3200' ;;
130 esac
b971f6e4 131 ccflags="$ccflags -D_INTRINSICS"
e60a08f8 132 ;;
8e964347
AB
133 esac
134 ;;
1fc4cb55 135esac
28757baa 136
313489a2
SB
137# Make glibpth agree with the compiler suite. Note that /shlib
138# is not here. That's on purpose. Even though that's where libc
139# really lives from V4.0 on, the linker (and /sbin/loader) won't
140# look there by default. The sharable /sbin utilities were all
141# built with "-Wl,-rpath,/shlib" to get around that. This makes
142# no attempt to figure out the additional location(s) searched by
143# gcc, since not all versions of gcc are easily coerced into
144# revealing that information.
b0362887
SB
145glibpth="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc"
146glibpth="$glibpth /usr/lib /usr/local/lib /var/shlib"
313489a2 147
8e964347
AB
148# dlopen() is in libc
149libswanted="`echo $libswanted | sed -e 's/ dl / /'`"
150
b971f6e4 151# libPW contains nothing useful for perl
8a019ce7
JH
152libswanted="`echo $libswanted | sed -e 's/ PW / /'`"
153
723e14d4
SB
154# libnet contains nothing useful for perl here, and doesn't work
155libswanted="`echo $libswanted | sed -e 's/ net / /'`"
156
b971f6e4 157# libbsd contains nothing used by perl that is not already in libc
8a019ce7
JH
158libswanted="`echo $libswanted | sed -e 's/ bsd / /'`"
159
b971f6e4 160# libc need not be separately listed
8a019ce7
JH
161libswanted="`echo $libswanted | sed -e 's/ c / /'`"
162
b971f6e4
PP
163# ndbm is already in libc
164libswanted="`echo $libswanted | sed -e 's/ ndbm / /'`"
8a019ce7
JH
165
166# the basic lddlflags used always
167lddlflags='-shared -expect_unresolved "*"'
168
b971f6e4
PP
169# Fancy compiler suites use optimising linker as well as compiler.
170# <spider@Orb.Nashua.NH.US>
b8f0c030 171case "`uname -r`" in
b971f6e4
PP
172*[123].*) # old loader
173 lddlflags="$lddlflags -O3"
174 ;;
a07564da
KS
175*) if $test "X$optimize" = "X$undef"; then
176 lddlflags="$lddlflags -msym"
177 else
baa8820a 178 case "`/usr/sbin/sizer -v`" in
e3159d07
JH
179 *4.0D*)
180 # QAR 56761: -O4 + .so may produce broken code,
181 # fixed in 4.0E or better.
182 ;;
183 *)
184 lddlflags="$lddlflags $optimize"
185 ;;
186 esac
187 # -msym: If using a sufficiently recent /sbin/loader,
188 # keep the module symbols with the modules.
baa8820a 189 lddlflags="$lddlflags -msym -std"
a07564da 190 fi
b971f6e4
PP
191 ;;
192esac
193# Yes, the above loses if gcc does not use the system linker.
194# If that happens, let me know about it. <jhi@iki.fi>
195
8a019ce7 196
b971f6e4
PP
197# If debugging or (old systems and doing shared)
198# then do not strip the lib, otherwise, strip.
199# As noted above the -DDEBUGGING is added automagically by Configure if -g.
8a019ce7
JH
200case "$optimize" in
201 *-g*) ;; # left intentionally blank
b8f0c030 202*) case "`uname -r`" in
b971f6e4
PP
203 *[123].*)
204 case "$useshrplib" in
205 false|undef|'') lddlflags="$lddlflags -s" ;;
206 esac
207 ;;
8a019ce7 208 *) lddlflags="$lddlflags -s"
b971f6e4
PP
209 ;;
210 esac
211 ;;
8a019ce7 212esac
8e964347
AB
213
214#
313489a2
SB
215# Make embedding in things like INN and Apache more memory friendly.
216# Keep it overridable on the Configure command line, though, so that
217# "-Uuseshrplib" prevents this default.
218#
219
2bf2710f
GS
220case "$_DEC_cc_style.$useshrplib" in
221 new.) useshrplib="$define" ;;
222esac
313489a2 223
85ab1d1d
JH
224# The EFF_ONLY_OK from <sys/access.h> is present but dysfunctional for
225# [RWX]_OK as of Digital UNIX 4.0[A-D]?. If and when this gets fixed,
226# please adjust this appropriately. See also pp_sys.c just before the
227# emulate_eaccess().
5ff3f7a4 228
baa8820a
JH
229# Fixed in V5.0A.
230case "`/usr/sbin/sizer -v`" in
f60a5d46 231*5.0[A-Z]*|*5.[1-9]*|*[6-9].[0-9]*)
baa8820a
JH
232 : ok
233 ;;
234*)
235# V5.0 or previous
5ff3f7a4 236pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"'
baa8820a
JH
237 ;;
238esac
5ff3f7a4 239
6b8eaf93
JH
240# The off_t is already 8 bytes, so we do have largefileness.
241
f60a5d46 242cat > UU/usethreads.cbu <<'EOCBU'
104d25b7
JH
243# This script UU/usethreads.cbu will get 'called-back' by Configure
244# after it has prompted the user for whether to use threads.
104d25b7
JH
245case "$usethreads" in
246$define|true|[yY]*)
75d72f2c 247 # Threads interfaces changed with V4.0.
8d5a0f9f 248 case "`$cc -v 2>&1 | grep gcc`" in
75d72f2c
JH
249 *gcc*)ccflags="-D_REENTRANT $ccflags" ;;
250 *) case "`uname -r`" in
251 *[123].*) ccflags="-threads $ccflags" ;;
252 *) ccflags="-pthread $ccflags" ;;
253 esac
104d25b7 254 ;;
75d72f2c
JH
255 esac
256 case "`uname -r`" in
257 *[123].*) libswanted="$libswanted pthreads mach exc c_r" ;;
258 *) libswanted="$libswanted pthread exc" ;;
259 esac
e883c329 260
baa8820a
JH
261 case "$usemymalloc" in
262 '')
263 usemymalloc='n'
264 ;;
265 esac
104d25b7
JH
266 ;;
267esac
268EOCBU
269
f60a5d46
JH
270cat > UU/uselongdouble.cbu <<'EOCBU'
271# This script UU/uselongdouble.cbu will get 'called-back' by Configure
272# after it has prompted the user for whether to use long doubles.
273case "$uselongdouble" in
274$define|true|[yY]*) d_Gconvert='sprintf((b),"%.*Lg",(n),(x))' ;;
275esac
276EOCBU
277
313489a2 278#
e60a08f8
JH
279# Unset temporary variables no more needed.
280#
281
282unset _DEC_cc_style
283
284#
8e964347
AB
285# History:
286#
85ab1d1d
JH
287# perl5.005_51:
288#
289# September-1998 Jarkko Hietaniemi <jhi@iki.fi>
290#
291# * Added the -DNO_EFF_ONLY_OK flag ('use filetest;' support).
292#
313489a2
SB
293# perl5.004_57:
294#
295# 19-Dec-1997 Spider Boardman <spider@Orb.Nashua.NH.US>
296#
85ab1d1d 297# * Newer Digital UNIX compilers enforce signaling for NaN without
313489a2
SB
298# -ieee. Added -fprm d at the same time since it's friendlier for
299# embedding.
300#
301# * Fixed the library search path to match cc, ld, and /sbin/loader.
302#
303# * Default to building -Duseshrplib on newer systems. -Uuseshrplib
304# still overrides.
305#
306# * Fix -pthread additions for useshrplib. ld has no -pthread option.
307#
308#
723e14d4
SB
309# perl5.004_04:
310#
311# 19-Sep-1997 Spider Boardman <spider@Orb.Nashua.NH.US>
312#
313# * libnet on Digital UNIX is for JAVA, not for sockets.
314#
315#
b971f6e4
PP
316# perl5.003_28:
317#
318# 22-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi>
319#
320# * Restructuring Spider's suggestions.
321#
322# * Older Digital UNIXes cannot handle -Olimit ... for $lddlflags.
323#
324# * ld -s cannot be used in older Digital UNIXes when doing shared.
325#
326#
327# 21-Feb-1997 Spider Boardman <spider@Orb.Nashua.NH.US>
328#
329# * -hidden removed.
330#
331# * -DSTANDARD_C removed.
332#
333# * -D_INTRINSICS added. (that -fast does not seem to buy much confirmed)
334#
335# * odbm not in libc, only ndbm. Therefore dbm back to $libswanted.
336#
337# * -msym for the newer runtime loaders.
338#
339# * $optimize also in $lddflags.
340#
341#
e60a08f8
JH
342# perl5.003_27:
343#
344# 18-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi>
345#
346# * unset _DEC_cc_style and more commentary on -std.
347#
348#
dfa3a3d3
CS
349# perl5.003_26:
350#
351# 15-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi>
352#
e60a08f8 353# * -std and -ansi.
dfa3a3d3
CS
354#
355#
f2c69087
JH
356# perl5.003_24:
357#
358# 30-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi>
359#
360# * Fixing the note on -DDEBUGGING.
361#
362# * Note on -O5 -fast.
363#
364#
8a019ce7
JH
365# perl5.003_23:
366#
367# 26-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi>
368#
369# * Notes on how to do both optimisation and debugging.
370#
371#
372# 25-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi>
373#
374# * Remove unneeded libraries from $libswanted: PW, bsd, c, dbm
375#
376# * Restructure the $lddlflags build.
377#
378# * $optimize based on which compiler we have.
379#
380#
8e964347
AB
381# perl5.003_22:
382#
383# 23-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
384#
385# * Added comments 'how to create a debugging version of perl'
386#
387# * Fixed logic of this script to prevent stripping of shared
388# objects by the loader (see ld man page for -s) is debugging
389# is set via the -g switch.
390#
391#
392# 21-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
393#
394# * now 'dl' is always removed from libswanted. Not only if
395# optimize is an empty string.
396#
397#
398# 17-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
399#
400# * Removed 'dl' from libswanted: When the FreePort binary
401# translator for Sun binaries is installed Configure concludes
402# that it should use libdl.x.yz.fpx.so :-(
403# Because the dlopen, dlclose,... calls are in the
404# C library it not necessary at all to check for the
405# dl library. Therefore dl is removed from libswanted.
406#
407#
408# 1-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
409#
410# * Set -Olimit to 3200 because perl_yylex.c got too big
411# for the optimizer.
412#