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