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