3 ### SYSTEM ARCHITECTURE
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`;
8 if [ "$xxOsRevMajor" -ge 10 ]; then
9 # This system is running >= 10.x
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.
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/_/./ -e "s/[[:space:]]*//g"`;
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.
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`;
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
37 if [ "$xxOsRevMajor" -le 10 ]; then
41 echo "Archname is $archname"
44 ### HP-UX OS specific behaviour
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.
50 set `echo "X $libswanted " | sed -e 's/ ld / /' -e 's/ dbm / /' -e 's/ BSD / /' -e 's/ PW / /'`
55 ar=/usr/bin/ar # Yes, truly override. We do not want the GNU ar.
56 full_ar=$ar # I repeat, no GNU ar. arrr.
58 set `echo "X $ccflags " | sed -e 's/ -A[ea] / /' -e 's/ -D_HPUX_SOURCE / /'`
60 cc_cppflags="$* -D_HPUX_SOURCE"
61 cppflags="-Aa -D__STDC_EXT__ $cc_cppflags"
64 "") prefix='/opt/perl5' ;;
69 case `$cc -v 2>&1`"" in
70 *gcc*) ccisgcc="$define"
71 ccflags="$cc_cppflags"
72 if [ "X$gccversion" = "X" ]; then
73 # Done too late in Configure if hinted
74 gccversion=`$cc --version`
77 [012]*) # HP-UX and gcc-2.* break UINT32_MAX :-(
78 ccflags="$ccflags -DUINT32_MAX_BROKEN"
81 case "`getconf KERNEL_BITS 2>/dev/null`" in
85 3*) ccflags="$ccflags -mpa-risc-2-0"
87 *) # gcc with gas will not accept +DA2.0
88 case "`$cc -c -Wa,+DA2.0 try.c 2>&1`" in
93 ccflags="$ccflags -Wa,+DA2.0"
98 # gcc with gld will not accept +vnocompatwarnings
99 case "`$cc -o try -Wl,+vnocompatwarnings try.c 2>&1`" in
100 *"+vnocompat"*) # gld
104 case "$gccversion" in
106 ldflags="$ldflags -Wl,+vnocompatwarnings"
107 ccflags="$ccflags -Wl,+vnocompatwarnings"
117 ccversion=`which cc | xargs what | awk '/Compiler/{print $2}'`
120 *) ccflags="-Ae $cc_cppflags -Wl,+vnocompatwarnings" ;;
122 # Needed because cpp does only support -Aa (not -Ae)
125 cppstdin='cc -E -Aa -D__STDC_EXT__'
127 # case "$d_casti32" in
128 # "") d_casti32='undef' ;;
133 # When HP-UX runs a script with "#!", it sets argv[0] to the script name.
134 toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"'
138 # Some gcc versions do native 64 bit long (e.g. 2.9-hppa-000310 and gcc-3.0)
139 # We have to force 64bitness to go search the right libraries
143 echo 'int main(){long l;printf("%d\\n",sizeof(l));}'>try.c
144 $cc -o try $ccflags $ldflags try.c
145 if [ "`try`" = "8" ]; then
148 *** This version of gcc uses 64 bit longs. -Duse64bitall is
149 *** implicitly set to enable continuation
157 case "$use64bitall" in
158 $define|true|[yY]*) use64bitint="$define" ;;
161 case "$usemorebits" in
162 $define|true|[yY]*) use64bitint="$define"; uselongdouble="$define" ;;
167 # While here, override so=sl auto-detection
171 case "$uselongdouble" in
176 *** long doubles are not (yet) supported on HP-UX (any version)
177 *** Until it does, we cannot continue, aborting.
184 case "$use64bitint" in
187 if [ "$xxOsRevMajor" -lt 11 ]; then
190 *** 64-bit compilation is not supported on HP-UX $xxOsRevMajor.
191 *** You need at least HP-UX 11.0.
192 *** Cannot continue, aborting.
197 # Set libc and the library paths
200 loclibpth="$loclibpth /lib/pa20_64"
201 libc='/lib/pa20_64/libc.sl' ;;
203 loclibpth="$loclibpth /usr/lib/hpux64"
204 libc='/usr/lib/hpux64/libc.so' ;;
206 if [ ! -f "$libc" ]; then
209 *** You do not seem to have the 64-bit libc.
210 *** I cannot find the file $libc.
211 *** Cannot continue, aborting.
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
223 no) case "$gccversion" in
224 [12]*) ccflags="$ccflags -mlp64"
225 ldflags="$ldflags -Wl,+DD64"
232 ccflags="$ccflags +DD64"
233 ldflags="$ldflags +DD64"
237 # Reset the library checker to make sure libraries
239 # (NOTE: on IA64, this doesn't work with .a files.)
240 libscheck='case "`/usr/bin/file $xxx`" in
241 *ELF-64*|*LP64*|*PA-RISC2.0*) ;;
242 *) xxx=/no/64-bit$xxx ;;
247 *) # Not in 64-bit mode
251 libc='/lib/libc.sl' ;;
253 loclibpth="$loclibpth /usr/lib/hpux32"
254 libc='/usr/lib/hpux32/libc.so' ;;
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"
270 if [ "$gnu_ld" = "yes" ]; then
271 ccdlflags="-Wl,-E $ccdlflags"
273 ccdlflags="-Wl,-E -Wl,-B,deferred $ccdlflags"
277 ### COMPILER SPECIFICS
279 ## Local restrictions (point to README.hpux to lift these)
281 ## Optimization limits
283 #include <sys/resource.h>
288 int i = getrlimit (RLIMIT_DATA, &rl);
289 printf ("%d\n", rl.rlim_cur / (1024 * 1024));
292 $cc -o try $ccflags $ldflags try.c
295 if [ $maxdsiz -le 64 ]; then
296 # 64 Mb is probably not enough to optimize toke.c
297 # and regexp.c with -O2
299 Your kernel limits the data section of your programs to $maxdsiz Mb,
300 which is (sadly) not enough to fully optimize some parts of the
301 perl binary. I'll try to use a lower optimization level for
302 those parts. If you are a sysadmin, and you *do* want full
303 optimization, raise the 'maxdsiz' kernel configuration parameter
304 to at least 0x08000000 (128 Mb) and rebuild your kernel.
314 "") optimize="-g -O" ;;
315 *O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;;
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 / /'`
335 if [ $maxdsiz -le 64 ]; then
337 *O2*) opt=`echo "$optimize" | sed -e 's/O2/O1/'`
338 toke_cflags="$toke_cflags;optimize=\"$opt\""
339 regexec_cflags="optimize=\"$opt\""
345 *) # HP's compiler cannot combine -g and -O
347 "") optimize="+O2 +Onolimit" ;;
348 *O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;;
352 *O2*) opt=`echo "$optimize" | sed -e 's/-O/+O2/' -e 's/O2/O1/' -e 's/ *+Onolimit//'`
357 if [ $maxdsiz -le 64 ]; then
358 toke_cflags="$toke_cflags;optimize=\"$opt\""
359 regexec_cflags="optimize=\"$opt\""
363 doop_cflags="optimize=\"$opt\""
368 lddlflags='-b +vnocompatwarnings'
374 #case "$uselargefiles-$ccisgcc" in
375 # "$define-$define"|'-define')
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.
382 # uselargefiles="$undef"
386 cat >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.
389 case "$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.)
393 ccflags_uselargefiles="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
396 *" $ccflags_uselargefiles "*) ;;
397 *) ccflags="$ccflags $ccflags_uselargefiles" ;;
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'`
405 *) ccflags="$ccflags -Ae" ;;
414 # This script UU/usethreads.cbu will get 'called-back' by Configure
415 # after it has prompted the user for whether to use threads.
416 cat >UU/usethreads.cbu <<'EOCBU'
417 case "$usethreads" in
419 if [ "$xxOsRevMajor" -lt 10 ]; then
422 HP-UX $xxOsRevMajor cannot support POSIX threads.
423 Consider upgrading to at least HP-UX 11.
424 Cannot continue, aborting.
429 if [ "$xxOsRevMajor" -eq 10 ]; then
430 # Under 10.X, a threaded perl can be built
431 if [ -f /usr/include/pthread.h ]; then
432 if [ -f /usr/lib/libcma.sl ]; then
433 # DCE (from Core OS CD) is installed
435 # Check if it is pristine, or patched
436 cmavsn=`what /usr/lib/libcma.sl 2>&1 | grep 1996`
437 if [ ! -z "$cmavsn" ]; then
440 ***************************************************************************
442 Perl will support threading through /usr/lib/libcma.sl from
443 the HP DCE package, but the version found is too old to be
446 If you are not depending on this specific version of the library,
447 consider to upgrade using patch PHSS_23672 (read README.hpux)
449 ***************************************************************************
451 (sleeping for 10 seconds...)
456 # It needs # libcma and OLD_PTHREADS_API. Also
457 # <pthread.h> needs to be #included before any
458 # other includes (in perl.h)
460 # HP-UX 10.X uses the old pthreads API
461 d_oldpthreads="$define"
463 # include libcma before all the others
464 libswanted="cma $libswanted"
466 # tell perl.h to include <pthread.h> before other
468 ccflags="$ccflags -DPTHREAD_H_FIRST"
470 # CMA redefines select to cma_select, and cma_select
471 # expects int * instead of fd_set * (just like 9.X)
474 elif [ -f /usr/lib/libpthread.sl ]; then
475 # PTH package is installed
476 libswanted="pthread $libswanted"
478 libswanted="no_threads_available"
481 libswanted="no_threads_available"
484 if [ $libswanted = "no_threads_available" ]; then
487 In HP-UX 10.X for POSIX threads you need both of the files
488 /usr/include/pthread.h and either /usr/lib/libcma.sl or /usr/lib/libpthread.sl.
489 Either you must upgrade to HP-UX 11 or install a posix thread library:
491 DCE-CoreTools from HP-UX 10.20 Hardware Extensions 3.0 CD (B3920-13941)
495 PTH package from e.g. http://hpux.tn.tudelft.nl/hppd/hpux/alpha.html
497 Cannot continue, aborting.
502 # 12 may want upping the _POSIX_C_SOURCE datestamp...
503 ccflags=" -D_POSIX_C_SOURCE=199506L -D_REENTRANT $ccflags"
504 set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
514 # fpclassify() is a macro, the library call is Fpclassify
515 # Similarly with the others below.
516 d_fpclassify='define'