Re: [ID 20020305.026] Not OK: perl v5.7.3 +DEVEL15046 on sun4-solaris 2.7
[p5sagit/p5-mst-13.2.git] / hints / hpux.sh
CommitLineData
1dc48e02 1#!/usr/bin/sh
8e07c86e 2
1dc48e02 3### SYSTEM ARCHITECTURE
8e07c86e 4
1dc48e02 5# Determine the architecture type of this system.
6# Keep leading tab below -- Configure Black Magic -- RAM, 03/02/97
7 xxOsRevMajor=`uname -r | sed -e 's/^[^0-9]*//' | cut -d. -f1`;
8if [ "$xxOsRevMajor" -ge 10 ]; then
9 # This system is running >= 10.x
10
11 # Tested on 10.01 PA1.x and 10.20 PA[12].x.
12 # Idea: Scan /usr/include/sys/unistd.h for matches with
13 # "#define CPU_* `getconf # CPU_VERSION`" to determine CPU type.
14 # Note the text following "CPU_" is used, *NOT* the comment.
15 #
16 # ASSUMPTIONS: Numbers will continue to be defined in hex -- and in
17 # /usr/include/sys/unistd.h -- and the CPU_* #defines will be kept
18 # up to date with new CPU/OS releases.
19 xxcpu=`getconf CPU_VERSION`; # Get the number.
20 xxcpu=`printf '0x%x' $xxcpu`; # convert to hex
21 archname=`sed -n -e "s/^#[ \t]*define[ \t]*CPU_//p" /usr/include/sys/unistd.h |
22 sed -n -e "s/[ \t]*$xxcpu[ \t].*//p" |
38dbb4c5 23 sed -e s/_RISC/-RISC/ -e s/HP_// -e s/_/./ -e "s/[[:space:]]*//g"`;
1dc48e02 24else
25 # This system is running <= 9.x
26 # Tested on 9.0[57] PA and [78].0 MC680[23]0. Idea: After removing
27 # MC6888[12] from context string, use first CPU identifier.
28 #
29 # ASSUMPTION: Only CPU identifiers contain no lowercase letters.
30 archname=`getcontext | tr ' ' '\012' | grep -v '[a-z]' | grep -v MC688 |
31 sed -e 's/HP-//' -e 1q`;
32 selecttype='int *'
8e07c86e 33 fi
303aa268 34 # For some strange reason, the u32align test from Configure hangs in
35 # HP-UX 10.20 since the December 2001 patches. So hint it to avoid
36 # the test.
2da79f33 37 if [ "$xxOsRevMajor" -le 10 ]; then
38 d_u32align=$define
39 fi
8e07c86e 40
1dc48e02 41echo "Archname is $archname"
42
43
44### HP-UX OS specific behaviour
5e4c82f0 45
e08bfeb2 46# -ldbm is obsolete and should not be used
47# -lBSD contains BSD-style duplicates of SVR4 routines that cause confusion
48# -lPW is obsolete and should not be used
49# The libraries crypt, malloc, ndir, and net are empty.
c723583c 50set `echo "X $libswanted " | sed -e 's/ ld / /' -e 's/ dbm / /' -e 's/ BSD / /' -e 's/ PW / /'`
51shift
e08bfeb2 52libswanted="$*"
53
1dc48e02 54cc=${cc:-cc}
c723583c 55ar=/usr/bin/ar # Yes, truly override. We do not want the GNU ar.
56full_ar=$ar # I repeat, no GNU ar. arrr.
167d2fcb 57
c723583c 58set `echo "X $ccflags " | sed -e 's/ -A[ea] / /' -e 's/ -D_HPUX_SOURCE / /'`
59shift
60 cc_cppflags="$* -D_HPUX_SOURCE"
61cppflags="-Aa -D__STDC_EXT__ $cc_cppflags"
62
63case "$prefix" in
64 "") prefix='/opt/perl5' ;;
65 esac
0f3ba31f 66
dcd01700 67 gnu_as=no
68 gnu_ld=no
b36fec95 69case `$cc -v 2>&1`"" in
c723583c 70 *gcc*) ccisgcc="$define"
dcd01700 71 ccflags="$cc_cppflags"
16c1da12 72 if [ "X$gccversion" = "X" ]; then
73 # Done too late in Configure if hinted
74 gccversion=`$cc --version`
75 fi
2dc0455f 76 case "$gccversion" in
2bafb3d0 77 [012]*) # HP-UX and gcc-2.* break UINT32_MAX :-(
78 ccflags="$ccflags -DUINT32_MAX_BROKEN"
79 ;;
80 esac
0f3ba31f 81 case "`getconf KERNEL_BITS 2>/dev/null`" in
dcd01700 82 *64*)
eb9ee3dc 83 echo "main(){}">try.c
16c1da12 84 case "$gccversion" in
85 3*) ccflags="$ccflags -mpa-risc-2-0"
dcd01700 86 ;;
eb9ee3dc 87 *) # gcc with gas will not accept +DA2.0
16c1da12 88 case "`$cc -c -Wa,+DA2.0 try.c 2>&1`" in
89 *"+DA2.0"*) # gas
90 gnu_as=yes
91 ;;
92 *) # HPas
93 ccflags="$ccflags -Wa,+DA2.0"
94 ;;
95 esac
dcd01700 96 ;;
97 esac
98 # gcc with gld will not accept +vnocompatwarnings
99 case "`$cc -o try -Wl,+vnocompatwarnings try.c 2>&1`" in
100 *"+vnocompat"*) # gld
101 gnu_ld=yes
102 ;;
103 *) # HPld
9fecddab 104 case "$gccversion" in
105 [12]*)
106 ldflags="$ldflags -Wl,+vnocompatwarnings"
107 ccflags="$ccflags -Wl,+vnocompatwarnings"
108 ;;
109 esac
dcd01700 110 ;;
111 esac
eb9ee3dc 112 rm -f try.c
dcd01700 113 ;;
0f3ba31f 114 esac
c723583c 115 ;;
116 *) ccisgcc=''
117 ccversion=`which cc | xargs what | awk '/Compiler/{print $2}'`
0fb2d8c6 118 case "$ccflags" in
119 "-Ae "*) ;;
120 *) ccflags="-Ae $cc_cppflags -Wl,+vnocompatwarnings" ;;
121 esac
5e2807cc 122 # Needed because cpp does only support -Aa (not -Ae)
123 cpplast='-'
124 cppminus='-'
125 cppstdin='cc -E -Aa -D__STDC_EXT__'
126 cpprun=$cppstdin
0b93aee7 127# case "$d_casti32" in
128# "") d_casti32='undef' ;;
129# esac
0f3ba31f 130 ;;
1dc48e02 131 esac
132
e08bfeb2 133# When HP-UX runs a script with "#!", it sets argv[0] to the script name.
134toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"'
1dc48e02 135
1dc48e02 136### 64 BITNESS
b36fec95 137
8cb447e0 138# Some gcc versions do native 64 bit long (e.g. 2.9-hppa-000310 and gcc-3.0)
dcd01700 139# We have to force 64bitness to go search the right libraries
140 gcc_64native=no
141case "$ccisgcc" in
142 $define|true|[Yy])
eb9ee3dc 143 echo 'int main(){long l;printf("%d\\n",sizeof(l));}'>try.c
dcd01700 144 $cc -o try $ccflags $ldflags try.c
145 if [ "`try`" = "8" ]; then
146 cat <<EOM >&4
147
148*** This version of gcc uses 64 bit longs. -Duse64bitall is
149*** implicitly set to enable continuation
150EOM
151 use64bitall=$define
152 gcc_64native=yes
153 fi
154 ;;
155 esac
156
ec7b9793 157case "$use64bitall" in
1dc48e02 158 $define|true|[yY]*) use64bitint="$define" ;;
159 esac
160
6d5d7abf 161case "$usemorebits" in
1dc48e02 162 $define|true|[yY]*) use64bitint="$define"; uselongdouble="$define" ;;
163 esac
bf0c440f 164
38dbb4c5 165case "$archname" in
166 IA64*)
167 # While here, override so=sl auto-detection
168 so='so'
169 ;;
170 *)
171 case "$uselongdouble" in
172 *) ;;
173 $define|true|[yY]*)
174 cat <<EOM >&4
1dc48e02 175
176*** long doubles are not (yet) supported on HP-UX (any version)
177*** Until it does, we cannot continue, aborting.
bf0c440f 178EOM
38dbb4c5 179 exit 1 ;;
180 esac
181 ;;
1dc48e02 182 esac
bf0c440f 183
1dc48e02 184case "$use64bitint" in
185 $define|true|[Yy])
bf0c440f 186
1dc48e02 187 if [ "$xxOsRevMajor" -lt 11 ]; then
188 cat <<EOM >&4
189
190*** 64-bit compilation is not supported on HP-UX $xxOsRevMajor.
191*** You need at least HP-UX 11.0.
ec7b9793 192*** Cannot continue, aborting.
bf0c440f 193EOM
1dc48e02 194 exit 1
195 fi
bf0c440f 196
1dc48e02 197 # Set libc and the library paths
198 case "$archname" in
199 PA-RISC*)
200 loclibpth="$loclibpth /lib/pa20_64"
201 libc='/lib/pa20_64/libc.sl' ;;
202 IA64*)
203 loclibpth="$loclibpth /usr/lib/hpux64"
204 libc='/usr/lib/hpux64/libc.so' ;;
205 esac
206 if [ ! -f "$libc" ]; then
207 cat <<EOM >&4
208
209*** You do not seem to have the 64-bit libc.
210*** I cannot find the file $libc.
211*** Cannot continue, aborting.
212EOM
213 exit 1
214 fi
bf0c440f 215
dcd01700 216 case "$ccisgcc" in
217 $define|true|[Yy])
218 # For the moment, don't care that it ain't supported (yet)
219 # by gcc (up to and including 2.95.3), cause it'll crash
220 # anyway. Expect auto-detection of 64-bit enabled gcc on
221 # HP-UX soon, including a user-friendly exit
222 case $gcc_64native in
16c1da12 223 no) case "$gccversion" in
224 [12]*) ccflags="$ccflags -mlp64"
225 ldflags="$ldflags -Wl,+DD64"
226 ;;
227 esac
dcd01700 228 ;;
229 esac
230 ;;
231 *)
232 ccflags="$ccflags +DD64"
233 ldflags="$ldflags +DD64"
234 ;;
235 esac
bf0c440f 236
1dc48e02 237 # Reset the library checker to make sure libraries
238 # are the right type
38dbb4c5 239 # (NOTE: on IA64, this doesn't work with .a files.)
1dc48e02 240 libscheck='case "`/usr/bin/file $xxx`" in
241 *ELF-64*|*LP64*|*PA-RISC2.0*) ;;
242 *) xxx=/no/64-bit$xxx ;;
243 esac'
244
245 ;;
246
247 *) # Not in 64-bit mode
248
249 case "$archname" in
250 PA-RISC*)
251 libc='/lib/libc.sl' ;;
252 IA64*)
253 loclibpth="$loclibpth /usr/lib/hpux32"
254 libc='/usr/lib/hpux32/libc.so' ;;
255 esac
256 ;;
257 esac
258
dcd01700 259# By setting the deferred flag below, this means that if you run perl
260# on a system that does not have the required shared library that you
261# linked it with, it will die when you try to access a symbol in the
262# (missing) shared library. If you would rather know at perl startup
263# time that you are missing an important shared library, switch the
264# comments so that immediate, rather than deferred loading is
265# performed. Even with immediate loading, you can postpone errors for
266# undefined (or multiply defined) routines until actual access by
267# adding the "nonfatal" option.
268# ccdlflags="-Wl,-E -Wl,-B,immediate $ccdlflags"
269# ccdlflags="-Wl,-E -Wl,-B,immediate,-B,nonfatal $ccdlflags"
270if [ "$gnu_ld" = "yes" ]; then
271 ccdlflags="-Wl,-E $ccdlflags"
272else
273 ccdlflags="-Wl,-E -Wl,-B,deferred $ccdlflags"
274 fi
275
1dc48e02 276
277### COMPILER SPECIFICS
bf0c440f 278
7f128676 279## Local restrictions (point to README.hpux to lift these)
280
281## Optimization limits
282cat >try.c <<EOF
283#include <sys/resource.h>
284
285int main ()
286{
287 struct rlimit rl;
288 int i = getrlimit (RLIMIT_DATA, &rl);
289 printf ("%d\n", rl.rlim_cur / (1024 * 1024));
290 } /* main */
291EOF
292$cc -o try $ccflags $ldflags try.c
293 maxdsiz=`try`
303aa268 294rm -f try try.c core
7f128676 295if [ $maxdsiz -le 64 ]; then
296 # 64 Mb is probably not enough to optimize toke.c
297 # and regexp.c with -O2
298 cat <<EOM >&4
299Your kernel limits the data section of your programs to $maxdsiz Mb,
300which is (sadly) not enough to fully optimize some parts of the
301perl binary. I'll try to use a lower optimization level for
302those parts. If you are a sysadmin, and you *do* want full
303optimization, raise the 'maxdsiz' kernel configuration parameter
304to at least 0x08000000 (128 Mb) and rebuild your kernel.
305EOM
a6bab54c 306regexec_cflags=''
38dbb4c5 307doop_cflags=''
7f128676 308 fi
309
b36fec95 310case "$ccisgcc" in
1dc48e02 311 $define|true|[Yy])
312
313 case "$optimize" in
c723583c 314 "") optimize="-g -O" ;;
315 *O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;;
1dc48e02 316 esac
c723583c 317 #ld="$cc"
5e2807cc 318 ld=/usr/bin/ld
1dc48e02 319 cccdlflags='-fPIC'
c723583c 320 #lddlflags='-shared'
5e2807cc 321 lddlflags='-b'
c723583c 322 case "$optimize" in
323 *-g*-O*|*-O*-g*)
324 # gcc without gas will not accept -g
325 echo "main(){}">try.c
326 case "`$cc $optimize -c try.c 2>&1`" in
327 *"-g option disabled"*)
328 set `echo "X $optimize " | sed -e 's/ -g / /'`
329 shift
330 optimize="$*"
331 ;;
332 esac
333 ;;
334 esac
7f128676 335 if [ $maxdsiz -le 64 ]; then
7f128676 336 case "$optimize" in
337 *O2*) opt=`echo "$optimize" | sed -e 's/O2/O1/'`
a6bab54c 338 toke_cflags="$toke_cflags;optimize=\"$opt\""
339 regexec_cflags="optimize=\"$opt\""
7f128676 340 ;;
341 esac
342 fi
1dc48e02 343 ;;
344
345 *) # HP's compiler cannot combine -g and -O
346 case "$optimize" in
5e2807cc 347 "") optimize="+O2 +Onolimit" ;;
c723583c 348 *O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;;
1dc48e02 349 esac
38dbb4c5 350 case "$optimize" in
351 *-O*|\
352 *O2*) opt=`echo "$optimize" | sed -e 's/-O/+O2/' -e 's/O2/O1/' -e 's/ *+Onolimit//'`
353 ;;
354 *) opt="$optimize"
355 ;;
7f128676 356 esac
38dbb4c5 357 if [ $maxdsiz -le 64 ]; then
358 toke_cflags="$toke_cflags;optimize=\"$opt\""
359 regexec_cflags="optimize=\"$opt\""
7f128676 360 fi
38dbb4c5 361 case "$archname" in
362 IA64*)
363 doop_cflags="optimize=\"$opt\""
364 ;;
365 esac
1dc48e02 366 ld=/usr/bin/ld
367 cccdlflags='+Z'
c723583c 368 lddlflags='-b +vnocompatwarnings'
1dc48e02 369 ;;
b36fec95 370 esac
8e07c86e 371
1dc48e02 372## LARGEFILES
774d564b 373
c723583c 374#case "$uselargefiles-$ccisgcc" in
375# "$define-$define"|'-define')
376# cat <<EOM >&4
377#
378#*** I'm ignoring large files for this build because
379#*** I don't know how to do use large files in HP-UX using gcc.
380#
381#EOM
382# uselargefiles="$undef"
383# ;;
384# esac
dc45a647 385
1dc48e02 386cat >UU/uselargefiles.cbu <<'EOCBU'
387# This script UU/uselargefiles.cbu will get 'called-back' by Configure
388# after it has prompted the user for whether to use large files.
389case "$uselargefiles" in
390 ""|$define|true|[yY]*)
391 # there are largefile flags available via getconf(1)
392 # but we cheat for now. (Keep that in the left margin.)
393ccflags_uselargefiles="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
5cf1d1f1 394
38dbb4c5 395 case " $ccflags " in
396 *" $ccflags_uselargefiles "*) ;;
0fb2d8c6 397 *) ccflags="$ccflags $ccflags_uselargefiles" ;;
398 esac
1dc48e02 399
400 if test -z "$ccisgcc" -a -z "$gccversion"; then
401 # The strict ANSI mode (-Aa) doesn't like large files.
402 ccflags=`echo " $ccflags "|sed 's@ -Aa @ @g'`
403 case "$ccflags" in
404 *-Ae*) ;;
405 *) ccflags="$ccflags -Ae" ;;
406 esac
fa2879fb 407 fi
408 ;;
409 esac
1dc48e02 410EOCBU
fa2879fb 411
1dc48e02 412# THREADING
104d25b7 413
414# This script UU/usethreads.cbu will get 'called-back' by Configure
415# after it has prompted the user for whether to use threads.
1dc48e02 416cat >UU/usethreads.cbu <<'EOCBU'
104d25b7 417case "$usethreads" in
1dc48e02 418 $define|true|[yY]*)
419 if [ "$xxOsRevMajor" -lt 10 ]; then
420 cat <<EOM >&4
f1ee07ac 421
104d25b7 422HP-UX $xxOsRevMajor cannot support POSIX threads.
423Consider upgrading to at least HP-UX 11.
424Cannot continue, aborting.
425EOM
1dc48e02 426 exit 1
427 fi
428
429 if [ "$xxOsRevMajor" -eq 10 ]; then
430 # Under 10.X, a threaded perl can be built
431 if [ -f /usr/include/pthread.h ]; then
c7d9b096 432 if [ -f /usr/lib/libcma.sl ]; then
433 # DCE (from Core OS CD) is installed
434
fa01be49 435 # Check if it is pristine, or patched
436 cmavsn=`what /usr/lib/libcma.sl 2>&1 | grep 1996`
437 if [ ! -z "$cmavsn" ]; then
438 cat <<EOM >&4
439\a
440***************************************************************************
441
442Perl will support threading through /usr/lib/libcma.sl from
443the HP DCE package, but the version found is too old to be
444reliable.
445
446If you are not depending on this specific version of the library,
447consider to upgrade using patch PHSS_23672 (read README.hpux)
448
449***************************************************************************
450
451(sleeping for 10 seconds...)
452EOM
453 sleep 10
454 fi
455
1dc48e02 456 # It needs # libcma and OLD_PTHREADS_API. Also
457 # <pthread.h> needs to be #included before any
458 # other includes (in perl.h)
c7d9b096 459
460 # HP-UX 10.X uses the old pthreads API
461 d_oldpthreads="$define"
462
463 # include libcma before all the others
464 libswanted="cma $libswanted"
465
1dc48e02 466 # tell perl.h to include <pthread.h> before other
467 # include files
c7d9b096 468 ccflags="$ccflags -DPTHREAD_H_FIRST"
469
1dc48e02 470 # CMA redefines select to cma_select, and cma_select
471 # expects int * instead of fd_set * (just like 9.X)
c7d9b096 472 selecttype='int *'
473
474 elif [ -f /usr/lib/libpthread.sl ]; then
475 # PTH package is installed
476 libswanted="pthread $libswanted"
477 else
478 libswanted="no_threads_available"
479 fi
480 else
481 libswanted="no_threads_available"
482 fi
483
1dc48e02 484 if [ $libswanted = "no_threads_available" ]; then
485 cat <<EOM >&4
f1ee07ac 486
104d25b7 487In HP-UX 10.X for POSIX threads you need both of the files
c7d9b096 488/usr/include/pthread.h and either /usr/lib/libcma.sl or /usr/lib/libpthread.sl.
489Either you must upgrade to HP-UX 11 or install a posix thread library:
f1ee07ac 490
491 DCE-CoreTools from HP-UX 10.20 Hardware Extensions 3.0 CD (B3920-13941)
492
493or
494
1dc48e02 495 PTH package from e.g. http://hpux.tn.tudelft.nl/hppd/hpux/alpha.html
f1ee07ac 496
104d25b7 497Cannot continue, aborting.
498EOM
1dc48e02 499 exit 1
c7d9b096 500 fi
1dc48e02 501 else
502 # 12 may want upping the _POSIX_C_SOURCE datestamp...
10bc17b6 503 ccflags=" -D_POSIX_C_SOURCE=199506L -D_REENTRANT $ccflags"
1dc48e02 504 set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
505 shift
506 libswanted="$*"
507 fi
104d25b7 508
227c31c3 509 usemymalloc='n'
104d25b7 510 ;;
1dc48e02 511 esac
bd9b35c9 512EOCBU
758a5d79 513
514# fpclassify() is a macro, the library call is Fpclassify
38dbb4c5 515# Similarly with the others below.
758a5d79 516d_fpclassify='define'
38dbb4c5 517d_isnan='define'
518d_isinf='define'
519d_isfinite='define'
520d_unordered='define'