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