This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
175ce31e058d31ee59ef4bb5527e66a287a7d133
[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. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Tue Sep 14 23:12:10 EET DST 1999 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 d_atolf=''
282 d_atoll=''
283 baserev=''
284 bin=''
285 binexp=''
286 installbin=''
287 bincompat5005=''
288 d_bincompat5005=''
289 byteorder=''
290 cc=''
291 gccversion=''
292 ccflags=''
293 cppflags=''
294 ldflags=''
295 lkflags=''
296 locincpth=''
297 optimize=''
298 cf_email=''
299 cf_by=''
300 cf_time=''
301 contains=''
302 cpp_stuff=''
303 cpplast=''
304 cppminus=''
305 cpprun=''
306 cppstdin=''
307 crosscompile=''
308 d_access=''
309 d_accessx=''
310 d_alarm=''
311 d_attribut=''
312 d_bcmp=''
313 d_bcopy=''
314 d_bzero=''
315 d_casti32=''
316 castflags=''
317 d_castneg=''
318 d_chown=''
319 d_chroot=''
320 d_chsize=''
321 d_closedir=''
322 d_void_closedir=''
323 d_const=''
324 cryptlib=''
325 d_crypt=''
326 d_csh=''
327 full_csh=''
328 d_cuserid=''
329 d_dbl_dig=''
330 d_difftime=''
331 d_dlerror=''
332 d_dlopen=''
333 d_dlsymun=''
334 d_dosuid=''
335 d_suidsafe=''
336 d_drand48proto=''
337 d_dup2=''
338 d_eaccess=''
339 d_endgrent=''
340 d_endhent=''
341 d_endnent=''
342 d_endpent=''
343 d_endpwent=''
344 d_endsent=''
345 d_endspent=''
346 d_fchmod=''
347 d_fchown=''
348 d_fcntl=''
349 d_fd_macros=''
350 d_fd_set=''
351 d_fds_bits=''
352 d_fgetpos=''
353 d_flexfnam=''
354 d_flock=''
355 d_fork=''
356 d_fseeko=''
357 d_fsetpos=''
358 d_ftello=''
359 d_ftime=''
360 d_gettimeod=''
361 d_Gconvert=''
362 d_getgrent=''
363 d_getgrps=''
364 d_gethbyaddr=''
365 d_gethbyname=''
366 d_gethent=''
367 aphostname=''
368 d_gethname=''
369 d_phostname=''
370 d_uname=''
371 d_gethostprotos=''
372 d_getlogin=''
373 d_getmntent=''
374 d_getnbyaddr=''
375 d_getnbyname=''
376 d_getnent=''
377 d_getnetprotos=''
378 d_getpent=''
379 d_getpgid=''
380 d_getpgrp2=''
381 d_bsdgetpgrp=''
382 d_getpgrp=''
383 d_getppid=''
384 d_getprior=''
385 d_getpbyname=''
386 d_getpbynumber=''
387 d_getprotoprotos=''
388 d_getpwent=''
389 d_getsent=''
390 d_getservprotos=''
391 d_getspent=''
392 d_getspnam=''
393 d_getsbyname=''
394 d_getsbyport=''
395 d_gnulibc=''
396 d_hasmntopt=''
397 d_htonl=''
398 d_inetaton=''
399 d_isascii=''
400 d_killpg=''
401 d_lchown=''
402 d_ldbl_dig=''
403 d_link=''
404 d_locconv=''
405 d_lockf=''
406 d_longdbl=''
407 longdblsize=''
408 d_longlong=''
409 longlongsize=''
410 d_lstat=''
411 d_madvise=''
412 d_mblen=''
413 d_mbstowcs=''
414 d_mbtowc=''
415 d_memchr=''
416 d_memcmp=''
417 d_memcpy=''
418 d_memmove=''
419 d_memset=''
420 d_mkdir=''
421 d_mkfifo=''
422 d_mktime=''
423 d_mmap=''
424 mmaptype=''
425 d_mprotect=''
426 d_msg=''
427 d_msgctl=''
428 d_msgget=''
429 d_msgrcv=''
430 d_msgsnd=''
431 d_msync=''
432 d_munmap=''
433 d_nice=''
434 d_open3=''
435 d_fpathconf=''
436 d_pathconf=''
437 d_pause=''
438 d_pipe=''
439 d_poll=''
440 d_portable=''
441 d_old_pthread_create_joinable=''
442 old_pthread_create_joinable=''
443 d_pthread_yield=''
444 d_sched_yield=''
445 sched_yield=''
446 d_readdir=''
447 d_rewinddir=''
448 d_seekdir=''
449 d_telldir=''
450 d_readlink=''
451 d_readv=''
452 d_rename=''
453 d_rmdir=''
454 d_safebcpy=''
455 d_safemcpy=''
456 d_sanemcmp=''
457 d_select=''
458 d_sem=''
459 d_semctl=''
460 d_semget=''
461 d_semop=''
462 d_setegid=''
463 d_seteuid=''
464 d_setgrent=''
465 d_setgrps=''
466 d_sethent=''
467 d_setlinebuf=''
468 d_setlocale=''
469 d_setnent=''
470 d_setpent=''
471 d_setpgid=''
472 d_setpgrp2=''
473 d_bsdsetpgrp=''
474 d_setpgrp=''
475 d_setprior=''
476 d_setpwent=''
477 d_setregid=''
478 d_setresgid=''
479 d_setresuid=''
480 d_setreuid=''
481 d_setrgid=''
482 d_setruid=''
483 d_setsent=''
484 d_setsid=''
485 d_setspent=''
486 d_setvbuf=''
487 d_sfio=''
488 usesfio=''
489 d_shm=''
490 d_shmat=''
491 d_shmatprototype=''
492 shmattype=''
493 d_shmctl=''
494 d_shmdt=''
495 d_shmget=''
496 d_sigaction=''
497 d_sigsetjmp=''
498 d_cmsghdr_s=''
499 d_msg_ctrunc=''
500 d_msg_dontroute=''
501 d_msg_oob=''
502 d_msg_peek=''
503 d_msg_proxy=''
504 d_msghdr_s=''
505 d_oldsock=''
506 d_recvmsg=''
507 d_scm_rights=''
508 d_sendmsg=''
509 d_socket=''
510 d_sockpair=''
511 sockethdr=''
512 socketlib=''
513 d_statblks=''
514 d_fstatfs=''
515 d_statfs=''
516 d_statfsflags=''
517 d_fstatvfs=''
518 d_statvfs=''
519 d_stdio_cnt_lval=''
520 d_stdio_ptr_lval=''
521 d_stdiobase=''
522 d_stdstdio=''
523 stdio_base=''
524 stdio_bufsiz=''
525 stdio_cnt=''
526 stdio_filbuf=''
527 stdio_ptr=''
528 d_index=''
529 d_strchr=''
530 d_strcoll=''
531 d_strctcpy=''
532 d_strerrm=''
533 d_strerror=''
534 d_sysernlst=''
535 d_syserrlst=''
536 d_strtod=''
537 d_strtol=''
538 d_strtoul=''
539 d_strxfrm=''
540 d_symlink=''
541 d_syscall=''
542 d_sysconf=''
543 d_system=''
544 d_tcgetpgrp=''
545 d_tcsetpgrp=''
546 d_telldirproto=''
547 d_time=''
548 timetype=''
549 clocktype=''
550 d_times=''
551 d_truncate=''
552 d_tzname=''
553 d_umask=''
554 d_semctl_semid_ds=''
555 d_semctl_semun=''
556 d_union_semun=''
557 d_vfork=''
558 usevfork=''
559 d_voidsig=''
560 signal_t=''
561 d_volatile=''
562 d_charvspr=''
563 d_vprintf=''
564 d_wait4=''
565 d_waitpid=''
566 d_wcstombs=''
567 d_wctomb=''
568 d_writev=''
569 d_dbmclose64=''
570 d_dbminit64=''
571 d_delete64=''
572 d_fetch64=''
573 d_firstkey64=''
574 d_nextkey64=''
575 d_store64=''
576 dlext=''
577 cccdlflags=''
578 ccdlflags=''
579 dlsrc=''
580 ld=''
581 lddlflags=''
582 usedl=''
583 doublesize=''
584 ebcdic=''
585 fflushNULL=''
586 fflushall=''
587 fpostype=''
588 gidtype=''
589 groupstype=''
590 h_fcntl=''
591 h_sysfile=''
592 i_arpainet=''
593 db_hashtype=''
594 db_prefixtype=''
595 i_db=''
596 i_dbm=''
597 i_rpcsvcdbm=''
598 d_dirnamlen=''
599 direntrytype=''
600 i_dirent=''
601 i_dld=''
602 i_dlfcn=''
603 i_fcntl=''
604 i_float=''
605 i_gdbm=''
606 d_grpasswd=''
607 i_grp=''
608 d_int64t=''
609 i_inttypes=''
610 i_limits=''
611 i_locale=''
612 i_machcthr=''
613 i_malloc=''
614 i_math=''
615 i_memory=''
616 i_mntent=''
617 i_ndbm=''
618 i_netdb=''
619 i_neterrno=''
620 i_netinettcp=''
621 i_niin=''
622 i_sysin=''
623 i_poll=''
624 i_pthread=''
625 d_pwage=''
626 d_pwchange=''
627 d_pwclass=''
628 d_pwcomment=''
629 d_pwexpire=''
630 d_pwgecos=''
631 d_pwpasswd=''
632 d_pwquota=''
633 i_pwd=''
634 i_sfio=''
635 i_shadow=''
636 i_socks=''
637 i_stddef=''
638 i_stdlib=''
639 i_string=''
640 strings=''
641 i_sysaccess=''
642 i_sysdir=''
643 i_sysfile=''
644 d_voidtty=''
645 i_bsdioctl=''
646 i_sysfilio=''
647 i_sysioctl=''
648 i_syssockio=''
649 i_sysmman=''
650 i_sysmount=''
651 i_sysndir=''
652 i_sysparam=''
653 i_sysresrc=''
654 i_syssecrt=''
655 i_sysselct=''
656 i_sysstat=''
657 i_sysstatvfs=''
658 i_systimes=''
659 i_systypes=''
660 d_iovec_s=''
661 i_sysuio=''
662 i_sysun=''
663 i_syswait=''
664 i_sgtty=''
665 i_termio=''
666 i_termios=''
667 i_systime=''
668 i_systimek=''
669 i_time=''
670 timeincl=''
671 i_unistd=''
672 i_utime=''
673 i_values=''
674 i_stdarg=''
675 i_varargs=''
676 i_varhdr=''
677 i_vfork=''
678 installprefix=''
679 installprefixexp=''
680 installstyle=''
681 installusrbinperl=''
682 intsize=''
683 longsize=''
684 shortsize=''
685 d_fpos64_t=''
686 d_llseek=''
687 d_off64_t=''
688 libc=''
689 ldlibpthname=''
690 libperl=''
691 shrpenv=''
692 useshrplib=''
693 glibpth=''
694 libpth=''
695 loclibpth=''
696 plibpth=''
697 xlibpth=''
698 ignore_versioned_solibs=''
699 libs=''
700 lns=''
701 d_PRIEldbl=''
702 d_PRIFldbl=''
703 d_PRIGldbl=''
704 d_PRIeldbl=''
705 d_PRIfldbl=''
706 d_PRIgldbl=''
707 sPRIEldbl=''
708 sPRIFldbl=''
709 sPRIGldbl=''
710 sPRIeldbl=''
711 sPRIfldbl=''
712 sPRIgldbl=''
713 lseeksize=''
714 lseektype=''
715 make_set_make=''
716 d_mymalloc=''
717 freetype=''
718 mallocobj=''
719 mallocsrc=''
720 malloctype=''
721 usemymalloc=''
722 installman1dir=''
723 man1dir=''
724 man1direxp=''
725 man1ext=''
726 installman3dir=''
727 man3dir=''
728 man3direxp=''
729 man3ext=''
730 huge=''
731 large=''
732 medium=''
733 models=''
734 small=''
735 split=''
736 modetype=''
737 multiarch=''
738 mydomain=''
739 myhostname=''
740 phostname=''
741 c=''
742 n=''
743 d_eofnblk=''
744 eagain=''
745 o_nonblock=''
746 rd_nodata=''
747 netdb_hlen_type=''
748 netdb_host_type=''
749 netdb_name_type=''
750 netdb_net_type=''
751 groupcat=''
752 hostcat=''
753 passcat=''
754 orderlib=''
755 ranlib=''
756 package=''
757 spackage=''
758 pager=''
759 apiversion=''
760 patchlevel=''
761 subversion=''
762 version=''
763 perladmin=''
764 perlpath=''
765 pidtype=''
766 prefix=''
767 prefixexp=''
768 installprivlib=''
769 privlib=''
770 privlibexp=''
771 prototype=''
772 ptrsize=''
773 d_PRIX64=''
774 d_PRId64=''
775 d_PRIi64=''
776 d_PRIo64=''
777 d_PRIu64=''
778 d_PRIx64=''
779 sPRIX64=''
780 sPRId64=''
781 sPRIi64=''
782 sPRIo64=''
783 sPRIu64=''
784 sPRIx64=''
785 drand01=''
786 randbits=''
787 randfunc=''
788 randseedtype=''
789 seedfunc=''
790 installscript=''
791 scriptdir=''
792 scriptdirexp=''
793 selectminbits=''
794 selecttype=''
795 sh=''
796 sig_count=''
797 sig_name=''
798 sig_name_init=''
799 sig_num=''
800 sig_num_init=''
801 installsitearch=''
802 sitearch=''
803 sitearchexp=''
804 installsitelib=''
805 sitelib=''
806 sitelibexp=''
807 siteprefix=''
808 siteprefixexp=''
809 sizetype=''
810 so=''
811 sharpbang=''
812 shsharp=''
813 spitshell=''
814 src=''
815 ssizetype=''
816 startperl=''
817 startsh=''
818 stdchar=''
819 d_fgetpos64=''
820 d_fopen64=''
821 d_freopen64=''
822 d_fseek64=''
823 d_fseeko64=''
824 d_fsetpos64=''
825 d_ftell64=''
826 d_ftello64=''
827 d_tmpfile64=''
828 d_stdio_stream_array=''
829 stdio_stream_array=''
830 d_strtoull=''
831 sysman=''
832 trnl=''
833 uidtype=''
834 archname64=''
835 use64bits=''
836 uselongdouble=''
837 usemultiplicity=''
838 nm_opt=''
839 nm_so_opt=''
840 runnm=''
841 usenm=''
842 useperlio=''
843 usesocks=''
844 d_oldpthreads=''
845 usethreads=''
846 incpath=''
847 mips=''
848 mips_type=''
849 usrinc=''
850 d_vendorlib=''
851 installvendorlib=''
852 vendorlib=''
853 vendorlibexp=''
854 usevendorprefix=''
855 vendorprefix=''
856 vendorprefixexp=''
857 defvoidused=''
858 voidflags=''
859 CONFIG=''
860
861 define='define'
862 undef='undef'
863 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
864 rmlist=''
865
866 : We must find out about Eunice early
867 eunicefix=':'
868 if test -f /etc/unixtovms; then
869         eunicefix=/etc/unixtovms
870 fi
871 if test -f /etc/unixtovms.exe; then
872         eunicefix=/etc/unixtovms.exe
873 fi
874
875 i_whoami=''
876 : Possible local include directories to search.
877 : Set locincpth to "" in a hint file to defeat local include searches.
878 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
879 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
880 :
881 : no include file wanted by default
882 inclwanted=''
883
884 : list of known cpp symbols, sorted alphabetically
885 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
886 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
887 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
888 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
889 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
890 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
891 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
892 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
893 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
894 al="$al VMS Xenix286"
895 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
896 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
897 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
898 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
899 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
900 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
901 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
902 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
903 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
904 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
905 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
906 al="$al __SVR4_2__ __UMAXV__"
907 al="$al ____386BSD____ __alpha __alpha__ __amiga"
908 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
909 al="$al __host_mips__"
910 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
911 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
912 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
913 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
914 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
915 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
916 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
917 al="$al __mc88100 __mc88100__ __mips __mips__"
918 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
919 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
920 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
921 al="$al _host_mips _mips _unix"
922 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
923 al="$al apollo ardent att386 att3b"
924 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
925 al="$al cadmus clipper concurrent convex cray ctix"
926 al="$al dmert encore gcos gcx gimpel gould"
927 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
928 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
929 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
930 al="$al i186 i286 i386 i486 i8086"
931 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
932 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
933 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
934 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
935 al="$al mc88000 mc88100 merlin mert mips mvs n16"
936 al="$al ncl_el ncl_mr"
937 al="$al news1500 news1700 news1800 news1900 news3700"
938 al="$al news700 news800 news900 ns16000 ns32000"
939 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
940 al="$al parisc pc532 pdp11 plexus posix pyr"
941 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
942 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
943 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
944 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
945 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
946 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
947 al="$al xenix z8000"
948
949 : Trailing extension.  Override this in a hint file, if needed.
950 _exe=''
951 : Extra object files, if any, needed on this platform.
952 archobjs=''
953 groupstype=''
954 : change the next line if compiling for Xenix/286 on Xenix/386
955 xlibpth='/usr/lib/386 /lib/386'
956
957 : Possible local library directories to search.
958 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
959 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
960
961 : general looking path for locating libraries
962 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
963 glibpth="$glibpth /lib /usr/lib $xlibpth"
964 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
965 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
966
967 : Private path used by Configure to find libraries.  Its value
968 : is prepended to libpth. This variable takes care of special
969 : machines, like the mips.  Usually, it should be empty.
970 plibpth=''
971
972 : default library list
973 libswanted=''
974 : some systems want to use only the non-versioned libso:s
975 ignore_versioned_solibs=''
976 : full support for void wanted by default
977 defvoidused=15
978
979 : set useposix=false in your hint file to disable the POSIX extension.
980 useposix=true
981 : set useopcode=false in your hint file to disable the Opcode extension.
982 useopcode=true
983 : set usemultiplicity on the Configure command line to enable multiplicity.
984 : set usesocks on the Configure command line to enable socks.
985 : set usethreads on the Configure command line to enable threads.
986 : List of libraries we want.
987 : If anyone needs -lnet, put it in a hint file.
988 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
989 libswanted="$libswanted dld ld sun m c cposix posix"
990 libswanted="$libswanted ndir dir crypt sec"
991 libswanted="$libswanted ucb bsd BSD PW x"
992 : We probably want to search /usr/shlib before most other libraries.
993 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
994 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
995 glibpth="/usr/shlib $glibpth"
996 : Do not use vfork unless overridden by a hint file.
997 usevfork=false
998
999 : Find the basic shell for Bourne shell scripts
1000 case "$sh" in
1001 '')
1002         case "$SYSTYPE" in
1003         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1004         *) xxx='/bin/sh';;
1005         esac
1006         if test -f "$xxx"; then
1007                 sh="$xxx"
1008         else
1009                 : Build up a list and do a single loop so we can 'break' out.
1010                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1011                 for xxx in sh bash ksh pdksh ash; do
1012                         for p in $pth; do
1013                                 try="$try ${p}/${xxx}"
1014                         done
1015                 done
1016                 for xxx in $try; do
1017                         if test -f "$xxx"; then
1018                                 sh="$xxx";
1019                                 break
1020                         elif test -f "$xxx.exe"; then
1021                                 sh="$xxx";
1022                                 break
1023                         fi
1024                 done
1025         fi
1026         ;;
1027 esac
1028
1029 case "$sh" in
1030 '')     cat <<EOM >&2
1031 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1032
1033 Usually it's in /bin/sh.  How did you even get this far?
1034 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1035 we'll try to straighten this all out.
1036 EOM
1037         exit 1
1038         ;;
1039 esac
1040
1041 : see if sh knows # comments
1042 if `$sh -c '#' >/dev/null 2>&1`; then
1043         shsharp=true
1044         spitshell=cat
1045         xcat=/bin/cat
1046         test -f $xcat || xcat=/usr/bin/cat
1047         echo "#!$xcat" >try
1048         $eunicefix try
1049         chmod +x try
1050         ./try > today
1051         if test -s today; then
1052                 sharpbang='#!'
1053         else
1054                 echo "#! $xcat" > try
1055                 $eunicefix try
1056                 chmod +x try
1057                 ./try > today
1058                 if test -s today; then
1059                         sharpbang='#! '
1060                 else
1061                         sharpbang=': use '
1062                 fi
1063         fi
1064 else
1065         echo " "
1066         echo "Your $sh doesn't grok # comments--I will strip them later on."
1067         shsharp=false
1068         cd ..
1069         echo "exec grep -v '^[  ]*#'" >spitshell
1070         chmod +x spitshell
1071         $eunicefix spitshell
1072         spitshell=`pwd`/spitshell
1073         cd UU
1074         echo "I presume that if # doesn't work, #! won't work either!"
1075         sharpbang=': use '
1076 fi
1077 rm -f try today
1078
1079 : figure out how to guarantee sh startup
1080 case "$startsh" in
1081 '') startsh=${sharpbang}${sh} ;;
1082 *)
1083 esac
1084 cat >try <<EOSS
1085 $startsh
1086 set abc
1087 test "$?abc" != 1
1088 EOSS
1089
1090 chmod +x try
1091 $eunicefix try
1092 if ./try; then
1093         : echo "Yup, it does."
1094 else
1095         echo "Hmm... '$startsh' does not guarantee sh startup..."
1096         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1097 fi
1098 rm -f try
1099
1100
1101 : Save command line options in file UU/cmdline.opt for later use in
1102 : generating config.sh.
1103 cat > cmdline.opt <<EOSH
1104 # Configure command line arguments.
1105 config_arg0='$0'
1106 config_args='$*'
1107 config_argc=$#
1108 EOSH
1109 argn=1
1110 for arg in "$@"; do
1111         cat >>cmdline.opt <<EOSH
1112 config_arg$argn='$arg'
1113 EOSH
1114         argn=`expr $argn + 1`
1115 done
1116
1117 : produce awk script to parse command line options
1118 cat >options.awk <<'EOF'
1119 BEGIN {
1120         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1121
1122         len = length(optstr);
1123         for (i = 1; i <= len; i++) {
1124                 c = substr(optstr, i, 1);
1125                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1126                 if (a == ":") {
1127                         arg[c] = 1;
1128                         i++;
1129                 }
1130                 opt[c] = 1;
1131         }
1132 }
1133 {
1134         expect = 0;
1135         str = $0;
1136         if (substr(str, 1, 1) != "-") {
1137                 printf("'%s'\n", str);
1138                 next;
1139         }
1140         len = length($0);
1141         for (i = 2; i <= len; i++) {
1142                 c = substr(str, i, 1);
1143                 if (!opt[c]) {
1144                         printf("-%s\n", substr(str, i));
1145                         next;
1146                 }
1147                 printf("-%s\n", c);
1148                 if (arg[c]) {
1149                         if (i < len)
1150                                 printf("'%s'\n", substr(str, i + 1));
1151                         else
1152                                 expect = 1;
1153                         next;
1154                 }
1155         }
1156 }
1157 END {
1158         if (expect)
1159                 print "?";
1160 }
1161 EOF
1162
1163 : process the command line options
1164 set X `for arg in "$@"; do echo "X$arg"; done |
1165         sed -e s/X// | awk -f options.awk`
1166 eval "set $*"
1167 shift
1168 rm -f options.awk
1169
1170 : set up default values
1171 fastread=''
1172 reuseval=false
1173 config_sh=''
1174 alldone=''
1175 error=''
1176 silent=''
1177 extractsh=''
1178 override=''
1179 knowitall=''
1180 rm -f optdef.sh posthint.sh
1181 cat >optdef.sh <<EOS
1182 $startsh
1183 EOS
1184
1185
1186 : option parsing
1187 while test $# -gt 0; do
1188         case "$1" in
1189         -d) shift; fastread=yes;;
1190         -e) shift; alldone=cont;;
1191         -f)
1192                 shift
1193                 cd ..
1194                 if test -r "$1"; then
1195                         config_sh="$1"
1196                 else
1197                         echo "$me: cannot read config file $1." >&2
1198                         error=true
1199                 fi
1200                 cd UU
1201                 shift;;
1202         -h) shift; error=true;;
1203         -r) shift; reuseval=true;;
1204         -s) shift; silent=true; realsilent=true;;
1205         -E) shift; alldone=exit;;
1206         -K) shift; knowitall=true;;
1207         -O) shift; override=true;;
1208         -S) shift; silent=true; extractsh=true;;
1209         -D)
1210                 shift
1211                 case "$1" in
1212                 *=)
1213                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1214                         echo "$me: ignoring -D $1" >&2
1215                         ;;
1216                 *=*) echo "$1" | \
1217                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1218                 *) echo "$1='define'" >> optdef.sh;;
1219                 esac
1220                 shift
1221                 ;;
1222         -U)
1223                 shift
1224                 case "$1" in
1225                 *=) echo "$1" >> optdef.sh;;
1226                 *=*)
1227                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1228                         echo "$me: ignoring -U $1" >&2
1229                         ;;
1230                 *) echo "$1='undef'" >> optdef.sh;;
1231                 esac
1232                 shift
1233                 ;;
1234         -A)
1235             shift
1236             xxx=''
1237             yyy="$1"
1238             case "$yyy" in
1239             *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1240                  yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1241                  ;;
1242             esac
1243             case "$xxx" in
1244             '') xxx=define ;;
1245             esac
1246             zzz=''
1247             uuu='undef'
1248             case "$yyy" in
1249             *=*) zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1250                  yyy=`echo $yyy|sed 's!=.*!!'`
1251                  case "$yyy:$zzz" in
1252                  undef:) uuu='' ;;
1253                  esac
1254                  ;;
1255             esac
1256             case "$xxx" in
1257             append)
1258                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh
1259                 ;;
1260             clear)
1261                 echo "$yyy=''"                  >> posthint.sh
1262                 ;;
1263             define)
1264                 case "$zzz" in
1265                 '') zzz=define ;;
1266                 esac
1267                 echo "$yyy='$zzz'"              >> posthint.sh
1268                 ;; 
1269             eval)
1270                 echo "eval \"$yyy=$zzz\""       >> posthint.sh
1271                 ;; 
1272             prepend)
1273                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh
1274                 ;; 
1275             undef)
1276                 case "$zzz" in
1277                 '') zzz="$uuu" ;;
1278                 esac
1279                 echo "$yyy=$zzz"                >> posthint.sh
1280                 ;; 
1281             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2
1282                 ;;
1283             esac
1284             ;;
1285         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1286                 exit 0;;
1287         --) break;;
1288         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1289         *) break;;
1290         esac
1291 done
1292
1293 case "$error" in
1294 true)
1295         cat >&2 <<EOM
1296 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1297                  [-U symbol] [-U symbol=] [-A command:symbol...]
1298   -d : use defaults for all answers.
1299   -e : go on without questioning past the production of config.sh.
1300   -f : specify an alternate default configuration file.
1301   -h : print this help message and exit (with an error status).
1302   -r : reuse C symbols value if possible (skips costly nm extraction).
1303   -s : silent mode, only echoes questions and essential information.
1304   -D : define symbol to have some value:
1305          -D symbol         symbol gets the value 'define'
1306          -D symbol=value   symbol gets the value 'value'
1307   -E : stop at the end of questions, after having produced config.sh.
1308   -K : do not use unless you know what you are doing.
1309   -O : let -D and -U override definitions from loaded configuration file.
1310   -S : perform variable substitutions on all .SH files (can mix with -f)
1311   -U : undefine symbol:
1312          -U symbol    symbol gets the value 'undef'
1313          -U symbol=   symbol gets completely empty
1314   -A : manipulate symbol after the platform specific hints have been applied:
1315          -A append:symbol=value         append value to symbol
1316          -A define:symbol=value         define symbol to have value
1317          -A symbol=value                define symbol to have value
1318          -A clear:symbol                define symbol to be ''
1319          -A define:symbol               define symbol to be 'define'
1320          -A eval:symbol=value           define symbol to be eval of value
1321          -A prepend:symbol=value        prepend value to symbol
1322          -A undef:symbol                define symbol to be 'undef'
1323          -A undef:symbol=               define symbol to be ''
1324   -V : print version number and exit (with a zero status).
1325 EOM
1326         exit 1
1327         ;;
1328 esac
1329
1330 : Sanity checks
1331 case "$fastread$alldone" in
1332 yescont|yesexit) ;;
1333 *)
1334         if test ! -t 0; then
1335                 echo "Say 'sh Configure', not 'sh <Configure'"
1336                 exit 1
1337         fi
1338         ;;
1339 esac
1340
1341 exec 4>&1
1342 case "$silent" in
1343 true) exec 1>/dev/null;;
1344 esac
1345
1346 : run the defines and the undefines, if any, but leave the file out there...
1347 touch optdef.sh
1348 . ./optdef.sh
1349 : create the posthint manipulation script and leave the file out there...
1350 touch posthint.sh
1351 . ./posthint.sh
1352
1353 : set package name
1354 package=perl5
1355 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1356 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1357 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1358 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1359 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1360 esac
1361
1362 : Some greps do not return status, grrr.
1363 echo "grimblepritz" >grimble
1364 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1365         contains=contains
1366 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1367         contains=grep
1368 else
1369         contains=contains
1370 fi
1371 rm -f grimble
1372 : the following should work in any shell
1373 case "$contains" in
1374 contains*)
1375         echo " "
1376         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1377         cat >contains <<'EOSS'
1378 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1379 EOSS
1380 chmod +x contains
1381 esac
1382
1383 : Find the path to the source tree
1384 case "$src" in
1385 '') case "$0" in
1386     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1387          case "$src" in
1388          /*)    ;;
1389          *)     src=`cd ../$src && pwd` ;;
1390          esac
1391          ;;
1392     *)   src='.';;
1393     esac;;
1394 esac
1395 case "$src" in
1396 '')     src=/
1397         rsrc=/
1398         ;;
1399 /*) rsrc="$src";;
1400 *) rsrc="../$src";;
1401 esac
1402 if test -f $rsrc/Configure && \
1403         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1404 then
1405    : found it, so we are ok.
1406 else
1407         rsrc=''
1408         for src in . .. ../.. ../../.. ../../../..; do
1409                 if test -f ../$src/Configure && \
1410                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1411                 then
1412                         rsrc=../$src
1413                         break
1414                 fi
1415         done
1416 fi
1417 case "$rsrc" in
1418 '')
1419         cat <<EOM >&4
1420
1421 Sorry, I can't seem to locate the source dir for $package.  Please start
1422 Configure with an explicit path -- i.e. /some/path/Configure.
1423
1424 EOM
1425         exit 1
1426         ;;
1427 ../.)   rsrc='..';;
1428 *)
1429         echo " "
1430         echo "Sources for $package found in \"$src\"." >&4
1431         ;;
1432 esac
1433
1434 : script used to extract .SH files with variable substitutions
1435 cat >extract <<'EOS'
1436 CONFIGDOTSH=true
1437 echo "Doing variable substitutions on .SH files..."
1438 if test -f $src/MANIFEST; then
1439         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1440 else
1441         echo "(Looking for .SH files under the source directory.)"
1442         set x `(cd $src; find . -name "*.SH" -print)`
1443 fi
1444 shift
1445 case $# in
1446 0) set x `(cd $src; echo *.SH)`; shift;;
1447 esac
1448 if test ! -f $src/$1; then
1449         shift
1450 fi
1451 mkdir_p='
1452 name=$1;
1453 create="";
1454 while test $name; do
1455         if test ! -d "$name"; then
1456                 create="$name $create";
1457                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1458                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1459         else
1460                 name="";
1461         fi;
1462 done;
1463 for file in $create; do
1464         mkdir $file;
1465 done
1466 '
1467 for file in $*; do
1468         case "$src" in
1469         ".")
1470                 case "$file" in
1471                 */*)
1472                         dir=`expr X$file : 'X\(.*\)/'`
1473                         file=`expr X$file : 'X.*/\(.*\)'`
1474                         (cd $dir && . ./$file)
1475                         ;;
1476                 *)
1477                         . ./$file
1478                         ;;
1479                 esac
1480                 ;;
1481         *)
1482                 case "$file" in
1483                 */*)
1484                         dir=`expr X$file : 'X\(.*\)/'`
1485                         file=`expr X$file : 'X.*/\(.*\)'`
1486                         (set x $dir; shift; eval $mkdir_p)
1487                         sh <$src/$dir/$file
1488                         ;;
1489                 *)
1490                         sh <$src/$file
1491                         ;;
1492                 esac
1493                 ;;
1494         esac
1495 done
1496 if test -f $src/config_h.SH; then
1497         if test ! -f config.h; then
1498         : oops, they left it out of MANIFEST, probably, so do it anyway.
1499         . $src/config_h.SH
1500         fi
1501 fi
1502 EOS
1503
1504 : extract files and exit if asked to do so
1505 case "$extractsh" in
1506 true)
1507         case "$realsilent" in
1508         true) ;;
1509         *) exec 1>&4;;
1510         esac
1511         case "$config_sh" in
1512         '') config_sh='config.sh';;
1513         esac
1514         echo " "
1515         echo "Fetching answers from $config_sh..."
1516         cd ..
1517         . $config_sh
1518         test "$override" && . ./optdef.sh
1519         echo " "
1520         . UU/extract
1521         rm -rf UU
1522         echo "Done."
1523         exit 0
1524         ;;
1525 esac
1526
1527 : Eunice requires " " instead of "", can you believe it
1528 echo " "
1529 : Here we go...
1530 echo "Beginning of configuration questions for $package."
1531
1532 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1533
1534 : first determine how to suppress newline on echo command
1535 echo " "
1536 echo "Checking echo to see how to suppress newlines..."
1537 (echo "hi there\c" ; echo " ") >.echotmp
1538 if $contains c .echotmp >/dev/null 2>&1 ; then
1539         echo "...using -n."
1540         n='-n'
1541         c=''
1542 else
1543         cat <<'EOM'
1544 ...using \c
1545 EOM
1546         n=''
1547         c='\c'
1548 fi
1549 echo $n "The star should be here-->$c"
1550 echo '*'
1551 rm -f .echotmp
1552
1553 : Now test for existence of everything in MANIFEST
1554 echo " "
1555 if test -f $rsrc/MANIFEST; then
1556         echo "First let's make sure your kit is complete.  Checking..." >&4
1557         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1558         rm -f missing
1559         tmppwd=`pwd`
1560         for filelist in x??; do
1561                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1562         done
1563         if test -s missing; then
1564                 cat missing >&4
1565                 cat >&4 <<'EOM'
1566
1567 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1568
1569 You have the option of continuing the configuration process, despite the
1570 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1571 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1572 and contact the author (perlbug@perl.com).
1573
1574 EOM
1575                 echo $n "Continue? [n] $c" >&4
1576                 read ans
1577                 case "$ans" in
1578                 y*)
1579                         echo "Continuing..." >&4
1580                         rm -f missing
1581                         ;;
1582                 *)
1583                         echo "ABORTING..." >&4
1584                         kill $$
1585                         ;;
1586                 esac
1587         else
1588                 echo "Looks good..."
1589         fi
1590 else
1591         echo "There is no MANIFEST file.  I hope your kit is complete !"
1592 fi
1593 rm -f missing x??
1594
1595 echo " "
1596 : Find the appropriate value for a newline for tr
1597 if test -n "$DJGPP"; then
1598        trnl='\012'
1599 fi
1600 if test X"$trnl" = X; then
1601         case "`echo foo|tr '\n' x 2>/dev/null`" in
1602         foox) trnl='\n' ;;
1603         esac
1604 fi
1605 if test X"$trnl" = X; then
1606         case "`echo foo|tr '\012' x 2>/dev/null`" in
1607         foox) trnl='\012' ;;
1608         esac
1609 fi
1610 if test X"$trnl" = X; then
1611         cat <<EOM >&2
1612
1613 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1614
1615 EOM
1616         exit 1
1617 fi
1618
1619 : compute the number of columns on the terminal for proper question formatting
1620 case "$COLUMNS" in
1621 '') COLUMNS='80';;
1622 esac
1623
1624 : set up the echo used in my read
1625 myecho="case \"\$xxxm\" in
1626 '') echo $n \"\$rp $c\" >&4;;
1627 *) case \"\$rp\" in
1628         '') echo $n \"[\$xxxm] $c\";;
1629         *)
1630                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1631                         echo \"\$rp\" >&4
1632                         echo $n \"[\$xxxm] $c\" >&4
1633                 else
1634                         echo $n \"\$rp [\$xxxm] $c\" >&4
1635                 fi
1636                 ;;
1637         esac;;
1638 esac"
1639
1640 : now set up to do reads with possible shell escape and default assignment
1641 cat <<EOSC >myread
1642 $startsh
1643 xxxm=\$dflt
1644 $myecho
1645 ans='!'
1646 case "\$fastread" in
1647 yes) case "\$dflt" in
1648         '') ;;
1649         *) ans='';
1650                 case "\$silent-\$rp" in
1651                 true-) ;;
1652                 *) echo " " >&4;;
1653                 esac;;
1654         esac;;
1655 *) case "\$silent" in
1656         true) case "\$rp" in
1657                 '') ans='';;
1658                 esac;;
1659         esac;;
1660 esac
1661 while expr "X\$ans" : "X!" >/dev/null; do
1662         read answ
1663         set x \$xxxm
1664         shift
1665         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1666         case  "\$answ" in
1667         "!")
1668                 sh 1>&4
1669                 echo " "
1670                 $myecho
1671                 ;;
1672         !*)
1673                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1674                 shift
1675                 sh 1>&4 -c "\$*"
1676                 echo " "
1677                 $myecho
1678                 ;;
1679         "\$ans")
1680                 case "\$ans" in
1681                 \\&*)
1682                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1683                         shift
1684                         case "\$1" in
1685                         -d)
1686                                 fastread=yes
1687                                 echo "(OK, I'll run with -d after this question.)" >&4
1688                                 ;;
1689                         -*)
1690                                 echo "*** Sorry, \$1 not supported yet." >&4
1691                                 ;;
1692                         esac
1693                         $myecho
1694                         ans=!
1695                         ;;
1696                 esac;;
1697         *)
1698                 case "\$aok" in
1699                 y)
1700                         echo "*** Substitution done -- please confirm."
1701                         xxxm="\$ans"
1702                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1703                         xxxm="\$ans"
1704                         ans=!
1705                         ;;
1706                 *)
1707                         echo "*** Error -- try again."
1708                         ans=!
1709                         ;;
1710                 esac
1711                 $myecho
1712                 ;;
1713         esac
1714         case "\$ans\$xxxm\$nostick" in
1715         '')
1716                 ans=!
1717                 $myecho
1718                 ;;
1719         esac
1720 done
1721 case "\$ans" in
1722 '') ans="\$xxxm";;
1723 esac
1724 EOSC
1725
1726 : create .config dir to save info across Configure sessions
1727 test -d ../.config || mkdir ../.config
1728 cat >../.config/README <<EOF
1729 This directory created by Configure to save information that should
1730 persist across sessions for $package.
1731
1732 You may safely delete it if you wish.
1733 EOF
1734
1735 : general instructions
1736 needman=true
1737 firsttime=true
1738 user=`(logname) 2>/dev/null`
1739 case "$user" in
1740 '') user=`whoami 2>&1`;;
1741 esac
1742 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1743         firsttime=false
1744         echo " "
1745         rp='Would you like to see the instructions?'
1746         dflt=n
1747         . ./myread
1748         case "$ans" in
1749         [yY]*) ;;
1750         *) needman=false;;
1751         esac
1752 fi
1753 if $needman; then
1754         cat <<EOH
1755
1756 This installation shell script will examine your system and ask you questions
1757 to determine how the perl5 package should be installed. If you get
1758 stuck on a question, you may use a ! shell escape to start a subshell or
1759 execute a command.  Many of the questions will have default answers in square
1760 brackets; typing carriage return will give you the default.
1761
1762 On some of the questions which ask for file or directory names you are allowed
1763 to use the ~name construct to specify the login directory belonging to "name",
1764 even if you don't have a shell which knows about that.  Questions where this is
1765 allowed will be marked "(~name ok)".
1766
1767 EOH
1768         rp=''
1769         dflt='Type carriage return to continue'
1770         . ./myread
1771         cat <<'EOH'
1772
1773 The prompter used in this script allows you to use shell variables and
1774 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1775 in the default answer, as if the default line was a set of arguments given to a
1776 script shell.  This means you may also use $* to repeat the whole default line,
1777 so you do not have to re-type everything to add something to the default.
1778
1779 Everytime there is a substitution, you will have to confirm.  If there is an
1780 error (e.g. an unmatched backtick), the default answer will remain unchanged
1781 and you will be prompted again.
1782
1783 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1784 the questions and use the computed defaults (or the previous answers if there
1785 was already a config.sh file). Type 'Configure -h' for a list of options.
1786 You may also start interactively and then answer '& -d' at any prompt to turn
1787 on the non-interactive behaviour for the remainder of the execution.
1788
1789 EOH
1790         . ./myread
1791         cat <<EOH
1792
1793 Much effort has been expended to ensure that this shell script will run on any
1794 Unix system.  If despite that it blows up on yours, your best bet is to edit
1795 Configure and run it again.  If you can't run Configure for some reason,
1796 you'll have to generate a config.sh file by hand.  Whatever problems you
1797 have, let me (perlbug@perl.com) know how I blew it.
1798
1799 This installation script affects things in two ways:
1800
1801 1) it may do direct variable substitutions on some of the files included
1802    in this kit.
1803 2) it builds a config.h file for inclusion in C programs.  You may edit
1804    any of these files as the need arises after running this script.
1805
1806 If you make a mistake on a question, there is no easy way to back up to it
1807 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1808 files.  Configure will offer to let you do this before it runs the SH files.
1809
1810 EOH
1811         dflt='Type carriage return to continue'
1812         . ./myread
1813         case "$firsttime" in
1814         true) echo $user >>../.config/instruct;;
1815         esac
1816 fi
1817
1818 : find out where common programs are
1819 echo " "
1820 echo "Locating common programs..." >&4
1821 cat <<EOSC >loc
1822 $startsh
1823 case \$# in
1824 0) exit 1;;
1825 esac
1826 thing=\$1
1827 shift
1828 dflt=\$1
1829 shift
1830 for dir in \$*; do
1831         case "\$thing" in
1832         .)
1833         if test -d \$dir/\$thing; then
1834                 echo \$dir
1835                 exit 0
1836         fi
1837         ;;
1838         *)
1839         for thisthing in \$dir/\$thing; do
1840                 : just loop through to pick last item
1841         done
1842         if test -f \$thisthing; then
1843                 echo \$thisthing
1844                 exit 0
1845         elif test -f \$dir/\$thing.exe; then
1846                 if test -n "$DJGPP"; then
1847                         echo \$dir/\$thing.exe
1848                 else
1849                         : on Eunice apparently
1850                         echo \$dir/\$thing
1851                 fi
1852                 exit 0
1853         fi
1854         ;;
1855         esac
1856 done
1857 echo \$dflt
1858 exit 1
1859 EOSC
1860 chmod +x loc
1861 $eunicefix loc
1862 loclist="
1863 awk
1864 cat
1865 comm
1866 cp
1867 echo
1868 expr
1869 grep
1870 ls
1871 make
1872 mkdir
1873 rm
1874 sed
1875 sort
1876 touch
1877 tr
1878 uniq
1879 "
1880 trylist="
1881 Mcc
1882 ar
1883 byacc
1884 cpp
1885 csh
1886 date
1887 egrep
1888 gzip
1889 less
1890 ln
1891 more
1892 nm
1893 nroff
1894 pg
1895 test
1896 uname
1897 zip
1898 "
1899 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1900 pth="$pth /lib /usr/lib"
1901 for file in $loclist; do
1902         eval xxx=\$$file
1903         case "$xxx" in
1904         /*|?:[\\/]*)
1905                 if test -f "$xxx"; then
1906                         : ok
1907                 else
1908                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1909                         xxx=`./loc $file $file $pth`
1910                 fi
1911                 ;;
1912         '') xxx=`./loc $file $file $pth`;;
1913         *) xxx=`./loc $xxx $xxx $pth`;;
1914         esac
1915         eval $file=$xxx
1916         eval _$file=$xxx
1917         case "$xxx" in
1918         /*)
1919                 echo $file is in $xxx.
1920                 ;;
1921         ?:[\\/]*)
1922                 echo $file is in $xxx.
1923                 ;;
1924         *)
1925                 echo "I don't know where '$file' is, and my life depends on it." >&4
1926                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1927                 exit 1
1928                 ;;
1929         esac
1930 done
1931 echo " "
1932 echo "Don't worry if any of the following aren't found..."
1933 say=offhand
1934 for file in $trylist; do
1935         eval xxx=\$$file
1936         case "$xxx" in
1937         /*|?:[\\/]*)
1938                 if test -f "$xxx"; then
1939                         : ok
1940                 else
1941                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1942                         xxx=`./loc $file $file $pth`
1943                 fi
1944                 ;;
1945         '') xxx=`./loc $file $file $pth`;;
1946         *) xxx=`./loc $xxx $xxx $pth`;;
1947         esac
1948         eval $file=$xxx
1949         eval _$file=$xxx
1950         case "$xxx" in
1951         /*)
1952                 echo $file is in $xxx.
1953                 ;;
1954         ?:[\\/]*)
1955                 echo $file is in $xxx.
1956                 ;;
1957         *)
1958                 echo "I don't see $file out there, $say."
1959                 say=either
1960                 ;;
1961         esac
1962 done
1963 case "$egrep" in
1964 egrep)
1965         echo "Substituting grep for egrep."
1966         egrep=$grep
1967         ;;
1968 esac
1969 case "$ln" in
1970 ln)
1971         echo "Substituting cp for ln."
1972         ln=$cp
1973         ;;
1974 esac
1975 case "$test" in
1976 test)
1977         echo "Hopefully test is built into your sh."
1978         ;;
1979 *)
1980         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1981                 echo "Using the test built into your sh."
1982                 test=test
1983                 _test=test
1984         fi
1985         ;;
1986 esac
1987 case "$echo" in
1988 echo)
1989         echo "Hopefully echo is built into your sh."
1990         ;;
1991 '') ;;
1992 *)
1993         echo " "
1994 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1995         $echo $n "hi there$c" >foo1
1996         echo $n "hi there$c" >foo2
1997         if cmp foo1 foo2 >/dev/null 2>&1; then
1998                 echo "They are compatible.  In fact, they may be identical."
1999         else
2000                 case "$n" in
2001                 '-n') n='' c='\c';;
2002                 *) n='-n' c='';;
2003                 esac
2004                 cat <<FOO
2005 They are not compatible!  You are probably running ksh on a non-USG system.
2006 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2007 have echo built in and we may have to run some Bourne shell scripts.  That
2008 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2009
2010 FOO
2011                 $echo $n "The star should be here-->$c"
2012                 $echo "*"
2013         fi
2014         $rm -f foo1 foo2
2015         ;;
2016 esac
2017
2018 : determine whether symbolic links are supported
2019 echo " "
2020 $touch blurfl
2021 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2022         echo "Symbolic links are supported." >&4
2023         lns="$ln -s"
2024 else
2025         echo "Symbolic links are NOT supported." >&4
2026         lns="$ln"
2027 fi
2028 $rm -f blurfl sym
2029
2030 : see whether [:lower:] and [:upper:] are supported character classes
2031 echo " "
2032 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2033 ABYZ)
2034         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2035         up='[:upper:]'
2036         low='[:lower:]'
2037         ;;
2038 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2039         # (0xc9 and 0xd1), therefore that is a nice testing point.
2040         if test "X$up" = X -o "X$low" = X; then
2041             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2042             ij) up='[A-Z]'
2043                 low='[a-z]'
2044                 ;;
2045             esac
2046         fi
2047         if test "X$up" = X -o "X$low" = X; then
2048             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2049             ij) up='A-Z'
2050                 low='a-z'
2051                 ;;
2052             esac
2053         fi
2054         if test "X$up" = X -o "X$low" = X; then
2055             case "`echo IJ | od -x 2>/dev/null`" in
2056             *C9D1*|*c9d1*)
2057                 echo "Hey, this might be EBCDIC." >&4
2058                 if test "X$up" = X -o "X$low" = X; then
2059                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2060                     ij) up='[A-IJ-RS-Z]'
2061                         low='[a-ij-rs-z]'
2062                         ;;
2063                     esac
2064                 fi
2065                 if test "X$up" = X -o "X$low" = X; then
2066                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2067                     ij) up='A-IJ-RS-Z'
2068                         low='a-ij-rs-z'
2069                         ;;
2070                     esac
2071                 fi
2072                 ;;
2073             esac
2074         fi
2075 esac
2076 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2077 ij)
2078     echo "Using $up and $low to convert case." >&4
2079     ;;
2080 *)
2081     echo "I don't know how to translate letters from upper to lower case." >&4
2082     echo "Your tr is not acting any way I know of." >&4
2083     exit 1
2084     ;;
2085 esac
2086 : set up the translation script tr, must be called with ./tr of course
2087 cat >tr <<EOSC
2088 $startsh
2089 case "\$1\$2" in
2090 '[A-Z][a-z]') exec $tr '$up' '$low';;
2091 '[a-z][A-Z]') exec $tr '$low' '$up';;
2092 esac
2093 exec $tr "\$@"
2094 EOSC
2095 chmod +x tr
2096 $eunicefix tr
2097
2098 : Try to determine whether config.sh was made on this system
2099 case "$config_sh" in
2100 '')
2101 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2102 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2103 # because the A-Z/a-z are not consecutive.
2104 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2105         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2106 newmyuname="$myuname"
2107 dflt=n
2108 case "$knowitall" in
2109 '')
2110         if test -f ../config.sh; then
2111                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2112                         eval "`grep myuname= ../config.sh`"
2113                 fi
2114                 if test "X$myuname" = "X$newmyuname"; then
2115                         dflt=y
2116                 fi
2117         fi
2118         ;;
2119 *) dflt=y;;
2120 esac
2121
2122 : Get old answers from old config file if Configure was run on the
2123 : same system, otherwise use the hints.
2124 hint=default
2125 cd ..
2126 if test -f config.sh; then
2127         echo " "
2128         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2129         . UU/myread
2130         case "$ans" in
2131         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2132         *)  echo "Fetching default answers from your old config.sh file..." >&4
2133                 tmp_n="$n"
2134                 tmp_c="$c"
2135                 tmp_sh="$sh"
2136                 . ./config.sh
2137                 cp config.sh UU
2138                 n="$tmp_n"
2139                 c="$tmp_c"
2140                 : Older versions did not always set $sh.  Catch re-use of such
2141                 : an old config.sh.
2142                 case "$sh" in
2143                 '') sh="$tmp_sh" ;;
2144                 esac
2145                 hint=previous
2146                 ;;
2147         esac
2148 fi
2149 if test ! -f config.sh; then
2150         $cat <<EOM
2151
2152 First time through, eh?  I have some defaults handy for some systems
2153 that need some extra help getting the Configure answers right:
2154
2155 EOM
2156         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2157         dflt=''
2158         : Half the following guesses are probably wrong... If you have better
2159         : tests or hints, please send them to perlbug@perl.com
2160         : The metaconfig authors would also appreciate a copy...
2161         $test -f /irix && osname=irix
2162         $test -f /xenix && osname=sco_xenix
2163         $test -f /dynix && osname=dynix
2164         $test -f /dnix && osname=dnix
2165         $test -f /lynx.os && osname=lynxos
2166         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2167         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2168         $test -f /bin/mips && /bin/mips && osname=mips
2169         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2170                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2171         $test -d /usr/apollo/bin && osname=apollo
2172         $test -f /etc/saf/_sactab && osname=svr4
2173         $test -d /usr/include/minix && osname=minix
2174         if $test -d /MachTen -o -d /MachTen_Folder; then
2175                 osname=machten
2176                 if $test -x /sbin/version; then
2177                         osvers=`/sbin/version | $awk '{print $2}' |
2178                         $sed -e 's/[A-Za-z]$//'`
2179                 elif $test -x /usr/etc/version; then
2180                         osvers=`/usr/etc/version | $awk '{print $2}' |
2181                         $sed -e 's/[A-Za-z]$//'`
2182                 else
2183                         osvers="$2.$3"
2184                 fi
2185         fi
2186        $test -f /sys/posix.dll &&
2187                $test -f /usr/bin/what &&
2188                set X `/usr/bin/what /sys/posix.dll` &&
2189                $test "$3" = UWIN &&
2190                osname=uwin &&
2191                osvers="$5"
2192         if $test -f $uname; then
2193                 set X $myuname
2194                 shift
2195
2196                 case "$5" in
2197                 fps*) osname=fps ;;
2198                 mips*)
2199                         case "$4" in
2200                         umips) osname=umips ;;
2201                         *) osname=mips ;;
2202                         esac;;
2203                 [23]100) osname=mips ;;
2204                 next*) osname=next ;;
2205                 i386*)
2206                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2207                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2208                                 osname='sco'
2209                                 osvers=$tmp
2210                         elif $test -f /etc/kconfig; then
2211                                 osname=isc
2212                                 if test "$lns" = "$ln -s"; then
2213                                         osvers=4
2214                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2215                                         osvers=3
2216                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2217                                         osvers=2
2218                                 fi
2219                         fi
2220                         tmp=''
2221                         ;;
2222                 pc*)
2223                         if test -n "$DJGPP"; then
2224                                 osname=dos
2225                                 osvers=djgpp
2226                         fi
2227                         ;;
2228                 esac
2229
2230                 case "$1" in
2231                 aix) osname=aix
2232                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2233                         case "$tmp" in
2234                         'not found') osvers="$4"."$3" ;;
2235                         '<3240'|'<>3240') osvers=3.2.0 ;;
2236                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2237                         '=3250'|'>3250') osvers=3.2.5 ;;
2238                         *) osvers=$tmp;;
2239                         esac
2240                         ;;
2241                 *dc.osx) osname=dcosx
2242                         osvers="$3"
2243                         ;;
2244                 dnix) osname=dnix
2245                         osvers="$3"
2246                         ;;
2247                 domainos) osname=apollo
2248                         osvers="$3"
2249                         ;;
2250                 dgux) osname=dgux 
2251                         osvers="$3"
2252                         ;;
2253                 dynixptx*) osname=dynixptx
2254                         osvers=`echo "$4"|sed 's/^v//'`
2255                         ;;
2256                 freebsd) osname=freebsd 
2257                         osvers="$3" ;;
2258                 genix) osname=genix ;;
2259                 hp*) osname=hpux 
2260                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2261                         ;;
2262                 irix*) osname=irix
2263                         case "$3" in
2264                         4*) osvers=4 ;;
2265                         5*) osvers=5 ;;
2266                         *)      osvers="$3" ;;
2267                         esac
2268                         ;;
2269                 linux) osname=linux
2270                         case "$3" in
2271                         *)      osvers="$3" ;;
2272                         esac
2273                         ;;
2274                 MiNT) osname=mint
2275                         ;;
2276                 netbsd*) osname=netbsd
2277                         osvers="$3"
2278                         ;;
2279                 news-os) osvers="$3"
2280                         case "$3" in
2281                         4*) osname=newsos4 ;;
2282                         *) osname=newsos ;;
2283                         esac
2284                         ;;
2285                 bsd386) osname=bsd386
2286                         osvers=`$uname -r`
2287                         ;;
2288                 POSIX-BC | posix-bc ) osname=posix-bc
2289                         osvers="$3"
2290                         ;;
2291                 powerux | power_ux | powermax_os | powermaxos | \
2292                 powerunix | power_unix) osname=powerux
2293                         osvers="$3"
2294                         ;;
2295                 next*) osname=next ;;
2296                 solaris) osname=solaris
2297                         case "$3" in
2298                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2299                         *)      osvers="$3" ;;
2300                         esac
2301                         ;;
2302                 sunos) osname=sunos
2303                         case "$3" in
2304                         5*) osname=solaris
2305                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2306                         *)      osvers="$3" ;;
2307                         esac
2308                         ;;
2309                 titanos) osname=titanos
2310                         case "$3" in
2311                         1*) osvers=1 ;;
2312                         2*) osvers=2 ;;
2313                         3*) osvers=3 ;;
2314                         4*) osvers=4 ;;
2315                         *)      osvers="$3" ;;
2316                         esac
2317                         ;;
2318                 ultrix) osname=ultrix
2319                         osvers="$3"
2320                         ;;
2321                 osf1|mls+)      case "$5" in
2322                                 alpha)
2323                                         osname=dec_osf
2324                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2325                                         ;;
2326                         hp*)    osname=hp_osf1  ;;
2327                         mips)   osname=mips_osf1 ;;
2328                         esac
2329                         ;;
2330                 uts) osname=uts 
2331                         osvers="$3"
2332                         ;;
2333                 qnx) osname=qnx
2334                         osvers="$4"
2335                         ;;
2336                 $2) case "$osname" in
2337                         *isc*) ;;
2338                         *freebsd*) ;;
2339                         svr*)
2340                                 : svr4.x or possibly later
2341                                 case "svr$3" in 
2342                                 ${osname}*)
2343                                         osname=svr$3
2344                                         osvers=$4
2345                                         ;;
2346                                 esac
2347                                 case "$osname" in
2348                                 svr4.0)
2349                                         : Check for ESIX
2350                                         if test -f /stand/boot ; then
2351                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2352                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2353                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2354                                                         if test -n "$isesix"; then
2355                                                                 osname=esix4
2356                                                         fi
2357                                                 fi
2358                                         fi
2359                                         ;;
2360                                 esac
2361                                 ;;
2362                         *)      if test -f /etc/systemid; then
2363                                         osname=sco
2364                                         set `echo $3 | $sed 's/\./ /g'` $4
2365                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2366                                                 osvers=$1.$2.$3
2367                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2368                                                 osvers=$1.$2
2369                                         elif $test -f $src/hints/sco_$1.sh; then
2370                                                 osvers=$1
2371                                         fi
2372                                 else
2373                                         case "$osname" in
2374                                         '') : Still unknown.  Probably a generic Sys V.
2375                                                 osname="sysv"
2376                                                 osvers="$3"
2377                                                 ;;
2378                                         esac
2379                                 fi
2380                                 ;;
2381                         esac
2382                         ;;
2383                 *)      case "$osname" in
2384                         '') : Still unknown.  Probably a generic BSD.
2385                                 osname="$1"
2386                                 osvers="$3"
2387                                 ;;
2388                         esac
2389                         ;;
2390                 esac
2391         else
2392                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2393                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2394                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2395                                 osname=news_os
2396                         fi
2397                         $rm -f UU/kernel.what
2398                 elif test -d c:/.; then
2399                         set X $myuname
2400                         osname=os2
2401                         osvers="$5"
2402                 fi
2403         fi
2404         
2405         : Now look for a hint file osname_osvers, unless one has been
2406         : specified already.
2407         case "$hintfile" in
2408         ''|' ')
2409                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2410                 : Also try without trailing minor version numbers.
2411                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2412                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2413                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2414                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2415                 case "$file" in
2416                 '') dflt=none ;;
2417                 *)  case "$osvers" in
2418                         '') dflt=$file
2419                                 ;;
2420                         *)  if $test -f $src/hints/$file.sh ; then
2421                                         dflt=$file
2422                                 elif $test -f $src/hints/$xfile.sh ; then
2423                                         dflt=$xfile
2424                                 elif $test -f $src/hints/$xxfile.sh ; then
2425                                         dflt=$xxfile
2426                                 elif $test -f $src/hints/$xxxfile.sh ; then
2427                                         dflt=$xxxfile
2428                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2429                                         dflt=$xxxxfile
2430                                 elif $test -f "$src/hints/${osname}.sh" ; then
2431                                         dflt="${osname}"
2432                                 else
2433                                         dflt=none
2434                                 fi
2435                                 ;;
2436                         esac
2437                         ;;
2438                 esac
2439                 if $test -f Policy.sh ; then
2440                         case "$dflt" in
2441                         *Policy*) ;;
2442                         none) dflt="Policy" ;;
2443                         *) dflt="Policy $dflt" ;;
2444                         esac
2445                 fi
2446                 ;;
2447         *)
2448                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2449                 ;;
2450         esac
2451
2452         if $test -f Policy.sh ; then
2453                 $cat <<EOM
2454
2455 There's also a Policy hint file available, which should make the
2456 site-specific (policy) questions easier to answer.
2457 EOM
2458
2459         fi
2460
2461         $cat <<EOM
2462
2463 You may give one or more space-separated answers, or "none" if appropriate.
2464 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2465 is a good thing.  DO NOT give a wrong version or a wrong OS.
2466
2467 EOM
2468
2469         rp="Which of these apply, if any?"
2470         . UU/myread
2471         tans=$ans
2472         for file in $tans; do
2473                 if $test X$file = XPolicy -a -f Policy.sh; then
2474                         . Policy.sh
2475                         $cat Policy.sh >> UU/config.sh
2476                 elif $test -f $src/hints/$file.sh; then
2477                         . $src/hints/$file.sh
2478                         $cat $src/hints/$file.sh >> UU/config.sh
2479                 elif $test X$tans = X -o X$tans = Xnone ; then
2480                         : nothing
2481                 else
2482                         : Give one chance to correct a possible typo.
2483                         echo "$file.sh does not exist"
2484                         dflt=$file
2485                         rp="hint to use instead?"
2486                         . UU/myread
2487                         for file in $ans; do
2488                                 if $test -f "$src/hints/$file.sh"; then
2489                                         . $src/hints/$file.sh
2490                                         $cat $src/hints/$file.sh >> UU/config.sh
2491                                 elif $test X$ans = X -o X$ans = Xnone ; then
2492                                         : nothing
2493                                 else
2494                                         echo "$file.sh does not exist -- ignored."
2495                                 fi
2496                         done
2497                 fi
2498         done
2499
2500         hint=recommended
2501         : Remember our hint file for later.
2502         if $test -f "$src/hints/$file.sh" ; then
2503                 hintfile="$file"
2504         else
2505                 hintfile=''
2506         fi
2507 fi
2508 cd UU
2509 ;;
2510 *)
2511         echo " "
2512         echo "Fetching default answers from $config_sh..." >&4
2513         tmp_n="$n"
2514         tmp_c="$c"
2515         cd ..
2516         cp $config_sh config.sh 2>/dev/null
2517         chmod +w config.sh
2518         . ./config.sh
2519         cd UU
2520         cp ../config.sh .
2521         n="$tmp_n"
2522         c="$tmp_c"
2523         hint=previous
2524         ;;
2525 esac
2526 test "$override" && . ./optdef.sh
2527 myuname="$newmyuname"
2528
2529 : Restore computed paths
2530 for file in $loclist $trylist; do
2531         eval $file="\$_$file"
2532 done
2533
2534 cat << EOM
2535
2536 Configure uses the operating system name and version to set some defaults.
2537 The default value is probably right if the name rings a bell. Otherwise,
2538 since spelling matters for me, either accept the default or answer "none"
2539 to leave it blank.
2540
2541 EOM
2542 case "$osname" in
2543         ''|' ')
2544                 case "$hintfile" in
2545                 ''|' '|none) dflt=none ;;
2546                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2547                 esac
2548                 ;;
2549         *) dflt="$osname" ;;
2550 esac
2551 rp="Operating system name?"
2552 . ./myread
2553 case "$ans" in
2554 none)  osname='' ;;
2555 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2556 esac
2557 echo " "
2558 case "$osvers" in
2559         ''|' ')
2560                 case "$hintfile" in
2561                 ''|' '|none) dflt=none ;;
2562                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2563                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2564                         case "$dflt" in
2565                         ''|' ') dflt=none ;;
2566                         esac
2567                         ;;
2568                 esac
2569                 ;;
2570         *) dflt="$osvers" ;;
2571 esac
2572 rp="Operating system version?"
2573 . ./myread
2574 case "$ans" in
2575 none)  osvers='' ;;
2576 *) osvers="$ans" ;;
2577 esac
2578
2579
2580 . ./posthint.sh
2581
2582 : who configured the system
2583 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2584 cf_by=`(logname) 2>/dev/null`
2585 case "$cf_by" in
2586 "")
2587         cf_by=`(whoami) 2>/dev/null`
2588         case "$cf_by" in
2589         "") cf_by=unknown ;;
2590         esac ;;
2591 esac
2592
2593 : set up the script used to warn in case of inconsistency
2594 cat <<EOS >whoa
2595 $startsh
2596 EOS
2597 cat <<'EOSC' >>whoa
2598 dflt=y
2599 echo " "
2600 echo "*** WHOA THERE!!! ***" >&4
2601 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2602 rp="    Keep the $hint value?"
2603 . ./myread
2604 case "$ans" in
2605 y) td=$was; tu=$was;;
2606 esac
2607 EOSC
2608
2609 : function used to set $1 to $val
2610 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2611 case "$val$was" in
2612 $define$undef) . ./whoa; eval "$var=\$td";;
2613 $undef$define) . ./whoa; eval "$var=\$tu";;
2614 *) eval "$var=$val";;
2615 esac'
2616
2617 cat <<EOM
2618
2619 Perl can be built to take advantage of threads, on some systems.
2620 To do so, Configure must be run with -Dusethreads.
2621
2622 Note that threading is a highly experimental feature, and
2623 some known race conditions still remain.  If you choose to try
2624 it, be very sure to not actually deploy it for production
2625 purposes.  README.threads has more details, and is required
2626 reading if you enable threads.
2627 EOM
2628 case "$usethreads" in
2629 $define|true|[yY]*)     dflt='y';;
2630 *) dflt='n';;
2631 esac
2632 rp='Build a threading Perl?'
2633 . ./myread
2634 case "$ans" in
2635 y|Y)    val="$define" ;;     
2636 *)      val="$undef" ;;
2637 esac
2638 set usethreads
2639 eval $setvar 
2640
2641 case "$d_oldpthreads" in
2642 '')     : Configure tests would be welcome here.  For now, assume undef.
2643         val="$undef" ;;
2644 *)      val="$d_oldpthreads" ;;
2645 esac
2646 set d_oldpthreads
2647 eval $setvar
2648
2649
2650 case "$usethreads" in
2651 "$define"|true|[yY]*)
2652 : Look for a hint-file generated 'call-back-unit'.  If the
2653 : user has specified that a threading perl is to be built,
2654 : we may need to set or change some other defaults.
2655         if $test -f usethreads.cbu; then
2656                 echo "Your platform has some specific hints for threaded builds, using them..."
2657                 . ./usethreads.cbu
2658         else
2659                 $cat <<EOM
2660 (Your platform doesn't have any specific hints for threaded builds.
2661  Assuming POSIX threads, then.)
2662 EOM
2663         fi
2664     ;;
2665 esac
2666
2667 cat <<EOM
2668
2669 Perl can be built so that multiple Perl interpreters can coexist
2670 within the same Perl executable.  To do so, Configure must be run with
2671 -Dusemultiplicity.
2672
2673 Normally you do not need this and you should answer no.
2674
2675 EOM
2676 case "$usemultiplicity" in
2677 $define|true|[yY]*)     dflt='y';;
2678 *) dflt='n';;
2679 esac
2680 rp='Build Perl for multiplicity?'
2681 . ./myread
2682 case "$ans" in
2683 y|Y)    val="$define" ;;     
2684 *)      val="$undef" ;;
2685 esac
2686 set usemultiplicity
2687 eval $setvar 
2688
2689 : determine where manual pages are on this system
2690 echo " "
2691 case "$sysman" in
2692 '') 
2693         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2694         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2695         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2696         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2697         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2698         sysman=`./loc . /usr/man/man1 $syspath`
2699         ;;
2700 esac
2701 if $test -d "$sysman"; then
2702         echo "System manual is in $sysman." >&4
2703 else
2704         echo "Could not find manual pages in source form." >&4
2705 fi
2706
2707 : see what memory models we can support
2708 case "$models" in
2709 '')
2710         $cat >pdp11.c <<'EOP'
2711 int main() {
2712 #ifdef pdp11
2713         exit(0);
2714 #else
2715         exit(1);
2716 #endif
2717 }
2718 EOP
2719         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2720         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2721                 dflt='unsplit split'
2722         else
2723                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2724                 case "$tans" in
2725                 X) dflt='none';;
2726                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2727                                 dflt='small'
2728                         else
2729                                 dflt=''
2730                         fi
2731                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2732                                 dflt="$dflt medium"
2733                         fi
2734                         if $test -d /lib/large || $test -d /usr/lib/large; then
2735                                 dflt="$dflt large"
2736                         fi
2737                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2738                                 dflt="$dflt huge"
2739                         fi
2740                 esac
2741         fi;;
2742 *) dflt="$models";;
2743 esac
2744 $cat <<EOM
2745  
2746 Some systems have different model sizes.  On most systems they are called
2747 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2748 split.  If your system doesn't support different memory models, say "none".
2749 If you wish to force everything to one memory model, say "none" here and
2750 put the appropriate flags later when it asks you for other cc and ld flags.
2751 Venix systems may wish to put "none" and let the compiler figure things out.
2752 (In the following question multiple model names should be space separated.)
2753
2754 The default for most systems is "none".
2755
2756 EOM
2757 rp="Which memory models are supported?"
2758 . ./myread
2759 models="$ans"
2760
2761 case "$models" in
2762 none)
2763         small=''
2764         medium=''
2765         large=''
2766         huge=''
2767         unsplit=''
2768         split=''
2769         ;;
2770 *split)
2771         case "$split" in
2772         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2773                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2774                         dflt='-i'
2775                 else
2776                         dflt='none'
2777                 fi;;
2778         *) dflt="$split";;
2779         esac
2780         rp="What flag indicates separate I and D space?"
2781         . ./myread
2782         tans="$ans"
2783         case "$tans" in
2784         none) tans='';;
2785         esac
2786         split="$tans"
2787         unsplit='';;
2788 *large*|*small*|*medium*|*huge*)
2789         case "$models" in
2790         *large*)
2791                 case "$large" in
2792                 '') dflt='-Ml';;
2793                 *) dflt="$large";;
2794                 esac
2795         rp="What flag indicates large model?"
2796         . ./myread
2797         tans="$ans"
2798         case "$tans" in
2799         none) tans='';
2800         esac
2801         large="$tans";;
2802         *) large='';;
2803         esac
2804         case "$models" in
2805         *huge*) case "$huge" in
2806                 '') dflt='-Mh';;
2807                 *) dflt="$huge";;
2808                 esac
2809                 rp="What flag indicates huge model?"
2810                 . ./myread
2811                 tans="$ans"
2812                 case "$tans" in
2813                 none) tans='';
2814                 esac
2815                 huge="$tans";;
2816         *) huge="$large";;
2817         esac
2818         case "$models" in
2819         *medium*) case "$medium" in
2820                 '') dflt='-Mm';;
2821                 *) dflt="$medium";;
2822                 esac
2823                 rp="What flag indicates medium model?"
2824                 . ./myread
2825                 tans="$ans"
2826                 case "$tans" in
2827                 none) tans='';
2828                 esac
2829                 medium="$tans";;
2830         *) medium="$large";;
2831         esac
2832         case "$models" in
2833         *small*) case "$small" in
2834                 '') dflt='none';;
2835                 *) dflt="$small";;
2836                 esac
2837                 rp="What flag indicates small model?"
2838                 . ./myread
2839                 tans="$ans"
2840                 case "$tans" in
2841                 none) tans='';
2842                 esac
2843                 small="$tans";;
2844         *) small='';;
2845         esac
2846         ;;
2847 *)
2848         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2849         ;;
2850 esac
2851 $rm -f pdp11.* pdp11
2852
2853 : make some quick guesses about what we are up against
2854 echo " "
2855 $echo $n "Hmm...  $c"
2856 echo exit 1 >bsd
2857 echo exit 1 >usg
2858 echo exit 1 >v7
2859 echo exit 1 >osf1
2860 echo exit 1 >eunice
2861 echo exit 1 >xenix
2862 echo exit 1 >venix
2863 echo exit 1 >os2
2864 d_bsd="$undef"
2865 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2866 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2867 then
2868         echo "Looks kind of like an OSF/1 system, but we'll see..."
2869         echo exit 0 >osf1
2870 elif test `echo abc | tr a-z A-Z` = Abc ; then
2871         xxx=`./loc addbib blurfl $pth`
2872         if $test -f $xxx; then
2873         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2874                 echo exit 0 >bsd
2875                 echo exit 0 >usg
2876         else
2877                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2878                         echo "Looks kind of like an extended USG system, but we'll see..."
2879                 else
2880                         echo "Looks kind of like a USG system, but we'll see..."
2881                 fi
2882                 echo exit 0 >usg
2883         fi
2884 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2885         echo "Looks kind of like a BSD system, but we'll see..."
2886         d_bsd="$define"
2887         echo exit 0 >bsd
2888 else
2889         echo "Looks kind of like a Version 7 system, but we'll see..."
2890         echo exit 0 >v7
2891 fi
2892 case "$eunicefix" in
2893 *unixtovms*)
2894         $cat <<'EOI'
2895 There is, however, a strange, musty smell in the air that reminds me of
2896 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2897 EOI
2898         echo exit 0 >eunice
2899         d_eunice="$define"
2900 : it so happens the Eunice I know will not run shell scripts in Unix format
2901         ;;
2902 *)
2903         echo " "
2904         echo "Congratulations.  You aren't running Eunice."
2905         d_eunice="$undef"
2906         ;;
2907 esac
2908 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2909 case "$p_" in
2910 :) ;;
2911 *)
2912         $cat <<'EOI'
2913 I have the feeling something is not exactly right, however...don't tell me...
2914 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2915 EOI
2916         echo exit 0 >os2
2917         ;;
2918 esac
2919 if test -f /xenix; then
2920         echo "Actually, this looks more like a XENIX system..."
2921         echo exit 0 >xenix
2922         d_xenix="$define"
2923 else
2924         echo " "
2925         echo "It's not Xenix..."
2926         d_xenix="$undef"
2927 fi
2928 chmod +x xenix
2929 $eunicefix xenix
2930 if test -f /venix; then
2931         echo "Actually, this looks more like a VENIX system..."
2932         echo exit 0 >venix
2933 else
2934         echo " "
2935         if ./xenix; then
2936                 : null
2937         else
2938                 echo "Nor is it Venix..."
2939         fi
2940 fi
2941 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2942 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2943 $rm -f foo
2944
2945 : see if we need a special compiler
2946 echo " "
2947 if ./usg; then
2948         case "$cc" in
2949         '') case "$Mcc" in
2950                 /*) dflt='Mcc';;
2951                 *) case "$large" in
2952                         -M*) dflt='cc';;
2953                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
2954                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
2955                                                 dflt='cc'
2956                                         else
2957                                                 dflt='cc -M'
2958                                         fi
2959                                 else
2960                                         dflt='cc'
2961                                 fi;;
2962                         esac;;
2963                 esac;;
2964         *)  dflt="$cc";;
2965         esac
2966         case "$dflt" in
2967         *M*)    $cat <<'EOM'
2968 On some older systems the default C compiler will not resolve multiple global
2969 references that happen to have the same name.  On some such systems the "Mcc"
2970 command may be used to force these to be resolved.  On other systems a "cc -M"
2971 command is required.  (Note that the -M flag on other systems indicates a
2972 memory model to use!) If you have the Gnu C compiler, you might wish to use
2973 that instead.
2974
2975 EOM
2976         ;;
2977         esac
2978         rp="Use which C compiler?"
2979         . ./myread
2980         cc="$ans"
2981 else
2982         case "$cc" in
2983         '') dflt=cc;;
2984         *) dflt="$cc";;
2985         esac
2986         rp="Use which C compiler?"
2987         . ./myread
2988         cc="$ans"
2989 fi
2990 : Look for a hint-file generated 'call-back-unit'.  Now that the
2991 : user has specified the compiler, we may need to set or change some
2992 : other defaults.
2993 if $test -f cc.cbu; then
2994     . ./cc.cbu
2995 fi
2996 echo " "
2997 echo "Checking for GNU cc in disguise and/or its version number..." >&4
2998 $cat >gccvers.c <<EOM
2999 #include <stdio.h>
3000 int main() {
3001 #ifdef __GNUC__
3002 #ifdef __VERSION__
3003         printf("%s\n", __VERSION__);
3004 #else
3005         printf("%s\n", "1");
3006 #endif
3007 #endif
3008         exit(0);
3009 }
3010 EOM
3011 if $cc -o gccvers gccvers.c; then
3012         gccversion=`./gccvers`
3013         case "$gccversion" in
3014         '') echo "You are not using GNU cc." ;;
3015         *)  echo "You are using GNU cc $gccversion." ;;
3016         esac
3017 else
3018         echo " "
3019         echo "*** WHOA THERE!!! ***" >&4
3020         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3021         case "$knowitall" in
3022         '')
3023         echo "    You'd better start hunting for one and let me know about it." >&4
3024                 exit 1
3025                 ;;
3026         esac
3027 fi
3028 $rm -f gccvers*
3029 case "$gccversion" in
3030 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3031 esac
3032
3033 cat <<EOM
3034
3035 Perl can be built to take advantage of explicit 64-bit interfaces,
3036 on some systems.  To do so, Configure must be run with -Duse64bits.
3037
3038 If this doesn't make any sense to you, just accept the default 'n'.
3039 EOM
3040 case "$use64bits" in
3041 $define|true|[yY]*)     dflt='y';;
3042 *) dflt='n';;
3043 esac
3044 rp='Try to use explicit 64-bit interfaces, if available?'
3045 . ./myread
3046 case "$ans" in
3047 y|Y) 
3048         val="$define"
3049         ;;     
3050 *)      
3051         val="$undef"
3052         ;;
3053 esac
3054 set use64bits
3055 eval $setvar
3056
3057 case "$archname64" in
3058 '') archname64='' ;;    # not a typo
3059 esac
3060
3061 case "$use64bits" in
3062 "$define"|true|[yY]*)
3063 : Look for a hint-file generated 'call-back-unit'.  If the
3064 : user has specified that a 64 bit perl is to be built,
3065 : we may need to set or change some other defaults.
3066         if $test -f use64bits.cbu; then
3067                 echo "Your platform has some specific hints for 64-bit builds, using them..."
3068                 . ./use64bits.cbu
3069         else
3070                 $cat <<EOM
3071 (Your platform doesn't have any specific hints for 64-bit builds.
3072  This is probably okay, especially if your system is a true 64-bit system.)
3073 EOM
3074                 case "$gccversion" in
3075                 '')     ;;
3076                 *)      $cat <<EOM
3077 But since you seem to be using gcc,
3078 I will now add -DUSE_LONG_LONG to the compilation flags.
3079 EOM
3080                         ccflags="$ccflags -DUSE_LONG_LONG"
3081                         ;;
3082                 esac
3083         fi
3084         ;;
3085 esac
3086
3087 : determine the architecture name
3088 echo " "
3089 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
3090         tarch=`arch`"-$osname"
3091 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
3092         if uname -m > tmparch 2>&1 ; then
3093                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
3094                         -e 's/$/'"-$osname/" tmparch`
3095         else
3096                 tarch="$osname"
3097         fi
3098         $rm -f tmparch
3099 else
3100         tarch="$osname"
3101 fi
3102 case "$myarchname" in
3103 ''|"$tarch") ;;
3104 *)
3105         echo "(Your architecture name used to be $myarchname.)"
3106         archname=''
3107         ;;
3108 esac
3109 myarchname="$tarch"
3110 case "$archname" in
3111 '') dflt="$tarch";;
3112 *) dflt="$archname";;
3113 esac
3114 rp='What is your architecture name'
3115 . ./myread
3116 archname="$ans"
3117 case "$usethreads" in
3118 $define)
3119         echo "Threads selected." >&4
3120         case "$archname" in
3121         *-thread*) echo "...and architecture name already has -thread." >&4
3122                 ;;
3123         *)      archname="$archname-thread"
3124                 echo "...setting architecture name to $archname." >&4
3125                 ;;
3126         esac
3127         ;;
3128 esac
3129 case "$usemultiplicity" in
3130 $define)
3131         echo "Multiplicity selected." >&4
3132         case "$archname" in
3133         *-multi*) echo "...and architecture name already has -multi." >&4
3134                 ;;
3135         *)      archname="$archname-multi"
3136                 echo "...setting architecture name to $archname." >&4
3137                 ;;
3138         esac
3139         ;;
3140 esac
3141 case "$use64bits" in
3142 $define)
3143         echo "Explicit 64-bitness selected." >&4
3144         case "$archname64" in
3145         '')
3146                 ;;
3147         *)
3148                 case "$archname" in
3149                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
3150                         ;;
3151                 *)      archname="$archname-$archname64"
3152                         echo "...setting architecture name to $archname." >&4
3153                         ;;
3154                 esac
3155                 ;;
3156         esac
3157 esac
3158
3159 : decide how portable to be.  Allow command line overrides.
3160 case "$d_portable" in
3161 "$undef") ;;
3162 *)      d_portable="$define" ;;
3163 esac
3164
3165 : set up shell script to do ~ expansion
3166 cat >filexp <<EOSS
3167 $startsh
3168 : expand filename
3169 case "\$1" in
3170  ~/*|~)
3171         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3172         ;;
3173  ~*)
3174         if $test -f /bin/csh; then
3175                 /bin/csh -f -c "glob \$1"
3176                 failed=\$?
3177                 echo ""
3178                 exit \$failed
3179         else
3180                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3181                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3182                 if $test ! -d "\$dir"; then
3183                         me=\`basename \$0\`
3184                         echo "\$me: can't locate home directory for: \$name" >&2
3185                         exit 1
3186                 fi
3187                 case "\$1" in
3188                 */*)
3189                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3190                         ;;
3191                 *)
3192                         echo \$dir
3193                         ;;
3194                 esac
3195         fi
3196         ;;
3197 *)
3198         echo \$1
3199         ;;
3200 esac
3201 EOSS
3202 chmod +x filexp
3203 $eunicefix filexp
3204
3205 : now set up to get a file name
3206 cat <<EOS >getfile
3207 $startsh
3208 EOS
3209 cat <<'EOSC' >>getfile
3210 tilde=''
3211 fullpath=''
3212 already=''
3213 skip=''
3214 none_ok=''
3215 exp_file=''
3216 nopath_ok=''
3217 orig_rp="$rp"
3218 orig_dflt="$dflt"
3219 case "$gfpth" in
3220 '') gfpth='.' ;;
3221 esac
3222
3223 case "$fn" in
3224 *\(*)
3225         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3226         fn=`echo $fn | sed 's/(.*)//'`
3227         ;;
3228 esac
3229
3230 case "$fn" in
3231 *:*)
3232         loc_file=`expr $fn : '.*:\(.*\)'`
3233         fn=`expr $fn : '\(.*\):.*'`
3234         ;;
3235 esac
3236
3237 case "$fn" in
3238 *~*) tilde=true;;
3239 esac
3240 case "$fn" in
3241 */*) fullpath=true;;
3242 esac
3243 case "$fn" in
3244 *+*) skip=true;;
3245 esac
3246 case "$fn" in
3247 *n*) none_ok=true;;
3248 esac
3249 case "$fn" in
3250 *e*) exp_file=true;;
3251 esac
3252 case "$fn" in
3253 *p*) nopath_ok=true;;
3254 esac
3255
3256 case "$fn" in
3257 *f*) type='File';;
3258 *d*) type='Directory';;
3259 *l*) type='Locate';;
3260 esac
3261
3262 what="$type"
3263 case "$what" in
3264 Locate) what='File';;
3265 esac
3266
3267 case "$exp_file" in
3268 '')
3269         case "$d_portable" in
3270         "$define") ;;
3271         *) exp_file=true;;
3272         esac
3273         ;;
3274 esac
3275
3276 cd ..
3277 while test "$type"; do
3278         redo=''
3279         rp="$orig_rp"
3280         dflt="$orig_dflt"
3281         case "$tilde" in
3282         true) rp="$rp (~name ok)";;
3283         esac
3284         . UU/myread
3285         if test -f UU/getfile.ok && \
3286                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3287         then
3288                 value="$ans"
3289                 ansexp="$ans"
3290                 break
3291         fi
3292         case "$ans" in
3293         none)
3294                 value=''
3295                 ansexp=''
3296                 case "$none_ok" in
3297                 true) type='';;
3298                 esac
3299                 ;;
3300         *)
3301                 case "$tilde" in
3302                 '') value="$ans"
3303                         ansexp="$ans";;
3304                 *)
3305                         value=`UU/filexp $ans`
3306                         case $? in
3307                         0)
3308                                 if test "$ans" != "$value"; then
3309                                         echo "(That expands to $value on this system.)"
3310                                 fi
3311                                 ;;
3312                         *) value="$ans";;
3313                         esac
3314                         ansexp="$value"
3315                         case "$exp_file" in
3316                         '') value="$ans";;
3317                         esac
3318                         ;;
3319                 esac
3320                 case "$fullpath" in
3321                 true)
3322                         case "$ansexp" in
3323                         /*) value="$ansexp" ;;
3324                         *)
3325                                 redo=true
3326                                 case "$already" in
3327                                 true)
3328                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3329                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3330                                         ;;
3331                                 *)
3332                                 echo "Please give a full path name, starting with slash." >&4
3333                                         case "$tilde" in
3334                                         true)
3335                                 echo "Note that using ~name is ok provided it expands well." >&4
3336                                                 already=true
3337                                                 ;;
3338                                         esac
3339                                 esac
3340                                 ;;
3341                         esac
3342                         ;;
3343                 esac
3344                 case "$redo" in
3345                 '')
3346                         case "$type" in
3347                         File)
3348                                 for fp in $gfpth; do
3349                                         if test "X$fp" = X.; then
3350                                             pf="$ansexp"
3351                                         else    
3352                                             pf="$fp/$ansexp"
3353                                         fi
3354                                         if test -f "$pf"; then
3355                                                 type=''
3356                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3357                                         then
3358                                                 echo "($value is not a plain file, but that's ok.)"
3359                                                 type=''
3360                                         fi
3361                                         if test X"$type" = X; then
3362                                             value="$pf"
3363                                             break
3364                                         fi
3365                                 done
3366                                 ;;
3367                         Directory)
3368                                 for fp in $gfpth; do
3369                                         if test "X$fp" = X.; then
3370                                             pf="$ansexp"
3371                                         else    
3372                                             pf="$fp/$ansexp"
3373                                         fi
3374                                         if test -d "$pf"; then
3375                                                 type=''
3376                                                 value="$pf"
3377                                                 break
3378                                         fi
3379                                 done
3380                                 ;;
3381                         Locate)
3382                                 if test -d "$ansexp"; then
3383                                         echo "(Looking for $loc_file in directory $value.)"
3384                                         value="$value/$loc_file"
3385                                         ansexp="$ansexp/$loc_file"
3386                                 fi
3387                                 if test -f "$ansexp"; then
3388                                         type=''
3389                                 fi
3390                                 case "$nopath_ok" in
3391                                 true)   case "$value" in
3392                                         */*) ;;
3393                                         *)      echo "Assuming $value will be in people's path."
3394                                                 type=''
3395                                                 ;;
3396                                         esac
3397                                         ;;
3398                                 esac
3399                                 ;;
3400                         esac
3401
3402                         case "$skip" in
3403                         true) type='';
3404                         esac
3405
3406                         case "$type" in
3407                         '') ;;
3408                         *)
3409                                 if test "$fastread" = yes; then
3410                                         dflt=y
3411                                 else
3412                                         dflt=n
3413                                 fi
3414                                 rp="$what $value doesn't exist.  Use that name anyway?"
3415                                 . UU/myread
3416                                 dflt=''
3417                                 case "$ans" in
3418                                 y*) type='';;
3419                                 *) echo " ";;
3420                                 esac
3421                                 ;;
3422                         esac
3423                         ;;
3424                 esac
3425                 ;;
3426         esac
3427 done
3428 cd UU
3429 ans="$value"
3430 rp="$orig_rp"
3431 dflt="$orig_dflt"
3432 rm -f getfile.ok
3433 test "X$gfpthkeep" != Xy && gfpth=""
3434 EOSC
3435
3436 : determine root of directory hierarchy where package will be installed.
3437 case "$prefix" in
3438 '')
3439         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
3440         ;;
3441 *)
3442         dflt="$prefix"
3443         ;;
3444 esac
3445 $cat <<EOM
3446
3447 By default, $package will be installed in $dflt/bin, manual pages
3448 under $dflt/man, etc..., i.e. with $dflt as prefix for all
3449 installation directories. Typically this is something like /usr/local.
3450 If you wish to have binaries under /usr/bin but other parts of the
3451 installation under /usr/local, that's ok: you will be prompted
3452 separately for each of the installation directories, the prefix being
3453 only used to set the defaults.
3454
3455 EOM
3456 fn=d~
3457 rp='Installation prefix to use?'
3458 . ./getfile
3459 oldprefix=''
3460 case "$prefix" in
3461 '') ;;
3462 *)
3463         case "$ans" in
3464         "$prefix") ;;
3465         *) oldprefix="$prefix";;
3466         esac
3467         ;;
3468 esac
3469 prefix="$ans"
3470 prefixexp="$ansexp"
3471
3472 : is AFS running?
3473 echo " "
3474 case "$afs" in
3475 $define|true)   afs=true ;;
3476 $undef|false)   afs=false ;;
3477 *)      if test -d /afs; then
3478                 afs=true
3479         else
3480                 afs=false
3481         fi
3482         ;;
3483 esac
3484 if $afs; then
3485         echo "AFS may be running... I'll be extra cautious then..." >&4
3486 else
3487         echo "AFS does not seem to be running..." >&4
3488 fi
3489
3490 : determine installation prefix for where package is to be installed.
3491 if $afs; then 
3492 $cat <<EOM
3493
3494 Since you are running AFS, I need to distinguish the directory in which
3495 files will reside from the directory in which they are installed (and from
3496 which they are presumably copied to the former directory by occult means).
3497
3498 EOM
3499         case "$installprefix" in
3500         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
3501         *) dflt="$installprefix";;
3502         esac
3503 else
3504 $cat <<EOM
3505
3506 In some special cases, particularly when building $package for distribution,
3507 it is convenient to distinguish between the directory in which files should 
3508 be installed from the directory ($prefix) in which they 
3509 will eventually reside.  For most users, these two directories are the same.
3510
3511 EOM
3512         case "$installprefix" in
3513         '') dflt=$prefix ;;
3514         *) dflt=$installprefix;;
3515         esac
3516 fi
3517 fn=d~
3518 rp='What installation prefix should I use for installing files?'
3519 . ./getfile
3520 installprefix="$ans"
3521 installprefixexp="$ansexp"
3522
3523 : set the prefixit variable, to compute a suitable default value
3524 prefixit='case "$3" in
3525 ""|none)
3526         case "$oldprefix" in
3527         "") eval "$1=\"\$$2\"";;
3528         *)
3529                 case "$3" in
3530                 "") eval "$1=";;
3531                 none)
3532                         eval "tp=\"\$$2\"";
3533                         case "$tp" in
3534                         ""|" ") eval "$1=\"\$$2\"";;
3535                         *) eval "$1=";;
3536                         esac;;
3537                 esac;;
3538         esac;;
3539 *)
3540         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3541         case "$tp" in
3542         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3543         /*-$oldprefix/*|\~*-$oldprefix/*)
3544                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3545         *) eval "$1=\"\$$2\"";;
3546         esac;;
3547 esac'
3548
3549 : set the base revision
3550 baserev=5.0
3551
3552 : get the patchlevel
3553 echo " "
3554 echo "Getting the current patchlevel..." >&4
3555 if $test -r $rsrc/patchlevel.h;then
3556         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3557         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3558 else
3559         patchlevel=0
3560         subversion=0
3561 fi
3562 $echo $n "(You have $package" $c
3563 case "$package" in
3564 "*$baserev")    ;;
3565 *)              $echo $n " $baserev" $c ;;
3566 esac
3567 $echo $n " patchlevel $patchlevel" $c
3568 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3569 echo ".)"
3570
3571 if test 0 -eq "$subversion"; then
3572         version=`LC_ALL=C; export LC_ALL; \
3573                  echo $baserev $patchlevel | \
3574                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3575 else
3576         version=`LC_ALL=C; export LC_ALL; \
3577                  echo $baserev $patchlevel $subversion | \
3578                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3579 fi
3580 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3581 if test "$subversion" -lt 50; then
3582         apiversion=`LC_ALL=C; export LC_ALL; \
3583                  LANGUAGE=C; export LANGUAGE; \
3584                  echo $baserev $patchlevel | \
3585                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3586 else
3587         apiversion="$version"
3588 fi
3589
3590 : determine installation style
3591 : For now, try to deduce it from prefix unless it is already set.
3592 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
3593 case "$installstyle" in
3594 '')     case "$prefix" in
3595                 *perl*) dflt='lib';;
3596                 *) dflt='lib/perl5' ;;
3597         esac
3598         ;;
3599 *)      dflt='lib/perl5' ;;
3600 esac
3601 : Probably not worth prompting for this since we prompt for all
3602 : the directories individually, and the prompt would be too long and
3603 : confusing anyway.
3604 installstyle=$dflt
3605
3606 : determine where private library files go
3607 : Usual default is /usr/local/lib/perl5/$version.
3608 : Also allow things like /opt/perl/lib/$version, since 
3609 : /opt/perl/lib/perl5... would be redundant.
3610 : The default "style" setting is made in installstyle.U
3611 case "$installstyle" in
3612 *lib/perl5*) set dflt privlib lib/$package/$version ;;
3613 *)       set dflt privlib lib/$version ;;
3614 esac
3615 eval $prefixit
3616 $cat <<EOM
3617
3618 There are some auxiliary files for $package that need to be put into a
3619 private library directory that is accessible by everyone.
3620
3621 EOM
3622 fn=d~+
3623 rp='Pathname where the private library files will reside?'
3624 . ./getfile
3625 privlib="$ans"
3626 privlibexp="$ansexp"
3627 : Change installation prefix, if necessary.
3628 if $test X"$prefix" != X"$installprefix"; then
3629         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
3630 else
3631         installprivlib="$privlibexp"
3632 fi
3633
3634 : set the prefixup variable, to restore leading tilda escape
3635 prefixup='case "$prefixexp" in
3636 "$prefix") ;;
3637 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3638 esac'
3639
3640 : determine where public architecture dependent libraries go
3641 set archlib archlib
3642 eval $prefixit
3643 : privlib default is /usr/local/lib/$package/$version
3644 : archlib default is /usr/local/lib/$package/$version/$archname
3645 : privlib may have an optional trailing /share.
3646 tdflt=`echo $privlib | $sed 's,/share$,,'`
3647 tdflt=$tdflt/$archname
3648 case "$archlib" in
3649 '')     dflt=$tdflt
3650         ;;
3651 *)      dflt="$archlib"
3652     ;;
3653 esac
3654 $cat <<EOM
3655
3656 $spackage contains architecture-dependent library files.  If you are
3657 sharing libraries in a heterogeneous environment, you might store
3658 these files in a separate location.  Otherwise, you can just include
3659 them with the rest of the public library files.
3660
3661 EOM
3662 fn=d+~
3663 rp='Where do you want to put the public architecture-dependent libraries?'
3664 . ./getfile
3665 archlib="$ans"
3666 archlibexp="$ansexp"
3667 if $test X"$archlib" = X"$privlib"; then
3668         d_archlib="$undef"
3669 else
3670         d_archlib="$define"
3671 fi
3672 : Change installation prefix, if necessary.
3673 if $test X"$prefix" != X"$installprefix"; then
3674         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
3675 else
3676         installarchlib="$archlibexp"
3677 fi
3678
3679
3680 : Binary compatibility with 5.005 is not possible for builds
3681 : with advanced features
3682 case "$usethreads$usemultiplicity" in
3683 *define*)
3684         bincompat5005="$undef"
3685         d_bincompat5005="$undef"
3686         ;;
3687 *)      $cat <<EOM
3688
3689 Perl 5.006 can be compiled for binary compatibility with 5.005.
3690 If you decide to do so, you will be able to continue using most
3691 of the extensions that were compiled for Perl 5.005.
3692
3693 EOM
3694         case "$bincompat5005$d_bincompat5005" in
3695         *"$undef"*) dflt=n ;;
3696         *) dflt=y ;;
3697         esac
3698         rp='Binary compatibility with Perl 5.005?'
3699         . ./myread
3700         case "$ans" in
3701         y*) val="$define" ;;
3702         *)  val="$undef" ;;
3703         esac
3704         set d_bincompat5005
3705         eval $setvar
3706         case "$d_bincompat5005" in
3707         "$define")
3708                 bincompat5005="$define"
3709                 ;;
3710         *)      bincompat5005="$undef"
3711                 d_bincompat5005="$undef"
3712                 ;;
3713         esac
3714         ;;
3715 esac
3716
3717
3718 : see if setuid scripts can be secure
3719 $cat <<EOM
3720
3721 Some kernels have a bug that prevents setuid #! scripts from being
3722 secure.  Some sites have disabled setuid #! scripts because of this.
3723
3724 First let's decide if your kernel supports secure setuid #! scripts.
3725 (If setuid #! scripts would be secure but have been disabled anyway,
3726 don't say that they are secure if asked.)
3727
3728 EOM
3729
3730 val="$undef"
3731 if $test -d /dev/fd; then
3732         echo "#!$ls" >reflect
3733         chmod +x,u+s reflect
3734         ./reflect >flect 2>&1
3735         if $contains "/dev/fd" flect >/dev/null; then
3736                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3737                 val="$define"
3738         else
3739                 $cat <<EOM
3740 If you are not sure if they are secure, I can check but I'll need a
3741 username and password different from the one you are using right now.
3742 If you don't have such a username or don't want me to test, simply
3743 enter 'none'.
3744
3745 EOM
3746                 rp='Other username to test security of setuid scripts with?'
3747                 dflt='none'
3748                 . ./myread
3749                 case "$ans" in
3750                 n|none)
3751                         case "$d_suidsafe" in
3752                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3753                                 dflt=n;;
3754                         "$undef")
3755                                 echo "Well, the $hint value is *not* secure." >&4
3756                                 dflt=n;;
3757                         *)      echo "Well, the $hint value *is* secure." >&4
3758                                 dflt=y;;
3759                         esac
3760                         ;;
3761                 *)
3762                         $rm -f reflect flect
3763                         echo "#!$ls" >reflect
3764                         chmod +x,u+s reflect
3765                         echo >flect
3766                         chmod a+w flect
3767                         echo '"su" will (probably) prompt you for '"$ans's password."
3768                         su $ans -c './reflect >flect'
3769                         if $contains "/dev/fd" flect >/dev/null; then
3770                                 echo "Okay, it looks like setuid scripts are secure." >&4
3771                                 dflt=y
3772                         else
3773                                 echo "I don't think setuid scripts are secure." >&4
3774                                 dflt=n
3775                         fi
3776                         ;;
3777                 esac
3778                 rp='Does your kernel have *secure* setuid scripts?'
3779                 . ./myread
3780                 case "$ans" in
3781                 [yY]*)  val="$define";;
3782                 *)      val="$undef";;
3783                 esac
3784         fi
3785 else
3786         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3787         echo "(That's for file descriptors, not floppy disks.)"
3788         val="$undef"
3789 fi
3790 set d_suidsafe
3791 eval $setvar
3792
3793 $rm -f reflect flect
3794
3795 : now see if they want to do setuid emulation
3796 echo " "
3797 val="$undef"
3798 case "$d_suidsafe" in
3799 "$define")
3800         val="$undef"
3801         echo "No need to emulate SUID scripts since they are secure here." >& 4
3802         ;;
3803 *)
3804         $cat <<EOM
3805 Some systems have disabled setuid scripts, especially systems where
3806 setuid scripts cannot be secure.  On systems where setuid scripts have
3807 been disabled, the setuid/setgid bits on scripts are currently
3808 useless.  It is possible for $package to detect those bits and emulate
3809 setuid/setgid in a secure fashion.  This emulation will only work if
3810 setuid scripts have been disabled in your kernel.
3811
3812 EOM
3813         case "$d_dosuid" in
3814         "$define") dflt=y ;;
3815         *) dflt=n ;;
3816         esac
3817         rp="Do you want to do setuid/setgid emulation?"
3818         . ./myread
3819         case "$ans" in
3820         [yY]*)  val="$define";;
3821         *)      val="$undef";;
3822         esac
3823         ;;
3824 esac
3825 set d_dosuid
3826 eval $setvar
3827
3828 : What should the include directory be ?
3829 echo " "
3830 $echo $n "Hmm...  $c"
3831 dflt='/usr/include'
3832 incpath=''
3833 mips_type=''
3834 if $test -f /bin/mips && /bin/mips; then
3835         echo "Looks like a MIPS system..."
3836         $cat >usr.c <<'EOCP'
3837 #ifdef SYSTYPE_BSD43
3838 /bsd43
3839 #endif
3840 EOCP
3841         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3842                 dflt='/bsd43/usr/include'
3843                 incpath='/bsd43'
3844                 mips_type='BSD 4.3'
3845         else
3846                 mips_type='System V'
3847         fi
3848         $rm -f usr.c usr.out
3849         echo "and you're compiling with the $mips_type compiler and libraries."
3850         xxx_prompt=y
3851         echo "exit 0" >mips
3852 else
3853         echo "Doesn't look like a MIPS system."
3854         xxx_prompt=n
3855         echo "exit 1" >mips
3856 fi
3857 chmod +x mips
3858 $eunicefix mips
3859 case "$usrinc" in
3860 '') ;;
3861 *) dflt="$usrinc";;
3862 esac
3863 case "$xxx_prompt" in
3864 y)      fn=d/
3865         echo " "
3866         rp='Where are the include files you want to use?'
3867         . ./getfile
3868         usrinc="$ans"
3869         ;;
3870 *)      usrinc="$dflt"
3871         ;;
3872 esac
3873
3874 : see how we invoke the C preprocessor
3875 echo " "
3876 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3877 cat <<'EOT' >testcpp.c
3878 #define ABC abc
3879 #define XYZ xyz
3880 ABC.XYZ
3881 EOT
3882 cd ..
3883 if test ! -f cppstdin; then
3884         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3885                 # AIX cc -E doesn't show the absolute headerfile
3886                 # locations but we'll cheat by using the -M flag.
3887                 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
3888         else
3889                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3890         fi
3891 else
3892         echo "Keeping your $hint cppstdin wrapper."
3893 fi
3894 chmod 755 cppstdin
3895 wrapper=`pwd`/cppstdin
3896 ok='false'
3897 cd UU
3898
3899 if $test "X$cppstdin" != "X" && \
3900         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3901         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3902 then
3903         echo "You used to use $cppstdin $cppminus so we'll use that again."
3904         case "$cpprun" in
3905         '') echo "But let's see if we can live without a wrapper..." ;;
3906         *)
3907                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3908                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3909                 then
3910                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3911                         ok='true'
3912                 else
3913                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3914                 fi
3915                 ;;
3916         esac
3917 else
3918         case "$cppstdin" in
3919         '') ;;
3920         *)
3921                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3922                 ;;
3923         esac
3924 fi
3925
3926 if $ok; then
3927         : nothing
3928 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3929         $cc -E <testcpp.c >testcpp.out 2>&1; \
3930         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3931         echo "Yup, it does."
3932         x_cpp="$cc -E"
3933         x_minus='';
3934 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3935         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3936         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3937         echo "Yup, it does."
3938         x_cpp="$cc -E"
3939         x_minus='-';
3940 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3941         $cc -P <testcpp.c >testcpp.out 2>&1; \
3942         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3943         echo "Yipee, that works!"
3944         x_cpp="$cc -P"
3945         x_minus='';
3946 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3947         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3948         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3949         echo "At long last!"
3950         x_cpp="$cc -P"
3951         x_minus='-';
3952 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3953         $cpp <testcpp.c >testcpp.out 2>&1; \
3954         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3955         echo "It works!"
3956         x_cpp="$cpp"
3957         x_minus='';
3958 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3959         $cpp - <testcpp.c >testcpp.out 2>&1; \
3960         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3961         echo "Hooray, it works!  I was beginning to wonder."
3962         x_cpp="$cpp"
3963         x_minus='-';
3964 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3965         $wrapper <testcpp.c >testcpp.out 2>&1; \
3966         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3967         x_cpp="$wrapper"
3968         x_minus=''
3969         echo "Eureka!"
3970 else
3971         dflt=''
3972         rp="No dice.  I can't find a C preprocessor.  Name one:"
3973         . ./myread
3974         x_cpp="$ans"
3975         x_minus=''
3976         $x_cpp <testcpp.c >testcpp.out 2>&1
3977         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3978                 echo "OK, that will do." >&4
3979         else
3980 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3981                 exit 1
3982         fi
3983 fi
3984
3985 case "$ok" in
3986 false)
3987         cppstdin="$x_cpp"
3988         cppminus="$x_minus"
3989         cpprun="$x_cpp"
3990         cpplast="$x_minus"
3991         set X $x_cpp
3992         shift
3993         case "$1" in
3994         "$cpp")
3995                 echo "Perhaps can we force $cc -E using a wrapper..."
3996                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3997                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3998                 then
3999                         echo "Yup, we can."
4000                         cppstdin="$wrapper"
4001                         cppminus='';
4002                 else
4003                         echo "Nope, we'll have to live without it..."
4004                 fi
4005                 ;;
4006         esac
4007         case "$cpprun" in
4008         "$wrapper")
4009                 cpprun=''
4010                 cpplast=''
4011                 ;;
4012         esac
4013         ;;
4014 esac
4015
4016 case "$cppstdin" in
4017 "$wrapper"|'cppstdin') ;;
4018 *) $rm -f $wrapper;;
4019 esac
4020 $rm -f testcpp.c testcpp.out
4021
4022 : Set private lib path
4023 case "$plibpth" in
4024 '') if ./mips; then
4025                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4026         fi;;
4027 esac
4028 case "$libpth" in
4029 ' ') dlist='';;
4030 '') dlist="$loclibpth $plibpth $glibpth";;
4031 *) dlist="$libpth";;
4032 esac
4033
4034 : Now check and see which directories actually exist, avoiding duplicates
4035 libpth=''
4036 for xxx in $dlist
4037 do
4038     if $test -d $xxx; then
4039                 case " $libpth " in
4040                 *" $xxx "*) ;;
4041                 *) libpth="$libpth $xxx";;
4042                 esac
4043     fi
4044 done
4045 $cat <<'EOM'
4046
4047 Some systems have incompatible or broken versions of libraries.  Among
4048 the directories listed in the question below, please remove any you
4049 know not to be holding relevant libraries, and add any that are needed.
4050 Say "none" for none.
4051
4052 EOM
4053 case "$libpth" in
4054 '') dflt='none';;
4055 *)
4056         set X $libpth
4057         shift
4058         dflt=${1+"$@"}
4059         ;;
4060 esac
4061 rp="Directories to use for library searches?"
4062 . ./myread
4063 case "$ans" in
4064 none) libpth=' ';;
4065 *) libpth="$ans";;
4066 esac
4067
4068 : compute shared library extension
4069 case "$so" in
4070 '')
4071         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4072                 dflt='sl'
4073         else
4074                 dflt='so'
4075         fi
4076         ;;
4077 *) dflt="$so";;
4078 esac
4079 $cat <<EOM
4080
4081 On some systems, shared libraries may be available.  Answer 'none' if
4082 you want to suppress searching of shared libraries for the remaining
4083 of this configuration.
4084
4085 EOM
4086 rp='What is the file extension used for shared libraries?'
4087 . ./myread
4088 so="$ans"
4089
4090 : Define several unixisms.
4091 : Hints files or command line option can be used to override them.
4092 : The convoluted testing is in case hints files set either the old
4093 : or the new name.
4094 case "$_exe" in
4095 '')     case "$exe_ext" in
4096     '') ;;
4097         *)      _exe="$exe_ext" ;;
4098         esac
4099         ;;
4100 esac
4101 case "$_a" in
4102 '')     case "$lib_ext" in
4103     '') _a='.a';;
4104         *)      _a="$lib_ext" ;;
4105         esac
4106         ;;
4107 esac
4108 case "$_o" in
4109 '') case "$obj_ext" in
4110         '')     _o='.o';;
4111         *)      _o="$obj_ext";;
4112         esac
4113         ;;
4114 esac
4115 case "$p_" in
4116 '') case "$path_sep" in
4117         '')     p_=':';;
4118         *)      p_="$path_sep";;
4119         esac
4120         ;;
4121 esac
4122 exe_ext=$_exe
4123 lib_ext=$_a
4124 obj_ext=$_o
4125 path_sep=$p_
4126
4127 : Which makefile gets called first.  This is used by make depend.
4128 case "$firstmakefile" in
4129 '') firstmakefile='makefile';;
4130 esac
4131
4132 cat <<EOM
4133
4134 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4135 Configure must be run with -Dusesocks.
4136
4137 Normally you do not need this and you should answer no.
4138
4139 EOM
4140 case "$usesocks" in
4141 $define|true|[yY]*)     dflt='y';;
4142 *) dflt='n';;
4143 esac
4144 rp='Build Perl for SOCKS?'
4145 . ./myread
4146 case "$ans" in
4147 y|Y)    val="$define" ;;     
4148 *)      val="$undef" ;;
4149 esac
4150 set usesocks
4151 eval $setvar
4152
4153 : Looking for optional libraries
4154 echo " "
4155 echo "Checking for optional libraries..." >&4
4156 case "$libs" in
4157 ' '|'') dflt='';;
4158 *) dflt="$libs";;
4159 esac
4160 case "$libswanted" in
4161 '') libswanted='c_s';;
4162 esac
4163 case "$usesocks" in
4164 $define)
4165         libswanted="$libswanted socks5 socks5_sh"
4166         ;;
4167 esac
4168 for thislib in $libswanted; do
4169         
4170         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
4171                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4172                 echo "Found -l$thislib (shared)."
4173                 case " $dflt " in
4174                 *"-l$thislib "*);;
4175                 *) dflt="$dflt -l$thislib";;
4176                 esac
4177         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
4178                 echo "Found -l$thislib (shared)."
4179                 case " $dflt " in
4180                 *"-l$thislib "*);;
4181                 *) dflt="$dflt -l$thislib";;
4182                 esac
4183         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4184                 echo "Found -l$thislib."
4185                 case " $dflt " in
4186                 *"-l$thislib "*);;
4187                 *) dflt="$dflt -l$thislib";;
4188                 esac
4189         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4190                 echo "Found -l$thislib."
4191                 case " $dflt " in
4192                 *"-l$thislib "*);;
4193                 *) dflt="$dflt -l$thislib";;
4194                 esac
4195         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4196                 echo "Found -l${thislib}_s."
4197                 case " $dflt " in
4198                 *"-l$thislib "*);;
4199                 *) dflt="$dflt -l${thislib}_s";;
4200                 esac
4201         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4202                 echo "Found -l$thislib."
4203                 case " $dflt " in
4204                 *"-l$thislib "*);;
4205                 *) dflt="$dflt -l$thislib";;
4206                 esac
4207         else
4208                 echo "No -l$thislib."
4209         fi
4210 done
4211 set X $dflt
4212 shift
4213 dflt="$*"
4214 case "$libs" in
4215 '') dflt="$dflt";;
4216 *) dflt="$libs";;
4217 esac
4218 case "$dflt" in
4219 ' '|'') dflt='none';;
4220 esac
4221
4222 $cat <<EOM
4223
4224 In order to compile $package on your machine, a number of libraries
4225 are usually needed.  Include any other special libraries here as well.
4226 Say "none" for none.  The default list is almost always right.
4227 EOM
4228
4229 echo " "
4230 rp="What libraries to use?"
4231 . ./myread
4232 case "$ans" in
4233 none) libs=' ';;
4234 *) libs="$ans";;
4235 esac
4236
4237 : determine optimization, if desired, or use for debug flag also
4238 case "$optimize" in
4239 ' '|$undef) dflt='none';;
4240 '') dflt='-O';;
4241 *) dflt="$optimize";;
4242 esac
4243 $cat <<EOH
4244
4245 By default, $package compiles with the -O flag to use the optimizer.
4246 Alternately, you might want to use the symbolic debugger, which uses
4247 the -g flag (on traditional Unix systems).  Either flag can be
4248 specified here.  To use neither flag, specify the word "none".
4249
4250 EOH
4251 rp="What optimizer/debugger flag should be used?"
4252 . ./myread
4253 optimize="$ans"
4254 case "$optimize" in
4255 'none') optimize=" ";;
4256 esac
4257
4258 dflt=''
4259 : We will not override a previous value, but we might want to
4260 : augment a hint file
4261 case "$hint" in
4262 default|recommended)
4263         case "$gccversion" in
4264         1*) dflt='-fpcc-struct-return' ;;
4265         esac
4266         case "$optimize" in
4267         *-g*) dflt="$dflt -DDEBUGGING";;
4268         esac
4269         case "$gccversion" in
4270         2*) if test -d /etc/conf/kconfig.d &&
4271                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4272                 then
4273                         dflt="$dflt -posix"
4274                 fi
4275                 ;;
4276         esac
4277         case "$gccversion" in
4278         1*) ;;
4279         2.[0-8]*) ;;
4280         *)      echo " "
4281                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4282                 echo 'int main(void) { return 0; }' > gcctest.c
4283                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4284                         echo "Yes, it does." 2>&1
4285                         case "$ccflags" in
4286                         *strict-aliasing*) 
4287                                 echo "Leaving current flags $ccflags alone." 2>&1
4288                                 ;;
4289                         *) dflt="$dflt -fno-strict-aliasing" ;;
4290                         esac
4291                 else
4292                         echo "Nope, it doesn't, but that's ok." 2>&1
4293                 fi
4294                 ;;
4295         esac
4296         ;;
4297 esac
4298
4299 case "$mips_type" in
4300 *BSD*|'') inclwanted="$locincpth $usrinc";;
4301 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4302 esac
4303 for thisincl in $inclwanted; do
4304         if $test -d $thisincl; then
4305                 if $test x$thisincl != x$usrinc; then
4306                         case "$dflt" in
4307                         *$thisincl*);;
4308                         *) dflt="$dflt -I$thisincl";;
4309                         esac
4310                 fi
4311         fi
4312 done
4313
4314 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4315         xxx=true;
4316 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4317         xxx=true;
4318 else
4319         xxx=false;
4320 fi;
4321 if $xxx; then
4322         case "$dflt" in
4323         *$2*);;
4324         *) dflt="$dflt -D$2";;
4325         esac;
4326 fi'
4327
4328 set signal.h LANGUAGE_C; eval $inctest
4329
4330 case "$usesocks" in
4331 $define)
4332         ccflags="$ccflags -DSOCKS"
4333         ;;
4334 esac
4335
4336 case "$hint" in
4337 default|recommended) dflt="$ccflags $dflt" ;;
4338 *) dflt="$ccflags";;
4339 esac
4340
4341 case "$dflt" in
4342 ''|' ') dflt=none;;
4343 esac
4344 $cat <<EOH
4345
4346 Your C compiler may want other flags.  For this question you should include
4347 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4348 but you should NOT include libraries or ld flags like -lwhatever.  If you
4349 want $package to honor its debug switch, you should include -DDEBUGGING here.
4350 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4351
4352 To use no flags, specify the word "none".
4353
4354 EOH
4355 set X $dflt
4356 shift
4357 dflt=${1+"$@"}
4358 rp="Any additional cc flags?"
4359 . ./myread
4360 case "$ans" in
4361 none) ccflags='';;
4362 *) ccflags="$ans";;
4363 esac
4364
4365 : the following weeds options from ccflags that are of no interest to cpp
4366 cppflags="$ccflags"
4367 case "$gccversion" in
4368 1*) cppflags="$cppflags -D__GNUC__"
4369 esac
4370 case "$mips_type" in
4371 '');;
4372 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4373 esac
4374 case "$cppflags" in
4375 '');;
4376 *)
4377         echo " "
4378         echo "Let me guess what the preprocessor flags are..." >&4
4379         set X $cppflags
4380         shift
4381         cppflags=''
4382         $cat >cpp.c <<'EOM'
4383 #define BLURFL foo
4384
4385 BLURFL xx LFRULB
4386 EOM
4387         previous=''
4388         for flag in $*
4389         do
4390                 case "$flag" in
4391                 -*) ftry="$flag";;
4392                 *) ftry="$previous $flag";;
4393                 esac
4394                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4395                         >cpp1.out 2>/dev/null && \
4396                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4397                         >cpp2.out 2>/dev/null && \
4398                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4399                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4400                 then
4401                         cppflags="$cppflags $ftry"
4402                         previous=''
4403                 else
4404                         previous="$flag"
4405                 fi
4406         done
4407         set X $cppflags
4408         shift
4409         cppflags=${1+"$@"}
4410         case "$cppflags" in
4411         *-*)  echo "They appear to be: $cppflags";;
4412         esac
4413         $rm -f cpp.c cpp?.out
4414         ;;
4415 esac
4416
4417 : flags used in final linking phase
4418 case "$ldflags" in
4419 '') if ./venix; then
4420                 dflt='-i -z'
4421         else
4422                 dflt=''
4423         fi
4424         case "$ccflags" in
4425         *-posix*) dflt="$dflt -posix" ;;
4426         esac
4427         ;;
4428 *) dflt="$ldflags";;
4429 esac
4430
4431 : Try to guess additional flags to pick up local libraries.
4432 for thislibdir in $libpth; do
4433         case " $loclibpth " in
4434         *" $thislibdir "*)
4435                 case "$dflt " in 
4436                 *"-L$thislibdir "*) ;;
4437                 *)  dflt="$dflt -L$thislibdir" ;;
4438                 esac
4439                 ;;
4440         esac
4441 done
4442
4443 case "$dflt" in
4444 '') dflt='none' ;;
4445 esac
4446
4447 $cat <<EOH
4448
4449 Your C linker may need flags.  For this question you should
4450 include -L/whatever and any other flags used by the C linker, but you
4451 should NOT include libraries like -lwhatever.
4452
4453 Make sure you include the appropriate -L/path flags if your C linker
4454 does not normally search all of the directories you specified above,
4455 namely
4456         $libpth
4457 To use no flags, specify the word "none".
4458
4459 EOH
4460
4461 rp="Any additional ld flags (NOT including libraries)?"
4462 . ./myread
4463 case "$ans" in
4464 none) ldflags='';;
4465 *) ldflags="$ans";;
4466 esac
4467 rmlist="$rmlist pdp11"
4468
4469 : coherency check
4470 echo " "
4471 echo "Checking your choice of C compiler and flags for coherency..." >&4
4472 $cat > try.c <<'EOF'
4473 #include <stdio.h>
4474 int main() { printf("Ok\n"); exit(0); }
4475 EOF
4476 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4477 shift
4478 $cat >try.msg <<'EOM'
4479 I've tried to compile and run the following simple program:
4480
4481 EOM
4482 $cat try.c >> try.msg
4483
4484 $cat >> try.msg <<EOM
4485
4486 I used the command:
4487
4488         $*
4489         ./try
4490
4491 and I got the following output:
4492
4493 EOM
4494 dflt=y
4495 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4496         if sh -c './try' >>try.msg 2>&1; then
4497                 xxx=`./try`
4498                 case "$xxx" in
4499                 "Ok") dflt=n ;;
4500                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4501                         case " $libs " in
4502                         *" -lsfio "*)
4503                                 cat >> try.msg <<'EOQS'
4504 If $libs contains -lsfio, and sfio is mis-configured, then it
4505 sometimes (apparently) runs and exits with a 0 status, but with no
4506 output!  It may have to do with sfio's use of _exit vs. exit.
4507
4508 EOQS
4509                                 rp="You have a big problem.  Shall I abort Configure"
4510                                 dflt=y
4511                                 ;;
4512                         esac
4513                         ;;
4514                 esac
4515         else
4516                 echo "The program compiled OK, but exited with status $?." >>try.msg
4517                 rp="You have a problem.  Shall I abort Configure"
4518                 dflt=y
4519         fi
4520 else
4521         echo "I can't compile the test program." >>try.msg
4522         rp="You have a BIG problem.  Shall I abort Configure"
4523         dflt=y
4524 fi
4525 case "$dflt" in
4526 y)
4527         $cat try.msg >&4
4528         case "$knowitall" in
4529         '')
4530                 echo "(The supplied flags or libraries might be incorrect.)"
4531                 ;;
4532         *) dflt=n;;
4533         esac
4534         echo " "
4535         . ./myread
4536         case "$ans" in
4537         n*|N*) ;;
4538         *)      echo "Ok.  Stopping Configure." >&4
4539                 exit 1
4540                 ;;
4541         esac
4542         ;;
4543 n) echo "OK, that should do.";;
4544 esac
4545 $rm -f try try.* core
4546
4547 : determine filename position in cpp output
4548 echo " "
4549 echo "Computing filename position in cpp output for #include directives..." >&4
4550 echo '#include <stdio.h>' > foo.c
4551 $cat >fieldn <<EOF
4552 $startsh
4553 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4554 $grep '^[       ]*#.*stdio\.h' | \
4555 while read cline; do
4556         pos=1
4557         set \$cline
4558         while $test \$# -gt 0; do
4559                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4560                         echo "\$pos"
4561                         exit 0
4562                 fi
4563                 shift
4564                 pos=\`expr \$pos + 1\`
4565         done
4566 done
4567 EOF
4568 chmod +x fieldn
4569 fieldn=`./fieldn`
4570 $rm -f foo.c fieldn
4571 case $fieldn in
4572 '') pos='???';;
4573 1) pos=first;;
4574 2) pos=second;;
4575 3) pos=third;;
4576 *) pos="${fieldn}th";;
4577 esac
4578 echo "Your cpp writes the filename in the $pos field of the line."
4579
4580 : locate header file
4581 $cat >findhdr <<EOF
4582 $startsh
4583 wanted=\$1
4584 name=''
4585 for usrincdir in $usrinc
4586 do
4587         if test -f \$usrincdir/\$wanted; then
4588                 echo "\$usrincdir/\$wanted"
4589                 exit 0
4590         fi
4591 done
4592 awkprg='{ print \$$fieldn }'
4593 echo "#include <\$wanted>" > foo\$\$.c
4594 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4595 $grep "^[       ]*#.*\$wanted" | \
4596 while read cline; do
4597         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4598         case "\$name" in
4599         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4600         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4601         *) exit 2;;
4602         esac;
4603 done;
4604 #
4605 # status = 0: grep returned 0 lines, case statement not executed
4606 # status = 1: headerfile found
4607 # status = 2: while loop executed, no headerfile found
4608 #
4609 status=\$?
4610 $rm -f foo\$\$.c;
4611 if test \$status -eq 1; then
4612         exit 0;
4613 fi
4614 exit 1
4615 EOF
4616 chmod +x findhdr
4617
4618 : define an alternate in-header-list? function
4619 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4620 cont=true; xxf="echo \"<\$1> found.\" >&4";
4621 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4622 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4623 esac;
4624 case $# in 4) instead=instead;; *) instead="at last";; esac;
4625 while $test "$cont"; do
4626         xxx=`./findhdr $1`
4627         var=$2; eval "was=\$$2";
4628         if $test "$xxx" && $test -r "$xxx";
4629         then eval $xxf;
4630         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4631                 cont="";
4632         else eval $xxnf;
4633         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4634         set $yyy; shift; shift; yyy=$@;
4635         case $# in 0) cont="";;
4636         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4637                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4638         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4639                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4640         esac;
4641 done;
4642 while $test "$yyy";
4643 do set $yyy; var=$2; eval "was=\$$2";
4644         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4645         set $yyy; shift; shift; yyy=$@;
4646 done'
4647
4648 : see if this is a malloc.h system
4649 set malloc.h i_malloc
4650 eval $inhdr
4651
4652 : see if stdlib is available
4653 set stdlib.h i_stdlib
4654 eval $inhdr
4655
4656 : determine which malloc to compile in
4657 echo " "
4658 case "$usemymalloc" in
4659 ''|[yY]*|true|$define)  dflt='y' ;;
4660 *)      dflt='n' ;;
4661 esac
4662 rp="Do you wish to attempt to use the malloc that comes with $package?"
4663 . ./myread
4664 usemymalloc="$ans"
4665 case "$ans" in
4666 y*|true)
4667         usemymalloc='y'
4668         mallocsrc='malloc.c'
4669         mallocobj="malloc$_o"
4670         d_mymalloc="$define"
4671         case "$libs" in
4672         *-lmalloc*)
4673                 : Remove malloc from list of libraries to use
4674                 echo "Removing unneeded -lmalloc from library list" >&4
4675                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4676                 shift
4677                 libs="$*"
4678                 echo "libs = $libs" >&4
4679                 ;;
4680         esac
4681         ;;
4682 *)
4683         usemymalloc='n'
4684         mallocsrc=''
4685         mallocobj=''
4686         d_mymalloc="$undef"
4687         ;;
4688 esac
4689
4690 : compute the return types of malloc and free
4691 echo " "
4692 $cat >malloc.c <<END
4693 #$i_malloc I_MALLOC
4694 #$i_stdlib I_STDLIB
4695 #include <stdio.h>
4696 #include <sys/types.h>
4697 #ifdef I_MALLOC
4698 #include <malloc.h>
4699 #endif
4700 #ifdef I_STDLIB
4701 #include <stdlib.h>
4702 #endif
4703 #ifdef TRY_MALLOC
4704 void *malloc();
4705 #endif
4706 #ifdef TRY_FREE
4707 void free();
4708 #endif
4709 END
4710 case "$malloctype" in
4711 '')
4712         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4713                 malloctype='void *'
4714         else
4715                 malloctype='char *'
4716         fi
4717         ;;
4718 esac
4719 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4720
4721 case "$freetype" in
4722 '')
4723         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4724                 freetype='void'
4725         else
4726                 freetype='int'
4727         fi
4728         ;;
4729 esac
4730 echo "Your system uses $freetype free(), it would seem." >&4
4731 $rm -f malloc.[co]
4732 $cat <<EOM
4733
4734 The installation process will also create a directory for
4735 vendor-supplied add-ons.  Vendors who supply perl with their system
4736 may find it convenient to place all vendor-supplied files in this
4737 directory rather than in the main distribution directory.  This will
4738 ease upgrades between binary-compatible maintenance versions of perl.
4739
4740 Of course you may also use these directories in whatever way you see
4741 fit.  For example, you might use them to access modules shared over a
4742 company-wide network.
4743
4744 The default answer should be fine for most people.
4745 This causes further questions about vendor add-ons to be skipped
4746 and no vendor-specific directories will be configured for perl.
4747
4748 EOM
4749 rp='Do you want to configure vendor-specific add-on directories?'
4750 case "$usevendorprefix" in
4751 define|true|[yY]*) dflt=y ;;
4752 *) dflt=n ;;
4753 esac
4754 . ./myread
4755 case "$ans" in
4756 [yY]*)  fn=d~+
4757         rp='Installation prefix to use for vendor-supplied add-ons?'
4758         case "$vendorprefix" in
4759         '') dflt='' ;;
4760         *)  dflt=$vendorprefix ;;
4761         esac
4762         . ./getfile
4763         oldvendorprefix=''
4764         case "$vendorprefix" in