perldelta for the shift work.
[perl.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # Note: this Configure script was generated automatically by the tool
15 # called "metaconfig". Rather than working with this copy of Configure,
16 # you may wish to get metaconfig. Perl uses a modified version of this
17 # tool, available in the "dist" folder in the checkout of the git repo
18 #    $ git clone git://perl5.git.perl.org/metaconfig.git metaconfig
19 # The original dist package (including metaconfig) is available via SVN:
20 #    $ svn co https://svn.code.sf.net/p/dist/code/trunk/dist
21 #
22 # Though this script was generated by metaconfig from metaunits, it is
23 # OK to send patches against Configure itself. It's up to the Configure
24 # pumpkin to backport the patch to the metaunits if it is accepted.
25 # For more information on patching Configure, see pod/perlhack.pod
26 #
27 # The metaunits are also available from the public git repository:
28 #     http://perl5.git.perl.org/metaconfig.git/ or
29 #     $ git clone git://perl5.git.perl.org/metaconfig.git metaconfig
30 #
31 # See Porting/pumpkin.pod for more information on metaconfig.
32
33 # Generated using [metaconfig 3.5 PL0]
34 # (with additional metaconfig patches by perlbug@perl.org)
35
36 cat >c1$$ <<EOF
37 ARGGGHHHH!!!!!
38
39 SCO csh still thinks true is false.  Write to SCO today and tell them that next
40 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
41
42 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
43 we'd have to do is go in and swap the && and || tokens, wherever they are.)
44
45 [End of diatribe. We now return you to your regularly scheduled programming...]
46 EOF
47 cat >c2$$ <<EOF
48
49 OOPS!  You naughty creature!  You didn't run Configure with sh!
50 I will attempt to remedy the situation by running sh for you...
51 EOF
52
53 true || cat c1$$ c2$$
54 true || exec sh $0 $argv:q
55
56 (exit $?0) || cat c2$$
57 (exit $?0) || exec sh $0 $argv:q
58 rm -f c1$$ c2$$
59
60 if test -f /dev/cputype -a -f /dev/drivers -a -f /dev/osversion; then
61         cat <<EOF
62 ***
63 *** I'm sorry but this system looks like Plan 9 and Plan 9 doesn't do
64 *** Configure that well.  (Plan 9 is close to UNIX but not close enough.)
65 *** Please read the README.plan9 for further instructions.
66 *** Cannot continue, aborting.
67 ***
68 EOF
69         exit 1
70 fi
71
72 if test ! -c /dev/null ; then
73         cat <<EOF
74 ***
75 *** I'm sorry, but /dev/null appears to be a file rather than a device.
76 *** Please consult your operating sytem's notes for making a device
77 *** in /dev.
78 *** Cannot continue, aborting.
79 ***
80 EOF
81         exit 1
82 fi
83
84 : compute my invocation name
85 me=$0
86 case "$0" in
87 */*)
88         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
89         test "$me" || me=$0
90         ;;
91 esac
92
93 : Proper separator for the PATH environment variable
94 p_=:
95 : On OS/2 this directory should exist if this is not floppy only system ":-]"
96 if test -d c:/. || ( uname -a | grep -i 'os\(/\|\)2' 2>&1 ) 2>&1 >/dev/null ; then
97         if test -n "$OS2_SHELL"; then
98                 p_=\;
99                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
100                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
101                 is_os2=yes
102         elif test -n "$DJGPP"; then
103                 case "X${MACHTYPE:-nonesuchmach}" in
104                 *cygwin|*msys) ;;
105                 *) p_=\; ;;
106                 esac
107         fi
108 fi
109
110 : Proper PATH setting
111 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
112 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
113 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
114 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
115 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
116 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /opt/ansic/bin /usr/ccs/bin"
117 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
118 paths="$paths /sbin /usr/sbin /usr/libexec"
119 paths="$paths /system/gnu_library/bin"
120
121 for p in $paths
122 do
123         case "$p_$PATH$p_" in
124         *$p_$p$p_*) ;;
125         *) test -d $p && PATH=$PATH$p_$p ;;
126         esac
127 done
128
129 PATH=.$p_$PATH
130 export PATH
131
132 : shall we be using ksh?
133 inksh=''
134 needksh=''
135 avoidksh=''
136 newsh=/bin/ksh
137 changesh=''
138 if (PATH=.; alias -x) >/dev/null 2>&1; then
139                 inksh=true
140 fi
141 if test -f /hp-ux -a -f /bin/ksh; then
142         needksh='to avoid sh bug in "here document" expansion'
143 fi
144 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
145         if test X`/usr/bin/uname -v` = X4; then
146                 avoidksh="to avoid AIX 4's /bin/sh"
147                 newsh=/usr/bin/bsh
148         fi
149 fi
150 if test -f /osf_boot -a -f /usr/sbin/setld; then
151         if test X`/usr/bin/uname -s` = XOSF1; then
152                 avoidksh="to avoid Digital UNIX' ksh"
153                 newsh=/bin/sh
154                 unset BIN_SH
155         fi
156 fi
157 case "$inksh/$needksh" in
158 /[a-z]*)
159                 ENV=''
160                 changesh=true
161                 reason="$needksh"
162         ;;
163 esac
164 case "$inksh/$avoidksh" in
165 true/[a-z]*)
166         changesh=true
167         reason="$avoidksh"
168         ;;
169 esac
170 case "$inksh/$needksh-$avoidksh-" in
171 true/--)
172                 cat <<EOM
173 (I see you are using the Korn shell.  Some ksh's blow up on $me,
174 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
175 EOM
176         ;;
177 esac
178 case "$changesh" in
179 true)
180         export newsh
181         echo "(Feeding myself to $newsh $reason.)"
182         case "$0" in
183         Configure|*/Configure) exec $newsh $0 "$@";;
184         *) exec $newsh Configure "$@";;
185         esac
186         ;;
187 esac
188 test -x "${newsh}" || unset newsh
189
190 : if needed, set CDPATH to a harmless value that is not chatty
191 : avoid bash 2.02 problems with empty CDPATH.
192 case "$CDPATH" in
193 '')     ;;
194 *)      case "$SHELL" in
195         *bash*) CDPATH='.' ;;
196         *) CDPATH='' ;;
197         esac
198         ;;
199 esac
200
201 : Configure runs within the UU subdirectory
202 test -d UU || mkdir UU
203 cd UU && rm -f ./*
204
205 ccname=''
206 ccversion=''
207 ccsymbols=''
208 cppccsymbols=''
209 cppsymbols=''
210 from=''
211 hostgenerate=''
212 hostosname=''
213 hostperl=''
214 run=''
215 targetarch=''
216 targetdir=''
217 targetenv=''
218 targethost=''
219 targetmkdir=''
220 targetport=''
221 to=''
222 usecrosscompile=''
223 extern_C=''
224 mistrustnm=''
225 usedevel=''
226 perllibs=''
227 dynamic_ext=''
228 extensions=''
229 known_extensions=''
230 nonxs_ext=''
231 static_ext=''
232 useopcode=''
233 useposix=''
234 extras=''
235 d_bsd=''
236 d_eunice=''
237 d_xenix=''
238 eunicefix=''
239 ar=''
240 awk=''
241 bash=''
242 bison=''
243 byacc=''
244 cat=''
245 chgrp=''
246 chmod=''
247 chown=''
248 comm=''
249 compress=''
250 cp=''
251 cpio=''
252 cpp=''
253 csh=''
254 date=''
255 echo=''
256 egrep=''
257 emacs=''
258 expr=''
259 find=''
260 flex=''
261 gmake=''
262 grep=''
263 gzip=''
264 inews=''
265 ksh=''
266 less=''
267 line=''
268 lint=''
269 ln=''
270 lp=''
271 lpr=''
272 ls=''
273 mail=''
274 mailx=''
275 make=''
276 mkdir=''
277 more=''
278 mv=''
279 nm=''
280 nroff=''
281 perl=''
282 pg=''
283 pmake=''
284 pr=''
285 rm=''
286 rmail=''
287 sed=''
288 sendmail=''
289 shar=''
290 sleep=''
291 smail=''
292 sort=''
293 submit=''
294 tail=''
295 tar=''
296 tbl=''
297 tee=''
298 test=''
299 touch=''
300 tr=''
301 troff=''
302 uname=''
303 uniq=''
304 uuname=''
305 vi=''
306 zcat=''
307 zip=''
308 full_ar=''
309 full_sed=''
310 libswanted=''
311 hint=''
312 myuname=''
313 osname=''
314 osvers=''
315 Author=''
316 Date=''
317 Header=''
318 Id=''
319 Locker=''
320 Log=''
321 RCSfile=''
322 Revision=''
323 Source=''
324 State=''
325 sysroot=''
326 _a=''
327 _exe=''
328 _o=''
329 archobjs=''
330 exe_ext=''
331 firstmakefile=''
332 lib_ext=''
333 obj_ext=''
334 path_sep=''
335 rm_try=''
336 afs=''
337 afsroot=''
338 alignbytes=''
339 ansi2knr=''
340 archlib=''
341 archlibexp=''
342 d_archlib=''
343 installarchlib=''
344 archname=''
345 myarchname=''
346 useversionedarchname=''
347 d_atolf=''
348 d_atoll=''
349 baserev=''
350 bin=''
351 binexp=''
352 initialinstalllocation=''
353 installbin=''
354 userelocatableinc=''
355 byteorder=''
356 cc=''
357 ccflags=''
358 cppflags=''
359 ldflags=''
360 lkflags=''
361 locincpth=''
362 optimize=''
363 cf_email=''
364 cf_by=''
365 cf_time=''
366 charbits=''
367 charsize=''
368 contains=''
369 cpp_stuff=''
370 cpplast=''
371 cppminus=''
372 cpprun=''
373 cppstdin=''
374 d__fwalk=''
375 d_access=''
376 d_accessx=''
377 d_acosh=''
378 d_aintl=''
379 d_alarm=''
380 asctime_r_proto=''
381 d_asctime_r=''
382 d_asinh=''
383 d_atanh=''
384 d_attribute_deprecated=''
385 d_attribute_format=''
386 d_attribute_malloc=''
387 d_attribute_nonnull=''
388 d_attribute_noreturn=''
389 d_attribute_pure=''
390 d_attribute_unused=''
391 d_attribute_warn_unused_result=''
392 d_printf_format_null=''
393 d_backtrace=''
394 d_bcmp=''
395 d_bcopy=''
396 d_builtin_choose_expr=''
397 d_builtin_expect=''
398 d_bzero=''
399 d_c99_variadic_macros=''
400 d_casti32=''
401 castflags=''
402 d_castneg=''
403 d_cbrt=''
404 d_chown=''
405 d_chroot=''
406 d_chsize=''
407 d_class=''
408 d_clearenv=''
409 d_closedir=''
410 d_void_closedir=''
411 d_cmsghdr_s=''
412 d_const=''
413 d_copysign=''
414 d_copysignl=''
415 d_cplusplus=''
416 cryptlib=''
417 d_crypt=''
418 crypt_r_proto=''
419 d_crypt_r=''
420 d_csh=''
421 full_csh=''
422 d_ctermid=''
423 ctermid_r_proto=''
424 d_ctermid_r=''
425 ctime_r_proto=''
426 d_ctime_r=''
427 d_cuserid=''
428 d_dbl_dig=''
429 d_dbminitproto=''
430 d_difftime=''
431 d_dir_dd_fd=''
432 d_dirfd=''
433 d_dladdr=''
434 d_dlerror=''
435 d_dlopen=''
436 d_dlsymun=''
437 d_dosuid=''
438 d_suidsafe=''
439 d_drand48_r=''
440 drand48_r_proto=''
441 d_drand48proto=''
442 d_dup2=''
443 d_eaccess=''
444 d_endgrent=''
445 d_endgrent_r=''
446 endgrent_r_proto=''
447 d_endhent=''
448 d_endhostent_r=''
449 endhostent_r_proto=''
450 d_endnent=''
451 d_endnetent_r=''
452 endnetent_r_proto=''
453 d_endpent=''
454 d_endprotoent_r=''
455 endprotoent_r_proto=''
456 d_endpwent=''
457 d_endpwent_r=''
458 endpwent_r_proto=''
459 d_endsent=''
460 d_endservent_r=''
461 endservent_r_proto=''
462 d_erf=''
463 d_erfc=''
464 d_exp2=''
465 d_expm1=''
466 d_faststdio=''
467 d_fchdir=''
468 d_fchmod=''
469 d_fchown=''
470 d_fcntl=''
471 d_fcntl_can_lock=''
472 d_fd_macros=''
473 d_fd_set=''
474 d_fds_bits=''
475 d_fdim=''
476 d_fegetround=''
477 d_fgetpos=''
478 d_finite=''
479 d_finitel=''
480 d_flexfnam=''
481 d_flock=''
482 d_flockproto=''
483 d_fma=''
484 d_fmax=''
485 d_fmin=''
486 d_fork=''
487 d_fp_class=''
488 d_fp_classl=''
489 d_fpclass=''
490 d_fp_classify=''
491 d_fpclassify=''
492 d_fpclassl=''
493 d_fpgetround=''
494 d_fpos64_t=''
495 d_frexpl=''
496 d_fs_data_s=''
497 d_fseeko=''
498 d_fsetpos=''
499 d_fstatfs=''
500 d_fsync=''
501 d_ftello=''
502 d_ftime=''
503 d_gettimeod=''
504 d_futimes=''
505 d_Gconvert=''
506 d_getaddrinfo=''
507 d_getcwd=''
508 d_getespwnam=''
509 d_getfsstat=''
510 d_getgrent=''
511 d_getgrent_r=''
512 getgrent_r_proto=''
513 d_getgrgid_r=''
514 getgrgid_r_proto=''
515 d_getgrnam_r=''
516 getgrnam_r_proto=''
517 d_getgrps=''
518 d_gethbyaddr=''
519 d_gethbyname=''
520 d_gethent=''
521 aphostname=''
522 d_gethname=''
523 d_phostname=''
524 d_uname=''
525 d_gethostbyaddr_r=''
526 gethostbyaddr_r_proto=''
527 d_gethostbyname_r=''
528 gethostbyname_r_proto=''
529 d_gethostent_r=''
530 gethostent_r_proto=''
531 d_gethostprotos=''
532 d_getitimer=''
533 d_getlogin=''
534 d_getlogin_r=''
535 getlogin_r_proto=''
536 d_getmnt=''
537 d_getmntent=''
538 d_getnameinfo=''
539 d_getnbyaddr=''
540 d_getnbyname=''
541 d_getnent=''
542 d_getnetbyaddr_r=''
543 getnetbyaddr_r_proto=''
544 d_getnetbyname_r=''
545 getnetbyname_r_proto=''
546 d_getnetent_r=''
547 getnetent_r_proto=''
548 d_getnetprotos=''
549 d_getpagsz=''
550 d_getpent=''
551 d_getpgid=''
552 d_getpgrp2=''
553 d_bsdgetpgrp=''
554 d_getpgrp=''
555 d_getppid=''
556 d_getprior=''
557 d_getpbyname=''
558 d_getpbynumber=''
559 d_getprotobyname_r=''
560 getprotobyname_r_proto=''
561 d_getprotobynumber_r=''
562 getprotobynumber_r_proto=''
563 d_getprotoent_r=''
564 getprotoent_r_proto=''
565 d_getprotoprotos=''
566 d_getprpwnam=''
567 d_getpwent=''
568 d_getpwent_r=''
569 getpwent_r_proto=''
570 d_getpwnam_r=''
571 getpwnam_r_proto=''
572 d_getpwuid_r=''
573 getpwuid_r_proto=''
574 d_getsent=''
575 d_getservbyname_r=''
576 getservbyname_r_proto=''
577 d_getservbyport_r=''
578 getservbyport_r_proto=''
579 d_getservent_r=''
580 getservent_r_proto=''
581 d_getservprotos=''
582 d_getspnam=''
583 d_getspnam_r=''
584 getspnam_r_proto=''
585 d_getsbyname=''
586 d_getsbyport=''
587 d_gmtime_r=''
588 gmtime_r_proto=''
589 d_gnulibc=''
590 gnulibc_version=''
591 d_hasmntopt=''
592 d_htonl=''
593 d_hypot=''
594 d_ilogb=''
595 d_ilogbl=''
596 d_inetaton=''
597 d_inetntop=''
598 d_inetpton=''
599 d_int64_t=''
600 d_isascii=''
601 d_isblank=''
602 d_isfinite=''
603 d_isfinitel=''
604 d_isinf=''
605 d_isinfl=''
606 d_isless=''
607 d_isnan=''
608 d_isnanl=''
609 d_isnormal=''
610 d_j0=''
611 d_j0l=''
612 d_killpg=''
613 d_lc_monetary_2008=''
614 d_lchown=''
615 d_ldbl_dig=''
616 d_lgamma=''
617 d_lgamma_r=''
618 d_libm_lib_version=''
619 d_link=''
620 d_llrint=''
621 d_llrintl=''
622 d_llround=''
623 d_llroundl=''
624 d_localtime_r=''
625 d_localtime_r_needs_tzset=''
626 localtime_r_proto=''
627 d_locconv=''
628 d_lockf=''
629 d_log1p=''
630 d_log2=''
631 d_logb=''
632 d_ldexpl=''
633 d_longdbl=''
634 longdblinfbytes=''
635 longdblkind=''
636 longdblmantbits=''
637 longdblnanbytes=''
638 longdblsize=''
639 d_longlong=''
640 longlongsize=''
641 d_lrint=''
642 d_lrintl=''
643 d_lround=''
644 d_lroundl=''
645 d_lseekproto=''
646 d_lstat=''
647 d_madvise=''
648 d_malloc_good_size=''
649 d_malloc_size=''
650 d_mblen=''
651 d_mbstowcs=''
652 d_mbtowc=''
653 d_memchr=''
654 d_memcmp=''
655 d_memcpy=''
656 d_memmove=''
657 d_memset=''
658 d_mkdir=''
659 d_mkdtemp=''
660 d_mkfifo=''
661 d_mkstemp=''
662 d_mkstemps=''
663 d_mktime=''
664 d_mmap=''
665 mmaptype=''
666 d_modfl=''
667 d_modfl_pow32_bug=''
668 d_modflproto=''
669 d_mprotect=''
670 d_msg=''
671 d_msgctl=''
672 d_msgget=''
673 d_msghdr_s=''
674 d_msgrcv=''
675 d_msgsnd=''
676 d_msync=''
677 d_munmap=''
678 d_nan=''
679 d_nearbyint=''
680 d_nextafter=''
681 d_nexttoward=''
682 d_nice=''
683 d_nl_langinfo=''
684 d_off64_t=''
685 d_open3=''
686 d_fpathconf=''
687 d_pathconf=''
688 d_pause=''
689 d_pipe=''
690 d_poll=''
691 d_portable=''
692 d_prctl=''
693 d_prctl_set_name=''
694 d_procselfexe=''
695 procselfexe=''
696 d_old_pthread_create_joinable=''
697 old_pthread_create_joinable=''
698 d_pthread_atfork=''
699 d_pthread_attr_setscope=''
700 d_pthread_yield=''
701 d_sched_yield=''
702 sched_yield=''
703 d_ptrdiff_t=''
704 d_qgcvt=''
705 d_random_r=''
706 random_r_proto=''
707 d_readdir64_r=''
708 readdir64_r_proto=''
709 d_readdir=''
710 d_rewinddir=''
711 d_seekdir=''
712 d_telldir=''
713 d_readdir_r=''
714 readdir_r_proto=''
715 d_readlink=''
716 d_readv=''
717 d_recvmsg=''
718 d_re_comp=''
719 d_regcmp=''
720 d_regcomp=''
721 d_remainder=''
722 d_remquo=''
723 d_rename=''
724 d_rint=''
725 d_rmdir=''
726 d_round=''
727 d_safebcpy=''
728 d_safemcpy=''
729 d_sanemcmp=''
730 d_sbrkproto=''
731 d_scalbn=''
732 d_scalbnl=''
733 d_select=''
734 d_sem=''
735 d_semctl=''
736 d_semget=''
737 d_semop=''
738 d_sendmsg=''
739 d_setegid=''
740 d_seteuid=''
741 d_setgrent=''
742 d_setgrent_r=''
743 setgrent_r_proto=''
744 d_setgrps=''
745 d_sethent=''
746 d_sethostent_r=''
747 sethostent_r_proto=''
748 d_setitimer=''
749 d_setlinebuf=''
750 d_setlocale=''
751 d_setlocale_r=''
752 setlocale_r_proto=''
753 d_setnent=''
754 d_setnetent_r=''
755 setnetent_r_proto=''
756 d_setpent=''
757 d_setpgid=''
758 d_setpgrp2=''
759 d_bsdsetpgrp=''
760 d_setpgrp=''
761 d_setprior=''
762 d_setproctitle=''
763 d_setprotoent_r=''
764 setprotoent_r_proto=''
765 d_setpwent=''
766 d_setpwent_r=''
767 setpwent_r_proto=''
768 d_setregid=''
769 d_setresgid=''
770 d_setresuid=''
771 d_setreuid=''
772 d_setrgid=''
773 d_setruid=''
774 d_setsent=''
775 d_setservent_r=''
776 setservent_r_proto=''
777 d_setsid=''
778 d_setvbuf=''
779 d_shm=''
780 d_shmat=''
781 d_shmatprototype=''
782 shmattype=''
783 d_shmctl=''
784 d_shmdt=''
785 d_shmget=''
786 d_sigaction=''
787 d_signbit=''
788 d_sigprocmask=''
789 d_sigsetjmp=''
790 usesitecustomize=''
791 d_snprintf=''
792 d_vsnprintf=''
793 d_sockatmark=''
794 d_sockatmarkproto=''
795 d_ip_mreq=''
796 d_ip_mreq_source=''
797 d_ipv6_mreq=''
798 d_ipv6_mreq_source=''
799 d_msg_ctrunc=''
800 d_msg_dontroute=''
801 d_msg_oob=''
802 d_msg_peek=''
803 d_msg_proxy=''
804 d_oldsock=''
805 d_scm_rights=''
806 d_sin6_scope_id=''
807 d_sockaddr_in6=''
808 d_sockaddr_sa_len=''
809 d_socket=''
810 d_sockpair=''
811 sockethdr=''
812 socketlib=''
813 d_socklen_t=''
814 d_socks5_init=''
815 d_sprintf_returns_strlen=''
816 d_sqrtl=''
817 d_srand48_r=''
818 srand48_r_proto=''
819 d_srandom_r=''
820 srandom_r_proto=''
821 d_sresgproto=''
822 d_sresuproto=''
823 d_stat=''
824 d_statblks=''
825 d_statfs_f_flags=''
826 d_statfs_s=''
827 d_static_inline=''
828 perl_static_inline=''
829 d_fstatvfs=''
830 d_statvfs=''
831 d_stdio_cnt_lval=''
832 d_stdio_ptr_lval=''
833 d_stdio_ptr_lval_nochange_cnt=''
834 d_stdio_ptr_lval_sets_cnt=''
835 d_stdiobase=''
836 d_stdstdio=''
837 stdio_base=''
838 stdio_bufsiz=''
839 stdio_cnt=''
840 stdio_filbuf=''
841 stdio_ptr=''
842 d_index=''
843 d_strchr=''
844 d_strcoll=''
845 d_strctcpy=''
846 d_strerrm=''
847 d_strerror=''
848 d_sysernlst=''
849 d_syserrlst=''
850 d_strerror_r=''
851 strerror_r_proto=''
852 d_strftime=''
853 d_strlcat=''
854 d_strlcpy=''
855 d_strtod=''
856 d_strtol=''
857 d_strtold=''
858 d_strtoll=''
859 d_strtoq=''
860 d_strtoul=''
861 d_strtoull=''
862 d_strtouq=''
863 d_strxfrm=''
864 d_symlink=''
865 d_syscall=''
866 d_syscallproto=''
867 d_sysconf=''
868 d_system=''
869 d_tcgetpgrp=''
870 d_tcsetpgrp=''
871 d_telldirproto=''
872 d_tgamma=''
873 d_time=''
874 timetype=''
875 d_asctime64=''
876 d_ctime64=''
877 d_difftime64=''
878 d_gmtime64=''
879 d_localtime64=''
880 d_mktime64=''
881 d_timegm=''
882 clocktype=''
883 d_times=''
884 d_tmpnam_r=''
885 tmpnam_r_proto=''
886 d_trunc=''
887 d_truncate=''
888 d_truncl=''
889 d_ttyname_r=''
890 ttyname_r_proto=''
891 d_tzname=''
892 d_u32align=''
893 d_ualarm=''
894 d_umask=''
895 d_semctl_semid_ds=''
896 d_semctl_semun=''
897 d_union_semun=''
898 d_unordered=''
899 d_unsetenv=''
900 d_usleep=''
901 d_usleepproto=''
902 d_ustat=''
903 d_pseudofork=''
904 d_vfork=''
905 usevfork=''
906 d_voidsig=''
907 signal_t=''
908 d_volatile=''
909 d_charvspr=''
910 d_vprintf=''
911 d_wait4=''
912 d_waitpid=''
913 d_wcscmp=''
914 d_wcstombs=''
915 d_wcsxfrm=''
916 d_wctomb=''
917 d_writev=''
918 dlext=''
919 bin_ELF=''
920 cccdlflags=''
921 ccdlflags=''
922 dlsrc=''
923 ld=''
924 ld_can_script=''
925 lddlflags=''
926 usedl=''
927 doublesize=''
928 ebcdic=''
929 fflushNULL=''
930 fflushall=''
931 fpossize=''
932 fpostype=''
933 gccansipedantic=''
934 gccosandvers=''
935 gccversion=''
936 gidformat=''
937 gidsign=''
938 gidsize=''
939 gidtype=''
940 groupstype=''
941 h_fcntl=''
942 h_sysfile=''
943 html1dir=''
944 html1direxp=''
945 installhtml1dir=''
946 html3dir=''
947 html3direxp=''
948 installhtml3dir=''
949 i_arpainet=''
950 i_assert=''
951 i_bfd=''
952 i_crypt=''
953 db_hashtype=''
954 db_prefixtype=''
955 db_version_major=''
956 db_version_minor=''
957 db_version_patch=''
958 i_db=''
959 i_dbm=''
960 i_rpcsvcdbm=''
961 d_dirnamlen=''
962 direntrytype=''
963 i_dirent=''
964 i_dlfcn=''
965 i_execinfo=''
966 i_fcntl=''
967 i_fenv=''
968 i_float=''
969 i_fp=''
970 i_fp_class=''
971 i_gdbm=''
972 d_grpasswd=''
973 i_grp=''
974 i_ieeefp=''
975 i_inttypes=''
976 i_langinfo=''
977 i_libutil=''
978 i_limits=''
979 i_locale=''
980 i_machcthr=''
981 i_malloc=''
982 i_mallocmalloc=''
983 i_math=''
984 i_memory=''
985 i_mntent=''
986 d_gdbm_ndbm_h_uses_prototypes=''
987 d_gdbmndbm_h_uses_prototypes=''
988 d_ndbm=''
989 d_ndbm_h_uses_prototypes=''
990 i_gdbm_ndbm=''
991 i_gdbmndbm=''
992 i_ndbm=''
993 i_netdb=''
994 i_neterrno=''
995 i_netinettcp=''
996 i_niin=''
997 i_sysin=''
998 i_poll=''
999 i_prot=''
1000 i_pthread=''
1001 d_pwage=''
1002 d_pwchange=''
1003 d_pwclass=''
1004 d_pwcomment=''
1005 d_pwexpire=''
1006 d_pwgecos=''
1007 d_pwpasswd=''
1008 d_pwquota=''
1009 i_pwd=''
1010 i_quadmath=''
1011 i_shadow=''
1012 i_socks=''
1013 i_stdbool=''
1014 i_stddef=''
1015 i_stdint=''
1016 i_stdlib=''
1017 i_string=''
1018 strings=''
1019 i_sunmath=''
1020 i_sysaccess=''
1021 i_sysdir=''
1022 i_sysfile=''
1023 d_voidtty=''
1024 i_bsdioctl=''
1025 i_sysfilio=''
1026 i_sysioctl=''
1027 i_syssockio=''
1028 i_syslog=''
1029 i_sysmman=''
1030 i_sysmode=''
1031 i_sysmount=''
1032 i_sysndir=''
1033 i_sysparam=''
1034 i_syspoll=''
1035 i_sysresrc=''
1036 i_syssecrt=''
1037 i_sysselct=''
1038 i_sysstat=''
1039 i_sysstatfs=''
1040 i_sysstatvfs=''
1041 i_systimes=''
1042 i_systypes=''
1043 i_sysuio=''
1044 i_sysun=''
1045 i_sysutsname=''
1046 i_sysvfs=''
1047 i_syswait=''
1048 i_sgtty=''
1049 i_termio=''
1050 i_termios=''
1051 d_tm_tm_gmtoff=''
1052 d_tm_tm_zone=''
1053 i_systime=''
1054 i_systimek=''
1055 i_time=''
1056 timeincl=''
1057 i_unistd=''
1058 i_ustat=''
1059 i_utime=''
1060 i_values=''
1061 i_stdarg=''
1062 i_varargs=''
1063 i_varhdr=''
1064 i_vfork=''
1065 d_inc_version_list=''
1066 inc_version_list=''
1067 inc_version_list_init=''
1068 installprefix=''
1069 installprefixexp=''
1070 installstyle=''
1071 installusrbinperl=''
1072 intsize=''
1073 longsize=''
1074 shortsize=''
1075 issymlink=''
1076 libc=''
1077 ldlibpthname=''
1078 libperl=''
1079 shrpenv=''
1080 useshrplib=''
1081 glibpth=''
1082 incpth=''
1083 libpth=''
1084 loclibpth=''
1085 plibpth=''
1086 xlibpth=''
1087 ignore_versioned_solibs=''
1088 libs=''
1089 libsdirs=''
1090 libsfiles=''
1091 libsfound=''
1092 libspath=''
1093 lns=''
1094 d_PRIEUldbl=''
1095 d_PRIFUldbl=''
1096 d_PRIGUldbl=''
1097 d_PRIeldbl=''
1098 d_PRIfldbl=''
1099 d_PRIgldbl=''
1100 d_SCNfldbl=''
1101 doublekind=''
1102 doubleinfbytes=''
1103 doublemantbits=''
1104 doublenanbytes=''
1105 sPRIEUldbl=''
1106 sPRIFUldbl=''
1107 sPRIGUldbl=''
1108 sPRIeldbl=''
1109 sPRIfldbl=''
1110 sPRIgldbl=''
1111 sSCNfldbl=''
1112 lseeksize=''
1113 lseektype=''
1114 make_set_make=''
1115 d_mymalloc=''
1116 freetype=''
1117 mallocobj=''
1118 mallocsrc=''
1119 malloctype=''
1120 usemallocwrap=''
1121 usemymalloc=''
1122 installman1dir=''
1123 man1dir=''
1124 man1direxp=''
1125 man1ext=''
1126 installman3dir=''
1127 man3dir=''
1128 man3direxp=''
1129 man3ext=''
1130 modetype=''
1131 multiarch=''
1132 mydomain=''
1133 myhostname=''
1134 phostname=''
1135 c=''
1136 n=''
1137 d_eofnblk=''
1138 eagain=''
1139 o_nonblock=''
1140 rd_nodata=''
1141 need_va_copy=''
1142 netdb_hlen_type=''
1143 netdb_host_type=''
1144 netdb_name_type=''
1145 netdb_net_type=''
1146 groupcat=''
1147 hostcat=''
1148 passcat=''
1149 orderlib=''
1150 ranlib=''
1151 d_perl_otherlibdirs=''
1152 otherlibdirs=''
1153 package=''
1154 spackage=''
1155 pager=''
1156 api_revision=''
1157 api_subversion=''
1158 api_version=''
1159 api_versionstring=''
1160 patchlevel=''
1161 perl_patchlevel=''
1162 revision=''
1163 subversion=''
1164 version=''
1165 version_patchlevel_string=''
1166 perl5=''
1167 perladmin=''
1168 perlpath=''
1169 d_nv_preserves_uv=''
1170 d_nv_zero_is_allbits_zero=''
1171 i16size=''
1172 i16type=''
1173 i32size=''
1174 i32type=''
1175 i64size=''
1176 i64type=''
1177 i8size=''
1178 i8type=''
1179 ivsize=''
1180 ivtype=''
1181 nv_overflows_integers_at=''
1182 nv_preserves_uv_bits=''
1183 nvmantbits=''
1184 nvsize=''
1185 nvtype=''
1186 u16size=''
1187 u16type=''
1188 u32size=''
1189 u32type=''
1190 u64size=''
1191 u64type=''
1192 u8size=''
1193 u8type=''
1194 uvsize=''
1195 uvtype=''
1196 ivdformat=''
1197 nvEUformat=''
1198 nvFUformat=''
1199 nvGUformat=''
1200 nveformat=''
1201 nvfformat=''
1202 nvgformat=''
1203 uvXUformat=''
1204 uvoformat=''
1205 uvuformat=''
1206 uvxformat=''
1207 pidtype=''
1208 prefix=''
1209 prefixexp=''
1210 installprivlib=''
1211 privlib=''
1212 privlibexp=''
1213 prototype=''
1214 ptrsize=''
1215 d_PRIXU64=''
1216 d_PRId64=''
1217 d_PRIi64=''
1218 d_PRIo64=''
1219 d_PRIu64=''
1220 d_PRIx64=''
1221 sPRIXU64=''
1222 sPRId64=''
1223 sPRIi64=''
1224 sPRIo64=''
1225 sPRIu64=''
1226 sPRIx64=''
1227 d_quad=''
1228 quadkind=''
1229 quadtype=''
1230 uquadtype=''
1231 drand01=''
1232 randbits=''
1233 randfunc=''
1234 randseedtype=''
1235 seedfunc=''
1236 installscript=''
1237 scriptdir=''
1238 scriptdirexp=''
1239 selectminbits=''
1240 selecttype=''
1241 sh=''
1242 targetsh=''
1243 sig_count=''
1244 sig_name=''
1245 sig_name_init=''
1246 sig_num=''
1247 sig_num_init=''
1248 sig_size=''
1249 d_sitearch=''
1250 installsitearch=''
1251 sitearch=''
1252 sitearchexp=''
1253 installsitebin=''
1254 sitebin=''
1255 sitebinexp=''
1256 installsitehtml1dir=''
1257 sitehtml1dir=''
1258 sitehtml1direxp=''
1259 installsitehtml3dir=''
1260 sitehtml3dir=''
1261 sitehtml3direxp=''
1262 installsitelib=''
1263 sitelib=''
1264 sitelib_stem=''
1265 sitelibexp=''
1266 installsiteman1dir=''
1267 siteman1dir=''
1268 siteman1direxp=''
1269 installsiteman3dir=''
1270 siteman3dir=''
1271 siteman3direxp=''
1272 siteprefix=''
1273 siteprefixexp=''
1274 installsitescript=''
1275 sitescript=''
1276 sitescriptexp=''
1277 sizesize=''
1278 sizetype=''
1279 d_libname_unique=''
1280 so=''
1281 socksizetype=''
1282 sharpbang=''
1283 shsharp=''
1284 spitshell=''
1285 src=''
1286 ssizetype=''
1287 st_ino_sign=''
1288 st_ino_size=''
1289 startperl=''
1290 startsh=''
1291 stdchar=''
1292 d_stdio_stream_array=''
1293 stdio_stream_array=''
1294 sysman=''
1295 sGMTIME_max=''
1296 sGMTIME_min=''
1297 sLOCALTIME_max=''
1298 sLOCALTIME_min=''
1299 trnl=''
1300 uidformat=''
1301 uidsign=''
1302 uidsize=''
1303 uidtype=''
1304 archname64=''
1305 use64bitall=''
1306 use64bitint=''
1307 usecbacktrace=''
1308 dtrace=''
1309 usedtrace=''
1310 usefaststdio=''
1311 usekernprocpathname=''
1312 ccflags_uselargefiles=''
1313 ldflags_uselargefiles=''
1314 libswanted_uselargefiles=''
1315 uselargefiles=''
1316 uselongdouble=''
1317 usemorebits=''
1318 usemultiplicity=''
1319 nm_opt=''
1320 nm_so_opt=''
1321 runnm=''
1322 usenm=''
1323 usensgetexecutablepath=''
1324 useperlio=''
1325 usequadmath=''
1326 usesocks=''
1327 d_oldpthreads=''
1328 use5005threads=''
1329 useithreads=''
1330 usereentrant=''
1331 usethreads=''
1332 incpath=''
1333 mips_type=''
1334 usrinc=''
1335 vaproto=''
1336 d_vendorarch=''
1337 installvendorarch=''
1338 vendorarch=''
1339 vendorarchexp=''
1340 d_vendorbin=''
1341 installvendorbin=''
1342 vendorbin=''
1343 vendorbinexp=''
1344 installvendorhtml1dir=''
1345 vendorhtml1dir=''
1346 vendorhtml1direxp=''
1347 installvendorhtml3dir=''
1348 vendorhtml3dir=''
1349 vendorhtml3direxp=''
1350 d_vendorlib=''
1351 installvendorlib=''
1352 vendorlib=''
1353 vendorlib_stem=''
1354 vendorlibexp=''
1355 installvendorman1dir=''
1356 vendorman1dir=''
1357 vendorman1direxp=''
1358 installvendorman3dir=''
1359 vendorman3dir=''
1360 vendorman3direxp=''
1361 usevendorprefix=''
1362 vendorprefix=''
1363 vendorprefixexp=''
1364 d_vendorscript=''
1365 installvendorscript=''
1366 vendorscript=''
1367 vendorscriptexp=''
1368 versiononly=''
1369 yacc=''
1370 yaccflags=''
1371 CONFIG=''
1372
1373 : Detect odd OSs
1374 define='define'
1375 undef='undef'
1376 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1377 rmlist=''
1378
1379 : We must find out about Eunice early
1380 eunicefix=':'
1381 if test -f /etc/unixtovms; then
1382         eunicefix=/etc/unixtovms
1383 fi
1384 if test -f /etc/unixtovms.exe; then
1385         eunicefix=/etc/unixtovms.exe
1386 fi
1387
1388 : Set executable suffix now -- needed before hints available
1389 if test -f "/libs/version.library"; then
1390 : Amiga OS
1391     _exe=""
1392 elif test -f "/system/gnu_library/bin/ar.pm"; then
1393 : Stratus VOS
1394     _exe=".pm"
1395 elif test -n "$DJGPP"; then
1396 : DOS DJGPP
1397     _exe=".exe"
1398 elif test -f /kern/cookiejar; then
1399 : MiNT
1400     _exe=""
1401 elif test -d c:/. -o -n "$is_os2" ; then
1402 : OS/2 or cygwin
1403     _exe=".exe"
1404 fi
1405
1406 groupstype=''
1407 i_whoami=''
1408 : Trailing extension.  Override this in a hint file, if needed.
1409 : Extra object files, if any, needed on this platform.
1410 archobjs=''
1411 archname=''
1412 : Possible local include directories to search.
1413 : Set locincpth to "" in a hint file to defeat local include searches.
1414 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1415 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1416 :
1417 : no include file wanted by default
1418 inclwanted=''
1419
1420 : Enable -DEBUGGING and -DDEBUGGING from the command line
1421 EBUGGING=''
1422 DEBUGGING=''
1423
1424 libnames=''
1425 : change the next line if compiling for Xenix/286 on Xenix/386
1426 xlibpth='/usr/lib/386 /lib/386'
1427 : Possible local library directories to search.
1428 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1429 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1430
1431 : general looking path for locating libraries
1432 glibpth="/lib /usr/lib $xlibpth"
1433 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1434 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1435 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1436 test -d /usr/lib64         && glibpth="$glibpth /lib64 /usr/lib64 /usr/local/lib64"
1437
1438 : Private path used by Configure to find libraries.  Its value
1439 : is prepended to libpth. This variable takes care of special
1440 : machines, like the mips.  Usually, it should be empty.
1441 plibpth=''
1442
1443 : default library list
1444 libswanted=''
1445 : some systems want to use only the non-versioned libso:s
1446 ignore_versioned_solibs=''
1447 : set usethreads on the Configure command line to enable threads.
1448 usereentrant='undef'
1449 ccname=''
1450 ccversion=''
1451 perllibs=''
1452 : set useposix=false in your hint file to disable the POSIX extension.
1453 useposix=true
1454 : set useopcode=false in your hint file to disable the Opcode extension.
1455 useopcode=true
1456 archname64=''
1457 ccflags_uselargefiles=''
1458 ldflags_uselargefiles=''
1459 libswanted_uselargefiles=''
1460 : set usemultiplicity on the Configure command line to enable multiplicity.
1461 : set usesocks on the Configure command line to enable socks.
1462 : List of libraries we want.
1463 : If anyone needs extra -lxxx, put those in a hint file.
1464 libswanted="cl pthread socket bind inet nsl nm ndbm gdbm dbm db malloc dl ld"
1465 libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD"
1466 : We probably want to search /usr/shlib before most other libraries.
1467 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1468 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1469 glibpth="/usr/shlib $glibpth"
1470 : Do not use vfork unless overridden by a hint file.
1471 usevfork=false
1472
1473 : Find the basic shell for Bourne shell scripts
1474 case "$sh" in
1475 '')
1476         case "$SYSTYPE" in
1477         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1478         *) xxx='/bin/sh';;
1479         esac
1480         if test -f "$xxx"; then
1481                 sh="$xxx"
1482         else
1483                 : Build up a list and do a single loop so we can 'break' out.
1484                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1485                 for xxx in sh bash ksh pdksh ash; do
1486                         for p in $pth; do
1487                                 try="$try ${p}/${xxx}"
1488                         done
1489                 done
1490                 for xxx in $try; do
1491                         if test -f "$xxx"; then
1492                                 sh="$xxx";
1493                                 break
1494                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1495                                 sh="$xxx";
1496                                 break
1497                         elif test -f "$xxx.exe"; then
1498                                 sh="$xxx";
1499                                 break
1500                         fi
1501                 done
1502         fi
1503         ;;
1504 esac
1505
1506 case "$sh" in
1507 '')     cat >&2 <<EOM
1508 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.
1509
1510 Usually it's in /bin/sh.  How did you even get this far?
1511 Please contact me (Perl Maintainers) at perlbug@perl.org and
1512 we'll try to straighten this all out.
1513 EOM
1514         exit 1
1515         ;;
1516 esac
1517
1518 : When cross-compiling we need to separate the sh-to-run-Configure-with from the sh-to-use-in-Perl
1519 : default both to the same thing, cross-compilers can then set targetsh differently if they like
1520 targetsh=$sh
1521
1522 : see if sh knows # comments
1523 if `$sh -c '#' >/dev/null 2>&1`; then
1524         shsharp=true
1525         spitshell=cat
1526         xcat=/bin/cat
1527         test -f $xcat$_exe || xcat=/usr/bin/cat
1528         if test ! -f $xcat$_exe; then
1529                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1530                         if test -f $p/cat$_exe; then
1531                                 xcat=$p/cat
1532                                 break
1533                         fi
1534                 done
1535                 if test ! -f $xcat$_exe; then
1536                         echo "Can't find cat anywhere!"
1537                         exit 1
1538                 fi
1539         fi
1540         echo "#!$xcat" >sharp
1541         $eunicefix sharp
1542         chmod +x sharp
1543         ./sharp > today 2>/dev/null
1544         if test -s today; then
1545                 sharpbang='#!'
1546         else
1547                 echo "#! $xcat" > sharp
1548                 $eunicefix sharp
1549                 chmod +x sharp
1550                 ./sharp > today 2>/dev/null
1551                 if test -s today; then
1552                         sharpbang='#! '
1553                 else
1554                         sharpbang=': use '
1555                 fi
1556         fi
1557 else
1558         echo " "
1559         echo "Your $sh doesn't grok # comments--I will strip them later on."
1560         shsharp=false
1561         cd ..
1562         echo "exec grep -v '^[  ]*#'" >spitshell
1563         chmod +x spitshell
1564         $eunicefix spitshell
1565         spitshell=`pwd`/spitshell
1566         cd UU
1567         echo "I presume that if # doesn't work, #! won't work either!"
1568         sharpbang=': use '
1569 fi
1570 rm -f sharp today
1571
1572 : figure out how to guarantee sh startup
1573 case "$startsh" in
1574 '') startsh=${sharpbang}${sh} ;;
1575 *)
1576 esac
1577 cat >sharp <<EOSS
1578 $startsh
1579 set abc
1580 test "$?abc" != 1
1581 EOSS
1582
1583 chmod +x sharp
1584 $eunicefix sharp
1585 if ./sharp; then
1586         : echo "Yup, it does."
1587 else
1588         echo "Hmm... '$startsh' does not guarantee sh startup..."
1589         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1590 fi
1591 rm -f sharp
1592
1593 : Save command line options in file UU/cmdline.opt for later use in
1594 : generating config.sh.
1595 cat > cmdline.opt <<EOSH
1596 : Configure command line arguments.
1597 config_arg0='$0'
1598 config_args='$*'
1599 config_argc=$#
1600 EOSH
1601 argn=1
1602 args_exp=''
1603 args_sep=''
1604 for arg in "$@"; do
1605         cat >>cmdline.opt <<EOSH
1606 config_arg$argn='$arg'
1607 EOSH
1608         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1609 $arg
1610 EOC
1611         arg_exp=`cat cmdl.opt`
1612         args_exp="$args_exp$args_sep'$arg_exp'"
1613         argn=`expr $argn + 1`
1614         args_sep=' '
1615 done
1616 rm -f cmdl.opt
1617
1618 : produce awk script to parse command line options
1619 cat >options.awk <<'EOF'
1620 BEGIN {
1621         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1622
1623         len = length(optstr);
1624         for (i = 1; i <= len; i++) {
1625                 c = substr(optstr, i, 1);
1626                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1627                 if (a == ":") {
1628                         arg[c] = 1;
1629                         i++;
1630                 }
1631                 opt[c] = 1;
1632         }
1633 }
1634 {
1635         expect = 0;
1636         str = $0;
1637         if (substr(str, 1, 1) != "-") {
1638                 printf("'%s'\n", str);
1639                 next;
1640         }
1641         len = length($0);
1642         for (i = 2; i <= len; i++) {
1643                 c = substr(str, i, 1);
1644                 if (!opt[c]) {
1645                         printf("-%s\n", substr(str, i));
1646                         next;
1647                 }
1648                 printf("-%s\n", c);
1649                 if (arg[c]) {
1650                         if (i < len)
1651                                 printf("'%s'\n", substr(str, i + 1));
1652                         else
1653                                 expect = 1;
1654                         next;
1655                 }
1656         }
1657 }
1658 END {
1659         if (expect)
1660                 print "?";
1661 }
1662 EOF
1663
1664 : process the command line options
1665 set X `for arg in "$@"; do echo "X$arg"; done |
1666         sed -e s/X// | awk -f options.awk`
1667 eval "set $*"
1668 shift
1669 rm -f options.awk
1670
1671 : set up default values
1672 fastread=''
1673 reuseval=false
1674 config_sh=''
1675 alldone=''
1676 error=''
1677 silent=''
1678 extractsh=''
1679 override=''
1680 knowitall=''
1681 rm -f optdef.sh posthint.sh
1682 cat >optdef.sh <<EOS
1683 $startsh
1684 EOS
1685
1686
1687 : option parsing
1688 while test $# -gt 0; do
1689         case "$1" in
1690         -d) shift; fastread=yes;;
1691         -e) shift; alldone=cont;;
1692         -f)
1693                 shift
1694                 cd ..
1695                 if test -r "$1"; then
1696                         config_sh="$1"
1697                 else
1698                         echo "$me: cannot read config file $1." >&2
1699                         error=true
1700                 fi
1701                 cd UU
1702                 shift;;
1703         --help|\
1704         -h) shift; error=true;;
1705         -r) shift; reuseval=true;;
1706         -s) shift; silent=true; realsilent=true;;
1707         -E) shift; alldone=exit;;
1708         -K) shift; knowitall=true;;
1709         -O) shift; override=true;;
1710         -S) shift; silent=true; extractsh=true;;
1711         -D)
1712                 shift
1713                 case "$1" in
1714                 *=)
1715                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1716                         echo "$me: ignoring -D $1" >&2
1717                         ;;
1718                 *=*) echo "$1" | \
1719                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1720                 *) echo "$1='define'" >> optdef.sh;;
1721                 esac
1722                 shift
1723                 ;;
1724         -U)
1725                 shift
1726                 case "$1" in
1727                 *=) echo "$1" >> optdef.sh;;
1728                 *=*)
1729                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1730                         echo "$me: ignoring -U $1" >&2
1731                         ;;
1732                 *) echo "$1='undef'" >> optdef.sh;;
1733                 esac
1734                 shift
1735                 ;;
1736         -A)
1737             shift
1738             xxx=''
1739             yyy="$1"
1740             zzz=''
1741             uuu=undef
1742             case "$yyy" in
1743             *=*) zzz=`echo "$yyy"|sed 's!=.*!!'`
1744                  case "$zzz" in
1745                  *:*) zzz='' ;;
1746                  *)   xxx=append
1747                       zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'`
1748                       yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
1749                  esac
1750                  ;;
1751             esac
1752             case "$xxx" in
1753             '')  case "$yyy" in
1754                  *:*) xxx=`echo "$yyy"|sed 's!:.*!!'`
1755                       yyy=`echo "$yyy"|sed 's!^[^:]*:!!'`
1756                       zzz=`echo "$yyy"|sed 's!^[^=]*=!!'`
1757                       yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
1758                  *)   xxx=`echo "$yyy"|sed 's!:.*!!'`
1759                       yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` ;;
1760                  esac
1761                  ;;
1762             esac
1763             case "$xxx" in
1764             append)
1765                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1766             clear)
1767                 echo "$yyy=''"                  >> posthint.sh ;;
1768             define)
1769                 case "$zzz" in
1770                 '') zzz=define ;;
1771                 esac
1772                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1773             eval)
1774                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1775             prepend)
1776                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1777             undef)
1778                 case "$zzz" in
1779                 '') zzz="$uuu" ;;
1780                 esac
1781                 echo "$yyy=$zzz"                >> posthint.sh ;;
1782             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1783             esac
1784             shift
1785             ;;
1786         -V) echo "$me generated by metaconfig 3.5 PL0." >&2
1787             exit 0;;
1788         --) break;;
1789         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1790         *) break;;
1791         esac
1792 done
1793
1794 case "$error" in
1795 true)
1796         cat >&2 <<EOM
1797 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1798                  [-U symbol] [-U symbol=] [-A command:symbol...]
1799   -d : use defaults for all answers.
1800   -e : go on without questioning past the production of config.sh.
1801   -f : specify an alternate default configuration file.
1802   -h : print this help message and exit (with an error status).
1803   -r : reuse C symbols value if possible (skips costly nm extraction).
1804   -s : silent mode, only echoes questions and essential information.
1805   -D : define symbol to have some value:
1806          -D symbol         symbol gets the value 'define'
1807          -D symbol=value   symbol gets the value 'value'
1808        common used examples (see INSTALL for more info):
1809          -Duse64bitint            use 64bit integers
1810          -Duse64bitall            use 64bit integers and pointers
1811          -Dusethreads             use thread support
1812          -Dinc_version_list=none  do not include older perl trees in @INC
1813          -DEBUGGING=none          DEBUGGING options
1814          -Dcc=gcc                 choose your compiler
1815          -Dprefix=/opt/perl5      choose your destination
1816   -E : stop at the end of questions, after having produced config.sh.
1817   -K : do not use unless you know what you are doing.
1818   -O : let -D and -U override definitions from loaded configuration file.
1819   -S : perform variable substitutions on all .SH files (can mix with -f)
1820   -U : undefine symbol:
1821          -U symbol    symbol gets the value 'undef'
1822          -U symbol=   symbol gets completely empty
1823        e.g.:  -Uversiononly
1824   -A : manipulate symbol after the platform specific hints have been applied:
1825          -A append:symbol=value   append value to symbol
1826          -A symbol=value          like append:, but with a separating space
1827          -A define:symbol=value   define symbol to have value
1828          -A clear:symbol          define symbol to be ''
1829          -A define:symbol         define symbol to be 'define'
1830          -A eval:symbol=value     define symbol to be eval of value
1831          -A prepend:symbol=value  prepend value to symbol
1832          -A undef:symbol          define symbol to be 'undef'
1833          -A undef:symbol=         define symbol to be ''
1834        e.g.:  -A prepend:libswanted='cl pthread '
1835               -A ccflags=-DSOME_MACRO
1836   -V : print version number and exit (with a zero status).
1837 EOM
1838         exit 1
1839         ;;
1840 esac
1841
1842 : Sanity checks
1843 case "$fastread$alldone" in
1844 yescont|yesexit) ;;
1845 *)
1846         case "$extractsh" in
1847         true) ;;
1848         *)
1849                 if test ! -t 0; then
1850                         echo "Say 'sh Configure', not 'sh <Configure'"
1851                         exit 1
1852                 fi
1853                 ;;
1854         esac
1855         ;;
1856 esac
1857
1858 exec 4>&1
1859 case "$silent" in
1860 true) exec 1>/dev/null;;
1861 esac
1862
1863 : run the defines and the undefines, if any, but leave the file out there...
1864 touch optdef.sh
1865 . ./optdef.sh
1866 : create the posthint manipulation script and leave the file out there...
1867 touch posthint.sh
1868
1869 : set package name
1870 package='perl5'
1871 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1872 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1873 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1874 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1875 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1876 esac
1877
1878 : Some greps do not return status, grrr.
1879 echo "grimblepritz" >grimble
1880 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1881         contains=contains
1882 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1883         contains=grep
1884 else
1885         contains=contains
1886 fi
1887 rm -f grimble
1888 : the following should work in any shell
1889 case "$contains" in
1890 contains*)
1891         echo " "
1892         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1893         cat >contains <<'EOSS'
1894 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1895 EOSS
1896 chmod +x contains
1897 esac
1898
1899 : Find the path to the source tree
1900 case "$src" in
1901 '') case "$0" in
1902     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1903          case "$src" in
1904          /*)    ;;
1905          .)     ;;
1906          *)     src=`cd ../$src && pwd` ;;
1907          esac
1908          ;;
1909     *)   src='.';;
1910     esac;;
1911 esac
1912 case "$src" in
1913 '')     src=/
1914         rsrc=/
1915         ;;
1916 /*)     rsrc="$src";;
1917 *)      rsrc="../$src";;
1918 esac
1919 if test -f $rsrc/Configure && \
1920         $contains "^package='$package'\$" $rsrc/Configure >/dev/null 2>&1
1921 then
1922    : found it, so we are ok.
1923 else
1924         rsrc=''
1925         for src in . .. ../.. ../../.. ../../../..; do
1926                 if test -f ../$src/Configure && \
1927                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1928                 then
1929                         rsrc=../$src
1930                         break
1931                 fi
1932         done
1933 fi
1934 case "$rsrc" in
1935 '')
1936         cat <<EOM >&4
1937
1938 Sorry, I can't seem to locate the source dir for $package.  Please start
1939 Configure with an explicit path -- i.e. /some/path/Configure.
1940
1941 EOM
1942         exit 1
1943         ;;
1944 ../.)   rsrc='..';;
1945 *)
1946         echo " "
1947         echo "Sources for $package found in \"$src\"." >&4
1948         ;;
1949 esac
1950
1951 : script used to extract .SH files with variable substitutions
1952 cat >extract <<'EOS'
1953 PERL_CONFIG_SH=true
1954 echo "Doing variable substitutions on .SH files..."
1955 if test -f MANIFEST; then
1956         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1957 else
1958         echo "(Looking for .SH files under the source directory.)"
1959         set x `(cd "$src"; find . -name "*.SH" -print)`
1960 fi
1961 shift
1962 case $# in
1963 0) set x `(cd "$src"; echo *.SH)`; shift;;
1964 esac
1965 if test ! -f "$src/$1"; then
1966         shift
1967 fi
1968 mkdir_p='
1969 name=$1;
1970 create="";
1971 while test $name; do
1972         if test ! -d "$name"; then
1973                 create="$name $create";
1974                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1975                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1976         else
1977                 name="";
1978         fi;
1979 done;
1980 for file in $create; do
1981         mkdir $file;
1982 done
1983 '
1984 for file in $*; do
1985         case "$src" in
1986         ".")
1987                 case "$file" in
1988                 */*)
1989                         dir=`expr X$file : 'X\(.*\)/'`
1990                         file=`expr X$file : 'X.*/\(.*\)'`
1991                         (cd "$dir" && . ./$file)
1992                         ;;
1993                 *)
1994                         . ./$file
1995                         ;;
1996                 esac
1997                 ;;
1998         *)
1999                 case "$file" in
2000                 */*)
2001                         dir=`expr X$file : 'X\(.*\)/'`
2002                         file=`expr X$file : 'X.*/\(.*\)'`
2003                         (set x $dir; shift; eval $mkdir_p)
2004                         sh <"$src/$dir/$file"
2005                         ;;
2006                 *)
2007                         sh <"$src/$file"
2008                         ;;
2009                 esac
2010                 ;;
2011         esac
2012 done
2013 if test -f "$src/config_h.SH"; then
2014         if test ! -f config.h; then
2015         : oops, they left it out of MANIFEST, probably, so do it anyway.
2016         . "$src/config_h.SH"
2017         fi
2018 fi
2019 EOS
2020
2021 : extract files and exit if asked to do so
2022 case "$extractsh" in
2023 true)
2024         case "$realsilent" in
2025         true) ;;
2026         *) exec 1>&4;;
2027         esac
2028         case "$config_sh" in
2029         '') config_sh='config.sh';;
2030         esac
2031         echo " "
2032         echo "Fetching answers from $config_sh..."
2033         cd ..
2034         . $config_sh
2035         test "$override" && . ./optdef.sh
2036         echo " "
2037         . UU/extract
2038         rm -rf UU
2039         echo "Extraction done."
2040         exit 0
2041         ;;
2042 esac
2043
2044 : Eunice requires " " instead of "", can you believe it
2045 echo " "
2046 : Here we go...
2047 echo "Beginning of configuration questions for $package."
2048
2049 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
2050
2051 : first determine how to suppress newline on echo command
2052 echo " "
2053 echo "Checking echo to see how to suppress newlines..."
2054 (echo "hi there\c" ; echo " ") >.echotmp
2055 if $contains c .echotmp >/dev/null 2>&1 ; then
2056         echo "...using -n."
2057         n='-n'
2058         c=''
2059 else
2060         cat <<'EOM'
2061 ...using \c
2062 EOM
2063         n=''
2064         c='\c'
2065 fi
2066 echo $n "The star should be here-->$c"
2067 echo '*'
2068 rm -f .echotmp
2069
2070 : Now test for existence of everything in MANIFEST
2071 echo " "
2072 if test -f "$rsrc/MANIFEST"; then
2073         echo "First let's make sure your kit is complete.  Checking..." >&4
2074         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \
2075                 (split -l 50 2>/dev/null || split -50)
2076         rm -f missing
2077         tmppwd=`pwd`
2078         for filelist in x??; do
2079                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` \
2080                         >/dev/null 2>>"$tmppwd/missing")
2081         done
2082         if test -s missing; then
2083                 cat missing >&4
2084                 cat >&4 <<'EOM'
2085
2086 THIS PACKAGE SEEMS TO BE INCOMPLETE.
2087
2088 You have the option of continuing the configuration process, despite the
2089 distinct possibility that your kit is damaged, by typing 'y'es.  If you
2090 do, don't blame me if something goes wrong.  I advise you to type 'n'o
2091 and contact the author (perlbug@perl.org).
2092
2093 EOM
2094                 echo $n "Continue? [n] $c" >&4
2095                 read ans
2096                 case "$ans" in
2097                 y*)
2098                         echo "Continuing..." >&4
2099                         rm -f missing
2100                         ;;
2101                 *)
2102                         echo "ABORTING..." >&4
2103                         kill $$
2104                         ;;
2105                 esac
2106         else
2107                 echo "Looks good..."
2108         fi
2109 else
2110         echo "There is no MANIFEST file.  I hope your kit is complete !"
2111 fi
2112 rm -f missing x??
2113
2114 : Find the appropriate value for a newline for tr
2115 echo " "
2116 if test -n "$DJGPP"; then
2117        trnl='\012'
2118 fi
2119 if test X"$trnl" = X; then
2120         case "`echo foo|tr '\n' x 2>/dev/null`" in
2121         foox) trnl='\n' ;;
2122         esac
2123 fi
2124 if test X"$trnl" = X; then
2125         case "`echo foo|tr '\012' x 2>/dev/null`" in
2126         foox) trnl='\012' ;;
2127         esac
2128 fi
2129 if test X"$trnl" = X; then
2130        case "`echo foo|tr '\r\n' xy 2>/dev/null`" in
2131        fooxy) trnl='\n\r' ;;
2132        esac
2133 fi
2134 if test X"$trnl" = X; then
2135         cat <<EOM >&2
2136
2137 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
2138
2139 EOM
2140         exit 1
2141 fi
2142
2143 : compute the number of columns on the terminal for proper question formatting
2144 case "$COLUMNS" in
2145 '') COLUMNS='80';;
2146 esac
2147
2148 : set up the echo used in my read
2149 myecho="case \"\$xxxm\" in
2150 '') echo $n \"\$rp $c\" >&4;;
2151 *) case \"\$rp\" in
2152         '') echo $n \"[\$xxxm] $c\";;
2153         *)
2154                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
2155                         echo \"\$rp\" >&4
2156                         echo $n \"[\$xxxm] $c\" >&4
2157                 else
2158                         echo $n \"\$rp [\$xxxm] $c\" >&4
2159                 fi
2160                 ;;
2161         esac;;
2162 esac"
2163
2164 : now set up to do reads with possible shell escape and default assignment
2165 cat <<EOSC >myread
2166 $startsh
2167 xxxm=\$dflt
2168 $myecho
2169 ans='!'
2170 case "\$fastread" in
2171 yes) case "\$dflt" in
2172         '') ;;
2173         *) ans='';
2174                 case "\$silent-\$rp" in
2175                 true-) ;;
2176                 *) echo " " >&4;;
2177                 esac;;
2178         esac;;
2179 *) case "\$silent" in
2180         true) case "\$rp" in
2181                 '') ans='';;
2182                 esac;;
2183         esac;;
2184 esac
2185 while expr "X\$ans" : "X!" >/dev/null; do
2186         read answ
2187         set x \$xxxm
2188         shift
2189         aok=''; eval "ans=\\"\$answ\\"" && aok=y
2190         case  "\$answ" in
2191         "!")
2192                 sh 1>&4
2193                 echo " "
2194                 $myecho
2195                 ;;
2196         !*)
2197                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
2198                 shift
2199                 sh 1>&4 -c "\$*"
2200                 echo " "
2201                 $myecho
2202                 ;;
2203         "\$ans")
2204                 case "\$ans" in
2205                 \\&*)
2206                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
2207                         shift
2208                         case "\$1" in
2209                         -d)
2210                                 fastread=yes
2211                                 echo "(OK, I'll run with -d after this question.)" >&4
2212                                 ;;
2213                         -*)
2214                                 echo "*** Sorry, \$1 not supported yet." >&4
2215                                 ;;
2216                         esac
2217                         $myecho
2218                         ans=!
2219                         ;;
2220                 esac;;
2221         *)
2222                 case "\$aok" in
2223                 y)
2224                         echo "*** Substitution done -- please confirm."
2225                         xxxm="\$ans"
2226                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
2227                         xxxm="\$ans"
2228                         ans=!
2229                         ;;
2230                 *)
2231                         echo "*** Error -- try again."
2232                         ans=!
2233                         ;;
2234                 esac
2235                 $myecho
2236                 ;;
2237         esac
2238         case "\$ans\$xxxm\$nostick" in
2239         '')
2240                 ans=!
2241                 $myecho
2242                 ;;
2243         esac
2244 done
2245 case "\$ans" in
2246 '') ans="\$xxxm";;
2247 esac
2248 EOSC
2249
2250 : create .config dir to save info across Configure sessions
2251 test -d ../.config || mkdir ../.config
2252 cat >../.config/README <<EOF
2253 This directory created by Configure to save information that should
2254 persist across sessions for $package.
2255
2256 You may safely delete it if you wish.
2257 EOF
2258
2259 : See if we are using a devel version and want that
2260 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
2261 case "$usedevel" in
2262 $define|true|[yY]*)
2263     usedevel="$define" ;;
2264 *) case "$xversion" in
2265    *[13579])
2266         cat >&4 <<EOH
2267 *** WHOA THERE!!! ***
2268
2269     This is an UNSTABLE DEVELOPMENT release.
2270     The version of this $package distribution is $xversion, that is, odd,
2271     (as opposed to even) and that signifies a development release.
2272     If you want a maintenance release, you want an even-numbered version.
2273
2274     Do ***NOT*** install this into production use.
2275     Data corruption and crashes are possible.
2276
2277     It is most seriously suggested that you do not continue any further
2278     unless you want to help in developing and debugging Perl.
2279
2280     If you *still* want to build perl, you can answer 'y' now,
2281     or pass -Dusedevel to Configure.
2282
2283 EOH
2284         rp='Do you really want to continue?'
2285         dflt='n'
2286         . ./myread
2287         case "$ans" in
2288         [yY]) echo >&4 "Okay, continuing."
2289               usedevel="$define" ;;
2290         *) echo >&4 "Okay, bye."
2291            exit 1
2292            ;;
2293         esac
2294         ;;
2295     esac
2296     usedevel="$undef"
2297     ;;
2298 esac
2299 case "$usedevel" in
2300 $define|true|[yY]*)
2301         case "$versiononly" in
2302         '') versiononly="$define" ;;
2303         esac
2304         case "$installusrbinperl" in
2305         '') installusrbinperl="$undef" ;;
2306         esac
2307         ;;
2308 esac
2309
2310 : general instructions
2311 needman=true
2312 firsttime=true
2313 user=`(logname) 2>/dev/null`
2314 case "$user" in
2315 '') user=`whoami 2>&1`;;
2316 esac
2317 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
2318         firsttime=false
2319         echo " "
2320         rp='Would you like to see the instructions?'
2321         dflt=n
2322         . ./myread
2323         case "$ans" in
2324         [yY]*) ;;
2325         *) needman=false;;
2326         esac
2327 fi
2328 if $needman; then
2329         cat <<EOH
2330
2331 This installation shell script will examine your system and ask you questions
2332 to determine how the perl5 package should be installed. If you get
2333 stuck on a question, you may use a ! shell escape to start a subshell or
2334 execute a command.  Many of the questions will have default answers in square
2335 brackets; typing carriage return will give you the default.
2336
2337 On some of the questions which ask for file or directory names you are allowed
2338 to use the ~name construct to specify the login directory belonging to "name",
2339 even if you don't have a shell which knows about that.  Questions where this is
2340 allowed will be marked "(~name ok)".
2341
2342 EOH
2343         rp=''
2344         dflt='Type carriage return to continue'
2345         . ./myread
2346         cat <<'EOH'
2347
2348 The prompter used in this script allows you to use shell variables and
2349 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
2350 in the default answer, as if the default line was a set of arguments given to a
2351 script shell.  This means you may also use $* to repeat the whole default line,
2352 so you do not have to re-type everything to add something to the default.
2353
2354 Every time there is a substitution, you will have to confirm.  If there is an
2355 error (e.g. an unmatched backtick), the default answer will remain unchanged
2356 and you will be prompted again.
2357
2358 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
2359 the questions and use the computed defaults (or the previous answers if there
2360 was already a config.sh file). Type 'Configure -h' for a list of options.
2361 You may also start interactively and then answer '& -d' at any prompt to turn
2362 on the non-interactive behaviour for the remainder of the execution.
2363
2364 EOH
2365         . ./myread
2366         cat <<EOH
2367
2368 Much effort has been expended to ensure that this shell script will run on any
2369 Unix system.  If despite that it blows up on yours, your best bet is to edit
2370 Configure and run it again.  If you can't run Configure for some reason,
2371 you'll have to generate a config.sh file by hand.  Whatever problems you
2372 have, let me (perlbug@perl.org) know how I blew it.
2373
2374 This installation script affects things in two ways:
2375
2376 1) it may do direct variable substitutions on some of the files included
2377    in this kit.
2378 2) it builds a config.h file for inclusion in C programs.  You may edit
2379    any of these files as the need arises after running this script.
2380
2381 If you make a mistake on a question, there is no easy way to back up to it
2382 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
2383 files.  Configure will offer to let you do this before it runs the SH files.
2384
2385 EOH
2386         dflt='Type carriage return to continue'
2387         . ./myread
2388         case "$firsttime" in
2389         true) echo $user >>../.config/instruct;;
2390         esac
2391 fi
2392
2393 : Set 'sysroot' to change the logical root directory to your headers and libraries see man gcc
2394 : This is primarily meant for cross-compile environments, and may fail to be useful in other cases
2395 if test "X$sysroot" = X; then
2396     sysroot=""
2397 else
2398     case "$cc" in
2399         *gcc*|*g++*)
2400             echo "Using $sysroot to find your headers and libraries, adding to ccflags"
2401             # _sysroot is used in places where we need --sysroot=foo
2402             # but using the rest of the flags could cause issues.
2403             _sysroot="--sysroot=$sysroot";
2404             case "$ccflags" in
2405                 *sysroot*) ;;
2406                 'undef'|*)
2407                 ccflags="$ccflags $_sysroot"
2408             esac
2409             case "$ldflags" in
2410                 *sysroot*) ;;
2411                 'undef'|*)
2412                 ldflags="$ldflags $_sysroot"
2413             esac
2414             case "$cppflags" in
2415                 *sysroot*) ;;
2416                 'undef'|*)
2417                 cppflags="$cppflags $_sysroot"
2418             esac
2419             # lddlflags updated below in lddlflags section;
2420             # same with cccdlflags
2421             ;;
2422     esac
2423
2424     # Adjust some defaults to also use $sysroot
2425     for var in xlibpth loclibpth locincpth glibpth; do
2426         eval xxx=\$$var
2427         eval $var=''
2428         for path in $xxx; do
2429             eval $var=\"\$$var $sysroot$path\"
2430         done
2431     done
2432
2433 fi
2434
2435 : find out where common programs are
2436 echo " "
2437 echo "Locating common programs..." >&4
2438 cat <<EOSC >loc
2439 $startsh
2440 case \$# in
2441 0) exit 1;;
2442 esac
2443 thing=\$1
2444 shift
2445 dflt=\$1
2446 shift
2447 for dir in \$*; do
2448         case "\$thing" in
2449         .)
2450         if test -d \$dir/\$thing; then
2451                 echo \$dir
2452                 exit 0
2453         fi
2454         ;;
2455         *)
2456         for thisthing in \$dir/\$thing; do
2457                 : just loop through to pick last item
2458         done
2459         if test -f \$thisthing; then
2460                 echo \$thisthing
2461                 exit 0
2462         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2463                 echo \$thisthing
2464                 exit 0
2465         elif test -f \$dir/\$thing.exe; then
2466                 if test -n "$DJGPP"; then
2467                         echo \$dir/\$thing.exe
2468                 elif test "$eunicefix" != ":"; then
2469                         : on Eunice apparently
2470                         echo \$dir/\$thing
2471                 fi
2472                 exit 0
2473         fi
2474         ;;
2475         esac
2476 done
2477 echo \$dflt
2478 exit 1
2479 EOSC
2480 chmod +x loc
2481 $eunicefix loc
2482 loclist="
2483 awk
2484 cat
2485 chmod
2486 comm
2487 cp
2488 echo
2489 expr
2490 grep
2491 ls
2492 mkdir
2493 rm
2494 sed
2495 sort
2496 touch
2497 tr
2498 uniq
2499 "
2500 trylist="
2501 ar
2502 bison
2503 byacc
2504 cpp
2505 csh
2506 date
2507 egrep
2508 gmake
2509 gzip
2510 less
2511 ln
2512 make
2513 more
2514 nm
2515 nroff
2516 perl
2517 pg
2518 test
2519 uname
2520 zip
2521 "
2522 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2523 pth="$pth $sysroot/lib $sysroot/usr/lib"
2524 for file in $loclist; do
2525         eval xxx=\$$file
2526         case "$xxx" in
2527         /*|?:[\\/]*)
2528                 if test -f "$xxx"; then
2529                         : ok
2530                 else
2531                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2532                         xxx=`./loc $file $file $pth`
2533                 fi
2534                 ;;
2535         '') xxx=`./loc $file $file $pth`;;
2536         *) xxx=`./loc $xxx $xxx $pth`;;
2537         esac
2538         eval $file=$xxx$_exe
2539         eval _$file=$xxx
2540         case "$xxx" in
2541         /*)
2542                 echo $file is in $xxx.
2543                 ;;
2544         ?:[\\/]*)
2545                 echo $file is in $xxx.
2546                 ;;
2547         *)
2548                 echo "I don't know where '$file' is, and my life depends on it." >&4
2549                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2550                 exit 1
2551                 ;;
2552         esac
2553 done
2554 echo " "
2555 echo "Don't worry if any of the following aren't found..."
2556 say=offhand
2557 for file in $trylist; do
2558         eval xxx=\$$file
2559         case "$xxx" in
2560         /*|?:[\\/]*)
2561                 if test -f "$xxx"; then
2562                         : ok
2563                 else
2564                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2565                         xxx=`./loc $file $file $pth`
2566                 fi
2567                 ;;
2568         '') xxx=`./loc $file $file $pth`;;
2569         *) xxx=`./loc $xxx $xxx $pth`;;
2570         esac
2571         eval $file=$xxx$_exe
2572         eval _$file=$xxx
2573         case "$xxx" in
2574         /*)
2575                 echo $file is in $xxx.
2576                 ;;
2577         ?:[\\/]*)
2578                 echo $file is in $xxx.
2579                 ;;
2580         *)
2581                 echo "I don't see $file out there, $say."
2582                 say=either
2583                 ;;
2584         esac
2585 done
2586 case "$egrep" in
2587 egrep)
2588         echo "Substituting grep for egrep."
2589         egrep=$grep
2590         _egrep=$grep
2591         ;;
2592 esac
2593 case "$less" in
2594 '')     ;;
2595 *)      if $less -R </dev/null >/dev/null 2>&1; then
2596                echo "Substituting less -R for less."
2597                less="$less -R"
2598                _less=$less
2599         fi
2600         ;;
2601 esac
2602 case "$ln" in
2603 ln)
2604         echo "Substituting cp for ln."
2605         ln=$cp
2606         _ln=$cp
2607         ;;
2608 esac
2609 case "$make" in
2610 make)
2611         case "$gmake" in
2612         gmake)
2613         echo "I can't find make or gmake, and my life depends on it." >&4
2614         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2615         exit 1
2616         ;;
2617         esac
2618         ;;
2619 esac
2620 case "$gmake" in
2621 gmake)  ;;
2622 *)      # We can't have osname yet.
2623         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2624                 # Assume that gmake, if found, is definitely GNU make
2625                 # and prefer it over the system make.
2626                 echo "Substituting gmake for make."
2627                 make=$gmake
2628                 _make=$gmake
2629         fi
2630         ;;
2631 esac
2632 case "$test" in
2633 test)
2634         echo "Hopefully test is built into your sh."
2635         ;;
2636 *)
2637         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2638                 echo "Using the test built into your sh."
2639                 test=test
2640                 _test=test
2641         fi
2642         ;;
2643 esac
2644 case "$echo" in
2645 echo)
2646         echo "Hopefully echo is built into your sh."
2647         ;;
2648 '') ;;
2649 *)
2650         echo " "
2651 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2652         $echo $n "hi there$c" >foo1
2653         echo $n "hi there$c" >foo2
2654         if cmp foo1 foo2 >/dev/null 2>&1; then
2655                 echo "They are compatible.  In fact, they may be identical."
2656         else
2657                 case "$n" in
2658                 '-n') n='' c='\c';;
2659                 *) n='-n' c='';;
2660                 esac
2661                 cat <<FOO
2662 They are not compatible!  You are probably running ksh on a non-USG system.
2663 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2664 have echo built in and we may have to run some Bourne shell scripts.  That
2665 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2666
2667 FOO
2668                 $echo $n "The star should be here-->$c"
2669                 $echo "*"
2670         fi
2671         $rm -f foo1 foo2
2672         ;;
2673 esac
2674
2675 # This question was auctioned at YAPC::Europe-2007 in Vienna
2676 # I never promised you could answer it. I only auctioned the question.
2677 cat <<FOO
2678 The following message is sponsored by
2679
2680   Dresden.pm<--The stars should be here.
2681
2682 Dear Perl user, system administrator or package
2683 maintainer, the Perl community sends greetings to
2684 you. Do you (emblematical) greet back [Y/n]? n
2685
2686 FOO
2687
2688 : Check what type of C compiler we use
2689 cat <<EOS >trygcc
2690 $startsh
2691 EOS
2692 cat <<'EOSC' >>trygcc
2693 case "$cc" in
2694 '') ;;
2695 *)  $rm -f try try.*
2696     $cat >try.c <<EOM
2697 int main(int argc, char *argv[]) {
2698   return 0;
2699 }
2700 EOM
2701     if $cc -o try $ccflags $ldflags try.c; then
2702        :
2703     else
2704         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2705         despair=yes
2706         trygcc=yes
2707         case "$cc" in
2708         *gcc*) trygcc=no ;;
2709         esac
2710         # Skip this test because it gives a false match on output like:
2711         #    ./trygcc: line 23: cc: command not found
2712         # case "`$cc -v -c try.c 2>&1`" in
2713         # *gcc*) trygcc=no ;;
2714         # esac
2715         if $test X"$trygcc" = Xyes; then
2716             if gcc -o try -c try.c; then
2717                 echo " "
2718                 echo "You seem to have a working gcc, though." >&4
2719                 # Switching compilers may undo the work of hints files.
2720                 # The most common problem is -D_REENTRANT for threads.
2721                 # This heuristic catches that case, but gets false positives
2722                 # if -Dusethreads was not actually specified.  Better to
2723                 # bail out here with a useful message than fail
2724                 # mysteriously later. Should we perhaps just try to
2725                 # re-invoke Configure -Dcc=gcc config_args ?
2726                 if $test -f usethreads.cbu; then
2727                         $cat >&4 <<EOM
2728
2729 *** However, any setting of the C compiler flags (e.g. for thread support)
2730 *** will be lost.  It may be necessary for you to restart Configure and
2731 *** add -Dcc=gcc to your Configure command line.
2732
2733 EOM
2734                         rp="Would you like to go ahead and try gcc anyway?"
2735                         dflt=n
2736                 else
2737                         rp="Would you like to use it?"
2738                         dflt=y
2739                 fi
2740                 if $test -f myread; then
2741                     . ./myread
2742                 else
2743                     if $test -f UU/myread; then
2744                         . ./UU/myread
2745                     else
2746                         echo "Cannot find myread, sorry.  Aborting." >&2
2747                         exit 1
2748                     fi
2749                 fi
2750                 case "$ans" in
2751                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no;
2752                 esac
2753             fi
2754         fi
2755     fi
2756     $rm -f try try.*
2757     ;;
2758 esac
2759 EOSC
2760
2761 cat <<EOS >checkcc
2762 $startsh
2763 EOS
2764 cat <<'EOSC' >>checkcc
2765 case "$cc" in
2766 '') ;;
2767 *)  $rm -f try try.*
2768     $cat >try.c <<EOM
2769 int main(int argc, char *argv[]) {
2770   return 0;
2771 }
2772 EOM
2773     if $cc -o try $ccflags $ldflags try.c; then
2774        :
2775     else
2776         if $test X"$despair" = Xyes; then
2777            echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2778         fi
2779         $cat >&4 <<EOM
2780 You need to find a working C compiler.
2781 Either (purchase and) install the C compiler supplied by your OS vendor,
2782 or for a free C compiler try http://gcc.gnu.org/
2783 I cannot continue any further, aborting.
2784 EOM
2785         exit 1
2786     fi
2787     $rm -f try try.*
2788     ;;
2789 esac
2790 EOSC
2791
2792 : determine whether symbolic links are supported
2793 echo " "
2794 $touch blurfl
2795 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2796         echo "Symbolic links are supported." >&4
2797         lns="$ln -s"
2798 else
2799         echo "Symbolic links are NOT supported." >&4
2800         lns="$ln"
2801 fi
2802 $rm -f blurfl sym
2803
2804 : determine whether symbolic links are supported
2805 echo " "
2806 case "$lns" in
2807 *"ln"*" -s")
2808         echo "Checking how to test for symbolic links..." >&4
2809         $lns blurfl sym
2810         if $test "X$issymlink" = X; then
2811                 case "$newsh" in
2812                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2813                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2814                 esac
2815                 if test $? = 0; then
2816                         issymlink="test -h"
2817                 else
2818                         echo "Your builtin 'test -h' may be broken." >&4
2819                         case "$test" in
2820                         /*)     ;;
2821                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2822                                 for p in $pth
2823                                 do
2824                                         if test -f "$p/$test"; then
2825                                                 test="$p/$test"
2826                                                 break
2827                                         fi
2828                                 done
2829                                 ;;
2830                         esac
2831                         case "$test" in
2832                         /*)
2833                                 echo "Trying external '$test -h'." >&4
2834                                 issymlink="$test -h"
2835                                 if $test ! -h sym >/dev/null 2>&1; then
2836                                         echo "External '$test -h' is broken, too." >&4
2837                                         issymlink=''
2838                                 fi
2839                                 ;;
2840                         *)      issymlink='' ;;
2841                         esac
2842                 fi
2843         fi
2844         if $test "X$issymlink" = X; then
2845                 if $test -L sym 2>/dev/null; then
2846                         issymlink="$test -L"
2847                         echo "The builtin '$test -L' worked." >&4
2848                 fi
2849         fi
2850         if $test "X$issymlink" != X; then
2851                 echo "You can test for symbolic links with '$issymlink'." >&4
2852         else
2853                 echo "I do not know how you can test for symbolic links." >&4
2854         fi
2855         $rm -f blurfl sym
2856         ;;
2857 *)      echo "No symbolic links, so not testing for their testing..." >&4
2858         ;;
2859 esac
2860 echo " "
2861
2862 : Make symlinks util
2863 case "$mksymlinks" in
2864 $define|true|[yY]*)
2865         case "$src" in
2866         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2867                 exit 1
2868                 ;;
2869         *)      case "$lns:$issymlink" in
2870                 *"ln"*" -s:"*"test -"?)
2871                         echo "Creating the symbolic links..." >&4
2872                         cd ..
2873                         awk '{print $1}' $src/MANIFEST | sed -e 's:/\([^/]*\)$: \1:' |
2874                         awk 'NF == 1 {
2875                                 dir=".";
2876                                 file=$1 "";
2877                              }
2878                              NF == 2 {
2879                                 dir=$1 "";
2880                                 file=$2 "";
2881                              }
2882                              {
2883                                  print "# dir = ", dir, "file = ", file
2884                                  mf[dir] = mf[dir]" "source"/"dir"/"file;
2885                              } END {
2886                                  for (d in mf) {
2887                                      if (d != ".") { print("mkdir -p "d) }
2888                                      print("ln -sf "mf[d]" "d);
2889                                  }
2890                              }' source="$src" > UU/mksymlinks.$$
2891                         sh UU/mksymlinks.$$
2892                         rm UU/mksymlinks.$$
2893                         # Sanity check 1.
2894                         if test ! -d t/base; then
2895                                 echo "Failed to create the subdirectories.  Aborting." >&4
2896                                 exit 1
2897                         fi
2898                         # Sanity check 2.
2899                         if test ! -f t/base/lex.t; then
2900                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2901                                 exit 1
2902                         fi
2903                         if test ! -f win32/win32.c; then
2904                                 echo "Failed to create the symlinks (win32/win32.c missing).  Aborting." >&4
2905                                 exit 1
2906                         fi
2907                         cd UU
2908                         ;;
2909                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2910                         ;;
2911                 esac
2912                 ;;
2913         esac
2914         ;;
2915 esac
2916
2917 : Check for Cross-Compilation
2918 if $test "X$targethost" = "X"; then
2919     targethost=""
2920 fi
2921 if $test "X$targetenv" = "X"; then
2922     targetenv=""
2923 fi
2924 case "$usecrosscompile" in
2925 $define|true|[yY]*)
2926         $echo "Cross-compiling..."
2927         croak=''
2928         case "$cc" in
2929         *-gcc*|*-g++*) # A cross-compiling gcc, probably.
2930             # arm-linux-androideabi-gcc  -> arm-linux-androideabi
2931             # x86_64-w64-mingw32-gcc.exe -> x86_64-w64-mingw32
2932             targetarch=`$echo $cc|$sed 's/-g[c\+][c\+].*$//'`
2933             ar=`$echo $cc|$sed 's/-g[c\+][c\+]/-ar/'`
2934             # leave out ld, choosing it is more complex
2935             nm=`$echo $cc|$sed 's/-g[c\+][c\+]/-nm/'`
2936             ranlib=`$echo $cc|$sed 's/-g[c\+][c\+]/-ranlib/'`
2937             # We are in a weird spot. Just before us, some values
2938             # were 'saved', to be restored after the hints are
2939             # run.  This means that the changes we made to ar,
2940             # nm and ranlib will get reverted.
2941             # To avoid that, we hijack the saving mechanism and
2942             # have it save our new values.
2943             for file in ar nm ranlib; do
2944                 eval xxx=\$$file
2945                 eval $file=$xxx$_exe
2946                 eval _$file=$xxx
2947             done
2948         ;;
2949         esac
2950         case "$targetarch" in
2951         '') echo "Targetarch not defined." >&4; croak=y ;;
2952         *)  echo "Using targetarch $targetarch." >&4 ;;
2953         esac
2954         case "$targethost" in
2955         '') echo "Targethost not defined." >&4; croak=y ;;
2956         *)  echo "Using targethost $targethost." >&4
2957         esac
2958         locincpth=' '
2959         loclibpth=' '
2960         case "$croak" in
2961         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2962         esac
2963     : compile a host miniperl and generate_uudmap, unless we got passed them
2964     if $test "X$hostperl" = X; then
2965       echo "Building host miniperl and generate_uudmap binaries" >&4
2966       before_host=`pwd`
2967       cd ..
2968       cd $src
2969       src=`pwd`
2970       rm -rf $src/host
2971       mkdir $src/host
2972       cd $src/host
2973       $src/Configure -des -Dusedevel -Dmksymlinks
2974       $make miniperl
2975       case "$hostgenerate" in
2976       '') $make generate_uudmap
2977           hostgenerate=$src/host/generate_uudmap
2978           ;;
2979        "$undef") hostgenerate=''
2980           ;;
2981       esac
2982       hostperl=$src/host/miniperl
2983       cd $before_host
2984     fi
2985     hostosname=`$hostperl -le 'print $^O'`
2986     ;;
2987 *)
2988     usecrosscompile="$undef"
2989     ;;
2990 esac
2991
2992 : Define -Dtargethost=somecomputer to run compiled tests on another machine
2993 case "$targethost" in
2994     '') echo "Checking for cross-compile" >&4
2995     case "$usecrosscompile$multiarch" in
2996        *$define*) echo "Skipping the try tests in the rest of Configure as no targethost was defined when cross-compiling" >&4
2997          if [ -f Makefile ]; then
2998            echo " "
2999            echo "Now you must ensure config.sh, config.h and the generated headers exist and run a $make."
3000          else
3001            echo "Configure done."
3002          fi
3003        exit 0
3004        ;;
3005      *) echo "No targethost for running compiler tests against defined, running locally" >&4
3006         run=''
3007         to=:
3008         from=:
3009         ;;
3010     esac
3011     ;;
3012     *) echo "Using targethost $targethost." >&4
3013         case "$src" in
3014         /*) run=$src/Cross/run
3015             targetmkdir=$src/Cross/mkdir
3016             to=$src/Cross/to
3017             from=$src/Cross/from
3018             ;;
3019         *)  pwd=`$test -f ../Configure & cd ..; pwd`
3020             run=$pwd/Cross/run
3021             targetmkdir=$pwd/Cross/mkdir
3022             to=$pwd/Cross/to
3023             from=$pwd/Cross/from
3024             ;;
3025         esac
3026         case "$targetrun" in
3027         '') targetrun=ssh ;;
3028         esac
3029         case "$targetto" in
3030         '') targetto=scp ;;
3031         esac
3032         case "$targetfrom" in
3033         '') targetfrom=scp ;;
3034         esac
3035         run=$run-$targetrun
3036         to=$to-$targetto
3037         from=$from-$targetfrom
3038         case "$targetdir" in
3039         '')  targetdir=/tmp
3040              echo "Guessing targetdir $targetdir." >&4
3041              ;;
3042         esac
3043         case "$targetuser" in
3044         '')  targetuser=root
3045              echo "Guessing targetuser $targetuser." >&4
3046              ;;
3047         esac
3048         case "$targetport" in
3049         '')  targetport=22
3050              echo "Guessing targetport $targetport." >&4
3051              ;;
3052         esac
3053         case "$targetfrom" in
3054         scp)    q=-q ;;
3055         *)      q='' ;;
3056         esac
3057         case "$targetrun" in
3058         ssh|rsh)
3059             cat >$run <<EOF
3060 #!/bin/sh
3061 env=''
3062 case "\$1" in
3063 -cwd)
3064   shift
3065   cwd=\$1
3066   shift
3067   ;;
3068 esac
3069 case "\$1" in
3070 -env)
3071   shift
3072   env=\$1
3073   shift
3074   ;;
3075 esac
3076 case "\$cwd" in
3077 '') cwd=$targetdir ;;
3078 esac
3079 exe=\$1
3080 shift
3081 $to \$exe
3082 $targetrun -p $targetport -l $targetuser $targethost "cd \$cwd && \$env \$exe \$@"
3083 EOF
3084             ;;
3085         adb)
3086             $touch $run
3087             ;;
3088         *)  echo "Unknown targetrun '$targetrun'" >&4
3089             exit 1
3090             ;;
3091         esac
3092         case "$targetmkdir" in
3093         */Cross/mkdir)
3094             cat >$targetmkdir <<EOF
3095 #!/bin/sh
3096 $targetrun -p $targetport -l $targetuser $targethost "mkdir -p \$@"
3097 EOF
3098             $chmod a+rx $targetmkdir
3099             ;;
3100         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
3101             exit 1
3102             ;;
3103         esac
3104         case "$targetto" in
3105         scp|rcp)
3106             cat >$to <<EOF
3107 #!/bin/sh
3108 for f in \$@
3109 do
3110   case "\$f" in
3111   /*)
3112     $targetmkdir \`dirname \$f\`
3113     $targetto -P $targetport -r $q \$f $targetuser@$targethost:\$f           2>/dev/null  || exit 1
3114     ;;
3115   *)
3116     $targetmkdir $targetdir/\`dirname \$f\`
3117     $targetto -P $targetport -r $q \$f $targetuser@$targethost:$targetdir/\$f 2>/dev/null || exit 1
3118     ;;
3119   esac
3120 done
3121 exit 0
3122 EOF
3123             ;;
3124         cp) cat >$to <<EOF
3125 #!/bin/sh
3126 for f in \$@
3127 do
3128   case "\$f" in
3129   /*)
3130     $mkdir -p $targetdir/\`dirname \$f\`
3131     $cp \$f $targetdir/\$f || exit 1
3132     ;;
3133   *)
3134     $targetmkdir $targetdir/\`dirname \$f\`
3135     $cp \$f $targetdir/\$f || exit 1
3136     ;;
3137   esac
3138 done
3139 exit 0
3140 EOF
3141             ;;
3142         *)  echo "Unknown targetto '$targetto'" >&4
3143             exit 1
3144             ;;
3145         esac
3146         case "$targetfrom" in
3147         scp|rcp)
3148           cat >$from <<EOF
3149 #!/bin/sh
3150 for f in \$@
3151 do
3152   $rm -f \$f
3153   $targetfrom -P $targetport $q $targetuser@$targethost:$targetdir/\$f . || exit 1
3154 done
3155 exit 0
3156 EOF
3157             ;;
3158         cp) cat >$from <<EOF
3159 #!/bin/sh
3160 for f in \$@
3161 do
3162   $rm -f \$f
3163   cp $targetdir/\$f . || exit 1
3164 done
3165 exit 0
3166 EOF
3167             ;;
3168         *)  echo "Unknown targetfrom '$targetfrom'" >&4
3169             exit 1
3170             ;;
3171         esac
3172         if $test ! -f $run; then
3173             echo "Target 'run' script '$run' not found." >&4
3174         else
3175             $chmod a+rx $run
3176         fi
3177         if $test ! -f $to; then
3178             echo "Target 'to' script '$to' not found." >&4
3179         else
3180             $chmod a+rx $to
3181         fi
3182         if $test ! -f $from; then
3183             echo "Target 'from' script '$from' not found." >&4
3184         else
3185             $chmod a+rx $from
3186         fi
3187         if $test ! -f $run -o ! -f $to -o ! -f $from; then
3188             exit 1
3189         fi
3190         cat >&4 <<EOF
3191 Using '$run' for remote execution,
3192 and '$from' and '$to'
3193 for remote file transfer.
3194 EOF
3195         ;;
3196 *)      run=''
3197         to=:
3198         from=:
3199         usecrosscompile="$undef"
3200         targetarch=''
3201         ;;
3202 esac
3203
3204 : see whether [:lower:] and [:upper:] are supported character classes
3205 echo " "
3206 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
3207 ABYZ)
3208         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
3209         up='[:upper:]'
3210         low='[:lower:]'
3211         ;;
3212 *)      # There is a discontinuity in EBCDIC between 'R' and 'S'
3213         # (0xd9 and 0xe2), therefore that is a nice testing point.
3214         if test "X$up" = X -o "X$low" = X; then
3215             case "`echo RS | $tr '[R-S]' '[r-s]' 2>/dev/null`" in
3216             rs) up='[A-Z]'
3217                 low='[a-z]'
3218                 ;;
3219             esac
3220         fi
3221         if test "X$up" = X -o "X$low" = X; then
3222             case "`echo RS | $tr R-S r-s 2>/dev/null`" in
3223             rs) up='A-Z'
3224                 low='a-z'
3225                 ;;
3226             esac
3227         fi
3228         if test "X$up" = X -o "X$low" = X; then
3229             case "`echo RS | od -x 2>/dev/null`" in
3230             *D9E2*|*d9e2*)
3231                 echo "Hey, this might be EBCDIC." >&4
3232                 if test "X$up" = X -o "X$low" = X; then
3233                     case "`echo RS | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
3234                     rs) up='[A-IJ-RS-Z]'
3235                         low='[a-ij-rs-z]'
3236                         ;;
3237                     esac
3238                 fi
3239                 if test "X$up" = X -o "X$low" = X; then
3240                     case "`echo RS | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
3241                     rs) up='A-IJ-RS-Z'
3242                         low='a-ij-rs-z'
3243                         ;;
3244                     esac
3245                 fi
3246                 ;;
3247             esac
3248         fi
3249 esac
3250 case "`echo RS | $tr \"$up\" \"$low\" 2>/dev/null`" in
3251 rs)
3252     echo "Using $up and $low to convert case." >&4
3253     ;;
3254 *)
3255     echo "I don't know how to translate letters from upper to lower case." >&4
3256     echo "Your tr is not acting any way I know of." >&4
3257     exit 1
3258     ;;
3259 esac
3260 : set up the translation script tr, must be called with ./tr of course
3261 cat >tr <<EOSC
3262 $startsh
3263 case "\$1\$2" in
3264 '[A-Z][a-z]') exec $tr '$up' '$low';;
3265 '[a-z][A-Z]') exec $tr '$low' '$up';;
3266 esac
3267 exec $tr "\$@"
3268 EOSC
3269 chmod +x tr
3270 $eunicefix tr
3271
3272 : Try to determine whether config.sh was made on this system
3273 case "$config_sh" in
3274 '')
3275 myuname=`$uname -a 2>/dev/null`
3276 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
3277 # Downcase everything to avoid ambiguity.
3278 # Remove slashes and single quotes so we can use parts of this in
3279 # directory and file names.
3280 # Remove newlines so myuname is sane to use elsewhere.
3281 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
3282 # because the A-Z/a-z are not consecutive.
3283 myuname=`echo $myuname | $sed -e "s,['/],,g" | \
3284         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
3285 newmyuname="$myuname"
3286 dflt=n
3287 case "$knowitall" in
3288 '')
3289         if test -f ../config.sh; then
3290                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
3291                         eval "`grep myuname= ../config.sh`"
3292                 fi
3293                 if test "X$myuname" = "X$newmyuname"; then
3294                         dflt=y
3295                 fi
3296         fi
3297         ;;
3298 *) dflt=y;;
3299 esac
3300
3301 : Get old answers from old config file if Configure was run on the
3302 : same system, otherwise use the hints.
3303 hint=default
3304 cd ..
3305 if test -f config.sh; then
3306         echo " "
3307         rp="I see a config.sh file.  Shall I use it to set the defaults?"
3308         . UU/myread
3309         case "$ans" in
3310         n*|N*) echo "OK, I'll ignore it."
3311                 mv config.sh config.sh.old
3312                 myuname="$newmyuname"
3313                 ;;
3314         *)  echo "Fetching default answers from your old config.sh file..." >&4
3315                 tmp_n="$n"
3316                 tmp_c="$c"
3317                 tmp_sh="$sh"
3318                 . ./config.sh
3319                 cp config.sh UU
3320                 n="$tmp_n"
3321                 c="$tmp_c"
3322                 : Older versions did not always set $sh.  Catch re-use of such
3323                 : an old config.sh.
3324                 case "$sh" in
3325                 '') sh="$tmp_sh" ;;
3326                 esac
3327                 hint=previous
3328                 ;;
3329         esac
3330 fi
3331 . ./UU/checkcc
3332 if test ! -f config.sh; then
3333         $cat <<EOM
3334
3335 First time through, eh?  I have some defaults handy for some systems
3336 that need some extra help getting the Configure answers right:
3337
3338 EOM
3339         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
3340         dflt=''
3341         : Half the following guesses are probably wrong... If you have better
3342         : tests or hints, please send them to perlbug@perl.org
3343         : The metaconfig authors would also appreciate a copy...
3344         $test -f /irix && osname=irix
3345         $test -f /xenix && osname=sco_xenix
3346         $test -f /dynix && osname=dynix
3347         $test -f /dnix && osname=dnix
3348         $test -f /lynx.os && osname=lynxos
3349         $test -f /unicos && osname=unicos && osvers=`$uname -r`
3350         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
3351         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
3352         $test -f /bin/mips && /bin/mips && osname=mips
3353         $test -d /usr/apollo/bin && osname=apollo
3354         $test -f /etc/saf/_sactab && osname=svr4
3355         $test -d /usr/include/minix && osname=minix && osvers=`$uname -r`
3356         $test -f /system/gnu_library/bin/ar.pm && osname=vos
3357         if $test -d /MachTen -o -d /MachTen_Folder; then
3358                 osname=machten
3359                 if $test -x /sbin/version; then
3360                         osvers=`/sbin/version | $awk '{print $2}' |
3361                         $sed -e 's/[A-Za-z]$//'`
3362                 elif $test -x /usr/etc/version; then
3363                         osvers=`/usr/etc/version | $awk '{print $2}' |
3364                         $sed -e 's/[A-Za-z]$//'`
3365                 else
3366                         osvers="$2.$3"
3367                 fi
3368         fi
3369
3370         $test -f /sys/posix.dll &&
3371                 $test -f /usr/bin/what &&
3372                 set X `/usr/bin/what /sys/posix.dll` &&
3373                 $test "$3" = UWIN &&
3374                 osname=uwin &&
3375                 osvers="$5"
3376
3377         if $test -f $uname; then
3378                 set X $myuname
3379                 shift
3380
3381                 case "$5" in
3382                 fps*) osname=fps ;;
3383                 mips*)
3384                         case "$4" in
3385                         umips) osname=umips ;;
3386                         *) osname=mips ;;
3387                         esac;;
3388                 [23]100) osname=mips ;;
3389                 i386*)
3390                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
3391                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
3392                                 osname='sco'
3393                                 osvers=$tmp
3394                         elif $test -f /etc/kconfig; then
3395                                 osname=isc
3396                                 if test "$lns" = "$ln -s"; then
3397                                         osvers=4
3398                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
3399                                         osvers=3
3400                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
3401                                         osvers=2
3402                                 fi
3403                         fi
3404                         tmp=''
3405                         ;;
3406                 pc*)
3407                         if test -n "$DJGPP"; then
3408                                 osname=dos
3409                                 osvers=djgpp
3410                         fi
3411                         ;;
3412                 esac
3413
3414                 case "$1" in
3415                 aix) osname=aix
3416                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
3417                         case "$tmp" in
3418                         # oslevel can fail with:
3419                         # oslevel: Unable to acquire lock.
3420                         *not\ found) osvers="$4"."$3" ;;
3421                         '<3240'|'<>3240') osvers=3.2.0 ;;
3422                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
3423                         '=3250'|'>3250') osvers=3.2.5 ;;
3424                         *) osvers=$tmp;;
3425                         esac
3426                         ;;
3427                 bitrig) osname=bitrig
3428                         osvers="$3"
3429                         ;;
3430                 bsd386) osname=bsd386
3431                         osvers=`$uname -r`
3432                         ;;
3433                 cygwin*) osname=cygwin
3434                         osvers="$3"
3435                         ;;
3436                 *dc.osx) osname=dcosx
3437                         osvers="$3"
3438                         ;;
3439                 dnix) osname=dnix
3440                         osvers="$3"
3441                         ;;
3442                 domainos) osname=apollo
3443                         osvers="$3"
3444                         ;;
3445                 dgux)   osname=dgux
3446                         osvers="$3"
3447                         ;;
3448                 dragonfly) osname=dragonfly
3449                         osvers="$3"
3450                         ;;
3451                 dynixptx*) osname=dynixptx
3452                         osvers=`echo "$4"|sed 's/^v//'`
3453                         ;;
3454                 freebsd) osname=freebsd
3455                         osvers="$3" ;;
3456                 genix)  osname=genix ;;
3457                 gnu)    osname=gnu
3458                         osvers="$3" ;;
3459                 hp*)    osname=hpux
3460                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
3461                         ;;
3462                 irix*)  osname=irix
3463                         case "$3" in
3464                         4*) osvers=4 ;;
3465                         5*) osvers=5 ;;
3466                         *)      osvers="$3" ;;
3467                         esac
3468                         ;;
3469                 linux)  osname=linux
3470                         case "$3" in
3471                         *)      osvers="$3" ;;
3472                         esac
3473                         $test -f /system/lib/libandroid.so && osname=linux-android
3474                         ;;
3475                 MiNT)   osname=mint
3476                         ;;
3477                 netbsd*) osname=netbsd
3478                         osvers="$3"
3479                         ;;
3480                 news-os) osvers="$3"
3481                         case "$3" in
3482                         4*) osname=newsos4 ;;
3483                         *) osname=newsos ;;
3484                         esac
3485                         ;;
3486                 nonstop-ux) osname=nonstopux ;;
3487                 openbsd) osname=openbsd
3488                         osvers="$3"
3489                         ;;
3490                 os2)    osname=os2
3491                         osvers="$4"
3492                         ;;
3493                 POSIX-BC | posix-bc ) osname=posix-bc
3494                         osvers="$3"
3495                         ;;
3496                 powerux | power_ux | powermax_os | powermaxos | \
3497                 powerunix | power_unix) osname=powerux
3498                         osvers="$3"
3499                         ;;
3500                 qnx) osname=qnx
3501                         osvers="$4"
3502                         ;;
3503                 solaris) osname=solaris
3504                         case "$3" in
3505                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3506                         *)      osvers="$3" ;;
3507                         esac
3508                         ;;
3509                 sunos) osname=sunos
3510                         case "$3" in
3511                         5*) osname=solaris
3512                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3513                         *)      osvers="$3" ;;
3514                         esac
3515                         ;;
3516                 titanos) osname=titanos
3517                         case "$3" in
3518                         1*) osvers=1 ;;
3519                         2*) osvers=2 ;;
3520                         3*) osvers=3 ;;
3521                         4*) osvers=4 ;;
3522                         *)      osvers="$3" ;;
3523                         esac
3524                         ;;
3525                 ultrix) osname=ultrix
3526                         osvers="$3"
3527                         ;;
3528                 osf1|mls+)      case "$5" in
3529                                 alpha)
3530                                         osname=dec_osf
3531                                         osvers=`sizer -v | awk -FUNIX '{print $2}' | awk '{print $1}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
3532                                         case "$osvers" in
3533                                         [1-9].[0-9]*) ;;
3534                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
3535                                         esac
3536                                         ;;
3537                         hp*)    osname=hp_osf1  ;;
3538                         mips)   osname=mips_osf1 ;;
3539                         esac
3540                         ;;
3541                 # UnixWare 7.1.2 is known as Open UNIX 8
3542                 openunix|unixware) osname=svr5
3543                         osvers="$4"
3544                         ;;
3545                 uts)    osname=uts
3546                         osvers="$3"
3547                         ;;
3548                 vos) osvers="$3"
3549                         ;;
3550                 $2) case "$osname" in
3551                         *isc*) ;;
3552                         *freebsd*) ;;
3553                         svr*)
3554                                 : svr4.x or possibly later
3555                                 case "svr$3" in
3556                                 ${osname}*)
3557                                         osname=svr$3
3558                                         osvers=$4
3559                                         ;;
3560                                 esac
3561                                 case "$osname" in
3562                                 svr4.0)
3563                                         : Check for ESIX
3564                                         if test -f /stand/boot ; then
3565                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3566                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3567                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3568                                                         if test -n "$isesix"; then
3569                                                                 osname=esix4
3570                                                         fi
3571                                                 fi
3572                                         fi
3573                                         ;;
3574                                 esac
3575                                 ;;
3576                         *)      if test -f /etc/systemid; then
3577                                         osname=sco
3578                                         set `echo $3 | $sed 's/\./ /g'` $4
3579                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3580                                                 osvers=$1.$2.$3
3581                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3582                                                 osvers=$1.$2
3583                                         elif $test -f $src/hints/sco_$1.sh; then
3584                                                 osvers=$1
3585                                         fi
3586                                 else
3587                                         case "$osname" in
3588                                         '') : Still unknown.  Probably a generic Sys V.
3589                                                 osname="sysv"
3590                                                 osvers="$3"
3591                                                 ;;
3592                                         esac
3593                                 fi
3594                                 ;;
3595                         esac
3596                         ;;
3597                 *)      case "$osname" in
3598                         '') : Still unknown.  Probably a generic BSD.
3599                                 osname="$1"
3600                                 osvers="$3"
3601                                 ;;
3602                         esac
3603                         ;;
3604                 esac
3605         else
3606                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3607                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3608                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3609                                 osname=news_os
3610                         fi
3611                         $rm -f UU/kernel.what
3612                 elif test -d c:/. -o -n "$is_os2" ; then
3613                         set X $myuname
3614                         osname=os2
3615                         osvers="$5"
3616                 fi
3617         fi
3618
3619         case "$targetarch" in
3620         '') ;;
3621         *)  hostarch=$osname
3622             case "$targetarch" in
3623                 nto*|*-nto-*)
3624                     # Will load qnx.sh, which should change osname to nto
3625                     osname=qnx
3626                     osvers=''
3627                     ;;
3628                 *linux-android*)
3629                     # Catch arm-linux-androideabi, mipsel-linux-android,
3630                     # and i686-linux-android
3631                     osname=linux-android
3632                     osvers=''
3633                     ;;
3634                 *linux*)
3635                     # Something like arm-linux-gnueabihf is really just
3636                     # plain linux.
3637                     osname=linux
3638                     osvers=''
3639                     ;;
3640                 *solaris*|*sunos*)
3641                     osname=solaris
3642                     # XXX perhaps we should just assume
3643                     # osvers to be 2, or maybe take the value
3644                     # from targetarch. Using $run before the
3645                     # hints are run is somewhat icky.
3646                     set X `$run $uname -a 2>/dev/null`
3647                     shift
3648                     case "$3" in
3649                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3650                         *)  osvers="$3" ;;
3651                     esac
3652                     ;;
3653                 *)
3654                     osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3655                     osvers=''
3656                 ;;
3657             esac
3658             ;;
3659         esac
3660
3661         : Now look for a hint file osname_osvers, unless one has been
3662         : specified already.
3663         case "$hintfile" in
3664         ''|' ')
3665                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3666                 : Also try without trailing minor version numbers.
3667                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3668                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3669                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3670                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3671                 case "$file" in
3672                 '') dflt=none ;;
3673                 *)  case "$osvers" in
3674                         '') dflt=$file
3675                                 ;;
3676                         *)  if $test -f $src/hints/$file.sh ; then
3677                                         dflt=$file
3678                                 elif $test -f $src/hints/$xfile.sh ; then
3679                                         dflt=$xfile
3680                                 elif $test -f $src/hints/$xxfile.sh ; then
3681                                         dflt=$xxfile
3682                                 elif $test -f $src/hints/$xxxfile.sh ; then
3683                                         dflt=$xxxfile
3684                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3685                                         dflt=$xxxxfile
3686                                 elif $test -f "$src/hints/${osname}.sh" ; then
3687                                         dflt="${osname}"
3688                                 else
3689                                         dflt=none
3690                                 fi
3691                                 ;;
3692                         esac
3693                         ;;
3694                 esac
3695                 if $test -f Policy.sh ; then
3696                         case "$dflt" in
3697                         *Policy*) ;;
3698                         none) dflt="Policy" ;;
3699                         *) dflt="Policy $dflt" ;;
3700                         esac
3701                 fi
3702                 ;;
3703         *)
3704                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3705                 ;;
3706         esac
3707
3708         if $test -f Policy.sh ; then
3709                 $cat <<EOM
3710
3711 There's also a Policy hint file available, which should make the
3712 site-specific (policy) questions easier to answer.
3713 EOM
3714
3715         fi
3716
3717         $cat <<EOM
3718
3719 You may give one or more space-separated answers, or "none" if appropriate.
3720 If you have a handcrafted Policy.sh file or a Policy.sh file generated by a
3721 previous run of Configure, you may specify it as well as or instead of
3722 OS-specific hints.  If hints are provided for your OS, you should use them:
3723 although Perl can probably be built without hints on many platforms, using
3724 hints often improve performance and may enable features that Configure can't
3725 set up on its own. If there are no hints that match your OS, specify "none";
3726 DO NOT give a wrong version or a wrong OS.
3727
3728 EOM
3729
3730         rp="Which of these apply, if any?"
3731         . UU/myread
3732         tans=$ans
3733         for file in $tans; do
3734                 if $test X$file = XPolicy -a -f Policy.sh; then
3735                         . Policy.sh
3736                         $cat Policy.sh >> UU/config.sh
3737                 elif $test -f $src/hints/$file.sh; then
3738                         . $src/hints/$file.sh
3739                         $cat $src/hints/$file.sh >> UU/config.sh
3740                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3741                         : nothing
3742                 else
3743                         : Give one chance to correct a possible typo.
3744                         echo "$file.sh does not exist"
3745                         dflt=$file
3746                         rp="hint to use instead?"
3747                         . UU/myread
3748                         for file in $ans; do
3749                                 if $test -f "$src/hints/$file.sh"; then
3750                                         . $src/hints/$file.sh
3751                                         $cat $src/hints/$file.sh >> UU/config.sh
3752                                 elif $test X$ans = X -o X$ans = Xnone ; then
3753                                         : nothing
3754                                 else
3755                                         echo "$file.sh does not exist -- ignored."
3756                                 fi
3757                         done
3758                 fi
3759         done
3760
3761         hint=recommended
3762         : Remember our hint file for later.
3763         if $test -f "$src/hints/$file.sh" ; then
3764                 hintfile="$file"
3765         else
3766                 hintfile=''
3767         fi
3768 fi
3769 cd UU
3770 ;;
3771 *)
3772         echo " "
3773         echo "Fetching default answers from $config_sh..." >&4
3774         tmp_n="$n"
3775         tmp_c="$c"
3776         cd ..
3777         cp $config_sh config.sh 2>/dev/null
3778         chmod +w config.sh
3779         . ./config.sh
3780         cd UU
3781         cp ../config.sh .
3782         n="$tmp_n"
3783         c="$tmp_c"
3784         hint=previous
3785         ;;
3786 esac
3787 test "$override" && . ./optdef.sh
3788
3789 : Restore computed paths
3790 for file in $loclist $trylist; do
3791         eval $file="\$_$file"
3792 done
3793
3794 cat << EOM
3795
3796 Configure uses the operating system name and version to set some defaults.
3797 The default value is probably right if the name rings a bell. Otherwise,
3798 since spelling matters for me, either accept the default or answer "none"
3799 to leave it blank.
3800
3801 EOM
3802 case "$osname" in
3803         ''|' ')
3804                 case "$hintfile" in
3805                 ''|' '|none) dflt=none ;;
3806                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3807                 esac
3808                 ;;
3809         *) dflt="$osname" ;;
3810 esac
3811 rp="Operating system name?"
3812 . ./myread
3813 case "$ans" in
3814 none)  osname='' ;;
3815 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3816 esac
3817 echo " "
3818 case "$osvers" in
3819         ''|' ')
3820                 case "$hintfile" in
3821                 ''|' '|none) dflt=none ;;
3822                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3823                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3824                         case "$dflt" in
3825                         ''|' ') dflt=none ;;
3826                         esac
3827                         ;;
3828                 esac
3829                 ;;
3830         *) dflt="$osvers" ;;
3831 esac
3832 rp="Operating system version?"
3833 . ./myread
3834 case "$ans" in
3835 none)  osvers='' ;;
3836 *) osvers="$ans" ;;
3837 esac
3838
3839
3840 . ./posthint.sh
3841
3842 : who configured the system
3843 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3844 case "$cf_by" in
3845 "")
3846         cf_by=`(logname) 2>/dev/null`
3847         case "$cf_by" in
3848         "")
3849                 cf_by=`(whoami) 2>/dev/null`
3850                 case "$cf_by" in
3851                 "") cf_by=unknown ;;
3852                 esac ;;
3853         esac ;;
3854 esac
3855
3856 : decide how portable to be.  Allow command line overrides.
3857 case "$d_portable" in
3858 "$undef") ;;
3859 *)      d_portable="$define" ;;
3860 esac
3861
3862 : set up shell script to do ~ expansion
3863 cat >filexp <<EOSS
3864 $startsh
3865 : expand filename
3866 case "\$1" in
3867  \~/*|\~)
3868         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3869         ;;
3870  \~*)
3871         if $test -f /bin/csh; then
3872                 /bin/csh -f -c "glob \$1"
3873                 failed=\$?
3874                 echo ""
3875                 exit \$failed
3876         else
3877                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3878                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3879                 if $test ! -d "\$dir"; then
3880                         me=\`basename \$0\`
3881                         echo "\$me: can't locate home directory for: \$name" >&2
3882                         exit 1
3883                 fi
3884                 case "\$1" in
3885                 */*)
3886                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3887                         ;;
3888                 *)
3889                         echo \$dir
3890                         ;;
3891                 esac
3892         fi
3893         ;;
3894 *)
3895         echo \$1
3896         ;;
3897 esac
3898 EOSS
3899 chmod +x filexp
3900 $eunicefix filexp
3901
3902 : now set up to get a file name
3903 cat <<EOS >getfile
3904 $startsh
3905 EOS
3906 cat <<'EOSC' >>getfile
3907 tilde=''
3908 fullpath=''
3909 already=''
3910 skip=''
3911 none_ok=''
3912 exp_file=''
3913 nopath_ok=''
3914 orig_rp="$rp"
3915 orig_dflt="$dflt"
3916 case "$gfpth" in
3917 '') gfpth='.' ;;
3918 esac
3919
3920 case "$fn" in
3921 *\(*)
3922         : getfile will accept an answer from the comma-separated list
3923         : enclosed in parentheses even if it does not meet other criteria.
3924         expr "$fn" : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3925         fn=`echo $fn | sed 's/(.*)//'`
3926         ;;
3927 esac
3928
3929 case "$fn" in
3930 *:*)
3931         loc_file=`expr $fn : '.*:\(.*\)'`
3932         fn=`expr $fn : '\(.*\):.*'`
3933         ;;
3934 esac
3935
3936 case "$fn" in
3937 *~*) tilde=true;;
3938 esac
3939 case "$fn" in
3940 */*) fullpath=true;;
3941 esac
3942 case "$fn" in
3943 *+*) skip=true;;
3944 esac
3945 case "$fn" in
3946 *n*) none_ok=true;;
3947 esac
3948 case "$fn" in
3949 *e*) exp_file=true;;
3950 esac
3951 case "$fn" in
3952 *p*) nopath_ok=true;;
3953 esac
3954
3955 case "$fn" in
3956 *f*) type='File';;
3957 *d*) type='Directory';;
3958 *l*) type='Locate';;
3959 esac
3960
3961 what="$type"
3962 case "$what" in
3963 Locate) what='File';;
3964 esac
3965
3966 case "$exp_file" in
3967 '')
3968         case "$d_portable" in
3969         "$define") ;;
3970         *) exp_file=true;;
3971         esac
3972         ;;
3973 esac
3974
3975 cd ..
3976 while test "$type"; do
3977         redo=''
3978         rp="$orig_rp"
3979         dflt="$orig_dflt"
3980         case "$tilde" in
3981         true) rp="$rp (~name ok)";;
3982         esac
3983         . UU/myread
3984         if test -f UU/getfile.ok && \
3985                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3986         then
3987                 value="$ans"
3988                 ansexp="$ans"
3989                 break
3990         fi
3991         case "$ans" in
3992         none)
3993                 value=''
3994                 ansexp=''
3995                 case "$none_ok" in
3996                 true) type='';;
3997                 esac
3998                 ;;
3999         *)
4000                 case "$tilde" in
4001                 '') value="$ans"
4002                         ansexp="$ans";;
4003                 *)
4004                         value=`UU/filexp $ans`
4005                         case $? in
4006                         0)
4007                                 if test "$ans" != "$value"; then
4008                                         echo "(That expands to $value on this system.)"
4009                                 fi
4010                                 ;;
4011                         *) value="$ans";;
4012                         esac
4013                         ansexp="$value"
4014                         case "$exp_file" in
4015                         '') value="$ans";;
4016                         esac
4017                         ;;
4018                 esac
4019                 case "$fullpath" in
4020                 true)
4021                         case "$ansexp" in
4022                         /*) value="$ansexp" ;;
4023                         [a-zA-Z]:/*) value="$ansexp" ;;
4024                         *)
4025                                 redo=true
4026                                 case "$already" in
4027                                 true)
4028                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
4029                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
4030                                         ;;
4031                                 *)
4032                                 echo "Please give a full path name, starting with slash." >&4
4033                                         case "$tilde" in
4034                                         true)
4035                                 echo "Note that using ~name is ok provided it expands well." >&4
4036                                                 already=true
4037                                                 ;;
4038                                         esac
4039                                 esac
4040                                 ;;
4041                         esac
4042                         ;;
4043                 esac
4044                 case "$redo" in
4045                 '')
4046                         case "$type" in
4047                         File)
4048                                 for fp in $gfpth; do
4049                                         if test "X$fp" = X.; then
4050                                             pf="$ansexp"
4051                                         else    
4052                                             pf="$fp/$ansexp"
4053                                         fi
4054                                         if test -f "$pf"; then
4055                                                 type=''
4056                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
4057                                         then
4058                                                 echo "($value is not a plain file, but that's ok.)"
4059                                                 type=''
4060                                         fi
4061                                         if test X"$type" = X; then
4062                                             value="$pf"
4063                                             break
4064                                         fi
4065                                 done
4066                                 ;;
4067                         Directory)
4068                                 for fp in $gfpth; do
4069                                         if test "X$fp" = X.; then
4070                                             dir="$ans"
4071                                             direxp="$ansexp"
4072                                         else    
4073                                             dir="$fp/$ansexp"
4074                                             direxp="$fp/$ansexp"
4075                                         fi
4076                                         if test -d "$direxp"; then
4077                                                 type=''
4078                                                 value="$dir"
4079                                                 break
4080                                         fi
4081                                 done
4082                                 ;;
4083                         Locate)
4084                                 if test -d "$ansexp"; then
4085                                         echo "(Looking for $loc_file in directory $value.)"
4086                                         value="$value/$loc_file"
4087                                         ansexp="$ansexp/$loc_file"
4088                                 fi
4089                                 if test -f "$ansexp"; then
4090                                         type=''
4091                                 fi
4092                                 case "$nopath_ok" in
4093                                 true)   case "$value" in
4094                                         */*) ;;
4095                                         *)      echo "Assuming $value will be in people's path."
4096                                                 type=''
4097                                                 ;;
4098                                         esac
4099                                         ;;
4100                                 esac
4101                                 ;;
4102                         esac
4103
4104                         case "$skip" in
4105                         true) type='';
4106                         esac
4107
4108                         case "$type" in
4109                         '') ;;
4110                         *)
4111                                 if test "$fastread" = yes; then
4112                                         dflt=y
4113                                 else
4114                                         dflt=n
4115                                 fi
4116                                 rp="$what $value doesn't exist.  Use that name anyway?"
4117                                 . UU/myread
4118                                 dflt=''
4119                                 case "$ans" in
4120                                 y*) type='';;
4121                                 *) echo " ";;
4122                                 esac
4123                                 ;;
4124                         esac
4125                         ;;
4126                 esac
4127                 ;;
4128         esac
4129 done
4130 cd UU
4131 ans="$value"
4132 rp="$orig_rp"
4133 dflt="$orig_dflt"
4134 rm -f getfile.ok
4135 test "X$gfpthkeep" != Xy && gfpth=""
4136 EOSC
4137
4138 : determine root of directory hierarchy where package will be installed.
4139 case "$prefix" in
4140 '')
4141         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4142         ;;
4143 *?/)
4144         dflt=`echo "$prefix" | sed 's/.$//'`
4145         ;;
4146 *)
4147         dflt="$prefix"
4148         ;;
4149 esac
4150 $cat <<EOM
4151
4152 By default, $package will be installed in $dflt/bin, manual pages
4153 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4154 installation directories. Typically this is something like /usr/local.
4155 If you wish to have binaries under /usr/bin but other parts of the
4156 installation under /usr/local, that's ok: you will be prompted
4157 separately for each of the installation directories, the prefix being
4158 only used to set the defaults.
4159
4160 EOM
4161 fn=d~
4162 rp='Installation prefix to use?'
4163 . ./getfile
4164 oldprefix=''
4165 case "$prefix" in
4166 '') ;;
4167 *)
4168         case "$ans" in
4169         "$prefix") ;;
4170         *) oldprefix="$prefix";;
4171         esac
4172         ;;
4173 esac
4174 prefix="$ans"
4175 prefixexp="$ansexp"
4176
4177 : allow them to override the AFS root
4178 case "$afsroot" in
4179 '')     afsroot=/afs ;;
4180 *)      afsroot=$afsroot ;;
4181 esac
4182
4183 : is AFS running?
4184 echo " "
4185 case "$afs" in
4186 $define|true)   afs=true ;;
4187 $undef|false)   afs=false ;;
4188 *)      if $test -d $afsroot; then
4189                 afs=true
4190         else
4191                 afs=false
4192         fi
4193         ;;
4194 esac
4195 if $afs; then
4196         echo "AFS may be running... I'll be extra cautious then..." >&4
4197 else
4198         echo "AFS does not seem to be running..." >&4
4199 fi
4200
4201 : determine installation prefix for where package is to be installed.
4202 if $afs; then
4203 $cat <<EOM
4204
4205 Since you are running AFS, I need to distinguish the directory in which
4206 files will reside from the directory in which they are installed (and from
4207 which they are presumably copied to the former directory by occult means).
4208
4209 EOM
4210         case "$installprefix" in
4211         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4212         *) dflt="$installprefix";;
4213         esac
4214 else
4215 $cat <<EOM
4216
4217 In some special cases, particularly when building $package for distribution,
4218 it is convenient to distinguish the directory in which files should be
4219 installed from the directory ($prefix) in which they will
4220 eventually reside.  For most users, these two directories are the same.
4221
4222 EOM
4223         case "$installprefix" in
4224         '') dflt=$prefix ;;
4225         *) dflt=$installprefix;;
4226         esac
4227 fi
4228 fn=d~
4229 rp='What installation prefix should I use for installing files?'
4230 . ./getfile
4231 installprefix="$ans"
4232 installprefixexp="$ansexp"
4233
4234 : Perform the prefixexp/installprefixexp correction if necessary
4235 cat <<EOS >installprefix
4236 $startsh
4237 EOS
4238 cat <<'EOSC' >>installprefix
4239 : Change installation prefix, if necessary.
4240 if $test X"$prefix" != X"$installprefix"; then
4241     eval "install${prefixvar}=\`echo \$${prefixvar}exp | sed \"s#^\$prefixexp#\$installprefixexp#\"\`"
4242 else
4243     eval "install${prefixvar}=\"\$${prefixvar}exp\""
4244 fi
4245 EOSC
4246 chmod +x installprefix
4247 $eunicefix installprefix
4248
4249 : Set variables such as privlib and privlibexp from the output of ./getfile
4250 : performing the prefixexp/installprefixexp correction if necessary.
4251 cat <<EOS >setprefixvar
4252 $startsh
4253 EOS
4254 cat <<'EOSC' >>setprefixvar
4255 eval "${prefixvar}=\"\$ans\""
4256 eval "${prefixvar}exp=\"\$ansexp\""
4257 . ./installprefix
4258 EOSC
4259 chmod +x setprefixvar
4260 $eunicefix setprefixvar
4261
4262 : set up the script used to warn in case of inconsistency
4263 cat <<EOS >whoa
4264 $startsh
4265 EOS
4266 cat <<'EOSC' >>whoa
4267 dflt=y
4268 case "$hint" in
4269     recommended)
4270         case "$hintfile" in
4271         '')     echo "The $hint value for \$$var on this machine was \"$was\"!" >&4
4272                 ;;
4273         *)      echo "Hmm.  Based on the hints in hints/$hintfile.sh, " >&4
4274                 echo "the $hint value for \$$var on this machine was \"$was\"!" >&4
4275                 ;;
4276         esac
4277         ;;
4278     *)  echo " "
4279         echo "*** WHOA THERE!!! ***" >&4
4280         echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
4281         ;;
4282 esac
4283 rp="    Keep the $hint value?"
4284 . ./myread
4285 case "$ans" in
4286 y) td=$was; tu=$was;;
4287 esac
4288 EOSC
4289
4290 : function used to set '$1' to '$val'
4291 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
4292 case "$val$was" in
4293 $define$undef) . ./whoa; eval "$var=\$td";;
4294 $undef$define) . ./whoa; eval "$var=\$tu";;
4295 *) eval "$var=$val";;
4296 esac'
4297
4298 : get the patchlevel
4299 echo " "
4300 echo "Getting the current patchlevel..." >&4
4301 if $test -r $rsrc/patchlevel.h;then
4302         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4303         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4304         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4305         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4306         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4307         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4308         perl_patchlevel=`egrep ',"(MAINT|SMOKE)[0-9][0-9]*"' $rsrc/patchlevel.h|tail -1|sed 's/[^0-9]//g'`
4309 else
4310         revision=0
4311         patchlevel=0
4312         subversion=0
4313         api_revision=0
4314         api_version=0
4315         api_subversion=0
4316         perl_patchlevel=0
4317         $echo "(You do not have patchlevel.h.  Eek.)"
4318 fi
4319 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
4320 version_patchlevel_string="version $patchlevel subversion $subversion"
4321 case "$perl_patchlevel" in
4322 0|'') ;;
4323 *)  perl_patchlevel=`echo $perl_patchlevel | sed 's/.* //'`
4324     version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel"
4325     ;;
4326 esac
4327
4328 $echo "(You have $package $version_patchlevel_string.)"
4329
4330 case "$osname" in
4331 dos|vms)
4332         : XXX Should be a Configure test for double-dots in filenames.
4333         version=`echo $revision $patchlevel $subversion | \
4334                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4335         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4336                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4337         ;;
4338 *)
4339         version=`echo $revision $patchlevel $subversion | \
4340                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4341         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4342                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4343         ;;
4344 esac
4345 : Special case the 5.005_xx maintenance series, which used 5.005
4346 : without any subversion label as a subdirectory in $sitelib
4347 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4348         api_versionstring='5.005'
4349 fi
4350
4351 : Do we want threads support and if so, what type
4352 case "$usethreads" in
4353 $define|true|[yY]*)     dflt='y';;
4354 *)     # Catch case where user specified ithreads or 5005threads but
4355        # forgot -Dusethreads (A.D. 4/2002)
4356        case "$useithreads$use5005threads" in
4357        *$define*)       dflt='y';;
4358        *)               dflt='n';;
4359        esac
4360        ;;
4361 esac
4362 cat <<EOM
4363
4364 Perl can be built to offer a form of threading support on some systems
4365 To do so, Configure can be run with -Dusethreads.
4366
4367 Note that Perl built with threading support runs slightly slower
4368 and uses slightly more memory than plain Perl.
4369
4370 If this doesn't make any sense to you, just accept the default '$dflt'.
4371 EOM
4372 rp='Build a threading Perl?'
4373 . ./myread
4374 case "$ans" in
4375 y|Y)    val="$define" ;;
4376 *)      val="$undef" ;;
4377 esac
4378 set usethreads
4379 eval $setvar
4380
4381 if $test $patchlevel -lt 9; then
4382     case "$usethreads" in
4383     $define)
4384         : Default to ithreads unless overridden on command line or with
4385         : old config.sh
4386         dflt='y'
4387         case "$use5005threads" in
4388                 $define|true|[yY]*)
4389                         echo "5.005 threads are no longer supported"
4390                         exit 1
4391                 ;;
4392         esac
4393         case "$useithreads" in
4394                 $undef|false|[nN]*) dflt='n';;
4395         esac
4396         rp='Use the newer interpreter-based ithreads?'
4397         . ./myread
4398         case "$ans" in
4399         y|Y)    val="$define" ;;
4400         *)      val="$undef" ;;
4401         esac
4402         set useithreads
4403         eval $setvar
4404         : Now set use5005threads to the opposite value.
4405         case "$useithreads" in
4406         $define) val="$undef" ;;
4407         *) val="$define" ;;
4408         esac
4409         set use5005threads
4410         eval $setvar
4411         ;;
4412     *)
4413         useithreads="$undef"
4414         use5005threads="$undef"
4415         ;;
4416     esac
4417
4418     case "$useithreads$use5005threads" in
4419     "$define$define")
4420         $cat >&4 <<EOM
4421
4422 You cannot have both the ithreads and the 5.005 threads enabled
4423 at the same time.  Disabling the 5.005 threads since they are
4424 much less stable than the ithreads.
4425
4426 EOM
4427         use5005threads="$undef"
4428         ;;
4429     esac
4430
4431 else
4432 : perl-5.9.x and later
4433
4434     if test X"$usethreads" = "X$define"; then
4435         case "$use5005threads" in
4436             $define|true|[yY]*)
4437                 $cat >&4 <<EOM
4438
4439 5.005 threads has been removed for 5.10.  Perl will be built using ithreads.
4440
4441 EOM
4442             ;;
4443         esac
4444     fi
4445
4446     use5005threads="$undef"
4447     useithreads="$usethreads"
4448 fi
4449
4450 case "$d_oldpthreads" in
4451 '')     : Configure tests would be welcome here.  For now, assume undef.
4452         val="$undef" ;;
4453 *)      val="$d_oldpthreads" ;;
4454 esac
4455 set d_oldpthreads
4456 eval $setvar
4457
4458
4459 : Look for a hint-file generated 'call-back-unit'.  If the
4460 : user has specified that a threading perl is to be built,
4461 : we may need to set or change some other defaults.
4462 if $test -f usethreads.cbu; then
4463     echo "Your platform has some specific hints regarding threaded builds, using them..."
4464     . ./usethreads.cbu
4465 else
4466     case "$usethreads" in
4467         "$define"|true|[yY]*)
4468                 $cat <<EOM
4469 (Your platform does not have any specific hints for threaded builds.
4470  Assuming POSIX threads, then.)
4471 EOM
4472         ;;
4473     esac
4474 fi
4475
4476 : Check if multiplicity is required
4477 cat <<EOM
4478
4479 Perl can be built so that multiple Perl interpreters can coexist
4480 within the same Perl executable.
4481 EOM
4482
4483 case "$useithreads" in
4484 $define)
4485         cat <<EOM
4486 This multiple interpreter support is required for interpreter-based threads.
4487 EOM
4488         val="$define"
4489         ;;
4490 *)      case "$usemultiplicity" in
4491         $define|true|[yY]*)     dflt='y';;
4492         *) dflt='n';;
4493         esac
4494         echo " "
4495         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
4496         rp='Build Perl for multiplicity?'
4497         . ./myread
4498         case "$ans" in
4499         y|Y)    val="$define" ;;
4500         *)      val="$undef" ;;
4501         esac
4502         ;;
4503 esac
4504 set usemultiplicity
4505 eval $setvar
4506
4507 : Check if morebits is requested
4508 case "$usemorebits" in
4509 "$define"|true|[yY]*)
4510         use64bitint="$define"
4511         uselongdouble="$define"
4512         usemorebits="$define"
4513         ;;
4514 *)      usemorebits="$undef"
4515         ;;
4516 esac
4517
4518 : Determine the C compiler to be used
4519 echo " "
4520 case "$cc" in
4521 '') dflt=cc;;
4522 *) dflt="$cc";;
4523 esac
4524 rp="Use which C compiler?"
4525 . ./myread
4526 cc="$ans"
4527
4528 : See whether they have no cc but they do have gcc
4529 . ./trygcc
4530 if $test -f cc.cbu; then
4531     . ./cc.cbu
4532 fi
4533 . ./checkcc
4534
4535 : make some quick guesses about what we are up against
4536 echo " "
4537 $echo $n "Hmm...  $c"
4538 echo exit 1 >bsd
4539 echo exit 1 >usg
4540 echo exit 1 >v7
4541 echo exit 1 >osf1
4542 echo exit 1 >eunice
4543 echo exit 1 >xenix
4544 echo exit 1 >venix
4545 echo exit 1 >os2
4546 d_bsd="$undef"
4547 $cat $sysroot/usr/include/signal.h $sysroot/usr/include/sys/signal.h >foo 2>/dev/null
4548 if test -f /osf_boot || $contains 'OSF/1' $sysroot/usr/include/ctype.h >/dev/null 2>&1
4549 then
4550         echo "Looks kind of like an OSF/1 system, but we'll see..."
4551         echo exit 0 >osf1
4552 elif test `echo abc | $tr a-z A-Z` = Abc ; then
4553         xxx=`./loc addbib blurfl $pth`
4554         if $test -f $xxx; then
4555         echo "Looks kind of like a USG system with BSD features, but we'll see..."
4556                 echo exit 0 >bsd
4557                 echo exit 0 >usg
4558         else
4559                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
4560                         echo "Looks kind of like an extended USG system, but we'll see..."
4561                 else
4562                         echo "Looks kind of like a USG system, but we'll see..."
4563                 fi
4564                 echo exit 0 >usg
4565         fi
4566 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
4567         echo "Looks kind of like a BSD system, but we'll see..."
4568         d_bsd="$define"
4569         echo exit 0 >bsd
4570 else
4571         echo "Looks kind of like a Version 7 system, but we'll see..."
4572         echo exit 0 >v7
4573 fi
4574 case "$eunicefix" in
4575 *unixtovms*)
4576         $cat <<'EOI'
4577 There is, however, a strange, musty smell in the air that reminds me of
4578 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
4579 EOI
4580         echo exit 0 >eunice
4581         d_eunice="$define"
4582 : it so happens the Eunice I know will not run shell scripts in Unix format
4583         ;;
4584 *)
4585         echo " "
4586         echo "Congratulations.  You aren't running Eunice."
4587         d_eunice="$undef"
4588         ;;
4589 esac
4590 : Detect OS2.  The p_ variable is set above in the Head.U unit.
4591 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
4592 : semicolon as a patch separator
4593 case "$p_" in
4594 :) ;;
4595 *)
4596         $cat <<'EOI'
4597 I have the feeling something is not exactly right, however...don't tell me...
4598 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
4599 (Or you may be running DOS with DJGPP.)
4600 EOI
4601         echo exit 0 >os2
4602         ;;
4603 esac
4604 if test -f /xenix; then
4605         echo "Actually, this looks more like a XENIX system..."
4606         echo exit 0 >xenix
4607         d_xenix="$define"
4608 else
4609         echo " "
4610         echo "It's not Xenix..."
4611         d_xenix="$undef"
4612 fi
4613 chmod +x xenix
4614 $eunicefix xenix
4615 if test -f /venix; then
4616         echo "Actually, this looks more like a VENIX system..."
4617         echo exit 0 >venix
4618 else
4619         echo " "
4620         if ./xenix; then
4621                 : null
4622         else
4623                 echo "Nor is it Venix..."
4624         fi
4625 fi
4626 chmod +x bsd usg v7 osf1 eunice xenix venix os2
4627 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
4628 $rm -f foo
4629
4630 : Check if we are using GNU gcc and what its version is
4631 echo " "
4632 echo "Checking for GNU cc in disguise and/or its version number..." >&4
4633 $cat >try.c <<EOM
4634 #include <stdio.h>
4635 int main() {
4636 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
4637 #ifdef __VERSION__
4638         printf("%s\n", __VERSION__);
4639 #else
4640         printf("%s\n", "1");
4641 #endif
4642 #endif
4643         return(0);
4644 }
4645 EOM
4646 if $cc -o try $ccflags $ldflags try.c; then
4647         gccversion=`$run ./try`
4648         case "$gccversion" in
4649         '') echo "You are not using GNU cc." ;;
4650         *)  echo "You are using GNU cc $gccversion."
4651             ccname=gcc
4652             ;;
4653         esac
4654 else
4655         echo " "
4656         echo "*** WHOA THERE!!! ***" >&4
4657         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
4658         case "$knowitall" in
4659         '')
4660         echo "    You'd better start hunting for one and let me know about it." >&4
4661                 exit 1
4662                 ;;
4663         esac
4664 fi
4665 $rm -f try try.*
4666 case "$gccversion" in
4667 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
4668 esac
4669 case "$gccversion" in
4670 '') gccosandvers='' ;;
4671 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
4672    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
4673    gccshortvers=''
4674    case "$gccosandvers" in
4675    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
4676    $osname$osvers) ;; # looking good
4677    $osname*) cat <<EOM >&4
4678
4679 *** WHOA THERE!!! ***
4680
4681     Your gcc has not been compiled for the exact release of
4682     your operating system ($gccosandvers versus $osname$osvers).
4683
4684     In general it is a good idea to keep gcc synchronized with
4685     the operating system because otherwise serious problems
4686     may ensue when trying to compile software, like Perl.
4687
4688     I'm trying to be optimistic here, though, and will continue.
4689     If later during the configuration and build icky compilation
4690     problems appear (headerfile conflicts being the most common
4691     manifestation), I suggest reinstalling the gcc to match
4692     your operating system release.
4693
4694 EOM
4695       ;;
4696    *) gccosandvers='' ;; # failed to parse, better be silent
4697    esac
4698    ;;
4699 esac
4700 case "$ccname" in
4701 '') ccname="$cc" ;;
4702 esac
4703
4704 # gcc 3.* complain about adding -Idirectories that they already know about,
4705 # so we will take those off from locincpth.
4706 case "$gccversion" in
4707 3*)
4708     echo "main(){}">try.c
4709     for incdir in $locincpth; do
4710        warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \
4711              grep '^c[cp]p*[01]: warning: changing search order '`
4712        if test "X$warn" != X; then
4713            locincpth=`echo " $locincpth " | sed "s! $incdir ! !"`
4714        fi
4715     done
4716     $rm -f try try.*
4717 esac
4718
4719 # gcc 4.9 by default does some optimizations that break perl.
4720 # see ticket 121505.
4721 #
4722 # The -fwrapv disables those optimizations (and probably others,) so
4723 # for gcc 4.9 (and later, since the optimizations probably won't go
4724 # away), add -fwrapv unless the user requests -fno-wrapv, which
4725 # disables -fwrapv, or if the user requests -fsanitize=undefined,
4726 # which turns the overflows -fwrapv ignores into runtime errors.
4727 case "$gccversion" in
4728 4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*)
4729     case "$ccflags" in
4730     *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;;
4731     *) ccflags="$ccflags -fwrapv" ;;
4732     esac
4733 esac
4734
4735 : What should the include directory be ?
4736 : Use sysroot if set, so findhdr looks in the right place.
4737 echo " "
4738 $echo $n "Hmm...  $c"
4739 dflt="$sysroot/usr/include"
4740 incpath=''
4741 mips_type=''
4742 if $test -f /bin/mips && /bin/mips; then
4743         echo "Looks like a MIPS system..."
4744         $cat >usr.c <<'EOCP'
4745 #ifdef SYSTYPE_BSD43
4746 /bsd43
4747 #endif
4748 EOCP
4749         if $cc $cppflags -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
4750                 dflt='/bsd43/usr/include'
4751                 incpath='/bsd43'
4752                 mips_type='BSD 4.3'
4753         else
4754                 mips_type='System V'
4755         fi
4756         $rm -f usr.c usr.out
4757         echo "and you're compiling with the $mips_type compiler and libraries."
4758         xxx_prompt=y
4759         echo "exit 0" >mips
4760 else
4761         echo "Doesn't look like a MIPS system."
4762         xxx_prompt=n
4763         echo "exit 1" >mips
4764 fi
4765 chmod +x mips
4766 $eunicefix mips
4767 case "$usrinc" in
4768 '') ;;
4769 *) dflt="$usrinc";;
4770 esac
4771 case "$xxx_prompt" in
4772 y)      fn=d/
4773         echo " "
4774         rp='Where are the include files you want to use?'
4775         . ./getfile
4776         usrinc="$ans"
4777         ;;
4778 *)      usrinc="$dflt"
4779         ;;
4780 esac
4781
4782 : see how we invoke the C preprocessor
4783 echo " "
4784 echo "Now, how can we feed standard input to your C preprocessor..." >&4
4785 cat <<'EOT' >testcpp.c
4786 #define ABC abc
4787 #define XYZ xyz
4788 ABC.XYZ
4789 EOT
4790 cd ..
4791 if test ! -f cppstdin; then
4792         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
4793                 # AIX cc -E doesn't show the absolute headerfile
4794                 # locations but we'll cheat by using the -M flag.
4795                 echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
4796         else
4797                 echo 'cat >.$$.c; '"$cc $cppflags"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
4798         fi
4799 else
4800         echo "Keeping your $hint cppstdin wrapper."
4801 fi
4802 chmod 755 cppstdin
4803 wrapper=`pwd`/cppstdin
4804 ok='false'
4805 cd UU
4806
4807 if $test "X$cppstdin" != "X" && \
4808         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
4809         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4810 then
4811         echo "You used to use $cppstdin $cppminus so we'll use that again."
4812         case "$cpprun" in
4813         '') echo "But let's see if we can live without a wrapper..." ;;
4814         *)
4815                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
4816                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4817                 then
4818                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
4819                         ok='true'
4820                 else
4821                         echo "(However, $cpprun $cpplast does not work, let's see...)"
4822                 fi
4823                 ;;
4824         esac
4825 else
4826         case "$cppstdin" in
4827         '') ;;
4828         *)
4829                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
4830                 ;;
4831         esac
4832 fi
4833
4834 if $ok; then
4835         : nothing
4836 elif echo 'Maybe "'"$cc"' -E" will work...'; \
4837         $cc -E <testcpp.c >testcpp.out 2>&1; \
4838         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4839         echo "Yup, it does."
4840         x_cpp="$cc $cppflags -E"
4841         x_minus='';
4842 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4843         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4844         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4845         echo "Yup, it does."
4846         x_cpp="$cc $cppflags -E"
4847         x_minus='-';
4848 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4849         $cc -P <testcpp.c >testcpp.out 2>&1; \
4850         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4851         echo "Yipee, that works!"
4852         x_cpp="$cc $cppflags -P"
4853         x_minus='';
4854 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4855         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4856         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4857         echo "At long last!"
4858         x_cpp="$cc $cppflags -P"
4859         x_minus='-';
4860 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4861         $cpp <testcpp.c >testcpp.out 2>&1; \
4862         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4863         echo "It works!"
4864         x_cpp="$cpp $cppflags"
4865         x_minus='';
4866 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4867         $cpp - <testcpp.c >testcpp.out 2>&1; \
4868         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4869         echo "Hooray, it works!  I was beginning to wonder."
4870         x_cpp="$cpp $cppflags"
4871         x_minus='-';
4872 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4873         $wrapper <testcpp.c >testcpp.out 2>&1; \
4874         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4875         x_cpp="$wrapper"
4876         x_minus=''
4877         echo "Eureka!"
4878 else
4879         dflt=''
4880         rp="No dice.  I can't find a C preprocessor.  Name one:"
4881         . ./myread
4882         x_cpp="$ans"
4883         x_minus=''
4884         $x_cpp <testcpp.c >testcpp.out 2>&1
4885         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4886                 echo "OK, that will do." >&4
4887         else
4888 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4889                 exit 1
4890         fi
4891 fi
4892
4893 case "$ok" in
4894 false)
4895         cppstdin="$x_cpp"
4896         cppminus="$x_minus"
4897         cpprun="$x_cpp"
4898         cpplast="$x_minus"
4899         set X $x_cpp
4900         shift
4901         case "$1" in
4902         "$cpp")
4903                 echo "Perhaps can we force $cc -E using a wrapper..."
4904                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4905                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4906                 then
4907                         echo "Yup, we can."
4908                         cppstdin="$wrapper"
4909                         cppminus='';
4910                 else
4911                         echo "Nope, we'll have to live without it..."
4912                 fi
4913                 ;;
4914         esac
4915         case "$cpprun" in
4916         "$wrapper")
4917                 cpprun=''
4918                 cpplast=''
4919                 ;;
4920         esac
4921         ;;
4922 esac
4923
4924 case "$cppstdin" in
4925 "$wrapper"|'cppstdin') ;;
4926 *) $rm -f $wrapper;;
4927 esac
4928 $rm -f testcpp.c testcpp.out
4929
4930 : Adjust cppfilter for path component separator
4931 case "$osname" in
4932 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4933 os2) cppfilter="sed -e 's|\\\\\\\\|/|g' |" ;; # path component separator is \
4934 *)   cppfilter='' ;;
4935 esac
4936
4937 : Use gcc to determine libpth and incpth
4938 # If using gcc or clang, we can get better values for libpth, incpth
4939 # and usrinc directly from the compiler.
4940 # Note that ccname for clang is also gcc.
4941 case "$ccname" in
4942     gcc)
4943         $echo 'extern int foo;' > try.c
4944         set X `$cppstdin -v try.c 2>&1 | $awk '/^#include </,/^End of search /'|$cppfilter $grep '/include'`
4945         shift
4946         if $test $# -gt 0; then
4947             incpth="$incpth $*"
4948             incpth="`$echo $incpth|$sed 's/^ //'`"
4949             for i in $*; do
4950                 j="`$echo $i|$sed 's,/include$,/lib,'`"
4951                 if $test -d $j; then
4952                     libpth="$libpth $j"
4953                 fi
4954             done
4955             libpth="`$echo $libpth|$sed 's/^ //'`"
4956             for xxx in $libpth $loclibpth $plibpth $glibpth; do
4957                 if $test -d $xxx; then
4958                     case " $libpth " in
4959                     *" $xxx "*) ;;
4960                     *) libpth="$libpth $xxx";;
4961                     esac
4962                 fi
4963             done
4964         fi
4965         $rm -f try.c
4966         case "$usrinc" in
4967         '') for i in $incpth; do
4968                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
4969                     usrinc="$i"
4970                     break
4971                 fi
4972             done
4973             ;;
4974         esac
4975
4976         case "$usecrosscompile" in
4977         $define|true|[yY]*)
4978             case "$incpth" in
4979                 '') echo "Incpth not defined." >&4; croak=y ;;
4980                 *)  echo "Using incpth '$incpth'." >&4 ;;
4981             esac
4982             case "$libpth" in
4983                 '') echo "Libpth not defined." >&4; croak=y ;;
4984                 *)  echo "Using libpth '$libpth'." >&4 ;;
4985             esac
4986             case "$usrinc" in
4987                 '') echo "Usrinc not defined." >&4; croak=y ;;
4988                 *)  echo "Using usrinc $usrinc." >&4 ;;
4989             esac
4990             case "$croak" in
4991                 y)
4992                 if test "X$sysroot" = X; then
4993                     echo "Cannot continue, aborting." >&4; exit 1
4994                 else
4995                     echo "Cross-compiling using sysroot $sysroot, failing to guess inc/lib paths is not fatal" >&4
4996                 fi
4997                 ;;
4998             esac
4999             ;;
5000         esac
5001     ;;
5002 esac
5003
5004 : Default value for incpth is just usrinc
5005 case "$incpth" in
5006 '') incpth="$usrinc";;
5007 esac
5008
5009 : Set private lib path
5010 case "$plibpth" in
5011 '') if ./mips; then
5012         plibpth="$incpath/usr/lib $sysroot/usr/local/lib $sysroot/usr/ccs/lib"
5013     fi;;
5014 esac
5015 case "$libpth" in
5016 ' ') dlist='';;
5017 '') dlist="$loclibpth $plibpth $glibpth";;
5018 *) dlist="$libpth";;
5019 esac
5020
5021 : Now check and see which directories actually exist, avoiding duplicates
5022 for xxx in $dlist
5023 do
5024     if $test -d $xxx; then
5025                 case " $libpth " in
5026                 *" $xxx "*) ;;
5027                 *) libpth="$libpth $xxx";;
5028                 esac
5029     fi
5030 done
5031 $cat <<'EOM'
5032
5033 Some systems have incompatible or broken versions of libraries.  Among
5034 the directories listed in the question below, please remove any you
5035 know not to be holding relevant libraries, and add any that are needed.
5036 Say "none" for none.
5037
5038 EOM
5039
5040 if test "X$sysroot" != X; then
5041     $cat <<EOM
5042 You have set sysroot to $sysroot, please supply the directories excluding sysroot
5043
5044 EOM
5045 fi
5046
5047 case "$libpth" in
5048 '') dflt='none';;
5049 *)
5050         set X $libpth
5051         shift
5052         dflt=${1+"$@"}
5053         ;;
5054 esac
5055 rp="Directories to use for library searches?"
5056 . ./myread
5057 case "$ans" in
5058 none) libpth=' ';;
5059 *) libpth="$ans";;
5060 esac
5061
5062 : compute shared library extension
5063 case "$so" in
5064 '')
5065         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
5066                 dflt='sl'
5067         else
5068                 dflt='so'
5069         fi
5070         ;;
5071 *) dflt="$so";;
5072 esac
5073 $cat <<EOM
5074
5075 On some systems, shared libraries may be available.  Answer 'none' if
5076 you want to suppress searching of shared libraries for the remainder
5077 of this configuration.
5078
5079 EOM
5080 rp='What is the file extension used for shared libraries?'
5081 . ./myread
5082 so="$ans"
5083
5084 : Does target system insist that shared library basenames are unique
5085 $cat << EOM
5086
5087 Some dynamic loaders assume that the *basename* of shared library filenames
5088 are globally unique.  We'll default this to undef as we assume your system
5089 is not this weird. Set to defined if you're on one of them.
5090
5091 EOM
5092
5093 dflt='n'
5094 rp='Make shared library basenames unique?'
5095 . ./myread
5096 case "$ans" in
5097 y|Y) val="$define" ;;
5098 *)   val="$undef"  ;;
5099 esac
5100 set d_libname_unique
5101 eval $setvar
5102
5103 : Define several unixisms.
5104 : Hints files or command line option can be used to override them.
5105 : The convoluted testing is in case hints files set either the old
5106 : or the new name.
5107 case "$_exe" in
5108 '')     case "$exe_ext" in
5109         '')     ;;
5110         *)      _exe="$exe_ext" ;;
5111         esac
5112         ;;
5113 esac
5114 case "$_a" in
5115 '')     case "$lib_ext" in
5116     '') _a='.a';;
5117         *)      _a="$lib_ext" ;;
5118         esac
5119         ;;
5120 esac
5121 case "$_o" in
5122 '') case "$obj_ext" in
5123         '')     _o='.o';;
5124         *)      _o="$obj_ext";;
5125         esac
5126         ;;
5127 esac
5128 case "$p_" in
5129 '') case "$path_sep" in
5130         '')     p_=':';;
5131         *)      p_="$path_sep";;
5132         esac
5133         ;;
5134 esac
5135 exe_ext=$_exe
5136 lib_ext=$_a
5137 obj_ext=$_o
5138 path_sep=$p_
5139
5140 rm_try="$rm -f try try$_exe a.out .out try.[cho] try.$_o core core.try* try.core*"
5141
5142 : Which makefile gets called first.  This is used by make depend.
5143 case "$firstmakefile" in
5144 '') firstmakefile='makefile';;
5145 esac
5146
5147 : Check is we will use socks
5148 case "$usesocks" in
5149 $define|true|[yY]*)     dflt='y';;
5150 *) dflt='n';;
5151 esac
5152 cat <<EOM
5153
5154 Perl can be built to use the SOCKS proxy protocol library.  To do so,
5155 Configure must be run with -Dusesocks.  If you use SOCKS you also need
5156 to use the PerlIO abstraction layer, this will be implicitly selected.
5157
5158 If this doesn't make any sense to you, just accept the default '$dflt'.
5159 EOM
5160 rp='Build Perl for SOCKS?'
5161 . ./myread
5162 case "$ans" in
5163 y|Y)    val="$define" ;;
5164 *)      val="$undef" ;;
5165 esac
5166 set usesocks
5167 eval $setvar
5168
5169 : Check for uselongdouble support
5170 case "$ccflags" in
5171 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5172 esac
5173
5174 case "$uselongdouble" in
5175 $define|true|[yY]*)     dflt='y';;
5176 *) dflt='n';;
5177 esac
5178 cat <<EOM
5179
5180 Perl can be built to take advantage of long doubles which
5181 (if available) may give more accuracy and range for floating point numbers.
5182
5183 If this doesn't make any sense to you, just accept the default '$dflt'.
5184 EOM
5185 rp='Try to use long doubles if available?'
5186 . ./myread
5187 case "$ans" in
5188 y|Y)    val="$define"   ;;
5189 *)      val="$undef"    ;;
5190 esac
5191 set uselongdouble
5192 eval $setvar
5193
5194 case "$uselongdouble" in
5195 true|[yY]*) uselongdouble="$define" ;;
5196 esac
5197
5198 : Look for a hint-file generated 'call-back-unit'.  If the
5199 : user has specified that long doubles should be used,
5200 : we may need to set or change some other defaults.
5201 if $test -f uselongdouble.cbu; then
5202     echo "Your platform has some specific hints regarding long doubles, using them..."
5203     . ./uselongdouble.cbu
5204 else
5205     case "$uselongdouble" in
5206         $define)
5207                 $cat <<EOM
5208 (Your platform does not have any specific hints for long doubles.)
5209 EOM
5210         ;;
5211     esac
5212 fi
5213
5214 : Check if quadmath is requested
5215 case "$usequadmath" in
5216 "$define"|true|[yY]*) usequadmath="$define" ;;
5217 *)                    usequadmath="$undef"  ;;
5218 esac
5219
5220 : Looking for optional libraries
5221 echo " "
5222 echo "Checking for optional libraries..." >&4
5223 case "$libs" in
5224 ' '|'') dflt='';;
5225 *) dflt="$libs";;
5226 esac
5227 case "$libswanted" in
5228 '') libswanted='c_s';;
5229 esac
5230 case "$usesocks" in
5231 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
5232 esac
5233 case "$usecbacktrace" in
5234 "$define") libswanted="$libswanted bfd" ;;
5235 esac
5236 case "$usequadmath" in
5237 "$define") libswanted="$libswanted quadmath" ;;
5238 esac
5239 libsfound=''
5240 libsfiles=''
5241 libsdirs=''
5242 libspath=''
5243 for thisdir in $libpth $xlibpth; do
5244   test -d $thisdir && libspath="$libspath $thisdir"
5245 done
5246 for thislib in $libswanted; do
5247         for thisdir in $libspath; do
5248             xxx=''
5249             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
5250                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|sed -n '$p'`
5251                 $test -f "$xxx" && eval $libscheck
5252                 $test -f "$xxx" && libstyle=shared
5253                 xxx=`ls $thisdir/lib$thislib.[0-9].$so 2>/dev/null|sed -n '$p'`
5254                 $test -f "$xxx" && eval $libscheck
5255                 $test -f "$xxx" && libstyle=shared
5256             fi
5257             if test ! -f "$xxx"; then
5258                 xxx=$thisdir/lib$thislib.$so
5259                 $test -f "$xxx" && eval $libscheck
5260                 $test -f "$xxx" && libstyle=shared
5261             fi
5262             if test ! -f "$xxx"; then
5263                 xxx=$thisdir/lib$thislib$_a
5264                 $test -f "$xxx" && eval $libscheck
5265                 $test -f "$xxx" && libstyle=static
5266             fi
5267             if test ! -f "$xxx"; then
5268                 xxx=$thisdir/$thislib$_a
5269                 $test -f "$xxx" && eval $libscheck
5270                 $test -f "$xxx" && libstyle=static
5271             fi
5272             if test ! -f "$xxx"; then
5273                 xxx=$thisdir/lib${thislib}_s$_a
5274                 $test -f "$xxx" && eval $libscheck
5275                 $test -f "$xxx" && libstyle=static
5276                 $test -f "$xxx" && thislib=${thislib}_s
5277             fi
5278             if test ! -f "$xxx"; then
5279                 xxx=$thisdir/Slib$thislib$_a
5280                 $test -f "$xxx" && eval $libscheck
5281                 $test -f "$xxx" && libstyle=static
5282             fi
5283             if $test -f "$xxx"; then
5284                 case "$libstyle" in
5285                 shared) echo "Found -l$thislib (shared)." ;;
5286                 static) echo "Found -l$thislib." ;;
5287                 *)      echo "Found -l$thislib ($libstyle)." ;;
5288                 esac
5289                 case " $dflt " in
5290                 *"-l$thislib "*);;
5291                 *) dflt="$dflt -l$thislib"
5292                    libsfound="$libsfound $xxx"
5293                    yyy=`basename $xxx`
5294                    libsfiles="$libsfiles $yyy"
5295                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
5296                    case " $libsdirs " in
5297                    *" $yyy "*) ;;
5298                    *) libsdirs="$libsdirs $yyy" ;;
5299                    esac
5300                    ;;
5301                 esac
5302                 break
5303             fi
5304         done
5305         if $test ! -f "$xxx"; then
5306             echo "No -l$thislib."
5307         fi
5308 done
5309 set X $dflt
5310 shift
5311 dflt="$*"
5312 case "$libs" in
5313 '') dflt="$dflt";;
5314 *) dflt="$libs";;
5315 esac
5316 case "$dflt" in
5317 ' '|'') dflt='none';;
5318 esac
5319
5320 $cat <<EOM
5321
5322 In order to compile $package on your machine, a number of libraries
5323 are usually needed.  Include any other special libraries here as well.
5324 Say "none" for none.  The default list is almost always right.
5325 EOM
5326
5327 echo " "
5328 rp="What libraries to use?"
5329 . ./myread
5330 case "$ans" in
5331 none) libs=' ';;
5332 *) libs="$ans";;
5333 esac
5334
5335 : determine optimization, if desired, or use for debug flag also
5336 case "$optimize" in
5337 ' '|$undef) dflt='none';;
5338 '') dflt='-O';;
5339 *) dflt="$optimize";;
5340 esac
5341 $cat <<EOH
5342
5343 By default, $package compiles with the -O flag to use the optimizer.
5344 Alternately, you might want to use the symbolic debugger, which uses
5345 the -g flag (on traditional Unix systems).  Either flag can be
5346 specified here.  To use neither flag, specify the word "none".
5347
5348 EOH
5349 rp="What optimizer/debugger flag should be used?"
5350 . ./myread
5351 optimize="$ans"
5352 case "$optimize" in
5353 'none') optimize=" ";;
5354 esac
5355
5356 : Check what DEBUGGING is required from the command line
5357 : -DEBUGGING      or -DDEBUGGING or
5358 : -DEBUGGING=both                       = -g + -DDEBUGGING
5359 : -DEBUGGING=-g   or -Doptimize=-g      = -g
5360 : -DEBUGGING=none or -UDEBUGGING        =
5361 : -DEBUGGING=old  or -DEBUGGING=default = ? $optimize
5362 case "$EBUGGING" in
5363 '')     ;;
5364 *)      DEBUGGING=$EBUGGING ;;
5365 esac
5366
5367 case "$DEBUGGING" in
5368 -g|both|$define)
5369     case "$optimize" in
5370         *-g*) ;;
5371         *)    optimize="$optimize -g" ;;
5372     esac ;;
5373 none|$undef)
5374     case "$optimize" in
5375         *-g*)   set `echo "X $optimize " | sed 's/ -g / /'`
5376                 shift
5377                 optimize="$*"
5378                 ;;
5379     esac ;;
5380 esac
5381
5382 dflt=''
5383 case "$DEBUGGING" in
5384 both|$define) dflt='-DDEBUGGING'
5385 esac
5386
5387 : argument order is deliberate, as the flag will start with - which set could
5388 : think is an option
5389 checkccflag='check=$1; flag=$2; callback=$3;
5390 echo " ";
5391 echo "Checking if your compiler accepts $flag" 2>&1;
5392 [ "X$sysroot" != "X" ] && echo "For sysroot = $sysroot";
5393 echo "int main(void) { return 0; }" > gcctest.c;
5394 if $cc $_sysroot -O2 $flag -o gcctest gcctest.c 2>gcctest.out && $run ./gcctest; then
5395     echo "Yes, it does." 2>&1;
5396     if $test -s gcctest.out ; then
5397         echo "But your platform does not like it:";
5398         cat gcctest.out;
5399     else
5400         case "$ccflags" in
5401         *$check*)
5402             echo "Leaving current flags $ccflags alone." 2>&1
5403             ;;
5404         *) dflt="$dflt $flag";
5405             eval $callback
5406             ;;
5407         esac
5408     fi
5409 else
5410     echo "Nope, it does not, but that is ok." 2>&1;
5411 fi
5412 '
5413
5414 : We will not override a previous value, but we might want to
5415 : augment a hint file
5416 case "$hint" in
5417 default|recommended)
5418         case "$gccversion" in
5419         1*) dflt="$dflt -fpcc-struct-return" ;;
5420         esac
5421         case "$optimize:$DEBUGGING" in
5422         *-g*:old) dflt="$dflt -DDEBUGGING";;
5423         esac
5424         case "$gccversion" in
5425         2*) if $test -d /etc/conf/kconfig.d &&
5426                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
5427                 then
5428                         # Interactive Systems (ISC) POSIX mode.
5429                         dflt="$dflt -posix"
5430                 fi
5431                 ;;
5432         esac
5433         case "$gccversion" in
5434         1*) ;;
5435         2.[0-8]*) ;;
5436         ?*)     set strict-aliasing -fno-strict-aliasing
5437                 eval $checkccflag
5438                 ;;
5439         esac
5440         # For gcc, adding -pipe speeds up compilations for some, but apparently
5441         # some assemblers can't read from stdin.  (It also slows down compilations
5442         # in other cases, but those are apparently rarer these days.)  AD 5/2004.
5443         case "$gccversion" in
5444         ?*)     set pipe -pipe
5445                 eval $checkccflag
5446                 ;;
5447         esac
5448
5449         # on x86_64 (at least) we require an extra library (libssp) in the
5450         # link command line. This library is not named, so I infer that it is
5451         # an implementation detail that may change. Hence the safest approach
5452         # is to add the flag to the flags passed to the compiler at link time,
5453         # as that way the compiler can do the right implementation dependant
5454         # thing. (NWC)
5455         case "$gccversion" in
5456         ?*)     set stack-protector-strong -fstack-protector-strong
5457                 eval $checkccflag
5458                 case "$dflt" in
5459                 *-fstack-protector-strong*) ;; # It got added.
5460                 *) # Try the plain/older -fstack-protector.
5461                    set stack-protector -fstack-protector
5462                    eval $checkccflag
5463                    ;;
5464                 esac
5465                 ;;
5466         esac
5467         ;;
5468 esac
5469
5470 case "$mips_type" in
5471 *BSD*|'') inclwanted="$locincpth $usrinc";;
5472 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
5473 esac
5474 for thisincl in $inclwanted; do
5475         if $test -d $thisincl; then
5476                 if $test x$thisincl != x$usrinc; then
5477                         case "$dflt" in
5478                         *" -I$thisincl "*);;
5479                         *) dflt="$dflt -I$thisincl ";;
5480                         esac
5481                 fi
5482         fi
5483 done
5484
5485 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
5486         xxx=true;
5487 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
5488         xxx=true;
5489 else
5490         xxx=false;
5491 fi;
5492 if $xxx; then
5493         case "$dflt" in
5494         *$2*);;
5495         *) dflt="$dflt -D$2";;
5496         esac;
5497 fi'
5498
5499 set signal.h LANGUAGE_C; eval $inctest
5500
5501 case "$usesocks" in
5502 $define)
5503         ccflags="$ccflags -DSOCKS"
5504         ;;
5505 esac
5506
5507 case "$hint" in
5508 default|recommended) dflt="$ccflags $dflt" ;;
5509 *) dflt="$ccflags";;
5510 esac
5511
5512 case "$dflt" in
5513 ''|' ') dflt=none;;
5514 esac
5515
5516 $cat <<EOH
5517
5518 Your C compiler may want other flags.  For this question you should include
5519 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
5520 but you should NOT include libraries or ld flags like -lwhatever.  If you
5521 want $package to honor its debug switch, you should include -DDEBUGGING here.
5522 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
5523
5524 To use no flags, specify the word "none".
5525
5526 EOH
5527 set X $dflt
5528 shift
5529 dflt=${1+"$@"}
5530 rp="Any additional cc flags?"
5531 . ./myread
5532 case "$ans" in
5533 none) ccflags='';;
5534 *) ccflags="$ans";;
5535 esac
5536
5537 : the following weeds options from ccflags that are of no interest to cpp
5538 case "$cppflags" in
5539 '') cppflags="$ccflags" ;;
5540 *)  cppflags="$cppflags $ccflags" ;;
5541 esac
5542 case "$gccversion" in
5543 1*) cppflags="$cppflags -D__GNUC__"
5544 esac
5545 case "$mips_type" in
5546 '');;
5547 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
5548 esac
5549 case "$cppflags" in
5550 '');;
5551 *)
5552         echo " "
5553         echo "Let me guess what the preprocessor flags are..." >&4
5554         set X $cppflags
5555         shift
5556         cppflags=''
5557         $cat >cpp.c <<'EOM'
5558 #define BLURFL foo
5559
5560 BLURFL xx LFRULB
5561 EOM
5562         previous=''
5563         for flag in $*
5564         do
5565                 case "$flag" in
5566                 -*) ftry="$flag";;
5567                 *) ftry="$previous $flag";;
5568                 esac
5569                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
5570                         >cpp1.out 2>/dev/null && \
5571                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
5572                         >cpp2.out 2>/dev/null && \
5573                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
5574                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
5575                 then
5576                         cppflags="$cppflags $ftry"
5577                         previous=''
5578                 else
5579                         previous="$flag"
5580                 fi
5581         done
5582         set X $cppflags
5583         shift
5584         cppflags=${1+"$@"}
5585         case "$cppflags" in
5586         *-*)  echo "They appear to be: $cppflags";;
5587         esac
5588         $rm -f cpp.c cpp?.out
5589         ;;
5590 esac
5591
5592 : flags used in final linking phase
5593 case "$ldflags" in
5594 '') if ./venix; then
5595                 dflt='-i -z'
5596         else
5597                 dflt=''
5598         fi
5599         case "$ccflags" in
5600         *-posix*) dflt="$dflt -posix" ;;
5601         esac
5602         ;;
5603 *) dflt="$ldflags";;
5604 esac
5605 # See note above about -fstack-protector
5606 case "$ccflags" in
5607 *-fstack-protector-strong*)
5608         case "$dflt" in
5609         *-fstack-protector-strong*) ;; # Don't add it again
5610         *) dflt="$dflt -fstack-protector-strong" ;;
5611         esac
5612         ;;
5613 *-fstack-protector*)
5614         case "$dflt" in
5615         *-fstack-protector*) ;; # Don't add it again
5616         *) dflt="$dflt -fstack-protector" ;;
5617         esac
5618         ;;
5619 esac
5620
5621 : Try to guess additional flags to pick up local libraries.
5622 for thislibdir in $libpth; do
5623         case " $loclibpth " in
5624         *" $thislibdir "*)
5625                 case "$dflt " in
5626                 *"-L$thislibdir "*) ;;
5627                 *)  dflt="$dflt -L$thislibdir" ;;
5628                 esac
5629                 ;;
5630         esac
5631 done
5632
5633 case "$dflt" in
5634 '') dflt='none' ;;
5635 esac
5636
5637 $cat <<EOH
5638
5639 Your C linker may need flags.  For this question you should
5640 include -L/whatever and any other flags used by the C linker, but you
5641 should NOT include libraries like -lwhatever.
5642
5643 Make sure you include the appropriate -L/path flags if your C linker
5644 does not normally search all of the directories you specified above,
5645 namely
5646         $libpth
5647 To use no flags, specify the word "none".
5648
5649 EOH
5650
5651 rp="Any additional ld flags (NOT including libraries)?"
5652 . ./myread
5653 case "$ans" in
5654 none) ldflags='';;
5655 *) ldflags="$ans";;
5656 esac
5657 rmlist="$rmlist pdp11"
5658
5659 : coherency check
5660 echo " "
5661 echo "Checking your choice of C compiler and flags for coherency..." >&4
5662 $cat > try.c <<'EOF'
5663 #include <stdio.h>
5664 int main() { printf("Ok\n"); return(0); }
5665 EOF
5666 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
5667 shift
5668 $cat >try.msg <<'EOM'
5669 I've tried to compile and run the following simple program:
5670
5671 EOM
5672 $cat try.c >> try.msg
5673
5674 $cat >> try.msg <<EOM
5675
5676 I used the command:
5677
5678         $*
5679         $run ./try
5680
5681 and I got the following output:
5682
5683 EOM
5684 dflt=y
5685 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
5686         if $sh -c "$run ./try " >>try.msg 2>&1; then
5687                 xxx=`$run ./try`
5688                 case "$xxx" in
5689                 "Ok") dflt=n ;;
5690                 *)    echo 'The program compiled OK, but produced no output.' >> try.msg ;;
5691                 esac
5692         else
5693                 echo "The program compiled OK, but exited with status $?." >>try.msg
5694                 rp="You have a problem.  Shall I abort Configure"
5695                 dflt=y
5696         fi
5697 else
5698         echo "I can't compile the test program." >>try.msg
5699         rp="You have a BIG problem.  Shall I abort Configure"
5700         dflt=y
5701 fi
5702 case "$dflt" in
5703 y)
5704         $cat try.msg >&4
5705         case "$knowitall" in
5706         '')
5707                 echo "(The supplied flags or libraries might be incorrect.)"
5708                 ;;
5709         *) dflt=n;;
5710         esac
5711         echo " "
5712         . ./myread
5713         case "$ans" in
5714         n*|N*) ;;
5715         *)      echo "Ok.  Stopping Configure." >&4
5716                 exit 1
5717                 ;;
5718         esac
5719         ;;
5720 n) echo "OK, that should do.";;
5721 esac
5722 $rm_try gcctest gcctest.out
5723
5724 : define a shorthand compile call
5725 compile='
5726 mc_file=$1;
5727 shift;
5728 case "$usedevel" in $define|true|[yY]*) if $test ! -f "${mc_file}.c"; then
5729 echo "Internal Configure script bug - compiler test file ${mc_file}.c is missing. Please report this to perlbug@perl.org" >&4;
5730 exit 1;
5731 fi;
5732 esac;
5733 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
5734 : define a shorthand compile call for compilations that should be ok.
5735 compile_ok='
5736 mc_file=$1;
5737 shift;
5738 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
5739
5740 : determine filename position in cpp output
5741 echo " "
5742 echo "Computing filename position in cpp output for #include directives..." >&4
5743 case "$osname" in
5744 vos) testaccess=-e ;;
5745 *)   testaccess=-r ;;
5746 esac
5747 echo '#include <stdio.h>' > foo.c
5748 $cat >fieldn <<EOF
5749 $startsh
5750 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5751 $grep '^[       ]*#.*stdio\.h' | \
5752 while read cline; do
5753         pos=1
5754         set \$cline
5755         while $test \$# -gt 0; do
5756                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
5757                         echo "\$pos"
5758                         exit 0
5759                 fi
5760                 shift
5761                 pos=\`expr \$pos + 1\`
5762         done
5763 done
5764 EOF
5765 chmod +x fieldn
5766 fieldn=`./fieldn`
5767 $rm -f foo.c fieldn
5768 case $fieldn in
5769 '') pos='???';;
5770 1) pos=first;;
5771 2) pos=second;;
5772 3) pos=third;;
5773 *) pos="${fieldn}th";;
5774 esac
5775 echo "Your cpp writes the filename in the $pos field of the line."
5776
5777 : locate header file
5778 $cat >findhdr <<EOF
5779 $startsh
5780 wanted=\$1
5781 name=''
5782 for usrincdir in $incpth
5783 do
5784         if test -f \$usrincdir/\$wanted; then
5785                 echo "\$usrincdir/\$wanted"
5786                 exit 0
5787         fi
5788 done
5789 awkprg='{ print \$$fieldn }'
5790 echo "#include <\$wanted>" > foo\$\$.c
5791 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5792 $cppfilter $grep "^[    ]*#.*\$wanted" | \
5793 while read cline; do
5794         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5795         case "\$name" in
5796         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5797         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5798         *) exit 2;;
5799         esac;
5800 done;
5801 #
5802 # status = 0: grep returned 0 lines, case statement not executed
5803 # status = 1: headerfile found
5804 # status = 2: while loop executed, no headerfile found
5805 #
5806 status=\$?
5807 $rm -f foo\$\$.c;
5808 if test \$status -eq 1; then
5809         exit 0;
5810 fi
5811 exit 1
5812 EOF
5813 chmod +x findhdr
5814
5815 : define an alternate in-header-list? function
5816 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5817 cont=true; xxf="echo \"<\$1> found.\" >&4";
5818 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5819 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5820 esac;
5821 case $# in 4) instead=instead;; *) instead="at last";; esac;
5822 while $test "$cont"; do
5823         xxx=`./findhdr $1`
5824         var=$2; eval "was=\$$2";
5825         if $test "$xxx" && $test -r "$xxx";
5826         then eval $xxf;
5827         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5828                 cont="";
5829         else eval $xxnf;
5830         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5831         set $yyy; shift; shift; yyy=$@;
5832         case $# in 0) cont="";;
5833         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5834                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5835         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5836                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5837         esac;
5838 done;
5839 while $test "$yyy";
5840 do set $yyy; var=$2; eval "was=\$$2";
5841         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5842         set $yyy; shift; shift; yyy=$@;
5843 done'
5844
5845 : see if stdlib is available
5846 set stdlib.h i_stdlib
5847 eval $inhdr
5848
5849 : check for lengths of integral types
5850 echo " "
5851 case "$intsize" in
5852 '')
5853         echo "Checking to see how big your integers are..." >&4
5854         $cat >try.c <<EOCP
5855 #include <stdio.h>
5856 #$i_stdlib I_STDLIB
5857 #ifdef I_STDLIB
5858 #include <stdlib.h>
5859 #endif
5860 int main()
5861 {
5862         printf("intsize=%d;\n", (int)sizeof(int));
5863         printf("longsize=%d;\n", (int)sizeof(long));
5864         printf("shortsize=%d;\n", (int)sizeof(short));
5865         exit(0);
5866 }
5867 EOCP
5868         set try
5869         if eval $compile_ok && $run ./try > /dev/null; then
5870                 eval `$run ./try`
5871                 echo "Your integers are $intsize bytes long."
5872                 echo "Your long integers are $longsize bytes long."
5873                 echo "Your short integers are $shortsize bytes long."
5874         else
5875                 $cat >&4 <<EOM
5876 !
5877 Help! I can't compile and run the intsize test program: please enlighten me!
5878 (This is probably a misconfiguration in your system or libraries, and
5879 you really ought to fix it.  Still, I'll try anyway.)
5880 !
5881 EOM
5882                 dflt=4
5883                 rp="What is the size of an integer (in bytes)?"
5884                 . ./myread
5885                 intsize="$ans"
5886                 dflt=$intsize
5887                 rp="What is the size of a long integer (in bytes)?"
5888                 . ./myread
5889                 longsize="$ans"
5890                 dflt=2
5891                 rp="What is the size of a short integer (in bytes)?"
5892                 . ./myread
5893                 shortsize="$ans"
5894         fi
5895         ;;
5896 esac
5897 $rm_try
5898
5899 : check for long long
5900 echo " "
5901 echo "Checking to see if you have long long..." >&4
5902 echo 'int main() { long long x = 7; return 0; }' > try.c
5903 set try
5904 if eval $compile; then
5905         val="$define"
5906         echo "You have long long."
5907 else
5908         val="$undef"
5909         echo "You do not have long long."
5910 fi
5911 $rm_try
5912 set d_longlong
5913 eval $setvar
5914
5915 : check for length of long long
5916 case "${d_longlong}${longlongsize}" in
5917 $define)
5918         echo " "
5919         echo "Checking to see how big your long longs are..." >&4
5920         $cat >try.c <<'EOCP'
5921 #include <stdio.h>
5922 int main()
5923 {
5924     printf("%d\n", (int)sizeof(long long));
5925     return(0);
5926 }
5927 EOCP
5928         set try
5929         if eval $compile_ok; then
5930                 longlongsize=`$run ./try`
5931                 echo "Your long longs are $longlongsize bytes long."
5932         else
5933                 dflt='8'
5934                 echo " "
5935                 echo "(I can't seem to compile the test program.  Guessing...)"
5936                 rp="What is the size of a long long (in bytes)?"
5937                 . ./myread
5938                 longlongsize="$ans"
5939         fi
5940         if $test "X$longsize" = "X$longlongsize"; then
5941                 echo "(That isn't any different from an ordinary long.)"
5942         fi
5943         ;;
5944 esac
5945 $rm_try
5946
5947 : see if inttypes.h is available
5948 : we want a real compile instead of Inhdr because some systems
5949 : have an inttypes.h which includes non-existent headers
5950 echo " "
5951 $cat >try.c <<EOCP
5952 #include <inttypes.h>
5953 int main() {
5954         static int32_t foo32 = 0x12345678;
5955 }
5956 EOCP
5957 set try
5958 if eval $compile; then
5959         echo "<inttypes.h> found." >&4
5960         val="$define"
5961 else
5962         echo "<inttypes.h> NOT found." >&4
5963         val="$undef"
5964 fi
5965 $rm_try
5966 set i_inttypes
5967 eval $setvar
5968
5969 : check for int64_t
5970 echo " "
5971 echo "Checking to see if you have int64_t..." >&4
5972 $cat >try.c <<EOCP
5973 #include <sys/types.h>
5974 #$i_inttypes I_INTTYPES
5975 #ifdef I_INTTYPES
5976 #include <inttypes.h>
5977 #endif
5978 int main() { int64_t x = 7; }
5979 EOCP
5980 set try
5981 if eval $compile; then
5982         val="$define"
5983         echo "You have int64_t."
5984 else
5985         val="$undef"
5986         echo "You do not have int64_t."
5987 fi
5988 $rm_try
5989 set d_int64_t
5990 eval $setvar
5991
5992 : Check if 64bit ints have a quad type
5993 echo " "
5994 echo "Checking which 64-bit integer type we could use..." >&4
5995
5996 case "$intsize" in
5997 8) val=int
5998    set quadtype
5999    eval $setvar
6000    val='"unsigned int"'
6001    set uquadtype
6002    eval $setvar
6003    quadkind=1
6004    ;;
6005 *) case "$longsize" in
6006    8) val=long
6007       set quadtype
6008       eval $setvar
6009       val='"unsigned long"'
6010       set uquadtype
6011       eval $setvar
6012       quadkind=2
6013       ;;
6014    *) case "$d_longlong:$longlongsize" in
6015       define:8)
6016         val='"long long"'
6017         set quadtype
6018         eval $setvar
6019         val='"unsigned long long"'
6020         set uquadtype
6021         eval $setvar
6022         quadkind=3
6023         ;;
6024       *) case "$d_int64_t" in
6025          define)
6026            val=int64_t
6027            set quadtype
6028            eval $setvar
6029            val=uint64_t
6030            set uquadtype
6031            eval $setvar
6032            quadkind=4
6033            ;;
6034          esac
6035          ;;
6036       esac
6037       ;;
6038    esac
6039    ;;
6040 esac
6041
6042 case "$quadtype" in
6043 '')     echo "Alas, no 64-bit integer types in sight." >&4
6044         d_quad="$undef"
6045         ;;
6046 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
6047         d_quad="$define"
6048         ;;
6049 esac
6050
6051 : Do we want 64bit support
6052 case "$uselonglong" in
6053 "$define"|true|[yY]*)
6054         cat <<EOM >&4
6055
6056 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
6057 EOM
6058         use64bitint="$define"
6059         ;;
6060 esac
6061 case "$use64bits" in
6062 "$define"|true|[yY]*)
6063         cat <<EOM >&4
6064
6065 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
6066 EOM
6067         use64bitint="$define"
6068         ;;
6069 esac
6070 case "$use64bitints" in
6071 "$define"|true|[yY]*)
6072         cat <<EOM >&4
6073
6074 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
6075 EOM
6076         use64bitint="$define"
6077         ;;
6078 esac
6079 case "$use64bitsint" in
6080 "$define"|true|[yY]*)
6081         cat <<EOM >&4
6082
6083 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
6084 EOM
6085         use64bitint="$define"
6086         ;;
6087 esac
6088 case "$uselonglongs" in
6089 "$define"|true|[yY]*)
6090         cat <<EOM >&4
6091
6092 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
6093 EOM
6094         use64bitint="$define"
6095         ;;
6096 esac
6097 case "$use64bitsall" in
6098 "$define"|true|[yY]*)
6099         cat <<EOM >&4
6100
6101 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
6102 EOM
6103         use64bitall="$define"
6104         ;;
6105 esac
6106
6107 case "$ccflags" in
6108 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
6109 esac
6110 case "$use64bitall" in
6111 "$define"|true|[yY]*) use64bitint="$define" ;;
6112 esac
6113
6114 case "$longsize" in
6115 8) cat <<EOM
6116
6117 You have natively 64-bit long integers.
6118 EOM
6119    val="$define"
6120    ;;
6121 *) case "$use64bitint" in
6122    "$define"|true|[yY]*) dflt='y';;
6123    *) dflt='n';;
6124    esac
6125    case "$d_quad" in
6126    "$define") ;;
6127    *) dflt='n' ;;
6128    esac
6129    cat <<EOM
6130
6131 Perl can be built to take advantage of 64-bit integer types
6132 on some systems.  To do so, Configure can be run with -Duse64bitint.
6133 Choosing this option will most probably introduce binary incompatibilities.
6134
6135 If this doesn't make any sense to you, just accept the default '$dflt'.
6136 (The default has been chosen based on your configuration.)
6137 EOM
6138    rp='Try to use 64-bit integers, if available?'
6139    . ./myread
6140    case "$ans" in
6141    [yY]*) val="$define" ;;
6142    *)     val="$undef"  ;;
6143    esac
6144    ;;
6145 esac
6146 set use64bitint
6147 eval $setvar
6148
6149 case "$use64bitall" in
6150 "$define"|true|[yY]*) dflt='y' ;;
6151 *) case "$longsize" in
6152    8) dflt='y' ;;
6153    *) dflt='n' ;;
6154    esac
6155    ;;
6156 esac
6157 cat <<EOM
6158
6159 You may also choose to try maximal 64-bitness.  It means using as much
6160 64-bitness as possible on the platform.  This in turn means even more
6161 binary incompatibilities.  On the other hand, your platform may not
6162 have any more 64-bitness available than what you already have chosen.
6163
6164 If this doesn't make any sense to you, just accept the default '$dflt'.
6165 (The default has been chosen based on your configuration.)
6166 EOM
6167 rp='Try to use maximal 64-bit support, if available?'
6168 . ./myread
6169 case "$ans" in
6170 [yY]*) val="$define" ;;
6171 *)     val="$undef"  ;;
6172 esac
6173 set use64bitall
6174 eval $setvar
6175 case "$use64bitall" in
6176 "$define")
6177         case "$use64bitint" in
6178         "$undef")
6179                 cat <<EOM
6180
6181 Since you have chosen a maximally 64-bit build, I'm also turning on
6182 the use of 64-bit integers.
6183 EOM
6184                 use64bitint="$define" ;;
6185         esac
6186         ;;
6187 esac
6188
6189 : Look for a hint-file generated 'call-back-unit'.  If the
6190 : user has specified that a 64-bit perl is to be built,
6191 : we may need to set or change some other defaults.
6192 if $test -f use64bitint.cbu; then
6193         echo "Your platform has some specific hints regarding 64-bit integers, using them..."
6194         . ./use64bitint.cbu
6195 fi
6196 case "$use64bitint" in
6197 "$define"|true|[yY]*)
6198         : This test was common to all the OpenBSD forks, and seems harmless for
6199         : other platforms:
6200         echo " "
6201         echo "Checking if your C library has broken 64-bit functions..." >&4
6202         cat >try.c <<EOCP
6203 #include <stdio.h>
6204 typedef $uquadtype myULL;
6205 int main (void)
6206 {
6207     struct {
6208         double d;
6209         myULL  u;
6210     } *p, test[] = {
6211         {4294967303.15, 4294967303ULL},
6212         {4294967294.2,  4294967294ULL},
6213         {4294967295.7,  4294967295ULL},
6214         {0.0, 0ULL}
6215     };
6216     for (p = test; p->u; p++) {
6217         myULL x = (myULL)p->d;
6218         if (x != p->u) {
6219             printf("buggy\n");
6220             return 0;
6221         }
6222     }
6223     printf("ok\n");
6224     return 0;
6225 }
6226 EOCP
6227         set try
6228         if eval $compile_ok; then
6229             libcquad=`$run ./try`
6230             echo "Your C library's 64-bit functions are $libcquad."
6231         else
6232             echo "(I can't seem to compile the test program.)"
6233             echo "Assuming that your C library's 64-bit functions are ok."
6234             libcquad="ok"
6235         fi
6236         $rm_try
6237
6238         case "$libcquad" in
6239             buggy*)
6240                 cat >&4 <<EOM
6241
6242 *** You have a C library with broken 64-bit functions.
6243 *** 64-bit support does not work reliably in this configuration.
6244 *** Please rerun Configure without -Duse64bitint and/or -Dusemorebits.
6245 *** Cannot continue, aborting.
6246
6247 EOM
6248                 exit 1
6249                 ;;
6250         esac
6251         case "$longsize" in
6252         4) case "$archname64" in
6253            '') archname64=64int ;;
6254            esac
6255            ;;
6256         esac
6257         ;;
6258 esac
6259
6260 : Look for a hint-file generated 'call-back-unit'.  If the
6261 : user has specified that a maximally 64-bit perl is to be built,
6262 : we may need to set or change some other defaults.
6263 if $test -f use64bitall.cbu; then
6264         echo "Your platform has some specific hints regarding 64-bit builds, using them..."
6265         . ./use64bitall.cbu
6266 fi
6267 case "$use64bitall" in
6268 "$define"|true|[yY]*)
6269         case "$longsize" in
6270         4) case "$archname64" in
6271            ''|64int) archname64=64all ;;
6272            esac
6273            ;;
6274         esac
6275         ;;
6276 esac
6277
6278 case "$d_quad:$use64bitint" in
6279 $undef:$define)
6280         cat >&4 <<EOF
6281
6282 *** You have chosen to use 64-bit integers,
6283 *** but none can be found.
6284 *** Please rerun Configure without -Duse64bitint and/or -Dusemorebits.
6285 *** Cannot continue, aborting.
6286
6287 EOF
6288         exit 1
6289         ;;
6290 esac
6291
6292 : Check if we are using the GNU C library
6293 echo " "
6294 echo "Checking for GNU C Library..." >&4
6295 cat >try.c <<'EOCP'
6296 /* Find out version of GNU C library.  __GLIBC__ and __GLIBC_MINOR__
6297    alone are insufficient to distinguish different versions, such as
6298    2.0.6 and 2.0.7.  The function gnu_get_libc_version() appeared in
6299    libc version 2.1.0.      A. Dougherty,  June 3, 2002.
6300 */
6301 #include <stdio.h>
6302 int main(void)
6303 {
6304 #ifdef __GLIBC__
6305 #   ifdef __GLIBC_MINOR__
6306 #       if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 && !defined(__cplusplus)
6307 #           include <gnu/libc-version.h>
6308             printf("%s\n",  gnu_get_libc_version());
6309 #       else
6310             printf("%d.%d\n",  __GLIBC__, __GLIBC_MINOR__);
6311 #       endif
6312 #   else
6313         printf("%d\n",  __GLIBC__);
6314 #   endif
6315     return 0;
6316 #else
6317     return 1;
6318 #endif
6319 }
6320 EOCP
6321 set try
6322 if eval $compile_ok && $run ./try > glibc.ver; then
6323         val="$define"
6324         gnulibc_version=`$cat glibc.ver`
6325         echo "You are using the GNU C Library version $gnulibc_version"
6326 else
6327         val="$undef"
6328         gnulibc_version=''
6329         echo "You are not using the GNU C Library"
6330 fi
6331 $rm_try glibc.ver
6332 set d_gnulibc
6333 eval $setvar
6334
6335 : see if nm is to be used to determine whether a symbol is defined or not
6336 case "$usenm" in
6337 '')
6338         dflt=''
6339         case "$d_gnulibc" in
6340         "$define")
6341                 echo " "
6342                 echo "nm probably won't work on the GNU C Library." >&4
6343                 dflt=n
6344                 ;;
6345         esac
6346         case "$dflt" in
6347         '')
6348                 if $test "$osname" = aix -a "X$PASE" != "Xdefine" -a ! -f /lib/syscalls.exp; then
6349                         echo " "
6350                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
6351                         echo "'nm' won't be sufficient on this system." >&4
6352                         dflt=n
6353                 fi
6354                 ;;
6355         esac
6356         case "$dflt" in
6357         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
6358                 if $test $dflt -gt 20; then
6359                         dflt=y
6360                 else
6361                         dflt=n
6362                 fi
6363                 ;;
6364         esac
6365         ;;
6366 *)
6367         case "$usenm" in
6368         true|$define) dflt=y;;
6369         *) dflt=n;;
6370         esac
6371         ;;
6372 esac
6373 $cat <<EOM
6374
6375 I can use $nm to extract the symbols from your C libraries. This
6376 is a time consuming task which may generate huge output on the disk (up
6377 to 3 megabytes) but that should make the symbols extraction faster. The
6378 alternative is to skip the 'nm' extraction part and to compile a small
6379 test program instead to determine whether each symbol is present. If
6380 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
6381 this may be the best solution.
6382
6383 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
6384
6385 EOM
6386 rp="Shall I use $nm to extract C symbols from the libraries?"
6387 . ./myread
6388 case "$ans" in
6389 [Nn]*) usenm=false;;
6390 *) usenm=true;;
6391 esac
6392
6393 runnm=$usenm
6394 case "$reuseval" in
6395 true) runnm=false;;
6396 esac
6397
6398 : nm options which may be necessary
6399 case "$nm_opt" in
6400 '') if $test -f /mach_boot; then
6401                 nm_opt=''       # Mach
6402         elif $test -d /usr/ccs/lib; then
6403                 nm_opt='-p'     # Solaris (and SunOS?)
6404         elif $test -f /dgux; then
6405                 nm_opt='-p'     # DG-UX
6406         elif $test -f /lib64/rld; then
6407                 nm_opt='-p'     # 64-bit Irix
6408         else
6409                 nm_opt=''
6410         fi;;
6411 esac
6412
6413 : nm options which may be necessary for shared libraries but illegal
6414 : for archive libraries.  Thank you, Linux.
6415 case "$nm_so_opt" in
6416 '')     case "$myuname" in
6417         *linux*|gnu*)
6418                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
6419                         nm_so_opt='--dynamic'
6420                 fi
6421                 ;;
6422         esac
6423         ;;
6424 esac
6425
6426 : Figure out where the libc is located
6427 case "$runnm" in
6428 true)
6429 : get list of predefined functions in a handy place
6430 echo " "
6431 case "$libc" in
6432 '') libc=unknown
6433         case "$libs" in
6434         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
6435         esac
6436         ;;
6437 esac
6438 case "$libs" in
6439 '') ;;
6440 *)  for thislib in $libs; do
6441         case "$thislib" in
6442         -lc|-lc_s)
6443                 : Handle C library specially below.
6444                 ;;
6445         -l*)
6446                 thislib=`echo $thislib | $sed -e 's/^-l//'`
6447                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
6448                         :
6449                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
6450                         :
6451                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
6452                         :
6453                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
6454                         :
6455                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
6456                         :
6457                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
6458                         :
6459                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
6460                         :
6461                 else
6462                         try=''
6463                 fi
6464                 libnames="$libnames $try"
6465                 ;;
6466         *) libnames="$libnames $thislib" ;;
6467         esac
6468         done
6469         ;;
6470 esac
6471 xxx=normal
6472 case "$libc" in
6473 unknown)
6474         set /lib/libc.$so
6475         for xxx in $libpth; do
6476                 $test -r $1 || set $xxx/libc.$so
6477                 : The messy sed command sorts on library version numbers.
6478                 $test -r $1 || \
6479                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
6480                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
6481                                 h
6482                                 s/[0-9][0-9]*/0000&/g
6483                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
6484                                 G
6485                                 s/\n/ /' | \
6486                          $sort | $sed -e 's/^.* //'`
6487                 eval set \$$#
6488         done
6489         $test -r $1 || set $sysroot/usr/ccs/lib/libc.$so
6490         $test -r $1 || set $sysroot/lib/libsys_s$_a
6491         ;;
6492 *)
6493         set blurfl
6494         ;;
6495 esac
6496 if $test -r "$1"; then
6497         echo "Your (shared) C library seems to be in $1."
6498         libc="$1"
6499 elif $test -r /lib/libc && $test -r /lib/clib; then
6500         echo "Your C library seems to be in both /lib/clib and /lib/libc."
6501         xxx=apollo
6502         libc='/lib/clib /lib/libc'
6503         if $test -r /lib/syslib; then
6504                 echo "(Your math library is in /lib/syslib.)"
6505                 libc="$libc /lib/syslib"
6506         fi
6507 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
6508         echo "Your C library seems to be in $libc, as you said before."
6509 elif $test -r $incpath/usr/lib/libc$_a; then
6510         libc=$incpath/usr/lib/libc$_a;
6511         echo "Your C library seems to be in $libc.  That's fine."
6512 elif $test -r /lib/libc$_a; then
6513         libc=/lib/libc$_a;
6514         echo "Your C library seems to be in $libc.  You're normal."
6515 else
6516         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
6517                 :
6518         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
6519                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
6520         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
6521                 :
6522         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
6523                 :
6524         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
6525                 :
6526         else
6527                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
6528         fi
6529         if $test -r "$tans"; then
6530                 echo "Your C library seems to be in $tans, of all places."
6531                 libc=$tans
6532         else
6533                 libc='blurfl'
6534         fi
6535 fi
6536 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
6537         dflt="$libc"
6538         cat <<EOM
6539
6540 If the guess above is wrong (which it might be if you're using a strange
6541 compiler, or your machine supports multiple models), you can override it here.
6542
6543 EOM
6544 else
6545         dflt=''
6546         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
6547         cat >&4 <<EOM
6548 I can't seem to find your C library.  I've looked in the following places:
6549
6550 EOM
6551         $sed 's/^/      /' libpath
6552         cat <<EOM
6553
6554 None of these seems to contain your C library. I need to get its name...
6555
6556 EOM
6557 fi
6558 fn=f
6559 rp='Where is your C library?'
6560 . ./getfile
6561 libc="$ans"
6562
6563 echo " "
6564 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
6565 set X `cat libnames`
6566 shift
6567 xxx=files
6568 case $# in 1) xxx=file; esac
6569 echo "Extracting names from the following $xxx for later perusal:" >&4
6570 echo " "
6571 $sed 's/^/      /' libnames >&4
6572 echo " "
6573 $echo $n "This may take a while...$c" >&4
6574
6575 for file in $*; do
6576         case $file in
6577         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
6578         *) $nm $nm_opt $file 2>/dev/null;;
6579         esac
6580 done >libc.tmp
6581
6582 $echo $n ".$c"
6583 $grep fprintf libc.tmp > libc.ptf
6584 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
6585 xrun='eval "<libc.tmp $com >libc.list"; echo "done." >&4'
6586 xxx='[ADTSIWi]'
6587 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *//p'";\
6588         eval $xscan;\
6589         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6590                 eval $xrun
6591 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
6592         eval $xscan;\
6593         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6594                 eval $xrun
6595 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
6596         eval $xscan;\
6597         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6598                 eval $xrun
6599 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
6600         eval $xscan;\
6601         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6602                 eval $xrun
6603 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
6604         eval $xscan;\
6605         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6606                 eval $xrun
6607 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
6608         eval $xscan;\
6609         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6610                 eval $xrun
6611 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
6612                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
6613         eval $xscan;\
6614         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6615                 eval $xrun
6616 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
6617         eval $xscan;\
6618         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6619                 eval $xrun
6620 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
6621         eval $xscan;\
6622         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6623                 eval $xrun
6624 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
6625         eval $xscan;\
6626         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6627                 eval $xrun
6628 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
6629         eval $xscan;\
6630         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6631                 eval $xrun
6632 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
6633         eval $xscan;\
6634         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6635                 eval $xrun
6636 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
6637         eval $xscan;\
6638         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6639                 eval $xrun
6640 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
6641         eval $xscan;\
6642         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6643                 eval $xrun
6644 else
6645         $nm -p $* 2>/dev/null >libc.tmp
6646         $grep fprintf libc.tmp > libc.ptf
6647         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
6648                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
6649         then
6650                 nm_opt='-p'
6651                 eval $xrun
6652         else
6653                 echo " "
6654                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
6655                 com=''
6656                 if $ar t $libc > libc.tmp && \
6657                         $contains '^fprintf$' libc.tmp >/dev/null 2>&1
6658                 then
6659                         for thisname in $libnames $libc; do
6660                                 $ar t $thisname >>libc.tmp
6661                         done
6662                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
6663                         echo "Ok." >&4
6664                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
6665                         for thisname in $libnames $libc; do
6666                                 $ar tv $thisname >>libc.tmp
6667                                 emximp -o tmp.imp $thisname \
6668                                     2>/dev/null && \
6669                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
6670                                     < tmp.imp >>libc.tmp
6671                                 $rm -f tmp.imp
6672                         done
6673                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
6674                         echo "Ok." >&4
6675                 else
6676                         echo "$ar didn't seem to work right." >&4
6677                         echo "Maybe this is a Cray...trying bld instead..." >&4
6678                         if  bld t $libc | \
6679                                 $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list &&
6680                                 $test -s libc.list
6681                         then
6682                                 for thisname in $libnames; do
6683                                         bld t $libnames | \
6684                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
6685                                         $ar t $thisname >>libc.tmp
6686                                 done
6687                                 echo "Ok." >&4
6688                         else
6689                                 echo "That didn't work either.  Giving up." >&4
6690                                 exit 1
6691                         fi
6692                 fi
6693         fi
6694 fi
6695 nm_extract="$com"
6696 case "$PASE" in
6697 define)
6698     echo " "
6699     echo "Since you are compiling for PASE, extracting more symbols from libc.a ...">&4
6700     dump -Tv /lib/libc.a | awk '$7 == "/unix" {print $5 " " $8}' | grep "^SV" | awk '{print $2}' >> libc.list
6701     ;;
6702 *)  if $test -f /lib/syscalls.exp; then
6703         echo " "
6704         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
6705         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' \
6706                 /lib/syscalls.exp >>libc.list
6707     fi
6708     ;;
6709 esac
6710 ;;
6711 esac
6712 $rm -f libnames libpath
6713
6714 : Check if we are using C++
6715 echo " "
6716 echo "Checking for C++..." >&4
6717 $cat >try.c <<'EOCP'
6718 #include <stdio.h>
6719 int main(void)
6720 {
6721 #ifdef __cplusplus
6722     return 0;
6723 #else
6724     return 1;
6725 #endif
6726 }
6727 EOCP
6728 set try
6729 if eval $compile_ok && $run ./try; then
6730         val="$define"
6731         echo "You are using a C++ compiler."
6732 else
6733         val="$undef"
6734         echo "You are not using a C++ compiler."
6735 fi
6736 $rm_try cplusplus$$
6737 set d_cplusplus
6738 eval $setvar
6739
6740 : is a C symbol defined?
6741 csym='tlook=$1;
6742 case "$3" in
6743 -v) tf=libc.tmp; tdc="";;
6744 -a) tf=libc.tmp; tdc="[]";;
6745 *) tlook="^$1\$"; tf=libc.list; tdc="()";;
6746 esac;
6747 case "$d_cplusplus" in
6748     $define)    extern_C="extern \"C\"" ;;
6749     *)          extern_C="extern"       ;;
6750 esac;
6751 tx=yes;
6752 case "$reuseval-$4" in
6753 true-) ;;
6754 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
6755 esac;
6756 case "$tx" in
6757 yes)
6758         tval=false;
6759         if $test "$runnm" = true; then
6760                 if $contains $tlook $tf >/dev/null 2>&1; then
6761                         tval=true;
6762                 elif $test "$mistrustnm" = compile -o "$mistrustnm" = run; then
6763                         echo "$extern_C void *$1$tdc; void *(*(p()))$tdc { return &$1; } int main() { if(p() && p() != (void *)main) return(0); else return(1); }"> try.c;
6764                         $cc -o try $optimize $ccflags $ldflags try.c >/dev/null 2>&1 $libs && tval=true;
6765                         $test "$mistrustnm" = run -a -x try && { $run ./try$_exe >/dev/null 2>&1 || tval=false; };
6766                         $rm_try;
6767                 fi;
6768         else
6769                 echo "$extern_C void *$1$tdc; void *(*(p()))$tdc { return &$1; } int main() { if(p() && p() != (void *)main) return(0); else return(1); }"> try.c;
6770                 $cc -o try $optimize $ccflags $ldflags try.c $libs >/dev/null 2>&1 && tval=true;
6771                 $rm_try;
6772         fi;
6773         ;;
6774 *)
6775         case "$tval" in
6776         $define) tval=true;;
6777         *) tval=false;;
6778         esac;
6779         ;;
6780 esac;
6781 eval "$2=$tval"'
6782
6783 : define an is-in-libc? function
6784 inlibc='echo " "; td=$define; tu=$undef;
6785 sym=$1; var=$2; eval "was=\$$2";
6786 tx=yes;
6787 case "$reuseval$was" in
6788 true) ;;
6789 true*) tx=no;;
6790 esac;
6791 case "$tx" in
6792 yes)
6793         set $sym tres -f;
6794         eval $csym;
6795         case "$tres" in
6796         true)
6797                 echo "$sym() found." >&4;
6798                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6799         *)
6800                 echo "$sym() NOT found." >&4;
6801                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6802         esac;;
6803 *)
6804         case "$was" in
6805         $define) echo "$sym() found." >&4;;
6806         *) echo "$sym() NOT found." >&4;;
6807         esac;;
6808 esac'
6809
6810 : check for length of double
6811 echo " "
6812 case "$doublesize" in
6813 '')
6814         echo "Checking to see how big your double precision numbers are..." >&4
6815         $cat >try.c <<EOCP
6816 #include <stdio.h>
6817 #$i_stdlib I_STDLIB
6818 #ifdef I_STDLIB
6819 #include <stdlib.h>
6820 #endif
6821 int main()
6822 {
6823     printf("%d\n", (int)sizeof(double));
6824     exit(0);
6825 }
6826 EOCP
6827         set try
6828         if eval $compile_ok; then
6829                 doublesize=`$run ./try`
6830                 echo "Your double is $doublesize bytes long."
6831         else
6832                 dflt='8'
6833                 echo "(I can't seem to compile the test program.  Guessing...)"
6834                 rp="What is the size of a double precision number (in bytes)?"
6835                 . ./myread
6836                 doublesize="$ans"
6837         fi
6838         ;;
6839 esac
6840 $rm_try
6841
6842 : see if this is a float.h system
6843 set float.h i_float
6844 eval $inhdr
6845
6846 : check for long doubles
6847 echo " "
6848 echo "Checking to see if you have long double..." >&4
6849 echo 'int main() { long double x = 7.0; }' > try.c
6850 set try
6851 if eval $compile; then
6852         val="$define"
6853         echo "You have long double."
6854 else
6855         val="$undef"
6856         echo "You do not have long double."
6857 fi
6858 $rm_try
6859 set d_longdbl
6860 eval $setvar
6861
6862 : see if ldexpl exists
6863 set ldexpl d_ldexpl
6864 eval $inlibc
6865
6866 : check for length of long double
6867 case "${d_longdbl}${longdblsize}" in
6868 $define)
6869         echo " "
6870         echo "Checking to see how big your long doubles are..." >&4
6871         $cat >try.c <<'EOCP'
6872 #include <stdio.h>
6873 int main()
6874 {
6875         printf("%d\n", sizeof(long double));
6876 }
6877 EOCP
6878         set try
6879         set try
6880         if eval $compile; then
6881                 longdblsize=`$run ./try`
6882                 echo "Your long doubles are $longdblsize bytes long."
6883         else
6884                 dflt='8'
6885                 echo " "
6886                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
6887                 rp="What is the size of a long double (in bytes)?"
6888                 . ./myread
6889                 longdblsize="$ans"
6890         fi
6891         if $test "X$doublesize" = "X$longdblsize"; then
6892                 echo "That isn't any different from an ordinary double."
6893                 echo "I'll keep your setting anyway, but you may see some"
6894                 echo "harmless compilation warnings."
6895         fi
6896         ;;
6897 esac
6898 $rm_try
6899
6900 $echo "Checking the kind of long doubles you have..." >&4
6901 case "$d_longdbl" in
6902 define)
6903 $cat <<EOP >try.c
6904 #$i_float I_FLOAT
6905 #$i_stdlib I_STDLIB
6906 #define LONGDBLSIZE $longdblsize
6907 #define DOUBLESIZE $doublesize
6908 #ifdef I_FLOAT
6909 #include <float.h>
6910 #endif
6911 #ifdef I_STDLIB
6912 #include <stdlib.h>
6913 #endif
6914 #include <stdio.h>
6915 static const long double d = -0.1L;
6916 int main() {
6917   unsigned const char* b = (unsigned const char*)(&d);
6918 #if DOUBLESIZE == LONGDBLSIZE
6919   printf("0\n"); /* if it floats like double */
6920   exit(0);
6921 #endif
6922 #if (LDBL_MANT_DIG == 113 || FLT128_MANT_DIG == 113) && LONGDBLSIZE == 16
6923   if (b[0] == 0x9A && b[1] == 0x99 && b[15] == 0xBF) {
6924     /* IEEE 754 128-bit little-endian */
6925     printf("1\n");
6926     exit(0);
6927   }
6928   if (b[0] == 0xBF && b[14] == 0x99 && b[15] == 0x9A) {
6929     /* IEEE 128-bit big-endian, e.g. solaris sparc */
6930     printf("2\n");
6931     exit(0);
6932   }
6933 #endif
6934 /* For alignment 32-bit platforms have the 80 bits in 12 bytes,
6935  * while 64-bits platforms have it in 16 bytes. */
6936 #if LDBL_MANT_DIG == 64 && (LONGDBLSIZE == 16 || LONGDBLSIZE == 12)
6937   if (b[0] == 0xCD && b[9] == 0xBF && b[10] == 0x00) {
6938     /* x86 80-bit little-endian, sizeof 12 (ILP32, Solaris x86)
6939      * or 16 (LP64, Linux and OS X), 4 or 6 bytes of padding.
6940      * Also known as "extended precision". */
6941     printf("3\n");
6942     exit(0);
6943   }
6944   if (b[0] == 0xBF && b[9] == 0xCD && b[10] == 0x00) {
6945     /* is there ever big-endian 80-bit, really? */
6946     printf("4\n");
6947     exit(0);
6948   }
6949 #endif
6950 #if (LDBL_MANT_DIG == 106 || LDBL_MANT_DIG == 107) && LONGDBLSIZE == 16
6951   /* software "double double", the 106 is 53+53.
6952    * but irix thinks it is 107. */
6953   if (b[0] == 0x9A && b[7] == 0x3C && b[8] == 0x9A && b[15] == 0xBF) {
6954     /* double double 128-bit little-endian,
6955      * 9a 99 99 99 99 99 59 3c 9a 99 99 99 99 99 b9 bf */
6956     printf("5\n");
6957     exit(0);
6958   }
6959   if (b[0] == 0xBF && b[7] == 0x9A && b[8] == 0x3C && b[15] == 0x9A) {
6960     /* double double 128-bit big-endian, e.g. PPC/Power and MIPS:
6961      * bf b9 99 99 99 99 99 9a 3c 59 99 99 99 99 99 9a */
6962     printf("6\n");
6963     exit(0);
6964   }
6965 #endif
6966   printf("-1\n"); /* unknown */
6967   exit(0);
6968 }
6969 EOP
6970 set try
6971 if eval $compile; then
6972     longdblkind=`$run ./try`
6973 else
6974     longdblkind=-1
6975 fi
6976 ;;
6977 *) longdblkind=0 ;;
6978 esac
6979 case "$longdblkind" in
6980 0) echo "Your long doubles are doubles." >&4 ;;
6981 1) echo "You have IEEE 754 128-bit little endian long doubles." >&4 ;;
6982 2) echo "You have IEEE 754 128-bit big endian long doubles." >&4 ;;
6983 3) echo "You have x86 80-bit little endian long doubles." >& 4 ;;
6984 4) echo "You have x86 80-bit big endian long doubles." >& 4 ;;
6985 5) echo "You have 128-bit little-endian double-double long doubles." >& 4 ;;
6986 6) echo "You have 128-bit big-endian double-double long doubles." >& 4 ;;
6987 *) echo "Cannot figure out your long double." >&4 ;;
6988 esac
6989 $rm_try
6990
6991 : determine the architecture name
6992 echo " "
6993 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6994         tarch=`arch`"-$osname"
6995 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6996         if uname -m > tmparch 2>&1 ; then
6997                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6998                         -e 's/$/'"-$osname/" tmparch`
6999         else
7000                 tarch="$osname"
7001         fi
7002    &n