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