3 # original from Krishna Sethuraman, krishna@sgi.com
5 # Modified Mon Jul 22 14:52:25 EDT 1996
6 # Andy Dougherty <doughera@lafayette.edu>
7 # with help from Dean Roehrich <roehrich@cray.com>.
8 # cc -n32 update info from Krishna Sethuraman, krishna@sgi.com.
9 # additional update from Scott Henry, scotth@sgi.com
11 # Futzed with by John Stoffel <jfs@fluent.com> on 4/24/1997
12 # - assumes 'cc -n32' by default
13 # - tries to check for various compiler versions and do the right
15 # - warnings turned off (-n32 messages):
16 # 1184 - "=" is used where where "==" may have been intended
17 # 1552 - variable "foo" set but never used
19 # Tweaked by Chip Salzenberg <chip@perl.com> on 5/13/97
20 # - don't assume 'cc -n32' if the n32 libm.so is missing
22 # Threaded by Jarkko Hietaniemi <jhi@iki.fi> on 11/18/97
23 # - POSIX threads knowledge by IRIX version
25 # gcc-enabled by Kurt Starsinic <kstar@isinet.com> on 3/24/1998
27 # 64-bitty by Jarkko Hietaniemi on 9/1998
29 # Martin Pool added -shared for gcc on 2004-01-27
31 # Use sh Configure -Dcc='cc -n32' to try compiling with -n32.
32 # or -Dcc='cc -n32 -mips3' (or -mips4) to force (non)portability
33 # Don't bother with -n32 unless you have the 7.1 or later compilers.
34 # But there's no quick and light-weight way to check in 6.2.
36 # NOTE: some IRIX cc versions, e.g. 7.3.1.1m (try cc -version) have
37 # been known to have issues (coredumps) when compiling perl.c.
38 # If you've used -OPT:fast_io=ON and this happens, try removing it.
39 # If that fails, or you didn't use that, then try adjusting other
40 # optimization options (-LNO, -INLINE, -O3 to -O2, etcetera).
41 # The compiler bug has been reported to SGI.
42 # -- Allen Smith <allens@cpan.org>
44 # Modified (10/30/04) to turn off usemallocwrap (PERL_MALLOC_WRAP) in -n32
47 case "$use64bitall" in
52 You have asked for use64bitall but you aren't running on 64-bit IRIX.
53 I'll try changing it to use64bitint.
60 Sorry, can't do use64bitint either. Try upgrading to IRIX 6.2 or later.
64 *) use64bitint="$define"
72 # Until we figure out what to be probed for in Configure (ditto for hpux.sh)
73 case "$usemorebits" in # Need to expand this now, then.
77 uselongdouble="$define"
79 *) use64bitint="$define" uselongdouble="$define" ;;
83 # Let's assume we want to use 'cc -n32' by default, unless the
84 # necessary libm is missing (which has happened at least twice)
86 '') case "$use64bitall" in
87 "$define"|true|[yY]*) test -f /usr/lib64/libm.so && cc='cc -64' ;;
88 *) test -f /usr/lib32/libm.so && cc='cc -n32' ;;
92 case "$use64bitint" in
93 "$define"|true|[yY]*) ;;
94 *) d_casti32="$undef" ;;
100 $cat > UU/cc.cbu <<'EOCCBU'
101 # This script UU/cc.cbu will get 'called-back' by Configure after it
102 # has prompted the user for the C compiler to use.
106 *) ccversion=`cc -version 2>&1` ;;
109 # Check for which compiler we're using
113 test -z "$ldlibpthname" && ldlibpthname='LD_LIBRARYN32_PATH'
115 # If a library is requested to link against, make sure the
116 # objects in the library are of the same ABI we are compiling
117 # against. Albert Chin-A-Young <china@thewrittenword.com>
119 # In other words, you no longer have to worry regarding having old
120 # library paths (/usr/lib) in the searchpath for -n32 or -64; thank
121 # you very much, Albert! Now if we could just get more module authors
122 # to use something like this... - Allen
124 libscheck='case "$xxx" in
125 *.a) /bin/ar p $xxx `/bin/ar t $xxx | sed q` >$$.o;
126 case "`/usr/bin/file $$.o`" in
128 *) rm -f $$.o; xxx=/no/n32$xxx ;;
130 *) case "`/usr/bin/file $xxx`" in
132 *) xxx=/no/n32$xxx ;;
136 # NOTE: -L/usr/lib32 -L/lib32 are automatically selected by the linker
137 test -z "$ldflags" && ldflags=' -L/usr/local/lib32 -L/usr/local/lib'
139 # From: David Billinghurst <David.Billinghurst@riotinto.com.au>
140 # If you get complaints about so_locations then change the following
141 # line to something like:
142 # lddlflags="-n32 -shared -check_registry /usr/lib32/so_locations"
143 test -z "$lddlflags" && lddlflags="-n32 -shared"
144 test -z "$libc" && libc='/usr/lib32/libc.so'
145 test -z "$plibpth" && plibpth='/usr/lib32 /lib32 /usr/ccs/lib'
147 # PERL_MALLOC_WRAP gives false alarms ("panic: memory wrap") in IRIX
148 # -n32 mode, resulting in perl compiles never getting further than
149 # miniperl. I am not sure whether it actually does any good in -32 or
150 # -64 mode, especially the latter, but it does not give false
151 # alarms (in testing). -Allen
153 usemallocwrap=${usemallocwrap:-false}
159 You cannot use cc -64 or -Duse64bitall in 32-bit IRIX, sorry.
160 Cannot continue, aborting.
165 test -z "$ldlibpthname" && ldlibpthname='LD_LIBRARY64_PATH'
166 test -z "$use64bitall" && use64bitall="$define"
167 test -z "$use64bitint" && use64bitint="$define"
168 loclibpth="$loclibpth /usr/lib64"
169 libscheck='case "`/usr/bin/file $xxx`" in
171 *) xxx=/no/64-bit$xxx ;;
173 # NOTE: -L/usr/lib64 -L/lib64 are automatically selected by the linker
174 test -z "$ldflags" && ldflags=' -L/usr/local/lib64 -L/usr/local/lib'
176 test -z "$archname64" && archname64='64all'
177 # From: David Billinghurst <David.Billinghurst@riotinto.com.au>
178 # If you get complaints about so_locations then change the following
179 # line to something like:
180 # lddlflags="-64 -shared -check_registry /usr/lib64/so_locations"
181 test -z lddlflags="-64 -shared"
182 test -z "$libc" && libc='/usr/lib64/libc.so'
183 test -z "$plibpth" && plibpth='/usr/lib64 /lib64 /usr/ccs/lib'
186 ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME"
187 test -z "$optimize" && optimize="-O3"
189 # It seems gcc can build Irix shlibs, but of course it needs
190 # -shared. Otherwise you get link errors looking for main().
191 lddlflags="$lddlflags -shared"
193 # Without the -mabi=64 gcc in 64-bit IRIX has problems passing
194 # and returning small structures. This affects inet_*() and semctl().
195 # See http://reality.sgi.com/ariel/freeware/gcc-2.8.1-notes.html
196 # for more information. Reported by Lionel Cons <lionel.cons@cern.ch>.
197 IRIX64) ccflags="$ccflags -mabi=64"
198 ldflags="$ldflags -mabi=64 -L/usr/lib64"
199 lddlflags="$lddlflags -mabi=64"
201 *) ccflags="$ccflags -DIRIX32_SEMUN_BROKEN_BY_GCC"
202 # XXX Note: It is possible that turning off usemallocwrap is
203 # needed here; insufficient data! - Allen
208 # this is needed to force the old-32 paths
209 # since the system default can be changed.
210 ccflags="$ccflags -32 -D_BSD_TYPES -D_BSD_TIME -Olimit 3100"
215 # Settings common to both native compiler modes.
217 *"cc -n32"*|*"cc -64"*)
218 test -z "$ld" && ld=$cc
220 # perl's malloc can return improperly aligned buffer
221 # which (under 5.6.0RC1) leads into really bizarre bus errors
222 # and freak test failures (lib/safe1 #18, for example),
223 # even more so with -Duse64bitall: for example lib/io_linenumtb.
224 # fails under the harness but succeeds when run separately,
225 # under make test pragma/warnings #98 fails, and lib/io_dir
226 # apparently coredumps (the last two don't happen under
227 # the harness. Helmut Jarausch is seeing bus errors from
228 # miniperl, as was Scott Henry with snapshots from just before
232 # Was at the first of the line - Allen
233 #malloc_cflags='ccflags="-DSTRICT_ALIGNMENT $ccflags"'
236 nm_so_opt="$nm_so_opt -p"
238 # Warnings to turn off because the source code hasn't
239 # been cleaned up enough yet to satisfy the IRIX cc.
240 # 1184: "=" is used where where "==" may have been intended.
241 # 1552: The variable "foobar" is set but never used.
244 # Perl 5.004_57 introduced new qsort code into pp_ctl.c that
245 # makes IRIX cc prior to 7.2.1 to emit bad code.
246 # so some serious hackery follows to set pp_ctl flags correctly.
248 # Check for which version of the compiler we're running
249 case "`$cc -version 2>&1`" in
250 *7.0*) # Mongoose 7.0
251 ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME -woff $woff -OPT:Olimit=0"
254 *7.1*|*7.2|*7.20) # Mongoose 7.1+
255 ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME -woff $woff"
257 '') optimize='-O3 -OPT:Olimit=0' ;;
258 '-O') optimize='-O3 -OPT:Olimit=0' ;;
262 # This is a temporary fix for 5.005+.
263 # See hints/README.hints, especially the section
264 # =head2 Propagating variables to config.sh
266 # Note the part about case statements not working without
267 # weirdness like the below echo statement... and, since
268 # we're in a callback unit, it's to config.sh, not UU/config.sh
272 pp_ctl_cflags="$pp_ctl_flags optimize=\"$optimize -O1\""
273 echo "pp_ctl_cflags=\"$pp_ctl_flags optimize=\\\"\$optimize -O1\\\"\"" >> config.sh
278 # XXX What is space=ON doing in here? Could someone ask Scott Henry? - Allen
280 *7.*) # Mongoose 7.2.1+
281 ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME -woff $woff"
283 '') optimize='-O3 -OPT:Olimit=0:space=ON' ;;
284 '-O') optimize='-O3 -OPT:Olimit=0:space=ON' ;;
288 *6.2*) # Ragnarok 6.2
289 ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME -woff $woff"
292 *) # Be safe and not optimize
293 ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME -woff $woff"
298 # this is to accommodate the 'modules' capability of the
299 # 7.2 MIPSPro compilers, which allows for the compilers to be installed
300 # in a nondefault location. Almost everything works as expected, but
301 # /usr/include isn't caught properly. Hence see the /usr/include/pthread.h
302 # change below to include TOOLROOT (a modules environment variable),
303 # and the following code. Additional
304 # code to accommodate the 'modules' environment should probably be added
305 # here if possible, or be inserted as a ${TOOLROOT} reference before
306 # absolute paths (again, see the pthread.h change below).
307 # -- krishna@sgi.com, 8/23/98
309 if [ "X${TOOLROOT}" != "X" ]; then
310 # we cant set cppflags because it gets overwritten
311 # we dont actually need $TOOLROOT/usr/include on the cc line cuz the
312 # modules functionality already includes it but
313 # XXX - how do I change cppflags in the hints file?
314 ccflags="$ccflags -I${TOOLROOT}/usr/include"
315 usrinc="${TOOLROOT}/usr/include"
321 # workaround for an optimizer bug
322 # Made to work via UU/config.sh thing (or, rather, config.sh, since we're in
323 # a callback) from README.hints, plus further stuff; doesn't handle -g still,
324 # unfortunately - Allen
325 case "`$cc -version 2>&1`" in
327 test -z "$op_cflags" && echo "op_cflags=\"optimize=\\\"\$optimize -O1\\\"\"" >> config.sh
328 test -z "$op_cflags" && op_cflags="optimize=\"\$optimize -O1\""
329 test -z "$opmini_cflags" && echo "opmini_cflags=\"optimize=\\\"\$optimize -O1\\\"\"" >> config.sh
330 test -z "$opmini_cflags" && opmini_cflags="optimize=\"\$optimize -O1\""
333 test -z "$op_cflags" && echo "op_cflags=\"optimize=\\\"\$optimize -O2\\\"\"" >> config.sh
334 test -z "$op_cflags" && op_cflags="$op_cflags optimize=\"\$optimize -O2\""
335 test -z "$opmini_cflags" && echo "opmini_cflags=\"optimize=\\\"\$optimize -O2\\\"\"" >> config.sh
336 test -z "$opmini_cflags" && opmini_cflags="optimize=\"\$optimize -O2\""
341 # Workaround [perl #33849]: perl 5.8.6 fails to build on IRIX 6.5 due to
342 # bizarre preprocessor bug: cc -E - unfortunately goes into K&R mode, but
343 # cc -E file.c doesn't. Force a wrapper to always get the ANSI mode.
344 # (We only need to do this for cc, not for gcc. ccversion is computed above.)
346 '') ;; # gcc. Do nothing.
347 *) cppstdin=`pwd`/cppstdin
354 # End of cc.cbu callback unit. - Allen
356 # We don't want these libraries.
357 # Socket networking is in libc, these are not installed by default,
358 # and just slow perl down. (scotth@sgi.com)
359 # librt contains nothing we need (some places need it for Time::HiRes) --jhi
360 set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ nsl / /' -e 's/ dl / /' -e 's/ rt / /'`
364 # I have conflicting reports about the sun, crypt, bsd, and PW
365 # libraries on Irix 6.2.
368 # Don't need sun crypt bsd PW under 6.2. You *may* need to link
369 # with these if you want to run perl built under 6.2 on a 5.3 machine
370 # (I haven't checked)
372 # Another user reported that if he included those libraries, a large number
373 # of the tests failed (approx. 20-25) and he would get a core dump. To
374 # make things worse, test results were inconsistent, i.e., some of the
375 # tests would pass some times and fail at other times.
376 # The safest thing to do seems to be to eliminate them.
378 # Actually, the only libs that you want are '-lm'. Everything else
379 # you need is in libc. You do also need '-lbsd' if you choose not
380 # to use the -D_BSD_* defines. Note that as of 6.2 the only
381 # difference between '-lmalloc' and '-lc' malloc is the debugging
382 # and control calls, which aren't used by perl. -- scotth@sgi.com
384 set `echo X "$libswanted "|sed -e 's/ sun / /' -e 's/ crypt / /' -e 's/ bsd / /' -e 's/ PW / /' -e 's/ malloc / /'`
388 # libbind.{so|a} would be from a BIND/named installation - IRIX 6.5.* has
389 # pretty much everything that would be useful in libbind in libc, including
390 # accessing a local caching server (nsd) that will also look in /etc/hosts,
391 # NIS (yuck!), etcetera. libbind also doesn't have the _r (thread-safe
392 # reentrant) functions.
393 # - Allen <easmith@beatrice.rutgers.edu>
397 set `echo X "$libswanted "|sed -e 's/ bind / /'`
403 # Don't groan about unused libraries.
406 *) ldflags="$ldflags -Wl,-woff,84" ;;
409 # Irix 6.5.6 seems to have a broken header <sys/mode.h>
410 # don't include that (it doesn't contain S_IFMT, S_IFREG, et al)
414 $cat > UU/usethreads.cbu <<'EOCBU'
415 # This script UU/usethreads.cbu will get 'called-back' by Configure
416 # after it has prompted the user for whether to use threads.
417 case "$usethreads" in
419 if test ! -f ${TOOLROOT}/usr/include/pthread.h -o ! -f /usr/lib/libpthread.so; then
423 IRIX `uname -r` does not support POSIX threads.
424 You should upgrade to at least IRIX 6.2 with pthread patches.
429 IRIX 6.2 can have the POSIX threads.
430 However, the following IRIX patches (or their replacements) MUST be installed:
431 1404 Irix 6.2 Posix 1003.1b man pages
432 1645 IRIX 6.2 & 6.3 POSIX header file updates
433 2000 Irix 6.2 Posix 1003.1b support modules
434 2254 Pthread library fixes
435 2401 6.2 all platform kernel rollup
437 Without patch 2401, a kernel bug in IRIX 6.2 will
438 cause your machine to panic and crash when running
439 threaded perl. IRIX 6.3 and up should be OK.
444 IRIX `uname -r` should have the POSIX threads.
445 But, somehow, you do not seem to have them installed.
450 Cannot continue, aborting.
454 set `echo X "$libswanted "| sed -e 's/ c / pthread /'`
460 # These are hidden behind a _POSIX1C ifdef that would
461 # require including <pthread.h> for the Configure hasproto
464 # d_asctime_r_proto="$define"
465 # d_ctime_r_proto="$define"
466 # d_gmtime_r_proto="$define"
467 # d_localtime_r_proto="$define"
469 # Safer just to go ahead and include it, for other ifdefs like them
470 # (there are a lot, such as in netdb.h). - Allen
471 ccflags="$ccflags -DPTHREAD_H_FIRST"
473 pthread_h_first="$define"
474 echo "pthread_h_first='define'" >> config.sh
481 # The -n32 makes off_t to be 8 bytes, so we should have largefileness.
483 $cat > UU/use64bitint.cbu <<'EOCBU'
484 # This script UU/use64bitint.cbu will get 'called-back' by Configure
485 # after it has prompted the user for whether to use 64 bit integers.
487 case "$use64bitint" in
492 IRIX `uname -r` does not support 64-bit types.
493 You should upgrade to at least IRIX 6.2.
494 Cannot continue, aborting.
501 *) d_casti32="$undef" ;;
506 $cat > UU/use64bitall.cbu <<'EOCBU'
507 # This script UU/use64bitall.cbu will get 'called-back' by Configure
508 # after it has prompted the user for whether to be maximally 64 bitty.
510 case "$use64bitall" in
515 You cannot use a non-64 bit cc for -Duse64bitall, sorry.
516 Cannot continue, aborting.
526 $cat > UU/uselongdouble.cbu <<'EOCBU'
527 # This script UU/uselongdouble.cbu will get 'called-back' by Configure
528 # after it has prompted the user for whether to use long doubles.
530 # This script is designed to test IRIX (and other machines, once it's put into
531 # Configure) for a bug in which they fail to round correctly when using
532 # sprintf/printf/etcetera on a long double with precision specified (%.0Lf or
533 # whatever). Sometimes, this only happens when the number in question is
534 # between 1 and -1, weirdly enough. - Allen
536 case "$uselongdouble" in
539 case "$d_PRIfldbl" in
546 #define sPRIfldbl $sPRIfldbl
548 #define I_STDLIB $i_stdlib
560 (void)sprintf(buf1,"%.0"sPRIfldbl,(long double)0.6L);
561 (void)sprintf(buf2,"%.0f",(double)0.6);
562 if (strcmp(buf1,buf2)) {
565 (void)sprintf(buf1,"%.0"sPRIfldbl,(long double)-0.6L);
566 (void)sprintf(buf2,"%.0f",(double)-0.6);
567 if (strcmp(buf1,buf2)) {
577 if eval $compile && $run ./try; then
578 rm -f try try.* >/dev/null
580 rm -f try try.* core a.out >/dev/null
581 ccflags="$ccflags -DHAS_LDBL_SPRINTF_BUG"
582 cppflags="$cppflags -DHAS_LDBL_SPRINTF_BUG"
588 #define sPRIfldbl $sPRIfldbl
590 #define I_STDLIB $i_stdlib
602 (void)sprintf(buf1,"%.0"sPRIfldbl,(long double)1.6L);
603 (void)sprintf(buf2,"%.0f",(double)1.6);
604 if (strcmp(buf1,buf2)) {
607 (void)sprintf(buf1,"%.0"sPRIfldbl,(long double)-1.6L);
608 (void)sprintf(buf2,"%.0f",(double)-1.6);
609 if (strcmp(buf1,buf2)) {
619 if eval $compile && $run ./try; then
620 rm -f try try.c >/dev/null
621 ccflags="$ccflags -DHAS_LDBL_SPRINTF_BUG_LESS1"
622 cppflags="$cppflags -DHAS_LDBL_SPRINTF_BUG_LESS1"
624 rm -f try try.c core try.o a.out >/dev/null
629 ccflags="$ccflags -DHAS_LDBL_SPRINTF_BUG"
630 cppflags="$cppflags -DHAS_LDBL_SPRINTF_BUG"
634 # end of case statement for how to print ldbl with 'f'
639 # end of case statement for whether to do long doubles
643 # Helmut Jarausch reports that Perl's malloc is rather unusable
644 # with IRIX, and SGI confirms the problem.
645 usemymalloc=${usemymalloc:-false}