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