Integrate mainline
[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" |
23 sed -e s/_RISC/-RISC/ -e s/HP_// -e s/_/./`;
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
0f3ba31f 76 case "`getconf KERNEL_BITS 2>/dev/null`" in
dcd01700 77 *64*)
eb9ee3dc 78 echo "main(){}">try.c
16c1da12 79 case "$gccversion" in
80 3*) ccflags="$ccflags -mpa-risc-2-0"
dcd01700 81 ;;
eb9ee3dc 82 *) # gcc with gas will not accept +DA2.0
16c1da12 83 case "`$cc -c -Wa,+DA2.0 try.c 2>&1`" in
84 *"+DA2.0"*) # gas
85 gnu_as=yes
86 ;;
87 *) # HPas
88 ccflags="$ccflags -Wa,+DA2.0"
89 ;;
90 esac
dcd01700 91 ;;
92 esac
93 # gcc with gld will not accept +vnocompatwarnings
94 case "`$cc -o try -Wl,+vnocompatwarnings try.c 2>&1`" in
95 *"+vnocompat"*) # gld
96 gnu_ld=yes
97 ;;
98 *) # HPld
9fecddab 99 case "$gccversion" in
100 [12]*)
101 ldflags="$ldflags -Wl,+vnocompatwarnings"
102 ccflags="$ccflags -Wl,+vnocompatwarnings"
103 ;;
104 esac
dcd01700 105 ;;
106 esac
eb9ee3dc 107 rm -f try.c
dcd01700 108 ;;
0f3ba31f 109 esac
c723583c 110 ;;
111 *) ccisgcc=''
112 ccversion=`which cc | xargs what | awk '/Compiler/{print $2}'`
0fb2d8c6 113 case "$ccflags" in
114 "-Ae "*) ;;
115 *) ccflags="-Ae $cc_cppflags -Wl,+vnocompatwarnings" ;;
116 esac
5e2807cc 117 # Needed because cpp does only support -Aa (not -Ae)
118 cpplast='-'
119 cppminus='-'
120 cppstdin='cc -E -Aa -D__STDC_EXT__'
121 cpprun=$cppstdin
0f3ba31f 122 case "$d_casti32" in
123 "") d_casti32='undef' ;;
124 esac
125 ;;
1dc48e02 126 esac
127
e08bfeb2 128# When HP-UX runs a script with "#!", it sets argv[0] to the script name.
129toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"'
1dc48e02 130
1dc48e02 131### 64 BITNESS
b36fec95 132
8cb447e0 133# Some gcc versions do native 64 bit long (e.g. 2.9-hppa-000310 and gcc-3.0)
dcd01700 134# We have to force 64bitness to go search the right libraries
135 gcc_64native=no
136case "$ccisgcc" in
137 $define|true|[Yy])
eb9ee3dc 138 echo 'int main(){long l;printf("%d\\n",sizeof(l));}'>try.c
dcd01700 139 $cc -o try $ccflags $ldflags try.c
140 if [ "`try`" = "8" ]; then
141 cat <<EOM >&4
142
143*** This version of gcc uses 64 bit longs. -Duse64bitall is
144*** implicitly set to enable continuation
145EOM
146 use64bitall=$define
147 gcc_64native=yes
148 fi
149 ;;
150 esac
151
ec7b9793 152case "$use64bitall" in
1dc48e02 153 $define|true|[yY]*) use64bitint="$define" ;;
154 esac
155
6d5d7abf 156case "$usemorebits" in
1dc48e02 157 $define|true|[yY]*) use64bitint="$define"; uselongdouble="$define" ;;
158 esac
bf0c440f 159
1dc48e02 160case "$uselongdouble" in
161 $define|true|[yY]*)
162 cat <<EOM >&4
163
164*** long doubles are not (yet) supported on HP-UX (any version)
165*** Until it does, we cannot continue, aborting.
bf0c440f 166EOM
1dc48e02 167 exit 1 ;;
168 esac
bf0c440f 169
1dc48e02 170case "$use64bitint" in
171 $define|true|[Yy])
bf0c440f 172
1dc48e02 173 if [ "$xxOsRevMajor" -lt 11 ]; then
174 cat <<EOM >&4
175
176*** 64-bit compilation is not supported on HP-UX $xxOsRevMajor.
177*** You need at least HP-UX 11.0.
ec7b9793 178*** Cannot continue, aborting.
bf0c440f 179EOM
1dc48e02 180 exit 1
181 fi
bf0c440f 182
1dc48e02 183 # Set libc and the library paths
184 case "$archname" in
185 PA-RISC*)
186 loclibpth="$loclibpth /lib/pa20_64"
187 libc='/lib/pa20_64/libc.sl' ;;
188 IA64*)
189 loclibpth="$loclibpth /usr/lib/hpux64"
190 libc='/usr/lib/hpux64/libc.so' ;;
191 esac
192 if [ ! -f "$libc" ]; then
193 cat <<EOM >&4
194
195*** You do not seem to have the 64-bit libc.
196*** I cannot find the file $libc.
197*** Cannot continue, aborting.
198EOM
199 exit 1
200 fi
bf0c440f 201
dcd01700 202 case "$ccisgcc" in
203 $define|true|[Yy])
204 # For the moment, don't care that it ain't supported (yet)
205 # by gcc (up to and including 2.95.3), cause it'll crash
206 # anyway. Expect auto-detection of 64-bit enabled gcc on
207 # HP-UX soon, including a user-friendly exit
208 case $gcc_64native in
16c1da12 209 no) case "$gccversion" in
210 [12]*) ccflags="$ccflags -mlp64"
211 ldflags="$ldflags -Wl,+DD64"
212 ;;
213 esac
dcd01700 214 ;;
215 esac
216 ;;
217 *)
218 ccflags="$ccflags +DD64"
219 ldflags="$ldflags +DD64"
220 ;;
221 esac
bf0c440f 222
1dc48e02 223 # Reset the library checker to make sure libraries
224 # are the right type
225 libscheck='case "`/usr/bin/file $xxx`" in
226 *ELF-64*|*LP64*|*PA-RISC2.0*) ;;
227 *) xxx=/no/64-bit$xxx ;;
228 esac'
229
230 ;;
231
232 *) # Not in 64-bit mode
233
234 case "$archname" in
235 PA-RISC*)
236 libc='/lib/libc.sl' ;;
237 IA64*)
238 loclibpth="$loclibpth /usr/lib/hpux32"
239 libc='/usr/lib/hpux32/libc.so' ;;
240 esac
241 ;;
242 esac
243
dcd01700 244# By setting the deferred flag below, this means that if you run perl
245# on a system that does not have the required shared library that you
246# linked it with, it will die when you try to access a symbol in the
247# (missing) shared library. If you would rather know at perl startup
248# time that you are missing an important shared library, switch the
249# comments so that immediate, rather than deferred loading is
250# performed. Even with immediate loading, you can postpone errors for
251# undefined (or multiply defined) routines until actual access by
252# adding the "nonfatal" option.
253# ccdlflags="-Wl,-E -Wl,-B,immediate $ccdlflags"
254# ccdlflags="-Wl,-E -Wl,-B,immediate,-B,nonfatal $ccdlflags"
255if [ "$gnu_ld" = "yes" ]; then
256 ccdlflags="-Wl,-E $ccdlflags"
257else
258 ccdlflags="-Wl,-E -Wl,-B,deferred $ccdlflags"
259 fi
260
1dc48e02 261
262### COMPILER SPECIFICS
bf0c440f 263
7f128676 264## Local restrictions (point to README.hpux to lift these)
265
266## Optimization limits
267cat >try.c <<EOF
268#include <sys/resource.h>
269
270int main ()
271{
272 struct rlimit rl;
273 int i = getrlimit (RLIMIT_DATA, &rl);
274 printf ("%d\n", rl.rlim_cur / (1024 * 1024));
275 } /* main */
276EOF
277$cc -o try $ccflags $ldflags try.c
278 maxdsiz=`try`
303aa268 279rm -f try try.c core
7f128676 280if [ $maxdsiz -le 64 ]; then
281 # 64 Mb is probably not enough to optimize toke.c
282 # and regexp.c with -O2
283 cat <<EOM >&4
284Your kernel limits the data section of your programs to $maxdsiz Mb,
285which is (sadly) not enough to fully optimize some parts of the
286perl binary. I'll try to use a lower optimization level for
287those parts. If you are a sysadmin, and you *do* want full
288optimization, raise the 'maxdsiz' kernel configuration parameter
289to at least 0x08000000 (128 Mb) and rebuild your kernel.
290EOM
a6bab54c 291regexec_cflags=''
7f128676 292 fi
293
b36fec95 294case "$ccisgcc" in
1dc48e02 295 $define|true|[Yy])
296
297 case "$optimize" in
c723583c 298 "") optimize="-g -O" ;;
299 *O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;;
1dc48e02 300 esac
c723583c 301 #ld="$cc"
5e2807cc 302 ld=/usr/bin/ld
1dc48e02 303 cccdlflags='-fPIC'
c723583c 304 #lddlflags='-shared'
5e2807cc 305 lddlflags='-b'
c723583c 306 case "$optimize" in
307 *-g*-O*|*-O*-g*)
308 # gcc without gas will not accept -g
309 echo "main(){}">try.c
310 case "`$cc $optimize -c try.c 2>&1`" in
311 *"-g option disabled"*)
312 set `echo "X $optimize " | sed -e 's/ -g / /'`
313 shift
314 optimize="$*"
315 ;;
316 esac
317 ;;
318 esac
7f128676 319 if [ $maxdsiz -le 64 ]; then
7f128676 320 case "$optimize" in
321 *O2*) opt=`echo "$optimize" | sed -e 's/O2/O1/'`
a6bab54c 322 toke_cflags="$toke_cflags;optimize=\"$opt\""
323 regexec_cflags="optimize=\"$opt\""
7f128676 324 ;;
325 esac
326 fi
1dc48e02 327 ;;
328
329 *) # HP's compiler cannot combine -g and -O
330 case "$optimize" in
5e2807cc 331 "") optimize="+O2 +Onolimit" ;;
c723583c 332 *O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;;
1dc48e02 333 esac
7f128676 334 if [ $maxdsiz -le 64 ]; then
7f128676 335 case "$optimize" in
336 *-O*|\
337 *O2*) opt=`echo "$optimize" | sed -e 's/-O/+O2/' -e 's/O2/O1/' -e 's/ *+Onolimit//'`
a6bab54c 338 toke_cflags="$toke_cflags;optimize=\"$opt\""
339 regexec_cflags="optimize=\"$opt\""
7f128676 340 ;;
341 esac
342 fi
1dc48e02 343 ld=/usr/bin/ld
344 cccdlflags='+Z'
c723583c 345 lddlflags='-b +vnocompatwarnings'
1dc48e02 346 ;;
b36fec95 347 esac
8e07c86e 348
1dc48e02 349## LARGEFILES
774d564b 350
c723583c 351#case "$uselargefiles-$ccisgcc" in
352# "$define-$define"|'-define')
353# cat <<EOM >&4
354#
355#*** I'm ignoring large files for this build because
356#*** I don't know how to do use large files in HP-UX using gcc.
357#
358#EOM
359# uselargefiles="$undef"
360# ;;
361# esac
dc45a647 362
1dc48e02 363cat >UU/uselargefiles.cbu <<'EOCBU'
364# This script UU/uselargefiles.cbu will get 'called-back' by Configure
365# after it has prompted the user for whether to use large files.
366case "$uselargefiles" in
367 ""|$define|true|[yY]*)
368 # there are largefile flags available via getconf(1)
369 # but we cheat for now. (Keep that in the left margin.)
370ccflags_uselargefiles="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
5cf1d1f1 371
0fb2d8c6 372 case "$ccflags" in
373 *" $ccflags_uselargefiles") ;;
374 *) ccflags="$ccflags $ccflags_uselargefiles" ;;
375 esac
1dc48e02 376
377 if test -z "$ccisgcc" -a -z "$gccversion"; then
378 # The strict ANSI mode (-Aa) doesn't like large files.
379 ccflags=`echo " $ccflags "|sed 's@ -Aa @ @g'`
380 case "$ccflags" in
381 *-Ae*) ;;
382 *) ccflags="$ccflags -Ae" ;;
383 esac
fa2879fb 384 fi
385 ;;
386 esac
1dc48e02 387EOCBU
fa2879fb 388
1dc48e02 389# THREADING
104d25b7 390
391# This script UU/usethreads.cbu will get 'called-back' by Configure
392# after it has prompted the user for whether to use threads.
1dc48e02 393cat >UU/usethreads.cbu <<'EOCBU'
104d25b7 394case "$usethreads" in
1dc48e02 395 $define|true|[yY]*)
396 if [ "$xxOsRevMajor" -lt 10 ]; then
397 cat <<EOM >&4
f1ee07ac 398
104d25b7 399HP-UX $xxOsRevMajor cannot support POSIX threads.
400Consider upgrading to at least HP-UX 11.
401Cannot continue, aborting.
402EOM
1dc48e02 403 exit 1
404 fi
405
406 if [ "$xxOsRevMajor" -eq 10 ]; then
407 # Under 10.X, a threaded perl can be built
408 if [ -f /usr/include/pthread.h ]; then
c7d9b096 409 if [ -f /usr/lib/libcma.sl ]; then
410 # DCE (from Core OS CD) is installed
411
fa01be49 412 # Check if it is pristine, or patched
413 cmavsn=`what /usr/lib/libcma.sl 2>&1 | grep 1996`
414 if [ ! -z "$cmavsn" ]; then
415 cat <<EOM >&4
416\a
417***************************************************************************
418
419Perl will support threading through /usr/lib/libcma.sl from
420the HP DCE package, but the version found is too old to be
421reliable.
422
423If you are not depending on this specific version of the library,
424consider to upgrade using patch PHSS_23672 (read README.hpux)
425
426***************************************************************************
427
428(sleeping for 10 seconds...)
429EOM
430 sleep 10
431 fi
432
1dc48e02 433 # It needs # libcma and OLD_PTHREADS_API. Also
434 # <pthread.h> needs to be #included before any
435 # other includes (in perl.h)
c7d9b096 436
437 # HP-UX 10.X uses the old pthreads API
438 d_oldpthreads="$define"
439
440 # include libcma before all the others
441 libswanted="cma $libswanted"
442
1dc48e02 443 # tell perl.h to include <pthread.h> before other
444 # include files
c7d9b096 445 ccflags="$ccflags -DPTHREAD_H_FIRST"
446
1dc48e02 447 # CMA redefines select to cma_select, and cma_select
448 # expects int * instead of fd_set * (just like 9.X)
c7d9b096 449 selecttype='int *'
450
451 elif [ -f /usr/lib/libpthread.sl ]; then
452 # PTH package is installed
453 libswanted="pthread $libswanted"
454 else
455 libswanted="no_threads_available"
456 fi
457 else
458 libswanted="no_threads_available"
459 fi
460
1dc48e02 461 if [ $libswanted = "no_threads_available" ]; then
462 cat <<EOM >&4
f1ee07ac 463
104d25b7 464In HP-UX 10.X for POSIX threads you need both of the files
c7d9b096 465/usr/include/pthread.h and either /usr/lib/libcma.sl or /usr/lib/libpthread.sl.
466Either you must upgrade to HP-UX 11 or install a posix thread library:
f1ee07ac 467
468 DCE-CoreTools from HP-UX 10.20 Hardware Extensions 3.0 CD (B3920-13941)
469
470or
471
1dc48e02 472 PTH package from e.g. http://hpux.tn.tudelft.nl/hppd/hpux/alpha.html
f1ee07ac 473
104d25b7 474Cannot continue, aborting.
475EOM
1dc48e02 476 exit 1
c7d9b096 477 fi
1dc48e02 478 else
479 # 12 may want upping the _POSIX_C_SOURCE datestamp...
480 ccflags=" -D_POSIX_C_SOURCE=199506L $ccflags"
481 set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
482 shift
483 libswanted="$*"
484 fi
104d25b7 485
227c31c3 486 usemymalloc='n'
104d25b7 487 ;;
1dc48e02 488 esac
bd9b35c9 489EOCBU
758a5d79 490
491# fpclassify() is a macro, the library call is Fpclassify
492d_fpclassify='define'