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`;
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
38 if [ "$xxOsRevMajor" -le 10 ]; then
42 echo "Archname is $archname"
45 ### HP-UX OS specific behaviour
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.
51 set `echo "X $libswanted " | sed -e 's/ ld / /' -e 's/ dbm / /' -e 's/ BSD / /' -e 's/ PW / /'`
56 ar=/usr/bin/ar # Yes, truly override. We do not want the GNU ar.
57 full_ar=$ar # I repeat, no GNU ar. arrr.
59 set `echo "X $ccflags " | sed -e 's/ -A[ea] / /' -e 's/ -D_HPUX_SOURCE / /'`
61 cc_cppflags="$* -D_HPUX_SOURCE"
62 cppflags="-Aa -D__STDC_EXT__ $cc_cppflags"
65 "") prefix='/opt/perl5' ;;
70 case `$cc -v 2>&1`"" in
71 *gcc*) ccisgcc="$define"
72 ccflags="$cc_cppflags"
73 if [ "X$gccversion" = "X" ]; then
74 # Done too late in Configure if hinted
75 gccversion=`$cc --version`
78 [012]*) # HP-UX and gcc-2.* break UINT32_MAX :-(
79 ccflags="$ccflags -DUINT32_MAX_BROKEN"
82 case "`getconf KERNEL_BITS 2>/dev/null`" in
86 3*) ccflags="$ccflags -mpa-risc-2-0"
88 *) # gcc with gas will not accept +DA2.0
89 case "`$cc -c -Wa,+DA2.0 try.c 2>&1`" in
94 ccflags="$ccflags -Wa,+DA2.0"
99 # gcc with gld will not accept +vnocompatwarnings
100 case "`$cc -o try -Wl,+vnocompatwarnings try.c 2>&1`" in
101 *"+vnocompat"*) # gld
105 case "$gccversion" in
107 ldflags="$ldflags -Wl,+vnocompatwarnings"
108 ccflags="$ccflags -Wl,+vnocompatwarnings"
118 ccversion=`which cc | xargs what | awk '/Compiler/{print $2}'`
121 *) ccflags="-Ae $cc_cppflags -Wl,+vnocompatwarnings" ;;
123 # Needed because cpp does only support -Aa (not -Ae)
126 cppstdin='cc -E -Aa -D__STDC_EXT__'
128 # case "$d_casti32" in
129 # "") d_casti32='undef' ;;
134 # When HP-UX runs a script with "#!", it sets argv[0] to the script name.
135 toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"'
139 # Some gcc versions do native 64 bit long (e.g. 2.9-hppa-000310 and gcc-3.0)
140 # We have to force 64bitness to go search the right libraries
144 echo 'int main(){long l;printf("%d\\n",sizeof(l));}'>try.c
145 $cc -o try $ccflags $ldflags try.c
146 if [ "`try`" = "8" ]; then
149 *** This version of gcc uses 64 bit longs. -Duse64bitall is
150 *** implicitly set to enable continuation
158 case "$use64bitall" in
159 $define|true|[yY]*) use64bitint="$define" ;;
162 case "$usemorebits" in
163 $define|true|[yY]*) use64bitint="$define"; uselongdouble="$define" ;;
168 # While here, override so=sl auto-detection
172 case "$uselongdouble" in
177 *** long doubles are not (yet) supported on HP-UX (any version)
178 *** Until it does, we cannot continue, aborting.
185 case "$use64bitint" in
188 if [ "$xxOsRevMajor" -lt 11 ]; then
191 *** 64-bit compilation is not supported on HP-UX $xxOsRevMajor.
192 *** You need at least HP-UX 11.0.
193 *** Cannot continue, aborting.
198 # Set libc and the library paths
201 loclibpth="$loclibpth /lib/pa20_64"
202 libc='/lib/pa20_64/libc.sl' ;;
204 loclibpth="$loclibpth /usr/lib/hpux64"
205 libc='/usr/lib/hpux64/libc.so' ;;
207 if [ ! -f "$libc" ]; then
210 *** You do not seem to have the 64-bit libc.
211 *** I cannot find the file $libc.
212 *** Cannot continue, aborting.
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
224 no) case "$gccversion" in
225 [12]*) ccflags="$ccflags -mlp64"
226 ldflags="$ldflags -Wl,+DD64"
233 ccflags="$ccflags +DD64"
234 ldflags="$ldflags +DD64"
238 # Reset the library checker to make sure libraries
240 # (NOTE: on IA64, this doesn't work with .a files.)
241 libscheck='case "`/usr/bin/file $xxx`" in
242 *ELF-64*|*LP64*|*PA-RISC2.0*) ;;
243 *) xxx=/no/64-bit$xxx ;;
248 *) # Not in 64-bit mode
252 libc='/lib/libc.sl' ;;
254 loclibpth="$loclibpth /usr/lib/hpux32"
255 libc='/usr/lib/hpux32/libc.so' ;;
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"
271 if [ "$gnu_ld" = "yes" ]; then
272 ccdlflags="-Wl,-E $ccdlflags"
274 ccdlflags="-Wl,-E -Wl,-B,deferred $ccdlflags"
278 ### COMPILER SPECIFICS
280 ## Local restrictions (point to README.hpux to lift these)
282 ## Optimization limits
284 #include <sys/resource.h>
289 int i = getrlimit (RLIMIT_DATA, &rl);
290 printf ("%d\n", rl.rlim_cur / (1024 * 1024));
293 $cc -o try $ccflags $ldflags try.c
296 if [ $maxdsiz -le 64 ]; then
297 # 64 Mb is probably not enough to optimize toke.c
298 # and regexp.c with -O2
300 Your kernel limits the data section of your programs to $maxdsiz Mb,
301 which is (sadly) not enough to fully optimize some parts of the
302 perl binary. I'll try to use a lower optimization level for
303 those parts. If you are a sysadmin, and you *do* want full
304 optimization, raise the 'maxdsiz' kernel configuration parameter
305 to at least 0x08000000 (128 Mb) and rebuild your kernel.
315 "") optimize="-g -O" ;;
316 *O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;;
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 / /'`
336 if [ $maxdsiz -le 64 ]; then
338 *O2*) opt=`echo "$optimize" | sed -e 's/O2/O1/'`
339 toke_cflags="$toke_cflags;optimize=\"$opt\""
340 regexec_cflags="optimize=\"$opt\""
346 *) # HP's compiler cannot combine -g and -O
348 "") optimize="+O2 +Onolimit" ;;
349 *O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;;
353 *O2*) opt=`echo "$optimize" | sed -e 's/-O/+O2/' -e 's/O2/O1/' -e 's/ *+Onolimit//'`
358 if [ $maxdsiz -le 64 ]; then
359 toke_cflags="$toke_cflags;optimize=\"$opt\""
360 regexec_cflags="optimize=\"$opt\""
364 doop_cflags="optimize=\"$opt\""
369 lddlflags='-b +vnocompatwarnings'
375 #case "$uselargefiles-$ccisgcc" in
376 # "$define-$define"|'-define')
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.
383 # uselargefiles="$undef"
387 cat >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.
390 case "$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.)
394 ccflags_uselargefiles="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
397 *" $ccflags_uselargefiles "*) ;;
398 *) ccflags="$ccflags $ccflags_uselargefiles" ;;
401 if test -z "$ccisgcc" -a -z "$gccversion"; then
402 # The strict ANSI mode (-Aa) doesn't like large files.
403 ccflags=`echo " $ccflags "|sed 's@ -Aa @ @g'`
406 *) ccflags="$ccflags -Ae" ;;
415 # This script UU/usethreads.cbu will get 'called-back' by Configure
416 # after it has prompted the user for whether to use threads.
417 cat >UU/usethreads.cbu <<'EOCBU'
418 case "$usethreads" in
420 if [ "$xxOsRevMajor" -lt 10 ]; then
423 HP-UX $xxOsRevMajor cannot support POSIX threads.
424 Consider upgrading to at least HP-UX 11.
425 Cannot continue, aborting.
430 if [ "$xxOsRevMajor" -eq 10 ]; then
431 # Under 10.X, a threaded perl can be built
432 if [ -f /usr/include/pthread.h ]; then
433 if [ -f /usr/lib/libcma.sl ]; then
434 # DCE (from Core OS CD) is installed
436 # Check if it is pristine, or patched
437 cmavsn=`what /usr/lib/libcma.sl 2>&1 | grep 1996`
438 if [ ! -z "$cmavsn" ]; then
441 ***************************************************************************
443 Perl will support threading through /usr/lib/libcma.sl from
444 the HP DCE package, but the version found is too old to be
447 If you are not depending on this specific version of the library,
448 consider to upgrade using patch PHSS_23672 (read README.hpux)
450 ***************************************************************************
452 (sleeping for 10 seconds...)
457 # It needs # libcma and OLD_PTHREADS_API. Also
458 # <pthread.h> needs to be #included before any
459 # other includes (in perl.h)
461 # HP-UX 10.X uses the old pthreads API
462 d_oldpthreads="$define"
464 # include libcma before all the others
465 libswanted="cma $libswanted"
467 # tell perl.h to include <pthread.h> before other
469 ccflags="$ccflags -DPTHREAD_H_FIRST"
471 # CMA redefines select to cma_select, and cma_select
472 # expects int * instead of fd_set * (just like 9.X)
475 elif [ -f /usr/lib/libpthread.sl ]; then
476 # PTH package is installed
477 libswanted="pthread $libswanted"
479 libswanted="no_threads_available"
482 libswanted="no_threads_available"
485 if [ $libswanted = "no_threads_available" ]; then
488 In HP-UX 10.X for POSIX threads you need both of the files
489 /usr/include/pthread.h and either /usr/lib/libcma.sl or /usr/lib/libpthread.sl.
490 Either you must upgrade to HP-UX 11 or install a posix thread library:
492 DCE-CoreTools from HP-UX 10.20 Hardware Extensions 3.0 CD (B3920-13941)
496 PTH package from e.g. http://hpux.tn.tudelft.nl/hppd/hpux/alpha.html
498 Cannot continue, aborting.
503 # 12 may want upping the _POSIX_C_SOURCE datestamp...
504 ccflags=" -D_POSIX_C_SOURCE=199506L -D_REENTRANT $ccflags"
505 set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
515 # fpclassify() is a macro, the library call is Fpclassify
516 # Similarly with the others below.
517 d_fpclassify='define'