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