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