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