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