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