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