Revert "re_intuit_start(): rename some local vars"
[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 should use metaconfig. Perl uses a modified version of this
17 # tool, and this, together with the metaconfig units, are available
18 # in the git repository:
19 #    $ git clone https://github.com/perl5-metaconfig/metaconfig metaconfig
20 # The original dist package (including metaconfig) is available on github:
21 #    $ git clone https://github.com/rmanfredi/dist.git dist-git
22 #
23 # Though this script was generated by metaconfig from metaunits, it is
24 # OK to send patches against Configure itself (but not to commit them
25 # to blead). It's up to
26 # the Configure maintainers to backport the patch to the metaunits if it
27 # is accepted. Exceptions to this rule, and more information, is in
28 # Porting/pumpkin.pod.
29
30 # Generated using [metaconfig 3.5 PL0]
31 # (with additional metaconfig patches by perlbug@perl.org)
32
33 cat >c1$$ <<EOF
34 ARGGGHHHH!!!!!
35
36 SCO csh still thinks true is false.  Write to SCO today and tell them that next
37 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
38
39 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
40 we'd have to do is go in and swap the && and || tokens, wherever they are.)
41
42 [End of diatribe. We now return you to your regularly scheduled programming...]
43 EOF
44 cat >c2$$ <<EOF
45
46 OOPS!  You naughty creature!  You didn't run Configure with sh!
47 I will attempt to remedy the situation by running sh for you...
48 EOF
49
50 true || cat c1$$ c2$$
51 true || exec sh $0 $argv:q
52
53 (exit $?0) || cat c2$$
54 (exit $?0) || exec sh $0 $argv:q
55 rm -f c1$$ c2$$
56
57 if test -f /dev/cputype -a -f /dev/drivers -a -f /dev/osversion; then
58         cat <<EOF
59 ***
60 *** I'm sorry but this system looks like Plan 9 and Plan 9 doesn't do
61 *** Configure that well.  (Plan 9 is close to UNIX but not close enough.)
62 *** Please read the README.plan9 for further instructions.
63 *** Cannot continue, aborting.
64 ***
65 EOF
66         exit 1
67 fi
68
69 if test -f /sys/utilities/MultiView ; then
70         # AmigaOS, test -c for /dev/null is not useful
71         :
72 elif test ! -c /dev/null ; then
73         cat <<EOF
74 ***
75 *** I'm sorry, but /dev/null appears to be a file rather than a device.
76 *** Please consult your operating sytem's notes for making a device
77 *** in /dev.
78 *** Cannot continue, aborting.
79 ***
80 EOF
81         exit 1
82 fi
83
84 : compute my invocation name
85 me=$0
86 case "$0" in
87 */*)
88         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
89         test "$me" || me=$0
90         ;;
91 esac
92
93 : Proper separator for the PATH environment variable
94 p_=:
95 : On OS/2 this directory should exist if this is not floppy only system ":-]"
96 if test -d c:/. || ( uname -a | grep -i 'os\(/\|\)2' 2>&1 ) 2>&1 >/dev/null ; then
97         if test -n "$OS2_SHELL"; then
98                 p_=\;
99                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
100                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
101                 is_os2=yes
102         elif test -n "$DJGPP"; then
103                 case "X${MACHTYPE:-nonesuchmach}" in
104                 *cygwin|*msys) ;;
105                 *) p_=\; ;;
106                 esac
107         fi
108 fi
109
110 : Proper PATH setting
111 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
112 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
113 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
114 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
115 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
116 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /opt/ansic/bin /usr/ccs/bin"
117 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
118 paths="$paths /sbin /usr/sbin /usr/libexec"
119 paths="$paths /system/gnu_library/bin"
120
121 for p in $paths
122 do
123         case "$p_$PATH$p_" in
124         *$p_$p$p_*) ;;
125         *) test -d $p && PATH=$PATH$p_$p ;;
126         esac
127 done
128
129 PATH=.$p_$PATH
130 export PATH
131
132 : shall we be using ksh?
133 inksh=''
134 needksh=''
135 avoidksh=''
136 newsh=/bin/ksh
137 changesh=''
138 if (PATH=.; alias -x) >/dev/null 2>&1; then
139                 inksh=true
140 fi
141 if test -f /hp-ux -a -f /bin/ksh; then
142         needksh='to avoid sh bug in "here document" expansion'
143 fi
144 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
145         if test X`/usr/bin/uname -v` = X4; then
146                 avoidksh="to avoid AIX 4's /bin/sh"
147                 newsh=/usr/bin/bsh
148         fi
149 fi
150 if test -f /osf_boot -a -f /usr/sbin/setld; then
151         if test X`/usr/bin/uname -s` = XOSF1; then
152                 avoidksh="to avoid Digital UNIX' ksh"
153                 newsh=/bin/sh
154                 unset BIN_SH
155         fi
156 fi
157 case "$inksh/$needksh" in
158 /[a-z]*)
159                 ENV=''
160                 changesh=true
161                 reason="$needksh"
162         ;;
163 esac
164 case "$inksh/$avoidksh" in
165 true/[a-z]*)
166         changesh=true
167         reason="$avoidksh"
168         ;;
169 esac
170 case "$inksh/$needksh-$avoidksh-" in
171 true/--)
172                 cat <<EOM
173 (I see you are using the Korn shell.  Some ksh's blow up on $me,
174 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
175 EOM
176         ;;
177 esac
178 case "$changesh" in
179 true)
180         export newsh
181         echo "(Feeding myself to $newsh $reason.)"
182         case "$0" in
183         Configure|*/Configure) exec $newsh $0 "$@";;
184         *) exec $newsh Configure "$@";;
185         esac
186         ;;
187 esac
188 test -x "${newsh}" || unset newsh
189
190 : if needed, set CDPATH to a harmless value that is not chatty
191 : avoid bash 2.02 problems with empty CDPATH.
192 case "$CDPATH" in
193 '')     ;;
194 *)      case "$SHELL" in
195         *bash*) CDPATH='.' ;;
196         *) CDPATH='' ;;
197         esac
198         ;;
199 esac
200
201 : Configure runs within the UU subdirectory
202 test -d UU || mkdir UU
203 cd UU && rm -f ./*
204
205 ccname=''
206 ccversion=''
207 ccsymbols=''
208 cppccsymbols=''
209 cppsymbols=''
210 from=''
211 hostgenerate=''
212 hostosname=''
213 hostperl=''
214 run=''
215 targetarch=''
216 targetdir=''
217 targetenv=''
218 targethost=''
219 targetmkdir=''
220 targetport=''
221 to=''
222 usecrosscompile=''
223 extern_C=''
224 mistrustnm=''
225 usedevel=''
226 perllibs=''
227 dynamic_ext=''
228 extensions=''
229 known_extensions=''
230 nonxs_ext=''
231 static_ext=''
232 useopcode=''
233 useposix=''
234 extras=''
235 d_bsd=''
236 d_eunice=''
237 d_xenix=''
238 eunicefix=''
239 ar=''
240 awk=''
241 bash=''
242 bison=''
243 byacc=''
244 cat=''
245 chgrp=''
246 chmod=''
247 chown=''
248 comm=''
249 compress=''
250 cp=''
251 cpio=''
252 cpp=''
253 csh=''
254 date=''
255 echo=''
256 egrep=''
257 emacs=''
258 expr=''
259 find=''
260 flex=''
261 gmake=''
262 grep=''
263 gzip=''
264 inews=''
265 ksh=''
266 less=''
267 line=''
268 lint=''
269 ln=''
270 lp=''
271 lpr=''
272 ls=''
273 mail=''
274 mailx=''
275 make=''
276 mkdir=''
277 more=''
278 mv=''
279 nm=''
280 nroff=''
281 perl=''
282 pg=''
283 pmake=''
284 pr=''
285 rm=''
286 rmail=''
287 sed=''
288 sendmail=''
289 shar=''
290 sleep=''
291 smail=''
292 sort=''
293 submit=''
294 tail=''
295 tar=''
296 tbl=''
297 tee=''
298 test=''
299 touch=''
300 tr=''
301 troff=''
302 uname=''
303 uniq=''
304 uuname=''
305 vi=''
306 zcat=''
307 zip=''
308 full_ar=''
309 full_sed=''
310 libswanted=''
311 hint=''
312 myuname=''
313 osname=''
314 osvers=''
315 Author=''
316 Date=''
317 Header=''
318 Id=''
319 Locker=''
320 Log=''
321 RCSfile=''
322 Revision=''
323 Source=''
324 State=''
325 sysroot=''
326 _a=''
327 _exe=''
328 _o=''
329 archobjs=''
330 exe_ext=''
331 firstmakefile=''
332 lib_ext=''
333 obj_ext=''
334 path_sep=''
335 rm_try=''
336 afs=''
337 afsroot=''
338 alignbytes=''
339 archlib=''
340 archlibexp=''
341 d_archlib=''
342 installarchlib=''
343 archname=''
344 myarchname=''
345 useversionedarchname=''
346 d_atolf=''
347 d_atoll=''
348 baserev=''
349 bin=''
350 binexp=''
351 initialinstalllocation=''
352 installbin=''
353 userelocatableinc=''
354 byteorder=''
355 cc=''
356 ccflags=''
357 cppflags=''
358 ldflags=''
359 lkflags=''
360 locincpth=''
361 optimize=''
362 cf_email=''
363 cf_by=''
364 cf_time=''
365 charbits=''
366 charsize=''
367 contains=''
368 cpp_stuff=''
369 cpplast=''
370 cppminus=''
371 cpprun=''
372 cppstdin=''
373 d__fwalk=''
374 d_access=''
375 d_accessx=''
376 d_acosh=''
377 d_aintl=''
378 d_alarm=''
379 asctime_r_proto=''
380 d_asctime_r=''
381 d_asinh=''
382 d_atanh=''
383 d_attribute_deprecated=''
384 d_attribute_format=''
385 d_attribute_malloc=''
386 d_attribute_nonnull=''
387 d_attribute_noreturn=''
388 d_attribute_pure=''
389 d_attribute_unused=''
390 d_attribute_warn_unused_result=''
391 d_printf_format_null=''
392 d_backtrace=''
393 d_builtin_choose_expr=''
394 d_builtin_expect=''
395 d_builtin_add_overflow=''
396 d_builtin_mul_overflow=''
397 d_builtin_sub_overflow=''
398 d_c99_variadic_macros=''
399 d_casti32=''
400 castflags=''
401 d_castneg=''
402 d_cbrt=''
403 d_chown=''
404 d_chroot=''
405 d_chsize=''
406 d_class=''
407 d_clearenv=''
408 d_closedir=''
409 d_void_closedir=''
410 d_cmsghdr_s=''
411 d_const=''
412 d_copysign=''
413 d_copysignl=''
414 d_cplusplus=''
415 cryptlib=''
416 d_crypt=''
417 crypt_r_proto=''
418 d_crypt_r=''
419 d_csh=''
420 full_csh=''
421 d_ctermid=''
422 ctermid_r_proto=''
423 d_ctermid_r=''
424 ctime_r_proto=''
425 d_ctime_r=''
426 d_cuserid=''
427 d_dbminitproto=''
428 d_difftime=''
429 d_dir_dd_fd=''
430 d_dirfd=''
431 d_dladdr=''
432 d_dlerror=''
433 d_dlopen=''
434 d_dlsymun=''
435 d_dosuid=''
436 d_suidsafe=''
437 d_drand48_r=''
438 drand48_r_proto=''
439 d_drand48proto=''
440 d_dup2=''
441 d_eaccess=''
442 d_endgrent=''
443 d_endgrent_r=''
444 endgrent_r_proto=''
445 d_endhent=''
446 d_endhostent_r=''
447 endhostent_r_proto=''
448 d_endnent=''
449 d_endnetent_r=''
450 endnetent_r_proto=''
451 d_endpent=''
452 d_endprotoent_r=''
453 endprotoent_r_proto=''
454 d_endpwent=''
455 d_endpwent_r=''
456 endpwent_r_proto=''
457 d_endsent=''
458 d_endservent_r=''
459 endservent_r_proto=''
460 d_erf=''
461 d_erfc=''
462 d_exp2=''
463 d_expm1=''
464 d_faststdio=''
465 d_fchdir=''
466 d_fchmod=''
467 d_fchown=''
468 d_fcntl=''
469 d_fcntl_can_lock=''
470 d_fd_macros=''
471 d_fd_set=''
472 d_fds_bits=''
473 d_fdclose=''
474 d_fdim=''
475 d_fegetround=''
476 d_fgetpos=''
477 d_finite=''
478 d_finitel=''
479 d_flexfnam=''
480 d_flock=''
481 d_flockproto=''
482 d_fma=''
483 d_fmax=''
484 d_fmin=''
485 d_fork=''
486 d_fp_class=''
487 d_fp_classl=''
488 d_fpclass=''
489 d_fp_classify=''
490 d_fpclassify=''
491 d_fpclassl=''
492 d_fpgetround=''
493 d_fpos64_t=''
494 d_frexpl=''
495 d_fs_data_s=''
496 d_fchmodat=''
497 d_linkat=''
498 d_openat=''
499 d_renameat=''
500 d_unlinkat=''
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_gai_strerror=''
510 d_Gconvert=''
511 d_getaddrinfo=''
512 d_getcwd=''
513 d_getespwnam=''
514 d_getfsstat=''
515 d_getgrent=''
516 d_getgrent_r=''
517 getgrent_r_proto=''
518 d_getgrgid_r=''
519 getgrgid_r_proto=''
520 d_getgrnam_r=''
521 getgrnam_r_proto=''
522 d_getgrps=''
523 d_gethbyaddr=''
524 d_gethbyname=''
525 d_gethent=''
526 aphostname=''
527 d_gethname=''
528 d_phostname=''
529 d_uname=''
530 d_gethostbyaddr_r=''
531 gethostbyaddr_r_proto=''
532 d_gethostbyname_r=''
533 gethostbyname_r_proto=''
534 d_gethostent_r=''
535 gethostent_r_proto=''
536 d_gethostprotos=''
537 d_getitimer=''
538 d_getlogin=''
539 d_getlogin_r=''
540 getlogin_r_proto=''
541 d_getmnt=''
542 d_getmntent=''
543 d_getnameinfo=''
544 d_getnbyaddr=''
545 d_getnbyname=''
546 d_getnent=''
547 d_getnetbyaddr_r=''
548 getnetbyaddr_r_proto=''
549 d_getnetbyname_r=''
550 getnetbyname_r_proto=''
551 d_getnetent_r=''
552 getnetent_r_proto=''
553 d_getnetprotos=''
554 d_getpagsz=''
555 d_getpent=''
556 d_getpgid=''
557 d_getpgrp2=''
558 d_bsdgetpgrp=''
559 d_getpgrp=''
560 d_getppid=''
561 d_getprior=''
562 d_getpbyname=''
563 d_getpbynumber=''
564 d_getprotobyname_r=''
565 getprotobyname_r_proto=''
566 d_getprotobynumber_r=''
567 getprotobynumber_r_proto=''
568 d_getprotoent_r=''
569 getprotoent_r_proto=''
570 d_getprotoprotos=''
571 d_getprpwnam=''
572 d_getpwent=''
573 d_getpwent_r=''
574 getpwent_r_proto=''
575 d_getpwnam_r=''
576 getpwnam_r_proto=''
577 d_getpwuid_r=''
578 getpwuid_r_proto=''
579 d_getsent=''
580 d_getservbyname_r=''
581 getservbyname_r_proto=''
582 d_getservbyport_r=''
583 getservbyport_r_proto=''
584 d_getservent_r=''
585 getservent_r_proto=''
586 d_getservprotos=''
587 d_getspnam=''
588 d_getspnam_r=''
589 getspnam_r_proto=''
590 d_getsbyname=''
591 d_getsbyport=''
592 d_gmtime_r=''
593 gmtime_r_proto=''
594 d_gnulibc=''
595 gnulibc_version=''
596 d_hasmntopt=''
597 d_htonl=''
598 d_hypot=''
599 d_ilogb=''
600 d_ilogbl=''
601 d_inetaton=''
602 d_inetntop=''
603 d_inetpton=''
604 d_int64_t=''
605 d_isascii=''
606 d_isblank=''
607 d_isfinite=''
608 d_isfinitel=''
609 d_isinf=''
610 d_isinfl=''
611 d_isless=''
612 d_isnan=''
613 d_isnanl=''
614 d_isnormal=''
615 d_j0=''
616 d_j0l=''
617 d_killpg=''
618 d_lc_monetary_2008=''
619 d_lchown=''
620 d_ldbl_dig=''
621 d_lgamma=''
622 d_lgamma_r=''
623 d_libm_lib_version=''
624 d_link=''
625 d_llrint=''
626 d_llrintl=''
627 d_llround=''
628 d_llroundl=''
629 d_localeconv_l=''
630 d_localtime_r=''
631 d_localtime_r_needs_tzset=''
632 localtime_r_proto=''
633 d_locconv=''
634 d_lockf=''
635 d_log1p=''
636 d_log2=''
637 d_logb=''
638 d_ldexpl=''
639 d_long_double_style_ieee=''
640 d_long_double_style_ieee_doubledouble=''
641 d_long_double_style_ieee_extended=''
642 d_long_double_style_ieee_std=''
643 d_long_double_style_vax=''
644 d_longdbl=''
645 longdblkind=''
646 longdblsize=''
647 d_longlong=''
648 longlongsize=''
649 d_lrint=''
650 d_lrintl=''
651 d_lround=''
652 d_lroundl=''
653 d_lseekproto=''
654 d_lstat=''
655 d_madvise=''
656 d_malloc_good_size=''
657 d_malloc_size=''
658 d_mblen=''
659 d_mbrlen=''
660 d_mbrtowc=''
661 d_mbstowcs=''
662 d_mbtowc=''
663 d_memmem=''
664 d_memrchr=''
665 d_mkdir=''
666 d_mkdtemp=''
667 d_mkfifo=''
668 d_mkstemp=''
669 d_mkstemps=''
670 d_mktime=''
671 d_mmap=''
672 mmaptype=''
673 d_modfl=''
674 d_modflproto=''
675 d_mprotect=''
676 d_msg=''
677 d_msgctl=''
678 d_msgget=''
679 d_msghdr_s=''
680 d_msgrcv=''
681 d_msgsnd=''
682 d_msync=''
683 d_munmap=''
684 d_nan=''
685 d_nanosleep=''
686 d_nearbyint=''
687 d_duplocale=''
688 d_freelocale=''
689 d_newlocale=''
690 d_querylocale=''
691 d_uselocale=''
692 i_xlocale=''
693 d_nextafter=''
694 d_nexttoward=''
695 d_nice=''
696 d_nl_langinfo=''
697 d_thread_safe_nl_langinfo_l=''
698 d_off64_t=''
699 d_open3=''
700 d_fpathconf=''
701 d_pathconf=''
702 d_pause=''
703 d_pipe=''
704 d_poll=''
705 d_portable=''
706 d_prctl=''
707 d_prctl_set_name=''
708 d_procselfexe=''
709 procselfexe=''
710 d_old_pthread_create_joinable=''
711 old_pthread_create_joinable=''
712 d_pthread_atfork=''
713 d_pthread_attr_setscope=''
714 d_pthread_yield=''
715 d_sched_yield=''
716 sched_yield=''
717 d_ptrdiff_t=''
718 d_qgcvt=''
719 d_random_r=''
720 random_r_proto=''
721 d_readdir64_r=''
722 readdir64_r_proto=''
723 d_readdir=''
724 d_rewinddir=''
725 d_seekdir=''
726 d_telldir=''
727 d_readdir_r=''
728 readdir_r_proto=''
729 d_readlink=''
730 d_readv=''
731 d_recvmsg=''
732 d_re_comp=''
733 d_regcmp=''
734 d_regcomp=''
735 d_remainder=''
736 d_remquo=''
737 d_rename=''
738 d_rint=''
739 d_rmdir=''
740 d_round=''
741 d_sbrkproto=''
742 d_scalbn=''
743 d_scalbnl=''
744 d_select=''
745 d_sem=''
746 d_semctl=''
747 d_semget=''
748 d_semop=''
749 d_sendmsg=''
750 d_setegid=''
751 d_seteuid=''
752 d_setgrent=''
753 d_setgrent_r=''
754 setgrent_r_proto=''
755 d_setgrps=''
756 d_sethent=''
757 d_sethostent_r=''
758 sethostent_r_proto=''
759 d_setitimer=''
760 d_setlinebuf=''
761 d_setlocale=''
762 d_setlocale_r=''
763 setlocale_r_proto=''
764 d_setnent=''
765 d_setnetent_r=''
766 setnetent_r_proto=''
767 d_setpent=''
768 d_setpgid=''
769 d_setpgrp2=''
770 d_bsdsetpgrp=''
771 d_setpgrp=''
772 d_setprior=''
773 d_setproctitle=''
774 d_setprotoent_r=''
775 setprotoent_r_proto=''
776 d_setpwent=''
777 d_setpwent_r=''
778 setpwent_r_proto=''
779 d_setregid=''
780 d_setresgid=''
781 d_setresuid=''
782 d_setreuid=''
783 d_setrgid=''
784 d_setruid=''
785 d_setsent=''
786 d_setservent_r=''
787 setservent_r_proto=''
788 d_setsid=''
789 d_setvbuf=''
790 d_shm=''
791 d_shmat=''
792 d_shmatprototype=''
793 shmattype=''
794 d_shmctl=''
795 d_shmdt=''
796 d_shmget=''
797 d_sigaction=''
798 d_siginfo_si_addr=''
799 d_siginfo_si_band=''
800 d_siginfo_si_errno=''
801 d_siginfo_si_fd=''
802 d_siginfo_si_pid=''
803 d_siginfo_si_status=''
804 d_siginfo_si_uid=''
805 d_siginfo_si_value=''
806 d_signbit=''
807 d_sigprocmask=''
808 d_sigsetjmp=''
809 usesitecustomize=''
810 d_snprintf=''
811 d_vsnprintf=''
812 d_sockatmark=''
813 d_sockatmarkproto=''
814 d_ip_mreq=''
815 d_ip_mreq_source=''
816 d_ipv6_mreq=''
817 d_ipv6_mreq_source=''
818 d_msg_ctrunc=''
819 d_msg_dontroute=''
820 d_msg_oob=''
821 d_msg_peek=''
822 d_msg_proxy=''
823 d_oldsock=''
824 d_scm_rights=''
825 d_sin6_scope_id=''
826 d_sockaddr_in6=''
827 d_sockaddr_sa_len=''
828 d_socket=''
829 d_sockpair=''
830 sockethdr=''
831 socketlib=''
832 d_socklen_t=''
833 d_socks5_init=''
834 d_sqrtl=''
835 d_srand48_r=''
836 srand48_r_proto=''
837 d_srandom_r=''
838 srandom_r_proto=''
839 d_sresgproto=''
840 d_sresuproto=''
841 d_stat=''
842 d_statblks=''
843 d_statfs_f_flags=''
844 d_statfs_s=''
845 d_static_inline=''
846 perl_static_inline=''
847 d_fstatvfs=''
848 d_statvfs=''
849 d_stdio_cnt_lval=''
850 d_stdio_ptr_lval=''
851 d_stdio_ptr_lval_nochange_cnt=''
852 d_stdio_ptr_lval_sets_cnt=''
853 d_stdiobase=''
854 d_stdstdio=''
855 stdio_base=''
856 stdio_bufsiz=''
857 stdio_cnt=''
858 stdio_filbuf=''
859 stdio_ptr=''
860 d_strcoll=''
861 d_sysernlst=''
862 d_syserrlst=''
863 d_strerror_l=''
864 d_strerror_r=''
865 strerror_r_proto=''
866 d_strftime=''
867 d_strlcat=''
868 d_strlcpy=''
869 d_strnlen=''
870 d_strtod=''
871 d_strtol=''
872 d_strtold=''
873 d_strtold_l=''
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_wait4=''
925 d_waitpid=''
926 d_wcscmp=''
927 d_wcstombs=''
928 d_wcsxfrm=''
929 d_wctomb=''
930 d_writev=''
931 default_inc_excludes_dot=''
932 dlext=''
933 bin_ELF=''
934 cccdlflags=''
935 ccdlflags=''
936 dlsrc=''
937 ld=''
938 ld_can_script=''
939 lddlflags=''
940 usedl=''
941 doublesize=''
942 dtraceobject=''
943 dtracexnolibs=''
944 ebcdic=''
945 fflushNULL=''
946 fflushall=''
947 fpossize=''
948 fpostype=''
949 gccansipedantic=''
950 gccosandvers=''
951 gccversion=''
952 gidformat=''
953 gidsign=''
954 gidsize=''
955 gidtype=''
956 groupstype=''
957 h_fcntl=''
958 h_sysfile=''
959 html1dir=''
960 html1direxp=''
961 installhtml1dir=''
962 html3dir=''
963 html3direxp=''
964 installhtml3dir=''
965 i_arpainet=''
966 i_bfd=''
967 i_crypt=''
968 db_hashtype=''
969 db_prefixtype=''
970 db_version_major=''
971 db_version_minor=''
972 db_version_patch=''
973 i_db=''
974 i_dbm=''
975 i_rpcsvcdbm=''
976 d_dirnamlen=''
977 direntrytype=''
978 i_dirent=''
979 i_dlfcn=''
980 i_execinfo=''
981 i_fcntl=''
982 i_fenv=''
983 i_fp=''
984 i_fp_class=''
985 i_gdbm=''
986 d_grpasswd=''
987 i_grp=''
988 i_ieeefp=''
989 i_inttypes=''
990 i_langinfo=''
991 i_libutil=''
992 i_locale=''
993 i_machcthr=''
994 i_malloc=''
995 i_mallocmalloc=''
996 i_mntent=''
997 d_gdbm_ndbm_h_uses_prototypes=''
998 d_gdbmndbm_h_uses_prototypes=''
999 d_ndbm=''
1000 d_ndbm_h_uses_prototypes=''
1001 i_gdbm_ndbm=''
1002 i_gdbmndbm=''
1003 i_ndbm=''
1004 i_netdb=''
1005 i_neterrno=''
1006 i_netinettcp=''
1007 i_niin=''
1008 i_sysin=''
1009 i_poll=''
1010 i_prot=''
1011 i_pthread=''
1012 d_pwage=''
1013 d_pwchange=''
1014 d_pwclass=''
1015 d_pwcomment=''
1016 d_pwexpire=''
1017 d_pwgecos=''
1018 d_pwpasswd=''
1019 d_pwquota=''
1020 i_pwd=''
1021 i_quadmath=''
1022 i_shadow=''
1023 i_socks=''
1024 i_stdbool=''
1025 i_stdint=''
1026 i_stdlib=''
1027 i_sunmath=''
1028 i_sysaccess=''
1029 i_sysdir=''
1030 i_sysfile=''
1031 d_voidtty=''
1032 i_bsdioctl=''
1033 i_sysfilio=''
1034 i_sysioctl=''
1035 i_syssockio=''
1036 i_syslog=''
1037 i_sysmman=''
1038 i_sysmode=''
1039 i_sysmount=''
1040 i_sysndir=''
1041 i_sysparam=''
1042 i_syspoll=''
1043 i_sysresrc=''
1044 i_syssecrt=''
1045 i_sysselct=''
1046 i_sysstat=''
1047 i_sysstatfs=''
1048 i_sysstatvfs=''
1049 i_systimes=''
1050 i_systypes=''
1051 i_sysuio=''
1052 i_sysun=''
1053 i_sysutsname=''
1054 i_sysvfs=''
1055 i_syswait=''
1056 i_sgtty=''
1057 i_termio=''
1058 i_termios=''
1059 d_tm_tm_gmtoff=''
1060 d_tm_tm_zone=''
1061 i_systime=''
1062 i_systimek=''
1063 i_time=''
1064 timeincl=''
1065 i_unistd=''
1066 i_ustat=''
1067 i_utime=''
1068 i_vfork=''
1069 i_wchar=''
1070 d_inc_version_list=''
1071 inc_version_list=''
1072 inc_version_list_init=''
1073 doubleinfbytes=''
1074 doublenanbytes=''
1075 longdblinfbytes=''
1076 longdblnanbytes=''
1077 installprefix=''
1078 installprefixexp=''
1079 installstyle=''
1080 installusrbinperl=''
1081 intsize=''
1082 longsize=''
1083 shortsize=''
1084 issymlink=''
1085 libc=''
1086 ldlibpthname=''
1087 libperl=''
1088 shrpenv=''
1089 useshrplib=''
1090 glibpth=''
1091 incpth=''
1092 libpth=''
1093 loclibpth=''
1094 plibpth=''
1095 xlibpth=''
1096 ignore_versioned_solibs=''
1097 libs=''
1098 libsdirs=''
1099 libsfiles=''
1100 libsfound=''
1101 libspath=''
1102 lns=''
1103 d_PRIEUldbl=''
1104 d_PRIFUldbl=''
1105 d_PRIGUldbl=''
1106 d_PRIeldbl=''
1107 d_PRIfldbl=''
1108 d_PRIgldbl=''
1109 d_SCNfldbl=''
1110 d_double_has_inf=''
1111 d_double_has_nan=''
1112 d_double_has_negative_zero=''
1113 d_double_has_subnormals=''
1114 d_double_style_cray=''
1115 d_double_style_ibm=''
1116 d_double_style_ieee=''
1117 d_double_style_vax=''
1118 doublekind=''
1119 sPRIEUldbl=''
1120 sPRIFUldbl=''
1121 sPRIGUldbl=''
1122 sPRIeldbl=''
1123 sPRIfldbl=''
1124 sPRIgldbl=''
1125 sSCNfldbl=''
1126 lseeksize=''
1127 lseektype=''
1128 make_set_make=''
1129 d_mymalloc=''
1130 freetype=''
1131 mallocobj=''
1132 mallocsrc=''
1133 malloctype=''
1134 usemallocwrap=''
1135 usemymalloc=''
1136 installman1dir=''
1137 man1dir=''
1138 man1direxp=''
1139 man1ext=''
1140 installman3dir=''
1141 man3dir=''
1142 man3direxp=''
1143 man3ext=''
1144 doublemantbits=''
1145 longdblmantbits=''
1146 nvmantbits=''
1147 modetype=''
1148 multiarch=''
1149 mydomain=''
1150 myhostname=''
1151 phostname=''
1152 c=''
1153 n=''
1154 d_eofnblk=''
1155 eagain=''
1156 o_nonblock=''
1157 rd_nodata=''
1158 need_va_copy=''
1159 netdb_hlen_type=''
1160 netdb_host_type=''
1161 netdb_name_type=''
1162 netdb_net_type=''
1163 groupcat=''
1164 hostcat=''
1165 passcat=''
1166 orderlib=''
1167 ranlib=''
1168 d_perl_otherlibdirs=''
1169 otherlibdirs=''
1170 package=''
1171 spackage=''
1172 pager=''
1173 api_revision=''
1174 api_subversion=''
1175 api_version=''
1176 api_versionstring=''
1177 patchlevel=''
1178 perl_patchlevel=''
1179 revision=''
1180 subversion=''
1181 version=''
1182 version_patchlevel_string=''
1183 perl5=''
1184 perladmin=''
1185 perlpath=''
1186 d_nv_preserves_uv=''
1187 d_nv_zero_is_allbits_zero=''
1188 i16size=''
1189 i16type=''
1190 i32size=''
1191 i32type=''
1192 i64size=''
1193 i64type=''
1194 i8size=''
1195 i8type=''
1196 ivsize=''
1197 ivtype=''
1198 nv_overflows_integers_at=''
1199 nv_preserves_uv_bits=''
1200 nvsize=''
1201 nvtype=''
1202 u16size=''
1203 u16type=''
1204 u32size=''
1205 u32type=''
1206 u64size=''
1207 u64type=''
1208 u8size=''
1209 u8type=''
1210 uvsize=''
1211 uvtype=''
1212 ivdformat=''
1213 nvEUformat=''
1214 nvFUformat=''
1215 nvGUformat=''
1216 nveformat=''
1217 nvfformat=''
1218 nvgformat=''
1219 uvXUformat=''
1220 uvoformat=''
1221 uvuformat=''
1222 uvxformat=''
1223 pidtype=''
1224 prefix=''
1225 prefixexp=''
1226 installprivlib=''
1227 privlib=''
1228 privlibexp=''
1229 ptrsize=''
1230 d_PRIXU64=''
1231 d_PRId64=''
1232 d_PRIi64=''
1233 d_PRIo64=''
1234 d_PRIu64=''
1235 d_PRIx64=''
1236 sPRIXU64=''
1237 sPRId64=''
1238 sPRIi64=''
1239 sPRIo64=''
1240 sPRIu64=''
1241 sPRIx64=''
1242 d_quad=''
1243 quadkind=''
1244 quadtype=''
1245 uquadtype=''
1246 drand01=''
1247 randbits=''
1248 randfunc=''
1249 randseedtype=''
1250 seedfunc=''
1251 installscript=''
1252 scriptdir=''
1253 scriptdirexp=''
1254 selectminbits=''
1255 selecttype=''
1256 sh=''
1257 targetsh=''
1258 sig_count=''
1259 sig_name=''
1260 sig_name_init=''
1261 sig_num=''
1262 sig_num_init=''
1263 sig_size=''
1264 d_sitearch=''
1265 installsitearch=''
1266 sitearch=''
1267 sitearchexp=''
1268 installsitebin=''
1269 sitebin=''
1270 sitebinexp=''
1271 installsitehtml1dir=''
1272 sitehtml1dir=''
1273 sitehtml1direxp=''
1274 installsitehtml3dir=''
1275 sitehtml3dir=''
1276 sitehtml3direxp=''
1277 installsitelib=''
1278 sitelib=''
1279 sitelib_stem=''
1280 sitelibexp=''
1281 installsiteman1dir=''
1282 siteman1dir=''
1283 siteman1direxp=''
1284 installsiteman3dir=''
1285 siteman3dir=''
1286 siteman3direxp=''
1287 siteprefix=''
1288 siteprefixexp=''
1289 installsitescript=''
1290 sitescript=''
1291 sitescriptexp=''
1292 sizesize=''
1293 sizetype=''
1294 d_libname_unique=''
1295 so=''
1296 socksizetype=''
1297 sharpbang=''
1298 shsharp=''
1299 spitshell=''
1300 src=''
1301 ssizetype=''
1302 st_ino_sign=''
1303 st_ino_size=''
1304 startperl=''
1305 startsh=''
1306 stdchar=''
1307 d_stdio_stream_array=''
1308 stdio_stream_array=''
1309 sysman=''
1310 sGMTIME_max=''
1311 sGMTIME_min=''
1312 sLOCALTIME_max=''
1313 sLOCALTIME_min=''
1314 trnl=''
1315 uidformat=''
1316 uidsign=''
1317 uidsize=''
1318 uidtype=''
1319 archname64=''
1320 use64bitall=''
1321 use64bitint=''
1322 usecbacktrace=''
1323 dtrace=''
1324 usedtrace=''
1325 usefaststdio=''
1326 usekernprocpathname=''
1327 ccflags_uselargefiles=''
1328 ldflags_uselargefiles=''
1329 libswanted_uselargefiles=''
1330 uselargefiles=''
1331 uselongdouble=''
1332 usemorebits=''
1333 usemultiplicity=''
1334 nm_opt=''
1335 nm_so_opt=''
1336 runnm=''
1337 usenm=''
1338 usensgetexecutablepath=''
1339 useperlio=''
1340 usequadmath=''
1341 usesocks=''
1342 d_oldpthreads=''
1343 use5005threads=''
1344 useithreads=''
1345 usereentrant=''
1346 usethreads=''
1347 incpath=''
1348 mips_type=''
1349 usrinc=''
1350 d_vendorarch=''
1351 installvendorarch=''
1352 vendorarch=''
1353 vendorarchexp=''
1354 d_vendorbin=''
1355 installvendorbin=''
1356 vendorbin=''
1357 vendorbinexp=''
1358 installvendorhtml1dir=''
1359 vendorhtml1dir=''
1360 vendorhtml1direxp=''
1361 installvendorhtml3dir=''
1362 vendorhtml3dir=''
1363 vendorhtml3direxp=''
1364 d_vendorlib=''
1365 installvendorlib=''
1366 vendorlib=''
1367 vendorlib_stem=''
1368 vendorlibexp=''
1369 installvendorman1dir=''
1370 vendorman1dir=''
1371 vendorman1direxp=''
1372 installvendorman3dir=''
1373 vendorman3dir=''
1374 vendorman3direxp=''
1375 usevendorprefix=''
1376 vendorprefix=''
1377 vendorprefixexp=''
1378 d_vendorscript=''
1379 installvendorscript=''
1380 vendorscript=''
1381 vendorscriptexp=''
1382 versiononly=''
1383 yacc=''
1384 yaccflags=''
1385 CONFIG=''
1386
1387 : Detect odd OSs
1388 define='define'
1389 undef='undef'
1390 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1391 rmlist=''
1392
1393 : We must find out about Eunice early
1394 eunicefix=':'
1395 if test -f /etc/unixtovms; then
1396         eunicefix=/etc/unixtovms
1397 fi
1398 if test -f /etc/unixtovms.exe; then
1399         eunicefix=/etc/unixtovms.exe
1400 fi
1401
1402 : Set executable suffix now -- needed before hints available
1403 if test -f "/libs/version.library"; then
1404 : Amiga OS
1405     _exe=""
1406 elif test -f "/system/gnu_library/bin/ar.pm"; then
1407 : Stratus VOS
1408     _exe=".pm"
1409 elif test -n "$DJGPP"; then
1410 : DOS DJGPP
1411     _exe=".exe"
1412 elif test -f /kern/cookiejar; then
1413 : MiNT
1414     _exe=""
1415 elif test -d c:/. -o -n "$is_os2" ; then
1416 : OS/2 or cygwin
1417     _exe=".exe"
1418 fi
1419
1420 groupstype=''
1421 i_whoami=''
1422 : Possible local include directories to search.
1423 : Set locincpth to "" in a hint file to defeat local include searches.
1424 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1425 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1426 :
1427 : no include file wanted by default
1428 inclwanted=''
1429
1430 : Enable -DEBUGGING and -DDEBUGGING from the command line
1431 EBUGGING=''
1432 DEBUGGING=''
1433
1434 : Trailing extension.  Override this in a hint file, if needed.
1435 : Extra object files, if any, needed on this platform.
1436 archobjs=''
1437 libnames=''
1438 : change the next line if compiling for Xenix/286 on Xenix/386
1439 xlibpth='/usr/lib/386 /lib/386'
1440 : Possible local library directories to search.
1441 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1442 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1443
1444 : general looking path for locating libraries
1445 glibpth="/lib /usr/lib $xlibpth"
1446 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1447 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1448 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1449 test -d /usr/lib64         && glibpth="$glibpth /lib64 /usr/lib64 /usr/local/lib64"
1450
1451 : Private path used by Configure to find libraries.  Its value
1452 : is prepended to libpth. This variable takes care of special
1453 : machines, like the mips.  Usually, it should be empty.
1454 plibpth=''
1455
1456 : default library list
1457 libswanted=''
1458 : some systems want to use only the non-versioned libso:s
1459 ignore_versioned_solibs=''
1460 ccname=''
1461 ccversion=''
1462 perllibs=''
1463 : set useposix=false in your hint file to disable the POSIX extension.
1464 useposix=true
1465 : set useopcode=false in your hint file to disable the Opcode extension.
1466 useopcode=true
1467 archname64=''
1468 ccflags_uselargefiles=''
1469 ldflags_uselargefiles=''
1470 libswanted_uselargefiles=''
1471 : set usemultiplicity on the Configure command line to enable multiplicity.
1472 : set usesocks on the Configure command line to enable socks.
1473 archname=''
1474 : set usethreads on the Configure command line to enable threads.
1475 usereentrant='undef'
1476 : List of libraries we want.
1477 : If anyone needs extra -lxxx, put those in a hint file.
1478 libswanted="cl pthread socket bind inet nsl ndbm gdbm dbm db malloc dl ld"
1479 libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD"
1480 : We probably want to search /usr/shlib before most other libraries.
1481 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1482 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1483 glibpth="/usr/shlib $glibpth"
1484 : Do not use vfork unless overridden by a hint file.
1485 usevfork=false
1486
1487 : Find the basic shell for Bourne shell scripts
1488 case "$sh" in
1489 '')
1490         case "$SYSTYPE" in
1491         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1492         *) xxx='/bin/sh';;
1493         esac
1494         if test -f "$xxx"; then
1495                 sh="$xxx"
1496         else
1497                 : Build up a list and do a single loop so we can 'break' out.
1498                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1499                 for xxx in sh bash ksh pdksh ash; do
1500                         for p in $pth; do
1501                                 try="$try ${p}/${xxx}"
1502                         done
1503                 done
1504                 for xxx in $try; do
1505                         if test -f "$xxx"; then
1506                                 sh="$xxx";
1507                                 break
1508                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1509                                 sh="$xxx";
1510                                 break
1511                         elif test -f "$xxx.exe"; then
1512                                 sh="$xxx";
1513                                 break
1514                         fi
1515                 done
1516         fi
1517         ;;
1518 esac
1519
1520 case "$sh" in
1521 '')     cat >&2 <<EOM
1522 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.
1523
1524 Usually it's in /bin/sh.  How did you even get this far?
1525 Please contact me (Perl Maintainers) at perlbug@perl.org and
1526 we'll try to straighten this all out.
1527 EOM
1528         exit 1
1529         ;;
1530 esac
1531
1532 : When cross-compiling we need to separate the sh-to-run-Configure-with from the sh-to-use-in-Perl
1533 : default both to the same thing, cross-compilers can then set targetsh differently if they like
1534 targetsh=$sh
1535
1536 : see if sh knows # comments
1537 if `$sh -c '#' >/dev/null 2>&1`; then
1538         shsharp=true
1539         spitshell=cat
1540         xcat=/bin/cat
1541         test -f $xcat$_exe || xcat=/usr/bin/cat
1542         if test ! -f $xcat$_exe; then
1543                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1544                         if test -f $p/cat$_exe; then
1545                                 xcat=$p/cat
1546                                 break
1547                         fi
1548                 done
1549                 if test ! -f $xcat$_exe; then
1550                         echo "Can't find cat anywhere!"
1551                         exit 1
1552                 fi
1553         fi
1554         echo "#!$xcat" >sharp
1555         $eunicefix sharp
1556         chmod +x sharp
1557         ./sharp > today 2>/dev/null
1558         if test -s today; then
1559                 sharpbang='#!'
1560         else
1561                 echo "#! $xcat" > sharp
1562                 $eunicefix sharp
1563                 chmod +x sharp
1564                 ./sharp > today 2>/dev/null
1565                 if test -s today; then
1566                         sharpbang='#! '
1567                 else
1568                         sharpbang=': use '
1569                 fi
1570         fi
1571 else
1572         echo " "
1573         echo "Your $sh doesn't grok # comments--I will strip them later on."
1574         shsharp=false
1575         cd ..
1576         echo "exec grep -v '^[  ]*#'" >spitshell
1577         chmod +x spitshell
1578         $eunicefix spitshell
1579         spitshell=`pwd`/spitshell
1580         cd UU
1581         echo "I presume that if # doesn't work, #! won't work either!"
1582         sharpbang=': use '
1583 fi
1584 rm -f sharp today
1585
1586 : figure out how to guarantee sh startup
1587 case "$startsh" in
1588 '') startsh=${sharpbang}${sh} ;;
1589 *)
1590 esac
1591 cat >sharp <<EOSS
1592 $startsh
1593 set abc
1594 test "$?abc" != 1
1595 EOSS
1596
1597 chmod +x sharp
1598 $eunicefix sharp
1599 if ./sharp; then
1600         : echo "Yup, it does."
1601 else
1602         echo "Hmm... '$startsh' does not guarantee sh startup..."
1603         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1604 fi
1605 rm -f sharp
1606
1607 : Save command line options in file UU/cmdline.opt for later use in
1608 : generating config.sh.
1609 cat > cmdline.opt <<EOSH
1610 : Configure command line arguments.
1611 config_arg0='$0'
1612 config_args='$*'
1613 config_argc=$#
1614 EOSH
1615 argn=1
1616 args_exp=''
1617 args_sep=''
1618 for arg in "$@"; do
1619         cat >>cmdline.opt <<EOSH
1620 config_arg$argn='$arg'
1621 EOSH
1622         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1623 $arg
1624 EOC
1625         arg_exp=`cat cmdl.opt`
1626         args_exp="$args_exp$args_sep'$arg_exp'"
1627         argn=`expr $argn + 1`
1628         args_sep=' '
1629 done
1630 rm -f cmdl.opt
1631
1632 : produce awk script to parse command line options
1633 cat >options.awk <<'EOF'
1634 BEGIN {
1635         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1636
1637         len = length(optstr);
1638         for (i = 1; i <= len; i++) {
1639                 c = substr(optstr, i, 1);
1640                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1641                 if (a == ":") {
1642                         arg[c] = 1;
1643                         i++;
1644                 }
1645                 opt[c] = 1;
1646         }
1647 }
1648 {
1649         expect = 0;
1650         str = $0;
1651         if (substr(str, 1, 1) != "-") {
1652                 printf("'%s'\n", str);
1653                 next;
1654         }
1655         len = length($0);
1656         for (i = 2; i <= len; i++) {
1657                 c = substr(str, i, 1);
1658                 if (!opt[c]) {
1659                         printf("-%s\n", substr(str, i));
1660                         next;
1661                 }
1662                 printf("-%s\n", c);
1663                 if (arg[c]) {
1664                         if (i < len)
1665                                 printf("'%s'\n", substr(str, i + 1));
1666                         else
1667                                 expect = 1;
1668                         next;
1669                 }
1670         }
1671 }
1672 END {
1673         if (expect)
1674                 print "?";
1675 }
1676 EOF
1677
1678 : process the command line options
1679 set X `for arg in "$@"; do echo "X$arg"; done |
1680         sed -e s/X// | awk -f options.awk`
1681 eval "set $*"
1682 shift
1683 rm -f options.awk
1684
1685 : set up default values
1686 fastread=''
1687 reuseval=false
1688 config_sh=''
1689 alldone=''
1690 error=''
1691 silent=''
1692 extractsh=''
1693 knowitall=''
1694 rm -f optdef.sh posthint.sh
1695 cat >optdef.sh <<EOS
1696 $startsh
1697 EOS
1698
1699
1700 : option parsing
1701 while test $# -gt 0; do
1702         case "$1" in
1703         -d) shift; fastread=yes;;
1704         -e) shift; alldone=cont;;
1705         -f)
1706                 shift
1707                 cd ..
1708                 if test -r "$1"; then
1709                         config_sh="$1"
1710                 else
1711                         echo "$me: cannot read config file $1." >&2
1712                         error=true
1713                 fi
1714                 cd UU
1715                 shift;;
1716         --help|\
1717         -h) shift; error=true;;
1718         -r) shift; reuseval=true;;
1719         -s) shift; silent=true; realsilent=true;;
1720         -E) shift; alldone=exit;;
1721         -K) shift; knowitall=true;;
1722         -O) shift;;
1723         -S) shift; silent=true; extractsh=true;;
1724         -D)
1725                 shift
1726                 case "$1" in
1727                 *=)
1728                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1729                         echo "$me: ignoring -D $1" >&2
1730                         ;;
1731                 *=*) echo "$1" | \
1732                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1733                 *) echo "$1='define'" >> optdef.sh;;
1734                 esac
1735                 shift
1736                 ;;
1737         -U)
1738                 shift
1739                 case "$1" in
1740                 *=) echo "$1" >> optdef.sh;;
1741                 *=*)
1742                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1743                         echo "$me: ignoring -U $1" >&2
1744                         ;;
1745                 *) echo "$1='undef'" >> optdef.sh;;
1746                 esac
1747                 shift
1748                 ;;
1749         -A)
1750             shift
1751             xxx=''
1752             yyy="$1"
1753             zzz=''
1754             uuu=undef
1755             case "$yyy" in
1756             *=*) zzz=`echo "$yyy"|sed 's!=.*!!'`
1757                  case "$zzz" in
1758                  *:*) zzz='' ;;
1759                  *)   xxx=append
1760                       zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'`
1761                       yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
1762                  esac
1763                  ;;
1764             esac
1765             case "$xxx" in
1766             '')  case "$yyy" in
1767                  *:*) xxx=`echo "$yyy"|sed 's!:.*!!'`
1768                       yyy=`echo "$yyy"|sed 's!^[^:]*:!!'`
1769                       zzz=`echo "$yyy"|sed 's!^[^=]*=!!'`
1770                       yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
1771                  *)   xxx=`echo "$yyy"|sed 's!:.*!!'`
1772                       yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` ;;
1773                  esac
1774                  ;;
1775             esac
1776             case "$xxx" in
1777             append)
1778                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1779             clear)
1780                 echo "$yyy=''"                  >> posthint.sh ;;
1781             define)
1782                 case "$zzz" in
1783                 '') zzz=define ;;
1784                 esac
1785                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1786             eval)
1787                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1788             prepend)
1789                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1790             undef)
1791                 case "$zzz" in
1792                 '') zzz="$uuu" ;;
1793                 esac
1794                 echo "$yyy=$zzz"                >> posthint.sh ;;
1795             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1796             esac
1797             shift
1798             ;;
1799         -V) echo "$me generated by metaconfig 3.5 PL0." >&2
1800             exit 0;;
1801         --) break;;
1802         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1803         *) break;;
1804         esac
1805 done
1806
1807 case "$error" in
1808 true)
1809         cat >&2 <<EOM
1810 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1811                  [-U symbol] [-U symbol=] [-A command:symbol...]
1812   -d : use defaults for all answers.
1813   -e : go on without questioning past the production of config.sh.
1814   -f : specify an alternate default configuration file.
1815   -h : print this help message and exit (with an error status).
1816   -r : reuse C symbols value if possible (skips costly nm extraction).
1817   -s : silent mode, only echoes questions and essential information.
1818   -D : define symbol to have some value:
1819          -D symbol         symbol gets the value 'define'
1820          -D symbol=value   symbol gets the value 'value'
1821        common used examples (see INSTALL for more info):
1822          -Duse64bitint            use 64bit integers
1823          -Duse64bitall            use 64bit integers and pointers
1824          -Dusethreads             use thread support
1825          -Dinc_version_list=none  do not include older perl trees in @INC
1826          -DEBUGGING=none          DEBUGGING options
1827          -Dcc=gcc                 choose your compiler
1828          -Dprefix=/opt/perl5      choose your destination
1829   -E : stop at the end of questions, after having produced config.sh.
1830   -K : do not use unless you know what you are doing.
1831   -O : ignored for backward compatibility
1832   -S : perform variable substitutions on all .SH files (can mix with -f)
1833   -U : undefine symbol:
1834          -U symbol    symbol gets the value 'undef'
1835          -U symbol=   symbol gets completely empty
1836        e.g.:  -Uversiononly
1837   -A : manipulate symbol after the platform specific hints have been applied:
1838          -A append:symbol=value   append value to symbol
1839          -A symbol=value          like append:, but with a separating space
1840          -A define:symbol=value   define symbol to have value
1841          -A clear:symbol          define symbol to be ''
1842          -A define:symbol         define symbol to be 'define'
1843          -A eval:symbol=value     define symbol to be eval of value
1844          -A prepend:symbol=value  prepend value to symbol
1845          -A undef:symbol          define symbol to be 'undef'
1846          -A undef:symbol=         define symbol to be ''
1847        e.g.:  -A prepend:libswanted='cl pthread '
1848               -A ccflags=-DSOME_MACRO
1849   -V : print version number and exit (with a zero status).
1850 EOM
1851         exit 1
1852         ;;
1853 esac
1854
1855 : Sanity checks
1856 case "$fastread$alldone" in
1857 yescont|yesexit) ;;
1858 *)
1859         case "$extractsh" in
1860         true) ;;
1861         *)
1862                 if test ! -t 0; then
1863                         echo "Say 'sh Configure', not 'sh <Configure'"
1864                         exit 1
1865                 fi
1866                 ;;
1867         esac
1868         ;;
1869 esac
1870
1871 exec 4>&1
1872 case "$silent" in
1873 true) exec 1>/dev/null;;
1874 esac
1875
1876 : run the defines and the undefines, if any, but leave the file out there...
1877 touch optdef.sh
1878 grep '\\' optdef.sh >/dev/null 2>&1
1879 if test $? = 0; then
1880     echo "Configure does not support \\ in -D arguments"
1881     exit 1
1882 fi
1883 . ./optdef.sh
1884 : create the posthint manipulation script and leave the file out there...
1885 touch posthint.sh
1886
1887 : set package name
1888 package='perl5'
1889 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1890 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1891 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`"-"`echo AbyZ | tr '[:upper:]' '[:lower:]' 2>/dev/null`" in
1892 ABYZ-abyz) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1893 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1894 esac
1895
1896 : Some greps do not return status, grrr.
1897 echo "grimblepritz" >grimble
1898 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1899         contains=contains
1900 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1901         contains=grep
1902 else
1903         contains=contains
1904 fi
1905 rm -f grimble
1906 : the following should work in any shell
1907 case "$contains" in
1908 contains*)
1909         echo " "
1910         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1911         cat >contains <<'EOSS'
1912 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1913 EOSS
1914 chmod +x contains
1915 esac
1916
1917 : Find the path to the source tree
1918 case "$src" in
1919 '') case "$0" in
1920     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1921          case "$src" in
1922          /*)    ;;
1923          .)     ;;
1924          *)     src=`cd ../$src && pwd` ;;
1925          esac
1926          ;;
1927     *)   src='.';;
1928     esac;;
1929 esac
1930 case "$src" in
1931 '')     src=/
1932         rsrc=/
1933         ;;
1934 /*)     rsrc="$src";;
1935 *)      rsrc="../$src";;
1936 esac
1937 if test -f $rsrc/Configure && \
1938         $contains "^package='$package'\$" $rsrc/Configure >/dev/null 2>&1
1939 then
1940    : found it, so we are ok.
1941 else
1942         rsrc=''
1943         for src in . .. ../.. ../../.. ../../../..; do
1944                 if test -f ../$src/Configure && \
1945                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1946                 then
1947                         rsrc=../$src
1948                         break
1949                 fi
1950         done
1951 fi
1952 case "$rsrc" in
1953 '')
1954         cat <<EOM >&4
1955
1956 Sorry, I can't seem to locate the source dir for $package.  Please start
1957 Configure with an explicit path -- i.e. /some/path/Configure.
1958
1959 EOM
1960         exit 1
1961         ;;
1962 ../.)   rsrc='..';;
1963 *)
1964         echo " "
1965         echo "Sources for $package found in \"$src\"." >&4
1966         ;;
1967 esac
1968
1969 : script used to extract .SH files with variable substitutions
1970 cat >extract <<'EOS'
1971 PERL_CONFIG_SH=true
1972 echo "Doing variable substitutions on .SH files..."
1973 if test -f MANIFEST; then
1974         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1975 else
1976         echo "(Looking for .SH files under the source directory.)"
1977         set x `(cd "$src"; find . -name "*.SH" -print)`
1978 fi
1979 shift
1980 case $# in
1981 0) set x `(cd "$src"; echo *.SH)`; shift;;
1982 esac
1983 if test ! -f "$src/$1"; then
1984         shift
1985 fi
1986 mkdir_p='
1987 name=$1;
1988 create="";
1989 while test $name; do
1990         if test ! -d "$name"; then
1991                 create="$name $create";
1992                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1993                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1994         else
1995                 name="";
1996         fi;
1997 done;
1998 for file in $create; do
1999         mkdir $file;
2000 done
2001 '
2002 for file in $*; do
2003         case "$src" in
2004         ".")
2005                 case "$file" in
2006                 */*)
2007                         dir=`expr X$file : 'X\(.*\)/'`
2008                         file=`expr X$file : 'X.*/\(.*\)'`
2009                         (cd "$dir" && . ./$file)
2010                         ;;
2011                 *)
2012                         . ./$file
2013                         ;;
2014                 esac
2015                 ;;
2016         *)
2017                 case "$file" in
2018                 */*)
2019                         dir=`expr X$file : 'X\(.*\)/'`
2020                         file=`expr X$file : 'X.*/\(.*\)'`
2021                         (set x $dir; shift; eval $mkdir_p)
2022                         sh <"$src/$dir/$file"
2023                         ;;
2024                 *)
2025                         sh <"$src/$file"
2026                         ;;
2027                 esac
2028                 ;;
2029         esac
2030 done
2031 if test -f "$src/config_h.SH"; then
2032         if test ! -f config.h; then
2033         : oops, they left it out of MANIFEST, probably, so do it anyway.
2034         . "$src/config_h.SH"
2035         fi
2036 fi
2037 EOS
2038
2039 : extract files and exit if asked to do so
2040 case "$extractsh" in
2041 true)
2042         case "$realsilent" in
2043         true) ;;
2044         *) exec 1>&4;;
2045         esac
2046         case "$config_sh" in
2047         '') config_sh='config.sh';;
2048         esac
2049         echo " "
2050         echo "Fetching answers from $config_sh..."
2051         cd ..
2052         . $config_sh
2053         . UU/optdef.sh
2054         echo " "
2055         . UU/extract
2056         rm -rf UU
2057         echo "Extraction done."
2058         exit 0
2059         ;;
2060 esac
2061
2062 : Eunice requires " " instead of "", can you believe it
2063 echo " "
2064 : Here we go...
2065 echo "Beginning of configuration questions for $package."
2066
2067 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
2068
2069 : first determine how to suppress newline on echo command
2070 echo " "
2071 echo "Checking echo to see how to suppress newlines..."
2072 (echo "hi there\c" ; echo " ") >.echotmp
2073 if $contains c .echotmp >/dev/null 2>&1 ; then
2074         echo "...using -n."
2075         n='-n'
2076         c=''
2077 else
2078         cat <<'EOM'
2079 ...using \c
2080 EOM
2081         n=''
2082         c='\c'
2083 fi
2084 echo $n "The star should be here-->$c"
2085 echo '*'
2086 rm -f .echotmp
2087
2088 : Now test for existence of everything in MANIFEST
2089 echo " "
2090 if test -f "$rsrc/MANIFEST"; then
2091         echo "First let's make sure your kit is complete.  Checking..." >&4
2092         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \
2093                 (split -l 50 2>/dev/null || split -50)
2094         rm -f missing
2095         tmppwd=`pwd`
2096         for filelist in x??; do
2097                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` \
2098                         >/dev/null 2>>"$tmppwd/missing")
2099         done
2100         if test -s missing; then
2101                 cat missing >&4
2102                 cat >&4 <<'EOM'
2103
2104 THIS PACKAGE SEEMS TO BE INCOMPLETE.
2105
2106 You have the option of continuing the configuration process, despite the
2107 distinct possibility that your kit is damaged, by typing 'y'es.  If you
2108 do, don't blame me if something goes wrong.  I advise you to type 'n'o
2109 and contact the author (perlbug@perl.org).
2110
2111 EOM
2112                 echo $n "Continue? [n] $c" >&4
2113                 read ans
2114                 case "$ans" in
2115                 y*)
2116                         echo "Continuing..." >&4
2117                         rm -f missing
2118                         ;;
2119                 *)
2120                         echo "ABORTING..." >&4
2121                         kill $$
2122                         ;;
2123                 esac
2124         else
2125                 echo "Looks good..."
2126         fi
2127 else
2128         echo "There is no MANIFEST file.  I hope your kit is complete !"
2129 fi
2130 rm -f missing x??
2131
2132 : Find the appropriate value for a newline for tr
2133 if test -n "$DJGPP"; then
2134        trnl='\012'
2135 fi
2136 if test X"$trnl" = X; then
2137         case "`echo foo | tr '\n' x 2>/dev/null`" in
2138         foox) trnl='\n' ;;
2139         esac
2140 fi
2141 if test X"$trnl" = X; then
2142         case "`echo foo | tr '\012' x 2>/dev/null`" in
2143         foox) trnl='\012' ;;
2144         esac
2145 fi
2146 if test X"$trnl" = X; then
2147        case "`echo foo | tr '\r\n' xy 2>/dev/null`" in
2148        fooxy) trnl='\n\r' ;;
2149        esac
2150 fi
2151 if test X"$trnl" = X; then
2152         cat <<EOM >&2
2153
2154 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
2155
2156 EOM
2157         exit 1
2158 fi
2159
2160 : compute the number of columns on the terminal for proper question formatting
2161 case "$COLUMNS" in
2162 '') COLUMNS='80';;
2163 esac
2164
2165 : set up the echo used in my read
2166 myecho="case \"\$xxxm\" in
2167 '') echo $n \"\$rp $c\" >&4;;
2168 *) case \"\$rp\" in
2169         '') echo $n \"[\$xxxm] $c\";;
2170         *)
2171                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
2172                         echo \"\$rp\" >&4
2173                         echo $n \"[\$xxxm] $c\" >&4
2174                 else
2175                         echo $n \"\$rp [\$xxxm] $c\" >&4
2176                 fi
2177                 ;;
2178         esac;;
2179 esac"
2180
2181 : now set up to do reads with possible shell escape and default assignment
2182 cat <<EOSC >myread
2183 $startsh
2184 xxxm=\$dflt
2185 $myecho
2186 ans='!'
2187 case "\$fastread" in
2188 yes) case "\$dflt" in
2189         '') ;;
2190         *) ans='';
2191                 case "\$silent-\$rp" in
2192                 true-) ;;
2193                 *) echo " " >&4;;
2194                 esac;;
2195         esac;;
2196 *) case "\$silent" in
2197         true) case "\$rp" in
2198                 '') ans='';;
2199                 esac;;
2200         esac;;
2201 esac
2202 while expr "X\$ans" : "X!" >/dev/null; do
2203         read answ
2204         set x \$xxxm
2205         shift
2206         aok=''; eval "ans=\\"\$answ\\"" && aok=y
2207         case  "\$answ" in
2208         "!")
2209                 sh 1>&4
2210                 echo " "
2211                 $myecho
2212                 ;;
2213         !*)
2214                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
2215                 shift
2216                 sh 1>&4 -c "\$*"
2217                 echo " "
2218                 $myecho
2219                 ;;
2220         "\$ans")
2221                 case "\$ans" in
2222                 \\&*)
2223                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
2224                         shift
2225                         case "\$1" in
2226                         -d)
2227                                 fastread=yes
2228                                 echo "(OK, I'll run with -d after this question.)" >&4
2229                                 ;;
2230                         -*)
2231                                 echo "*** Sorry, \$1 not supported yet." >&4
2232                                 ;;
2233                         esac
2234                         $myecho
2235                         ans=!
2236                         ;;
2237                 esac;;
2238         *)
2239                 case "\$aok" in
2240                 y)
2241                         echo "*** Substitution done -- please confirm."
2242                         xxxm="\$ans"
2243                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
2244                         xxxm="\$ans"
2245                         ans=!
2246                         ;;
2247                 *)
2248                         echo "*** Error -- try again."
2249                         ans=!
2250                         ;;
2251                 esac
2252                 $myecho
2253                 ;;
2254         esac
2255         case "\$ans\$xxxm\$nostick" in
2256         '')
2257                 ans=!
2258                 $myecho
2259                 ;;
2260         esac
2261 done
2262 case "\$ans" in
2263 '') ans="\$xxxm";;
2264 esac
2265 EOSC
2266
2267 : create .config dir to save info across Configure sessions
2268 test -d ../.config || mkdir ../.config
2269 cat >../.config/README <<EOF
2270 This directory created by Configure to save information that should
2271 persist across sessions for $package.
2272
2273 You may safely delete it if you wish.
2274 EOF
2275
2276 : See if we are using a devel version and want that
2277 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
2278 case "$usedevel" in
2279 $define|true|[yY]*)
2280     usedevel="$define" ;;
2281 *) case "$xversion" in
2282    *[13579])
2283         cat >&4 <<EOH
2284 *** WHOA THERE!!! ***
2285
2286     This is an UNSTABLE DEVELOPMENT release.
2287     The version of this $package distribution is $xversion, that is, odd,
2288     (as opposed to even) and that signifies a development release.
2289     If you want a maintenance release, you want an even-numbered version.
2290
2291     Do ***NOT*** install this into production use.
2292     Data corruption and crashes are possible.
2293
2294     It is most seriously suggested that you do not continue any further
2295     unless you want to help in developing and debugging Perl.
2296
2297     If you *still* want to build perl, you can answer 'y' now,
2298     or pass -Dusedevel to Configure.
2299
2300 EOH
2301         rp='Do you really want to continue?'
2302         dflt='n'
2303         . ./myread
2304         case "$ans" in
2305         [yY]) echo >&4 "Okay, continuing."
2306               usedevel="$define" ;;
2307         *) echo >&4 "Okay, bye."
2308            exit 1
2309            ;;
2310         esac
2311         ;;
2312     esac
2313     usedevel="$undef"
2314     ;;
2315 esac
2316 case "$usedevel" in
2317 $define|true|[yY]*)
2318         case "$versiononly" in
2319         '') versiononly="$define" ;;
2320         esac
2321         case "$installusrbinperl" in
2322         '') installusrbinperl="$undef" ;;
2323         esac
2324         ;;
2325 esac
2326
2327 : general instructions
2328 needman=true
2329 firsttime=true
2330 user=`(logname) 2>/dev/null`
2331 case "$user" in
2332 '') user=`whoami 2>&1`;;
2333 esac
2334 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
2335         firsttime=false
2336         echo " "
2337         rp='Would you like to see the instructions?'
2338         dflt=n
2339         . ./myread
2340         case "$ans" in
2341         [yY]*) ;;
2342         *) needman=false;;
2343         esac
2344 fi
2345 if $needman; then
2346         cat <<EOH
2347
2348 This installation shell script will examine your system and ask you questions
2349 to determine how the perl5 package should be installed. If you get
2350 stuck on a question, you may use a ! shell escape to start a subshell or
2351 execute a command.  Many of the questions will have default answers in square
2352 brackets; typing carriage return will give you the default.
2353
2354 On some of the questions which ask for file or directory names you are allowed
2355 to use the ~name construct to specify the login directory belonging to "name",
2356 even if you don't have a shell which knows about that.  Questions where this is
2357 allowed will be marked "(~name ok)".
2358
2359 EOH
2360         rp=''
2361         dflt='Type carriage return to continue'
2362         . ./myread
2363         cat <<'EOH'
2364
2365 The prompter used in this script allows you to use shell variables and
2366 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
2367 in the default answer, as if the default line was a set of arguments given to a
2368 script shell.  This means you may also use $* to repeat the whole default line,
2369 so you do not have to re-type everything to add something to the default.
2370
2371 Every time there is a substitution, you will have to confirm.  If there is an
2372 error (e.g. an unmatched backtick), the default answer will remain unchanged
2373 and you will be prompted again.
2374
2375 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
2376 the questions and use the computed defaults (or the previous answers if there
2377 was already a config.sh file). Type 'Configure -h' for a list of options.
2378 You may also start interactively and then answer '& -d' at any prompt to turn
2379 on the non-interactive behaviour for the remainder of the execution.
2380
2381 EOH
2382         . ./myread
2383         cat <<EOH
2384
2385 Much effort has been expended to ensure that this shell script will run on any
2386 Unix system.  If despite that it blows up on yours, your best bet is to edit
2387 Configure and run it again.  If you can't run Configure for some reason,
2388 you'll have to generate a config.sh file by hand.  Whatever problems you
2389 have, let me (perlbug@perl.org) know how I blew it.
2390
2391 This installation script affects things in two ways:
2392
2393 1) it may do direct variable substitutions on some of the files included
2394    in this kit.
2395 2) it builds a config.h file for inclusion in C programs.  You may edit
2396    any of these files as the need arises after running this script.
2397
2398 If you make a mistake on a question, there is no easy way to back up to it
2399 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
2400 files.  Configure will offer to let you do this before it runs the SH files.
2401
2402 EOH
2403         dflt='Type carriage return to continue'
2404         . ./myread
2405         case "$firsttime" in
2406         true) echo $user >>../.config/instruct;;
2407         esac
2408 fi
2409
2410 : Set 'sysroot' to change the logical root directory to your headers and libraries see man gcc
2411 : This is primarily meant for cross-compile environments, and may fail to be useful in other cases
2412 if test "X$sysroot" = X; then
2413     sysroot=""
2414 else
2415     case "$cc" in
2416         *gcc*|*g++*)
2417             echo "Using $sysroot to find your headers and libraries, adding to ccflags"
2418             # _sysroot is used in places where we need --sysroot=foo
2419             # but using the rest of the flags could cause issues.
2420             _sysroot="--sysroot=$sysroot";
2421             case "$ccflags" in
2422                 *sysroot*) ;;
2423                 'undef'|*)
2424                 ccflags="$ccflags $_sysroot"
2425             esac
2426             case "$ldflags" in
2427                 *sysroot*) ;;
2428                 'undef'|*)
2429                 ldflags="$ldflags $_sysroot"
2430             esac
2431             case "$cppflags" in
2432                 *sysroot*) ;;
2433                 'undef'|*)
2434                 cppflags="$cppflags $_sysroot"
2435             esac
2436             # lddlflags updated below in lddlflags section;
2437             # same with cccdlflags
2438             ;;
2439     esac
2440
2441     # Adjust some defaults to also use $sysroot
2442     for var in xlibpth loclibpth locincpth glibpth; do
2443         eval xxx=\$$var
2444         eval $var=''
2445         for path in $xxx; do
2446             eval $var=\"\$$var $sysroot$path\"
2447         done
2448     done
2449
2450 fi
2451
2452 : find out where common programs are
2453 echo " "
2454 echo "Locating common programs..." >&4
2455 cat <<EOSC >loc
2456 $startsh
2457 case \$# in
2458 0) exit 1;;
2459 esac
2460 thing=\$1
2461 shift
2462 dflt=\$1
2463 shift
2464 for dir in \$*; do
2465         case "\$thing" in
2466         .)
2467         if test -d \$dir/\$thing; then
2468                 echo \$dir
2469                 exit 0
2470         fi
2471         ;;
2472         *)
2473         for thisthing in \$dir/\$thing; do
2474                 : just loop through to pick last item
2475         done
2476         if test -f \$thisthing; then
2477                 echo \$thisthing
2478                 exit 0
2479         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2480                 echo \$thisthing
2481                 exit 0
2482         elif test -f \$dir/\$thing.exe; then
2483                 if test -n "$DJGPP"; then
2484                         echo \$dir/\$thing.exe
2485                 elif test "$eunicefix" != ":"; then
2486                         : on Eunice apparently
2487                         echo \$dir/\$thing
2488                 fi
2489                 exit 0
2490         fi
2491         ;;
2492         esac
2493 done
2494 echo \$dflt
2495 exit 1
2496 EOSC
2497 chmod +x loc
2498 $eunicefix loc
2499 loclist="
2500 awk
2501 cat
2502 chmod
2503 comm
2504 cp
2505 echo
2506 expr
2507 grep
2508 ls
2509 mkdir
2510 rm
2511 sed
2512 sort
2513 touch
2514 tr
2515 uniq
2516 "
2517 trylist="
2518 ar
2519 bison
2520 byacc
2521 cpp
2522 csh
2523 date
2524 egrep
2525 gmake
2526 gzip
2527 less
2528 ln
2529 make
2530 more
2531 nm
2532 nroff
2533 perl
2534 pg
2535 test
2536 uname
2537 zip
2538 "
2539 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2540 pth="$pth $sysroot/lib $sysroot/usr/lib"
2541 for file in $loclist; do
2542         eval xxx=\$$file
2543         case "$xxx" in
2544         /*|?:[\\/]*)
2545                 if test -f "$xxx"; then
2546                         : ok
2547                 else
2548                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2549                         xxx=`./loc $file $file $pth`
2550                 fi
2551                 ;;
2552         '') xxx=`./loc $file $file $pth`;;
2553         *) xxx=`./loc $xxx $xxx $pth`;;
2554         esac
2555         eval $file=$xxx$_exe
2556         eval _$file=$xxx
2557         case "$xxx" in
2558         /*)
2559                 echo $file is in $xxx.
2560                 ;;
2561         ?:[\\/]*)
2562                 echo $file is in $xxx.
2563                 ;;
2564         *)
2565                 echo "I don't know where '$file' is, and my life depends on it." >&4
2566                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2567                 exit 1
2568                 ;;
2569         esac
2570 done
2571 echo " "
2572 echo "Don't worry if any of the following aren't found..."
2573 say=offhand
2574 for file in $trylist; do
2575         eval xxx=\$$file
2576         case "$xxx" in
2577         /*|?:[\\/]*)
2578                 if test -f "$xxx"; then
2579                         : ok
2580                 else
2581                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2582                         xxx=`./loc $file $file $pth`
2583                 fi
2584                 ;;
2585         '') xxx=`./loc $file $file $pth`;;
2586         *) xxx=`./loc $xxx $xxx $pth`;;
2587         esac
2588         eval $file=$xxx$_exe
2589         eval _$file=$xxx
2590         case "$xxx" in
2591         /*)
2592                 echo $file is in $xxx.
2593                 ;;
2594         ?:[\\/]*)
2595                 echo $file is in $xxx.
2596                 ;;
2597         *)
2598                 echo "I don't see $file out there, $say."
2599                 say=either
2600                 ;;
2601         esac
2602 done
2603 case "$egrep" in
2604 egrep)
2605         echo "Substituting grep for egrep."
2606         egrep=$grep
2607         _egrep=$grep
2608         ;;
2609 esac
2610 case "$less" in
2611 '')     ;;
2612 *)      if $less -R </dev/null >/dev/null 2>&1; then
2613                echo "Substituting less -R for less."
2614                less="$less -R"
2615                _less=$less
2616         fi
2617         ;;
2618 esac
2619 case "$ln" in
2620 ln)
2621         echo "Substituting cp for ln."
2622         ln=$cp
2623         _ln=$cp
2624         ;;
2625 esac
2626 case "$make" in
2627 make)
2628         case "$gmake" in
2629         gmake)
2630         echo "I can't find make or gmake, and my life depends on it." >&4
2631         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2632         exit 1
2633         ;;
2634         esac
2635         ;;
2636 esac
2637 case "$gmake" in
2638 gmake)  ;;
2639 *)      # We can't have osname yet.
2640         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2641                 # Assume that gmake, if found, is definitely GNU make
2642                 # and prefer it over the system make.
2643                 echo "Substituting gmake for make."
2644                 make=$gmake
2645                 _make=$gmake
2646         fi
2647         ;;
2648 esac
2649 case "$test" in
2650 test)
2651         echo "Hopefully test is built into your sh."
2652         ;;
2653 *)
2654         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2655                 echo "Using the test built into your sh."
2656                 test=test
2657                 _test=test
2658         fi
2659         ;;
2660 esac
2661 case "$echo" in
2662 echo)
2663         echo "Hopefully echo is built into your sh."
2664         ;;
2665 '') ;;
2666 *)
2667         echo " "
2668 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2669         $echo $n "hi there$c" >foo1
2670         echo $n "hi there$c" >foo2
2671         if cmp foo1 foo2 >/dev/null 2>&1; then
2672                 echo "They are compatible.  In fact, they may be identical."
2673         else
2674                 case "$n" in
2675                 '-n') n='' c='\c';;
2676                 *) n='-n' c='';;
2677                 esac
2678                 cat <<FOO
2679 They are not compatible!  You are probably running ksh on a non-USG system.
2680 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2681 have echo built in and we may have to run some Bourne shell scripts.  That
2682 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2683
2684 FOO
2685                 $echo $n "The star should be here-->$c"
2686                 $echo "*"
2687         fi
2688         $rm -f foo1 foo2
2689         ;;
2690 esac
2691
2692 # This question was auctioned at YAPC::Europe-2007 in Vienna
2693 # I never promised you could answer it. I only auctioned the question.
2694 cat <<FOO
2695 The following message is sponsored by
2696
2697   Dresden.pm<--The stars should be here.
2698
2699 Dear Perl user, system administrator or package
2700 maintainer, the Perl community sends greetings to
2701 you. Do you (emblematical) greet back [Y/n]? n
2702
2703 FOO
2704
2705 : Check what type of C compiler we use
2706 cat <<EOS >trygcc
2707 $startsh
2708 EOS
2709 cat <<'EOSC' >>trygcc
2710 case "$cc" in
2711 '') ;;
2712 *)  $rm -f try try.*
2713     $cat >try.c <<EOM
2714 int main(int argc, char *argv[]) {
2715   return 0;
2716 }
2717 EOM
2718     if $cc -o try $ccflags $ldflags try.c; then
2719        :
2720     else
2721         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2722         despair=yes
2723         trygcc=yes
2724         case "$cc" in
2725         *gcc*) trygcc=no ;;
2726         esac
2727         # Skip this test because it gives a false match on output like:
2728         #    ./trygcc: line 23: cc: command not found
2729         # case "`$cc -v -c try.c 2>&1`" in
2730         # *gcc*) trygcc=no ;;
2731         # esac
2732         if $test X"$trygcc" = Xyes; then
2733             if gcc -o try -c try.c; then
2734                 echo " "
2735                 echo "You seem to have a working gcc, though." >&4
2736                 # Switching compilers may undo the work of hints files.
2737                 # The most common problem is -D_REENTRANT for threads.
2738                 # This heuristic catches that case, but gets false positives
2739                 # if -Dusethreads was not actually specified.  Better to
2740                 # bail out here with a useful message than fail
2741                 # mysteriously later. Should we perhaps just try to
2742                 # re-invoke Configure -Dcc=gcc config_args ?
2743                 if $test -f usethreads.cbu; then
2744                         $cat >&4 <<EOM
2745
2746 *** However, any setting of the C compiler flags (e.g. for thread support)
2747 *** will be lost.  It may be necessary for you to restart Configure and
2748 *** add -Dcc=gcc to your Configure command line.
2749
2750 EOM
2751                         rp="Would you like to go ahead and try gcc anyway?"
2752                         dflt=n
2753                 else
2754                         rp="Would you like to use it?"
2755                         dflt=y
2756                 fi
2757                 if $test -f myread; then
2758                     . ./myread
2759                 else
2760                     if $test -f UU/myread; then
2761                         . ./UU/myread
2762                     else
2763                         echo "Cannot find myread, sorry.  Aborting." >&2
2764                         exit 1
2765                     fi
2766                 fi
2767                 case "$ans" in
2768                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no;
2769                 esac
2770             fi
2771         fi
2772     fi
2773     $rm -f try try.*
2774     ;;
2775 esac
2776 EOSC
2777
2778 cat <<EOS >checkcc
2779 $startsh
2780 EOS
2781 cat <<'EOSC' >>checkcc
2782 case "$cc" in
2783 '') ;;
2784 *)  $rm -f try try.*
2785     $cat >try.c <<EOM
2786 int main(int argc, char *argv[]) {
2787   return 0;
2788 }
2789 EOM
2790     if $cc -o try $ccflags $ldflags try.c; then
2791        :
2792     else
2793         if $test X"$despair" = Xyes; then
2794            echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2795         fi
2796         $cat >&4 <<EOM
2797 You need to find a working C compiler.
2798 Either (purchase and) install the C compiler supplied by your OS vendor,
2799 or for a free C compiler try http://gcc.gnu.org/
2800 I cannot continue any further, aborting.
2801 EOM
2802         exit 1
2803     fi
2804     $rm -f try try.*
2805     ;;
2806 esac
2807 EOSC
2808
2809 : determine whether symbolic links are supported
2810 echo " "
2811 $touch blurfl
2812 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2813         echo "Symbolic links are supported." >&4
2814         lns="$ln -s"
2815 else
2816         echo "Symbolic links are NOT supported." >&4
2817         lns="$ln"
2818 fi
2819 $rm -f blurfl sym
2820
2821 : determine whether symbolic links are supported
2822 echo " "
2823 case "$lns" in
2824 *"ln"*" -s")
2825         echo "Checking how to test for symbolic links..." >&4
2826         $lns blurfl sym
2827         if $test "X$issymlink" = X; then
2828                 case "$newsh" in
2829                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2830                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2831                 esac
2832                 if test $? = 0; then
2833                         issymlink="test -h"
2834                 else
2835                         echo "Your builtin 'test -h' may be broken." >&4
2836                         case "$test" in
2837                         /*)     ;;
2838                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2839                                 for p in $pth
2840                                 do
2841                                         if test -f "$p/$test"; then
2842                                                 test="$p/$test"
2843                                                 break
2844                                         fi
2845                                 done
2846                                 ;;
2847                         esac
2848                         case "$test" in
2849                         /*)
2850                                 echo "Trying external '$test -h'." >&4
2851                                 issymlink="$test -h"
2852                                 if $test ! -h sym >/dev/null 2>&1; then
2853                                         echo "External '$test -h' is broken, too." >&4
2854                                         issymlink=''
2855                                 fi
2856                                 ;;
2857                         *)      issymlink='' ;;
2858                         esac
2859                 fi
2860         fi
2861         if $test "X$issymlink" = X; then
2862                 if $test -L sym 2>/dev/null; then
2863                         issymlink="$test -L"
2864                         echo "The builtin '$test -L' worked." >&4
2865                 fi
2866         fi
2867         if $test "X$issymlink" != X; then
2868                 echo "You can test for symbolic links with '$issymlink'." >&4
2869         else
2870                 echo "I do not know how you can test for symbolic links." >&4
2871         fi
2872         $rm -f blurfl sym
2873         ;;
2874 *)      echo "No symbolic links, so not testing for their testing..." >&4
2875         ;;
2876 esac
2877
2878 : Make symlinks util
2879 case "$mksymlinks" in
2880 $define|true|[yY]*)
2881         case "$src" in
2882         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2883                 exit 1
2884                 ;;
2885         *)      case "$lns:$issymlink" in
2886                 *"ln"*" -s:"*"test -"?)
2887                         echo "Creating the symbolic links..." >&4
2888                         cd ..
2889                         awk '{print $1}' $src/MANIFEST | sed -e 's:/\([^/]*\)$: \1:' |
2890                         awk 'NF == 1 {
2891                                 dir=".";
2892                                 file=$1 "";
2893                              }
2894                              NF == 2 {
2895                                 dir=$1 "";
2896                                 file=$2 "";
2897                              }
2898                              {
2899                                  print "# dir = ", dir, "file = ", file
2900                                  mf[dir] = mf[dir]" "source"/"dir"/"file;
2901                              } END {
2902                                  for (d in mf) {
2903                                      if (d != ".") { print("mkdir -p "d) }
2904                                      print("ln -sf "mf[d]" "d);
2905                                  }
2906                              }' source="$src" > UU/mksymlinks.$$
2907                         sh UU/mksymlinks.$$
2908                         rm UU/mksymlinks.$$
2909                         # Sanity check 1.
2910                         if test ! -d t/base; then
2911                                 echo "Failed to create the subdirectories.  Aborting." >&4
2912                                 exit 1
2913                         fi
2914                         # Sanity check 2.
2915                         if test ! -f t/base/lex.t; then
2916                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2917                                 exit 1
2918                         fi
2919                         if test ! -f win32/win32.c; then
2920                                 echo "Failed to create the symlinks (win32/win32.c missing).  Aborting." >&4
2921                                 exit 1
2922                         fi
2923                         cd UU
2924                         ;;
2925                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2926                         ;;
2927                 esac
2928                 ;;
2929         esac
2930         ;;
2931 esac
2932
2933 : Check for Cross-Compilation
2934 if $test "X$targethost" = "X"; then
2935     targethost=""
2936 fi
2937 if $test "X$targetenv" = "X"; then
2938     targetenv=""
2939 fi
2940 case "$usecrosscompile" in
2941 $define|true|[yY]*)
2942         $echo "Cross-compiling..."
2943         croak=''
2944         case "$cc" in
2945         *-gcc*|*-g++*) # A cross-compiling gcc, probably.
2946             # arm-linux-androideabi-gcc  -> arm-linux-androideabi
2947             # x86_64-w64-mingw32-gcc.exe -> x86_64-w64-mingw32
2948             targetarch=`$echo $cc|$sed 's/-g[c\+][c\+].*$//'`
2949             ar=`$echo $cc|$sed 's/-g[c\+][c\+]/-ar/'`
2950             # leave out ld, choosing it is more complex
2951             nm=`$echo $cc|$sed 's/-g[c\+][c\+]/-nm/'`
2952             ranlib=`$echo $cc|$sed 's/-g[c\+][c\+]/-ranlib/'`
2953             # We are in a weird spot. Just before us, some values
2954             # were 'saved', to be restored after the hints are
2955             # run.  This means that the changes we made to ar,
2956             # nm and ranlib will get reverted.
2957             # To avoid that, we hijack the saving mechanism and
2958             # have it save our new values.
2959             for file in ar nm ranlib; do
2960                 eval xxx=\$$file
2961                 eval $file=$xxx$_exe
2962                 eval _$file=$xxx
2963             done
2964         ;;
2965         esac
2966         case "$targetarch" in
2967         '') echo "Targetarch not defined." >&4; croak=y ;;
2968         *)  echo "Using targetarch $targetarch." >&4 ;;
2969         esac
2970         case "$targethost" in
2971         '') echo "Targethost not defined." >&4; croak=n ;;
2972         *)  echo "Using targethost $targethost." >&4
2973         esac
2974         locincpth=' '
2975         loclibpth=' '
2976         case "$croak" in
2977         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2978         esac
2979     : compile a host miniperl and generate_uudmap, unless we got passed them
2980     if $test "X$hostperl" = X; then
2981       echo "Building host miniperl and generate_uudmap binaries" >&4
2982       before_host=`pwd`
2983       cd ..
2984       cd $src
2985       src=`pwd`
2986       rm -rf $src/host
2987       mkdir $src/host
2988       cd $src/host
2989       $src/Configure -des -Dusedevel -Dmksymlinks
2990       $make miniperl
2991       case "$hostgenerate" in
2992       '') $make generate_uudmap
2993           hostgenerate=$src/host/generate_uudmap
2994           ;;
2995        "$undef") hostgenerate=''
2996           ;;
2997       esac
2998       hostperl=$src/host/miniperl
2999       cd $before_host
3000     fi
3001     hostosname=`$hostperl -le 'print $^O'`
3002     ;;
3003 *)
3004     usecrosscompile="$undef"
3005     ;;
3006 esac
3007
3008 : Define -Dtargethost=somecomputer to run compiled tests on another machine
3009 case "$targethost" in
3010     '') echo "Checking for cross-compile" >&4
3011     case "$usecrosscompile$multiarch" in
3012        *$define*) echo "Skipping the try tests in the rest of Configure as no targethost was defined when cross-compiling" >&4
3013          if [ -f Makefile ]; then
3014            echo " "
3015            echo "Now you must ensure config.sh, config.h and the generated headers exist and run a $make."
3016          else
3017            echo "Configure done."
3018          fi
3019        exit 0
3020        ;;
3021      *) echo "No targethost for running compiler tests against defined, running locally" >&4
3022         run=''
3023         to=:
3024         from=:
3025         ;;
3026     esac
3027     ;;
3028     *) echo "Using targethost $targethost." >&4
3029         case "$src" in
3030         /*) run=$src/Cross/run
3031             targetmkdir=$src/Cross/mkdir
3032             to=$src/Cross/to
3033             from=$src/Cross/from
3034             ;;
3035         *)  pwd=`$test -f ../Configure & cd ..; pwd`
3036             run=$pwd/Cross/run
3037             targetmkdir=$pwd/Cross/mkdir
3038             to=$pwd/Cross/to
3039             from=$pwd/Cross/from
3040             ;;
3041         esac
3042         case "$targetrun" in
3043         '') targetrun=ssh ;;
3044         esac
3045         case "$targetto" in
3046         '') targetto=scp ;;
3047         esac
3048         case "$targetfrom" in
3049         '') targetfrom=scp ;;
3050         esac
3051         run=$run-$targetrun
3052         to=$to-$targetto
3053         from=$from-$targetfrom
3054         case "$targetdir" in
3055         '')  targetdir=/tmp
3056              echo "Guessing targetdir $targetdir." >&4
3057              ;;
3058         esac
3059         case "$targetuser" in
3060         '')  targetuser=root
3061              echo "Guessing targetuser $targetuser." >&4
3062              ;;
3063         esac
3064         case "$targetport" in
3065         '')  targetport=22
3066              echo "Guessing targetport $targetport." >&4
3067              ;;
3068         esac
3069         case "$targetfrom" in
3070         scp)    q=-q ;;
3071         *)      q='' ;;
3072         esac
3073         case "$targetrun" in
3074         ssh|rsh)
3075             cat >$run <<EOF
3076 #!/bin/sh
3077 env=''
3078 case "\$1" in
3079 -cwd)
3080   shift
3081   cwd=\$1
3082   shift
3083   ;;
3084 esac
3085 case "\$1" in
3086 -env)
3087   shift
3088   env=\$1
3089   shift
3090   ;;
3091 esac
3092 case "\$cwd" in
3093 '') cwd=$targetdir ;;
3094 esac
3095 exe=\$1
3096 shift
3097 $to \$exe
3098 $targetrun -p $targetport -l $targetuser $targethost "cd \$cwd && \$env \$exe \$@"
3099 EOF
3100             ;;
3101         adb)
3102             $touch $run
3103             ;;
3104         *)  echo "Unknown targetrun '$targetrun'" >&4
3105             exit 1
3106             ;;
3107         esac
3108         case "$targetmkdir" in
3109         */Cross/mkdir)
3110             cat >$targetmkdir <<EOF
3111 #!/bin/sh
3112 $targetrun -p $targetport -l $targetuser $targethost "mkdir -p \$@"
3113 EOF
3114             $chmod a+rx $targetmkdir
3115             ;;
3116         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
3117             exit 1
3118             ;;
3119         esac
3120         case "$targetto" in
3121         scp|rcp)
3122             cat >$to <<EOF
3123 #!/bin/sh
3124 for f in \$@
3125 do
3126   case "\$f" in
3127   /*)
3128     $targetmkdir \`dirname \$f\`
3129     $targetto -P $targetport -r $q \$f $targetuser@$targethost:\$f           2>/dev/null  || exit 1
3130     ;;
3131   *)
3132     $targetmkdir $targetdir/\`dirname \$f\`
3133     $targetto -P $targetport -r $q \$f $targetuser@$targethost:$targetdir/\$f 2>/dev/null || exit 1
3134     ;;
3135   esac
3136 done
3137 exit 0
3138 EOF
3139             ;;
3140         cp) cat >$to <<EOF
3141 #!/bin/sh
3142 for f in \$@
3143 do
3144   case "\$f" in
3145   /*)
3146     $mkdir -p $targetdir/\`dirname \$f\`
3147     $cp \$f $targetdir/\$f || exit 1
3148     ;;
3149   *)
3150     $targetmkdir $targetdir/\`dirname \$f\`
3151     $cp \$f $targetdir/\$f || exit 1
3152     ;;
3153   esac
3154 done
3155 exit 0
3156 EOF
3157             ;;
3158         *)  echo "Unknown targetto '$targetto'" >&4
3159             exit 1
3160             ;;
3161         esac
3162         case "$targetfrom" in
3163         scp|rcp)
3164           cat >$from <<EOF
3165 #!/bin/sh
3166 for f in \$@
3167 do
3168   $rm -f \$f
3169   $targetfrom -P $targetport $q $targetuser@$targethost:$targetdir/\$f . || exit 1
3170 done
3171 exit 0
3172 EOF
3173             ;;
3174         cp) cat >$from <<EOF
3175 #!/bin/sh
3176 for f in \$@
3177 do
3178   $rm -f \$f
3179   cp $targetdir/\$f . || exit 1
3180 done
3181 exit 0
3182 EOF
3183             ;;
3184         *)  echo "Unknown targetfrom '$targetfrom'" >&4
3185             exit 1
3186             ;;
3187         esac
3188         if $test ! -f $run; then
3189             echo "Target 'run' script '$run' not found." >&4
3190         else
3191             $chmod a+rx $run
3192         fi
3193         if $test ! -f $to; then
3194             echo "Target 'to' script '$to' not found." >&4
3195         else
3196             $chmod a+rx $to
3197         fi
3198         if $test ! -f $from; then
3199             echo "Target 'from' script '$from' not found." >&4
3200         else
3201             $chmod a+rx $from
3202         fi
3203         if $test ! -f $run -o ! -f $to -o ! -f $from; then
3204             exit 1
3205         fi
3206         cat >&4 <<EOF
3207 Using '$run' for remote execution,
3208 and '$from' and '$to'
3209 for remote file transfer.
3210 EOF
3211         ;;
3212 *)      run=''
3213         to=:
3214         from=:
3215         usecrosscompile="$undef"
3216         targetarch=''
3217         ;;
3218 esac
3219
3220 : see whether [:lower:] and [:upper:] are supported character classes
3221 echo " "
3222 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`"-"`echo AbyZ | $tr '[:upper:]' '[:lower:]' 2>/dev/null`" in
3223 ABYZ-abyz)
3224         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
3225         up='[:upper:]'
3226         low='[:lower:]'
3227         ;;
3228 *)      # There is a discontinuity in EBCDIC between 'R' and 'S'
3229         # (0xd9 and 0xe2), therefore that is a nice testing point.
3230         if test "X$up" = X -o "X$low" = X; then
3231             case "`echo RS | $tr '[R-S]' '[r-s]' 2>/dev/null`" in
3232             rs) up='[A-Z]'
3233                 low='[a-z]'
3234                 ;;
3235             esac
3236         fi
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 | od -x 2>/dev/null`" in
3246             *D9E2*|*d9e2*)
3247                 echo "Hey, this might be EBCDIC." >&4
3248                 if test "X$up" = X -o "X$low" = X; then
3249                     case "`echo RS | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
3250                     rs) up='[A-IJ-RS-Z]'
3251                         low='[a-ij-rs-z]'
3252                         ;;
3253                     esac
3254                 fi
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                 ;;
3263             esac
3264         fi
3265 esac
3266 case "`echo RS | $tr \"$up\" \"$low\" 2>/dev/null`" in
3267 rs)
3268     echo "Using $up and $low to convert case." >&4
3269     ;;
3270 *)
3271     echo "I don't know how to translate letters from upper to lower case." >&4
3272     echo "Your tr is not acting any way I know of." >&4
3273     exit 1
3274     ;;
3275 esac
3276 : set up the translation script tr, must be called with ./tr of course
3277 cat >tr <<EOSC
3278 $startsh
3279 case "\$1\$2" in
3280 '[A-Z][a-z]') exec $tr '$up' '$low';;
3281 '[a-z][A-Z]') exec $tr '$low' '$up';;
3282 esac
3283 exec $tr "\$@"
3284 EOSC
3285 chmod +x tr
3286 $eunicefix tr
3287
3288 : Try to determine whether config.sh was made on this system
3289 case "$config_sh" in
3290 '')
3291 myuname=`$uname -a 2>/dev/null`
3292 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
3293 # Downcase everything to avoid ambiguity.
3294 # Remove slashes and single quotes so we can use parts of this in
3295 # directory and file names.
3296 # Remove newlines so myuname is sane to use elsewhere.
3297 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
3298 # because the A-Z/a-z are not consecutive.
3299 myuname=`echo $myuname | $sed -e "s,['/],,g" | \
3300         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
3301 newmyuname="$myuname"
3302 dflt=n
3303 case "$knowitall" in
3304 '')
3305         if test -f ../config.sh; then
3306                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
3307                         eval "`grep myuname= ../config.sh`"
3308                 fi
3309                 if test "X$myuname" = "X$newmyuname"; then
3310                         dflt=y
3311                 fi
3312         fi
3313         ;;
3314 *) dflt=y;;
3315 esac
3316
3317 : Get old answers from old config file if Configure was run on the
3318 : same system, otherwise use the hints.
3319 hint=default
3320 cd ..
3321 if test -f config.sh; then
3322         echo " "
3323         rp="I see a config.sh file.  Shall I use it to set the defaults?"
3324         . UU/myread
3325         case "$ans" in
3326         n*|N*) echo "OK, I'll ignore it."
3327                 mv config.sh config.sh.old
3328                 myuname="$newmyuname"
3329                 ;;
3330         *)  echo "Fetching default answers from your old config.sh file..." >&4
3331                 tmp_n="$n"
3332                 tmp_c="$c"
3333                 tmp_sh="$sh"
3334                 . ./config.sh
3335                 cp config.sh UU
3336                 n="$tmp_n"
3337                 c="$tmp_c"
3338                 : Older versions did not always set $sh.  Catch re-use of such
3339                 : an old config.sh.
3340                 case "$sh" in
3341                 '') sh="$tmp_sh" ;;
3342                 esac
3343                 hint=previous
3344                 ;;
3345         esac
3346 fi
3347 . ./UU/checkcc
3348 if test ! -f config.sh; then
3349         $cat <<EOM
3350
3351 First time through, eh?  I have some defaults handy for some systems
3352 that need some extra help getting the Configure answers right:
3353
3354 EOM
3355         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
3356         dflt=''
3357         : Half the following guesses are probably wrong... If you have better
3358         : tests or hints, please send them to perlbug@perl.org
3359         : The metaconfig authors would also appreciate a copy...
3360         $test -f /irix && osname=irix
3361         $test -f /xenix && osname=sco_xenix
3362         $test -f /dynix && osname=dynix
3363         $test -f /dnix && osname=dnix
3364         $test -f /lynx.os && osname=lynxos
3365         $test -f /unicos && osname=unicos && osvers=`$uname -r`
3366         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
3367         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
3368         $test -f /bin/mips && /bin/mips && osname=mips
3369         $test -d /usr/apollo/bin && osname=apollo
3370         $test -f /etc/saf/_sactab && osname=svr4
3371         $test -d /usr/include/minix && osname=minix && osvers=`$uname -r`
3372         $test -f /system/gnu_library/bin/ar.pm && osname=vos
3373         $test -f /sys/utilities/MultiView && osname=amigaos
3374         if $test -d /MachTen -o -d /MachTen_Folder; then
3375                 osname=machten
3376                 if $test -x /sbin/version; then
3377                         osvers=`/sbin/version | $awk '{print $2}' |
3378                         $sed -e 's/[A-Za-z]$//'`
3379                 elif $test -x /usr/etc/version; then
3380                         osvers=`/usr/etc/version | $awk '{print $2}' |
3381                         $sed -e 's/[A-Za-z]$//'`
3382                 else
3383                         osvers="$2.$3"
3384                 fi
3385         fi
3386
3387         $test -f /sys/posix.dll &&
3388                 $test -f /usr/bin/what &&
3389                 set X `/usr/bin/what /sys/posix.dll` &&
3390                 $test "$3" = UWIN &&
3391                 osname=uwin &&
3392                 osvers="$5"
3393
3394         if $test -f $uname; then
3395                 set X $myuname
3396                 shift
3397
3398                 case "$5" in
3399                 fps*) osname=fps ;;
3400                 mips*)
3401                         case "$4" in
3402                         umips) osname=umips ;;
3403                         *) osname=mips ;;
3404                         esac;;
3405                 [23]100) osname=mips ;;
3406                 i386*)
3407                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
3408                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
3409                                 osname='sco'
3410                                 osvers=$tmp
3411                         elif $test -f /etc/kconfig; then
3412                                 osname=isc
3413                                 if test "$lns" = "$ln -s"; then
3414                                         osvers=4
3415                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
3416                                         osvers=3
3417                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
3418                                         osvers=2
3419                                 fi
3420                         fi
3421                         tmp=''
3422                         ;;
3423                 pc*)
3424                         if test -n "$DJGPP"; then
3425                                 osname=dos
3426                                 osvers=djgpp
3427                         fi
3428                         ;;
3429                 esac
3430
3431                 case "$1" in
3432                 aix) osname=aix
3433                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
3434                         case "$tmp" in
3435                         # oslevel can fail with:
3436                         # oslevel: Unable to acquire lock.
3437                         *not\ found) osvers="$4"."$3" ;;
3438                         '<3240'|'<>3240') osvers=3.2.0 ;;
3439                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
3440                         '=3250'|'>3250') osvers=3.2.5 ;;
3441                         *) osvers=$tmp;;
3442                         esac
3443                         ;;
3444                 bitrig) osname=bitrig
3445                         osvers="$3"
3446                         ;;
3447                 bsd386) osname=bsd386
3448                         osvers=`$uname -r`
3449                         ;;
3450                 cygwin*) osname=cygwin
3451                         osvers="$3"
3452                         ;;
3453                 *dc.osx) osname=dcosx
3454                         osvers="$3"
3455                         ;;
3456                 dnix) osname=dnix
3457                         osvers="$3"
3458                         ;;
3459                 domainos) osname=apollo
3460                         osvers="$3"
3461                         ;;
3462                 dgux)   osname=dgux
3463                         osvers="$3"
3464                         ;;
3465                 dragonfly) osname=dragonfly
3466                         osvers="$3"
3467                         ;;
3468                 dynixptx*) osname=dynixptx
3469                         osvers=`echo "$4"|sed 's/^v//'`
3470                         ;;
3471                 freebsd) osname=freebsd
3472                         osvers="$3" ;;
3473                 genix)  osname=genix ;;
3474                 gnu)    osname=gnu
3475                         osvers="$3" ;;
3476                 hp*)    osname=hpux
3477                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
3478                         ;;
3479                 irix*)  osname=irix
3480                         case "$3" in
3481                         4*) osvers=4 ;;
3482                         5*) osvers=5 ;;
3483                         *)      osvers="$3" ;;
3484                         esac
3485                         ;;
3486                 linux)  osname=linux
3487                         case "$3" in
3488                         *)      osvers="$3" ;;
3489                         esac
3490                         $test -f /system/lib/libandroid.so && osname=linux-android
3491                         ;;
3492                 MiNT)   osname=mint
3493                         ;;
3494                 netbsd*) osname=netbsd
3495                         osvers="$3"
3496                         ;;
3497                 news-os) osvers="$3"
3498                         case "$3" in
3499                         4*) osname=newsos4 ;;
3500                         *) osname=newsos ;;
3501                         esac
3502                         ;;
3503                 nonstop-ux) osname=nonstopux ;;
3504                 openbsd) osname=openbsd
3505                         osvers="$3"
3506                         ;;
3507                 os2)    osname=os2
3508                         osvers="$4"
3509                         ;;
3510                 POSIX-BC | posix-bc ) osname=posix-bc
3511                         osvers="$3"
3512                         ;;
3513                 powerux | power_ux | powermax_os | powermaxos | \
3514                 powerunix | power_unix) osname=powerux
3515                         osvers="$3"
3516                         ;;
3517                 qnx) osname=qnx
3518                         osvers="$4"
3519                         ;;
3520                 solaris) osname=solaris
3521                         case "$3" in
3522                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3523                         *)      osvers="$3" ;;
3524                         esac
3525                         ;;
3526                 sunos) osname=sunos
3527                         case "$3" in
3528                         5*) osname=solaris
3529                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3530                         *)      osvers="$3" ;;
3531                         esac
3532                         ;;
3533                 titanos) osname=titanos
3534                         case "$3" in
3535                         1*) osvers=1 ;;
3536                         2*) osvers=2 ;;
3537                         3*) osvers=3 ;;
3538                         4*) osvers=4 ;;
3539                         *)      osvers="$3" ;;
3540                         esac
3541                         ;;
3542                 ultrix) osname=ultrix
3543                         osvers="$3"
3544                         ;;
3545                 osf1|mls+)      case "$5" in
3546                                 alpha)
3547                                         osname=dec_osf
3548                                         osvers=`sizer -v | awk -FUNIX '{print $2}' | awk '{print $1}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
3549                                         case "$osvers" in
3550                                         [1-9].[0-9]*) ;;
3551                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
3552                                         esac
3553                                         ;;
3554                         hp*)    osname=hp_osf1  ;;
3555                         mips)   osname=mips_osf1 ;;
3556                         esac
3557                         ;;
3558                 # UnixWare 7.1.2 is known as Open UNIX 8
3559                 openunix|unixware) osname=svr5
3560                         osvers="$4"
3561                         ;;
3562                 uts)    osname=uts
3563                         osvers="$3"
3564                         ;;
3565                 vos) osvers="$3"
3566                         ;;
3567                 $2) case "$osname" in
3568                         *isc*) ;;
3569                         *freebsd*) ;;
3570                         svr*)
3571                                 : svr4.x or possibly later
3572                                 case "svr$3" in
3573                                 ${osname}*)
3574                                         osname=svr$3
3575                                         osvers=$4
3576                                         ;;
3577                                 esac
3578                                 case "$osname" in
3579                                 svr4.0)
3580                                         : Check for ESIX
3581                                         if test -f /stand/boot ; then
3582                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3583                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3584                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3585                                                         if test -n "$isesix"; then
3586                                                                 osname=esix4
3587                                                         fi
3588                                                 fi
3589                                         fi
3590                                         ;;
3591                                 esac
3592                                 ;;
3593                         *)      if test -f /etc/systemid; then
3594                                         osname=sco
3595                                         set `echo $3 | $sed 's/\./ /g'` $4
3596                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3597                                                 osvers=$1.$2.$3
3598                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3599                                                 osvers=$1.$2
3600                                         elif $test -f $src/hints/sco_$1.sh; then
3601                                                 osvers=$1
3602                                         fi
3603                                 else
3604                                         case "$osname" in
3605                                         '') : Still unknown.  Probably a generic Sys V.
3606                                                 osname="sysv"
3607                                                 osvers="$3"
3608                                                 ;;
3609                                         esac
3610                                 fi
3611                                 ;;
3612                         esac
3613                         ;;
3614                 *)      case "$osname" in
3615                         '') : Still unknown.  Probably a generic BSD.
3616                                 osname="$1"
3617                                 osvers="$3"
3618                                 ;;
3619                         esac
3620                         ;;
3621                 esac
3622         else
3623                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3624                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3625                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3626                                 osname=news_os
3627                         fi
3628                         $rm -f UU/kernel.what
3629                 elif test -d c:/. -o -n "$is_os2" ; then
3630                         set X $myuname
3631                         osname=os2
3632                         osvers="$5"
3633                 fi
3634         fi
3635
3636         case "$targetarch" in
3637         '') ;;
3638         *)  hostarch=$osname
3639             case "$targetarch" in
3640                 nto*|*-nto-*)
3641                     # Will load qnx.sh, which should change osname to nto
3642                     osname=qnx
3643                     osvers=''
3644                     ;;
3645                 *linux-android*)
3646                     # Catch arm-linux-androideabi, mipsel-linux-android,
3647                     # and i686-linux-android
3648                     osname=linux-android
3649                     osvers=''
3650                     ;;
3651                 *linux*)
3652                     # Something like arm-linux-gnueabihf is really just
3653                     # plain linux.
3654                     osname=linux
3655                     osvers=''
3656                     ;;
3657                 *solaris*|*sunos*)
3658                     osname=solaris
3659                     # XXX perhaps we should just assume
3660                     # osvers to be 2, or maybe take the value
3661                     # from targetarch. Using $run before the
3662                     # hints are run is somewhat icky.
3663                     set X `$run $uname -a 2>/dev/null`
3664                     shift
3665                     case "$3" in
3666                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3667                         *)  osvers="$3" ;;
3668                     esac
3669                     ;;
3670                 *)
3671                     osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3672                     osvers=''
3673                 ;;
3674             esac
3675             ;;
3676         esac
3677
3678         : Now look for a hint file osname_osvers, unless one has been
3679         : specified already.
3680         case "$hintfile" in
3681         ''|' ')
3682                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3683                 : Also try without trailing minor version numbers.
3684                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3685                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3686                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3687                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3688                 case "$file" in
3689                 '') dflt=none ;;
3690                 *)  case "$osvers" in
3691                         '') dflt=$file
3692                                 ;;
3693                         *)  if $test -f $src/hints/$file.sh ; then
3694                                         dflt=$file
3695                                 elif $test -f $src/hints/$xfile.sh ; then
3696                                         dflt=$xfile
3697                                 elif $test -f $src/hints/$xxfile.sh ; then
3698                                         dflt=$xxfile
3699                                 elif $test -f $src/hints/$xxxfile.sh ; then
3700                                         dflt=$xxxfile
3701                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3702                                         dflt=$xxxxfile
3703                                 elif $test -f "$src/hints/${osname}.sh" ; then
3704                                         dflt="${osname}"
3705                                 else
3706                                         dflt=none
3707                                 fi
3708                                 ;;
3709                         esac
3710                         ;;
3711                 esac
3712                 if $test -f Policy.sh ; then
3713                         case "$dflt" in
3714                         *Policy*) ;;
3715                         none) dflt="Policy" ;;
3716                         *) dflt="Policy $dflt" ;;
3717                         esac
3718                 fi
3719                 ;;
3720         *)
3721                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3722                 ;;
3723         esac
3724
3725         if $test -f Policy.sh ; then
3726                 $cat <<EOM
3727
3728 There's also a Policy hint file available, which should make the
3729 site-specific (policy) questions easier to answer.
3730 EOM
3731
3732         fi
3733
3734         $cat <<EOM
3735
3736 You may give one or more space-separated answers, or "none" if appropriate.
3737 If you have a handcrafted Policy.sh file or a Policy.sh file generated by a
3738 previous run of Configure, you may specify it as well as or instead of
3739 OS-specific hints.  If hints are provided for your OS, you should use them:
3740 although Perl can probably be built without hints on many platforms, using
3741 hints often improve performance and may enable features that Configure can't
3742 set up on its own. If there are no hints that match your OS, specify "none";
3743 DO NOT give a wrong version or a wrong OS.
3744
3745 EOM
3746
3747         rp="Which of these apply, if any?"
3748         . UU/myread
3749         tans=$ans
3750         for file in $tans; do
3751                 if $test X$file = XPolicy -a -f Policy.sh; then
3752                         . Policy.sh
3753                         $cat Policy.sh >> UU/config.sh
3754                 elif $test -f $src/hints/$file.sh; then
3755                         . $src/hints/$file.sh
3756                         $cat $src/hints/$file.sh >> UU/config.sh
3757                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3758                         : nothing
3759                 else
3760                         : Give one chance to correct a possible typo.
3761                         echo "$file.sh does not exist"
3762                         dflt=$file
3763                         rp="hint to use instead?"
3764                         . UU/myread
3765                         for file in $ans; do
3766                                 if $test -f "$src/hints/$file.sh"; then
3767                                         . $src/hints/$file.sh
3768                                         $cat $src/hints/$file.sh >> UU/config.sh
3769                                 elif $test X$ans = X -o X$ans = Xnone ; then
3770                                         : nothing
3771                                 else
3772                                         echo "$file.sh does not exist -- ignored."
3773                                 fi
3774                         done
3775                 fi
3776         done
3777
3778         hint=recommended
3779         : Remember our hint file for later.
3780         if $test -f "$src/hints/$file.sh" ; then
3781                 hintfile="$file"
3782         else
3783                 hintfile=''
3784         fi
3785 fi
3786 cd UU
3787 ;;
3788 *)
3789         echo " "
3790         echo "Fetching default answers from $config_sh..." >&4
3791         tmp_n="$n"
3792         tmp_c="$c"
3793         cd ..
3794         cp $config_sh config.sh 2>/dev/null
3795         chmod +w config.sh
3796         . ./config.sh
3797         cd UU
3798         cp ../config.sh .
3799         n="$tmp_n"
3800         c="$tmp_c"
3801         hint=previous
3802         ;;
3803 esac
3804 . ./optdef.sh
3805
3806 : Restore computed paths
3807 for file in $loclist $trylist; do
3808         eval $file="\$_$file"
3809 done
3810
3811 cat << EOM
3812
3813 Configure uses the operating system name and version to set some defaults.
3814 The default value is probably right if the name rings a bell. Otherwise,
3815 since spelling matters for me, either accept the default or answer "none"
3816 to leave it blank.
3817
3818 EOM
3819 case "$osname" in
3820         ''|' ')
3821                 case "$hintfile" in
3822                 ''|' '|none) dflt=none ;;
3823                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3824                 esac
3825                 ;;
3826         *) dflt="$osname" ;;
3827 esac
3828 rp="Operating system name?"
3829 . ./myread
3830 case "$ans" in
3831 none)  osname='' ;;
3832 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3833 esac
3834 echo " "
3835 case "$osvers" in
3836         ''|' ')
3837                 case "$hintfile" in
3838                 ''|' '|none) dflt=none ;;
3839                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3840                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3841                         case "$dflt" in
3842                         ''|' ') dflt=none ;;
3843                         esac
3844                         ;;
3845                 esac
3846                 ;;
3847         *) dflt="$osvers" ;;
3848 esac
3849 rp="Operating system version?"
3850 . ./myread
3851 case "$ans" in
3852 none)  osvers='' ;;
3853 *) osvers="$ans" ;;
3854 esac
3855
3856
3857 . ./posthint.sh
3858
3859 : who configured the system
3860 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3861 case "$cf_by" in
3862 "")
3863         cf_by=`(logname) 2>/dev/null`
3864         case "$cf_by" in
3865         "")
3866                 cf_by=`(whoami) 2>/dev/null`
3867                 case "$cf_by" in
3868                 "") cf_by=unknown ;;
3869                 esac ;;
3870         esac ;;
3871 esac
3872
3873 : decide how portable to be.  Allow command line overrides.
3874 case "$d_portable" in
3875 "$undef") ;;
3876 *)      d_portable="$define" ;;
3877 esac
3878
3879 : set up shell script to do ~ expansion
3880 cat >filexp <<EOSS
3881 $startsh
3882 : expand filename
3883 case "\$1" in
3884  \~/*|\~)
3885         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3886         ;;
3887  \~*)
3888         if $test -f /bin/csh; then
3889                 /bin/csh -f -c "glob \$1"
3890                 failed=\$?
3891                 echo ""
3892                 exit \$failed
3893         else
3894                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3895                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3896                 if $test ! -d "\$dir"; then
3897                         me=\`basename \$0\`
3898                         echo "\$me: can't locate home directory for: \$name" >&2
3899                         exit 1
3900                 fi
3901                 case "\$1" in
3902                 */*)
3903                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3904                         ;;
3905                 *)
3906                         echo \$dir
3907                         ;;
3908                 esac
3909         fi
3910         ;;
3911 *)
3912         echo \$1
3913         ;;
3914 esac
3915 EOSS
3916 chmod +x filexp
3917 $eunicefix filexp
3918
3919 : now set up to get a file name
3920 cat <<EOS >getfile
3921 $startsh
3922 EOS
3923 cat <<'EOSC' >>getfile
3924 tilde=''
3925 fullpath=''
3926 already=''
3927 skip=''
3928 none_ok=''
3929 exp_file=''
3930 nopath_ok=''
3931 orig_rp="$rp"
3932 orig_dflt="$dflt"
3933 case "$gfpth" in
3934 '') gfpth='.' ;;
3935 esac
3936
3937 case "$fn" in
3938 *\(*)
3939         : getfile will accept an answer from the comma-separated list
3940         : enclosed in parentheses even if it does not meet other criteria.
3941         expr "$fn" : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3942         fn=`echo $fn | sed 's/(.*)//'`
3943         ;;
3944 esac
3945
3946 case "$fn" in
3947 *:*)
3948         loc_file=`expr $fn : '.*:\(.*\)'`
3949         fn=`expr $fn : '\(.*\):.*'`
3950         ;;
3951 esac
3952
3953 case "$fn" in
3954 *~*) tilde=true;;
3955 esac
3956 case "$fn" in
3957 */*) fullpath=true;;
3958 esac
3959 case "$fn" in
3960 *+*) skip=true;;
3961 esac
3962 case "$fn" in
3963 *n*) none_ok=true;;
3964 esac
3965 case "$fn" in
3966 *e*) exp_file=true;;
3967 esac
3968 case "$fn" in
3969 *p*) nopath_ok=true;;
3970 esac
3971
3972 case "$fn" in
3973 *f*) type='File';;
3974 *d*) type='Directory';;
3975 *l*) type='Locate';;
3976 esac
3977
3978 what="$type"
3979 case "$what" in
3980 Locate) what='File';;
3981 esac
3982
3983 case "$exp_file" in
3984 '')
3985         case "$d_portable" in
3986         "$define") ;;
3987         *) exp_file=true;;
3988         esac
3989         ;;
3990 esac
3991
3992 cd ..
3993 while test "$type"; do
3994         redo=''
3995         rp="$orig_rp"
3996         dflt="$orig_dflt"
3997         case "$tilde" in
3998         true) rp="$rp (~name ok)";;
3999         esac
4000         . UU/myread
4001         if test -f UU/getfile.ok && \
4002                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
4003         then
4004                 value="$ans"
4005                 ansexp="$ans"
4006                 break
4007         fi
4008         case "$ans" in
4009         none)
4010                 value=''
4011                 ansexp=''
4012                 case "$none_ok" in
4013                 true) type='';;
4014                 esac
4015                 ;;
4016         *)
4017                 case "$tilde" in
4018                 '') value="$ans"
4019                         ansexp="$ans";;
4020                 *)
4021                         value=`UU/filexp $ans`
4022                         case $? in
4023                         0)
4024                                 if test "$ans" != "$value"; then
4025                                         echo "(That expands to $value on this system.)"
4026                                 fi
4027                                 ;;
4028                         *) value="$ans";;
4029                         esac
4030                         ansexp="$value"
4031                         case "$exp_file" in
4032                         '') value="$ans";;
4033                         esac
4034                         ;;
4035                 esac
4036                 case "$fullpath" in
4037                 true)
4038                         case "$ansexp" in
4039                         /*) value="$ansexp" ;;
4040                         [a-zA-Z]:/*) value="$ansexp" ;;
4041                         *)
4042                                 redo=true
4043                                 case "$already" in
4044                                 true)
4045                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
4046                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
4047                                         ;;
4048                                 *)
4049                                 echo "Please give a full path name, starting with slash." >&4
4050                                         case "$tilde" in
4051                                         true)
4052                                 echo "Note that using ~name is ok provided it expands well." >&4
4053                                                 already=true
4054                                                 ;;
4055                                         esac
4056                                 esac
4057                                 ;;
4058                         esac
4059                         ;;
4060                 esac
4061                 case "$redo" in
4062                 '')
4063                         case "$type" in
4064                         File)
4065                                 for fp in $gfpth; do
4066                                         if test "X$fp" = X.; then
4067                                             pf="$ansexp"
4068                                         else    
4069                                             pf="$fp/$ansexp"
4070                                         fi
4071                                         if test -f "$pf"; then
4072                                                 type=''
4073                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
4074                                         then
4075                                                 echo "($value is not a plain file, but that's ok.)"
4076                                                 type=''
4077                                         fi
4078                                         if test X"$type" = X; then
4079                                             value="$pf"
4080                                             break
4081                                         fi
4082                                 done
4083                                 ;;
4084                         Directory)
4085                                 for fp in $gfpth; do
4086                                         if test "X$fp" = X.; then
4087                                             dir="$ans"
4088                                             direxp="$ansexp"
4089                                         else    
4090                                             dir="$fp/$ansexp"
4091                                             direxp="$fp/$ansexp"
4092                                         fi
4093                                         if test -d "$direxp"; then
4094                                                 type=''
4095                                                 value="$dir"
4096                                                 break
4097                                         fi
4098                                 done
4099                                 ;;
4100                         Locate)
4101                                 if test -d "$ansexp"; then
4102                                         echo "(Looking for $loc_file in directory $value.)"
4103                                         value="$value/$loc_file"
4104                                         ansexp="$ansexp/$loc_file"
4105                                 fi
4106                                 if test -f "$ansexp"; then
4107                                         type=''
4108                                 fi
4109                                 case "$nopath_ok" in
4110                                 true)   case "$value" in
4111                                         */*) ;;
4112                                         *)      echo "Assuming $value will be in people's path."
4113                                                 type=''
4114                                                 ;;
4115                                         esac
4116                                         ;;
4117                                 esac
4118                                 ;;
4119                         esac
4120
4121                         case "$skip" in
4122                         true) type='';
4123                         esac
4124
4125                         case "$type" in
4126                         '') ;;
4127                         *)
4128                                 if test "$fastread" = yes; then
4129                                         dflt=y
4130                                 else
4131                                         dflt=n
4132                                 fi
4133                                 rp="$what $value doesn't exist.  Use that name anyway?"
4134                                 . UU/myread
4135                                 dflt=''
4136                                 case "$ans" in
4137                                 y*) type='';;
4138                                 *) echo " ";;
4139                                 esac
4140                                 ;;
4141                         esac
4142                         ;;
4143                 esac
4144                 ;;
4145         esac
4146 done
4147 cd UU
4148 ans="$value"
4149 rp="$orig_rp"
4150 dflt="$orig_dflt"
4151 rm -f getfile.ok
4152 test "X$gfpthkeep" != Xy && gfpth=""
4153 EOSC
4154
4155 : determine root of directory hierarchy where package will be installed.
4156 case "$prefix" in
4157 '')
4158         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4159         ;;
4160 *?/)
4161         dflt=`echo "$prefix" | sed 's/.$//'`
4162         ;;
4163 *)
4164         dflt="$prefix"
4165         ;;
4166 esac
4167 $cat <<EOM
4168
4169 By default, $package will be installed in $dflt/bin, manual pages
4170 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4171 installation directories. Typically this is something like /usr/local.
4172 If you wish to have binaries under /usr/bin but other parts of the
4173 installation under /usr/local, that's ok: you will be prompted
4174 separately for each of the installation directories, the prefix being
4175 only used to set the defaults.
4176
4177 EOM
4178 fn=d~
4179 rp='Installation prefix to use?'
4180 . ./getfile
4181 oldprefix=''
4182 case "$prefix" in
4183 '') ;;
4184 *)
4185         case "$ans" in
4186         "$prefix") ;;
4187         *) oldprefix="$prefix";;
4188         esac
4189         ;;
4190 esac
4191 prefix="$ans"
4192 prefixexp="$ansexp"
4193
4194 : allow them to override the AFS root
4195 case "$afsroot" in
4196 '')     afsroot=/afs ;;
4197 *)      afsroot=$afsroot ;;
4198 esac
4199
4200 : is AFS running?
4201 echo " "
4202 case "$afs" in
4203 $define|true)   afs=true ;;
4204 $undef|false)   afs=false ;;
4205 *)      if $test -d $afsroot; then
4206                 afs=true
4207         else
4208                 afs=false
4209         fi
4210         ;;
4211 esac
4212 if $afs; then
4213         echo "AFS may be running... I'll be extra cautious then..." >&4
4214 else
4215         echo "AFS does not seem to be running..." >&4
4216 fi
4217
4218 : determine installation prefix for where package is to be installed.
4219 if $afs; then
4220 $cat <<EOM
4221
4222 Since you are running AFS, I need to distinguish the directory in which
4223 files will reside from the directory in which they are installed (and from
4224 which they are presumably copied to the former directory by occult means).
4225
4226 EOM
4227         case "$installprefix" in
4228         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4229         *) dflt="$installprefix";;
4230         esac
4231 else
4232 $cat <<EOM
4233
4234 In some special cases, particularly when building $package for distribution,
4235 it is convenient to distinguish the directory in which files should be
4236 installed from the directory ($prefix) in which they will
4237 eventually reside.  For most users, these two directories are the same.
4238
4239 EOM
4240         case "$installprefix" in
4241         '') dflt=$prefix ;;
4242         *) dflt=$installprefix;;
4243         esac
4244 fi
4245 fn=d~
4246 rp='What installation prefix should I use for installing files?'
4247 . ./getfile
4248 installprefix="$ans"
4249 installprefixexp="$ansexp"
4250
4251 : Perform the prefixexp/installprefixexp correction if necessary
4252 cat <<EOS >installprefix
4253 $startsh
4254 EOS
4255 cat <<'EOSC' >>installprefix
4256 : Change installation prefix, if necessary.
4257 if $test X"$prefix" != X"$installprefix"; then
4258     eval "install${prefixvar}=\`echo \$${prefixvar}exp | sed \"s#^\$prefixexp#\$installprefixexp#\"\`"
4259 else
4260     eval "install${prefixvar}=\"\$${prefixvar}exp\""
4261 fi
4262 EOSC
4263 chmod +x installprefix
4264 $eunicefix installprefix
4265
4266 : Set variables such as privlib and privlibexp from the output of ./getfile
4267 : performing the prefixexp/installprefixexp correction if necessary.
4268 cat <<EOS >setprefixvar
4269 $startsh
4270 EOS
4271 cat <<'EOSC' >>setprefixvar
4272 eval "${prefixvar}=\"\$ans\""
4273 eval "${prefixvar}exp=\"\$ansexp\""
4274 . ./installprefix
4275 EOSC
4276 chmod +x setprefixvar
4277 $eunicefix setprefixvar
4278
4279 : set up the script used to warn in case of inconsistency
4280 cat <<EOS >whoa
4281 $startsh
4282 EOS
4283 cat <<'EOSC' >>whoa
4284 dflt=y
4285 case "$hint" in
4286     recommended)
4287         case "$hintfile" in
4288         '')     echo "The $hint value for \$$var on this machine was \"$was\"!" >&4
4289                 ;;
4290         *)      echo "Hmm.  Based on the hints in hints/$hintfile.sh, " >&4
4291                 echo "the $hint value for \$$var on this machine was \"$was\"!" >&4
4292                 ;;
4293         esac
4294         ;;
4295     *)  echo " "
4296         echo "*** WHOA THERE!!! ***" >&4
4297         echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
4298         ;;
4299 esac
4300 rp="    Keep the $hint value?"
4301 . ./myread
4302 case "$ans" in
4303 y) td=$was; tu=$was;;
4304 esac
4305 EOSC
4306
4307 : function used to set '$1' to '$val'
4308 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
4309 case "$val$was" in
4310 $define$undef) . ./whoa; eval "$var=\$td";;
4311 $undef$define) . ./whoa; eval "$var=\$tu";;
4312 *) eval "$var=$val";;
4313 esac'
4314
4315 : get the patchlevel
4316 echo " "
4317 echo "Getting the current patchlevel..." >&4
4318 if $test -r $rsrc/patchlevel.h;then
4319         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4320         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4321         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4322         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4323         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4324         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4325         perl_patchlevel=`egrep ',"(MAINT|SMOKE)[0-9][0-9]*"' $rsrc/patchlevel.h|tail -1|sed 's/[^0-9]//g'`
4326 else
4327         revision=0
4328         patchlevel=0
4329         subversion=0
4330         api_revision=0
4331         api_version=0
4332         api_subversion=0
4333         perl_patchlevel=0
4334         $echo "(You do not have patchlevel.h.  Eek.)"
4335 fi
4336 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
4337 version_patchlevel_string="version $patchlevel subversion $subversion"
4338 case "$perl_patchlevel" in
4339 0|'') ;;
4340 *)  perl_patchlevel=`echo $perl_patchlevel | sed 's/.* //'`
4341     version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel"
4342     ;;
4343 esac
4344
4345 $echo "(You have $package $version_patchlevel_string.)"
4346
4347 case "$osname" in
4348 dos|vms)
4349         : XXX Should be a Configure test for double-dots in filenames.
4350         version=`echo $revision $patchlevel $subversion | \
4351                  $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
4352         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4353                  $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
4354         ;;
4355 *)
4356         version=`echo $revision $patchlevel $subversion | \
4357                  $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
4358         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4359                  $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
4360         ;;
4361 esac
4362 : Special case the 5.005_xx maintenance series, which used 5.005
4363 : without any subversion label as a subdirectory in $sitelib
4364 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4365         api_versionstring='5.005'
4366 fi
4367
4368 : Do we want threads support and if so, what type
4369 case "$usethreads" in
4370 $define|true|[yY]*)     dflt='y';;
4371 *)     # Catch case where user specified ithreads or 5005threads but
4372        # forgot -Dusethreads (A.D. 4/2002)
4373        case "$useithreads$use5005threads" in
4374        *$define*)       dflt='y';;
4375        *)               dflt='n';;
4376        esac
4377        ;;
4378 esac
4379 cat <<EOM
4380
4381 Perl can be built to offer a form of threading support on some systems
4382 To do so, Configure can be run with -Dusethreads.
4383
4384 Note that Perl built with threading support runs slightly slower
4385 and uses slightly more memory than plain Perl.
4386
4387 If this doesn't make any sense to you, just accept the default '$dflt'.
4388 EOM
4389 rp='Build a threading Perl?'
4390 . ./myread
4391 case "$ans" in
4392 y|Y)    val="$define" ;;
4393 *)      val="$undef" ;;
4394 esac
4395 set usethreads
4396 eval $setvar
4397
4398 if $test $patchlevel -lt 9; then
4399     case "$usethreads" in
4400     $define)
4401         : Default to ithreads unless overridden on command line or with
4402         : old config.sh
4403         dflt='y'
4404         case "$use5005threads" in
4405                 $define|true|[yY]*)
4406                         echo "5.005 threads are no longer supported"
4407                         exit 1
4408                 ;;
4409         esac
4410         case "$useithreads" in
4411                 $undef|false|[nN]*) dflt='n';;
4412         esac
4413         rp='Use the newer interpreter-based ithreads?'
4414         . ./myread
4415         case "$ans" in
4416         y|Y)    val="$define" ;;
4417         *)      val="$undef" ;;
4418         esac
4419         set useithreads
4420         eval $setvar
4421         : Now set use5005threads to the opposite value.
4422         case "$useithreads" in
4423         $define) val="$undef" ;;
4424         *) val="$define" ;;
4425         esac
4426         set use5005threads
4427         eval $setvar
4428         ;;
4429     *)
4430         useithreads="$undef"
4431         use5005threads="$undef"
4432         ;;
4433     esac
4434
4435     case "$useithreads$use5005threads" in
4436     "$define$define")
4437         $cat >&4 <<EOM
4438
4439 You cannot have both the ithreads and the 5.005 threads enabled
4440 at the same time.  Disabling the 5.005 threads since they are
4441 much less stable than the ithreads.
4442
4443 EOM
4444         use5005threads="$undef"
4445         ;;
4446     esac
4447
4448 else
4449 : perl-5.9.x and later
4450
4451     if test X"$usethreads" = "X$define"; then
4452         case "$use5005threads" in
4453             $define|true|[yY]*)
4454                 $cat >&4 <<EOM
4455
4456 5.005 threads has been removed for 5.10.  Perl will be built using ithreads.
4457
4458 EOM
4459             ;;
4460         esac
4461     fi
4462
4463     use5005threads="$undef"
4464     useithreads="$usethreads"
4465 fi
4466
4467 case "$d_oldpthreads" in
4468 '')     : Configure tests would be welcome here.  For now, assume undef.
4469         val="$undef" ;;
4470 *)      val="$d_oldpthreads" ;;
4471 esac
4472 set d_oldpthreads
4473 eval $setvar
4474
4475
4476 : Look for a hint-file generated 'call-back-unit'.  If the
4477 : user has specified that a threading perl is to be built,
4478 : we may need to set or change some other defaults.
4479 if $test -f usethreads.cbu; then
4480     echo "Your platform has some specific hints regarding threaded builds, using them..."
4481     . ./usethreads.cbu
4482 else
4483     case "$usethreads" in
4484         "$define"|true|[yY]*)
4485                 $cat <<EOM
4486 (Your platform does not have any specific hints for threaded builds.
4487  Assuming POSIX threads, then.)
4488 EOM
4489         ;;
4490     esac
4491 fi
4492
4493 : Check if multiplicity is required
4494 cat <<EOM
4495
4496 Perl can be built so that multiple Perl interpreters can coexist
4497 within the same Perl executable.
4498 EOM
4499
4500 case "$useithreads" in
4501 $define)
4502         cat <<EOM
4503 This multiple interpreter support is required for interpreter-based threads.
4504 EOM
4505         val="$define"
4506         ;;
4507 *)      case "$usemultiplicity" in
4508         $define|true|[yY]*)     dflt='y';;
4509         *) dflt='n';;
4510         esac
4511         echo " "
4512         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
4513         rp='Build Perl for multiplicity?'
4514         . ./myread
4515         case "$ans" in
4516         y|Y)    val="$define" ;;
4517         *)      val="$undef" ;;
4518         esac
4519         ;;
4520 esac
4521 set usemultiplicity
4522 eval $setvar
4523
4524 : Check if morebits is requested
4525 case "$usemorebits" in
4526 "$define"|true|[yY]*)
4527         use64bitint="$define"
4528         uselongdouble="$define"
4529         usemorebits="$define"
4530         ;;
4531 *)      usemorebits="$undef"
4532         ;;
4533 esac
4534
4535 : Determine the C compiler to be used
4536 echo " "
4537 case "$cc" in
4538 '') dflt=cc;;
4539 *) dflt="$cc";;
4540 esac
4541 rp="Use which C compiler?"
4542 . ./myread
4543 cc="$ans"
4544
4545 : See whether they have no cc but they do have gcc
4546 . ./trygcc
4547 if $test -f cc.cbu; then
4548     . ./cc.cbu
4549 fi
4550 . ./checkcc
4551
4552 : make some quick guesses about what we are up against
4553 echo " "
4554 $echo $n "Hmm...  $c"
4555 echo exit 1 >bsd
4556 echo exit 1 >usg
4557 echo exit 1 >v7
4558 echo exit 1 >osf1
4559 echo exit 1 >eunice
4560 echo exit 1 >xenix
4561 echo exit 1 >venix
4562 echo exit 1 >os2
4563 d_bsd="$undef"
4564 $cat $sysroot/usr/include/signal.h $sysroot/usr/include/sys/signal.h >foo 2>/dev/null
4565 if test -f /osf_boot || $contains 'OSF/1' $sysroot/usr/include/ctype.h >/dev/null 2>&1
4566 then
4567         echo "Looks kind of like an OSF/1 system, but we'll see..."
4568         echo exit 0 >osf1
4569 elif test `echo abc | $tr a-z A-Z` = Abc ; then
4570         xxx=`./loc addbib blurfl $pth`
4571         if $test -f $xxx; then
4572         echo "Looks kind of like a USG system with BSD features, but we'll see..."
4573                 echo exit 0 >bsd
4574                 echo exit 0 >usg
4575         else
4576                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
4577                         echo "Looks kind of like an extended USG system, but we'll see..."
4578                 else
4579                         echo "Looks kind of like a USG system, but we'll see..."
4580                 fi
4581                 echo exit 0 >usg
4582         fi
4583 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
4584         echo "Looks kind of like a BSD system, but we'll see..."
4585         d_bsd="$define"
4586         echo exit 0 >bsd
4587 else
4588         echo "Looks kind of like a Version 7 system, but we'll see..."
4589         echo exit 0 >v7
4590 fi
4591 case "$eunicefix" in
4592 *unixtovms*)
4593         $cat <<'EOI'
4594 There is, however, a strange, musty smell in the air that reminds me of
4595 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
4596 EOI
4597         echo exit 0 >eunice
4598         d_eunice="$define"
4599 : it so happens the Eunice I know will not run shell scripts in Unix format
4600         ;;
4601 *)
4602         echo " "
4603         echo "Congratulations.  You aren't running Eunice."
4604         d_eunice="$undef"
4605         ;;
4606 esac
4607 : Detect OS2.  The p_ variable is set above in the Head.U unit.
4608 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
4609 : semicolon as a patch separator
4610 case "$p_" in
4611 :) ;;
4612 *)
4613         $cat <<'EOI'
4614 I have the feeling something is not exactly right, however...don't tell me...
4615 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
4616 (Or you may be running DOS with DJGPP.)
4617 EOI
4618         echo exit 0 >os2
4619         ;;
4620 esac
4621 if test -f /xenix; then
4622         echo "Actually, this looks more like a XENIX system..."
4623         echo exit 0 >xenix
4624         d_xenix="$define"
4625 else
4626         echo " "
4627         echo "It's not Xenix..."
4628         d_xenix="$undef"
4629 fi
4630 chmod +x xenix
4631 $eunicefix xenix
4632 if test -f /venix; then
4633         echo "Actually, this looks more like a VENIX system..."
4634         echo exit 0 >venix
4635 else
4636         echo " "
4637         if ./xenix; then
4638                 : null
4639         else
4640                 echo "Nor is it Venix..."
4641         fi
4642 fi
4643 chmod +x bsd usg v7 osf1 eunice xenix venix os2
4644 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
4645 $rm -f foo
4646
4647 : Check if we are using GNU gcc and what its version is
4648 echo " "
4649 echo "Checking for GNU cc in disguise and/or its version number..." >&4
4650 $cat >try.c <<EOM
4651 #include <stdio.h>
4652 int main() {
4653 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
4654 #ifdef __VERSION__
4655         printf("%s\n", __VERSION__);
4656 #else
4657         printf("%s\n", "1");
4658 #endif
4659 #endif
4660         return(0);
4661 }
4662 EOM
4663 if $cc -o try $ccflags $ldflags try.c; then
4664         gccversion=`$run ./try`
4665         case "$gccversion" in
4666         '') echo "You are not using GNU cc." ;;
4667         *)  echo "You are using GNU cc $gccversion."
4668             ccname=gcc
4669             ;;
4670         esac
4671 else
4672         echo " "
4673         echo "*** WHOA THERE!!! ***" >&4
4674         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
4675         case "$knowitall" in
4676         '')
4677         echo "    You'd better start hunting for one and let me know about it." >&4
4678                 exit 1
4679                 ;;
4680         esac
4681 fi
4682 $rm -f try try.*
4683 case "$gccversion" in
4684 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
4685 esac
4686 case "$gccversion" in
4687 '') gccosandvers='' ;;
4688 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
4689    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
4690    gccshortvers=''
4691    case "$gccosandvers" in
4692    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
4693    $osname$osvers) ;; # looking good
4694    $osname*) cat <<EOM >&4
4695
4696 *** WHOA THERE!!! ***
4697
4698     Your gcc has not been compiled for the exact release of
4699     your operating system ($gccosandvers versus $osname$osvers).
4700
4701     In general it is a good idea to keep gcc synchronized with
4702     the operating system because otherwise serious problems
4703     may ensue when trying to compile software, like Perl.
4704
4705     I'm trying to be optimistic here, though, and will continue.
4706     If later during the configuration and build icky compilation
4707     problems appear (headerfile conflicts being the most common
4708     manifestation), I suggest reinstalling the gcc to match
4709     your operating system release.
4710
4711 EOM
4712       ;;
4713    *) gccosandvers='' ;; # failed to parse, better be silent
4714    esac
4715    ;;
4716 esac
4717 case "$ccname" in
4718 '') ccname="$cc" ;;
4719 esac
4720
4721 # gcc 3.* complain about adding -Idirectories that they already know about,
4722 # so we will take those off from locincpth.
4723 case "$gccversion" in
4724 3*)
4725     echo "main(){}">try.c
4726     for incdir in $locincpth; do
4727        warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \
4728              grep '^c[cp]p*[01]: warning: changing search order '`
4729        if test "X$warn" != X; then
4730            locincpth=`echo " $locincpth " | sed "s! $incdir ! !"`
4731        fi
4732     done
4733     $rm -f try try.*
4734 esac
4735
4736 # gcc 4.9 by default does some optimizations that break perl.
4737 # see ticket 121505.
4738 #
4739 # The -fwrapv disables those optimizations (and probably others,) so
4740 # for gcc 4.9 (and later, since the optimizations probably won't go
4741 # away), add -fwrapv unless the user requests -fno-wrapv, which
4742 # disables -fwrapv, or if the user requests -fsanitize=undefined,
4743 # which turns the overflows -fwrapv ignores into runtime errors.
4744 case "$gccversion" in
4745 4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*)
4746     case "$ccflags" in
4747     *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;;
4748     *) ccflags="$ccflags -fwrapv" ;;
4749     esac
4750 esac
4751
4752 : What should the include directory be ?
4753 : Use sysroot if set, so findhdr looks in the right place.
4754 echo " "
4755 $echo $n "Hmm...  $c"
4756 dflt="$sysroot/usr/include"
4757 incpath=''
4758 mips_type=''
4759 if $test -f /bin/mips && /bin/mips; then
4760         echo "Looks like a MIPS system..."
4761         $cat >usr.c <<'EOCP'
4762 #ifdef SYSTYPE_BSD43
4763 /bsd43
4764 #endif
4765 EOCP
4766         if $cc $cppflags -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
4767                 dflt='/bsd43/usr/include'
4768                 incpath='/bsd43'
4769                 mips_type='BSD 4.3'
4770         else
4771                 mips_type='System V'
4772         fi
4773         $rm -f usr.c usr.out
4774         echo "and you're compiling with the $mips_type compiler and libraries."
4775         xxx_prompt=y
4776         echo "exit 0" >mips
4777 else
4778         echo "Doesn't look like a MIPS system."
4779         xxx_prompt=n
4780         echo "exit 1" >mips
4781 fi
4782 chmod +x mips
4783 $eunicefix mips
4784 case "$usrinc" in
4785 '') ;;
4786 *) dflt="$usrinc";;
4787 esac
4788 case "$xxx_prompt" in
4789 y)      fn=d/
4790         echo " "
4791         rp='Where are the include files you want to use?'
4792         . ./getfile
4793         usrinc="$ans"
4794         ;;
4795 *)      usrinc="$dflt"
4796         ;;
4797 esac
4798
4799 : see how we invoke the C preprocessor
4800 echo " "
4801 echo "Now, how can we feed standard input to your C preprocessor..." >&4
4802 cat <<'EOT' >testcpp.c
4803 #define ABC abc
4804 #define XYZ xyz
4805 ABC.XYZ
4806 EOT
4807 cd ..
4808 if test ! -f cppstdin; then
4809         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
4810                 # AIX cc -E doesn't show the absolute headerfile
4811                 # locations but we'll cheat by using the -M flag.
4812                 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
4813         else
4814                 echo 'cat >.$$.c; '"$cc $cppflags"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
4815         fi
4816 else
4817         echo "Keeping your $hint cppstdin wrapper."
4818 fi
4819 chmod 755 cppstdin
4820 wrapper=`pwd`/cppstdin
4821 ok='false'
4822 cd UU
4823
4824 if $test "X$cppstdin" != "X" && \
4825         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
4826         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4827 then
4828         echo "You used to use $cppstdin $cppminus so we'll use that again."
4829         case "$cpprun" in
4830         '') echo "But let's see if we can live without a wrapper..." ;;
4831         *)
4832                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
4833                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4834                 then
4835                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
4836                         ok='true'
4837                 else
4838                         echo "(However, $cpprun $cpplast does not work, let's see...)"
4839                 fi
4840                 ;;
4841         esac
4842 else
4843         case "$cppstdin" in
4844         '') ;;
4845         *)
4846                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
4847                 ;;
4848         esac
4849 fi
4850
4851 if $ok; then
4852         : nothing
4853 elif echo 'Maybe "'"$cc"' -E" will work...'; \
4854         $cc -E <testcpp.c >testcpp.out 2>&1; \
4855         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4856         echo "Yup, it does."
4857         x_cpp="$cc $cppflags -E"
4858         x_minus='';
4859 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4860         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4861         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4862         echo "Yup, it does."
4863         x_cpp="$cc $cppflags -E"
4864         x_minus='-';
4865 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4866         $cc -P <testcpp.c >testcpp.out 2>&1; \
4867         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4868         echo "Yipee, that works!"