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