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