[perl #128701] Fix err msg for Unicode delimiters
[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 : Fail if both uselongdouble and usequadmath are requested
5245 case "$usequadmath:$uselongdouble" in
5246 define:define)
5247         $cat <<EOM >&4
5248
5249 *** You requested the use of the quadmath library and use
5250 *** of long doubles.
5251 ***
5252 *** Please select one or the other.
5253 EOM
5254         exit 1
5255         ;;
5256 esac
5257
5258 : Looking for optional libraries
5259 echo " "
5260 echo "Checking for optional libraries..." >&4
5261 case "$libs" in
5262 ' '|'') dflt='';;
5263 *) dflt="$libs";;
5264 esac
5265 case "$libswanted" in
5266 '') libswanted='c_s';;
5267 esac
5268 case "$usesocks" in
5269 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
5270 esac
5271 case "$usecbacktrace" in
5272 "$define") libswanted="$libswanted bfd" ;;
5273 esac
5274 case "$usequadmath" in
5275 "$define") libswanted="$libswanted quadmath" ;;
5276 esac
5277 libsfound=''
5278 libsfiles=''
5279 libsdirs=''
5280 libspath=''
5281 for thisdir in $libpth $xlibpth; do
5282   test -d $thisdir && libspath="$libspath $thisdir"
5283 done
5284 for thislib in $libswanted; do
5285         for thisdir in $libspath; do
5286             xxx=''
5287             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
5288                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|sed -n '$p'`
5289                 $test -f "$xxx" && eval $libscheck
5290                 $test -f "$xxx" && libstyle=shared
5291                 xxx=`ls $thisdir/lib$thislib.[0-9].$so 2>/dev/null|sed -n '$p'`
5292                 $test -f "$xxx" && eval $libscheck
5293                 $test -f "$xxx" && libstyle=shared
5294             fi
5295             if test ! -f "$xxx"; then
5296                 xxx=$thisdir/lib$thislib.$so
5297                 $test -f "$xxx" && eval $libscheck
5298                 $test -f "$xxx" && libstyle=shared
5299             fi
5300             if test ! -f "$xxx"; then
5301                 xxx=$thisdir/lib$thislib$_a
5302                 $test -f "$xxx" && eval $libscheck
5303                 $test -f "$xxx" && libstyle=static
5304             fi
5305             if test ! -f "$xxx"; then
5306                 xxx=$thisdir/$thislib$_a
5307                 $test -f "$xxx" && eval $libscheck
5308                 $test -f "$xxx" && libstyle=static
5309             fi
5310             if test ! -f "$xxx"; then
5311                 xxx=$thisdir/lib${thislib}_s$_a
5312                 $test -f "$xxx" && eval $libscheck
5313                 $test -f "$xxx" && libstyle=static
5314                 $test -f "$xxx" && thislib=${thislib}_s
5315             fi
5316             if test ! -f "$xxx"; then
5317                 xxx=$thisdir/Slib$thislib$_a
5318                 $test -f "$xxx" && eval $libscheck
5319                 $test -f "$xxx" && libstyle=static
5320             fi
5321             if $test -f "$xxx"; then
5322                 case "$libstyle" in
5323                 shared) echo "Found -l$thislib (shared)." ;;
5324                 static) echo "Found -l$thislib." ;;
5325                 *)      echo "Found -l$thislib ($libstyle)." ;;
5326                 esac
5327                 case " $dflt " in
5328                 *"-l$thislib "*);;
5329                 *) dflt="$dflt -l$thislib"
5330                    libsfound="$libsfound $xxx"
5331                    yyy=`basename $xxx`
5332                    libsfiles="$libsfiles $yyy"
5333                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
5334                    case " $libsdirs " in
5335                    *" $yyy "*) ;;
5336                    *) libsdirs="$libsdirs $yyy" ;;
5337                    esac
5338                    ;;
5339                 esac
5340                 break
5341             fi
5342         done
5343         if $test ! -f "$xxx"; then
5344             echo "No -l$thislib."
5345         fi
5346 done
5347 set X $dflt
5348 shift
5349 dflt="$*"
5350 case "$libs" in
5351 '') dflt="$dflt";;
5352 *) dflt="$libs";;
5353 esac
5354 case "$dflt" in
5355 ' '|'') dflt='none';;
5356 esac
5357
5358 $cat <<EOM
5359
5360 In order to compile $package on your machine, a number of libraries
5361 are usually needed.  Include any other special libraries here as well.
5362 Say "none" for none.  The default list is almost always right.
5363 EOM
5364
5365 echo " "
5366 rp="What libraries to use?"
5367 . ./myread
5368 case "$ans" in
5369 none) libs=' ';;
5370 *) libs="$ans";;
5371 esac
5372
5373 : determine optimization, if desired, or use for debug flag also
5374 case "$optimize" in
5375 ' '|$undef) dflt='none';;
5376 '') dflt='-O';;
5377 *) dflt="$optimize";;
5378 esac
5379 $cat <<EOH
5380
5381 By default, $package compiles with the -O flag to use the optimizer.
5382 Alternately, you might want to use the symbolic debugger, which uses
5383 the -g flag (on traditional Unix systems).  Either flag can be
5384 specified here.  To use neither flag, specify the word "none".
5385
5386 EOH
5387 rp="What optimizer/debugger flag should be used?"
5388 . ./myread
5389 optimize="$ans"
5390 case "$optimize" in
5391 'none') optimize=" ";;
5392 esac
5393
5394 : Check what DEBUGGING is required from the command line
5395 : -DEBUGGING      or -DDEBUGGING or
5396 : -DEBUGGING=both                       = -g + -DDEBUGGING
5397 : -DEBUGGING=-g   or -Doptimize=-g      = -g
5398 : -DEBUGGING=none or -UDEBUGGING        =
5399 : -DEBUGGING=old  or -DEBUGGING=default = ? $optimize
5400 case "$EBUGGING" in
5401 '')     ;;
5402 *)      DEBUGGING=$EBUGGING ;;
5403 esac
5404
5405 case "$DEBUGGING" in
5406 -g|both|$define)
5407     case "$optimize" in
5408         *-g*) ;;
5409         *)    optimize="$optimize -g" ;;
5410     esac ;;
5411 none|$undef)
5412     case "$optimize" in
5413         *-g*)   set `echo "X $optimize " | sed 's/ -g / /'`
5414                 shift
5415                 optimize="$*"
5416                 ;;
5417     esac ;;
5418 esac
5419
5420 dflt=''
5421 case "$DEBUGGING" in
5422 both|$define) dflt='-DDEBUGGING'
5423 esac
5424
5425 : argument order is deliberate, as the flag will start with - which set could
5426 : think is an option
5427 checkccflag='check=$1; flag=$2; callback=$3;
5428 echo " ";
5429 echo "Checking if your compiler accepts $flag" 2>&1;
5430 [ "X$sysroot" != "X" ] && echo "For sysroot = $sysroot";
5431 echo "int main(void) { return 0; }" > gcctest.c;
5432 if $cc $_sysroot -O2 $flag -o gcctest gcctest.c 2>gcctest.out && $run ./gcctest; then
5433     echo "Yes, it does." 2>&1;
5434     if $test -s gcctest.out ; then
5435         echo "But your platform does not like it:";
5436         cat gcctest.out;
5437     else
5438         case "$ccflags" in
5439         *$check*)
5440             echo "Leaving current flags $ccflags alone." 2>&1
5441             ;;
5442         *) dflt="$dflt $flag";
5443             eval $callback
5444             ;;
5445         esac
5446     fi
5447 else
5448     echo "Nope, it does not, but that is ok." 2>&1;
5449 fi
5450 '
5451
5452 : We will not override a previous value, but we might want to
5453 : augment a hint file
5454 case "$hint" in
5455 default|recommended)
5456         case "$gccversion" in
5457         1*) dflt="$dflt -fpcc-struct-return" ;;
5458         esac
5459         case "$optimize:$DEBUGGING" in
5460         *-g*:old) dflt="$dflt -DDEBUGGING";;
5461         esac
5462         case "$gccversion" in
5463         2*) if $test -d /etc/conf/kconfig.d &&
5464                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
5465                 then
5466                         # Interactive Systems (ISC) POSIX mode.
5467                         dflt="$dflt -posix"
5468                 fi
5469                 ;;
5470         esac
5471         case "$gccversion" in
5472         1*) ;;
5473         2.[0-8]*) ;;
5474         ?*)     set strict-aliasing -fno-strict-aliasing
5475                 eval $checkccflag
5476                 ;;
5477         esac
5478         # For gcc, adding -pipe speeds up compilations for some, but apparently
5479         # some assemblers can't read from stdin.  (It also slows down compilations
5480         # in other cases, but those are apparently rarer these days.)  AD 5/2004.
5481         case "$gccversion" in
5482         ?*)     set pipe -pipe
5483                 eval $checkccflag
5484                 ;;
5485         esac
5486
5487         # on x86_64 (at least) we require an extra library (libssp) in the
5488         # link command line. This library is not named, so I infer that it is
5489         # an implementation detail that may change. Hence the safest approach
5490         # is to add the flag to the flags passed to the compiler at link time,
5491         # as that way the compiler can do the right implementation dependant
5492         # thing. (NWC)
5493         case "$osname" in
5494         amigaos) ;; # -fstack-protector builds but doesn't work
5495         *)      case "$gccversion" in
5496                 ?*)     set stack-protector-strong -fstack-protector-strong
5497                         eval $checkccflag
5498                         case "$dflt" in
5499                         *-fstack-protector-strong*) ;; # It got added.
5500                         *) # Try the plain/older -fstack-protector.
5501                            set stack-protector -fstack-protector
5502                            eval $checkccflag
5503                            ;;
5504                         esac
5505                         ;;
5506                 esac
5507                 ;;
5508         esac
5509         ;;
5510 esac
5511
5512 case "$mips_type" in
5513 *BSD*|'') inclwanted="$locincpth $usrinc";;
5514 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
5515 esac
5516 for thisincl in $inclwanted; do
5517         if $test -d $thisincl; then
5518                 if $test x$thisincl != x$usrinc; then
5519                         case "$dflt" in
5520                         *" -I$thisincl "*);;
5521                         *) dflt="$dflt -I$thisincl ";;
5522                         esac
5523                 fi
5524         fi
5525 done
5526
5527 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
5528         xxx=true;
5529 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
5530         xxx=true;
5531 else
5532         xxx=false;
5533 fi;
5534 if $xxx; then
5535         case "$dflt" in
5536         *$2*);;
5537         *) dflt="$dflt -D$2";;
5538         esac;
5539 fi'
5540
5541 set signal.h LANGUAGE_C; eval $inctest
5542
5543 case "$usesocks" in
5544 $define)
5545         ccflags="$ccflags -DSOCKS"
5546         ;;
5547 esac
5548
5549 case "$hint" in
5550 default|recommended) dflt="$ccflags $dflt" ;;
5551 *) dflt="$ccflags";;
5552 esac
5553
5554 case "$dflt" in
5555 ''|' ') dflt=none;;
5556 esac
5557
5558 $cat <<EOH
5559
5560 Your C compiler may want other flags.  For this question you should include
5561 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
5562 but you should NOT include libraries or ld flags like -lwhatever.  If you
5563 want $package to honor its debug switch, you should include -DDEBUGGING here.
5564 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
5565
5566 To use no flags, specify the word "none".
5567
5568 EOH
5569 set X $dflt
5570 shift
5571 dflt=${1+"$@"}
5572 rp="Any additional cc flags?"
5573 . ./myread
5574 case "$ans" in
5575 none) ccflags='';;
5576 *) ccflags="$ans";;
5577 esac
5578
5579 : the following weeds options from ccflags that are of no interest to cpp
5580 case "$cppflags" in
5581 '') cppflags="$ccflags" ;;
5582 *)  set X $ccflags; shift
5583     case " $cppflags " in
5584     *" $1 "*) ;;  # Try to avoid doubling the cppflags.
5585     *) cppflags="$cppflags $ccflags" ;;
5586     esac
5587     ;;
5588 esac
5589 case "$gccversion" in
5590 1*) cppflags="$cppflags -D__GNUC__"
5591 esac
5592 case "$mips_type" in
5593 '');;
5594 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
5595 esac
5596 case "$cppflags" in
5597 '');;
5598 *)
5599         echo " "
5600         echo "Let me guess what the preprocessor flags are..." >&4
5601         set X $cppflags
5602         shift
5603         cppflags=''
5604         $cat >cpp.c <<'EOM'
5605 #define BLURFL foo
5606
5607 BLURFL xx LFRULB
5608 EOM
5609         previous=''
5610         for flag in $*
5611         do
5612                 case "$flag" in
5613                 -*) ftry="$flag";;
5614                 *) ftry="$previous $flag";;
5615                 esac
5616                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
5617                         >cpp1.out 2>/dev/null && \
5618                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
5619                         >cpp2.out 2>/dev/null && \
5620                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
5621                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
5622                 then
5623                         cppflags="$cppflags $ftry"
5624                         previous=''
5625                 else
5626                         previous="$flag"
5627                 fi
5628         done
5629         set X $cppflags
5630         shift
5631         cppflags=${1+"$@"}
5632         case "$cppflags" in
5633         *-*)  echo "They appear to be: $cppflags";;
5634         esac
5635         $rm -f cpp.c cpp?.out
5636         ;;
5637 esac
5638
5639 : flags used in final linking phase
5640 case "$ldflags" in
5641 '') if ./venix; then
5642                 dflt='-i -z'
5643         else
5644                 dflt=''
5645         fi
5646         case "$ccflags" in
5647         *-posix*) dflt="$dflt -posix" ;;
5648         esac
5649         ;;
5650 *) dflt="$ldflags";;
5651 esac
5652 # See note above about -fstack-protector
5653 case "$ccflags" in
5654 *-fstack-protector-strong*)
5655         case "$dflt" in
5656         *-fstack-protector-strong*) ;; # Don't add it again
5657         *) dflt="$dflt -fstack-protector-strong" ;;
5658         esac
5659         ;;
5660 *-fstack-protector*)
5661         case "$dflt" in
5662         *-fstack-protector*) ;; # Don't add it again
5663         *) dflt="$dflt -fstack-protector" ;;
5664         esac
5665         ;;
5666 esac
5667
5668 : Try to guess additional flags to pick up local libraries.
5669 for thislibdir in $libpth; do
5670         case " $loclibpth " in
5671         *" $thislibdir "*)
5672                 case "$dflt " in
5673                 *"-L$thislibdir "*) ;;
5674                 *)  dflt="$dflt -L$thislibdir" ;;
5675                 esac
5676                 ;;
5677         esac
5678 done
5679
5680 case "$dflt" in
5681 '') dflt='none' ;;
5682 esac
5683
5684 $cat <<EOH
5685
5686 Your C linker may need flags.  For this question you should
5687 include -L/whatever and any other flags used by the C linker, but you
5688 should NOT include libraries like -lwhatever.
5689
5690 Make sure you include the appropriate -L/path flags if your C linker
5691 does not normally search all of the directories you specified above,
5692 namely
5693         $libpth
5694 To use no flags, specify the word "none".
5695
5696 EOH
5697
5698 rp="Any additional ld flags (NOT including libraries)?"
5699 . ./myread
5700 case "$ans" in
5701 none) ldflags='';;
5702 *) ldflags="$ans";;
5703 esac
5704 rmlist="$rmlist pdp11"
5705
5706 : coherency check
5707 echo " "
5708 echo "Checking your choice of C compiler and flags for coherency..." >&4
5709 $cat > try.c <<'EOF'
5710 #include <stdio.h>
5711 int main() { printf("Ok\n"); return(0); }
5712 EOF
5713 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
5714 shift
5715 $cat >try.msg <<'EOM'
5716 I've tried to compile and run the following simple program:
5717
5718 EOM
5719 $cat try.c >> try.msg
5720
5721 $cat >> try.msg <<EOM
5722
5723 I used the command:
5724
5725         $*
5726         $run ./try
5727
5728 and I got the following output:
5729
5730 EOM
5731 dflt=y
5732 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
5733         if $sh -c "$run ./try " >>try.msg 2>&1; then
5734                 xxx=`$run ./try`
5735                 case "$xxx" in
5736                 "Ok") dflt=n ;;
5737                 *)    echo 'The program compiled OK, but produced no output.' >> try.msg ;;
5738                 esac
5739         else
5740                 echo "The program compiled OK, but exited with status $?." >>try.msg
5741                 rp="You have a problem.  Shall I abort Configure"
5742                 dflt=y
5743         fi
5744 else
5745         echo "I can't compile the test program." >>try.msg
5746         rp="You have a BIG problem.  Shall I abort Configure"
5747         dflt=y
5748 fi
5749 case "$dflt" in
5750 y)
5751         $cat try.msg >&4
5752         case "$knowitall" in
5753         '')
5754                 echo "(The supplied flags or libraries might be incorrect.)"
5755                 ;;
5756         *) dflt=n;;
5757         esac
5758         echo " "
5759         . ./myread
5760         case "$ans" in
5761         n*|N*) ;;
5762         *)      echo "Ok.  Stopping Configure." >&4
5763                 exit 1
5764                 ;;
5765         esac
5766         ;;
5767 n) echo "OK, that should do.";;
5768 esac
5769 $rm_try gcctest gcctest.out
5770
5771 : define a shorthand compile call
5772 compile='
5773 mc_file=$1;
5774 shift;
5775 case "$usedevel" in $define|true|[yY]*) if $test ! -f "${mc_file}.c"; then
5776 echo "Internal Configure script bug - compiler test file ${mc_file}.c is missing. Please report this to perlbug@perl.org" >&4;
5777 exit 1;
5778 fi;
5779 esac;
5780 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
5781 : define a shorthand compile call for compilations that should be ok.
5782 compile_ok='
5783 mc_file=$1;
5784 shift;
5785 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
5786
5787 : determine filename position in cpp output
5788 echo " "
5789 echo "Computing filename position in cpp output for #include directives..." >&4
5790 case "$osname" in
5791 amigaos) fieldn=3 ;;  # Workaround for a bug in abc (pdksh).
5792 esac
5793 case "$fieldn" in
5794 '')
5795 case "$osname" in
5796 vos) testaccess=-e ;;
5797 *)   testaccess=-r ;;
5798 esac
5799 echo '#include <stdio.h>' > foo.c
5800 $cat >fieldn <<EOF
5801 $startsh
5802 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5803 $grep '^[       ]*#.*stdio\.h' | \
5804 while read cline; do
5805         pos=1
5806         set \$cline
5807         while $test \$# -gt 0; do
5808                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
5809                         echo "\$pos"
5810                         exit 0
5811                 fi
5812                 shift
5813                 pos=\`expr \$pos + 1\`
5814         done
5815 done
5816 EOF
5817 chmod +x fieldn
5818 fieldn=`./fieldn`
5819 $rm -f foo.c fieldn
5820 ;;
5821 esac
5822 case $fieldn in
5823 '') pos='???';;
5824 1) pos=first;;
5825 2) pos=second;;
5826 3) pos=third;;
5827 *) pos="${fieldn}th";;
5828 esac
5829 echo "Your cpp writes the filename in the $pos field of the line."
5830
5831 : locate header file
5832 $cat >findhdr <<EOF
5833 $startsh
5834 wanted=\$1
5835 name=''
5836 for usrincdir in $incpth
5837 do
5838         if test -f \$usrincdir/\$wanted; then
5839                 echo "\$usrincdir/\$wanted"
5840                 exit 0
5841         fi
5842 done
5843 awkprg='{ print \$$fieldn }'
5844 echo "#include <\$wanted>" > foo\$\$.c
5845 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5846 $cppfilter $grep "^[    ]*#.*\$wanted" | \
5847 while read cline; do
5848         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5849         case "\$name" in
5850         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5851         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5852         *) exit 2;;
5853         esac;
5854 done;
5855 #
5856 # status = 0: grep returned 0 lines, case statement not executed
5857 # status = 1: headerfile found
5858 # status = 2: while loop executed, no headerfile found
5859 #
5860 status=\$?
5861 $rm -f foo\$\$.c;
5862 if test \$status -eq 1; then
5863         exit 0;
5864 fi
5865 exit 1
5866 EOF
5867 chmod +x findhdr
5868
5869 : define an alternate in-header-list? function
5870 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5871 cont=true; xxf="echo \"<\$1> found.\" >&4";
5872 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5873 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5874 esac;
5875 case $# in 4) instead=instead;; *) instead="at last";; esac;
5876 while $test "$cont"; do
5877         xxx=`./findhdr $1`
5878         var=$2; eval "was=\$$2";
5879         if $test "$xxx" && $test -r "$xxx";
5880         then eval $xxf;
5881         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5882                 cont="";
5883         else eval $xxnf;
5884         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5885         set $yyy; shift; shift; yyy=$@;
5886         case $# in 0) cont="";;
5887         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5888                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5889         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5890                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5891         esac;
5892 done;
5893 while $test "$yyy";
5894 do set $yyy; var=$2; eval "was=\$$2";
5895         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5896         set $yyy; shift; shift; yyy=$@;
5897 done'
5898
5899 : see if stdlib is available
5900 set stdlib.h i_stdlib
5901 eval $inhdr
5902
5903 : check for lengths of integral types
5904 echo " "
5905 case "$intsize" in
5906 '')
5907         echo "Checking to see how big your integers are..." >&4
5908         $cat >try.c <<EOCP
5909 #include <stdio.h>
5910 #$i_stdlib I_STDLIB
5911 #ifdef I_STDLIB
5912 #include <stdlib.h>
5913 #endif
5914 int main()
5915 {
5916         printf("intsize=%d;\n", (int)sizeof(int));
5917         printf("longsize=%d;\n", (int)sizeof(long));
5918         printf("shortsize=%d;\n", (int)sizeof(short));
5919         exit(0);
5920 }
5921 EOCP
5922         set try
5923         if eval $compile_ok && $run ./try > /dev/null; then
5924                 eval `$run ./try`
5925                 echo "Your integers are $intsize bytes long."
5926                 echo "Your long integers are $longsize bytes long."
5927                 echo "Your short integers are $shortsize bytes long."
5928         else
5929                 $cat >&4 <<EOM
5930 !
5931 Help! I can't compile and run the intsize test program: please enlighten me!
5932 (This is probably a misconfiguration in your system or libraries, and
5933 you really ought to fix it.  Still, I'll try anyway.)
5934 !
5935 EOM
5936                 dflt=4
5937                 rp="What is the size of an integer (in bytes)?"
5938                 . ./myread
5939                 intsize="$ans"
5940                 dflt=$intsize
5941                 rp="What is the size of a long integer (in bytes)?"
5942                 . ./myread
5943                 longsize="$ans"
5944                 dflt=2
5945                 rp="What is the size of a short integer (in bytes)?"
5946                 . ./myread
5947                 shortsize="$ans"
5948         fi
5949         ;;
5950 esac
5951 $rm_try
5952
5953 : check for long long
5954 echo " "
5955 echo "Checking to see if you have long long..." >&4
5956 echo 'int main() { long long x = 7; return 0; }' > try.c
5957 set try
5958 if eval $compile; then
5959         val="$define"
5960         echo "You have long long."
5961 else
5962         val="$undef"
5963         echo "You do not have long long."
5964 fi
5965 $rm_try
5966 set d_longlong
5967 eval $setvar
5968
5969 : check for length of long long
5970 case "${d_longlong}${longlongsize}" in
5971 $define)
5972         echo " "
5973         echo "Checking to see how big your long longs are..." >&4
5974         $cat >try.c <<'EOCP'
5975 #include <stdio.h>
5976 int main()
5977 {
5978     printf("%d\n", (int)sizeof(long long));
5979     return(0);
5980 }
5981 EOCP
5982         set try
5983         if eval $compile_ok; then
5984                 longlongsize=`$run ./try`
5985                 echo "Your long longs are $longlongsize bytes long."
5986         else
5987                 dflt='8'
5988                 echo " "
5989                 echo "(I can't seem to compile the test program.  Guessing...)"
5990                 rp="What is the size of a long long (in bytes)?"
5991                 . ./myread
5992                 longlongsize="$ans"
5993         fi
5994         if $test "X$longsize" = "X$longlongsize"; then
5995                 echo "(That isn't any different from an ordinary long.)"
5996         fi
5997         ;;
5998 esac
5999 $rm_try
6000
6001 : see if inttypes.h is available
6002 : we want a real compile instead of Inhdr because some systems
6003 : have an inttypes.h which includes non-existent headers
6004 echo " "
6005 $cat >try.c <<EOCP
6006 #include <inttypes.h>
6007 int main() {
6008         static int32_t foo32 = 0x12345678;
6009 }
6010 EOCP
6011 set try
6012 if eval $compile; then
6013         echo "<inttypes.h> found." >&4
6014         val="$define"
6015 else
6016         echo "<inttypes.h> NOT found." >&4
6017         val="$undef"
6018 fi
6019 $rm_try
6020 set i_inttypes
6021 eval $setvar
6022
6023 : check for int64_t
6024 echo " "
6025 echo "Checking to see if you have int64_t..." >&4
6026 $cat >try.c <<EOCP
6027 #include <sys/types.h>
6028 #$i_inttypes I_INTTYPES
6029 #ifdef I_INTTYPES
6030 #include <inttypes.h>
6031 #endif
6032 int main() { int64_t x = 7; }
6033 EOCP
6034 set try
6035 if eval $compile; then
6036         val="$define"
6037         echo "You have int64_t."
6038 else
6039         val="$undef"
6040         echo "You do not have int64_t."
6041 fi
6042 $rm_try
6043 set d_int64_t
6044 eval $setvar
6045
6046 : Check if 64bit ints have a quad type
6047 echo " "
6048 echo "Checking which 64-bit integer type we could use..." >&4
6049
6050 case "$intsize" in
6051 8) val=int
6052    set quadtype
6053    eval $setvar
6054    val='"unsigned int"'
6055    set uquadtype
6056    eval $setvar
6057    quadkind=1
6058    ;;
6059 *) case "$longsize" in
6060    8) val=long
6061       set quadtype
6062       eval $setvar
6063       val='"unsigned long"'
6064       set uquadtype
6065       eval $setvar
6066       quadkind=2
6067       ;;
6068    *) case "$d_longlong:$longlongsize" in
6069       define:8)
6070         val='"long long"'
6071         set quadtype
6072         eval $setvar
6073         val='"unsigned long long"'
6074         set uquadtype
6075         eval $setvar
6076         quadkind=3
6077         ;;
6078       *) case "$d_int64_t" in
6079          define)
6080            val=int64_t
6081            set quadtype
6082            eval $setvar
6083            val=uint64_t
6084            set uquadtype
6085            eval $setvar
6086            quadkind=4
6087            ;;
6088          esac
6089          ;;
6090       esac
6091       ;;
6092    esac
6093    ;;
6094 esac
6095
6096 case "$quadtype" in
6097 '')     echo "Alas, no 64-bit integer types in sight." >&4
6098         d_quad="$undef"
6099         ;;
6100 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
6101         d_quad="$define"
6102         ;;
6103 esac
6104
6105 : Do we want 64bit support
6106 case "$uselonglong" in
6107 "$define"|true|[yY]*)
6108         cat <<EOM >&4
6109
6110 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
6111 EOM
6112         use64bitint="$define"
6113         ;;
6114 esac
6115 case "$use64bits" in
6116 "$define"|true|[yY]*)
6117         cat <<EOM >&4
6118
6119 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
6120 EOM
6121         use64bitint="$define"
6122         ;;
6123 esac
6124 case "$use64bitints" in
6125 "$define"|true|[yY]*)
6126         cat <<EOM >&4
6127
6128 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
6129 EOM
6130         use64bitint="$define"
6131         ;;
6132 esac
6133 case "$use64bitsint" in
6134 "$define"|true|[yY]*)
6135         cat <<EOM >&4
6136
6137 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
6138 EOM
6139         use64bitint="$define"
6140         ;;
6141 esac
6142 case "$uselonglongs" in
6143 "$define"|true|[yY]*)
6144         cat <<EOM >&4
6145
6146 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
6147 EOM
6148         use64bitint="$define"
6149         ;;
6150 esac
6151 case "$use64bitsall" in
6152 "$define"|true|[yY]*)
6153         cat <<EOM >&4
6154
6155 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
6156 EOM
6157         use64bitall="$define"
6158         ;;
6159 esac
6160
6161 case "$ccflags" in
6162 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
6163 esac
6164 case "$use64bitall" in
6165 "$define"|true|[yY]*) use64bitint="$define" ;;
6166 esac
6167
6168 case "$longsize" in
6169 8) cat <<EOM
6170
6171 You have natively 64-bit long integers.
6172 EOM
6173    val="$define"
6174    ;;
6175 *) case "$use64bitint" in
6176    "$define"|true|[yY]*) dflt='y';;
6177    *) dflt='n';;
6178    esac
6179    case "$d_quad" in
6180    "$define") ;;
6181    *) dflt='n' ;;
6182    esac
6183    cat <<EOM
6184
6185 Perl can be built to take advantage of 64-bit integer types
6186 on some systems.  To do so, Configure can be run with -Duse64bitint.
6187 Choosing this option will most probably introduce binary incompatibilities.
6188
6189 If this doesn't make any sense to you, just accept the default '$dflt'.
6190 (The default has been chosen based on your configuration.)
6191 EOM
6192    rp='Try to use 64-bit integers, if available?'
6193    . ./myread
6194    case "$ans" in
6195    [yY]*) val="$define" ;;
6196    *)     val="$undef"  ;;
6197    esac
6198    ;;
6199 esac
6200 set use64bitint
6201 eval $setvar
6202
6203 case "$use64bitall" in
6204 "$define"|true|[yY]*) dflt='y' ;;
6205 *) case "$longsize" in
6206    8) dflt='y' ;;
6207    *) dflt='n' ;;
6208    esac
6209    ;;
6210 esac
6211 cat <<EOM
6212
6213 You may also choose to try maximal 64-bitness.  It means using as much
6214 64-bitness as possible on the platform.  This in turn means even more
6215 binary incompatibilities.  On the other hand, your platform may not
6216 have any more 64-bitness available than what you already have chosen.
6217
6218 If this doesn't make any sense to you, just accept the default '$dflt'.
6219 (The default has been chosen based on your configuration.)
6220 EOM
6221 rp='Try to use maximal 64-bit support, if available?'
6222 . ./myread
6223 case "$ans" in
6224 [yY]*) val="$define" ;;
6225 *)     val="$undef"  ;;
6226 esac
6227 set use64bitall
6228 eval $setvar
6229 case "$use64bitall" in
6230 "$define")
6231         case "$use64bitint" in
6232         "$undef")
6233                 cat <<EOM
6234
6235 Since you have chosen a maximally 64-bit build, I'm also turning on
6236 the use of 64-bit integers.
6237 EOM
6238                 use64bitint="$define" ;;
6239         esac
6240         ;;
6241 esac
6242
6243 : Look for a hint-file generated 'call-back-unit'.  If the
6244 : user has specified that a 64-bit perl is to be built,
6245 : we may need to set or change some other defaults.
6246 if $test -f use64bitint.cbu; then
6247         echo "Your platform has some specific hints regarding 64-bit integers, using them..."
6248         . ./use64bitint.cbu
6249 fi
6250 case "$use64bitint" in
6251 "$define"|true|[yY]*)
6252         : This test was common to all the OpenBSD forks, and seems harmless for
6253         : other platforms:
6254         echo " "
6255         echo "Checking if your C library has broken 64-bit functions..." >&4
6256         cat >try.c <<EOCP
6257 #include <stdio.h>
6258 typedef $uquadtype myULL;
6259 int main (void)
6260 {
6261     struct {
6262         double d;
6263         myULL  u;
6264     } *p, test[] = {
6265         {4294967303.15, 4294967303ULL},
6266         {4294967294.2,  4294967294ULL},
6267         {4294967295.7,  4294967295ULL},
6268         {0.0, 0ULL}
6269     };
6270     for (p = test; p->u; p++) {
6271         myULL x = (myULL)p->d;
6272         if (x != p->u) {
6273             printf("buggy\n");
6274             return 0;
6275         }
6276     }
6277     printf("ok\n");
6278     return 0;
6279 }
6280 EOCP
6281         set try
6282         if eval $compile_ok; then
6283             libcquad=`$run ./try`
6284             echo "Your C library's 64-bit functions are $libcquad."
6285         else
6286             echo "(I can't seem to compile the test program.)"
6287             echo "Assuming that your C library's 64-bit functions are ok."
6288             libcquad="ok"
6289         fi
6290         $rm_try
6291
6292         case "$libcquad" in
6293             buggy*)
6294                 cat >&4 <<EOM
6295
6296 *** You have a C library with broken 64-bit functions.
6297 *** 64-bit support does not work reliably in this configuration.
6298 *** Please rerun Configure without -Duse64bitint and/or -Dusemorebits.
6299 *** Cannot continue, aborting.
6300
6301 EOM
6302                 exit 1
6303                 ;;
6304         esac
6305         case "$longsize" in
6306         4) case "$archname64" in
6307            '') archname64=64int ;;
6308            esac
6309            ;;
6310         esac
6311         ;;
6312 esac
6313
6314 : Look for a hint-file generated 'call-back-unit'.  If the
6315 : user has specified that a maximally 64-bit perl is to be built,
6316 : we may need to set or change some other defaults.
6317 if $test -f use64bitall.cbu; then
6318         echo "Your platform has some specific hints regarding 64-bit builds, using them..."
6319         . ./use64bitall.cbu
6320 fi
6321 case "$use64bitall" in
6322 "$define"|true|[yY]*)
6323         case "$longsize" in
6324         4) case "$archname64" in
6325            ''|64int) archname64=64all ;;
6326            esac
6327            ;;
6328         esac
6329         ;;
6330 esac
6331
6332 case "$d_quad:$use64bitint" in
6333 $undef:$define)
6334         cat >&4 <<EOF
6335
6336 *** You have chosen to use 64-bit integers,
6337 *** but none can be found.
6338 *** Please rerun Configure without -Duse64bitint and/or -Dusemorebits.
6339 *** Cannot continue, aborting.
6340
6341 EOF
6342         exit 1
6343         ;;
6344 esac
6345
6346 : Check if we are using the GNU C library
6347 echo " "
6348 echo "Checking for GNU C Library..." >&4
6349 cat >try.c <<'EOCP'
6350 /* Find out version of GNU C library.  __GLIBC__ and __GLIBC_MINOR__
6351    alone are insufficient to distinguish different versions, such as
6352    2.0.6 and 2.0.7.  The function gnu_get_libc_version() appeared in
6353    libc version 2.1.0.      A. Dougherty,  June 3, 2002.
6354 */
6355 #include <stdio.h>
6356 int main(void)
6357 {
6358 #ifdef __GLIBC__
6359 #   ifdef __GLIBC_MINOR__
6360 #       if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 && !defined(__cplusplus)
6361 #           include <gnu/libc-version.h>
6362             printf("%s\n",  gnu_get_libc_version());
6363 #       else
6364             printf("%d.%d\n",  __GLIBC__, __GLIBC_MINOR__);
6365 #       endif
6366 #   else
6367         printf("%d\n",  __GLIBC__);
6368 #   endif
6369     return 0;
6370 #else
6371     return 1;
6372 #endif
6373 }
6374 EOCP
6375 set try
6376 if eval $compile_ok && $run ./try > glibc.ver; then
6377         val="$define"
6378         gnulibc_version=`$cat glibc.ver`
6379         echo "You are using the GNU C Library version $gnulibc_version"
6380 else
6381         val="$undef"
6382         gnulibc_version=''
6383         echo "You are not using the GNU C Library"
6384 fi
6385 $rm_try glibc.ver
6386 set d_gnulibc
6387 eval $setvar
6388
6389 : see if nm is to be used to determine whether a symbol is defined or not
6390 case "$usenm" in
6391 '')
6392         dflt=''
6393         case "$d_gnulibc" in
6394         "$define")
6395                 echo " "
6396                 echo "nm probably won't work on the GNU C Library." >&4
6397                 dflt=n
6398                 ;;
6399         esac
6400         case "$dflt" in
6401         '')
6402                 if $test "$osname" = aix -a "X$PASE" != "Xdefine" -a ! -f /lib/syscalls.exp; then
6403                         echo " "
6404                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
6405                         echo "'nm' won't be sufficient on this system." >&4
6406                         dflt=n
6407                 fi
6408                 ;;
6409         esac
6410         case "$dflt" in
6411         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
6412                 if $test $dflt -gt 20; then
6413                         dflt=y
6414                 else
6415                         dflt=n
6416                 fi
6417                 ;;
6418         esac
6419         ;;
6420 *)
6421         case "$usenm" in
6422         true|$define) dflt=y;;
6423         *) dflt=n;;
6424         esac
6425         ;;
6426 esac
6427 $cat <<EOM
6428
6429 I can use $nm to extract the symbols from your C libraries. This
6430 is a time consuming task which may generate huge output on the disk (up
6431 to 3 megabytes) but that should make the symbols extraction faster. The
6432 alternative is to skip the 'nm' extraction part and to compile a small
6433 test program instead to determine whether each symbol is present. If
6434 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
6435 this may be the best solution.
6436
6437 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
6438
6439 EOM
6440 rp="Shall I use $nm to extract C symbols from the libraries?"
6441 . ./myread
6442 case "$ans" in
6443 [Nn]*) usenm=false;;
6444 *) usenm=true;;
6445 esac
6446
6447 runnm=$usenm
6448 case "$reuseval" in
6449 true) runnm=false;;
6450 esac
6451
6452 : nm options which may be necessary
6453 case "$nm_opt" in
6454 '') if $test -f /mach_boot; then
6455                 nm_opt=''       # Mach
6456         elif $test -d /usr/ccs/lib; then
6457                 nm_opt='-p'     # Solaris (and SunOS?)
6458         elif $test -f /dgux; then
6459                 nm_opt='-p'     # DG-UX
6460         elif $test -f /lib64/rld; then
6461                 nm_opt='-p'     # 64-bit Irix
6462         else
6463                 nm_opt=''
6464         fi;;
6465 esac
6466
6467 : nm options which may be necessary for shared libraries but illegal
6468 : for archive libraries.  Thank you, Linux.
6469 case "$nm_so_opt" in
6470 '')     case "$myuname" in
6471         *linux*|gnu*)
6472                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
6473                         nm_so_opt='--dynamic'
6474                 fi
6475                 ;;
6476         esac
6477         ;;
6478 esac
6479
6480 : Figure out where the libc is located
6481 case "$runnm" in
6482 true)
6483 : get list of predefined functions in a handy place
6484 echo " "
6485 case "$libc" in
6486 '') libc=unknown
6487         case "$libs" in
6488         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
6489         esac
6490         ;;
6491 esac
6492 case "$libs" in
6493 '') ;;
6494 *)  for thislib in $libs; do
6495         case "$thislib" in
6496         -lc|-lc_s)
6497                 : Handle C library specially below.
6498                 ;;
6499         -l*)
6500                 thislib=`echo $thislib | $sed -e 's/^-l//'`
6501                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
6502                         :
6503                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
6504                         :
6505                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
6506                         :
6507                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
6508                         :
6509                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
6510                         :
6511                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
6512                         :
6513                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
6514                         :
6515                 else
6516                         try=''
6517                 fi
6518                 libnames="$libnames $try"
6519                 ;;
6520         *) libnames="$libnames $thislib" ;;
6521         esac
6522         done
6523         ;;
6524 esac
6525 xxx=normal
6526 case "$libc" in
6527 unknown)
6528         set /lib/libc.$so
6529         for xxx in $libpth; do
6530                 $test -r $1 || set $xxx/libc.$so
6531                 : The messy sed command sorts on library version numbers.
6532                 $test -r $1 || \
6533                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
6534                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
6535                                 h
6536                                 s/[0-9][0-9]*/0000&/g
6537                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
6538                                 G
6539                                 s/\n/ /' | \
6540                          $sort | $sed -e 's/^.* //'`
6541                 eval set \$$#
6542         done
6543         $test -r $1 || set $sysroot/usr/ccs/lib/libc.$so
6544         $test -r $1 || set $sysroot/lib/libsys_s$_a
6545         ;;
6546 *)
6547         set blurfl
6548         ;;
6549 esac
6550 if $test -r "$1"; then
6551         echo "Your (shared) C library seems to be in $1."
6552         libc="$1"
6553 elif $test -r /lib/libc && $test -r /lib/clib; then
6554         echo "Your C library seems to be in both /lib/clib and /lib/libc."
6555         xxx=apollo
6556         libc='/lib/clib /lib/libc'
6557         if $test -r /lib/syslib; then
6558                 echo "(Your math library is in /lib/syslib.)"
6559                 libc="$libc /lib/syslib"
6560         fi
6561 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
6562         echo "Your C library seems to be in $libc, as you said before."
6563 elif $test -r $incpath/usr/lib/libc$_a; then
6564         libc=$incpath/usr/lib/libc$_a;
6565         echo "Your C library seems to be in $libc.  That's fine."
6566 elif $test -r /lib/libc$_a; then
6567         libc=/lib/libc$_a;
6568         echo "Your C library seems to be in $libc.  You're normal."
6569 else
6570         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
6571                 :
6572         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
6573                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
6574         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
6575                 :
6576         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
6577                 :
6578         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
6579                 :
6580         else
6581                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
6582         fi
6583         if $test -r "$tans"; then
6584                 echo "Your C library seems to be in $tans, of all places."
6585                 libc=$tans
6586         else
6587                 libc='blurfl'
6588         fi
6589 fi
6590 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
6591         dflt="$libc"
6592         cat <<EOM
6593
6594 If the guess above is wrong (which it might be if you're using a strange
6595 compiler, or your machine supports multiple models), you can override it here.
6596
6597 EOM
6598 else
6599         dflt=''
6600         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
6601         cat >&4 <<EOM
6602 I can't seem to find your C library.  I've looked in the following places:
6603
6604 EOM
6605         $sed 's/^/      /' libpath
6606         cat <<EOM
6607
6608 None of these seems to contain your C library. I need to get its name...
6609
6610 EOM
6611 fi
6612 fn=f
6613 rp='Where is your C library?'
6614 . ./getfile
6615 libc="$ans"
6616
6617 echo " "
6618 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
6619 set X `cat libnames`
6620 shift
6621 xxx=files
6622 case $# in 1) xxx=file; esac
6623 echo "Extracting names from the following $xxx for later perusal:" >&4
6624 echo " "
6625 $sed 's/^/      /' libnames >&4
6626 echo " "
6627 $echo $n "This may take a while...$c" >&4
6628
6629 for file in $*; do
6630         case $file in
6631         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
6632         *) $nm $nm_opt $file 2>/dev/null;;
6633         esac
6634 done >libc.tmp
6635
6636 $echo $n ".$c"
6637 $grep fprintf libc.tmp > libc.ptf
6638 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
6639 xrun='eval "<libc.tmp $com >libc.list"; echo "done." >&4'
6640 xxx='[ADTSIWi]'
6641 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *//p'";\
6642         eval $xscan;\
6643         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6644                 eval $xrun
6645 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
6646         eval $xscan;\
6647         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6648                 eval $xrun
6649 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
6650         eval $xscan;\
6651         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6652                 eval $xrun
6653 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
6654         eval $xscan;\
6655         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6656                 eval $xrun
6657 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
6658         eval $xscan;\
6659         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6660                 eval $xrun
6661 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
6662         eval $xscan;\
6663         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6664                 eval $xrun
6665 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
6666                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
6667         eval $xscan;\
6668         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6669                 eval $xrun
6670 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
6671         eval $xscan;\
6672         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6673                 eval $xrun
6674 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
6675         eval $xscan;\
6676         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6677                 eval $xrun
6678 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
6679         eval $xscan;\
6680         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6681                 eval $xrun
6682 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
6683         eval $xscan;\
6684         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6685                 eval $xrun
6686 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
6687         eval $xscan;\
6688         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6689                 eval $xrun
6690 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
6691         eval $xscan;\
6692         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6693                 eval $xrun
6694 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
6695         eval $xscan;\
6696         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6697                 eval $xrun
6698 else
6699         $nm -p $* 2>/dev/null >libc.tmp
6700         $grep fprintf libc.tmp > libc.ptf
6701         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
6702                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
6703         then
6704                 nm_opt='-p'
6705                 eval $xrun
6706         else
6707                 echo " "
6708                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
6709                 com=''
6710                 if $ar t $libc > libc.tmp && \
6711                         $contains '^fprintf$' libc.tmp >/dev/null 2>&1
6712                 then
6713                         for thisname in $libnames $libc; do
6714                                 $ar t $thisname >>libc.tmp
6715                         done
6716                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
6717                         echo "Ok." >&4
6718                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
6719                         for thisname in $libnames $libc; do
6720                                 $ar tv $thisname >>libc.tmp
6721                                 emximp -o tmp.imp $thisname \
6722                                     2>/dev/null && \
6723                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
6724                                     < tmp.imp >>libc.tmp
6725                                 $rm -f tmp.imp
6726                         done
6727                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
6728                         echo "Ok." >&4
6729                 else
6730                         echo "$ar didn't seem to work right." >&4
6731                         echo "Maybe this is a Cray...trying bld instead..." >&4
6732                         if  bld t $libc | \
6733                                 $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list &&
6734                                 $test -s libc.list
6735                         then
6736                                 for thisname in $libnames; do
6737                                         bld t $libnames | \
6738                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
6739                                         $ar t $thisname >>libc.tmp
6740                                 done
6741                                 echo "Ok." >&4
6742                         else
6743                                 echo "That didn't work either.  Giving up." >&4
6744                                 exit 1
6745                         fi
6746                 fi
6747         fi
6748 fi
6749 nm_extract="$com"
6750 case "$PASE" in
6751 define)
6752     echo " "
6753     echo "Since you are compiling for PASE, extracting more symbols from libc.a ...">&4
6754     dump -Tv /lib/libc.a | awk '$7 == "/unix" {print $5 " " $8}' | grep "^SV" | awk '{print $2}' >> libc.list
6755     ;;
6756 *)  if $test -f /lib/syscalls.exp; then
6757         echo " "
6758         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
6759         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' \
6760                 /lib/syscalls.exp >>libc.list
6761     fi
6762     ;;
6763 esac
6764 ;;
6765 esac
6766 $rm -f libnames libpath
6767
6768 : Check if we are using C++
6769 echo " "
6770 echo "Checking for C++..." >&4
6771 $cat >try.c <<'EOCP'
6772 #include <stdio.h>
6773 int main(void)
6774 {
6775 #ifdef __cplusplus
6776     return 0;
6777 #else
6778     return 1;
6779 #endif
6780 }
6781 EOCP
6782 set try
6783 if eval $compile_ok && $run ./try; then
6784         val="$define"
6785         echo "You are using a C++ compiler."
6786 else
6787         val="$undef"
6788         echo "You are not using a C++ compiler."
6789 fi
6790 $rm_try cplusplus$$
6791 set d_cplusplus
6792 eval $setvar
6793
6794 : is a C symbol defined?
6795 csym='tlook=$1;
6796 case "$3" in
6797 -v) tf=libc.tmp; tdc="";;
6798 -a) tf=libc.tmp; tdc="[]";;
6799 *) tlook="^$1\$"; tf=libc.list; tdc="()";;
6800 esac;
6801 case "$d_cplusplus" in
6802     $define)    extern_C="extern \"C\"" ;;
6803     *)          extern_C="extern"       ;;
6804 esac;
6805 tx=yes;
6806 case "$reuseval-$4" in
6807 true-) ;;
6808 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
6809 esac;
6810 case "$tx" in
6811 yes)
6812         tval=false;
6813         if $test "$runnm" = true; then
6814                 if $contains $tlook $tf >/dev/null 2>&1; then
6815                         tval=true;
6816                 elif $test "$mistrustnm" = compile -o "$mistrustnm" = run; then
6817                         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;
6818                         $cc -o try $optimize $ccflags $ldflags try.c >/dev/null 2>&1 $libs && tval=true;
6819                         $test "$mistrustnm" = run -a -x try && { $run ./try$_exe >/dev/null 2>&1 || tval=false; };
6820                         $rm_try;
6821                 fi;
6822         else
6823                 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;
6824                 $cc -o try $optimize $ccflags $ldflags try.c $libs >/dev/null 2>&1 && tval=true;
6825                 $rm_try;
6826         fi;
6827         ;;
6828 *)
6829         case "$tval" in
6830         $define) tval=true;;
6831         *) tval=false;;
6832         esac;
6833         ;;
6834 esac;
6835 eval "$2=$tval"'
6836
6837 : define an is-in-libc? function
6838 inlibc='echo " "; td=$define; tu=$undef;
6839 sym=$1; var=$2; eval "was=\$$2";
6840 tx=yes;
6841 case "$reuseval$was" in
6842 true) ;;
6843 true*) tx=no;;
6844 esac;
6845 case "$tx" in
6846 yes)
6847         set $sym tres -f;
6848         eval $csym;
6849         case "$tres" in
6850         true)
6851                 echo "$sym() found." >&4;
6852                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6853         *)
6854                 echo "$sym() NOT found." >&4;
6855                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6856         esac;;
6857 *)
6858         case "$was" in
6859         $define) echo "$sym() found." >&4;;
6860         *) echo "$sym() NOT found." >&4;;
6861         esac;;
6862 esac'
6863
6864 : check for length of double
6865 echo " "
6866 case "$doublesize" in
6867 '')
6868         echo "Checking to see how big your double precision numbers are..." >&4
6869         $cat >try.c <<EOCP
6870 #include <stdio.h>
6871 #$i_stdlib I_STDLIB
6872 #ifdef I_STDLIB
6873 #include <stdlib.h>
6874 #endif
6875 int main()
6876 {
6877     printf("%d\n", (int)sizeof(double));
6878     exit(0);
6879 }
6880 EOCP
6881         set try
6882         if eval $compile_ok; then
6883                 doublesize=`$run ./try`
6884                 echo "Your double is $doublesize bytes long."
6885         else
6886                 dflt='8'
6887                 echo "(I can't seem to compile the test program.  Guessing...)"
6888                 rp="What is the size of a double precision number (in bytes)?"
6889                 . ./myread
6890                 doublesize="$ans"
6891         fi
6892         ;;
6893 esac
6894 $rm_try
6895
6896 : see if this is a float.h system
6897 set float.h i_float
6898 eval $inhdr
6899
6900 : check for long doubles
6901 echo " "
6902 echo "Checking to see if you have long double..." >&4
6903 echo 'int main() { long double x = 7.0; }' > try.c
6904 set try
6905 if eval $compile; then
6906         val="$define"
6907         echo "You have long double."
6908 else
6909         val="$undef"
6910         echo "You do not have long double."
6911 fi
6912 $rm_try
6913 set d_longdbl
6914 eval $setvar
6915
6916 : see if ldexpl exists
6917 set ldexpl d_ldexpl
6918 eval $inlibc
6919
6920 : check for length of long double
6921 case "${d_longdbl}${longdblsize}" in
6922 $define)
6923         echo " "
6924         echo "Checking to see how big your long doubles are..." >&4
6925         $cat >try.c <<'EOCP'
6926 #include <stdio.h>
6927 int main()
6928 {
6929         printf("%d\n", sizeof(long double));
6930 }
6931 EOCP
6932         set try
6933         set try
6934         if eval $compile; then
6935                 longdblsize=`$run ./try`
6936                 echo "Your long doubles are $longdblsize bytes long."
6937         else
6938                 dflt='8'
6939                 echo " "
6940                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
6941                 rp="What is the size of a long double (in bytes)?"
6942                 . ./myread
6943                 longdblsize="$ans"
6944         fi
6945         if $test "X$doublesize" = "X$longdblsize"; then
6946                 echo "That isn't any different from an ordinary double."
6947                 echo "I'll keep your setting anyway, but you may see some"
6948                 echo "harmless compilation warnings."
6949         fi
6950         ;;
6951 esac
6952 $rm_try
6953
6954 $echo "Checking the kind of long doubles you have..." >&4
6955 case "$d_longdbl" in
6956 define)
6957 $cat <<EOP >try.c
6958 #$i_float I_FLOAT
6959 #$i_stdlib I_STDLIB
6960 #define LONGDBLSIZE $longdblsize
6961 #define DOUBLESIZE $doublesize
6962 #ifdef I_FLOAT
6963 #include <float.h>
6964 #endif
6965 #ifdef I_STDLIB
6966 #include <stdlib.h>
6967 #endif
6968 #include <stdio.h>
6969 static const long double d = -0.1L;
6970 int main() {
6971   unsigned const char* b = (unsigned const char*)(&d);
6972 #if DOUBLESIZE == LONGDBLSIZE
6973   printf("0\n"); /* if it floats like double */
6974   exit(0);
6975 #endif
6976 #if (LDBL_MANT_DIG == 113 || FLT128_MANT_DIG == 113) && LONGDBLSIZE == 16
6977   if (b[0] == 0x9A && b[1] == 0x99 && b[15] == 0xBF) {
6978     /* IEEE 754 128-bit little-endian */
6979     printf("1\n");
6980     exit(0);
6981   }
6982   if (b[0] == 0xBF && b[14] == 0x99 && b[15] == 0x9A) {
6983     /* IEEE 128-bit big-endian, e.g. solaris sparc */
6984     printf("2\n");
6985     exit(0);
6986   }
6987 #endif
6988 /* For alignment 32-bit platforms have the 80 bits in 12 bytes,
6989  * while 64-bits platforms have it in 16 bytes.  The trailing bytes