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/_/./`;
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`
76 case "`getconf KERNEL_BITS 2>/dev/null`" in
80 3*) ccflags="$ccflags -mpa-risc-2-0"
82 *) # gcc with gas will not accept +DA2.0
83 case "`$cc -c -Wa,+DA2.0 try.c 2>&1`" in
88 ccflags="$ccflags -Wa,+DA2.0"
93 # gcc with gld will not accept +vnocompatwarnings
94 case "`$cc -o try -Wl,+vnocompatwarnings try.c 2>&1`" in
101 ldflags="$ldflags -Wl,+vnocompatwarnings"
102 ccflags="$ccflags -Wl,+vnocompatwarnings"
112 ccversion=`which cc | xargs what | awk '/Compiler/{print $2}'`
115 *) ccflags="-Ae $cc_cppflags -Wl,+vnocompatwarnings" ;;
117 # Needed because cpp does only support -Aa (not -Ae)
120 cppstdin='cc -E -Aa -D__STDC_EXT__'
122 # case "$d_casti32" in
123 # "") d_casti32='undef' ;;
128 # When HP-UX runs a script with "#!", it sets argv[0] to the script name.
129 toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"'
133 # Some gcc versions do native 64 bit long (e.g. 2.9-hppa-000310 and gcc-3.0)
134 # We have to force 64bitness to go search the right libraries
138 echo 'int main(){long l;printf("%d\\n",sizeof(l));}'>try.c
139 $cc -o try $ccflags $ldflags try.c
140 if [ "`try`" = "8" ]; then
143 *** This version of gcc uses 64 bit longs. -Duse64bitall is
144 *** implicitly set to enable continuation
152 case "$use64bitall" in
153 $define|true|[yY]*) use64bitint="$define" ;;
156 case "$usemorebits" in
157 $define|true|[yY]*) use64bitint="$define"; uselongdouble="$define" ;;
160 case "$uselongdouble" in
164 *** long doubles are not (yet) supported on HP-UX (any version)
165 *** Until it does, we cannot continue, aborting.
170 case "$use64bitint" in
173 if [ "$xxOsRevMajor" -lt 11 ]; then
176 *** 64-bit compilation is not supported on HP-UX $xxOsRevMajor.
177 *** You need at least HP-UX 11.0.
178 *** Cannot continue, aborting.
183 # Set libc and the library paths
186 loclibpth="$loclibpth /lib/pa20_64"
187 libc='/lib/pa20_64/libc.sl' ;;
189 loclibpth="$loclibpth /usr/lib/hpux64"
190 libc='/usr/lib/hpux64/libc.so' ;;
192 if [ ! -f "$libc" ]; then
195 *** You do not seem to have the 64-bit libc.
196 *** I cannot find the file $libc.
197 *** Cannot continue, aborting.
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
209 no) case "$gccversion" in
210 [12]*) ccflags="$ccflags -mlp64"
211 ldflags="$ldflags -Wl,+DD64"
218 ccflags="$ccflags +DD64"
219 ldflags="$ldflags +DD64"
223 # Reset the library checker to make sure libraries
225 libscheck='case "`/usr/bin/file $xxx`" in
226 *ELF-64*|*LP64*|*PA-RISC2.0*) ;;
227 *) xxx=/no/64-bit$xxx ;;
232 *) # Not in 64-bit mode
236 libc='/lib/libc.sl' ;;
238 loclibpth="$loclibpth /usr/lib/hpux32"
239 libc='/usr/lib/hpux32/libc.so' ;;
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"
255 if [ "$gnu_ld" = "yes" ]; then
256 ccdlflags="-Wl,-E $ccdlflags"
258 ccdlflags="-Wl,-E -Wl,-B,deferred $ccdlflags"
262 ### COMPILER SPECIFICS
264 ## Local restrictions (point to README.hpux to lift these)
266 ## Optimization limits
268 #include <sys/resource.h>
273 int i = getrlimit (RLIMIT_DATA, &rl);
274 printf ("%d\n", rl.rlim_cur / (1024 * 1024));
277 $cc -o try $ccflags $ldflags try.c
280 if [ $maxdsiz -le 64 ]; then
281 # 64 Mb is probably not enough to optimize toke.c
282 # and regexp.c with -O2
284 Your kernel limits the data section of your programs to $maxdsiz Mb,
285 which is (sadly) not enough to fully optimize some parts of the
286 perl binary. I'll try to use a lower optimization level for
287 those parts. If you are a sysadmin, and you *do* want full
288 optimization, raise the 'maxdsiz' kernel configuration parameter
289 to at least 0x08000000 (128 Mb) and rebuild your kernel.
298 "") optimize="-g -O" ;;
299 *O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;;
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 / /'`
319 if [ $maxdsiz -le 64 ]; then
321 *O2*) opt=`echo "$optimize" | sed -e 's/O2/O1/'`
322 toke_cflags="$toke_cflags;optimize=\"$opt\""
323 regexec_cflags="optimize=\"$opt\""
329 *) # HP's compiler cannot combine -g and -O
331 "") optimize="+O2 +Onolimit" ;;
332 *O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;;
334 if [ $maxdsiz -le 64 ]; then
337 *O2*) opt=`echo "$optimize" | sed -e 's/-O/+O2/' -e 's/O2/O1/' -e 's/ *+Onolimit//'`
338 toke_cflags="$toke_cflags;optimize=\"$opt\""
339 regexec_cflags="optimize=\"$opt\""
345 lddlflags='-b +vnocompatwarnings'
351 #case "$uselargefiles-$ccisgcc" in
352 # "$define-$define"|'-define')
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.
359 # uselargefiles="$undef"
363 cat >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.
366 case "$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.)
370 ccflags_uselargefiles="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
373 *" $ccflags_uselargefiles") ;;
374 *) ccflags="$ccflags $ccflags_uselargefiles" ;;
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'`
382 *) ccflags="$ccflags -Ae" ;;
391 # This script UU/usethreads.cbu will get 'called-back' by Configure
392 # after it has prompted the user for whether to use threads.
393 cat >UU/usethreads.cbu <<'EOCBU'
394 case "$usethreads" in
396 if [ "$xxOsRevMajor" -lt 10 ]; then
399 HP-UX $xxOsRevMajor cannot support POSIX threads.
400 Consider upgrading to at least HP-UX 11.
401 Cannot continue, aborting.
406 if [ "$xxOsRevMajor" -eq 10 ]; then
407 # Under 10.X, a threaded perl can be built
408 if [ -f /usr/include/pthread.h ]; then
409 if [ -f /usr/lib/libcma.sl ]; then
410 # DCE (from Core OS CD) is installed
412 # Check if it is pristine, or patched
413 cmavsn=`what /usr/lib/libcma.sl 2>&1 | grep 1996`
414 if [ ! -z "$cmavsn" ]; then
417 ***************************************************************************
419 Perl will support threading through /usr/lib/libcma.sl from
420 the HP DCE package, but the version found is too old to be
423 If you are not depending on this specific version of the library,
424 consider to upgrade using patch PHSS_23672 (read README.hpux)
426 ***************************************************************************
428 (sleeping for 10 seconds...)
433 # It needs # libcma and OLD_PTHREADS_API. Also
434 # <pthread.h> needs to be #included before any
435 # other includes (in perl.h)
437 # HP-UX 10.X uses the old pthreads API
438 d_oldpthreads="$define"
440 # include libcma before all the others
441 libswanted="cma $libswanted"
443 # tell perl.h to include <pthread.h> before other
445 ccflags="$ccflags -DPTHREAD_H_FIRST"
447 # CMA redefines select to cma_select, and cma_select
448 # expects int * instead of fd_set * (just like 9.X)
451 elif [ -f /usr/lib/libpthread.sl ]; then
452 # PTH package is installed
453 libswanted="pthread $libswanted"
455 libswanted="no_threads_available"
458 libswanted="no_threads_available"
461 if [ $libswanted = "no_threads_available" ]; then
464 In HP-UX 10.X for POSIX threads you need both of the files
465 /usr/include/pthread.h and either /usr/lib/libcma.sl or /usr/lib/libpthread.sl.
466 Either you must upgrade to HP-UX 11 or install a posix thread library:
468 DCE-CoreTools from HP-UX 10.20 Hardware Extensions 3.0 CD (B3920-13941)
472 PTH package from e.g. http://hpux.tn.tudelft.nl/hppd/hpux/alpha.html
474 Cannot continue, aborting.
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 /'`
491 # fpclassify() is a macro, the library call is Fpclassify
492 d_fpclassify='define'